add a few methods in the v interface
[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   // --------------------------------------------------------------------------------
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   // -------------------------------------------------------------------------------
104
105   // ---------------------------------------------------------------------------------
106   // AliVParticle interface
107   virtual Double_t Pt() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetPt():kVeryBig;}
108   virtual Double_t GetTgl()  const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetTgl():kVeryBig;}
109   virtual void GetImpactParameters(Float_t &xy,Float_t &z) const {xy=0.; z=0.;}
110   virtual Double_t Px() const {return 0.;}
111   virtual Double_t Py() const {return 0.;}
112   virtual Double_t Pz() const {return 0.;}
113   virtual Double_t P() const {return 0.;}
114   virtual Bool_t PxPyPz(Double_t*) const {return kFALSE;}
115   virtual Double_t Xv() const {return 0.;}
116   virtual Double_t Yv() const {return 0.;}
117   virtual Double_t Zv() const {return 0.;}
118   virtual Bool_t XvYvZv(Double_t*) const {return 0.;}
119   virtual Double_t OneOverPt() const {return 0.;}
120   virtual Double_t Phi() const {return 0.;}
121   virtual Double_t Theta() const {return 0.;}
122   virtual Double_t E() const {return 0.;}
123   virtual Double_t M() const {return 0.;}
124   virtual Double_t Eta() const {return 0.;}
125   virtual Double_t Y() const {return 0.;}
126   virtual Short_t Charge() const {return 0.;}
127   virtual Int_t GetLabel() const {return 0.;}
128   virtual Int_t PdgCode() const {return 0.;}
129   virtual const Double_t* PID() const {return NULL;} 
130   virtual Int_t    GetID() const {return 0.;}
131   virtual UChar_t  GetITSClusterMap() const {return 0.;}
132   virtual ULong_t  GetStatus() const {return 0.;}
133   virtual Bool_t   GetCovarianceXYZPxPyPz(Double_t cv[21]) const {if (cv[0]){}; return kFALSE;}
134   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
136  private:
137
138   AliFlatESDTrack(const AliFlatESDTrack&);
139   AliFlatESDTrack& operator=(const AliFlatESDTrack&);
140
141   const AliFlatExternalTrackParam* GetFlatParam( UShort_t flag ) const {
142     if( flag==0 ) return ( fTrackParamMask ) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) : NULL;
143     else return (fTrackParamMask & flag) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, flag-1) : NULL;
144   }
145
146   Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag  ) const;
147
148   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
149
150   static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
151  
152   // --------------------------------------------------------------------------------
153   // -- Fixed size member objects
154   //    -> Try to align in memory
155
156   Byte_t   fTrackParamMask;            // Bit mask specfifying which ExternalTrackParam are present
157   Int_t    fNTPCClusters;                 // Number of TPC clusters in track
158   Int_t    fNITSClusters;                 // Number of ITS clusters in track
159   // Bool_t   fMCLabels;
160
161   ULong64_t fContentSize;                      // Size of this object
162   
163   // --------------------------------------------------------------------------------
164   // -- Variable Size Object
165   Byte_t fContent[1];                  // Variale size object, which contains all data
166
167   ClassDef(AliFlatESDTrack,0)
168
169 };
170
171 // _______________________________________________________________________________________________________
172 inline AliFlatESDTrack::AliFlatESDTrack() :
173   fTrackParamMask(0),
174   fNTPCClusters(0),
175   fNITSClusters(0),
176   fContentSize(0)
177 {
178   // Default constructor
179 }
180
181 inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag )
182 //  :
183 //  fTrackParamMask(fTrackParamMask ),
184 //  fNTPCClusters( fNTPCClusters ),
185 //  fNITSClusters( fNITSClusters ),
186 //  fContentSize( fContentSize )
187 {
188   // Constructor for reinitialisation of vtable
189 }
190
191 inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
192   // Count bits in field
193   UInt_t count = 0, reg = field & mask;
194   for (; reg; count++) reg &= reg - 1; 
195   return count;
196 }
197
198 inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
199 {
200   // Get external track parameters  
201   const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
202   if( !f ) return -1;
203   f->GetExternalTrackParam( p );
204   return 0;
205 }
206
207
208 #endif