diff --git a/config/json/esb_timing.json b/config/json/esb_timing.json new file mode 100644 index 0000000000000000000000000000000000000000..b8522a55724f732107bfd017d4a9a0596d2243a1 --- /dev/null +++ b/config/json/esb_timing.json @@ -0,0 +1,82 @@ +{ + "Cer11_1": [-18.5, -14.5], + "Cer11_2": [-18.5, -14.5], + "Cer11_3": [-18.5, -14.5], + "Cer11_4": [-18.5, -14.5], + "Cer11_5": [-16.5, -12.5], + "Cer12_1": [-19.5, -15.5], + "Cer12_2": [-19.5, -15.5], + "Cer12_3": [-19.5, -15.5], + "Cer12_4": [-18.5, -14.5], + "Cer12_5": [-16.5, -12.5], + "Cer13_1": [-18.5, -14.5], + "Cer13_2": [-18.5, -14.5], + "Cer13_3": [-18.5, -14.5], + "Cer13_4": [-18.5, -14.5], + "Cer13_5": [-16.5, -12.5], + "Cer14_1": [-18.5, -14.5], + "Cer14_2": [-18.5, -14.5], + "Cer14_3": [-18.5, -14.5], + "Cer14_4": [-18.5, -14.5], + "Cer14_5": [-17.5, -13.5], + "Cer21_1": [-13.5, -9.5], + "Cer21_2": [-13.5, -9.5], + "Cer21_3": [-13.5, -9.5], + "Cer21_4": [-13.5, -9.5], + "Cer21_5": [-12.5, -8.5], + "Cer22_1": [-13.5, -9.5], + "Cer22_2": [-62, 62], + "Cer22_3": [-18.5, -14.5], + "Cer22_4": [-18.5, -14.5], + "Cer22_5": [-11.5, -7.5], + "Cer23_1": [-14.5, -10.5], + "Cer23_2": [-13.5, -9.5], + "Cer23_3": [-13.5, -9.5], + "Cer23_4": [-14.5, -10.5], + "Cer23_5": [-12.5, -8.5], + "Cer24_1": [-14.5, -10.5], + "Cer24_2": [-13.5, -9.5], + "Cer24_3": [-13.5, -9.5], + "Cer24_4": [-18.5, -14.5], + "Cer24_5": [-16.5, -12.5], + "Cer31_1": [-18.5, -14.5], + "Cer31_2": [-18.5, -14.5], + "Cer31_3": [-18.5, -14.5], + "Cer31_4": [-18.5, -14.5], + "Cer31_5": [-16.5, -12.5], + "Cer32_1": [-18.5, -14.5], + "Cer32_2": [-18.5, -14.5], + "Cer32_3": [-18.5, -14.5], + "Cer32_4": [-18.5, -14.5], + "Cer32_5": [-16.5, -12.5], + "Cer33_1": [-18.5, -14.5], + "Cer33_2": [-18.5, -14.5], + "Cer33_3": [-18.5, -14.5], + "Cer33_4": [-18.5, -14.5], + "Cer33_5": [-16.5, -12.5], + "Cer34_1": [-18.5, -14.5], + "Cer34_2": [-18.5, -14.5], + "Cer34_3": [-18.5, -14.5], + "Cer34_4": [-18.5, -14.5], + "Cer34_5": [-16.5, -12.5], + "Cer41_1": [-18.5, -14.5], + "Cer41_2": [-18.5, -14.5], + "Cer41_3": [-18.5, -14.5], + "Cer41_4": [-18.5, -14.5], + "Cer41_5": [-16.5, -12.5], + "Cer42_1": [-18.5, -14.5], + "Cer42_2": [-18.5, -14.5], + "Cer42_3": [-18.5, -14.5], + "Cer42_4": [-18.5, -14.5], + "Cer42_5": [-16.5, -12.5], + "Cer43_1": [-25.5, -21.5], + "Cer43_2": [-62, 62], + "Cer43_3": [-25.5, -21.5], + "Cer43_4": [-25.5, -21.5], + "Cer43_5": [-23.5, -19.5], + "Cer44_1": [-25.5, -21.5], + "Cer44_2": [-25.5, -21.5], + "Cer44_3": [-25.5, -21.5], + "Cer44_4": [-13.5, -9.5], + "Cer44_5": [-11.5, -7.5] +} diff --git a/scripts/analyze_waveform.py b/scripts/analyze_waveform.py index c45fdff251d3ab6016b8727c10996ffd63209e4d..e1a509361d439debd84db7c5160c4a31d2986dee 100644 --- a/scripts/analyze_waveform.py +++ b/scripts/analyze_waveform.py @@ -27,25 +27,18 @@ parser = argparse.ArgumentParser('Raw waveform analysis') parser.add_argument('root_file', help='a root file of waveform data') parser.add_argument('output', help='path to the output csv file') +parser.add_argument('-n', '--number-events', type=int, default=0, dest='nev', + help='number of events to process, <= 0 means all') +parser.add_argument('--timing-config', type=str, default='config/json/esb_timing.json', dest='tconfig', + help='path to the json file for channel timings') args = parser.parse_args() figsize = (16, 16) nrows, ncols = 4, 4 -ch = [ - 'Cer11_5', 'Cer12_5', 'Cer13_5', 'Cer14_5', - 'Cer21_5', 'Cer22_5', 'Cer23_5', 'Cer24_5', - 'Cer31_5', 'Cer32_5', 'Cer33_5', 'Cer34_5', - 'Cer41_5', 'Cer42_5', 'Cer43_5', 'Cer44_5', -] - -ch_pos = [ - -15.5, -14.5, -15.5, -15.5, - -10.5, -9.5, -10.5, -14.5, - -14.5, -14.5, -14.5, -14.5, - -14.5, -14.5, -21.5, -9.5 -] -pos_width = 3 + +dbf = open(args.tconfig) +ch_pos = json.load(dbf) # trigger channels # tr = ['S2_1', 'S2_2', 'S2_3', 'S2_4', 'S2_5', 'S2_6', 'S2_7', 'S2_8', 'S2_9', 'S2_10', 'S2_11'] @@ -59,7 +52,7 @@ tree = f.EvTree trg_ch = np.ndarray(shape=(tree.GetEntries(), ), dtype=object) trg_val = np.ndarray(shape=(tree.GetEntries(), 3), dtype='float64') -ch_val = np.ndarray(shape=(tree.GetEntries(), len(ch)*2), dtype='float64') +ch_val = np.ndarray(shape=(tree.GetEntries(), len(ch_pos)*2), dtype='float64') for iev in np.arange(0, tree.GetEntries()): tree.GetEntry(iev) @@ -89,25 +82,28 @@ for iev in np.arange(0, tree.GetEntries()): trg_val[iev] = (ev_trg_peaks[ich], ev_trg_poses[ich], len(ev_trg_peaks)) # channels - for i, c in enumerate(ch): + for i, (c, twin) in enumerate(ch_pos.items()): peaks = branch_to_array1d(tree.__getattr__(c + '_Ppeak'), np.float32) poses = branch_to_array1d(tree.__getattr__(c + '_Ptime'), np.float32) - # check timing + # check timing, maximum peak inside the time window cpeak, cpos = 0, 0 for peak, pos in zip(peaks, poses): pos -= ev_trg_poses[ich] - if pos <= (ch_pos[i] + pos_width) and pos >= (ch_pos[i] - pos_width) and peak > cpeak: + if pos >= twin[0] and pos <= twin[1] and peak > cpeak: cpeak = peak cpos = pos - ch_val[iev][[i, len(ch) + i]] = (cpeak, cpos) + ch_val[iev][[i, len(ch_pos) + i]] = (cpeak, cpos) -print('processed {}'.format(iev)) + if args.nev > 0 and iev >= args.nev: + break +print('processed {}'.format(iev)) -result = pd.DataFrame(index=np.arange(0, tree.GetEntries()), - columns=['trg_peak', 'trg_pos', 'trg_nhits'] + [c + '_peak' for c in ch] + [c + '_pos' for c in ch], - data=np.concatenate((trg_val, ch_val), axis=1)) -result.loc[:, 'trg_ch'] = trg_ch +cols = ['trg_peak', 'trg_pos', 'trg_nhits'] \ + + [c + '_peak' for c, _ in ch_pos.items()] \ + + [c + '_pos' for c, _ in ch_pos.items()] +result = pd.DataFrame(index=np.arange(iev+1), columns=cols, data=np.concatenate((trg_val[0:iev+1], ch_val[0:iev+1]), axis=1)) +result.loc[:, 'trg_ch'] = trg_ch[0:iev+1] result.to_csv(args.output)