3 """ECL single crystal energy calibration using three control samples."""
5 from prompt
import CalibrationSettings
9 settings = CalibrationSettings(name=
"ecl_energy",
10 expert_username=
"hearty",
12 input_data_formats=[
"cdst"],
13 input_data_names=[
"hlt_bhabhaecl",
"hlt_gamma_gamma",
"hlt_mumu_2trk"],
20 def get_calibrations(input_data, **kwargs):
22 from ROOT
import Belle2
23 from caf.utils
import IoV
24 from caf.framework
import Calibration
25 from reconstruction
import prepare_cdst_analysis
31 file_to_iov_bhabha = input_data[
"hlt_bhabhaecl"]
32 input_files_bhabha = list(file_to_iov_bhabha.keys())
36 algo_ee5x5.setMinEntries(150)
37 algo_ee5x5.setPayloadName(
"ECLCrystalEnergy5x5")
38 algo_ee5x5.setStoreConst(
True)
41 eclee5x5_collector = basf2.register_module(
"eclee5x5Collector")
42 eclee5x5_collector.param(
"thetaLabMinDeg", 17.)
43 eclee5x5_collector.param(
"thetaLabMaxDeg", 150.)
44 eclee5x5_collector.param(
"minE0", 0.45)
45 eclee5x5_collector.param(
"minE1", 0.40)
46 eclee5x5_collector.param(
"maxdThetaSum", 2.)
47 eclee5x5_collector.param(
"dPhiScale", 1.)
48 eclee5x5_collector.param(
"maxTime", 10.)
49 eclee5x5_collector.param(
"useCalDigits",
False)
50 eclee5x5_collector.param(
"requireL1",
False)
51 eclee5x5_collector.param(
"granularity",
"all")
53 collector=eclee5x5_collector,
54 algorithms=[algo_ee5x5],
55 input_files=input_files_bhabha
59 ee5x5_pre_path = basf2.create_path()
60 prepare_cdst_analysis(ee5x5_pre_path, components=[
'ECL'])
61 cal_ecl_ee5x5.pre_collector_path = ee5x5_pre_path
67 file_to_iov_gamma_gamma = input_data[
"hlt_gamma_gamma"]
68 input_files_gamma_gamma = list(file_to_iov_gamma_gamma.keys())
72 algo_gamma_gamma.setOutputName(
"eclGammaGammaE_algorithm.root")
73 algo_gamma_gamma.setCellIDLo(1)
74 algo_gamma_gamma.setCellIDHi(8736)
75 algo_gamma_gamma.setMinEntries(150)
76 algo_gamma_gamma.setMaxIterations(10)
77 algo_gamma_gamma.setTRatioMin(0.45)
78 algo_gamma_gamma.setTRatioMax(0.60)
79 algo_gamma_gamma.setUpperEdgeThresh(0.02)
80 algo_gamma_gamma.setPerformFits(
True)
81 algo_gamma_gamma.setFindExpValues(
False)
82 algo_gamma_gamma.setStoreConst(0)
85 eclGammaGamma_collector = basf2.register_module(
"eclGammaGammaECollector")
86 eclGammaGamma_collector.param(
"granularity",
"all")
87 eclGammaGamma_collector.param(
"thetaLabMinDeg", 0.)
88 eclGammaGamma_collector.param(
"thetaLabMaxDeg", 180.)
89 eclGammaGamma_collector.param(
"minPairMass", 9.)
90 eclGammaGamma_collector.param(
"mindPhi", 179.)
91 eclGammaGamma_collector.param(
"maxTime", 999.)
92 eclGammaGamma_collector.param(
"measureTrueEnergy",
False)
93 eclGammaGamma_collector.param(
"requireL1",
False)
94 cal_ecl_gamma_gamma =
Calibration(
"ecl_gamma_gamma",
95 collector=eclGammaGamma_collector,
96 algorithms=[algo_gamma_gamma],
97 input_files=input_files_gamma_gamma
101 gamma_gamma_pre_path = basf2.create_path()
102 prepare_cdst_analysis(gamma_gamma_pre_path, components=[
'ECL'])
103 cal_ecl_gamma_gamma.pre_collector_path = gamma_gamma_pre_path
109 file_to_iov_mu_mu = input_data[
"hlt_mumu_2trk"]
110 input_files_mu_mu = list(file_to_iov_mu_mu.keys())
114 algo_mu_mu.cellIDLo = 1
115 algo_mu_mu.cellIDHi = 8736
116 algo_mu_mu.minEntries = 150
117 algo_mu_mu.maxIterations = 10
118 algo_mu_mu.tRatioMin = 0.2
119 algo_mu_mu.tRatioMax = 0.25
120 algo_mu_mu.performFits =
True
121 algo_mu_mu.findExpValues =
False
122 algo_mu_mu.storeConst = 0
125 eclmumu_collector = basf2.register_module(
"eclMuMuECollector")
126 eclmumu_collector.param(
"granularity",
"all")
127 eclmumu_collector.param(
"minPairMass", 9.0)
128 eclmumu_collector.param(
"minTrackLength", 30.)
129 eclmumu_collector.param(
"MaxNeighbourE", 0.010)
130 eclmumu_collector.param(
"thetaLabMinDeg", 17.)
131 eclmumu_collector.param(
"thetaLabMaxDeg", 150.)
132 eclmumu_collector.param(
"measureTrueEnergy",
False)
133 eclmumu_collector.param(
"requireL1",
False)
134 cal_ecl_mu_mu =
Calibration(name=
"ecl_mu_mu", collector=eclmumu_collector, algorithms=algo_mu_mu, input_files=input_files_mu_mu)
137 ext_path = basf2.create_path()
138 prepare_cdst_analysis(ext_path, components=[
'ECL'])
139 ext_path.add_module(
"Ext", pdgCodes=[13])
140 cal_ecl_mu_mu.pre_collector_path = ext_path
151 cal_ecl_merge =
Calibration(name=
"ecl_merge", collector=
"DummyCollector", algorithms=[merging_alg],
152 input_files=input_files_mu_mu[:1])
155 cal_ecl_merge.depends_on(cal_ecl_ee5x5)
156 cal_ecl_merge.depends_on(cal_ecl_gamma_gamma)
157 cal_ecl_merge.depends_on(cal_ecl_mu_mu)
160 ecl_merge_pre_path = basf2.create_path()
161 prepare_cdst_analysis(ecl_merge_pre_path, components=[
'ECL'])
162 ecl_merge_pre_path.pre_collector_path = ecl_merge_pre_path
166 requested_iov = kwargs.get(
"requested_iov",
None)
167 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
168 for algorithm
in cal_ecl_ee5x5.algorithms:
169 algorithm.params = {
"apply_iov": output_iov}
170 for algorithm
in cal_ecl_gamma_gamma.algorithms:
171 algorithm.params = {
"apply_iov": output_iov}
172 for algorithm
in cal_ecl_mu_mu.algorithms:
173 algorithm.params = {
"apply_iov": output_iov}
174 for algorithm
in cal_ecl_merge.algorithms:
175 algorithm.params = {
"apply_iov": output_iov}
179 return [cal_ecl_ee5x5, cal_ecl_gamma_gamma, cal_ecl_mu_mu, cal_ecl_merge]