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