]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDEvent.h
little changes
[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 "AliVMisc.h"
14 #include "AliVEvent.h"
15 #include "AliFlatESDTrack.h"
16 #include "AliFlatESDVertex.h"
17 #include "AliFlatESDFriend.h"
18 #include "AliESDVertex.h"
19
20 class AliFlatESDV0;
21 class AliFlatESDTrigger;
22
23 class AliESDEvent;
24 class AliESDVertex;
25
26 class AliFlatESDEvent :public AliVEvent {
27  public:
28   // --------------------------------------------------------------------------------
29   // -- Constructor / Destructors
30   AliFlatESDEvent();
31   ~AliFlatESDEvent() {}
32
33   // constructor and method for reinitialisation of virtual table
34   AliFlatESDEvent( AliVConstructorReinitialisationFlag );
35   void Reinitialize() { new (this) AliFlatESDEvent( AliVReinitialize ); }
36
37   // --------------------------------------------------------------------------------
38
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 ;
47  
48   Int_t GetNumberOfTracks() const { return fNTracks; }
49   Int_t GetNumberOfV0s()    const { return fNV0s; }
50
51   void Reset();
52   void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
53
54   UInt_t GetTimeStamp()     const { return fTimeStamp; }
55   UInt_t GetEventSpecie()   const { return fEventSpecie; }
56   Int_t  GetNumberOfKinks() const { return 0; }  
57
58   AliVTrack  *GetVTrack( Int_t i ) { return GetFlatTrackNonConst(i); }
59   AliESDkink *GetKink(Int_t /*i*/) const { return NULL;}
60
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 ;
65
66   AliVfriendEvent* FindFriend() const { return fFriendEvent; }
67
68   // --------------------------------------------------------------------------------
69   // Own methods 
70
71   // -- Set methods
72
73   Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE );
74
75   void SetFriendEvent( AliFlatESDFriend *f ) { fFriendEvent=f; }
76
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; }
86   
87   Int_t  SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory );
88   Int_t  SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory  );
89
90   AliFlatESDTrigger *SetTriggersStart();
91   void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
92
93   Int_t SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem);
94   void SetTracksEnd( Int_t nTracks, size_t tracksSize );
95
96   AliFlatESDV0 *SetV0sStart();
97   void SetV0sEnd( Int_t nV0s, size_t v0sSize );
98
99   // --------------------------------------------------------------------------------
100   // -- Getter methods
101
102   const AliFlatESDVertex* GetFlatPrimaryVertexSPD() const ;
103   const AliFlatESDVertex* GetFlatPrimaryVertexTracks() const ;
104
105   Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; }
106    
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 ); }
110
111   const AliFlatESDTrack  *GetFlatTrack( Int_t i ) const ;
112   AliFlatESDTrack  *GetFlatTrackNonConst( Int_t i );
113
114   // --------------------------------------------------------------------------------
115   // -- Size methods
116
117   ULong64_t  GetSize()  const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); }
118
119   static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t fillV0s=kTRUE );
120
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;}
153
154  private:
155
156   AliFlatESDEvent( const AliFlatESDEvent& );
157   AliFlatESDEvent& operator=( const AliFlatESDEvent& );
158
159   // --------------------------------------------------------------------------------
160
161   // -- Fixed size member objects ( try to align in memory )
162
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
174
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
179   
180   // Pointers to specific data in fContent
181   
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  
188   
189   //
190   AliFlatESDFriend *fFriendEvent;
191
192   // --------------------------------------------------------------------------------
193
194   // -- Variable Size Object
195
196   Byte_t fContent[1];                  // Variale size object, which contains all data
197 };
198
199 // Inline implementations 
200
201 inline AliFlatESDTrack  *AliFlatESDEvent::GetFlatTrackNonConst( Int_t i )  
202
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] );
206 }
207
208 inline const AliFlatESDTrack  *AliFlatESDEvent::GetFlatTrack( Int_t i ) const 
209
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] );
213 }
214
215
216 inline Int_t AliFlatESDEvent::SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem)
217 {
218   fNTracks = 0;
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 );
225   return 0;
226 }
227
228 inline void AliFlatESDEvent::SetTracksEnd( Int_t nTracks, size_t tracksSize )
229 {
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;
233   fNTracks = nTracks;
234   fContentSize += tracksSize;
235 }
236
237 inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart()
238 {
239   fNV0s = 0;
240   fV0Pointer = fContentSize;
241   return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
242 }
243    
244 inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
245 {
246   fNV0s = nV0s;
247   fContentSize += v0sSize;
248 }
249   
250 inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
251 {
252   fNTriggerClasses = 0;
253   fTriggerPointer = fContentSize;
254   return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
255 }
256
257 inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
258 {
259   fNTriggerClasses = nTriggerClasses;
260   fContentSize += triggersSize;
261 }
262
263 inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const 
264 {
265   return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
266
267
268 inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const 
269
270   return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer)  ) : NULL;
271
272
273 inline Int_t AliFlatESDEvent::GetPrimaryVertexSPD( AliESDVertex &v ) const 
274 {
275   const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexSPD();
276   if( !flatVertex ) return -1;
277   flatVertex->GetESDVertex( v );
278   return 0;
279 }
280
281 inline Int_t AliFlatESDEvent::GetPrimaryVertexTracks( AliESDVertex &v ) const 
282 {
283   const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexTracks();
284   if( !flatVertex ) return -1;
285   flatVertex->GetESDVertex( v );
286   return 0;
287 }
288
289 inline Int_t AliFlatESDEvent::GetPrimaryVertexTPC( AliESDVertex &/*v*/ ) const 
290 {
291   return -1;
292 }
293
294 inline Int_t AliFlatESDEvent::GetPrimaryVertex( AliESDVertex &v ) const 
295 {
296   int ret = GetPrimaryVertexTracks( v );
297   if( ret<0 ) ret = GetPrimaryVertexSPD( v );
298   return ret;
299 }
300
301
302 #endif