configure mono trigger signal
This commit is contained in:
@@ -83,12 +83,18 @@ class TRIGGERMODE(int, enum.Enum):
|
|||||||
MULT_TRIGGER = 3
|
MULT_TRIGGER = 3
|
||||||
ALIGNMENT = 4
|
ALIGNMENT = 4
|
||||||
|
|
||||||
class MONO_TRIGGER_SOURCE(int, enum.Enum):
|
class MONOTRIGGERSOURCE(int, enum.Enum):
|
||||||
""""Mono XRD trigger source"""
|
""""Mono XRD trigger source"""
|
||||||
|
|
||||||
EPICS = 0
|
EPICS = 0
|
||||||
INPOS = 1
|
INPOS = 1
|
||||||
|
|
||||||
|
class MONOTRIGGERMODE(int, enum.Enum):
|
||||||
|
""""Mono XRD trigger mode"""
|
||||||
|
|
||||||
|
PULSE = 0
|
||||||
|
CONDITION = 1
|
||||||
|
|
||||||
|
|
||||||
def description(self) -> str:
|
def description(self) -> str:
|
||||||
"""Return a description of the trigger mode."""
|
"""Return a description of the trigger mode."""
|
||||||
@@ -181,8 +187,24 @@ class Pilatus(PSIDeviceBase, ADBase):
|
|||||||
write_pv="X01DA-OP-MO1:BRAGG:xrd_trig_len",
|
write_pv="X01DA-OP-MO1:BRAGG:xrd_trig_len",
|
||||||
add_prefix=("a",),
|
add_prefix=("a",),
|
||||||
kind=Kind.omitted,
|
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",
|
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(
|
preview = Cpt(
|
||||||
PreviewSignal,
|
PreviewSignal,
|
||||||
name="preview",
|
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
|
self.n_images = (total_trig_lo + total_trig_hi) * self.scan_parameter.n_of_trigger
|
||||||
exp_time = self.scan_parameter.exp_time
|
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':
|
elif scan_msg.scan_type == 'step':
|
||||||
self.n_images = scan_msg.num_points * scan_msg.scan_parameters.get("frames_per_trigger", 1)
|
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")
|
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:
|
else:
|
||||||
return None
|
return None
|
||||||
# Common settings
|
# 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:
|
if exp_time - self._readout_time <= 0:
|
||||||
raise ValueError((f"Exposure time {exp_time} is too short ",
|
raise ValueError((f"Exposure time {exp_time} is too short ",
|
||||||
f"for Pilatus with readout_time {self._readout_time}."
|
f"for Pilatus with readout_time {self._readout_time}."
|
||||||
|
|||||||
Reference in New Issue
Block a user