bugfix: the EsdCollector was not working after fix r33443 since it relies on the...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 Jul 2009 10:39:55 +0000 (10:39 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 Jul 2009 10:39:55 +0000 (10:39 +0000)
local ESD files by the HLTEsdManager. This has been made an optional feature, used by the
collector

HLT/BASE/AliHLTEsdManager.h
HLT/BASE/util/AliHLTEsdCollectorComponent.cxx
HLT/BASE/util/AliHLTEsdCollectorComponent.h
HLT/rec/AliHLTEsdManagerImplementation.cxx
HLT/rec/AliHLTEsdManagerImplementation.h

index 9ab47f03cc58aad9bd6e9c9a1b0d16745a18ec5e..0d7b7c75a7aa16e3c8ecf2a167c1bde3132d7adc 100644 (file)
@@ -52,6 +52,17 @@ class AliHLTEsdManager : public AliHLTLogging {
   /** delete an instance of the manager */
   static void Delete(AliHLTEsdManager* instance);
 
+  /**
+   * Set the options for the ESD merging and writing
+   * Takes a string of blank separated options.
+   * \li -writelocal   use local file writing in the specified diectory
+   *                   The file name is derived from the data origin
+   * \li -directory=<> Set the directory path
+   *                   This makes the SetDirectory method obsolete
+   * @return neg error code if failed
+   */
+  virtual int SetOption(const char* option)=0;
+
   /**
    * Convert data buffer to ESD.
    * The buffer is supposed to describe a streamed AliESDEvent object.
index 183d908b499753fcd6e16bc4adc20eb11a72c751..50117286cc666fa2563db3462dc411f5b81a1f30 100644 (file)
@@ -60,7 +60,12 @@ int AliHLTEsdCollectorComponent::InitWriter()
   if (GetExtension().IsNull()) SetExtension("root");
 
   if ((fpManager=AliHLTEsdManager::New())) {
-    fpManager->SetDirectory(GetDirectory().Data());
+    TString option="-writelocal";
+    if (!GetDirectory().IsNull()) {
+      option+=" -directory=";
+      option+=GetDirectory();
+    }
+    iResult=fpManager->SetOption(option.Data());
   } else {
     HLTError("can not find AliHLTEsdManager class descriptor");
     iResult=-ENODEV;
index b6688643b9b6a3b005769c32e8d1cf3482949a44..6a281ba05faa71e6cb9cec682e2d3a7b54b8d036 100644 (file)
@@ -25,6 +25,9 @@ class AliHLTEsdManager;
  * multiple events into one file. It does not implement merging of ESDs
  * from one event but several origins.
  *
+ * The file name of the ESD file is derived from the origin of the ESD data
+ * block.
+ *
  * <h2>General properties:</h2>
  *
  * Component ID: \b EsdCollector                                      <br>
@@ -37,7 +40,9 @@ class AliHLTEsdManager;
  *
  * <h2>Optional arguments:</h2>
  * The only AliHLTFileWriter argument of relevance is the \em -directory
- * argument. See AliHLTFileWriter for full list of arguments.
+ * argument. See AliHLTFileWriter for full list of arguments. Note: The
+ * file name of the ESD file is derieved from the origin of the ESD
+ * data block.
  *
  * <h2>Configuration:</h2>
  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
index ee2c7fb4098a4bc7a636b270e41124ccc5a9dbb7..1b256f7a43721255d28768d7fb595845e6156764 100644 (file)
@@ -42,8 +42,9 @@ ClassImp(AliHLTEsdManagerImplementation)
 
 AliHLTEsdManagerImplementation::AliHLTEsdManagerImplementation()
   :
-  fESDs(),
-  fDirectory()
+  fESDs()
+  , fDirectory()
+  , fWriteLocal(false)
 {
   // see header file for class documentation
   // or
@@ -63,6 +64,35 @@ AliHLTEsdManagerImplementation::~AliHLTEsdManagerImplementation()
   }
 }
 
+int AliHLTEsdManagerImplementation::SetOption(const char* option)
+{
+  // see header file for class documentation
+  int iResult=0;
+  TString strOptions=option;
+  TObjArray* pTokens=strOptions.Tokenize(" ");
+  if (pTokens) {
+    if (pTokens->GetEntriesFast()>0) {
+      for (int n=0; n<pTokens->GetEntriesFast(); n++) {
+       TString data=((TObjString*)pTokens->At(n))->GetString();
+       if (data.IsNull()) continue;
+
+       if (data.CompareTo("-writelocal")==0) {
+         fWriteLocal=true;
+       } else if (data.Contains("-directory=")) {
+         data.ReplaceAll("-directory=", "");
+         SetDirectory(data.Data());
+       } else {
+         HLTError("unknown argument %s", data.Data());
+         iResult=-EINVAL;
+         break;
+       }
+      }
+    }
+    delete pTokens;
+  }
+  return iResult;
+}
+
 AliHLTEsdManagerImplementation::AliHLTEsdListEntry* AliHLTEsdManagerImplementation::Find(AliHLTComponentDataType dt) const
 {
   // see header file for class documentation
@@ -130,7 +160,15 @@ int AliHLTEsdManagerImplementation::WriteESD(const AliHLTUInt8_t* pBuffer, AliHL
            warningPrinted=true;
 #endif //HAVE_NOT_ESD_COPY
          }
-         entry->WriteESD(pESD, eventno);
+
+         // Matthias 2009-06-06: writing of individual ESD files for the different origins was a
+         // first attempt when functionality was missing in the AliRoot framework and remained as
+         // debugging feature. ESD merging is now implemented and data written to the hltEsd, so
+         // the feature is now disabled by default because it causes increasing memory consumption.
+         // Presumably not because of a memory leak but the way the internal TTree is used and kept
+         // in memory.
+         // Writing of local files can be optionally switched on as e.g. by the EsdCollector component.
+         if (fWriteLocal) entry->WriteESD(pESD, eventno);
        } else {
          HLTError("internal mismatch, can not create list entry");
          iResult=-ENOMEM;
@@ -250,13 +288,6 @@ int AliHLTEsdManagerImplementation::AliHLTEsdListEntry::WriteESD(AliESDEvent* pS
   // see header file for class documentation
   int iResult=0;
 
-  // Matthias 2009-06-06: writing of individual ESD files for the different origins was a
-  // first attempt when functionality was missing in the AliRoot framework and remained as
-  // debugging feature. ESD merging is now implemented and data written to the hltEsd, so
-  // the feature is now disabled because it causes increasing memory consumption. Presumably
-  // not because of a memory leak but the way the internal TTree is used and kept in memory. 
-  return 0;
-
 #ifndef HAVE_NOT_ESD_COPY
   if (fName.IsNull()) {
     // this is the first event, create the file name
index a6a1d3c6cfabe63a7685c8f8021892b7883bf987..1a79ff621fc2970bbf66c6cee2eff8be44be404d 100644 (file)
@@ -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.
@@ -185,8 +191,10 @@ class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
 
   /** target directory */
   TString fDirectory; //!transient
+  /** write local files */
+  bool fWriteLocal; //!transient
 
-  ClassDef(AliHLTEsdManagerImplementation, 1)
+  ClassDef(AliHLTEsdManagerImplementation, 2)
 };
 
 #endif