]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/AliHLTOUT.h
Updates in D-meson PID class:
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTOUT.h
index 00eb8ee39d85c5d99a9db4beb51328eb1bfc5f67..e621b8de39a86298dcf6566be0a91bb8a3d25bc6 100644 (file)
@@ -1,17 +1,17 @@
 //-*- Mode: C++ -*-
-// @(#) $Id$
+// $Id$
 
 #ifndef ALIHLTOUT_H
 #define ALIHLTOUT_H
-//* This file is property of and copyright by the ALICE HLT Project        * 
+//* This file is property of and copyright by the                          * 
 //* ALICE Experiment at CERN, All rights reserved.                         *
 //* See cxx source for full Copyright notice                               *
 
-/** @file   AliHLTOUT.h
-    @author Matthias Richter
-    @date   
-    @brief  The control class for HLTOUT data.
-*/
+/// @file   AliHLTOUT.h
+/// @author Matthias Richter
+/// @date   
+/// @brief  The control class for HLTOUT data.
+///
 
 #include <vector>
 #include "AliHLTLogging.h"
@@ -21,9 +21,13 @@ class AliHLTOUTHandler;
 class AliHLTOUTHandlerDesc; // AliHLTModuleAgent.h
 class AliESDEvent;
 class AliHLTReconstructor;
+class AliRawReader;
+class TTree;
 
 #define AliHLTOUTInvalidIndex (~(AliHLTUInt32_t)0)
 
+using std::vector;
+
 typedef vector<AliHLTUInt32_t> AliHLTOUTIndexList;
 
 /**
@@ -35,13 +39,52 @@ typedef vector<AliHLTUInt32_t> AliHLTOUTIndexList;
  * abstracts access to the complete HLTOUT data.
  * 
  */
-class AliHLTOUT : public AliHLTLogging {
+class AliHLTOUT {
  public:
   /** standard constructor */
   AliHLTOUT();
   /** standard destructor */
   virtual ~AliHLTOUT();
 
+  typedef const AliHLTUInt8_t* AliConstExternalBuffer;
+
+  /**
+   * Create an AliHLTOUTRawReader instance.
+   * Helper function to transparently access classes from the
+   * libHLTrec library.
+   */
+  static AliHLTOUT* New(AliRawReader* pRawReader);
+
+  /**
+   * Create an AliHLTOUTDigitReader instance
+   * Helper function to transparently access classes from the
+   * libHLTrec library.
+   */
+  static AliHLTOUT* New(TTree* pDigitTree, int event=-1);
+
+  /**
+   * Create an AliHLTOUTDigitReader instance
+   * Helper function to transparently access classes from the
+   * libHLTrec library.
+   */
+  static AliHLTOUT* New(const char* filename, int event=-1);
+
+  /**
+   * Get the global instance.
+   * The global instance is set temporarily by the AliHLTOUTGlobalInstanceGuard
+   * mainly for the sake of data input to an analysis chain. The
+   * AliHLTOUTPublisherComponent objects can access the global instance.
+   */
+  static AliHLTOUT* GetGlobalInstance() {return fgGlobalInstance;}
+
+  /**
+   * Delete an instance of the HLTOUT.
+   * Helper function to transparently access classes from the
+   * libHLTrec library. Before deleting, the availability of the
+   * library is checked.
+   */
+  static void Delete(AliHLTOUT* pInstance);
+
   /**
    * Locking guard for the AliHLTOUT object.
    * If the object is locked, the selection of data blocks can not be changed.
@@ -67,6 +110,35 @@ class AliHLTOUT : public AliHLTLogging {
     AliHLTOUT* fpInstance; //!transient
   };
 
+  /**
+   * Guard for handling of global AliHLTOUT instance.
+   * The global HLTOUT instance can be set for certain steps of the
+   * processing. The initial objective is to support input to the
+   * AliHLTOUTPublisherComponent running in a kChain handler.
+   *
+   * The Guard restores the original instance when closed.
+   */
+  class AliHLTOUTGlobalInstanceGuard {
+  public:
+    /** constructor */
+    AliHLTOUTGlobalInstanceGuard(AliHLTOUT* pInstance) : fpLastInstance(AliHLTOUT::fgGlobalInstance)
+    {AliHLTOUT::fgGlobalInstance=pInstance;}
+    /** destructor */
+    ~AliHLTOUTGlobalInstanceGuard()
+    {AliHLTOUT::fgGlobalInstance=fpLastInstance;}
+
+  private:
+    /** standard constructor prohibited */
+    AliHLTOUTGlobalInstanceGuard();
+    /** copy constructor prohibited */
+    AliHLTOUTGlobalInstanceGuard(const AliHLTOUTGlobalInstanceGuard&);
+    /** assignment operator prohibited */
+    AliHLTOUTGlobalInstanceGuard& operator=(const AliHLTOUTGlobalInstanceGuard&);
+
+    /** the AliHLTOUT instance the guard is locking */
+    AliHLTOUT* fpLastInstance; //!transient
+  };
+
   /**
    * The HLT OUT Event Header.
    * Defined between HLT and DAQ.
@@ -109,28 +181,67 @@ class AliHLTOUT : public AliHLTLogging {
     kCDHFlagsHLTPayload=7 //! see above
   };
 
+  class AliHLTOUTHandlerListEntry;
   /**
    * Block descriptor.
    */
   class AliHLTOUTBlockDescriptor {
   public:
-    AliHLTOUTBlockDescriptor(AliHLTComponentDataType dt, AliHLTUInt32_t spec, AliHLTUInt32_t index)
-      : fDataType(dt), fSpecification(spec), fIndex(index) {};
+    AliHLTOUTBlockDescriptor(AliHLTComponentDataType dt, AliHLTUInt32_t spec, AliHLTUInt32_t index, AliHLTOUT* pCollection)
+      : fDataType(dt), fSpecification(spec), fIndex(index), fSelected(false), fProcessed(false), fpCollection(pCollection) {};
+    AliHLTOUTBlockDescriptor(const AliHLTOUTBlockDescriptor& src)
+      : fDataType(src.fDataType), fSpecification(src.fSpecification), fIndex(src.fIndex), fSelected(false), fProcessed(false), fpCollection(src.fpCollection) {}
+    AliHLTOUTBlockDescriptor& operator=(const AliHLTOUTBlockDescriptor& src) {
+      if (this==&src) return *this;
+      fDataType=src.fDataType; fSpecification=src.fSpecification; fIndex=src.fIndex; fSelected=false; fProcessed=false; fpCollection=src.fpCollection; return *this;
+    }
     ~AliHLTOUTBlockDescriptor() {}
 
     operator AliHLTComponentDataType() const {return fDataType;}
     operator AliHLTUInt32_t() const {return fSpecification;}
     int operator==(AliHLTComponentDataType dt) const {return dt==fDataType;}
     int operator==(AliHLTUInt32_t spec) const {return spec==fSpecification;}
+    int operator==(AliHLTOUT* collection) const {return collection==fpCollection;}
 
     AliHLTUInt32_t GetIndex() const {return fIndex;}
-  private:
+    AliHLTOUT* GetCollection() const {return fpCollection;}
+
+    bool IsSelected() const {return fSelected;}
+    void Select(bool selected=true) {fSelected=selected;}
+    bool IsProcessed() const {return fProcessed;}
+    void MarkProcessed() {fProcessed=true;}
+
+    /**
+     * Get the data buffer
+     * @param [out] pBuffer buffer of the selected data block
+     * @param [out] size    size of the selected data block
+     */
+    int GetDataBuffer(const AliHLTUInt8_t* &pBuffer, AliHLTUInt32_t& size) {
+      if (fpCollection) return fpCollection->GetDataBuffer(GetIndex(), pBuffer, size);
+      return -ENODEV;
+    }
+
+    /**
+     * Get the handler descriptor
+     */
+    const AliHLTOUTHandlerListEntry& GetHandlerDesc();
+
+    /// print info
+    void Print(const char* option="") const;
+
+  private:      
     /** data type of the block */
     AliHLTComponentDataType fDataType; //!transient
     /** data specification of the block */
     AliHLTUInt32_t          fSpecification; //!transient
     /** index in the data stream */
     AliHLTUInt32_t          fIndex; //!transient
+    /** selection flag */
+    bool                    fSelected; //!transient
+    /** processed flag */
+    bool                    fProcessed; //!transient
+    /** the collection */
+    AliHLTOUT*              fpCollection; //!transient
   };
 
   class AliHLTOUTHandlerListEntry {
@@ -148,7 +259,7 @@ class AliHLTOUT : public AliHLTLogging {
 
     ~AliHLTOUTHandlerListEntry();
 
-    static const AliHLTOUTHandlerListEntry fgkVoidHandlerListEntry; //! initializer
+    static const AliHLTOUTHandlerListEntry& VoidHandlerListEntry() {return fgkVoidHandlerListEntry;}
 
     operator AliHLTOUTHandler*() const {return fpHandler;}
 
@@ -168,6 +279,13 @@ class AliHLTOUT : public AliHLTLogging {
 
     bool operator==(const AliHLTModuleAgent::AliHLTOUTHandlerType handlerType) const;
 
+    /**
+     * Compare the handler descriptor of this list entry with another
+     * descriptor.
+     * @return true if both handler and agent match
+     */
+    bool operator==(const AliHLTModuleAgent::AliHLTOUTHandlerDesc desc) const; 
+
     AliHLTUInt32_t operator[](int i) const;
 
     /**
@@ -179,20 +297,35 @@ class AliHLTOUT : public AliHLTLogging {
     void AddIndex(AliHLTUInt32_t index);
 
     /**
-     * Add all indexes of the descriptor.
+     * Add all indices of the descriptor.
      */
-    void AddIndex(AliHLTOUTHandlerListEntry &desc);
+    void AddIndex(const AliHLTOUTHandlerListEntry &desc);
 
     /**
      * Check if an index is served by this descriptor.
      * @return true if the index is in the table
      */
-    bool HasIndex(AliHLTUInt32_t index);
+    bool HasIndex(AliHLTUInt32_t index) const;
+
+    /**
+     * Invalidate all block indices
+     */
+    void InvalidateBlocks() {fBlocks.clear();}
+
+    /**
+     * Check whether the entry has valid blocks.
+     */
+    bool IsEmpty() {return fBlocks.size()==0;}
+
+    /// print info
+    void Print(const char* option="") const;
 
   private:
     /** standard constructor prohibited */
     AliHLTOUTHandlerListEntry();
 
+    static const AliHLTOUTHandlerListEntry fgkVoidHandlerListEntry; //! initializer
+
     /** pointer to the handler */
     AliHLTOUTHandler* fpHandler; //! transient
 
@@ -202,12 +335,41 @@ class AliHLTOUT : public AliHLTLogging {
     /** pointer to module agent */
     AliHLTModuleAgent* fpAgent; //! transient
 
-    /** list of block indexes */
+    /** list of block indices */
     AliHLTOUTIndexList fBlocks; //!transient
   };
 
   typedef vector<AliHLTOUTHandlerListEntry> AliHLTOUTHandlerListEntryVector;
   typedef vector<AliHLTOUTBlockDescriptor>  AliHLTOUTBlockDescriptorVector;
+  typedef vector<AliHLTOUT*>                AliHLTOUTPVector;
+
+  /**
+   * Selection guard for the AliHLTOUT object.
+   * If the object is locked, the selection of data blocks can not be changed.
+   */
+  class AliHLTOUTSelectionGuard {
+  public:
+    /** constructor */
+    AliHLTOUTSelectionGuard(AliHLTOUT* pInstance) : fpInstance(pInstance)
+    {if (fpInstance) fpInstance->SelectDataBlock();}
+    /** constructor */
+    AliHLTOUTSelectionGuard(AliHLTOUT* pInstance, const AliHLTOUTHandlerListEntry* pHandlerDesc) : fpInstance(pInstance)
+    {if (fpInstance) fpInstance->SelectDataBlocks(pHandlerDesc);}
+    /** destructor */
+    ~AliHLTOUTSelectionGuard()
+    {if (fpInstance) fpInstance->DisableBlockSelection();}
+
+  private:
+    /** standard constructor prohibited */
+    AliHLTOUTSelectionGuard();
+    /** copy constructor prohibited */
+    AliHLTOUTSelectionGuard(const AliHLTOUTSelectionGuard&);
+    /** assignment operator prohibited */
+    AliHLTOUTSelectionGuard& operator=(const AliHLTOUTSelectionGuard&);
+
+    /** the AliHLTOUT instance the guard is locking */
+    AliHLTOUT* fpInstance; //!transient
+  };
 
   /**
    * Init for processing.
@@ -217,6 +379,20 @@ class AliHLTOUT : public AliHLTLogging {
    */
   int Init();
 
+  /**
+   * Reset and clear all data block descriptors.
+   * @note Since sub-collections are only referred via the block
+   * descriptors, all information on sub-collections is also lost.
+   * Child classes should implement ResetInput in order to cleanup
+   * the input devices.
+   */
+  int Reset();
+
+  /**
+   * Get the current event id
+   */
+  AliHLTUInt64_t EventId() const {return fCurrentEventId;}
+
   /**
    * Get number of data blocks in the HLTOUT data
    */
@@ -228,21 +404,23 @@ class AliHLTOUT : public AliHLTLogging {
    * kAliHLTVoidDataSpec in order to be ignored and just match any data block.
    *
    * The search criteria can be combined with a handler type (e.g. kRawReader)
-   * @param dt    [in]  data type to match                                <br>
-   * @param spec  [in]  data specification to match                       <br>
-   * @param handlerType [in]  type of the handler
-   * @return identifier >0 if success, 0 if no block found                <br>
+   * @param [in] dt     data type to match                                <br>
+   * @param [in] spec   data specification to match                       <br>
+   * @param [in] handlerType  type of the handler
+   * @param [in] skipProcessed skip all block marked processed
+   * @return block index: >= 0 if success, -ENOENT if no block found      <br>
    *         neg. error code if failed                                    <br>
    *                        -EPERM if access denied (object locked)
    */
   int SelectFirstDataBlock(AliHLTComponentDataType dt=kAliHLTAnyDataType,
                           AliHLTUInt32_t spec=kAliHLTVoidDataSpec,
-                          AliHLTModuleAgent::AliHLTOUTHandlerType handlerType=AliHLTModuleAgent::kUnknownOutput);
+                          AliHLTModuleAgent::AliHLTOUTHandlerType handlerType=AliHLTModuleAgent::kUnknownOutput,
+                          bool skipProcessed=true);
 
   /**
    * Select the next data block of data type and specification of the previous
    * call to @ref SelectFirstDataBlock.
-   * @return identifier >0 if success, 0 if no block found                <br>
+   * @return block index: >= 0 if success, -ENOENT if no block found      <br>
    *         neg. error code if failed                                    <br>
    *                        -EPERM if access denied (object locked)
    */
@@ -250,8 +428,8 @@ class AliHLTOUT : public AliHLTLogging {
 
   /**
    * Get properties of the selected data block.
-   * @param dt    [out] data type of the selected block
-   * @param spec  [out] data specification of the selected block
+   * @param [out] dt    data type of the selected block
+   * @param [out] spec  data specification of the selected block
    */
   int GetDataBlockDescription(AliHLTComponentDataType& dt, AliHLTUInt32_t& spec);
 
@@ -274,17 +452,84 @@ class AliHLTOUT : public AliHLTLogging {
 
   /**
    * Get buffer of the selected data block.
-   * @param pBuffer [out] buffer of the selected data block
-   * @param size    [out] size of the selected data block
+   * Buffer has to be released using ReleaseDataBuffer
+   * @param [out] desc  block data descriptor
+   */
+  int GetDataBuffer(AliHLTComponentBlockData& desc);
+
+  /**
+   * Get buffer of the selected data block.
+   * Buffer has to be released using ReleaseDataBuffer
+   * @param [out] pBuffer buffer of the selected data block
+   * @param [out] size    size of the selected data block
    */
   int GetDataBuffer(const AliHLTUInt8_t* &pBuffer, AliHLTUInt32_t& size);
 
   /**
    * Release buffer after use.
-   * @param pBuffer [in]  buffer of the selected data block
+   * @param [in] pBuffer  buffer of the selected data block
    */
   int ReleaseDataBuffer(const AliHLTUInt8_t* pBuffer);
 
+  /**
+   * Get a TObject from the data buffer
+   * @return TObject pointer if data block is a streamed object
+   */
+  TObject* GetDataObject();
+
+  /**
+   * Release data object
+   */
+  int ReleaseDataObject(TObject* pObject);
+
+  /**
+   * Add the current data block to the selection.
+   * Note: enables also the block selection
+   */
+  int SelectDataBlock();
+
+  /**
+   * Add the all data blocks of a certain handler to the selection.
+   * Note: enables also the block selection
+   */
+  int SelectDataBlocks(const AliHLTOUTHandlerListEntry* pHandlerDesc);
+
+  /**
+   * Enable the selection of data blocks.
+   */
+  int EnableBlockSelection();
+
+  /**
+   * Disable the selection of data blocks.
+   */
+  int DisableBlockSelection();
+
+  /**
+   * Reset the data block selection.
+   * Resets the selection list, none of the blocks is selected.
+   */
+  int ResetBlockSelection();
+
+  /**
+   * Mark the current block as processed.
+   */
+  int MarkDataBlockProcessed();
+
+  /**
+   * Mark all data blocks of a certain handler processed.
+   */
+  int MarkDataBlocksProcessed(const AliHLTOUTHandlerListEntry* pHandlerDesc);
+
+  /**
+   * Add a sub collection to the HLTOUT.
+   */
+  int AddSubCollection(AliHLTOUT* pCollection);
+
+  /**
+   * Release a previously added sub collection.
+   */
+  int ReleaseSubCollection(AliHLTOUT* pCollection);
+
   /**
    * Get module agent for the selected data block.
    */
@@ -305,10 +550,10 @@ class AliHLTOUT : public AliHLTLogging {
    * The function needs AliRoot and might not be implemented by all AliHLTOUT
    * implementations.
    * a data block of this specification.
-   * @param pBuffer  [in] the data buffer
-   * @param size     [in] data buffer size
-   * @param dt       [in] data type of the block
-   * @param tgtesd   [out] optional target
+   * @param [in]  pBuffer  the data buffer
+   * @param [in]  size     data buffer size
+   * @param [in]  dt       data type of the block
+   * @param [out] tgtesd   optional target
    */
   virtual int WriteESD(const AliHLTUInt8_t* pBuffer, AliHLTUInt32_t size, AliHLTComponentDataType dt, AliESDEvent* tgtesd=NULL) const;
 
@@ -361,6 +606,27 @@ class AliHLTOUT : public AliHLTLogging {
    */
   static int InsertHandler(AliHLTOUTHandlerListEntryVector& list, const AliHLTOUTHandlerListEntry &entry);
   
+  /**
+   * Insert all handlers of the specified type to the list.
+   */
+  int FillHandlerList(AliHLTOUTHandlerListEntryVector& list, AliHLTModuleAgent::AliHLTOUTHandlerType handlerType);
+
+  /**
+   * Remove empty items which have a duplicate in the list.
+   */
+  static int RemoveEmptyDuplicateHandlers(AliHLTOUTHandlerListEntryVector& list);
+
+  /**
+   * Find an entry of a certain description in the list.
+   * @return index of the entry if found, -ENOENT if not found
+   */
+  static int FindHandler(AliHLTOUTHandlerListEntryVector& list, const AliHLTModuleAgent::AliHLTOUTHandlerDesc desc);
+
+  /**
+   * Invalidate all blocks of the handlers in the list
+   */
+  static int InvalidateBlocks(AliHLTOUTHandlerListEntryVector& list);
+
  protected:
   /**
    * Add a block descriptor.
@@ -371,16 +637,24 @@ class AliHLTOUT : public AliHLTLogging {
    */
   int AddBlockDescriptor(const AliHLTOUTBlockDescriptor desc);
 
+  /**
+   * Set the event id, only for child classes
+   */
+  void SetEventId(AliHLTUInt64_t id);
+
   /**
    * Print output or suppress.
    */
-  bool BeVerbose() {return fbVerbose;}
+  bool BeVerbose() const {return fbVerbose;}
 
   /**
    * Switch output.
    */
   void SwitchVerbosity(bool verbose) {fbVerbose=verbose;}
 
+  /// print info
+  void Print(const char* option="") const;
+
  private:
   /** copy constructor prohibited */
   AliHLTOUT(const AliHLTOUT&);
@@ -391,7 +665,7 @@ class AliHLTOUT : public AliHLTLogging {
    * Internal status flags
    */
   enum {
-    /** the HLTOUT object is locked with the current data block */
+    /** the HLTOUT object is locked with the current data block selection */
     kLocked = 0x1,
     /** childs can add block descriptors */
     kCollecting = 0x2,
@@ -402,7 +676,13 @@ class AliHLTOUT : public AliHLTLogging {
     /** user of the data block has checked the alignment */
     kAlignmentChecked = 0x10,
     /** warning on alignment missmatch has been printed */
-    kAlignmentWarning = 0x20
+    kAlignmentWarning = 0x20,
+    /** enable block selection list */
+    kBlockSelection = 0x40,
+    /** skip processed data blocks */
+    kSkipProcessed = 0x80,
+    /** marked as sub collection */
+    kIsSubCollection = 0x100
   };
 
   /**
@@ -418,11 +698,16 @@ class AliHLTOUT : public AliHLTLogging {
    */
   int InitHandlers();
 
+  /**
+   * Cleanup and reset the data input.
+   */
+  virtual int ResetInput();
+
   /**
    * Get the data buffer
-   * @param index   [in]  index of the block
-   * @param pBuffer [out] buffer of the selected data block
-   * @param size    [out] size of the selected data block
+   * @param [in]  index   index of the block
+   * @param [out] pBuffer buffer of the selected data block
+   * @param [out] size    size of the selected data block
    */
   virtual int GetDataBuffer(AliHLTUInt32_t index, const AliHLTUInt8_t* &pBuffer, 
                            AliHLTUInt32_t& size)=0;
@@ -441,7 +726,11 @@ class AliHLTOUT : public AliHLTLogging {
    * Select the data block of data type and specification of the previous
    * call to @ref SelectFirstDataBlock. Core function of @ref SelectFirstDataBlock
    * and @ref SelectNextDataBlock, starts to find a block at the current list
-   * position. 
+   * position.
+   * 
+   * The data block is searched from the conditions of fSearchDataType,
+   * fSearchSpecification, fSearchHandlerType and the selection list.
+   *
    * @return identifier >=0 if success, neg. error code if failed         <br>
    *                        -ENOENT if no block found                     <br>
    *                        -EPERM if access denied (object locked)
@@ -474,6 +763,27 @@ class AliHLTOUT : public AliHLTLogging {
    */
   const AliHLTOUTHandlerListEntry& FindHandlerDesc(AliHLTUInt32_t blockIndex);
 
+  /**
+   * Set the RawReader as parameter.
+   * The function is for internal use only in conjunction with the
+   * New() functions.
+   */
+  virtual void SetParam(AliRawReader* pRawReader);
+
+  /**
+   * Set the RunLoader as parameter
+   * The function is for internal use only in conjunction with the
+   * New() functions.
+   */
+  virtual void SetParam(TTree* pDigitTree, int event=-1);
+
+  /**
+   * Set name of the digit file as parameter
+   * The function is for internal use only in conjunction with the
+   * New() functions.
+   */
+  virtual void SetParam(const char* filename, int event=-1);
+
   /** data type for the current block search, set from @ref SelectFirstDataBlock */
   AliHLTComponentDataType fSearchDataType; //!transient
 
@@ -490,10 +800,10 @@ class AliHLTOUT : public AliHLTLogging {
   AliHLTOUTBlockDescriptorVector fBlockDescList; //!transient
 
   /** current position in the list */
-  AliHLTOUTBlockDescriptorVector::iterator fCurrent; //!transient
+  unsigned int fCurrent; //!transient
 
   /** data buffer under processing */
-  const AliHLTUInt8_t* fpBuffer; //!transient
+  AliConstExternalBuffer fpBuffer; //!transient
 
   /** list of AliHLTOUTHandlers */
   AliHLTOUTHandlerListEntryVector fDataHandlers; // !transient
@@ -501,6 +811,20 @@ class AliHLTOUT : public AliHLTLogging {
   /** verbose or silent output */
   bool fbVerbose; //!transient
 
-  ClassDef(AliHLTOUT, 2)
+  /** gobal instance set for certain steps of the analysis */
+  static AliHLTOUT* fgGlobalInstance; //! transient
+
+  /** logging methods */
+  AliHLTLogging fLog; //! transient
+
+  /** current buffer converted to a TObject */
+  TObject* fpDataObject; //!
+  AliConstExternalBuffer fpObjectBuffer; //!
+  AliHLTUInt32_t fObjectBufferSize; //!
+
+  /** current event id */
+  AliHLTUInt64_t fCurrentEventId; //!
+
+  ClassDef(AliHLTOUT, 6)
 };
 #endif