From e39a37fd4ba7ee21a5d28d2b35c809e3b0b52db5 Mon Sep 17 00:00:00 2001 From: Zoheb Shaikh Date: Thu, 26 Sep 2024 14:26:49 +0100 Subject: [PATCH] changed variable name from number to number_of_triggers --- src/ophyd_async/core/_detector.py | 39 +++++++++++-------- src/ophyd_async/plan_stubs/_fly.py | 2 +- .../_pattern_detector_controller.py | 9 ++--- system_tests/epics/eiger/test_eiger_system.py | 2 +- tests/conftest.py | 2 +- tests/core/test_flyer.py | 7 +++- tests/epics/adaravis/test_aravis.py | 4 +- tests/epics/adcore/test_scans.py | 5 ++- tests/epics/adkinetix/test_kinetix.py | 2 +- tests/epics/adpilatus/test_pilatus.py | 15 ++++--- tests/epics/adsimdetector/test_sim.py | 6 ++- tests/epics/advimba/test_vimba.py | 4 +- tests/epics/eiger/test_eiger_controller.py | 8 ++-- tests/epics/eiger/test_eiger_detector.py | 2 +- tests/fastcs/panda/test_panda_control.py | 6 +-- tests/plan_stubs/test_fly.py | 4 +- 16 files changed, 68 insertions(+), 49 deletions(-) diff --git a/src/ophyd_async/core/_detector.py b/src/ophyd_async/core/_detector.py index 7212bc784..fef1c203c 100644 --- a/src/ophyd_async/core/_detector.py +++ b/src/ophyd_async/core/_detector.py @@ -54,7 +54,7 @@ class TriggerInfo(BaseModel): #: - 3 times for initial flat field images #: - 100 times for projections #: - 3 times for final flat field images - number: NonNegativeInt | list[NonNegativeInt] + number_of_triggers: NonNegativeInt | list[NonNegativeInt] #: Sort of triggers that will be sent trigger: DetectorTrigger = Field(default=DetectorTrigger.internal) #: What is the minimum deadtime between triggers @@ -72,7 +72,11 @@ class TriggerInfo(BaseModel): @computed_field @property def total_frames(self) -> int: - return sum(self.number) if isinstance(self.number, list) else self.number + return ( + sum(self.number_of_triggers) + if isinstance(self.number_of_triggers, list) + else self.number_of_triggers + ) class DetectorControl(ABC): @@ -263,7 +267,7 @@ async def trigger(self) -> None: if self._trigger_info is None: await self.prepare( TriggerInfo( - number=1, + number_of_triggers=1, trigger=DetectorTrigger.internal, deadtime=None, livetime=None, @@ -314,13 +318,13 @@ async def prepare(self, value: TriggerInfo) -> None: ) self._trigger_info = value self._initial_frame = await self.writer.get_indices_written() - if isinstance(self._trigger_info.number, list): - self._total_frames_to_capture = sum(self._trigger_info.number) + if isinstance(self._trigger_info.number_of_triggers, list): + self._total_frames_to_capture = sum(self._trigger_info.number_of_triggers) else: assert ( - self._trigger_info.number >= 0 + self._trigger_info.number_of_triggers >= 0 ), "Number of frames can only be greater than or equal to 0" - self._total_frames_to_capture = self._trigger_info.number + self._total_frames_to_capture = self._trigger_info.number_of_triggers self._last_frame = self._initial_frame + self._total_frames_to_capture self._describe, _ = await asyncio.gather( self.writer.open(value.multiplier), self.controller.prepare(value) @@ -337,12 +341,12 @@ async def kickoff(self): f"Kickoff called more than the configured number of " f"{self._total_frames_to_capture} iteration(s)!" ) - if isinstance(self._trigger_info.number, list): - self._frames_collected += self._trigger_info.number[ + if isinstance(self._trigger_info.number_of_triggers, list): + self._frames_collected += self._trigger_info.number_of_triggers[ self._current_number_index ] else: - self._frames_collected += self._trigger_info.number + self._frames_collected += self._trigger_info.number_of_triggers @WatchableAsyncStatus.wrap async def complete(self): @@ -356,9 +360,9 @@ async def complete(self): ) ): target = ( - self._trigger_info.number[self._current_number_index] - if isinstance(self._trigger_info.number, list) - else self._trigger_info.number + self._trigger_info.number_of_triggers[self._current_number_index] + if isinstance(self._trigger_info.number_of_triggers, list) + else self._trigger_info.number_of_triggers ) yield WatcherUpdate( name=self.name, @@ -369,12 +373,15 @@ async def complete(self): precision=0, time_elapsed=time.monotonic() - self._fly_start, ) - if isinstance(self._trigger_info.number, list): - if index >= self._trigger_info.number[self._current_number_index]: + if isinstance(self._trigger_info.number_of_triggers, list): + if ( + index + >= self._trigger_info.number_of_triggers[self._current_number_index] + ): self._current_number_index += 1 break else: - if index >= self._trigger_info.number: + if index >= self._trigger_info.number_of_triggers: break if self._frames_collected == self._total_frames_to_capture: self._frames_collected = 0 diff --git a/src/ophyd_async/plan_stubs/_fly.py b/src/ophyd_async/plan_stubs/_fly.py index 7a37fe81b..043da476f 100644 --- a/src/ophyd_async/plan_stubs/_fly.py +++ b/src/ophyd_async/plan_stubs/_fly.py @@ -61,7 +61,7 @@ def prepare_static_seq_table_flyer_and_detectors_with_same_trigger( deadtime = max(det.controller.get_deadtime(exposure) for det in detectors) trigger_info = TriggerInfo( - number=number_of_frames * repeats, + number_of_triggers=number_of_frames * repeats, trigger=DetectorTrigger.constant_gate, deadtime=deadtime, livetime=exposure, diff --git a/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py b/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py index 79189db03..27d7119b4 100644 --- a/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +++ b/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py @@ -30,14 +30,11 @@ async def prepare(self, trigger_info: TriggerInfo): async def arm(self): assert self._trigger_info.livetime assert self.period - frames: int = ( - sum(self._trigger_info.number) - if isinstance(self._trigger_info.number, list) - else self._trigger_info.number - ) self.task = asyncio.create_task( self._coroutine_for_image_writing( - self._trigger_info.livetime, self.period, frames + self._trigger_info.livetime, + self.period, + self._trigger_info.total_frames, ) ) diff --git a/system_tests/epics/eiger/test_eiger_system.py b/system_tests/epics/eiger/test_eiger_system.py index 8d20c1a70..320c74aec 100644 --- a/system_tests/epics/eiger/test_eiger_system.py +++ b/system_tests/epics/eiger/test_eiger_system.py @@ -71,7 +71,7 @@ async def test_eiger(RE, ioc_prefixes) -> EigerDetector: async def test_trigger_saves_file(test_eiger: EigerDetector, setup_device: SetupDevice): single_shot = EigerTriggerInfo( frame_timeout=None, - number=1, + number_of_triggers=1, trigger=DetectorTrigger.internal, deadtime=None, livetime=None, diff --git a/tests/conftest.py b/tests/conftest.py index 0dfd2c75c..fa0a8fb80 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -230,7 +230,7 @@ def static_path_provider( def one_shot_trigger_info() -> TriggerInfo: return TriggerInfo( frame_timeout=None, - number=1, + number_of_triggers=1, trigger=DetectorTrigger.internal, deadtime=None, livetime=None, diff --git a/tests/core/test_flyer.py b/tests/core/test_flyer.py index da3e82dce..0819c95fe 100644 --- a/tests/core/test_flyer.py +++ b/tests/core/test_flyer.py @@ -155,7 +155,7 @@ def append_and_print(name, doc): trigger_logic = DummyTriggerLogic() flyer = StandardFlyer(trigger_logic, [], name="flyer") trigger_info = TriggerInfo( - number=number_of_frames, + number_of_triggers=number_of_frames, trigger=DetectorTrigger.constant_gate, deadtime=2, livetime=2, @@ -271,7 +271,10 @@ async def test_hardware_triggered_flyable_too_many_kickoffs( trigger_logic = DummyTriggerLogic() flyer = StandardFlyer(trigger_logic, [], name="flyer") trigger_info = TriggerInfo( - number=1, trigger=DetectorTrigger.constant_gate, deadtime=2, livetime=2 + number_of_triggers=1, + trigger=DetectorTrigger.constant_gate, + deadtime=2, + livetime=2, ) def flying_plan(): diff --git a/tests/epics/adaravis/test_aravis.py b/tests/epics/adaravis/test_aravis.py index ee40fd6fc..270b661e5 100644 --- a/tests/epics/adaravis/test_aravis.py +++ b/tests/epics/adaravis/test_aravis.py @@ -30,7 +30,7 @@ async def test_trigger_source_set_to_gpio_line(test_adaravis: adaravis.AravisDet async def trigger_and_complete(): await test_adaravis.controller.prepare( TriggerInfo( - number=1, + number_of_triggers=1, trigger=DetectorTrigger.edge_trigger, livetime=None, deadtime=None, @@ -151,7 +151,7 @@ async def test_unsupported_trigger_excepts(test_adaravis: adaravis.AravisDetecto ): await test_adaravis.prepare( TriggerInfo( - number=0, + number_of_triggers=0, trigger=DetectorTrigger.variable_gate, deadtime=1, livetime=1, diff --git a/tests/epics/adcore/test_scans.py b/tests/epics/adcore/test_scans.py index f5264e978..8d68c28f1 100644 --- a/tests/epics/adcore/test_scans.py +++ b/tests/epics/adcore/test_scans.py @@ -104,7 +104,10 @@ def test_hdf_writer_fails_on_timeout_with_flyscan( flyer = StandardFlyer(trigger_logic, [], name="flyer") trigger_info = TriggerInfo( - number=1, trigger=DetectorTrigger.constant_gate, deadtime=2, livetime=2 + number_of_triggers=1, + trigger=DetectorTrigger.constant_gate, + deadtime=2, + livetime=2, ) def flying_plan(): diff --git a/tests/epics/adkinetix/test_kinetix.py b/tests/epics/adkinetix/test_kinetix.py index 5e460f63d..b58d3acf3 100644 --- a/tests/epics/adkinetix/test_kinetix.py +++ b/tests/epics/adkinetix/test_kinetix.py @@ -27,7 +27,7 @@ async def test_trigger_modes(test_adkinetix: adkinetix.KinetixDetector): async def setup_trigger_mode(trig_mode: DetectorTrigger): await test_adkinetix.controller.prepare( - TriggerInfo(number=1, trigger=trig_mode) + TriggerInfo(number_of_triggers=1, trigger=trig_mode) ) await test_adkinetix.controller.arm() await test_adkinetix.controller.wait_for_idle() diff --git a/tests/epics/adpilatus/test_pilatus.py b/tests/epics/adpilatus/test_pilatus.py index 192c466a1..5657203d9 100644 --- a/tests/epics/adpilatus/test_pilatus.py +++ b/tests/epics/adpilatus/test_pilatus.py @@ -50,7 +50,7 @@ async def test_trigger_mode_set( async def trigger_and_complete(): set_mock_value(test_adpilatus.drv.armed, True) await test_adpilatus.controller.prepare( - TriggerInfo(number=1, trigger=detector_trigger) + TriggerInfo(number_of_triggers=1, trigger=detector_trigger) ) await test_adpilatus.controller.arm() await test_adpilatus.controller.wait_for_idle() @@ -63,7 +63,7 @@ async def test_trigger_mode_set_without_armed_pv( ): async def trigger_and_complete(): await test_adpilatus.controller.prepare( - TriggerInfo(number=1, trigger=DetectorTrigger.internal) + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.internal) ) await test_adpilatus.controller.arm() await test_adpilatus.controller.wait_for_idle() @@ -108,7 +108,7 @@ async def test_unsupported_trigger_excepts(test_adpilatus: adpilatus.PilatusDete ): await test_adpilatus.prepare( TriggerInfo( - number=1, + number_of_triggers=1, trigger=DetectorTrigger.edge_trigger, deadtime=1.0, livetime=1.0, @@ -126,7 +126,10 @@ async def dummy_open(multiplier: int = 0): set_mock_value(test_adpilatus.drv.armed, True) await test_adpilatus.prepare( TriggerInfo( - number=1, trigger=DetectorTrigger.internal, deadtime=1.0, livetime=1.0 + number_of_triggers=1, + trigger=DetectorTrigger.internal, + deadtime=1.0, + livetime=1.0, ) ) assert (await test_adpilatus.drv.acquire_time.get_value()) == 1.0 @@ -137,7 +140,9 @@ async def test_pilatus_controller(test_adpilatus: adpilatus.PilatusDetector): pilatus = test_adpilatus._controller pilatus_driver = pilatus._drv set_mock_value(pilatus_driver.armed, True) - await pilatus.prepare(TriggerInfo(number=1, trigger=DetectorTrigger.constant_gate)) + await pilatus.prepare( + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.constant_gate) + ) await pilatus.arm() await pilatus.wait_for_idle() diff --git a/tests/epics/adsimdetector/test_sim.py b/tests/epics/adsimdetector/test_sim.py index 637c3c6ed..be625e014 100644 --- a/tests/epics/adsimdetector/test_sim.py +++ b/tests/epics/adsimdetector/test_sim.py @@ -77,7 +77,7 @@ async def test_two_detectors_fly_different_rate( two_test_adsimdetectors: list[adsimdetector.SimDetector], RE: RunEngine ): trigger_info = TriggerInfo( - number=15, + number_of_triggers=15, trigger=DetectorTrigger.internal, ) docs = defaultdict(list) @@ -359,7 +359,9 @@ def my_plan(): async def test_ad_sim_controller(test_adsimdetector: adsimdetector.SimDetector): ad = test_adsimdetector._controller with patch("ophyd_async.core._signal.wait_for_value", return_value=None): - await ad.prepare(TriggerInfo(number=1, trigger=DetectorTrigger.internal)) + await ad.prepare( + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.internal) + ) await ad.arm() await ad.wait_for_idle() diff --git a/tests/epics/advimba/test_vimba.py b/tests/epics/advimba/test_vimba.py index a9dad18bc..25ec7f232 100644 --- a/tests/epics/advimba/test_vimba.py +++ b/tests/epics/advimba/test_vimba.py @@ -32,7 +32,9 @@ async def test_arming_trig_modes(test_advimba: advimba.VimbaDetector): set_mock_value(test_advimba.drv.exposure_mode, VimbaExposeOutMode.timed) async def setup_trigger_mode(trig_mode: DetectorTrigger): - await test_advimba.controller.prepare(TriggerInfo(number=1, trigger=trig_mode)) + await test_advimba.controller.prepare( + TriggerInfo(number_of_triggers=1, trigger=trig_mode) + ) await test_advimba.controller.arm() await test_advimba.controller.wait_for_idle() # Prevent timeouts diff --git a/tests/epics/eiger/test_eiger_controller.py b/tests/epics/eiger/test_eiger_controller.py index 39204142e..4d9276030 100644 --- a/tests/epics/eiger/test_eiger_controller.py +++ b/tests/epics/eiger/test_eiger_controller.py @@ -44,7 +44,7 @@ async def test_when_arm_with_exposure_then_time_and_period_set( ): driver, controller = eiger_driver_and_controller test_exposure = 0.002 - await controller.prepare(TriggerInfo(number=10, livetime=test_exposure)) + await controller.prepare(TriggerInfo(number_of_triggers=10, livetime=test_exposure)) await controller.arm() await controller.wait_for_idle() assert (await driver.acquire_period.get_value()) == test_exposure @@ -55,7 +55,7 @@ async def test_when_arm_with_no_exposure_then_arm_set_correctly( eiger_driver_and_controller: DriverAndController, ): driver, controller = eiger_driver_and_controller - await controller.prepare(TriggerInfo(number=10)) + await controller.prepare(TriggerInfo(number_of_triggers=10)) await controller.arm() await controller.wait_for_idle() get_mock_put(driver.arm).assert_called_once_with(1, wait=ANY, timeout=ANY) @@ -66,7 +66,7 @@ async def test_when_arm_with_number_of_images_then_number_of_images_set_correctl ): driver, controller = eiger_driver_and_controller test_number_of_images = 40 - await controller.prepare(TriggerInfo(number=test_number_of_images)) + await controller.prepare(TriggerInfo(number_of_triggers=test_number_of_images)) await controller.arm() await controller.wait_for_idle() get_mock_put(driver.num_images).assert_called_once_with( @@ -80,7 +80,7 @@ async def test_given_detector_fails_to_go_ready_when_arm_called_then_fails( ): driver, controller = eiger_driver_and_controller_no_arm with raises(TimeoutError): - await controller.prepare(TriggerInfo(number=10)) + await controller.prepare(TriggerInfo(number_of_triggers=10)) await controller.arm() await controller.wait_for_idle() diff --git a/tests/epics/eiger/test_eiger_detector.py b/tests/epics/eiger/test_eiger_detector.py index 33cfef805..4ad6557ee 100644 --- a/tests/epics/eiger/test_eiger_detector.py +++ b/tests/epics/eiger/test_eiger_detector.py @@ -25,7 +25,7 @@ async def test_when_prepared_with_energy_then_energy_set_on_detector(detector): await detector.prepare( EigerTriggerInfo( frame_timeout=None, - number=1, + number_of_triggers=1, trigger=DetectorTrigger.internal, deadtime=None, livetime=None, diff --git a/tests/fastcs/panda/test_panda_control.py b/tests/fastcs/panda/test_panda_control.py index 6c0abf298..0920cd394 100644 --- a/tests/fastcs/panda/test_panda_control.py +++ b/tests/fastcs/panda/test_panda_control.py @@ -38,7 +38,7 @@ class PcapBlock(Device): with patch("ophyd_async.fastcs.panda._control.wait_for_value", return_value=None): with pytest.raises(AttributeError) as exc: await pandaController.prepare( - TriggerInfo(number=1, trigger=DetectorTrigger.constant_gate) + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.constant_gate) ) await pandaController.arm() assert ("'PcapBlock' object has no attribute 'arm'") in str(exc.value) @@ -48,7 +48,7 @@ async def test_panda_controller_arm_disarm(mock_panda): pandaController = PandaPcapController(mock_panda.pcap) with patch("ophyd_async.fastcs.panda._control.wait_for_value", return_value=None): await pandaController.prepare( - TriggerInfo(number=1, trigger=DetectorTrigger.constant_gate) + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.constant_gate) ) await pandaController.arm() await pandaController.wait_for_idle() @@ -59,5 +59,5 @@ async def test_panda_controller_wrong_trigger(): pandaController = PandaPcapController(None) with pytest.raises(AssertionError): await pandaController.prepare( - TriggerInfo(number=1, trigger=DetectorTrigger.internal) + TriggerInfo(number_of_triggers=1, trigger=DetectorTrigger.internal) ) diff --git a/tests/plan_stubs/test_fly.py b/tests/plan_stubs/test_fly.py index 866ee5763..635747a2f 100644 --- a/tests/plan_stubs/test_fly.py +++ b/tests/plan_stubs/test_fly.py @@ -129,12 +129,12 @@ async def complete(self): name=self.name, current=index, initial=self._initial_frame, - target=self._trigger_info.number, + target=self._trigger_info.number_of_triggers, unit="", precision=0, time_elapsed=time.monotonic() - self._fly_start, ) - if index >= self._trigger_info.number: + if index >= self._trigger_info.number_of_triggers: break