Skip to content

Commit

Permalink
Make dataset rank absolute
Browse files Browse the repository at this point in the history
  • Loading branch information
coretl committed Nov 16, 2016
1 parent 6251be9 commit b9c8cba
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
12 changes: 9 additions & 3 deletions malcolm/parts/ADCore/hdfwriterpart.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,12 @@ def _create_dataset_infos(self, part_info, generator, filename):
primary_infos = self._get_dataset_infos(part_info, primary=True)

# Add the primary datasource
generator_rank = len(generator.index_dims)
if primary_infos:
dataset_info = primary_infos[0]
ret.append(DatasetProducedInfo(
name="%s.data" % dataset_info.name, filename=filename,
type=dataset_info.type, rank=dataset_info.rank,
type=dataset_info.type, rank=dataset_info.rank + generator_rank,
path="/entry/detector/detector",
uniqueid=uniqueid))

Expand All @@ -69,18 +70,20 @@ def _create_dataset_infos(self, part_info, generator, filename):
assert primary_infos, \
"Needed a primary dataset for secondary"
name = "%s.%s" % (primary_infos[0].name, dataset_info.name)
rank = primary_infos[0].rank + generator_rank
else:
# something like x.value or izero
name = dataset_info.name
rank = dataset_info.rank + generator_rank
ret.append(DatasetProducedInfo(
name=name, filename=filename, type=dataset_info.type,
rank=dataset_info.rank, path=path, uniqueid=uniqueid))
rank=rank, path=path, uniqueid=uniqueid))

# Add any setpoint dimensions
for dim in generator.axes:
ret.append(DatasetProducedInfo(
name="%s.value_set" % dim, filename=filename,
type="position_set", rank=0,
type="position_set", rank=1,
path="/entry/detector/%s_set" % dim, uniqueid=""))
return ret

Expand Down Expand Up @@ -247,6 +250,9 @@ def _make_layout_xml(self, generator, part_info):
source="constant", value="SDS", type="string")
# Now add some additional sources of data
for dataset_info in self._get_dataset_infos(part_info, primary=False):
# if we are a secondary source, use the same rank as the det
if dataset_info.type == "secondary":
dataset_info.rank = primary_rank
attr_el = self._make_nxdata(
dataset_info, entry_el, generator, link=True)
ET.SubElement(attr_el, "dataset", name=dataset_info.name,
Expand Down
12 changes: 6 additions & 6 deletions tests/test_parts/test_ADCore/test_hdfwriterpart.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,33 +47,33 @@ def test_configure(self):
self.assertEquals(infos[0].name, "xspress3.data")
self.assertEquals(infos[0].filename, "file.h5")
self.assertEquals(infos[0].type, "primary")
self.assertEquals(infos[0].rank, 2)
self.assertEquals(infos[0].rank, 4)
self.assertEquals(infos[0].path, "/entry/detector/detector")
self.assertEquals(infos[0].uniqueid,
"/entry/NDAttributes/NDArrayUniqueId")
self.assertEquals(infos[1].name, "xspress3.sum")
self.assertEquals(infos[1].filename, "file.h5")
self.assertEquals(infos[1].type, "secondary")
self.assertEquals(infos[1].rank, 0)
self.assertEquals(infos[1].rank, 4)
self.assertEquals(infos[1].path, "/entry/sum/sum")
self.assertEquals(infos[1].uniqueid,
"/entry/NDAttributes/NDArrayUniqueId")
self.assertEquals(infos[2].name, "energy.value_set")
self.assertEquals(infos[2].filename, "file.h5")
self.assertEquals(infos[2].type, "position_set")
self.assertEquals(infos[2].rank, 0)
self.assertEquals(infos[2].rank, 1)
self.assertEquals(infos[2].path, "/entry/detector/energy_set")
self.assertEquals(infos[2].uniqueid, "")
self.assertEquals(infos[3].name, "x.value_set")
self.assertEquals(infos[3].filename, "file.h5")
self.assertEquals(infos[3].type, "position_set")
self.assertEquals(infos[3].rank, 0)
self.assertEquals(infos[3].rank, 1)
self.assertEquals(infos[3].path, "/entry/detector/x_set")
self.assertEquals(infos[3].uniqueid, "")
self.assertEquals(infos[4].name, "y.value_set")
self.assertEquals(infos[4].filename, "file.h5")
self.assertEquals(infos[4].type, "position_set")
self.assertEquals(infos[4].rank, 0)
self.assertEquals(infos[4].rank, 1)
self.assertEquals(infos[4].path, "/entry/detector/y_set")
self.assertEquals(infos[4].uniqueid, "")
self.assertEqual(task.put.call_args_list, [
Expand Down Expand Up @@ -141,7 +141,7 @@ def test_configure(self):
</group>
<group name="sum">
<attribute name="signal" source="constant" type="string" value="sum" />
<attribute name="axes" source="constant" type="string" value="energy_set,." />
<attribute name="axes" source="constant" type="string" value="energy_set,.,.,." />
<attribute name="NX_class" source="constant" type="string" value="NXdata" />
<attribute name="energy_set_indices" source="constant" type="string" value="0" />
<hardlink name="energy_set" target="/entry/detector/energy_set" />
Expand Down

0 comments on commit b9c8cba

Please sign in to comment.