diff --git a/xtreme_bec/file_writer/xtreme_nexus.py b/xtreme_bec/file_writer/xtreme_nexus.py index 31967bf..507e976 100644 --- a/xtreme_bec/file_writer/xtreme_nexus.py +++ b/xtreme_bec/file_writer/xtreme_nexus.py @@ -187,47 +187,76 @@ class XtremeNeXusFormat(DefaultFormat): self._populate_default_nxdata(data) def _populate_default_nxdata(self, data_group) -> None: - has_otf_data = self.get_entry("otf", signal="edata") is not None + # We populate the NXdata group with the signals by linking to the datasets in collection. + # If the signals are on readout priority "async", we take the async signals, otherwise we take the normal signals. - if has_otf_data: - self.safe_dataset(group=data_group, name="edata", device="otf", signal="edata") - self.safe_dataset(group=data_group, name="data", device="otf", signal="data") - data_group.attrs["signal"] = "data" - self.safe_dataset(group=data_group, name="idata", device="otf", signal="idata") - self.safe_dataset(group=data_group, name="fdata", device="otf", signal="fdata") + signals_is_async = "signals" in self.info_storage["bec"]["metadata"].get( + "readout_priority", {} + ).get("signals", []) - data_group.attrs["axes"] = ["edata"] - auxiliary_signals = [ - signal_name - for signal_name in ("idata", "fdata") - if self.get_entry("otf", signal=signal_name) is not None - ] - if auxiliary_signals: - data_group.attrs["auxiliary_signals"] = auxiliary_signals + if signals_is_async: + prefix = "data_" + else: + prefix = "" - axis_target = self._axis_target() - if axis_target and not has_otf_data: - self.safe_dataset(group=data_group, name="energy", device="energy") - data_group.attrs["axes"] = ["energy"] - elif axis_target: - self.safe_dataset(group=data_group, name="energy", device="energy") + self.safe_dataset(group=data_group, name="s1", device="signals", signal=f"{prefix}s1") + self.safe_dataset(group=data_group, name="s2", device="signals", signal=f"{prefix}s2") + self.safe_dataset(group=data_group, name="s3", device="signals", signal=f"{prefix}s3") + self.safe_dataset(group=data_group, name="s4", device="signals", signal=f"{prefix}s4") + self.safe_dataset(group=data_group, name="s5", device="signals", signal=f"{prefix}s5") + self.safe_dataset(group=data_group, name="s6", device="signals", signal=f"{prefix}s6") + self.safe_dataset(group=data_group, name="s7", device="signals", signal=f"{prefix}s7") + self.safe_dataset( + group=data_group, name="norm_diode", device="signals", signal=f"{prefix}norm_diode" + ) + self.safe_dataset( + group=data_group, name="norm_tey", device="signals", signal=f"{prefix}norm_tey" + ) + self.safe_dataset( + group=data_group, name="energy", device="signals", signal=f"{prefix}energy_cerbk" + ) - found_signal = None - for signal in self._MONITOR_SIGNALS: - if self.get_entry("signals", signal=signal) is None: - continue - self.safe_dataset(group=data_group, name=signal, device="signals", signal=signal) - if found_signal is None: - found_signal = signal + # has_otf_data = self.get_entry("otf", signal="edata") is not None - if found_signal and not has_otf_data: - data_group.attrs["signal"] = found_signal - elif self.get_entry("energy") is not None and not has_otf_data: - data_group.attrs["signal"] = "energy" + # if has_otf_data: + # self.safe_dataset(group=data_group, name="edata", device="otf", signal="edata") + # self.safe_dataset(group=data_group, name="data", device="otf", signal="data") + # data_group.attrs["signal"] = "data" + # self.safe_dataset(group=data_group, name="idata", device="otf", signal="idata") + # self.safe_dataset(group=data_group, name="fdata", device="otf", signal="fdata") - def _axis_target(self) -> str | None: - if self.get_entry("energy") is not None: - return "/entry/instrument/beam_energy/energy" - if self.get_entry("mono") is not None: - return "/entry/instrument/monochromator/energy" - return None + # data_group.attrs["axes"] = ["edata"] + # auxiliary_signals = [ + # signal_name + # for signal_name in ("idata", "fdata") + # if self.get_entry("otf", signal=signal_name) is not None + # ] + # if auxiliary_signals: + # data_group.attrs["auxiliary_signals"] = auxiliary_signals + + # axis_target = self._axis_target() + # if axis_target and not has_otf_data: + # self.safe_dataset(group=data_group, name="energy", device="energy") + # data_group.attrs["axes"] = ["energy"] + # elif axis_target: + # self.safe_dataset(group=data_group, name="energy", device="energy") + + # found_signal = None + # for signal in self._MONITOR_SIGNALS: + # if self.get_entry("signals", signal=signal) is None: + # continue + # self.safe_dataset(group=data_group, name=signal, device="signals", signal=signal) + # if found_signal is None: + # found_signal = signal + + # if found_signal and not has_otf_data: + # data_group.attrs["signal"] = found_signal + # elif self.get_entry("energy") is not None and not has_otf_data: + # data_group.attrs["signal"] = "energy" + + # def _axis_target(self) -> str | None: + # if self.get_entry("energy") is not None: + # return "/entry/instrument/beam_energy/energy" + # if self.get_entry("mono") is not None: + # return "/entry/instrument/monochromator/energy" + # return None