104 """Fill the residual and pull histograms"""
109 for truehit
in truehits:
112 clusters = truehit.getRelationsFrom(
"PXDClusters")
115 for j, cls
in enumerate(clusters):
118 if clusters.weight(j) < 100:
121 mom = truehit.getMomentum()
124 thetaU = math.atan(tu) * 180 / math.pi
125 thetaV = math.atan(tv) * 180 / math.pi
134 clusterkind = cls.getKind()
139 if clusterkind <= 3
and mom.Mag() > 0.02:
144 self.hist_map_momentum[clusterkind].Fill(mom.Mag())
145 self.hist_map_theta_u[clusterkind].Fill(thetaU)
146 self.hist_map_theta_v[clusterkind].Fill(thetaV)
147 self.hist_map_clustercharge[clusterkind].Fill(cls.getCharge())
150 self.hist_map_momentum[4].Fill(mom.Mag())
151 self.hist_map_theta_u[4].Fill(thetaU)
152 self.hist_map_theta_v[4].Fill(thetaV)
153 self.hist_map_clustercharge[4].Fill(cls.getCharge())
157 pull_u = (truehit.getU() - cls.getU()) / cls.getUSigma()
158 pull_v = (truehit.getV() - cls.getV()) / cls.getVSigma()
160 self.hist_map_residual_u[(clusterkind, mode)].Fill(truehit.getU() - cls.getU())
161 self.hist_map_residual_v[(clusterkind, mode)].Fill(truehit.getV() - cls.getV())
162 self.hist_map_residual_pull_u[(clusterkind, mode)].Fill(pull_u)
163 self.hist_map_residual_pull_v[(clusterkind, mode)].Fill(pull_v)
165 if thetaV >= self.binlimits[0][0]
and thetaV < self.binlimits[0][1]:
166 self.hist_map_residual_v_special[(clusterkind, mode, 0)].Fill(truehit.getV() - cls.getV())
167 elif thetaV >= self.binlimits[1][0]
and thetaV < self.binlimits[1][1]:
168 self.hist_map_residual_v_special[(clusterkind, mode, 1)].Fill(truehit.getV() - cls.getV())
170 self.hist_map_residual_v_special[(clusterkind, mode, 2)].Fill(truehit.getV() - cls.getV())
172 shape_likelyhood = PositionEstimator.getShapeLikelyhood(cls, tu, tv)
173 if shape_likelyhood > 0:
174 self.nfound_shapes += 1
176 offset = PositionEstimator.getClusterOffset(cls, tu, tv)
179 self.nfound_offset += 1
183 shiftU = sensor_info.getUCellPosition(cls.getUStart())
184 shiftV = sensor_info.getVCellPosition(cls.getVStart())
188 pull_u = (truehit.getU() - shiftU - offset.getU()) / (math.sqrt(offset.getUSigma2()))
189 pull_v = (truehit.getV() - shiftV - offset.getV()) / (math.sqrt(offset.getVSigma2()))
191 self.hist_map_residual_u[(clusterkind, mode)].Fill(truehit.getU() - shiftU - offset.getU())
192 self.hist_map_residual_v[(clusterkind, mode)].Fill(truehit.getV() - shiftV - offset.getV())
193 self.hist_map_residual_pull_u[(clusterkind, mode)].Fill(pull_u)
194 self.hist_map_residual_pull_v[(clusterkind, mode)].Fill(pull_v)
196 if thetaV >= self.binlimits[0][0]
and thetaV < self.binlimits[0][1]:
197 self.hist_map_residual_v_special[(clusterkind, mode, 0)].Fill(
198 truehit.getV() - shiftV - offset.getV())
199 elif thetaV >= self.binlimits[1][0]
and thetaV < self.binlimits[1][1]:
200 self.hist_map_residual_v_special[(clusterkind, mode, 1)].Fill(
201 truehit.getV() - shiftV - offset.getV())
203 self.hist_map_residual_v_special[(clusterkind, mode, 2)].Fill(
204 truehit.getV() - shiftV - offset.getV())
208 self.hist_map_residual_u[(clusterkind, mode)].Fill(truehit.getU() - shiftU - offset.getU())
209 self.hist_map_residual_v[(clusterkind, mode)].Fill(truehit.getV() - shiftV - offset.getV())
210 self.hist_map_residual_pull_u[(clusterkind, mode)].Fill(pull_u)
211 self.hist_map_residual_pull_v[(clusterkind, mode)].Fill(pull_v)
213 if thetaV >= self.binlimits[0][0]
and thetaV < self.binlimits[0][1]:
214 self.hist_map_residual_v_special[(clusterkind, mode, 0)].Fill(
215 truehit.getV() - shiftV - offset.getV())
216 elif thetaV >= self.binlimits[1][0]
and thetaV < self.binlimits[1][1]:
217 self.hist_map_residual_v_special[(clusterkind, mode, 1)].Fill(
218 truehit.getV() - shiftV - offset.getV())
220 self.hist_map_residual_v_special[(clusterkind, mode, 2)].Fill(
221 truehit.getV() - shiftV - offset.getV())
227 pull_u = (truehit.getU() - cls.getU()) / cls.getUSigma()
228 pull_v = (truehit.getV() - cls.getV()) / cls.getVSigma()
230 self.hist_map_residual_u[(clusterkind, mode)].Fill(truehit.getU() - cls.getU())
231 self.hist_map_residual_v[(clusterkind, mode)].Fill(truehit.getV() - cls.getV())
232 self.hist_map_residual_pull_u[(clusterkind, mode)].Fill(pull_u)
233 self.hist_map_residual_pull_v[(clusterkind, mode)].Fill(pull_v)
235 if thetaV >= self.binlimits[0][0]
and thetaV < self.binlimits[0][1]:
236 self.hist_map_residual_v_special[(clusterkind, mode, 0)].Fill(truehit.getV() - cls.getV())
237 elif thetaV >= self.binlimits[1][0]
and thetaV < self.binlimits[1][1]:
238 self.hist_map_residual_v_special[(clusterkind, mode, 1)].Fill(truehit.getV() - cls.getV())
240 self.hist_map_residual_v_special[(clusterkind, mode, 2)].Fill(truehit.getV() - cls.getV())
Class PXDTrueHit - Records of tracks that either enter or leave the sensitive volume.
static PXDClusterPositionEstimator & getInstance()
Main (and only) way to access the PXDClusterPositionEstimator.
a (simplified) python wrapper for StoreArray.
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.