Belle II Software development
ntupleUpsilon4SGenInfo.py
1#!/usr/bin/env python
2
3
10
11"""
12make Upsilon(4S) ntuple for checks and studies of the generator file:
13particles: Upsilon(4S), two daughters (i.e. BBbar) and four granddaughters (e.g. B0->Jpsi+K0S)
14variables: mcPDG,M,nDaughters,mcDecayTime,mcLifeTime,mcX,mcY,mcZ,mcE,mcPX,mcPY,mcPZ;
15"""
16
17import basf2 as b2
18import modularAnalysis as ma
19from variables import variables
20import sys
21
22variables.addAlias('B00_mcPDG', 'daughter(0, mcPDG)')
23variables.addAlias('B00_M', 'daughter(0, M)')
24variables.addAlias('B00_nDaughters', 'daughter(0, nDaughters)')
25variables.addAlias('B00_mcDecayTime', 'daughter(0, mcDecayTime)')
26variables.addAlias('B00_mcLifeTime', 'daughter(0, mcLifeTime)')
27variables.addAlias('B00_mcX', 'daughter(0, mcDecayVertexX)')
28variables.addAlias('B00_mcY', 'daughter(0, mcDecayVertexY)')
29variables.addAlias('B00_mcZ', 'daughter(0, mcDecayVertexZ)')
30variables.addAlias('B00_mcE', 'daughter(0, mcE)')
31variables.addAlias('B00_mcPX', 'daughter(0, mcPX)')
32variables.addAlias('B00_mcPY', 'daughter(0, mcPY)')
33variables.addAlias('B00_mcPZ', 'daughter(0, mcPZ)')
34
35variables.addAlias('B00_daughter0_mcPDG', 'daughter(0, daughter(0, mcPDG))')
36variables.addAlias('B00_daughter0_M', 'daughter(0, daughter(0, M))')
37variables.addAlias('B00_daughter0_nDaughters', 'daughter(0, daughter(0, nDaughters))')
38variables.addAlias('B00_daughter0_mcDecayTime', 'daughter(0, daughter(0, mcDecayTime))')
39variables.addAlias('B00_daughter0_mcLifeTime', 'daughter(0, daughter(0, mcLifeTime))')
40variables.addAlias('B00_daughter0_mcX', 'daughter(0, daughter(0, mcDecayVertexX))')
41variables.addAlias('B00_daughter0_mcY', 'daughter(0, daughter(0, mcDecayVertexY))')
42variables.addAlias('B00_daughter0_mcZ', 'daughter(0, daughter(0, mcDecayVertexZ))')
43variables.addAlias('B00_daughter0_mcE', 'daughter(0, daughter(0, mcE))')
44variables.addAlias('B00_daughter0_mcPX', 'daughter(0, daughter(0, mcPX))')
45variables.addAlias('B00_daughter0_mcPY', 'daughter(0, daughter(0, mcPY))')
46variables.addAlias('B00_daughter0_mcPZ', 'daughter(0, daughter(0, mcPZ))')
47
48variables.addAlias('B00_daughter1_mcPDG', 'daughter(0, daughter(1, mcPDG))')
49variables.addAlias('B00_daughter1_M', 'daughter(0, daughter(1, M))')
50variables.addAlias('B00_daughter1_nDaughters', 'daughter(0, daughter(1, nDaughters))')
51variables.addAlias('B00_daughter1_mcDecayTime', 'daughter(0, daughter(1, mcDecayTime))')
52variables.addAlias('B00_daughter1_mcLifeTime', 'daughter(0, daughter(1, mcLifeTime))')
53variables.addAlias('B00_daughter1_mcX', 'daughter(0, daughter(1, mcDecayVertexX))')
54variables.addAlias('B00_daughter1_mcY', 'daughter(0, daughter(1, mcDecayVertexY))')
55variables.addAlias('B00_daughter1_mcZ', 'daughter(0, daughter(1, mcDecayVertexZ))')
56variables.addAlias('B00_daughter1_mcE', 'daughter(0, daughter(1, mcE))')
57variables.addAlias('B00_daughter1_mcPX', 'daughter(0, daughter(1, mcPX))')
58variables.addAlias('B00_daughter1_mcPY', 'daughter(0, daughter(1, mcPY))')
59variables.addAlias('B00_daughter1_mcPZ', 'daughter(0, daughter(1, mcPZ))')
60
61variables.addAlias('B01_mcPDG', 'daughter(1, mcPDG)')
62variables.addAlias('B01_M', 'daughter(1, M)')
63variables.addAlias('B01_nDaughters', 'daughter(1, nDaughters)')
64variables.addAlias('B01_mcDecayTime', 'daughter(1, mcDecayTime)')
65variables.addAlias('B01_mcLifeTime', 'daughter(1, mcLifeTime)')
66variables.addAlias('B01_mcX', 'daughter(1, mcDecayVertexX)')
67variables.addAlias('B01_mcY', 'daughter(1, mcDecayVertexY)')
68variables.addAlias('B01_mcZ', 'daughter(1, mcDecayVertexZ)')
69variables.addAlias('B01_mcE', 'daughter(1, mcE)')
70variables.addAlias('B01_mcPX', 'daughter(1, mcPX)')
71variables.addAlias('B01_mcPY', 'daughter(1, mcPY)')
72variables.addAlias('B01_mcPZ', 'daughter(1, mcPZ)')
73
74variables.addAlias('B01_daughter0_mcPDG', 'daughter(1, daughter(0, mcPDG))')
75variables.addAlias('B01_daughter0_M', 'daughter(1, daughter(0, M))')
76variables.addAlias('B01_daughter0_nDaughters', 'daughter(1, daughter(0, nDaughters))')
77variables.addAlias('B01_daughter0_mcDecayTime', 'daughter(1, daughter(0, mcDecayTime))')
78variables.addAlias('B01_daughter0_mcLifeTime', 'daughter(1, daughter(0, mcLifeTime))')
79variables.addAlias('B01_daughter0_mcX', 'daughter(1, daughter(0, mcDecayVertexX))')
80variables.addAlias('B01_daughter0_mcY', 'daughter(1, daughter(0, mcDecayVertexY))')
81variables.addAlias('B01_daughter0_mcZ', 'daughter(1, daughter(0, mcDecayVertexZ))')
82variables.addAlias('B01_daughter0_mcE', 'daughter(1, daughter(0, mcE))')
83variables.addAlias('B01_daughter0_mcPX', 'daughter(1, daughter(0, mcPX))')
84variables.addAlias('B01_daughter0_mcPY', 'daughter(1, daughter(0, mcPY))')
85variables.addAlias('B01_daughter0_mcPZ', 'daughter(1, daughter(0, mcPZ))')
86
87variables.addAlias('B01_daughter1_mcPDG', 'daughter(1, daughter(1, mcPDG))')
88variables.addAlias('B01_daughter1_M', 'daughter(1, daughter(1, M))')
89variables.addAlias('B01_daughter1_nDaughters', 'daughter(1, daughter(1, nDaughters))')
90variables.addAlias('B01_daughter1_mcDecayTime', 'daughter(1, daughter(1, mcDecayTime))')
91variables.addAlias('B01_daughter1_mcLifeTime', 'daughter(1, daughter(1, mcLifeTime))')
92variables.addAlias('B01_daughter1_mcX', 'daughter(1, daughter(1, mcDecayVertexX))')
93variables.addAlias('B01_daughter1_mcY', 'daughter(1, daughter(1, mcDecayVertexY))')
94variables.addAlias('B01_daughter1_mcZ', 'daughter(1, daughter(1, mcDecayVertexZ))')
95variables.addAlias('B01_daughter1_mcE', 'daughter(1, daughter(1, mcE))')
96variables.addAlias('B01_daughter1_mcPX', 'daughter(1, daughter(1, mcPX))')
97variables.addAlias('B01_daughter1_mcPY', 'daughter(1, daughter(1, mcPY))')
98variables.addAlias('B01_daughter1_mcPZ', 'daughter(1, daughter(1, mcPZ))')
99
100if len(sys.argv) != 2:
101 sys.exit('Must provide one input parameter: [output_root_file_name]'
102 )
103
104outRootFileName = sys.argv[1]
105
106# create path
107cp_val_path = b2.create_path()
108
109ma.inputMdstList(filelist=[], path=cp_val_path)
110
111Upsilon4S = ('Upsilon(4S):all', '')
112ma.fillParticleListsFromMC([Upsilon4S], True, path=cp_val_path)
113ma.matchMCTruth('Upsilon(4S):all', path=cp_val_path)
114
115ma.variablesToNtuple(decayString='Upsilon(4S):all',
116 variables=["generatorEventWeight",
117 # Upsilon(4S)
118 "mcPDG", "M", "nDaughters", "mcDecayTime", "mcLifeTime",
119 "mcX", "mcY", "mcZ", "mcE", "mcPX", "mcPY", "mcPZ",
120 # first daughter (e.g. 1st B0) and two granddaughters
121 'B00_mcPDG', 'B00_M', 'B00_nDaughters',
122 'B00_mcDecayTime', 'B00_mcLifeTime',
123 'B00_mcX', 'B00_mcY', 'B00_mcZ',
124 'B00_mcE', 'B00_mcPX', 'B00_mcPY', 'B00_mcPZ',
125 'B00_daughter0_mcPDG', 'B00_daughter1_mcPDG',
126 'B00_daughter0_M', 'B00_daughter1_M',
127 'B00_daughter0_mcDecayTime', 'B00_daughter1_mcDecayTime',
128 'B00_daughter0_mcLifeTime', 'B00_daughter1_mcLifeTime',
129 'B00_daughter0_mcX', 'B00_daughter1_mcX',
130 'B00_daughter0_mcY', 'B00_daughter1_mcY',
131 'B00_daughter0_mcZ', 'B00_daughter1_mcZ',
132 'B00_daughter0_mcE', 'B00_daughter1_mcE',
133 'B00_daughter0_mcPX', 'B00_daughter1_mcPX',
134 'B00_daughter0_mcPY', 'B00_daughter1_mcPY',
135 'B00_daughter0_mcPZ', 'B00_daughter1_mcPZ',
136 # second daughter (e.g. 2nd B0) and two granddaughters
137 'B01_mcPDG', 'B01_M', 'B01_nDaughters',
138 'B01_mcDecayTime', 'B01_mcLifeTime',
139 'B01_mcX', 'B01_mcY', 'B01_mcZ',
140 'B01_mcE', 'B01_mcPX', 'B01_mcPY', 'B01_mcPZ',
141 'B01_daughter0_mcPDG', 'B01_daughter1_mcPDG',
142 'B01_daughter0_M', 'B01_daughter1_M',
143 'B01_daughter0_mcDecayTime', 'B01_daughter1_mcDecayTime',
144 'B01_daughter0_mcLifeTime', 'B01_daughter1_mcLifeTime',
145 'B01_daughter0_mcX', 'B01_daughter1_mcX',
146 'B01_daughter0_mcY', 'B01_daughter1_mcY',
147 'B01_daughter0_mcZ', 'B01_daughter1_mcZ',
148 'B01_daughter0_mcE', 'B01_daughter1_mcE',
149 'B01_daughter0_mcPX', 'B01_daughter1_mcPX',
150 'B01_daughter0_mcPY', 'B01_daughter1_mcPY',
151 'B01_daughter0_mcPZ', 'B01_daughter1_mcPZ'],
152 filename=outRootFileName,
153 treename='UpsilonTree',
154 path=cp_val_path)
155
156ma.summaryOfLists(particleLists=['Upsilon(4S):all'], path=cp_val_path)
157
158# Process the events
159ma.process(cp_val_path)
160
161# print out the summary
162print(b2.statistics)