From b2341f5d63bac13d1c51c21e0fd87b3cbdf7a8c4 Mon Sep 17 00:00:00 2001
From: ahmedk <karim.ahmed@xfel.eu>
Date: Wed, 10 Nov 2021 09:42:52 +0100
Subject: [PATCH] remove unneeded parameters and alg.

---
 .../pnCCD/Characterize_pnCCD_Dark_NBC.ipynb   | 98 +++++++++----------
 notebooks/pnCCD/Correct_pnCCD_NBC.ipynb       | 59 +++++------
 2 files changed, 71 insertions(+), 86 deletions(-)

diff --git a/notebooks/pnCCD/Characterize_pnCCD_Dark_NBC.ipynb b/notebooks/pnCCD/Characterize_pnCCD_Dark_NBC.ipynb
index 1cbdcd490..a1e303b74 100644
--- a/notebooks/pnCCD/Characterize_pnCCD_Dark_NBC.ipynb
+++ b/notebooks/pnCCD/Characterize_pnCCD_Dark_NBC.ipynb
@@ -31,7 +31,6 @@
     "\n",
     "# Data files parameters.\n",
     "karabo_da = ['PNCCD01'] # data aggregators\n",
-    "karabo_da_control = \"PNCCD02\" # file inset for control data\n",
     "karabo_id = \"SQS_NQS_PNCCD1MP\" # karabo prefix of PNCCD devices\n",
     "receiver_id = \"PNCCD_FMT-0\" # inset for receiver devices\n",
     "path_template = 'RAW-R{:04d}-{}-S{{:05d}}.h5'  # the template to use to access data\n",
@@ -46,6 +45,7 @@
     "creation_time = \"\" # To overwrite the measured creation_time. Required Format: YYYY-MM-DD HR:MN:SC.00 e.g. 2019-07-04 11:02:41.00\n",
     "\n",
     "# Parameters used for injecting calibration constants.\n",
+    "set_parameters_manually = False  # Boolean for setting parameter values manually instead of reading control values.\n",
     "fix_temperature_top = 0.  # fix temperature of top pnCCD sensor in K. Set to 0, to use the value from slow data\n",
     "fix_temperature_bot = 0.  # fix temperature of bottom pnCCD sensor in K. Set to 0, to use the value from slow data\n",
     "temp_limits = 5  # temperature limits in which calibration parameters are considered equal\n",
@@ -87,7 +87,6 @@
     "from extra_data import RunDirectory\n",
     "\n",
     "%matplotlib inline\n",
-    "import XFELDetAna.xfelprofiler as xprof\n",
     "from cal_tools import pnccdlib\n",
     "from cal_tools.enums import BadPixels\n",
     "from cal_tools.step_timing import StepTimer\n",
@@ -104,9 +103,6 @@
     "from IPython.display import Markdown, display\n",
     "from prettytable import PrettyTable\n",
     "\n",
-    "profiler = xprof.Profiler()\n",
-    "profiler.disable()\n",
-    "\n",
     "from XFELDetAna import xfelpyanatools as xana\n",
     "from XFELDetAna import xfelpycaltools as xcal"
    ]
@@ -189,7 +185,7 @@
     "run_dc = RunDirectory(f\"{in_folder}/r{run:04d}\")\n",
     "\n",
     "# extract control data\n",
-    "if karabo_da_control:\n",
+    "if not set_parameters_manually:\n",
     "    ctrl_data = pnccdlib.PnccdCtrl(run_dc, karabo_id)\n",
     "    \n",
     "    if bias_voltage == 0:\n",
@@ -219,9 +215,6 @@
    "outputs": [],
    "source": [
     "# Reading Parameters such as Detector Bias, Gain, etc. from the Data:\n",
-    "profile = False\n",
-    "run_parallel = False # for parallel computation\n",
-    "memoryCells = 1 # pnCCD has 1 memory cell\n",
     "sensorSize = [pixels_x, pixels_y]\n",
     "# sensor area will be analysed according to blocksize\n",
     "blockSize = [sensorSize[0]//2, sensorSize[1]//2]\n",
@@ -232,7 +225,7 @@
     "n_trains = data_dc[pixel_data].shape[0]\n",
     "\n",
     "if max_trains != 0:\n",
-    "    n_trains = max_trains\n",
+    "    n_trains = min(n_trains, max_trains)\n",
     "if n_trains < min_trains:\n",
     "    raise ValueError(\n",
     "        f\"Files {data_dc.files} consists of less than\"\n",
@@ -387,7 +380,7 @@
     "    sensorSize,\n",
     "    commonModeBlockSize,\n",
     "    commonModeAxis,\n",
-    "    parallel=run_parallel,\n",
+    "    parallel=False,\n",
     "    dType=np.float32, stride=1,\n",
     "    noiseMap=noiseMap[..., np.newaxis],  # np.float32\n",
     "    minFrac=0,\n",
@@ -405,11 +398,11 @@
     "# negative bin to ensure the offset and common mode corrections actually move the signal to zero:\n",
     "\n",
     "# For offset corrected data:\n",
-    "histCalCorrected = xcal.HistogramCalculator(sensorSize, bins=bins, range=bin_range, memoryCells=memoryCells,\n",
-    "                                            parallel=run_parallel, gains=None, blockSize=blockSize)\n",
+    "histCalCorrected = xcal.HistogramCalculator(sensorSize, bins=bins, range=bin_range, memoryCells=1,\n",
+    "                                            parallel=False, gains=None, blockSize=blockSize)\n",
     "# For common mode corrected data:\n",
-    "histCalCMCorrected = xcal.HistogramCalculator(sensorSize, bins=bins, range=bin_range, memoryCells=memoryCells,\n",
-    "                                              parallel=run_parallel, gains=None, blockSize=blockSize)"
+    "histCalCMCorrected = xcal.HistogramCalculator(sensorSize, bins=bins, range=bin_range, memoryCells=1,\n",
+    "                                              parallel=False, gains=None, blockSize=blockSize)"
    ]
   },
   {
@@ -658,7 +651,7 @@
     "    sensorSize,\n",
     "    commonModeBlockSize,\n",
     "    commonModeAxis,\n",
-    "    parallel=run_parallel,\n",
+    "    parallel=False,\n",
     "    dType=np.float32, stride=1,\n",
     "    noiseMap=noiseMapCM[..., np.newaxis], minFrac=0,\n",
     ")"
@@ -674,30 +667,26 @@
     "def correct_image(wid, idx, d):\n",
     "    \n",
     "    d[bad_pixels != 0] = np.nan # masking data for bad pixels and equating the values to np.nan\n",
-    "    d_off1 = d - offsetMap\n",
-    "\n",
-    "    d_off1 = np.squeeze(cmCorrection.correct(\n",
-    "        d_off1[..., np.newaxis],\n",
-    "        cellTable=np.zeros((1,), dtype=np.float32)))\n",
-    "\n",
-    "    d[d_off1 > event_threshold] = np.nan # discarding events caused by cosmic rays\n",
+    "    d_off = d - offsetMap\n",
+    "    d_off_cm = np.squeeze(cmCorrection.correct(\n",
+    "        d_off[..., np.newaxis], cellTable=np.zeros((1,), dtype=np.float32)))\n",
     "\n",
-    "    d_off2 = d - offsetMap  # Offset correction\n",
-    "    offset_corr_data2[idx, ...] = d_off2  # Will be used for plotting\n",
-    "    histCalCorrected.fill(d_off2[..., np.newaxis])\n",
+    "    # discarding events caused by cosmic rays\n",
+    "    d_off[d_off_cm > event_threshold] = np.nan\n",
+    "    d_off_cm[d_off_cm > event_threshold] = np.nan  \n",
     "\n",
-    "    d_off2 = cmCorrection.correct(\n",
-    "        d_off2,\n",
-    "        cellTable=np.zeros((1,), dtype=np.float32))\n",
-    "\n",
-    "    histCalCMCorrected.fill(d_off2)\n",
-    "    corr_data[idx, ...] = np.squeeze(d_off2)\n",
+    "    histCalCorrected.fill(d_off[..., np.newaxis])\n",
     "\n",
+    "    offset_corr_data[idx, ...] = d_off  # Will be used for plotting\n",
+    "    \n",
+    "    corr_data[idx, ...] = np.squeeze(d_off_cm)\n",
+    "    histCalCorrected.fill(d_off)\n",
+    "    histCalCMCorrected.fill(d_off_cm)\n",
     "context = psh.context.ThreadContext(num_workers=10)\n",
     "\n",
     "corr_data = context.alloc(\n",
     "    shape=(n_trains, sensorSize[0], sensorSize[1]), dtype=np.float32)\n",
-    "offset_corr_data2 = context.alloc(\n",
+    "offset_corr_data = context.alloc(\n",
     "    shape=(n_trains, sensorSize[0], sensorSize[1]), dtype=np.float32)\n",
     "\n",
     "context.map(correct_image, data.copy())\n",
@@ -758,11 +747,11 @@
     "t0 = PrettyTable()\n",
     "t0.title = \"Comparison of the Second Round of Corrections - Bad Pixels Excluded\"\n",
     "t0.field_names = [\"Dark Pedestal After Offset Correction\", \"Dark Pedestal After Offset and Common Mode Corrections\"]\n",
-    "t0.add_row([\"Mean: {:0.3f} ADU\".format(np.nanmean(offset_corr_data2)), \"Mean: {:0.3f} ADU\"\n",
+    "t0.add_row([\"Mean: {:0.3f} ADU\".format(np.nanmean(offset_corr_data)), \"Mean: {:0.3f} ADU\"\n",
     "            .format(np.nanmean(corr_data))])\n",
-    "t0.add_row([\"Median: {:0.3f} ADU\".format(np.nanmedian(offset_corr_data2)), \"Median: {:0.3f} ADU\"\n",
+    "t0.add_row([\"Median: {:0.3f} ADU\".format(np.nanmedian(offset_corr_data)), \"Median: {:0.3f} ADU\"\n",
     "            .format(np.nanmedian(corr_data))])\n",
-    "t0.add_row([\"Standard Deviation: {:0.3f} ADU\".format(np.nanstd(offset_corr_data2)),\n",
+    "t0.add_row([\"Standard Deviation: {:0.3f} ADU\".format(np.nanstd(offset_corr_data)),\n",
     "            \"Standard Deviation: {:0.3f} ADU\".format(np.nanstd(corr_data))])\n",
     "print(t0,'\\n')\n",
     "step_timer.done_step(\"Plotting time\")"
@@ -873,28 +862,29 @@
     "    'BadPixelsDark': bad_pixels[..., np.newaxis],\n",
     "}\n",
     "md = None\n",
+    "\n",
+    "det = Constants.CCD(DetectorTypes.pnCCD)\n",
+    "\n",
+    "# set the operating condition\n",
+    "condition = Conditions.Dark.CCD(bias_voltage=bias_voltage,\n",
+    "                                integration_time=integration_time,\n",
+    "                                gain_setting=gain,\n",
+    "                                temperature=fix_temperature_top,\n",
+    "                                pixels_x=pixels_x,\n",
+    "                                pixels_y=pixels_y)\n",
+    "for parm in condition.parameters:\n",
+    "    if parm.name == \"Sensor Temperature\":\n",
+    "        parm.lower_deviation = temp_limits\n",
+    "        parm.upper_deviation = temp_limits\n",
+    "\n",
+    "db_module = get_pdu_from_db(karabo_id, karabo_da, getattr(det, 'Offset')(),\n",
+    "                            condition, cal_db_interface,\n",
+    "                            snapshot_at=creation_time)[0]\n",
+    "\n",
     "for const_name in constant_maps.keys():\n",
-    "    det = Constants.CCD(DetectorTypes.pnCCD)\n",
     "    const = getattr(det, const_name)()\n",
     "    const.data = constant_maps[const_name].data\n",
     "\n",
-    "    # set the operating condition\n",
-    "    condition = Conditions.Dark.CCD(bias_voltage=bias_voltage,\n",
-    "                                    integration_time=integration_time,\n",
-    "                                    gain_setting=gain,\n",
-    "                                    temperature=fix_temperature_top,\n",
-    "                                    pixels_x=pixels_x,\n",
-    "                                    pixels_y=pixels_y)\n",
-    "\n",
-    "    for parm in condition.parameters:\n",
-    "        if parm.name == \"Sensor Temperature\":\n",
-    "            parm.lower_deviation = temp_limits\n",
-    "            parm.upper_deviation = temp_limits\n",
-    "\n",
-    "    db_module = get_pdu_from_db(karabo_id, karabo_da, const,\n",
-    "                                condition, cal_db_interface,\n",
-    "                                snapshot_at=creation_time)[0]\n",
-    "\n",
     "    if db_output:\n",
     "        md = send_to_db(db_module, karabo_id, const, condition,\n",
     "                        file_loc=file_loc, report_path=report,\n",
diff --git a/notebooks/pnCCD/Correct_pnCCD_NBC.ipynb b/notebooks/pnCCD/Correct_pnCCD_NBC.ipynb
index 6e83b31d2..181eb9825 100644
--- a/notebooks/pnCCD/Correct_pnCCD_NBC.ipynb
+++ b/notebooks/pnCCD/Correct_pnCCD_NBC.ipynb
@@ -24,7 +24,6 @@
     "sequences_per_node = 1  # number of sequences running on the same slurm node.\n",
     "\n",
     "karabo_da = 'PNCCD01' # data aggregators\n",
-    "karabo_da_control = \"PNCCD02\" # file inset for control data\n",
     "karabo_id = \"SQS_NQS_PNCCD1MP\" # karabo prefix of PNCCD devices\n",
     "receiver_id = \"PNCCD_FMT-0\" # inset for receiver devices\n",
     "path_template = 'RAW-R{:04d}-{}-S{:05d}.h5'  # the template to use to access data\n",
@@ -43,6 +42,7 @@
     "limit_images = 0  # this parameter is used for limiting number of images to correct from a sequence file. ONLY FOR TESTING.\n",
     "\n",
     "# Conditions for retrieving calibration constants\n",
+    "set_parameters_manually = False  # Boolean for setting parameter values manually instead of reading control values.\n",
     "fix_temperature_top = 0. # fix temperature for top sensor in K, set to 0. to use value from slow data.\n",
     "fix_temperature_bot = 0. # fix temperature for bottom senspr in K, set to 0. to use value from slow data.\n",
     "gain = -1  # the detector's gain setting, It is later read from file and this value is overwritten\n",
@@ -111,7 +111,6 @@
     "\n",
     "%matplotlib inline\n",
     "\n",
-    "import XFELDetAna.xfelprofiler as xprof\n",
     "from XFELDetAna import xfelpyanatools as xana\n",
     "from XFELDetAna import xfelpycaltools as xcal\n",
     "from cal_tools import pnccdlib\n",
@@ -124,10 +123,7 @@
     "from cal_tools.step_timing import StepTimer\n",
     "from cal_tools import h5_copy_except\n",
     "from iCalibrationDB import Conditions, ConstantMetaData, Constants\n",
-    "from iCalibrationDB.detectors import DetectorTypes\n",
-    "\n",
-    "profiler = xprof.Profiler()\n",
-    "profiler.disable()"
+    "from iCalibrationDB.detectors import DetectorTypes"
    ]
   },
   {
@@ -143,10 +139,6 @@
     "print(f\"pnCCD size is: {pixels_x}x{pixels_y} pixels.\")\n",
     "print(f'Calibration database interface selected: {cal_db_interface}')\n",
     "\n",
-    "proposal = list(filter(None, in_folder.strip('/').split('/')))[-2]\n",
-    "file_loc =f'Proposal: {proposal}, Run: {run}'\n",
-    "print(file_loc)\n",
-    "\n",
     "# Paths to the data:\n",
     "instrument_src = instrument_source_template.format(karabo_id, receiver_id)\n",
     "print(f\"Instrument H5File source: {instrument_src}\\n\")\n",
@@ -184,11 +176,15 @@
    "metadata": {},
    "outputs": [],
    "source": [
+    "run_dc = RunDirectory(Path(in_folder) / f\"r{run:04d}\")\n",
+    "ctrl_data = pnccdlib.PnccdCtrl(run_dc, karabo_id)\n",
+    "\n",
+    "proposal = run_dc.run_metadata()[\"proposalNumber\"]\n",
+    "print(f'Proposal: {proposal}, Run: {run}')\n",
+    "\n",
     "# extract control data\n",
-    "if karabo_da_control:\n",
+    "if not set_parameters_manually:\n",
     "    step_timer.start()\n",
-    "    run_dc = RunDirectory(Path(in_folder) / f\"r{run:04d}\")\n",
-    "    ctrl_data = pnccdlib.PnccdCtrl(run_dc, karabo_id)\n",
     "\n",
     "    if bias_voltage == 0.:\n",
     "        bias_voltage = ctrl_data.get_bias_voltage()\n",
@@ -198,6 +194,7 @@
     "        fix_temperature_top = ctrl_data.get_fix_temperature_top()\n",
     "    if fix_temperature_bot == 0:\n",
     "        fix_temperature_bot = ctrl_data.get_fix_temperature_bot()\n",
+    "\n",
     "    step_timer.done_step(\"Reading control parameters.\")\n",
     "\n",
     "# Printing the Parameters Read from the Data File:\n",
@@ -315,8 +312,6 @@
    "outputs": [],
    "source": [
     "# Sensor size and block size definitions (important for common mode and other corrections):\n",
-    "run_parallel = False\n",
-    "memoryCells = 1 # pnCCD has 1 memory cell\n",
     "sensorSize = [pixels_x, pixels_y]\n",
     "blockSize = [sensorSize[0]//2, sensorSize[1]//2] # sensor area will be analysed according to blockSize\n",
     "xcal.defaultBlockSize = blockSize # for xcal.HistogramCalculators "
@@ -485,7 +480,7 @@
     "    cmCorrection = xcal.CommonModeCorrection([pixels_x, pixels_y],\n",
     "                                             blockSize,\n",
     "                                             commonModeAxis,\n",
-    "                                             parallel=run_parallel, dType=np.float32, stride=1,\n",
+    "                                             parallel=False, dType=np.float32, stride=1,\n",
     "                                             noiseMap=constants[\"Noise\"].astype(np.float32), minFrac=0.25)\n",
     "\n",
     "if corr_bools.get('pattern_class'):\n",
@@ -497,10 +492,10 @@
     "                                                 split_evt_secondary_threshold,\n",
     "                                                 split_evt_mip_threshold,\n",
     "                                                 tagFirstSingles=3, # track along y-axis, left to right (see \n",
-    "                                                 nCells=memoryCells, # split_event.py file in pydetlib/lib/src/\n",
+    "                                                 nCells=1, # split_event.py file in pydetlib/lib/src/\n",
     "                                                 allowElongated=False, # XFELDetAna/algorithms)\n",
     "                                                 blockSize=[pixels_x, pixels_y//2],\n",
-    "                                                 parallel=run_parallel)\n",
+    "                                                 parallel=False)\n",
     "\n",
     "    # Right Hemisphere:\n",
     "    patternClassifierRH = xcal.PatternClassifier([pixels_x, pixels_y//2],\n",
@@ -509,10 +504,10 @@
     "                                                 split_evt_secondary_threshold,\n",
     "                                                 split_evt_mip_threshold,\n",
     "                                                 tagFirstSingles=4, # track along y-axis, right to left\n",
-    "                                                 nCells=memoryCells,\n",
+    "                                                 nCells=1,\n",
     "                                                 allowElongated=False,\n",
     "                                                 blockSize=[pixels_x, pixels_y//2],\n",
-    "                                                 parallel=run_parallel)\n",
+    "                                                 parallel=False)\n",
     "\n",
     "    patternClassifierLH._imagesPerChunk = 1\n",
     "    patternClassifierRH._imagesPerChunk = 1\n",
@@ -535,46 +530,46 @@
     "histCalRaw = xcal.HistogramCalculator(sensorSize, \n",
     "                                      bins=bins, \n",
     "                                      range=bin_range,\n",
-    "                                      nCells=memoryCells, \n",
-    "                                      parallel=run_parallel,\n",
+    "                                      nCells=1, \n",
+    "                                      parallel=False,\n",
     "                                      blockSize=blockSize)\n",
     "# Will contain offset corrected data:\n",
     "histCalOffsetCor = xcal.HistogramCalculator(sensorSize, \n",
     "                                            bins=bins, \n",
     "                                            range=bin_range,\n",
-    "                                            nCells=memoryCells, \n",
-    "                                            parallel=run_parallel,\n",
+    "                                            nCells=1, \n",
+    "                                            parallel=False,\n",
     "                                            blockSize=blockSize)\n",
     "if corr_bools.get('common_mode'):\n",
     "    # Will contain common mode corrected data:\n",
     "    histCalCommonModeCor = xcal.HistogramCalculator(sensorSize,\n",
     "                                                    bins=bins,\n",
     "                                                    range=bin_range,\n",
-    "                                                    nCells=memoryCells, \n",
-    "                                                    parallel=run_parallel,\n",
+    "                                                    nCells=1, \n",
+    "                                                    parallel=False,\n",
     "                                                    blockSize=blockSize)\n",
     "if corr_bools.get('pattern_class'):\n",
     "    # Will contain split events pattern data:\n",
     "    histCalPcorr = xcal.HistogramCalculator(sensorSize,\n",
     "                                            bins=bins,\n",
     "                                            range=bin_range,\n",
-    "                                            nCells=memoryCells, \n",
-    "                                            parallel=run_parallel,\n",
+    "                                            nCells=1, \n",
+    "                                            parallel=False,\n",
     "                                            blockSize=blockSize)\n",
     "    # Will contain singles events data:\n",
     "    histCalPcorrS = xcal.HistogramCalculator(sensorSize,\n",
     "                                             bins=bins,\n",
     "                                             range=bin_range,\n",
-    "                                             nCells=memoryCells, \n",
-    "                                             parallel=run_parallel,\n",
+    "                                             nCells=1, \n",
+    "                                             parallel=False,\n",
     "                                             blockSize=blockSize)\n",
     "if corr_bools.get('relgain'):\n",
     "    # Will contain gain corrected data:\n",
     "    histCalGainCor = xcal.HistogramCalculator(sensorSize,\n",
     "                                              bins=bins,\n",
     "                                              range=bin_range,\n",
-    "                                              nCells=memoryCells, \n",
-    "                                              parallel=run_parallel,\n",
+    "                                              nCells=1, \n",
+    "                                              parallel=False,\n",
     "                                              blockSize=blockSize)"
    ]
   },
-- 
GitLab