]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDFriendTrack.h
AliHLTglobal module
[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         
78   const AliFlatTPCseed* GetFlatTPCseed( ) const{return reinterpret_cast<const AliFlatTPCseed*>(fContent+fTPCseedPointer); };
79   
80   const AliFlatESDFriendTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDFriendTrack*>(fContent+fContentSize); }
81   AliFlatESDFriendTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDFriendTrack*>(fContent+fContentSize); }
82  
83   // --------------------------------------------------------------------------------
84   // -- Size methods
85
86   static size_t EstimateSize(){
87     return sizeof(AliFlatESDFriendTrack) + 3*sizeof(AliFlatExternalTrackParam) + AliFlatTPCseed::EstimateSize();
88   }
89
90   size_t GetSize() const { return fContent -  reinterpret_cast<const Byte_t*>(this) + fContentSize; }
91
92  private: 
93
94   AliFlatESDFriendTrack(const AliFlatESDFriendTrack &);
95   AliFlatESDFriendTrack& operator=(const AliFlatESDFriendTrack& ); 
96
97   Int_t GetTrackParam( Long64_t ptr, AliExternalTrackParam &param ) const;
98   void  SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p );
99
100   // --------------------------------------------------------------------------------
101
102   ULong64_t fContentSize;                      // Size of this object
103   Long64_t  fTPCOutPointer;        // pointer to TPCOut track param in fContent
104   Long64_t  fITSOutPointer;        // pointer to ITSOut track param in fContent
105   Long64_t  fTRDInPointer;        // pointer to TRDIn track param in fContent
106   Long64_t  fTPCseedPointer;       // pointer to TPCseed in fContent
107   Bool_t    fBitFlags; // bit flags
108
109   // --------------------------------------------------------------------------------
110   
111   Byte_t fContent[1];                  // Variale size object, which contains all data
112
113   ClassDef(AliFlatESDFriendTrack, 0)
114
115 };
116
117 inline Int_t AliFlatESDFriendTrack::GetTrackParam( Long64_t ptr, AliExternalTrackParam &param ) const
118 {
119   if( ptr<0 ) return -1;
120   const AliFlatExternalTrackParam *fp = reinterpret_cast< const AliFlatExternalTrackParam* >( fContent + ptr );
121   fp->GetExternalTrackParam( param );
122         return 0;
123 }
124
125 inline void AliFlatESDFriendTrack::SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p )
126 {
127   if(!p ) return;
128   if( ptr<0 ){
129     ptr = fContentSize;
130     fContentSize += sizeof(AliFlatExternalTrackParam);
131   }
132   AliFlatExternalTrackParam *fp = reinterpret_cast< AliFlatExternalTrackParam* >( fContent + ptr );
133   fp->SetExternalTrackParam( p );
134 }
135
136 inline void AliFlatESDFriendTrack::SetTPCseed( const AliTPCseed *p )
137 {
138   fTPCseedPointer = -1;
139   if(!p ) return;
140   fTPCseedPointer = fContentSize;
141   AliFlatTPCseed *fp = reinterpret_cast< AliFlatTPCseed* >( fContent + fTPCseedPointer );
142   fp->SetFromTPCseed( p );
143   fContentSize += fp->GetSize();  
144 }
145
146 inline Int_t AliFlatESDFriendTrack::GetTPCseed( AliTPCseed &s ) const
147 {
148   if( fTPCseedPointer<0 ) return -1;
149   const AliFlatTPCseed *fp = reinterpret_cast< const AliFlatTPCseed* >( fContent + fTPCseedPointer );
150   fp->GetTPCseed( &s );
151   return 0;
152 }
153
154 inline AliFlatTPCseed* AliFlatESDFriendTrack::SetTPCseedStart()
155 {
156   fTPCseedPointer = fContentSize;
157   return  reinterpret_cast< AliFlatTPCseed* >( fContent + fTPCseedPointer );
158 }
159
160 inline void AliFlatESDFriendTrack::SetTPCseedEnd( size_t tpcSeedSize ){
161   fContentSize += tpcSeedSize;
162 }
163
164 #endif