allow merging of non-std objects which are not a collection
[u/mrichter/AliRoot.git] / HLT / rec / AliHLTEsdManagerImplementation.h
index a8c553048de8857eb9626fe3bb860fd64602a08a..a66d73388705371e046c2d6ae03525e99264e768 100644 (file)
 */
 
 #include "AliHLTEsdManager.h"
+#include "AliESDEvent.h"
 #include "TString.h"
 #include <vector>
 
-class AliESDEvent;
 class TTree;
 class TFile;
 
@@ -39,6 +39,12 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
   /** destructor */
   virtual ~AliHLTEsdManagerImplementation();
 
+  /**
+   * Inherited from base class, see AliHLTEsdManager::SetOption() for
+   * documentation.
+   */
+  virtual int SetOption(const char* option);
+
   /**
    * Convert data buffer to ESD.
    * The buffer is supposed to describe a streamed AliESDEvent object.
@@ -55,6 +61,17 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
   int WriteESD(const AliHLTUInt8_t* pBuffer, AliHLTUInt32_t size, AliHLTComponentDataType dt,
               AliESDEvent* tgtesd=NULL, int eventno=-1);
 
+  /**
+   * Merge content of source ESD into the target ESD.
+   * Merging is done on the level of objects in the ESD and for the
+   * moment it's only implemented for the TClonesArrays. In that case it's
+   * easy to detect whether the object is empty or not.
+   *
+   * \b Note: The function can not match entries of the same type, like e.g.
+   * tracks from the 'Tracks' member.
+   */
+  int Merge(AliESDEvent* pTgt, AliESDEvent* pSrc) const;
+
   /**
    * Align all ESD to the same number of events.
    * The function adds empty events to all ESD files if their event number
@@ -81,6 +98,11 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
    */
   static TTree* EmbedIntoTree(AliESDEvent* pESD, const char* name="esdTree", const char* title="Tree with HLT ESD objects");
 
+  class AliHLTESDEventHelper : public AliESDEvent {
+  public:
+    static bool IsStdContent(const char* key);
+  };
+
  protected:
 
  private:
@@ -107,13 +129,6 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
      */
     int WriteESD(AliESDEvent* pESD, int eventno=-1);
 
-    /**
-     * Copy non-empty objects of the source ESD to the target ESD.
-     * The first implementation just copies the entries of type TClonesArray which
-     * are not empty.
-     */
-    int CopyNonEmptyObjects(AliESDEvent* pTgt, AliESDEvent* pSrc);
-
     /**
      * Set the target directory for the ESD file.
      */
@@ -181,8 +196,10 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
 
   /** target directory */
   TString fDirectory; //!transient
+  /** write local files */
+  bool fWriteLocal; //!transient
 
-  ClassDef(AliHLTEsdManagerImplementation, 1)
+  ClassDef(AliHLTEsdManagerImplementation, 2)
 };
 
 #endif