]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDTrack.h
fee6e4445fd48bde87a0ad40caaa6437e42474fd
[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 "AliVVtrack.h"
22 #include "AliFlatExternalTrackParam.h"
23
24 class AliESDtrack;
25 class AliExternalTrackParam;
26
27 class AliFlatESDTrack :public AliVVtrack {
28  public:
29   // --------------------------------------------------------------------------------
30   // -- Constructor / Destructors
31
32   AliFlatESDTrack();
33   ~AliFlatESDTrack() {}  
34
35   // --------------------------------------------------------------------------------
36   // -- Set methods
37  
38   Int_t Set( const AliESDtrack* track );
39
40   Int_t SetExternalTrackParam( 
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   void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; } 
50
51   
52   // --------------------------------------------------------------------------------
53   // -- Getter methods
54   AliFlatExternalTrackParam* GetTrackParamRefitted(){
55     return (fTrackParamMask & 0x1) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) : NULL;
56   } 
57
58   AliFlatExternalTrackParam* GetTrackParamIp() { 
59     return (fTrackParamMask & 0x2) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1) : NULL;
60   } 
61
62   AliFlatExternalTrackParam* GetTrackParamTPCInner() { 
63     return (fTrackParamMask & 0x4) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x3) : NULL;
64   } 
65
66   AliFlatExternalTrackParam* GetTrackParamOp() {      
67     return (fTrackParamMask & 0x8) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x7) : NULL;
68   } 
69
70   AliFlatExternalTrackParam* GetTrackParamCp() {
71     return (fTrackParamMask & 0x10) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0xF) : NULL;
72   } 
73
74   AliFlatExternalTrackParam* GetTrackParamITSOut() {
75     return (fTrackParamMask & 0x20) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1F) : NULL;
76   } 
77
78   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
79
80   Int_t GetNumberOfTPCClusters() {
81     return fNTPCClusters;
82   } 
83   
84   Int_t GetNumberOfITSClusters() {
85     return fNITSClusters;
86   } 
87     
88   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
89   
90   AliFlatESDTrack *GetNextTrack() {return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize);}
91   
92   // --------------------------------------------------------------------------------
93   // -- Size methods
94
95   static size_t EstimateSize(){
96     return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
97   }
98
99   size_t GetSize() { return fContent -  reinterpret_cast<Byte_t*>(this) + fContentSize; }
100     
101  private:
102   AliFlatESDTrack(const AliFlatESDTrack&);
103   AliFlatESDTrack& operator=(const AliFlatESDTrack&);
104
105   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
106
107   static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
108  
109   // --------------------------------------------------------------------------------
110   // -- Fixed size member objects
111   //    -> Try to align in memory
112
113   Byte_t   fTrackParamMask;            // Bit mask specfifying which ExternalTrackParam are present
114   Int_t    fNTPCClusters;                 // Number of TPC clusters in track
115   Int_t    fNITSClusters;                 // Number of ITS clusters in track
116   // Bool_t   fMCLabels;
117
118   ULong64_t fContentSize;                      // Size of this object
119   
120   // --------------------------------------------------------------------------------
121   // -- Variable Size Object
122   Byte_t fContent[1];                  // Variale size object, which contains all data
123
124 };
125
126 inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
127   // Count bits in field
128   UInt_t count = 0, reg = field & mask;
129   for (; reg; count++) reg &= reg - 1; 
130   return count;
131 }
132
133 #endif