11 #include <framework/logging/Logger.h>
12 #include <svd/reconstruction/SVDRecoHit2D.h>
13 #include <svd/geometry/SensorInfo.h>
14 #include <vxd/geometry/SensorPlane.h>
15 #include <vxd/geometry/GeoCache.h>
17 #include <genfit/DetPlane.h>
25 SVDRecoHit2D::SVDRecoHit2D():
26 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(0), m_uCluster(0), m_vCluster(0),
31 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(0), m_trueHit(hit), m_uCluster(0), m_vCluster(0),
34 if (!gRandom) B2FATAL(
"gRandom not initialized, please set up gRandom first");
40 if (sigmaU < 0 || sigmaV < 0) {
42 sigmaU = geometry.getUPitch(hit->getV()) / sqrt(12);
43 sigmaV = geometry.getVPitch(hit->getV()) / sqrt(12);
47 rawHitCoords_(0) = gRandom->Gaus(hit->getU(), sigmaU);
48 rawHitCoords_(1) = gRandom->Gaus(hit->getV(), sigmaV);
50 rawHitCov_(0, 0) = sigmaU * sigmaU;
53 rawHitCov_(1, 1) = sigmaV * sigmaV;
61 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_sensorID(vxdid), m_trueHit(NULL), m_uCluster(0), m_vCluster(0),
65 if (sigmaU < 0 || sigmaV < 0) {
67 sigmaU = geometry.getUPitch(v) / sqrt(12);
68 sigmaV = geometry.getVPitch(v) / sqrt(12);
74 rawHitCov_(0, 0) = sigmaU * sigmaU;
77 rawHitCov_(1, 1) = sigmaV * sigmaV;
83 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_trueHit(NULL), m_uCluster(&uHit), m_vCluster(&vHit),
87 B2FATAL(
"Error in SVDRecoHit2D: Incorrect SVDCluster instances on input!");
96 (info.getForwardWidth() - info.getBackwardWidth()) / info.getLength() / info.getWidth(0);
97 double scaleFactorU = 1 + DeltaU * vHit.
getPosition();
99 double one_over_cos_phi_sqr = 1 + tan_phi * tan_phi;
101 rawHitCoords_[0] = uHit.
getPosition() * scaleFactorU;
105 double sigmaU_sq = sigmaU * sigmaU;
107 double sigmaV_sq = sigmaV * sigmaV;
111 rawHitCov_(0, 0) = sigmaV_sq * tan_phi * tan_phi + sigmaU_sq * one_over_cos_phi_sqr;
112 rawHitCov_(0, 1) = sigmaV_sq * tan_phi;
113 rawHitCov_(1, 0) = sigmaV_sq * tan_phi;
114 rawHitCov_(1, 1) = sigmaV_sq;
120 genfit::PlanarMeasurement(HIT_DIMENSIONS), m_trueHit(NULL), m_uCluster(0), m_vCluster(0), m_energyDep(0)
125 B2FATAL(
"Error in SVDRecoHit2D: Incorrect SVDCluster instances on input!");
136 (info.getForwardWidth() - info.getBackwardWidth()) / info.getLength() / info.getWidth(0);
137 double scaleFactorU = 1 + DeltaU * vHit.
getPosition();
139 double one_over_cos_phi_sqr = 1 + tan_phi * tan_phi;
141 rawHitCoords_[0] = uHit.
getPosition() * scaleFactorU;
145 double sigmaU_sq = sigmaU * sigmaU;
147 double sigmaV_sq = sigmaV * sigmaV;
151 rawHitCov_(0, 0) = sigmaV_sq * tan_phi * tan_phi + sigmaU_sq * one_over_cos_phi_sqr;
152 rawHitCov_(0, 1) = sigmaV_sq * tan_phi;
153 rawHitCov_(1, 0) = sigmaV_sq * tan_phi;
154 rawHitCov_(1, 1) = sigmaV_sq;
165 TVector3 origin = geometry.pointToGlobal(TVector3(0, 0, 0),
true);
166 TVector3 uGlobal = geometry.vectorToGlobal(TVector3(1, 0, 0),
true);
167 TVector3 vGlobal = geometry.vectorToGlobal(TVector3(0, 1, 0),
true);
178 auto L1 = [](
double x) {
return x;};
179 auto L2 = [](
double x) {
return (3 * x * x - 1) / 2;};
180 auto L3 = [](
double x) {
return (5 * x * x * x - 3 * x) / 2;};
181 auto L4 = [](
double x) {
return (35 * x * x * x * x - 30 * x * x + 3) / 8;};
185 double u = rawHit[0];
186 double v = rawHit[1];
187 double width = geometry.getWidth(v);
188 double length = geometry.getLength();
197 planarParameters[0] * L2(u) + planarParameters[1] * L1(u) * L1(v) + planarParameters[2] * L2(v) +
198 planarParameters[3] * L3(u) + planarParameters[4] * L2(u) * L1(v) + planarParameters[5] * L1(u) * L2(v) + planarParameters[6] * L3(
200 planarParameters[7] * L4(u) + planarParameters[8] * L3(u) * L1(v) + planarParameters[9] * L2(u) * L2(v) + planarParameters[10] * L1(
201 u) * L3(v) + planarParameters[11] * L4(v);
203 double du_dw = state.getState()[1];
204 double dv_dw = state.getState()[2];
211 pos[0] = u + dw * du_dw;
212 pos[1] = v + dw * dv_dw;
223 state.getRep(), this->constructHMatrix(state.getRep())));