17 from ROOT
import Belle2
22 """A simple module to check the reconstruction of PXDTrueHits."""
25 """Initialize the module"""
29 self.
filefile = open(
'PXDHitErrorOutput.txt',
'w')
33 self.
fHistofHisto = ROOT.TFile(
'PXDPulls.root',
'RECREATE')
35 self.
h_pull_uh_pull_u = ROOT.TH1F(
'h_pull_u',
'Pulls in u', 150, -10, 5)
37 self.
h_pull_vh_pull_v = ROOT.TH1F(
'h_pull_v',
'Pulls in v', 100, -5, 5)
40 """ Write legend for file columns """
42 self.
filefile.write(
'vxd.id layer ladder sensor truehit.index cluster.index ')
43 self.
filefile.write(
'truehit.u truehit.v truehit.time truehit.charge theta.u theta.v ')
44 self.
filefile.write(
'u v u.error v.error rho charge seed size u.size v.size u.pull v.pull\n')
47 """Find clusters with a truehit and print some stats."""
52 nClusters = clusters.getEntries()
55 relClustersToTrueHits = \
56 Belle2.PyRelationArray(
'PXDClustersToPXDTrueHits')
63 for cluster_index
in range(nClusters):
64 cluster = clusters[cluster_index]
66 relClustersToTrueHits.getToIndices(cluster_index)
70 if len(cluster_truehits) != 1:
73 for truehit_index
in cluster_truehits:
74 truehit = truehits[truehit_index]
78 sensorID = truehit.getRawSensorID()
79 [layer, ladder, sensor] = self.
decodedecode(sensorID)
81 s_id =
'{sID} {layer} {ladder} {sensor} {indexT:4d} {indexC:4d} '.format(
91 thetaU = math.atan2(truehit.getExitU() - truehit.getEntryU(),
93 thetaV = math.atan2(truehit.getExitV() - truehit.getEntryV(),
95 s_th =
'{uTH:10.5f} {vTH:10.5f} {tTH:10.2f} {eTH:10.7f} '.format(
96 uTH=truehit.getU(), vTH=truehit.getV(), tTH=truehit.getGlobalTime(),
97 eTH=truehit.getEnergyDep()) +
'{thetaU:6.3f} {thetaV:6.3f} '.format(thetaU=thetaU, thetaV=thetaV)
103 cluster_pull_u = (cluster.getU() - truehit.getU()) \
104 / cluster.getUSigma()
105 cluster_pull_v = (cluster.getV() - truehit.getV()) \
106 / cluster.getVSigma()
107 except ZeroDivisionError:
108 if cluster.getUSigma() < 1.0e-8:
109 b2.B2ERROR(
'Zero error in u, clsize {cl}.'.format(cl=cluster.getUSize()))
111 b2.B2ERROR(
'Zero error in v, clsize {cl}.'.format(cl=cluster.getVSize()))
114 '{u:10.5f} {v:10.5f} {uEr:10.5f} {vEr:10.5f} {rho:10.4f} '.format(
115 u=cluster.getU(), v=cluster.getV(), uEr=cluster.getUSigma(),
116 vEr=cluster.getVSigma(), rho=cluster.getRho()) \
117 +
'{eC:9.1f} {eSeed:9.1f} {size:5d} {uSize:5d} {vSize:5d} '.format(
118 eC=cluster.getCharge(), eSeed=cluster.getSeedCharge(), size=cluster.getSize(),
119 uSize=cluster.getUSize(), vSize=cluster.getVSize()) \
120 +
'{uPull:10.3f} {vPull:10.3f}'.format(
121 uPull=cluster_pull_u, vPull=cluster_pull_v)
125 self.
filefile.write(s)
126 if cluster.getUSize() == 2:
127 self.
h_pull_uh_pull_u.Fill(cluster_pull_u)
128 if cluster.getVSize() == 2:
129 self.
h_pull_vh_pull_v.Fill(cluster_pull_v)
132 """ Close the output file."""
134 self.
filefile.close()
143 """ Utility to decode sensor IDs """
147 result.append(vxdid / f)
a (simplified) python wrapper for StoreArray.
vxdid_factors
Factors for decoding VXDId's.
h_pull_v
Histogram for v pulls.
h_pull_u
Histogram for u pulls.
fHisto
File to save histograms.