1 #ifndef ALIFLATESDTRACK_H
2 #define ALIFLATESDTRACK_H
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 */
9 * See implementation file for documentation
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
21 #include "AliVParticle.h"
22 #include "AliFlatExternalTrackParam.h"
25 class AliExternalTrackParam;
26 class AliFlatESDTrack;
28 class AliFlatESDTrack :public AliVTrack {
30 // --------------------------------------------------------------------------------
31 // -- Constructor / Destructors
34 virtual ~AliFlatESDTrack() {}
36 // constructor and method for reinitialisation of virtual table
37 AliFlatESDTrack( AliVConstructorReinitialisationFlag );
38 void Reinitialize() { new (this) AliFlatESDTrack( AliVReinitialize ); }
40 Int_t GetTrackParam ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x0 ); }
41 Int_t GetTrackParamRefitted ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x1 ); }
42 Int_t GetTrackParamIp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x2 ); }
43 Int_t GetTrackParamTPCInner ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x4 ); }
44 Int_t GetTrackParamOp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x8 ); }
45 Int_t GetTrackParamCp ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x10 ); }
46 Int_t GetTrackParamITSOut ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x20 ); }
48 UShort_t GetTPCNcls() const {return GetNumberOfTPCClusters(); }
49 Double_t GetPt() const {
50 const AliFlatExternalTrackParam *f = GetFlatTrackParam();
51 return (f) ?f->GetPt() : kVeryBig;
55 // --------------------------------------------------------------------------------
59 Int_t SetFromESDTrack( const AliESDtrack* track );
61 Int_t SetExternalTrackParam(
62 const AliExternalTrackParam* refittedParam,
63 const AliExternalTrackParam* innerParam,
64 const AliExternalTrackParam* innerTPC,
65 const AliExternalTrackParam* outerParam,
66 const AliExternalTrackParam* constrainedParam,
67 const AliExternalTrackParam* outerITSParam
70 void SetNumberOfTPCClusters( Int_t nCl ) { fNTPCClusters = nCl; }
71 void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; }
74 // --------------------------------------------------------------------------------
77 const AliFlatExternalTrackParam* GetFlatTrackParam() const { return GetFlatParam( 0x0 ); }
78 const AliFlatExternalTrackParam* GetFlatTrackParamRefitted() const { return GetFlatParam( 0x1 ); }
79 const AliFlatExternalTrackParam* GetFlatTrackParamIp() const { return GetFlatParam( 0x2 ); }
80 const AliFlatExternalTrackParam* GetFlatTrackParamTPCInner() const { return GetFlatParam( 0x4 ); }
81 const AliFlatExternalTrackParam* GetFlatTrackParamOp() const { return GetFlatParam( 0x8 ); }
82 const AliFlatExternalTrackParam* GetFlatTrackParamCp() const { return GetFlatParam( 0x10 ); }
83 const AliFlatExternalTrackParam* GetFlatTrackParamITSOut() const { return GetFlatParam( 0x20 ); }
85 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
87 Int_t GetNumberOfTPCClusters() const { return fNTPCClusters; }
88 Int_t GetNumberOfITSClusters() const { return fNITSClusters; }
90 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
92 const AliFlatESDTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDTrack*>(fContent+fContentSize); }
93 AliFlatESDTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize); }
95 // --------------------------------------------------------------------------------
98 static size_t EstimateSize(){
99 return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
102 size_t GetSize() const { return fContent - reinterpret_cast<const Byte_t*>(this) + fContentSize; }
104 // ---------------------------------------------------------------------------------
105 // AliVParticle interface
106 virtual Double_t Pt() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetPt():0.;}
107 virtual Double_t Px() const {return 0.;}
108 virtual Double_t Py() const {return 0.;}
109 virtual Double_t Pz() const {return 0.;}
110 virtual Double_t P() const {return 0.;}
111 virtual Bool_t PxPyPz(Double_t*) const {return kFALSE;}
112 virtual Double_t Xv() const {return 0.;}
113 virtual Double_t Yv() const {return 0.;}
114 virtual Double_t Zv() const {return 0.;}
115 virtual Bool_t XvYvZv(Double_t*) const {return 0.;}
116 virtual Double_t OneOverPt() const {return 0.;}
117 virtual Double_t Phi() const {return 0.;}
118 virtual Double_t Theta() const {return 0.;}
119 virtual Double_t E() const {return 0.;}
120 virtual Double_t M() const {return 0.;}
121 virtual Double_t Eta() const {return 0.;}
122 virtual Double_t Y() const {return 0.;}
123 virtual Short_t Charge() const {return 0.;}
124 virtual Int_t GetLabel() const {return 0.;}
125 virtual Int_t PdgCode() const {return 0.;}
126 virtual const Double_t* PID() const {return NULL;}
127 virtual Int_t GetID() const {return 0.;}
128 virtual UChar_t GetITSClusterMap() const {return 0.;}
129 virtual ULong_t GetStatus() const {return 0.;}
130 virtual Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {if (cv[0]); return kFALSE;}
131 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;}
135 AliFlatESDTrack(const AliFlatESDTrack&);
136 AliFlatESDTrack& operator=(const AliFlatESDTrack&);
138 const AliFlatExternalTrackParam* GetFlatParam( UShort_t flag ) const {
139 if( flag==0 ) return ( fTrackParamMask ) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) : NULL;
140 else return (fTrackParamMask & flag) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, flag-1) : NULL;
143 Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag ) const;
145 Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
147 static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
149 // --------------------------------------------------------------------------------
150 // -- Fixed size member objects
151 // -> Try to align in memory
153 Byte_t fTrackParamMask; // Bit mask specfifying which ExternalTrackParam are present
154 Int_t fNTPCClusters; // Number of TPC clusters in track
155 Int_t fNITSClusters; // Number of ITS clusters in track
158 ULong64_t fContentSize; // Size of this object
160 // --------------------------------------------------------------------------------
161 // -- Variable Size Object
162 Byte_t fContent[1]; // Variale size object, which contains all data
166 // _______________________________________________________________________________________________________
167 inline AliFlatESDTrack::AliFlatESDTrack() :
173 // Default constructor
176 inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag f )
178 fTrackParamMask(fTrackParamMask ),
179 fNTPCClusters( fNTPCClusters ),
180 fNITSClusters( fNITSClusters ),
181 fContentSize( fContentSize )
183 // Constructor for reinitialisation of vtable
186 inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
187 // Count bits in field
188 UInt_t count = 0, reg = field & mask;
189 for (; reg; count++) reg &= reg - 1;
193 inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
195 // Get external track parameters
196 const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
198 f->GetExternalTrackParam( p );