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