Belle II Software  release-05-01-25
B2A424-OrcaKinFit_vertexfit_4Cfit.py
1 #!/usr/bin/env python3
2 
3 
20 
21 #
22 # Import and mdst loading
23 #
24 import basf2 as b2
25 from modularAnalysis import inputMdst
26 from modularAnalysis import fillParticleList
27 from modularAnalysis import reconstructDecay
28 from modularAnalysis import matchMCTruth
29 from vertex import raveFit
30 from kinfit import fitKinematic4C
31 from modularAnalysis import variablesToNtuple
32 import sys
33 import pdg
34 import variables.collections as vc
35 import variables.utils as vu
36 
37 # create path
38 my_path = b2.create_path()
39 
40 # load input ROOT file
41 inputMdst(environmentType='default',
42  filename=b2.find_file('darkphotonmumu_mdst.root', 'examples', False),
43  path=my_path)
44 
45 # Creates a list of good photon and muons
46 fillParticleList("gamma:sel", 'E > 0.1 and abs(formula(clusterTiming/clusterErrorTiming)) < 1.0', path=my_path)
47 fillParticleList("mu-:sel", 'electronID < 0.01 and chiProb > 0.001 and abs(dz) < 3 and dr < 0.1', path=my_path)
48 pdg.add_particle('A', 9000008, 999., 999., 0, 0) # name, PDG, mass, width, charge, spin
49 reconstructDecay("A:sel -> mu-:sel mu+:sel", "", path=my_path)
50 reconstructDecay("A:selvertex -> mu-:sel mu+:sel", "", path=my_path)
51 
52 # Perform four momentum constraint fit using Rave and update the Daughters
53 raveFit("A:selvertex", -1.0, constraint="iptube", daughtersUpdate=True, path=my_path)
54 
55 pdg.add_particle('beam', 9000009, 999., 999., 0, 0) # name, PDG, mass, width, charge, spin
56 reconstructDecay("beam:sel -> A:sel gamma:sel", "", path=my_path)
57 reconstructDecay("beam:selv -> A:selvertex gamma:sel", "", path=my_path)
58 reconstructDecay("beam:selv4c -> A:selvertex gamma:sel", "", path=my_path)
59 
60 # Associates the MC truth
61 matchMCTruth('beam:sel', path=my_path)
62 matchMCTruth('beam:selv', path=my_path)
63 matchMCTruth('beam:selv4c', path=my_path)
64 
65 # Perform four momentum constraint fit using OrcaKinFit and update the Daughters
66 fitKinematic4C("beam:selv4c", path=my_path)
67 
68 # Select variables that we want to store to ntuple
69 muvars = vc.kinematics + vc.mc_truth + vc.mc_kinematics + vc.pid + vc.momentum_uncertainty
70 gammavars = vc.inv_mass + vc.kinematics + vc.mc_kinematics + vc.mc_truth + vc.momentum_uncertainty
71 avars = vc.inv_mass + vc.kinematics + vc.mc_kinematics + vc.mc_truth + vc.momentum_uncertainty
72 uvars = vc.inv_mass + vc.kinematics + vc.mc_kinematics + vc.mc_truth + \
73  vu.create_aliases_for_selected(muvars, 'beam -> [A -> ^mu+ ^mu-] gamma') + \
74  vu.create_aliases_for_selected(gammavars, 'beam -> A ^gamma') + \
75  vu.create_aliases_for_selected(avars, 'beam -> ^A gamma')
76 
77 uvarsv = uvars + ['chiProb']
78 
79 uvars4c = uvars + vu.create_aliases(['OrcaKinFitProb',
80  'OrcaKinFitProb',
81  'OrcaKinFitChi2',
82  'OrcaKinFitErrorCode'], 'extraInfo(variable)', "") + \
83  vu.create_aliases(['VertexFitChi2',
84  'VertexFitProb'], 'daughter(1,extraInfo(variable))', "A")
85 
86 # Saving variables to ntuple
87 output_file = 'B2A424-OrcaKinFit_vertexfit_4Cfit.root'
88 variablesToNtuple('beam:selv4c', uvars4c,
89  filename=output_file, treename='beamselv4c', path=my_path)
90 variablesToNtuple('beam:selv', uvarsv,
91  filename=output_file, treename='beamselv', path=my_path)
92 variablesToNtuple('beam:sel', uvarsv,
93  filename=output_file, treename='beamsel', path=my_path)
94 
95 #
96 # Process and print statistics
97 #
98 
99 # Process the events
100 b2.process(my_path)
101 # print out the summary
102 print(b2.statistics)
variablesToNtuple
Definition: variablesToNtuple.py:1
pdg.add_particle
def add_particle(name, pdgCode, mass, width, charge, spin, max_width=None, lifetime=0, pythiaID=0)
Definition: pdg.py:121
variables.utils
Definition: utils.py:1
variables.collections
Definition: collections.py:1