]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDTrack.h
a4398c6bbcb4020e202e38aa9b48a3b97eca28d4
[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 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;}
133
134  private:
135
136   AliFlatESDTrack(const AliFlatESDTrack&);
137   AliFlatESDTrack& operator=(const AliFlatESDTrack&);
138
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;
142   }
143
144   Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag  ) const;
145
146   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
147
148   static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
149  
150   // --------------------------------------------------------------------------------
151   // -- Fixed size member objects
152   //    -> Try to align in memory
153
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
157   // Bool_t   fMCLabels;
158
159   ULong64_t fContentSize;                      // Size of this object
160   
161   // --------------------------------------------------------------------------------
162   // -- Variable Size Object
163   Byte_t fContent[1];                  // Variale size object, which contains all data
164
165 };
166
167 // _______________________________________________________________________________________________________
168 inline AliFlatESDTrack::AliFlatESDTrack() :
169   fTrackParamMask(0),
170   fNTPCClusters(0),
171   fNITSClusters(0),
172   fContentSize(0)
173 {
174   // Default constructor
175 }
176
177 inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag )
178 //  :
179 //  fTrackParamMask(fTrackParamMask ),
180 //  fNTPCClusters( fNTPCClusters ),
181 //  fNITSClusters( fNITSClusters ),
182 //  fContentSize( fContentSize )
183 {
184   // Constructor for reinitialisation of vtable
185 }
186
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; 
191   return count;
192 }
193
194 inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
195 {
196   // Get external track parameters  
197   const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
198   if( !f ) return -1;
199   f->GetExternalTrackParam( p );
200   return 0;
201 }
202
203
204 #endif