From d3983d15774c23007fd64ddb2ec06684166dbadd Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Fri, 7 Nov 2025 14:09:18 +0000 Subject: [PATCH 1/4] Split up fastcs eiger plan --- ...nfigure_arm_trigger_and_disarm_detector.py | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) 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..8b095c69d2 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,26 @@ 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, ): assert detector_params.expected_energy_ev start = time.time() @@ -50,18 +70,6 @@ def configure_arm_trigger_and_disarm_detector( start = time.time() yield from bps.prepare(eiger, trigger_info, wait=True) 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( From 5dac91bc0d744f85eb3c81071a6f4f5c63dd3c0f Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Wed, 12 Nov 2025 16:57:24 +0000 Subject: [PATCH 2/4] Small changes --- src/dodal/beamlines/i04.py | 17 +++++++++++++++-- ...configure_arm_trigger_and_disarm_detector.py | 4 +++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index 5220581528..ba89de4c44 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,17 @@ 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() + ) + + +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 8b095c69d2..1a89bec5bc 100644 --- a/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +++ b/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py @@ -42,6 +42,8 @@ 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() @@ -68,7 +70,7 @@ def configure_and_arm_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") From 96f561d760266ea5d0ccfef099e6f418d8becf9c Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Wed, 12 Nov 2025 16:57:32 +0000 Subject: [PATCH 3/4] Add i04 fastcs_eiger --- src/dodal/beamlines/i03.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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:", From 49b180ce859f5f3dcd43f3b300ebe5ae156cfc8c Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 25 Nov 2025 11:24:40 +0000 Subject: [PATCH 4/4] Fix formatting issues in i04.py --- src/dodal/beamlines/i04.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index ba89de4c44..2ad3b5d71e 100644 --- a/src/dodal/beamlines/i04.py +++ b/src/dodal/beamlines/i04.py @@ -415,6 +415,7 @@ def beamsize() -> Beamsize: ) +@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.