Belle II Software  release-06-02-00
caf_ecl_mu_mu_expected.py
1 # -*- coding: utf-8 -*-
2 
3 
10 
11 """Find expected energies for ECL e+e- --> gamma gamma single crystal
12 energy calibration. Requires e+e- --> mu mu mc in mdst format with
13 ECLDigits as additional branch."""
14 
15 from prompt import CalibrationSettings, input_data_filters
16 
17 # --------------------------------------------------------------
18 # ..Tell the automated script some required details
19 settings = CalibrationSettings(name="ecl_mu_mu_expected",
20  expert_username="hearty",
21  description=__doc__,
22  input_data_formats=["mdst"],
23  input_data_names=["mu_mu_mc"],
24  depends_on=[])
25 
26 # --------------------------------------------------------------
27 # ..The calibration functions
28 
29 
30 def get_calibrations(input_data, **kwargs):
31  import basf2
32  from ROOT import Belle2
33  from caf.utils import IoV
34  from caf.framework import Calibration
35  from reconstruction import prepare_cdst_analysis
36 
37  # --------------------------------------------------------------
38  # ..Input data
39  file_to_iov_mu_mu = input_data["mu_mu_mc"]
40  input_files_mu_mu = list(file_to_iov_mu_mu.keys())
41 
42  # ..Algorithm
43  algo_mu_mu = Belle2.ECL.eclMuMuEAlgorithm()
44  algo_mu_mu.cellIDLo = 1
45  algo_mu_mu.cellIDHi = 8736
46  algo_mu_mu.minEntries = 150
47  algo_mu_mu.nToRebin = 1000
48  algo_mu_mu.tRatioMin = 0.05
49  algo_mu_mu.tRatioMax = 0.4
50  algo_mu_mu.lowerEdgeThresh = 0.10
51  algo_mu_mu.performFits = True
52  algo_mu_mu.findExpValues = True
53  algo_mu_mu.storeConst = 0
54 
55  # ..The calibration
56  eclmumu_collector = basf2.register_module("eclMuMuECollector")
57  eclmumu_collector.param("granularity", "all")
58  eclmumu_collector.param("minPairMass", 9.0)
59  eclmumu_collector.param("minTrackLength", 30.)
60  eclmumu_collector.param("MaxNeighbourE", 0.010)
61  eclmumu_collector.param("thetaLabMinDeg", 17.)
62  eclmumu_collector.param("thetaLabMaxDeg", 150.)
63  eclmumu_collector.param("measureTrueEnergy", True)
64  eclmumu_collector.param("requireL1", False)
65  cal_ecl_mu_mu = Calibration(
66  name="ecl_mu_mu_expected",
67  collector=eclmumu_collector,
68  algorithms=algo_mu_mu,
69  input_files=input_files_mu_mu)
70 
71  # ..Need to include track extrapolation in the path before collector
72  ext_path = basf2.create_path()
73  ext_path.add_module("Gearbox")
74  ext_path.add_module("Geometry")
75  ext_path.add_module("Ext", pdgCodes=[13])
76  cal_ecl_mu_mu.pre_collector_path = ext_path
77 
78  # --------------------------------------------------------------
79  # ..Force the output iovs to be open
80  requested_iov = kwargs.get("requested_iov", None)
81  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
82  for algorithm in cal_ecl_mu_mu.algorithms:
83  algorithm.params = {"apply_iov": output_iov}
84 
85  # --------------------------------------------------------------
86  # ..Return the calibrations
87  return [cal_ecl_mu_mu]
Calibrate ecl crystals using muon pair events.