30 TMatrixT<Double_t> returnMat(2, 1);
32 TMatrixT<Double_t> _D(3, 1);
36 _D[0][0] = (plane.
getO())[0];
37 _D[1][0] = (plane.
getO())[1];
38 _D[2][0] = (plane.
getO())[2];
47 returnMat[0][0] = _D[0][0] * _U[0] + _D[1][0] * _U[1] + _D[2][0] * _U[2];
48 returnMat[1][0] = _D[0][0] * _V[0] + _D[1][0] * _V[1] + _D[2][0] * _V[2];
58 TMatrixT<Double_t> returnMat(
61 TMatrixT<Double_t> _D(3, 1);
65 _D[0][0] = (plane.
getO())[0];
66 _D[1][0] = (plane.
getO())[1];
67 _D[2][0] = (plane.
getO())[2];
76 returnMat[0][0] = _D[0][0] * _U[0] + _D[1][0] * _U[1] + _D[2][0] * _U[2];
77 returnMat[1][0] = _D[0][0] * _V[0] + _D[1][0] * _V[1] + _D[2][0] * _V[2];
94 TMatrixT<Double_t> jac(3, 2);
104 TMatrixT<Double_t> jac_t = jac.T();
105 TMatrixT<Double_t> jac_orig = jac;
107 TMatrixT<Double_t> result = jac_t * (rawCov * jac_orig);
116 const TMatrixT<Double_t>& state,
117 const Double_t& mass)
129 std::vector<double> tmpRawCov;
130 tmpRawCov.push_back(rawCov[0][0]);
131 tmpRawCov.push_back(rawCov[1][1]);
132 tmpRawCov.push_back(rawCov[2][2]);
133 tmpRawCov.push_back(rawCov[2][1]);
135 static std::vector<double> oldRawCov(tmpRawCov);
136 static std::vector<double> oldOldRawCov(tmpRawCov);
138 rawCov.ResizeTo(7, 7);
141 rawCov[0][0] = tmpRawCov[0];
142 rawCov[1][1] = tmpRawCov[1];
143 rawCov[2][2] = tmpRawCov[2];
144 rawCov[1][2] = tmpRawCov[3];
145 rawCov[2][1] = tmpRawCov[3];
149 TMatrixT<Double_t> jac(7, 5);
159 Double_t mom = fabs(1.0 / state[0][0]);
160 Double_t beta = mom / sqrt(mass * mass + mom * mom);
161 dist = (plane.
getO() - planePrev.
getO()).Mag();
162 C = 0.0136 / beta * sqrt(dist / 14.0) * (1 + 0.038 * log(dist / 14.0));
171 (oldRawCov[0] + tmpRawCov[0]) / pow(dist, 4.) *
172 (pow((plane.
getO() - planePrev.
getO()).
Y(), 2.) +
173 pow((plane.
getO() - planePrev.
getO()).
Z(), 2.)) +
174 pow((plane.
getO() - planePrev.
getO()).
X(), 2.) *
175 (pow((plane.
getO() - planePrev.
getO()).
Y(), 2.) * (oldRawCov[1] + tmpRawCov[1]) +
176 pow((plane.
getO() - planePrev.
getO()).
Z(), 2.) * (oldRawCov[2] + tmpRawCov[2])) /
179 + 3.0 * (plane.
getO() - planePrev.
getO()).
X() * (plane.
getO() - planePrev.
getO()).
Y() *
180 (plane.
getO() - planePrev.
getO()).
Z() / pow(dist, 5.) * (tmpRawCov[3] + oldRawCov[3]);
183 (oldRawCov[1] + tmpRawCov[1]) / pow(dist, 4.) *
184 (pow((plane.
getO() - planePrev.
getO()).
X(), 2.) +
185 pow((plane.
getO() - planePrev.
getO()).
Z(), 2.)) +
186 pow((plane.
getO() - planePrev.
getO()).
Y(), 2.) *
187 (pow((plane.
getO() - planePrev.
getO()).
X(), 2.) * (oldRawCov[0] + tmpRawCov[0]) +
188 pow((plane.
getO() - planePrev.
getO()).
Z(), 2.) * (oldRawCov[2] + tmpRawCov[2])) /
193 (plane.
getO() - planePrev.
getO()).
Z() / pow(dist, 5.) +
194 (plane.
getO() - planePrev.
getO()).
Z() / pow(dist, 3.)) *
195 (tmpRawCov[3] + oldRawCov[3]);
198 (oldRawCov[2] + tmpRawCov[2]) / pow(dist, 4.) *
199 (pow((plane.
getO() - planePrev.
getO()).
X(), 2.) +
200 pow((plane.
getO() - planePrev.
getO()).
Y(), 2.)) +
201 pow((plane.
getO() - planePrev.
getO()).
Z(), 2.) *
202 (pow((plane.
getO() - planePrev.
getO()).
Y(), 2.) * (oldRawCov[0] + tmpRawCov[0]) +
203 pow((plane.
getO() - planePrev.
getO()).
X(), 2.) * (oldRawCov[1] + tmpRawCov[1])) /
208 (plane.
getO() - planePrev.
getO()).
Z() / pow(dist, 5.) +
209 (plane.
getO() - planePrev.
getO()).
Y() / pow(dist, 3.)) *
210 (tmpRawCov[3] + oldRawCov[3]);
212 Double_t num = (plane.
getO() - planePrev.
getO()) * (planePrev.
getO() - planePrevPrev.
getO());
213 Double_t d1 = (plane.
getO() - planePrev.
getO()).Mag();
214 Double_t d2 = (planePrev.
getO() - planePrevPrev.
getO()).Mag();
221 pow(((planePrev.
getO() - planePrevPrev.
getO()).
X() * d1 * d2 -
222 num * (plane.
getO() - planePrev.
getO()).
X() * d2 / d1) /
223 pow(d1, 2.0) / pow(d2, 2.0),
226 pow(((planePrev.
getO() - planePrevPrev.
getO()).
Y() * d1 * d2 +
227 num * (plane.
getO() - planePrev.
getO()).
Y() * d2 / d1) /
228 pow(d1, 2.0) / pow(d2, 2.0),
231 pow(((planePrev.
getO() - planePrevPrev.
getO()).
Z() * d1 * d2 +
232 num * (plane.
getO() - planePrev.
getO()).
Z() * d2 / d1) /
233 pow(d1, 2.0) / pow(d2, 2.0),
237 pow(((plane.
getO() - planePrev.
getO()).
X() * d1 * d2 -
238 num * (planePrev.
getO() - planePrevPrev.
getO()).
X() * d1 / d2) /
239 pow(d1, 2.0) / pow(d2, 2.0),
242 pow(((plane.
getO() - planePrev.
getO()).
Y() * d1 * d2 -
243 num * (planePrev.
getO() - planePrevPrev.
getO()).
Y() * d1 / d2) /
244 pow(d1, 2.0) / pow(d2, 2.0),
247 pow(((plane.
getO() - planePrev.
getO()).
Z() * d1 * d2 -
248 num * (planePrev.
getO() - planePrevPrev.
getO()).
Z() * d1 / d2) /
249 pow(d1, 2.0) / pow(d2, 2.0),
253 pow(((plane.
getO() - planePrevPrev.
getO()).
X() * d1 * d2 -
254 num * (plane.
getO() - planePrev.
getO()).
X() * d2 / d1 +
255 num * (planePrev.
getO() - planePrevPrev.
getO()).
X() * d1 / d2) /
256 pow(d1, 2.0) / pow(d2, 2.0),
259 pow(((plane.
getO() - planePrevPrev.
getO()).
Y() * d1 * d2 -
260 num * (plane.
getO() - planePrev.
getO()).
Y() * d2 / d1 +
261 num * (planePrev.
getO() - planePrevPrev.
getO()).
Y() * d1 / d2) /
262 pow(d1, 2.0) / pow(d2, 2.0),
265 pow(((plane.
getO() - planePrevPrev.
getO()).
Z() * d1 * d2 -
266 num * (plane.
getO() - planePrev.
getO()).
Z() * d2 / d1 +
267 num * (planePrev.
getO() - planePrevPrev.
getO()).
Z() * d1 / d2) /
268 pow(d1, 2.0) / pow(d2, 2.0),
273 + ((plane.
getO() - planePrev.
getO()).
Z() * (planePrev.
getO() - planePrevPrev.
getO()).
Y() /
275 (plane.
getO() - planePrev.
getO()).
Y() * (planePrev.
getO() - planePrevPrev.
getO()).
Z() /
277 3. * (plane.
getO() - planePrev.
getO()).
Y() * (plane.
getO() - planePrev.
getO()).
Z() * num /
281 + ((planePrevPrev.
getO() - planePrev.
getO()).
Z() * (planePrev.
getO() - plane.
getO()).
Y() /
283 (planePrevPrev.
getO() - planePrev.
getO()).
Y() * (planePrev.
getO() - plane.
getO()).
Z() /
285 3. * (planePrevPrev.
getO() - planePrev.
getO()).
Y() *
286 (planePrevPrev.
getO() - planePrev.
getO()).
Z() * num / pow(d1, 5.) / d2) *
289 + (((plane.
getO() - planePrev.
getO()).
Y() - (planePrev.
getO() - planePrevPrev.
getO()).
Y()) *
290 (-(plane.
getO() - planePrev.
getO()).
Z() / pow(d1, 3.) / d2 +
291 (planePrev.
getO() - planePrevPrev.
getO()).
Z() / pow(d2, 3.) / d1) +
293 ((-(planePrev.
getO() - planePrevPrev.
getO()).
Z() + (plane.
getO() - planePrev.
getO()).
Z()) /
295 num * (-3. * (plane.
getO() - planePrev.
getO()).
Z() * d1 * d2 +
296 (planePrev.
getO() - planePrevPrev.
getO()).
Z() * pow(d1, 3.) / d2)) /
297 pow(d1, 6.) / pow(d2, 2.) -
298 (planePrev.
getO() - planePrevPrev.
getO()).
Y() *
299 ((-(planePrev.
getO() - planePrevPrev.
getO()).
Z() + (plane.
getO() - planePrev.
getO()).
Z()) /
301 num * (3. * (planePrev.
getO() - planePrevPrev.
getO()).
Z() * d1 * d2 -
302 (plane.
getO() - planePrev.
getO()).
Z() * pow(d2, 3.) / d1)) /
303 pow(d1, 2.) / pow(d2, 6.)) *
307 Double_t theta(TMath::ACos((plane.
getO() - planePrev.
getO()).Unit() *
308 (planePrev.
getO() - planePrevPrev.
getO()).Unit()));
310 TMath::Min(pow(dcosTh, 2.) / pow(TMath::Sin(theta), 2.), pow(TMath::Pi() / 2.0, 2.));
314 if (d1 == 0 || d2 == 0) {
315 rawCov[3][3] = pow(0.2, 2.0);
316 rawCov[4][4] = pow(0.2, 2.0);
317 rawCov[5][5] = pow(0.2, 2.0);
318 rawCov[6][6] = pow(0.1, 2.0);
320 C = 0.0136 / beta * sqrt(dist / 14.0) * (1 + 0.038 * log(dist / 14.0));
326 TVector3 u = plane.
getU();
327 TVector3 v = plane.
getV();
328 TVector3
w = u.Cross(v);
334 double pTildeMag = pTilde.Mag();
349 jac[3][1] = 1.0 / pTildeMag * (u.X() - pTilde.X() / (pTildeMag * pTildeMag) * u * pTilde);
350 jac[4][1] = 1.0 / pTildeMag * (u.Y() - pTilde.Y() / (pTildeMag * pTildeMag) * u * pTilde);
351 jac[5][1] = 1.0 / pTildeMag * (u.Z() - pTilde.Z() / (pTildeMag * pTildeMag) * u * pTilde);
353 jac[3][2] = 1.0 / pTildeMag * (v.X() - pTilde.X() / (pTildeMag * pTildeMag) * v * pTilde);
354 jac[4][2] = 1.0 / pTildeMag * (v.Y() - pTilde.Y() / (pTildeMag * pTildeMag) * v * pTilde);
355 jac[5][2] = 1.0 / pTildeMag * (v.Z() - pTilde.Z() / (pTildeMag * pTildeMag) * v * pTilde);
357 TMatrixT<Double_t> jac_orig = jac;
358 TMatrixT<Double_t> jac_t = jac.T();
360 TMatrixT<Double_t> result = jac_t * (rawCov * jac_orig);
364 oldOldRawCov = oldRawCov;
365 oldRawCov = tmpRawCov;
366 planePrevPrev = planePrev;
374 TVector3 point(rawcoord[0][0], rawcoord[1][0], rawcoord[2][0]);
376 TVector3 poca, dirInPoca;
void setO(const TVector3 &o)
TMatrixT< Double_t > getRawHitCoord() const
Get raw hit coordinates.
TMatrixT< double > hitCoord(GFAbsRecoHit *, const GFDetPlane &)
Hit coordinates in detector plane.
Base Class for genfit track representations. Defines interface for track parameterizations.
TVector3 getNormal() const
TMatrixT< double > hitCov(GFAbsRecoHit *, const GFDetPlane &)
Hit covariances in detector plane.
static const std::string fPolicyName
virtual void extrapolateToPoint(const TVector3 &point, TVector3 &poca, TVector3 &normVec)
This method is to extrapolate the track to point of closest approach to a point in space...
Detector simulation of raw signals on wires.
const GFDetPlane & detPlane(GFAbsRecoHit *, GFAbsTrackRep *)
Get detector plane perpendicular to track.
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)
void setNormal(TVector3 n)
TMatrixT< Double_t > getRawHitCov() const
Get raw hit covariances.