diff --git a/src/dodal/beamlines/i03.py b/src/dodal/beamlines/i03.py index 31eb813962..06322dc2da 100644 --- a/src/dodal/beamlines/i03.py +++ b/src/dodal/beamlines/i03.py @@ -1,7 +1,7 @@ from functools import cache from ophyd_async.core import PathProvider, Reference -from ophyd_async.fastcs.eiger import EigerDetector as FastEiger +from ophyd_async.fastcs.eiger import EigerDetector as FastCSEiger from ophyd_async.fastcs.panda import HDFPanda from yarl import URL @@ -164,8 +164,8 @@ def eiger(eiger: EigerDetector) -> EigerDetector: @devices.factory() -def fastcs_eiger(path_provider: PathProvider) -> FastEiger: - return FastEiger( +def fastcs_eiger(path_provider: PathProvider) -> FastCSEiger: + return FastCSEiger( prefix=PREFIX.beamline_prefix, path_provider=path_provider, drv_suffix="-EA-EIGER-02:", diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index 5220581528..2ad3b5d71e 100644 --- a/src/dodal/beamlines/i04.py +++ b/src/dodal/beamlines/i04.py @@ -1,9 +1,11 @@ from ophyd_async.core import Reference +from ophyd_async.fastcs.eiger import EigerDetector as FastCSEiger from dodal.common.beamlines.beamline_parameters import get_beamline_parameters from dodal.common.beamlines.beamline_utils import ( device_factory, device_instantiation, + get_path_provider, ) from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline from dodal.devices.aperturescatterguard import ( @@ -409,6 +411,18 @@ def beamsize() -> Beamsize: If this is called when already instantiated in i04, it will return the existing object. """ return Beamsize( - transfocator=transfocator(), - aperture_scatterguard=aperture_scatterguard(), + transfocator=transfocator(), aperture_scatterguard=aperture_scatterguard() + ) + + +@device_factory() +def fastcs_eiger() -> FastCSEiger: + """Get the i04 FastCS Eiger device, instantiate it if it hasn't already been. + If this is called when already instantiated in i04, it will return the existing object. + """ + return FastCSEiger( + prefix=PREFIX.beamline_prefix, + path_provider=get_path_provider(), + drv_suffix="-EA-EIGER-02:", + hdf_suffix="-EA-EIGER-01:OD:", ) diff --git a/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py b/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py index dc6d12e450..1a89bec5bc 100644 --- a/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +++ b/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py @@ -22,6 +22,28 @@ def configure_arm_trigger_and_disarm_detector( eiger: EigerDetector, detector_params: DetectorParams, trigger_info: TriggerInfo, +): + yield from configure_and_arm_detector(eiger, detector_params, trigger_info) + start = time.time() + yield from bps.kickoff(eiger, wait=True) + LOGGER.info(f"Kickoff Eiger: {time.time() - start}s") + start = time.time() + yield from bps.trigger(eiger.drv.detector.trigger, wait=True) + LOGGER.info(f"Triggering Eiger: {time.time() - start}s") + start = time.time() + yield from bps.complete(eiger, wait=True) + LOGGER.info(f"Completing Capture: {time.time() - start}s") + start = time.time() + yield from bps.unstage(eiger, wait=True) + LOGGER.info(f"Disarming Eiger: {time.time() - start}s") + + +def configure_and_arm_detector( + eiger: EigerDetector, + detector_params: DetectorParams, + trigger_info: TriggerInfo, + group: str = "arm_detector", + wait: bool = False, ): assert detector_params.expected_energy_ev start = time.time() @@ -48,20 +70,8 @@ def configure_arm_trigger_and_disarm_detector( yield from set_mx_settings_pvs(eiger, detector_params, wait=True) LOGGER.info(f"Setting MX PVs: {time.time() - start}s") start = time.time() - yield from bps.prepare(eiger, trigger_info, wait=True) + yield from bps.prepare(eiger, trigger_info, group=group) LOGGER.info(f"Preparing Eiger: {time.time() - start}s") - start = time.time() - yield from bps.kickoff(eiger, wait=True) - LOGGER.info(f"Kickoff Eiger: {time.time() - start}s") - start = time.time() - yield from bps.trigger(eiger.drv.detector.trigger, wait=True) - LOGGER.info(f"Triggering Eiger: {time.time() - start}s") - start = time.time() - yield from bps.complete(eiger, wait=True) - LOGGER.info(f"Completing Capture: {time.time() - start}s") - start = time.time() - yield from bps.unstage(eiger, wait=True) - LOGGER.info(f"Disarming Eiger: {time.time() - start}s") def set_cam_pvs(