From 9da8630653771b133d2a4c4cc447c8ffc16728b6 Mon Sep 17 00:00:00 2001
From: ahmedk <karim.ahmed@xfel.eu>
Date: Tue, 10 Oct 2023 11:10:26 +0200
Subject: [PATCH] add test and start addressing fixed operation mode when all
 patters are 0

---
 .../Characterize_AGIPD_Gain_Darks_NBC.ipynb   |  1 +
 src/cal_tools/agipdlib.py                     | 19 ++++++++++++-------
 tests/test_agipdlib.py                        | 13 ++++++++++++-
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
index ee4a1ec27..0bbba6c5e 100644
--- a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
+++ b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
@@ -269,6 +269,7 @@
     "    ctrl_src=ctrl_src,\n",
     ")\n",
     "agipd_ctrl_dark.sort_dark_runs()\n",
+    "agipd_ctrl_dark.validate_gain_modes()\n",
     "if mem_cells == 0:\n",
     "    mem_cells = agipd_ctrl_dark.get_memory_cells()\n",
     "\n",
diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py
index 61a8fac91..fdb8df0dd 100644
--- a/src/cal_tools/agipdlib.py
+++ b/src/cal_tools/agipdlib.py
@@ -333,15 +333,20 @@ class AgipdCtrlRuns:
                     f"{name} is not the same for all runs {self.runs}"
                     f" with values of {values}, respectively.")
 
-    def sort_dark_runs(self):
+    def sort_dark_runs(self, fixed_gain_mode):
         """Order dark runs based on PatternTypeIndex."""
         assert len(self.run_ctrls) == 3, f"AGIPD dark runs are expected to be 3. {len(self.run_ctrls)} runs are given."
         # Expected patterns: XRay: 0, DarkHG: 1, DarkMG: 2, DarkLG: 3,
         # SlopesPC: 4  # Gain runs??. Any more expected PatternTypeIndexs?
-        patterns = []
-        for c in self.run_ctrls:
-            patterns.append(c.run_dc[
-                self.ctrl_src, "patternTypeIndex"].as_single_value())
+        if fixed_gain_mode: 
+            # used gain mode 
+            pass
+        else:  # Adaptive mode. patterns -> DarkHG: 1, DarkMG: 2, DarkLG: 3
+            patterns = []
+                for c in self.run_ctrls:
+                    patterns.append(c.run_dc[
+                        self.ctrl_src, "patternTypeIndex"].as_single_value())
+
         zipped_lists = zip(patterns, self.runs, self.run_ctrls)
 
         # Sort the lists based on the patterns
@@ -349,9 +354,9 @@ class AgipdCtrlRuns:
         _, sorted_runs, sorted_run_ctrls = zip(*sorted_zipped_lists)
 
         if sorted_runs != self.runs:
-            Warning("Given dark runs are unsorted. Run will be sorted from"
+            Warning("Given dark runs are unsorted. Runs will be sorted from"
                     f" {self.runs} with patternTypeIndexs {patterns} to "
-                    f" {list(self.runs_dict.keys())}.")
+                    f" {sorted_runs}.")
              # Update run_ctrls and runs order
             self.runs = sorted_runs
             self.run_ctrls = sorted_run_ctrls
diff --git a/tests/test_agipdlib.py b/tests/test_agipdlib.py
index 17f29f655..e312c377a 100644
--- a/tests/test_agipdlib.py
+++ b/tests/test_agipdlib.py
@@ -306,9 +306,20 @@ def test_raise_validate_gain_modes():
 
     unsorted_fixed_gain_ctrls = AgipdCtrlRuns(
         raw_folder=TEST_RAW_FOLDER,
-        runs=[9013, 9011, 9012],
+        runs=[9013, 9011, 9012],  # unsorted fixed gain runs
         image_src=SPB_AGIPD_INST_SRC,
         ctrl_src=CTRL_SRC,
     )
     with pytest.raises(ValueError):
         unsorted_fixed_gain_ctrls.validate_gain_modes()
+
+@pytest.mark.requires_gpfs
+def test_sort_dark_runs():
+    unsorted_runs_ctrls = AgipdCtrlRuns(
+        raw_folder=TEST_RAW_FOLDER,
+        runs=[9013, 9011, 9012],  # unsorted runs
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC,
+    )
+    unsorted_runs_ctrls.sort_dark_runs()
+    assert unsorted_runs_ctrls.runs == [9011, 9012, 9013]
\ No newline at end of file
-- 
GitLab