9"""ECL cluster crystal energy calibration using single photon MCrd."""
11from prompt
import CalibrationSettings, INPUT_DATA_FILTERS
15settings = CalibrationSettings(
16 name=
"ecl_cluster_energy",
17 expert_username=
"hearty",
20 input_data_formats=[
"mdst"],
21 input_data_names=[
"single_gamma_mc"],
22 input_data_filters={
"single_gamma_mc": [INPUT_DATA_FILTERS[
"Data Tag"][
"single_gamma_mc"]]},
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 "digitArrayName":
"ECLTrimmedDigits",
34 "showerArrayName":
"ECLTrimmedShowers",
35 "nGroupPerThetaID": 8,
36 "lowEnergyThreshold": 0.},
37 produced_payloads=[
"ECLnOptimal",
"ECLLeakageCorrections"])
44def get_calibrations(input_data, **kwargs):
46 from ROOT
import Belle2
47 from caf.utils
import IoV
48 from caf.framework
import Calibration
52 file_to_iov = input_data[
"single_gamma_mc"]
53 input_files_single_gamma = list(file_to_iov.keys())
59 ecl_nOptimal_collector = basf2.register_module(
"eclNOptimalCollector")
60 ecl_nOptimal_collector.param(
"granularity",
"all")
63 expert_config = kwargs.get(
"expert_config")
64 number_energies = expert_config[
"number_energies"]
65 ecl_nOptimal_collector.param(
"numberEnergies", number_energies)
67 forward_energies = expert_config[
"forward_energies"]
68 ecl_nOptimal_collector.param(
"energiesForward", forward_energies)
70 barrel_energies = expert_config[
"barrel_energies"]
71 ecl_nOptimal_collector.param(
"energiesBarrel", barrel_energies)
73 backward_energies = expert_config[
"backward_energies"]
74 ecl_nOptimal_collector.param(
"energiesBackward", backward_energies)
76 digitArrayName = expert_config[
"digitArrayName"]
77 ecl_nOptimal_collector.param(
"digitArrayName", digitArrayName)
79 showerArrayName = expert_config[
"showerArrayName"]
80 ecl_nOptimal_collector.param(
"showerArrayName", showerArrayName)
82 nGroupPerThetaID = expert_config[
"nGroupPerThetaID"]
83 ecl_nOptimal_collector.param(
"nGroupPerThetaID", nGroupPerThetaID)
89 cal_ecl_nOptimal = Calibration(
91 collector=ecl_nOptimal_collector,
92 algorithms=algo_nOptimal,
93 input_files=input_files_single_gamma)
96 ecl_nOptimal_pre_path = basf2.create_path()
97 cal_ecl_nOptimal.pre_collector_path = ecl_nOptimal_pre_path
103 ecl_leakage_collector = basf2.register_module(
"eclLeakageCollector")
104 ecl_leakage_collector.param(
"granularity",
"all")
105 ecl_leakage_collector.param(
"position_bins", 29)
108 ecl_leakage_collector.param(
"number_energies", number_energies)
109 ecl_leakage_collector.param(
"energies_forward", forward_energies)
110 ecl_leakage_collector.param(
"energies_barrel", barrel_energies)
111 ecl_leakage_collector.param(
"energies_backward", backward_energies)
112 ecl_leakage_collector.param(
"showerArrayName", showerArrayName)
116 lowEnergyThreshold = expert_config[
"lowEnergyThreshold"]
117 algo_leakage.setLowEnergyThreshold(lowEnergyThreshold)
120 cal_ecl_leakage = Calibration(
122 collector=ecl_leakage_collector,
123 algorithms=algo_leakage,
124 input_files=input_files_single_gamma)
127 cal_ecl_leakage.depends_on(cal_ecl_nOptimal)
130 ecl_leakage_pre_path = basf2.create_path()
131 cal_ecl_leakage.pre_collector_path = ecl_leakage_pre_path
135 requested_iov = kwargs.get(
"requested_iov",
None)
136 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
137 for algorithm
in cal_ecl_nOptimal.algorithms:
138 algorithm.params = {
"apply_iov": output_iov}
139 for algorithm
in cal_ecl_leakage.algorithms:
140 algorithm.params = {
"apply_iov": output_iov}
144 return [cal_ecl_nOptimal, cal_ecl_leakage]
Calculate ECL energy leakage corrections.
Algorithm that works with eclNOptimalCollector to find the number of crystals to be summed to get the...