3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 //-------------------------------------------------------------------------
9 // AOD track implementation of AliVTrack
10 // Author: Markus Oldenburg, CERN
11 //-------------------------------------------------------------------------
16 #include "AliVTrack.h"
17 #include "AliAODVertex.h"
18 #include "AliAODRedCov.h"
19 #include "AliAODPid.h"
27 class AliAODTrack : public AliVTrack {
31 enum AODTrk_t {kUndef = -1,
37 kIsDCA=BIT(14), // set if fPosition is the DCA and not the position of the first point
38 kUsedForVtxFit=BIT(15), // set if this track was used to fit the vertex it is attached to
39 kUsedForPrimVtxFit=BIT(16), // set if this track was used to fit the primary vertex
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
47 enum AODTrkFilterBits_t {
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
74 AliAODTrack(Short_t id,
80 Double_t covMatrix[21],
84 AliAODVertex *prodVertex,
86 Bool_t usedForPrimVtxFit,
87 AODTrk_t ttype=kUndef,
89 Float_t chi2perNDF = -999.);
91 AliAODTrack(Short_t id,
97 Float_t covMatrix[21],
101 AliAODVertex *prodVertex,
102 Bool_t usedForVtxFit,
103 Bool_t usedForPrimVtxFit,
104 AODTrk_t ttype=kUndef,
106 Float_t chi2perNDF = -999.);
108 virtual ~AliAODTrack();
109 AliAODTrack(const AliAODTrack& trk);
110 AliAODTrack& operator=(const AliAODTrack& trk);
113 virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
114 virtual Double_t Phi() const { return fMomentum[1]; }
115 virtual Double_t Theta() const { return fMomentum[2]; }
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]; }
121 virtual Double_t P() const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
122 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
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; }
129 Double_t Chi2perNDF() const { return fChi2perNDF; }
130 UShort_t GetTPCNcls() const {
131 UShort_t cl = fTPCFitMap.CountBits();
132 if(cl==0)cl = fTPCClusterMap.CountBits();// backward compatibility
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;
145 virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }
147 virtual Short_t Charge() const {return fCharge; }
149 virtual Bool_t PropagateToDCA(const AliVVertex *vtx,
150 Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);
153 virtual const Double_t *PID() const { return fPID; }
154 AODTrkPID_t GetMostProbablePID() const;
155 void ConvertAliPIDtoAODPID();
156 void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}
158 template <typename T> void GetPID(T *pid) const {
159 for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
161 template <typename T> void SetPID(const T *pid) {
162 if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
163 else { for(Int_t i=0; i<10; i++) fPID[i]=0.; fPID[AliAODTrack::kUnknown]=1.;}}
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; }
169 Int_t GetID() const { return (Int_t)fID; }
170 Int_t GetLabel() const { return fLabel; }
171 Char_t GetType() const { return fType;}
172 Bool_t IsPrimaryCandidate() const;
173 Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
174 Bool_t GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }
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); }
182 Int_t GetTOFBunchCrossing(Double_t b=0, Bool_t tpcPIDonly=kFALSE) const;
184 template <typename T> void GetP(T *p) const {
185 p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}
187 // template <typename T> void GetPxPyPz(T *p) const {
188 // p[0] = Px(); p[1] = Py(); p[2] = Pz();}
189 Bool_t GetPxPyPz(Double_t *p) const;
191 template <typename T> Bool_t GetPosition(T *x) const {
192 x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
193 return TestBit(kIsDCA);}
195 template <typename T> void SetCovMatrix(const T *covMatrix) {
196 if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
197 fCovMatrix->SetCovMatrix(covMatrix);}
199 template <typename T> Bool_t GetCovMatrix(T *covMatrix) const {
200 if(!fCovMatrix) return kFALSE;
201 fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
203 Bool_t GetXYZ(Double_t *p) const {
204 return GetPosition(p); }
206 Bool_t GetXYZAt(Double_t x, Double_t b, Double_t *r) const;
208 Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
209 return GetCovMatrix(cv);}
211 void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
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];
219 Bool_t XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
221 Double_t DCA() const {
222 if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
223 else if (TestBit(kIsDCA)) return fPosition[0];
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; }
232 Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
234 UChar_t GetITSClusterMap() const { return (UChar_t)(fITSMuonClusterMap&0xff); }
235 Int_t GetITSNcls() const;
236 Bool_t HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
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; }
241 Bool_t TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
242 Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
243 void SetFilterMap(UInt_t i){fFilterMap = i;}
244 UInt_t GetFilterMap() const {return fFilterMap;}
246 const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
247 const TBits* GetTPCClusterMapPtr() const {return &fTPCClusterMap;}
248 const TBits& GetTPCFitMap() const {return fTPCFitMap;}
249 const TBits* GetTPCFitMapPtr() const {return &fTPCFitMap;}
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;
252 const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
253 const TBits* GetTPCSharedMapPtr() const {return &fTPCSharedMap;}
254 void SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
255 void SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
256 void SetTPCFitMap(const TBits amap) {fTPCFitMap = amap;}
257 void SetTPCPointsF(UShort_t findable){fTPCnclsF = findable;}
258 void SetTPCNCrossedRows(UInt_t n) {fTPCNCrossedRows = n;}
260 UShort_t GetTPCNclsF() const { return fTPCnclsF;}
261 UShort_t GetTPCNCrossedRows() const { return fTPCNCrossedRows;}
262 Float_t GetTPCFoundFraction() const { return fTPCNCrossedRows>0 ? float(GetTPCNcls())/fTPCNCrossedRows : 0;}
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;}
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;}
273 Int_t GetPHOScluster() const {return fCaloIndex;}
274 void SetPHOScluster(Int_t index) {fCaloIndex=index;}
275 Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
277 //pid signal interface
278 Double_t GetITSsignal() const { return fDetPid?fDetPid->GetITSsignal():0.; }
279 void GetITSdEdxSamples(Double_t s[4]) const;
280 Double_t GetTPCsignal() const { return fDetPid?fDetPid->GetTPCsignal():0.; }
281 Double_t GetTPCsignalTunedOnData() const { return fTPCsignalTuned;}
282 void SetTPCsignalTunedOnData(Double_t signal) {fTPCsignalTuned = signal;}
283 UShort_t GetTPCsignalN() const { return fDetPid?fDetPid->GetTPCsignalN():0; }
284 virtual AliTPCdEdxInfo* GetTPCdEdxInfo() const {return fDetPid?fDetPid->GetTPCdEdxInfo():0;}
285 Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
286 Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
287 Double_t GetHMPIDsignal() const;
288 Double_t GetHMPIDoccupancy() const;
290 Int_t GetHMPIDcluIdx() const;
292 void GetHMPIDtrk(Float_t &x, Float_t &y, Float_t &th, Float_t &ph) const;
293 void GetHMPIDmip(Float_t &x,Float_t &y,Int_t &q,Int_t &nph) const;
295 Bool_t GetOuterHmpPxPyPz(Double_t *p) const;
297 void GetIntegratedTimes(Double_t *times) const {if (fDetPid) fDetPid->GetIntegratedTimes(times); }
298 Double_t GetTRDslice(Int_t plane, Int_t slice) const;
299 Double_t GetTRDsignal() const {return fDetPid ? fDetPid->GetTRDsignal() : 0;}
300 Double_t GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
301 Double_t GetTRDchi2() const {return fDetPid ? fDetPid->GetTRDChi2() : -1;}
302 UChar_t GetTRDncls(Int_t layer) const;
303 UChar_t GetTRDncls() const {return GetTRDncls(-1);}
304 UChar_t GetTRDntrackletsPID() const;
305 Int_t GetNumberOfTRDslices() const { return fDetPid?fDetPid->GetTRDnSlices():0; }
306 void GetHMPIDpid(Double_t */*p*/) const { return; } // TODO: To be implemented properly with the new HMPID object
308 const AliAODEvent* GetAODEvent() const {return fAODEvent;}
309 void SetAODEvent(const AliAODEvent* ptr){fAODEvent = ptr;}
311 AliAODPid *GetDetPid() const { return fDetPid; }
312 AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
315 void Print(const Option_t *opt = "") const;
318 void SetFlags(ULong_t flags) { fFlags = flags; }
319 void SetStatus(ULong_t flags) { fFlags|=flags; }
320 void ResetStatus(ULong_t flags) { fFlags&=~flags; }
322 void SetID(Short_t id) { fID = id; }
323 void SetLabel(Int_t label) { fLabel = label; }
325 template <typename T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
326 void SetDCA(Double_t d, Double_t z);
327 void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
328 void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
330 void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming
332 void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
333 void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }
335 void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
336 void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }
340 void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
341 void SetPt(Double_t pt) { fMomentum[0] = pt; };
342 void SetPhi(Double_t phi) { fMomentum[1] = phi; }
343 void SetTheta(Double_t theta) { fMomentum[2] = theta; }
344 template <typename T> void SetP(const T *p, Bool_t cartesian = kTRUE);
345 void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}
347 void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
348 void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
350 void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
352 void SetCharge(Short_t q) { fCharge = q; }
353 void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
355 void SetITSClusterMap(UChar_t itsClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
356 void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
357 void SetMuonClusterMap(UInt_t muonClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
358 void SetITSMuonClusterMap(UInt_t itsMuonClusMap) { fITSMuonClusterMap = itsMuonClusMap; }
359 void SetMUONtrigHitsMapTrg(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrg = muonTrigHitsMap; }
360 UInt_t GetMUONTrigHitsMapTrg() { return fMUONtrigHitsMapTrg; }
361 void SetMUONtrigHitsMapTrk(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrk = muonTrigHitsMap; }
362 UInt_t GetMUONTrigHitsMapTrk() { return fMUONtrigHitsMapTrk; }
364 Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
365 // 0 Muon track does not match trigger
366 // 1 Muon track match but does not pass pt cut
367 // 2 Muon track match Low pt cut
368 // 3 Muon track match High pt cut
369 void SetMatchTrigger(Int_t MatchTrigger);
370 Bool_t MatchTrigger() const { return (GetMatchTrigger()>0); } // Muon track matches trigger track
371 Bool_t MatchTriggerLowPt() const { return (GetMatchTrigger()>1); } // Muon track matches trigger track and passes Low pt cut
372 Bool_t MatchTriggerHighPt() const { return (GetMatchTrigger()>2); } // Muon track matches trigger track and passes High pt cut
373 Bool_t MatchTriggerDigits() const; // Muon track matches trigger digits
374 Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger;}
375 void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
376 Bool_t HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const; // Check if track hits Muon chambers
377 Bool_t IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
379 void Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
380 Bool_t IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}
382 void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
383 void SetType(AODTrk_t ttype) { fType=ttype; }
385 // Trasient PID object, is owned by the track
386 virtual void SetDetectorPID(const AliDetectorPID *pid);
387 virtual const AliDetectorPID* GetDetectorPID() const { return fDetectorPID; }
390 Int_t PdgCode() const {return 0;}
394 // Momentum & position
395 Double32_t fMomentum[3]; // momemtum stored in pt, phi, theta
396 Double32_t fPosition[3]; // position of first point on track or dca
398 Double32_t fMomentumAtDCA[3]; // momentum (px,py,pz) at DCA
399 Double32_t fPositionAtDCA[2]; // trasverse position (x,y) at DCA
401 Double32_t fRAtAbsorberEnd; // transverse position r at the end of the muon absorber
403 Double32_t fChi2perNDF; // chi2/NDF of momentum fit
404 Double32_t fChi2MatchTrigger; // chi2 of trigger/track matching
405 Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
407 ULong_t fFlags; // reconstruction status flags
408 Int_t fLabel; // track label, points back to MC track
410 UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
411 // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
412 UInt_t fMUONtrigHitsMapTrg; // Muon trigger hits map from trigger
413 UInt_t fMUONtrigHitsMapTrk; // Muon trigger hits map from tracker track extrapolation
414 UInt_t fFilterMap; // filter information, one bit per set of cuts
416 TBits fTPCFitMap; // Map of clusters, one bit per padrow; if has a cluster on given padrow which is used in the fit
417 TBits fTPCClusterMap; // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
418 TBits fTPCSharedMap; // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow
420 UShort_t fTPCnclsF; // findable clusters
421 UShort_t fTPCNCrossedRows; // n crossed rows
423 Short_t fID; // unique track ID, points back to the ESD track
425 Char_t fCharge; // particle charge
426 Char_t fType; // Track Type
428 Int_t fCaloIndex; // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)
431 AliAODRedCov<6> *fCovMatrix; // covariance matrix (x, y, z, px, py, pz)
432 AliAODPid *fDetPid; // more detailed or detector specific raw pid information
433 mutable const AliDetectorPID* fDetectorPID; //! transient object to cache calibrated PID information
434 TRef fProdVertex; // vertex of origin
436 Double_t fTrackPhiOnEMCal; // phi of track after being propagated to 430cm
437 Double_t fTrackEtaOnEMCal; // eta of track after being propagated to 430cm
439 Double_t fTPCsignalTuned; //! TPC signal tuned on data when using MC
441 const AliAODEvent* fAODEvent; //!
443 ClassDef(AliAODTrack, 19);
446 inline Bool_t AliAODTrack::IsPrimaryCandidate() const
448 // True of track passes primary particle selection (independent of type)
457 inline Int_t AliAODTrack::GetITSNcls() const
459 // Number of points in ITS
461 for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
465 //______________________________________________________________________________
466 template <typename T>
467 void AliAODTrack::SetPosition(const T *x, const Bool_t dca)
480 // don't know any better yet
481 fPosition[0] = -999.;
482 fPosition[1] = -999.;
483 fPosition[2] = -999.;
488 fPosition[0] = -999.;
489 fPosition[1] = -999.;
490 fPosition[2] = -999.;
494 //template<> void AliAODTrack::SetPosition(const double *, Bool_t);