15 Example to create lepton particle list and apply LeptonID corrections to a MC sample
16 by retrieving lookup tables from the conditions DB.
25 parser = argparse.ArgumentParser(description=__doc__,
26 formatter_class=argparse.RawTextHelpFormatter)
28 parser.add_argument(
"--lid_weights_gt",
30 default=
"leptonid_Moriond2022_Official_rel5_v1a",
31 help=
"Name of conditions DB global tag with recommended lepton ID correction factors.\n"
32 "Default: %(default)s.")
39 Main entry point allowing external calls.
42 args = argparser().parse_args()
45 import modularAnalysis
as ma
46 from variables
import variables
49 from stdCharged
import stdE, stdMu
51 b2.set_log_level(b2.LogLevel.INFO)
54 analysis_gt = ma.getAnalysisGlobaltag()
55 b2.B2INFO(f
"Appending analysis GT: {analysis_gt}")
56 b2.conditions.append_globaltag(analysis_gt)
58 path = b2.create_path()
64 ma.inputMdst(environmentType=
"default",
65 filename=b2.find_file(
"mdst13.root",
"validation"),
66 entrySequence=
"0:10000",
76 ma.fillParticleList(
"e+:uncorrected",
77 cut=
"dr < 2 and abs(dz) < 4",
79 ma.fillParticleList(
"gamma:bremsinput",
82 ma.correctBremsBelle(outputListName=
"e+:corrected",
83 inputListName=
"e+:uncorrected",
84 gammaListName=
"gamma:bremsinput",
87 electrons_fixed09 =
"lh_B_fixed09"
88 electrons_wp =
"FixedThresh09"
89 electron_id_var, electron_id_weights = stdE(electrons_wp,
"likelihood",
"binary", args.lid_weights_gt,
91 inputListName=
"e+:corrected",
92 outputListLabel=electrons_fixed09,
95 muons_uniform90 =
"bdt_G_uniform90"
96 muons_wp =
"UniformEff90"
97 muon_id_var, muon_id_weights = stdMu(muons_wp,
"bdt",
"global", args.lid_weights_gt,
99 outputListLabel=muons_uniform90,
106 ma.applyCuts(f
"e-:{electrons_fixed09}",
"[pt > 0.1] and thetaInCDCAcceptance", path=path)
107 ma.applyCuts(f
"mu-:{muons_uniform90}",
"[pt > 0.1] and thetaInCDCAcceptance", path=path)
113 jpsiee = f
"J/psi:ee -> e+:{electrons_fixed09} e-:{electrons_fixed09}"
114 jpsimumu = f
"J/psi:mumu -> mu+:{muons_uniform90} mu-:{muons_uniform90}"
118 "[daughterSumOf(charge) == 0]",
120 jpsi_cut =
" and ".join(jpsi_cuts)
122 ma.reconstructDecay(jpsiee, jpsi_cut, path=path)
123 ma.reconstructDecay(jpsimumu, jpsi_cut, path=path)
134 variables_jpsi += vc.kinematics
135 variables_jpsi += vc.inv_mass
137 variables_e += vc.kinematics
138 variables_mu += vc.kinematics
140 cms_kinematics = vu.create_aliases(vc.kinematics,
"useCMSFrame({variable})",
"CMS")
142 variables_e += cms_kinematics
143 variables_mu += cms_kinematics
145 lid_e = [electron_id_var] + electron_id_weights
148 lid_mu = [muon_id_var] + muon_id_weights
149 variables_mu += lid_mu
151 aliases_jpsiee = vu.create_aliases_for_selected(
153 f
"^J/psi:ee -> e+:{electrons_fixed09} e-:{electrons_fixed09}",
155 aliases_jpsimumu = vu.create_aliases_for_selected(
157 f
"^J/psi:mumu -> mu+:{muons_uniform90} mu-:{muons_uniform90}",
160 aliases_e = vu.create_aliases_for_selected(
162 f
"J/psi:ee -> ^e+:{electrons_fixed09} ^e-:{electrons_fixed09}",
164 aliases_mu = vu.create_aliases_for_selected(
166 f
"J/psi:mumu -> ^mu+:{muons_uniform90} ^mu-:{muons_uniform90}",
169 variables.printAliases()
171 output_file =
"jpsill_LID_weights.root"
174 ma.variablesToNtuple(decayString=
"J/psi:ee",
175 variables=aliases_jpsiee+aliases_e,
177 filename=output_file,
179 ma.variablesToNtuple(decayString=
"J/psi:mumu",
180 variables=aliases_jpsimumu+aliases_mu,
182 filename=output_file,
192 if __name__ ==
"__main__":
int main(int argc, char **argv)
Run all tests.