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 // --------------------------------------------------------------------------------
44 Int_t SetFromESDTrack( const AliESDtrack* track );
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
55 void SetNumberOfTPCClusters( Int_t nCl ) { fNTPCClusters = nCl; }
56 void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; }
59 // --------------------------------------------------------------------------------
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 ); }
70 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
72 Int_t GetNumberOfTPCClusters() const { return fNTPCClusters; }
73 Int_t GetNumberOfITSClusters() const { return fNITSClusters; }
75 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
77 const AliFlatESDTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDTrack*>(fContent+fContentSize); }
78 AliFlatESDTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize); }
80 // --------------------------------------------------------------------------------
83 static size_t EstimateSize(){
84 return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
87 size_t GetSize() const { return fContent - reinterpret_cast<const Byte_t*>(this) + fContentSize; }
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;
103 // -------------------------------------------------------------------------------
105 // ---------------------------------------------------------------------------------
106 // AliVParticle interface
107 virtual Double_t Pt() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetPt():kVeryBig;}
108 virtual Double_t Px() const {return 0.;}
109 virtual Double_t Py() const {return 0.;}
110 virtual Double_t Pz() const {return 0.;}
111 virtual Double_t P() const {return 0.;}
112 virtual Bool_t PxPyPz(Double_t*) const {return kFALSE;}
113 virtual Double_t Xv() const {return 0.;}
114 virtual Double_t Yv() const {return 0.;}
115 virtual Double_t Zv() const {return 0.;}
116 virtual Bool_t XvYvZv(Double_t*) const {return 0.;}
117 virtual Double_t OneOverPt() const {return 0.;}
118 virtual Double_t Phi() const {return 0.;}
119 virtual Double_t Theta() const {return 0.;}
120 virtual Double_t E() const {return 0.;}
121 virtual Double_t M() const {return 0.;}
122 virtual Double_t Eta() const {return 0.;}
123 virtual Double_t Y() const {return 0.;}
124 virtual Short_t Charge() const {return 0.;}
125 virtual Int_t GetLabel() const {return 0.;}
126 virtual Int_t PdgCode() const {return 0.;}
127 virtual const Double_t* PID() const {return NULL;}
128 virtual Int_t GetID() const {return 0.;}
129 virtual UChar_t GetITSClusterMap() const {return 0.;}
130 virtual ULong_t GetStatus() const {return 0.;}
131 virtual Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const {if (cv[0]){}; return kFALSE;}
132 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;}
136 AliFlatESDTrack(const AliFlatESDTrack&);
137 AliFlatESDTrack& operator=(const AliFlatESDTrack&);
139 const AliFlatExternalTrackParam* GetFlatParam( UShort_t flag ) const {
140 if( flag==0 ) return ( fTrackParamMask ) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) : NULL;
141 else return (fTrackParamMask & flag) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, flag-1) : NULL;
144 Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag ) const;
146 Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
148 static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
150 // --------------------------------------------------------------------------------
151 // -- Fixed size member objects
152 // -> Try to align in memory
154 Byte_t fTrackParamMask; // Bit mask specfifying which ExternalTrackParam are present
155 Int_t fNTPCClusters; // Number of TPC clusters in track
156 Int_t fNITSClusters; // Number of ITS clusters in track
159 ULong64_t fContentSize; // Size of this object
161 // --------------------------------------------------------------------------------
162 // -- Variable Size Object
163 Byte_t fContent[1]; // Variale size object, which contains all data
167 // _______________________________________________________________________________________________________
168 inline AliFlatESDTrack::AliFlatESDTrack() :
174 // Default constructor
177 inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag )
179 // fTrackParamMask(fTrackParamMask ),
180 // fNTPCClusters( fNTPCClusters ),
181 // fNITSClusters( fNITSClusters ),
182 // fContentSize( fContentSize )
184 // Constructor for reinitialisation of vtable
187 inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
188 // Count bits in field
189 UInt_t count = 0, reg = field & mask;
190 for (; reg; count++) reg &= reg - 1;
194 inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
196 // Get external track parameters
197 const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
199 f->GetExternalTrackParam( p );