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, ) diff --git a/src/dodal/beamlines/i04.py b/src/dodal/beamlines/i04.py index 168bbdb2fbf..cc0b5a6cb74 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,16 @@ 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:") + + +@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 8691010812d..5148d552bae 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.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.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(