configure mono trigger signal

This commit is contained in:
gac-x01da
2025-09-11 11:19:29 +02:00
committed by appel_c
parent bb25fb9c5f
commit 2ec026d4c1

View File

@@ -83,12 +83,18 @@ class TRIGGERMODE(int, enum.Enum):
MULT_TRIGGER = 3
ALIGNMENT = 4
class MONO_TRIGGER_SOURCE(int, enum.Enum):
class MONOTRIGGERSOURCE(int, enum.Enum):
""""Mono XRD trigger source"""
EPICS = 0
INPOS = 1
class MONOTRIGGERMODE(int, enum.Enum):
""""Mono XRD trigger mode"""
PULSE = 0
CONDITION = 1
def description(self) -> str:
"""Return a description of the trigger mode."""
@@ -181,8 +187,24 @@ class Pilatus(PSIDeviceBase, ADBase):
write_pv="X01DA-OP-MO1:BRAGG:xrd_trig_len",
add_prefix=("a",),
kind=Kind.omitted,
doc="Trigger Period in seconds",
)
trigger_period = Cpt(
EpicsSignal,
read_pv="X01DA-OP-MO1:BRAGG:xrd_trig_period_RBV",
write_pv="X01DA-OP-MO1:BRAGG:xrd_trig_period",
add_prefix=("a",),
kind=Kind.omitted,
doc="Trigger Pulse Length in seconds",
)
trigger_n_of = Cpt(
EpicsSignal,
read_pv="X01DA-OP-MO1:BRAGG:xrd_n_of_trig_RBV",
write_pv="X01DA-OP-MO1:BRAGG:xrd_n_of_trig",
add_prefix=("a",),
kind=Kind.omitted,
doc="Number of trigger to generate for each request",
)
preview = Cpt(
PreviewSignal,
name="preview",
@@ -453,15 +475,21 @@ class Pilatus(PSIDeviceBase, ADBase):
self.n_images = (total_trig_lo + total_trig_hi) * self.scan_parameter.n_of_trigger
exp_time = self.scan_parameter.exp_time
self.trigger_source.set(MONO_TRIGGER_SOURCE.INPOS).wait(5)
self.trigger_source.set(MONOTRIGGERSOURCE.INPOS).wait(5)
self.trigger_n_of.set(self.scan_parameter.n_of_trigger).wait(5)
elif scan_msg.scan_type == 'step':
self.n_images = scan_msg.num_points * scan_msg.scan_parameters.get("frames_per_trigger", 1)
exp_time = scan_msg.scan_parameters.get("exp_time")
self.trigger_source.set(MONO_TRIGGER_SOURCE.EPICS).wait(5)
self.trigger_source.set(MONOTRIGGERSOURCE.EPICS).wait(5)
self.trigger_n_of.set(1).wait(5) # BEC will trigger each acquisition
else:
return None
# Common settings
self.trigger_mode.set(MONOTRIGGERMODE.PULSE).wait(5)
self.trigger_period.set(exp_time).wait(5)
self.trigger_pulse_length.set(0.005).wait(5) # Pulse length of 5 ms enough for Pilatus and NIDAQ
if exp_time - self._readout_time <= 0:
raise ValueError((f"Exposure time {exp_time} is too short ",
f"for Pilatus with readout_time {self._readout_time}."