Source code for ophyd_async.fastcs.jungfrau._utils
from pydantic import PositiveInt
from ophyd_async.core import DetectorTrigger, TriggerInfo
[docs]
def create_jungfrau_external_triggering_info(
total_triggers: PositiveInt,
exposure_time_s: float,
) -> TriggerInfo:
"""Create safe Jungfrau TriggerInfo for external triggering.
Uses parameters which more closely-align with Jungfrau terminology
to create TriggerInfo. This device currently only supports one frame per trigger
when being externally triggered, but support for this can be added if needed
Args:
total_triggers: Total external triggers expected before ending acquisition.
exposure_time_s: How long to expose the detector for each of its frames.
Returns:
`TriggerInfo`
"""
return TriggerInfo(
number_of_events=total_triggers,
trigger=DetectorTrigger.EDGE_TRIGGER,
livetime=exposure_time_s,
)
[docs]
def create_jungfrau_internal_triggering_info(
number_of_frames: PositiveInt, exposure_time_s: float
) -> TriggerInfo:
"""Create safe Jungfrau TriggerInfo for internal triggering.
Uses parameters which more closely-align with Jungfrau terminology
to create TriggerInfo.
Args:
number_of_frames: Total frames taken after starting acquisition.
exposure_time_s: How long to expose the detector for each of its frames.
Returns:
`TriggerInfo`
"""
return TriggerInfo(
number_of_events=1,
trigger=DetectorTrigger.INTERNAL,
livetime=exposure_time_s,
exposures_per_event=number_of_frames,
)
[docs]
def create_jungfrau_pedestal_triggering_info(
exposure_time_s: float,
pedestal_frames: PositiveInt,
pedestal_loops: PositiveInt,
):
"""Create safe Jungfrau TriggerInfo for pedestal triggering.
Uses parameters which more closely-align with Jungfrau terminology
to create TriggerInfo.
NOTE: To trigger the jungfrau in pedestal mode, you must first set the
jungfrau acquisition_type signal to AcquisitionType.PEDESTAL!
Args:
exposure_time_s: How long to expose the detector for each of its frames.
pedestal_frames: Number of frames taken once triggering begins
pedestal_loops: Number of repeats of the pedestal scan before detector disarms.
Returns:
`TriggerInfo`
"""
return TriggerInfo(
number_of_events=pedestal_loops,
exposures_per_event=pedestal_frames,
trigger=DetectorTrigger.INTERNAL,
livetime=exposure_time_s,
)