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
14 #include "AliVEvent.h"
15 #include "AliFlatESDTrack.h"
16 #include "AliFlatESDVertex.h"
17 #include "AliFlatESDFriend.h"
18 #include "AliESDVertex.h"
21 class AliFlatESDTrigger;
26 class AliFlatESDEvent :public AliVEvent {
28 // --------------------------------------------------------------------------------
29 // -- Constructor / Destructors
33 // constructor and method for reinitialisation of virtual table
34 AliFlatESDEvent( AliVConstructorReinitialisationFlag );
35 void Reinitialize() { new (this) AliFlatESDEvent( AliVReinitialize ); }
37 // --------------------------------------------------------------------------------
39 Double_t GetMagneticField() const { return fMagneticField; }
40 UInt_t GetPeriodNumber() const { return fPeriodNumber; }
41 Int_t GetRunNumber() const { return fRunNumber; }
42 UInt_t GetOrbitNumber() const { return fOrbitNumber; }
43 UShort_t GetBunchCrossNumber() const { return fBunchCrossNumber; }
44 ULong64_t GetTriggerMask() const { return fTriggerMask; }
45 ULong64_t GetTriggerMaskNext50() const { return fTriggerMaskNext50; }
46 TString GetFiredTriggerClasses() const ;
48 Int_t GetNumberOfTracks() const { return fNTracks; }
49 Int_t GetNumberOfV0s() const { return fNV0s; }
52 void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
54 UInt_t GetTimeStamp() const { return fTimeStamp; }
55 UInt_t GetEventSpecie() const { return fEventSpecie; }
56 Int_t GetNumberOfKinks() const { return 0; }
58 AliVTrack *GetVTrack( Int_t i ) { return GetFlatTrackNonConst(i); }
59 AliESDkink *GetKink(Int_t /*i*/) const { return NULL;}
61 Int_t GetPrimaryVertex( AliESDVertex &v ) const ;
62 Int_t GetPrimaryVertexTPC( AliESDVertex &v ) const ;
63 Int_t GetPrimaryVertexSPD( AliESDVertex &v ) const ;
64 Int_t GetPrimaryVertexTracks( AliESDVertex &v ) const ;
66 AliVfriendEvent* FindFriend() const { return fFriendEvent; }
68 // --------------------------------------------------------------------------------
73 Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE );
75 void SetFriendEvent( AliFlatESDFriend *f ) { fFriendEvent=f; }
77 void SetMagneticField( Double_t mf ){ fMagneticField = mf; }
78 void SetPeriodNumber( Int_t n ) { fPeriodNumber = n; }
79 void SetRunNumber( Int_t n ) { fRunNumber = n; }
80 void SetOrbitNumber( UInt_t n ) { fOrbitNumber = n; }
81 void SetBunchCrossNumber( UShort_t n ) { fBunchCrossNumber = n; }
82 void SetTimeStamp( UInt_t timeStamp ){ fTimeStamp = timeStamp; }
83 void SetEventSpecie(UInt_t eventSpecie){ fEventSpecie = eventSpecie; }
84 void SetTriggerMask(ULong64_t n) { fTriggerMask = n; }
85 void SetTriggerMaskNext50(ULong64_t n) { fTriggerMaskNext50 = n; }
87 Int_t SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory );
88 Int_t SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory );
90 AliFlatESDTrigger *SetTriggersStart();
91 void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
93 Int_t SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem);
94 void SetTracksEnd( Int_t nTracks, size_t tracksSize );
96 AliFlatESDV0 *SetV0sStart();
97 void SetV0sEnd( Int_t nV0s, size_t v0sSize );
99 // --------------------------------------------------------------------------------
102 const AliFlatESDVertex* GetFlatPrimaryVertexSPD() const ;
103 const AliFlatESDVertex* GetFlatPrimaryVertexTracks() const ;
105 Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; }
107 const AliFlatESDTrigger *GetTriggerClasses() const { return reinterpret_cast<const AliFlatESDTrigger*>( fContent + fTriggerPointer ); }
108 const AliFlatESDTrack *GetTracks() const { return reinterpret_cast<const AliFlatESDTrack*>( fContent + fTracksPointer ); }
109 const AliFlatESDV0 *GetV0s() const { return reinterpret_cast<const AliFlatESDV0*>( fContent + fV0Pointer ); }
111 const AliFlatESDTrack *GetFlatTrack( Int_t i ) const ;
112 AliFlatESDTrack *GetFlatTrackNonConst( Int_t i );
114 // --------------------------------------------------------------------------------
117 ULong64_t GetSize() const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); }
119 static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t fillV0s=kTRUE );
121 // --------------------------------------------------------------------------------
122 // AliVEvent interface
123 virtual void Print(Option_t *option="") const {if (option){}; return;}
124 virtual void AddObject(TObject* /*obj*/) {}
125 virtual TObject* FindListObject(const char* /*name*/) const {return NULL;}
126 virtual TList* GetList() const {return NULL;}
127 virtual void CreateStdContent() {}
128 virtual void GetStdContent() {}
129 virtual void ReadFromTree(TTree* /*tree*/, Option_t* /*opt*/) {}
130 virtual void WriteToTree(TTree* /*tree*/) const {}
131 virtual void SetStdNames() {}
132 virtual AliVHeader* GetHeader() const {return NULL;}
133 virtual void SetPeriodNumber(UInt_t) {}
134 virtual void SetEventType(UInt_t) {}
135 virtual void SetTriggerCluster(UChar_t) {}
136 virtual UInt_t GetEventType() const {return 0;}
137 virtual UChar_t GetTriggerCluster() const {return 0;}
138 virtual Double_t GetZDCN1Energy() const {return 0.;}
139 virtual Double_t GetZDCP1Energy() const {return 0.;}
140 virtual Double_t GetZDCN2Energy() const {return 0.;}
141 virtual Double_t GetZDCP2Energy() const {return 0.;}
142 virtual Double_t GetZDCEMEnergy(Int_t) const {return 0.;}
143 virtual AliVParticle* GetTrack(Int_t) const;
144 virtual Int_t GetNumberOfCascades() const {return 0;}
145 virtual AliCentrality* GetCentrality() {return NULL;}
146 virtual AliEventplane* GetEventplane() {return NULL;}
147 virtual Int_t EventIndex(Int_t) const {return 0;}
148 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
149 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
150 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
151 virtual AliVVZERO* GetVZEROData() const {return NULL;}
152 virtual AliVZDC *GetZDCData() const {return NULL;}
156 AliFlatESDEvent( const AliFlatESDEvent& );
157 AliFlatESDEvent& operator=( const AliFlatESDEvent& );
159 // --------------------------------------------------------------------------------
161 // -- Fixed size member objects ( try to align in memory )
163 size_t fContentSize; // Size of fContent
164 Double32_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF
165 UInt_t fPeriodNumber; // PeriodNumber
166 Int_t fRunNumber; // Run Number
167 UInt_t fOrbitNumber; // Orbit Number
168 UInt_t fTimeStamp; // Time stamp
169 UInt_t fEventSpecie; // Reconstruction event specie (1-default,2-lowM,4-highM,8-cosmic,16-cal)
170 UShort_t fBunchCrossNumber; // Bunch Crossing Number
171 Byte_t fPrimaryVertexMask; // Bit mask specfifying which primary vertices are present
172 ULong64_t fTriggerMask; // Trigger mask, first 50 bits
173 ULong64_t fTriggerMaskNext50; // Trigger mask, next 50 bits
175 UInt_t fNTriggerClasses; // N trigger classes
176 UInt_t fNPrimaryVertices; // Number of primary vertices in array
177 UInt_t fNTracks; // Number of tracks in array
178 UInt_t fNV0s; // Number of v0's
180 // Pointers to specific data in fContent
182 size_t fTriggerPointer; // position of the first trigger description in fContent
183 size_t fPrimaryVertexTracksPointer; // position of primary vertex tracks in fContent
184 size_t fPrimaryVertexSPDPointer; // position of primary vertex SPD in fContent
185 size_t fTrackTablePointer; // position of the first track pointer in fContent
186 size_t fTracksPointer; // position of the first track in fContent
187 size_t fV0Pointer; // position of the first V0 in fContent
190 AliFlatESDFriend *fFriendEvent;
192 // --------------------------------------------------------------------------------
194 // -- Variable Size Object
196 Byte_t fContent[1]; // Variale size object, which contains all data
199 // Inline implementations
201 inline AliFlatESDTrack *AliFlatESDEvent::GetFlatTrackNonConst( Int_t i )
203 const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
204 if( i<0 || i>(int) fNTracks || table[i]<0 ) return NULL;
205 return reinterpret_cast<AliFlatESDTrack*>( fContent + table[i] );
208 inline const AliFlatESDTrack *AliFlatESDEvent::GetFlatTrack( Int_t i ) const
210 const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
211 if( i<0 || i>(int) fNTracks || table[i]<0 ) return NULL;
212 return reinterpret_cast<const AliFlatESDTrack*>( fContent + table[i] );
216 inline Int_t AliFlatESDEvent::SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem)
219 if( nTracks*sizeof(Long64_t) > freeMem ) return -1;
220 fTrackTablePointer = fContentSize;
221 fContentSize += nTracks*sizeof(Long64_t);
222 fTracksPointer = fContentSize;
223 table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer );
224 t = reinterpret_cast< AliFlatESDTrack* >( fContent + fTracksPointer );
228 inline void AliFlatESDEvent::SetTracksEnd( Int_t nTracks, size_t tracksSize )
230 if( nTracks<0 ) return;
231 Long64_t *table = reinterpret_cast< Long64_t*> (fContent + fTrackTablePointer);
232 for( int i=0; i<nTracks; i++ ) table[i]+=fTracksPointer;
234 fContentSize += tracksSize;
237 inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart()
240 fV0Pointer = fContentSize;
241 return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
244 inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
247 fContentSize += v0sSize;
250 inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
252 fNTriggerClasses = 0;
253 fTriggerPointer = fContentSize;
254 return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
257 inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
259 fNTriggerClasses = nTriggerClasses;
260 fContentSize += triggersSize;
263 inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const
265 return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
268 inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const
270 return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer) ) : NULL;
273 inline Int_t AliFlatESDEvent::GetPrimaryVertexSPD( AliESDVertex &v ) const
275 const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexSPD();
276 if( !flatVertex ) return -1;
277 flatVertex->GetESDVertex( v );
281 inline Int_t AliFlatESDEvent::GetPrimaryVertexTracks( AliESDVertex &v ) const
283 const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexTracks();
284 if( !flatVertex ) return -1;
285 flatVertex->GetESDVertex( v );
289 inline Int_t AliFlatESDEvent::GetPrimaryVertexTPC( AliESDVertex &/*v*/ ) const
294 inline Int_t AliFlatESDEvent::GetPrimaryVertex( AliESDVertex &v ) const
296 int ret = GetPrimaryVertexTracks( v );
297 if( ret<0 ) ret = GetPrimaryVertexSPD( v );