1 #ifndef ALIFLATESDFRIENDTRACK_H
2 #define ALIFLATESDFRIENDTRACK_H
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 */
9 * See implementation file for documentation
15 #include "AliFlatTPCCluster.h"
16 #include "AliVfriendTrack.h"
18 #include "AliFlatExternalTrackParam.h"
19 #include "AliFlatTPCseed.h"
22 class AliESDfriendTrack;
23 class AliExternalTrackParam;
24 class AliTrackPointArray;
27 class AliFlatESDFriendTrack :public AliVfriendTrack
31 // --------------------------------------------------------------------------------
32 // -- Constructor / Destructors
33 AliFlatESDFriendTrack();
34 ~AliFlatESDFriendTrack() {}
36 // constructor and method for reinitialisation of virtual table
37 AliFlatESDFriendTrack( AliVConstructorReinitialisationFlag );
38 void Reinitialize() { new (this) AliFlatESDFriendTrack( AliVReinitialize ); }
40 // -------------------- AliVfriendTrack interface ---------------------------------
42 Int_t GetTPCseed( AliTPCseed &) const {return -1;}
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 ); }
48 //virtual const AliVtrackPointArray *GetTrackPointArray() const {return NULL;}
50 TObject* GetCalibObject(Int_t) const {return NULL;}
51 const AliExternalTrackParam* GetTPCOut() const {return NULL;}
52 const AliExternalTrackParam* GetITSOut() const {return NULL;}
55 // bit manipulation for filtering
57 void SetSkipBit(Bool_t skip){ fBitFlags = skip; }
58 Bool_t TestSkipBit() const { return (fBitFlags!=0); }
60 // ------------------- Own methods ---------------------------------------------------------
66 Int_t SetFromESDfriendTrack( const AliESDfriendTrack* track, size_t allocatedMemory );
68 void SetTrackParamTPCOut( const AliExternalTrackParam *p ){ SetTrackParam( fTPCOutPointer, p ); }
69 void SetTrackParamITSOut( const AliExternalTrackParam *p ){ SetTrackParam( fITSOutPointer, p ); }
70 void SetTrackParamTRDIn ( const AliExternalTrackParam *p ){ SetTrackParam( fTRDInPointer, p ); }
71 void SetTPCseed ( const AliTPCseed *p );
75 const AliFlatESDFriendTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDFriendTrack*>(fContent+fContentSize); }
76 AliFlatESDFriendTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDFriendTrack*>(fContent+fContentSize); }
78 // --------------------------------------------------------------------------------
81 static size_t EstimateSize(){
82 return sizeof(AliFlatESDFriendTrack) + 3*sizeof(AliFlatExternalTrackParam) + AliFlatTPCseed::EstimateSize();
85 size_t GetSize() const { return fContent - reinterpret_cast<const Byte_t*>(this) + fContentSize; }
89 AliFlatESDFriendTrack(const AliFlatESDFriendTrack &);
90 AliFlatESDFriendTrack& operator=(const AliFlatESDFriendTrack& );
92 Int_t GetTrackParam( Long64_t ptr, AliExternalTrackParam ¶m ) const;
93 void SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p );
95 // --------------------------------------------------------------------------------
97 ULong64_t fContentSize; // Size of this object
98 Long64_t fTPCOutPointer; // pointer to TPCOut track param in fContent
99 Long64_t fITSOutPointer; // pointer to ITSOut track param in fContent
100 Long64_t fTRDInPointer; // pointer to TRDIn track param in fContent
101 Long64_t fTPCseedPointer; // pointer to TPCseed in fContent
102 Bool_t fBitFlags; // bit flags
104 // --------------------------------------------------------------------------------
106 Byte_t fContent[1]; // Variale size object, which contains all data
108 ClassDef(AliFlatESDFriendTrack, 0)
112 inline Int_t AliFlatESDFriendTrack::GetTrackParam( Long64_t ptr, AliExternalTrackParam ¶m ) const
114 if( ptr<0 ) return -1;
115 const AliFlatExternalTrackParam *fp = reinterpret_cast< const AliFlatExternalTrackParam* >( fContent + ptr );
116 fp->GetExternalTrackParam( param );
119 inline void AliFlatESDFriendTrack::SetTrackParam( Long64_t &ptr, const AliExternalTrackParam *p )
124 fContentSize += sizeof(AliFlatExternalTrackParam);
126 AliFlatExternalTrackParam *fp = reinterpret_cast< AliFlatExternalTrackParam* >( fContent + ptr );
127 fp->SetExternalTrackParam( p );
130 inline void AliFlatESDFriendTrack::SetTPCseed( const AliTPCseed *p )
132 fTPCseedPointer = -1;
134 fTPCseedPointer = fContentSize;
135 AliFlatTPCseed *fp = reinterpret_cast< AliFlatTPCseed* >( fContent + fTPCseedPointer );
136 fp->SetFromTPCseed( p );
137 fContentSize += fp->GetSize();