3 """ECL single crystal energy calibration using three control samples."""
5 from prompt
import CalibrationSettings, input_data_filters
9 settings = CalibrationSettings(
11 expert_username=
"hearty",
13 input_data_formats=[
"cdst"],
20 input_data_filters[
"Data Tag"][
"bhabha_all_calib"],
21 input_data_filters[
"Data Quality Tag"][
"Good Or Recoverable"],
22 input_data_filters[
"Magnet"][
"On"]],
23 "gamma_gamma_calib": [
24 input_data_filters[
"Data Tag"][
"gamma_gamma_calib"],
25 input_data_filters[
"Data Quality Tag"][
"Good Or Recoverable"],
26 input_data_filters[
"Magnet"][
"On"]],
28 input_data_filters[
"Data Tag"][
"mumutight_calib"],
29 input_data_filters[
"Data Quality Tag"][
"Good Or Recoverable"],
30 input_data_filters[
"Magnet"][
"On"]]},
32 expert_config={
"ee5x5_min_entries": 100})
38 def get_calibrations(input_data, **kwargs):
40 from ROOT
import Belle2
41 from caf.utils
import IoV
42 from caf.framework
import Calibration
43 from reconstruction
import prepare_cdst_analysis
49 file_to_iov_bhabha = input_data[
"bhabha_all_calib"]
50 input_files_bhabha = list(file_to_iov_bhabha.keys())
54 expert_config = kwargs.get(
"expert_config")
55 ee5x5minEntries = expert_config[
"ee5x5_min_entries"]
56 algo_ee5x5.setMinEntries(ee5x5minEntries)
57 algo_ee5x5.setPayloadName(
"ECLCrystalEnergy5x5")
58 algo_ee5x5.setStoreConst(
True)
61 eclee5x5_collector = basf2.register_module(
"eclee5x5Collector")
62 eclee5x5_collector.param(
"thetaLabMinDeg", 17.)
63 eclee5x5_collector.param(
"thetaLabMaxDeg", 150.)
64 eclee5x5_collector.param(
"minE0", 0.45)
65 eclee5x5_collector.param(
"minE1", 0.40)
66 eclee5x5_collector.param(
"maxdThetaSum", 2.)
67 eclee5x5_collector.param(
"dPhiScale", 1.)
68 eclee5x5_collector.param(
"maxTime", 10.)
69 eclee5x5_collector.param(
"useCalDigits",
False)
70 eclee5x5_collector.param(
"requireL1",
False)
71 eclee5x5_collector.param(
"granularity",
"all")
73 collector=eclee5x5_collector,
74 algorithms=[algo_ee5x5],
75 input_files=input_files_bhabha
77 cal_ecl_ee5x5.backend_args = {
"request_memory":
"4 GB"}
80 ee5x5_pre_path = basf2.create_path()
81 prepare_cdst_analysis(ee5x5_pre_path, components=[
'ECL'])
82 cal_ecl_ee5x5.pre_collector_path = ee5x5_pre_path
88 file_to_iov_gamma_gamma = input_data[
"gamma_gamma_calib"]
89 input_files_gamma_gamma = list(file_to_iov_gamma_gamma.keys())
93 algo_gamma_gamma.setOutputName(
"eclGammaGammaE_algorithm.root")
94 algo_gamma_gamma.setCellIDLo(1)
95 algo_gamma_gamma.setCellIDHi(8736)
96 algo_gamma_gamma.setMinEntries(150)
97 algo_gamma_gamma.setMaxIterations(10)
98 algo_gamma_gamma.setTRatioMin(0.45)
99 algo_gamma_gamma.setTRatioMax(0.60)
100 algo_gamma_gamma.setUpperEdgeThresh(0.02)
101 algo_gamma_gamma.setPerformFits(
True)
102 algo_gamma_gamma.setFindExpValues(
False)
103 algo_gamma_gamma.setStoreConst(0)
106 eclGammaGamma_collector = basf2.register_module(
"eclGammaGammaECollector")
107 eclGammaGamma_collector.param(
"granularity",
"all")
108 eclGammaGamma_collector.param(
"thetaLabMinDeg", 0.)
109 eclGammaGamma_collector.param(
"thetaLabMaxDeg", 180.)
110 eclGammaGamma_collector.param(
"minPairMass", 9.)
111 eclGammaGamma_collector.param(
"mindPhi", 179.)
112 eclGammaGamma_collector.param(
"maxTime", 999.)
113 eclGammaGamma_collector.param(
"measureTrueEnergy",
False)
114 eclGammaGamma_collector.param(
"requireL1",
False)
115 cal_ecl_gamma_gamma =
Calibration(
"ecl_gamma_gamma",
116 collector=eclGammaGamma_collector,
117 algorithms=[algo_gamma_gamma],
118 input_files=input_files_gamma_gamma
122 gamma_gamma_pre_path = basf2.create_path()
123 prepare_cdst_analysis(gamma_gamma_pre_path, components=[
'ECL'])
124 cal_ecl_gamma_gamma.pre_collector_path = gamma_gamma_pre_path
130 file_to_iov_mu_mu = input_data[
"mumutight_calib"]
131 input_files_mu_mu = list(file_to_iov_mu_mu.keys())
135 algo_mu_mu.cellIDLo = 1
136 algo_mu_mu.cellIDHi = 8736
137 algo_mu_mu.minEntries = 150
138 algo_mu_mu.maxIterations = 10
139 algo_mu_mu.tRatioMin = 0.2
140 algo_mu_mu.tRatioMax = 0.25
141 algo_mu_mu.performFits =
True
142 algo_mu_mu.findExpValues =
False
143 algo_mu_mu.storeConst = 0
146 eclmumu_collector = basf2.register_module(
"eclMuMuECollector")
147 eclmumu_collector.param(
"granularity",
"all")
148 eclmumu_collector.param(
"minPairMass", 9.0)
149 eclmumu_collector.param(
"minTrackLength", 30.)
150 eclmumu_collector.param(
"MaxNeighbourE", 0.010)
151 eclmumu_collector.param(
"thetaLabMinDeg", 17.)
152 eclmumu_collector.param(
"thetaLabMaxDeg", 150.)
153 eclmumu_collector.param(
"measureTrueEnergy",
False)
154 eclmumu_collector.param(
"requireL1",
False)
155 cal_ecl_mu_mu =
Calibration(name=
"ecl_mu_mu", collector=eclmumu_collector, algorithms=algo_mu_mu, input_files=input_files_mu_mu)
158 ext_path = basf2.create_path()
159 prepare_cdst_analysis(ext_path, components=[
'ECL'])
160 ext_path.add_module(
"Ext", pdgCodes=[13])
161 cal_ecl_mu_mu.pre_collector_path = ext_path
172 cal_ecl_merge =
Calibration(name=
"ecl_merge", collector=
"DummyCollector", algorithms=[merging_alg],
173 input_files=input_files_mu_mu[:1])
176 cal_ecl_merge.depends_on(cal_ecl_ee5x5)
177 cal_ecl_merge.depends_on(cal_ecl_gamma_gamma)
178 cal_ecl_merge.depends_on(cal_ecl_mu_mu)
181 ecl_merge_pre_path = basf2.create_path()
182 prepare_cdst_analysis(ecl_merge_pre_path, components=[
'ECL'])
183 ecl_merge_pre_path.pre_collector_path = ecl_merge_pre_path
187 requested_iov = kwargs.get(
"requested_iov",
None)
188 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
189 for algorithm
in cal_ecl_ee5x5.algorithms:
190 algorithm.params = {
"apply_iov": output_iov}
191 for algorithm
in cal_ecl_gamma_gamma.algorithms:
192 algorithm.params = {
"apply_iov": output_iov}
193 for algorithm
in cal_ecl_mu_mu.algorithms:
194 algorithm.params = {
"apply_iov": output_iov}
195 for algorithm
in cal_ecl_merge.algorithms:
196 algorithm.params = {
"apply_iov": output_iov}
200 return [cal_ecl_ee5x5, cal_ecl_gamma_gamma, cal_ecl_mu_mu, cal_ecl_merge]