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 971e115..9bad16a 100644 --- a/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py +++ b/csaxs_bec/devices/epics/mcs_card/mcs_card_csaxs.py @@ -393,6 +393,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 @@ -563,8 +564,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