From 1d5456126ca0e15efcf4f52da7196681195a8d2d Mon Sep 17 00:00:00 2001
From: Karim Ahmed <karim.ahmed@xfel.eu>
Date: Tue, 5 May 2020 16:06:21 +0200
Subject: [PATCH] gain_setting and expse creation_time

---
 ...aracterize_AGIPD_Gain_FlatFields_NBC.ipynb | 78 +++++++++++++++----
 1 file changed, 62 insertions(+), 16 deletions(-)

diff --git a/notebooks/AGIPD/Characterize_AGIPD_Gain_FlatFields_NBC.ipynb b/notebooks/AGIPD/Characterize_AGIPD_Gain_FlatFields_NBC.ipynb
index e4eebca38..89bb40836 100644
--- a/notebooks/AGIPD/Characterize_AGIPD_Gain_FlatFields_NBC.ipynb
+++ b/notebooks/AGIPD/Characterize_AGIPD_Gain_FlatFields_NBC.ipynb
@@ -52,7 +52,10 @@
     "db_input = True # retreive data from calibration database, setting offset-store will overwrite this\n",
     "deviation_threshold = 0.75 # peaks with an absolute location deviation larger than the medium are are considere bad\n",
     "acqrate = 2.2 # acquisition rate\n",
-    "dont_use_dir_creation_date = False"
+    "use_dir_creation_date = True\n",
+    "creation_time = \"\" # To overwrite the measured creation_time. Required Format: YYYY-MM-DD HR:MN:SC.ms e.g. 2019-07-04 11:02:41.00\n",
+    "gain_setting = 0.1 # gain setting can have value 0 or 1, Default=0.1 for no (None) gain-setting\n",
+    "karabo_da_control = \"AGIPD1MCTRL00\" # karabo DA for control infromation"
    ]
   },
   {
@@ -66,13 +69,15 @@
    },
    "outputs": [],
    "source": [
-    "import warnings\n",
-    "warnings.filterwarnings('ignore')\n",
     "# std library imports\n",
+    "from datetime import datetime\n",
+    "import dateutil\n",
     "from functools import partial\n",
-    "import h5py\n",
+    "import warnings\n",
+    "warnings.filterwarnings('ignore')\n",
     "import os\n",
     "\n",
+    "import h5py\n",
     "# numpy and matplot lib specific\n",
     "import numpy as np\n",
     "import matplotlib\n",
@@ -96,11 +101,12 @@
     "profile = cluster_profile\n",
     "\n",
     "from iCalibrationDB import ConstantMetaData, Constants, Conditions, Detectors, Versions\n",
-    "from cal_tools.tools import gain_map_files, parse_runs, run_prop_seq_from_path, get_notebook_name, get_dir_creation_date, get_random_db_interface\n",
-    "from cal_tools.influx import InfluxLogger\n",
+    "from cal_tools.agipdlib import get_gain_setting\n",
     "from cal_tools.enums import BadPixels\n",
+    "from cal_tools.influx import InfluxLogger\n",
     "from cal_tools.plotting import show_overview, plot_badpix_3d\n",
-    "from datetime import datetime\n",
+    "from cal_tools.tools import gain_map_files, parse_runs, run_prop_seq_from_path, get_notebook_name, get_dir_creation_date, get_random_db_interface\n",
+    "\n",
     "\n",
     "# usually no need to change these lines\n",
     "sensor_size = [128, 512]\n",
@@ -114,7 +120,21 @@
     "memory_cells = mem_cells\n",
     "\n",
     "\n",
-    "if not dont_use_dir_creation_date:\n",
+    "\n",
+    "\n",
+    "# Define constant creation time.\n",
+    "if creation_time:\n",
+    "    try:\n",
+    "        creation_time = datetime.strptime(creation_time, '%Y-%m-%d %H:%M:%S.%f')\n",
+    "    except Exception as e:\n",
+    "        print(f\"creation_time value error: {e}.\" \n",
+    "               \"Use same format as YYYY-MM-DD HR:MN:SC.ms e.g. 2019-07-04 11:02:41.00/n\")\n",
+    "        creation_time = None\n",
+    "        print(\"Given creation time wont be used.\")\n",
+    "else:\n",
+    "    creation_time = None\n",
+    "\n",
+    "if not creation_time and use_dir_creation_date:\n",
     "    ntries = 100\n",
     "    while ntries > 0:\n",
     "        try:\n",
@@ -123,9 +143,8 @@
     "        except OSError:\n",
     "            pass\n",
     "        ntries -= 1\n",
-    "        \n",
     "    \n",
-    "    print(\"Using {} as creation time\".format(creation_time))\n",
+    "print(\"Using {} as creation time\".format(creation_time))\n",
     "    \n",
     "runs = parse_runs(runs)\n",
     "\n",
@@ -169,6 +188,29 @@
     "cal_db_interface = get_random_db_interface(cal_db_interface)"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "control_fname = f'{in_folder}/{runs[0]}/RAW-{runs[0].upper()}-{karabo_da_control}-S00000.h5'\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",
+    "        gain_setting = None\n",
+    "    else:\n",
+    "        try:\n",
+    "            gain_setting = get_gain_setting(control_fname, h5path_ctrl)\n",
+    "        except Exception as e:\n",
+    "            print(f'Error while reading gain setting from: \\n{control_fname}')\n",
+    "            print(e)\n",
+    "            print(\"Gain setting is not found in the control information\")\n",
+    "            print(\"Data will not be processed\")\n",
+    "            sequences = []\n",
+    "print(f\"Gain setting: {gain_setting}\")"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -212,7 +254,8 @@
     "        det = getattr(Detectors, dinstance)\n",
     "\n",
     "        # set the operating condition\n",
-    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage, acquisition_rate=acqrate)\n",
+    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage,\n",
+    "                                          acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        metadata.detector_condition = condition\n",
     "\n",
     "        # specify the a version for this constant\n",
@@ -230,7 +273,8 @@
     "        metadata.calibration_constant = noise\n",
     "\n",
     "        # set the operating condition\n",
-    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage, acquisition_rate=acqrate)\n",
+    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage,\n",
+    "                                          acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        metadata.detector_condition = condition\n",
     "\n",
     "        # specify the a version for this constant\n",
@@ -248,7 +292,8 @@
     "        metadata.calibration_constant = thresholds\n",
     "\n",
     "        # set the operating condition\n",
-    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage, acquisition_rate=acqrate)\n",
+    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage,\n",
+    "                                          acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        metadata.detector_condition = condition\n",
     "\n",
     "        # specify the a version for this constant\n",
@@ -267,7 +312,8 @@
     "        metadata.calibration_constant = pc\n",
     "\n",
     "        # set the operating condition\n",
-    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage, acquisition_rate=acqrate)\n",
+    "        condition = Conditions.Dark.AGIPD(memory_cells=max_cells, bias_voltage=bias_voltage,\n",
+    "                                          acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        metadata.detector_condition = condition\n",
     "\n",
     "        # specify the a version for this constant\n",
@@ -1093,7 +1139,7 @@
     "        # set the operating condition\n",
     "        condition = Conditions.Illuminated.AGIPD(memory_cells, bias_voltage, 9.2,\n",
     "                                                 pixels_x=512, pixels_y=128, beam_energy=None,\n",
-    "                                                 acquisition_rate=acqrate)\n",
+    "                                                 acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        \n",
     "        metadata.detector_condition = condition\n",
     "\n",
@@ -1116,7 +1162,7 @@
     "        # set the operating condition\n",
     "        condition = Conditions.Illuminated.AGIPD(memory_cells, bias_voltage, 9.2,\n",
     "                                                 pixels_x=512, pixels_y=128, beam_energy=None,\n",
-    "                                                 acquisition_rate=acqrate)\n",
+    "                                                 acquisition_rate=acqrate, gain_setting=gain_setting)\n",
     "        \n",
     "        metadata.detector_condition = condition\n",
     "\n",
-- 
GitLab