Belle II Software  release-05-01-25
particleGun.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from optparse import OptionParser
6 from tracking import add_tracking_reconstruction
7 from reconstruction import add_reconstruction
8 from svd import add_svd_reconstruction
9 from svd import add_svd_reconstruction_CoG
10 from pxd import add_pxd_reconstruction
11 from simulation import add_simulation
12 import os
13 # --------------------------------------------------------------------
14 # Example of using ARICH reconstruction
15 # needs reconstructed tracks (Tracks), extrapolated to ARICH (ExtHits)
16 # --------------------------------------------------------------------
17 
18 parser = OptionParser()
19 parser.add_option('-n', '--nevents', dest='nevents', default=1000,
20  help='Number of events to process')
21 parser.add_option('-f', '--file', dest='filename',
22  default='ARICHEvents.root')
23 (options, args) = parser.parse_args()
24 
25 home = os.environ['BELLE2_LOCAL_DIR']
26 
27 # use_local_database("local_db/database.txt","localdb")
28 
29 # Suppress messages and warnings during processing:
30 set_log_level(LogLevel.ERROR)
31 
32 # Create path
33 main = create_path()
34 
35 # Set number of events to generate
36 eventinfosetter = register_module('EventInfoSetter')
37 eventinfosetter.param({'evtNumList': [int(options.nevents)], 'runList': [1]})
38 main.add_module(eventinfosetter)
39 
40 # Histogram manager immediately after master module
41 histo = register_module('HistoManager')
42 histo.param('histoFileName', 'DQMhistograms.root') # File to save histograms
43 main.add_module(histo)
44 
45 # Gearbox: access to database (xml files)
46 gearbox = register_module('Gearbox')
47 main.add_module(gearbox)
48 
49 # Particle gun: generate multiple tracks
50 particlegun = register_module('ParticleGun')
51 particlegun.param('pdgCodes', [211, -211, 321, -321])
52 particlegun.param('nTracks', 1)
53 # particlegun.param('varyNTracks', True)
54 particlegun.param('momentumGeneration', 'uniform')
55 particlegun.param('momentumParams', [0.5, 4])
56 particlegun.param('thetaGeneration', 'uniformCos')
57 particlegun.param('thetaParams', [17, 35])
58 particlegun.param('phiGeneration', 'uniform')
59 particlegun.param('phiParams', [0, 360])
60 particlegun.param('vertexGeneration', 'fixed')
61 particlegun.param('xVertexParams', [0])
62 particlegun.param('yVertexParams', [0])
63 particlegun.param('zVertexParams', [0])
64 particlegun.param('independentVertices', False)
65 main.add_module(particlegun)
66 
67 # Simulation & Digitizer of inner detectors
68 add_simulation(main, usePXDDataReduction=False)
69 # tracking
70 add_tracking_reconstruction(main)
71 
72 # Track extrapolation
73 ext = register_module('Ext')
74 main.add_module(ext)
75 
76 # convert ARICHDigits to ARICHHits
77 arichHits = register_module('ARICHFillHits')
78 main.add_module(arichHits)
79 
80 # ARICH reconstruction
81 # calculate PID likelihoods for all tracks
82 arichreco = register_module('ARICHReconstructor')
83 # store cherenkov angle information
84 arichreco.param('storePhotons', 1)
85 main.add_module(arichreco)
86 
87 # ARICH Ntuple
88 # create flat ntuple for performance analysis
89 arichNtuple = register_module('ARICHNtuple')
90 arichNtuple.param('outputFile', options.filename)
91 main.add_module(arichNtuple)
92 
93 # ARICH DQM
94 # create DQM occupancy plots
95 arichdqm = register_module('ARICHDQM')
96 main.add_module(arichdqm)
97 
98 # Uncomment to store DataStore content to root file
99 # output = register_module('RootOutput')
100 # output.param('outputFileName', 'DataStore.root')
101 # main.add_module(output)
102 
103 # Uncomment to show event display
104 # display = register_module('Display')
105 # display.param('showARICHHits', True)
106 # display.param('fullGeometry', True)
107 # main.add_module(display)
108 
109 # Show progress of processing
110 progress = register_module('Progress')
111 main.add_module(progress)
112 
113 # Process events
114 process(main)
115 
116 # Print call statistics
117 print(statistics)
118 
119 # Make basic performance plots
120 com = 'root -l ' + options.filename + ' ' + home + '/arich/utility/scripts/plotEfficiency.C'
121 os.system(com)