]>
Commit | Line | Data |
---|---|---|
251a2c81 | 1 | #ifndef ALIFLATESDEVENT_H |
2 | #define ALIFLATESDEVENT_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 | #include "Rtypes.h" | |
c2ea967e | 13 | #include "AliVVMisc.h" |
50ff8c36 | 14 | #include "AliVVevent.h" |
888585e5 | 15 | #include "AliFlatESDTrack.h" |
50ff8c36 | 16 | #include "AliFlatESDVertex.h" |
0912e8dd | 17 | #include "AliESDVertex.h" |
6a33e0e9 | 18 | |
6a33e0e9 | 19 | class AliFlatESDV0; |
20 | class AliFlatESDTrigger; | |
251a2c81 | 21 | |
22 | class AliESDEvent; | |
251a2c81 | 23 | class AliESDVertex; |
251a2c81 | 24 | |
6a33e0e9 | 25 | class AliFlatESDEvent :public AliVVevent { |
251a2c81 | 26 | public: |
27 | // -------------------------------------------------------------------------------- | |
28 | // -- Constructor / Destructors | |
6a33e0e9 | 29 | AliFlatESDEvent(); |
888585e5 | 30 | ~AliFlatESDEvent() {} |
6a33e0e9 | 31 | |
c2ea967e | 32 | // constructor and method for reinitialisation of virtual table |
33 | AliFlatESDEvent( AliVVConstructorReinitialisationFlag ); | |
34 | void Reinitialize() { new (this) AliFlatESDEvent( AliVVReinitialize ); } | |
35 | ||
888585e5 | 36 | // -------------------------------------------------------------------------------- |
6a33e0e9 | 37 | // Interface to AliVVEvent |
38 | ||
6a33e0e9 | 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; } | |
888585e5 | 44 | ULong64_t GetTriggerMask() const { return fTriggerMask; } |
45 | ULong64_t GetTriggerMaskNext50() const { return fTriggerMaskNext50; } | |
46 | TString GetFiredTriggerClasses() const ; | |
47 | ||
6a33e0e9 | 48 | Int_t GetNumberOfTracks() const { return fNTracks; } |
888585e5 | 49 | Int_t GetNumberOfV0s() const { return fNV0s; } |
488e1434 | 50 | |
888585e5 | 51 | void Reset(); |
6a33e0e9 | 52 | void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface |
251a2c81 | 53 | |
888585e5 | 54 | UInt_t GetTimeStamp() const { return fTimeStamp; } |
55 | UInt_t GetEventSpecie() const { return fEventSpecie; } | |
56 | Int_t GetNumberOfKinks() const { return 0; } | |
57 | ||
58 | const AliVVtrack* GetVVTrack(Int_t i) const { return GetFlatTrack(i); } | |
59 | AliESDkink* GetKink(Int_t /*i*/) const { return NULL;} | |
60 | ||
0912e8dd | 61 | Int_t GetPrimaryVertexSPD( AliESDVertex &v ) const ; |
62 | Int_t GetPrimaryVertexTracks( AliESDVertex &v ) const ; | |
63 | ||
64 | ||
251a2c81 | 65 | // -------------------------------------------------------------------------------- |
888585e5 | 66 | // Own methods |
251a2c81 | 67 | |
888585e5 | 68 | // -- Set methods |
69 | ||
70 | Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE ); | |
251a2c81 | 71 | |
6a33e0e9 | 72 | void SetMagneticField( Double_t mf ){ fMagneticField = mf; } |
73 | void SetPeriodNumber( Int_t n ) { fPeriodNumber = n; } | |
74 | void SetRunNumber( Int_t n ) { fRunNumber = n; } | |
75 | void SetOrbitNumber( UInt_t n ) { fOrbitNumber = n; } | |
76 | void SetBunchCrossNumber( UShort_t n ) { fBunchCrossNumber = n; } | |
77 | void SetTimeStamp( UInt_t timeStamp ){ fTimeStamp = timeStamp; } | |
888585e5 | 78 | void SetEventSpecie(UInt_t eventSpecie){ fEventSpecie = eventSpecie; } |
6a33e0e9 | 79 | void SetTriggerMask(ULong64_t n) { fTriggerMask = n; } |
888585e5 | 80 | void SetTriggerMaskNext50(ULong64_t n) { fTriggerMaskNext50 = n; } |
6a33e0e9 | 81 | |
888585e5 | 82 | Int_t SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory ); |
83 | Int_t SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory ); | |
6a33e0e9 | 84 | |
888585e5 | 85 | AliFlatESDTrigger *SetTriggersStart(); |
86 | void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize ); | |
6a33e0e9 | 87 | |
888585e5 | 88 | Int_t SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem); |
89 | void SetTracksEnd( Int_t nTracks, size_t tracksSize ); | |
251a2c81 | 90 | |
888585e5 | 91 | AliFlatESDV0 *SetV0sStart(); |
92 | void SetV0sEnd( Int_t nV0s, size_t v0sSize ); | |
251a2c81 | 93 | |
94 | // -------------------------------------------------------------------------------- | |
95 | // -- Getter methods | |
96 | ||
0912e8dd | 97 | const AliFlatESDVertex* GetFlatPrimaryVertexSPD() const ; |
98 | const AliFlatESDVertex* GetFlatPrimaryVertexTracks() const ; | |
251a2c81 | 99 | |
6a33e0e9 | 100 | Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; } |
101 | ||
102 | const AliFlatESDTrigger *GetTriggerClasses() const { return reinterpret_cast<const AliFlatESDTrigger*>( fContent + fTriggerPointer ); } | |
103 | const AliFlatESDTrack *GetTracks() const { return reinterpret_cast<const AliFlatESDTrack*>( fContent + fTracksPointer ); } | |
104 | const AliFlatESDV0 *GetV0s() const { return reinterpret_cast<const AliFlatESDV0*>( fContent + fV0Pointer ); } | |
8b15ecc3 | 105 | |
888585e5 | 106 | const AliFlatESDTrack *GetFlatTrack( Int_t i ) const ; |
107 | ||
251a2c81 | 108 | // -------------------------------------------------------------------------------- |
109 | // -- Size methods | |
488e1434 | 110 | |
6a33e0e9 | 111 | ULong64_t GetSize() const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); } |
488e1434 | 112 | |
888585e5 | 113 | static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t fillV0s=kTRUE ); |
488e1434 | 114 | |
251a2c81 | 115 | private: |
251a2c81 | 116 | |
6a33e0e9 | 117 | AliFlatESDEvent( const AliFlatESDEvent& ); |
118 | AliFlatESDEvent& operator=( const AliFlatESDEvent& ); | |
119 | ||
6a33e0e9 | 120 | // -------------------------------------------------------------------------------- |
251a2c81 | 121 | |
6a33e0e9 | 122 | // -- Fixed size member objects ( try to align in memory ) |
123 | ||
124 | size_t fContentSize; // Size of fContent | |
125 | Double32_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF | |
126 | UInt_t fPeriodNumber; // PeriodNumber | |
127 | Int_t fRunNumber; // Run Number | |
128 | UInt_t fOrbitNumber; // Orbit Number | |
129 | UInt_t fTimeStamp; // Time stamp | |
888585e5 | 130 | UInt_t fEventSpecie; // Reconstruction event specie (1-default,2-lowM,4-highM,8-cosmic,16-cal) |
6a33e0e9 | 131 | UShort_t fBunchCrossNumber; // Bunch Crossing Number |
132 | Byte_t fPrimaryVertexMask; // Bit mask specfifying which primary vertices are present | |
888585e5 | 133 | ULong64_t fTriggerMask; // Trigger mask, first 50 bits |
134 | ULong64_t fTriggerMaskNext50; // Trigger mask, next 50 bits | |
6a33e0e9 | 135 | |
136 | UInt_t fNTriggerClasses; // N trigger classes | |
137 | UInt_t fNPrimaryVertices; // Number of primary vertices in array | |
138 | UInt_t fNTracks; // Number of tracks in array | |
139 | UInt_t fNV0s; // Number of v0's | |
251a2c81 | 140 | |
6a33e0e9 | 141 | // Pointers to specific data in fContent |
142 | ||
143 | size_t fTriggerPointer; // position of the first trigger description in fContent | |
888585e5 | 144 | size_t fPrimaryVertexTracksPointer; // position of primary vertex tracks in fContent |
145 | size_t fPrimaryVertexSPDPointer; // position of primary vertex SPD in fContent | |
146 | size_t fTrackTablePointer; // position of the first track pointer in fContent | |
6a33e0e9 | 147 | size_t fTracksPointer; // position of the first track in fContent |
148 | size_t fV0Pointer; // position of the first V0 in fContent | |
149 | ||
251a2c81 | 150 | // -------------------------------------------------------------------------------- |
6a33e0e9 | 151 | |
251a2c81 | 152 | // -- Variable Size Object |
6a33e0e9 | 153 | |
251a2c81 | 154 | Byte_t fContent[1]; // Variale size object, which contains all data |
251a2c81 | 155 | }; |
6a33e0e9 | 156 | |
157 | // Inline implementations | |
158 | ||
888585e5 | 159 | inline const AliFlatESDTrack *AliFlatESDEvent::GetFlatTrack( Int_t i ) const |
160 | { | |
161 | const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer); | |
162 | if( i<0 || i>(int) fNTracks || table[i]<0 ) return NULL; | |
163 | return reinterpret_cast<const AliFlatESDTrack*>( fContent + table[i] ); | |
164 | } | |
165 | ||
166 | ||
167 | inline Int_t AliFlatESDEvent::SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem) | |
6a33e0e9 | 168 | { |
169 | fNTracks = 0; | |
888585e5 | 170 | if( nTracks*sizeof(Long64_t) > freeMem ) return -1; |
171 | fTrackTablePointer = fContentSize; | |
172 | fContentSize += nTracks*sizeof(Long64_t); | |
6a33e0e9 | 173 | fTracksPointer = fContentSize; |
888585e5 | 174 | table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer ); |
175 | t = reinterpret_cast< AliFlatESDTrack* >( fContent + fTracksPointer ); | |
176 | return 0; | |
6a33e0e9 | 177 | } |
178 | ||
888585e5 | 179 | inline void AliFlatESDEvent::SetTracksEnd( Int_t nTracks, size_t tracksSize ) |
6a33e0e9 | 180 | { |
888585e5 | 181 | if( nTracks<0 ) return; |
182 | Long64_t *table = reinterpret_cast< Long64_t*> (fContent + fTrackTablePointer); | |
183 | for( int i=0; i<nTracks; i++ ) table[i]+=fTracksPointer; | |
6a33e0e9 | 184 | fNTracks = nTracks; |
185 | fContentSize += tracksSize; | |
186 | } | |
187 | ||
888585e5 | 188 | inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart() |
6a33e0e9 | 189 | { |
190 | fNV0s = 0; | |
191 | fV0Pointer = fContentSize; | |
192 | return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize ); | |
193 | } | |
194 | ||
888585e5 | 195 | inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize ) |
6a33e0e9 | 196 | { |
197 | fNV0s = nV0s; | |
198 | fContentSize += v0sSize; | |
199 | } | |
200 | ||
888585e5 | 201 | inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart() |
6a33e0e9 | 202 | { |
203 | fNTriggerClasses = 0; | |
204 | fTriggerPointer = fContentSize; | |
205 | return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize ); | |
206 | } | |
207 | ||
888585e5 | 208 | inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize ) |
6a33e0e9 | 209 | { |
210 | fNTriggerClasses = nTriggerClasses; | |
211 | fContentSize += triggersSize; | |
212 | } | |
213 | ||
0912e8dd | 214 | inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const |
6a33e0e9 | 215 | { |
888585e5 | 216 | return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL; |
6a33e0e9 | 217 | } |
218 | ||
0912e8dd | 219 | inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const |
6a33e0e9 | 220 | { |
888585e5 | 221 | return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer) ) : NULL; |
6a33e0e9 | 222 | } |
223 | ||
0912e8dd | 224 | inline Int_t AliFlatESDEvent::GetPrimaryVertexSPD( AliESDVertex &v ) const |
225 | { | |
226 | const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexSPD(); | |
227 | if( !flatVertex ) return -1; | |
228 | flatVertex->GetESDVertex( v ); | |
229 | return 0; | |
230 | } | |
231 | ||
232 | inline Int_t AliFlatESDEvent::GetPrimaryVertexTracks( AliESDVertex &v ) const | |
233 | { | |
234 | const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexTracks(); | |
235 | if( !flatVertex ) return -1; | |
236 | flatVertex->GetESDVertex( v ); | |
237 | return 0; | |
238 | } | |
239 | ||
251a2c81 | 240 | #endif |