Added possibility to load AliAnalysisTaskCfg modules in the plugin.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskCfg.h
1 #ifndef ALIANALYSISTASKCFG_H
2 #define ALIANALYSISTASKCFG_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // Author: Andrei Gheata, 12/08/2011
7
8 //==============================================================================
9 //   AliAnalysysTaskCfg - Class embedding the configuration needed to run
10 // a given analysis task: libraries to be loaded, location and name of the macro
11 // used to add the task to the analysis manager, dependencies.
12 //==============================================================================
13
14 #ifndef ROOT_TNamed
15 #include "TNamed.h"
16 #endif
17
18 class TMacro;
19 class TObjArray;
20
21 class AliAnalysisTaskCfg : public TNamed {
22 public:
23 enum ETaskCfgFlags {
24   kLoaded      = BIT(14)
25 }; 
26 protected:
27   TString                   fMacroName;     // Full path to AddTask macro
28   TString                   fMacroArgs;     // Arguments to run the macro
29   TString                   fLibs;          // List of custom libs needed to run the task (comma separated)
30   TString                   fDeps;          // List of tasks this module depends on
31   TString                   fDataTypes;     // List of supported data types (ESD, AOD, MC)
32   TMacro                   *fMacro;         // Embedded AddTask macro
33   TMacro                   *fConfigDeps;    // Macro used to configure the dependecies
34                                             // (utility tasks or input handlers). The data type is passed as argument.
35 public:  
36   AliAnalysisTaskCfg();
37   AliAnalysisTaskCfg(const char *name);
38   AliAnalysisTaskCfg(const AliAnalysisTaskCfg &other); 
39   virtual ~AliAnalysisTaskCfg();
40   
41   // Assignment
42   AliAnalysisTaskCfg& operator=(const AliAnalysisTaskCfg &other);
43   
44   // AddTask macro handling
45   const char               *GetMacroName() const {return fMacroName;}
46   const char               *GetMacroArgs() const {return fMacroArgs;}
47   void                      SetMacroName(const char *name) {fMacroName = name;}
48   void                      SetMacroArgs(const char *args) {fMacroArgs = args;}
49   TMacro                   *OpenMacro(const char *name="");
50   void                      SetMacro(TMacro *macro);
51   TMacro                   *GetMacro() const {return fMacro;}
52   Long64_t                  ExecuteMacro(const char *newargs="");
53
54   // Libraries
55   const char               *GetLibs()      const {return fLibs;}
56   Int_t                     GetNlibs()     const;
57   const char *              GetLibrary(Int_t i) const;
58   Bool_t                    NeedsLibrary(const char *lib) const;
59   void                      SetLibraries(const char *libs) {fLibs = libs;}
60   
61   // Dependencies
62   const char               *GetDeps()      const {return fDeps;}
63   Int_t                     GetNdeps()     const;
64   const char *              GetDependency(Int_t i) const;
65   Bool_t                    NeedsDependency(const char *dep) const;
66   void                      SetDependencies(const char *deps) {fDeps = deps;}
67   
68   // Customized macro to handle dependencies
69   TMacro                   *OpenConfigMacro(const char *name);
70   void                      SetConfigMacro(TMacro *macro);
71   Long64_t                  ExecuteConfigMacro();
72   TMacro                   *GetConfigMacro() const {return fConfigDeps;}
73   
74   // Supported data types
75   const char               *GetDataTypes() const {return fDataTypes;}
76   Bool_t                    SupportsData(const char *type) const;
77   void                      SetDataTypes(const char *types);
78
79   // Extra utilities  
80   Bool_t                    CheckLoadLibraries() const;
81   static const char        *DecodeValue(TString &line);
82   Bool_t                    IsLoaded() const {return TestBit(kLoaded);}
83   void                      Print(Option_t *option="") const;
84   void                      SaveAs(const char *filename, Option_t *option = "") const;
85   static TObjArray         *ExtractModulesFrom(const char *filename);
86     
87   ClassDef(AliAnalysisTaskCfg,1)  // Class describing how to run a analysis task
88 };
89 #endif