]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDTrack.h
AliHLTglobal module
[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   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