diff --git a/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py b/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py index bfe2c48..26ee43a 100644 --- a/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py +++ b/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py @@ -316,8 +316,6 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard): try: scan_done = bool(value == self._num_total_triggers) self.progress.put(value=value, max_value=self._num_total_triggers, done=scan_done) - if scan_done: - self._scan_done_event.set() except Exception: content = traceback.format_exc() logger.info(f"Device {self.name} error: {content}") @@ -392,6 +390,7 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard): self._current_data_index = 0 # NOTE Make sure that the signal that omits mca callbacks is cleared + # DO NOT REMOVE!! self._omit_mca_callbacks.clear() # For a fly scan we need to start the mcs card ourselves @@ -547,8 +546,9 @@ class MCSCardCSAXS(PSIDeviceBase, MCSCard): def on_stop(self) -> None: """Hook called when the device is stopped. In addition, any status that is registered through cancel_on_stop will be cancelled here.""" - self.stop_all.put(1) - self.erase_all.put(1) + with suppress_mca_callbacks(self): + self.stop_all.put(1) + self.erase_all.put(1) def mcs_recovery(self, timeout: int = 1) -> None: """ diff --git a/tests/tests_devices/test_mcs_card.py b/tests/tests_devices/test_mcs_card.py index 7a9ea61..35351bf 100644 --- a/tests/tests_devices/test_mcs_card.py +++ b/tests/tests_devices/test_mcs_card.py @@ -217,6 +217,16 @@ def test_mcs_card_csaxs_complete_and_stop(mock_mcs_csaxs: MCSCardCSAXS): assert not mcs._start_monitor_async_data_emission.is_set() +def test_mcs_on_stop(mock_mcs_csaxs: MCSCardCSAXS): + """Test that on stop sets the omit_mca_callbacks flag. Also test that on stage clears the omit_mca_callbacks flag.""" + mcs = mock_mcs_csaxs + assert mcs._omit_mca_callbacks.is_set() is False + mcs.stop() + assert mcs._omit_mca_callbacks.is_set() is True + mcs.stage() + assert mcs._omit_mca_callbacks.is_set() is False + + def test_mcs_recovery(mock_mcs_csaxs: MCSCardCSAXS): mcs = mock_mcs_csaxs # Simulate ongoing acquisition