Belle II Software  release-05-01-25
readB2L.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 #
5 # 2012/10/11 : param_cdcdigi, Threshold added
6 # 2013/11/05 : Updated for release-00-03-00
7 # 2014/02/12 : Updated for build-2014-01-19 //JB
8 # 2015/01/28 : Updated for build-2015-01-03 //JB
9 # 2015/02/02 : Added KKGen, Background, RootInput/RootOutput //JB
10 # 2015/05/18 : Fixed background file issue. //JB
11 # 2015/06/09 : Updated for release-00-05-00 //JB
12 # 2015/07/12 : Updated for 2D trgcdc update //JB
13 # 2016/04/08 : Added NeuroTrigger. Updated for head //JB
14 
15 from basf2 import *
16 import glob
17 
18 # ...suppress messages and warnings during processing...
19 set_log_level(LogLevel.ERROR)
20 # 0 means using different seed every time.
21 set_random_seed(1)
22 basf2datadir = os.path.join(os.environ.get('BELLE2_LOCAL_DIR', None), 'data')
23 
24 
25 
27 evtmetagen = register_module('EventInfoSetter')
28 evtmetainfo = register_module('Progress')
29 paramloader = register_module('Gearbox')
30 geobuilder = register_module('Geometry')
31 particlegun = register_module('ParticleGun')
32 evtgeninput = register_module('EvtGenInput')
33 kkgeninput = register_module('KKGenInput')
34 mcparticleprinter = register_module('PrintMCParticles')
35 g4sim = register_module('FullSim')
36 bkgmixer = register_module('BeamBkgMixer')
37 cdcdigitizer = register_module('CDCDigitizer')
38 cdctrg = register_module("TRGCDC")
39 rootOut = register_module('RootOutput')
40 rootIn = register_module('RootInput')
41 srootIn = register_module('SeqRootInput')
42 neuro = register_module('NeuroTrigger')
43 
44 
45 
47 
48 # ...Global settings...
49 # simulatedComponents = ['MagneticField', 'CDC'
50 # ,'PXD', 'SVD', 'BeamPipe'
51 # ]
52 # To speed things up but not precise.
53 simulatedComponents = ['MagneticFieldConstant4LimitedRCDC', 'CDC',
54  ]
55 
56 # ...EventInfoSetter...
57 # Set number of events and runs
58 evtmetagen.param({'evtNumList': [1000], 'runList': [1]})
59 
60 # ...Geometry...
61 # Set what dectectors to simulate.
62 geobuilder.param('components', simulatedComponents)
63 # Set verbose of geometry simulation
64 # geobuilder.log_level = LogLevel.INFO
65 
66 # ...ParticleGun...
67 particlegun.param('pdgCodes', [13, -13])
68 particlegun.param('nTracks', 5)
69 particlegun.param('momentumGeneration', 'inversePt')
70 # particlegun.param('momentumGeneration', 'uniformPt')
71 # particlegun.param('momentumGeneration', 'uniform')
72 particlegun.param('momentumParams', [0.2, 8.0])
73 # particlegun.param('momentumParams', [0.9, 0.9])
74 # particlegun.param('thetaGeneration', 'uniform')
75 # particlegun.param('thetaParams', [35, 127])
76 # particlegun.param('thetaParams', [90, 90])
77 particlegun.param('phiGeneration', 'uniform')
78 particlegun.param('phiParams', [0, 360])
79 # particlegun.param('vertexGeneration', 'fixed')
80 # particlegun.param('vertexGeneration', 'normal')
81 particlegun.param('vertexGeneration', 'uniform')
82 particlegun.param('xVertexParams', [0, 0])
83 particlegun.param('yVertexParams', [0, 0])
84 particlegun.param('zVertexParams', [-20.0, 20.0])
85 # particlegun.param('zVertexParams', [0, 0])
86 
87 # ...EvtGenInput...
88 # evtgeninput.param('userDECFile', 'USER.DEC')
89 
90 # ...KKGenInput...
91 # You need to copy mu.input.dat to the current directory, that is
92 # found in "data/generators/kkmc".
93 kkdir = os.path.join(os.environ.get('BELLE2_LOCAL_DIR', None), 'generators')
94 kkgeninput.param('tauinputFile', kkdir + 'kkmc/data/mu.input.dat')
95 kkgeninput.param('KKdefaultFile', kkdir + 'kkmc/data/KK2f_defaults.dat')
96 kkgeninput.param('taudecaytableFile', '')
97 
98 # ...PrintMCParticles...
99 mcparticleprinter.param('maxLevel', -1)
100 
101 # ...FullSim...
102 # Turn off physics processes
103 # "physics.mac" is located at "trg/examples/".
104 # g4sim.param('UICommandsAtIdle',['/control/execute physics.mac'])
105 # or below line can be used when trgcdc.py is not in trg/examples directory //JB
106 # g4sim.param('UICommandsAtIdle', ['/control/execute ' +
107 # os.path.join(os.environ.get('BELLE2_LOCAL_DIR', None), "trg/cdc/examples/physics.mac")])
108 
109 # ...BeamBkgMixer...
110 # Mix background (From beamBkgMixer.py)
111 dir = '/sw/belle2/bkg/' # change the directory name if you don't run on KEKCC
112 # bkg_files = [
113 # dir + 'Coulomb_HER_100us.root',
114 # dir + 'Coulomb_LER_100us.root',
115 # dir + 'RBB_HER_100us.root',
116 # dir + 'RBB_LER_100us.root',
117 # dir + 'Touschek_HER_100us.root',
118 # dir + 'Touschek_LER_100us.root',
119 # ]
120 bkg_files = glob.glob(dir + '/*.root')
121 bkgScaleFactor = 1
122 bkgmixer.param('backgroundFiles', bkg_files)
123 bkgmixer.param('components', simulatedComponents)
124 bkgmixer.param('scaleFactors', [
125  ('Coulomb_LER', bkgScaleFactor),
126  ('Coulomb_HER', bkgScaleFactor),
127  ('RBB_LER', bkgScaleFactor),
128  ('RBB_HER', bkgScaleFactor),
129  ('Touschek_LER', bkgScaleFactor),
130  ('Touschek_HER', bkgScaleFactor)
131 ])
132 
133 # ...CDCDigitizer...
134 # set digitizer to no smearing
135 # param_cdcdigi = {'Fraction': 1,
136 # 'Resolution1': 0.,
137 # 'Resolution2': 0.,
138 # 'Threshold': -10.0}
139 # cdcdigitizer.param(param_cdcdigi)
140 # cdcdigitizer.param('AddInWirePropagationDelay', True)
141 # cdcdigitizer.param('AddTimeOfFlight', True)
142 # cdcdigitizer.param('UseSimpleDigitization', True)
143 
144 # ...CDC Trigger...
145 # ---General settings---
146 cdctrg.param('ConfigFile', os.path.join(basf2datadir, "trg/cdc/TRGCDCConfig_0_20101111.dat"))
147 # cdctrg.param('DebugLevel', 1)
148 cdctrg.param('CurlBackStop', 1)
149 cdctrg.param('SimulationMode', 1) # 1:fast, 2:firm, 3:fast and firm
150 cdctrg.param('FastSimulationMode', 0)
151 # cdctrg.param('SimulationMode',0x11)
152 # cdctrg.param('TRGCDCRootFile',1)
153 # cdctrg.param('RootTRGCDCFile', 'TRGCDC.root')
154 # ---TSF settings---
155 # TSLUT (latest version @ 2014.07)
156 cdctrg.param('InnerTSLUTFile', os.path.join(basf2datadir, "trg/cdc/innerLUT_v3.0.coe"))
157 cdctrg.param('OuterTSLUTFile', os.path.join(basf2datadir, "trg/cdc/outerLUT_v3.0.coe"))
158 # 0: Logic TSF, 1: (Default) LUT TSF
159 # cdctrg.param('TSFLogicLUT', 0)
160 # cdctrg.param('TSFRootFile',1)
161 # ---2D finder settings---
162 cdctrg.param('HoughFinderMappingFileMinus', os.path.join(basf2datadir, "trg/cdc/HoughMappingMinus20160223.dat"))
163 cdctrg.param('HoughFinderMappingFilePlus', os.path.join(basf2datadir, "trg/cdc/HoughMappingPlus20160223.dat"))
164 # cdctrg.param('2DFinderPerfect', 1)
165 # cdctrg.param('HoughFinderPeakMin',4)
166 # cdctrg.param('HoughFinderDoit', 2)
167 # ---3D finder settings---
168 # cdctrg.param('Hough3DRootFile',1)
169 # 0: perfect finder, 1: Hough3DFinder, 2: (Default) GeoFinder, 3: VHDL GeoFinder
170 # cdctrg.param('Finder3DMode',2)
171 # ---3D fitter settings---
172 # cdctrg.param('Fitter3DRootFile',1)
173 # cdctrg.param('RootFitter3DFile', 'Fitter3D.root')
174 # cdctrg.param('Fitter3DsMcLR', 0)
175 # cdctrg.param('Fitter3Ds2DFit', 1)
176 # cdctrg.param('Fitter3Ds2DFitDrift', 0)
177 # cdctrg.param('Fitter3DsXtSimple', 0)
178 # cdctrg.param('Fitter3DsLRLUT', 0)
179 cdctrg.param('TRGCDCDataInputMode', 2)
180 
181 # ...NeuroTrigger...
182 # define parameters
183 neuro.param('filename', os.path.join(basf2datadir, "trg/cdc/Neuro20160309Nonlin.root"))
184 # output warnings, info and some debug output for neurotrigger module
185 # neuro.logging.log_level = basf2.LogLevel.DEBUG
186 # neuro.logging.debug_level = 80
187 # basf2.logging.set_info(basf2.LogLevel.DEBUG, basf2.LogInfo.LEVEL | basf2.LogInfo.MESSAGE)
188 
189 # ...RootOutput...
190 rootOut.param('outputFileName', 'basf2.root')
191 
192 # ...RootInput...
193 rootIn.param('inputFileName', 'basf2.root')
194 # rootIn.param('skipNEvents', 0);
195 
196 
197 
199 
200 # For full simulation.
201 fullMain = create_path()
202 # Add modules to paths
203 fullMain.add_module(evtmetagen)
204 fullMain.add_module(evtmetainfo)
205 fullMain.add_module(paramloader)
206 fullMain.add_module(geobuilder)
207 fullMain.add_module(particlegun)
208 # fullMain.add_module(evtgeninput)
209 # fullMain.add_module(kkgeninput)
210 fullMain.add_module(mcparticleprinter)
211 fullMain.add_module(g4sim)
212 fullMain.add_module(bkgmixer)
213 fullMain.add_module(cdcdigitizer)
214 fullMain.add_module(cdctrg)
215 fullMain.add_module(neuro)
216 
217 # For only generator+G4Sim and save file. (To save time)
218 g4SimMain = create_path()
219 # Add modules to paths
220 g4SimMain.add_module(evtmetagen)
221 g4SimMain.add_module(evtmetainfo)
222 g4SimMain.add_module(paramloader)
223 g4SimMain.add_module(geobuilder)
224 g4SimMain.add_module(particlegun)
225 # g4SimMain.add_module(evtgeninput)
226 # g4SimMain.add_module(kkgeninput)
227 g4SimMain.add_module(mcparticleprinter)
228 g4SimMain.add_module(g4sim)
229 g4SimMain.add_module(bkgmixer)
230 g4SimMain.add_module(cdcdigitizer)
231 g4SimMain.add_module(rootOut)
232 
233 # For TSIM with generator+G4Sim saved file. (To save time)
234 savedG4SimMain = create_path()
235 # Add modules to paths
236 savedG4SimMain.add_module(rootIn)
237 savedG4SimMain.add_module(evtmetainfo)
238 savedG4SimMain.add_module(paramloader)
239 savedG4SimMain.add_module(geobuilder)
240 savedG4SimMain.add_module(cdctrg)
241 
242 # For only generator and save file.
243 generatorMain = create_path()
244 # Add modules to paths
245 generatorMain.add_module(evtmetagen)
246 generatorMain.add_module(evtmetainfo)
247 generatorMain.add_module(paramloader)
248 generatorMain.add_module(geobuilder)
249 generatorMain.add_module(particlegun)
250 # generatorMain.add_module(evtgeninput)
251 # generatorMain.add_module(kkgeninput)
252 generatorMain.add_module(mcparticleprinter)
253 generatorMain.add_module(g4sim)
254 generatorMain.add_module(rootOut)
255 
256 # For TSIM with generator saved file.
257 savedGeneratorMain = create_path()
258 # Add modules to paths
259 savedGeneratorMain.add_module(rootIn)
260 savedGeneratorMain.add_module(evtmetainfo)
261 savedGeneratorMain.add_module(paramloader)
262 savedGeneratorMain.add_module(geobuilder)
263 savedGeneratorMain.add_module(bkgmixer)
264 savedGeneratorMain.add_module(cdcdigitizer)
265 savedGeneratorMain.add_module(cdctrg)
266 
267 # For reading B2L
268 readB2LMain = create_path()
269 # Add modules to paths
270 readB2LMain.add_module(srootIn)
271 readB2LMain.add_module(paramloader)
272 readB2LMain.add_module(geobuilder)
273 readB2LMain.add_module(cdcdigitizer)
274 readB2LMain.add_module(evtmetainfo)
275 readB2LMain.add_module(cdctrg)
276 
277 
289 
290 # read B2L data
291 process(readB2LMain)
292 
293 # Print call statistics
294 print(statistics)