11 """ECL timing calibration that performs the crystal and crate calibrations,
12 merges the relevant crystal payloads, and makes validation plots. It is the
13 main script for executing the ECL timing calibrations."""
15 from prompt
import CalibrationSettings, input_data_filters
16 from reconstruction
import prepare_cdst_analysis, prepare_user_cdst_analysis
17 from caf.utils
import IoV, ExpRun
32 settings = CalibrationSettings(
33 name=
"ECL crystal and crate time calibrations and validations",
34 expert_username=
"ehill",
36 input_data_formats=[
"cdst"],
37 input_data_names=[
"bhabha_all_calib",
"hadron_calib"],
38 input_data_filters={
"bhabha_all_calib": [input_data_filters[
"Data Tag"][
"bhabha_all_calib"],
39 input_data_filters[
"Beam Energy"][
"4S"],
40 input_data_filters[
"Beam Energy"][
"Continuum"],
41 input_data_filters[
"Beam Energy"][
"Scan"],
42 input_data_filters[
"Data Quality Tag"][
"Good"],
43 input_data_filters[
"Run Type"][
"physics"],
44 input_data_filters[
"Magnet"][
"On"]],
45 "hadron_calib": [input_data_filters[
"Data Tag"][
"hadron_calib"],
46 input_data_filters[
"Beam Energy"][
"4S"],
47 input_data_filters[
"Beam Energy"][
"Continuum"],
48 input_data_filters[
"Beam Energy"][
"Scan"],
49 input_data_filters[
"Data Quality Tag"][
"Good"],
50 input_data_filters[
"Run Type"][
"physics"],
51 input_data_filters[
"Magnet"][
"On"]]},
53 expert_config={
"numCrysCrateIterations": 2,
"payload_boundaries": [],
"t0_bhabhaToHadron_correction": 0})
67 def get_calibrations(input_data, **kwargs):
70 input_data (dict): Should contain every name from the 'input_data_names' variable as a key.
71 Each value is a dictionary with {"/path/to/file_e1_r5.root": IoV(1,5,1,5), ...}. Useful for
72 assigning to calibration.files_to_iov
74 **kwargs: Configuration options to be sent in. Since this may change we use kwargs as a way to help prevent
75 backwards compatibility problems. But you could use the correct arguments in b2caf-prompt-run for this
76 release explicitly if you want to.
78 Currently only kwargs["output_iov"] is used. This is the output IoV range that your payloads should
79 correspond to. Generally your highest ExpRun payload should be open ended e.g. IoV(3,4,-1,-1)
82 list(caf.framework.Calibration): All of the calibration objects we want to assign to the CAF process
87 from caf.strategies
import SimpleRunByRun, SingleIOV, SequentialBoundaries
94 file_to_iov_bhabha = input_data[
"bhabha_all_calib"]
95 file_to_iov_hadron = input_data[
"hadron_calib"]
102 max_files_per_run_calibration = 26
103 max_files_per_run_validation = 4
104 max_events_per_run_plotting = 1
115 reduced_file_to_iov_bhabha = filter_by_max_files_per_run(file_to_iov_bhabha, max_files_per_run_calibration)
116 input_files_bhabha = list(reduced_file_to_iov_bhabha.keys())
117 basf2.B2INFO(f
"Total number of bhabha files actually used as input for crates = {len(input_files_bhabha)}")
119 reduced_file_to_iov_bhabha_1perRun = filter_by_max_files_per_run(file_to_iov_bhabha, 1)
120 input_files_bhabha_1perRun = list(reduced_file_to_iov_bhabha_1perRun.keys())
121 basf2.B2INFO(f
"Total number of bhabha files actually used for dummy collectors = {len(input_files_bhabha_1perRun)}")
123 input_files_bhabha_full = list(file_to_iov_bhabha.keys())
124 basf2.B2INFO(f
"Total number of bhabha files as input for crystals = {len(input_files_bhabha_full)}")
126 reduced_file_to_iov_hadron = filter_by_max_files_per_run(file_to_iov_hadron, max_files_per_run_validation)
127 input_files_hadron = list(reduced_file_to_iov_hadron.keys())
128 basf2.B2INFO(f
"Total number of hadron files actually used as input = {len(input_files_hadron)}")
133 reduced_file_to_iov_plotting = filter_by_max_events_per_run(file_to_iov_bhabha, max_events_per_run_plotting)
134 input_files_plotting = list(reduced_file_to_iov_plotting.keys())
138 expert_config = kwargs.get(
"expert_config")
139 numCrysCrateIterations = expert_config[
"numCrysCrateIterations"]
140 print(
"expert_config: numCrysCrateIterations = ", numCrysCrateIterations)
144 t0_bhabhaToHadron_correction = expert_config[
"t0_bhabhaToHadron_correction"]
145 print(
"expert_config: t0_bhabhaToHadron_correction = ", t0_bhabhaToHadron_correction)
148 intermediate_iov = IoV(0, 0, -1, -1)
149 requested_iov = kwargs.get(
"requested_iov",
None)
150 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
156 payload_boundaries = []
157 payload_boundaries.extend([ExpRun(*boundary)
for boundary
in expert_config[
"payload_boundaries"]])
158 basf2.B2INFO(f
"Expert set payload boundaries are: {expert_config['payload_boundaries']}")
159 print(
"payload_boundaries = ", payload_boundaries)
162 from basf2
import register_module, create_path
164 from ROOT
import Belle2
165 from ROOT.Belle2
import TestCalibrationAlgorithm
166 from caf.framework
import Collection
170 print(
"Set up the base for the collectors for the calibrations")
172 root_input = register_module(
'RootInput')
173 rec_path_bhabha = create_path()
174 rec_path_bhabha.add_module(root_input)
175 if 'Gearbox' not in rec_path_bhabha:
176 rec_path_bhabha.add_module(
'Gearbox')
177 if 'Geometry' not in rec_path_bhabha:
178 rec_path_bhabha.add_module(
'Geometry', useDB=
True)
180 prepare_cdst_analysis(rec_path_bhabha)
184 t0BiasCorrection = t0_bhabhaToHadron_correction
187 col_bhabha = register_module(
'ECLBhabhaTCollector')
188 col_bhabha.param(
'timeAbsMax', 250)
189 col_bhabha.param(
'minCrystal', 1)
190 col_bhabha.param(
'maxCrystal', 8736)
191 col_bhabha.param(
'saveTree',
False)
192 col_bhabha.param(
'hadronEventT0_TO_bhabhaEventT0_correction', t0BiasCorrection)
195 input_files=input_files_bhabha,
196 pre_collector_path=rec_path_bhabha)
198 eclTCol_crys =
Collection(collector=col_bhabha,
199 input_files=input_files_bhabha_full,
200 pre_collector_path=rec_path_bhabha)
204 print(
"Set up the base for the crate calibration algorithm")
211 eclTAlgCrates.cellIDLo = 3
212 eclTAlgCrates.cellIDHi = 2
213 eclTAlgCrates.debugOutput =
True
214 eclTAlgCrates.meanCleanRebinFactor = 3
215 eclTAlgCrates.meanCleanCutMinFactor = 0.3
216 eclTAlgCrates.debugFilenameBase =
"eclBhabhaTAlgorithm"
220 print(
"Set up the base for the crystal calibration algorithm")
227 eclTAlgCrystals.crateIDLo = 3
228 eclTAlgCrystals.crateIDHi = 2
229 eclTAlgCrystals.debugOutput =
True
230 eclTAlgCrystals.meanCleanRebinFactor = 3
231 eclTAlgCrystals.meanCleanCutMinFactor = 0.3
232 eclTAlgCrystals.debugFilenameBase =
"eclBhabhaTAlgorithm"
238 eclTAlgCrystals_saveNotReadPrevPayload = copy.deepcopy(eclTAlgCrystals)
239 eclTAlgCrystals_readNotSavePrevPayload = copy.deepcopy(eclTAlgCrystals)
241 eclTAlgCrystals_saveNotReadPrevPayload.savePrevCrysPayload =
True
242 eclTAlgCrystals_saveNotReadPrevPayload.readPrevCrysPayload =
False
244 eclTAlgCrystals_readNotSavePrevPayload.savePrevCrysPayload =
False
245 eclTAlgCrystals_readNotSavePrevPayload.readPrevCrysPayload =
True
249 print(
"Set up the base for the crystal merger algorithm")
252 if numCrysCrateIterations == 1:
253 merging_alg.readPrevCrysPayload =
False
255 merging_alg.readPrevCrysPayload =
True
264 if numCrysCrateIterations > 0:
268 from caf.framework
import Calibration
269 print(
"Performing ", numCrysCrateIterations,
" iterations of crate and crystal calibrations.")
271 crysCalibBaseName =
"ECLcrystalTimeCalibration_physics_"
272 crateCalibBaseName =
"ECLcrateTimeCalibration_physics_"
273 mergeCalibBaseName =
"ecl_t_merge_"
281 for i
in range(numCrysCrateIterations):
282 crysCalibName = crysCalibBaseName + str(i)
283 crateCalibName = crateCalibBaseName + str(i)
284 mergeCalibName = mergeCalibBaseName + str(i)
286 print(
"iteration = ", i)
287 print(
"crysCalibName = ", crysCalibName)
288 print(
"crateCalibName = ", crateCalibName)
293 cal_crates_i.add_collection(name=
"bhabha", collection=eclTCol)
294 cal_crates_i.algorithms = [eclTAlgCrates]
295 cal_crates_i.save_payloads =
False
296 cal_crates_i.strategies = SimpleRunByRun
297 cal_crates_i.backend_args = {
"request_memory":
"4 GB"}
303 cal_crystals_i.add_collection(name=
"bhabha", collection=eclTCol_crys)
304 cal_crystals_i.backend_args = {
"request_memory":
"4 GB"}
309 if i == 0
and numCrysCrateIterations > 1:
310 cal_crystals_i.algorithms = [eclTAlgCrystals_saveNotReadPrevPayload]
311 print(
"crystal algorithm: save previous payload for comparison purposes but do not read it")
312 print(
"eclTAlgCrystals_saveNotReadPrevPayload.savePrevCrysPayload = ",
313 eclTAlgCrystals_saveNotReadPrevPayload.savePrevCrysPayload)
314 print(
"eclTAlgCrystals_saveNotReadPrevPayload.readPrevCrysPayload = ",
315 eclTAlgCrystals_saveNotReadPrevPayload.readPrevCrysPayload)
316 elif i == 0
and numCrysCrateIterations == 1:
317 cal_crystals_i.algorithms = [eclTAlgCrystals]
318 print(
"crystal algorithm: do not save or read any previous payloads for comparison purposes")
319 print(
"eclTAlgCrystals.savePrevCrysPayload = ", eclTAlgCrystals.savePrevCrysPayload)
320 print(
"eclTAlgCrystals.readPrevCrysPayload = ", eclTAlgCrystals.readPrevCrysPayload)
322 cal_crystals_i.algorithms = [eclTAlgCrystals_readNotSavePrevPayload]
323 print(
"crystal algorithm: do not save previous payload but do read it in for comparison purposes")
324 print(
"eclTAlgCrystals_readNotSavePrevPayload.savePrevCrysPayload = ",
325 eclTAlgCrystals_readNotSavePrevPayload.savePrevCrysPayload)
326 print(
"eclTAlgCrystals_readNotSavePrevPayload.readPrevCrysPayload = ",
327 eclTAlgCrystals_readNotSavePrevPayload.readPrevCrysPayload)
329 cal_crystals_i.save_payloads =
False
333 if payload_boundaries:
334 cal_crystals_i.strategies = SequentialBoundaries
336 cal_crystals_i.strategies = SingleIOV
341 cal_ecl_merge_i =
Calibration(name=mergeCalibName, collector=
"DummyCollector",
342 input_files=input_files_bhabha_1perRun)
346 if i == 0
and numCrysCrateIterations == 1:
347 cal_ecl_merge_i.algorithms = [merging_alg]
348 print(
"merge algorithm: do not read previous payload")
349 print(
"merging_alg.readPrevCrysPayload = ", merging_alg.readPrevCrysPayload)
351 cal_ecl_merge_i.algorithms = [merging_alg]
352 print(
"merge algorithm: read previous payload for comparison purposes")
353 print(
"merging_alg.readPrevCrysPayload = ", merging_alg.readPrevCrysPayload)
355 cal_ecl_merge_i.save_payloads =
False
356 ecl_merge_pre_path_i = basf2.create_path()
357 prepare_cdst_analysis(ecl_merge_pre_path_i)
358 ecl_merge_pre_path_i.pre_collector_path = ecl_merge_pre_path_i
362 if payload_boundaries:
363 cal_ecl_merge_i.strategies = SequentialBoundaries
365 cal_ecl_merge_i.strategies = SingleIOV
368 for algorithm
in cal_crystals_i.algorithms:
371 if i == numCrysCrateIterations - 1:
374 if payload_boundaries:
375 algorithm.params = {
"iov_coverage": output_iov,
376 "payload_boundaries": payload_boundaries}
378 print(
"Set iov for final crystals alg - SequentialBoundaries")
380 algorithm.params = {
"apply_iov": output_iov}
381 print(
"Set iov for final crystals alg - SingleIOV ")
385 if payload_boundaries:
386 algorithm.params = {
"iov_coverage": intermediate_iov,
387 "payload_boundaries": payload_boundaries}
388 print(
"Set iov for intermediate crystals alg - SequentialBoundaries")
390 algorithm.params = {
"apply_iov": intermediate_iov}
391 print(
"Set iov for intermediate crystals alg - SingleIOV ")
394 for algorithm
in cal_ecl_merge_i.algorithms:
397 if i == numCrysCrateIterations - 1:
400 if payload_boundaries:
401 algorithm.params = {
"iov_coverage": output_iov,
402 "payload_boundaries": payload_boundaries}
404 print(
"Set iov for final merging alg - SequentialBoundaries")
406 algorithm.params = {
"apply_iov": output_iov}
407 print(
"Set iov for final merging alg - SingleIOV ")
411 if payload_boundaries:
412 algorithm.params = {
"iov_coverage": intermediate_iov,
413 "payload_boundaries": payload_boundaries}
414 print(
"Set iov for intermediate merging alg - SequentialBoundaries")
416 algorithm.params = {
"apply_iov": intermediate_iov}
417 print(
"Set iov for intermediate merging alg - SingleIOV ")
420 calibs = np.append(calibs, [cal_crates_i, cal_crystals_i, cal_ecl_merge_i])
423 calibs[len(calibs) - 3].save_payloads =
True
424 calibs[len(calibs) - 1].save_payloads =
True
429 root_input = register_module(
'RootInput')
430 rec_path_bhabha_val = create_path()
431 rec_path_bhabha_val.add_module(root_input)
432 if 'Gearbox' not in rec_path_bhabha_val:
433 rec_path_bhabha_val.add_module(
'Gearbox')
434 if 'Geometry' not in rec_path_bhabha_val:
435 rec_path_bhabha_val.add_module(
'Geometry', useDB=
True)
437 prepare_user_cdst_analysis(rec_path_bhabha_val)
439 col_bhabha_val = register_module(
'eclBhabhaTimeCalibrationValidationCollector')
440 col_bhabha_val.param(
'timeAbsMax', 70)
441 col_bhabha_val.param(
'saveTree',
False)
443 eclValTCol =
Collection(collector=col_bhabha_val,
444 input_files=input_files_bhabha,
445 pre_collector_path=rec_path_bhabha_val)
455 eclValTAlgBhabha.meanCleanRebinFactor = 3
456 eclValTAlgBhabha.meanCleanCutMinFactor = 0.4
457 eclValTAlgBhabha.clusterTimesFractionWindow_maxtime = 1.5
458 eclValTAlgBhabha.debugFilenameBase =
"eclBhabhaTValidationAlgorithm"
463 from caf.framework
import Calibration
465 valid_cal_bhabha =
Calibration(
"ECLcrystalTimeCalValidation_bhabhaPhysics")
466 valid_cal_bhabha.add_collection(name=
"bhabha", collection=eclValTCol)
467 valid_cal_bhabha.save_payloads =
False
468 valid_cal_bhabha.backend_args = {
"request_memory":
"4 GB"}
472 eclValTAlgBhabha_readPrevPayload = copy.deepcopy(eclValTAlgBhabha)
473 eclValTAlgBhabha_readPrevPayload.readPrevCrysPayload =
True
476 if numCrysCrateIterations > 1:
477 valid_cal_bhabha.algorithms = [eclValTAlgBhabha_readPrevPayload]
478 print(
"bhabha validation: read previous payload for comparison purposes")
479 print(
"eclValTAlgBhabha_readPrevPayload.readPrevCrysPayload = ",
480 eclValTAlgBhabha_readPrevPayload.readPrevCrysPayload)
482 valid_cal_bhabha.algorithms = [eclValTAlgBhabha]
483 print(
"bhabha validation: do not read previous payload for comparison purposes")
484 print(
"eclValTAlgBhabha.readPrevCrysPayload = ", eclValTAlgBhabha.readPrevCrysPayload)
488 if payload_boundaries:
489 valid_cal_bhabha.strategies = SequentialBoundaries
491 valid_cal_bhabha.strategies = SingleIOV
493 for algorithm
in valid_cal_bhabha.algorithms:
496 if payload_boundaries:
497 algorithm.params = {
"iov_coverage": output_iov,
498 "payload_boundaries": payload_boundaries}
500 print(
"Set iov for bhabha validation alg - SequentialBoundaries")
502 algorithm.params = {
"apply_iov": output_iov}
503 print(
"Set iov for bhabha validation alg - SingleIOV")
508 root_input = register_module(
'RootInput')
509 rec_path_hadron_val = create_path()
510 rec_path_hadron_val.add_module(root_input)
511 if 'Gearbox' not in rec_path_hadron_val:
512 rec_path_hadron_val.add_module(
'Gearbox')
513 if 'Geometry' not in rec_path_hadron_val:
514 rec_path_hadron_val.add_module(
'Geometry', useDB=
True)
516 prepare_user_cdst_analysis(rec_path_hadron_val)
518 col_hadron_val = register_module(
'eclHadronTimeCalibrationValidationCollector')
519 col_hadron_val.param(
'timeAbsMax', 70)
520 col_hadron_val.param(
'saveTree',
False)
522 eclValTCol =
Collection(collector=col_hadron_val,
523 input_files=input_files_hadron,
524 pre_collector_path=rec_path_hadron_val)
534 eclValTAlgHadronic.meanCleanRebinFactor = 3
535 eclValTAlgHadronic.meanCleanCutMinFactor = 0.4
536 eclValTAlgHadronic.clusterTimesFractionWindow_maxtime = 8
537 eclValTAlgHadronic.debugFilenameBase =
"eclHadronTValidationAlgorithm"
542 from caf.framework
import Calibration
544 valid_cal_hadron =
Calibration(
"ECLcrystalTimeCalValidation_hadronPhysics")
545 valid_cal_hadron.add_collection(name=
"hadron", collection=eclValTCol)
546 valid_cal_hadron.save_payloads =
False
547 valid_cal_hadron.backend_args = {
"request_memory":
"4 GB"}
551 eclValTAlgHadron_readPrevPayload = copy.deepcopy(eclValTAlgHadronic)
552 eclValTAlgHadron_readPrevPayload.readPrevCrysPayload =
True
555 if numCrysCrateIterations > 1:
556 valid_cal_hadron.algorithms = [eclValTAlgHadron_readPrevPayload]
557 print(
"hadron validation: read previous payload for comparison purposes")
558 print(
"eclValTAlgHadron_readPrevPayload.readPrevCrysPayload = ",
559 eclValTAlgHadron_readPrevPayload.readPrevCrysPayload)
561 valid_cal_hadron.algorithms = [eclValTAlgHadronic]
562 print(
"hadron validation: do not read previous payload for comparison purposes")
563 print(
"eclValTAlgHadronic.readPrevCrysPayload = ", eclValTAlgHadronic.readPrevCrysPayload)
567 if payload_boundaries:
568 valid_cal_hadron.strategies = SequentialBoundaries
570 valid_cal_hadron.strategies = SingleIOV
572 for algorithm
in valid_cal_hadron.algorithms:
575 if payload_boundaries:
576 algorithm.params = {
"iov_coverage": output_iov,
577 "payload_boundaries": payload_boundaries}
579 print(
"Set iov for hadron validation alg - SequentialBoundaries")
581 algorithm.params = {
"apply_iov": output_iov}
582 print(
"Set iov for hadron validation alg - SingleIOV")
589 root_input = register_module(
'RootInput', entrySequences=[
'0:{}'.format(1)])
591 rec_path_bhabha_plotting = create_path()
592 rec_path_bhabha_plotting.add_module(root_input)
593 if 'Gearbox' not in rec_path_bhabha_plotting:
594 rec_path_bhabha_plotting.add_module(
'Gearbox')
595 if 'Geometry' not in rec_path_bhabha_plotting:
596 rec_path_bhabha_plotting.add_module(
'Geometry', useDB=
True)
598 prepare_cdst_analysis(rec_path_bhabha_plotting)
600 col_bhabha_plotting = register_module(
'eclTimeShiftsPlottingCollector')
601 eclTCol =
Collection(collector=col_bhabha_plotting,
602 input_files=input_files_plotting,
603 pre_collector_path=rec_path_bhabha_plotting)
610 tShifts_alg.debugFilenameBase =
"eclTimeShiftsAlgorithm"
613 tShifts_alg.crysCrateShift_min = -30
614 tShifts_alg.crysCrateShift_max = 30
619 cal_ecl_timeShifts =
Calibration(name=
"ecl_t_shifts", algorithms=[tShifts_alg],
620 input_files=input_files_plotting)
621 cal_ecl_timeShifts.add_collection(name=
"bhabha", collection=eclTCol)
623 cal_ecl_timeShifts.save_payloads =
False
627 if payload_boundaries:
628 cal_ecl_timeShifts.strategies = SequentialBoundaries
630 cal_ecl_timeShifts.strategies = SingleIOV
632 for algorithm
in cal_ecl_timeShifts.algorithms:
635 if payload_boundaries:
636 algorithm.params = {
"iov_coverage": output_iov,
637 "payload_boundaries": payload_boundaries}
639 print(
"Set iov for crate time plotting alg - SequentialBoundaries")
641 algorithm.params = {
"apply_iov": output_iov}
642 print(
"Set iov for crate time plotting alg - SingleIOV")
652 for i
in range(len(calibs) - 1):
653 calibs[i + 1].depends_on(calibs[i])
657 valid_cal_bhabha.depends_on(calibs[len(calibs) - 1])
658 valid_cal_hadron.depends_on(calibs[len(calibs) - 1])
659 cal_ecl_timeShifts.depends_on(calibs[len(calibs) - 1])
664 calibs = np.append(calibs, [valid_cal_bhabha, valid_cal_hadron, cal_ecl_timeShifts])
666 print(
"##############")
667 print(
"List of calibrations:")
669 print(
" ", c.name,
" depends on ", c.dependencies,
", save payloads = ", c.save_payloads)
670 print(
"##############")
681 print(
"numCrysCrateIterations value resulting in default calibration iteration set up")
682 print(
"Performing these calibration iterations: crate -> crystal -> crate")
687 from caf.framework
import Calibration
689 cal_crates_1 =
Calibration(
"ECLcrateTimeCalibration_physics_1")
690 cal_crates_1.add_collection(name=
"bhabha", collection=eclTCol)
691 cal_crates_1.algorithms = [eclTAlgCrates]
692 cal_crates_1.save_payloads =
False
693 cal_crates_1.backend_args = {
"request_memory":
"4 GB"}
703 cal_crates_1.strategies = SimpleRunByRun
711 cal_crystals_1 =
Calibration(
"ECLcrystalTimeCalibration_physics_1")
712 cal_crystals_1.add_collection(name=
"bhabha", collection=eclTCol_crys)
713 cal_crystals_1.algorithms = [eclTAlgCrystals]
714 cal_crystals_1.backend_args = {
"request_memory":
"4 GB"}
722 cal_crystals_1.save_payloads =
False
732 if payload_boundaries:
733 cal_crystals_1.strategies = SequentialBoundaries
735 cal_crystals_1.strategies = SingleIOV
739 cal_crates_2 =
Calibration(
"ECLcrateTimeCalibration_physics_2")
740 cal_crates_2.add_collection(name=
"bhabha", collection=eclTCol)
741 cal_crates_2.algorithms = [eclTAlgCrates]
742 cal_crates_2.strategies = SimpleRunByRun
743 cal_crates_2.backend_args = {
"request_memory":
"4 GB"}
754 cal_ecl_merge =
Calibration(name=
"ecl_t_merge", collector=
"DummyCollector", algorithms=[merging_alg],
755 input_files=input_files_bhabha_1perRun)
758 cal_ecl_merge.depends_on(cal_crystals_1)
761 ecl_merge_pre_path = basf2.create_path()
762 prepare_cdst_analysis(ecl_merge_pre_path)
763 ecl_merge_pre_path.pre_collector_path = ecl_merge_pre_path
767 if payload_boundaries:
768 cal_ecl_merge.strategies = SequentialBoundaries
770 cal_ecl_merge.strategies = SingleIOV
773 for algorithm
in cal_crystals_1.algorithms:
774 if payload_boundaries:
775 algorithm.params = {
"iov_coverage": intermediate_iov,
776 "payload_boundaries": payload_boundaries}
777 print(
"Set iov for crystals alg - SequentialBoundaries")
779 algorithm.params = {
"apply_iov": intermediate_iov}
780 print(
"Set iov for crystals alg - SingleIOV")
782 for algorithm
in cal_ecl_merge.algorithms:
783 if payload_boundaries:
784 algorithm.params = {
"iov_coverage": output_iov,
785 "payload_boundaries": payload_boundaries}
786 print(
"Set iov for crystals merge alg - SequentialBoundaries")
788 algorithm.params = {
"apply_iov": output_iov}
789 print(
"Set iov for crystals merge alg - SingleIOV")
794 root_input = register_module(
'RootInput')
795 rec_path_bhabha_val = create_path()
796 rec_path_bhabha_val.add_module(root_input)
797 if 'Gearbox' not in rec_path_bhabha_val:
798 rec_path_bhabha_val.add_module(
'Gearbox')
799 if 'Geometry' not in rec_path_bhabha_val:
800 rec_path_bhabha_val.add_module(
'Geometry', useDB=
True)
802 prepare_user_cdst_analysis(rec_path_bhabha_val)
804 col_bhabha_val = register_module(
'eclBhabhaTimeCalibrationValidationCollector')
805 col_bhabha_val.param(
'timeAbsMax', 70)
806 col_bhabha_val.param(
'saveTree',
False)
808 eclValTCol =
Collection(collector=col_bhabha_val,
809 input_files=input_files_bhabha,
810 pre_collector_path=rec_path_bhabha_val)
820 eclValTAlgBhabha.meanCleanRebinFactor = 3
821 eclValTAlgBhabha.meanCleanCutMinFactor = 0.4
822 eclValTAlgBhabha.clusterTimesFractionWindow_maxtime = 1.5
823 eclValTAlgBhabha.debugFilenameBase =
"eclBhabhaTValidationAlgorithm"
828 from caf.framework
import Calibration
830 valid_cal_bhabha =
Calibration(
"ECLcrystalTimeCalValidation_bhabhaPhysics")
831 valid_cal_bhabha.add_collection(name=
"bhabha", collection=eclValTCol)
832 valid_cal_bhabha.algorithms = [eclValTAlgBhabha]
833 valid_cal_bhabha.save_payloads =
False
834 valid_cal_bhabha.backend_args = {
"request_memory":
"4 GB"}
836 eclValTAlgBhabha.readPrevCrysPayload =
True
837 print(
"eclValTAlgBhabha.readPrevCrysPayload = ", eclValTAlgBhabha.readPrevCrysPayload)
847 if payload_boundaries:
848 valid_cal_bhabha.strategies = SequentialBoundaries
850 valid_cal_bhabha.strategies = SingleIOV
852 for algorithm
in valid_cal_bhabha.algorithms:
855 if payload_boundaries:
856 algorithm.params = {
"iov_coverage": output_iov,
857 "payload_boundaries": payload_boundaries}
859 print(
"Set iov for bhabha validation alg - SequentialBoundaries")
861 algorithm.params = {
"apply_iov": output_iov}
862 print(
"Set iov for bhabha validation alg - SingleIOV")
867 root_input = register_module(
'RootInput')
868 rec_path_hadron_val = create_path()
869 rec_path_hadron_val.add_module(root_input)
870 if 'Gearbox' not in rec_path_hadron_val:
871 rec_path_hadron_val.add_module(
'Gearbox')
872 if 'Geometry' not in rec_path_hadron_val:
873 rec_path_hadron_val.add_module(
'Geometry', useDB=
True)
875 prepare_user_cdst_analysis(rec_path_hadron_val)
877 col_hadron_val = register_module(
'eclHadronTimeCalibrationValidationCollector')
878 col_hadron_val.param(
'timeAbsMax', 70)
879 col_hadron_val.param(
'saveTree',
False)
881 eclValTCol =
Collection(collector=col_hadron_val,
882 input_files=input_files_hadron,
883 pre_collector_path=rec_path_hadron_val)
893 eclValTAlgHadronic.meanCleanRebinFactor = 3
894 eclValTAlgHadronic.meanCleanCutMinFactor = 0.4
895 eclValTAlgHadronic.clusterTimesFractionWindow_maxtime = 8
896 eclValTAlgHadronic.debugFilenameBase =
"eclHadronTValidationAlgorithm"
901 from caf.framework
import Calibration
903 valid_cal_hadron =
Calibration(
"ECLcrystalTimeCalValidation_hadronPhysics")
904 valid_cal_hadron.add_collection(name=
"hadron", collection=eclValTCol)
905 valid_cal_hadron.algorithms = [eclValTAlgHadronic]
906 valid_cal_hadron.save_payloads =
False
907 valid_cal_bhabha.backend_args = {
"request_memory":
"4 GB"}
909 eclValTAlgHadronic.readPrevCrysPayload =
True
910 print(
"eclValTAlgHadronic.readPrevCrysPayload = ", eclValTAlgHadronic.readPrevCrysPayload)
920 if payload_boundaries:
921 valid_cal_hadron.strategies = SequentialBoundaries
923 valid_cal_hadron.strategies = SingleIOV
925 for algorithm
in valid_cal_hadron.algorithms:
928 if payload_boundaries:
929 algorithm.params = {
"iov_coverage": output_iov,
930 "payload_boundaries": payload_boundaries}
932 print(
"Set iov for hadron validation alg - SequentialBoundaries")
934 algorithm.params = {
"apply_iov": output_iov}
935 print(
"Set iov for hadron validation alg - SingleIOV")
942 root_input = register_module(
'RootInput', entrySequences=[
'0:{}'.format(1)])
944 rec_path_bhabha_plotting = create_path()
945 rec_path_bhabha_plotting.add_module(root_input)
946 if 'Gearbox' not in rec_path_bhabha_plotting:
947 rec_path_bhabha_plotting.add_module(
'Gearbox')
948 if 'Geometry' not in rec_path_bhabha_plotting:
949 rec_path_bhabha_plotting.add_module(
'Geometry', useDB=
True)
951 prepare_cdst_analysis(rec_path_bhabha_plotting)
953 col_bhabha_plotting = register_module(
'eclTimeShiftsPlottingCollector')
954 eclTCol =
Collection(collector=col_bhabha_plotting,
955 input_files=input_files_plotting,
956 pre_collector_path=rec_path_bhabha_plotting,
964 tShifts_alg.debugFilenameBase =
"eclTimeShiftsAlgorithm"
967 tShifts_alg.crysCrateShift_min = -30
968 tShifts_alg.crysCrateShift_max = 30
973 cal_ecl_timeShifts =
Calibration(name=
"ecl_t_shifts", algorithms=[tShifts_alg],
974 input_files=input_files_plotting)
975 cal_ecl_timeShifts.add_collection(name=
"bhabha", collection=eclTCol)
977 cal_ecl_timeShifts.save_payloads =
False
981 if payload_boundaries:
982 cal_ecl_timeShifts.strategies = SequentialBoundaries
984 cal_ecl_timeShifts.strategies = SingleIOV
986 for algorithm
in cal_ecl_timeShifts.algorithms:
989 if payload_boundaries:
990 algorithm.params = {
"iov_coverage": output_iov,
991 "payload_boundaries": payload_boundaries}
993 print(
"Set iov for crate time plotting alg - SequentialBoundaries")
995 algorithm.params = {
"apply_iov": output_iov}
996 print(
"Set iov for crate time plotting alg - SingleIOV")
1006 cal_crystals_1.depends_on(cal_crates_1)
1007 cal_ecl_merge.depends_on(cal_crystals_1)
1008 cal_crates_2.depends_on(cal_ecl_merge)
1012 valid_cal_bhabha.depends_on(cal_crates_2)
1013 valid_cal_hadron.depends_on(cal_crates_2)
1016 cal_ecl_timeShifts.depends_on(cal_crates_2)
1023 return [cal_crates_1, cal_crystals_1, cal_ecl_merge, cal_crates_2,
1024 valid_cal_bhabha, valid_cal_hadron, cal_ecl_timeShifts]