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