]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDFriendTrack.h
0fd57f4d3b73e4d9e2e2d53e4c1ee63af8de222b
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDFriendTrack.h
1 #ifndef ALIFLATESDFRIENDTRACK_H
2 #define ALIFLATESDFRIENDTRACK_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 #include "Rtypes.h"
14
15 #include "AliVfriendTrack.h"
16 #include "AliVMisc.h"
17 #include "AliFlatTPCseed.h"
18
19 class AliESDtrack;
20 class AliESDfriendTrack;
21 class AliExternalTrackParam;
22 class AliTrackPointArray;
23 class AliTPCseed;
24
25 class AliFlatESDFriendTrack :public AliVfriendTrack 
26 {
27  public:
28
29   // --------------------------------------------------------------------------------
30   // -- Constructor / Destructors
31   AliFlatESDFriendTrack();
32   ~AliFlatESDFriendTrack() {}
33  
34   // constructor and method for reinitialisation of virtual table  
35   AliFlatESDFriendTrack( AliVConstructorReinitialisationFlag );
36   void Reinitialize() { new (this) AliFlatESDFriendTrack( AliVReinitialize ); }
37
38   // --------------------   AliVfriendTrack interface    ---------------------------------
39
40   Int_t GetTPCseed( AliTPCseed &) const;
41  
42   Int_t GetTrackParamTPCOut( AliExternalTrackParam &p ) const { return GetTrackParam( fTPCOutPointer, p ); }
43   Int_t GetTrackParamITSOut( AliExternalTrackParam &p ) const { return GetTrackParam( fITSOutPointer, p ); }
44   Int_t GetTrackParamTRDIn( AliExternalTrackParam &p )  const { return GetTrackParam( fTRDInPointer,  p ); }
45
46   //virtual const AliVtrackPointArray *GetTrackPointArray() const {return NULL;}
47
48   TObject* GetCalibObject(Int_t) const {return NULL;}
49   const AliExternalTrackParam* GetTPCOut() const {return NULL;}
50   const AliExternalTrackParam* GetITSOut() const {return NULL;}
51
52   
53   // bit manipulation for filtering
54
55   void SetSkipBit(Bool_t skip){ fBitFlags = skip; }
56   Bool_t TestSkipBit() const { return (fBitFlags!=0); }
57   
58   // ------------------- Own methods  ---------------------------------------------------------
59
60   // -- Set methods
61  
62   void Reset();
63
64   Int_t SetFromESDfriendTrack( const AliESDfriendTrack* track, size_t allocatedMemory );
65
66   void SetTrackParamTPCOut( const AliExternalTrackParam *p ){ SetTrackParam( fTPCOutPointer, p ); }
67   void SetTrackParamITSOut( const AliExternalTrackParam *p ){ SetTrackParam( fITSOutPointer, p ); }
68   void SetTrackParamTRDIn ( const AliExternalTrackParam *p ){ SetTrackParam( fTRDInPointer,  p );  }
69   void SetTPCseed         ( const AliTPCseed *p );
70
71   // -- 
72
73   AliFlatTPCseed* SetTPCseedStart();
74   void SetTPCseedEnd( size_t tpcSeedSize );
75
76   
77   const AliFlatESDFriendTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDFriendTrack*>(fContent+fContentSize); }
78   AliFlatESDFriendTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDFriendTrack*>(fContent+fContentSize); }
79  
80   // --------------------------------------------------------------------------------
81   // -- Size methods
82
83   static size_t EstimateSize(){
84     return sizeof(AliFlatESDFriendTrack) + 3*sizeof(AliFlatExternalTrackParam) + AliFlatTPCseed::EstimateSize();
85   }
86
87   size_t GetSize() const { return fContent -  reinterpret_cast<const Byte_t*>(this) + fContentSize; }
88
89  private: 
90
91   AliFlatESDFriendTrack(const AliFlatESDFriendTrack &);
92   AliFlatESDFriendTrack& operator=(const AliFlatESDFriendTrack& ); 
93
94   Int_t GetTrackParam( Long64_t ptr, AliExternalTrackParam &param ) const;
95   void  SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p );
96
97   // --------------------------------------------------------------------------------
98
99   ULong64_t fContentSize;                      // Size of this object
100   Long64_t  fTPCOutPointer;        // pointer to TPCOut track param in fContent
101   Long64_t  fITSOutPointer;        // pointer to ITSOut track param in fContent
102   Long64_t  fTRDInPointer;        // pointer to TRDIn track param in fContent
103   Long64_t  fTPCseedPointer;       // pointer to TPCseed in fContent
104   Bool_t    fBitFlags; // bit flags
105
106   // --------------------------------------------------------------------------------
107   
108   Byte_t fContent[1];                  // Variale size object, which contains all data
109
110   //ClassDef(AliFlatESDFriendTrack, 0)
111
112 };
113
114 inline Int_t AliFlatESDFriendTrack::GetTrackParam( Long64_t ptr, AliExternalTrackParam &param ) const
115 {
116   if( ptr<0 ) return -1;
117   const AliFlatExternalTrackParam *fp = reinterpret_cast< const AliFlatExternalTrackParam* >( fContent + ptr );
118   fp->GetExternalTrackParam( param );
119 }
120
121 inline void AliFlatESDFriendTrack::SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p )
122 {
123   if(!p ) return;
124   if( ptr<0 ){
125     ptr = fContentSize;
126     fContentSize += sizeof(AliFlatExternalTrackParam);
127   }
128   AliFlatExternalTrackParam *fp = reinterpret_cast< AliFlatExternalTrackParam* >( fContent + ptr );
129   fp->SetExternalTrackParam( p );
130 }
131
132 inline void AliFlatESDFriendTrack::SetTPCseed( const AliTPCseed *p )
133 {
134   fTPCseedPointer = -1;
135   if(!p ) return;
136   fTPCseedPointer = fContentSize;
137   AliFlatTPCseed *fp = reinterpret_cast< AliFlatTPCseed* >( fContent + fTPCseedPointer );
138   fp->SetFromTPCseed( p );
139   fContentSize += fp->GetSize();  
140 }
141
142 inline Int_t AliFlatESDFriendTrack::GetTPCseed( AliTPCseed &s ) const
143 {
144   if( fTPCseedPointer<0 ) return -1;
145   const AliFlatTPCseed *fp = reinterpret_cast< const AliFlatTPCseed* >( fContent + fTPCseedPointer );
146   fp->GetTPCseed( &s );
147   return 0;
148 }
149
150 inline AliFlatTPCseed* AliFlatESDFriendTrack::SetTPCseedStart()
151 {
152   fTPCseedPointer = fContentSize;
153   return  reinterpret_cast< AliFlatTPCseed* >( fContent + fTPCseedPointer );
154 }
155
156 inline void AliFlatESDFriendTrack::SetTPCseedEnd( size_t tpcSeedSize ){
157   fContentSize += tpcSeedSize;
158 }
159
160 #endif