added this pointer to special constructor, first version of esd to flat conversion...
[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
21 #include "AliFlatTPCCluster.h"
22 #include "AliFlatExternalTrackParam.h"
23 #include "AliVVtrack.h"
24 #include "AliFlatESDMisc.h"
25
26 class AliESDtrack;
27 class AliESDfriendTrack;
28 class AliExternalTrackParam;
29
30 class AliFlatESDTrack: public AliVVtrack {
31  public:
32   // --------------------------------------------------------------------------------
33   // -- Constructor / Destructors
34   AliFlatESDTrack();
35   AliFlatESDTrack(const AliESDtrack* track, AliESDfriendTrack* friendTrack); 
36   virtual ~AliFlatESDTrack();  
37
38   // --------------------------------------------------------------------------------
39   // -- Fill / Set methods
40   Int_t FillExternalTrackParam( 
41                                const AliExternalTrackParam* refittedParam,
42                                const AliExternalTrackParam* innerParam,
43                                const AliExternalTrackParam* innerTPC,
44                                const AliExternalTrackParam* outerParam,
45                                const AliExternalTrackParam* constrainedParam,
46                                const AliExternalTrackParam* outerITSParam
47                              );
48
49   AliFlatTPCCluster *GetNextTPCClusterPointer(){ return GetTPCCluster(fNTPCClusters); }
50
51   void StoreLastTPCCluster(){  
52      ++fNTPCClusters;
53      fSize += sizeof(AliFlatTPCCluster);
54   }
55
56   void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; } 
57
58   Int_t Fill( const AliESDtrack* track, AliESDfriendTrack* friendTrack);
59   
60   // --------------------------------------------------------------------------------
61   // -- Getter methods
62   AliFlatExternalTrackParam* GetTrackParamRefitted(){
63     return (fTrackParamMask & 0x1) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) : NULL;
64   } 
65
66   AliFlatExternalTrackParam* GetTrackParamIp() { 
67     return (fTrackParamMask & 0x2) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1) : NULL;
68   } 
69
70   AliFlatExternalTrackParam* GetTrackParamTPCInner() { 
71     return (fTrackParamMask & 0x4) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x3) : NULL;
72   } 
73
74   AliFlatExternalTrackParam* GetTrackParamOp() {      
75     return (fTrackParamMask & 0x8) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x7) : NULL;
76   } 
77
78   AliFlatExternalTrackParam* GetTrackParamCp() {
79     return (fTrackParamMask & 0x10) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0xF) : NULL;
80   } 
81
82   AliFlatExternalTrackParam* GetTrackParamITSOut() {
83     return (fTrackParamMask & 0x20) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1F) : NULL;
84   } 
85
86   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
87
88   Int_t GetNumberOfTPCClusters() {
89     return fNTPCClusters;
90   } 
91   
92   AliFlatTPCCluster *GetTPCClusters() {
93     return reinterpret_cast< AliFlatTPCCluster*>(fContent + sizeof(AliFlatExternalTrackParam)*CountBits(fTrackParamMask));
94   } 
95
96
97   
98   AliFlatTPCCluster *GetTPCCluster(Int_t ind) {
99     return  reinterpret_cast< AliFlatTPCCluster*>( GetTPCClusters() ) + ind ;
100   }
101
102   Int_t GetNumberOfITSClusters() {
103     return fNITSClusters;
104   } 
105   
106   AliFlatTPCCluster *GetITSClusters() {
107     return reinterpret_cast< AliFlatTPCCluster*>(fContent + sizeof(AliFlatExternalTrackParam)*CountBits(fTrackParamMask));
108   } 
109
110   
111   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
112   
113   AliFlatESDTrack *GetNextTrack() 
114 {       
115         
116         return reinterpret_cast<AliFlatESDTrack*> (fContent + fSize);
117 }
118   
119   // --------------------------------------------------------------------------------
120   // -- Size methods
121   static ULong64_t EstimateSize(Bool_t useESDFriends = kTRUE, Int_t nTPCClusters = 160 );
122          ULong64_t GetSize()  {return fContent -  reinterpret_cast<Byte_t*>(this) + fSize;}
123          
124          
125   void Reinitialize();
126
127  private:
128   AliFlatESDTrack(const AliFlatESDTrack&);
129   AliFlatESDTrack& operator=(const AliFlatESDTrack&);   
130   AliFlatESDTrack(AliFlatESDSpecialConstructorFlag):
131   // Default constructor
132   fTrackParamMask(this->fTrackParamMask),
133   fNTPCClusters(this->fNTPCClusters),
134   fNITSClusters(this->fNITSClusters),
135   fSize(this->fSize) {
136
137 }
138
139   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
140
141   UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
142  
143   // --------------------------------------------------------------------------------
144   // -- Fixed size member objects
145   //    -> Try to align in memory
146
147   Byte_t   fTrackParamMask;            // Bit mask specfifying which ExternalTrackParam are present
148   Int_t    fNTPCClusters;                 // Number of TPC clusters in track
149   Int_t    fNITSClusters;                 // Number of ITS clusters in track
150   // Bool_t   fMCLabels;
151
152   ULong64_t fSize;                      // Size of this object
153   
154   // --------------------------------------------------------------------------------
155   // -- Variable Size Object
156   Byte_t fContent[1];                  // Variale size object, which contains all data
157
158 };
159
160 #endif