Belle II Software  release-05-02-19
caf_ecl_E.py
1 # -*- coding: utf-8 -*-
2 
3 """ECL single crystal energy calibration using three control samples."""
4 
5 from prompt import CalibrationSettings, input_data_filters
6 
7 # --------------------------------------------------------------
8 # ..Tell the automated script some required details
9 settings = CalibrationSettings(
10  name="ecl_energy",
11  expert_username="hearty",
12  description=__doc__,
13  input_data_formats=["cdst"],
14  input_data_names=[
15  "bhabha_all_calib",
16  "gamma_gamma_calib",
17  "mumutight_calib"],
18  input_data_filters={
19  "bhabha_all_calib": [
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"]],
27  "mumutight_calib": [
28  input_data_filters["Data Tag"]["mumutight_calib"],
29  input_data_filters["Data Quality Tag"]["Good Or Recoverable"],
30  input_data_filters["Magnet"]["On"]]},
31  depends_on=[],
32  expert_config={"ee5x5_min_entries": 100})
33 
34 # --------------------------------------------------------------
35 # ..The calibration functions
36 
37 
38 def get_calibrations(input_data, **kwargs):
39  import basf2
40  from ROOT import Belle2
41  from caf.utils import IoV
42  from caf.framework import Calibration
43  from reconstruction import prepare_cdst_analysis
44 
45  # --------------------------------------------------------------
46  # ..Bhabha
47 
48  # ..Input data
49  file_to_iov_bhabha = input_data["bhabha_all_calib"]
50  input_files_bhabha = list(file_to_iov_bhabha.keys())
51 
52  # ..Algorithm
53  algo_ee5x5 = Belle2.ECL.eclee5x5Algorithm()
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)
59 
60  # ..The calibration
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")
72  cal_ecl_ee5x5 = Calibration("ecl_ee5x5",
73  collector=eclee5x5_collector,
74  algorithms=[algo_ee5x5],
75  input_files=input_files_bhabha
76  )
77  cal_ecl_ee5x5.backend_args = {"request_memory": "4 GB"}
78 
79  # ..Add prepare_cdst_analysis to pre_collector_path
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
83 
84  # --------------------------------------------------------------
85  # ..gamma gamma
86 
87  # ..Input data
88  file_to_iov_gamma_gamma = input_data["gamma_gamma_calib"]
89  input_files_gamma_gamma = list(file_to_iov_gamma_gamma.keys())
90 
91  # ..Algorithm
92  algo_gamma_gamma = Belle2.ECL.eclGammaGammaEAlgorithm()
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)
104 
105  # ..The calibration
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
119  )
120 
121  # ..Add prepare_cdst_analysis to pre_collector_path
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
125 
126  # --------------------------------------------------------------
127  # ..muon pair
128 
129  # ..Input data
130  file_to_iov_mu_mu = input_data["mumutight_calib"]
131  input_files_mu_mu = list(file_to_iov_mu_mu.keys())
132 
133  # ..Algorithm
134  algo_mu_mu = Belle2.ECL.eclMuMuEAlgorithm()
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
144 
145  # ..The calibration
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)
156 
157  # ..Need to include track extrapolation in the path before collector
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
162 
163  # --------------------------------------------------------------
164  # Include a merging Calibration that doesn't require input data but instead creates the final
165  # payload from the previous calibration payloads.
166 
167  # We use a dummy collector that barely outputs any data and we set the input files to a single file so
168  # we spawn only one very fast job.
169  # It doesn't matter which input file we choose as the output is never used.
170 
172  cal_ecl_merge = Calibration(name="ecl_merge", collector="DummyCollector", algorithms=[merging_alg],
173  input_files=input_files_mu_mu[:1])
174 
175  # The important part is that we depend on all 3 previous calibrations
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)
179 
180  # ..Uses cdst data so it requires prepare_cdst_analysis
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
184 
185  # --------------------------------------------------------------
186  # ..Force the output iovs to be open
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}
197 
198  # --------------------------------------------------------------
199  # ..Return the calibrations
200  return [cal_ecl_ee5x5, cal_ecl_gamma_gamma, cal_ecl_mu_mu, cal_ecl_merge]
Belle2::ECL::eclGammaGammaEAlgorithm
Calibrate ecl crystals using gamma pair events.
Definition: eclGammaGammaEAlgorithm.h:39
Belle2::ECL::eclMuMuEAlgorithm
Calibrate ecl crystals using muon pair events.
Definition: eclMuMuEAlgorithm.h:39
Belle2::ECL::eclMergingCrystalEAlgorithm
Calibrate ecl crystals using previously created payloads.
Definition: eclMergingCrystalEAlgorithm.h:40
Belle2::ECL::eclee5x5Algorithm
Calibrate ecl crystals using Bhabha events.
Definition: eclee5x5Algorithm.h:40
Calibration
Definition: Calibration.py:1