New tags supported by AliAnalysisTaskCfg: \n #Module.OutputFile file.root matching...
authoragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Dec 2011 16:01:50 +0000 (16:01 +0000)
committeragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Dec 2011 16:01:50 +0000 (16:01 +0000)
ANALYSIS/AliAnalysisAlien.cxx
ANALYSIS/AliAnalysisTaskCfg.cxx
ANALYSIS/AliAnalysisTaskCfg.h

index 932c4c9..c23e50a 100644 (file)
@@ -544,6 +544,11 @@ Bool_t AliAnalysisAlien::LoadModule(AliAnalysisTaskCfg *mod)
 {
 // Load a given module.
    if (mod->IsLoaded()) return kTRUE;
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+   if (!mgr) {
+      Error("LoadModule", "No analysis manager created yet. Use CreateAnalysisManager first.");
+      return kFALSE;
+   }   
    Int_t ndeps = mod->GetNdeps();
    TString depname;
    for (Int_t j=0; j<ndeps; j++) {
@@ -565,6 +570,15 @@ Bool_t AliAnalysisAlien::LoadModule(AliAnalysisTaskCfg *mod)
       Error("LoadModule", "Cannot load all libraries for module %s", mod->GetName());
       return kFALSE;
    }
+   // Check if a custom file name was requested
+   if (strlen(mod->GetOutputFileName())) mgr->SetCommonFileName(mod->GetOutputFileName());
+
+   // Check if a custom terminate file name was requested
+   if (strlen(mod->GetTerminateFileName())) {
+      if (!fTerminateFiles.IsNull()) fTerminateFiles += ",";
+      fTerminateFiles += mod->GetTerminateFileName();
+   }   
+
    // Execute the macro
    if (mod->ExecuteMacro()<0) {
       Error("LoadModule", "Executing the macro %s with arguments: %s for module %s returned a negative value",
index c38ba01..c2b5752 100644 (file)
@@ -54,6 +54,8 @@
 #Module.DataTypes    ESD, AOD, MC
 #Module.MacroName    $ALICE_ROOT/PWG1/PilotTrain/AddTaskQAsym.C
 #Module.MacroArgs    0, AliVEvent::kAnyINT, AliVEvent::kHighMult, AliVEvent::kEMC7, AliVEvent::kMUU7
+#Module.OutputFile   
+#Module.TerminateFile
 #Module.StartConfig  
 __R_ADDTASK__->SelectCollisionCandidates();
 #Module.EndConfig
@@ -81,6 +83,8 @@ AliAnalysisTaskCfg::AliAnalysisTaskCfg()
                     fLibs(),
                     fDeps(),
                     fDataTypes(),
+                    fOutputFile(),
+                    fTerminateFile(),
                     fMacro(0),
                     fConfigDeps(0),
                     fRAddTask(0)
@@ -96,6 +100,8 @@ AliAnalysisTaskCfg::AliAnalysisTaskCfg(const char *name)
                     fLibs(),
                     fDeps(),
                     fDataTypes(),
+                    fOutputFile(),
+                    fTerminateFile(),
                     fMacro(0),
                     fConfigDeps(0),
                     fRAddTask(0)
@@ -112,6 +118,8 @@ AliAnalysisTaskCfg::AliAnalysisTaskCfg(const AliAnalysisTaskCfg &other)
                     fLibs(other.fLibs),
                     fDeps(other.fDeps),
                     fDataTypes(other.fDataTypes),
+                    fOutputFile(other.fOutputFile),
+                    fTerminateFile(other.fTerminateFile),
                     fMacro(0),
                     fConfigDeps(0),
                     fRAddTask(0)
@@ -140,6 +148,8 @@ AliAnalysisTaskCfg& AliAnalysisTaskCfg::operator=(const AliAnalysisTaskCfg &othe
    fLibs      = other.fLibs;
    fDeps      = other.fDeps;
    fDataTypes = other.fDataTypes;
+   fOutputFile = other.fOutputFile;
+   fTerminateFile = other.fTerminateFile;
    if (other.fMacro) fMacro = new TMacro(*other.fMacro);
    if (other.fConfigDeps) fConfigDeps = new TMacro(*other.fConfigDeps);
    fRAddTask  = other.fRAddTask;
@@ -433,6 +443,8 @@ void AliAnalysisTaskCfg::SaveAs(const char *filename, Option_t *option) const
    out << "#Module.Libs " << fLibs << endl;
    out << "#Module.Deps " << fDeps << endl;
    out << "#Module.DataTypes " << fDataTypes << endl;
+   out << "#Module.OutputFile " << fOutputFile << endl;
+   out << "#Module.TerminateFile " << fTerminateFile << endl;
    out << "#Module.MacroName " << fMacroName << endl;
    out << "#Module.MacroArgs " << fMacroArgs << endl;
    if (fConfigDeps) {
@@ -500,6 +512,14 @@ TObjArray *AliAnalysisTaskCfg::ExtractModulesFrom(const char *filename)
          // Data types
          decode = AliAnalysisTaskCfg::DecodeValue(line);
          cfg->SetDataTypes(decode);
+      } else if (cfg && line.BeginsWith("#Module.OutputFile")) {
+         // Desired output file name (via SetCommonOutput)
+         decode = AliAnalysisTaskCfg::DecodeValue(line);
+         cfg->SetOutputFileName(decode);
+      } else if (cfg && line.BeginsWith("#Module.TerminateFile")) {
+         // Custom file name produced in Terminate if any
+         decode = AliAnalysisTaskCfg::DecodeValue(line);
+         cfg->SetTerminateFileName(decode);
       } else if (cfg && line.BeginsWith("#Module.MacroName")) {
          // Name of the add task macro (including path)
          decode = AliAnalysisTaskCfg::DecodeValue(line);
index 2638578..95a8ecf 100644 (file)
@@ -29,6 +29,8 @@ protected:
   TString                   fLibs;          // List of custom libs needed to run the task (comma separated)
   TString                   fDeps;          // List of tasks this module depends on
   TString                   fDataTypes;     // List of supported data types (ESD, AOD, MC)
+  TString                   fOutputFile;    // Desired output file name (via SetCommonFileName)
+  TString                   fTerminateFile; // Custom output file written in Terminate
   TMacro                   *fMacro;         // Embedded AddTask macro
   TMacro                   *fConfigDeps;    // Macro used to configure the dependecies
                                             // (utility tasks or input handlers). The data type is passed as argument.
@@ -76,6 +78,12 @@ public:
   const char               *GetDataTypes() const {return fDataTypes;}
   Bool_t                    SupportsData(const char *type) const;
   void                      SetDataTypes(const char *types);
+  
+  // Output files
+  const char               *GetOutputFileName() const {return fOutputFile;}
+  const char               *GetTerminateFileName() const {return fTerminateFile;}
+  void                      SetOutputFileName(const char *name) {fOutputFile = name;}
+  void                      SetTerminateFileName(const char *name) {fTerminateFile = name;}
 
   // Extra utilities  
   Bool_t                    CheckLoadLibraries() const;
@@ -86,6 +94,6 @@ public:
   void                      SaveAs(const char *filename, Option_t *option = "") const;
   static TObjArray         *ExtractModulesFrom(const char *filename);
     
-  ClassDef(AliAnalysisTaskCfg,1)  // Class describing how to run a analysis task
+  ClassDef(AliAnalysisTaskCfg,2)  // Class describing how to run a analysis task
 };
 #endif