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