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