#include "AliESDtrack.h"
#include "AliKalmanTrack.h"
+#include "../ITS/AliITStrackV2.h"
ClassImp(AliESDtrack)
AliESDtrack::AliESDtrack() :
fFlags(0),
fITSncls(0),
-fTPCncls(0)
+fTPCncls(0),
+fVertex(kFALSE)
{
//
// The default ESD constructor
}
//_______________________________________________________________________
-Bool_t AliESDtrack::UpdateTrackParams(const AliKalmanTrack *t, ULong_t flags) {
+Bool_t AliESDtrack::UpdateTrackParams(AliKalmanTrack *t, ULong_t flags) {
//
// This function updates track's running parameters
//
switch (flags) {
- case kITSin: case kITSout: case kITSrefit:
+
+ case kITSin:
+ case kITSout:
+ case kITSrefit:
fITSncls=t->GetNumberOfClusters();
fITSchi2=t->GetChi2();
for (Int_t i=0;i<fITSncls;i++) fITSindex[i]=t->GetClusterIndex(i);
fITSsignal=t->GetPIDsignal();
break;
+
case kTPCin: case kTPCout: case kTPCrefit:
fTPCncls=t->GetNumberOfClusters();
fTPCchi2=t->GetChi2();
fRalpha=t->GetAlpha();
t->GetExternalParameters(fRx,fRp);
t->GetExternalCovariance(fRc);
+
+ if (flags == kITSin)
+ {
+ AliITStrackV2* itstrack = dynamic_cast<AliITStrackV2*>(t);
+ if (itstrack)
+ {
+ itstrack->PropagateTo(3.,0.0028,65.19);
+ itstrack->PropagateToVertex();
+
+ Double_t ralpha=t->GetAlpha();
+ Double_t rx; // X-coordinate of the track reference plane
+ Double_t rp[5]; // external track parameters
+ t->GetExternalParameters(rx,rp);
+
+ Double_t phi=TMath::ASin(rp[2]) + ralpha;
+ Double_t pt=1./TMath::Abs(rp[4]);
+ Double_t r=TMath::Sqrt(rx*rx + rp[0]*rp[0]);
+
+ fVertexX=r*TMath::Cos(phi);
+ fVertexY=r*TMath::Sin(phi);
+ fVertexZ=rp[1];
+
+ fVertexPx = pt*TMath::Cos(phi);
+ fVertexPy = pt*TMath::Sin(phi);
+ fVertexPz = pt*rp[3];
+ fVertex = kTRUE;
+ }
+ }
+
return kTRUE;
}
for (Int_t i=0; i<kSPECIES; i++) p[i]=fR[i];
}
+void AliESDtrack::GetVertexXYZ(Double_t& x,Double_t& y, Double_t&z) const
+{
+//returns track position in DCA to vertex
+ x = fVertexX;
+ y = fVertexY;
+ z = fVertexZ;
+}
+void AliESDtrack::GetVertexPxPyPz(Double_t& px,Double_t& py, Double_t& pz) const
+{
+//returns track momentum in DCA to vertex
+ px = fVertexPx;
+ py = fVertexPy;
+ pz = fVertexPz;
+}
virtual ~AliESDtrack() {}
void SetStatus(ULong_t flags) {fFlags|=flags;}
void ResetStatus(ULong_t flags) {fFlags&=~flags;}
- Bool_t UpdateTrackParams(const AliKalmanTrack *t, ULong_t flags);
+ Bool_t UpdateTrackParams(AliKalmanTrack *t, ULong_t flags);
void SetIntegratedLength(Double_t l) {fTrackLength=l;}
void SetIntegratedTimes(const Double_t *times);
void SetESDpid(const Double_t *p);
void GetTOFpid(Double_t *p) const;
UInt_t GetTOFcluster() const {return fTOFindex;}
void SetTOFcluster(UInt_t index) {fTOFindex=index;}
+
+ void GetVertexXYZ(Double_t& x,Double_t& y, Double_t&z) const;
+ void GetVertexPxPyPz(Double_t& px,Double_t& py, Double_t& pz) const;
+ Bool_t HasVertexParameters() const {return fVertex;}
enum {
kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
UInt_t fITSindex[6]; //! indices of the assigned ITS clusters
Float_t fITSsignal; // detector's PID signal
Float_t fITSr[kSPECIES]; //! "detector response probabilities" (for the PID)
-
+
+ Double_t fVertexX;
+ Double_t fVertexY;
+ Double_t fVertexZ;
+
+ Double_t fVertexPx;
+ Double_t fVertexPy;
+ Double_t fVertexPz;
+
+ Bool_t fVertex;
+
// TPC related track information
Float_t fTPCchi2; // chi2 in the TPC
Int_t fTPCncls; // number of clusters assigned in the TPC