From 85c12c04c29f17b1edff49f6ac44ee23024c2d0a 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 8691010812d..0cf181348df 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.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.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 7e778341b008d942d3595e7b37ec5e2e052265a6 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 | 15 ++++++++++++++- .../configure_arm_trigger_and_disarm_detector.py | 4 +++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index 168bbdb2fbf..9f2b3d1c5ab 100644 --- a/src/dodal/beamlines/i04.py +++ b/src/dodal/beamlines/i04.py @@ -2,8 +2,9 @@ from daq_config_server import ConfigClient from ophyd_async.core import Reference +from ophyd_async.fastcs.eiger import EigerDetector as FastCSEiger -from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline +from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline, get_path_provider from dodal.common.beamlines.beamline_utils import set_config_client from dodal.device_manager import DeviceManager from dodal.devices.aperturescatterguard import ( @@ -338,3 +339,15 @@ def zoom_controller() -> ZoomControllerWithBeamCentres: If this is called when already instantiated in i04, it will return the existing object. """ return ZoomControllerWithBeamCentres(f"{PREFIX.beamline_prefix}-EA-OAV-01:FZOOM:") + + +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 0cf181348df..5148d552bae 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 882e1f3bbf0c3c7ca7014dc19bb62cf56dd0145c 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 5cbc8f65ae7..d598bf9642a 100644 --- a/src/dodal/beamlines/i03.py +++ b/src/dodal/beamlines/i03.py @@ -3,7 +3,7 @@ from daq_config_server import ConfigClient 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 @@ -193,8 +193,8 @@ def eiger(eiger: EigerDetector) -> EigerDetector: # ophyd-async no longer works with a mixed ADOdin and fastCS Eiger. Need to update the # beamline to use a fastCS Odin and Eiger @devices.factory(skip=True) -def fastcs_eiger(path_provider: PathProvider) -> FastEiger: - return FastEiger( +def fastcs_eiger(path_provider: PathProvider) -> FastCSEiger: + return FastCSEiger( prefix=f"{PREFIX.beamline_prefix}-EA-EIGER-02:", path_provider=path_provider, ) From f69859c56da6120b8756aeb39c7e127f65d42aa8 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 9f2b3d1c5ab..cc0b5a6cb74 100644 --- a/src/dodal/beamlines/i04.py +++ b/src/dodal/beamlines/i04.py @@ -341,6 +341,7 @@ def zoom_controller() -> ZoomControllerWithBeamCentres: return ZoomControllerWithBeamCentres(f"{PREFIX.beamline_prefix}-EA-OAV-01:FZOOM:") +@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.