1 #ifndef ALIMUONGRIDSUBMITTER_H
2 #define ALIMUONGRIDSUBMITTER_H
5 // AliMuonGridSubmitter : a base class to help submit some
6 // mini-productions for muon studies (e.g. Acc x Eff, qa merging, etc...)
8 // author: Laurent Aphecetche (Subatech)
13 #include "Riostream.h"
18 class AliMuonGridSubmitter : public TObject
28 AliMuonGridSubmitter(AliMuonGridSubmitter::EJobType jobType, Bool_t localOnly=kFALSE);
29 virtual ~AliMuonGridSubmitter();
31 virtual Bool_t Generate(const char* jdlname) const = 0;
32 virtual Bool_t Run(const char* mode) = 0;
34 TString JobTypeName(AliMuonGridSubmitter::EJobType jobType) const;
36 Bool_t SetLocalDir(const char* localdir) { return SetLocalDirectory("Local",localdir); }
37 Bool_t SetMergedDir(const char* dir) { return SetRemoteDirectory("Merged",dir); }
38 Bool_t SetRemoteDir(const char* dir) { return SetRemoteDirectory("Remote",dir); }
39 Bool_t SetTemplateDir(const char* templatedir) { return SetLocalDirectory("Template",templatedir); }
41 Bool_t CheckLocal() const;
42 Bool_t CheckRemote() const;
44 void CleanLocal(const char* excludeList="") const;
46 void Invalidate() { fIsValid = kFALSE; }
48 void Validate() { fIsValid = kTRUE; }
50 TString MergedDir() const { return GetMapValue("Merged"); }
51 TString RemoteDir() const { return GetMapValue("Remote"); }
52 TString LocalDir() const { return GetMapValue("Local"); }
53 TString TemplateDir() const { return GetMapValue("Template"); }
55 TString FilePath(const char* what) const;
57 UInt_t NofRuns() const;
59 const std::vector<Int_t>& RunList() const;
61 void SetRunList(const char* runlist);
62 void SetRunList(int runNumber);
64 virtual void Print(Option_t* opt="") const;
66 Bool_t CopyLocalFilesToRemote();
68 Bool_t CopyTemplateFilesToLocal();
70 void SetPackages(const char* aliroot, const char* root="", const char* geant3="",
71 const char* api="VO_ALICE@APISCONFIG::V1.1x");
73 Bool_t ShouldOverwriteFiles() const { return fShouldOverwriteFiles; }
75 void ShouldOverwriteFiles(Bool_t flag) { fShouldOverwriteFiles = flag; }
77 Bool_t IsValid() const { return fIsValid; }
79 void OutputToJDL(std::ostream& out, const char* key, const char* v1,
80 const char* v2="", const char* v3="", const char* v4="", const char* v5="",
81 const char* v6="", const char* v7="", const char* v8="", const char* v9="") const;
83 void OutputToJDL(std::ostream& out, const char* key, const TObjArray& values) const;
85 TString GetRemoteDir(const char* dir, Bool_t create=kTRUE);
87 Bool_t RemoteDirectoryExists(const char *dirname) const;
88 Bool_t RemoteFileExists(const char *lfn);
90 Bool_t CopyLocalFilesToRemote(const TObjArray& localFiles);
92 Bool_t CopyFile(const char* localFile);
94 Int_t GetLastStage(const char* remoteDir);
96 std::ostream* CreateJDLFile(const char* name) const;
98 Bool_t CheckRemoteDir() const;
100 Bool_t ReplaceVars(const char* file) const;
102 Bool_t HasVars(const char* localFile) const;
104 Bool_t SetVar(const char* varname, const char* value);
106 TObjArray* GetVariables(const char* file) const;
108 Bool_t CheckCompilation(const char* file) const;
110 TObjArray* LocalFileList() const;
112 TObjArray* TemplateFileList() const;
114 void AddToTemplateFileList(const char* filename);
116 void AddToLocalFileList(const char* filename);
118 void AddIncludePath(const char* pathList) const;
120 TString GetVar(const char* key) const;
124 TObjArray* OrderKeys(const TMap& map) const;
126 std::ostream* CreateJDLFile(const char* name);
128 TString GetMapValue(const char* key) const;
130 TMap* InternalMap() const;
133 void SetMapKeyValue(const char* key, const char* value);
135 Bool_t SetLocalDirectory(const char* type, const char* path);
137 Bool_t SetRemoteDirectory(const char* type, const char* path);
139 void UpdateLocalFileList();
142 AliMuonGridSubmitter(const AliMuonGridSubmitter& rhs);
143 AliMuonGridSubmitter& operator=(const AliMuonGridSubmitter& rhs);
146 mutable TMap* fInternalMap; // map of directory paths and packages versions
147 mutable TMap* fVars; // map of the variables we can replace in template files
148 Bool_t fIsValid; // whether this object is valid (i.e. properly configured)
149 Bool_t fShouldOverwriteFiles; // whether or not to overwrite the local files each time we run
150 mutable TObjArray* fTemplateFileList; // list of template files
151 mutable TObjArray* fLocalFileList; // list of local files
152 std::vector<Int_t> fRunList; // run list to process
154 ClassDef(AliMuonGridSubmitter,0) // Helper class to submit some muon jobs