]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODTrack.h
make iterattion to next cluster structure better suited for decoding
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODTrack.h
CommitLineData
df9db588 1#ifndef AliAODTrack_H
2#define AliAODTrack_H
3/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8//-------------------------------------------------------------------------
4f6e22bd 9// AOD track implementation of AliVTrack
df9db588 10// Author: Markus Oldenburg, CERN
11//-------------------------------------------------------------------------
12
13#include <TRef.h>
507ed024 14#include <TBits.h>
df9db588 15
4f6e22bd 16#include "AliVTrack.h"
df9db588 17#include "AliAODVertex.h"
5d62ce04 18#include "AliAODRedCov.h"
7be1db84 19#include "AliAODPid.h"
c8fe2783 20
df9db588 21
6dc40b1c 22class AliVVertex;
23
4f6e22bd 24class AliAODTrack : public AliVTrack {
df9db588 25
26 public:
27
1912763f 28 enum AODTrk_t {kUndef = -1,
29 kPrimary,
30 kSecondary,
31 kOrphan};
df9db588 32
33 enum AODTrkBits_t {
dc825b15 34 kIsDCA=BIT(14), // set if fPosition is the DCA and not the position of the first point
1912763f 35 kUsedForVtxFit=BIT(15), // set if this track was used to fit the vertex it is attached to
ed47dd92 36 kUsedForPrimVtxFit=BIT(16), // set if this track was used to fit the primary vertex
9e3e4265 37 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
38 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
39 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
40 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
df9db588 41 };
42
0e31a30a 43
44 enum AODTrkFilterBits_t {
45 kTrkTPCOnly = BIT(1), // Standard TPC only tracks
46 kTrkITSsa = BIT(2), // ITS standalone
47 kTrkITSConstrained = BIT(3), // Pixel OR necessary for the electrons
48 kTrkElectronsPID = BIT(4), // PID for the electrons
49 kTrkGlobalNoDCA = BIT(5), // standard cuts with very loose DCA
50 kTrkGlobal = BIT(6), // standard cuts with tight DCA cut
51 kTrkGlobalSDD = BIT(7), // 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
52 kTrkTPCOnlyConstrained = BIT(8) // TPC only tracks: TPConly information constrained to SPD vertex in the filter below
53 };
54
55
4697e4fb 56 enum AODTrkPID_t {
1912763f 57 kElectron = 0,
58 kMuon = 1,
59 kPion = 2,
60 kKaon = 3,
61 kProton = 4,
4697e4fb 62 kDeuteron = 5,
63 kTriton = 6,
64 kHelium3 = 7,
65 kAlpha = 8,
66 kUnknown = 9,
67 kMostProbable = -1
68 };
df9db588 69
70 AliAODTrack();
02153d58 71 AliAODTrack(Short_t id,
df9db588 72 Int_t label,
73 Double_t p[3],
74 Bool_t cartesian,
75 Double_t x[3],
76 Bool_t dca,
77 Double_t covMatrix[21],
78 Short_t q,
79 UChar_t itsClusMap,
80 Double_t pid[10],
81 AliAODVertex *prodVertex,
1912763f 82 Bool_t usedForVtxFit,
dc825b15 83 Bool_t usedForPrimVtxFit,
ec40c484 84 AODTrk_t ttype=kUndef,
862ce351 85 UInt_t selectInfo=0,
86 Float_t chi2perNDF = -999.);
df9db588 87
02153d58 88 AliAODTrack(Short_t id,
df9db588 89 Int_t label,
90 Float_t p[3],
91 Bool_t cartesian,
92 Float_t x[3],
93 Bool_t dca,
94 Float_t covMatrix[21],
95 Short_t q,
96 UChar_t itsClusMap,
97 Float_t pid[10],
98 AliAODVertex *prodVertex,
1912763f 99 Bool_t usedForVtxFit,
dc825b15 100 Bool_t usedForPrimVtxFit,
ec40c484 101 AODTrk_t ttype=kUndef,
862ce351 102 UInt_t selectInfo=0,
103 Float_t chi2perNDF = -999.);
df9db588 104
105 virtual ~AliAODTrack();
106 AliAODTrack(const AliAODTrack& trk);
107 AliAODTrack& operator=(const AliAODTrack& trk);
108
109 // kinematics
16b65f2a 110 virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
df9db588 111 virtual Double_t Phi() const { return fMomentum[1]; }
112 virtual Double_t Theta() const { return fMomentum[2]; }
113
16b65f2a 114 virtual Double_t Px() const { return fMomentum[0] * TMath::Cos(fMomentum[1]); }
115 virtual Double_t Py() const { return fMomentum[0] * TMath::Sin(fMomentum[1]); }
116 virtual Double_t Pz() const { return fMomentum[0] / TMath::Tan(fMomentum[2]); }
117 virtual Double_t Pt() const { return fMomentum[0]; }
df9db588 118 virtual Double_t P() const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
c683ddc2 119 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
120
121 virtual Double_t Xv() const { return GetProdVertex() ? GetProdVertex()->GetX() : -999.; }
122 virtual Double_t Yv() const { return GetProdVertex() ? GetProdVertex()->GetY() : -999.; }
123 virtual Double_t Zv() const { return GetProdVertex() ? GetProdVertex()->GetZ() : -999.; }
124 virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
125
c4460410 126 Double_t Chi2perNDF() const { return fChi2perNDF; }
127 UShort_t GetTPCNcls() const { return fTPCClusterMap.CountBits();}
4697e4fb 128
129 virtual Double_t M() const { return M(GetMostProbablePID()); }
130 Double_t M(AODTrkPID_t pid) const;
131 virtual Double_t E() const { return E(GetMostProbablePID()); }
132 Double_t E(AODTrkPID_t pid) const;
133 Double_t E(Double_t m) const { return TMath::Sqrt(P()*P() + m*m); }
134 virtual Double_t Y() const { return Y(GetMostProbablePID()); }
135 Double_t Y(AODTrkPID_t pid) const;
136 Double_t Y(Double_t m) const;
df9db588 137
138 virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }
df9db588 139
140 virtual Short_t Charge() const {return fCharge; }
141
6dc40b1c 142 virtual Bool_t PropagateToDCA(const AliVVertex *vtx,
143 Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);
144
df9db588 145 // PID
146 virtual const Double_t *PID() const { return fPID; }
4697e4fb 147 AODTrkPID_t GetMostProbablePID() const;
148 void ConvertAliPIDtoAODPID();
e68fa179 149 void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}
df9db588 150
151 template <class T> void GetPID(T *pid) const {
152 for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
153
154 template <class T> void SetPID(const T *pid) {
155 if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
f12d42ce 156 else {for(Int_t i=0; i<10; fPID[i++]=0.) ; fPID[AliAODTrack::kUnknown]=1.;}}
df9db588 157
6efb741f 158 Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
159 ULong_t GetStatus() const { return GetFlags(); }
160 ULong_t GetFlags() const { return fFlags; }
161
4f6e22bd 162 Int_t GetID() const { return (Int_t)fID; }
02153d58 163 Int_t GetLabel() const { return fLabel; }
164 Char_t GetType() const { return fType;}
862ce351 165 Bool_t IsPrimaryCandidate() const;
02153d58 166 Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
167 Bool_t GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }
9e3e4265 168
169 Bool_t IsHybridGlobalConstrainedGlobal() const { return TestBit(kIsHybridGCG); }
170 Bool_t IsHybridTPCConstrainedGlobal() const { return TestBit(kIsHybridTPCCG); }
171 Bool_t IsTPCOnly() const { return IsTPCConstrained(); } // obsolete bad naming
172 Bool_t IsTPCConstrained() const { return TestBit(kIsTPCConstrained); }
173 Bool_t IsGlobalConstrained() const { return TestBit(kIsGlobalConstrained); }
76e6ee6a 174 //
a512bf97 175 Int_t GetTOFBunchCrossing(Double_t b=0) const;
76e6ee6a 176 //
df9db588 177 template <class T> void GetP(T *p) const {
178 p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}
179
c8fe2783 180// template <class T> void GetPxPyPz(T *p) const {
181// p[0] = Px(); p[1] = Py(); p[2] = Pz();}
182 Bool_t GetPxPyPz(Double_t *p) const;
df9db588 183
184 template <class T> Bool_t GetPosition(T *x) const {
185 x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
186 return TestBit(kIsDCA);}
187
188 template <class T> void SetCovMatrix(const T *covMatrix) {
5d62ce04 189 if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
df9db588 190 fCovMatrix->SetCovMatrix(covMatrix);}
191
192 template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
193 if(!fCovMatrix) return kFALSE;
194 fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
195
892be05f 196 Bool_t GetXYZ(Double_t *p) const {
197 return GetPosition(p); }
198
4f6e22bd 199 Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
200 return GetCovMatrix(cv);}
201
df9db588 202 void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
203
6c954176 204 Double_t XAtDCA() const { return fPositionAtDCA[0]; }
205 Double_t YAtDCA() const { return fPositionAtDCA[1]; }
206 Double_t ZAtDCA() const {
207 if (IsMuonTrack()) return fPosition[2];
208 else if (TestBit(kIsDCA)) return fPosition[1];
209 else return -999.; }
210 Bool_t XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
211
212 Double_t DCA() const {
213 if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
214 else if (TestBit(kIsDCA)) return fPosition[0];
215 else return -999.; }
216
217 Double_t PxAtDCA() const { return fMomentumAtDCA[0]; }
218 Double_t PyAtDCA() const { return fMomentumAtDCA[1]; }
219 Double_t PzAtDCA() const { return fMomentumAtDCA[2]; }
220 Double_t PAtDCA() const { return TMath::Sqrt(PxAtDCA()*PxAtDCA() + PyAtDCA()*PyAtDCA() + PzAtDCA()*PzAtDCA()); }
221 Bool_t PxPyPzAtDCA(Double_t p[3]) const { p[0] = PxAtDCA(); p[1] = PyAtDCA(); p[2] = PzAtDCA(); return kTRUE; }
222
f43586f0 223 Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
224
6c954176 225 UChar_t GetITSClusterMap() const { return (UChar_t)(fITSMuonClusterMap&0xff); }
6dc40b1c 226 Int_t GetITSNcls() const;
227 Bool_t HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
6c954176 228 UShort_t GetHitsPatternInTrigCh() const { return (UShort_t)((fITSMuonClusterMap&0xff00)>>8); }
229 UInt_t GetMUONClusterMap() const { return (fITSMuonClusterMap&0x3ff0000)>>16; }
230 UInt_t GetITSMUONClusterMap() const { return fITSMuonClusterMap; }
231
8a1418dc 232 Bool_t TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
6db112a4 233 Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
e4b91233 234 void SetFilterMap(UInt_t i){fFilterMap = i;}
235 UInt_t GetFilterMap(){return fFilterMap;}
df9db588 236
507ed024 237 const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
9006fe9c 238 Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159) const;
239
507ed024 240 const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
241 void SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
242 void SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
3c01c166 243 void SetTPCPointsF(UShort_t findable){fTPCnclsF = findable;}
244
245 UShort_t GetTPCNclsF() const { return fTPCnclsF;}
246
a7d9ab9e 247 // Calorimeter Cluster
248 Int_t GetEMCALcluster() const {return fCaloIndex;}
249 void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
250 Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
251
252 Int_t GetPHOScluster() const {return fCaloIndex;}
253 void SetPHOScluster(Int_t index) {fCaloIndex=index;}
254 Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
255
9006fe9c 256 //pid signal interface
257 Double_t GetITSsignal() const { return fDetPid?fDetPid->GetITSsignal():0.; }
258 Double_t GetTPCsignal() const { return fDetPid?fDetPid->GetTPCsignal():0.; }
259 UShort_t GetTPCsignalN() const { return fDetPid?fDetPid->GetTPCsignalN():0; }
260 Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
261 Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
ea235c90 262 void GetIntegratedTimes(Double_t *times) const {if (fDetPid) fDetPid->GetIntegratedTimes(times); }
fd21ec8d 263 Double_t GetTRDslice(Int_t plane, Int_t slice) const;
ea235c90 264 Double_t GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
99e9d5ec 265 UChar_t GetTRDntrackletsPID() const;
ea235c90 266 void GetHMPIDpid(Double_t *p) const { if (fDetPid) fDetPid->GetHMPIDprobs(p); }
fd21ec8d 267
9006fe9c 268
7be1db84 269 AliAODPid *GetDetPid() const { return fDetPid; }
df9db588 270 AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
271
272 // print
273 void Print(const Option_t *opt = "") const;
274
275 // setters
6efb741f 276 void SetFlags(ULong_t flags) { fFlags = flags; }
277 void SetStatus(ULong_t flags) { fFlags|=flags; }
278 void ResetStatus(ULong_t flags) { fFlags&=~flags; }
279
02153d58 280 void SetID(Short_t id) { fID = id; }
6efb741f 281 void SetLabel(Int_t label) { fLabel = label; }
df9db588 282
14b34be5 283 template <class T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
df9db588 284 void SetDCA(Double_t d, Double_t z);
1912763f 285 void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
dc825b15 286 void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
9e3e4265 287
288 void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming
041743e4 289
9e3e4265 290 void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
041743e4 291 void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }
292
9e3e4265 293 void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
294 void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }
295
296
df9db588 297
f4ad422f 298 void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
16b65f2a 299 void SetPt(Double_t pt) { fMomentum[0] = pt; };
14b34be5 300 void SetPhi(Double_t phi) { fMomentum[1] = phi; }
301 void SetTheta(Double_t theta) { fMomentum[2] = theta; }
302 template <class T> void SetP(const T *p, Bool_t cartesian = kTRUE);
df9db588 303 void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}
304
6c954176 305 void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
306 void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
307
f43586f0 308 void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
309
14b34be5 310 void SetCharge(Short_t q) { fCharge = q; }
1912763f 311 void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
df9db588 312
6c954176 313 void SetITSClusterMap(UChar_t itsClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
314 void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
315 void SetMuonClusterMap(UInt_t muonClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
316 void SetITSMuonClusterMap(UInt_t itsMuonClusMap) { fITSMuonClusterMap = itsMuonClusMap; }
df9db588 317
8a1418dc 318 Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
e1c744ca 319 // 0 Muon track does not match trigger
320 // 1 Muon track match but does not pass pt cut
321 // 2 Muon track match Low pt cut
322 // 3 Muon track match High pt cut
323 void SetMatchTrigger(Int_t MatchTrigger);
2200238e 324 Bool_t MatchTrigger() const { return (GetMatchTrigger()>0); } // Muon track matches trigger track
325 Bool_t MatchTriggerLowPt() const { return (GetMatchTrigger()>1); } // Muon track matches trigger track and passes Low pt cut
326 Bool_t MatchTriggerHighPt() const { return (GetMatchTrigger()>2); } // Muon track matches trigger track and passes High pt cut
327 Bool_t MatchTriggerDigits() const; // Muon track matches trigger digits
8a1418dc 328 Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger;}
6c954176 329 void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
2200238e 330 Bool_t HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const; // Check if track hits Muon chambers
6c954176 331 Bool_t IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
5c15a68b 332
333 void Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
334 Bool_t IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}
e1c744ca 335
c683ddc2 336 void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
337 void SetType(AODTrk_t ttype) { fType=ttype; }
338
6dc40b1c 339
340
6a8e543a 341 // Dummy
342 Int_t PdgCode() const {return 0;}
343
df9db588 344 private :
345
346 // Momentum & position
1912763f 347 Double32_t fMomentum[3]; // momemtum stored in pt, phi, theta
348 Double32_t fPosition[3]; // position of first point on track or dca
6c954176 349
350 Double32_t fMomentumAtDCA[3]; // momentum (px,py,pz) at DCA
351 Double32_t fPositionAtDCA[2]; // trasverse position (x,y) at DCA
352
f43586f0 353 Double32_t fRAtAbsorberEnd; // transverse position r at the end of the muon absorber
354
862ce351 355 Double32_t fChi2perNDF; // chi2/NDF of momentum fit
9333290e 356 Double32_t fChi2MatchTrigger; // chi2 of trigger/track matching
357 Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
df9db588 358
6efb741f 359 ULong_t fFlags; // reconstruction status flags
1912763f 360 Int_t fLabel; // track label, points back to MC track
df9db588 361
6c954176 362 UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
363 // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
9333290e 364 UInt_t fFilterMap; // filter information, one bit per set of cuts
df9db588 365
507ed024 366 TBits fTPCClusterMap; // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
367 TBits fTPCSharedMap; // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow
3c01c166 368 UShort_t fTPCnclsF; // findable clusters
507ed024 369
02153d58 370 Short_t fID; // unique track ID, points back to the ESD track
371
1912763f 372 Char_t fCharge; // particle charge
1912763f 373 Char_t fType; // Track Type
a7d9ab9e 374
375 Int_t fCaloIndex; // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)
376
507ed024 377
9333290e 378 AliAODRedCov<6> *fCovMatrix; // covariance matrix (x, y, z, px, py, pz)
7be1db84 379 AliAODPid *fDetPid; // more detailed or detector specific pid information
9333290e 380 TRef fProdVertex; // vertex of origin
df9db588 381
9e3e4265 382 ClassDef(AliAODTrack, 14);
df9db588 383};
384
862ce351 385inline Bool_t AliAODTrack::IsPrimaryCandidate() const
386{
387 // True of track passes primary particle selection (independent of type)
388 //
389 if (fFilterMap) {
390 return kTRUE;
391 } else {
392 return kFALSE;
393 }
394}
395
6dc40b1c 396inline Int_t AliAODTrack::GetITSNcls() const
397{
398 // Number of points in ITS
399 Int_t n=0;
400 for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
401 return n;
402}
403
df9db588 404#endif