11"""ECL waveform template calibration"""
13from prompt
import CalibrationSettings, INPUT_DATA_FILTERS
17settings = CalibrationSettings(
18 name=
"ecl_WaveformTemplateShapeCalibration",
19 expert_username=
"savino.longo",
22 input_data_formats=[
"cdst"],
23 input_data_names=[
"gamma_gamma_calib"],
25 "gamma_gamma_calib": [
26 INPUT_DATA_FILTERS[
"Data Tag"][
"gamma_gamma_calib"],
27 INPUT_DATA_FILTERS[
"Data Quality Tag"][
"Good Or Recoverable"],
28 INPUT_DATA_FILTERS[
"Run Type"][
"physics"],
29 INPUT_DATA_FILTERS[
"Magnet"][
"On"]]},
32 "C2_MinEnergyThreshold": 2.0,
35 produced_payloads=[
"ECLWaveformTemplate"])
41def get_calibrations(input_data, **kwargs):
43 from ROOT
import Belle2
44 from caf.utils
import IoV
45 from caf.framework
import Calibration
51 file_to_iov_gamma_gamma = input_data[
"gamma_gamma_calib"]
52 input_files = list(file_to_iov_gamma_gamma.keys())
57 expert_config = kwargs.get(
"expert_config")
58 C2_MinEnergyThreshold = expert_config[
"C2_MinEnergyThreshold"]
59 nFilesCollector = expert_config[
"nFilesCollector"]
62 collector_C1 = basf2.register_module(
"eclWaveformTemplateCalibrationC1Collector")
63 collector_C1.param(
'MinEnergyThreshold', C2_MinEnergyThreshold)
65 cal_ecl_Wave_C1 = Calibration(
67 collector=collector_C1,
69 input_files=input_files,
70 max_files_per_collector_job=nFilesCollector)
73 gamma_gamma_pre_path = basf2.create_path()
74 gamma_gamma_pre_path.add_module(
"RootInput", inputFileNames=
"", branchNames=[
"EventMetaData",
"RawECLs"])
75 eclunpacker = basf2.register_module(
'ECLUnpacker')
76 gamma_gamma_pre_path.add_module(eclunpacker)
78 cal_ecl_Wave_C1.pre_collector_path = gamma_gamma_pre_path
89 for i
in range(0, nbatches):
91 lowLimit = (batchsize*i)+1
93 highLimit = (batchsize*(i+1))
95 if (highLimit > 8736):
98 print(
"lowLimit,highLimit", lowLimit, highLimit)
102 algos_C2[-1].setFirstCellID(lowLimit)
103 algos_C2[-1].setLastCellID(highLimit)
106 algos_C3[-1].setFirstCellID(lowLimit)
107 algos_C3[-1].setLastCellID(highLimit)
109 collectors_C2.append(basf2.register_module(
"eclWaveformTemplateCalibrationC2Collector"))
110 collectors_C2[-1].pre_collector_path = gamma_gamma_pre_path
111 collectors_C2[-1].param(
'MinCellID', lowLimit)
112 collectors_C2[-1].param(
'MaxCellID', highLimit)
113 collectors_C2[-1].param(
'MinEnergyThreshold', C2_MinEnergyThreshold)
116 calibrations_C2.append(Calibration(
"ecl_Wave_C2_"+str(lowLimit)+
"_"+str(highLimit),
117 collector=collectors_C2[-1],
118 algorithms=[algos_C2[-1],
120 input_files=input_files,
121 max_files_per_collector_job=nFilesCollector))
122 calibrations_C2[-1].pre_collector_path = gamma_gamma_pre_path
123 calibrations_C2[-1].depends_on(cal_ecl_Wave_C1)
127 algo_C4.setFirstCellID(1)
128 algo_C4.setLastCellID(8736)
131 cal_ecl_Wave_C4 = Calibration(
"ecl_Wave_C4",
132 collector=
"DummyCollector",
133 algorithms=[algo_C4],
134 input_files=input_files[:1],
137 cal_ecl_Wave_C4.depends_on(cal_ecl_Wave_C1)
138 for cal
in calibrations_C2:
139 cal_ecl_Wave_C4.depends_on(cal)
143 requested_iov = kwargs.get(
"requested_iov",
None)
144 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
145 for algorithm
in cal_ecl_Wave_C1.algorithms:
146 algorithm.params = {
"apply_iov": output_iov}
147 for C2
in calibrations_C2:
148 for algorithm
in C2.algorithms:
149 algorithm.params = {
"apply_iov": output_iov}
150 for algorithm
in cal_ecl_Wave_C4.algorithms:
151 algorithm.params = {
"apply_iov": output_iov}
155 calList = [cal_ecl_Wave_C1] + calibrations_C2 + [cal_ecl_Wave_C4]