]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/trains/GridTerminate.C
.so cleanup: more gSystem->Load()
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / trains / GridTerminate.C
CommitLineData
4a8dd820 1/**
33438b4c 2 * @file GridTerminate.C
4a8dd820 3 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
4 * @date Wed Jan 23 21:22:28 2013
5 *
6 * @brief Worker script to run terminate part for Grid
7 *
8 *
33438b4c 9 * @ingroup pwglf_forward_trains_helper
4a8dd820 10 */
08275d05 11#ifndef __CINT__
12# include <TString.h>
13# include <TSystem.h>
14# include <TGrid.h>
15# include <TFile.h>
16# include <TObjArray.h>
17# include <TObjString.h>
18# include <TError.h>
19# include <TEnv.h>
20# include <TROOT.h>
21# include <AliAnalysisManager.h>
22# include <AliAnalysisAlien.h>
23# include <fstream>
24#else
25class TString;
26#endif
4a8dd820 27/**
28 * Load a library
29 *
30 * @param libName Library name
31 *
32 * @return true on success
33 */
34Bool_t LoadLib(const char* libName)
35{
36 if (gSystem->Load(libName) < 0) {
37 Error("GridTerminate", "Failed to load library %s",libName);
38 return false;
39 }
40 Info("GridTerminate","Loaded library %s",libName);
41 return true;
42}
43/**
44 * Load a PAR
45 *
46 * @param parName PAR file name
47 *
48 * @return true on success
49 */
50Bool_t LoadPar(const char* parName)
51{
52 if (!AliAnalysisAlien::SetupPar(parName)) {
53 Error("GridTerminate","Failed to load PAR %s",parName);
54 return false;
55 }
56 Info("GridTerminate","Loaded package %s",parName);
57 return true;
58}
1de8812e 59
4a8dd820 60/**
1de8812e 61 * Load the analysis handler if needed
62 *
63 * @param name
64 *
65 * @return
66 */
67Bool_t LoadHandler(const TString& name)
68{
69 // Load plugin
70 TFile* file = TFile::Open(Form("%s_plugin.root",name.Data()),"READ");
71 // TFile* plug = TFile::Open("plugin.root","READ");
72 if (!file) {
73 // Error("GridTerminate","Failed to open %s_plugin.root",name.Data());
74 Error("GridTerminate","Failed to open %s_plugin.root",
75 name.Data());
76 return false;
77 }
78 AliAnalysisAlien* handler =
79 static_cast<AliAnalysisAlien*>(file->Get("plugin"));
80 if (!handler) {
81 Error("GridTerminate","Failed to load plugin");
82 return false;
83 }
84 Info("GridTerminate","Setting grid handler");
85 handler->SetRunMode("terminate");
0e854b8e 86 handler->SetMergeViaJDL(true);
1de8812e 87 AliAnalysisManager::GetAnalysisManager()->SetGridHandler(handler);
88
89 return true;
90}
91
92/**
93 * Setup our manager et al
4a8dd820 94 *
1de8812e 95 * @param name Name of the job
96 * @param libs Libraries to load (space separated string)
97 * @param pars PARs to load (space separated string)
98 * @param srcs Sources to load (space separated string)
99 * @param local If true, run local terminate job on already
100 * merged and downloaded files.
101 * @param localLibsNotPar if @a local is true and this is true, then
102 * we load the corresponding locally compiled
103 * library for each specified PAR file.
4a8dd820 104 *
105 * @return true on success
106 */
1de8812e 107Bool_t Setup(const TString& name,
108 const TString& libs,
109 const TString& pars,
110 const TString& srcs,
111 Bool_t local=false,
112 Bool_t localLibsNotPar=true)
4a8dd820 113{
114 // Load basic ROOT libraries
115 gSystem->AddDynamicPath("/usr/lib");
b0635849 116 if (gSystem->Load("libTree") < 0) return false;
117 if (gSystem->Load("libGeom") < 0) return false;
118 if (gSystem->Load("libVMC") < 0) return false;
119 if (gSystem->Load("libPhysics") < 0) return false;
120 if (gSystem->Load("libMinuit") < 0) return false;
4a8dd820 121
122 // Load basic AliROOT libraries
123 if (gSystem->Load("libSTEERBase") < 0) return false;
124 if (gSystem->Load("libESD") < 0) return false;
125 if (gSystem->Load("libAOD") < 0) return false;
126 if (gSystem->Load("libANALYSIS") < 0) return false;
127 if (gSystem->Load("libOADB") < 0) return false;
128 if (gSystem->Load("libANALYSISalice") < 0) return false;
129
130 // Load libraries
8449e3e0 131 if (!libs.IsNull()) {
132 TObjArray* libsArray = libs.Tokenize(" ");
133 TObjString* lib = 0;
134 TIter nextLib(libsArray);
135 while ((lib = static_cast<TObjString*>(nextLib()))) {
136 const TString& libName = lib->String();
137 if (libName.Contains("libSTEERBase") ||
138 libName.Contains("libESD") ||
139 libName.Contains("libAOD") ||
140 libName.Contains("libANALYSIS") ||
141 libName.Contains("libOADB") ||
142 libName.Contains("libANALYSISalice")) continue;
143 if (!libName.Contains(".so")) continue;
144 if (!LoadLib(libName.Data())) return false;
145 }
146 libsArray->Delete();
4a8dd820 147 }
4a8dd820 148
149 // Load packages
8449e3e0 150 if (!pars.IsNull()) {
151 TObjArray* parArray = pars.Tokenize(" ");
152 TObjString* par = 0;
153 TIter nextPar(parArray);
154 while ((par = static_cast<TObjString*>(nextPar()))) {
155 TString parName(par->String());
156 if (parName.EndsWith(".par")) parName.ReplaceAll(".par", "");
157 if (parName.Contains("STEERBase") ||
158 parName.Contains("ESD") ||
159 parName.Contains("AOD") ||
160 parName.Contains("ANALYSIS") ||
161 parName.Contains("OADB") ||
162 parName.Contains("ANALYSISalice")) continue;
1de8812e 163 Bool_t ret = true;
164 if (local && localLibsNotPar)
165 ret = LoadLib(Form("lib%s.so", parName.Data()));
166 else
167 ret = LoadPar(parName.Data());
168 if (!ret) return false;
8449e3e0 169 }
4a8dd820 170 }
171
172 // Load sources
8449e3e0 173 if (!srcs.IsNull()) {
174 TObjArray* srcArray = srcs.Tokenize(" ");
175 TObjString* src = 0;
176 TIter nextSrc(srcArray);
177 while ((src = static_cast<TObjString*>(nextSrc()))) {
178 const TString& srcName = src->String();
179 gROOT->ProcessLine(Form(".L %s+g", srcName.Data()));
180 }
4a8dd820 181 }
182
aeab3a4e 183 // Connect to the grid
184 gEnv->SetValue("XSec.GSI.DelegProxy", "2");
185 // TGrid::Connect("alien://");
186 // if (!gGrid) {
187 // Error("GridTerminate", "Failed to connect to AliEn");
188 // return false;
189 // }
190
4a8dd820 191 // Load the analysis manager from file
192 TString base(name);
193 base.Append(".root");
194 if (gSystem->AccessPathName(base.Data())) {
195 // Couldn't read from current directory, try sub-dir
196 TString sub(gSystem->ConcatFileName(name, base));
197 if (gSystem->AccessPathName(sub)) {
198 Error("GridTerminate","Couldn't find manager file %s",base.Data());
199 return false;
200 }
201 base = sub;
202 }
4a8dd820 203 AliAnalysisManager* mgr= AliAnalysisAlien::LoadAnalysisManager(base);
204 if (!mgr) {
205 Error("GridTerminate", "Failed to load manager from %s",base.Data());
206 return false;
207 }
208 if (!name.EqualTo(mgr->GetName())) {
08275d05 209 Error("GridTerminate","Read manager %s is not %s",
210 mgr->GetName(),name.Data());
4a8dd820 211 return false;
212 }
213 Info("GridTerminate","Loaded analysis manager");
214
1de8812e 215 // If we do a local merge, do not do any else
216 if (local) return true;
217
218 return LoadHandler(name);
219}
220
221/**
222 * Submit the terminate job
223 *
224 * @param name Name of the job
225 * @param libs Libraries to load (space separated string)
226 * @param pars PARs to load (space separated string)
227 * @param srcs Sources to load (space separated string)
228 * @param local If true, run local terminate job on already
229 * merged and downloaded files.
230 * @param localLibsNotPar if @a local is true and this is true, then
231 * we load the corresponding locally compiled
232 * library for each specified PAR file.
233 *
234 * @return true on success
235 */
236Bool_t GridTerminate(const TString& name,
237 const TString& libs,
238 const TString& pars,
239 const TString& srcs,
240 Bool_t local=false,
241 Bool_t localLibsNotPar=true)
242{
243 if (!Setup(name, libs, pars, srcs, local, localLibsNotPar)) return false;
4a8dd820 244
245 // Run the terminate job
0e854b8e 246 Info("GridTerminate","Starting terminate job - %s", local ? "locally" : "on the grid");
08275d05 247
1de8812e 248 AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
249 if (!local) {
0e854b8e 250
251 AliAnalysisAlien* handler = static_cast<AliAnalysisAlien*>(mgr->GetGridHandler());
252 if (!handler) {
253 Error("GridTerminate", "Manager does now have an AliEn handler");
254 return false;
255 }
1de8812e 256 if (mgr->StartAnalysis("grid") < 0) return false;
08275d05 257
1de8812e 258 std::ofstream outJobs(Form("%s_merge.jobid", mgr->GetName()));
259 outJobs << handler->GetGridJobIDs() << std::endl;
260 outJobs.close();
261
262 std::ofstream outStages(Form("%s_merge.stage", mgr->GetName()));
263 outStages << handler->GetGridStages() << std::endl;
264 outStages.close();
265
266 return true;
267 }
268
269 // mgr->SetDebugLevel(2);
270 mgr->SetSkipTerminate(false);
0e854b8e 271 TTree* dummy = 0;
1de8812e 272 if (mgr->StartAnalysis("gridterminate", dummy, -1, 0) < 0) return false;
273
4a8dd820 274 return true;
275}
1de8812e 276
4a8dd820 277//
278// EOF
279//
280