31 TMatrixT<Double_t> returnMat(2,1);
33 TMatrixT<Double_t> _D(3,1);
37 _D[0][0] = (plane.
getO())[0];
38 _D[1][0] = (plane.
getO())[1];
39 _D[2][0] = (plane.
getO())[2];
50 returnMat[0][0] = _D[0][0] * _U[0] + _D[1][0] * _U[1] + _D[2][0] * _U[2];
51 returnMat[1][0] = _D[0][0] * _V[0] + _D[1][0] * _V[1] + _D[2][0] * _V[2];
61 TMatrixT<Double_t> returnMat(5,1);
63 TMatrixT<Double_t> _D(3,1);
67 _D[0][0] = (plane.
getO())[0];
68 _D[1][0] = (plane.
getO())[1];
69 _D[2][0] = (plane.
getO())[2];
80 returnMat[0][0] = _D[0][0] * _U[0] + _D[1][0] * _U[1] + _D[2][0] * _U[2];
81 returnMat[1][0] = _D[0][0] * _V[0] + _D[1][0] * _V[1] + _D[2][0] * _V[2];
100 TMatrixT<Double_t> jac(3,2);
110 TMatrixT<Double_t> jac_t = jac.T();
111 TMatrixT<Double_t> jac_orig = jac;
113 TMatrixT<Double_t> result=jac_t * (rawCov * jac_orig);
132 std::vector <double> tmpRawCov;
133 tmpRawCov.push_back(rawCov[0][0]);
134 tmpRawCov.push_back(rawCov[1][1]);
135 tmpRawCov.push_back(rawCov[2][2]);
136 tmpRawCov.push_back(rawCov[2][1]);
138 static std::vector <double> oldRawCov(tmpRawCov);
139 static std::vector <double> oldOldRawCov(tmpRawCov);
141 rawCov.ResizeTo(7,7);
144 rawCov[0][0] = tmpRawCov[0];
145 rawCov[1][1] = tmpRawCov[1];
146 rawCov[2][2] = tmpRawCov[2];
147 rawCov[1][2] = tmpRawCov[3];
148 rawCov[2][1] = tmpRawCov[3];
152 TMatrixT<Double_t> jac(7,5);
162 Double_t mom = fabs(1.0/state[0][0]);
163 Double_t
beta = mom/sqrt(mass*mass+mom*mom);
164 dist = (plane.
getO()-planePrev.
getO()).Mag();
165 C = 0.0136/beta*sqrt(dist/14.0)*(1+0.038*log(dist/14.0));
173 rawCov[3][3] = (oldRawCov[0]+tmpRawCov[0])/pow(dist,4.) *
175 pow((plane.
getO()-planePrev.
getO()).
Y(),2.) +
176 pow((plane.
getO()-planePrev.
getO()).
Z(),2.)
179 pow((plane.
getO()-planePrev.
getO()).
X(),2.) *
181 pow((plane.
getO()-planePrev.
getO()).
Y(),2.) * (oldRawCov[1]+tmpRawCov[1]) +
182 pow((plane.
getO()-planePrev.
getO()).
Z(),2.) * (oldRawCov[2]+tmpRawCov[2])
186 3.0* (plane.
getO()-planePrev.
getO()).
X() * (plane.
getO()-planePrev.
getO()).
Y() * (plane.
getO()-planePrev.
getO()).
Z() / pow(dist,5.) * (tmpRawCov[3] + oldRawCov[3])
189 rawCov[4][4] = (oldRawCov[1]+tmpRawCov[1])/pow(dist,4.) *
191 pow((plane.
getO()-planePrev.
getO()).
X(),2.) +
192 pow((plane.
getO()-planePrev.
getO()).
Z(),2.)
195 pow((plane.
getO()-planePrev.
getO()).
Y(),2.) *
197 pow((plane.
getO()-planePrev.
getO()).
X(),2.) * (oldRawCov[0]+tmpRawCov[0]) +
198 pow((plane.
getO()-planePrev.
getO()).
Z(),2.) * (oldRawCov[2]+tmpRawCov[2])
202 3.0* ( (plane.
getO()-planePrev.
getO()).
X() * (plane.
getO()-planePrev.
getO()).
Y() * (plane.
getO()-planePrev.
getO()).
Z() / pow(dist,5.) + (plane.
getO()-planePrev.
getO()).
Z() / pow(dist,3.) ) * ( tmpRawCov[3] + oldRawCov[3] )
205 rawCov[5][5] = (oldRawCov[2]+tmpRawCov[2])/pow(dist,4.) *
207 pow((plane.
getO()-planePrev.
getO()).
X(),2.) +
208 pow((plane.
getO()-planePrev.
getO()).
Y(),2.)
211 pow((plane.
getO()-planePrev.
getO()).
Z(),2.) *
213 pow((plane.
getO()-planePrev.
getO()).
Y(),2.) * (oldRawCov[0]+tmpRawCov[0])+
214 pow((plane.
getO()-planePrev.
getO()).
X(),2.) * (oldRawCov[1]+tmpRawCov[1])
218 3.0* ( (plane.
getO()-planePrev.
getO()).
X() * (plane.
getO()-planePrev.
getO()).
Y() * (plane.
getO()-planePrev.
getO()).
Z() / pow(dist,5.) + (plane.
getO()-planePrev.
getO()).
Y() / pow(dist,3.) ) * ( tmpRawCov[3] + oldRawCov[3] )
222 Double_t num = (plane.
getO()-planePrev.
getO())*(planePrev.
getO()-planePrevPrev.
getO());
223 Double_t d1 = (plane.
getO()-planePrev.
getO()).Mag();
224 Double_t d2 = (planePrev.
getO()-planePrevPrev.
getO()).Mag();
231 pow(((planePrev.
getO()-planePrevPrev.
getO()).
X()*d1*d2 -
232 num * (plane.
getO()-planePrev.
getO()).
X() *d2/d1) /
233 pow(d1,2.0)/pow(d2,2.0),2.0) * tmpRawCov[0] +
234 pow(((planePrev.
getO()-planePrevPrev.
getO()).
Y()*d1*d2 +
235 num * (plane.
getO()-planePrev.
getO()).
Y() *d2/d1) /
236 pow(d1,2.0)/pow(d2,2.0),2.0) * tmpRawCov[1] +
237 pow(((planePrev.
getO()-planePrevPrev.
getO()).
Z()*d1*d2 +
238 num * (plane.
getO()-planePrev.
getO()).
Z() *d2/d1) /
239 pow(d1,2.0)/pow(d2,2.0),2.0) * tmpRawCov[2] +
241 pow(((plane.
getO()-planePrev.
getO()).
X()*d1*d2 -
242 num * (planePrev.
getO()-planePrevPrev.
getO()).
X() *d1/d2) /
243 pow(d1,2.0)/pow(d2,2.0),2.0) * oldOldRawCov[0] +
244 pow(((plane.
getO()-planePrev.
getO()).
Y()*d1*d2 -
245 num * (planePrev.
getO()-planePrevPrev.
getO()).
Y() *d1/d2) /
246 pow(d1,2.0)/pow(d2,2.0),2.0) * oldOldRawCov[1] +
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),2.0) * oldOldRawCov[2] +
251 pow(((plane.
getO()-planePrevPrev.
getO()).
X()*d1*d2 -
252 num * (plane.
getO()-planePrev.
getO()).
X() *d2/d1 +
253 num * (planePrev.
getO()-planePrevPrev.
getO()).
X() *d1/d2
255 pow(d1,2.0)/pow(d2,2.0),2.0) * oldRawCov[0] +
256 pow(((plane.
getO()-planePrevPrev.
getO()).
Y()*d1*d2 -
257 num * (plane.
getO()-planePrev.
getO()).
Y() *d2/d1 +
258 num * (planePrev.
getO()-planePrevPrev.
getO()).
Y() *d1/d2
260 pow(d1,2.0)/pow(d2,2.0),2.0) * oldRawCov[1] +
261 pow(((plane.
getO()-planePrevPrev.
getO()).
Z()*d1*d2 -
262 num * (plane.
getO()-planePrev.
getO()).
Z() *d2/d1 +
263 num * (planePrev.
getO()-planePrevPrev.
getO()).
Z() *d1/d2
265 pow(d1,2.0)/pow(d2,2.0),2.0) * oldRawCov[2]
270 (plane.
getO()-planePrev.
getO()).
Z() * (planePrev.
getO()-planePrevPrev.
getO()).
Y() / pow(d1,3.)/d2
272 (plane.
getO()-planePrev.
getO()).
Y() * (planePrev.
getO()-planePrevPrev.
getO()).
Z() / pow(d1,3.)/d2
274 3.*(plane.
getO()-planePrev.
getO()).
Y() * (plane.
getO()-planePrev.
getO()).
Z() * num / pow(d1,5.)/d2
279 (planePrevPrev.
getO()-planePrev.
getO()).
Z() * (planePrev.
getO()-plane.
getO()).
Y() / pow(d1,3.)/d2
281 (planePrevPrev.
getO()-planePrev.
getO()).
Y() * (planePrev.
getO()-plane.
getO()).
Z() / pow(d1,3.)/d2
283 3.*(planePrevPrev.
getO()-planePrev.
getO()).
Y() * (planePrevPrev.
getO()-planePrev.
getO()).
Z() * num / pow(d1,5.)/d2
288 ( (plane.
getO()-planePrev.
getO()).
Y() - (planePrev.
getO()-planePrevPrev.
getO()).
Y() ) *
289 (-(plane.
getO()-planePrev.
getO()).
Z()/pow(d1,3.)/d2 +
290 (planePrev.
getO()-planePrevPrev.
getO()).
Z()/pow(d2,3.)/d1
294 (-(planePrev.
getO()-planePrevPrev.
getO()).
Z() +
298 ( -3.* (plane.
getO()-planePrev.
getO()).
Z()*d1*d2 +
299 (planePrev.
getO()-planePrevPrev.
getO()).
Z()*pow(d1,3.)/d2
301 ) / pow(d1,6.) / pow(d2,2.)
303 (planePrev.
getO()-planePrevPrev.
getO()).
Y()*
305 (-(planePrev.
getO()-planePrevPrev.
getO()).
Z() +
309 ( 3.* (planePrev.
getO()-planePrevPrev.
getO()).
Z()*d1*d2 -
310 (plane.
getO()-planePrev.
getO()).
Z()*pow(d2,3.)/d1
312 ) / pow(d1,2.) / pow(d2,6.)
317 Double_t theta(TMath::ACos((plane.
getO()-planePrev.
getO()).Unit() * (planePrev.
getO()-planePrevPrev.
getO()).Unit()));
318 rawCov[6][6] = TMath::Min(pow(dcosTh,2.)/pow(TMath::Sin(theta),2.),pow(TMath::Pi()/2.0,2.));
322 if (d1 == 0 || d2 == 0)
324 rawCov[3][3] = pow(0.2,2.0);
325 rawCov[4][4] = pow(0.2,2.0);
326 rawCov[5][5] = pow(0.2,2.0);
327 rawCov[6][6] = pow(0.1,2.0);
329 C = 0.0136/beta*sqrt(dist/14.0)*(1+0.038*log(dist/14.0));
335 TVector3 u=plane.
getU();
336 TVector3 v=plane.
getV();
337 TVector3
w=u.Cross(v);
343 double pTildeMag = pTilde.Mag();
358 jac[3][1] = 1.0/pTildeMag*(u.X()-pTilde.X()/(pTildeMag*pTildeMag)*u*pTilde);
359 jac[4][1] = 1.0/pTildeMag*(u.Y()-pTilde.Y()/(pTildeMag*pTildeMag)*u*pTilde);
360 jac[5][1] = 1.0/pTildeMag*(u.Z()-pTilde.Z()/(pTildeMag*pTildeMag)*u*pTilde);
362 jac[3][2] = 1.0/pTildeMag*(v.X()-pTilde.X()/(pTildeMag*pTildeMag)*v*pTilde);
363 jac[4][2] = 1.0/pTildeMag*(v.Y()-pTilde.Y()/(pTildeMag*pTildeMag)*v*pTilde);
364 jac[5][2] = 1.0/pTildeMag*(v.Z()-pTilde.Z()/(pTildeMag*pTildeMag)*v*pTilde);
366 TMatrixT<Double_t> jac_orig = jac;
367 TMatrixT<Double_t> jac_t = jac.T();
369 TMatrixT<Double_t> result=jac_t * (rawCov * jac_orig);
374 oldOldRawCov = oldRawCov;
375 oldRawCov = tmpRawCov;
376 planePrevPrev = planePrev;
385 TVector3 point(rawcoord[0][0],rawcoord[1][0],rawcoord[2][0]);
387 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.
void setNormal(TVector3 n)
TMatrixT< Double_t > getRawHitCov() const
Get raw hit covariances.