1 #ifndef ALITRDTRACKINFO_H
2 #define ALITRDTRACKINFO_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 /* $Id: AliTRDtrackInfo.h 27496 2008-07-22 08:35:45Z cblume $ */
8 ////////////////////////////////////////////////////////////////////////////
10 // Reconstruction QA //
12 ////////////////////////////////////////////////////////////////////////////
19 template <typename Value> class TVectorT;
20 typedef struct TVectorT<Double_t> TVectorD;
23 class AliTrackReference;
24 class AliExternalTrackParam;
25 class AliTRDtrackInfo : public TObject{
31 friend class AliTRDtrackInfo; // Friend class
34 AliESDinfo(const AliESDinfo &esd);
35 virtual ~AliESDinfo();
36 AliESDinfo& operator=(const AliESDinfo &esd);
38 Int_t GetId() const {return fId;}
39 ULong_t GetStatus() const {return fStatus;}
40 Int_t GetKinkIndex() const {return fKinkIndex;}
41 UShort_t GetTPCncls() const {return fTPCncls;}
42 UChar_t GetPidQuality() const {return fTRDpidQuality;}
43 Int_t GetNSlices() const {return fTRDnSlices;}
44 Double32_t* GetSliceIter() const {return fTRDslices;}
45 const Double32_t* GetResponseIter() const {return &fTRDr[0];}
46 AliExternalTrackParam* GetOuterParam() const { return fOP;}
49 Int_t fId; // ESD track id
50 ULong_t fStatus; // ESD track status
51 Int_t fKinkIndex; // ESD kink index
52 UShort_t fTPCncls; // Number of Clusters inside TPC
53 Double32_t fTRDr[AliPID::kSPECIES]; // TRD radial position
54 UChar_t fTRDpidQuality; // TRD PID quality
55 Int_t fTRDnSlices; // number of slices used for PID
56 Double32_t *fTRDslices; //[fTRDnSlices]
57 AliExternalTrackParam *fOP; // outer param
59 ClassDef(AliESDinfo, 2) // ESD info related to TRD
63 friend class AliTRDtrackInfo;
65 //typedef AliTrackReference (const* constAliTrackReference);
67 AliMCinfo(const AliMCinfo &mc);
69 AliMCinfo& operator=(const AliMCinfo &mc);
70 Int_t GetLabel() const {return fLabel;}
71 Int_t GetNTrackRefs() const {return fNTrackRefs;}
72 Int_t GetPDG() const {return fPDG;}
73 Bool_t GetDirections(Float_t &x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, Float_t &pt, UChar_t &s) const;
74 AliTrackReference const* GetTrackRef(Int_t ref=0) const {return fTrackRefs[ref];}
75 static Int_t GetKalmanStep() {return fgKalmanStep;}
77 TVectorD *dx, TVectorD *dy, TVectorD *dz,
78 TVectorD *pt, TVectorD *dpt, TVectorD *c) const;
79 static void SetKalmanStep(Double_t s) {fgKalmanStep = s;}
81 Int_t fLabel; // MC label
82 Int_t fPDG; // particle code
83 Int_t fNTrackRefs; // number of track refs
84 static Double_t fgKalmanStep; // Kalman step propagation
85 AliTrackReference *fTrackRefs[kNTrackRefs]; // track refs array
87 ClassDef(AliMCinfo, 2) // MC info related to TRD
91 AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo);
94 // void Clear(const Option_t *){}
95 void Delete(const Option_t *);
96 AliTRDtrackInfo& operator=(const AliTRDtrackInfo &trdInfo);
97 void AddTrackRef(const AliTrackReference *trackRef);
98 Int_t GetTrackId() const { return fESD.fId;}
99 const AliESDinfo* GetESDinfo() const { return &fESD; }
100 const AliMCinfo* GetMCinfo() const { return fMC; }
101 Int_t GetNumberOfClusters() const;
102 Int_t GetNumberOfClustersRefit() const {return fNClusters;}
103 Int_t GetNTracklets() const;
104 Int_t GetNTrackRefs() const {return fMC ? fMC->fNTrackRefs:0;}
105 Int_t GetLabel() const { return fMC ? fMC->fLabel:0; }
106 Int_t GetKinkIndex() const { return fESD.fKinkIndex;}
107 UShort_t GetTPCncls() const { return fESD.fTPCncls;}
108 Int_t GetPDG() const { return fMC ? fMC->fPDG : 0; }
109 ULong_t GetStatus() const {return fESD.fStatus;}
110 AliTRDtrackV1* GetTrack() const { return fTRDtrack; }
111 AliTrackReference* GetTrackRef(Int_t entry) const;
112 AliTrackReference* GetTrackRef(AliTRDseedV1* const tracklet) const;
114 Bool_t IsCurved() const {return TestBit(kCurv);}
115 Bool_t IsPrimary() const {return TestBit(kPrim);}
116 Bool_t HasESDtrack() const{return ((fTRDtrack != 0x0) ||(fESD.fOP != 0));}
117 Bool_t HasMCinfo() const { return (Bool_t)fMC; }
119 void SetCurved(Bool_t curv = kTRUE) {SetBit(kCurv, curv);}
120 void SetLabel(Int_t lab) { SetMC(); fMC->fLabel = lab; }
121 void SetNumberOfClustersRefit(Int_t n) {fNClusters = n;}
123 void SetPDG(Int_t pdg) { SetMC(); fMC->fPDG = pdg; }
124 void SetPrimary(Bool_t prim = kTRUE) {SetBit(kPrim, prim);}
125 void SetOuterParam(const AliExternalTrackParam *op);
126 void SetStatus(ULong_t stat) {fESD.fStatus = stat;}
127 void SetKinkIndex(Int_t kinkIndex) {fESD.fKinkIndex = kinkIndex;}
128 void SetTPCncls(UShort_t TPCncls) {fESD.fTPCncls = TPCncls;}
129 void SetTrackId(Int_t id) {fESD.fId = id;}
130 void SetTrack(const AliTRDtrackV1 *track);
131 void SetESDpidQuality(UChar_t q) { fESD.fTRDpidQuality = q;}
132 void SetSlices(Int_t n, Double32_t *s);
133 inline void SetESDpid(Double_t *);
140 // this 2 data members have to go to ESD header.
141 Int_t fNClusters; // Numer of clusters from refit
142 AliTRDtrackV1 *fTRDtrack; // tracklets data array
143 AliMCinfo *fMC; // MC extract for TRD
144 AliESDinfo fESD; // ESD extract for TRD
146 ClassDef(AliTRDtrackInfo, 3) // TRD track info
150 //________________________________________________________
151 inline void AliTRDtrackInfo::SetMC()
153 if(!fMC) fMC = new AliMCinfo();
156 //________________________________________________________
157 inline void AliTRDtrackInfo::SetESDpid(Double_t * const r)
159 for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDr[is] = r[is];