From f8f1876b14a455440ff54f7e690ed937ead36957 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver <thomas.kluyver@xfel.eu> Date: Thu, 27 Apr 2023 13:40:51 +0200 Subject: [PATCH] Number LPD Mini modules from 1-8 rather than 0-7 --- .../LPDMini/LPD_Mini_Char_Darks_NBC.ipynb | 51 +++++++++---------- notebooks/LPDMini/LPD_Mini_Correct.ipynb | 10 ++-- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/notebooks/LPDMini/LPD_Mini_Char_Darks_NBC.ipynb b/notebooks/LPDMini/LPD_Mini_Char_Darks_NBC.ipynb index d9f7d7a54..6bec3c000 100644 --- a/notebooks/LPDMini/LPD_Mini_Char_Darks_NBC.ipynb +++ b/notebooks/LPDMini/LPD_Mini_Char_Darks_NBC.ipynb @@ -30,9 +30,10 @@ "run_low = 12 # run number in which low gain data was recorded, required\n", "\n", "karabo_id = \"FXE_DET_LPD_MINI\" # karabo karabo_id\n", - "karabo_da = ['-1'] # a list of data aggregators names, Default [-1] for selecting all data aggregators\n", - "source_name = \"{}/DET/0CH0:xtdf\"\n", - "control_source_name = \"{}/FPGA/FEM\"\n", + "karabo_da = [''] # a list of data aggregators names, Default [''] for selecting all data aggregators\n", + "modules = [-1] # Module numbers (1-8) to process, use [-1] for all\n", + "source_name = \"{}/DET/0CH0:xtdf\" # Source name for raw detector data\n", + "control_source_name = \"{}/FPGA/FEM\" # Source name for control device\n", "\n", "creation_time = \"\" # Override the timestamp taken from the run (format '2023-03-30 15:04:31')\n", "cal_db_interface = \"tcp://max-exfl016:8015#8025\" # the database interface to use\n", @@ -157,17 +158,15 @@ "calcat = CalCatApi(client=calibration_client())\n", "detector_id = calcat.detector(karabo_id)['id']\n", "pdus_by_da = calcat.physical_detector_units(detector_id, pdu_snapshot_at=creation_time)\n", - "pdu_name_by_da = {da: p['physical_name'] for (da, p) in pdus_by_da.items()}\n", + "mod_num_to_pdu_name = {\n", + " int(da.split('/')[-1]): p['physical_name']\n", + " for (da, p) in pdus_by_da.items()\n", + "}\n", "\n", - "# Override:\n", - "#pdu_name_by_da = {'LPDMINI00/1': 'LPD_TEST_FAKE_MINI01', 'LPDMINI00/7': 'LPD_TEST_FAKE_MINI02'}\n", - "\n", - "if karabo_da and '/' in karabo_da[0]:\n", - " pdu_name_by_da = {da: pdu_name_by_da[da] for da in karabo_da}\n", + "if modules and modules != [-1]:\n", + " mod_num_to_pdu_name = {m: mod_num_to_pdu_name[m] for m in modules}\n", "else:\n", - " karabo_da = sorted(pdu_name_by_da.keys())\n", - "\n", - "modules = [int(x.split('/')[-1]) for x in karabo_da]" + " modules = sorted(mod_num_to_pdu_name.keys())" ] }, { @@ -176,8 +175,9 @@ "metadata": {}, "outputs": [], "source": [ - "for da, pdu in pdu_name_by_da.items():\n", - " print(f\"{da} -> {pdu}\")" + "print(\"Minis in use (1-8) and PDUs:\")\n", + "for mod_num, pdu in mod_num_to_pdu_name.items():\n", + " print(f\"Mini {mod_num} -> {pdu}\")" ] }, { @@ -197,7 +197,7 @@ "parallel_num_threads = multiprocessing.cpu_count() // parallel_num_procs\n", "\n", "# the actual characterization\n", - "def characterize_module(run_path, gg):\n", + "def characterize_detector(run_path, gg):\n", "\n", " run = RunDirectory(run_path, parallelize=False)\n", " det_source = source_name.format(karabo_id)\n", @@ -273,7 +273,7 @@ "outputs": [], "source": [ "def modno_to_slice(m):\n", - " return slice(m * 32, (m + 1) * 32)" + " return slice((m-1) * 32, m * 32)" ] }, { @@ -300,7 +300,7 @@ " inp.append((run_path, gain_i))\n", "\n", "with multiprocessing.Pool(processes=parallel_num_procs) as pool:\n", - " results = pool.starmap(characterize_module, inp)\n", + " results = pool.starmap(characterize_detector, inp)\n", "\n", "for ir, r in enumerate(results):\n", " offset, noise, gg, bp, data, normal, cellid_pattern = r\n", @@ -315,7 +315,7 @@ " offset_consts[m][..., gg] = offset[:, mod_slice]\n", " noise_consts[m][..., gg] = noise[:, mod_slice]\n", " badpix_consts[m][..., gg] = bp[:, mod_slice]\n", - " data_samples[m][..., gg] = data[:, m]\n", + " data_samples[m][..., gg] = data[:, m - 1]\n", " normal_tests[m][..., gg] = normal[:, mod_slice]\n", "\n", " print(f\"{gain_names[gg]} gain. \"\n", @@ -349,18 +349,18 @@ "print('Retrieve pre-existing constants for comparison.')\n", "cap = capacitor_settings[0]\n", "\n", - "for mod_num, karabo_da_m in zip(modules, karabo_da):\n", + "for mod_num, db_module in mod_num_to_pdu_name.items():\n", " old_const[mod_num] = {}\n", " old_mdata[mod_num] = {}\n", - " db_module = pdu_name_by_da[karabo_da_m]\n", + " karabo_da_m = f'{karabo_da}/{mod_num}'\n", "\n", " if inject_cell_order:\n", " mem_cell_order = \",\".join([str(c) for c in cellid_pattern]) + \",\"\n", " else:\n", " mem_cell_order = None\n", "\n", - " # mod_num is from 0 to 7, so b_v_0 applies to even numbers\n", - " bias_voltage = bias_voltage_0 if (mod_num % 2 == 0) else bias_voltage_1\n", + " # mod_num is from 1 to 8, so b_v_0 applies to odd numbers\n", + " bias_voltage = bias_voltage_0 if (mod_num % 2 == 1) else bias_voltage_1\n", " condition = Conditions.Dark.LPD(\n", " memory_cells=mem_cells,\n", " pixels_x=256,\n", @@ -428,8 +428,7 @@ "# Save constants in the calibration DB\n", "md = None\n", "cap = capacitor_settings[0]\n", - "for mod_num, karabo_da_m in zip(modules, karabo_da):\n", - " db_module = pdu_name_by_da[karabo_da_m]\n", + "for mod_num, db_module in mod_num_to_pdu_name.items():\n", " print(f\"Storing constants for PDU {db_module}\")\n", "\n", " if inject_cell_order:\n", @@ -448,8 +447,8 @@ " dconst = getattr(Constants.LPD, const_name)()\n", " dconst.data = const_dict[mod_num]\n", "\n", - " # mod_num is from 0 to 7, so b_v_0 applies to even numbers\n", - " bias_voltage = bias_voltage_0 if (mod_num % 2 == 0) else bias_voltage_1\n", + " # mod_num is from 1 to 8, so b_v_0 applies to odd numbers\n", + " bias_voltage = bias_voltage_0 if (mod_num % 2 == 1) else bias_voltage_1\n", " \n", " # set the operating condition\n", " condition = Conditions.Dark.LPD(\n", diff --git a/notebooks/LPDMini/LPD_Mini_Correct.ipynb b/notebooks/LPDMini/LPD_Mini_Correct.ipynb index 34e6214e3..de07bb7c9 100644 --- a/notebooks/LPDMini/LPD_Mini_Correct.ipynb +++ b/notebooks/LPDMini/LPD_Mini_Correct.ipynb @@ -25,7 +25,7 @@ "out_folder = \"/gpfs/exfel/data/scratch/kluyvert/correct-lpdmini-p4576-r48\" # the folder to output to, required\n", "metadata_folder = '' # Directory containing calibration_metadata.yml when run by xfel-calibrate.\n", "sequences = [-1] # Sequences to correct, use [-1] for all\n", - "modules = [-1] # Modules indices to correct, use [-1] for all\n", + "modules = [-1] # Module numbers (1-8) to correct, use [-1] for all\n", "karabo_da = [''] # Data aggregators names to correct, use [''] for all\n", "run = 48 # run to process, required\n", "\n", @@ -226,7 +226,7 @@ "else:\n", " modules = sorted(set(modules) & modnos_from_db)\n", "\n", - "print(\"Modules to correct:\", modules)" + "print(\"Modules to correct (of 1-8):\", modules)" ] }, { @@ -286,8 +286,8 @@ " (illuminated_calibrations, illuminated_condition)\n", "]:\n", " for mod_num in modules:\n", - " # mod_num is from 0 to 7, so b_v_0 applies to even numbers\n", - " bias_voltage = bias_voltage_0 if mod_num % 2 == 0 else bias_voltage_1\n", + " # mod_num is from 1 to 8, so b_v_0 applies to odd numbers\n", + " bias_voltage = bias_voltage_0 if mod_num % 2 == 1 else bias_voltage_1\n", " condition_w_voltage = [dict(parameter_id=1, value=bias_voltage)] + condition\n", " karabo_da_m = f'{karabo_da[0]}/{mod_num}'\n", " \n", @@ -373,7 +373,7 @@ "\n", "const_shape = (mem_cells, 32 * len(module_nums), 256, 3) # cells, slow_scan, fast_scan, gain\n", "const_slices = [slice(i * 32, (i+1) * 32) for i in range(len(module_nums))]\n", - "raw_data_slices = [slice(n * 32, (n+1) * 32) for n in module_nums]\n", + "raw_data_slices = [slice((n-1) * 32, n * 32) for n in module_nums]\n", "\n", "def _assemble_constant(arr, calibration_name):\n", " for mod_num, sl in zip(module_nums, const_slices):\n", -- GitLab