]>
Commit | Line | Data |
---|---|---|
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 | 22 | class AliVVertex; |
23 | ||
4f6e22bd | 24 | class 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 | ||
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 | 385 | inline 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 | 396 | inline 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 |