X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=TPC%2FAliTPCtrack.cxx;h=aa413fbb3b01195ad960b7c4ffb221b8c5756d25;hp=3a3a36950748bbe155b572a0a07636a2a6b9e597;hb=9805677b7bda00ddf5a8ee3bc546810de6bfa057;hpb=e13cc304433cf8a386308dca2de66986d431d3eb diff --git a/TPC/AliTPCtrack.cxx b/TPC/AliTPCtrack.cxx index 3a3a3695074..aa413fbb3b0 100644 --- a/TPC/AliTPCtrack.cxx +++ b/TPC/AliTPCtrack.cxx @@ -25,38 +25,18 @@ #include "AliTPCtrack.h" #include "AliCluster.h" +#include "AliTracker.h" #include "AliESDtrack.h" -#include "AliTPCReconstructor.h" - +#include "AliESDVertex.h" +#include "TTreeStream.h" +#include "AliTPCRecoParam.h" +#include "AliTPCReconstructor.h" ClassImp(AliTPCtrack) //_________________________________________________________________________ AliTPCtrack::AliTPCtrack(): AliKalmanTrack(), - fX(0), - fAlpha(0), fdEdx(0), - fP0(0), - fP1(0), - fP2(0), - fP3(0), - fP4(0), - fC00(1e10), - fC10(0), - fC11(1e10), - fC20(0), - fC21(0), - fC22(1e10), - fC30(0), - fC31(0), - fC32(0), - fC33(1e10), - fC40(0), - fC41(0), - fC42(0), - fC43(0), - fC44(0), - fNumber(0), fSdEdx(1e10), fNFoundable(0), fBConstrain(kFALSE), @@ -82,32 +62,10 @@ AliTPCtrack::AliTPCtrack(): -AliTPCtrack::AliTPCtrack(UInt_t index, const Double_t xx[5], -const Double_t cc[15], Double_t xref, Double_t alpha) : +AliTPCtrack::AliTPCtrack(Double_t x, Double_t alpha, const Double_t p[5], + const Double_t cov[15], Int_t index) : AliKalmanTrack(), - fX(xref), fdEdx(0), - fP0(xx[0]), - fP1(xx[1]), - fP2(xx[2]), - fP3(xx[3]), - fP4(xx[4]), - fC00(cc[0]), - fC10(cc[1]), - fC11(cc[2]), - fC20(cc[3]), - fC21(cc[4]), - fC22(cc[5]), - fC30(cc[6]), - fC31(cc[7]), - fC32(cc[8]), - fC33(cc[9]), - fC40(cc[10]), - fC41(cc[11]), - fC42(cc[12]), - fC43(cc[13]), - fC44(cc[14]), - fNumber(1), fSdEdx(1e10), fNFoundable(0), fBConstrain(kFALSE), @@ -122,11 +80,36 @@ const Double_t cc[15], Double_t xref, Double_t alpha) : //----------------------------------------------------------------- // This is the main track constructor. //----------------------------------------------------------------- - fAlpha=alpha; - if (fAlpha<-TMath::Pi()) fAlpha += 2*TMath::Pi(); - if (fAlpha>=TMath::Pi()) fAlpha -= 2*TMath::Pi(); - - SaveLocalConvConst(); + Double_t cnv=1./(AliTracker::GetBz()*kB2C); + + Double_t pp[5]={ + p[0], + p[1], + x*p[4] - p[2], + p[3], + p[4]*cnv + }; + + Double_t c22 = x*x*cov[14] - 2*x*cov[12] + cov[5]; + Double_t c32 = x*cov[13] - cov[8]; + Double_t c20 = x*cov[10] - cov[3], + c21 = x*cov[11] - cov[4], c42 = x*cov[14] - cov[12]; + + Double_t cc[15]={ + cov[0 ], + cov[1 ], cov[2 ], + c20, c21, c22, + cov[6 ], cov[7 ], c32, cov[9 ], + cov[10]*cnv, cov[11]*cnv, c42*cnv, cov[13]*cnv, cov[14]*cnv*cnv + }; + + Double_t mostProbablePt=AliExternalTrackParam::GetMostProbablePt(); + Double_t p0=TMath::Sign(1/mostProbablePt,pp[4]); + Double_t w0=cc[14]/(cc[14] + p0*p0), w1=p0*p0/(cc[14] + p0*p0); + pp[4] = w0*p0 + w1*pp[4]; + cc[10]*=w1; cc[11]*=w1; cc[12]*=w1; cc[13]*=w1; cc[14]*=w1; + + Set(x,alpha,pp,cc); SetNumberOfClusters(1); @@ -139,8 +122,9 @@ const Double_t cc[15], Double_t xref, Double_t alpha) : } //_____________________________________________________________________________ -AliTPCtrack::AliTPCtrack(const AliESDtrack& t) : +AliTPCtrack::AliTPCtrack(const AliESDtrack& t, TTreeSRedirector *pcstream) : AliKalmanTrack(), + fdEdx(t.GetTPCsignal()), fSdEdx(1e10), fNFoundable(0), fBConstrain(kFALSE), @@ -155,6 +139,7 @@ AliTPCtrack::AliTPCtrack(const AliESDtrack& t) : //----------------------------------------------------------------- // Conversion AliESDtrack -> AliTPCtrack. //----------------------------------------------------------------- + const Double_t kmaxC[4]={10,10,0.1,0.1}; // cuts on the rms /fP0,fP1,fP2,fP3 SetNumberOfClusters(t.GetTPCclusters(fIndex)); SetLabel(t.GetLabel()); SetMass(t.GetMass()); @@ -162,69 +147,75 @@ AliTPCtrack::AliTPCtrack(const AliESDtrack& t) : for (Int_t i=0; i<12;i++) fKinkPoint[i]=0.; for (Int_t i=0; i<3;i++) fKinkIndexes[i]=0; for (Int_t i=0; i<3;i++) fV0Indexes[i]=0; + // + // choose parameters to start + // + const AliTPCRecoParam * recoParam = AliTPCReconstructor::GetRecoParam(); + Int_t reject=0; + AliExternalTrackParam param(t); + + const AliExternalTrackParam *tpcout=(t.GetFriendTrack())? ((AliESDfriendTrack*)(t.GetFriendTrack()))->GetTPCOut():0; + const AliExternalTrackParam *tpcin = t.GetInnerParam(); + const AliExternalTrackParam *tpc=(tpcout)?tpcout:tpcin; + if (!tpc) tpc=¶m; + Bool_t isOK=recoParam->GetUseOuterDetectors(); + if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE; + if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE; + if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE; + if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE; + param.Rotate(tpc->GetAlpha()); + Double_t oldX=param.GetX(), oldY=param.GetY(), oldZ=param.GetZ(); + if (!isOK ){ + param=*tpc; + isOK=kTRUE; + reject=1; + } + isOK=AliTracker::PropagateTrackToBxByBz(¶m,tpc->GetX(),t.GetMass(),2.,kFALSE); + if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE; + if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE; + if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE; + if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE; + if (!isOK){ + param=*tpc; + isOK=kTRUE; + reject=2; + } + if (reject>0){ + param.ResetCovariance(4.); // reset covariance if start from backup param + } + // + // + if (pcstream){ + AliExternalTrackParam dummy; + AliExternalTrackParam *ptpc=(AliExternalTrackParam *)tpc; + if (!ptpc) ptpc=&dummy; + AliESDtrack *esd= (AliESDtrack *)&t; + (*pcstream)<<"trackP"<< + "reject="<= TMath::Pi()) fAlpha -= 2*TMath::Pi(); - - //Conversion of the track parameters - Double_t x,p[5]; t.GetExternalParameters(x,p); - Double_t c[15]; t.GetExternalCovariance(c); - - fX=x; - fP0=p[0]; - fP1=p[1]; SaveLocalConvConst(); - fP3=p[3]; x=GetLocalConvConst(); - fP4=p[4]/x; - fP2=fP4*fX - p[2]; - - //Conversion of the covariance matrix - c[10]/=x; c[11]/=x; c[12]/=x; c[13]/=x; c[14]/=x*x; - - Double_t c22=fX*fX*c[14] - 2*fX*c[12] + c[5]; - Double_t c32=fX*c[13] - c[8]; - Double_t c20=fX*c[10] - c[3], c21=fX*c[11] - c[4], c42=fX*c[14] - c[12]; - - fC00=c[0 ]; - fC10=c[1 ]; fC11=c[2 ]; - fC20=c20; fC21=c21; fC22=c22; - fC30=c[6 ]; fC31=c[7 ]; fC32=c32; fC33=c[9 ]; - fC40=c[10]; fC41=c[11]; fC42=c42; fC43=c[13]; fC44=c[14]; + Set(param.GetX(),param.GetAlpha(),param.GetParameter(),param.GetCovariance()); if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return; StartTimeIntegral(); Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times); SetIntegratedLength(t.GetIntegratedLength()); + + if (GetX()>oldX) { + Double_t dX=GetX()-oldX, dY=GetY()-oldY, dZ=GetZ()-oldZ; + Double_t d=TMath::Sqrt(dX*dX + dY*dY + dZ*dZ); + AddTimeStep(d); + } } //_____________________________________________________________________________ AliTPCtrack::AliTPCtrack(const AliTPCtrack& t) : AliKalmanTrack(t), - fX(t.fX), - fAlpha(t.fAlpha), fdEdx(t.fdEdx), - fP0(t.fP0), - fP1(t.fP1), - fP2(t.fP2), - fP3(t.fP3), - fP4(t.fP4), - fC00(t.fC00), - fC10(t.fC10), - fC11(t.fC11), - fC20(t.fC20), - fC21(t.fC21), - fC22(t.fC22), - fC30(t.fC30), - fC31(t.fC31), - fC32(t.fC32), - fC33(t.fC33), - fC40(t.fC40), - fC41(t.fC41), - fC42(t.fC42), - fC43(t.fC43), - fC44(t.fC44), - fNumber(t.fNumber), fSdEdx(t.fSdEdx), fNFoundable(t.fNFoundable), fBConstrain(t.fBConstrain), @@ -240,6 +231,8 @@ AliTPCtrack::AliTPCtrack(const AliTPCtrack& t) : //----------------------------------------------------------------- // This is a track copy constructor. //----------------------------------------------------------------- + Set(t.GetX(),t.GetAlpha(),t.GetParameter(),t.GetCovariance()); + for (Int_t i=0; iGet1Pt()); - //Double_t c =TMath::Abs(Get1Pt()); + //Double_t co=t->OneOverPt(); + //Double_t c = OneOverPt(); Double_t co=t->GetSigmaY2()*t->GetSigmaZ2(); Double_t c =GetSigmaY2()*GetSigmaZ2(); if (c>co) return 1; @@ -262,347 +282,97 @@ Int_t AliTPCtrack::Compare(const TObject *o) const { return 0; } -//_____________________________________________________________________________ -void AliTPCtrack::GetExternalCovariance(Double_t cc[15]) const { - //------------------------------------------------------------------------- - // This function returns an external representation of the covriance matrix. - // (See comments in AliTPCtrack.h about external track representation) - //------------------------------------------------------------------------- - Double_t a=GetLocalConvConst(); - - Double_t c22=fX*fX*fC44-2*fX*fC42+fC22; - Double_t c32=fX*fC43-fC32; - Double_t c20=fX*fC40-fC20, c21=fX*fC41-fC21, c42=fX*fC44-fC42; - - cc[0 ]=fC00; - cc[1 ]=fC10; cc[2 ]=fC11; - cc[3 ]=c20; cc[4 ]=c21; cc[5 ]=c22; - cc[6 ]=fC30; cc[7 ]=fC31; cc[8 ]=c32; cc[9 ]=fC33; - cc[10]=fC40*a; cc[11]=fC41*a; cc[12]=c42*a; cc[13]=fC43*a; cc[14]=fC44*a*a; - -} - -//_____________________________________________________________________________ -Double_t AliTPCtrack::GetPredictedChi2(const AliCluster *c) const -{ +Double_t AliTPCtrack::GetPredictedChi2(const AliCluster *c) const { //----------------------------------------------------------------- // This function calculates a predicted chi2 increment. //----------------------------------------------------------------- - Double_t r00=c->GetSigmaY2(), r01=0., r11=c->GetSigmaZ2(); - r00+=fC00; r01+=fC10; r11+=fC11; - - Double_t det=r00*r11 - r01*r01; - if (TMath::Abs(det) < 1.e-10) { - Int_t n=GetNumberOfClusters(); - if (n>4) cerr<GetY() - fP0, dz=c->GetZ() - fP1; - - return (dy*r00*dy + 2*r01*dy*dz + dz*r11*dz)/det; -} - -Double_t AliTPCtrack::GetYat(Double_t xk) const { -//----------------------------------------------------------------- -// This function calculates the Y-coordinate of a track at the plane x=xk. -//----------------------------------------------------------------- - if (TMath::Abs(fP4*fX - fP2)>AliTPCReconstructor::GetMaxSnpTrack()) return 0.; //patch 01 jan 06 - Double_t c1=fP4*fX - fP2, r1=TMath::Sqrt(1.- c1*c1); - Double_t c2=fP4*xk - fP2; - if (c2*c2>AliTPCReconstructor::GetMaxSnpTrack()) { - // Int_t n=GetNumberOfClusters(); - // if (n>4) cerr<GetY(), c->GetZ()}; + Double_t cov[3]={c->GetSigmaY2(), 0., c->GetSigmaZ2()}; + return AliExternalTrackParam::GetPredictedChi2(p,cov); } //_____________________________________________________________________________ -Int_t AliTPCtrack::PropagateTo(Double_t xk,Double_t /*x0*/,Double_t rho) { +Bool_t AliTPCtrack::PropagateTo(Double_t xk,Double_t rho,Double_t x0) { //----------------------------------------------------------------- - // This function propagates a track to a reference plane x=xk. + // This function propagates a track to a reference plane x=xk. + // rho - density of the crossed matrial (g/cm^3) + // x0 - radiation length of the crossed material (g/cm^2) //----------------------------------------------------------------- - if (TMath::Abs(fP4*xk - fP2) >= AliTPCReconstructor::GetMaxSnpTrack()) { - // Int_t n=GetNumberOfClusters(); - //if (n>4) cerr<250.){ + // Don't propagate track outside of the fiducial volume - material budget not proper one + // + //AliWarning("Propagate outside of fiducial volume"); + return kFALSE; } - Double_t lcc=GetLocalConvConst(); - // old position for time [SR, GSI 17.02.2003] - Double_t oldX = fX; - Double_t oldY = fP0; - Double_t oldZ = fP1; - // + Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ(); + //if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE; + Double_t b[3]; GetBxByBz(b); + if (!AliExternalTrackParam::PropagateToBxByBz(xk,b)) return kFALSE; - 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; - - //Change of the magnetic field ************* - SaveLocalConvConst(); - cc=fP4; - fP4*=lcc/GetLocalConvConst(); - fP2+=fX*(fP4-cc); - - //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()); - beta2 = TMath::Min(beta2,0.99999999999); - //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; - /* - // - //MI coeficients - Double_t dc22 = (1-ey*ey+xz*xz*fX*fX)*theta2; - Double_t dc32 = (xz*fX*zz1)*theta2; - Double_t dc33 = (zz1*zz1)*theta2; - Double_t dc42 = (xz*fX*xz)*theta2; - Double_t dc43 = (zz1*xz)*theta2; - Double_t dc44 = (xz*xz)*theta2; - fC22 += dc22; - fC32 += dc32; - fC33 += dc33; - fC42 += dc42; - fC43 += dc43; - fC44 += dc44; - */ - //Energy losses ************************ - Double_t dE=0.153e-3/beta2*(log(5940*beta2/(1-beta2)) - beta2)*d*rho; - if (x1 < x2) dE=-dE; - cc=fP4; - - //Double_t E = sqrt(p2+GetMass()*GetMass()); - //Double_t mifac = TMath::Sqrt(1.+dE*dE/p2+2*E*dE/p2)-1; - //Double_t belfac = E*dE/p2; - // - fP4*=(1.- sqrt(p2+GetMass()*GetMass())/p2*dE); - fP2+=fX*(fP4-cc); - - // Integrated Time [SR, GSI, 17.02.2003] - if (x1 < x2) - if (IsStartedTimeIntegral()) { - Double_t l2 = (fX-oldX)*(fX-oldX)+(fP0-oldY)*(fP0-oldY)+(fP1-oldZ)*(fP1-oldZ); - AddTimeStep(TMath::Sqrt(l2)); - } - // + Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) + + (GetY()-oldY)*(GetY()-oldY) + + (GetZ()-oldZ)*(GetZ()-oldZ)); + if (IsStartedTimeIntegral() && GetX()>oldX) AddTimeStep(d); - return 1; + if (oldX < xk) d = -d; + if (!AliExternalTrackParam::CorrectForMeanMaterial(d*rho/x0,d*rho,GetMass(), + kFALSE,AliExternalTrackParam::BetheBlochGas)) return kFALSE; + + return kTRUE; } //_____________________________________________________________________________ -Int_t AliTPCtrack::PropagateToVertex(Double_t x0,Double_t rho) +Bool_t +AliTPCtrack::PropagateToVertex(const AliESDVertex *v,Double_t rho,Double_t x0) { //----------------------------------------------------------------- - // This function propagates tracks to the "vertex". + // This function propagates tracks to the vertex + // rho - density of the crossed matrial (g/cm3) + // x0 - radiation length of the crossed material (g/cm2) //----------------------------------------------------------------- - Double_t c=fP4*fX - fP2; - Double_t tgf=-fP2/(fP4*fP0 + sqrt(1-c*c)); - Double_t snf=tgf/sqrt(1.+ tgf*tgf); - Double_t xv=(fP2+snf)/fP4; - return PropagateTo(xv,x0,rho); + Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ(); + + //Double_t bz=GetBz(); + //if (!PropagateToDCA(v,bz,kVeryBig)) return kFALSE; + Double_t b[3]; GetBxByBz(b); + if (!PropagateToDCABxByBz(v,b,kVeryBig)) return kFALSE; + + Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) + + (GetY()-oldY)*(GetY()-oldY) + + (GetZ()-oldZ)*(GetZ()-oldZ)); + + if (oldX < GetX()) d = -d; + if (!AliExternalTrackParam::CorrectForMeanMaterial(d*rho/x0,d*rho,GetMass(), + kFALSE,AliExternalTrackParam::BetheBlochGas)) return kFALSE; + + return kTRUE; } //_____________________________________________________________________________ -Int_t AliTPCtrack::Update(const AliCluster *c, Double_t chisq, UInt_t index) { +Bool_t AliTPCtrack::Update(const AliCluster *c, Double_t chisq, Int_t index) { //----------------------------------------------------------------- // This function associates a cluster with this track. //----------------------------------------------------------------- - Double_t r00=c->GetSigmaY2(), r01=0., r11=c->GetSigmaZ2(); - r00+=fC00; r01+=fC10; r11+=fC11; - Double_t det=r00*r11 - r01*r01; - Double_t tmp=r00; r00=r11/det; r11=tmp/det; r01=-r01/det; - - Double_t k00=fC00*r00+fC10*r01, k01=fC00*r01+fC10*r11; - Double_t k10=fC10*r00+fC11*r01, k11=fC10*r01+fC11*r11; - Double_t k20=fC20*r00+fC21*r01, k21=fC20*r01+fC21*r11; - Double_t k30=fC30*r00+fC31*r01, k31=fC30*r01+fC31*r11; - Double_t k40=fC40*r00+fC41*r01, k41=fC40*r01+fC41*r11; - - Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1; - Double_t cur=fP4 + k40*dy + k41*dz, eta=fP2 + k20*dy + k21*dz; - if (TMath::Abs(cur*fX-eta) >= AliTPCReconstructor::GetMaxSnpTrack()) { - // Int_t n=GetNumberOfClusters(); - //if (n>4) cerr<GetY(), c->GetZ()}; + Double_t cov[3]={c->GetSigmaY2(), 0., c->GetSigmaZ2()}; - fC00-=k00*fC00+k01*fC10; fC10-=k00*c01+k01*fC11; - fC20-=k00*c02+k01*c12; fC30-=k00*c03+k01*c13; - fC40-=k00*c04+k01*c14; + if (!AliExternalTrackParam::Update(p,cov)) return kFALSE; - fC11-=k10*c01+k11*fC11; - fC21-=k10*c02+k11*c12; fC31-=k10*c03+k11*c13; - fC41-=k10*c04+k11*c14; - - fC22-=k20*c02+k21*c12; fC32-=k20*c03+k21*c13; - fC42-=k20*c04+k21*c14; - - fC33-=k30*c03+k31*c13; - fC43-=k40*c03+k41*c13; - - fC44-=k40*c04+k41*c14; + AliTracker::FillResiduals(this,p,cov,c->GetVolumeId()); Int_t n=GetNumberOfClusters(); fIndex[n]=index; SetNumberOfClusters(n+1); SetChi2(GetChi2()+chisq); - return 1; -} - -//_____________________________________________________________________________ -Int_t AliTPCtrack::Rotate(Double_t alpha) -{ - //----------------------------------------------------------------- - // This function rotates this track. - //----------------------------------------------------------------- - fAlpha += alpha; - if (fAlpha<-TMath::Pi()) fAlpha += 2*TMath::Pi(); - if (fAlpha>=TMath::Pi()) fAlpha -= 2*TMath::Pi(); - - Double_t x1=fX, y1=fP0; - Double_t ca=cos(alpha), sa=sin(alpha); - Double_t r1=fP4*fX - fP2; - - if (TMath::Abs(r1)>=AliTPCReconstructor::GetMaxSnpTrack()) return 0; //patch 01 jan 06 - - fX = x1*ca + y1*sa; - fP0=-x1*sa + y1*ca; - fP2=fP2*ca + (fP4*y1 + sqrt(1.- r1*r1))*sa; - - Double_t r2=fP4*fX - fP2; - if (TMath::Abs(r2) >= AliTPCReconstructor::GetMaxSnpTrack()) { - //Int_t n=GetNumberOfClusters(); - // if (n>4) cerr<= 0.) { - //Int_t n=GetNumberOfClusters(); - // if (n>4) cerr<=2*TMath::Pi()) phi-=2*TMath::Pi(); - return phi; -} -//////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////// // MI ADDITION @@ -645,43 +415,6 @@ Float_t AliTPCtrack::Density2(Int_t row0, Int_t row1) return density; } - -Double_t AliTPCtrack::GetZat0() const -{ - // - // return virtual z - supposing that x = 0 - if (TMath::Abs(fP2)>1) return 0; - if (TMath::Abs(fX*fP4-fP2)>1) return 0; - Double_t vz = fP1+fP3/fP4*(asin(-fP2)-asin(fX*fP4-fP2)); - return vz; -} - - -Double_t AliTPCtrack::GetD(Double_t x, Double_t y) const { - //------------------------------------------------------------------ - // This function calculates the transverse impact parameter - // with respect to a point with global coordinates (x,y) - //------------------------------------------------------------------ - //Double_t xt=fX, yt=fP0; - - Double_t sn=TMath::Sin(fAlpha), cs=TMath::Cos(fAlpha); - Double_t a = x*cs + y*sn; - y = -x*sn + y*cs; x=a; - // - Double_t r = TMath::Abs(1/fP4); - Double_t x0 = TMath::Abs(fP2*r); - Double_t y0 = fP0; - y0= fP0+TMath::Sqrt(1-(fP4*fX-fP2)*(fP4*fX-fP2))/fP4; - - Double_t delta = TMath::Sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)); - // Double_t delta = TMath::Sqrt(TMath::Abs(x*x-2*x0*x+x0*x0+ y*y-2*y*y0+y0*y0)); - delta -= TMath::Abs(r); - return delta; -} - -// -// - void AliTPCtrack::UpdatePoints() { //-------------------------------------------------- @@ -740,3 +473,4 @@ void AliTPCtrack::UpdatePoints() } // } +