- Double_t p0=fP0,p1=fP1,p2=fP2,p3=fP3,p4=fP4;
- Double_t c00=fC00;
- Double_t c10=fC10, c11=fC11;
- Double_t c20=fC20, c21=fC21, c22=fC22;
- Double_t c30=fC30, c31=fC31, c32=fC32, c33=fC33;
- Double_t c40=fC40, c41=fC41, c42=fC42, c43=fC43, c44=fC44;
-
-
- Double_t dalp=alp-fAlpha;
-
- Double_t ca=TMath::Cos(dalp), sa=TMath::Sin(dalp);
- Double_t sf=fP2, cf=TMath::Sqrt(1.- fP2*fP2);
-
- Double_t pp2=fP2*ca - cf*sa;
- if (TMath::Abs(pp2) >= 0.99999) {
- Int_t n=GetNumberOfClusters();
- if (n>kWARN) cerr<<n<<" AliITStrackV2 warning: Rotation failed !\n";
- return 0;
- }
-
- fAlpha = alp;
- if (fAlpha < -TMath::Pi()) fAlpha += 2*TMath::Pi();
- else if (fAlpha >= TMath::Pi()) fAlpha -= 2*TMath::Pi();
-
- Double_t x1=fX, y1=fP0;
-
- fX = x1*ca + y1*sa;
- fP0=-x1*sa + y1*ca;
- fP2 = pp2;
-
- cf=ca + sf*sa/cf;
-
- if (!Invariant()) {cout<<dalp<<" Rotate !\n"; return 0;}
-
- x1=fX; Double_t x2=xk, dx=x2-x1;
- Double_t f1=fP2, f2=f1 + fP4*dx;
- if (TMath::Abs(f2) >= 0.99999) {
- Int_t n=GetNumberOfClusters();
- if (n>kWARN) cerr<<n<<" AliITStrackV2 warning: Propagation failed !\n";
- return 0;
- }
-
- Double_t r1=sqrt(1.- f1*f1), r2=sqrt(1.- f2*f2);
-
- fP0 += dx*(f1+f2)/(r1+r2);
- fP1 += dx*(f1+f2)/(f1*r2 + f2*r1)*fP3;
- fP2 += dx*fP4;
-
- //f = F - 1
- Double_t f02= dx/(r1*r1*r1);
- Double_t f04=0.5*dx*dx/(r1*r1*r1);
- Double_t f12= dx*fP3*f1/(r1*r1*r1);
- Double_t f14=0.5*dx*dx*fP3*f1/(r1*r1*r1);
- Double_t f13= dx/r1;
- Double_t f24= dx;
- /*
- //b = C*ft
- Double_t b00=f02*fC20 + f03*fC30, b01=f12*fC20 + f13*fC30 + f14*fC40;
- Double_t b02=f23*fC30;
- Double_t b10=f02*fC21 + f03*fC31, b11=f12*fC21 + f13*fC31 + f14*fC41;
- Double_t b12=f23*fC31;
- Double_t b20=f02*fC22 + f03*fC32, b21=f12*fC22 + f13*fC32 + f14*fC42;
- Double_t b22=f23*fC32;
- Double_t b30=f02*fC32 + f03*fC33, b31=f12*fC32 + f13*fC33 + f14*fC43;
- Double_t b32=f23*fC33;
- Double_t b40=f02*fC42 + f03*fC43, b41=f12*fC42 + f13*fC43 + f14*fC44;
- Double_t b42=f23*fC43;
-
- //a = f*b = f*C*ft
- Double_t a00=f02*b20+f03*b30,a01=f02*b21+f03*b31,a02=f02*b22+f03*b32;
- Double_t a11=f12*b21+f13*b31+f14*b41,a12=f12*b22+f13*b32+f14*b42;
- Double_t a22=f23*b32;
-
- //F*C*Ft = C + (b + bt + a)
- fC00 += b00 + b00 + a00;
- fC10 += b10 + b01 + a01;
- fC20 += b20 + b02 + a02;
- fC30 += b30;
- fC40 += b40;
- fC11 += b11 + b11 + a11;
- fC21 += b21 + b12 + a12;
- fC31 += b31;
- fC41 += b41;
- fC22 += b22 + b22 + a22;
- fC32 += b32;
- fC42 += b42;
-*/
-
- TMatrixD F(5,5); F.UnitMatrix();
- F(0,0)=-(f1+f2)/(r1+r2)*sa + ca; F(0,2)=f02*cf; F(0,4)=f04;
- F(1,0)=-(f1+f2)/(f1*r2 + f2*r1)*fP3*sa; F(1,2)=f12*cf; F(1,4)=f14; F(1,3)=f13;
- F(2,0)=-fP4*sa; F(2,2)=cf; F(2,4)=f24;
-
- TMatrixD C(5,5);
- C(0,0)=fC00;
- C(1,0)=fC10; C(1,1)=fC11;
- C(2,0)=fC20; C(2,1)=fC21; C(2,2)=fC22;
- C(3,0)=fC30; C(3,1)=fC31; C(3,2)=fC32; C(3,3)=fC33;
- C(4,0)=fC40; C(4,1)=fC41; C(4,2)=fC42; C(4,3)=fC43; C(4,4)=fC44;
-
- C(0,1)=C(1,0);
- C(0,2)=C(2,0); C(1,2)=C(2,1);
- C(0,3)=C(3,0); C(1,3)=C(3,1); C(2,3)=C(3,2);
- C(0,4)=C(4,0); C(1,4)=C(4,1); C(2,4)=C(4,2); C(3,4)=C(4,3);
-
- TMatrixD tmp(C,TMatrixD::kMult,TMatrixD(TMatrixD::kTransposed, F));
- C.Mult(F,tmp);
-
- fC00=C(0,0);
- fC10=C(1,0); fC11=C(1,1);
- fC20=C(2,0); fC21=C(2,1); fC22=C(2,2);
- fC30=C(3,0); fC31=C(3,1); fC32=C(3,2); fC33=C(3,3);
- fC40=C(4,0); fC41=C(4,1); fC42=C(4,2); fC43=C(4,3); fC44=C(4,4);
-
- pp2=(1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt());
- Double_t beta2=pp2/(pp2 + pm*pm);
-
- //Multiple scattering******************
- //x0=0.;
- if (x0!=0.) {
- x0*=TMath::Sqrt((1.+ fP3*fP3)/(1.- fP2*fP2));
- Double_t theta2=14.1*14.1/(beta2*pp2*1e6)*x0;
- fC22 += theta2*(1.- fP2*fP2)*(1. + fP3*fP3);
- fC33 += theta2*(1. + fP3*fP3)*(1. + fP3*fP3);
- fC43 += theta2*fP3*fP4*(1. + fP3*fP3);
- fC44 += theta2*fP3*fP4*fP3*fP4;
- }
-
- //Energy losses************************
- if (rho!=0.) {
- rho*=TMath::Sqrt((1.+ fP3*fP3)/(1.- fP2*fP2));
- Double_t dE=0.153e-3/beta2*(log(5940*beta2/(1-beta2)) - beta2)*rho;
- if (x1 < x2) dE=-dE;
- fP4*=(1.- sqrt(pp2+pm*pm)/pp2*dE);
- }