]>
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; | |
24 | class AliExternalTrackParam; | |
25 | class AliTRDtrackInfo : public TObject{ | |
26 | public: | |
27 | enum{ | |
28 | kNTrackRefs = 12 | |
29 | }; | |
30 | class AliESDinfo{ | |
31 | friend class AliTRDtrackInfo; // Friend class | |
32 | public: | |
33 | AliESDinfo(); | |
34 | AliESDinfo(const AliESDinfo &esd); | |
35 | virtual ~AliESDinfo(); | |
36 | AliESDinfo& operator=(const AliESDinfo &esd); | |
8778aca3 | 37 | void Delete(const Option_t *); |
3ceb45ae | 38 | Bool_t HasV0() const { return fHasV0;} |
39 | Int_t GetId() const { return fId;} | |
40 | ULong_t GetStatus() const { return fStatus;} | |
41 | Int_t GetKinkIndex() const { return fKinkIndex;} | |
566c3d46 | 42 | Short_t GetTOFbc() const { return fTOFbc;} |
3ceb45ae | 43 | UShort_t GetTPCncls() const { return fTPCncls;} |
44 | UChar_t GetPidQuality() const { return fTRDpidQuality;} | |
45 | Int_t GetNSlices() const { return fTRDnSlices;} | |
46 | Double32_t* GetSliceIter() const { return fTRDslices;} | |
47 | const Double32_t* GetResponseIter() const { return &fTRDr[0];} | |
1ee39b3a | 48 | AliExternalTrackParam* GetOuterParam() const { return fOP;} |
b9058d72 | 49 | AliExternalTrackParam* GetITSoutParam() const { return fITSout;} |
35983729 | 50 | AliExternalTrackParam* GetTPCoutParam() const { return fTPCout;} |
3ceb45ae | 51 | const Int_t* GetV0pid() const { return &fTRDv0pid[0];} |
52 | Int_t GetV0pid(Int_t i) const { return fTRDv0pid[i];} | |
1ee39b3a | 53 | |
54 | protected: | |
b9ddd472 | 55 | UChar_t fHasV0; // v0 bit |
1ee39b3a | 56 | Int_t fId; // ESD track id |
57 | ULong_t fStatus; // ESD track status | |
58 | Int_t fKinkIndex; // ESD kink index | |
59 | UShort_t fTPCncls; // Number of Clusters inside TPC | |
566c3d46 | 60 | Short_t fTOFbc; // TOF bunch crossing index |
1ee39b3a | 61 | Double32_t fTRDr[AliPID::kSPECIES]; // TRD radial position |
62 | UChar_t fTRDpidQuality; // TRD PID quality | |
63 | Int_t fTRDnSlices; // number of slices used for PID | |
64 | Double32_t *fTRDslices; //[fTRDnSlices] | |
35983729 | 65 | AliExternalTrackParam *fOP; // outer track param |
66 | AliExternalTrackParam *fTPCout; // outer TPC param | |
b9058d72 | 67 | AliExternalTrackParam *fITSout; // outer ITS param |
b554ac34 | 68 | Int_t fTRDv0pid[AliPID::kSPECIES]; // PID from v0s |
1ee39b3a | 69 | |
b9058d72 | 70 | ClassDef(AliESDinfo, 6) // ESD info related to TRD |
1ee39b3a | 71 | }; |
72 | ||
73 | class AliMCinfo{ | |
74 | friend class AliTRDtrackInfo; | |
75 | public: | |
76 | //typedef AliTrackReference (const* constAliTrackReference); | |
77 | AliMCinfo(); | |
78 | AliMCinfo(const AliMCinfo &mc); | |
79 | virtual ~AliMCinfo(); | |
80 | AliMCinfo& operator=(const AliMCinfo &mc); | |
81 | Int_t GetLabel() const {return fLabel;} | |
82 | Int_t GetNTrackRefs() const {return fNTrackRefs;} | |
83 | Int_t GetPDG() const {return fPDG;} | |
b9ddd472 | 84 | Int_t GetPID() const ; |
f429b017 | 85 | Bool_t GetDirections(Float_t &x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, Float_t &pt, Float_t &eta, Float_t &phi, UChar_t &s) const; |
1ee39b3a | 86 | AliTrackReference const* GetTrackRef(Int_t ref=0) const {return fTrackRefs[ref];} |
5b1ba251 | 87 | static Double_t GetKalmanStep() {return fgKalmanStep;} |
3ceb45ae | 88 | static Bool_t IsKalmanUpdate() {return fgKalmanUpdate;} |
89 | Bool_t PropagateKalman( | |
90 | TVectorD *x, TVectorD *y, TVectorD *z, | |
91 | TVectorD *dx, TVectorD *dy, TVectorD *dz, | |
92 | TVectorD *pt, TVectorD *dpt, TVectorD *budget, TVectorD *c, Double_t mass=-1) const; | |
5066aa9a | 93 | static void SetKalmanStep(Double_t s) {fgKalmanStep = s;} |
3ceb45ae | 94 | static void SetKalmanUpdate(Bool_t s=kTRUE) {fgKalmanUpdate = s;} |
1ee39b3a | 95 | protected: |
5066aa9a | 96 | Int_t fLabel; // MC label |
97 | Int_t fPDG; // particle code | |
98 | Int_t fNTrackRefs; // number of track refs | |
99 | static Double_t fgKalmanStep; // Kalman step propagation | |
3ceb45ae | 100 | static Bool_t fgKalmanUpdate; // Kalman update with TRD tracklets |
1ee39b3a | 101 | AliTrackReference *fTrackRefs[kNTrackRefs]; // track refs array |
5066aa9a | 102 | |
103 | ClassDef(AliMCinfo, 2) // MC info related to TRD | |
1ee39b3a | 104 | }; |
105 | ||
106 | AliTRDtrackInfo(); | |
107 | AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo); | |
108 | ~AliTRDtrackInfo(); | |
4226db3e | 109 | |
1ee39b3a | 110 | // void Clear(const Option_t *){} |
111 | void Delete(const Option_t *); | |
1ee39b3a | 112 | AliTRDtrackInfo& operator=(const AliTRDtrackInfo &trdInfo); |
1ee39b3a | 113 | void AddTrackRef(const AliTrackReference *trackRef); |
3ceb45ae | 114 | Int_t GetTrackId() const { return fESD.fId;} |
115 | const AliESDinfo* GetESDinfo() const { return &fESD; } | |
116 | const AliMCinfo* GetMCinfo() const { return fMC; } | |
1ee39b3a | 117 | Int_t GetNumberOfClusters() const; |
3ceb45ae | 118 | Int_t GetNumberOfClustersRefit() const { return fNClusters;} |
1ee39b3a | 119 | Int_t GetNTracklets() const; |
3ceb45ae | 120 | Int_t GetNTrackRefs() const { return fMC ? fMC->fNTrackRefs:0;} |
121 | Int_t GetLabel() const { return fMC ? fMC->fLabel:0; } | |
122 | Int_t GetKinkIndex() const { return fESD.fKinkIndex;} | |
566c3d46 | 123 | Short_t GetTOFbc() const { return fESD.fTOFbc;} |
3ceb45ae | 124 | UShort_t GetTPCncls() const { return fESD.fTPCncls;} |
125 | Int_t GetPDG() const { return fMC ? fMC->fPDG : 0; } | |
126 | Int_t GetPID() const { return fMC ? fMC->GetPID() : -1; } | |
127 | ULong_t GetStatus() const { return fESD.fStatus;} | |
128 | AliTRDtrackV1* GetTrack() const { return fTRDtrack; } | |
1ee39b3a | 129 | AliTrackReference* GetTrackRef(Int_t entry) const; |
61f6b45e | 130 | AliTrackReference* GetTrackRef(const AliTRDseedV1* const tracklet) const; |
1ee39b3a | 131 | |
3ceb45ae | 132 | Bool_t IsCurved() const { return TestBit(kCurv);} |
133 | Bool_t IsPrimary() const { return TestBit(kPrim);} | |
134 | Bool_t HasESDtrack() const { return ((fTRDtrack != 0x0) ||(fESD.fOP != 0));} | |
135 | Bool_t HasMCinfo() const { return (Bool_t)fMC; } | |
1ee39b3a | 136 | |
3ceb45ae | 137 | void SetCurved(Bool_t curv = kTRUE) { SetBit(kCurv, curv);} |
138 | void SetLabel(Int_t lab) { if(fMC) fMC->fLabel = lab; } | |
139 | void SetNumberOfClustersRefit(Int_t n){fNClusters = n;} | |
1ee39b3a | 140 | inline void SetMC(); |
3ceb45ae | 141 | void SetPDG(Int_t pdg) { if(fMC) fMC->fPDG = pdg; } |
142 | void SetPrimary(Bool_t prim = kTRUE) {SetBit(kPrim, prim);} | |
1ee39b3a | 143 | void SetOuterParam(const AliExternalTrackParam *op); |
b9058d72 | 144 | void SetITSoutParam(const AliExternalTrackParam *op); |
35983729 | 145 | void SetTPCoutParam(const AliExternalTrackParam *op); |
3ceb45ae | 146 | void SetStatus(ULong_t stat) { fESD.fStatus = stat;} |
147 | void SetKinkIndex(Int_t kinkIndex) { fESD.fKinkIndex = kinkIndex;} | |
566c3d46 | 148 | void SetTOFbc(Int_t bc) { fESD.fTOFbc = bc;} |
3ceb45ae | 149 | void SetTPCncls(UShort_t TPCncls) { fESD.fTPCncls = TPCncls;} |
150 | void SetTrackId(Int_t id) { fESD.fId = id;} | |
1ee39b3a | 151 | void SetTrack(const AliTRDtrackV1 *track); |
3ceb45ae | 152 | void SetESDpidQuality(UChar_t q) { fESD.fTRDpidQuality = q;} |
1ee39b3a | 153 | void SetSlices(Int_t n, Double32_t *s); |
154 | inline void SetESDpid(Double_t *); | |
b554ac34 | 155 | inline void SetV0pid(Int_t *); |
3ceb45ae | 156 | void SetV0(Bool_t v0=kTRUE) { fESD.fHasV0 = v0;} |
1ee39b3a | 157 | |
158 | private: | |
159 | enum{ | |
160 | kCurv = 14, | |
161 | kPrim = 15 | |
162 | }; | |
163 | // this 2 data members have to go to ESD header. | |
164 | Int_t fNClusters; // Numer of clusters from refit | |
165 | AliTRDtrackV1 *fTRDtrack; // tracklets data array | |
166 | AliMCinfo *fMC; // MC extract for TRD | |
167 | AliESDinfo fESD; // ESD extract for TRD | |
168 | ||
b554ac34 | 169 | ClassDef(AliTRDtrackInfo, 4) // TRD track info |
1ee39b3a | 170 | }; |
171 | ||
172 | ||
173 | //________________________________________________________ | |
174 | inline void AliTRDtrackInfo::SetMC() | |
175 | { | |
176 | if(!fMC) fMC = new AliMCinfo(); | |
177 | } | |
178 | ||
179 | //________________________________________________________ | |
180 | inline void AliTRDtrackInfo::SetESDpid(Double_t * const r) | |
181 | { | |
182 | for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDr[is] = r[is]; | |
183 | } | |
184 | ||
b554ac34 | 185 | //________________________________________________________ |
186 | inline void AliTRDtrackInfo::SetV0pid(Int_t * const r) | |
187 | { | |
188 | for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDv0pid[is] = r[is]; | |
189 | } | |
190 | ||
1ee39b3a | 191 | #endif |