configure mono trigger signal
This commit is contained in:
@@ -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}."
|
||||
|
||||
Reference in New Issue
Block a user