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


//-------------------------------------------------------------------------
//     base class for ESD and AOD tracks
//     Author: A. Dainese
//-------------------------------------------------------------------------

#include <TBits.h>

#include "AliVParticle.h"
#include "AliPID.h"
#include "AliVMisc.h"

class AliVEvent;
class AliVVertex;
class AliExternalTrackParam;
class AliTPCdEdxInfo;
class AliDetectorPID;
class AliTOFHeader;

 
class AliVTrack: public AliVParticle {

public:
  enum {
    kITSin        = 0x1
    ,kITSout      = 0x2
    ,kITSrefit    = 0x4
    ,kITSpid      = 0x8
    ,kTPCin       = 0x10
    ,kTPCout      = 0x20
    ,kTPCrefit    = 0x40
    ,kTPCpid      = 0x80
    ,kTRDin       = 0x100
    ,kTRDout      = 0x200
    ,kTRDrefit    = 0x400
    ,kTRDpid      = 0x800
    ,kTOFin       = 0x1000
    ,kTOFout      = 0x2000
    ,kTOFrefit    = 0x4000
    ,kTOFpid      = 0x8000
    ,kHMPIDout    = 0x10000
    ,kHMPIDpid    = 0x20000
    ,kEMCALmatch  = 0x40000
    ,kTRDbackup   = 0x80000
    ,kTOFmismatch = 0x100000
    ,kPHOSmatch   = 0x200000
    ,kITSupg      = 0x400000     // flag that in the ITSupgrade reco
    //
    ,kGlobalMerge = 0x1000000
    ,kMultInV0    = 0x2000000     //BIT(25): assumed to be belong to V0 in multiplicity estimates
    ,kMultSec     = 0x4000000     //BIT(26): assumed to be secondary (due to the DCA) in multiplicity estimates
    ,kEmbedded    = 0x8000000     // BIT(27), 1<<27: Is a track that has been embedded into the event
    //
    ,kITSpureSA   = 0x10000000
    ,kTRDStop     = 0x20000000
    ,kESDpid      = 0x40000000
    ,kTIME        = 0x80000000
  };
  enum {
    kTRDnPlanes = 6,
    kEMCALNoMatch = -4096,
    kTOFBCNA = -100
  };

  AliVTrack() { }
  virtual ~AliVTrack() { }
  AliVTrack(const AliVTrack& vTrack); 
  AliVTrack& operator=(const AliVTrack& vTrack);
  // constructor for reinitialisation of vtable
  AliVTrack( AliVConstructorReinitialisationFlag f) :AliVParticle(f){}

  virtual const AliVEvent* GetEvent() const {return 0;}
  virtual Int_t    GetID() const = 0;
  virtual UChar_t  GetITSClusterMap() const = 0;
  virtual void     GetITSdEdxSamples(Double_t s[4]) const {for (int i=4;i--;) s[i]=0;};
  virtual const TBits* GetTPCClusterMapPtr() const {return NULL;}
  virtual const TBits* GetTPCFitMapPtr()     const {return NULL;}
  virtual const TBits* GetTPCSharedMapPtr()  const {return NULL;}
  virtual Float_t  GetTPCClusterInfo(Int_t /*nNeighbours*/, Int_t /*type*/, Int_t /*row0*/=0, Int_t /*row1*/=159, Int_t /*type*/= 0) const {return 0.;}
  virtual AliTPCdEdxInfo * GetTPCdEdxInfo() const {return 0x0;}
  virtual UShort_t GetTPCNcls() const { return 0;}
  virtual UShort_t GetTPCNclsF() const { return 0;}
  virtual Double_t GetTRDslice(Int_t /*plane*/, Int_t /*slice*/) const { return -1.; }
  virtual Int_t    GetNumberOfTRDslices() const { return 0; }
  virtual UChar_t  GetTRDncls() const {return 0;}
  virtual UChar_t  GetTRDntrackletsPID() const { return 0;}
  virtual void     SetDetectorPID(const AliDetectorPID */*pid*/) {;}
  virtual const    AliDetectorPID* GetDetectorPID() const { return 0x0; }
  virtual Double_t GetTRDchi2()          const { return -1;}
  virtual Int_t    GetNumberOfClusters() const {return 0;}

  virtual Float_t GetTPCCrossedRows() const {return 0;}
  virtual void GetImpactParameters(Float_t [], Float_t []) const {;}
  virtual void GetImpactParameters(Float_t &/*&xy*/,Float_t &/*&z*/) const {;}
  virtual void GetImpactParametersTPC(Float_t &/*&xy*/,Float_t &/*&z*/) const {;}
  virtual void GetImpactParametersTPC(Float_t [] /*p[2]*/, Float_t [] /*cov[3]*/) const {;}
  
  virtual Int_t GetEMCALcluster()     const {return kEMCALNoMatch;}
  virtual void SetEMCALcluster(Int_t)       {;}
  virtual Bool_t IsEMCAL()            const {return kFALSE;}

  virtual Double_t GetTrackPhiOnEMCal()  const {return -999;}
  virtual Double_t GetTrackEtaOnEMCal()  const {return -999;}
  virtual Double_t GetTrackPtOnEMCal()   const {return -999;}
  virtual Double_t GetTrackPOnEMCal()    const {return -999;}
  virtual Bool_t IsExtrapolatedToEMCAL() const {return GetTrackPtOnEMCal()!=-999;} 
  virtual void SetTrackPhiEtaPtOnEMCal(Double_t,Double_t,Double_t=-999) {;}

  virtual Int_t GetPHOScluster()      const {return -1;}
  virtual void SetPHOScluster(Int_t)        {;}
  virtual Bool_t IsPHOS()             const {return kFALSE;}
  virtual void   SetPIDForTracking(Int_t ) {}
  virtual Int_t  GetPIDForTracking() const {return -999;}
  
  //pid info
  virtual void     SetStatus(ULong_t /*flags*/) {;}
  virtual void     ResetStatus(ULong_t /*flags*/) {;}

  virtual Double_t  GetITSsignal()       const {return 0.;}
  virtual Double_t  GetTPCsignal()       const {return 0.;}
  virtual Double_t  GetTPCsignalTunedOnData() const {return 0.;}
  virtual UShort_t  GetTPCsignalN()      const {return 0 ;}
  virtual Double_t  GetTPCmomentum()     const {return 0.;}
  virtual Double_t  GetTPCTgl()          const {return 0.;}
  virtual Double_t  GetTgl()             const {return 0.;}
  virtual Double_t  GetTOFsignal()       const {return 0.;}
  virtual Double_t  GetTOFsignalTunedOnData() const {return 0.;}
  virtual Double_t  GetHMPIDsignal()     const {return 0.;}
  virtual Double_t  GetTRDsignal()       const {return 0.;}
  virtual UChar_t GetTRDNchamberdEdx() const {return 0;}
  virtual UChar_t GetTRDNclusterdEdx() const {return 0;}

  virtual Double_t  GetHMPIDoccupancy()  const {return 0.;}
  
  virtual Int_t     GetHMPIDcluIdx()     const {return 0;}
  
  virtual void GetHMPIDtrk(Float_t &/*&x*/, Float_t &/*y*/, Float_t &/*th*/, Float_t &/*ph*/) const {;}  
  virtual void GetHMPIDmip(Float_t &/*x*/, Float_t &/*y*/, Int_t &/*q*/,Int_t &/*nph*/) const {;}
  
  virtual Bool_t GetOuterHmpPxPyPz(Double_t */*p*/) const {return kFALSE;}

  virtual const AliExternalTrackParam * GetInnerParam() const { return NULL;}
  virtual const AliExternalTrackParam * GetOuterParam() const { return NULL;}
  virtual const AliExternalTrackParam * GetTPCInnerParam() const { return NULL;}
  virtual const AliExternalTrackParam * GetConstrainedParam() const {return NULL;}

  virtual void      GetIntegratedTimes(Double_t */*times*/, Int_t nspec=AliPID::kSPECIESC) const;
  virtual Double_t  GetTRDmomentum(Int_t /*plane*/, Double_t */*sp*/=0x0) const {return 0.;}
  virtual void      GetHMPIDpid(Double_t */*p*/) const {;}
  virtual Double_t  GetIntegratedLength() const { return 0.;}
  
  virtual ULong_t  GetStatus() const = 0;
  virtual Bool_t   GetXYZ(Double_t *p) const = 0;
  virtual Bool_t   GetXYZAt(Double_t /*x*/, Double_t /*b*/, Double_t* /*r*/ ) const;
  virtual Double_t GetBz() const;
  virtual void     GetBxByBz(Double_t b[3]) const;
  virtual Bool_t   GetCovarianceXYZPxPyPz(Double_t cv[21]) const = 0;
  virtual Bool_t   PropagateToDCA(const AliVVertex *vtx,Double_t b,Double_t maxd,Double_t dz[2],Double_t covar[3]) = 0;
  virtual Int_t    GetNcls(Int_t /*idet*/) const { return 0; }
  virtual Bool_t   GetPxPyPz(Double_t */*p*/) const { return kFALSE; }
  virtual void     SetID(Short_t /*id*/) {;}
  virtual Int_t    GetTOFBunchCrossing(Double_t = 0, Bool_t = kFALSE) const { return kTOFBCNA;}
  virtual const AliTOFHeader *GetTOFHeader() const {return NULL;};

  //---------------------------------------------------------------------------
  //--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& ) const {return 0;}
  virtual Int_t GetTrackParamRefitted ( AliExternalTrackParam& ) const {return 0;}
  virtual Int_t GetTrackParamIp       ( AliExternalTrackParam& ) const {return 0;}
  virtual Int_t GetTrackParamTPCInner ( AliExternalTrackParam& ) const {return 0;}
  virtual Int_t GetTrackParamOp       ( AliExternalTrackParam& ) const {return 0;}
  virtual Int_t GetTrackParamCp       ( AliExternalTrackParam& ) const {return 0;}
  virtual Int_t GetTrackParamITSOut   ( AliExternalTrackParam& ) const {return 0;}

  virtual Int_t             GetKinkIndex(Int_t /*i*/) const { return 0;}
  virtual Double_t          GetSigned1Pt()         const { return 0;}
  virtual Bool_t            IsOn(Int_t /*mask*/) const {return 0;}
  virtual Double_t          GetX()    const {return 0;}
  virtual Double_t          GetY()    const {return 0;}
  virtual Double_t          GetZ()    const {return 0;}
  virtual const Double_t   *GetParameter() const {return 0;}
  virtual Double_t          GetAlpha() const {return 0;}
  virtual UShort_t          GetTPCncls(Int_t /*row0*/=0, Int_t /*row1*/=159) const {return 0;}
  virtual Double_t          GetTOFsignalDz() const {return 0;}
  virtual Double_t          GetP() const {return 0;}
  virtual void              GetDirection(Double_t []) const {;}
  virtual Double_t          GetLinearD(Double_t /*xv*/, Double_t /*yv*/) const {return 0;}
  virtual void              GetDZ(Double_t /*x*/,Double_t /*y*/,Double_t /*z*/,Double_t /*b*/,Float_t [] /*dz[2]*/) const {;}
  virtual Char_t            GetITSclusters(Int_t */**idx*/) const {return 0;}
  virtual UChar_t           GetTRDclusters(Int_t */**idx*/) const {return 0;}


  ClassDef(AliVTrack,1)  // base class for tracks
};

#endif
 AliVTrack.h:1
 AliVTrack.h:2
 AliVTrack.h:3
 AliVTrack.h:4
 AliVTrack.h:5
 AliVTrack.h:6
 AliVTrack.h:7
 AliVTrack.h:8
 AliVTrack.h:9
 AliVTrack.h:10
 AliVTrack.h:11
 AliVTrack.h:12
 AliVTrack.h:13
 AliVTrack.h:14
 AliVTrack.h:15
 AliVTrack.h:16
 AliVTrack.h:17
 AliVTrack.h:18
 AliVTrack.h:19
 AliVTrack.h:20
 AliVTrack.h:21
 AliVTrack.h:22
 AliVTrack.h:23
 AliVTrack.h:24
 AliVTrack.h:25
 AliVTrack.h:26
 AliVTrack.h:27
 AliVTrack.h:28
 AliVTrack.h:29
 AliVTrack.h:30
 AliVTrack.h:31
 AliVTrack.h:32
 AliVTrack.h:33
 AliVTrack.h:34
 AliVTrack.h:35
 AliVTrack.h:36
 AliVTrack.h:37
 AliVTrack.h:38
 AliVTrack.h:39
 AliVTrack.h:40
 AliVTrack.h:41
 AliVTrack.h:42
 AliVTrack.h:43
 AliVTrack.h:44
 AliVTrack.h:45
 AliVTrack.h:46
 AliVTrack.h:47
 AliVTrack.h:48
 AliVTrack.h:49
 AliVTrack.h:50
 AliVTrack.h:51
 AliVTrack.h:52
 AliVTrack.h:53
 AliVTrack.h:54
 AliVTrack.h:55
 AliVTrack.h:56
 AliVTrack.h:57
 AliVTrack.h:58
 AliVTrack.h:59
 AliVTrack.h:60
 AliVTrack.h:61
 AliVTrack.h:62
 AliVTrack.h:63
 AliVTrack.h:64
 AliVTrack.h:65
 AliVTrack.h:66
 AliVTrack.h:67
 AliVTrack.h:68
 AliVTrack.h:69
 AliVTrack.h:70
 AliVTrack.h:71
 AliVTrack.h:72
 AliVTrack.h:73
 AliVTrack.h:74
 AliVTrack.h:75
 AliVTrack.h:76
 AliVTrack.h:77
 AliVTrack.h:78
 AliVTrack.h:79
 AliVTrack.h:80
 AliVTrack.h:81
 AliVTrack.h:82
 AliVTrack.h:83
 AliVTrack.h:84
 AliVTrack.h:85
 AliVTrack.h:86
 AliVTrack.h:87
 AliVTrack.h:88
 AliVTrack.h:89
 AliVTrack.h:90
 AliVTrack.h:91
 AliVTrack.h:92
 AliVTrack.h:93
 AliVTrack.h:94
 AliVTrack.h:95
 AliVTrack.h:96
 AliVTrack.h:97
 AliVTrack.h:98
 AliVTrack.h:99
 AliVTrack.h:100
 AliVTrack.h:101
 AliVTrack.h:102
 AliVTrack.h:103
 AliVTrack.h:104
 AliVTrack.h:105
 AliVTrack.h:106
 AliVTrack.h:107
 AliVTrack.h:108
 AliVTrack.h:109
 AliVTrack.h:110
 AliVTrack.h:111
 AliVTrack.h:112
 AliVTrack.h:113
 AliVTrack.h:114
 AliVTrack.h:115
 AliVTrack.h:116
 AliVTrack.h:117
 AliVTrack.h:118
 AliVTrack.h:119
 AliVTrack.h:120
 AliVTrack.h:121
 AliVTrack.h:122
 AliVTrack.h:123
 AliVTrack.h:124
 AliVTrack.h:125
 AliVTrack.h:126
 AliVTrack.h:127
 AliVTrack.h:128
 AliVTrack.h:129
 AliVTrack.h:130
 AliVTrack.h:131
 AliVTrack.h:132
 AliVTrack.h:133
 AliVTrack.h:134
 AliVTrack.h:135
 AliVTrack.h:136
 AliVTrack.h:137
 AliVTrack.h:138
 AliVTrack.h:139
 AliVTrack.h:140
 AliVTrack.h:141
 AliVTrack.h:142
 AliVTrack.h:143
 AliVTrack.h:144
 AliVTrack.h:145
 AliVTrack.h:146
 AliVTrack.h:147
 AliVTrack.h:148
 AliVTrack.h:149
 AliVTrack.h:150
 AliVTrack.h:151
 AliVTrack.h:152
 AliVTrack.h:153
 AliVTrack.h:154
 AliVTrack.h:155
 AliVTrack.h:156
 AliVTrack.h:157
 AliVTrack.h:158
 AliVTrack.h:159
 AliVTrack.h:160
 AliVTrack.h:161
 AliVTrack.h:162
 AliVTrack.h:163
 AliVTrack.h:164
 AliVTrack.h:165
 AliVTrack.h:166
 AliVTrack.h:167
 AliVTrack.h:168
 AliVTrack.h:169
 AliVTrack.h:170
 AliVTrack.h:171
 AliVTrack.h:172
 AliVTrack.h:173
 AliVTrack.h:174
 AliVTrack.h:175
 AliVTrack.h:176
 AliVTrack.h:177
 AliVTrack.h:178
 AliVTrack.h:179
 AliVTrack.h:180
 AliVTrack.h:181
 AliVTrack.h:182
 AliVTrack.h:183
 AliVTrack.h:184
 AliVTrack.h:185
 AliVTrack.h:186
 AliVTrack.h:187
 AliVTrack.h:188
 AliVTrack.h:189
 AliVTrack.h:190
 AliVTrack.h:191
 AliVTrack.h:192
 AliVTrack.h:193
 AliVTrack.h:194
 AliVTrack.h:195
 AliVTrack.h:196
 AliVTrack.h:197
 AliVTrack.h:198
 AliVTrack.h:199
 AliVTrack.h:200
 AliVTrack.h:201
 AliVTrack.h:202
 AliVTrack.h:203
 AliVTrack.h:204