]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/global/AliFlatESDEvent.h
added esdvertex getters to flat esd
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDEvent.h
CommitLineData
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 19class AliFlatESDV0;
20class AliFlatESDTrigger;
251a2c81 21
22class AliESDEvent;
251a2c81 23class AliESDVertex;
251a2c81 24
6a33e0e9 25class 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 159inline 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
167inline 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 179inline 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 188inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart()
6a33e0e9 189{
190 fNV0s = 0;
191 fV0Pointer = fContentSize;
192 return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
193}
194
888585e5 195inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
6a33e0e9 196{
197 fNV0s = nV0s;
198 fContentSize += v0sSize;
199}
200
888585e5 201inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
6a33e0e9 202{
203 fNTriggerClasses = 0;
204 fTriggerPointer = fContentSize;
205 return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
206}
207
888585e5 208inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
6a33e0e9 209{
210 fNTriggerClasses = nTriggerClasses;
211 fContentSize += triggersSize;
212}
213
0912e8dd 214inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const
6a33e0e9 215{
888585e5 216 return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
6a33e0e9 217}
218
0912e8dd 219inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const
6a33e0e9 220{
888585e5 221 return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer) ) : NULL;
6a33e0e9 222}
223
0912e8dd 224inline 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
232inline 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