From 02e6462ea1344478caffbc77dc261efe4bcdd742 Mon Sep 17 00:00:00 2001 From: gac-x01da Date: Wed, 10 Sep 2025 16:54:56 +0200 Subject: [PATCH] updated trigger signals of mono --- debye_bec/devices/mo1_bragg/mo1_bragg.py | 71 ++++++++++------ .../devices/mo1_bragg/mo1_bragg_devices.py | 8 ++ debye_bec/scans/mono_bragg_scans.py | 82 ++++++++++--------- 3 files changed, 95 insertions(+), 66 deletions(-) diff --git a/debye_bec/devices/mo1_bragg/mo1_bragg.py b/debye_bec/devices/mo1_bragg/mo1_bragg.py index 1daec65..ea163ba 100644 --- a/debye_bec/devices/mo1_bragg/mo1_bragg.py +++ b/debye_bec/devices/mo1_bragg/mo1_bragg.py @@ -56,16 +56,18 @@ class ScanParameter(BaseModel): scan_time: float | None = Field(None, description="Scan time for a half oscillation") scan_duration: float | None = Field(None, description="Duration of the scan") - xrd_enable_low: bool | None = Field( - None, description="XRD enabled for low, should be PV trig_ena_lo_enum" + break_enable_low: bool | None = Field( + None, description="Break enabled for low, should be PV trig_ena_lo_enum" ) # trig_enable_low: bool = None - xrd_enable_high: bool | None = Field( - None, description="XRD enabled for high, should be PV trig_ena_hi_enum" + break_enable_high: bool | None = Field( + None, description="Break enabled for high, should be PV trig_ena_hi_enum" ) # trig_enable_high: bool = None - exp_time_low: float | None = Field(None, description="Exposure time low energy/angle") - exp_time_high: float | None = Field(None, description="Exposure time high energy/angle") + break_time_low: float | None = Field(None, description="Break time low energy/angle") + break_time_high: float | None = Field(None, description="Break time high energy/angle") cycle_low: int | None = Field(None, description="Cycle for low energy/angle") cycle_high: int | None = Field(None, description="Cycle for high energy/angle") + exp_time: float | None = Field(None, description="XRD trigger period") + n_of_trigger: int | None = Field(None, description="Amount of XRD triggers") start: float | None = Field(None, description="Start value for energy/angle") stop: float | None = Field(None, description="Stop value for energy/angle") p_kink: float | None = Field(None, description="P Kink") @@ -140,10 +142,12 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): self.set_trig_settings( enable_low=False, enable_high=False, - exp_time_low=0, - exp_time_high=0, + break_time_low=0, + break_time_high=0, cycle_low=0, cycle_high=0, + exp_time=0, + n_of_trigger=0, ) self.set_scan_control_settings( mode=ScanControlMode.SIMPLE, scan_duration=self.scan_parameter.scan_duration @@ -155,12 +159,14 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): scan_time=self.scan_parameter.scan_time, ) self.set_trig_settings( - enable_low=self.scan_parameter.xrd_enable_low, # enable_low=self.scan_parameter.trig_enable_low, - enable_high=self.scan_parameter.xrd_enable_high, # enable_high=self.scan_parameter.trig_enable_high, - exp_time_low=self.scan_parameter.exp_time_low, - exp_time_high=self.scan_parameter.exp_time_high, + enable_low=self.scan_parameter.break_enable_low, + enable_high=self.scan_parameter.break_enable_high, + break_time_low=self.scan_parameter.break_time_low, + break_time_high=self.scan_parameter.break_time_high, cycle_low=self.scan_parameter.cycle_low, cycle_high=self.scan_parameter.cycle_high, + exp_time=self.scan_parameter.exp_time, + n_of_trigger=self.scan_parameter.n_of_trigger, ) self.set_scan_control_settings( mode=ScanControlMode.SIMPLE, scan_duration=self.scan_parameter.scan_duration @@ -176,10 +182,12 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): self.set_trig_settings( enable_low=False, enable_high=False, - exp_time_low=0, - exp_time_high=0, + break_time_low=0, + break_time_high=0, cycle_low=0, cycle_high=0, + exp_time=0, + n_of_trigger=0, ) self.set_scan_control_settings( mode=ScanControlMode.ADVANCED, scan_duration=self.scan_parameter.scan_duration @@ -193,12 +201,14 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): e_kink=self.scan_parameter.e_kink, ) self.set_trig_settings( - enable_low=self.scan_parameter.xrd_enable_low, # enable_low=self.scan_parameter.trig_enable_low, - enable_high=self.scan_parameter.xrd_enable_high, # enable_high=self.scan_parameter.trig_enable_high, - exp_time_low=self.scan_parameter.exp_time_low, - exp_time_high=self.scan_parameter.exp_time_high, + enable_low=self.scan_parameter.break_enable_low, + enable_high=self.scan_parameter.break_enable_high, + break_time_low=self.scan_parameter.break_time_low, + break_time_high=self.scan_parameter.break_time_high, cycle_low=self.scan_parameter.cycle_low, cycle_high=self.scan_parameter.cycle_high, + exp_time=self.scan_parameter.exp_time, + n_of_trigger=self.scan_parameter.n_of_trigger, ) self.set_scan_control_settings( mode=ScanControlMode.ADVANCED, scan_duration=self.scan_parameter.scan_duration @@ -391,22 +401,25 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): self, enable_low: bool, enable_high: bool, - exp_time_low: int, - exp_time_high: int, + break_time_low: float, + break_time_high: float, cycle_low: int, cycle_high: int, + exp_time: float, + n_of_trigger: int, + ) -> None: """Set TRIG settings for the upcoming scan. Args: enable_low (bool): Enable TRIG for low energy/angle enable_high (bool): Enable TRIG for high energy/angle - num_trigger_low (int): Number of triggers for low energy/angle - num_trigger_high (int): Number of triggers for high energy/angle - exp_time_low (int): Exposure time for low energy/angle - exp_time_high (int): Exposure time for high energy/angle + break_time_low (float): Exposure time for low energy/angle + break_time_high (float): Exposure time for high energy/angle cycle_low (int): Cycle for low energy/angle cycle_high (int): Cycle for high energy/angle + exp_time (float): Length of 1 trigger period in seconds + n_of_trigger (int): Amount of triggers to be fired during brake """ status_list = [] @@ -417,10 +430,10 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): status_list.append(self.scan_settings.trig_ena_lo_enum.set(int(enable_low))) self.cancel_on_stop(status_list[-1]) - status_list.append(self.scan_settings.trig_time_hi.set(exp_time_high)) + status_list.append(self.scan_settings.trig_time_hi.set(break_time_high)) self.cancel_on_stop(status_list[-1]) - status_list.append(self.scan_settings.trig_time_lo.set(exp_time_low)) + status_list.append(self.scan_settings.trig_time_lo.set(break_time_low)) self.cancel_on_stop(status_list[-1]) status_list.append(self.scan_settings.trig_every_n_hi.set(cycle_high)) @@ -429,6 +442,12 @@ class Mo1Bragg(PSIDeviceBase, Mo1BraggPositioner): status_list.append(self.scan_settings.trig_every_n_lo.set(cycle_low)) self.cancel_on_stop(status_list[-1]) + status_list.append(self.trigger_settings.xrd_trig_period.set(exp_time)) + self.cancel_on_stop(status_list[-1]) + + status_list.append(self.trigger_settings.xrd_n_of_trig.set(n_of_trigger)) + self.cancel_on_stop(status_list[-1]) + for s in status_list: s.wait(timeout=self.timeout_for_pvwait) diff --git a/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py b/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py index 0977c17..6a4fe1a 100644 --- a/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py +++ b/debye_bec/devices/mo1_bragg/mo1_bragg_devices.py @@ -139,21 +139,29 @@ class Mo1TriggerSettings(Device): xrd_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_src_ENUM", kind="config") xrd_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_mode_ENUM", kind="config") xrd_trig_len = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_len", kind="config") + xrd_trig_period = Cpt(EpicsSignalWithRBV, suffix="xrd_trig_period", kind="config") + xrd_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="xrd_n_of_trig", kind="config") xrd_trig_req = Cpt(EpicsSignal, suffix="xrd_trig_req", kind="config") falcon_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_src_ENUM", kind="config") falcon_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_mode_ENUM", kind="config") falcon_trig_len = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_len", kind="config") + falcon_trig_period = Cpt(EpicsSignalWithRBV, suffix="falcon_trig_period", kind="config") + falcon_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="falcon_n_of_trig", kind="config") falcon_trig_req = Cpt(EpicsSignal, suffix="falcon_trig_req", kind="config") univ1_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_src_ENUM", kind="config") univ1_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_mode_ENUM", kind="config") univ1_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_len", kind="config") + univ1_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ1_trig_period", kind="config") + univ1_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ1_n_of_trig", kind="config") univ1_trig_req = Cpt(EpicsSignal, suffix="univ1_trig_req", kind="config") univ2_trig_src_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_src_ENUM", kind="config") univ2_trig_mode_enum = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_mode_ENUM", kind="config") univ2_trig_len = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_len", kind="config") + univ2_trig_period = Cpt(EpicsSignalWithRBV, suffix="univ2_trig_period", kind="config") + univ2_n_of_trig = Cpt(EpicsSignalWithRBV, suffix="univ2_n_of_trig", kind="config") univ2_trig_req = Cpt(EpicsSignal, suffix="univ2_trig_req", kind="config") diff --git a/debye_bec/scans/mono_bragg_scans.py b/debye_bec/scans/mono_bragg_scans.py index 1dc131b..03c234b 100644 --- a/debye_bec/scans/mono_bragg_scans.py +++ b/debye_bec/scans/mono_bragg_scans.py @@ -108,8 +108,9 @@ class XASSimpleScanWithXRD(XASSimpleScan): gui_config = { "Movement Parameters": ["start", "stop"], "Scan Parameters": ["scan_time", "scan_duration"], - "Low Energy Range": ["xrd_enable_low", "num_trigger_low", "exp_time_low", "cycle_low"], - "High Energy Range": ["xrd_enable_high", "num_trigger_high", "exp_time_high", "cycle_high"], + "Low Energy Break": ["break_enable_low", "break_time_low", "cycle_low"], + "High Energy Break": ["break_enable_high", "break_time_high", "cycle_high"], + "XRD Triggers": ["exp_time", "n_of_trigger"], } def __init__( @@ -118,14 +119,14 @@ class XASSimpleScanWithXRD(XASSimpleScan): stop: float, scan_time: float, scan_duration: float, - xrd_enable_low: bool, - num_trigger_low: int, - exp_time_low: float, + break_enable_low: bool, + break_time_low: float, cycle_low: int, - xrd_enable_high: bool, - num_trigger_high: int, - exp_time_high: float, + break_enable_high: bool, + break_time_high: float, cycle_high: float, + exp_time: float, + n_of_trigger: int, motor: DeviceBase = "mo1_bragg", **kwargs, ): @@ -138,16 +139,16 @@ class XASSimpleScanWithXRD(XASSimpleScan): stop (float): Stop energy for the scan. scan_time (float): Time for one oscillation . scan_duration (float): Total duration of the scan. - xrd_enable_low (bool): Enable XRD triggering for the low energy range. - num_trigger_low (int): Number of triggers for the low energy range. - exp_time_low (float): Exposure time for the low energy range. + break_enable_low (bool): Enable breaks for the low energy range. + break_time_low (float): Break time for the low energy range. cycle_low (int): Specify how often the triggers should be considered, every nth cycle for low - xrd_enable_high (bool): Enable XRD triggering for the high energy range. - num_trigger_high (int): Number of triggers for the high energy range. - exp_time_high (float): Exposure time for the high energy range. + break_enable_high (bool): Enable breaks for the high energy range. + break_time_high (float): Break time for the high energy range. cycle_high (int): Specify how often the triggers should be considered, every nth cycle for high + exp_time (float): Length of 1 trigger period in seconds + n_of_trigger (int): Amount of triggers to be fired during break motor (DeviceBase, optional): Motor device to be used for the scan. Defaults to "mo1_bragg". @@ -162,14 +163,14 @@ class XASSimpleScanWithXRD(XASSimpleScan): motor=motor, **kwargs, ) - self.xrd_enable_low = xrd_enable_low - self.num_trigger_low = num_trigger_low - self.exp_time_low = exp_time_low + self.break_enable_low = break_enable_low + self.break_time_low = break_time_low self.cycle_low = cycle_low - self.xrd_enable_high = xrd_enable_high - self.num_trigger_high = num_trigger_high - self.exp_time_high = exp_time_high + self.break_enable_high = break_enable_high + self.break_time_high = break_time_high self.cycle_high = cycle_high + self.exp_time = exp_time + self.n_of_trigger = n_of_trigger class XASAdvancedScan(XASSimpleScan): @@ -233,8 +234,9 @@ class XASAdvancedScanWithXRD(XASAdvancedScan): "Movement Parameters": ["start", "stop"], "Scan Parameters": ["scan_time", "scan_duration"], "Spline Parameters": ["p_kink", "e_kink"], - "Low Energy Range": ["xrd_enable_low", "num_trigger_low", "exp_time_low", "cycle_low"], - "High Energy Range": ["xrd_enable_high", "num_trigger_high", "exp_time_high", "cycle_high"], + "Low Energy Break": ["break_enable_low", "break_time_low", "cycle_low"], + "High Energy Break": ["break_enable_high", "break_time_high", "cycle_high"], + "XRD Triggers": ["exp_time", "n_of_trigger"], } def __init__( @@ -245,14 +247,14 @@ class XASAdvancedScanWithXRD(XASAdvancedScan): scan_duration: float, p_kink: float, e_kink: float, - xrd_enable_low: bool, - num_trigger_low: int, - exp_time_low: float, + break_enable_low: bool, + break_time_low: float, cycle_low: int, - xrd_enable_high: bool, - num_trigger_high: int, - exp_time_high: float, + break_enable_high: bool, + break_time_high: float, cycle_high: float, + exp_time: float, + n_of_trigger: int, motor: DeviceBase = "mo1_bragg", **kwargs, ): @@ -270,16 +272,16 @@ class XASAdvancedScanWithXRD(XASAdvancedScan): scan_duration (float): Total duration of the scan. p_kink (float): Position of kink. e_kink (float): Energy of the kink. - xrd_enable_low (bool): Enable XRD triggering for the low energy range. - num_trigger_low (int): Number of triggers for the low energy range. - exp_time_low (float): Exposure time for the low energy range. + break_enable_low (bool): Enable breaks for the low energy range. + break_time_low (float): Break time for the low energy range. cycle_low (int): Specify how often the triggers should be considered, every nth cycle for low - xrd_enable_high (bool): Enable XRD triggering for the high energy range. - num_trigger_high (int): Number of triggers for the high energy range. - exp_time_high (float): Exposure time for the high energy range. + break_enable_high (bool): Enable breaks for the high energy range. + break_time_high (float): Break time for the high energy range. cycle_high (int): Specify how often the triggers should be considered, every nth cycle for high + exp_time (float): Length of 1 trigger period in seconds + n_of_trigger (int): Amount of triggers to be fired during break motor (DeviceBase, optional): Motor device to be used for the scan. Defaults to "mo1_bragg". @@ -298,11 +300,11 @@ class XASAdvancedScanWithXRD(XASAdvancedScan): ) self.p_kink = p_kink self.e_kink = e_kink - self.xrd_enable_low = xrd_enable_low - self.num_trigger_low = num_trigger_low - self.exp_time_low = exp_time_low + self.break_enable_low = break_enable_low + self.break_time_low = break_time_low self.cycle_low = cycle_low - self.xrd_enable_high = xrd_enable_high - self.num_trigger_high = num_trigger_high - self.exp_time_high = exp_time_high + self.break_enable_high = break_enable_high + self.break_time_high = break_time_high self.cycle_high = cycle_high + self.exp_time = exp_time + self.n_of_trigger = n_of_trigger