]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/AliAnalysisAlien.h
Extra library EMCALUtils needed for particle correlations task.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisAlien.h
1 #ifndef ALIANALYSISALIEN_H
2 #define ALIANALYSISALIEN_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 //   AliAnalysisAlien - AliEn utility class. Provides interface for creating
10 // a personalized JDL, finding and creating a dataset.
11 //==============================================================================
12
13 #ifndef ALIANALYSISGRID_H
14 #include "AliAnalysisGrid.h"
15 #endif
16
17 #ifndef ROOT_TString
18 #include <TString.h>
19 #endif
20
21 class TGridJDL;
22
23 class AliAnalysisAlien : public AliAnalysisGrid {
24
25 public:
26
27    AliAnalysisAlien();
28    AliAnalysisAlien(const char *name);
29    virtual ~AliAnalysisAlien();
30    AliAnalysisAlien(const AliAnalysisAlien& other); 
31    AliAnalysisAlien& operator=(const AliAnalysisAlien& other);
32 // Setters   
33    virtual void        AddIncludePath(const char *path);
34    virtual void        AddRunNumber(Int_t run);
35    virtual void        AddRunNumber(const char *run);
36    virtual void        AddDataFile(const char *lfn);
37    virtual void        SetExecutable(const char *name="analysis.sh")     {fExecutable = name;}
38    virtual void        SetExecutableCommand(const char *command="root -b -q") {fExecutableCommand = command;}
39    virtual void        SetArguments(const char *name="")                 {fArguments = name;}
40    virtual void        SetAnalysisMacro(const char *name="myAnalysis.C") {fAnalysisMacro = name;}
41    virtual void        SetAnalysisSource(const char *name="myAnalysisClass.cxx") {fAnalysisSource = name;}
42    virtual void        SetAdditionalLibs(const char *list)               {fAdditionalLibs = list;}
43    virtual void        SetPrice(Int_t price=1)                           {fPrice = price;}
44    virtual void        SetRunRange(Int_t min, Int_t max)                 {fRunRange[0] = min; fRunRange[1] = max;}
45    virtual void        SetJobTag(const char *tag="")                     {fJobTag = tag;}
46    virtual void        SetNrunsPerMaster(Int_t nruns=1)                  {fNrunsPerMaster = nruns;}
47    virtual void        SetMaxMergeFiles(Int_t nfiles)                    {fMaxMergeFiles = nfiles;}
48    virtual void        SetSplitMode(const char *type="se")               {fSplitMode = type;}
49    virtual void        SetSplitMaxInputFileNumber(Int_t nfiles=100)      {fSplitMaxInputFileNumber = nfiles;}
50    virtual void        SetAPIVersion(const char *version="V2.4") {fAPIVersion = version;}
51    virtual void        SetROOTVersion(const char *version="v5-21-01-alice") {fROOTVersion = version;}
52    virtual void        SetAliROOTVersion(const char *version="v4-14-Rev-02") {fAliROOTVersion=version;}
53    virtual void        SetUser(const char *user)                         {fUser = user;}
54    virtual void        SetTTL(Int_t ttl=30000)                           {fTTL = ttl;}
55    virtual void        SetGridWorkingDir(const char *name="workdir")     {fGridWorkingDir = name;}
56    virtual void        SetGridDataDir(const char *name)                  {fGridDataDir = name;}
57    virtual void        SetDataPattern(const char *pattern="*AliESDs.root") {fDataPattern = pattern;}
58    virtual void        SetFriendChainName(const char *name="")           {fFriendChainName = name;}
59    virtual void        SetDefaultOutputs(Bool_t flag);
60    virtual void        SetGridOutputDir(const char *name="output")       {fGridOutputDir = name;}
61    virtual void        SetOutputArchive(const char *list="log_archive.zip:stdout,stderr root_archive.zip:*.root") {fOutputArchive = list;}
62    virtual void        SetOutputFiles(const char *list)                  {fOutputFiles = list;}
63    virtual void        SetInputFormat(const char *format="xml-single")   {fInputFormat = format;}
64    virtual void        SetMaxInitFailed(Int_t nfail=5)                   {fMaxInitFailed = nfail;}
65    virtual void        SetMergeExcludes(const char *list)                {fMergeExcludes = list;};
66    virtual void        SetMasterResubmitThreshold(Int_t percentage)      {fMasterResubmitThreshold = percentage;}
67    virtual void        SetNtestFiles(Int_t nfiles)                       {fNtestFiles = nfiles;}
68    virtual void        SetJDLName(const char *name="analysis.jdl")       {fJDLName = name;}
69    virtual void        SetPreferedSE(const char *se)                     {fCloseSE = se;}
70    virtual void        SetProductionMode(Int_t mode=1)                   {fProductionMode = mode;}
71
72    TGridJDL           *GetGridJDL() {return fGridJDL;}
73    const char         *GetGridOutputDir() const                          {return fGridOutputDir;}
74 //Utilities
75    virtual Bool_t      CreateDataset(const char *pattern);
76    virtual Bool_t      CreateJDL();
77    virtual void        EnablePackage(const char *package);
78    static Bool_t       DirectoryExists(const char *lfn);
79    static Bool_t       FileExists(const char *lfn);
80    static  const char *GetJobStatus(Int_t jobidstart, Int_t lastid, Int_t &nrunning, Int_t &nwaiting, Int_t &nerror, Int_t &ndone);
81    virtual Bool_t      MergeOutputs();
82    virtual void        Print(Option_t *option="") const;
83    virtual Bool_t      StartAnalysis(Long64_t nentries=123456789, Long64_t firstentry=0);
84    virtual void        Submit();
85    virtual void        WriteAnalysisFile();
86    virtual void        WriteAnalysisMacro();
87    virtual void        WriteExecutable();
88    virtual Bool_t      WriteJDL(Bool_t copy);
89    virtual void        WriteProductionFile(const char *filename) const;
90    virtual void        WriteValidationScript();
91
92 protected:
93    void                CdWork();
94    Bool_t              CheckInputData();
95    void                CheckDataType(const char *lfn, Bool_t &is_collection, Bool_t &is_xml, Bool_t &use_tags);
96    virtual Bool_t      Connect();
97    virtual void        SetDefaults();  
98    void                SubmitNext();
99
100    Bool_t              IsCollection(const char *lfn) const;
101    Bool_t              IsUsingTags() const {return TObject::TestBit(AliAnalysisGrid::kUseTags);}
102
103 private:
104    TGridJDL        *fGridJDL;         //! JDL maker
105    Int_t            fPrice;           // Grid price for the job;
106    Int_t            fTTL;             // Time to live.
107    Int_t            fSplitMaxInputFileNumber; // Maximum number of files to be processed per subjob
108    Int_t            fMaxInitFailed;   // Maximum initial consecutive subjobs accepted to fail
109    Int_t            fMasterResubmitThreshold; // Failed jobs will be resubmitted until this DONE ratio
110    Int_t            fNtestFiles;      // Number of files used in the testing case
111    Int_t            fRunRange[2];     // Run range
112    Int_t            fNrunsPerMaster;  // Number of runs per masterjob
113    Int_t            fMaxMergeFiles;   // Maximum number of files to be merged in one chunk
114    Int_t            fNsubmitted;      // Number of jobs submitted
115    Int_t            fProductionMode;  // Production mode (0-off, 1-on)
116    TString          fRunNumbers;      // List of runs to be processed
117    TString          fExecutable;      // Executable script for AliEn job
118    TString          fExecutableCommand;  // Command(s) to be executed in the executable script
119    TString          fArguments;       // Arguments for the executable script
120    TString          fAnalysisMacro;   // Root macro steering the analysis
121    TString          fAnalysisSource;  // User analysis implementation (.cxx) file(s)
122    TString          fAdditionalLibs;  // List (separated by blacs) of additional libraries needed for the analysis
123    TString          fSplitMode;       // Job split mode
124    TString          fAPIVersion;      // API version
125    TString          fROOTVersion;     // ROOT version
126    TString          fAliROOTVersion;  // AliROOT version
127    TString          fUser;            // AliEn user name
128    TString          fGridWorkingDir;  // AliEn directory containing the input packages
129    TString          fGridDataDir;     // AliEn data production directory
130    TString          fDataPattern;     // Data pattern for 'find' command
131    TString          fGridOutputDir;   // AliEn directory (wrt work dir) where the output should be written
132    TString          fOutputArchive;   // List of output archives separated by blancs
133    TString          fOutputFiles;     // List of output files separated by blancs
134    TString          fInputFormat;     // Input format (xml-single)
135    TString          fDatasetName;     // Dataset xml file to be created
136    TString          fJDLName;         // JDL file to be generated
137    TString          fMergeExcludes;   // List of output files excluded from merging
138    TString          fIncludePath;     // Include path
139    TString          fCloseSE;         // Preffered storage element. Taken from alien_CLOSE_SE environment.
140    TString          fFriendChainName; // File name to construct friend chain (for AOD)
141    TString          fJobTag;          // Job tag
142    TObjArray       *fInputFiles;      // List of input files to be processed by the job
143    TObjArray       *fPackages;        // List of packages to be used
144    
145    ClassDef(AliAnalysisAlien, 7)   // Class providing some AliEn utilities
146 };
147 #endif