]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/global/AliFlatESDEvent.h
fix compiler warning (empty body of if statement)
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDEvent.h
index 166af5f3770ada5426d938fc4a769554246eafec..a92c4e8cd1d661fba4408983266684ec43e09868 100644 (file)
  */
 
 #include "Rtypes.h"
+#include "AliVMisc.h"
+#include "AliVEvent.h"
 #include "AliFlatESDTrack.h"
-#include "AliFlatESDV0.h"
-#include "AliVVevent.h"
 #include "AliFlatESDVertex.h"
+#include "AliFlatESDFriend.h"
+#include "AliESDVertex.h"
+
+class AliFlatESDV0;
+class AliFlatESDTrigger;
 
 class AliESDEvent;
 class AliESDVertex;
-class AliESDV0;
-class TString;
-class AliVVv0;
 
-class AliFlatESDEvent: public AliVVevent {
+class AliFlatESDEvent :public AliVEvent {
  public:
   // --------------------------------------------------------------------------------
   // -- Constructor / Destructors
-  AliFlatESDEvent();   
-  AliFlatESDEvent(AliESDEvent *esd);   
-  AliFlatESDEvent(AliESDEvent *esd, Bool_t useESDFriends);   
-  ~AliFlatESDEvent();  
+  AliFlatESDEvent();
+  ~AliFlatESDEvent() {}
+
+  // constructor and method for reinitialisation of virtual table
+  AliFlatESDEvent( AliVConstructorReinitialisationFlag );
+  void Reinitialize() { new (this) AliFlatESDEvent( AliVReinitialize ); }
 
   // --------------------------------------------------------------------------------
-  // -- Fill / Set methods
-  void Reset();
 
-  Int_t Fill( const AliESDEvent *esd, const Bool_t useESDFriends = kTRUE, const Bool_t fillV0s=kTRUE );
+  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; }
+  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; }
 
-  void FillPrimaryVertices( const AliESDVertex *vertexSPD,
-                           const AliESDVertex *vertexTracks );
+  void Reset();
+  void ConnectTracks(){} // initialisation, needed by the ESD event, part of VVevent interface
 
-  AliFlatESDTrack *GetNextTrackPointer(){ return reinterpret_cast<AliFlatESDTrack*>(fContent + fSize); }
+  UInt_t GetTimeStamp()     const { return fTimeStamp; }
+  UInt_t GetEventSpecie()   const { return fEventSpecie; }
+  Int_t  GetNumberOfKinks() const { return 0; }  
 
-  void StoreLastTrack(){ 
-    fNTracks++;
-    fSize+= GetNextTrackPointer()->GetSize();
-    fV0Pointer = fSize;
-  }
+  AliESDkink* GetKink(Int_t /*i*/) const { return NULL;}
 
-  AliFlatESDV0 *GetNextV0Pointer(){ return reinterpret_cast<AliFlatESDV0*>(fContent + fSize); }
+  Int_t GetPrimaryVertexSPD( AliESDVertex &v ) const ;
+  Int_t GetPrimaryVertexTracks( AliESDVertex &v ) const ;
 
-  void StoreLastV0(){ 
-    fNV0s++;
-    fSize+= sizeof(AliFlatESDV0);
-  }
+  AliVfriendEvent* FindFriend() const { return fFriendEvent; }
 
   // --------------------------------------------------------------------------------
-  // -- Getter methods
+  // Own methods 
 
-  const AliFlatESDVertex* GetPrimaryVertexSPD() const {
-    return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent) : NULL;
-  } 
+  // -- Set methods
 
-  const AliFlatESDVertex* GetPrimaryVertexTracks() const { 
-    return (fPrimaryVertexMask & 0x2) ? reinterpret_cast<const AliFlatESDVertex*>(fContent) + CountBits(fPrimaryVertexMask, 0x1) : NULL;
-  } 
+  Int_t SetFromESD( size_t allocatedMemorySize, const AliESDEvent *esd, const Bool_t fillV0s=kTRUE );
 
-  Int_t GetNumberOfV0s() const {return fNV0s;}
+  void SetFriendEvent( AliFlatESDFriend *f ) { fFriendEvent=f; }
 
-  Int_t GetNumberOfTracks() const {return fNTracks;}
+  void  SetMagneticField( Double_t mf ){ fMagneticField = mf; }
+  void  SetPeriodNumber( Int_t n ) { fPeriodNumber = n; }
+  void  SetRunNumber( Int_t n ) { fRunNumber = 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; }
   
-  AliFlatESDTrack *GetTracks() {return reinterpret_cast<AliFlatESDTrack*>(fContent + fTracksPointer);}
-
-  const AliVVvertex* GetPrimaryVertex() const {return NULL;}
-  const AliVVvertex* GetPrimaryVertexTPC() const {return NULL;}
-  AliFlatESDTrack* GetTrack(Int_t /*i*/) const {return NULL;}
-  AliVVkink* GetKink(Int_t /*i*/) const {return NULL;}
-  AliFlatESDV0* GetV0(Int_t /*i*/) const {return NULL;}
-  Int_t GetNumberOfKinks() const {return 0;}
-  Int_t GetEventNumberInFile() const {return -1;}
-  const AliMultiplicity* GetMultiplicity() const {return NULL;} //by default SPDmult
-  Int_t GetRunNumber() const {return -1;}
-  TString GetFiredTriggerClasses() const {TString string; return string;}
-  TObject* FindListObject(const char* /*name*/) const {return NULL;}
-  ULong64_t GetTriggerMask() const {return 0;}
-  Double_t GetMagneticField() const {return 0;}
-  UInt_t GetTimeStamp() const { return 0;}
-  UInt_t GetEventSpecie() const { return 0;}
+  Int_t  SetPrimaryVertexTracks( const AliESDVertex *v, size_t allocatedVtxMemory );
+  Int_t  SetPrimaryVertexSPD( const AliESDVertex *v, size_t allocatedVtxMemory  );
+
+  AliFlatESDTrigger *SetTriggersStart();
+  void SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize );
+
+  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* GetFlatPrimaryVertexSPD() const ;
+  const AliFlatESDVertex* GetFlatPrimaryVertexTracks() const ;
+
+  Int_t GetNumberOfTriggerClasses() const { return fNTriggerClasses; }
+   
+  const AliFlatESDTrigger *GetTriggerClasses() const { return reinterpret_cast<const AliFlatESDTrigger*>( fContent + fTriggerPointer ); }
+  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
-  static ULong64_t EstimateSize(AliESDEvent*esd, Bool_t useESDFriends = kTRUE, Bool_t fillV0s=kTRUE);
-         ULong64_t GetSize()    {return fContent - reinterpret_cast<Byte_t*>(this) + fSize;}
-  
+
+  ULong64_t  GetSize()  const { return fContent + fContentSize - reinterpret_cast<const Byte_t*>(this); }
+
+  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&);
 
-  void FillPrimaryVertex(const AliESDVertex *v, Byte_t flag);
-  Int_t FillNextTrack( const AliESDtrack* esdTrack,  AliESDfriendTrack* friendTrack);
-  Int_t FillNextV0( const AliESDV0 *v0);
-  UInt_t CountBits(Byte_t field, UInt_t mask) const;
+  AliFlatESDEvent( const AliFlatESDEvent& );
+  AliFlatESDEvent& operator=( const AliFlatESDEvent& );
 
   // --------------------------------------------------------------------------------
-  // -- Fixed size member objects
-  //    -> Try to align in memory
 
-  Byte_t   fPrimaryVertexMask;            // Bit mask specfifying which primary vertices are present
-  Int_t    fNTracks;                   // Number of tracks in vector
-  ULong64_t fTracksPointer;            // position of the first track in fContent
-  Int_t fNV0s; // Number of v0's
-  ULong64_t fV0Pointer;            // position of the first V0 in fContent
+  // -- Fixed size member objects ( try to align in memory )
 
+  size_t     fContentSize;     // Size of fContent
+  Double32_t fMagneticField;   // Solenoid Magnetic Field in kG : for compatibility with AliMagF
+  UInt_t     fPeriodNumber;    // PeriodNumber
+  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, first 50 bits
+  ULong64_t  fTriggerMaskNext50;      // Trigger mask, next 50 bits
 
-  ULong64_t fSize;                      // Size of this object
+  UInt_t  fNTriggerClasses;  // N trigger classes
+  UInt_t  fNPrimaryVertices; // Number of primary vertices in array
+  UInt_t  fNTracks;          // Number of tracks in array
+  UInt_t  fNV0s;             // Number of v0's
+  
+  // Pointers to specific data in fContent
   
+  size_t fTriggerPointer;        // position of the first trigger description 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 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;
+  table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer );
+  t = reinterpret_cast< AliFlatESDTrack* >( fContent + fTracksPointer );
+  return 0;
+}
+
+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::SetV0sStart()
+{
+  fNV0s = 0;
+  fV0Pointer = fContentSize;
+  return reinterpret_cast< AliFlatESDV0* >( fContent + fContentSize );
+}
+   
+inline void AliFlatESDEvent::SetV0sEnd( Int_t nV0s, size_t v0sSize )
+{
+  fNV0s = nV0s;
+  fContentSize += v0sSize;
+}
+  
+inline AliFlatESDTrigger *AliFlatESDEvent::SetTriggersStart()
+{
+  fNTriggerClasses = 0;
+  fTriggerPointer = fContentSize;
+  return reinterpret_cast< AliFlatESDTrigger* >( fContent + fContentSize );
+}
+
+inline void AliFlatESDEvent::SetTriggersEnd( Int_t nTriggerClasses, size_t triggersSize )
+{
+  fNTriggerClasses = nTriggerClasses;
+  fContentSize += triggersSize;
+}
+
+inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexSPD() const 
+{
+  return (fPrimaryVertexMask & 0x1) ? reinterpret_cast<const AliFlatESDVertex*>(fContent + fPrimaryVertexSPDPointer) : NULL;
+} 
+
+inline const AliFlatESDVertex* AliFlatESDEvent::GetFlatPrimaryVertexTracks() const 
+{ 
+  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