Belle II Software  release-06-01-15
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  "showerArrayName": "ECLShowers"
36  }
37  )
38 
39 
40 # --------------------------------------------------------------
41 # ..The calibration functions
42 
43 
44 def get_calibrations(input_data, **kwargs):
45  import basf2
46  from ROOT import Belle2
47  from caf.utils import IoV
48  from caf.framework import Calibration
49 
50  # --------------------------------------------------------------
51  # ..Input data
52  file_to_iov_leakage = input_data["single_gamma_mc"]
53  input_files_leakage = list(file_to_iov_leakage.keys())
54 
55  # ..Collector
56  ecl_leakage_collector = basf2.register_module("eclLeakageCollector")
57  ecl_leakage_collector.param("granularity", "all")
58  ecl_leakage_collector.param("position_bins", 29)
59 
60  # ..Number of energy points and their values can be set via expert_config
61  expert_config = kwargs.get("expert_config")
62  number_energies = expert_config["number_energies"]
63  ecl_leakage_collector.param("number_energies", number_energies)
64 
65  forward_energies = expert_config["forward_energies"]
66  ecl_leakage_collector.param("energies_forward", forward_energies)
67 
68  barrel_energies = expert_config["barrel_energies"]
69  ecl_leakage_collector.param("energies_barrel", barrel_energies)
70 
71  backward_energies = expert_config["backward_energies"]
72  ecl_leakage_collector.param("energies_backward", backward_energies)
73 
74  showerArrayName = expert_config["showerArrayName"]
75  ecl_leakage_collector.param("showerArrayName", showerArrayName)
76 
77  # ..Algorithm
78  algo_leakage = Belle2.ECL.eclLeakageAlgorithm()
79  lowEnergyThreshold = expert_config["lowEnergyThreshold"]
80  algo_leakage.setLowEnergyThreshold(lowEnergyThreshold)
81  noNCrysThreshold = expert_config["noNCrysThreshold"]
82  algo_leakage.setNoNCrysThreshold(noNCrysThreshold)
83 
84  # ..The calibration
85  cal_ecl_leakage = Calibration(
86  name="ecl_leakage",
87  collector=ecl_leakage_collector,
88  algorithms=algo_leakage,
89  input_files=input_files_leakage)
90 
91  # ..pre_path is empty
92  ecl_leakage_pre_path = basf2.create_path()
93  cal_ecl_leakage.pre_collector_path = ecl_leakage_pre_path
94 
95  # --------------------------------------------------------------
96  # ..Force the output iovs to be open
97  requested_iov = kwargs.get("requested_iov", None)
98  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
99  for algorithm in cal_ecl_leakage.algorithms:
100  algorithm.params = {"apply_iov": output_iov}
101 
102  # --------------------------------------------------------------
103  # ..Return the calibrations
104  return [cal_ecl_leakage]
Calculate ECL energy leakage corrections.