]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODTrack.cxx
Solved a bug in AliRsnPair and removed an excess of printouts in AliRsnCutSet
[u/mrichter/AliRoot.git] / STEER / AliAODTrack.cxx
index c440da1da9483db8eb459776affa94d56b7b1afb..50ab8a463db9bcb9712221fb3cbbf9f156ca4821 100644 (file)
@@ -22,6 +22,8 @@
 //-------------------------------------------------------------------------
 
 #include "AliLog.h"
+#include "AliExternalTrackParam.h"
+#include "AliVVertex.h"
 #include "AliAODTrack.h"
 
 ClassImp(AliAODTrack)
@@ -29,12 +31,16 @@ ClassImp(AliAODTrack)
 //______________________________________________________________________________
 AliAODTrack::AliAODTrack() : 
   AliVTrack(),
+  fRAtAbsorberEnd(0.),
   fChi2perNDF(-999.),
   fChi2MatchTrigger(0.),
   fFlags(0),
   fLabel(-999),
   fITSMuonClusterMap(0),
   fFilterMap(0),
+  fTPCClusterMap(),
+  fTPCSharedMap(),
+  fTPCnclsF(0),
   fID(-999),
   fCharge(-99),
   fType(kUndef),
@@ -69,12 +75,16 @@ AliAODTrack::AliAODTrack(Short_t id,
                         UInt_t selectInfo,
                         Float_t chi2perNDF) :
   AliVTrack(),
+  fRAtAbsorberEnd(0.),
   fChi2perNDF(chi2perNDF),
   fChi2MatchTrigger(0.),
   fFlags(0),
   fLabel(label),
   fITSMuonClusterMap(0),
   fFilterMap(selectInfo),
+  fTPCClusterMap(),
+  fTPCSharedMap(),
+  fTPCnclsF(0),
   fID(id),
   fCharge(charge),
   fType(ttype),
@@ -113,12 +123,16 @@ AliAODTrack::AliAODTrack(Short_t id,
                         UInt_t selectInfo,
                         Float_t chi2perNDF) :
   AliVTrack(),
+  fRAtAbsorberEnd(0.),
   fChi2perNDF(chi2perNDF),
   fChi2MatchTrigger(0.),
   fFlags(0),
   fLabel(label),
   fITSMuonClusterMap(0),
   fFilterMap(selectInfo),
+  fTPCClusterMap(),
+  fTPCSharedMap(),
+  fTPCnclsF(0),
   fID(id),
   fCharge(charge),
   fType(ttype),
@@ -151,12 +165,16 @@ AliAODTrack::~AliAODTrack()
 //______________________________________________________________________________
 AliAODTrack::AliAODTrack(const AliAODTrack& trk) :
   AliVTrack(trk),
+  fRAtAbsorberEnd(trk.fRAtAbsorberEnd),
   fChi2perNDF(trk.fChi2perNDF),
   fChi2MatchTrigger(trk.fChi2MatchTrigger),
   fFlags(trk.fFlags),
   fLabel(trk.fLabel),
   fITSMuonClusterMap(trk.fITSMuonClusterMap),
   fFilterMap(trk.fFilterMap),
+  fTPCClusterMap(trk.fTPCClusterMap),
+  fTPCSharedMap(trk.fTPCSharedMap),
+  fTPCnclsF(trk.fTPCnclsF),
   fID(trk.fID),
   fCharge(trk.fCharge),
   fType(trk.fType),
@@ -192,6 +210,8 @@ AliAODTrack& AliAODTrack::operator=(const AliAODTrack& trk)
     SetXYAtDCA(trk.XAtDCA(), trk.YAtDCA());
     SetPxPyPzAtDCA(trk.PxAtDCA(), trk.PyAtDCA(), trk.PzAtDCA());
     
+    fRAtAbsorberEnd = trk.fRAtAbsorberEnd;
+    
     fChi2perNDF = trk.fChi2perNDF;
     fChi2MatchTrigger = trk.fChi2MatchTrigger;
 
@@ -330,27 +350,22 @@ AliAODTrack::AODTrkPID_t AliAODTrack::GetMostProbablePID() const
   // Returns the most probable PID array element.
   
   Int_t nPID = 10;
-  if (fPID) {
-    AODTrkPID_t loc = kUnknown;
-    Double_t max = 0.;
-    Bool_t allTheSame = kTRUE;
-    
-    for (Int_t iPID = 0; iPID < nPID; iPID++) {
-      if (fPID[iPID] >= max) {
-       if (fPID[iPID] > max) {
-         allTheSame = kFALSE;
-         max = fPID[iPID];
-         loc = (AODTrkPID_t)iPID;
-       } else {
-         allTheSame = kTRUE;
-       }
+  AODTrkPID_t loc = kUnknown;
+  Double_t max = 0.;
+  Bool_t allTheSame = kTRUE;
+  
+  for (Int_t iPID = 0; iPID < nPID; iPID++) {
+    if (fPID[iPID] >= max) {
+      if (fPID[iPID] > max) {
+       allTheSame = kFALSE;
+       max = fPID[iPID];
+       loc = (AODTrkPID_t)iPID;
+      } else {
+       allTheSame = kTRUE;
       }
     }
-    
-    return allTheSame ? kUnknown : loc;
-  } else {
-    return kUnknown;
   }
+  return allTheSame ? kUnknown : loc;
 }
 
 //______________________________________________________________________________
@@ -508,3 +523,45 @@ Bool_t AliAODTrack::MatchTriggerDigits() const
   return (nMatchedChambers >= 2);
 }
 
+//______________________________________________________________________________
+Bool_t AliAODTrack::PropagateToDCA(const AliVVertex *vtx, 
+    Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3])
+{
+  // compute impact parameters to the vertex vtx and their covariance matrix
+  // b is the Bz, needed to propagate correctly the track to vertex 
+  // only the track parameters are update after the propagation (pos and mom),
+  // not the covariance matrix. This is OK for propagation over short distance
+  // inside the beam pipe.
+  // return kFALSE is something went wrong
+
+  // convert to AliExternalTrackParam
+  AliExternalTrackParam etp(this);  
+
+  Float_t xstart = etp.GetX();
+  if(xstart>3.) {
+    AliError("This method can be used only for propagation inside the beam pipe");
+    return kFALSE; 
+  }
+
+  if(!etp.PropagateToDCA(vtx,b,maxd,dz,covar)) return kFALSE;
+
+  // update track position and momentum
+  Double_t mom[3];
+  etp.GetPxPyPz(mom);
+  SetP(mom,kTRUE);
+  etp.GetXYZ(mom);
+  SetPosition(mom,kFALSE);
+
+
+  return kTRUE;
+}
+
+//______________________________________________________________________________
+Bool_t AliAODTrack::GetPxPyPz(Double_t p[3]) const 
+{
+    //---------------------------------------------------------------------
+    // This function returns the global track momentum components
+    //---------------------------------------------------------------------
+  p[0]=Px(); p[1]=Py(); p[2]=Pz();
+  return kTRUE;
+}