5 from ROOT
import Belle2
7 logging.log_level = LogLevel.WARNING
13 Lists signs of MCParticle relation weights for VXD Clusters based on
14 MCParticle and TrueHit information.
16 MCParticle primary/secondary/remapped/none (no relation to MCParticle)
17 Relation sign positive/negative
21 """Initialize the module"""
23 super(CheckNegativeWeights, self).
__init__()
26 'primary': {
'positive': 0,
'negative': 0},
27 'secondary': {
'positive': 0,
'negative': 0},
28 'remapped': {
'positive': 0,
'negative': 0},
29 'none': {
'positive': 0,
'negative': 0}
33 'primary': {
'positive': 0,
'negative': 0},
34 'secondary': {
'positive': 0,
'negative': 0},
35 'remapped': {
'positive': 0,
'negative': 0},
36 'none': {
'positive': 0,
'negative': 0}
47 Goes through event's PXD and SVD clusters and looks at MCParticles
48 and TrueHits relations for the sign of relations.
53 for cluster
in pxd_clusters:
55 mcparticle_tag =
'none'
61 mcparticle_relations = cluster.getRelationsTo(
'MCParticles')
62 n_mcparticle_relations = mcparticle_relations.size()
63 for mcparticle_index
in range(n_mcparticle_relations):
64 mcparticle = mcparticle_relations[mcparticle_index]
66 mcparticle_relations.weight(mcparticle_index)
67 if mcparticle_weight < 0:
69 if mcparticle.hasStatus(Belle2.MCParticle.c_PrimaryParticle):
70 mcparticle_tag =
'primary'
72 cluster_truehits = cluster.getRelationsTo(
'PXDTrueHits')
74 mcparticle_array_index = mcparticle.getArrayIndex()
75 for hit
in cluster_truehits:
76 hit_particle_relations = \
77 hit.getRelationsFrom(
'MCParticles')
78 n_relations = hit_particle_relations.size()
79 for particle_index
in range(n_relations):
81 hit_particle_relations[particle_index]
82 if hit_particle.getArrayIndex() == \
83 mcparticle_array_index:
85 weight = hit_particle_relations.weight(
88 mcparticle_tag =
'remapped'
91 mcparticle_tag =
'secondary'
95 self.sign_stats_pxd[mcparticle_tag][sign_tag] += 1
100 for cluster
in svd_clusters:
102 mcparticle_tag =
'none'
103 sign_tag =
'positive'
108 mcparticle_relations = cluster.getRelationsTo(
'MCParticles')
109 n_mcparticle_relations = mcparticle_relations.size()
110 for mcparticle_index
in range(n_mcparticle_relations):
111 mcparticle = mcparticle_relations[mcparticle_index]
112 mcparticle_weight = \
113 mcparticle_relations.weight(mcparticle_index)
114 if mcparticle_weight < 0:
115 sign_tag =
'negative'
116 if mcparticle.hasStatus(Belle2.MCParticle.c_PrimaryParticle):
117 mcparticle_tag =
'primary'
119 cluster_truehits = cluster.getRelationsTo(
'SVDTrueHits')
121 mcparticle_array_index = mcparticle.getArrayIndex()
122 for hit
in cluster_truehits:
123 hit_particle_relations = \
124 hit.getRelationsFrom(
'MCParticles')
125 n_relations = hit_particle_relations.size()
126 for particle_index
in range(n_relations):
128 hit_particle_relations[particle_index]
129 if hit_particle.getArrayIndex() == \
130 mcparticle_array_index:
132 weight = hit_particle_relations.weight(
135 mcparticle_tag =
'remapped'
138 mcparticle_tag =
'secondary'
140 self.sign_stats_svd[mcparticle_tag][sign_tag] += 1
143 """ Write results """
145 '\nResults for PXD: \n{pxd}\nResults for SVD: \n{svd}\n'.format(
152 particlegun = register_module(
'ParticleGun')
154 eventinfosetter = register_module(
'EventInfoSetter')
156 progress = register_module(
'Progress')
158 gearbox = register_module(
'Gearbox')
160 geometry = register_module(
'Geometry')
162 simulation = register_module(
'FullSim')
165 printWeights.set_log_level(LogLevel.INFO)
168 eventinfosetter.param({
'evtNumList': [1000],
'runList': [1]})
174 'pdgCodes': [211, -211, 11, -11],
175 'momentumGeneration':
'normalPt',
176 'momentumParams': [2, 1],
177 'phiGeneration':
'normal',
178 'phiParams': [0, 360],
179 'thetaGeneration':
'uniformCos',
180 'thetaParams': [17, 150],
181 'vertexGeneration':
'normal',
182 'xVertexParams': [0, 1],
183 'yVertexParams': [0, 1],
184 'zVertexParams': [0, 1],
185 'independentVertices':
False,
188 pxd_digitizer = register_module(
'PXDDigitizer')
189 pxd_digitizer.param(
'PoissonSmearing',
True)
190 pxd_digitizer.param(
'ElectronicEffects',
True)
192 pxd_clusterizer = register_module(
'PXDClusterizer')
194 svd_digitizer = register_module(
'SVDDigitizer')
195 svd_digitizer.param(
'PoissonSmearing',
True)
196 svd_digitizer.param(
'ElectronicEffects',
True)
198 svd_clusterizer = register_module(
'SVDClusterizer')
201 geometry.param(
'components', [
'MagneticField',
'PXD',
'SVD'])
205 main.add_module(eventinfosetter)
206 main.add_module(progress)
207 main.add_module(particlegun)
208 main.add_module(gearbox)
209 main.add_module(geometry)
210 main.add_module(simulation)
211 main.add_module(pxd_digitizer)
212 main.add_module(svd_digitizer)
213 main.add_module(pxd_clusterizer)
214 main.add_module(svd_clusterizer)
215 main.add_module(printWeights)