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 "AliVVevent.h"
14 #include "AliFlatESDTrack.h"
15 #include "AliFlatESDVertex.h"
18 class AliFlatESDTrigger;
23 class AliFlatESDEvent :public AliVVevent {
25 // --------------------------------------------------------------------------------
26 // -- Constructor / Destructors
30 // --------------------------------------------------------------------------------
31 // Interface to AliVVEvent
33 Double_t GetMagneticField() const { return fMagneticField; }
34 UInt_t GetPeriodNumber() const { return fPeriodNumber; }
35 Int_t GetRunNumber() const { return fRunNumber; }
36 UInt_t GetOrbitNumber() const { return fOrbitNumber; }
37 UShort_t GetBunchCrossNumber() const { return fBunchCrossNumber; }
38 ULong64_t GetTriggerMask() const { return fTriggerMask; }
39 ULong64_t GetTriggerMaskNext50() const { return fTriggerMaskNext50; }
40 TString GetFiredTriggerClasses() const ;
42 Int_t GetNumberOfTracks() const { return fNTracks; }
43 Int_t GetNumberOfV0s() const { return fNV0s; }
46 void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
48 UInt_t GetTimeStamp() const { return fTimeStamp; }
49 UInt_t GetEventSpecie() const { return fEventSpecie; }
50 Int_t GetNumberOfKinks() const { return 0; }
52 const AliVVtrack* GetVVTrack(Int_t i) const { return GetFlatTrack(i); }
53 AliESDkink* GetKink(Int_t /*i*/) const { return NULL;}
55 // --------------------------------------------------------------------------------
60 Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE );
62 void SetMagneticField( Double_t mf ){ fMagneticField = mf; }
63 void SetPeriodNumber( Int_t n ) { fPeriodNumber = n; }
64 void SetRunNumber( Int_t n ) { fRunNumber = n; }
65 void SetOrbitNumber( UInt_t n ) { fOrbitNumber = n; }
66 void SetBunchCrossNumber( UShort_t n ) { fBunchCrossNumber = n; }
67 void SetTimeStamp( UInt_t timeStamp ){ fTimeStamp = timeStamp; }
68 void SetEventSpecie(UInt_t eventSpecie){ fEventSpecie = eventSpecie; }
69 void SetTriggerMask(ULong64_t n) { fTriggerMask = n; }
70 void SetTriggerMaskNext50(ULong64_t n) { fTriggerMaskNext50 = n; }
72 Int_t SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory );
73 Int_t SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory );
75 AliFlatESDTrigger *SetTriggersStart();
76 void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
78 Int_t SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem);
79 void SetTracksEnd( Int_t nTracks, size_t tracksSize );
81 AliFlatESDV0 *SetV0sStart();
82 void SetV0sEnd( Int_t nV0s, size_t v0sSize );
84 // --------------------------------------------------------------------------------
87 const AliFlatESDVertex* GetPrimaryVertexSPD() const ;
88 const AliFlatESDVertex* GetPrimaryVertexTracks() const ;
90 Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; }
92 const AliFlatESDTrigger *GetTriggerClasses() const { return reinterpret_cast<const AliFlatESDTrigger*>( fContent + fTriggerPointer ); }
93 const AliFlatESDTrack *GetTracks() const { return reinterpret_cast<const AliFlatESDTrack*>( fContent + fTracksPointer ); }
94 const AliFlatESDV0 *GetV0s() const { return reinterpret_cast<const AliFlatESDV0*>( fContent + fV0Pointer ); }
96 const AliFlatESDTrack *GetFlatTrack( Int_t i ) const ;
98 // --------------------------------------------------------------------------------
101 ULong64_t GetSize() const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); }
103 static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t fillV0s=kTRUE );
107 AliFlatESDEvent( const AliFlatESDEvent& );
108 AliFlatESDEvent& operator=( const AliFlatESDEvent& );
110 // --------------------------------------------------------------------------------
112 // -- Fixed size member objects ( try to align in memory )
114 size_t fContentSize; // Size of fContent
115 Double32_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF
116 UInt_t fPeriodNumber; // PeriodNumber
117 Int_t fRunNumber; // Run Number
118 UInt_t fOrbitNumber; // Orbit Number
119 UInt_t fTimeStamp; // Time stamp
120 UInt_t fEventSpecie; // Reconstruction event specie (1-default,2-lowM,4-highM,8-cosmic,16-cal)
121 UShort_t fBunchCrossNumber; // Bunch Crossing Number
122 Byte_t fPrimaryVertexMask; // Bit mask specfifying which primary vertices are present
123 ULong64_t fTriggerMask; // Trigger mask, first 50 bits
124 ULong64_t fTriggerMaskNext50; // Trigger mask, next 50 bits
126 UInt_t fNTriggerClasses; // N trigger classes
127 UInt_t fNPrimaryVertices; // Number of primary vertices in array
128 UInt_t fNTracks; // Number of tracks in array
129 UInt_t fNV0s; // Number of v0's
131 // Pointers to specific data in fContent
133 size_t fTriggerPointer; // position of the first trigger description in fContent
134 size_t fPrimaryVertexTracksPointer; // position of primary vertex tracks in fContent
135 size_t fPrimaryVertexSPDPointer; // position of primary vertex SPD in fContent
136 size_t fTrackTablePointer; // position of the first track pointer in fContent
137 size_t fTracksPointer; // position of the first track in fContent
138 size_t fV0Pointer; // position of the first V0 in fContent
140 // --------------------------------------------------------------------------------
142 // -- Variable Size Object
144 Byte_t fContent[1]; // Variale size object, which contains all data
147 // Inline implementations
149 inline const AliFlatESDTrack *AliFlatESDEvent::GetFlatTrack( Int_t i ) const
151 const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
152 if( i<0 || i>(int) fNTracks || table[i]<0 ) return NULL;
153 return reinterpret_cast<const AliFlatESDTrack*>( fContent + table[i] );
157 inline Int_t AliFlatESDEvent::SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem)
160 if( nTracks*sizeof(Long64_t) > freeMem ) return -1;
161 fTrackTablePointer = fContentSize;
162 fContentSize += nTracks*sizeof(Long64_t);
163 fTracksPointer = fContentSize;
164 table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer );
165 t = reinterpret_cast< AliFlatESDTrack* >( fContent + fTracksPointer );
169 inline void AliFlatESDEvent::SetTracksEnd( Int_t nTracks, size_t tracksSize )
171 if( nTracks<0 ) return;
172 Long64_t *table = reinterpret_cast< Long64_t*> (fContent + fTrackTablePointer);
173 for( int i=0; i<nTracks; i++ ) table[i]+=fTracksPointer;
175 fContentSize += tracksSize;
178 inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart()
181 fV0Pointer = fContentSize;
182 return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
185 inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
188 fContentSize += v0sSize;
191 inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
193 fNTriggerClasses = 0;
194 fTriggerPointer = fContentSize;
195 return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
198 inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
200 fNTriggerClasses = nTriggerClasses;
201 fContentSize += triggersSize;
204 inline const AliFlatESDVertex* AliFlatESDEvent::GetPrimaryVertexSPD() const
206 return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
209 inline const AliFlatESDVertex* AliFlatESDEvent::GetPrimaryVertexTracks() const
211 return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer) ) : NULL;