From 5f464dc1d90a917f8dff9371d5ba4472610cbd1c Mon Sep 17 00:00:00 2001
From: David Hammer <dhammer@mailbox.org>
Date: Fri, 26 Feb 2021 17:19:59 +0100
Subject: [PATCH] Adding prototype gain mode detection from slow data

---
 .../Characterize_AGIPD_Gain_Darks_NBC.ipynb   | 34 +++++++++++++++----
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
index 4672a39e2..c15bbfba5 100644
--- a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
+++ b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
@@ -26,7 +26,6 @@
     "run_high = 9985 # run number in which high gain data was recorded, required\n",
     "run_med = 9984 # run number in which medium gain data was recorded, required\n",
     "run_low = 9983 # run number in which low gain data was recorded, required\n",
-    "operation_mode = 'ADAPTIVE_GAIN'  # Detector operation mode, optional\n",
     "\n",
     "karabo_id = \"HED_DET_AGIPD500K2G\" # karabo karabo_id\n",
     "karabo_da = ['-1']  # a list of data aggregators names, Default [-1] for selecting all data aggregators\n",
@@ -99,6 +98,7 @@
     "\n",
     "from cal_tools.agipdlib import (get_acq_rate, get_bias_voltage,\n",
     "                                get_gain_setting, get_num_cells)\n",
+    "from cal_tools.enums import AgipdGainMode\n",
     "from cal_tools.plotting import (create_constant_overview, plot_badpix_3d,\n",
     "                                show_overview, show_processed_modules)\n",
     "from cal_tools.tools import (get_dir_creation_date, get_from_db,\n",
@@ -115,6 +115,23 @@
    "metadata": {},
    "outputs": [],
    "source": [
+    "def get_gain_mode(h5fn):\n",
+    "    h5path_gainmode = f'{h5path_ctrl.replace(\"/CONTROL/\", \"/RUN/\", 1)}/gainModeIndex/value'\n",
+    "    with h5py.File(h5fn, 'r') as fd:\n",
+    "        if h5path_gainmode in fd:\n",
+    "            return AgipdGainMode(fd[h5path_gainmode][0])\n",
+    "    return AgipdGainMode.ADAPTIVE_GAIN"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# insert control device if format string (does nothing otherwise)\n",
+    "h5path_ctrl = h5path_ctrl.format(karabo_id_control)\n",
+    "\n",
     "gains = np.arange(3)\n",
     "\n",
     "max_cells = mem_cells\n",
@@ -148,12 +165,20 @@
     "    nmods = 8\n",
     "\n",
     "control_names = [f'{in_folder}/r{r:04d}/RAW-R{r:04d}-{karabo_da_control}-S00000.h5'\n",
-    "                 for r in (run_high, run_med, run_low)] \n",
+    "                 for r in (run_high, run_med, run_low)]\n",
+    "\n",
+    "run_gain_modes = [get_gain_mode(fn) for fn in control_names]\n",
+    "if all(gm == AgipdGainMode.ADAPTIVE_GAIN for gm in run_gain_modes):\n",
+    "    fixed_gain_mode = False\n",
+    "elif run_gain_modes == [AgipdGainMode.FIXED_HIGH_GAIN, AgipdGainMode.FIXED_MEDIUM_GAIN, AgipdGainMode.FIXED_LOW_GAIN]:\n",
+    "    fixed_gain_mode = True\n",
+    "else:\n",
+    "    print(f'Something is clearly wrong; slow data indicates gain modes {run_gain_modes}')\n",
     "\n",
     "print(f\"Detector in use is {karabo_id}\")\n",
     "print(f\"Instrument {instrument}\")\n",
     "print(f\"Detector instance {dinstance}\")\n",
-    "print(f\"Operation mode is {operation_mode}\")"
+    "print(f\"Operation mode is {'fixed' if fixed_gain_mode else 'adaptive'} gain mode\")"
    ]
   },
   {
@@ -164,9 +189,6 @@
    "source": [
     "runs = [run_high, run_med, run_low]\n",
     "\n",
-    "# insert control device if format string (does nothing otherwise)\n",
-    "h5path_ctrl = h5path_ctrl.format(karabo_id_control)\n",
-    "\n",
     "if gain_setting == 0.1:\n",
     "    if creation_time.replace(tzinfo=None) < dateutil.parser.parse('2020-01-31'):\n",
     "        print(\"Set gain-setting to None for runs taken before 2020-01-31\")\n",
-- 
GitLab