diff --git a/malcolm/parts/ADCore/hdfwriterpart.py b/malcolm/parts/ADCore/hdfwriterpart.py index bb165cb3c..37480833d 100644 --- a/malcolm/parts/ADCore/hdfwriterpart.py +++ b/malcolm/parts/ADCore/hdfwriterpart.py @@ -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)) @@ -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 @@ -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, diff --git a/tests/test_parts/test_ADCore/test_hdfwriterpart.py b/tests/test_parts/test_ADCore/test_hdfwriterpart.py index a033251b4..7896a4aff 100644 --- a/tests/test_parts/test_ADCore/test_hdfwriterpart.py +++ b/tests/test_parts/test_ADCore/test_hdfwriterpart.py @@ -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, [ @@ -141,7 +141,7 @@ def test_configure(self): - +