allow merging of non-std objects which are not a collection
[u/mrichter/AliRoot.git] / HLT / rec / AliHLTEsdManagerImplementation.h
index 830d9680420f17756bc11024fad489b75284b139..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:
@@ -122,6 +144,13 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
      */
     const char* GetFileName() const;
 
+    /**
+     * Get the object name prefix generated from the data origin
+     * The prefix is added to the names of the ESD objects when copied to the
+     * master ESD.
+     */
+    const char* GetPrefix();
+
     bool operator==(AliHLTComponentDataType dt) const;
 
   private:
@@ -151,6 +180,8 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
     TTree* fpTree; //!transient
     /** the esd to fill into the tree */
     AliESDEvent* fpEsd; //!transient
+    /** Prefix for generated ESD objects in the master ESD */
+    TString fPrefix; //!transient
   };
 
   typedef vector<AliHLTEsdListEntry*> AliHLTEsdPList;
@@ -165,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