diff --git a/notebooks/Jungfrau/Jungfrau_Gain_Correct_and_Verify_NBC.ipynb b/notebooks/Jungfrau/Jungfrau_Gain_Correct_and_Verify_NBC.ipynb index d9d393e879ce49c017c78f88211d1dfe47fdff5c..7ab1613d4bc28c294a532d4b4949ed975129362c 100644 --- a/notebooks/Jungfrau/Jungfrau_Gain_Correct_and_Verify_NBC.ipynb +++ b/notebooks/Jungfrau/Jungfrau_Gain_Correct_and_Verify_NBC.ipynb @@ -28,7 +28,7 @@ "karabo_id = \"HED_IA1_JF500K4\" # karabo prefix of Jungfrau devices\n", "karabo_da = ['JNGFR04'] # data aggregators\n", "receiver_template = \"JNGFR{:02d}\" # Detector receiver template for accessing raw data files. e.g. \"JNGFR{:02d}\"\n", - "instrument_source_template = '{}/DET/{}:daqOutput' # template for source name (filled with karabo_id & receiver_id). e.g. 'SPB_IRDA_JF4M/DET/JNGFR01:daqOutput'\n", + "input_source_template = '{karabo_id}/DET/{receiver}:daqOutput' # template for source name (filled with karabo_id & receiver_id). e.g. 'SPB_IRDA_JF4M/DET/JNGFR01:daqOutput'\n", "ctrl_source_template = '{}/DET/CONTROL' # template for control source name (filled with karabo_id_control)\n", "karabo_id_control = \"\" # if control is on a different ID, set to empty string if it is the same a karabo-id\n", "\n", @@ -46,6 +46,7 @@ "chunks_data = 1 # HDF chunk size for pixel data in number of frames.\n", "wrong_gain_pixels = [-1] # List of 5 values (e.g. [4, 0, 255, 896, 1024]) defining the module number (4 for JNGFR04). And using the indexes of the FEM row [pixel_x_0:pixel_x_1] and column [pixel_y_0:pixel_y_1]. Set to -1 to not pick pixels for gain replacement.\n", "replace_wrong_gain_value = 0 # Force gain value into the chosen gain [0, 1, or 2] for pixels specified in `wrong_gain_pixels`. This has no effect if wrong_gain_pixels = [-1]\n", + "output_source_template = '{karabo_id}/CORR/{receiver}:daqOutput'\n", "\n", "# Parameters for retrieving calibration constants\n", "integration_time = -1 # integration time in us. set to -1 to overwrite by value in file.\n", @@ -82,6 +83,7 @@ "from logging import warning\n", "from pathlib import Path\n", "\n", + "import h5py\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -120,12 +122,14 @@ "out_folder = Path(out_folder)\n", "run_folder = in_folder / f'r{run:04d}'\n", "run_dc = RunDirectory(run_folder)\n", - "instrument_src = instrument_source_template.format(karabo_id, receiver_template)\n", "\n", + "output_source_template = output_source_template or input_source_template\n", + "\n", + "input_src = input_source_template.format(karabo_id, receiver_template)\n", + "output_src = output_source_template.format(karabo_id, receiver_template)\n", "out_folder.mkdir(parents=True, exist_ok=True)\n", "\n", "print(f\"Run is: {run}\")\n", - "print(f\"Instrument H5File source: {instrument_src}\")\n", "karabo_da = sorted(karabo_da)\n", "print(f\"Process modules: {karabo_da}\")\n", "\n", @@ -602,8 +606,8 @@ "empty_seq = 0\n", "corrected_files = []\n", "for local_karabo_da, mapped_files_module in mapped_files.items():\n", - " instrument_src_kda = instrument_src.format(int(local_karabo_da[-2:]))\n", - "\n", + " input_src_kda = input_src.format(int(local_karabo_da[-2:]))\n", + " output_src_kda = output_src.format(int(local_karabo_da[-2:]))\n", " for sequence_file in mapped_files_module:\n", " # Save corrected data in an output file with name\n", " # of corresponding raw sequence file.\n", @@ -615,7 +619,7 @@ " # the shape for data to later created arrays of the same shape,\n", " # and number of available trains to correct.\n", " seq_dc = H5File(sequence_file)\n", - " seq_dc_adc = seq_dc[instrument_src_kda, \"data.adc\"]\n", + " seq_dc_adc = seq_dc[input_src_kda, \"data.adc\"]\n", " ishape = seq_dc_adc.shape # input shape.\n", " corr_ntrains = ishape[0] # number of available trains to correct.\n", " all_train_ids = seq_dc_adc.train_ids\n", @@ -656,13 +660,13 @@ " step_timer.start()\n", " # Overwrite seq_dc after eliminating empty trains or/and applying limited images.\n", " seq_dc = seq_dc.select(\n", - " instrument_src_kda, \"*\", require_all=True).select_trains(np.s_[:corr_ntrains])\n", + " input_src_kda, \"*\", require_all=True).select_trains(np.s_[:corr_ntrains])\n", "\n", " # Load raw images(adc), gain, memcells, and frame numbers. \n", - " data = seq_dc[instrument_src_kda, \"data.adc\"].ndarray()\n", - " gain = seq_dc[instrument_src_kda, \"data.gain\"].ndarray()\n", - " memcells = seq_dc[instrument_src_kda, \"data.memoryCell\"].ndarray()\n", - " frame_number = seq_dc[instrument_src_kda, \"data.frameNumber\"].ndarray()\n", + " data = seq_dc[input_src_kda, \"data.adc\"].ndarray()\n", + " gain = seq_dc[input_src_kda, \"data.gain\"].ndarray()\n", + " memcells = seq_dc[input_src_kda, \"data.memoryCell\"].ndarray()\n", + " frame_number = seq_dc[input_src_kda, \"data.frameNumber\"].ndarray()\n", "\n", " # Validate that the selected cell id to preview is available in raw data.\n", " if memory_cells > 1:\n", @@ -684,15 +688,21 @@ " step_timer.start()\n", "\n", " # Create CORR files and add corrected data sections.\n", - " image_counts = seq_dc[instrument_src_kda, \"data.adc\"].data_counts(labelled=False)\n", + " image_counts = seq_dc[input_src_kda, \"data.adc\"].data_counts(labelled=False)\n", "\n", " seq_file = seq_dc.files[0] # FileAccess\n", " with DataFile(out_file, 'w') as outp_file:\n", " # Create INDEX datasets.\n", " outp_file.create_index(seq_dc.train_ids, from_file=seq_file)\n", "\n", + " # Create METDATA datasets\n", + " outp_file.create_metadata(\n", + " like=seq_dc,\n", + " sequence=seq_file.sequence,\n", + " instrument_channels=sorted({f'{output_src_kda}/data', f'{input_src_kda}/data'})\n", + " )\n", " # Create Instrument section to later add corrected datasets.\n", - " outp_source = outp_file.create_instrument_source(instrument_src_kda)\n", + " outp_source = outp_file.create_instrument_source(output_src_kda)\n", "\n", " # Create count/first datasets at INDEX source.\n", " outp_source.create_index(data=image_counts)\n", @@ -721,11 +731,9 @@ "\n", " save_reduced_rois(outp_file, data_corr, mask_corr, local_karabo_da)\n", "\n", - " # Create METDATA datasets\n", - " outp_file.create_metadata(\n", - " like=seq_dc,\n", - " sequence=seq_file.sequence,\n", - " )\n", + " if output_src != input_src:\n", + " outp_file[f'/INSTRUMENT/{input_src_kda}'] = h5py.SoftLink(f'/INSTRUMENT/{output_src_kda}')\n", + " outp_file[f'/INDEX/{input_src_kda}'] = h5py.SoftLink(f'/INDEX/{output_src_kda}')\n", "\n", " step_timer.done_step(f'Saving data time.')\n", "if empty_seq == sum([len(i) for i in mapped_files.values()]):\n",