X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=TOF%2FAliTOFtrack.cxx;h=eee16aaf28bd4c966fdc71a3ab751b40c3bddb5c;hp=497ecedf7d6137ad92505e610ceee19f457e5e31;hb=42c3320f10299a3be0e97ea3b60006c6af5a5dae;hpb=ac359ffef49c8392bc82c42e5bf92eabf8ee3c80 diff --git a/TOF/AliTOFtrack.cxx b/TOF/AliTOFtrack.cxx index 497ecedf7d6..eee16aaf28b 100644 --- a/TOF/AliTOFtrack.cxx +++ b/TOF/AliTOFtrack.cxx @@ -28,7 +28,6 @@ #include "AliESDtrack.h" #include "AliTracker.h" -#include "AliTOFGeometryV5.h" #include "AliTOFGeometry.h" #include "AliTOFtrack.h" @@ -38,8 +37,7 @@ ClassImp(AliTOFtrack) AliTOFtrack::AliTOFtrack() : AliKalmanTrack(), fSeedInd(-1), - fSeedLab(-1), - fTOFgeometry(0) + fSeedLab(-1) { // // Default constructor. @@ -50,8 +48,7 @@ AliTOFtrack::AliTOFtrack() : AliTOFtrack::AliTOFtrack(const AliTOFtrack& t) : AliKalmanTrack(t), fSeedInd(t.fSeedInd), - fSeedLab(t.fSeedLab), - fTOFgeometry(new AliTOFGeometryV5()) + fSeedLab(t.fSeedLab) { // // Copy constructor. @@ -62,55 +59,93 @@ AliTOFtrack::AliTOFtrack(const AliTOFtrack& t) : AliTOFtrack::AliTOFtrack(const AliESDtrack& t) : AliKalmanTrack(), fSeedInd(-1), - fSeedLab(-1), - fTOFgeometry(new AliTOFGeometryV5()) + fSeedLab(-1) { // // Constructor from AliESDtrack // SetLabel(t.GetLabel()); SetChi2(0.); - SetMass(t.GetMass()); + SetMass(t.GetMassForTracking()); Set(t.GetX(),t.GetAlpha(),t.GetParameter(),t.GetCovariance()); if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return; StartTimeIntegral(); - Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times); - SetIntegratedLength(t.GetIntegratedLength()); + Double_t times[10]; + for(Int_t isp=0;ispfTOFgeometry=source.fTOFgeometry; return *this; } //_____________________________________________________________________________ -Bool_t AliTOFtrack::PropagateTo(Double_t xk,Double_t x0,Double_t rho) -{ +Bool_t AliTOFtrack::PropagateTo(Double_t xk,Double_t /*x0*/,Double_t /*rho*/) + { + // // Propagates a track of particle with mass=pm to a reference plane // defined by x=xk through media of density=rho and radiationLength=x0 + // if (xk == GetX()) return kTRUE; - Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ(); + Double_t oldX=GetX();//, oldY=GetY(), oldZ=GetZ(); + Double_t start[3], end[3], mparam[7]; - Double_t bz=GetBz(); - if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE; + /* get start position */ + GetXYZ(start); + + /* propagate the track */ + Double_t b[3];GetBxByBz(b); + if (!AliExternalTrackParam::PropagateToBxByBz(xk,b)) return kFALSE; + // OLD used code + //Double_t bz=GetBz(); + //if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE; + + /* get end position */ + GetXYZ(end); + /* add time step to integral */ +#if 0 /*** OLD ***/ Double_t d = TMath::Sqrt((GetX()-oldX)*(GetX()-oldX) + (GetY()-oldY)*(GetY()-oldY) + (GetZ()-oldZ)*(GetZ()-oldZ)); if (IsStartedTimeIntegral() && GetX()>oldX) AddTimeStep(d); +#endif + Double_t d = TMath::Sqrt((end[0]-start[0])*(end[0]-start[0]) + + (end[1]-start[1])*(end[1]-start[1]) + + (end[2]-start[2])*(end[2]-start[2])); + if (IsStartedTimeIntegral() && GetX()>oldX) AddTimeStep(d); + + /* get material budget from tracker */ + AliTracker::MeanMaterialBudget(start, end, mparam); + Double_t xTimesRho = mparam[4]*mparam[0]; + if (oldX < xk) { // CZ + xTimesRho = -xTimesRho; // it should be negative in case of outward + // propagation (--> energy decreases) + } // CZ + Double_t xOverX0 = mparam[1]; + + /* correct for mean material */ + if (!AliExternalTrackParam::CorrectForMeanMaterial(xOverX0,xTimesRho,GetMass())) return kFALSE; + +#if 0 /*** OLD ***/ if (!AliExternalTrackParam::CorrectForMaterial(d*rho/x0,x0,GetMass())) return kFALSE; +#endif /* //Energy losses************************ @@ -133,36 +168,105 @@ Bool_t AliTOFtrack::PropagateToInnerTOF() // Propagates a track of particle with mass=pm to a reference plane // defined by x=xk through media of density=rho and radiationLength=x0 + //const Double_t kAlphac = TMath::Pi()/9.0; // 20 degree + const Double_t kAlphac = AliTOFGeometry::GetAlpha(); // 20 degree + const Double_t kTalphac = TMath::Tan(kAlphac*0.5); + + //const Double_t kStepSize = 0.1; // [cm] Step size + const Double_t kStepSize = 0.5; // [cm] Step size + + Double_t x = GetX(); + //Double_t bz = GetBz(); + + //Double_t xyz0[3]; + //Double_t xyz1[3]; + //Double_t y; + //Double_t z; - Double_t ymax=fTOFgeometry->RinTOF()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha()); + Int_t nsteps = (Int_t)((AliTOFGeometry::Rmin()-x)/kStepSize); + for (Int_t istep=0; istep AliTOFGeometry::Rmin()) ? -1.0 : 1.0; + + x = GetX()+dir*kStepSize; + if ( x GetX()*kTalphac) { + if (!(Rotate(kAlphac))) return kFALSE; + } else if (GetY() < -GetX()*kTalphac) { + if (!(Rotate(-kAlphac))) return kFALSE; + } + + } + + //Bool_t check = PropagateTo(AliTOFGeometry::RinTOF()); + Bool_t check = PropagateTo(AliTOFGeometry::RinTOF(),0.,0.); /* passing 0.,0. as arguments since now + this method queries TGeo for material budget + */ + + if (!check) return kFALSE; + + if (GetY() > GetX()*kTalphac) { + if (!(Rotate(kAlphac))) return kFALSE; + } else if (GetY() < -GetX()*kTalphac) { + if (!(Rotate(-kAlphac))) return kFALSE; + } + + return kTRUE; + +} + +//_____________________________________________________________________________ +Bool_t AliTOFtrack::PropagateToInnerTOFold() +{ + // Propagates a track of particle with mass=pm to a reference plane + // defined by x=xk through media of density=rho and radiationLength=x0 + + + Double_t ymax=AliTOFGeometry::RinTOF()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha()); Bool_t skip = kFALSE; - Double_t y=GetYat(fTOFgeometry->RinTOF(),skip); + Double_t y=GetYat(AliTOFGeometry::RinTOF(),skip); if (skip) { return kFALSE; } if (y > ymax) { - if (!Rotate(AliTOFGeometry::GetAlpha())) { - return kFALSE; - } + if (!Rotate(AliTOFGeometry::GetAlpha())) return kFALSE; } else if (y <-ymax) { - if (!Rotate(-AliTOFGeometry::GetAlpha())) { - return kFALSE; - } + if (!Rotate(-AliTOFGeometry::GetAlpha())) return kFALSE; } - Double_t x = GetX(); - Int_t nsteps=Int_t((370.-x)/0.5); // 0.5 cm Steps + Int_t nsteps=Int_t((AliTOFGeometry::Rmin()-x)/0.5); // 0.5 cm Steps for (Int_t istep=0;istepRinTOF()))return 0; - + if (!(PropagateTo(AliTOFGeometry::RinTOF()))) return kFALSE; + return kTRUE; } @@ -170,8 +274,9 @@ Bool_t AliTOFtrack::PropagateToInnerTOF() //_________________________________________________________________________ Double_t AliTOFtrack::GetPredictedChi2(const AliCluster3D *c) const { // + // Estimate the chi2 of the space point "c" with its cov. matrix elements // - // + Double_t p[3]={c->GetX(), c->GetY(), c->GetZ()}; Double_t covyz[3]={c->GetSigmaY2(), c->GetSigmaYZ(), c->GetSigmaZ2()}; Double_t covxyz[3]={c->GetSigmaX2(), c->GetSigmaXY(), c->GetSigmaXZ()}; @@ -180,7 +285,7 @@ Double_t AliTOFtrack::GetPredictedChi2(const AliCluster3D *c) const { //_________________________________________________________________________ Bool_t AliTOFtrack::PropagateTo(const AliCluster3D *c) { // - // + // Propagates a track to the plane containing cluster 'c' // Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ(); Double_t p[3]={c->GetX(), c->GetY(), c->GetZ()}; @@ -194,7 +299,15 @@ Bool_t AliTOFtrack::PropagateTo(const AliCluster3D *c) { (GetZ()-oldZ)*(GetZ()-oldZ)); if (GetX() GetX()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha())) { + if (!(Rotate(AliTOFGeometry::GetAlpha()))) return kFALSE; + } else if (GetY() < -GetX()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha())) { + if (!(Rotate(-AliTOFGeometry::GetAlpha()))) return kFALSE; + } + return kTRUE; } //_________________________________________________________________________ @@ -221,15 +334,6 @@ Int_t AliTOFtrack::Compare(const TObject *o) const { return 0; } -//_____________________________________________________________________________ -Double_t AliTOFtrack::GetBz() const { - // - // returns Bz component of the magnetic field (kG) - // - if (AliTracker::UniformField()) return AliTracker::GetBz(); - Double_t r[3]; GetXYZ(r); - return AliTracker::GetBz(r); -} //_____________________________________________________________________________ void AliTOFtrack::GetPropagationParameters(Double_t *param) {