Belle II Software  release-06-00-14
caf_ecl_leakage.py
1 # -*- coding: utf-8 -*-
2 
3 
10 
11 """ECL calibration to calculate photon energy leakage corrections."""
12 
13 from prompt import CalibrationSettings, INPUT_DATA_FILTERS
14 
15 
16 # --------------------------------------------------------------
17 # ..Tell the automated script some required details
18 settings = CalibrationSettings(name="ecl_leakage",
19  expert_username="hearty",
20  description=__doc__,
21  input_data_formats=["mdst"],
22  input_data_names=["single_gamma_mc"],
23  input_data_filters={
24  "single_gamma_mc": [
25  INPUT_DATA_FILTERS["Data Tag"]["single_gamma_mc"]
26  ]
27  },
28  depends_on=[],
29  expert_config={"number_energies": 8,
30  "forward_energies": [0.030, 0.050, 0.100, 0.200, 0.483, 1.166, 2.816, 6.800],
31  "barrel_energies": [0.030, 0.050, 0.100, 0.200, 0.458, 1.049, 2.402, 5.500],
32  "backward_energies": [0.030, 0.050, 0.100, 0.200, 0.428, 0.917, 1.962, 4.200],
33  "lowEnergyThreshold": 0.,
34  "noNCrysThreshold": 0.}
35  )
36 
37 
38 # --------------------------------------------------------------
39 # ..The calibration functions
40 
41 
42 def get_calibrations(input_data, **kwargs):
43  import basf2
44  from ROOT import Belle2
45  from caf.utils import IoV
46  from caf.framework import Calibration
47 
48  # --------------------------------------------------------------
49  # ..Input data
50  file_to_iov_leakage = input_data["single_gamma_mc"]
51  input_files_leakage = list(file_to_iov_leakage.keys())
52 
53  # ..Collector
54  ecl_leakage_collector = basf2.register_module("eclLeakageCollector")
55  ecl_leakage_collector.param("granularity", "all")
56  ecl_leakage_collector.param("position_bins", 29)
57 
58  # ..Number of energy points and their values can be set via expert_config
59  expert_config = kwargs.get("expert_config")
60  number_energies = expert_config["number_energies"]
61  ecl_leakage_collector.param("number_energies", number_energies)
62 
63  forward_energies = expert_config["forward_energies"]
64  ecl_leakage_collector.param("energies_forward", forward_energies)
65 
66  barrel_energies = expert_config["barrel_energies"]
67  ecl_leakage_collector.param("energies_barrel", barrel_energies)
68 
69  backward_energies = expert_config["backward_energies"]
70  ecl_leakage_collector.param("energies_backward", backward_energies)
71 
72  # ..Algorithm
73  algo_leakage = Belle2.ECL.eclLeakageAlgorithm()
74  lowEnergyThreshold = expert_config["lowEnergyThreshold"]
75  algo_leakage.setLowEnergyThreshold(lowEnergyThreshold)
76  noNCrysThreshold = expert_config["noNCrysThreshold"]
77  algo_leakage.setNoNCrysThreshold(noNCrysThreshold)
78 
79  # ..The calibration
80  cal_ecl_leakage = Calibration(
81  name="ecl_leakage",
82  collector=ecl_leakage_collector,
83  algorithms=algo_leakage,
84  input_files=input_files_leakage)
85 
86  # ..pre_path is empty
87  ecl_leakage_pre_path = basf2.create_path()
88  cal_ecl_leakage.pre_collector_path = ecl_leakage_pre_path
89 
90  # --------------------------------------------------------------
91  # ..Force the output iovs to be open
92  requested_iov = kwargs.get("requested_iov", None)
93  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
94  for algorithm in cal_ecl_leakage.algorithms:
95  algorithm.params = {"apply_iov": output_iov}
96 
97  # --------------------------------------------------------------
98  # ..Return the calibrations
99  return [cal_ecl_leakage]
Calculate ECL energy leakage corrections.