#include "AliESDtrack.h"
#include "AliTracker.h"
-#include "AliTOFGeometryV5.h"
#include "AliTOFGeometry.h"
#include "AliTOFtrack.h"
AliTOFtrack::AliTOFtrack() :
AliKalmanTrack(),
fSeedInd(-1),
- fSeedLab(-1),
- fTOFgeometry(0)
+ fSeedLab(-1)
{
//
// Default constructor.
AliTOFtrack::AliTOFtrack(const AliTOFtrack& t) :
AliKalmanTrack(t),
fSeedInd(t.fSeedInd),
- fSeedLab(t.fSeedLab),
- fTOFgeometry(new AliTOFGeometryV5())
+ fSeedLab(t.fSeedLab)
{
//
// Copy constructor.
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;isp<AliPID::kSPECIESC;isp++){
+ times[isp] = t.GetIntegratedTimesOld(isp); // in ps
+ }
+
+ SetIntegratedTimes(times);
+ SetIntegratedLength(t.GetIntegratedLengthOld());
}
//____________________________________________________________________________
-AliTOFtrack& AliTOFtrack::operator=(const AliTOFtrack &source)
+AliTOFtrack& AliTOFtrack::operator=(const AliTOFtrack &/*source*/)
{
// ass. op.
- this->fTOFgeometry=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************************
// 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<nsteps; istep++){
+
+ // Critical alpha - cross sector indication
+
+ Double_t dir = (GetX() > AliTOFGeometry::Rmin()) ? -1.0 : 1.0;
+
+ x = GetX()+dir*kStepSize;
+ if ( x<GetX() && GetX()<AliTOFGeometry::Rmin()) {
+ AliDebug(1,Form("Track doesn't reach rho=%f",AliTOFGeometry::Rmin()));
+ return kFALSE;
+ }
+
+ //GetXYZ(xyz0);
+ //bz = GetBz();
+ //GetXYZAt(x,bz,xyz1);
+ //AliExternalTrackParam::GetYAt(x,bz,y);
+ //AliExternalTrackParam::GetZAt(x,bz,z);
+
+ if (!(PropagateTo(x,0.,0.))) { /* passing 0.,0. as arguments since now
+ this method queries TGeo for material budget
+ */
+ return kFALSE;
+ }
+
+ if (GetY() > 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;istep<nsteps;istep++){
Float_t xp = x+istep*0.5;
- Double_t param[2];
- GetPropagationParameters(param);
- PropagateTo(xp,param[0],param[1]);
+ // GetPropagationParameters(param);
+ if (!(PropagateTo(xp,0.,0.))) { /* passing 0.,0. as arguments since now
+ this method queries TGeo for material budget
+ */
+ return kFALSE;
+ }
}
- if(!PropagateTo(fTOFgeometry->RinTOF()))return 0;
-
+ if (!(PropagateTo(AliTOFGeometry::RinTOF()))) return kFALSE;
+
return kTRUE;
}
//_________________________________________________________________________
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()};
//_________________________________________________________________________
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()};
(GetZ()-oldZ)*(GetZ()-oldZ));
if (GetX()<oldX) d=-d;
AddTimeStep(d);
+
}
+
+ if (GetY() > 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;
}
//_________________________________________________________________________
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) {