Add method to get the density of good cells in isolation cone (Nicolas)
[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 {
ba54e4d4 45 kTrkTPCOnly = BIT(0), // Standard TPC only tracks
46 kTrkITSsa = BIT(1), // ITS standalone
47 kTrkITSConstrained = BIT(2), // Pixel OR necessary for the electrons
48 kTrkElectronsPID = BIT(3), // PID for the electrons
49 kTrkGlobalNoDCA = BIT(4), // standard cuts with very loose DCA
50 kTrkGlobal = BIT(5), // standard cuts with tight DCA cut
51 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
52 kTrkTPCOnlyConstrained = BIT(7) // TPC only tracks: TPConly information constrained to SPD vertex in the filter below
0e31a30a 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; }
0914b519 127 UShort_t GetTPCNcls() const {
5d8eaff6 128 UShort_t cl = fTPCFitMap.CountBits();
0914b519 129 if(cl==0)return fTPCClusterMap.CountBits();// backward compatibility
130 return cl;
131 }
4697e4fb 132
133 virtual Double_t M() const { return M(GetMostProbablePID()); }
134 Double_t M(AODTrkPID_t pid) const;
135 virtual Double_t E() const { return E(GetMostProbablePID()); }
136 Double_t E(AODTrkPID_t pid) const;
137 Double_t E(Double_t m) const { return TMath::Sqrt(P()*P() + m*m); }
138 virtual Double_t Y() const { return Y(GetMostProbablePID()); }
139 Double_t Y(AODTrkPID_t pid) const;
140 Double_t Y(Double_t m) const;
df9db588 141
142 virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }
df9db588 143
144 virtual Short_t Charge() const {return fCharge; }
145
6dc40b1c 146 virtual Bool_t PropagateToDCA(const AliVVertex *vtx,
147 Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);
148
df9db588 149 // PID
150 virtual const Double_t *PID() const { return fPID; }
4697e4fb 151 AODTrkPID_t GetMostProbablePID() const;
152 void ConvertAliPIDtoAODPID();
e68fa179 153 void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}
df9db588 154
155 template <class T> void GetPID(T *pid) const {
156 for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
157
158 template <class T> void SetPID(const T *pid) {
159 if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
f12d42ce 160 else {for(Int_t i=0; i<10; fPID[i++]=0.) ; fPID[AliAODTrack::kUnknown]=1.;}}
df9db588 161
6efb741f 162 Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
163 ULong_t GetStatus() const { return GetFlags(); }
164 ULong_t GetFlags() const { return fFlags; }
165
4f6e22bd 166 Int_t GetID() const { return (Int_t)fID; }
02153d58 167 Int_t GetLabel() const { return fLabel; }
168 Char_t GetType() const { return fType;}
862ce351 169 Bool_t IsPrimaryCandidate() const;
02153d58 170 Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
171 Bool_t GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }
9e3e4265 172
173 Bool_t IsHybridGlobalConstrainedGlobal() const { return TestBit(kIsHybridGCG); }
174 Bool_t IsHybridTPCConstrainedGlobal() const { return TestBit(kIsHybridTPCCG); }
175 Bool_t IsTPCOnly() const { return IsTPCConstrained(); } // obsolete bad naming
176 Bool_t IsTPCConstrained() const { return TestBit(kIsTPCConstrained); }
177 Bool_t IsGlobalConstrained() const { return TestBit(kIsGlobalConstrained); }
76e6ee6a 178 //
1cecd6e3 179 Int_t GetTOFBunchCrossing(Double_t b=0, Bool_t tpcPIDonly=kFALSE) const;
76e6ee6a 180 //
df9db588 181 template <class T> void GetP(T *p) const {
182 p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}
183
c8fe2783 184// template <class T> void GetPxPyPz(T *p) const {
185// p[0] = Px(); p[1] = Py(); p[2] = Pz();}
186 Bool_t GetPxPyPz(Double_t *p) const;
df9db588 187
188 template <class T> Bool_t GetPosition(T *x) const {
189 x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
190 return TestBit(kIsDCA);}
191
192 template <class T> void SetCovMatrix(const T *covMatrix) {
5d62ce04 193 if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
df9db588 194 fCovMatrix->SetCovMatrix(covMatrix);}
195
196 template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
197 if(!fCovMatrix) return kFALSE;
198 fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
199
892be05f 200 Bool_t GetXYZ(Double_t *p) const {
201 return GetPosition(p); }
202
4f6e22bd 203 Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
204 return GetCovMatrix(cv);}
205
df9db588 206 void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
207
6c954176 208 Double_t XAtDCA() const { return fPositionAtDCA[0]; }
209 Double_t YAtDCA() const { return fPositionAtDCA[1]; }
210 Double_t ZAtDCA() const {
211 if (IsMuonTrack()) return fPosition[2];
212 else if (TestBit(kIsDCA)) return fPosition[1];
213 else return -999.; }
214 Bool_t XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
215
216 Double_t DCA() const {
217 if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
218 else if (TestBit(kIsDCA)) return fPosition[0];
219 else return -999.; }
220
221 Double_t PxAtDCA() const { return fMomentumAtDCA[0]; }
222 Double_t PyAtDCA() const { return fMomentumAtDCA[1]; }
223 Double_t PzAtDCA() const { return fMomentumAtDCA[2]; }
224 Double_t PAtDCA() const { return TMath::Sqrt(PxAtDCA()*PxAtDCA() + PyAtDCA()*PyAtDCA() + PzAtDCA()*PzAtDCA()); }
225 Bool_t PxPyPzAtDCA(Double_t p[3]) const { p[0] = PxAtDCA(); p[1] = PyAtDCA(); p[2] = PzAtDCA(); return kTRUE; }
226
f43586f0 227 Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
228
6c954176 229 UChar_t GetITSClusterMap() const { return (UChar_t)(fITSMuonClusterMap&0xff); }
6dc40b1c 230 Int_t GetITSNcls() const;
231 Bool_t HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
6c954176 232 UShort_t GetHitsPatternInTrigCh() const { return (UShort_t)((fITSMuonClusterMap&0xff00)>>8); }
233 UInt_t GetMUONClusterMap() const { return (fITSMuonClusterMap&0x3ff0000)>>16; }
234 UInt_t GetITSMUONClusterMap() const { return fITSMuonClusterMap; }
235
8a1418dc 236 Bool_t TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
6db112a4 237 Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
e4b91233 238 void SetFilterMap(UInt_t i){fFilterMap = i;}
681b1d8b 239 UInt_t GetFilterMap() const {return fFilterMap;}
df9db588 240
507ed024 241 const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
bcabd0e4 242 const TBits& GetTPCFitMap() const {return fTPCFitMap;}
25f906db 243 Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t /*type*/=0) const;
9006fe9c 244
507ed024 245 const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
246 void SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
247 void SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
bcabd0e4 248 void SetTPCFitMap(const TBits amap) {fTPCFitMap = amap;}
3c01c166 249 void SetTPCPointsF(UShort_t findable){fTPCnclsF = findable;}
250
251 UShort_t GetTPCNclsF() const { return fTPCnclsF;}
252
a7d9ab9e 253 // Calorimeter Cluster
254 Int_t GetEMCALcluster() const {return fCaloIndex;}
255 void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
256 Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
257
ed15417e 258 Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
259 Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
260 void SetTrackPhiEtaOnEMCal(Double_t phi,Double_t eta) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;}
261
a7d9ab9e 262 Int_t GetPHOScluster() const {return fCaloIndex;}
263 void SetPHOScluster(Int_t index) {fCaloIndex=index;}
264 Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
265
9006fe9c 266 //pid signal interface
267 Double_t GetITSsignal() const { return fDetPid?fDetPid->GetITSsignal():0.; }
268 Double_t GetTPCsignal() const { return fDetPid?fDetPid->GetTPCsignal():0.; }
269 UShort_t GetTPCsignalN() const { return fDetPid?fDetPid->GetTPCsignalN():0; }
270 Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
5839d3e1 271 Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
272 Double_t GetHMPIDsignal() const { return fDetPid?fDetPid->GetHMPIDsignal():0.; }
273
ea235c90 274 void GetIntegratedTimes(Double_t *times) const {if (fDetPid) fDetPid->GetIntegratedTimes(times); }
fd21ec8d 275 Double_t GetTRDslice(Int_t plane, Int_t slice) const;
ea235c90 276 Double_t GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
59a8e853 277 UChar_t GetTRDncls(Int_t layer = -1) const;
99e9d5ec 278 UChar_t GetTRDntrackletsPID() const;
ea235c90 279 void GetHMPIDpid(Double_t *p) const { if (fDetPid) fDetPid->GetHMPIDprobs(p); }
fd21ec8d 280
9006fe9c 281
7be1db84 282 AliAODPid *GetDetPid() const { return fDetPid; }
df9db588 283 AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
284
285 // print
286 void Print(const Option_t *opt = "") const;
287
288 // setters
6efb741f 289 void SetFlags(ULong_t flags) { fFlags = flags; }
290 void SetStatus(ULong_t flags) { fFlags|=flags; }
291 void ResetStatus(ULong_t flags) { fFlags&=~flags; }
292
02153d58 293 void SetID(Short_t id) { fID = id; }
6efb741f 294 void SetLabel(Int_t label) { fLabel = label; }
df9db588 295
14b34be5 296 template <class T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
df9db588 297 void SetDCA(Double_t d, Double_t z);
1912763f 298 void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
dc825b15 299 void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
9e3e4265 300
301 void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming
041743e4 302
9e3e4265 303 void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
041743e4 304 void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }
305
9e3e4265 306 void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
307 void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }
308
309
df9db588 310
f4ad422f 311 void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
16b65f2a 312 void SetPt(Double_t pt) { fMomentum[0] = pt; };
14b34be5 313 void SetPhi(Double_t phi) { fMomentum[1] = phi; }
314 void SetTheta(Double_t theta) { fMomentum[2] = theta; }
315 template <class T> void SetP(const T *p, Bool_t cartesian = kTRUE);
df9db588 316 void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}
317
6c954176 318 void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
319 void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
320
f43586f0 321 void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
322
14b34be5 323 void SetCharge(Short_t q) { fCharge = q; }
1912763f 324 void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
df9db588 325
6c954176 326 void SetITSClusterMap(UChar_t itsClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
327 void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
328 void SetMuonClusterMap(UInt_t muonClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
329 void SetITSMuonClusterMap(UInt_t itsMuonClusMap) { fITSMuonClusterMap = itsMuonClusMap; }
df9db588 330
8a1418dc 331 Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
e1c744ca 332 // 0 Muon track does not match trigger
333 // 1 Muon track match but does not pass pt cut
334 // 2 Muon track match Low pt cut
335 // 3 Muon track match High pt cut
336 void SetMatchTrigger(Int_t MatchTrigger);
2200238e 337 Bool_t MatchTrigger() const { return (GetMatchTrigger()>0); } // Muon track matches trigger track
338 Bool_t MatchTriggerLowPt() const { return (GetMatchTrigger()>1); } // Muon track matches trigger track and passes Low pt cut
339 Bool_t MatchTriggerHighPt() const { return (GetMatchTrigger()>2); } // Muon track matches trigger track and passes High pt cut
340 Bool_t MatchTriggerDigits() const; // Muon track matches trigger digits
8a1418dc 341 Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger;}
6c954176 342 void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
2200238e 343 Bool_t HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const; // Check if track hits Muon chambers
6c954176 344 Bool_t IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
5c15a68b 345
346 void Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
347 Bool_t IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}
e1c744ca 348
c683ddc2 349 void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
350 void SetType(AODTrk_t ttype) { fType=ttype; }
351
6dc40b1c 352
353
6a8e543a 354 // Dummy
355 Int_t PdgCode() const {return 0;}
356
df9db588 357 private :
358
359 // Momentum & position
1912763f 360 Double32_t fMomentum[3]; // momemtum stored in pt, phi, theta
361 Double32_t fPosition[3]; // position of first point on track or dca
6c954176 362
363 Double32_t fMomentumAtDCA[3]; // momentum (px,py,pz) at DCA
364 Double32_t fPositionAtDCA[2]; // trasverse position (x,y) at DCA
365
f43586f0 366 Double32_t fRAtAbsorberEnd; // transverse position r at the end of the muon absorber
367
862ce351 368 Double32_t fChi2perNDF; // chi2/NDF of momentum fit
9333290e 369 Double32_t fChi2MatchTrigger; // chi2 of trigger/track matching
370 Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
df9db588 371
6efb741f 372 ULong_t fFlags; // reconstruction status flags
1912763f 373 Int_t fLabel; // track label, points back to MC track
df9db588 374
6c954176 375 UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
376 // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
9333290e 377 UInt_t fFilterMap; // filter information, one bit per set of cuts
df9db588 378
bcabd0e4 379 TBits fTPCFitMap; // Map of clusters, one bit per padrow; if has a cluster on given padrow which is used in the fit
507ed024 380 TBits fTPCClusterMap; // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
381 TBits fTPCSharedMap; // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow
bcabd0e4 382
3c01c166 383 UShort_t fTPCnclsF; // findable clusters
507ed024 384
02153d58 385 Short_t fID; // unique track ID, points back to the ESD track
386
1912763f 387 Char_t fCharge; // particle charge
1912763f 388 Char_t fType; // Track Type
a7d9ab9e 389
390 Int_t fCaloIndex; // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)
391
507ed024 392
9333290e 393 AliAODRedCov<6> *fCovMatrix; // covariance matrix (x, y, z, px, py, pz)
7be1db84 394 AliAODPid *fDetPid; // more detailed or detector specific pid information
9333290e 395 TRef fProdVertex; // vertex of origin
df9db588 396
ed15417e 397 Double_t fTrackPhiOnEMCal; // phi of track after being propagated to 430cm
398 Double_t fTrackEtaOnEMCal; // eta of track after being propagated to 430cm
399
400 ClassDef(AliAODTrack, 16);
df9db588 401};
402
862ce351 403inline Bool_t AliAODTrack::IsPrimaryCandidate() const
404{
405 // True of track passes primary particle selection (independent of type)
406 //
407 if (fFilterMap) {
408 return kTRUE;
409 } else {
410 return kFALSE;
411 }
412}
413
6dc40b1c 414inline Int_t AliAODTrack::GetITSNcls() const
415{
416 // Number of points in ITS
417 Int_t n=0;
418 for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
419 return n;
420}
421
df9db588 422#endif