Source code for ophyd_async.fastcs.jungfrau._detector
from ophyd_async.core import PathProvider, StandardDetector, soft_signal_rw
from ophyd_async.fastcs import odin
from ophyd_async.fastcs.core import fastcs_connector
from ._arm_logic import JungfrauArmLogic
from ._io import AcquisitionType, JungfrauDriverIO
from ._trigger_logic import JungfrauTriggerLogic
[docs]
class JungfrauDetector(StandardDetector):
"""Ophyd-async implementation of a Jungfrau Detector."""
def __init__(
self,
prefix: str,
path_provider: PathProvider,
drv_suffix: str,
hdf_suffix: str,
name="",
):
# Need to do this first so the bit depth signal exists for the TriggerLogic
# once FastCS Jungfrau
# has top level 'detector' and 'odin', after which, follow
# EigerDetector as an example of correct structure
drv_connector = fastcs_connector(prefix + drv_suffix)
self.detector = JungfrauDriverIO(connector=drv_connector)
drv_connector.create_children_from_annotations(self.detector)
self.odin = odin.OdinIO(connector=fastcs_connector(prefix + hdf_suffix))
self.acquisition_type = soft_signal_rw(
AcquisitionType, AcquisitionType.STANDARD
)
self.add_detector_logics(
JungfrauTriggerLogic(self.detector, self.acquisition_type),
JungfrauArmLogic(self.detector),
odin.OdinDataLogic(
path_provider=path_provider,
odin=self.odin,
detector_bit_depth=self.detector.bit_depth,
),
)
super().__init__(name=name)