ROOT logo
#ifndef AliAODTrack_H
#define AliAODTrack_H
/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD track implementation of AliVTrack
//     Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------

#include <TRef.h>
#include <TBits.h>

#include "AliVTrack.h"
#include "AliAODVertex.h"
#include "AliAODRedCov.h"
#include "AliAODPid.h"
#include "AliExternalTrackParam.h"
 

class AliVVertex;
class AliDetectorPID;
class AliTPCdEdxInfo;
class AliAODEvent;
class AliTOFHeader;

class AliAODTrack : public AliVTrack {

 public:
  
  enum AODTrk_t {kUndef = -1, 
		 kPrimary, 
		 kFromDecayVtx, 
		 kOrphan}; // Please note that this flag does not guarantee that the particle is a Physical Primary, it simply identifies the algorithm which was used to filter the track. In general, the following associations are used (check the filter macro to be sure, as this comment may be outdated): 
                           //kPrimary: TPC only tracks, global constrained tracks, primary tracks, kink mothers; 
                           //kFromDecayVtx: bachelor tracks from cascades, tracks from V0, kink daughters; 
                           //kUndef:TRD matched tracks

  enum AODTrkBits_t {
    kIsDCA=BIT(14),   // set if fPosition is the DCA and not the position of the first point
    kUsedForVtxFit=BIT(15), // set if this track was used to fit the vertex it is attached to
    kUsedForPrimVtxFit=BIT(16), // set if this track was used to fit the primary vertex
    kIsTPCConstrained=BIT(17), // set if this track is a SA TPC track constrained to the SPD vertex, needs to be skipped in any track loop to avoid double counting
    kIsHybridTPCCG=BIT(18), // set if this track can be used as a hybrid track i.e. Gbobal tracks with certain slecetion plus the TPC constrained tracks that did not pass the selection
    kIsGlobalConstrained=BIT(19), // set if this track is a global track constrained to the vertex, needs to be skipped in any track loop to avoid double counting
    kIsHybridGCG=BIT(20)// set if this track can be used as a hybrid track i.e. tracks with certain slecetion plus the global constraint tracks that did not pass the selection
  };


  enum AODTrkFilterBits_t {
    kTrkTPCOnly            = BIT(0), // Standard TPC only tracks
    kTrkITSsa              = BIT(1), // ITS standalone
    kTrkITSConstrained     = BIT(2), // Pixel OR necessary for the electrons
    kTrkElectronsPID       = BIT(3),    // PID for the electrons
    kTrkGlobalNoDCA        = BIT(4), // standard cuts with very loose DCA
    kTrkGlobal             = BIT(5),  // standard cuts with tight DCA cut
    kTrkGlobalSDD          = BIT(6), // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster tracks selected by this cut are exclusive to those selected by the previous cut
    kTrkTPCOnlyConstrained = BIT(7) // TPC only tracks: TPConly information constrained to SPD vertex in the filter below
  };
  

  enum AODTrkPID_t {
    kElectron     =  0,
    kMuon         =  1,
    kPion         =  2,
    kKaon         =  3,
    kProton       =  4,
    kDeuteron     =  5,
    kTriton       =  6,
    kHelium3      =  7,
    kAlpha        =  8,
    kUnknown      =  9,
    kMostProbable = -1
  };

  AliAODTrack();
  AliAODTrack(Short_t id,
	      Int_t label,
	      Double_t p[3],
	      Bool_t cartesian,
	      Double_t x[3],
	      Bool_t dca,
	      Double_t covMatrix[21],
	      Short_t q,
	      UChar_t itsClusMap,
	      AliAODVertex *prodVertex,
	      Bool_t usedForVtxFit,
	      Bool_t usedForPrimVtxFit,
	      AODTrk_t ttype=kUndef,
	      UInt_t selectInfo=0,
	      Float_t chi2perNDF = -999.);


  AliAODTrack(Short_t id,
	      Int_t label,
	      Float_t p[3],
	      Bool_t cartesian,
	      Float_t x[3],
	      Bool_t dca,
	      Float_t covMatrix[21],
	      Short_t q,
	      UChar_t itsClusMap,
	      AliAODVertex *prodVertex,
	      Bool_t usedForVtxFit,
	      Bool_t usedForPrimVtxFit,
	      AODTrk_t ttype=kUndef,
	      UInt_t selectInfo=0,
	      Float_t chi2perNDF = -999.);

  virtual ~AliAODTrack();
  AliAODTrack(const AliAODTrack& trk); 
  AliAODTrack& operator=(const AliAODTrack& trk);

  // kinematics
  virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
  virtual Double_t Phi()       const { return fMomentum[1]; }
  virtual Double_t Theta()     const { return fMomentum[2]; }
  
  virtual Double_t Px() const { return fMomentum[0] * TMath::Cos(fMomentum[1]); }
  virtual Double_t Py() const { return fMomentum[0] * TMath::Sin(fMomentum[1]); }
  virtual Double_t Pz() const { return fMomentum[0] / TMath::Tan(fMomentum[2]); }
  virtual Double_t Pt() const { return fMomentum[0]; }
  virtual Double_t P()  const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
  virtual Bool_t   PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }

  virtual Double_t Xv() const { return GetProdVertex() ? GetProdVertex()->GetX() : -999.; }
  virtual Double_t Yv() const { return GetProdVertex() ? GetProdVertex()->GetY() : -999.; }
  virtual Double_t Zv() const { return GetProdVertex() ? GetProdVertex()->GetZ() : -999.; }
  virtual Bool_t   XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }

  Double_t Chi2perNDF()  const { return fChi2perNDF; }

  UShort_t GetTPCnclsS(Int_t i0=0,Int_t i1=159)  const { 
    UShort_t cl = fTPCSharedMap.CountBits(i0)-fTPCSharedMap.CountBits(i1);
    return cl;
  }
  
  UShort_t GetTPCncls(Int_t i0=0,Int_t i1=159)  const { 
    UShort_t cl = fTPCFitMap.CountBits(i0)-fTPCFitMap.CountBits(i1);
    if(cl==0)cl = fTPCClusterMap.CountBits(i0)-fTPCClusterMap.CountBits(i1);// backward compatibility
    return cl;
  }
  
  UShort_t GetTPCNcls()  const { return GetTPCncls(); }

  Int_t GetNcls(Int_t idet) const;

  virtual Double_t M() const { return M(GetMostProbablePID()); }
  Double_t M(AODTrkPID_t pid) const;
  virtual Double_t E() const { return E(GetMostProbablePID()); }
  Double_t E(AODTrkPID_t pid) const;
  Double_t E(Double_t m) const { return TMath::Sqrt(P()*P() + m*m); }
  virtual Double_t Y() const { return Y(GetMostProbablePID()); }
  Double_t Y(AODTrkPID_t pid) const;
  Double_t Y(Double_t m) const;
  
  virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }

  virtual Short_t  Charge() const {return fCharge; }

  virtual Bool_t   PropagateToDCA(const AliVVertex *vtx, 
	  Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);

  // PID
  virtual const Double_t *PID() const { return fPID; }
  AODTrkPID_t GetMostProbablePID() const;
  void ConvertAliPIDtoAODPID();
  void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}

  void     SetPIDForTracking(Int_t pid) {fPIDForTracking = pid;}
  Int_t    GetPIDForTracking()  const   {return fPIDForTracking;}
  Double_t GetMassForTracking() const;

  template <typename T> void GetPID(T *pid) const {
    for(Int_t i=0; i<10; ++i) pid[i] = fPID ? fPID[i]:0;}
 
  template <typename T> void SetPID(const T *pid) {
    if (pid) {
      if (!fPID) fPID = new Double32_t[10];
      for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
    }
    else {delete[] fPID; fPID = 0;}
  }
  
  Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
  ULong_t GetStatus() const { return GetFlags(); }
  ULong_t GetFlags() const { return fFlags; }

  Int_t   GetID() const { return (Int_t)fID; }
  Int_t   GetLabel() const { return fLabel; } 
  void    GetTOFLabel(Int_t *p) const;


  Char_t  GetType() const { return fType;}
  Bool_t  IsPrimaryCandidate() const;
  Bool_t  GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
  Bool_t  GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }

  Bool_t  IsHybridGlobalConstrainedGlobal() const { return TestBit(kIsHybridGCG); }
  Bool_t  IsHybridTPCConstrainedGlobal() const { return TestBit(kIsHybridTPCCG); }
  Bool_t  IsTPCOnly() const { return IsTPCConstrained(); } // obsolete bad naming
  Bool_t  IsTPCConstrained() const { return TestBit(kIsTPCConstrained); }
  Bool_t  IsGlobalConstrained() const { return TestBit(kIsGlobalConstrained); }
  //
  Int_t   GetTOFBunchCrossing(Double_t b=0, Bool_t tpcPIDonly=kFALSE) const;
  //
  using AliVTrack::GetP;
  template <typename T> void GetP(T *p) const {
    p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}

//  template <typename T> void GetPxPyPz(T *p) const {
//    p[0] = Px(); p[1] = Py(); p[2] = Pz();}
  Bool_t GetPxPyPz(Double_t *p) const;

  template <typename T> Bool_t GetPosition(T *x) const {
    x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
    return TestBit(kIsDCA);}

  template <typename T> void SetCovMatrix(const T *covMatrix) {
    if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
    fCovMatrix->SetCovMatrix(covMatrix);}

  template <typename T> Bool_t GetCovMatrix(T *covMatrix) const {
    if(!fCovMatrix) return kFALSE;
    fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}

  Bool_t GetXYZ(Double_t *p) const {
    return GetPosition(p); }  
  
  Bool_t GetXYZAt(Double_t x, Double_t b, Double_t *r) const;
  Bool_t GetXYZatR(Double_t xr,Double_t bz, Double_t *xyz=0, Double_t* alpSect=0) const;  

  Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
    return GetCovMatrix(cv);}

  void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}

  Double_t XAtDCA() const { return fPositionAtDCA[0]; } //makes sense only for constrained tracks, returns dummy values for all other tracks
  Double_t YAtDCA() const { return fPositionAtDCA[1]; } //makes sense only for constrained tracks, returns dummy values for all other tracks
  Double_t ZAtDCA() const {
    if (IsMuonTrack()) return fPosition[2];
    else if (TestBit(kIsDCA)) return fPosition[1];
    else return -999.; }                                //makes sense only for constrained tracks, returns dummy values for all other tracks
  Bool_t   XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
  
  Double_t DCA() const {
    if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
    else if (TestBit(kIsDCA)) return fPosition[0];
    else return -999.; }
  
  Double_t PxAtDCA() const { return fMomentumAtDCA[0]; } //makes sense only for constrained tracks, returns dummy values for all other tracks
  Double_t PyAtDCA() const { return fMomentumAtDCA[1]; } //makes sense only for constrained tracks, returns dummy values for all other tracks
  Double_t PzAtDCA() const { return fMomentumAtDCA[2]; } //makes sense only for constrained tracks, returns dummy values for all other tracks
  Double_t PAtDCA() const { return TMath::Sqrt(PxAtDCA()*PxAtDCA() + PyAtDCA()*PyAtDCA() + PzAtDCA()*PzAtDCA()); }
  Bool_t   PxPyPzAtDCA(Double_t p[3]) const { p[0] = PxAtDCA(); p[1] = PyAtDCA(); p[2] = PzAtDCA(); return kTRUE; }
  
  Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
  
  UChar_t  GetITSClusterMap() const       { return (UChar_t)(fITSMuonClusterMap&0xff); }
  Int_t    GetITSNcls() const; 
  Bool_t   HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
  UShort_t GetHitsPatternInTrigCh() const { return (UShort_t)((fITSMuonClusterMap&0xff00)>>8); }
  UInt_t   GetMUONClusterMap() const      { return (fITSMuonClusterMap&0x3ff0000)>>16; }
  UInt_t   GetITSMUONClusterMap() const   { return fITSMuonClusterMap; }
  
  Bool_t  TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
  Bool_t  TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
  void    SetFilterMap(UInt_t i){fFilterMap = i;}
  UInt_t  GetFilterMap() const {return fFilterMap;}

  const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
  const TBits* GetTPCClusterMapPtr() const {return &fTPCClusterMap;}
  const TBits& GetTPCFitMap() const {return fTPCFitMap;}
  const TBits* GetTPCFitMapPtr() const {return &fTPCFitMap;}
  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t /*type*/=0) const;
  
  const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
  const TBits* GetTPCSharedMapPtr() const {return &fTPCSharedMap;}
  void    SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
  void    SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
  void    SetTPCFitMap(const TBits amap) {fTPCFitMap = amap;}
  void    SetTPCPointsF(UShort_t  findable){fTPCnclsF = findable;}
  void    SetTPCNCrossedRows(UInt_t n)     {fTPCNCrossedRows = n;}
  
  virtual const    AliExternalTrackParam * GetInnerParam() const { return NULL; }
  virtual const    AliExternalTrackParam * GetOuterParam() const { return NULL; }

  UShort_t GetTPCNclsF() const { return fTPCnclsF;}
  UShort_t GetTPCNCrossedRows()  const { return fTPCNCrossedRows;}
  Float_t  GetTPCFoundFraction() const { return fTPCNCrossedRows>0 ? float(GetTPCNcls())/fTPCNCrossedRows : 0;}

  // Calorimeter Cluster
  Int_t GetEMCALcluster() const {return fCaloIndex;}
  void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
  Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}

  Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
  Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
  Double_t GetTrackPtOnEMCal() const {return fTrackPtOnEMCal;}
  Double_t GetTrackPOnEMCal() const {return TMath::Abs(fTrackEtaOnEMCal) < 1 ? fTrackPtOnEMCal*TMath::CosH(fTrackEtaOnEMCal) : -999;}
  void SetTrackPhiEtaPtOnEMCal(Double_t phi,Double_t eta,Double_t pt) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;fTrackPtOnEMCal=pt;}

  Int_t GetPHOScluster() const {return fCaloIndex;}
  void SetPHOScluster(Int_t index) {fCaloIndex=index;}
  Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}

  //pid signal interface
  Double_t  GetITSsignal()       const { return fDetPid?fDetPid->GetITSsignal():0.;    }
  void      GetITSdEdxSamples(Double_t s[4]) const;
  Double_t  GetTPCsignal()       const { return fDetPid?fDetPid->GetTPCsignal():0.;    }
  Double_t  GetTPCsignalTunedOnData() const { return fTPCsignalTuned;}
  void      SetTPCsignalTunedOnData(Double_t signal) {fTPCsignalTuned = signal;}
  UShort_t  GetTPCsignalN()      const { return fDetPid?fDetPid->GetTPCsignalN():0;    }
  virtual AliTPCdEdxInfo* GetTPCdEdxInfo() const {return fDetPid?fDetPid->GetTPCdEdxInfo():0;}
  Double_t  GetTPCmomentum()     const { return fDetPid?fDetPid->GetTPCmomentum():0.;  }
  Double_t  GetTPCTgl()          const { return fDetPid?fDetPid->GetTPCTgl():0.;  }
  Double_t  GetTOFsignal()       const { return fDetPid?fDetPid->GetTOFsignal():0.;    }
  Double_t  GetIntegratedLength() const { return fTrackLength;}
  void      SetIntegratedLength(Double_t l) {fTrackLength = l;}
  Double_t  GetTOFsignalTunedOnData() const { return fTOFsignalTuned;}
  void      SetTOFsignalTunedOnData(Double_t signal) {fTOFsignalTuned = signal;}
  Double_t  GetHMPIDsignal()     const; 
  Double_t  GetHMPIDoccupancy()  const;

  Int_t     GetHMPIDcluIdx()     const;
    
  void GetHMPIDtrk(Float_t &x, Float_t &y, Float_t &th, Float_t &ph) const;  
  void GetHMPIDmip(Float_t &x,Float_t &y,Int_t &q,Int_t &nph) const;
  
  Bool_t GetOuterHmpPxPyPz(Double_t *p) const;
  
  void      GetIntegratedTimes(Double_t *times, Int_t nspec=AliPID::kSPECIES) const {if (fDetPid) fDetPid->GetIntegratedTimes(times, nspec);}
  Double_t  GetTRDslice(Int_t plane, Int_t slice) const;
  Double_t  GetTRDsignal()                        const {return fDetPid ? fDetPid->GetTRDsignal() : 0;}
  Double_t  GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
  Double_t  GetTRDchi2()                 const {return fDetPid ? fDetPid->GetTRDChi2() : -1;}
  UChar_t   GetTRDncls(Int_t layer)      const;
  UChar_t   GetTRDncls()                 const {return GetTRDncls(-1);}
  UChar_t   GetTRDntrackletsPID() const;
  Int_t     GetNumberOfTRDslices() const { return fDetPid?fDetPid->GetTRDnSlices():0; }
  void      GetHMPIDpid(Double_t */*p*/) const { return; } // TODO: To be implemented properly with the new HMPID object

  void SetMFTClusterPattern(ULong_t mftClusterPattern) { fMFTClusterPattern = mftClusterPattern; }   // AU
  ULong_t GetMFTClusterPattern() { return fMFTClusterPattern; }                                      // AU

  const AliAODEvent* GetAODEvent() const {return fAODEvent;}
  virtual const AliVEvent* GetEvent() const {return (AliVEvent*)fAODEvent;}
  void SetAODEvent(const AliAODEvent* ptr){fAODEvent = ptr;}
  const AliTOFHeader* GetTOFHeader() const;

  AliAODPid    *GetDetPid() const { return fDetPid; }
  AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
  
  // print
  void  Print(const Option_t *opt = "") const;

  // setters
  void SetFlags(ULong_t flags) { fFlags = flags; }
  void SetStatus(ULong_t flags) { fFlags|=flags; }
  void ResetStatus(ULong_t flags) { fFlags&=~flags; }

  void SetID(Short_t id) { fID = id; }
  void SetLabel(Int_t label) { fLabel = label; }
  void SetTOFLabel(const Int_t* p);
  template <typename T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
  void SetDCA(Double_t d, Double_t z);
  void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
  void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }

  void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming

  void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
  void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }

  void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
  void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }



  void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
  void SetPt(Double_t pt) { fMomentum[0] = pt; };
  void SetPhi(Double_t phi) { fMomentum[1] = phi; }
  void SetTheta(Double_t theta) { fMomentum[2] = theta; }
  template <typename T> void SetP(const T *p, Bool_t cartesian = kTRUE);
  void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}

  void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
  void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
  
  void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
  
  void SetCharge(Short_t q) { fCharge = q; }
  void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }

  void SetITSClusterMap(UChar_t itsClusMap)                 { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
  void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
  void SetMuonClusterMap(UInt_t muonClusMap)                { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
  void SetITSMuonClusterMap(UInt_t itsMuonClusMap)          { fITSMuonClusterMap = itsMuonClusMap; }
  void SetMUONtrigHitsMapTrg(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrg = muonTrigHitsMap; }
  UInt_t GetMUONTrigHitsMapTrg() const { return fMUONtrigHitsMapTrg; }
  void SetMUONtrigHitsMapTrk(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrk = muonTrigHitsMap; }
  UInt_t GetMUONTrigHitsMapTrk() const { return fMUONtrigHitsMapTrk; }
  Int_t GetMuonTrigDevSign() const;

  Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
					//  0 Muon track does not match trigger
					//  1 Muon track match but does not pass pt cut
					//  2 Muon track match Low pt cut
					//  3 Muon track match High pt cut
  void     SetMatchTrigger(Int_t MatchTrigger);
  Bool_t   MatchTrigger() const { return (GetMatchTrigger()>0); }	  //  Muon track matches trigger track
  Bool_t   MatchTriggerLowPt()   const  { return (GetMatchTrigger()>1); } //  Muon track matches trigger track and passes Low pt cut
  Bool_t   MatchTriggerHighPt()  const  { return (GetMatchTrigger()>2); } //  Muon track matches trigger track and passes High pt cut
  Bool_t   MatchTriggerDigits()  const;                                   //  Muon track matches trigger digits
  Double_t GetChi2MatchTrigger() const  { return fChi2MatchTrigger;}
  void     SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
  Bool_t   HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const;  // Check if track hits Muon chambers
  Bool_t   IsMuonTrack() const { return ( (GetMUONClusterMap()>0) && !fIsMuonGlobalTrack ) ? kTRUE : kFALSE; }
  
  Bool_t   IsMuonGlobalTrack() const { return fIsMuonGlobalTrack; }                                     // AU
  void     SetIsMuonGlobalTrack(Bool_t isMuonGlobalTrack) { fIsMuonGlobalTrack = isMuonGlobalTrack; }   // AU

  void     Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
  Bool_t   IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}

  void     SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
  void     SetType(AODTrk_t ttype) { fType=ttype; }

  // Trasient PID object, is owned by the track
  virtual void  SetDetectorPID(const AliDetectorPID *pid);
  virtual const AliDetectorPID* GetDetectorPID() const { return fDetectorPID; }

  // Dummy
  Int_t    PdgCode() const {return 0;}
  
 private :

  // Momentum & position
  Double32_t    fMomentum[3];       // momemtum stored in pt, phi, theta
  Double32_t    fPosition[3];       // position of first point on track or dca
  
  Double32_t    fMomentumAtDCA[3];  // momentum (px,py,pz) at DCA
  Double32_t    fPositionAtDCA[2];  // trasverse position (x,y) at DCA
  
  Double32_t    fRAtAbsorberEnd;    // transverse position r at the end of the muon absorber
  
  Double32_t    fChi2perNDF;        // chi2/NDF of momentum fit
  Double32_t    fChi2MatchTrigger;  // chi2 of trigger/track matching
  Double32_t*   fPID;               //! [0.,1.,8] pointer to PID object

  ULong_t       fFlags;             // reconstruction status flags 
  Int_t         fLabel;             // track label, points back to MC track
  Int_t         fTOFLabel[3];       // TOF label
  Double32_t    fTrackLength;       // Track length
  UInt_t        fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
                                    // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32) 
  UInt_t        fMUONtrigHitsMapTrg; // Muon trigger hits map from trigger
  UInt_t        fMUONtrigHitsMapTrk; // Muon trigger hits map from tracker track extrapolation
  UInt_t        fFilterMap;         // filter information, one bit per set of cuts

  TBits         fTPCFitMap;      // Map of clusters, one bit per padrow; if has a cluster on given padrow which is used in the fit   
  TBits         fTPCClusterMap;     // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
  TBits         fTPCSharedMap;      // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow

  UShort_t      fTPCnclsF;          // findable clusters
  UShort_t      fTPCNCrossedRows;   // n crossed rows

  Short_t       fID;                // unique track ID, points back to the ESD track

  Char_t        fCharge;            // particle charge
  Char_t        fType;              // Track Type, explanation close to the enum AODTrk_t

  Char_t        fPIDForTracking;    // pid using for tracking of ESD track

  Int_t         fCaloIndex;         // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)

  
  AliAODRedCov<6> *fCovMatrix;      // covariance matrix (x, y, z, px, py, pz)
  AliAODPid    *fDetPid;            // more detailed or detector specific raw pid information
  mutable const AliDetectorPID* fDetectorPID; //! transient object to cache calibrated PID information
  TRef          fProdVertex;        // vertex of origin

  Double_t      fTrackPhiOnEMCal;   // phi of track after being propagated to the EMCal surface (default r = 440 cm)
  Double_t      fTrackEtaOnEMCal;   // eta of track after being propagated to the EMCal surface (default r = 440 cm)
  Double_t      fTrackPtOnEMCal;    // pt of track after being propagated to the EMCal surface (default r = 440 cm)

  Bool_t fIsMuonGlobalTrack;        // True if the track is built from the combination of MUON and MFT clusters     // AU

  Double_t      fTPCsignalTuned;    //! TPC signal tuned on data when using MC
  Double_t      fTOFsignalTuned;    //! TOF signal tuned on data when using MC

  ULong_t fMFTClusterPattern;       // Tells us which MFT clusters are contained in the track, and which one is a good one (if MC)  // AU

  const AliAODEvent* fAODEvent;     //! pointer back to the event the track belongs to

  //---------------------------------------------------------------------------
  //--the calibration interface--
  //--to be used in online calibration/QA
  //--should also be implemented in ESD so it works offline as well
  //-----------
  virtual Int_t GetTrackParam         ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamRefitted ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamIp       ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamTPCInner ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamOp       ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamCp       ( AliExternalTrackParam &p ) const;
  virtual Int_t GetTrackParamITSOut   ( AliExternalTrackParam &p ) const;

  ClassDef(AliAODTrack, 24);
};

inline Bool_t  AliAODTrack::IsPrimaryCandidate() const
{
    // True of track passes primary particle selection (independent of type) 
    // 
    if (fFilterMap) {
	return kTRUE;
    } else {
	return kFALSE;
    }
}

inline Int_t AliAODTrack::GetITSNcls() const 
{
  // Number of points in ITS
  Int_t n=0;
  for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
  return n;
}

//______________________________________________________________________________
template <typename T> 
void AliAODTrack::SetPosition(const T *x, const Bool_t dca) 
{
  // set the position

  if (x) {
    if (!dca) {
      ResetBit(kIsDCA);

      fPosition[0] = x[0];
      fPosition[1] = x[1];
      fPosition[2] = x[2];
    } else {
      SetBit(kIsDCA);
      // don't know any better yet
      fPosition[0] = -999.;
      fPosition[1] = -999.;
      fPosition[2] = -999.;
    }
  } else {
    ResetBit(kIsDCA);

    fPosition[0] = -999.;
    fPosition[1] = -999.;
    fPosition[2] = -999.;
  }
}

//template<> void AliAODTrack::SetPosition(const double *, Bool_t);

#endif
 AliAODTrack.h:1
 AliAODTrack.h:2
 AliAODTrack.h:3
 AliAODTrack.h:4
 AliAODTrack.h:5
 AliAODTrack.h:6
 AliAODTrack.h:7
 AliAODTrack.h:8
 AliAODTrack.h:9
 AliAODTrack.h:10
 AliAODTrack.h:11
 AliAODTrack.h:12
 AliAODTrack.h:13
 AliAODTrack.h:14
 AliAODTrack.h:15
 AliAODTrack.h:16
 AliAODTrack.h:17
 AliAODTrack.h:18
 AliAODTrack.h:19
 AliAODTrack.h:20
 AliAODTrack.h:21
 AliAODTrack.h:22
 AliAODTrack.h:23
 AliAODTrack.h:24
 AliAODTrack.h:25
 AliAODTrack.h:26
 AliAODTrack.h:27
 AliAODTrack.h:28
 AliAODTrack.h:29
 AliAODTrack.h:30
 AliAODTrack.h:31
 AliAODTrack.h:32
 AliAODTrack.h:33
 AliAODTrack.h:34
 AliAODTrack.h:35
 AliAODTrack.h:36
 AliAODTrack.h:37
 AliAODTrack.h:38
 AliAODTrack.h:39
 AliAODTrack.h:40
 AliAODTrack.h:41
 AliAODTrack.h:42
 AliAODTrack.h:43
 AliAODTrack.h:44
 AliAODTrack.h:45
 AliAODTrack.h:46
 AliAODTrack.h:47
 AliAODTrack.h:48
 AliAODTrack.h:49
 AliAODTrack.h:50
 AliAODTrack.h:51
 AliAODTrack.h:52
 AliAODTrack.h:53
 AliAODTrack.h:54
 AliAODTrack.h:55
 AliAODTrack.h:56
 AliAODTrack.h:57
 AliAODTrack.h:58
 AliAODTrack.h:59
 AliAODTrack.h:60
 AliAODTrack.h:61
 AliAODTrack.h:62
 AliAODTrack.h:63
 AliAODTrack.h:64
 AliAODTrack.h:65
 AliAODTrack.h:66
 AliAODTrack.h:67
 AliAODTrack.h:68
 AliAODTrack.h:69
 AliAODTrack.h:70
 AliAODTrack.h:71
 AliAODTrack.h:72
 AliAODTrack.h:73
 AliAODTrack.h:74
 AliAODTrack.h:75
 AliAODTrack.h:76
 AliAODTrack.h:77
 AliAODTrack.h:78
 AliAODTrack.h:79
 AliAODTrack.h:80
 AliAODTrack.h:81
 AliAODTrack.h:82
 AliAODTrack.h:83
 AliAODTrack.h:84
 AliAODTrack.h:85
 AliAODTrack.h:86
 AliAODTrack.h:87
 AliAODTrack.h:88
 AliAODTrack.h:89
 AliAODTrack.h:90
 AliAODTrack.h:91
 AliAODTrack.h:92
 AliAODTrack.h:93
 AliAODTrack.h:94
 AliAODTrack.h:95
 AliAODTrack.h:96
 AliAODTrack.h:97
 AliAODTrack.h:98
 AliAODTrack.h:99
 AliAODTrack.h:100
 AliAODTrack.h:101
 AliAODTrack.h:102
 AliAODTrack.h:103
 AliAODTrack.h:104
 AliAODTrack.h:105
 AliAODTrack.h:106
 AliAODTrack.h:107
 AliAODTrack.h:108
 AliAODTrack.h:109
 AliAODTrack.h:110
 AliAODTrack.h:111
 AliAODTrack.h:112
 AliAODTrack.h:113
 AliAODTrack.h:114
 AliAODTrack.h:115
 AliAODTrack.h:116
 AliAODTrack.h:117
 AliAODTrack.h:118
 AliAODTrack.h:119
 AliAODTrack.h:120
 AliAODTrack.h:121
 AliAODTrack.h:122
 AliAODTrack.h:123
 AliAODTrack.h:124
 AliAODTrack.h:125
 AliAODTrack.h:126
 AliAODTrack.h:127
 AliAODTrack.h:128
 AliAODTrack.h:129
 AliAODTrack.h:130
 AliAODTrack.h:131
 AliAODTrack.h:132
 AliAODTrack.h:133
 AliAODTrack.h:134
 AliAODTrack.h:135
 AliAODTrack.h:136
 AliAODTrack.h:137
 AliAODTrack.h:138
 AliAODTrack.h:139
 AliAODTrack.h:140
 AliAODTrack.h:141
 AliAODTrack.h:142
 AliAODTrack.h:143
 AliAODTrack.h:144
 AliAODTrack.h:145
 AliAODTrack.h:146
 AliAODTrack.h:147
 AliAODTrack.h:148
 AliAODTrack.h:149
 AliAODTrack.h:150
 AliAODTrack.h:151
 AliAODTrack.h:152
 AliAODTrack.h:153
 AliAODTrack.h:154
 AliAODTrack.h:155
 AliAODTrack.h:156
 AliAODTrack.h:157
 AliAODTrack.h:158
 AliAODTrack.h:159
 AliAODTrack.h:160
 AliAODTrack.h:161
 AliAODTrack.h:162
 AliAODTrack.h:163
 AliAODTrack.h:164
 AliAODTrack.h:165
 AliAODTrack.h:166
 AliAODTrack.h:167
 AliAODTrack.h:168
 AliAODTrack.h:169
 AliAODTrack.h:170
 AliAODTrack.h:171
 AliAODTrack.h:172
 AliAODTrack.h:173
 AliAODTrack.h:174
 AliAODTrack.h:175
 AliAODTrack.h:176
 AliAODTrack.h:177
 AliAODTrack.h:178
 AliAODTrack.h:179
 AliAODTrack.h:180
 AliAODTrack.h:181
 AliAODTrack.h:182
 AliAODTrack.h:183
 AliAODTrack.h:184
 AliAODTrack.h:185
 AliAODTrack.h:186
 AliAODTrack.h:187
 AliAODTrack.h:188
 AliAODTrack.h:189
 AliAODTrack.h:190
 AliAODTrack.h:191
 AliAODTrack.h:192
 AliAODTrack.h:193
 AliAODTrack.h:194
 AliAODTrack.h:195
 AliAODTrack.h:196
 AliAODTrack.h:197
 AliAODTrack.h:198
 AliAODTrack.h:199
 AliAODTrack.h:200
 AliAODTrack.h:201
 AliAODTrack.h:202
 AliAODTrack.h:203
 AliAODTrack.h:204
 AliAODTrack.h:205
 AliAODTrack.h:206
 AliAODTrack.h:207
 AliAODTrack.h:208
 AliAODTrack.h:209
 AliAODTrack.h:210
 AliAODTrack.h:211
 AliAODTrack.h:212
 AliAODTrack.h:213
 AliAODTrack.h:214
 AliAODTrack.h:215
 AliAODTrack.h:216
 AliAODTrack.h:217
 AliAODTrack.h:218
 AliAODTrack.h:219
 AliAODTrack.h:220
 AliAODTrack.h:221
 AliAODTrack.h:222
 AliAODTrack.h:223
 AliAODTrack.h:224
 AliAODTrack.h:225
 AliAODTrack.h:226
 AliAODTrack.h:227
 AliAODTrack.h:228
 AliAODTrack.h:229
 AliAODTrack.h:230
 AliAODTrack.h:231
 AliAODTrack.h:232
 AliAODTrack.h:233
 AliAODTrack.h:234
 AliAODTrack.h:235
 AliAODTrack.h:236
 AliAODTrack.h:237
 AliAODTrack.h:238
 AliAODTrack.h:239
 AliAODTrack.h:240
 AliAODTrack.h:241
 AliAODTrack.h:242
 AliAODTrack.h:243
 AliAODTrack.h:244
 AliAODTrack.h:245
 AliAODTrack.h:246
 AliAODTrack.h:247
 AliAODTrack.h:248
 AliAODTrack.h:249
 AliAODTrack.h:250
 AliAODTrack.h:251
 AliAODTrack.h:252
 AliAODTrack.h:253
 AliAODTrack.h:254
 AliAODTrack.h:255
 AliAODTrack.h:256
 AliAODTrack.h:257
 AliAODTrack.h:258
 AliAODTrack.h:259
 AliAODTrack.h:260
 AliAODTrack.h:261
 AliAODTrack.h:262
 AliAODTrack.h:263
 AliAODTrack.h:264
 AliAODTrack.h:265
 AliAODTrack.h:266
 AliAODTrack.h:267
 AliAODTrack.h:268
 AliAODTrack.h:269
 AliAODTrack.h:270
 AliAODTrack.h:271
 AliAODTrack.h:272
 AliAODTrack.h:273
 AliAODTrack.h:274
 AliAODTrack.h:275
 AliAODTrack.h:276
 AliAODTrack.h:277
 AliAODTrack.h:278
 AliAODTrack.h:279
 AliAODTrack.h:280
 AliAODTrack.h:281
 AliAODTrack.h:282
 AliAODTrack.h:283
 AliAODTrack.h:284
 AliAODTrack.h:285
 AliAODTrack.h:286
 AliAODTrack.h:287
 AliAODTrack.h:288
 AliAODTrack.h:289
 AliAODTrack.h:290
 AliAODTrack.h:291
 AliAODTrack.h:292
 AliAODTrack.h:293
 AliAODTrack.h:294
 AliAODTrack.h:295
 AliAODTrack.h:296
 AliAODTrack.h:297
 AliAODTrack.h:298
 AliAODTrack.h:299
 AliAODTrack.h:300
 AliAODTrack.h:301
 AliAODTrack.h:302
 AliAODTrack.h:303
 AliAODTrack.h:304
 AliAODTrack.h:305
 AliAODTrack.h:306
 AliAODTrack.h:307
 AliAODTrack.h:308
 AliAODTrack.h:309
 AliAODTrack.h:310
 AliAODTrack.h:311
 AliAODTrack.h:312
 AliAODTrack.h:313
 AliAODTrack.h:314
 AliAODTrack.h:315
 AliAODTrack.h:316
 AliAODTrack.h:317
 AliAODTrack.h:318
 AliAODTrack.h:319
 AliAODTrack.h:320
 AliAODTrack.h:321
 AliAODTrack.h:322
 AliAODTrack.h:323
 AliAODTrack.h:324
 AliAODTrack.h:325
 AliAODTrack.h:326
 AliAODTrack.h:327
 AliAODTrack.h:328
 AliAODTrack.h:329
 AliAODTrack.h:330
 AliAODTrack.h:331
 AliAODTrack.h:332
 AliAODTrack.h:333
 AliAODTrack.h:334
 AliAODTrack.h:335
 AliAODTrack.h:336
 AliAODTrack.h:337
 AliAODTrack.h:338
 AliAODTrack.h:339
 AliAODTrack.h:340
 AliAODTrack.h:341
 AliAODTrack.h:342
 AliAODTrack.h:343
 AliAODTrack.h:344
 AliAODTrack.h:345
 AliAODTrack.h:346
 AliAODTrack.h:347
 AliAODTrack.h:348
 AliAODTrack.h:349
 AliAODTrack.h:350
 AliAODTrack.h:351
 AliAODTrack.h:352
 AliAODTrack.h:353
 AliAODTrack.h:354
 AliAODTrack.h:355
 AliAODTrack.h:356
 AliAODTrack.h:357
 AliAODTrack.h:358
 AliAODTrack.h:359
 AliAODTrack.h:360
 AliAODTrack.h:361
 AliAODTrack.h:362
 AliAODTrack.h:363
 AliAODTrack.h:364
 AliAODTrack.h:365
 AliAODTrack.h:366
 AliAODTrack.h:367
 AliAODTrack.h:368
 AliAODTrack.h:369
 AliAODTrack.h:370
 AliAODTrack.h:371
 AliAODTrack.h:372
 AliAODTrack.h:373
 AliAODTrack.h:374
 AliAODTrack.h:375
 AliAODTrack.h:376
 AliAODTrack.h:377
 AliAODTrack.h:378
 AliAODTrack.h:379
 AliAODTrack.h:380
 AliAODTrack.h:381
 AliAODTrack.h:382
 AliAODTrack.h:383
 AliAODTrack.h:384
 AliAODTrack.h:385
 AliAODTrack.h:386
 AliAODTrack.h:387
 AliAODTrack.h:388
 AliAODTrack.h:389
 AliAODTrack.h:390
 AliAODTrack.h:391
 AliAODTrack.h:392
 AliAODTrack.h:393
 AliAODTrack.h:394
 AliAODTrack.h:395
 AliAODTrack.h:396
 AliAODTrack.h:397
 AliAODTrack.h:398
 AliAODTrack.h:399
 AliAODTrack.h:400
 AliAODTrack.h:401
 AliAODTrack.h:402
 AliAODTrack.h:403
 AliAODTrack.h:404
 AliAODTrack.h:405
 AliAODTrack.h:406
 AliAODTrack.h:407
 AliAODTrack.h:408
 AliAODTrack.h:409
 AliAODTrack.h:410
 AliAODTrack.h:411
 AliAODTrack.h:412
 AliAODTrack.h:413
 AliAODTrack.h:414
 AliAODTrack.h:415
 AliAODTrack.h:416
 AliAODTrack.h:417
 AliAODTrack.h:418
 AliAODTrack.h:419
 AliAODTrack.h:420
 AliAODTrack.h:421
 AliAODTrack.h:422
 AliAODTrack.h:423
 AliAODTrack.h:424
 AliAODTrack.h:425
 AliAODTrack.h:426
 AliAODTrack.h:427
 AliAODTrack.h:428
 AliAODTrack.h:429
 AliAODTrack.h:430
 AliAODTrack.h:431
 AliAODTrack.h:432
 AliAODTrack.h:433
 AliAODTrack.h:434
 AliAODTrack.h:435
 AliAODTrack.h:436
 AliAODTrack.h:437
 AliAODTrack.h:438
 AliAODTrack.h:439
 AliAODTrack.h:440
 AliAODTrack.h:441
 AliAODTrack.h:442
 AliAODTrack.h:443
 AliAODTrack.h:444
 AliAODTrack.h:445
 AliAODTrack.h:446
 AliAODTrack.h:447
 AliAODTrack.h:448
 AliAODTrack.h:449
 AliAODTrack.h:450
 AliAODTrack.h:451
 AliAODTrack.h:452
 AliAODTrack.h:453
 AliAODTrack.h:454
 AliAODTrack.h:455
 AliAODTrack.h:456
 AliAODTrack.h:457
 AliAODTrack.h:458
 AliAODTrack.h:459
 AliAODTrack.h:460
 AliAODTrack.h:461
 AliAODTrack.h:462
 AliAODTrack.h:463
 AliAODTrack.h:464
 AliAODTrack.h:465
 AliAODTrack.h:466
 AliAODTrack.h:467
 AliAODTrack.h:468
 AliAODTrack.h:469
 AliAODTrack.h:470
 AliAODTrack.h:471
 AliAODTrack.h:472
 AliAODTrack.h:473
 AliAODTrack.h:474
 AliAODTrack.h:475
 AliAODTrack.h:476
 AliAODTrack.h:477
 AliAODTrack.h:478
 AliAODTrack.h:479
 AliAODTrack.h:480
 AliAODTrack.h:481
 AliAODTrack.h:482
 AliAODTrack.h:483
 AliAODTrack.h:484
 AliAODTrack.h:485
 AliAODTrack.h:486
 AliAODTrack.h:487
 AliAODTrack.h:488
 AliAODTrack.h:489
 AliAODTrack.h:490
 AliAODTrack.h:491
 AliAODTrack.h:492
 AliAODTrack.h:493
 AliAODTrack.h:494
 AliAODTrack.h:495
 AliAODTrack.h:496
 AliAODTrack.h:497
 AliAODTrack.h:498
 AliAODTrack.h:499
 AliAODTrack.h:500
 AliAODTrack.h:501
 AliAODTrack.h:502
 AliAODTrack.h:503
 AliAODTrack.h:504
 AliAODTrack.h:505
 AliAODTrack.h:506
 AliAODTrack.h:507
 AliAODTrack.h:508
 AliAODTrack.h:509
 AliAODTrack.h:510
 AliAODTrack.h:511
 AliAODTrack.h:512
 AliAODTrack.h:513
 AliAODTrack.h:514
 AliAODTrack.h:515
 AliAODTrack.h:516
 AliAODTrack.h:517
 AliAODTrack.h:518
 AliAODTrack.h:519
 AliAODTrack.h:520
 AliAODTrack.h:521
 AliAODTrack.h:522
 AliAODTrack.h:523
 AliAODTrack.h:524
 AliAODTrack.h:525
 AliAODTrack.h:526
 AliAODTrack.h:527
 AliAODTrack.h:528
 AliAODTrack.h:529
 AliAODTrack.h:530
 AliAODTrack.h:531
 AliAODTrack.h:532
 AliAODTrack.h:533
 AliAODTrack.h:534
 AliAODTrack.h:535
 AliAODTrack.h:536
 AliAODTrack.h:537
 AliAODTrack.h:538
 AliAODTrack.h:539
 AliAODTrack.h:540
 AliAODTrack.h:541
 AliAODTrack.h:542
 AliAODTrack.h:543
 AliAODTrack.h:544
 AliAODTrack.h:545
 AliAODTrack.h:546
 AliAODTrack.h:547
 AliAODTrack.h:548
 AliAODTrack.h:549
 AliAODTrack.h:550
 AliAODTrack.h:551
 AliAODTrack.h:552
 AliAODTrack.h:553
 AliAODTrack.h:554
 AliAODTrack.h:555
 AliAODTrack.h:556
 AliAODTrack.h:557
 AliAODTrack.h:558
 AliAODTrack.h:559
 AliAODTrack.h:560
 AliAODTrack.h:561
 AliAODTrack.h:562
 AliAODTrack.h:563
 AliAODTrack.h:564