]>
Commit | Line | Data |
---|---|---|
1ee39b3a | 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 */ | |
5 | ||
6 | /* $Id: AliTRDtrackInfo.h 27496 2008-07-22 08:35:45Z cblume $ */ | |
7 | ||
8 | //////////////////////////////////////////////////////////////////////////// | |
9 | // // | |
10 | // Reconstruction QA // | |
11 | // // | |
12 | //////////////////////////////////////////////////////////////////////////// | |
13 | ||
1ee39b3a | 14 | #ifndef ALIPID_H |
15 | #include "AliPID.h" | |
16 | #endif | |
17 | ||
4226db3e | 18 | |
19 | template <typename Value> class TVectorT; | |
ebb644ed | 20 | typedef class TVectorT<Double_t> TVectorD; |
1ee39b3a | 21 | class AliTRDseedV1; |
22 | class AliTRDtrackV1; | |
23 | class AliTrackReference; | |
eb05d549 | 24 | class AliTrackPointArray; |
1ee39b3a | 25 | class AliExternalTrackParam; |
26 | class AliTRDtrackInfo : public TObject{ | |
27 | public: | |
28 | enum{ | |
29 | kNTrackRefs = 12 | |
30 | }; | |
31 | class AliESDinfo{ | |
32 | friend class AliTRDtrackInfo; // Friend class | |
33 | public: | |
5047978d | 34 | enum EESDinfo{ |
35 | kV0 = 0 | |
36 | ,kElectron = 1 | |
37 | ,kPion = 2 | |
38 | ,kProton = 3 | |
39 | }; | |
1ee39b3a | 40 | AliESDinfo(); |
41 | AliESDinfo(const AliESDinfo &esd); | |
42 | virtual ~AliESDinfo(); | |
43 | AliESDinfo& operator=(const AliESDinfo &esd); | |
8778aca3 | 44 | void Delete(const Option_t *); |
eb05d549 | 45 | Float_t Eta() const { return fEta;} |
3ceb45ae | 46 | Int_t GetId() const { return fId;} |
47 | ULong_t GetStatus() const { return fStatus;} | |
48 | Int_t GetKinkIndex() const { return fKinkIndex;} | |
566c3d46 | 49 | Short_t GetTOFbc() const { return fTOFbc;} |
f036f7ec | 50 | Float_t GetTOFbeta() const { return fTOFbeta;} |
3ceb45ae | 51 | UShort_t GetTPCncls() const { return fTPCncls;} |
2b33fd9c | 52 | Float_t GetTPCdedx() const { return fTPCdedx;} |
eb05d549 | 53 | AliTrackPointArray* GetTrackPointArray() const { return fTPArray; } |
3ceb45ae | 54 | UChar_t GetPidQuality() const { return fTRDpidQuality;} |
eb05d549 | 55 | |
3ceb45ae | 56 | Int_t GetNSlices() const { return fTRDnSlices;} |
57 | Double32_t* GetSliceIter() const { return fTRDslices;} | |
58 | const Double32_t* GetResponseIter() const { return &fTRDr[0];} | |
1ee39b3a | 59 | AliExternalTrackParam* GetOuterParam() const { return fOP;} |
b9058d72 | 60 | AliExternalTrackParam* GetITSoutParam() const { return fITSout;} |
35983729 | 61 | AliExternalTrackParam* GetTPCoutParam() const { return fTPCout;} |
3ceb45ae | 62 | const Int_t* GetV0pid() const { return &fTRDv0pid[0];} |
63 | Int_t GetV0pid(Int_t i) const { return fTRDv0pid[i];} | |
5047978d | 64 | Bool_t HasV0() const { return TESTBIT(fSteer, kV0);} |
65 | Bool_t IsElectron() const { return TESTBIT(fSteer, kElectron);} | |
66 | Bool_t IsPion() const { return TESTBIT(fSteer, kPion);} | |
67 | Bool_t IsProton() const { return TESTBIT(fSteer, kProton);} | |
eb05d549 | 68 | Float_t Phi() const { return fPhi;} |
69 | Float_t Pt() const { return fPt;} | |
5047978d | 70 | void SetElectron(Bool_t e=kTRUE) { e?SETBIT(fSteer, kElectron):CLRBIT(fSteer, kElectron);} |
71 | void SetPion(Bool_t e=kTRUE) { e?SETBIT(fSteer, kPion):CLRBIT(fSteer, kPion);} | |
72 | void SetProton(Bool_t e=kTRUE) { e?SETBIT(fSteer, kProton):CLRBIT(fSteer, kProton);} | |
73 | void SetV0(Bool_t v=kTRUE) { v?SETBIT(fSteer, kV0):CLRBIT(fSteer, kV0);} | |
eb05d549 | 74 | void SetOuterParam(const AliExternalTrackParam *op); |
75 | void SetITSoutParam(const AliExternalTrackParam *op); | |
76 | void SetTPCoutParam(const AliExternalTrackParam *op); | |
77 | void SetTrackPointArray(const AliTrackPointArray *tps); | |
1ee39b3a | 78 | |
79 | protected: | |
5047978d | 80 | UChar_t fSteer; // bit map |
eb05d549 | 81 | Int_t fId; // ESD track id |
82 | ULong_t fStatus; // ESD track status | |
83 | Int_t fKinkIndex; // ESD kink index | |
84 | UShort_t fTPCncls; // Number of Clusters inside TPC | |
2b33fd9c | 85 | Float_t fTPCdedx; // dEdx in TPC |
f036f7ec | 86 | Float_t fTOFbeta; // time of flight in TOF |
eb05d549 | 87 | Short_t fTOFbc; // TOF bunch crossing index |
1ee39b3a | 88 | Double32_t fTRDr[AliPID::kSPECIES]; // TRD radial position |
eb05d549 | 89 | UChar_t fTRDpidQuality; // TRD PID quality |
90 | Int_t fTRDnSlices; // number of slices used for PID | |
91 | Float_t fPt; // p_t at TRD entrance | |
92 | Float_t fPhi; // phi at TRD entrance | |
93 | Float_t fEta; // eta at TRD entrance | |
94 | Double32_t *fTRDslices; //[fTRDnSlices] | |
95 | AliExternalTrackParam *fOP; // outer track param | |
96 | AliExternalTrackParam *fTPCout; // outer TPC param | |
97 | AliExternalTrackParam *fITSout; // outer ITS param | |
98 | AliTrackPointArray *fTPArray; // track point array to be used for alignment | |
99 | Int_t fTRDv0pid[AliPID::kSPECIES]; // PID from v0s | |
1ee39b3a | 100 | |
2b33fd9c | 101 | ClassDef(AliESDinfo, 9) // ESD info related to TRD |
1ee39b3a | 102 | }; |
103 | ||
104 | class AliMCinfo{ | |
105 | friend class AliTRDtrackInfo; | |
106 | public: | |
107 | //typedef AliTrackReference (const* constAliTrackReference); | |
108 | AliMCinfo(); | |
109 | AliMCinfo(const AliMCinfo &mc); | |
110 | virtual ~AliMCinfo(); | |
111 | AliMCinfo& operator=(const AliMCinfo &mc); | |
112 | Int_t GetLabel() const {return fLabel;} | |
eb05d549 | 113 | Int_t GetTRDlabel() const {return fTRDlabel;} |
1ee39b3a | 114 | Int_t GetNTrackRefs() const {return fNTrackRefs;} |
115 | Int_t GetPDG() const {return fPDG;} | |
b9ddd472 | 116 | Int_t GetPID() const ; |
0f2c4c4f | 117 | Bool_t GetDirections(Float_t &x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, Float_t &pt, Float_t &p, Float_t &eta, Float_t &phi, UChar_t &s) const; |
1ee39b3a | 118 | AliTrackReference const* GetTrackRef(Int_t ref=0) const {return fTrackRefs[ref];} |
5b1ba251 | 119 | static Double_t GetKalmanStep() {return fgKalmanStep;} |
3ceb45ae | 120 | static Bool_t IsKalmanUpdate() {return fgKalmanUpdate;} |
121 | Bool_t PropagateKalman( | |
122 | TVectorD *x, TVectorD *y, TVectorD *z, | |
123 | TVectorD *dx, TVectorD *dy, TVectorD *dz, | |
124 | TVectorD *pt, TVectorD *dpt, TVectorD *budget, TVectorD *c, Double_t mass=-1) const; | |
5066aa9a | 125 | static void SetKalmanStep(Double_t s) {fgKalmanStep = s;} |
3ceb45ae | 126 | static void SetKalmanUpdate(Bool_t s=kTRUE) {fgKalmanUpdate = s;} |
1ee39b3a | 127 | protected: |
eb05d549 | 128 | Int_t fLabel; // ESD label |
129 | Int_t fTRDlabel; // TRD label | |
5066aa9a | 130 | Int_t fPDG; // particle code |
131 | Int_t fNTrackRefs; // number of track refs | |
132 | static Double_t fgKalmanStep; // Kalman step propagation | |
3ceb45ae | 133 | static Bool_t fgKalmanUpdate; // Kalman update with TRD tracklets |
1ee39b3a | 134 | AliTrackReference *fTrackRefs[kNTrackRefs]; // track refs array |
5066aa9a | 135 | |
eb05d549 | 136 | ClassDef(AliMCinfo, 3) // MC info related to TRD |
1ee39b3a | 137 | }; |
138 | ||
139 | AliTRDtrackInfo(); | |
140 | AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo); | |
141 | ~AliTRDtrackInfo(); | |
4226db3e | 142 | |
1ee39b3a | 143 | // void Clear(const Option_t *){} |
144 | void Delete(const Option_t *); | |
1ee39b3a | 145 | AliTRDtrackInfo& operator=(const AliTRDtrackInfo &trdInfo); |
1ee39b3a | 146 | void AddTrackRef(const AliTrackReference *trackRef); |
3ceb45ae | 147 | Int_t GetTrackId() const { return fESD.fId;} |
148 | const AliESDinfo* GetESDinfo() const { return &fESD; } | |
149 | const AliMCinfo* GetMCinfo() const { return fMC; } | |
1ee39b3a | 150 | Int_t GetNumberOfClusters() const; |
3ceb45ae | 151 | Int_t GetNumberOfClustersRefit() const { return fNClusters;} |
1ee39b3a | 152 | Int_t GetNTracklets() const; |
3ceb45ae | 153 | Int_t GetNTrackRefs() const { return fMC ? fMC->fNTrackRefs:0;} |
154 | Int_t GetLabel() const { return fMC ? fMC->fLabel:0; } | |
155 | Int_t GetKinkIndex() const { return fESD.fKinkIndex;} | |
566c3d46 | 156 | Short_t GetTOFbc() const { return fESD.fTOFbc;} |
3ceb45ae | 157 | UShort_t GetTPCncls() const { return fESD.fTPCncls;} |
158 | Int_t GetPDG() const { return fMC ? fMC->fPDG : 0; } | |
159 | Int_t GetPID() const { return fMC ? fMC->GetPID() : -1; } | |
160 | ULong_t GetStatus() const { return fESD.fStatus;} | |
161 | AliTRDtrackV1* GetTrack() const { return fTRDtrack; } | |
1ee39b3a | 162 | AliTrackReference* GetTrackRef(Int_t entry) const; |
61f6b45e | 163 | AliTrackReference* GetTrackRef(const AliTRDseedV1* const tracklet) const; |
1ee39b3a | 164 | |
3ceb45ae | 165 | Bool_t IsCurved() const { return TestBit(kCurv);} |
166 | Bool_t IsPrimary() const { return TestBit(kPrim);} | |
167 | Bool_t HasESDtrack() const { return ((fTRDtrack != 0x0) ||(fESD.fOP != 0));} | |
168 | Bool_t HasMCinfo() const { return (Bool_t)fMC; } | |
1ee39b3a | 169 | |
5047978d | 170 | void SetElectron(Bool_t c = kTRUE) { fESD.SetElectron(c);} |
171 | void SetPion(Bool_t c = kTRUE) { fESD.SetPion(c);} | |
172 | void SetProton(Bool_t c = kTRUE) { fESD.SetProton(c);} | |
3ceb45ae | 173 | void SetCurved(Bool_t curv = kTRUE) { SetBit(kCurv, curv);} |
174 | void SetLabel(Int_t lab) { if(fMC) fMC->fLabel = lab; } | |
eb05d549 | 175 | void SetTRDlabel(Int_t lab) { if(fMC) fMC->fTRDlabel = lab; } |
3ceb45ae | 176 | void SetNumberOfClustersRefit(Int_t n){fNClusters = n;} |
1ee39b3a | 177 | inline void SetMC(); |
3ceb45ae | 178 | void SetPDG(Int_t pdg) { if(fMC) fMC->fPDG = pdg; } |
179 | void SetPrimary(Bool_t prim = kTRUE) {SetBit(kPrim, prim);} | |
eb05d549 | 180 | void SetOuterParam(const AliExternalTrackParam *op) {fESD.SetOuterParam(op);} |
181 | void SetITSoutParam(const AliExternalTrackParam *op) {fESD.SetITSoutParam(op);} | |
182 | void SetTPCoutParam(const AliExternalTrackParam *op) {fESD.SetTPCoutParam(op);} | |
3ceb45ae | 183 | void SetStatus(ULong_t stat) { fESD.fStatus = stat;} |
184 | void SetKinkIndex(Int_t kinkIndex) { fESD.fKinkIndex = kinkIndex;} | |
566c3d46 | 185 | void SetTOFbc(Int_t bc) { fESD.fTOFbc = bc;} |
f036f7ec | 186 | void SetTOFbeta(Float_t b) { fESD.fTOFbeta = b;} |
3ceb45ae | 187 | void SetTPCncls(UShort_t TPCncls) { fESD.fTPCncls = TPCncls;} |
2b33fd9c | 188 | void SetTPCdedx(Float_t dedx) { fESD.fTPCdedx = dedx;} |
3ceb45ae | 189 | void SetTrackId(Int_t id) { fESD.fId = id;} |
1ee39b3a | 190 | void SetTrack(const AliTRDtrackV1 *track); |
eb05d549 | 191 | void SetTrackPointArray(const AliTrackPointArray *tps) {fESD.SetTrackPointArray(tps);} |
3ceb45ae | 192 | void SetESDpidQuality(UChar_t q) { fESD.fTRDpidQuality = q;} |
1ee39b3a | 193 | void SetSlices(Int_t n, Double32_t *s); |
194 | inline void SetESDpid(Double_t *); | |
eb05d549 | 195 | void SetESDeta(Float_t eta) { fESD.fEta = eta;} |
196 | void SetESDphi(Float_t phi) { fESD.fPhi = phi;} | |
197 | void SetESDpt(Float_t pt) { fESD.fPt = pt;} | |
b554ac34 | 198 | inline void SetV0pid(Int_t *); |
5047978d | 199 | void SetV0(Bool_t v0=kTRUE) { fESD.SetV0(v0);} |
1ee39b3a | 200 | |
201 | private: | |
202 | enum{ | |
203 | kCurv = 14, | |
204 | kPrim = 15 | |
205 | }; | |
206 | // this 2 data members have to go to ESD header. | |
207 | Int_t fNClusters; // Numer of clusters from refit | |
208 | AliTRDtrackV1 *fTRDtrack; // tracklets data array | |
209 | AliMCinfo *fMC; // MC extract for TRD | |
210 | AliESDinfo fESD; // ESD extract for TRD | |
211 | ||
b554ac34 | 212 | ClassDef(AliTRDtrackInfo, 4) // TRD track info |
1ee39b3a | 213 | }; |
214 | ||
215 | ||
216 | //________________________________________________________ | |
217 | inline void AliTRDtrackInfo::SetMC() | |
218 | { | |
219 | if(!fMC) fMC = new AliMCinfo(); | |
220 | } | |
221 | ||
222 | //________________________________________________________ | |
223 | inline void AliTRDtrackInfo::SetESDpid(Double_t * const r) | |
224 | { | |
225 | for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDr[is] = r[is]; | |
226 | } | |
227 | ||
b554ac34 | 228 | //________________________________________________________ |
229 | inline void AliTRDtrackInfo::SetV0pid(Int_t * const r) | |
230 | { | |
231 | for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDv0pid[is] = r[is]; | |
232 | } | |
233 | ||
1ee39b3a | 234 | #endif |