]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDEvent.h
71e38afb4d3653485363cbd550b0f2a8d7432a39
[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 "AliFlatESDTrack.h"
14 #include "AliFlatESDV0.h"
15 #include "AliVVevent.h"
16 #include "AliFlatESDVertex.h"
17
18 class AliESDEvent;
19 class AliESDVertex;
20 class AliESDV0;
21 class TString;
22 class AliVVv0;
23
24 //class AliFlatESDEvent: public AliVVevent {
25 class AliFlatESDEvent {
26  public:
27   // --------------------------------------------------------------------------------
28   // -- Constructor / Destructors
29   AliFlatESDEvent();   
30
31 // empty constructor, to be called by placement new,
32 // when accessing information after reinterpret_cast
33 // so that vtable is generated, but values are not overwritten
34         AliFlatESDEvent(Bool_t){}
35
36   AliFlatESDEvent(AliESDEvent *esd);   
37   AliFlatESDEvent(AliESDEvent *esd, Bool_t useESDFriends);   
38   ~AliFlatESDEvent();  
39
40   // --------------------------------------------------------------------------------
41   // -- Fill / Set methods
42   void Reset();
43
44   Int_t Fill( const AliESDEvent *esd, const Bool_t useESDFriends = kTRUE, const Bool_t fillV0s=kTRUE );
45
46   void FillPrimaryVertices( const AliESDVertex *vertexSPD,
47                             const AliESDVertex *vertexTracks );
48
49  
50   AliFlatESDTrack *GetNextTrackPointer(){ 
51         AliFlatESDTrack * t = reinterpret_cast<AliFlatESDTrack*> (fContent + fSize);
52         new(t)  AliFlatESDTrack(kTRUE);
53         return t;
54   }
55
56   void StoreLastTrack(){ 
57     fNTracks++;
58     fSize+= GetNextTrackPointer()->GetSize();
59     fV0Pointer = fSize;
60   }
61
62   AliFlatESDV0 *GetNextV0Pointer(){
63         AliFlatESDV0 * t = reinterpret_cast<AliFlatESDV0*> (fContent + fSize);
64         new(t)  AliFlatESDV0(kTRUE);
65         return t;
66 }
67
68   void StoreLastV0(){ 
69     fNV0s++;
70     fSize+= sizeof(AliFlatESDV0);
71   }
72
73   // --------------------------------------------------------------------------------
74   // -- Getter methods
75
76    const AliFlatESDVertex* GetPrimaryVertexSPD() const {
77     if (fPrimaryVertexMask & 0x1){
78                  AliFlatESDVertex * t = reinterpret_cast< AliFlatESDVertex*> (const_cast<Byte_t*>(fContent));
79                 new(t)  AliFlatESDVertex(kTRUE);
80                 return t;
81         }
82         else return NULL;
83   } 
84
85   const  AliFlatESDVertex* GetPrimaryVertexTracks() const { 
86     if (fPrimaryVertexMask & 0x2){
87                  AliFlatESDVertex * t = reinterpret_cast< AliFlatESDVertex*> (const_cast<Byte_t*>(fContent)) + CountBits(fPrimaryVertexMask, 0x1);
88                 new(t)  AliFlatESDVertex(kTRUE);
89                 return t;
90         }
91         else return NULL;
92    } 
93
94   Int_t GetNumberOfV0s() const {return fNV0s;}
95
96   Int_t GetNumberOfTracks() const {return fNTracks;}
97   
98   AliFlatESDTrack *GetTracks() {
99         AliFlatESDTrack * t = reinterpret_cast<AliFlatESDTrack*> (fContent + fTracksPointer);
100         new(t)  AliFlatESDTrack(kTRUE);
101         return t;
102 }
103
104   const AliVVvertex* GetPrimaryVertex() const {return NULL;}
105   const AliVVvertex* GetPrimaryVertexTPC() const {return NULL;}
106   AliFlatESDTrack* GetTrack(Int_t /*i*/) const {return NULL;}
107   AliVVkink* GetKink(Int_t /*i*/) const {return NULL;}
108   AliFlatESDV0* GetV0(Int_t /*i*/) const {return NULL;}
109   Int_t GetNumberOfKinks() const {return 0;}
110   Int_t GetEventNumberInFile() const {return -1;}
111   const AliMultiplicity* GetMultiplicity() const {return NULL;} //by default SPDmult
112   Int_t GetRunNumber() const {return -1;}
113   TString GetFiredTriggerClasses() const {TString string; return string;}
114   TObject* FindListObject(const char* /*name*/) const {return NULL;}
115   ULong64_t GetTriggerMask() const {return 0;}
116   Double_t GetMagneticField() const {return 0;}
117   UInt_t GetTimeStamp() const { return 0;}
118   UInt_t GetEventSpecie() const { return 0;}
119
120   
121   // --------------------------------------------------------------------------------
122   // -- Size methods
123   static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t useESDFriends = kTRUE, Bool_t fillV0s=kTRUE);
124          ULong64_t GetSize()    {return fContent - reinterpret_cast<Byte_t*>(this) + fSize;}
125
126
127
128
129  private:
130   AliFlatESDEvent(const AliFlatESDEvent&);
131   AliFlatESDEvent& operator=(const AliFlatESDEvent&);
132
133   void FillPrimaryVertex(const AliESDVertex *v, Byte_t flag);
134   Int_t FillNextTrack( const AliESDtrack* esdTrack,  AliESDfriendTrack* friendTrack);
135   Int_t FillNextV0( const AliESDV0 *v0);
136   UInt_t CountBits(Byte_t field, UInt_t mask) const;
137
138   // --------------------------------------------------------------------------------
139   // -- Fixed size member objects
140   //    -> Try to align in memory
141
142   Byte_t   fPrimaryVertexMask;            // Bit mask specfifying which primary vertices are present
143   Int_t    fNTracks;                   // Number of tracks in vector
144   ULong64_t fTracksPointer;            // position of the first track in fContent
145   Int_t fNV0s; // Number of v0's
146   ULong64_t fV0Pointer;            // position of the first V0 in fContent
147
148
149   ULong64_t fSize;                      // Size of this object
150   
151   // --------------------------------------------------------------------------------
152   // -- Variable Size Object
153   Byte_t fContent[1];                  // Variale size object, which contains all data
154   
155 };
156 #endif