Skip to content
7 changes: 7 additions & 0 deletions src/ophyd_async/fastcs/eiger/_eiger.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from ophyd_async.core import (
DEFAULT_TIMEOUT,
AsyncStatus,
PathProvider,
StandardDetector,
TriggerInfo,
wait_for_value,
)
from ophyd_async.epics.odin import Odin, OdinWriter

Expand Down Expand Up @@ -41,3 +43,8 @@ def __init__(
@AsyncStatus.wrap
async def prepare(self, value: TriggerInfo) -> None:
await super().prepare(value)
Comment thread
shihab-dls marked this conversation as resolved.
Outdated

@AsyncStatus.wrap
async def kickoff(self) -> None:
await super().kickoff()
await wait_for_value(self.odin.fan_ready, 1, DEFAULT_TIMEOUT)
Comment thread
shihab-dls marked this conversation as resolved.
Outdated
19 changes: 19 additions & 0 deletions tests/fastcs/eiger/test_eiger_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ def set_meta_filename_and_id(value, *args, **kwargs):

callback_on_mock_put(detector.odin.file_name, set_meta_filename_and_id)

def set_odin_fan_ready(value, *args, **kwargs):
set_mock_value(detector.odin.fan_ready, 1)

callback_on_mock_put(detector.drv.detector.arm, set_odin_fan_ready)

detector._writer._path_provider.return_value.filename = "filename.h5" # type: ignore

set_mock_value(detector.odin.meta_active, "Active")
Expand All @@ -43,3 +48,17 @@ async def test_when_prepared_eiger_bit_depth_is_passed_and_set_in_odin(detector)
get_mock_put(detector.odin.data_type).assert_called_once_with(
f"UInt{expected_datatype}", wait=True
)


async def test_when_kickoff_called_odin_fan_waited_for(
detector,
):
await detector.prepare(
TriggerInfo(
exposure_timeout=None,
number_of_events=1,
trigger=DetectorTrigger.INTERNAL,
)
)
await detector.kickoff()
assert await detector.odin.fan_ready.get_value() == 1
Loading