42 double dxdz,
double dydz,
double invp,
44 double sigdxdz,
double sigdydz,
84 double dxdz,
double dydz,
double invp,
86 double sigdxdz,
double sigdydz,
119 TMatrixT<double>& statePred)
122 double sExtrapolateTo=pl.
getO().Z();
123 if(sExtrapolateTo<-1000 || sExtrapolateTo>5000)
return 0;
133 TVectorT<double> uprim(3);uprim[0]=
fState[2][0];uprim[1]=
fState[3][0];uprim[2]=1.;
134 TVectorT<double> par(1);par[0]=
fState[4][0];
136 TVectorT<double> unew(3);unew=
u;
137 TVectorT<double> uprimnew(3);uprimnew=uprim;
138 double l=rungeKutta.
propagate(
s,sExtrapolateTo,
142 statePred[0][0]=unew[0];
143 statePred[1][0]=unew[1];
144 statePred[2][0]=uprimnew[0];
145 statePred[3][0]=uprimnew[1];
146 statePred[4][0]=
fState[4][0];
185 TMatrixT<double>& statePred,
186 TMatrixT<double>& covPred)
190 TMatrixT<double> jacobian;
194 jacobian.ResizeTo(5,5);
196 TMatrixT<double> dummy(
fCov,TMatrixT<double>::kMultTranspose,jacobian);
197 covPred=jacobian*dummy;
207 TMatrixT<double> statePred(dim,1);
208 TMatrixT<double> covPred(dim,dim);
210 plane.
setU(TVector3(1,0,0));
211 plane.
setV(TVector3(0,1,0));
213 poca.SetXYZ(statePred[0][0],statePred[1][0],plane.
getO().Z());
214 normVec.SetXYZ(statePred[2][0],statePred[3][0],plane.
getO().Z());
222 newp.
setO(newp.
getO()+TVector3(0,0,h));
228 const TMatrixT<double>& statePred,
229 TMatrixT<double>& jacResult){
231 TMatrixT<double> difPred(statePred);
233 for(
int icol=0;icol<5;++icol){
235 double h=TMath::Abs(
fState[icol][0])*1.e-4;
245 for(
int irow=0;irow<5;++irow)jacResult[irow][icol]=difPred[irow][0]/h;
253 double z=pl.
getO().Z();
254 TMatrixT<double> statePred(
fState);
255 GFDetPlane p(TVector3(0,0,z),TVector3(1,0,0),TVector3(0,1,0));
257 return TVector3(statePred[0][0],statePred[1][0],z);
263 double z=pl.
getO().Z();
264 TMatrixT<double> statePred(
fState);
266 GFDetPlane p(TVector3(0,0,z),TVector3(1,0,0),TVector3(0,1,0));
269 TVector3 result(statePred[2][0],statePred[3][0],1);
270 if(TMath::Abs(statePred[4][0])!=0){
271 result.SetMag(1./TMath::Abs(statePred[4][0]));
273 else result.SetMag(100);
281 double z=pl.
getO().Z();
282 TMatrixT<double> statePred(
fState);
283 GFDetPlane p(TVector3(0,0,z),TVector3(1,0,0),TVector3(0,1,0));
285 pos.SetXYZ(statePred[0][0],statePred[1][0],z);
286 mom.SetXYZ(statePred[2][0],statePred[3][0],1);
287 if(TMath::Abs(statePred[4][0])!=0){
288 mom.SetMag(1./TMath::Abs(statePred[4][0]));
290 else mom.SetMag(100);
300 par[0]=pos.X();par[1]=pos.Y();par[2]=pos.Z();
301 par[3]=mom.X();par[4]=mom.Y();par[5]=mom.Z();
302 return TVectorT<double>(6,par);
308 TMatrixT<double>
L(6,5);
311 double no=xp*xp+yp*yp+1;
313 double sq3inv=1/(sq*sq*sq);
318 L[3][2]=p*(1+yp*yp)*sq3inv;
319 L[3][3]=-p*xp*yp*sq3inv;
320 L[3][4]=-p/(2.*
fState[4][0])*xp/sq;
321 L[4][2]=p*(1+xp*xp)*sq3inv;
322 L[4][3]=-p*xp*yp*sq3inv;
323 L[4][4]=-p/(2.*
fState[4][0])*yp/sq;
324 L[5][2]=-p*xp*sq3inv;
325 L[5][3]=-p*yp*sq3inv;
326 L[5][4]=-p/(2.*
fState[4][0])/sq;
329 TMatrixT<double> LT(TMatrixD::kTransposed,L);
330 TMatrixT<double> dum(
fCov,TMatrixD::kMult,LT);
331 TMatrixT<double> result(L,TMatrixD::kMult,dum);