4 Airflow script for automatic CDC dEdx calibration. It is currently for the electron based
5 calibration, where at present only RunGain, Cosine and WireGain are implimented. The remaining
6 two 2D and 1D will be implimented in the near future.
8 Second part called "Hadron calibration" are not compitable with CAF/AirFlow
9 and will be done offline for a while.
11 Author: Jitendra Kumar
12 Contact: jkumar@andrew.cmu.edu
15 from ROOT
import gSystem
16 from ROOT.Belle2
import CDCDedxRunGainAlgorithm, CDCDedxCosineAlgorithm, CDCDedxWireGainAlgorithm
17 from caf.framework
import Calibration
18 from caf.strategies
import SequentialRunByRun, SequentialBoundaries
19 from prompt
import CalibrationSettings
20 import reconstruction
as recon
22 from random
import seed
24 gSystem.Load(
'libreconstruction.so')
25 ROOT.gROOT.SetBatch(
True)
27 settings = CalibrationSettings(
29 expert_username=
"jikumar",
31 input_data_formats=[
"cdst"],
32 input_data_names=[
"bhabha_all_calib"],
34 "payload_boundaries":
None,
35 "calib_datamode":
False,
43 def get_calibrations(input_data, **kwargs):
45 """ REQUIRED FUNCTION used by b2caf-prompt-run tool
46 This function return a list of Calibration
47 objects we assign to the CAF process
51 file_to_iov_physics = input_data[
"bhabha_all_calib"]
53 expert_config = kwargs.get(
"expert_config")
56 fulldataMode = expert_config[
"calib_datamode"]
57 adjustment = expert_config[
"adjustment"]
60 input_files_rungain = list(file_to_iov_physics.keys())
61 input_files_coscorr = list(file_to_iov_physics.keys())
62 input_files_wiregain = list(file_to_iov_physics.keys())
66 maxevt_rg = expert_config[
"maxevt_rg"]
67 maxevt_cc = expert_config[
"maxevt_cc"]
68 maxevt_wg = expert_config[
"maxevt_wg"]
70 from prompt.utils import filter_by_max_events_per_run, filter_by_select_max_events_from_files
72 max_files_for_maxevents = maxevt_rg
73 reduced_file_to_iov_rungain = filter_by_max_events_per_run(file_to_iov_physics, max_files_for_maxevents,
True)
74 input_files_rungain = list(reduced_file_to_iov_rungain.keys())
75 basf2.B2INFO(f
"Total number of files used for rungains = {len(input_files_rungain)}")
78 input_files_coscorr = filter_by_select_max_events_from_files(list(file_to_iov_physics.keys()), maxevt_cc)
79 basf2.B2INFO(f
"Total number of files used for cosine = {len(input_files_coscorr)}")
80 if not input_files_coscorr:
82 f
"Cosine: all requested ({maxevt_cc}) events not found")
85 if maxevt_wg == maxevt_cc:
86 input_files_wiregain = input_files_coscorr
88 input_files_wiregain = filter_by_select_max_events_from_files(list(file_to_iov_physics.keys()), maxevt_wg)
90 basf2.B2INFO(f
"Total number of files used for wiregains = {len(input_files_wiregain)}")
91 if not input_files_wiregain:
93 f
"WireGain: all requested ({maxevt_wg}) events not found")
95 requested_iov = kwargs.get(
"requested_iov",
None)
96 from caf.utils
import ExpRun, IoV
97 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
99 payload_boundaries = [ExpRun(output_iov.exp_low, output_iov.run_low)]
100 payload_boundaries.extend([ExpRun(*boundary)
for boundary
in expert_config[
"payload_boundaries"]])
101 basf2.B2INFO(f
"Expert set payload boundaries are: {expert_config['payload_boundaries']}")
105 Calibrate_RGTrial = basf2.create_path()
106 recon.prepare_cdst_analysis(path=Calibrate_RGTrial)
107 trg_bhabhaskim = Calibrate_RGTrial.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_bhabha"])
108 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
110 Calibrate_RGTrial.add_module(
112 relativeCorrections=
False,
121 Collector_RGTrial = basf2.register_module(
'CDCDedxElectronCollector')
122 CollParamTrial = {
'cleanupCuts':
True,
'IsRun':
True,
'granularity':
'run', }
123 Collector_RGTrial.param(CollParamTrial)
126 Algorithm_RGTrial = CDCDedxRunGainAlgorithm()
127 Algorithm_RGTrial.setMonitoringPlots(
True)
131 name=
"RunGainCalibrationTrial",
132 algorithms=[Algorithm_RGTrial],
133 collector=Collector_RGTrial,
134 input_files=input_files_rungain)
135 Calibration_RGTrial.strategies = SequentialRunByRun
136 Calibration_RGTrial.pre_collector_path = Calibrate_RGTrial
137 Calibration_RGTrial.algorithms[0].params = {
"iov_coverage": output_iov}
138 Calibration_RGTrial.save_payloads =
False
142 Calibrate_RGPre = basf2.create_path()
143 recon.prepare_cdst_analysis(path=Calibrate_RGPre)
144 trg_bhabhaskim = Calibrate_RGPre.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_bhabha"])
145 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
146 Calibrate_RGPre.add_module(
148 relativeCorrections=
False,
157 Collector_RGPre = basf2.register_module(
'CDCDedxElectronCollector')
158 CollParamPre = {
'cleanupCuts':
True,
'IsRun':
True,
'granularity':
'run'}
159 Collector_RGPre.param(CollParamPre)
162 Algorithm_RGPre = CDCDedxRunGainAlgorithm()
163 Algorithm_RGPre.setMonitoringPlots(
True)
167 name=
"RunGainCalibrationPre",
168 algorithms=[Algorithm_RGPre],
169 collector=Collector_RGPre,
170 input_files=input_files_rungain)
171 Calibration_RGPre.strategies = SequentialRunByRun
172 Calibration_RGPre.pre_collector_path = Calibrate_RGPre
173 Calibration_RGPre.depends_on(Calibration_RGTrial)
174 Calibration_RGPre.algorithms[0].params = {
"iov_coverage": output_iov}
175 Calibration_RGPre.save_payloads =
False
179 Calibrate_CC = basf2.create_path()
180 recon.prepare_cdst_analysis(path=Calibrate_CC)
181 trg_bhabhaskim = Calibrate_CC.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_bhabha"])
182 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
184 Calibrate_CC.add_module(
186 relativeCorrections=
False,
194 Collector_CC = basf2.register_module(
'CDCDedxElectronCollector')
195 CollParam_CC = {
'cleanupCuts':
True,
'IsCharge':
True,
'IsCosth':
True,
'granularity':
'all'}
196 Collector_CC.param(CollParam_CC)
197 if expert_config[
"payload_boundaries"]
is not None:
198 Collector_CC.param(
"granularity",
"run")
201 Algorithm_CC = CDCDedxCosineAlgorithm()
202 Algorithm_CC.setMonitoringPlots(
True)
206 name=
"CosineCorrCalibration",
207 algorithms=[Algorithm_CC],
208 collector=Collector_CC,
209 input_files=input_files_coscorr)
210 Calibration_CC.pre_collector_path = Calibrate_CC
211 Calibration_CC.depends_on(Calibration_RGPre)
212 if expert_config[
"payload_boundaries"]
is not None:
213 Calibration_CC.strategies = SequentialBoundaries
214 basf2.B2INFO(f
"Calibration_CC: Found payload_boundaries: calibration strategies set to SequentialBoundaries.")
215 Calibration_CC.algorithms[0].params = {
"iov_coverage": output_iov,
"payload_boundaries": payload_boundaries}
217 Calibration_CC.algorithms[0].params = {
"apply_iov": output_iov}
221 Calibrate_WG = basf2.create_path()
222 recon.prepare_cdst_analysis(path=Calibrate_WG)
223 trg_bhabhaskim = Calibrate_WG.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_bhabha"])
224 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
226 Calibrate_WG.add_module(
228 relativeCorrections=
False,
237 Collector_WG = basf2.register_module(
'CDCDedxElectronCollector')
238 CollParam_WG = {
'cleanupCuts':
True,
'IsWire':
True,
'Isdedxhit':
True,
'granularity':
'all'}
239 Collector_WG.param(CollParam_WG)
240 if expert_config[
"payload_boundaries"]
is not None:
241 Collector_WG.param(
"granularity",
"run")
244 Algorithm_WG = CDCDedxWireGainAlgorithm()
245 Algorithm_WG.setMonitoringPlots(
True)
249 name=
"WireGainCalibration",
250 algorithms=[Algorithm_WG],
251 collector=Collector_WG,
252 input_files=input_files_wiregain)
253 Calibration_WG.pre_collector_path = Calibrate_WG
254 Calibration_WG.depends_on(Calibration_RGPre)
255 Calibration_WG.depends_on(Calibration_CC)
256 if expert_config[
"payload_boundaries"]
is not None:
257 Calibration_WG.strategies = SequentialBoundaries
258 basf2.B2INFO(f
"Calibration_WG: Found payload_boundaries: calibration strategies set to SequentialBoundaries.")
259 Calibration_WG.algorithms[0].params = {
"iov_coverage": output_iov,
"payload_boundaries": payload_boundaries}
261 Calibration_WG.algorithms[0].params = {
"apply_iov": output_iov}
265 Calibrate_RG = basf2.create_path()
266 recon.prepare_cdst_analysis(path=Calibrate_RG)
267 trg_bhabhaskim = Calibrate_RG.add_module(
"TriggerSkim", triggerLines=[
"software_trigger_cut&skim&accept_bhabha"])
268 trg_bhabhaskim.if_value(
"==0", basf2.Path(), basf2.AfterConditionPath.END)
270 Calibrate_RG.add_module(
272 relativeCorrections=
False,
281 Collector_RG = basf2.register_module(
'CDCDedxElectronCollector')
282 CollParamFinal = {
'cleanupCuts':
True,
'IsRun':
True,
'granularity':
'run', }
283 Collector_RG.param(CollParamFinal)
286 Algorithm_RG = CDCDedxRunGainAlgorithm()
287 Algorithm_RG.setMonitoringPlots(
True)
288 Algorithm_RG.setAdjustment(adjustment)
292 name=
"RunGainCalibration",
293 algorithms=[Algorithm_RG],
294 collector=Collector_RG,
295 input_files=input_files_rungain)
296 Calibration_RG.strategies = SequentialRunByRun
297 Calibration_RG.depends_on(Calibration_RGPre)
298 Calibration_RG.depends_on(Calibration_CC)
299 Calibration_RG.depends_on(Calibration_WG)
300 Calibration_RG.pre_collector_path = Calibrate_RG
301 Calibration_RG.algorithms[0].params = {
"iov_coverage": output_iov}
303 return [Calibration_RGTrial, Calibration_RGPre, Calibration_CC, Calibration_WG, Calibration_RG]