]>
Commit | Line | Data |
---|---|---|
4a8dd820 | 1 | /** |
2 | * @file Terminate.C | |
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 | * | |
9 | */ | |
10 | /** | |
11 | * Load a library | |
12 | * | |
13 | * @param libName Library name | |
14 | * | |
15 | * @return true on success | |
16 | */ | |
17 | Bool_t LoadLib(const char* libName) | |
18 | { | |
19 | if (gSystem->Load(libName) < 0) { | |
20 | Error("GridTerminate", "Failed to load library %s",libName); | |
21 | return false; | |
22 | } | |
23 | Info("GridTerminate","Loaded library %s",libName); | |
24 | return true; | |
25 | } | |
26 | /** | |
27 | * Load a PAR | |
28 | * | |
29 | * @param parName PAR file name | |
30 | * | |
31 | * @return true on success | |
32 | */ | |
33 | Bool_t LoadPar(const char* parName) | |
34 | { | |
35 | if (!AliAnalysisAlien::SetupPar(parName)) { | |
36 | Error("GridTerminate","Failed to load PAR %s",parName); | |
37 | return false; | |
38 | } | |
39 | Info("GridTerminate","Loaded package %s",parName); | |
40 | return true; | |
41 | } | |
42 | /** | |
43 | * Submit the terminate job | |
44 | * | |
45 | * @param name Name of the job | |
46 | * @param libs Libraries to load (space separated string) | |
47 | * @param pars PARs to load (space separated string) | |
48 | * @param srcs Sources to load (space separated string) | |
49 | * | |
50 | * @return true on success | |
51 | */ | |
52 | Bool_t GridTerminate(const TString& name, | |
53 | const TString& libs, | |
54 | const TString& pars, | |
55 | const TString& srcs) | |
56 | { | |
57 | // Load basic ROOT libraries | |
58 | gSystem->AddDynamicPath("/usr/lib"); | |
59 | if (gSystem->Load("libTree.so") < 0) return false; | |
60 | if (gSystem->Load("libGeom.so") < 0) return false; | |
61 | if (gSystem->Load("libVMC.so") < 0) return false; | |
62 | if (gSystem->Load("libPhysics.so") < 0) return false; | |
63 | if (gSystem->Load("libMinuit.so") < 0) return false; | |
64 | ||
65 | // Load basic AliROOT libraries | |
66 | if (gSystem->Load("libSTEERBase") < 0) return false; | |
67 | if (gSystem->Load("libESD") < 0) return false; | |
68 | if (gSystem->Load("libAOD") < 0) return false; | |
69 | if (gSystem->Load("libANALYSIS") < 0) return false; | |
70 | if (gSystem->Load("libOADB") < 0) return false; | |
71 | if (gSystem->Load("libANALYSISalice") < 0) return false; | |
72 | ||
73 | // Load libraries | |
74 | TObjArray* libsArray = libs.Tokenize(" "); | |
75 | TObjString* lib = 0; | |
76 | TIter nextLib(libsArray); | |
77 | while ((lib = static_cast<TObjString*>(nextLib()))) { | |
78 | const TString& libName = lib->String(); | |
79 | if (libName.Contains("libSTEERBase") || | |
80 | libName.Contains("libESD") || | |
81 | libName.Contains("libAOD") || | |
82 | libName.Contains("libANALYSIS") || | |
83 | libName.Contains("libOADB") || | |
84 | libName.Contains("libANALYSISalice")) continue; | |
85 | if (!libName.Contains(".so")) continue; | |
86 | if (!LoadLib(libName.Data())) return false; | |
87 | } | |
88 | libsArray.Delete(); | |
89 | ||
90 | // Load packages | |
91 | TObjArray* parArray = pars.Tokenize(" "); | |
92 | TObjString* par = 0; | |
93 | TIter nextPar(parArray); | |
94 | while ((par = static_cast<TObjString*>(nextPar()))) { | |
95 | TString parName(par->String()); | |
96 | if (parName.EndsWith(".par")) parName.ReplaceAll(".par", ""); | |
97 | if (parName.Contains("STEERBase") || | |
98 | parName.Contains("ESD") || | |
99 | parName.Contains("AOD") || | |
100 | parName.Contains("ANALYSIS") || | |
101 | parName.Contains("OADB") || | |
102 | parName.Contains("ANALYSISalice")) continue; | |
103 | if (!LoadPar(parName.Data())) return false; | |
104 | } | |
105 | ||
106 | // Load sources | |
107 | TObjArray* srcArray = srcs.Tokenize(" "); | |
108 | TObjString* src = 0; | |
109 | TIter nextSrc(srcArray); | |
110 | while ((src = static_cast<TObjString*>(nextSrc()))) { | |
111 | const TString& srcName = src->String(); | |
112 | gROOT->ProcessLine(Form(".L %s+g", srcName.Data())); | |
113 | } | |
114 | ||
115 | // Load the analysis manager from file | |
116 | TString base(name); | |
117 | base.Append(".root"); | |
118 | if (gSystem->AccessPathName(base.Data())) { | |
119 | // Couldn't read from current directory, try sub-dir | |
120 | TString sub(gSystem->ConcatFileName(name, base)); | |
121 | if (gSystem->AccessPathName(sub)) { | |
122 | Error("GridTerminate","Couldn't find manager file %s",base.Data()); | |
123 | return false; | |
124 | } | |
125 | base = sub; | |
126 | } | |
127 | gEnv->SetValue("XSec.GSI.DelegProxy", "2"); | |
128 | AliAnalysisManager* mgr= AliAnalysisAlien::LoadAnalysisManager(base); | |
129 | if (!mgr) { | |
130 | Error("GridTerminate", "Failed to load manager from %s",base.Data()); | |
131 | return false; | |
132 | } | |
133 | if (!name.EqualTo(mgr->GetName())) { | |
134 | Error("GridTerminate","Read manager %s is not %s",mgr->GetName(),name.Data()); | |
135 | return false; | |
136 | } | |
137 | Info("GridTerminate","Loaded analysis manager"); | |
138 | ||
139 | // Load plugin | |
140 | TFile* plug = TFile::Open(Form("%s_plugin.root",name.Data()),"READ"); | |
141 | if (!plug) { | |
142 | Error("GridTerminate","Failed to open %s_plugin.root",name.Data()); | |
143 | return false; | |
144 | } | |
145 | AliAnalysisAlien* handler = | |
146 | static_cast<AliAnalysisAlien*>(plug->Get("plugin")); | |
147 | if (!handler) { | |
148 | Error("GridTerminate","Failed to load plugin"); | |
149 | return false; | |
150 | } | |
151 | Info("GridTerminate","Setting grid handler"); | |
152 | handler->SetRunMode("terminate"); | |
153 | mgr->SetGridHandler(handler); | |
154 | ||
155 | // Run the terminate job | |
156 | Info("GridTerminate","Starting terminate job"); | |
157 | if (mgr->StartAnalysis("grid") < 0) return false; | |
158 | // Info("GridTerminate","Job IDs: %s",handler->GetGridJobIDs().Data()); | |
159 | return true; | |
160 | } | |
161 | // | |
162 | // EOF | |
163 | // | |
164 |