Coverage for pyhiperta/R0_DL1.py: 0%
82 statements
« prev ^ index » next coverage.py v7.6.7, created at 2024-11-21 20:50 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2024-11-21 20:50 +0000
1"""HiPeRTA file processing pipeline in python."""
3import numpy as np
4import tables
6from pyhiperta.calibration import calibrate, select_channel
7from pyhiperta.integration import integrate_local_peak, windowed_integration_correction
8from pyhiperta.R0Reader import R0HDF5Dataset
9from pyhiperta.waveform_indexing import waveform1Dto2D, waveform2Dto1D, waveform_1D_to_2D_maps
12def main():
13 import argparse
15 import matplotlib.pyplot as plt
16 from matplotlib.backends.backend_pdf import PdfPages
18 def plotImage(pdf, tabX, tabY, signal, imageIndex, eventId, eventType, tabFixPixelOrder=None):
19 strInfo = f"image {imageIndex}, id = {eventId}, type = {eventType},\n Signal mean = {signal.mean()} pe, min = {signal.min()}, max = {signal.max()}, std = {signal.std()}"
20 print(strInfo)
21 fig = plt.figure(figsize=(16, 10))
22 fig.patch.set_alpha(1.0)
23 if tabFixPixelOrder is not None:
24 plt.scatter(tabX[tabFixPixelOrder], tabY[tabFixPixelOrder], c=signal, s=120)
25 else:
26 plt.scatter(tabX, tabY, c=signal, s=120)
28 plt.axis("equal")
29 plt.xlabel("x")
30 plt.ylabel("y")
31 plt.colorbar()
32 plt.text(0.05, 0.95, strInfo, transform=fig.transFigure, size=14)
33 pdf.savefig() # saves the current figure into a pdf page
34 plt.close()
36 parser = argparse.ArgumentParser()
37 parser.add_argument("--R0_files", "-r0", type=str, required=True, help="input file, or folder.")
38 parser.add_argument("--output_file", "-o", type=str, required=True, help="output path of produced pdf.")
39 parser.add_argument("--first_image", "-f", type=int, default=1, help="Index of first image to plot.")
40 parser.add_argument("--last_image", "-l", type=int, default=100, help="Index of last image to plot.")
41 parser.add_argument(
42 "--indexing_step", "-idx", type=int, default=1, help="Step between the images indices selected for plotting."
43 )
45 args = parser.parse_args()
47 dataset = R0HDF5Dataset(args.R0_files, 1)
48 gains = dataset.read_gains()
49 pedestals = dataset.read_pedestals()
50 pedestals /= dataset.events_n_frames() # pedestal per frame option of the poor
51 camera_geometry = dataset.read_camera_geometry()
52 map_1D_to_2D = waveform_1D_to_2D_maps(dataset.read_camera_geometry())
54 with tables.open_file(args.R0_files, "r") as hfile:
55 tabEventId = hfile.root.r0.event.telescope.waveform.tel_001.col("event_id")
56 tabEventType = hfile.root.r0.event.subarray.trigger.col("event_type")
57 # tabPixelOrder = hfile.root.configuration.instrument.telescope.camera.pixel_order.tel_001.read()
59 ref_pulse_sample_times, ref_pulse_shape = dataset.read_reference_pulse()
60 gain_correction = windowed_integration_correction(
61 ref_pulse_sample_times, ref_pulse_shape, 1, lambda x: integrate_local_peak(x, 3, 3)
62 )
63 print("gain correction: ", gain_correction)
65 with PdfPages(args.output_file) as pdf:
66 for im_idx in range(args.first_image, args.last_image, args.indexing_step):
67 R0_waveform_high, R0_waveform_low = dataset[im_idx]
68 print(
69 "Waveform high: ",
70 R0_waveform_high.shape,
71 R0_waveform_high.mean(),
72 R0_waveform_high.min(),
73 R0_waveform_high.max(),
74 )
75 print(
76 "Waveform low: ",
77 R0_waveform_low.shape,
78 R0_waveform_low.mean(),
79 R0_waveform_low.min(),
80 R0_waveform_low.max(),
81 )
82 print("gains high: ", gains[0].shape, gains[0].mean(), gains[0].min(), gains[0].max())
83 print("gains low: ", gains[1].shape, gains[1].mean(), gains[1].min(), gains[1].max())
84 print("pedestals high: ", pedestals[0].shape, pedestals[0].mean(), pedestals[0].min(), pedestals[0].max())
85 print("pedestals low: ", pedestals[1].shape, pedestals[1].mean(), pedestals[1].min(), pedestals[1].max())
86 R0_waveform, selected_gains, selected_pedestals, selected_correction = select_channel(
87 R0_waveform_high, R0_waveform_low, gains, pedestals, gain_correction, 4000
88 )
89 R0_calibrated = calibrate(R0_waveform, selected_gains, selected_pedestals)
90 R0_integrated = integrate_local_peak(R0_calibrated, 3, 3)
91 R0_integrated *= selected_correction
93 R0_integrated = R0_integrated.squeeze()
95 plotImage(
96 pdf,
97 camera_geometry[0],
98 camera_geometry[1],
99 R0_integrated,
100 im_idx,
101 tabEventId[im_idx],
102 tabEventType[im_idx],
103 )
105 fft_image = waveform2Dto1D(map_1D_to_2D, np.fft.fft2(waveform1Dto2D(map_1D_to_2D, R0_integrated)))
106 print("fft_image: ", fft_image.shape, fft_image.mean(), fft_image.min(), fft_image.max())
107 plotImage(
108 pdf,
109 camera_geometry[0],
110 camera_geometry[1],
111 np.abs(fft_image),
112 im_idx,
113 tabEventId[im_idx],
114 tabEventType[im_idx],
115 )
117 fig = plt.figure(figsize=(16, 10))
118 fig.patch.set_alpha(1.0)
119 plt.imshow(waveform1Dto2D(map_1D_to_2D, R0_integrated))
120 plt.axis("equal")
121 plt.xlabel("x")
122 plt.ylabel("y")
123 plt.colorbar()
124 pdf.savefig() # saves the current figure into a pdf page
125 plt.close()
127 fig = plt.figure(figsize=(16, 10))
128 fig.patch.set_alpha(1.0)
129 plt.imshow(np.abs(np.fft.fft2(waveform1Dto2D(map_1D_to_2D, R0_integrated))))
130 plt.axis("equal")
131 plt.xlabel("x")
132 plt.ylabel("y")
133 plt.colorbar()
134 pdf.savefig() # saves the current figure into a pdf page
135 plt.close()
138if __name__ == "__main__":
139 main()