- Double_t x1=fX, x2=x1+(xk-x1), dx=x2-x1, y1=fP0, z1=fP1;
- Double_t c1=fP4*x1 - fP2, r1=sqrt(1.- c1*c1);
- Double_t c2=fP4*x2 - fP2, r2=sqrt(1.- c2*c2);
-
- fP0 += dx*(c1+c2)/(r1+r2);
- fP1 += dx*(c1+c2)/(c1*r2 + c2*r1)*fP3;
-
- //f = F - 1
- Double_t rr=r1+r2, cc=c1+c2, xx=x1+x2;
- Double_t f02=-dx*(2*rr + cc*(c1/r1 + c2/r2))/(rr*rr);
- Double_t f04= dx*(rr*xx + cc*(c1*x1/r1+c2*x2/r2))/(rr*rr);
- Double_t cr=c1*r2+c2*r1;
- Double_t f12=-dx*fP3*(2*cr + cc*(c2*c1/r1-r1 + c1*c2/r2-r2))/(cr*cr);
- Double_t f13= dx*cc/cr;
- Double_t f14=dx*fP3*(cr*xx-cc*(r1*x2-c2*c1*x1/r1+r2*x1-c1*c2*x2/r2))/(cr*cr);
-
- //b = C*ft
- Double_t b00=f02*fC20 + f04*fC40, b01=f12*fC20 + f14*fC40 + f13*fC30;
- Double_t b10=f02*fC21 + f04*fC41, b11=f12*fC21 + f14*fC41 + f13*fC31;
- Double_t b20=f02*fC22 + f04*fC42, b21=f12*fC22 + f14*fC42 + f13*fC32;
- Double_t b30=f02*fC32 + f04*fC43, b31=f12*fC32 + f14*fC43 + f13*fC33;
- Double_t b40=f02*fC42 + f04*fC44, b41=f12*fC42 + f14*fC44 + f13*fC43;
-
- //a = f*b = f*C*ft
- Double_t a00=f02*b20+f04*b40,a01=f02*b21+f04*b41,a11=f12*b21+f14*b41+f13*b31;
-
- //F*C*Ft = C + (a + b + bt)
- fC00 += a00 + 2*b00;
- fC10 += a01 + b01 + b10;
- fC20 += b20;
- fC30 += b30;
- fC40 += b40;
- fC11 += a11 + 2*b11;
- fC21 += b21;
- fC31 += b31;
- fC41 += b41;
-
- fX=x2;
-
- //Multiple scattering******************
- Double_t d=sqrt((x1-fX)*(x1-fX)+(y1-fP0)*(y1-fP0)+(z1-fP1)*(z1-fP1));
- Double_t p2=(1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt());
- Double_t beta2=p2/(p2 + GetMass()*GetMass());
- //Double_t theta2=14.1*14.1/(beta2*p2*1e6)*d/x0*rho;
- Double_t theta2=1.0259e-6*10*10/20/(beta2*p2)*d*rho;
-
- Double_t ey=fP4*fX - fP2, ez=fP3;
- Double_t xz=fP4*ez, zz1=ez*ez+1, xy=fP2+ey;
-
- fC22 += (2*ey*ez*ez*fP2+1-ey*ey+ez*ez+fP2*fP2*ez*ez)*theta2;
- fC32 += ez*zz1*xy*theta2;
- fC33 += zz1*zz1*theta2;
- fC42 += xz*ez*xy*theta2;
- fC43 += xz*zz1*theta2;
- fC44 += xz*xz*theta2;
-
- //Energy losses************************
- Double_t dE=0.153e-3/beta2*(log(5940*beta2/(1-beta2)) - beta2)*d*rho;
- if (x1 < x2) dE=-dE;
- cc=fP4;
- fP4*=(1.- sqrt(p2+GetMass()*GetMass())/p2*dE);
- fP2+=fX*(fP4-cc);
-
- return 1;
+ Double_t bz=GetBz();
+ if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE;
+
+ Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) +
+ (GetY()-oldY)*(GetY()-oldY) +
+ (GetZ()-oldZ)*(GetZ()-oldZ));
+ if (IsStartedTimeIntegral() && GetX()>oldX) AddTimeStep(d);
+
+ if (oldX < xk) d = -d;
+ if (!AliExternalTrackParam::CorrectForMaterial(d*rho/x0,x0,GetMass()))
+ return kFALSE;
+
+ return kTRUE;