*/
#include "Rtypes.h"
-#include "AliVVevent.h"
+#include "AliVMisc.h"
+#include "AliVEvent.h"
+#include "AliFlatESDTrack.h"
#include "AliFlatESDVertex.h"
+#include "AliFlatESDFriend.h"
+#include "AliESDVertex.h"
-class AliFlatESDTrack;
class AliFlatESDV0;
class AliFlatESDTrigger;
class AliESDEvent;
class AliESDVertex;
-class AliESDtrack;
-class AliESDfriendTrack;
-class AliESDv0;
-class AliFlatESDEvent :public AliVVevent {
+class AliFlatESDEvent :public AliVEvent {
public:
// --------------------------------------------------------------------------------
// -- Constructor / Destructors
AliFlatESDEvent();
- ~AliFlatESDEvent();
+ ~AliFlatESDEvent() {}
- // Interface to AliVVEvent
+ // constructor and method for reinitialisation of virtual table
+ AliFlatESDEvent( AliVConstructorReinitialisationFlag );
+ void Reinitialize() { new (this) AliFlatESDEvent( AliVReinitialize ); }
- void Reset(){}
+ // --------------------------------------------------------------------------------
Double_t GetMagneticField() const { return fMagneticField; }
UInt_t GetPeriodNumber() const { return fPeriodNumber; }
Int_t GetRunNumber() const { return fRunNumber; }
UInt_t GetOrbitNumber() const { return fOrbitNumber; }
UShort_t GetBunchCrossNumber() const { return fBunchCrossNumber; }
- UInt_t GetTimeStamp() const { return fTimeStamp; }
- ULong64_t GetTriggerMask() const { return fTriggerMask; }
-
- TString GetFiredTriggerClasses() const { TString s; return s; } //!!
- UInt_t GetEventSpecie() const { return 0; } //!!
-
+ ULong64_t GetTriggerMask() const { return fTriggerMask; }
+ ULong64_t GetTriggerMaskNext50() const { return fTriggerMaskNext50; }
+ TString GetFiredTriggerClasses() const ;
+
Int_t GetNumberOfTracks() const { return fNTracks; }
- Int_t GetNumberOfV0s() const { return fNV0s; }
- Int_t GetNumberOfKinks() const { return 0; }
+ Int_t GetNumberOfV0s() const { return fNV0s; }
+
+ void Reset();
+ void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
+
+ UInt_t GetTimeStamp() const { return fTimeStamp; }
+ UInt_t GetEventSpecie() const { return fEventSpecie; }
+ Int_t GetNumberOfKinks() const { return 0; }
- AliVVtrack* GetTrack(Int_t /*i*/) const { return NULL; }
AliESDkink* GetKink(Int_t /*i*/) const { return NULL;}
- void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
+ Int_t GetPrimaryVertexSPD( AliESDVertex &v ) const ;
+ Int_t GetPrimaryVertexTracks( AliESDVertex &v ) const ;
+
+ AliVfriendEvent* FindFriend() const { return fFriendEvent; }
// --------------------------------------------------------------------------------
- // -- Fill / Set methods
- void Init();
+ // Own methods
- Int_t FillFromESD( const size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t useESDFriends = kTRUE, const Bool_t fillV0s=kTRUE );
+ // -- Set methods
+
+ Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE );
+
+ void SetFriendEvent( AliFlatESDFriend *f ) { fFriendEvent=f; }
void SetMagneticField( Double_t mf ){ fMagneticField = mf; }
void SetPeriodNumber( Int_t n ) { fPeriodNumber = n; }
void SetOrbitNumber( UInt_t n ) { fOrbitNumber = n; }
void SetBunchCrossNumber( UShort_t n ) { fBunchCrossNumber = n; }
void SetTimeStamp( UInt_t timeStamp ){ fTimeStamp = timeStamp; }
+ void SetEventSpecie(UInt_t eventSpecie){ fEventSpecie = eventSpecie; }
void SetTriggerMask(ULong64_t n) { fTriggerMask = n; }
+ void SetTriggerMaskNext50(ULong64_t n) { fTriggerMaskNext50 = n; }
- AliFlatESDTrigger *FillTriggersStart();
- void FillTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
+ Int_t SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory );
+ Int_t SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory );
- void FillPrimaryVertices( const AliESDVertex *vertexSPD, const AliESDVertex *vertexTracks );
+ AliFlatESDTrigger *SetTriggersStart();
+ void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
- AliFlatESDTrack *FillTracksStart();
- void FillTracksEnd( Int_t nTracks, size_t tracksSize );
-
- AliFlatESDV0 *FillV0sStart();
- void FillV0sEnd( Int_t nV0s, size_t v0sSize );
+ Int_t SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem);
+ void SetTracksEnd( Int_t nTracks, size_t tracksSize );
+ AliFlatESDV0 *SetV0sStart();
+ void SetV0sEnd( Int_t nV0s, size_t v0sSize );
// --------------------------------------------------------------------------------
// -- Getter methods
-
- const AliFlatESDVertex* GetPrimaryVertexSPD() const ;
- const AliFlatESDVertex* GetPrimaryVertexTracks() const ;
+ const AliFlatESDVertex* GetFlatPrimaryVertexSPD() const ;
+ const AliFlatESDVertex* GetFlatPrimaryVertexTracks() const ;
Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; }
const AliFlatESDTrack *GetTracks() const { return reinterpret_cast<const AliFlatESDTrack*>( fContent + fTracksPointer ); }
const AliFlatESDV0 *GetV0s() const { return reinterpret_cast<const AliFlatESDV0*>( fContent + fV0Pointer ); }
+ const AliFlatESDTrack *GetFlatTrack( Int_t i ) const ;
+
// --------------------------------------------------------------------------------
// -- Size methods
ULong64_t GetSize() const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); }
- static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t useESDFriends = kTRUE, Bool_t fillV0s=kTRUE );
+ static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t fillV0s=kTRUE );
+
+ // --------------------------------------------------------------------------------
+ // AliVEvent interface
+ virtual void Print(Option_t *option="") const {if (option){}; return;}
+ virtual void AddObject(TObject* /*obj*/) {}
+ virtual TObject* FindListObject(const char* /*name*/) const {return NULL;}
+ virtual TList* GetList() const {return NULL;}
+ virtual void CreateStdContent() {}
+ virtual void GetStdContent() {}
+ virtual void ReadFromTree(TTree* /*tree*/, Option_t* /*opt*/) {}
+ virtual void WriteToTree(TTree* /*tree*/) const {}
+ virtual void SetStdNames() {}
+ virtual AliVHeader* GetHeader() const {return NULL;}
+ virtual void SetPeriodNumber(UInt_t) {}
+ virtual void SetEventType(UInt_t) {}
+ virtual void SetTriggerCluster(UChar_t) {}
+ virtual UInt_t GetEventType() const {return 0;}
+ virtual UChar_t GetTriggerCluster() const {return 0;}
+ virtual Double_t GetZDCN1Energy() const {return 0.;}
+ virtual Double_t GetZDCP1Energy() const {return 0.;}
+ virtual Double_t GetZDCN2Energy() const {return 0.;}
+ virtual Double_t GetZDCP2Energy() const {return 0.;}
+ virtual Double_t GetZDCEMEnergy(Int_t) const {return 0.;}
+ virtual AliVParticle* GetTrack(Int_t) const {return NULL;}
+ virtual Int_t GetNumberOfCascades() const {return 0;}
+ virtual AliCentrality* GetCentrality() {return NULL;}
+ virtual AliEventplane* GetEventplane() {return NULL;}
+ virtual Int_t EventIndex(Int_t) const {return 0;}
+ virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
+ virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
+ virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
+ virtual AliVVZERO* GetVZEROData() const {return NULL;}
+ virtual AliVZDC *GetZDCData() const {return NULL;}
private:
AliFlatESDEvent( const AliFlatESDEvent& );
AliFlatESDEvent& operator=( const AliFlatESDEvent& );
- Int_t AddTriggerClass( const char *TriggerClassName, Int_t TriggerIndex, ULong64_t MaxSize );
- void FillPrimaryVertex(const AliESDVertex *v, Byte_t flag);
- Int_t FillNextTrack( const AliESDtrack* esdTrack, AliESDfriendTrack* friendTrack);
- Int_t FillNextV0( const AliESDv0 *v0);
-
- const AliFlatESDVertex* GetFirstPrimaryVertex() const ;
- Byte_t *GetEndOfContent(){ return fContent + fContentSize; }
-
- UInt_t CountBits(Byte_t field, UInt_t mask) const;
-
// --------------------------------------------------------------------------------
// -- Fixed size member objects ( try to align in memory )
Int_t fRunNumber; // Run Number
UInt_t fOrbitNumber; // Orbit Number
UInt_t fTimeStamp; // Time stamp
+ UInt_t fEventSpecie; // Reconstruction event specie (1-default,2-lowM,4-highM,8-cosmic,16-cal)
UShort_t fBunchCrossNumber; // Bunch Crossing Number
Byte_t fPrimaryVertexMask; // Bit mask specfifying which primary vertices are present
- ULong64_t fTriggerMask; // Trigger mask
+ ULong64_t fTriggerMask; // Trigger mask, first 50 bits
+ ULong64_t fTriggerMaskNext50; // Trigger mask, next 50 bits
UInt_t fNTriggerClasses; // N trigger classes
UInt_t fNPrimaryVertices; // Number of primary vertices in array
// Pointers to specific data in fContent
size_t fTriggerPointer; // position of the first trigger description in fContent
- size_t fPrimaryVertexPointer; // position of the first primary vertex in fContent
+ size_t fPrimaryVertexTracksPointer; // position of primary vertex tracks in fContent
+ size_t fPrimaryVertexSPDPointer; // position of primary vertex SPD in fContent
+ size_t fTrackTablePointer; // position of the first track pointer in fContent
size_t fTracksPointer; // position of the first track in fContent
size_t fV0Pointer; // position of the first V0 in fContent
+
+ //
+ AliFlatESDFriend *fFriendEvent;
// --------------------------------------------------------------------------------
// -- Variable Size Object
Byte_t fContent[1]; // Variale size object, which contains all data
-
};
// Inline implementations
-inline AliFlatESDTrack *AliFlatESDEvent::FillTracksStart()
+inline const AliFlatESDTrack *AliFlatESDEvent::GetFlatTrack( Int_t i ) const
+{
+ const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
+ if( i<0 || i>(int) fNTracks || table[i]<0 ) return NULL;
+ return reinterpret_cast<const AliFlatESDTrack*>( fContent + table[i] );
+}
+
+
+inline Int_t AliFlatESDEvent::SetTracksStart( AliFlatESDTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem)
{
fNTracks = 0;
+ if( nTracks*sizeof(Long64_t) > freeMem ) return -1;
+ fTrackTablePointer = fContentSize;
+ fContentSize += nTracks*sizeof(Long64_t);
fTracksPointer = fContentSize;
- return reinterpret_cast< AliFlatESDTrack* >( fContent + fContentSize );
+ table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer );
+ t = reinterpret_cast< AliFlatESDTrack* >( fContent + fTracksPointer );
+ return 0;
}
-inline void AliFlatESDEvent::FillTracksEnd( Int_t nTracks, size_t tracksSize )
+inline void AliFlatESDEvent::SetTracksEnd( Int_t nTracks, size_t tracksSize )
{
+ if( nTracks<0 ) return;
+ Long64_t *table = reinterpret_cast< Long64_t*> (fContent + fTrackTablePointer);
+ for( int i=0; i<nTracks; i++ ) table[i]+=fTracksPointer;
fNTracks = nTracks;
fContentSize += tracksSize;
}
-inline AliFlatESDV0 *AliFlatESDEvent::FillV0sStart()
+inline AliFlatESDV0 *AliFlatESDEvent::SetV0sStart()
{
fNV0s = 0;
fV0Pointer = fContentSize;
return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
}
-inline void AliFlatESDEvent::FillV0sEnd( Int_t nV0s, size_t v0sSize )
+inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
{
fNV0s = nV0s;
fContentSize += v0sSize;
}
-inline AliFlatESDTrigger *AliFlatESDEvent::FillTriggersStart()
+inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
{
fNTriggerClasses = 0;
fTriggerPointer = fContentSize;
return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
}
-inline void AliFlatESDEvent::FillTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
+inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
{
fNTriggerClasses = nTriggerClasses;
fContentSize += triggersSize;
}
-inline const AliFlatESDVertex* AliFlatESDEvent::GetFirstPrimaryVertex() const
+inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const
{
- return reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexPointer);
-}
-
-inline const AliFlatESDVertex* AliFlatESDEvent::GetPrimaryVertexSPD() const
-{
- return (fPrimaryVertexMask & 0x1) ? GetFirstPrimaryVertex() : NULL;
+ return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
}
-inline const AliFlatESDVertex* AliFlatESDEvent::GetPrimaryVertexTracks() const
+inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const
{
- return (fPrimaryVertexMask & 0x2) ? (GetFirstPrimaryVertex() + (fPrimaryVertexMask & 0x1) ) : NULL;
+ return (fPrimaryVertexMask & 0x2) ? (reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexTracksPointer) ) : NULL;
}
+inline Int_t AliFlatESDEvent::GetPrimaryVertexSPD( AliESDVertex &v ) const
+{
+ const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexSPD();
+ if( !flatVertex ) return -1;
+ flatVertex->GetESDVertex( v );
+ return 0;
+}
+
+inline Int_t AliFlatESDEvent::GetPrimaryVertexTracks( AliESDVertex &v ) const
+{
+ const AliFlatESDVertex* flatVertex = GetFlatPrimaryVertexTracks();
+ if( !flatVertex ) return -1;
+ flatVertex->GetESDVertex( v );
+ return 0;
+}
+
#endif