ROOT logo
#ifndef ALIANALYSISTASKCFG_H
#define ALIANALYSISTASKCFG_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// Author: Andrei Gheata, 12/08/2011

//==============================================================================
//   AliAnalysysTaskCfg - Class embedding the configuration needed to run
// a given analysis task: libraries to be loaded, location and name of the macro
// used to add the task to the analysis manager, dependencies.
//==============================================================================

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TMacro;
class TObjArray;

class AliAnalysisTaskCfg : public TNamed {
public:
enum ETaskCfgFlags {
  kLoaded      = BIT(14)
}; 
protected:
  TString                   fMacroName;     // Full path to AddTask macro
  TString                   fMacroArgs;     // Arguments to run the macro
  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.
  TObject                  *fRAddTask;      // Object returned by AddTask method
public:  
  AliAnalysisTaskCfg();
  AliAnalysisTaskCfg(const char *name);
  AliAnalysisTaskCfg(const AliAnalysisTaskCfg &other); 
  virtual ~AliAnalysisTaskCfg();
  
  // Assignment
  AliAnalysisTaskCfg& operator=(const AliAnalysisTaskCfg &other);
  
  // AddTask macro handling
  const char               *GetMacroName() const {return fMacroName;}
  const char               *GetMacroArgs() const {return fMacroArgs;}
  void                      SetMacroName(const char *name) {fMacroName = name;}
  void                      SetMacroArgs(const char *args) {fMacroArgs = args;}
  TMacro                   *OpenMacro(const char *name="");
  void                      SetMacro(TMacro *macro);
  TMacro                   *GetMacro() const {return fMacro;}
  Long64_t                  ExecuteMacro(const char *newargs="");

  // Libraries
  const char               *GetLibs()      const {return fLibs;}
  Int_t                     GetNlibs()     const;
  const char *              GetLibrary(Int_t i) const;
  Bool_t                    NeedsLibrary(const char *lib) const;
  void                      SetLibraries(const char *libs) {fLibs = libs;}
  
  // Dependencies
  const char               *GetDeps()      const {return fDeps;}
  Int_t                     GetNdeps()     const;
  const char *              GetDependency(Int_t i) const;
  Bool_t                    NeedsDependency(const char *dep) const;
  void                      SetDependencies(const char *deps) {fDeps = deps;}
  
  // Customized macro to handle dependencies
  TMacro                   *OpenConfigMacro(const char *name);
  void                      SetConfigMacro(TMacro *macro);
  Long64_t                  ExecuteConfigMacro();
  TMacro                   *GetConfigMacro() const {return fConfigDeps;}
  
  // Supported data types
  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;
  static const char        *DecodeValue(TString &line);
  TObject                  *GetRAddTask() const {return fRAddTask;}
  Bool_t                    IsLoaded() const {return TObject::TestBit(AliAnalysisTaskCfg::kLoaded);}
  void                      Print(Option_t *option="") const;
  void                      SaveAs(const char *filename, Option_t *option = "") const;
  static TObjArray         *ExtractModulesFrom(const char *filename);
    
  ClassDef(AliAnalysisTaskCfg,2)  // Class describing how to run a analysis task
};
#endif
 AliAnalysisTaskCfg.h:1
 AliAnalysisTaskCfg.h:2
 AliAnalysisTaskCfg.h:3
 AliAnalysisTaskCfg.h:4
 AliAnalysisTaskCfg.h:5
 AliAnalysisTaskCfg.h:6
 AliAnalysisTaskCfg.h:7
 AliAnalysisTaskCfg.h:8
 AliAnalysisTaskCfg.h:9
 AliAnalysisTaskCfg.h:10
 AliAnalysisTaskCfg.h:11
 AliAnalysisTaskCfg.h:12
 AliAnalysisTaskCfg.h:13
 AliAnalysisTaskCfg.h:14
 AliAnalysisTaskCfg.h:15
 AliAnalysisTaskCfg.h:16
 AliAnalysisTaskCfg.h:17
 AliAnalysisTaskCfg.h:18
 AliAnalysisTaskCfg.h:19
 AliAnalysisTaskCfg.h:20
 AliAnalysisTaskCfg.h:21
 AliAnalysisTaskCfg.h:22
 AliAnalysisTaskCfg.h:23
 AliAnalysisTaskCfg.h:24
 AliAnalysisTaskCfg.h:25
 AliAnalysisTaskCfg.h:26
 AliAnalysisTaskCfg.h:27
 AliAnalysisTaskCfg.h:28
 AliAnalysisTaskCfg.h:29
 AliAnalysisTaskCfg.h:30
 AliAnalysisTaskCfg.h:31
 AliAnalysisTaskCfg.h:32
 AliAnalysisTaskCfg.h:33
 AliAnalysisTaskCfg.h:34
 AliAnalysisTaskCfg.h:35
 AliAnalysisTaskCfg.h:36
 AliAnalysisTaskCfg.h:37
 AliAnalysisTaskCfg.h:38
 AliAnalysisTaskCfg.h:39
 AliAnalysisTaskCfg.h:40
 AliAnalysisTaskCfg.h:41
 AliAnalysisTaskCfg.h:42
 AliAnalysisTaskCfg.h:43
 AliAnalysisTaskCfg.h:44
 AliAnalysisTaskCfg.h:45
 AliAnalysisTaskCfg.h:46
 AliAnalysisTaskCfg.h:47
 AliAnalysisTaskCfg.h:48
 AliAnalysisTaskCfg.h:49
 AliAnalysisTaskCfg.h:50
 AliAnalysisTaskCfg.h:51
 AliAnalysisTaskCfg.h:52
 AliAnalysisTaskCfg.h:53
 AliAnalysisTaskCfg.h:54
 AliAnalysisTaskCfg.h:55
 AliAnalysisTaskCfg.h:56
 AliAnalysisTaskCfg.h:57
 AliAnalysisTaskCfg.h:58
 AliAnalysisTaskCfg.h:59
 AliAnalysisTaskCfg.h:60
 AliAnalysisTaskCfg.h:61
 AliAnalysisTaskCfg.h:62
 AliAnalysisTaskCfg.h:63
 AliAnalysisTaskCfg.h:64
 AliAnalysisTaskCfg.h:65
 AliAnalysisTaskCfg.h:66
 AliAnalysisTaskCfg.h:67
 AliAnalysisTaskCfg.h:68
 AliAnalysisTaskCfg.h:69
 AliAnalysisTaskCfg.h:70
 AliAnalysisTaskCfg.h:71
 AliAnalysisTaskCfg.h:72
 AliAnalysisTaskCfg.h:73
 AliAnalysisTaskCfg.h:74
 AliAnalysisTaskCfg.h:75
 AliAnalysisTaskCfg.h:76
 AliAnalysisTaskCfg.h:77
 AliAnalysisTaskCfg.h:78
 AliAnalysisTaskCfg.h:79
 AliAnalysisTaskCfg.h:80
 AliAnalysisTaskCfg.h:81
 AliAnalysisTaskCfg.h:82
 AliAnalysisTaskCfg.h:83
 AliAnalysisTaskCfg.h:84
 AliAnalysisTaskCfg.h:85
 AliAnalysisTaskCfg.h:86
 AliAnalysisTaskCfg.h:87
 AliAnalysisTaskCfg.h:88
 AliAnalysisTaskCfg.h:89
 AliAnalysisTaskCfg.h:90
 AliAnalysisTaskCfg.h:91
 AliAnalysisTaskCfg.h:92
 AliAnalysisTaskCfg.h:93
 AliAnalysisTaskCfg.h:94
 AliAnalysisTaskCfg.h:95
 AliAnalysisTaskCfg.h:96
 AliAnalysisTaskCfg.h:97
 AliAnalysisTaskCfg.h:98
 AliAnalysisTaskCfg.h:99