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"
26 class AliAODTrack : public AliVTrack {
30 enum AODTrk_t {kUndef = -1,
36 kIsDCA=BIT(14), // set if fPosition is the DCA and not the position of the first point
37 kUsedForVtxFit=BIT(15), // set if this track was used to fit the vertex it is attached to
38 kUsedForPrimVtxFit=BIT(16), // set if this track was used to fit the primary vertex
39 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
40 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
41 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
42 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
46 enum AODTrkFilterBits_t {
47 kTrkTPCOnly = BIT(0), // Standard TPC only tracks
48 kTrkITSsa = BIT(1), // ITS standalone
49 kTrkITSConstrained = BIT(2), // Pixel OR necessary for the electrons
50 kTrkElectronsPID = BIT(3), // PID for the electrons
51 kTrkGlobalNoDCA = BIT(4), // standard cuts with very loose DCA
52 kTrkGlobal = BIT(5), // standard cuts with tight DCA cut
53 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
54 kTrkTPCOnlyConstrained = BIT(7) // TPC only tracks: TPConly information constrained to SPD vertex in the filter below
73 AliAODTrack(Short_t id,
79 Double_t covMatrix[21],
83 AliAODVertex *prodVertex,
85 Bool_t usedForPrimVtxFit,
86 AODTrk_t ttype=kUndef,
88 Float_t chi2perNDF = -999.);
90 AliAODTrack(Short_t id,
96 Float_t covMatrix[21],
100 AliAODVertex *prodVertex,
101 Bool_t usedForVtxFit,
102 Bool_t usedForPrimVtxFit,
103 AODTrk_t ttype=kUndef,
105 Float_t chi2perNDF = -999.);
107 virtual ~AliAODTrack();
108 AliAODTrack(const AliAODTrack& trk);
109 AliAODTrack& operator=(const AliAODTrack& trk);
112 virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
113 virtual Double_t Phi() const { return fMomentum[1]; }
114 virtual Double_t Theta() const { return fMomentum[2]; }
116 virtual Double_t Px() const { return fMomentum[0] * TMath::Cos(fMomentum[1]); }
117 virtual Double_t Py() const { return fMomentum[0] * TMath::Sin(fMomentum[1]); }
118 virtual Double_t Pz() const { return fMomentum[0] / TMath::Tan(fMomentum[2]); }
119 virtual Double_t Pt() const { return fMomentum[0]; }
120 virtual Double_t P() const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
121 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
123 virtual Double_t Xv() const { return GetProdVertex() ? GetProdVertex()->GetX() : -999.; }
124 virtual Double_t Yv() const { return GetProdVertex() ? GetProdVertex()->GetY() : -999.; }
125 virtual Double_t Zv() const { return GetProdVertex() ? GetProdVertex()->GetZ() : -999.; }
126 virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
128 Double_t Chi2perNDF() const { return fChi2perNDF; }
129 UShort_t GetTPCNcls() const {
130 UShort_t cl = fTPCFitMap.CountBits();
131 if(cl==0)cl = fTPCClusterMap.CountBits();// backward compatibility
135 virtual Double_t M() const { return M(GetMostProbablePID()); }
136 Double_t M(AODTrkPID_t pid) const;
137 virtual Double_t E() const { return E(GetMostProbablePID()); }
138 Double_t E(AODTrkPID_t pid) const;
139 Double_t E(Double_t m) const { return TMath::Sqrt(P()*P() + m*m); }
140 virtual Double_t Y() const { return Y(GetMostProbablePID()); }
141 Double_t Y(AODTrkPID_t pid) const;
142 Double_t Y(Double_t m) const;
144 virtual Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * fMomentum[2])); }
146 virtual Short_t Charge() const {return fCharge; }
148 virtual Bool_t PropagateToDCA(const AliVVertex *vtx,
149 Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]);
152 virtual const Double_t *PID() const { return fPID; }
153 AODTrkPID_t GetMostProbablePID() const;
154 void ConvertAliPIDtoAODPID();
155 void SetDetPID(AliAODPid *aodpid) {fDetPid = aodpid;}
157 template <typename T> void GetPID(T *pid) const {
158 for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
160 template <typename T> void SetPID(const T *pid) {
161 if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
162 else {for(Int_t i=0; i<10; fPID[i++]=0.) ; fPID[AliAODTrack::kUnknown]=1.;}}
164 Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
165 ULong_t GetStatus() const { return GetFlags(); }
166 ULong_t GetFlags() const { return fFlags; }
168 Int_t GetID() const { return (Int_t)fID; }
169 Int_t GetLabel() const { return fLabel; }
170 Char_t GetType() const { return fType;}
171 Bool_t IsPrimaryCandidate() const;
172 Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
173 Bool_t GetUsedForPrimVtxFit() const { return TestBit(kUsedForPrimVtxFit); }
175 Bool_t IsHybridGlobalConstrainedGlobal() const { return TestBit(kIsHybridGCG); }
176 Bool_t IsHybridTPCConstrainedGlobal() const { return TestBit(kIsHybridTPCCG); }
177 Bool_t IsTPCOnly() const { return IsTPCConstrained(); } // obsolete bad naming
178 Bool_t IsTPCConstrained() const { return TestBit(kIsTPCConstrained); }
179 Bool_t IsGlobalConstrained() const { return TestBit(kIsGlobalConstrained); }
181 Int_t GetTOFBunchCrossing(Double_t b=0, Bool_t tpcPIDonly=kFALSE) const;
183 template <typename T> void GetP(T *p) const {
184 p[0]=fMomentum[0]; p[1]=fMomentum[1]; p[2]=fMomentum[2];}
186 // template <typename T> void GetPxPyPz(T *p) const {
187 // p[0] = Px(); p[1] = Py(); p[2] = Pz();}
188 Bool_t GetPxPyPz(Double_t *p) const;
190 template <typename T> Bool_t GetPosition(T *x) const {
191 x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
192 return TestBit(kIsDCA);}
194 template <typename T> void SetCovMatrix(const T *covMatrix) {
195 if(!fCovMatrix) fCovMatrix=new AliAODRedCov<6>();
196 fCovMatrix->SetCovMatrix(covMatrix);}
198 template <typename T> Bool_t GetCovMatrix(T *covMatrix) const {
199 if(!fCovMatrix) return kFALSE;
200 fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
202 Bool_t GetXYZ(Double_t *p) const {
203 return GetPosition(p); }
205 Bool_t GetXYZAt(Double_t x, Double_t b, Double_t *r) const;
207 Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {
208 return GetCovMatrix(cv);}
210 void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
212 Double_t XAtDCA() const { return fPositionAtDCA[0]; }
213 Double_t YAtDCA() const { return fPositionAtDCA[1]; }
214 Double_t ZAtDCA() const {
215 if (IsMuonTrack()) return fPosition[2];
216 else if (TestBit(kIsDCA)) return fPosition[1];
218 Bool_t XYZAtDCA(Double_t x[3]) const { x[0] = XAtDCA(); x[1] = YAtDCA(); x[2] = ZAtDCA(); return kTRUE; }
220 Double_t DCA() const {
221 if (IsMuonTrack()) return TMath::Sqrt(XAtDCA()*XAtDCA() + YAtDCA()*YAtDCA());
222 else if (TestBit(kIsDCA)) return fPosition[0];
225 Double_t PxAtDCA() const { return fMomentumAtDCA[0]; }
226 Double_t PyAtDCA() const { return fMomentumAtDCA[1]; }
227 Double_t PzAtDCA() const { return fMomentumAtDCA[2]; }
228 Double_t PAtDCA() const { return TMath::Sqrt(PxAtDCA()*PxAtDCA() + PyAtDCA()*PyAtDCA() + PzAtDCA()*PzAtDCA()); }
229 Bool_t PxPyPzAtDCA(Double_t p[3]) const { p[0] = PxAtDCA(); p[1] = PyAtDCA(); p[2] = PzAtDCA(); return kTRUE; }
231 Double_t GetRAtAbsorberEnd() const { return fRAtAbsorberEnd; }
233 UChar_t GetITSClusterMap() const { return (UChar_t)(fITSMuonClusterMap&0xff); }
234 Int_t GetITSNcls() const;
235 Bool_t HasPointOnITSLayer(Int_t i) const { return TESTBIT(GetITSClusterMap(),i); }
236 UShort_t GetHitsPatternInTrigCh() const { return (UShort_t)((fITSMuonClusterMap&0xff00)>>8); }
237 UInt_t GetMUONClusterMap() const { return (fITSMuonClusterMap&0x3ff0000)>>16; }
238 UInt_t GetITSMUONClusterMap() const { return fITSMuonClusterMap; }
240 Bool_t TestFilterBit(UInt_t filterBit) const {return (Bool_t) ((filterBit & fFilterMap) != 0);}
241 Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t) ((filterMask & fFilterMap) == filterMask);}
242 void SetFilterMap(UInt_t i){fFilterMap = i;}
243 UInt_t GetFilterMap() const {return fFilterMap;}
245 const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
246 const TBits* GetTPCClusterMapPtr() const {return &fTPCClusterMap;}
247 const TBits& GetTPCFitMap() const {return fTPCFitMap;}
248 Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159, Int_t /*type*/=0) const;
250 const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
251 void SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
252 void SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
253 void SetTPCFitMap(const TBits amap) {fTPCFitMap = amap;}
254 void SetTPCPointsF(UShort_t findable){fTPCnclsF = findable;}
255 void SetTPCNCrossedRows(UInt_t n) {fTPCNCrossedRows = n;}
257 UShort_t GetTPCNclsF() const { return fTPCnclsF;}
258 UShort_t GetTPCNCrossedRows() const { return fTPCNCrossedRows;}
259 Float_t GetTPCFoundFraction() const { return fTPCNCrossedRows>0 ? float(GetTPCNcls())/fTPCNCrossedRows : 0;}
261 // Calorimeter Cluster
262 Int_t GetEMCALcluster() const {return fCaloIndex;}
263 void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
264 Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
266 Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
267 Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
268 void SetTrackPhiEtaOnEMCal(Double_t phi,Double_t eta) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;}
270 Int_t GetPHOScluster() const {return fCaloIndex;}
271 void SetPHOScluster(Int_t index) {fCaloIndex=index;}
272 Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
274 //pid signal interface
275 Double_t GetITSsignal() const { return fDetPid?fDetPid->GetITSsignal():0.; }
276 Double_t GetTPCsignal() const { return fDetPid?fDetPid->GetTPCsignal():0.; }
277 Double_t GetTPCsignalTunedOnData() const { return fTPCsignalTuned;}
278 void SetTPCsignalTunedOnData(Double_t signal) {fTPCsignalTuned = signal;}
279 UShort_t GetTPCsignalN() const { return fDetPid?fDetPid->GetTPCsignalN():0; }
280 virtual AliTPCdEdxInfo* GetTPCdEdxInfo() const {return fDetPid?fDetPid->GetTPCdEdxInfo():0;}
281 Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
282 Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
283 Double_t GetHMPIDsignal() const { return 0.; } // TODO: To be implemented properly with the new HMPID object
285 void GetIntegratedTimes(Double_t *times) const {if (fDetPid) fDetPid->GetIntegratedTimes(times); }
286 Double_t GetTRDslice(Int_t plane, Int_t slice) const;
287 Double_t GetTRDmomentum(Int_t plane, Double_t */*sp*/=0x0) const;
288 Double_t GetTRDchi2() const {return fDetPid ? fDetPid->GetTRDChi2() : -1;}
289 UChar_t GetTRDncls(Int_t layer = -1) const;
290 UChar_t GetTRDntrackletsPID() const;
291 Int_t GetNumberOfTRDslices() const { return fDetPid?fDetPid->GetTRDnSlices():0; }
292 void GetHMPIDpid(Double_t */*p*/) const { return; } // TODO: To be implemented properly with the new HMPID object
294 const AliAODEvent* GetAODEvent() const {return fAODEvent;}
295 void SetAODEvent(const AliAODEvent* ptr){fAODEvent = ptr;}
297 AliAODPid *GetDetPid() const { return fDetPid; }
298 AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
301 void Print(const Option_t *opt = "") const;
304 void SetFlags(ULong_t flags) { fFlags = flags; }
305 void SetStatus(ULong_t flags) { fFlags|=flags; }
306 void ResetStatus(ULong_t flags) { fFlags&=~flags; }
308 void SetID(Short_t id) { fID = id; }
309 void SetLabel(Int_t label) { fLabel = label; }
311 template <typename T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
312 void SetDCA(Double_t d, Double_t z);
313 void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
314 void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
316 void SetIsTPCOnly(Bool_t b = kTRUE) { SetIsTPCConstrained(b); }// obsolete bad naming
318 void SetIsTPCConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsTPCConstrained) : ResetBit(kIsTPCConstrained); }
319 void SetIsHybridTPCConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridTPCCG) : ResetBit(kIsHybridTPCCG); }
321 void SetIsGlobalConstrained(Bool_t b = kTRUE) { b ? SetBit(kIsGlobalConstrained) : ResetBit(kIsGlobalConstrained); }
322 void SetIsHybridGlobalConstrainedGlobal(Bool_t hybrid = kTRUE) { hybrid ? SetBit(kIsHybridGCG) : ResetBit(kIsHybridGCG); }
326 void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = 1. / oneOverPt; }
327 void SetPt(Double_t pt) { fMomentum[0] = pt; };
328 void SetPhi(Double_t phi) { fMomentum[1] = phi; }
329 void SetTheta(Double_t theta) { fMomentum[2] = theta; }
330 template <typename T> void SetP(const T *p, Bool_t cartesian = kTRUE);
331 void SetP() {fMomentum[0]=fMomentum[1]=fMomentum[2]=-999.;}
333 void SetXYAtDCA(Double_t x, Double_t y) {fPositionAtDCA[0] = x; fPositionAtDCA[1] = y;}
334 void SetPxPyPzAtDCA(Double_t pX, Double_t pY, Double_t pZ) {fMomentumAtDCA[0] = pX; fMomentumAtDCA[1] = pY; fMomentumAtDCA[2] = pZ;}
336 void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
338 void SetCharge(Short_t q) { fCharge = q; }
339 void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
341 void SetITSClusterMap(UChar_t itsClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffffff00)|(((UInt_t)itsClusMap)&0xff); }
342 void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) { fITSMuonClusterMap = (fITSMuonClusterMap&0xffff00ff)|((((UInt_t)hitsPatternInTrigCh)&0xff)<<8); }
343 void SetMuonClusterMap(UInt_t muonClusMap) { fITSMuonClusterMap = (fITSMuonClusterMap&0xfc00ffff)|((muonClusMap&0x3ff)<<16); }
344 void SetITSMuonClusterMap(UInt_t itsMuonClusMap) { fITSMuonClusterMap = itsMuonClusMap; }
345 void SetMUONtrigHitsMapTrg(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrg = muonTrigHitsMap; }
346 UInt_t GetMUONTrigHitsMapTrg() { return fMUONtrigHitsMapTrg; }
347 void SetMUONtrigHitsMapTrk(UInt_t muonTrigHitsMap) { fMUONtrigHitsMapTrk = muonTrigHitsMap; }
348 UInt_t GetMUONTrigHitsMapTrk() { return fMUONtrigHitsMapTrk; }
350 Int_t GetMatchTrigger() const {return fITSMuonClusterMap>>30;}
351 // 0 Muon track does not match trigger
352 // 1 Muon track match but does not pass pt cut
353 // 2 Muon track match Low pt cut
354 // 3 Muon track match High pt cut
355 void SetMatchTrigger(Int_t MatchTrigger);
356 Bool_t MatchTrigger() const { return (GetMatchTrigger()>0); } // Muon track matches trigger track
357 Bool_t MatchTriggerLowPt() const { return (GetMatchTrigger()>1); } // Muon track matches trigger track and passes Low pt cut
358 Bool_t MatchTriggerHighPt() const { return (GetMatchTrigger()>2); } // Muon track matches trigger track and passes High pt cut
359 Bool_t MatchTriggerDigits() const; // Muon track matches trigger digits
360 Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger;}
361 void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
362 Bool_t HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const; // Check if track hits Muon chambers
363 Bool_t IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
365 void Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
366 Bool_t IsConnected() const {return TESTBIT(fITSMuonClusterMap,26);}
368 void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
369 void SetType(AODTrk_t ttype) { fType=ttype; }
374 Int_t PdgCode() const {return 0;}
378 // Momentum & position
379 Double32_t fMomentum[3]; // momemtum stored in pt, phi, theta
380 Double32_t fPosition[3]; // position of first point on track or dca
382 Double32_t fMomentumAtDCA[3]; // momentum (px,py,pz) at DCA
383 Double32_t fPositionAtDCA[2]; // trasverse position (x,y) at DCA
385 Double32_t fRAtAbsorberEnd; // transverse position r at the end of the muon absorber
387 Double32_t fChi2perNDF; // chi2/NDF of momentum fit
388 Double32_t fChi2MatchTrigger; // chi2 of trigger/track matching
389 Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
391 ULong_t fFlags; // reconstruction status flags
392 Int_t fLabel; // track label, points back to MC track
394 UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
395 // (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
396 UInt_t fMUONtrigHitsMapTrg; // Muon trigger hits map from trigger
397 UInt_t fMUONtrigHitsMapTrk; // Muon trigger hits map from tracker track extrapolation
398 UInt_t fFilterMap; // filter information, one bit per set of cuts
400 TBits fTPCFitMap; // Map of clusters, one bit per padrow; if has a cluster on given padrow which is used in the fit
401 TBits fTPCClusterMap; // Map of clusters, one bit per padrow; 1 if has a cluster on given padrow
402 TBits fTPCSharedMap; // Map of clusters, one bit per padrow; 1 if has a shared cluster on given padrow
404 UShort_t fTPCnclsF; // findable clusters
405 UShort_t fTPCNCrossedRows; // n crossed rows
407 Short_t fID; // unique track ID, points back to the ESD track
409 Char_t fCharge; // particle charge
410 Char_t fType; // Track Type
412 Int_t fCaloIndex; // index of associated EMCAL/PHOS cluster (AliAODCaloCluster)
415 AliAODRedCov<6> *fCovMatrix; // covariance matrix (x, y, z, px, py, pz)
416 AliAODPid *fDetPid; // more detailed or detector specific pid information
417 TRef fProdVertex; // vertex of origin
419 Double_t fTrackPhiOnEMCal; // phi of track after being propagated to 430cm
420 Double_t fTrackEtaOnEMCal; // eta of track after being propagated to 430cm
422 Double_t fTPCsignalTuned; //! TPC signal tuned on data when using MC
424 const AliAODEvent* fAODEvent; //!
426 ClassDef(AliAODTrack, 19);
429 inline Bool_t AliAODTrack::IsPrimaryCandidate() const
431 // True of track passes primary particle selection (independent of type)
440 inline Int_t AliAODTrack::GetITSNcls() const
442 // Number of points in ITS
444 for(Int_t i=0;i<6;i++) if(HasPointOnITSLayer(i)) n++;
448 //______________________________________________________________________________
449 template <typename T>
450 void AliAODTrack::SetPosition(const T *x, const Bool_t dca)
463 // don't know any better yet
464 fPosition[0] = -999.;
465 fPosition[1] = -999.;
466 fPosition[2] = -999.;
471 fPosition[0] = -999.;
472 fPosition[1] = -999.;
473 fPosition[2] = -999.;
477 //template<> void AliAODTrack::SetPosition(const double *, Bool_t);