From 5773defdd4c0489838c2eb7bcfaadca83da2a390 Mon Sep 17 00:00:00 2001 From: hristov Date: Sat, 6 May 2006 20:09:18 +0000 Subject: [PATCH] Return the most probable momentum if the magnetic field is too weak and the momentum measurement too inprecise (Yu.Belikov) --- ITS/AliITStrackV2.cxx | 10 ++++++ ITS/AliITStrackV2.h | 7 ++-- STEER/AliESDtrack.cxx | 4 ++- STEER/AliExternalTrackParam.cxx | 5 ++- STEER/AliExternalTrackParam.h | 6 +++- TPC/AliTPCtrack.cxx | 10 ++++++ TPC/AliTPCtrack.h | 7 ++-- TRD/AliTRDtrack.cxx | 63 ++++----------------------------- TRD/AliTRDtrack.h | 11 ++++++ 9 files changed, 56 insertions(+), 67 deletions(-) diff --git a/ITS/AliITStrackV2.cxx b/ITS/AliITStrackV2.cxx index 1ee79a2562f..60834d30969 100644 --- a/ITS/AliITStrackV2.cxx +++ b/ITS/AliITStrackV2.cxx @@ -760,3 +760,13 @@ PropagateToDCA(AliKalmanTrack *p, Double_t d, Double_t x0) { return dca; } + +Double_t AliITStrackV2::Get1Pt() const { + //-------------------------------------------------------------- + // Returns the inverse Pt (1/GeV/c) + // (or 1/"most probable pt", if the field is too weak) + //-------------------------------------------------------------- + if (TMath::Abs(GetLocalConvConst()) > kVeryBigConvConst) + return 1./kMostProbableMomentum/TMath::Sqrt(1.+ GetTgl()*GetTgl()); + return (TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); +} diff --git a/ITS/AliITStrackV2.h b/ITS/AliITStrackV2.h index c416063d4a4..d3fa37d81be 100644 --- a/ITS/AliITStrackV2.h +++ b/ITS/AliITStrackV2.h @@ -65,9 +65,7 @@ public: Double_t GetSnp() const {return fP2;} Double_t GetTgl() const {return fP3;} Double_t GetC() const {return fP4;} - Double_t Get1Pt() const { - return (TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); - } + Double_t Get1Pt() const; Double_t GetD(Double_t x=0, Double_t y=0) const; Double_t GetZat(Double_t x=0) const; @@ -118,7 +116,8 @@ void AliITStrackV2::GetExternalParameters(Double_t& xr, Double_t x[5]) const { // This function return external ITS track representation //--------------------------------------------------------------------- xr=fX; - x[0]=GetY(); x[1]=GetZ(); x[2]=GetSnp(); x[3]=GetTgl(); x[4]=Get1Pt(); + x[0]=GetY(); x[1]=GetZ(); x[2]=GetSnp(); x[3]=GetTgl(); + x[4]=(TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); } inline diff --git a/STEER/AliESDtrack.cxx b/STEER/AliESDtrack.cxx index d9ff234de1c..dbb51329bda 100644 --- a/STEER/AliESDtrack.cxx +++ b/STEER/AliESDtrack.cxx @@ -830,7 +830,9 @@ Bool_t AliESDtrack::RelateToVertex if (d > maxd) return kFALSE; //Propagate to the DCA - Double_t crv=0.299792458e-3*b*GetParameter()[4]; + Double_t crv=kB2C*b*GetParameter()[4]; + if (TMath::Abs(b) < kAlmost0Field) crv=0.; + Double_t tgfv=-(crv*x - snp)/(crv*y + TMath::Sqrt(1.-snp*snp)); sn=tgfv/TMath::Sqrt(1.+ tgfv*tgfv); if (TMath::Abs(tgfv)>0.) cs = sn/tgfv; diff --git a/STEER/AliExternalTrackParam.cxx b/STEER/AliExternalTrackParam.cxx index 15e5ced21dc..5840784cdde 100644 --- a/STEER/AliExternalTrackParam.cxx +++ b/STEER/AliExternalTrackParam.cxx @@ -91,7 +91,7 @@ Double_t AliExternalTrackParam::GetP() const { // This function returns the track momentum // Results for (nearly) straight tracks are meaningless ! //--------------------------------------------------------------------- - if (TMath::Abs(fP[4])<=0) return 1e+33; + if (TMath::Abs(fP[4])<=0) return kVeryBig; return TMath::Sqrt(1.+ fP[3]*fP[3])/TMath::Abs(fP[4]); } @@ -109,6 +109,7 @@ Double_t AliExternalTrackParam::GetD(Double_t x,Double_t y,Double_t b) const { // with respect to a point with global coordinates (x,y) // in the magnetic field "b" (kG) //------------------------------------------------------------------ + if (TMath::Abs(b) < kAlmost0Field) return GetLinearD(x,y); Double_t rp4=kB2C*b*fP[4]; Double_t xt=fX, yt=fP[0]; @@ -236,6 +237,8 @@ Bool_t AliExternalTrackParam::PropagateTo(Double_t xk, Double_t b) { if (TMath::Abs(dx)<=0) return kTRUE; Double_t crv=kB2C*b*fP[4]; + if (TMath::Abs(b) < kAlmost0Field) crv=0.; + Double_t f1=fP[2], f2=f1 + crv*dx; if (TMath::Abs(f1) >= kAlmost1) return kFALSE; if (TMath::Abs(f2) >= kAlmost1) return kFALSE; diff --git a/STEER/AliExternalTrackParam.h b/STEER/AliExternalTrackParam.h index 59909970410..7d42e69220e 100644 --- a/STEER/AliExternalTrackParam.h +++ b/STEER/AliExternalTrackParam.h @@ -20,11 +20,15 @@ *****************************************************************************/ #include "TObject.h" -const Double_t kB2C=0.299792458e-3; const Double_t kAlmost1=0.999; const Double_t kAlmost0=1e-33; const Double_t kVeryBig=1./kAlmost0; +const Double_t kB2C=0.299792458e-3; +const Double_t kAlmost0Field=1.e-13; +const Double_t kVeryBigConvConst=1/kB2C/kAlmost0Field; +const Double_t kMostProbableMomentum=0.35; + class AliKalmanTrack; class AliStrLine; class AliESDVertex; diff --git a/TPC/AliTPCtrack.cxx b/TPC/AliTPCtrack.cxx index 3a3a3695074..d6733b39e26 100644 --- a/TPC/AliTPCtrack.cxx +++ b/TPC/AliTPCtrack.cxx @@ -740,3 +740,13 @@ void AliTPCtrack::UpdatePoints() } // } + +Double_t AliTPCtrack::Get1Pt() const { + //-------------------------------------------------------------- + // Returns the inverse Pt (1/GeV/c) + // (or 1/"most probable pt", if the field is too weak) + //-------------------------------------------------------------- + if (TMath::Abs(GetLocalConvConst()) > kVeryBigConvConst) + return 1./kMostProbableMomentum/TMath::Sqrt(1.+ GetTgl()*GetTgl()); + return (TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); +} diff --git a/TPC/AliTPCtrack.h b/TPC/AliTPCtrack.h index 3fff581633d..472830825c4 100644 --- a/TPC/AliTPCtrack.h +++ b/TPC/AliTPCtrack.h @@ -50,9 +50,7 @@ public: Double_t GetY() const {return fP0;} Double_t GetZ() const {return fP1;} Double_t GetSnp() const {return fX*fP4 - fP2;} - Double_t Get1Pt() const { - return (TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); - } + Double_t Get1Pt() const; Double_t GetTgl() const {return fP3;} Double_t GetSigmaY2() const {return fC00;} @@ -161,7 +159,8 @@ inline void AliTPCtrack::GetExternalParameters(Double_t& xr, Double_t x[5]) const { // This function return external TPC track representation xr=fX; - x[0]=GetY(); x[1]=GetZ(); x[2]=GetSnp(); x[3]=GetTgl(); x[4]=Get1Pt(); + x[0]=GetY(); x[1]=GetZ(); x[2]=GetSnp(); x[3]=GetTgl(); + x[4]=(TMath::Sign(1e-9,fP4) + fP4)*GetLocalConvConst(); } inline void AliTPCtrack::GetXYZ(Float_t r[3]) const { diff --git a/TRD/AliTRDtrack.cxx b/TRD/AliTRDtrack.cxx index bae91573dda..488ec45ec54 100644 --- a/TRD/AliTRDtrack.cxx +++ b/TRD/AliTRDtrack.cxx @@ -420,40 +420,6 @@ AliTRDtrack &AliTRDtrack::operator=(const AliTRDtrack &t) } -// //____________________________________________________________________________ -// AliTRDtrack * AliTRDtrack::MakeTrack(const AliTrackReference *ref, Double_t mass) -// { -// // -// // Make dummy track from the track reference -// // negative mass means opposite charge -// // -// Double_t xx[5]; -// Double_t cc[15]; -// for (Int_t i=0;i<15;i++) cc[i]=0; -// Double_t x = ref->X(), y = ref->Y(), z = ref->Z(); -// Double_t alpha = TMath::ATan2(y,x); -// Double_t xr = TMath::Sqrt(x*x+y*y); -// xx[0] = 0; -// xx[1] = z; -// xx[3] = ref->Pz()/ref->Pt(); -// Float_t b[3]; -// Float_t xyz[3]={x,y,z}; -// Float_t convConst = 0; -// (AliKalmanTrack::GetFieldMap())->Field(xyz,b); -// convConst=1000/0.299792458/(1e-13 - b[2]); -// xx[4] = 1./(convConst*ref->Pt()); -// if (mass<0) xx[4]*=-1.; // negative mass - negative direction -// Double_t lcos = (x*ref->Px()+y*ref->Py())/(xr*ref->Pt()); -// Double_t lsin = TMath::Sin(TMath::ACos(lcos)); -// if (mass<0) lsin*=-1.; -// xx[2] = xr*xx[4]-lsin; -// AliTRDcluster cl; -// AliTRDtrack * track = new AliTRDtrack(&cl,100,xx,cc,xr,alpha); -// track->SetMass(TMath::Abs(mass)); -// track->StartTimeIntegral(); -// return track; -// } - //____________________________________________________________________________ Float_t AliTRDtrack::StatusForTOF() { @@ -477,22 +443,6 @@ Float_t AliTRDtrack::StatusForTOF() } -//____________________________________________________________________________ -void AliTRDtrack::GetExternalParameters(Double_t& xr, Double_t x[5]) const -{ - // - // This function returns external TRD track representation - // - - xr = fX; - x[0] = GetY(); - x[1] = GetZ(); - x[2] = GetSnp(); - x[3] = GetTgl(); - x[4] = Get1Pt(); - -} - //_____________________________________________________________________________ void AliTRDtrack::GetExternalCovariance(Double_t cc[15]) const { @@ -1442,12 +1392,13 @@ Int_t AliTRDtrack::GetSector() const //_____________________________________________________________________________ Double_t AliTRDtrack::Get1Pt() const { - // - // Returns 1 / pt - // - - return (TMath::Sign(1e-9,fC) + fC)*GetLocalConvConst(); - + //-------------------------------------------------------------- + // Returns the inverse Pt (1/GeV/c) + // (or 1/"most probable pt", if the field is too weak) + //-------------------------------------------------------------- + if (TMath::Abs(GetLocalConvConst()) > kVeryBigConvConst) + return 1./kMostProbableMomentum/TMath::Sqrt(1.+ GetTgl()*GetTgl()); + return (TMath::Sign(1e-9,fC) + fC)*GetLocalConvConst(); } //_____________________________________________________________________________ diff --git a/TRD/AliTRDtrack.h b/TRD/AliTRDtrack.h index 37f958af260..535ff43468b 100644 --- a/TRD/AliTRDtrack.h +++ b/TRD/AliTRDtrack.h @@ -172,4 +172,15 @@ class AliTRDtrack : public AliKalmanTrack { }; +inline +void AliTRDtrack::GetExternalParameters(Double_t& xr, Double_t x[5]) const +{ + // + // This function returns external TRD track representation + // + xr = fX; + x[0] = GetY(); x[1] = GetZ(); x[2] = GetSnp(); x[3] = GetTgl(); + x[4] = (TMath::Sign(1e-9,fC) + fC)*GetLocalConvConst(); +} + #endif -- 2.31.1