From 8ffd14f7723f0b231c477268d3b119d8ac5beb6a Mon Sep 17 00:00:00 2001 From: Callum Forrester Date: Wed, 22 Nov 2023 07:34:50 +0000 Subject: [PATCH 1/3] Add missing eiger config paramter --- src/tickit_devices/eiger/eiger_settings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tickit_devices/eiger/eiger_settings.py b/src/tickit_devices/eiger/eiger_settings.py index fec60af9..078ee450 100644 --- a/src/tickit_devices/eiger/eiger_settings.py +++ b/src/tickit_devices/eiger/eiger_settings.py @@ -112,6 +112,9 @@ class EigerSettings: trigger_mode: str = field( default="exts", metadata=rw_str(allowed_values=["exts", "ints", "exte", "inte"]) ) + trigger_start_delay: float = field( + default=0.0, metadata=rw_float() + ) two_theta_increment: float = field(default=0.0, metadata=rw_float()) two_theta_start: float = field(default=0.0, metadata=rw_float()) wavelength: float = field(default=1.0, metadata=rw_float()) From 89055da9e9da42dc43d97ac33cbb7fdb161bb010 Mon Sep 17 00:00:00 2001 From: Callum Forrester Date: Wed, 22 Nov 2023 07:35:18 +0000 Subject: [PATCH 2/3] Create triggerable eiger config and fix eiger state loss when triggered --- examples/configs/eiger/eiger-trigger.yaml | 9 +++++++++ src/tickit_devices/eiger/eiger.py | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 examples/configs/eiger/eiger-trigger.yaml diff --git a/examples/configs/eiger/eiger-trigger.yaml b/examples/configs/eiger/eiger-trigger.yaml new file mode 100644 index 00000000..198a7a91 --- /dev/null +++ b/examples/configs/eiger/eiger-trigger.yaml @@ -0,0 +1,9 @@ +- type: tickit.devices.signal_generator.EpicsSignalGenerator + name: gen + inputs: {} +- type: tickit_devices.eiger.Eiger + inputs: + trigger: + component: gen + port: gate + name: eiger diff --git a/src/tickit_devices/eiger/eiger.py b/src/tickit_devices/eiger/eiger.py index 3d294fc6..2db21978 100644 --- a/src/tickit_devices/eiger/eiger.py +++ b/src/tickit_devices/eiger/eiger.py @@ -150,6 +150,9 @@ async def abort(self) -> None: The detector will immediately stop acquiring frames and disarm itself. """ + self._abort() + + def _abort(self) -> None: self._set_state(State.IDLE) self.stream.end_series(self._series_id) @@ -176,7 +179,9 @@ def update(self, time: SimTime, inputs: Inputs) -> DeviceUpdate[Outputs]: LOGGER.debug("Ending Series...") self._set_state(State.IDLE) self.stream.end_series(self._series_id) - if inputs.get("trigger", False): + + trigger_high = inputs.get("trigger", False) + if trigger_high and self.settings.trigger_mode == "exts" and self._is_in_state(State.READY): self._begin_acqusition_mode() # Should have another update immediately to begin acquisition return DeviceUpdate(self.Outputs(), SimTime(time)) From 232261c833f415726ae01f516a28890afeec0254 Mon Sep 17 00:00:00 2001 From: Gary Yendell Date: Wed, 13 Sep 2023 10:40:24 +0000 Subject: [PATCH 3/3] Fix eiger stream data publish Remove extra list nesting of eiger stream message and only add message to stream if data is not empty. Add test to ensure new behaviour. --- tests/eiger/test_eiger_adapters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/eiger/test_eiger_adapters.py b/tests/eiger/test_eiger_adapters.py index 67958f80..3cc7b34c 100644 --- a/tests/eiger/test_eiger_adapters.py +++ b/tests/eiger/test_eiger_adapters.py @@ -7,6 +7,7 @@ def test_after_update(mocker: MockerFixture) -> None: test_data = [b"data", b"some more data"] # Mock consume_data to return with data the first time and nothing the second time + # Patch consume_data to return with data the first time and nothing the second time device_mock = mocker.MagicMock() device_mock.stream.consume_data.side_effect = [test_data, []] @@ -14,6 +15,7 @@ def test_after_update(mocker: MockerFixture) -> None: add_mock = mocker.patch.object(zmq_adapter, "add_message_to_stream") # Test after_update only calls add_message_to_stream with non-empty data + # First after_update should only call add_message_to_stream with non-empty data zmq_adapter.after_update() add_mock.assert_called_once_with(test_data) add_mock.reset_mock()