]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDTrack.h
fix constness
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDTrack.h
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   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 ); }
47
48   UShort_t GetTPCNcls() const {return GetNumberOfTPCClusters(); }
49   Double_t GetPt() const {
50     const AliFlatExternalTrackParam *f = GetFlatTrackParam();
51     return (f) ?f->GetPt() : kVeryBig;
52   }
53   
54
55   // --------------------------------------------------------------------------------
56
57   // -- Set methods
58  
59   Int_t SetFromESDTrack( const AliESDtrack* track );
60
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
68                                );
69
70   void SetNumberOfTPCClusters( Int_t nCl ) { fNTPCClusters = nCl; } 
71   void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; } 
72
73   
74   // --------------------------------------------------------------------------------
75   // -- Getter methods
76
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 ); }
84
85   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
86
87   Int_t GetNumberOfTPCClusters() const { return fNTPCClusters; } 
88   Int_t GetNumberOfITSClusters() const { return fNITSClusters; } 
89     
90   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
91   
92   const AliFlatESDTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDTrack*>(fContent+fContentSize); }
93   AliFlatESDTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize); }
94  
95   // --------------------------------------------------------------------------------
96   // -- Size methods
97
98   static size_t EstimateSize(){
99     return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
100   }
101
102   size_t GetSize() const { return fContent -  reinterpret_cast<const Byte_t*>(this) + fContentSize; }
103     
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;}
132
133  private:
134
135   AliFlatESDTrack(const AliFlatESDTrack&);
136   AliFlatESDTrack& operator=(const AliFlatESDTrack&);
137
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;
141   }
142
143   Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag  ) const;
144
145   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
146
147   static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
148  
149   // --------------------------------------------------------------------------------
150   // -- Fixed size member objects
151   //    -> Try to align in memory
152
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
156   // Bool_t   fMCLabels;
157
158   ULong64_t fContentSize;                      // Size of this object
159   
160   // --------------------------------------------------------------------------------
161   // -- Variable Size Object
162   Byte_t fContent[1];                  // Variale size object, which contains all data
163
164 };
165
166 // _______________________________________________________________________________________________________
167 inline AliFlatESDTrack::AliFlatESDTrack() :
168   fTrackParamMask(0),
169   fNTPCClusters(0),
170   fNITSClusters(0),
171   fContentSize(0)
172 {
173   // Default constructor
174 }
175
176 inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag f )
177   :
178   fTrackParamMask(fTrackParamMask ),
179   fNTPCClusters( fNTPCClusters ),
180   fNITSClusters( fNITSClusters ),
181   fContentSize( fContentSize )
182 {
183   // Constructor for reinitialisation of vtable
184 }
185
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; 
190   return count;
191 }
192
193 inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
194 {
195   // Get external track parameters  
196   const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
197   if( !f ) return -1;
198   f->GetExternalTrackParam( p );
199   return 0;
200 }
201
202
203 #endif