Belle II Software  release-05-01-25
VertexGunFull.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
17 
18 from basf2 import set_log_level, LogLevel, register_module, create_path, process, statistics, set_random_seed, print_params
19 
20 # suppress messages and warnings during processing:
21 set_log_level(LogLevel.ERROR)
22 set_random_seed(1028307)
23 
24 # first vertex
25 vertex1 = register_module('ParticleGun')
26 
27 # setting the number of tracks and pdg codes for the first vertex
28 vertex1.param('nTracks', -1) # a negative track number means one track for every PDG code
29 vertex1.param('pdgCodes', [-11, 11, -13, 13])
30 
31 # set the starting parameters of the particle originating from the first vertex
32 vertex1.param('momentumGeneration', 'normal')
33 vertex1.param('momentumParams', [1, 0.05])
34 
35 vertex1.param('thetaGeneration', 'uniform')
36 vertex1.param('thetaParams', [17, 150])
37 
38 vertex1.param('phiGeneration', 'uniform')
39 vertex1.param('phiParams', [0, 360])
40 
41 # make sure all particles of vertex1 in one event start at the same postion
42 vertex1.param('independentVertices', False)
43 
44 vertex1.param('vertexGeneration', 'fixed')
45 vertex1.param('xVertexParams', [0.0, 0.0])
46 vertex1.param('yVertexParams', [0.0, 0.0])
47 vertex1.param('zVertexParams', [0.0, 0.0])
48 
49 # second vertex
50 vertex2 = register_module('ParticleGun')
51 
52 # setting the number of tracks and pdg codes for the first vertex
53 vertex2.param('nTracks', -1) # a negative track number means one track for every PDG code
54 vertex2.param('pdgCodes', [-211, 211, -211])
55 
56 # set the starting parameters of the particle originating from the first vertex
57 vertex2.param('momentumGeneration', 'normal')
58 vertex2.param('momentumParams', [1, 0.05])
59 
60 vertex2.param('thetaGeneration', 'uniform')
61 vertex2.param('thetaParams', [17, 150])
62 
63 vertex2.param('phiGeneration', 'uniform')
64 vertex2.param('phiParams', [0, 360])
65 
66 # make sure all particles of vertex2 in one event start at the same postion
67 vertex2.param('independentVertices', False)
68 
69 vertex2.param('vertexGeneration', 'fixed')
70 vertex2.param('xVertexParams', [1, 1])
71 vertex2.param('yVertexParams', [1, 1])
72 vertex2.param('zVertexParams', [1, 1])
73 
74 # third vertex
75 vertex3 = register_module('ParticleGun')
76 
77 # setting the number of tracks and pdg codes for the first vertex
78 vertex3.param('nTracks', -1) # a negative track number means one track for every PDG code
79 vertex3.param('pdgCodes', [-11, 11])
80 
81 # set the starting parameters of the particle originating from the first vertex
82 vertex3.param('momentumGeneration', 'normal')
83 vertex3.param('momentumParams', [0.5, 0.01])
84 
85 vertex3.param('thetaGeneration', 'uniform')
86 vertex3.param('thetaParams', [60, 120])
87 
88 vertex3.param('phiGeneration', 'uniform')
89 vertex3.param('phiParams', [0, 360])
90 
91 # make sure all particles of vertex3 in one event start at the same postion
92 vertex3.param('independentVertices', False)
93 
94 vertex3.param('vertexGeneration', 'fixed')
95 vertex3.param('xVertexParams', [0, 0])
96 vertex3.param('yVertexParams', [0, 0])
97 vertex3.param('zVertexParams', [3, 3])
98 
99 # ============================================================================
100 # Print the parameters of the particle guns
101 print_params(vertex1)
102 print_params(vertex2)
103 print_params(vertex3)
104 
105 # ============================================================================
106 # Now lets create the necessary modules to perform a simulation
107 #
108 # Create Event information
109 eventinfosetter = register_module('EventInfoSetter')
110 # Show progress of processing
111 progress = register_module('Progress')
112 # Load parameters
113 gearbox = register_module('Gearbox')
114 # Create geometry
115 geometry = register_module('Geometry')
116 # Run simulation
117 simulation = register_module('FullSim')
118 # Save output of simulation
119 output = register_module('RootOutput')
120 
121 # Setting the option for all non particle gun modules: want to process 100 MC
122 # events
123 eventinfosetter.param({'evtNumList': [10], 'runList': [1]})
124 
125 # Set output filename
126 output.param('outputFileName', 'ParticleGunOutput.root')
127 
128 # ============================================================================
129 # Do the simulation
130 mcparticleprinter = register_module('PrintMCParticles')
131 mcparticleprinter.logging.log_level = LogLevel.INFO
132 main = create_path()
133 main.add_module(eventinfosetter)
134 main.add_module(progress)
135 main.add_module(gearbox)
136 main.add_module(geometry)
137 main.add_module(vertex1)
138 main.add_module(vertex2)
139 main.add_module(vertex3)
140 main.add_module(mcparticleprinter)
141 main.add_module(simulation)
142 main.add_module(output)
143 
144 # Process events
145 process(main)
146 
147 # Print call statistics
148 print(statistics)