From 55eb45682ed5bbc3b280b4926add6dfca9aac1ae Mon Sep 17 00:00:00 2001 From: x01da Date: Mon, 24 Aug 2026 08:39:11 +0200 Subject: [PATCH] wip --- debye_bec/scans/xas_simple_scan.py | 92 +++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/debye_bec/scans/xas_simple_scan.py b/debye_bec/scans/xas_simple_scan.py index 1b381df..32c9c5d 100644 --- a/debye_bec/scans/xas_simple_scan.py +++ b/debye_bec/scans/xas_simple_scan.py @@ -35,7 +35,22 @@ class XasSimpleScan(ScanBase): gui_config = { "Movement Parameters": ["start", "stop"], "Scan Parameters": ["scan_time", "scan_duration", "monitored_readout_cycle"], - "Universal Trigger 1": ["univ1_trig_source", "univ1_trig_mode"], + "Universal Trigger 1": [ + "univ1_trig_source", + "univ1_trig_mode", + "univ1_trig_delay", + "univ1_trig_pulselen", + "univ1_trig_period", + "univ1_trig_ntrig", + ], + "Universal Trigger 2": [ + "univ2_trig_source", + "univ2_trig_mode", + "univ2_trig_delay", + "univ2_trig_pulselen", + "univ2_trig_period", + "univ2_trig_ntrig", + ], } def __init__( @@ -47,6 +62,16 @@ class XasSimpleScan(ScanBase): scan_duration: Annotated[float, ScanArgument(display_name="Scan Duration", description="Total scan duration.", units=Units.s, ge=0.05)], univ1_trig_source: Annotated[Literal['EPICS', 'INPOS', 'SCAN'], ScanArgument(display_name="Source", description="Universal trigger 1 source")], univ1_trig_mode: Annotated[Literal['PULSE', 'CONDITION'], ScanArgument(display_name="Mode", description="Universal trigger 1 mode")], + univ1_trig_delay: Annotated[float, ScanArgument(display_name="Delay", description="Start delay for a trigger sequence", units=Units.s, ge=0)], + univ1_trig_pulselen: Annotated[float, ScanArgument(display_name="Pulse length", description="Pulse length of trigger", units=Units.s, ge=0)], + univ1_trig_period: Annotated[float, ScanArgument(display_name="Period", description="Period of a trigger", units=Units.s, ge=0)], + univ1_trig_ntrig: Annotated[int, ScanArgument(display_name="N of triggers", description="Number of triggers to be fired", ge=0)], + univ2_trig_source: Annotated[Literal['EPICS', 'INPOS', 'SCAN'], ScanArgument(display_name="Source", description="Universal trigger 2 source")], + univ2_trig_mode: Annotated[Literal['PULSE', 'CONDITION'], ScanArgument(display_name="Mode", description="Universal trigger 2 mode")], + univ2_trig_delay: Annotated[float, ScanArgument(display_name="Delay", description="Start delay for a trigger sequence", units=Units.s, ge=0)], + univ2_trig_pulselen: Annotated[float, ScanArgument(display_name="Pulse length", description="Pulse length of trigger", units=Units.s, ge=0)], + univ2_trig_period: Annotated[float, ScanArgument(display_name="Period", description="Period of a trigger", units=Units.s, ge=0)], + univ2_trig_ntrig: Annotated[int, ScanArgument(display_name="N of triggers", description="Number of triggers to be fired", ge=0)], motor: Annotated[DeviceBase | None, ScanArgument(display_name="Motor", description="Bragg motor device.")] = None, daq: Annotated[DeviceBase | None, ScanArgument(display_name="DAQ", description="NIDAQ device.")] = None, monitored_readout_cycle: Annotated[float, ScanArgument(display_name="Monitored Readout Cycle", description="Delay between monitored readouts.",units=Units.s, gt=0)] = 1, @@ -77,7 +102,22 @@ class XasSimpleScan(ScanBase): self.daq = daq if daq is not None else self.dev["nidaq"] self.monitored_readout_cycle = monitored_readout_cycle self.positions = np.array([self.start, self.stop], dtype=float) - self.univ1_trig = {"source": univ1_trig_source, "mode": univ1_trig_mode} + self.univ1_trig = { + "source": univ1_trig_source, + "mode": univ1_trig_mode, + "delay": univ1_trig_delay, + "pulselen": univ1_trig_pulselen, + "period": univ1_trig_period, + "ntrig": univ1_trig_ntrig, + } + self.univ2_trig = { + "source": univ2_trig_source, + "mode": univ2_trig_mode, + "delay": univ2_trig_delay, + "pulselen": univ2_trig_pulselen, + "period": univ2_trig_period, + "ntrig": univ2_trig_ntrig, + } # We pass on the arguments as "additional_scan_parameters" in the scan info self.update_scan_info( @@ -189,6 +229,22 @@ class XasSimpleScanWithXrd(XasSimpleScan): "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"], + "Universal Trigger 1": [ + "univ1_trig_source", + "univ1_trig_mode", + "univ1_trig_delay", + "univ1_trig_pulselen", + "univ1_trig_period", + "univ1_trig_ntrig", + ], + "Universal Trigger 2": [ + "univ2_trig_source", + "univ2_trig_mode", + "univ2_trig_delay", + "univ2_trig_pulselen", + "univ2_trig_period", + "univ2_trig_ntrig", + ], } def __init__( @@ -242,6 +298,22 @@ class XasAdvancedScan(XasSimpleScan): "Movement Parameters": ["start", "stop"], "Scan Parameters": ["scan_time", "scan_duration", "monitored_readout_cycle"], "Spline Parameters": ["p_kink", "e_kink"], + "Universal Trigger 1": [ + "univ1_trig_source", + "univ1_trig_mode", + "univ1_trig_delay", + "univ1_trig_pulselen", + "univ1_trig_period", + "univ1_trig_ntrig", + ], + "Universal Trigger 2": [ + "univ2_trig_source", + "univ2_trig_mode", + "univ2_trig_delay", + "univ2_trig_pulselen", + "univ2_trig_period", + "univ2_trig_ntrig", + ], } def __init__( @@ -282,6 +354,22 @@ class XasAdvancedScanWithXrd(XasAdvancedScan): "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"], + "Universal Trigger 1": [ + "univ1_trig_source", + "univ1_trig_mode", + "univ1_trig_delay", + "univ1_trig_pulselen", + "univ1_trig_period", + "univ1_trig_ntrig", + ], + "Universal Trigger 2": [ + "univ2_trig_source", + "univ2_trig_mode", + "univ2_trig_delay", + "univ2_trig_pulselen", + "univ2_trig_period", + "univ2_trig_ntrig", + ], } def __init__(