X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=STEER%2FAliKalmanTrack.cxx;h=92df4af77cfd24124241509e795ccc97cfd820f3;hp=b01f2d5b649c448e7c44785e343e2342b921e47b;hb=96c33f8f31e546eab077ada93d9c3fc663d36ce4;hpb=f37d970d39405521c25e9753ee52970a06cd051b diff --git a/STEER/AliKalmanTrack.cxx b/STEER/AliKalmanTrack.cxx index b01f2d5b649..92df4af77cf 100644 --- a/STEER/AliKalmanTrack.cxx +++ b/STEER/AliKalmanTrack.cxx @@ -20,242 +20,62 @@ // that is the base for AliTPCtrack, AliITStrackV2 and AliTRDtrack // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch //------------------------------------------------------------------------- +#include #include "AliKalmanTrack.h" -#include "AliLog.h" -#include "AliPDG.h" -#include "TPDGCode.h" -#include "TDatabasePDG.h" ClassImp(AliKalmanTrack) -Double_t AliKalmanTrack::fgConvConst; - //_______________________________________________________________________ -AliKalmanTrack::AliKalmanTrack(): - fLab(-3141593), + AliKalmanTrack::AliKalmanTrack():AliExternalTrackParam(), + fFakeRatio(0), fChi2(0), - fMass(0.13957), - fN(0) + fMass(AliPID::ParticleMass(AliPID::kPion)), + fLab(-3141593), + fN(0), + fStartTimeIntegral(kFALSE), + fIntegratedLength(0) { // // Default constructor // - if (fgConvConst==0) { - AliFatal("The magnetic field has not been set!"); - } - - fStartTimeIntegral = kFALSE; - fIntegratedLength = 0; - for(Int_t i=0; i<5; i++) fIntegratedTime[i] = 0; + + for(Int_t i=0; i 1.) par[2] = 1.; - if (par[2] < -1.) par[2] = -1.; - Double_t phi = TMath::ASin(par[2]) + GetAlpha(); - while (phi < 0) phi += TMath::TwoPi(); - while (phi > TMath::TwoPi()) phi -= TMath::TwoPi(); - return phi; -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::SigmaPhi() const -{ -// return error of global phi of track - - Double_t par[5]; - Double_t cov[15]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - GetExternalCovariance(cov); - return TMath::Sqrt(TMath::Abs(cov[5] / (1. - par[2]*par[2]))); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Theta() const -{ -// return global theta of track - - Double_t par[5]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - return TMath::Pi()/2. - TMath::ATan(par[3]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::SigmaTheta() const -{ -// return error of global theta of track - - Double_t par[5]; - Double_t cov[15]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - GetExternalCovariance(cov); - return TMath::Sqrt(TMath::Abs(cov[5])) / (1. + par[3]*par[3]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Eta() const -{ -// return global eta of track - - return -TMath::Log(TMath::Tan(Theta()/2.)); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Px() const -{ -// return x component of track momentum - - Double_t par[5]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - Double_t phi = TMath::ASin(par[2]) + GetAlpha(); - return TMath::Cos(phi) / TMath::Abs(par[4]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Py() const -{ -// return y component of track momentum - - Double_t par[5]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - Double_t phi = TMath::ASin(par[2]) + GetAlpha(); - return TMath::Sin(phi) / TMath::Abs(par[4]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Pz() const -{ -// return z component of track momentum - - Double_t par[5]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - return par[3] / TMath::Abs(par[4]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::Pt() const -{ -// return transverse component of track momentum - - Double_t par[5]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - return 1. / TMath::Abs(par[4]); -} -//_______________________________________________________________________ -Double_t AliKalmanTrack::SigmaPt() const -{ -// return error of transverse component of track momentum - - Double_t par[5]; - Double_t cov[15]; - Double_t localX = GetX(); - GetExternalParameters(localX, par); - GetExternalCovariance(cov); - return TMath::Sqrt(cov[14]) / TMath::Abs(par[4]); + for (Int_t i=0; i 100) return; - for (Int_t i=0; iGetParticle(pdgCode[i])->Mass(); + Double_t mass = AliPID::ParticleMass(i); Double_t correction = TMath::Sqrt( pt*pt * (1 + tgl*tgl) + mass * mass ) / p; Double_t time = length * correction / kcc; @@ -327,7 +145,6 @@ void AliKalmanTrack:: AddTimeStep(Double_t length) } //_______________________________________________________________________ - Double_t AliKalmanTrack::GetIntegratedTime(Int_t pdg) const { // Sylwester Radomski, GSI @@ -346,194 +163,18 @@ Double_t AliKalmanTrack::GetIntegratedTime(Int_t pdg) const return 0.; } - static Int_t pdgCode[fgkTypes] = {kElectron, kMuonMinus, kPiPlus, kKPlus, kProton}; - - for (Int_t i=0; i helix parameters - //-------------------------------------------------------------------- - Double_t alpha,x,cs,sn; - t->GetExternalParameters(x,helix); alpha=t->GetAlpha(); - - cs=TMath::Cos(alpha); sn=TMath::Sin(alpha); - helix[5]=x*cs - helix[0]*sn; // x0 - helix[0]=x*sn + helix[0]*cs; // y0 -//helix[1]= // z0 - helix[2]=TMath::ASin(helix[2]) + alpha; // phi0 -//helix[3]= // tgl - helix[4]=helix[4]/t->GetConvConst(); // C + for (Int_t i=0; iGetSigmaY2(); - Double_t dz2=GetSigmaZ2() + p->GetSigmaZ2(); - Double_t dx2=dy2; - - //dx2=dy2=dz2=1.; - - Double_t p1[8]; External2Helix(this,p1); - p1[6]=TMath::Sin(p1[2]); p1[7]=TMath::Cos(p1[2]); - Double_t p2[8]; External2Helix(p,p2); - p2[6]=TMath::Sin(p2[2]); p2[7]=TMath::Cos(p2[2]); - - - Double_t r1[3],g1[3],gg1[3]; Double_t t1=0.; - Evaluate(p1,t1,r1,g1,gg1); - Double_t r2[3],g2[3],gg2[3]; Double_t t2=0.; - Evaluate(p2,t2,r2,g2,gg2); - - Double_t dx=r2[0]-r1[0], dy=r2[1]-r1[1], dz=r2[2]-r1[2]; - Double_t dm=dx*dx/dx2 + dy*dy/dy2 + dz*dz/dz2; - - Int_t max=27; - while (max--) { - Double_t gt1=-(dx*g1[0]/dx2 + dy*g1[1]/dy2 + dz*g1[2]/dz2); - Double_t gt2=+(dx*g2[0]/dx2 + dy*g2[1]/dy2 + dz*g2[2]/dz2); - Double_t h11=(g1[0]*g1[0] - dx*gg1[0])/dx2 + - (g1[1]*g1[1] - dy*gg1[1])/dy2 + - (g1[2]*g1[2] - dz*gg1[2])/dz2; - Double_t h22=(g2[0]*g2[0] + dx*gg2[0])/dx2 + - (g2[1]*g2[1] + dy*gg2[1])/dy2 + - (g2[2]*g2[2] + dz*gg2[2])/dz2; - Double_t h12=-(g1[0]*g2[0]/dx2 + g1[1]*g2[1]/dy2 + g1[2]*g2[2]/dz2); - - Double_t det=h11*h22-h12*h12; - - Double_t dt1,dt2; - if (TMath::Abs(det)<1.e-33) { - //(quasi)singular Hessian - dt1=-gt1; dt2=-gt2; - } else { - dt1=-(gt1*h22 - gt2*h12)/det; - dt2=-(h11*gt2 - h12*gt1)/det; - } - - if ((dt1*gt1+dt2*gt2)>0) {dt1=-dt1; dt2=-dt2;} - - //check delta(phase1) ? - //check delta(phase2) ? - - if (TMath::Abs(dt1)/(TMath::Abs(t1)+1.e-3) < 1.e-4) - if (TMath::Abs(dt2)/(TMath::Abs(t2)+1.e-3) < 1.e-4) { - if ((gt1*gt1+gt2*gt2) > 1.e-4/dy2/dy2) - AliWarning(" stopped at not a stationary point !"); - Double_t lmb=h11+h22; lmb=lmb-TMath::Sqrt(lmb*lmb-4*det); - if (lmb < 0.) - AliWarning(" stopped at not a minimum !"); - break; - } - - Double_t dd=dm; - for (Int_t div=1 ; ; div*=2) { - Evaluate(p1,t1+dt1,r1,g1,gg1); - Evaluate(p2,t2+dt2,r2,g2,gg2); - dx=r2[0]-r1[0]; dy=r2[1]-r1[1]; dz=r2[2]-r1[2]; - dd=dx*dx/dx2 + dy*dy/dy2 + dz*dz/dz2; - if (dd512) { - AliWarning(" overshoot !"); break; - } - } - dm=dd; - - t1+=dt1; - t2+=dt2; - - } - - if (max<=0) AliWarning(" too many iterations !"); - - Double_t cs=TMath::Cos(GetAlpha()); - Double_t sn=TMath::Sin(GetAlpha()); - xthis=r1[0]*cs + r1[1]*sn; - - cs=TMath::Cos(p->GetAlpha()); - sn=TMath::Sin(p->GetAlpha()); - xp=r2[0]*cs + r2[1]*sn; - - return TMath::Sqrt(dm*TMath::Sqrt(dy2*dz2)); -} - -Double_t AliKalmanTrack:: -PropagateToDCA(AliKalmanTrack *p, Double_t d, Double_t x0) { - //-------------------------------------------------------------- - // Propagates this track and the argument track to the position of the - // distance of closest approach. - // Returns the (weighed !) distance of closest approach. - //-------------------------------------------------------------- - Double_t xthis,xp; - Double_t dca=GetDCA(p,xthis,xp); - - if (!PropagateTo(xthis,d,x0)) { - //AliWarning(" propagation failed !"); - return 1e+33; - } - - if (!p->PropagateTo(xp,d,x0)) { - //AliWarning(" propagation failed !"; - return 1e+33; - } - - return dca; -}