Merge branch 'master', remote branch 'origin' into TPCdev
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisGrid.h
1 #ifndef ALIANALYSISGRID_H
2 #define ALIANALYSISGRID_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // Author: Mihaela Gheata, 01/09/2008
7
8 //==============================================================================
9 //   AliAnalysisGrid - Base grid utility class. Provides interface for creating
10 // a personalized JDL, finding and creating a dataset.
11 //==============================================================================
12
13 #ifndef ROOT_TNamed
14 #include <TNamed.h>
15 #endif
16
17 class TChain;
18
19 class AliAnalysisGrid : public TNamed {
20
21 public:
22
23 enum EPluginRunMode {
24    kFull     = 0,
25    kTest     = BIT(14),
26    kOffline  = BIT(15),
27    kSubmit   = BIT(16),
28    kMerge    = BIT(17),
29    kUseTags  = BIT(18),
30    kUseESD   = BIT(19),
31    kUseAOD   = BIT(20),
32    kUseMC    = BIT(21),
33    kUsePars  = BIT(22),
34    kDefaultOutputs = BIT(23)
35 };   
36 enum EPluginBits {
37    kBitMask32  = 0xffffffff,
38    kUseCopy    = BIT(0),
39    kCheckCopy  = BIT(1),
40    kKeepLogs   = BIT(2),
41    kClearPackages = BIT(3),
42    kUseSubmitPolicy = BIT(4),
43    kProofConnectGrid = BIT(5),
44    kOneStageMerging = BIT(6),
45    kUseMCchain = BIT(7),
46    kLocalTest  = BIT(8),
47    kMergeAOD   = BIT(9)
48 };
49
50    AliAnalysisGrid() : TNamed(), fSpecialBits(0) {}
51    AliAnalysisGrid(const char *name) : TNamed(name,""), fSpecialBits(0) {}
52    virtual ~AliAnalysisGrid() {}
53    AliAnalysisGrid(const AliAnalysisGrid& other); 
54    AliAnalysisGrid& operator=(const AliAnalysisGrid& other);
55 // Getters
56    virtual EPluginRunMode GetRunMode() const;
57 // Setters   
58    virtual void        AddAdditionalLibrary(const char *name)            = 0;
59    virtual void        AddIncludePath(const char *path)                  = 0;
60    virtual void        AddRunNumber(Int_t run)                           = 0;
61    virtual void        AddRunNumber(const char *run)                     = 0;
62    virtual void        AddDataFile(const char *lfn)                      = 0;
63    virtual Bool_t      IsSingleOutput() const                            = 0;
64    virtual void        SetExecutable(const char *name="analysis.sh")     = 0;
65    virtual void        SetArguments(const char *name="")                 = 0;
66    virtual void        SetAnalysisMacro(const char *name="myAnalysis.C") = 0;
67    virtual void        SetAnalysisSource(const char *name="myAnalysisClass.cxx") = 0;
68    virtual void        SetValidationScript(const char *name="validation.sh")     = 0;
69    virtual void        SetAdditionalLibs(const char *list)               = 0;
70    virtual void        SetPrice(Int_t price=1)                           = 0;
71    virtual void        SetJobTag(const char *tag="")                     = 0;
72    virtual void        SetSplitMode(const char *type="se")               = 0;
73    virtual void        SetSplitMaxInputFileNumber(Int_t nfiles=100)      = 0;
74    virtual void        SetAPIVersion(const char *version)                = 0;
75    virtual void        SetROOTVersion(const char *version)               = 0;
76    virtual void        SetAliROOTVersion(const char *version)            = 0;
77    virtual void        SetUser(const char *user)                         = 0;
78    virtual void        SetTTL(Int_t ttl=30000)                           = 0;
79    virtual void        SetGridWorkingDir(const char *name="workdir")     = 0;
80    virtual void        SetGridDataDir(const char *name)                  = 0;
81    virtual void        SetDataPattern(const char *pattern)               = 0;
82    virtual void        SetDefaultOutputs(Bool_t flag=kTRUE)              = 0;
83    virtual void        SetGridOutputDir(const char *name="output")       = 0;
84    virtual void        SetOutputArchive(const char *list="log_archive.zip:std*@disk=1 root_archive.zip:*.root@disk=2") = 0;
85    virtual void        SetOutputFiles(const char *list)                  = 0;
86    virtual void        SetInputFormat(const char *format="xml-single")   = 0;
87    virtual void        SetMaxInitFailed(Int_t nfail=5)                   = 0;
88    virtual void        SetTerminateFiles(const char *list)               = 0;
89    virtual void        SetMergeExcludes(const char *list)                = 0;
90    virtual void        SetMergeViaJDL(Bool_t on=kTRUE)                   = 0;
91    virtual void        SetMasterResubmitThreshold(Int_t percentage)      = 0;
92    virtual void        SetNtestFiles(Int_t nfiles)                       = 0;
93    virtual void        SetJDLName(const char *name="analysis.jdl")       = 0;
94    virtual void        SetPreferedSE(const char *se)                     = 0;
95    virtual void        SetProductionMode(Int_t mode=1)                   = 0;
96    virtual void        SetRegisterExcludes(const char *list)             = 0;
97    virtual void        SetRunPrefix(const char *prefix)                  = 0;
98    virtual void        SetOutputSingleFolder(const char *folder)         = 0;
99    virtual void        SetFastReadOption(Bool_t on=kTRUE)                = 0;
100    virtual void        SetOverwriteMode(Bool_t on=kTRUE)                 = 0;
101    
102  // Set run mode.  Can be "full", "test", "offline", "submit" or "merge"
103    virtual void        SetRunMode(const char *mode="full");
104 //Utilities
105    static  Bool_t      CreateToken(const char *username=0);
106    virtual Bool_t      CreateDataset(const char *pattern)                = 0;
107    virtual Bool_t      CreateJDL()                                       = 0;
108    virtual void        EnablePackage(const char *package)                = 0;
109    virtual Bool_t      MergeOutputs()                                    = 0;
110    virtual Bool_t      StartAnalysis(Long64_t nentries=123456789, Long64_t firstentry=0) = 0;
111    virtual void        WriteAnalysisFile()                               = 0;
112    virtual void        WriteAnalysisMacro()                              = 0;
113    virtual void        WriteExecutable()                                 = 0;
114    virtual void        WriteValidationScript(Bool_t merge=kFALSE)        = 0;
115
116 // Flags
117    Bool_t              IsUseCopy() const {return TestSpecialBit(kUseCopy);}
118    void                SetUseCopy(Bool_t flag=kTRUE) {SetSpecialBit(kUseCopy,flag);}
119    Bool_t              IsCheckCopy() const {return TestSpecialBit(kCheckCopy);}
120    void                SetCheckCopy(Bool_t flag=kTRUE) {SetSpecialBit(kCheckCopy,flag);}
121    Bool_t              IsKeepLogs() const {return TestSpecialBit(kKeepLogs);}
122    void                SetKeepLogs(Bool_t flag=kTRUE) {SetSpecialBit(kKeepLogs,flag);}   
123    Bool_t              IsUseSubmitPolicy() const {return TestSpecialBit(kUseSubmitPolicy);}
124    void                SetUseSubmitPolicy(Bool_t flag=kTRUE) {SetSpecialBit(kUseSubmitPolicy,flag);}   
125    Bool_t              IsOneStageMerging() const {return TestSpecialBit(kOneStageMerging);}
126    void                SetOneStageMerging(Bool_t flag) {SetSpecialBit(kOneStageMerging,flag);}
127    Bool_t              IsUseMCchain() const {return TestSpecialBit(kUseMCchain);}
128    void                SetUseMCchain(Bool_t flag=kTRUE) {SetSpecialBit(kUseMCchain,flag);}
129    Bool_t              IsLocalTest() const {return TestSpecialBit(kLocalTest);}
130    void                SetLocalTest(Bool_t flag=kTRUE) {SetSpecialBit(kLocalTest,flag);}
131    Bool_t              IsMergeAOD() const {return TestSpecialBit(kMergeAOD);}
132    virtual void        SetMergeAOD(Bool_t flag=kTRUE) {SetSpecialBit(kMergeAOD,flag);}
133
134 // PROOF mode
135    virtual void        SetProofCluster(const char *cluster)              = 0;
136    virtual void        SetProofDataSet(const char *dataset)              = 0;
137    virtual const char *GetProofDataSet() const                           = 0;
138    virtual void        SetProofReset(Int_t mode)                         = 0;
139    virtual void        SetClearPackages(Bool_t flag=kTRUE) {SetSpecialBit(kClearPackages,flag);}
140    virtual void        SetProofConnectGrid(Bool_t flag=kTRUE) {SetSpecialBit(kProofConnectGrid,flag);}
141    virtual void        SetNproofWorkers(Int_t nworkers)                  = 0;
142    virtual void        SetNproofWorkersPerSlave(Int_t nworkers)          = 0;
143    virtual void        SetRootVersionForProof(const char *version)       = 0;
144    virtual void        SetAliRootMode(const char *mode)                  = 0;
145    virtual void        SetProofProcessOpt(const char *proofOpt="")       = 0;
146    virtual TString     GetProofProcessOpt()                              = 0;
147    // .txt file containing the list of files to be chained in test mode
148    virtual void        SetFileForTestMode(const char *filename)          = 0;
149    virtual TChain     *GetChainForTestMode(const char *treeName) const   = 0;
150
151 protected:
152 // Methods
153    virtual Bool_t      Connect()                                         = 0;
154    virtual void        SetDefaults()                                     = 0;
155    void     SetSpecialBit(UInt_t f) { fSpecialBits |= f & kBitMask32; }
156    void     ResetSpecialBit(UInt_t f) { fSpecialBits &= ~(f & kBitMask32); }
157    void     SetSpecialBit(UInt_t f, Bool_t set) {(set)?SetSpecialBit(f):ResetSpecialBit(f);}
158    Bool_t   TestSpecialBit(UInt_t f) const { return (Bool_t) ((fSpecialBits & f) != 0); }
159    Int_t    TestSpecialBits(UInt_t f) const { return (Int_t) (fSpecialBits & f); }
160    void     InvertSpecialBit(UInt_t f) { fSpecialBits ^= f & kBitMask32; }
161
162 protected:
163    UInt_t              fSpecialBits; // special bits
164   
165
166    ClassDef(AliAnalysisGrid, 2)   // Base class for GRID utilities
167 };
168 #endif