diff --git a/src/genie_python/genie.py b/src/genie_python/genie.py index edd3e32c..cb67a38d 100644 --- a/src/genie_python/genie.py +++ b/src/genie_python/genie.py @@ -2554,3 +2554,23 @@ def get_detector_table() -> str | None: """ assert _genie_api.dae is not None return _genie_api.dae.get_table_path("Detector") + + +@usercommand +@log_command_and_handle_exception +def get_dae_autosave_freq() -> int | None: + """ + Gets the ICP autosave frequency (Frames). + """ + assert _genie_api.dae is not None + return _genie_api.dae.get_autosave_freq() + + +@usercommand +@log_command_and_handle_exception +def set_dae_autosave_freq(freq: int) -> None: + """ + Sets the ICP autosave frequency (Frames). + """ + assert _genie_api.dae is not None + return _genie_api.dae.set_autosave_freq(freq) diff --git a/src/genie_python/genie_dae.py b/src/genie_python/genie_dae.py index 26c41ab4..e2279431 100644 --- a/src/genie_python/genie_dae.py +++ b/src/genie_python/genie_dae.py @@ -127,6 +127,8 @@ "specintegrals_size": "DAE:SPECINTEGRALS.NORD", "specdata": "DAE:SPECDATA", "specdata_size": "DAE:SPECDATA.NORD", + "autosave_freq": "DAE:AUTOSAVE:FREQ", + "autosave_freq_sp": "DAE:AUTOSAVE:FREQ:SP", } DAE_CONFIG_FILE_PATHS = [ @@ -2234,3 +2236,18 @@ def integrate_spectrum( # run sum of terms, note in the case that the high and low partials # are in the same bin this still works return full_count + partial_count_high - partial_count_low + + def get_autosave_freq(self) -> int | None: + """ + Gets the ICP autosave frequency (Frames). + """ + val = self._get_pv_value(self._get_dae_pv_name("autosave_freq")) + assert isinstance(val, (int, float, type(None))) + return int(val) if val is not None else None + + def set_autosave_freq(self, freq: int) -> None: + """ + Sets the ICP autosave frequency (Frames). + """ + self._set_pv_value(self._get_dae_pv_name("autosave_freq_sp"), freq, wait=True) + self.api.logger.log_info_msg(f"Autosave frequency changed to: {freq}") diff --git a/src/genie_python/genie_simulate_impl.py b/src/genie_python/genie_simulate_impl.py index 50709756..aa70ecfb 100644 --- a/src/genie_python/genie_simulate_impl.py +++ b/src/genie_python/genie_simulate_impl.py @@ -305,6 +305,7 @@ def __init__(self) -> None: "mode": "distribution", } self.change_cache = ChangeCache() + self.autosave_freq = 10 @require_runstate(["SETUP"]) def begin_run( @@ -1091,6 +1092,13 @@ def get_table_path(self, table_type: str) -> str: if table_type == "Spectra": return self.change_cache.spectra + def get_autosave_freq(self) -> int | None: + return self.autosave_freq + + def set_autosave_freq(self, freq: int) -> None: + print(f"Autosave frequency changed to: {freq}") + self.autosave_freq = freq + class API(object): def __init__( diff --git a/tests/test_genie_dae.py b/tests/test_genie_dae.py index ebff76ba..6d8099aa 100644 --- a/tests/test_genie_dae.py +++ b/tests/test_genie_dae.py @@ -735,6 +735,22 @@ def test_WHEN_temporarily_kill_isisicp_context_manager_used_THEN_isisicp_killed( dead_process.kill.assert_not_called() live_process.kill.assert_not_called() + def test_WHEN_get_autosave_frequency_THEN_reads_from_PV(self): + self.api.get_pv_value = MagicMock(return_value=10) + result = self.dae.get_autosave_freq() + + assert result == 10 + + def test_WHEN_set_autosave_frequency_THEN_writes_to_PV(self): + self.api.set_pv_value = MagicMock() + self.dae.set_autosave_freq(10) + + pv_name = self.dae._get_dae_pv_name("autosave_freq_sp") + func = self.api.set_pv_value + + self.assertTrue(func.called) + func.assert_called_with(pv_name, 10, True) + @parameterized_class( [