]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODTrack.h
Fix in TRD slices definion (Alex)
[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;
00a38d07 23class AliDetectorPID;
af48efa8 24class AliTPCdEdxInfo;
aab77ed0 25class AliAODEvent;
6dc40b1c 26
4f6e22bd 27class AliAODTrack : public AliVTrack {
df9db588 28
29 public:
30
1912763f 31 enum AODTrk_t {kUndef = -1,
32 kPrimary,
33 kSecondary,
34 kOrphan};
df9db588 35
36 enum AODTrkBits_t {
dc825b15 37 kIsDCA=BIT(14), // set if fPosition is the DCA and not the position of the first point
1912763f 38 kUsedForVtxFit=BIT(15), // set if this track was used to fit the vertex it is attached to
ed47dd92 39 kUsedForPrimVtxFit=BIT(16), // set if this track was used to fit the primary vertex
9e3e4265 40 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
41 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
42 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
43 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 44 };
45
0e31a30a 46
47 enum AODTrkFilterBits_t {
ba54e4d4 48 kTrkTPCOnly = BIT(0), // Standard TPC only tracks
49 kTrkITSsa = BIT(1), // ITS standalone
50 kTrkITSConstrained = BIT(2), // Pixel OR necessary for the electrons
51 kTrkElectronsPID = BIT(3), // PID for the electrons
52 kTrkGlobalNoDCA = BIT(4), // standard cuts with very loose DCA
53 kTrkGlobal = BIT(5), // standard cuts with tight DCA cut
54 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
55 kTrkTPCOnlyConstrained = BIT(7) // TPC only tracks: TPConly information constrained to SPD vertex in the filter below
0e31a30a 56 };
57
58
4697e4fb 59 enum AODTrkPID_t {
1912763f 60 kElectron = 0,
61 kMuon = 1,
62 kPion = 2,
63 kKaon = 3,
64 kProton = 4,
4697e4fb 65 kDeuteron = 5,
66 kTriton = 6,
67 kHelium3 = 7,
68 kAlpha = 8,
69 kUnknown = 9,
70 kMostProbable = -1
71 };
df9db588 72
73 AliAODTrack();
02153d58 74 AliAODTrack(Short_t id,
df9db588 75 Int_t label,
76 Double_t p[3],
77 Bool_t cartesian,
78 Double_t x[3],
79 Bool_t dca,
80 Double_t covMatrix[21],
81 Short_t q,
82 UChar_t itsClusMap,
83 Double_t pid[10],
84 AliAODVertex *prodVertex,
1912763f 85 Bool_t usedForVtxFit,
dc825b15 86 Bool_t usedForPrimVtxFit,
ec40c484 87 AODTrk_t ttype=kUndef,
862ce351 88 UInt_t selectInfo=0,
89 Float_t chi2perNDF = -999.);
df9db588 90
02153d58 91 AliAODTrack(Short_t id,
df9db588 92 Int_t label,
93 Float_t p[3],
94 Bool_t cartesian,
95 Float_t x[3],
96 Bool_t dca,
97 Float_t covMatrix[21],
98 Short_t q,
99 UChar_t itsClusMap,
100 Float_t pid[10],
101 AliAODVertex *prodVertex,
1912763f 102 Bool_t usedForVtxFit,
dc825b15 103 Bool_t usedForPrimVtxFit,
ec40c484 104 AODTrk_t ttype=kUndef,
862ce351 105 UInt_t selectInfo=0,
106 Float_t chi2perNDF = -999.);
df9db588 107
108 virtual ~AliAODTrack();
109 AliAODTrack(const AliAODTrack& trk);
110 AliAODTrack& operator=(const AliAODTrack& trk);
111
112 // kinematics
16b65f2a 113 virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
df9db588 114 virtual Double_t Phi() const { return fMomentum[1]; }
115 virtual Double_t Theta() const { return fMomentum[2]; }
116
16b65f2a 117 virtual Double_t Px() const { return fMomentum[0] * TMath::Cos(fMomentum[1]); }
118 virtual Double_t Py() const { return fMomentum[0] * TMath::Sin(fMomentum[1]); }
119 virtual Double_t Pz() const { return fMomentum[0] / TMath::Tan(fMomentum[2]); }
120 virtual Double_t Pt() const { return fMomentum[0]; }
df9db588 121 virtual Double_t P() const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
c683ddc2 122 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
123
124 virtual Double_t Xv() const { return GetProdVertex() ? GetProdVertex()->GetX() : -999.; }
125 virtual Double_t Yv() const { return GetProdVertex() ? GetProdVertex()->GetY() : -999.; }
126 virtual Double_t Zv() const { return GetProdVertex() ? GetProdVertex()->GetZ() : -999.; }
127 virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
128
c4460410 129 Double_t Chi2perNDF() const { return fChi2perNDF; }
0914b519 130 UShort_t GetTPCNcls() const {
5d8eaff6 131 UShort_t cl = fTPCFitMap.CountBits();
8e0bb2ab 132 if(cl==0)cl = fTPCClusterMap.CountBits();// backward compatibility
0914b519 133 return cl;
134 }
4697e4fb 135
136 virtual Double_t M() const { return M(GetMostProbablePID()); }
137 Double_t M(AODTrkPID_t pid) const;
138 virtual Double_t E() const { return E(GetMostProbablePID()); }
139 Double_t E(AODTrkPID_t pid) const;
140 Double_t E(Double_t m) const { return TMath::Sqrt(P()*P() + m*m); }
141 virtual Double_t Y() const { return Y(GetMostProbablePID()); }
142 Double_t Y(AODTrkPID_t pid) const;
143 Double_t Y(Double_t m) const;
df9db588 144
145 virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }
df9db588 146
147 virtual Short_t Charge() const {return fCharge; }
148
6dc40b1c 149 virtual Bool_t PropagateToDCA(const AliVVertex *vtx,
150 Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);
151
df9db588 152 // PID
153 virtual const Double_t *PID() const { return fPID; }
4697e4fb 154 AODTrkPID_t GetMostProbablePID() const;
155 void ConvertAliPIDtoAODPID();
e68fa179 156 void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}
df9db588 157
cdd730d0 158 template <typename T> void GetPID(T *pid) const {
df9db588 159 for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
160
cdd730d0 161 template <typename T> void SetPID(const T *pid) {
df9db588 162 if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
f12d42ce 163 else {for(Int_t i=0; i<10; fPID[i++]=0.) ; fPID[AliAODTrack::kUnknown]=1.;}}
df9db588 164
6efb741f 165 Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
166 ULong_t GetStatus() const { return GetFlags(); }
167 ULong_t GetFlags() const { return fFlags; }
168
4f6e22bd 169 Int_t GetID() const { return (Int_t)fID; }
02153d58 170 Int_t GetLabel() const { return fLabel; }
171 Char_t GetType() const { return fType;}
862ce351 172 Bool_t IsPrimaryCandidate() const;
02153d58 173 Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
174 Bool_t GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }
9e3e4265 175
176 Bool_t IsHybridGlobalConstrainedGlobal() const { return TestBit(kIsHybridGCG); }
177 Bool_t IsHybridTPCConstrainedGlobal() const { return TestBit(kIsHybridTPCCG); }
178 Bool_t IsTPCOnly() const { return IsTPCConstrained(); } // obsolete bad naming
179 Bool_t IsTPCConstrained() const { return TestBit(kIsTPCConstrained); }
180 Bool_t IsGlobalConstrained() const { return TestBit(kIsGlobalConstrained); }
76e6ee6a 181 //
1cecd6e3 182 Int_t GetTOFBunchCrossing(Double_t b=0, Bool_t tpcPIDonly=kFALSE) const;
76e6ee6a 183 //
cdd730d0 184 template <typename T> void GetP(T *p) const {
df9db588 185 p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}
186
cdd730d0 187// template <typename T> void GetPxPyPz(T *p) const {
c8fe2783 188// p[0] = Px(); p[1] = Py(); p[2] = Pz();}
189 Bool_t GetPxPyPz(Double_t *p) const;
df9db588 190
cdd730d0 191 template <typename T> Bool_t GetPosition(T *x) const {
df9db588 192 x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
193 return TestBit(kIsDCA);}
194
cdd730d0 195 template <typename T> void SetCovMatrix(const T *covMatrix) {
5d62ce04 196 if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
df9db588 197 fCovMatrix->SetCovMatrix(covMatrix);}
198
cdd730d0 199 template <typename T> Bool_t GetCovMatrix(T *covMatrix) const {
df9db588 200 if(!fCovMatrix) return kFALSE;
201 fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
202
892be05f 203 Bool_t GetXYZ(Double_t *p) const {
204 return GetPosition(p); }
086400fc 205
206 Bool_t GetXYZAt(Double_t x, Double_t b, Double_t *r) const;
207
4f6e22bd 208 Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
209 return GetCovMatrix(cv);}
210
df9db588 211 void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
212
6c954176 213 Double_t XAtDCA() const { return fPositionAtDCA[0]; }
214 Double_t YAtDCA() const { return fPositionAtDCA[1]; }
215 Double_t ZAtDCA() const {
216 if (IsMuonTrack()) return fPosition[2];
217 else if (TestBit(kIsDCA)) return fPosition[1];
218 else return -999.; }
219 Bool_t XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
220
221 Double_t DCA() const {
222 if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
223 else if (TestBit(kIsDCA)) return fPosition[0];
224 else return -999.; }
225
226 Double_t PxAtDCA() const { return fMomentumAtDCA[0]; }
227 Double_t PyAtDCA() const { return fMomentumAtDCA[1]; }
228 Double_t PzAtDCA() const { return fMomentumAtDCA[2]; }
229 Double_t PAtDCA() const { return TMath::Sqrt(PxAtDCA()*PxAtDCA() + PyAtDCA()*PyAtDCA() + PzAtDCA()*PzAtDCA()); }
230 Bool_t PxPyPzAtDCA(Double_t p[3]) const { p[0] = PxAtDCA(); p[1] = PyAtDCA(); p[2] = PzAtDCA(); return kTRUE; }
231
f43586f0 232 Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
233
6c954176 234 UChar_t GetITSClusterMap() const { return (UChar_t)(fITSMuonClusterMap&0xff); }
6dc40b1c 235 Int_t GetITSNcls() const;
236 Bool_t HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
6c954176 237 UShort_t GetHitsPatternInTrigCh() const { return (UShort_t)((fITSMuonClusterMap&0xff00)>>8); }
238 UInt_t GetMUONClusterMap() const { return (fITSMuonClusterMap&0x3ff0000)>>16; }
239 UInt_t GetITSMUONClusterMap() const { return fITSMuonClusterMap; }
240
8a1418dc 241 Bool_t TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
6db112a4 242 Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
e4b91233 243 void SetFilterMap(UInt_t i){fFilterMap = i;}
681b1d8b 244 UInt_t GetFilterMap() const {return fFilterMap;}
df9db588 245
507ed024 246 const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
086400fc 247 const TBits* GetTPCClusterMapPtr() const {return &fTPCClusterMap;}
bcabd0e4 248 const TBits& GetTPCFitMap() const {return fTPCFitMap;}
74ca66e3 249 const TBits* GetTPCFitMapPtr() const {return &fTPCFitMap;}
25f906db 250 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 251
507ed024 252 const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
74ca66e3 253 const TBits* GetTPCSharedMapPtr() const {return &fTPCSharedMap;}
507ed024 254 void SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
255 void SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
bcabd0e4 256 void SetTPCFitMap(const TBits amap) {fTPCFitMap = amap;}
3c01c166 257 void SetTPCPointsF(UShort_t findable){fTPCnclsF = findable;}
820214a7 258 void SetTPCNCrossedRows(UInt_t n) {fTPCNCrossedRows = n;}
3c01c166 259
260 UShort_t GetTPCNclsF() const { return fTPCnclsF;}
820214a7 261 UShort_t GetTPCNCrossedRows() const { return fTPCNCrossedRows;}
262 Float_t GetTPCFoundFraction() const { return fTPCNCrossedRows>0 ? float(GetTPCNcls())/fTPCNCrossedRows : 0;}
3c01c166 263
a7d9ab9e 264 // Calorimeter Cluster
265 Int_t GetEMCALcluster() const {return fCaloIndex;}
266 void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
267 Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
268
ed15417e 269 Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
270 Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
271 void SetTrackPhiEtaOnEMCal(Double_t phi,Double_t eta) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;}
272
a7d9ab9e 273 Int_t GetPHOScluster() const {return fCaloIndex;}
274 void SetPHOScluster(Int_t index) {fCaloIndex=index;}
275 Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
276
9006fe9c 277 //pid signal interface
278 Double_t GetITSsignal() const { return fDetPid?fDetPid->GetITSsignal():0.; }
74ca66e3 279 void GetITSdEdxSamples(Double_t s[4]) const;
9006fe9c 280 Double_t GetTPCsignal() const { return fDetPid?fDetPid->GetTPCsignal():0.; }
539a5a59 281 Double_t GetTPCsignalTunedOnData() const { return fTPCsignalTuned;}
282 void SetTPCsignalTunedOnData(Double_t signal) {fTPCsignalTuned = signal;}
9006fe9c 283 UShort_t GetTPCsignalN() const { return fDetPid?fDetPid->GetTPCsignalN():0; }
de26d2c7 284 virtual AliTPCdEdxInfo* GetTPCdEdxInfo() const {return fDetPid?fDetPid->GetTPCdEdxInfo():0;}
9006fe9c 285 Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
5839d3e1 286 Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
c997f0f9 287 Double_t GetHMPIDsignal() const { return 0.; } // TODO: To be implemented properly with the new HMPID object
5839d3e1 288
ea235c90 289 void GetIntegratedTimes(Double_t *times) const {if (fDetPid) fDetPid->GetIntegratedTimes(times); }
fd21ec8d 290 Double_t GetTRDslice(Int_t plane, Int_t slice) const;
ea235c90 291 Double_t GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
643d59bf 292 Double_t GetTRDchi2() const {return fDetPid ? fDetPid->GetTRDChi2() : -1;}
74ca66e3 293 UChar_t GetTRDncls(Int_t layer) const;
294 UChar_t GetTRDncls() const {return GetTRDncls(-1);}
99e9d5ec 295 UChar_t GetTRDntrackletsPID() const;
73b4da68 296 Int_t GetNumberOfTRDslices() const { return fDetPid?fDetPid->GetTRDnSlices():0; }
c997f0f9 297 void GetHMPIDpid(Double_t */*p*/) const { return; } // TODO: To be implemented properly with the new HMPID object
fd21ec8d 298
539a5a59 299 const AliAODEvent* GetAODEvent() const {return fAODEvent;}
aab77ed0 300 void SetAODEvent(const AliAODEvent* ptr){fAODEvent = ptr;}
301
7be1db84 302 AliAODPid *GetDetPid() const { return fDetPid; }
df9db588 303 AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
304
305 // print
306 void Print(const Option_t *opt = "") const;
307
308 // setters
6efb741f 309 void SetFlags(ULong_t flags) { fFlags = flags; }
310 void SetStatus(ULong_t flags) { fFlags|=flags; }
311 void ResetStatus(ULong_t flags) { fFlags&=~flags; }
312
02153d58 313 void SetID(Short_t id) { fID = id; }
6efb741f 314 void SetLabel(Int_t label) { fLabel = label; }
df9db588 315
cdd730d0 316 template <typename T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
df9db588 317 void SetDCA(Double_t d, Double_t z);
1912763f 318 void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
dc825b15 319 void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
9e3e4265 320
321 void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming
041743e4 322
9e3e4265 323 void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
041743e4 324 void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }
325
9e3e4265 326 void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
327 void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }
328
329
df9db588 330
f4ad422f 331 void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
16b65f2a 332 void SetPt(Double_t pt) { fMomentum[0] = pt; };
14b34be5 333 void SetPhi(Double_t phi) { fMomentum[1] = phi; }
334 void SetTheta(Double_t theta) { fMomentum[2] = theta; }
cdd730d0 335 template <typename T> void SetP(const T *p, Bool_t cartesian = kTRUE);
df9db588 336 void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}
337
6c954176 338 void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
339 void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
340
f43586f0 341 void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
342
14b34be5 343 void SetCharge(Short_t q) { fCharge = q; }
1912763f 344 void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
df9db588 345
6c954176 346 void SetITSClusterMap(UChar_t itsClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
347 void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
348 void SetMuonClusterMap(UInt_t muonClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
349 void SetITSMuonClusterMap(UInt_t itsMuonClusMap) { fITSMuonClusterMap = itsMuonClusMap; }
0a2dcc83 350 void SetMUONtrigHitsMapTrg(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrg = muonTrigHitsMap; }
351 UInt_t GetMUONTrigHitsMapTrg() { return fMUONtrigHitsMapTrg; }
352 void SetMUONtrigHitsMapTrk(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrk = muonTrigHitsMap; }
353 UInt_t GetMUONTrigHitsMapTrk() { return fMUONtrigHitsMapTrk; }
df9db588 354
8a1418dc 355 Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
e1c744ca 356 // 0 Muon track does not match trigger
357 // 1 Muon track match but does not pass pt cut
358 // 2 Muon track match Low pt cut
359 // 3 Muon track match High pt cut
360 void SetMatchTrigger(Int_t MatchTrigger);
2200238e 361 Bool_t MatchTrigger() const { return (GetMatchTrigger()>0); } // Muon track matches trigger track
362 Bool_t MatchTriggerLowPt() const { return (GetMatchTrigger()>1); } // Muon track matches trigger track and passes Low pt cut
363 Bool_t MatchTriggerHighPt() const { return (GetMatchTrigger()>2); } // Muon track matches trigger track and passes High pt cut
364 Bool_t MatchTriggerDigits() const; // Muon track matches trigger digits
8a1418dc 365 Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger;}
6c954176 366 void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
2200238e 367 Bool_t HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const; // Check if track hits Muon chambers
6c954176 368 Bool_t IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
5c15a68b 369
370 void Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
371 Bool_t IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}
e1c744ca 372
c683ddc2 373 void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
374 void SetType(AODTrk_t ttype) { fType=ttype; }
375
00a38d07 376 // Trasient PID object, is owned by the track
377 virtual void SetDetectorPID(const AliDetectorPID *pid);
378 virtual const AliDetectorPID* GetDetectorPID() const { return fDetectorPID; }
6dc40b1c 379
6a8e543a 380 // Dummy
381 Int_t PdgCode() const {return 0;}
382
df9db588 383 private :
384
385 // Momentum & position
1912763f 386 Double32_t fMomentum[3]; // momemtum stored in pt, phi, theta
387 Double32_t fPosition[3]; // position of first point on track or dca
6c954176 388
389 Double32_t fMomentumAtDCA[3]; // momentum (px,py,pz) at DCA
390 Double32_t fPositionAtDCA[2]; // trasverse position (x,y) at DCA
391
f43586f0 392 Double32_t fRAtAbsorberEnd; // transverse position r at the end of the muon absorber
393
862ce351 394 Double32_t fChi2perNDF; // chi2/NDF of momentum fit
9333290e 395 Double32_t fChi2MatchTrigger; // chi2 of trigger/track matching
396 Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
df9db588 397
6efb741f 398 ULong_t fFlags; // reconstruction status flags
1912763f 399 Int_t fLabel; // track label, points back to MC track
df9db588 400
6c954176 401 UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
402 // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
0a2dcc83 403 UInt_t fMUONtrigHitsMapTrg; // Muon trigger hits map from trigger
404 UInt_t fMUONtrigHitsMapTrk; // Muon trigger hits map from tracker track extrapolation
9333290e 405 UInt_t fFilterMap; // filter information, one bit per set of cuts
df9db588 406
bcabd0e4 407 TBits fTPCFitMap; // Map of clusters, one bit per padrow; if has a cluster on given padrow which is used in the fit
507ed024 408 TBits fTPCClusterMap; // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
409 TBits fTPCSharedMap; // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow
bcabd0e4 410
3c01c166 411 UShort_t fTPCnclsF; // findable clusters
820214a7 412 UShort_t fTPCNCrossedRows; // n crossed rows
507ed024 413
02153d58 414 Short_t fID; // unique track ID, points back to the ESD track
415
1912763f 416 Char_t fCharge; // particle charge
1912763f 417 Char_t fType; // Track Type
a7d9ab9e 418
419 Int_t fCaloIndex; // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)
420
507ed024 421
9333290e 422 AliAODRedCov<6> *fCovMatrix; // covariance matrix (x, y, z, px, py, pz)
00a38d07 423 AliAODPid *fDetPid; // more detailed or detector specific raw pid information
424 mutable const AliDetectorPID* fDetectorPID; //! transient object to cache calibrated PID information
9333290e 425 TRef fProdVertex; // vertex of origin
df9db588 426
ed15417e 427 Double_t fTrackPhiOnEMCal; // phi of track after being propagated to 430cm
428 Double_t fTrackEtaOnEMCal; // eta of track after being propagated to 430cm
429
539a5a59 430 Double_t fTPCsignalTuned; //! TPC signal tuned on data when using MC
431
aab77ed0 432 const AliAODEvent* fAODEvent; //!
433
820214a7 434 ClassDef(AliAODTrack, 19);
df9db588 435};
436
862ce351 437inline Bool_t AliAODTrack::IsPrimaryCandidate() const
438{
439 // True of track passes primary particle selection (independent of type)
440 //
441 if (fFilterMap) {
442 return kTRUE;
443 } else {
444 return kFALSE;
445 }
446}
447
6dc40b1c 448inline Int_t AliAODTrack::GetITSNcls() const
449{
450 // Number of points in ITS
451 Int_t n=0;
452 for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
453 return n;
454}
455
6e78367a 456//______________________________________________________________________________
457template <typename T>
458void AliAODTrack::SetPosition(const T *x, const Bool_t dca)
459{
460 // set the position
461
462 if (x) {
463 if (!dca) {
464 ResetBit(kIsDCA);
465
466 fPosition[0] = x[0];
467 fPosition[1] = x[1];
468 fPosition[2] = x[2];
469 } else {
470 SetBit(kIsDCA);
471 // don't know any better yet
472 fPosition[0] = -999.;
473 fPosition[1] = -999.;
474 fPosition[2] = -999.;
475 }
476 } else {
477 ResetBit(kIsDCA);
478
479 fPosition[0] = -999.;
480 fPosition[1] = -999.;
481 fPosition[2] = -999.;
482 }
483}
484
485//template<> void AliAODTrack::SetPosition(const double *, Bool_t);
fe7d86eb 486
df9db588 487#endif