Belle II Software  release-05-01-25
SavedMCParticles.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from ROOT import Belle2
6 
7 logging.log_level = LogLevel.WARNING
8 
9 
10 class CheckMCParticles(Module):
11 
12  """
13  Counts MCParticles that generate TrueHits.
14  """
15 
16  def __init__(self):
17  """Initialize the module"""
18 
19  super(CheckMCParticles, self).__init__()
20 
21  self.nSecondariesPXD = 0
22 
23  self.nSecondariesSVD = 0
24 
25  self.nMCParticles = 0
26 
27  self.nSecondaries = 0
28 
29  self.processesPXD = []
30 
31  self.processesSVD = []
32 
33  def initialize(self):
34  """ Does nothing """
35 
36  def beginRun(self):
37  """ Does nothing """
38 
39  def event(self):
40  """
41  Count the number of MCParticles related to a VXD TrueHit
42  """
43 
44  mc_particles = Belle2.PyStoreArray('MCParticles')
45  self.nMCParticles += mc_particles.getEntries()
46  for particle in mc_particles:
47  if not particle.hasStatus(Belle2.MCParticle.c_PrimaryParticle):
48  self.nSecondaries += 1
49  if (len(particle.getRelationsTo('PXDTrueHits')) > 0):
50  self.nSecondariesPXD += 1
51  self.processesPXD\
52  .append(particle.getSecondaryPhysicsProcess())
53  if (len(particle.getRelationsTo('SVDTrueHits')) > 0):
54  self.nSecondariesSVD += 1
55  self.processesSVD\
56  .append(particle.getSecondaryPhysicsProcess())
57 
58  def terminate(self):
59  """ Write results """
60  B2INFO('Found {nu} secondary MC Particles out of total {n}.'
61  .format(nu=self.nSecondaries, n=self.nMCParticles))
62  B2INFO('Of these, found {n1} secondaries in PXD and {n2} in SVD.'
63  .format(n1=self.nSecondariesPXD, n2=self.nSecondariesSVD))
64  B2INFO('Secondary processes for PXD: {list1}; for SVD: {list2}'
65  .format(list1=str(self.processesPXD),
66  list2=str(self.processesSVD)))
67 
68 
69 # Particle gun module
70 particlegun = register_module('ParticleGun')
71 # Create Event information
72 eventinfosetter = register_module('EventInfoSetter')
73 # Show progress of processing
74 progress = register_module('Progress')
75 # Load parameters
76 gearbox = register_module('Gearbox')
77 # Create geometry
78 geometry = register_module('Geometry')
79 # Run simulation
80 simulation = register_module('FullSim')
81 # simulation.param('StoreAllSecondaries', True)
82 # PXD digitization module
83 printParticles = CheckMCParticles()
84 printParticles.set_log_level(LogLevel.INFO)
85 
86 # Specify number of events to generate
87 eventinfosetter.param({'evtNumList': [100], 'runList': [1]})
88 
89 # Set parameters for particlegun
90 particlegun.param({
91  'nTracks': 1,
92  'varyNTracks': True,
93  'pdgCodes': [211, -211, 11, -11],
94  'momentumGeneration': 'normalPt',
95  'momentumParams': [2, 1],
96  'phiGeneration': 'normal',
97  'phiParams': [0, 360],
98  'thetaGeneration': 'uniformCos',
99  'thetaParams': [17, 150],
100  'vertexGeneration': 'normal',
101  'xVertexParams': [0, 1],
102  'yVertexParams': [0, 1],
103  'zVertexParams': [0, 1],
104  'independentVertices': False,
105 })
106 
107 # Select subdetectors to be built
108 geometry.param('components', ['MagneticField', 'PXD', 'SVD'])
109 
110 # create processing path
111 main = create_path()
112 main.add_module(eventinfosetter)
113 main.add_module(progress)
114 main.add_module(particlegun)
115 main.add_module(gearbox)
116 main.add_module(geometry)
117 main.add_module(simulation)
118 main.add_module(printParticles)
119 
120 # generate events
121 process(main)
122 
123 # show call statistics
124 print(statistics)
SavedMCParticles.CheckMCParticles.terminate
def terminate(self)
Definition: SavedMCParticles.py:58
SavedMCParticles.CheckMCParticles.event
def event(self)
Definition: SavedMCParticles.py:39
SavedMCParticles.CheckMCParticles.nSecondariesPXD
nSecondariesPXD
Number of secondaries that generated a PXDTrueHit.
Definition: SavedMCParticles.py:21
SavedMCParticles.CheckMCParticles.beginRun
def beginRun(self)
Definition: SavedMCParticles.py:36
SavedMCParticles.CheckMCParticles.nSecondariesSVD
nSecondariesSVD
Number of secondaries that generated an SVD TrueHit.
Definition: SavedMCParticles.py:23
SavedMCParticles.CheckMCParticles.processesSVD
processesSVD
List of processes that generated secondaries in SVD.
Definition: SavedMCParticles.py:31
SavedMCParticles.CheckMCParticles.__init__
def __init__(self)
Definition: SavedMCParticles.py:16
SavedMCParticles.CheckMCParticles.initialize
def initialize(self)
Definition: SavedMCParticles.py:33
SavedMCParticles.CheckMCParticles.processesPXD
processesPXD
List of processes that generated secondaries in PXD.
Definition: SavedMCParticles.py:29
SavedMCParticles.CheckMCParticles
Definition: SavedMCParticles.py:10
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
SavedMCParticles.CheckMCParticles.nMCParticles
nMCParticles
Total number of MCParticles.
Definition: SavedMCParticles.py:25
SavedMCParticles.CheckMCParticles.nSecondaries
nSecondaries
Total number of secondary MCParticles.
Definition: SavedMCParticles.py:27