From 9fc449aae1d2472a3e5dda3694fec6b545e754c9 Mon Sep 17 00:00:00 2001 From: x10da Date: Wed, 13 May 2026 12:14:00 +0200 Subject: [PATCH] Added additional signals for offsets and fluorescence on nidaq and mono --- .../devices/mo1_bragg/mo1_bragg_devices.py | 15 ++++++++ superxas_bec/devices/nidaq/nidaq.py | 9 +++++ .../file_writer/superxas_nexus_structure.py | 38 +++++++++++++++++-- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/superxas_bec/devices/mo1_bragg/mo1_bragg_devices.py b/superxas_bec/devices/mo1_bragg/mo1_bragg_devices.py index 571661d..7fafbe0 100644 --- a/superxas_bec/devices/mo1_bragg/mo1_bragg_devices.py +++ b/superxas_bec/devices/mo1_bragg/mo1_bragg_devices.py @@ -68,6 +68,12 @@ class Mo1BraggCrystal(Device): bragg_off_si111 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si111", kind="config") bragg_off_si311 = Cpt(EpicsSignalWithRBV, suffix="bragg_off_si311", kind="config") + phi_off_si111 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si111", kind="config") + phi_off_si311 = Cpt(EpicsSignalWithRBV, suffix="phi_off_si311", kind="config") + azm_off_si111 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si111", kind="config") + azm_off_si311 = Cpt(EpicsSignalWithRBV, suffix="azm_off_si311", kind="config") + miscut_si111 = Cpt(EpicsSignalWithRBV, suffix="miscut_si111", kind="config") + miscut_si311 = Cpt(EpicsSignalWithRBV, suffix="miscut_si311", kind="config") xtal_enum = Cpt(EpicsSignalWithRBV, suffix="xtal_ENUM", kind="config") d_spacing_si111 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si111", kind="config") d_spacing_si311 = Cpt(EpicsSignalWithRBV, suffix="d_spacing_si311", kind="config") @@ -78,6 +84,15 @@ class Mo1BraggCrystal(Device): current_bragg_off = Cpt( EpicsSignalRO, suffix="current_bragg_off_RBV", kind="normal", auto_monitor=True ) + current_phi_off = Cpt( + EpicsSignalRO, suffix="current_phi_off_RBV", kind="normal", auto_monitor=True + ) + current_azm_off = Cpt( + EpicsSignalRO, suffix="current_azm_off_RBV", kind="normal", auto_monitor=True + ) + current_miscut = Cpt( + EpicsSignalRO, suffix="current_miscut_RBV", kind="normal", auto_monitor=True + ) current_xtal = Cpt( EpicsSignalRO, suffix="current_xtal_ENUM_RBV", kind="normal", auto_monitor=True ) diff --git a/superxas_bec/devices/nidaq/nidaq.py b/superxas_bec/devices/nidaq/nidaq.py index 3e4486c..17fcbc4 100644 --- a/superxas_bec/devices/nidaq/nidaq.py +++ b/superxas_bec/devices/nidaq/nidaq.py @@ -38,6 +38,9 @@ class NidaqControl(Device): smpl_abs = Cpt( SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream sample absorption" ) + smpl_fluo = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream sample fluorescence" + ) ref_abs = Cpt( SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream reference absorption" ) @@ -394,6 +397,12 @@ class NidaqControl(Device): smpl_abs_de = Cpt(EpicsSignal, suffix="NIDAQ-smpl_abs_de", kind=Kind.config, auto_monitor=True) smpl_abs_de_string = Cpt(EpicsSignal, suffix="NIDAQ-smpl_abs_de", kind=Kind.config, string=True, auto_monitor=True) + smpl_fluo_no = Cpt(EpicsSignal, suffix="NIDAQ-smpl_fluo_no", kind=Kind.config, auto_monitor=True) + smpl_fluo_no_string = Cpt(EpicsSignal, suffix="NIDAQ-smpl_fluo_no", kind=Kind.config, string=True, auto_monitor=True) + + smpl_fluo_de = Cpt(EpicsSignal, suffix="NIDAQ-smpl_fluo_de", kind=Kind.config, auto_monitor=True) + smpl_fluo_de_string = Cpt(EpicsSignal, suffix="NIDAQ-smpl_fluo_de", kind=Kind.config, string=True, auto_monitor=True) + ref_abs_no = Cpt(EpicsSignal, suffix="NIDAQ-ref_abs_no", kind=Kind.config, auto_monitor=True) ref_abs_no_string = Cpt(EpicsSignal, suffix="NIDAQ-ref_abs_no", kind=Kind.config, string=True, auto_monitor=True) diff --git a/superxas_bec/file_writer/superxas_nexus_structure.py b/superxas_bec/file_writer/superxas_nexus_structure.py index a77e89e..54bf6b8 100644 --- a/superxas_bec/file_writer/superxas_nexus_structure.py +++ b/superxas_bec/file_writer/superxas_nexus_structure.py @@ -71,8 +71,30 @@ class SuperXASNexusStructure(DefaultFormat): name="bragg_offset", target="/entry/collection/devices/mo1_bragg/mo1_bragg_crystal_current_bragg_off/value", ) - bragg_offset.attrs["NX_class"] = "NX_FLOAT" - bragg_offset.attrs["units"] = "degree" + bragg_offset.attrs["NX_class"] = "NX_FLOAT" + bragg_offset.attrs["units"] = "degree" + + phi_offset = crystal.create_soft_link( + name="phi_offset", + target="/entry/collection/devices/mo1_bragg/mo1_bragg_crystal_current_phi_off/value", + ) + phi_offset.attrs["NX_class"] = "NX_FLOAT" + phi_offset.attrs["units"] = "degree" + + azm_offset = crystal.create_soft_link( + name="azm_offset", + target="/entry/collection/devices/mo1_bragg/mo1_bragg_crystal_current_azm_off/value", + ) + azm_offset.attrs["NX_class"] = "NX_FLOAT" + azm_offset.attrs["units"] = "degree" + + miscut = crystal.create_soft_link( + name="miscut", + target="/entry/collection/devices/mo1_bragg/mo1_bragg_crystal_current_miscut/value", + ) + miscut.attrs["NX_class"] = "NX_FLOAT" + miscut.attrs["units"] = "degree" + ################### ### cm mirror specific information @@ -293,11 +315,21 @@ class SuperXASNexusStructure(DefaultFormat): main_data.create_soft_link(name="mu_sample", target="/entry/collection/readout_groups/async/nidaq/nidaq_smpl_abs/value") + ################## + ## fluo sample, test whether the signal exists. how to check from config? + ################### + + if (int(add_chans_bits) & (1<<1)) !=0: + mu_sample = main_data.create_group(name="fluo_sample") + mu_sample.attrs["NX_class"] = "NXdata" + + main_data.create_soft_link(name="fluo_sample", target="/entry/collection/readout_groups/async/nidaq/nidaq_smpl_fluo/value") + ################## ## mu reference, test whether the signal exists. how to check from config? ################### - if (int(add_chans_bits) & (1<<1)) !=0: + if (int(add_chans_bits) & (1<<2)) !=0: mu_reference = main_data.create_group(name="mu_reference") mu_reference.attrs["NX_class"] = "NXdata" -- 2.52.0