]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIFLATESDTRACK_H | |
2 | #define ALIFLATESDTRACK_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice * | |
6 | * Primary Authors : Sergey Gorbunov, Jochen Thaeder, Chiara Zampolli */ | |
7 | ||
8 | /* | |
9 | * See implementation file for documentation | |
10 | */ | |
11 | ||
12 | /* | |
13 | Cp - Track parameters constrained to the primary vertex | |
14 | Ip - Track parameters estimated at the inner wall of TPC | |
15 | TPCInner - Track parameters estimated at the inner wall of TPC using the TPC stand-alone | |
16 | Op - Track parameters estimated at the point of maximal radial coordinate reached during the tracking | |
17 | */ | |
18 | ||
19 | #include "Rtypes.h" | |
20 | #include "AliVMisc.h" | |
21 | #include "AliVParticle.h" | |
22 | #include "AliFlatExternalTrackParam.h" | |
23 | ||
24 | class AliESDtrack; | |
25 | class AliExternalTrackParam; | |
26 | class AliFlatESDTrack; | |
27 | ||
28 | class AliFlatESDTrack :public AliVTrack { | |
29 | public: | |
30 | // -------------------------------------------------------------------------------- | |
31 | // -- Constructor / Destructors | |
32 | ||
33 | AliFlatESDTrack(); | |
34 | virtual ~AliFlatESDTrack() {} | |
35 | ||
36 | // constructor and method for reinitialisation of virtual table | |
37 | AliFlatESDTrack( AliVConstructorReinitialisationFlag ); | |
38 | void Reinitialize() { new (this) AliFlatESDTrack( AliVReinitialize ); } | |
39 | ||
40 | // -------------------------------------------------------------------------------- | |
41 | ||
42 | // -- Set methods | |
43 | ||
44 | Int_t SetFromESDTrack( const AliESDtrack* track ); | |
45 | ||
46 | Int_t SetExternalTrackParam( | |
47 | const AliExternalTrackParam* refittedParam, | |
48 | const AliExternalTrackParam* innerParam, | |
49 | const AliExternalTrackParam* innerTPC, | |
50 | const AliExternalTrackParam* outerParam, | |
51 | const AliExternalTrackParam* constrainedParam, | |
52 | const AliExternalTrackParam* outerITSParam | |
53 | ); | |
54 | ||
55 | void SetNumberOfTPCClusters( Int_t nCl ) { fNTPCClusters = nCl; } | |
56 | void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; } | |
57 | ||
58 | ||
59 | // -------------------------------------------------------------------------------- | |
60 | // -- Getter methods | |
61 | ||
62 | const AliFlatExternalTrackParam* GetFlatTrackParam() const { return GetFlatParam( 0x0 ); } | |
63 | const AliFlatExternalTrackParam* GetFlatTrackParamRefitted() const { return GetFlatParam( 0x1 ); } | |
64 | const AliFlatExternalTrackParam* GetFlatTrackParamIp() const { return GetFlatParam( 0x2 ); } | |
65 | const AliFlatExternalTrackParam* GetFlatTrackParamTPCInner() const { return GetFlatParam( 0x4 ); } | |
66 | const AliFlatExternalTrackParam* GetFlatTrackParamOp() const { return GetFlatParam( 0x8 ); } | |
67 | const AliFlatExternalTrackParam* GetFlatTrackParamCp() const { return GetFlatParam( 0x10 ); } | |
68 | const AliFlatExternalTrackParam* GetFlatTrackParamITSOut() const { return GetFlatParam( 0x20 ); } | |
69 | ||
70 | // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | |
71 | ||
72 | Int_t GetNumberOfTPCClusters() const { return fNTPCClusters; } | |
73 | Int_t GetNumberOfITSClusters() const { return fNITSClusters; } | |
74 | ||
75 | // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | |
76 | ||
77 | const AliFlatESDTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDTrack*>(fContent+fContentSize); } | |
78 | AliFlatESDTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize); } | |
79 | ||
80 | // -------------------------------------------------------------------------------- | |
81 | // -- Size methods | |
82 | ||
83 | static size_t EstimateSize(){ | |
84 | return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam); | |
85 | } | |
86 | ||
87 | size_t GetSize() const { return fContent - reinterpret_cast<const Byte_t*>(this) + fContentSize; } | |
88 | ||
89 | // ------------------------------------------------------------------------------- | |
90 | // the calibration interface methods: | |
91 | Int_t GetTrackParam ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x0 ); } | |
92 | Int_t GetTrackParamRefitted ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x1 ); } | |
93 | Int_t GetTrackParamIp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x2 ); } | |
94 | Int_t GetTrackParamTPCInner ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x4 ); } | |
95 | Int_t GetTrackParamOp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x8 ); } | |
96 | Int_t GetTrackParamCp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x10 ); } | |
97 | Int_t GetTrackParamITSOut ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x20 ); } | |
98 | UShort_t GetTPCNcls() const {return GetNumberOfTPCClusters(); } | |
99 | Double_t GetPt() const { | |
100 | const AliFlatExternalTrackParam *f = GetFlatTrackParam(); | |
101 | return (f) ?f->GetPt() : kVeryBig; | |
102 | } | |
103 | virtual Bool_t GetXYZ(Double_t *p) const; | |
104 | // ------------------------------------------------------------------------------- | |
105 | ||
106 | // --------------------------------------------------------------------------------- | |
107 | // AliVParticle interface | |
108 | virtual Double_t Pt() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetPt():kVeryBig;} | |
109 | virtual Double_t GetTgl() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetTgl():kVeryBig;} | |
110 | using AliVTrack::GetImpactParameters; | |
111 | virtual void GetImpactParameters(Float_t &xy,Float_t &z) const {xy=0.; z=0.;} | |
112 | virtual Double_t Px() const {return 0.;} | |
113 | virtual Double_t Py() const {return 0.;} | |
114 | virtual Double_t Pz() const {return 0.;} | |
115 | virtual Double_t P() const {return 0.;} | |
116 | virtual Bool_t PxPyPz(Double_t*) const {return kFALSE;} | |
117 | virtual Double_t Xv() const {return 0.;} | |
118 | virtual Double_t Yv() const {return 0.;} | |
119 | virtual Double_t Zv() const {return 0.;} | |
120 | virtual Bool_t XvYvZv(Double_t*) const {return 0.;} | |
121 | virtual Double_t OneOverPt() const {return 0.;} | |
122 | virtual Double_t Phi() const {return 0.;} | |
123 | virtual Double_t Theta() const {return 0.;} | |
124 | virtual Double_t E() const {return 0.;} | |
125 | virtual Double_t M() const {return 0.;} | |
126 | virtual Double_t Eta() const {return 0.;} | |
127 | virtual Double_t Y() const {return 0.;} | |
128 | virtual Short_t Charge() const {return 0.;} | |
129 | virtual Int_t GetLabel() const {return 0.;} | |
130 | virtual Int_t PdgCode() const {return 0.;} | |
131 | virtual const Double_t* PID() const {return NULL;} | |
132 | virtual Int_t GetID() const {return 0.;} | |
133 | virtual UChar_t GetITSClusterMap() const {return 0.;} | |
134 | virtual ULong_t GetStatus() const {return 0.;} | |
135 | virtual Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {if (cv[0]){}; return kFALSE;} | |
136 | virtual Bool_t PropagateToDCA(const AliVVertex* /*vtx*/, Double_t /*b*/, Double_t /*maxd*/, Double_t dz[2], Double_t covar[3]) {if (dz[0]==covar[3]){}; return kFALSE;} | |
137 | ||
138 | private: | |
139 | ||
140 | AliFlatESDTrack(const AliFlatESDTrack&); | |
141 | AliFlatESDTrack& operator=(const AliFlatESDTrack&); | |
142 | ||
143 | const AliFlatExternalTrackParam* GetFlatParam( UShort_t flag ) const { | |
144 | if( flag==0 ) return ( fTrackParamMask ) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) : NULL; | |
145 | else return (fTrackParamMask & flag) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, flag-1) : NULL; | |
146 | } | |
147 | ||
148 | Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag ) const; | |
149 | ||
150 | Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag); | |
151 | ||
152 | static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF); | |
153 | ||
154 | // -------------------------------------------------------------------------------- | |
155 | // -- Fixed size member objects | |
156 | // -> Try to align in memory | |
157 | ||
158 | Byte_t fTrackParamMask; // Bit mask specfifying which ExternalTrackParam are present | |
159 | Int_t fNTPCClusters; // Number of TPC clusters in track | |
160 | Int_t fNITSClusters; // Number of ITS clusters in track | |
161 | // Bool_t fMCLabels; | |
162 | ||
163 | ULong64_t fContentSize; // Size of this object | |
164 | ||
165 | // -------------------------------------------------------------------------------- | |
166 | // -- Variable Size Object | |
167 | Byte_t fContent[1]; // Variale size object, which contains all data | |
168 | ||
169 | ClassDef(AliFlatESDTrack,0) | |
170 | ||
171 | }; | |
172 | ||
173 | // _______________________________________________________________________________________________________ | |
174 | inline AliFlatESDTrack::AliFlatESDTrack() : | |
175 | fTrackParamMask(0), | |
176 | fNTPCClusters(0), | |
177 | fNITSClusters(0), | |
178 | fContentSize(0) | |
179 | { | |
180 | // Default constructor | |
181 | } | |
182 | ||
183 | #pragma GCC diagnostic ignored "-Weffc++" | |
184 | inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag f ) | |
185 | : | |
186 | AliVTrack(f) | |
187 | { | |
188 | // Constructor for reinitialisation of vtable | |
189 | } | |
190 | #pragma GCC diagnostic warning "-Weffc++" | |
191 | ||
192 | inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) { | |
193 | // Count bits in field | |
194 | UInt_t count = 0, reg = field & mask; | |
195 | for (; reg; count++) reg &= reg - 1; | |
196 | return count; | |
197 | } | |
198 | ||
199 | inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const | |
200 | { | |
201 | // Get external track parameters | |
202 | const AliFlatExternalTrackParam *f = GetFlatParam ( flag ); | |
203 | if( !f ) return -1; | |
204 | f->GetExternalTrackParam( p ); | |
205 | return 0; | |
206 | } | |
207 | ||
208 | ||
209 | #endif |