13import modularAnalysis
as ma
14from variables
import variables
as vm
18from ROOT
import PyConfig
19PyConfig.IgnoreCommandLineOptions =
True
24from grafei
import graFEI
33 parser = argparse.ArgumentParser()
35 "-c",
"--config", type=str, default=
None, help=
"graFEI config file"
38 "-w",
"--weight", type=str, default=
None, help=
"graFEI weight file"
44 default=
"analysis_tools_light-2403-persian",
45 help=
"Globaltag containing graFEI model",
52 help=
"Choose LCAS matrix of signal side",
59 help=
"Choose mass hypotheses of signal side",
65 help=
"Choose not to store MC-truth information",
67 return parser.parse_args()
70if __name__ ==
"__main__":
73 store_mc_truth =
not args.no_mc_truth
75 path = b2.create_path()
76 ma.inputMdst(filename=b2.find_file(
'mdst14.root',
'validation',
False), path=path)
78 b2.conditions.prepend_globaltag(ma.getAnalysisGlobaltag())
80 b2.conditions.prepend_globaltag(args.globaltag)
91 priors = [0.068, 0.050, 0.7326, 0.1315, 0.0183, 0.00006]
94 f
"pidIsMostLikely({','.join(str(p) for p in priors)})>0",
96 "thetaInCDCAcceptance",
104 "beamBackgroundSuppression>0.4",
105 "fakePhotonSuppression>0.3",
106 "abs(clusterTiming)<100",
107 "abs(formula(clusterTiming/clusterErrorTiming))<2.0",
108 "[[clusterReg==1 and E>0.09] or [clusterReg==2 and E>0.09] or [clusterReg==3 and E>0.14]]",
111 evt_cut =
"n_gamma_in_evt<20 and n_charged_in_evt<20"
114 charged_lists = [f
"{c}:final" for c
in [
"p+",
"e+",
"pi+",
"mu+",
"K+"]]
116 ma.fillParticleLists(
117 [(c,
" and ".join(charged_cuts))
for c
in charged_lists],
124 beamBackgroundMVAWeight=
"MC15ri",
125 fakePhotonMVAWeight=
"MC15ri",
132 " and ".join(photon_cuts),
138 vm.addAlias(
"n_gamma_in_evt",
"nParticlesInList(gamma:final)")
139 vm.addAlias(
"n_p_in_evt",
"nParticlesInList(p+:final)")
140 vm.addAlias(
"n_e_in_evt",
"nParticlesInList(e+:final)")
141 vm.addAlias(
"n_mu_in_evt",
"nParticlesInList(mu+:final)")
142 vm.addAlias(
"n_pi_in_evt",
"nParticlesInList(pi+:final)")
143 vm.addAlias(
"n_K_in_evt",
"nParticlesInList(K+:final)")
146 "formula(n_p_in_evt+n_e_in_evt+n_mu_in_evt+n_pi_in_evt+n_K_in_evt)",
149 ma.applyEventCuts(evt_cut, path=path)
151 particle_lists = charged_lists + [
"gamma:final"]
152 particle_types = [x.split(
":")[0]
for x
in particle_lists]
153 charged_types = [x.split(
":")[0]
for x
in charged_lists]
155 ma.combineAllParticles(
156 [f
"{part}:final" for part
in particle_types],
"Upsilon(4S):final", path=path
160 ma.fillParticleListFromMC(
"Upsilon(4S):MC",
"", path=path)
163 for i, particle_list
in enumerate(particle_lists):
165 ma.matchMCTruth(particle_list, path=path)
169 cfg_path=args.config,
170 param_file=args.weight,
171 sig_side_lcas=args.lcas,
172 sig_side_masses=args.masses,
173 payload_config_name=
"graFEIConfigFile_Upsreco_example",
174 payload_model_name=
"graFEIModelFile_Upsreco_example",
182 for part
in charged_types:
184 f
"B+:{part[:-1]} -> {part}:final",
185 "daughter(0, extraInfo(graFEI_sigSide)) == 1",
188 ma.copyLists(
"B+:Bsgn", [f
"B+:{part[:-1]}" for part
in charged_types], path=path)
191 for part
in particle_types:
195 cut=
"extraInfo(graFEI_sigSide) == 0",
199 ma.combineAllParticles([f
"{part}:Btag" for part
in particle_types],
"B+:Btag", path=path)
203 "Upsilon(4S):neutral -> B+:Bsgn B-:Btag",
"", path=path
206 "Upsilon(4S):charged -> B+:Bsgn B+:Btag",
"", allowChargeViolation=
True, path=path
210 "Upsilon(4S):graFEI",
212 "Upsilon(4S):neutral",
213 "Upsilon(4S):charged",
219 skimfilter = b2.register_module(
"SkimFilter")
220 skimfilter.param(
"particleLists", [
"Upsilon(4S):graFEI"])
221 empty_path = b2.create_path()
222 skimfilter.if_value(
"=0", empty_path, b2.AfterConditionPath.END)
223 path.add_module(skimfilter)
226 ma.matchMCTruth(
"B+:Bsgn", path=path)
227 ma.matchMCTruth(
"B-:Btag", path=path)
228 ma.matchMCTruth(
"Upsilon(4S):graFEI", path=path)
249 default_vars += momentum_vars
255 ]
if store_mc_truth
else []
259 "graFEI_probEdgeProd",
260 "graFEI_probEdgeMean",
261 "graFEI_probEdgeGeom",
265 "graFEI_nCharged_preFit",
266 "graFEI_nElectrons_preFit",
267 "graFEI_nMuons_preFit",
268 "graFEI_nPions_preFit",
269 "graFEI_nKaons_preFit",
270 "graFEI_nProtons_preFit",
271 "graFEI_nLeptons_preFit",
272 "graFEI_nPhotons_preFit",
273 "graFEI_nOthers_preFit",
274 "graFEI_nCharged_postFit",
275 "graFEI_nElectrons_postFit",
276 "graFEI_nMuons_postFit",
277 "graFEI_nPions_postFit",
278 "graFEI_nKaons_postFit",
279 "graFEI_nProtons_postFit",
280 "graFEI_nLeptons_postFit",
281 "graFEI_nPhotons_postFit",
282 "graFEI_nOthers_postFit",
283 "graFEI_nPredictedUnmatched",
284 "graFEI_nPredictedUnmatched_noPhotons",
288 "graFEI_truth_perfectLCA",
289 "graFEI_truth_perfectMasses",
290 "graFEI_truth_perfectEvent",
292 "graFEI_truth_nPhotons",
293 "graFEI_truth_nElectrons",
294 "graFEI_truth_nMuons",
295 "graFEI_truth_nPions",
296 "graFEI_truth_nKaons",
297 "graFEI_truth_nProtons",
298 "graFEI_truth_nOthers",
299 ]
if store_mc_truth
else []
301 default_vars += tm_vars
302 graFEI_vars += graFEI_tm_vars
304 ma.variablesToEventExtraInfo(
306 dict((f
"extraInfo({var})", var)
for var
in graFEI_vars),
311 for var
in default_vars:
312 vm.addAlias(f
"Bsgn_{var}", f
"daughter(0, {var})")
313 vm.addAlias(f
"Bsgn_d0_{var}", f
"daughter(0, daughter(0, {var}))")
314 vm.addAlias(f
"Btag_{var}", f
"daughter(1, {var})")
315 vm.addAlias(f
"Ups_{var}", var)
316 for var
in momentum_vars:
318 f
"Bsgn_d0_CMS_{var}", f
"useCMSFrame(daughter(0, daughter(0, {var})))"
320 vm.addAlias(f
"Btag_CMS_{var}", f
"useCMSFrame(daughter(1, {var}))")
321 for var
in graFEI_vars:
322 vm.addAlias(var, f
"eventExtraInfo({var})")
326 + [f
"Bsgn_{var}" for var
in tm_vars]
327 + [f
"Bsgn_d0_{var}" for var
in default_vars]
328 + [f
"Bsgn_d0_CMS_{var}" for var
in momentum_vars]
329 + [f
"Btag_{var}" for var
in default_vars]
330 + [f
"Btag_CMS_{var}" for var
in momentum_vars]
331 + [f
"Ups_{var}" for var
in default_vars]
334 ma.variablesToNtuple(
335 "Upsilon(4S):graFEI",
337 filename=
"graFEI_UpsReco_example.root",
def stdPhotons(listtype='loose', path=None, beamBackgroundMVAWeight="", fakePhotonMVAWeight="", biasCorrectionTable="")