54 def event(self):
55 """
56 Goes through event's PXD and SVD clusters and looks at MCParticles
57 and TrueHits relations for the sign of relations.
58 """
59
61
62 for cluster in pxd_clusters:
63
64 mcparticle_tag = 'none'
65 sign_tag = 'positive'
66
67
68
69
70 mcparticle_relations = cluster.getRelationsTo('MCParticles')
71 n_mcparticle_relations = mcparticle_relations.size()
72 for mcparticle_index in range(n_mcparticle_relations):
73 mcparticle = mcparticle_relations[mcparticle_index]
74 mcparticle_weight = \
75 mcparticle_relations.weight(mcparticle_index)
76 if mcparticle_weight < 0:
77 sign_tag = 'negative'
78 if mcparticle.hasStatus(Belle2.MCParticle.c_PrimaryParticle):
79 mcparticle_tag = 'primary'
80
81 cluster_truehits = cluster.getRelationsTo('PXDTrueHits')
82
83 mcparticle_array_index = mcparticle.getArrayIndex()
84 for hit in cluster_truehits:
85 hit_particle_relations = \
86 hit.getRelationsFrom('MCParticles')
87 n_relations = hit_particle_relations.size()
88 for particle_index in range(n_relations):
89 hit_particle = \
90 hit_particle_relations[particle_index]
91 if hit_particle.getArrayIndex() == \
92 mcparticle_array_index:
93
94 weight = hit_particle_relations.weight(
95 particle_index)
96 if weight < 0:
97 mcparticle_tag = 'remapped'
98 break
99 else:
100 mcparticle_tag = 'secondary'
101
102
103
104 self.sign_stats_pxd[mcparticle_tag][sign_tag] += 1
105
106
108
109 for cluster in svd_clusters:
110
111 mcparticle_tag = 'none'
112 sign_tag = 'positive'
113
114
115
116
117 mcparticle_relations = cluster.getRelationsTo('MCParticles')
118 n_mcparticle_relations = mcparticle_relations.size()
119 for mcparticle_index in range(n_mcparticle_relations):
120 mcparticle = mcparticle_relations[mcparticle_index]
121 mcparticle_weight = \
122 mcparticle_relations.weight(mcparticle_index)
123 if mcparticle_weight < 0:
124 sign_tag = 'negative'
125 if mcparticle.hasStatus(Belle2.MCParticle.c_PrimaryParticle):
126 mcparticle_tag = 'primary'
127
128 cluster_truehits = cluster.getRelationsTo('SVDTrueHits')
129
130 mcparticle_array_index = mcparticle.getArrayIndex()
131 for hit in cluster_truehits:
132 hit_particle_relations = \
133 hit.getRelationsFrom('MCParticles')
134 n_relations = hit_particle_relations.size()
135 for particle_index in range(n_relations):
136 hit_particle = \
137 hit_particle_relations[particle_index]
138 if hit_particle.getArrayIndex() == \
139 mcparticle_array_index:
140
141 weight = hit_particle_relations.weight(
142 particle_index)
143 if weight < 0:
144 mcparticle_tag = 'remapped'
145 break
146 else:
147 mcparticle_tag = 'secondary'
148
149 self.sign_stats_svd[mcparticle_tag][sign_tag] += 1
150
A (simplified) python wrapper for StoreArray.