12 #include <framework/logging/Logger.h>
13 #include <pxd/reconstruction/PXDRecoHit.h>
14 #include <pxd/reconstruction/PXDClusterPositionEstimator.h>
15 #include <pxd/reconstruction/PXDGainCalibrator.h>
16 #include <pxd/dataobjects/PXDTrueHit.h>
17 #include <pxd/dataobjects/PXDCluster.h>
18 #include <pxd/geometry/SensorInfo.h>
19 #include <vxd/geometry/SensorPlane.h>
20 #include <vxd/geometry/GeoCache.h>
22 #include <genfit/DetPlane.h>
29 PXDRecoHit::PXDRecoHit():
30 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(0), m_cluster(0),
35 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(hit), m_cluster(0),
38 if (!gRandom) B2FATAL(
"gRandom not initialized, please set up gRandom first");
44 if (sigmaU < 0 || sigmaV < 0) {
46 sigmaU = geometry.getUPitch(hit->getV()) / sqrt(12);
47 sigmaV = geometry.getVPitch(hit->getV()) / sqrt(12);
51 rawHitCoords_(0) = gRandom->Gaus(hit->getU(), sigmaU);
52 rawHitCoords_(1) = gRandom->Gaus(hit->getV(), sigmaV);
54 rawHitCov_(0, 0) = sigmaU * sigmaU;
57 rawHitCov_(1, 1) = sigmaV * sigmaV;
65 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(0), m_cluster(hit),
71 rawHitCoords_(0) = hit->getU();
72 rawHitCoords_(1) = hit->getV();
74 rawHitCov_(0, 0) = sigmaU * sigmaU;
75 rawHitCov_(0, 1) = covUV;
76 rawHitCov_(1, 0) = covUV;
77 rawHitCov_(1, 1) = sigmaV * sigmaV;
90 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(0), m_cluster(hit),
96 rawHitCoords_(0) = hit->getU();
97 rawHitCoords_(1) = hit->getV();
99 rawHitCov_(0, 0) = hit->getUSigma() * hit->getUSigma();
100 rawHitCov_(0, 1) = hit->getRho() * hit->getUSigma() * hit->getVSigma();
101 rawHitCov_(1, 0) = hit->getRho() * hit->getUSigma() * hit->getVSigma();
102 rawHitCov_(1, 1) = hit->getVSigma() * hit->getVSigma();
125 TVector3 uLocal(1, 0, 0);
126 TVector3 vLocal(0, 1, 0);
127 TVector3 origin = geometry.pointToGlobal(TVector3(0, 0, 0),
true);
128 TVector3 uGlobal = geometry.vectorToGlobal(uLocal,
true);
129 TVector3 vGlobal = geometry.vectorToGlobal(vLocal,
true);
143 const TVectorD& state5 = state.getState();
154 auto L1 = [](
double x) {
return x;};
155 auto L2 = [](
double x) {
return (3 * x * x - 1) / 2;};
156 auto L3 = [](
double x) {
return (5 * x * x * x - 3 * x) / 2;};
157 auto L4 = [](
double x) {
return (35 * x * x * x * x - 30 * x * x + 3) / 8;};
161 double u = hitCoords[0];
162 double v = hitCoords[1];
163 double width = geometry.getWidth(v);
164 double length = geometry.getLength();
173 planarParameters[0] * L2(u) + planarParameters[1] * L1(u) * L1(v) + planarParameters[2] * L2(v) +
174 planarParameters[3] * L3(u) + planarParameters[4] * L2(u) * L1(v) + planarParameters[5] * L1(u) * L2(v) + planarParameters[6] * L3(
176 planarParameters[7] * L4(u) + planarParameters[8] * L3(u) * L1(v) + planarParameters[9] * L2(u) * L2(v) + planarParameters[10] * L1(
177 u) * L3(v) + planarParameters[11] * L4(v);
179 double du_dw = state.getState()[1];
180 double dv_dw = state.getState()[2];
187 pos[0] = u + dw * du_dw;
188 pos[1] = v + dw * dv_dw;
198 const TVectorD& state5 = state.getState();
201 if (offset !=
nullptr) {
208 TVectorD hitCoords(2);
209 hitCoords(0) = posU + offset->getU();
210 hitCoords(1) = posV + offset->getV();
211 TMatrixDSym hitCov(2);
212 hitCov(0, 0) = offset->getUSigma2();
213 hitCov(0, 1) = offset->getUVCovariance();
214 hitCov(1, 0) = offset->getUVCovariance();
215 hitCov(1, 1) = offset->getVSigma2();
221 pos, hitCov, state.getPlane(), state.getRep(), this->constructHMatrix(state.getRep())
231 pos, rawHitCov_, state.getPlane(), state.getRep(), this->constructHMatrix(state.getRep())