1 #ifndef ALIFLATESDEVENT_H
2 #define ALIFLATESDEVENT_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
13 #include "AliFlatESDTrack.h"
14 #include "AliFlatESDV0.h"
15 #include "AliVVevent.h"
16 #include "AliFlatESDVertex.h"
17 #include "AliFlatESDMisc.h"
25 class AliFlatESDEvent: public AliVVevent {
26 //class AliFlatESDEvent {
28 // --------------------------------------------------------------------------------
29 // -- Constructor / Destructors
33 AliFlatESDEvent(AliESDEvent *esd);
34 AliFlatESDEvent(AliESDEvent *esd, Bool_t useESDFriends);
35 virtual ~AliFlatESDEvent();
37 // --------------------------------------------------------------------------------
38 // -- Fill / Set methods
41 Int_t Fill( const AliESDEvent *esd, const Bool_t useESDFriends = kTRUE, const Bool_t fillV0s=kTRUE );
43 void FillPrimaryVertices( const AliESDVertex *vertexSPD,
44 const AliESDVertex *vertexTracks );
47 AliFlatESDTrack *GetNextTrackPointer(){
48 return reinterpret_cast<AliFlatESDTrack*> (fContent + fSize);
51 void StoreLastTrack(){
53 fSize+= GetNextTrackPointer()->GetSize();
57 AliFlatESDV0 *GetNextV0Pointer(){
58 return reinterpret_cast<AliFlatESDV0*> (fContent + fSize);
63 fSize+= sizeof(AliFlatESDV0);
66 // --------------------------------------------------------------------------------
69 const AliFlatESDVertex* GetPrimaryVertexSPD() const {
70 if (fPrimaryVertexMask & 0x1){
71 return reinterpret_cast< AliFlatESDVertex*> (const_cast<Byte_t*>(fContent));
76 const AliFlatESDVertex* GetPrimaryVertexTracks() const {
77 if (fPrimaryVertexMask & 0x2){
78 return reinterpret_cast< AliFlatESDVertex*> (const_cast<Byte_t*>(fContent)) + CountBits(fPrimaryVertexMask, 0x1);
83 Int_t GetNumberOfV0s() const {return fNV0s;}
85 Int_t GetNumberOfTracks() const {return fNTracks;}
87 AliFlatESDV0* GetV0s() {
88 return reinterpret_cast<AliFlatESDV0*> (fContent + fV0Pointer);
91 AliFlatESDTrack *GetTracks() {
92 return reinterpret_cast<AliFlatESDTrack*> (fContent + fTracksPointer);
95 const AliVVvertex* GetPrimaryVertex() const {return NULL;}
96 const AliVVvertex* GetPrimaryVertexTPC() const {return NULL;}
97 AliFlatESDTrack* GetTrack(Int_t /*i*/) const {return NULL;}
98 AliVVkink* GetKink(Int_t /*i*/) const {return NULL;}
99 AliFlatESDV0* GetV0(Int_t /*i*/) const {return NULL;}
100 Int_t GetNumberOfKinks() const {return 0;}
101 Int_t GetEventNumberInFile() const {return -1;}
102 const AliMultiplicity* GetMultiplicity() const {return NULL;} //by default SPDmult
103 Int_t GetRunNumber() const {return -1;}
104 TString GetFiredTriggerClasses() const {TString string; return string;}
105 TObject* FindListObject(const char* /*name*/) const {return NULL;}
106 ULong64_t GetTriggerMask() const {return 0;}
107 Double_t GetMagneticField() const {return 0;}
108 UInt_t GetTimeStamp() const { return 0;}
109 UInt_t GetEventSpecie() const { return 0;}
112 // --------------------------------------------------------------------------------
114 static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t useESDFriends = kTRUE, Bool_t fillV0s=kTRUE);
115 ULong64_t GetSize() {return fContent - reinterpret_cast<Byte_t*>(this) + fSize;}
119 // Initializing function
121 // to be called after event is received via reinterpret_cast from memory
125 new (this) AliFlatESDEvent(AliFlatESDReinitialize);
131 AliFlatESDEvent(const AliFlatESDEvent&);
132 AliFlatESDEvent& operator=(const AliFlatESDEvent&);
134 // special constructor, to be called by placement new,
135 // when accessing information after reinterpret_cast
136 // so that vtable is generated, but values are not overwritten
137 AliFlatESDEvent(AliFlatESDSpecialConstructorFlag);
139 void FillPrimaryVertex(const AliESDVertex *v, Byte_t flag);
140 Int_t FillNextTrack( const AliESDtrack* esdTrack, AliESDfriendTrack* friendTrack);
141 Int_t FillNextV0( const AliESDV0 *v0);
142 UInt_t CountBits(Byte_t field, UInt_t mask) const;
144 // --------------------------------------------------------------------------------
145 // -- Fixed size member objects
146 // -> Try to align in memory
148 Byte_t fPrimaryVertexMask; // Bit mask specfifying which primary vertices are present
149 Int_t fNTracks; // Number of tracks in vector
150 ULong64_t fTracksPointer; // position of the first track in fContent
151 Int_t fNV0s; // Number of v0's
152 ULong64_t fV0Pointer; // position of the first V0 in fContent
155 ULong64_t fSize; // Size of this object
157 // --------------------------------------------------------------------------------
158 // -- Variable Size Object
159 Byte_t fContent[1]; // Variale size object, which contains all data