Skip to content

Commit

Permalink
changed variable name from number to number_of_triggers
Browse files Browse the repository at this point in the history
  • Loading branch information
ZohebShaikh committed Sep 26, 2024
1 parent 638dffa commit e39a37f
Show file tree
Hide file tree
Showing 16 changed files with 68 additions and 49 deletions.
39 changes: 23 additions & 16 deletions src/ophyd_async/core/_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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):
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand All @@ -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):
Expand All @@ -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,
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/ophyd_async/plan_stubs/_fly.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
)

Expand Down
2 changes: 1 addition & 1 deletion system_tests/epics/eiger/test_eiger_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
7 changes: 5 additions & 2 deletions tests/core/test_flyer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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():
Expand Down
4 changes: 2 additions & 2 deletions tests/epics/adaravis/test_aravis.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
5 changes: 4 additions & 1 deletion tests/epics/adcore/test_scans.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down
2 changes: 1 addition & 1 deletion tests/epics/adkinetix/test_kinetix.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
15 changes: 10 additions & 5 deletions tests/epics/adpilatus/test_pilatus.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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()
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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()

Expand Down
6 changes: 4 additions & 2 deletions tests/epics/adsimdetector/test_sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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()

Expand Down
4 changes: 3 additions & 1 deletion tests/epics/advimba/test_vimba.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions tests/epics/eiger/test_eiger_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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(
Expand All @@ -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()

Expand Down
2 changes: 1 addition & 1 deletion tests/epics/eiger/test_eiger_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions tests/fastcs/panda/test_panda_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
Expand All @@ -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)
)
4 changes: 2 additions & 2 deletions tests/plan_stubs/test_fly.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down

0 comments on commit e39a37f

Please sign in to comment.