From c6dbeb4d143a0b67bf2d2e603e73d408345c8044 Mon Sep 17 00:00:00 2001 From: ahmedk <karim.ahmed@xfel.eu> Date: Mon, 24 Oct 2022 17:34:05 +0200 Subject: [PATCH] MR comments: mode and settings function doesnt return None --- ...rk_analysis_all_gains_burst_mode_NBC.ipynb | 7 +-- src/cal_tools/enums.py | 1 - src/cal_tools/jungfraulib.py | 36 ++++++++----- tests/test_jungfraulib.py | 50 ++++++++++++------- 4 files changed, 60 insertions(+), 34 deletions(-) diff --git a/notebooks/Jungfrau/Jungfrau_dark_analysis_all_gains_burst_mode_NBC.ipynb b/notebooks/Jungfrau/Jungfrau_dark_analysis_all_gains_burst_mode_NBC.ipynb index 49b57db8c..90041343d 100644 --- a/notebooks/Jungfrau/Jungfrau_dark_analysis_all_gains_burst_mode_NBC.ipynb +++ b/notebooks/Jungfrau/Jungfrau_dark_analysis_all_gains_burst_mode_NBC.ipynb @@ -116,6 +116,7 @@ " JungfrauGainMode.FIX_GAIN_1.value, JungfrauGainMode.FIX_GAIN_2.value]\n", "dynamic_settings = [\n", " JungfrauGainMode.FORCE_SWITCH_HG1.value, JungfrauGainMode.FORCE_SWITCH_HG2.value]\n", + "old_fixed_settings = [\"fixgain1\", \"fixgain2\"]\n", "\n", "creation_time = None\n", "if use_dir_creation_date:\n", @@ -196,14 +197,14 @@ "if med_low_settings == [None, None]:\n", " print(\"WARNING: run.settings is not stored in the data to read. \"\n", " f\"Hence assuming gain_mode = {gain_mode} for adaptive old data.\")\n", - "elif med_low_settings == [\"dynamic\", \"forceswitchg1\"]:\n", + "elif med_low_settings == [\"dynamicgain\", \"forceswitchg1\"]:\n", " print(f\"WARNING: run.settings for medium and low gain runs are wrong {med_low_settings}. \"\n", " f\"This is an expected bug for old raw data. Setting gain_mode to {gain_mode}.\")\n", "# Validate that low_med_settings is not a mix of adaptive and fixed settings.\n", - "elif not (sorted(med_low_settings) in [fixed_settings, dynamic_settings]): # noqa\n", + "elif not (sorted(med_low_settings) in [fixed_settings, dynamic_settings, old_fixed_settings]): # noqa\n", " raise ValueError(\n", " \"Medium and low run settings are not as expected. \"\n", - " f\"Either {dynamic_settings} or {fixed_settings} are expected.\\n\"\n", + " f\"Either {dynamic_settings}, {fixed_settings}, or {old_fixed_settings} are expected.\\n\"\n", " f\"Got {sorted(med_low_settings)} for both runs, respectively.\")\n", "\n", "print(f\"Gain mode is {gain_mode} ({med_low_settings})\")\n", diff --git a/src/cal_tools/enums.py b/src/cal_tools/enums.py index 7f50f388b..eeebf151d 100644 --- a/src/cal_tools/enums.py +++ b/src/cal_tools/enums.py @@ -55,7 +55,6 @@ class JungfrauSettings(Enum): class JungfrauGainMode(Enum): """Jungfrau run gain mode.""" - # old setting, new setting, new mode DYNAMIC = "dynamic" FIX_GAIN_1 = "fixg1" FIX_GAIN_2 = "fixg2" diff --git a/src/cal_tools/jungfraulib.py b/src/cal_tools/jungfraulib.py index 363d43831..fdfdb0bd5 100644 --- a/src/cal_tools/jungfraulib.py +++ b/src/cal_tools/jungfraulib.py @@ -5,7 +5,7 @@ import extra_data from cal_tools.enums import JungfrauGainMode, JungfrauSettings -def _old_settings_to_new(settings, index): +def _old_settings_to_new(settings: str, index: int) -> str: """At the end of 2022, there is a sls update. - `settings.value` values was updated from 6 possible values to only 2. - `gainMode.value` dataset was created with 5 possible values. @@ -43,24 +43,22 @@ class JungfrauCtrl(): self.run_settings = self._get_settings() self.run_mode = self._get_mode() - def _get_settings(self) -> Optional[str]: + def _get_settings(self) -> str: """Get JUNGFRAU run settings and mode.""" try: - settings = self.run_dc.get_run_value(self.ctrl_src, "settings") - if settings not in [m.value for m in JungfrauSettings]: - _old_settings_to_new(settings, 0) - return settings + return self.run_dc.get_run_value(self.ctrl_src, "settings") except extra_data.PropertyNameError: print("\'settings.value\' key " - "is not available for this run.") + "is not available for this run. " + "`run_settings` is set to `dynamicgain`") + return "dynamicgain" # old data are set to `dynamicgain`. - def _get_mode(self) -> Optional[str]: + def _get_mode(self) -> str: """Get run mode from `gainMode` dataset.""" try: return self.run_dc.get_run_value(self.ctrl_src, "gainMode") except extra_data.PropertyNameError: - if self.run_settings is not None: - return _old_settings_to_new(self.run_settings, 1) + return self.run_settings def get_memory_cells(self) -> Tuple[int, int]: n_storage_cells = int(self.run_dc.get_run_value( @@ -88,7 +86,14 @@ class JungfrauCtrl(): - `1` if run_settings = highgain0. - `0` if run_settings = gain0 or None. """ - if self.run_settings == JungfrauSettings.HIGH_GAIN_0: + # Check if `run_settings` is of an old settings value + # to convert into new settings value. + if self.run_settings in [s.value for s in JungfrauSettings]: + settings = self.run_settings + else: + settings = _old_settings_to_new(self.run_settings, 0) + + if settings == JungfrauSettings.HIGH_GAIN_0.value: return 1 else: # JungfrauSettings.GAIN_0 return 0 @@ -98,7 +103,14 @@ class JungfrauCtrl(): - `0` if run_mode = dynamic, forceswitchg1, forceswitchg2, or None. - `1` if run_mode = fixg1 or fixg2. """ - if self.run_mode in [ + # Check if run_mode is of an old settings to convert + # into new mode value. + if self.run_mode in [m.value for m in JungfrauGainMode]: + mode = self.run_mode + else: + mode = _old_settings_to_new(self.run_mode, 1) + + if mode in [ JungfrauGainMode.FIX_GAIN_1.value, JungfrauGainMode.FIX_GAIN_2.value, ]: diff --git a/tests/test_jungfraulib.py b/tests/test_jungfraulib.py index 76c9d43f5..eb7580ad7 100644 --- a/tests/test_jungfraulib.py +++ b/tests/test_jungfraulib.py @@ -1,33 +1,47 @@ import pytest +from extra_data import RunDirectory -from cal_tools.jungfraulib import _old_settings_to_new +from cal_tools.jungfraulib import JungfrauCtrl + +# TODO: replace with mocked RAW data as in tests/test_agipdlib.py +JF = JungfrauCtrl( + run_dc=RunDirectory("/gpfs/exfel/exp/CALLAB/202130/p900203/raw/r9031/"), + ctrl_src="FXE_XAD_JF1M/DET/CONTROL", + ) @pytest.mark.parametrize( 'settings,result', [ - ('dynamicgain', 'gain0'), - ('dynamichg0', 'highgain0'), - ('fixgain1', 'gain0'), - ('fixgain2', 'gain0'), - ('forceswitchg1', 'gain0'), - ('forceswitchg2', 'gain0'), + ('dynamicgain', 0), + ('dynamichg0', 1), + ('fixgain1', 0), + ('fixgain2', 0), + ('forceswitchg1', 0), + ('forceswitchg2', 0), + ('gain0', 0), + ('highgain0', 1), ], ) -def test_old_settings_to_new_settings(settings, result): - assert _old_settings_to_new(settings, 0) == result +def test_get_gain_setting(settings, result): + JF.run_settings = settings + assert JF.get_gain_setting() == result @pytest.mark.parametrize( - 'settings,result', + 'mode,result', [ - ('dynamicgain', 'dynamic'), - ('dynamichg0', 'dynamic'), - ('fixgain1', 'fixg1'), - ('fixgain2', 'fixg2'), - ('forceswitchg1', 'forceswitchg1'), - ('forceswitchg2', 'forceswitchg2'), + ('dynamicgain', 0), + ('dynamichg0', 0), + ('fixgain1', 1), + ('fixgain2', 1), + ('forceswitchg1', 0), + ('forceswitchg2', 0), + ('dynamic', 0), + ('fixg1', 1), + ('fixg2', 1), ], ) -def test_old_settings_to_new_mode(settings, result): - assert _old_settings_to_new(settings, 1) == result +def test_get_gain_mode(mode, result): + JF.run_mode = mode + assert JF.get_gain_mode() == result -- GitLab