Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/genie_python/genie.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
17 changes: 17 additions & 0 deletions src/genie_python/genie_dae.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand Down Expand Up @@ -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}")
8 changes: 8 additions & 0 deletions src/genie_python/genie_simulate_impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ def __init__(self) -> None:
"mode": "distribution",
}
self.change_cache = ChangeCache()
self.autosave_freq = 10

@require_runstate(["SETUP"])
def begin_run(
Expand Down Expand Up @@ -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__(
Expand Down
16 changes: 16 additions & 0 deletions tests/test_genie_dae.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
[
Expand Down
Loading