Source code for ophyd_async.fastcs.jungfrau._signals
from pydantic import NonNegativeInt
from ophyd_async.core import (
DetectorTrigger,
Device,
SignalR,
SignalRW,
SignalX,
StrictEnum,
soft_signal_rw,
)
from ophyd_async.fastcs.core import fastcs_connector
[docs]
class JungfrauTriggerMode(StrictEnum):
INTERNAL = "Internal"
# Detector waits for external trigger to start frame series, but still
# controls exposure time and frame period internally
EXTERNAL = "External"
[docs]
class DetectorStatus(StrictEnum):
IDLE = "Idle"
ERROR = "Error"
WAITING = "Waiting"
RUN_FINISHED = "RunFinished"
TRANSMITTING = "Transmitting"
RUNNING = "Running"
STOPPED = "Stopped"
[docs]
class GainMode(StrictEnum):
DYNAMIC = "Dynamic"
FORCE_SWITCH_G1 = "ForceSwitchG1"
FORCE_SWITCH_G2 = "ForceSwitchG2"
FIX_G1 = "FixG1"
FIX_G2 = "FixG2"
# Use with caution - this may damage the detector
FIX_G0 = "FixG0"
[docs]
class PedestalMode(StrictEnum):
ON = "On"
OFF = "Off"
[docs]
class AcquisitionType(StrictEnum):
STANDARD = "Standard"
PEDESTAL = "Pedestal"
JUNGFRAU_TRIGGER_MODE_MAP = {
DetectorTrigger.EDGE_TRIGGER: JungfrauTriggerMode.EXTERNAL,
DetectorTrigger.INTERNAL: JungfrauTriggerMode.INTERNAL,
}
[docs]
class JungfrauDriverIO(Device):
"""Contains signals for handling IO on the Jungfrau detector."""
exposure_time: SignalRW[float] # in s
# Includes deadtime
period_between_frames: SignalRW[float] # in s
# Sets the delay for the beginning of the exposure time after
# trigger input
delay_after_trigger: SignalRW[float] # in s
# In internal trigger mode, this is frames per trigger. In external trigger mode,
# this is frames per overall acquisition. In pedestal mode, this signal is not set.
frames_per_acq: SignalRW[NonNegativeInt]
pedestal_mode_state: SignalRW[PedestalMode]
pedestal_mode_frames: SignalRW[NonNegativeInt]
pedestal_mode_loops: SignalRW[NonNegativeInt]
gain_mode: SignalRW[GainMode]
acquisition_start: SignalX
acquisition_stop: SignalX
bit_depth: SignalR[int]
trigger_mode: SignalRW[JungfrauTriggerMode]
detector_status: SignalR[DetectorStatus]
def __init__(self, uri: str, name: str = ""):
# Determines how the TriggerInfo gets mapped to the Jungfrau during prepare
self.acquisition_type = soft_signal_rw(
AcquisitionType, AcquisitionType.STANDARD
)
super().__init__(name=name, connector=fastcs_connector(self, uri))