activating individual HLT simulations from digits and raw data
[u/mrichter/AliRoot.git] / HLT / rec / AliHLTEsdManagerImplementation.h
index 830d968..77d57b8 100644 (file)
@@ -7,17 +7,17 @@
 //* ALICE Experiment at CERN, All rights reserved.                         *
 //* See cxx source for full Copyright notice                               *
 
-/** @file   AliHLTEsdManagerImplementation.h
-    @author Matthias Richter
-    @date   
-    @brief  Implementation of the AliHLTEsdManager
-*/
+/// @file   AliHLTEsdManagerImplementation.h
+/// @author Matthias Richter
+/// @date   
+/// @brief  Implementation of the AliHLTEsdManager
+///         This is an implementation of the abstract interface AliHLTEsdManager
 
 #include "AliHLTEsdManager.h"
+#include "AliESDEvent.h"
 #include "TString.h"
 #include <vector>
 
-class AliESDEvent;
 class TTree;
 class TFile;
 
@@ -40,6 +40,12 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
   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.
    * If no target object is specified, the ESD is written to a file AliHLTdetESDs.root,
@@ -56,6 +62,17 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
               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
    * does not match the specified one.
@@ -81,6 +98,19 @@ 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);
+  };
+
+  int CheckClassConditions() const;
+
+  AliESDEvent* CreateEsdEvent(bool bCreateStdContent=false) const;
+
+  int AddObject(AliESDEvent* pESD, const TObject* pObject, const char* branchname) const;
+
+  int ResetEsdEvent(AliESDEvent* pESD) const;
+
  protected:
 
  private:
@@ -113,15 +143,22 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
     void SetDirectory(const char* directory);
 
     /**
-     * Delete the ESD file.
+     * Set the tree name
      */
-    void Delete();
+    void SetTreeName(const char* treename) {fTreeName=treename;}
 
     /**
      * Get name of the ESD file.
      */
     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:
@@ -130,15 +167,6 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
     /** assignment operator prohibited */
     AliHLTEsdListEntry& operator=(const AliHLTEsdListEntry& src);
 
-    /**
-     * Write ESD to temporary file.
-     * The ESD is embedded into a tree and saved to a temporary file.
-     * The file name is retrieved by TSystem::GetTempFileName and returned
-     * on success.
-     * @return file name, empty on failure
-     */
-    TString WriteTempFile(AliESDEvent* pESD) const;
-
     /** root file name */
     TString fName; //!transient
     /** target directory */
@@ -151,6 +179,10 @@ 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
+    /** name of the tree to be created */
+    TString fTreeName; //!transient
   };
 
   typedef vector<AliHLTEsdListEntry*> AliHLTEsdPList;
@@ -165,8 +197,12 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
 
   /** target directory */
   TString fDirectory; //!transient
+  /** target directory */
+  TString fTreeName; //!transient
+  /** write local files */
+  bool fWriteLocal; //!transient
 
-  ClassDef(AliHLTEsdManagerImplementation, 1)
+  ClassDef(AliHLTEsdManagerImplementation, 3)
 };
 
 #endif