]>
Commit | Line | Data |
---|---|---|
922688c0 | 1 | #ifndef AliRsnUtils_cxx |
2 | #define AliRsnUtils_cxx | |
3 | ||
4 | class AliRsnUtils | |
5 | { | |
6 | public: | |
5eb970a4 | 7 | enum EType { |
922688c0 | 8 | kLocal = 0, |
9 | kProof, | |
10 | kAlien, | |
11 | kLastIndex | |
12 | }; | |
13 | ||
5eb970a4 | 14 | enum EDataType { |
922688c0 | 15 | kTxt = 0, |
16 | kDataSet, | |
17 | kXmlCollection, | |
5eb970a4 | 18 | kXmlCollectionTag, |
922688c0 | 19 | kDataLastIndex |
20 | }; | |
21 | ||
22 | AliRsnUtils(EType type, TString where, TString reset = "", TString rootVer = ""); | |
5eb970a4 | 23 | AliRsnUtils(EType type, Bool_t shouldRun = kTRUE, Bool_t shouldCopy = kTRUE,TAlienJDL*jdl=0); |
922688c0 | 24 | ~AliRsnUtils() {} |
25 | ||
26 | Bool_t Connect(); | |
5eb970a4 | 27 | Bool_t CleanPackages(TString pars = "all"); |
28 | Bool_t LoadPars(TString pars = "STEERBase:ESD:AOD:ANALYSIS:ANALYSISalice:PWG2resonances",Bool_t loadParsLocaly=kTRUE); | |
922688c0 | 29 | Bool_t SetInputData(EDataType type = kTxt, TString source = "ESD.txt", TString treeName = "esdTree", |
30 | TString port = "", Int_t numfiles = 1000000, Int_t filesSkip = 0); | |
31 | Bool_t Run(TString macro, Long64_t numEvents = 1, Long64_t numEventsSkip = 0); | |
32 | ||
33 | void Print(); | |
34 | ||
35 | void PrintInfoString(TString s); | |
36 | void PrintWarningString(TString s); | |
37 | void PrintErrorString(TString s); | |
38 | ||
39 | Bool_t IsConnected() const { return fIsConnected; } | |
40 | ||
41 | void ShouldCopy(const Bool_t& theValue) { fShouldCopy = theValue; } | |
42 | ||
5eb970a4 | 43 | void SetAlienRunFile(const TString& theValue) { fAlienRunFile = theValue; } |
922688c0 | 44 | |
45 | void AddFilesToAlien(const TString& theValue); | |
46 | ||
47 | void SetAlienProjectDir(const TString& theValue) { fAlienProjectDir = theValue; } | |
48 | TString GetAlienProjectDir() const { return fAlienProjectDir; } | |
49 | ||
5eb970a4 | 50 | TAlienJDL* SetJDL(TAlienJDL*jdl) const { fJDL= jdl;} |
922688c0 | 51 | TAlienJDL* GetJDL() const; |
52 | ||
53 | void ShouldRunAlienJob(const Bool_t& theValue) { fShouldRunAlienJob = theValue; } | |
54 | ||
5eb970a4 | 55 | TString GetTagTypeFromTreeName(TString treeName); |
56 | ||
57 | void SetAlienProjectDirSE(TString se="ALICE::CERN::SE") { fAlienProjectDirSE = se; }; | |
58 | ||
59 | void DoMixing(Bool_t doMix=kTRUE) { fDoMixing = doMix; } | |
922688c0 | 60 | |
61 | private: | |
62 | ||
63 | EType fCurrentType; // current analysis type | |
64 | EDataType fCurrentDataType; // current data type | |
5eb970a4 | 65 | Bool_t fDoMixing; // flag if we will use mixing (AliAnalysisTaskME) |
922688c0 | 66 | Bool_t fIsConnected; // flag if we are connected |
67 | Bool_t fShouldEnd; // flag if macro should be terminated(in case error) | |
68 | TString fConnectInfo[3]; // connection info (all 3 are use in proof mode) | |
69 | TString fDataInfo[kLastIndex]; // data info | |
70 | TString fTreeName; // tree name | |
71 | TString fParNames; // pars name | |
72 | TChain* fChain; // chain which will be processed | |
73 | ||
74 | // AliEn Part | |
75 | TString fAlienProjectDir; // alien Project directory | |
5eb970a4 | 76 | TString fAlienProjectDirSE; // alien Project directory Storage Element |
922688c0 | 77 | TString fAlienOutputDir; // alien output directory |
78 | TString fAlienRunFile; // run file name (default is AliRsnAlien.C) | |
79 | TString fFilesToAlien; // list of files to copy to alien additional to | |
5eb970a4 | 80 | |
922688c0 | 81 | // pars. for example (PWG2resonances.C) |
82 | TAlienJDL* fJDL; // jdl class which submits job | |
83 | Bool_t fShouldCopy; // flag if files should be copied to alien | |
84 | Bool_t fShouldRunAlienJob; // flag if job will be submited | |
85 | ||
86 | // connect functions | |
87 | Bool_t ConnectProof(); | |
88 | Bool_t ConnectAliEn(); | |
89 | ||
90 | // clean functions | |
91 | Bool_t CleanParsLocal(TString pars); | |
92 | Bool_t CleanParsProof(TString pars); | |
93 | ||
94 | // load functions | |
95 | Bool_t LoadParsLocal(TString pars); | |
96 | Bool_t LoadParsProof(TString pars); | |
97 | ||
98 | // process par | |
99 | Bool_t ProcessPAR(TString pars); | |
100 | ||
101 | // gets chain from TXT file | |
102 | TChain* CreateChainFromTXT(TString chainName = "esdTree", TString aDataDir = "ESDfiles.txt",Int_t aRuns = 200, Int_t offset = 0, TString portNum = "1094"); | |
103 | ||
104 | // gets chain from xml collection file | |
105 | TChain* CreateChainFromCollection(TString chainName = "esdTree", TString collname = "my.xml", Int_t maxFiles = 1000, Int_t skipfiles = 0); | |
106 | ||
5eb970a4 | 107 | // gets chain from xml collection file |
108 | TChain* CreateChainFromCollectionTag(TString chainName = "ESD", TString collname = "tag.xml"); | |
922688c0 | 109 | |
110 | // copy to AliEn function | |
111 | Bool_t CopyFilesToAliEn(); | |
112 | ||
113 | // generates macro which will be run on alien | |
114 | Bool_t CreateRunAliEnFile(TString macro); | |
115 | ||
116 | // runs alien job | |
117 | Bool_t RunAliEnJob(); | |
118 | ||
119 | // copies one file to alien | |
120 | Bool_t CopyFileToAlien(TString file,Bool_t overwrite = kTRUE); | |
121 | ||
122 | ClassDef(AliRsnUtils, 1) | |
123 | }; | |
124 | ||
125 | #endif | |
126 | ||
127 | ClassImp(AliRsnUtils) | |
128 | ||
129 | //________________________________________________________________________ | |
130 | AliRsnUtils::AliRsnUtils(EType type, TString where, TString reset, TString rootVer) : | |
131 | fCurrentType(type), | |
132 | fCurrentDataType(kTxt), | |
5eb970a4 | 133 | fDoMixing(kFALSE), |
922688c0 | 134 | fIsConnected(kFALSE), |
135 | fShouldEnd(kFALSE), | |
136 | fChain(0), | |
5eb970a4 | 137 | fAlienProjectDirSE("ALICE::CERN::SE"), |
922688c0 | 138 | fJDL(0), |
139 | fShouldCopy(kTRUE), | |
140 | fShouldRunAlienJob(kTRUE), | |
141 | fAlienRunFile("AliRsnAlien.C") | |
142 | { | |
143 | // | |
144 | // Constructor | |
145 | // | |
146 | // setting up parameters | |
147 | fConnectInfo[0] = where; | |
148 | fConnectInfo[1] = reset; | |
149 | fConnectInfo[2] = rootVer; | |
150 | ||
151 | // connecting | |
152 | Connect(); | |
153 | } | |
154 | ||
155 | //________________________________________________________________________ | |
5eb970a4 | 156 | AliRsnUtils::AliRsnUtils(EType type, Bool_t shouldRun, Bool_t shouldCopy,TAlienJDL*jdl) : |
922688c0 | 157 | fCurrentType(type), |
158 | fCurrentDataType(kTxt), | |
5eb970a4 | 159 | fDoMixing(kFALSE), |
922688c0 | 160 | fIsConnected(kFALSE), |
161 | fShouldEnd(kFALSE), | |
162 | fChain(0), | |
5eb970a4 | 163 | fJDL(jdl), |
922688c0 | 164 | fShouldRunAlienJob(shouldRun), |
165 | fShouldCopy(shouldCopy), | |
166 | fAlienRunFile("AliRsnAlien.C") | |
167 | { | |
168 | ||
169 | // connecting | |
170 | Connect(); | |
171 | } | |
172 | ||
173 | //________________________________________________________________________ | |
174 | void AliRsnUtils::PrintInfoString(const char *msg) | |
175 | { | |
176 | // prints message as Info | |
177 | Info("", msg); | |
178 | } | |
179 | ||
180 | //________________________________________________________________________ | |
181 | void AliRsnUtils::PrintWarningString(const char *msg) | |
182 | { | |
183 | // prints message as Warning | |
184 | Warning("", msg); | |
185 | } | |
186 | ||
187 | //________________________________________________________________________ | |
188 | void AliRsnUtils::PrintErrorString(const char *msg) | |
189 | { | |
190 | // prints message as Error | |
191 | Error("", msg); | |
192 | } | |
193 | ||
194 | //________________________________________________________________________ | |
195 | Bool_t AliRsnUtils::Connect() | |
196 | { | |
197 | // connect to local, proof, alien if needed | |
5eb970a4 | 198 | switch (fCurrentType) { |
922688c0 | 199 | case kLocal: |
200 | PrintInfoString("Running Local..."); | |
201 | fIsConnected = kTRUE; | |
202 | break; | |
203 | case kProof: | |
204 | PrintInfoString(Form("Running Proof at %s...", fConnectInfo[0].Data())); | |
205 | fIsConnected = ConnectProof(); | |
5eb970a4 | 206 | if (!IsConnected()) { |
922688c0 | 207 | PrintErrorString(Form("Not connected to %s !!!", fConnectInfo[0].Data())); |
208 | } | |
209 | break; | |
210 | case kAlien: | |
211 | PrintInfoString(Form("Running AliEn...")); | |
212 | fIsConnected = ConnectAliEn(); | |
5eb970a4 | 213 | if (!IsConnected()) { |
922688c0 | 214 | PrintErrorString("Not connected to AliEn !!!"); |
215 | } | |
216 | break; | |
217 | default: | |
218 | PrintErrorString("Wrong type"); | |
219 | fIsConnected = kFALSE; | |
220 | return kFALSE; | |
221 | } | |
222 | ||
5eb970a4 | 223 | if (!IsConnected()) { |
922688c0 | 224 | PrintErrorString("Connection failed. Aborting..."); |
225 | return kFALSE; | |
226 | } | |
227 | ||
228 | return kTRUE; | |
229 | } | |
230 | ||
231 | //________________________________________________________________________ | |
232 | Bool_t AliRsnUtils::CleanPackages(TString pars) | |
233 | { | |
5eb970a4 | 234 | |
922688c0 | 235 | // cleans packages |
236 | if (fShouldEnd) return kFALSE; | |
5eb970a4 | 237 | switch (fCurrentType) { |
922688c0 | 238 | case kLocal: |
922688c0 | 239 | return CleanParsLocal(pars); |
240 | break; | |
241 | case kProof: | |
242 | if (!IsConnected()) return kFALSE; | |
243 | return CleanParsProof(pars); | |
244 | break; | |
245 | case kAlien: | |
246 | return kTRUE; | |
247 | break; | |
248 | default: | |
249 | PrintErrorString("Wrong type"); | |
250 | return kFALSE; | |
251 | } | |
252 | } | |
253 | ||
254 | //________________________________________________________________________ | |
5eb970a4 | 255 | Bool_t AliRsnUtils::LoadPars(TString pars,Bool_t loadParsLocaly) |
922688c0 | 256 | { |
257 | // loads par files | |
258 | if (fShouldEnd) return kFALSE; | |
5eb970a4 | 259 | switch (fCurrentType) { |
922688c0 | 260 | case kLocal: |
261 | if (!IsConnected()) return kFALSE; | |
262 | return LoadParsLocal(pars); | |
263 | break; | |
264 | case kProof: | |
265 | if (!IsConnected()) return kFALSE; | |
266 | return LoadParsProof(pars); | |
267 | break; | |
268 | case kAlien: | |
5eb970a4 | 269 | if (!pars.IsNull()) { |
922688c0 | 270 | fParNames = pars; |
271 | pars.ReplaceAll(":",".par:"); | |
272 | pars += ".par"; | |
273 | AddFilesToAlien(pars); | |
5eb970a4 | 274 | if (loadParsLocaly) |
275 | return LoadParsLocal(pars); | |
922688c0 | 276 | } |
277 | return kTRUE; | |
278 | break; | |
279 | default: | |
280 | PrintErrorString("Wrong type"); | |
281 | return kFALSE; | |
282 | } | |
283 | ||
284 | return kTRUE; | |
285 | } | |
286 | ||
287 | //________________________________________________________________________ | |
288 | Bool_t AliRsnUtils::SetInputData | |
289 | (EDataType type, TString source, TString treeName, TString port, Int_t numfiles, Int_t filesSkip) | |
290 | { | |
291 | // sets input which will be used in Run() function | |
292 | // | |
293 | ||
294 | fDataInfo[type] = source; | |
5eb970a4 | 295 | switch (type) { |
922688c0 | 296 | case kTxt: |
297 | fCurrentDataType = type; | |
298 | fChain = CreateChainFromTXT(treeName, fDataInfo[type], numfiles, filesSkip, port); | |
299 | if (!fChain) return kFALSE; | |
300 | return kTRUE; | |
301 | break; | |
302 | case kDataSet: | |
303 | fCurrentDataType = type; | |
304 | break; | |
305 | case kXmlCollection: | |
306 | fCurrentDataType = type; | |
5eb970a4 | 307 | fTreeName = treeName; |
308 | if (fCurrentType == AliRsnUtils::kAlien) return kTRUE; | |
922688c0 | 309 | if (fCurrentType == AliRsnUtils::kLocal) ConnectAliEn(); |
310 | fChain = CreateChainFromCollection(treeName, fDataInfo[type], numfiles, filesSkip); | |
5eb970a4 | 311 | break; |
312 | case kXmlCollectionTag: | |
313 | fCurrentDataType = type; | |
922688c0 | 314 | fTreeName = treeName; |
5eb970a4 | 315 | if (fCurrentType == AliRsnUtils::kAlien) return kTRUE; |
316 | if (fCurrentType == AliRsnUtils::kLocal) ConnectAliEn(); | |
317 | fDataInfo[type] = source; | |
318 | fChain = CreateChainFromCollectionTag(treeName, fDataInfo[type]); | |
319 | ||
922688c0 | 320 | break; |
321 | default: | |
322 | PrintErrorString("Wrong type"); | |
323 | return kFALSE; | |
324 | } | |
325 | ||
326 | return kTRUE; | |
327 | } | |
328 | ||
329 | //________________________________________________________________________ | |
330 | Bool_t AliRsnUtils::Run(TString macro, Long64_t numEvents, Long64_t numEventsSkip) | |
331 | { | |
332 | // runs job | |
5eb970a4 | 333 | if (fCurrentType == AliRsnUtils::kAlien) { |
334 | Bool_t returnBool = CreateRunAliEnFile(macro); | |
335 | if (returnBool == kFALSE) return kFALSE; | |
336 | returnBool = CopyFilesToAliEn(); | |
337 | if (returnBool == kFALSE) return kFALSE; | |
338 | returnBool = RunAliEnJob(); | |
339 | if (returnBool == kFALSE) return kFALSE; | |
340 | return kTRUE; | |
922688c0 | 341 | } |
342 | ||
343 | gROOT->LoadMacro(macro.Data()); | |
344 | macro.ReplaceAll(".C",""); | |
345 | AliAnalysisManager *mgr = (AliAnalysisManager *) gROOT->ProcessLine(Form("%s();", macro.Data())); | |
346 | ||
5eb970a4 | 347 | if (!mgr) return kFALSE; |
922688c0 | 348 | |
5eb970a4 | 349 | if (mgr->InitAnalysis()) { |
922688c0 | 350 | mgr->PrintStatus(); |
351 | ||
5eb970a4 | 352 | switch (fCurrentDataType) { |
922688c0 | 353 | case kTxt: |
354 | if (!fChain) PrintErrorString("fChain is null"); | |
355 | TString mode = "local"; | |
356 | if (fCurrentType == AliRsnUtils::kProof) mode="proof"; | |
5eb970a4 | 357 | if (fDoMixing) mode="mix"; |
358 | Info("AliRsnUtils::Run",Form("Running mgr->StartAnalysis(\"%s\",%p,%d,%d)",mode.Data(),fChain,numEvents,numEventsSkip)); | |
922688c0 | 359 | return mgr->StartAnalysis(mode, fChain,numEvents,numEventsSkip); |
360 | break; | |
361 | case kDataSet: | |
5eb970a4 | 362 | TString mode = "local"; |
363 | if (fCurrentType == AliRsnUtils::kProof) mode="proof"; | |
364 | if (fDoMixing) mode="mix"; | |
365 | Info("AliRsnUtils::Run",Form("Running mgr->StartAnalysis(\"%s\",\"%s\",%d,%d)",mode.Data(),fDataInfo[kDataSet].Data(),numEvents,numEventsSkip)); | |
366 | return mgr->StartAnalysis(mode, fDataInfo[kDataSet].Data(),numEvents,numEventsSkip); | |
922688c0 | 367 | break; |
368 | case kXmlCollection: | |
5eb970a4 | 369 | if (!fChain) { |
370 | PrintErrorString("fChain is null"); | |
371 | return kFALSE; | |
372 | } | |
373 | TString mode = "local"; | |
374 | if (fDoMixing) mode="mix"; | |
375 | Info("AliRsnUtils::Run",Form("Running mgr->StartAnalysis(\"%s\",%p,%d,%d)",mode.Data(),fChain,numEvents,numEventsSkip)); | |
376 | return mgr->StartAnalysis(mode, fChain,numEvents,numEventsSkip); | |
377 | break; | |
378 | case kXmlCollectionTag: | |
379 | if (!fChain) { | |
380 | PrintErrorString("fChain is null"); | |
381 | return kFALSE; | |
382 | } | |
383 | TString mode = "local"; | |
384 | if (fDoMixing) mode="mix"; | |
385 | Info("AliRsnUtils::Run",Form("Running mgr->StartAnalysis(\"%s\",%p,%d,%d)",mode.Data(),fChain,numEvents,numEventsSkip)); | |
386 | return mgr->StartAnalysis(mode, fChain,numEvents,numEventsSkip); | |
922688c0 | 387 | break; |
388 | default: | |
389 | PrintErrorString("Wrong type"); | |
390 | return kFALSE; | |
391 | ||
392 | } | |
393 | } | |
394 | return kTRUE; | |
395 | } | |
396 | ||
397 | //________________________________________________________________________ | |
398 | Bool_t AliRsnUtils::ConnectProof() | |
399 | { | |
5eb970a4 | 400 | // connects to proof |
401 | // | |
402 | // if one uses AliRsnUtils::kProof constructor | |
403 | // AliRsnUtils ( AliRsnUtils::kProof,TString where = "mvala@lxb6046.cern.ch | |
922688c0 | 404 | // " , TString reset = "RESET", TString rootVer = "HEADXYZ" ); |
405 | // | |
406 | // where : means where to connect | |
407 | // reset : "RESET" will do gProof->Reset(where.Data()); | |
408 | // rootVer : "HEADXYZ" will use different version of root, in this case "HEADXYZ" | |
409 | // | |
5eb970a4 | 410 | if (fConnectInfo[0].IsNull()) { |
922688c0 | 411 | PrintErrorString("Proof is empty!!!"); |
412 | return kFALSE; | |
413 | } | |
414 | ||
415 | if (!fConnectInfo[1].IsNull()) | |
416 | TProof::Reset(fConnectInfo[0].Data()); | |
417 | ||
418 | if (!fConnectInfo[2].IsNull()) | |
419 | TProof::Mgr(fConnectInfo[0].Data())->SetROOTVersion(fConnectInfo[2].Data()); | |
420 | ||
421 | return TProof::Open(fConnectInfo[0].Data()); | |
422 | } | |
423 | ||
424 | //________________________________________________________________________ | |
425 | Bool_t AliRsnUtils::ConnectAliEn() | |
426 | { | |
427 | // connects to alien | |
5eb970a4 | 428 | if (!gGrid) |
429 | TGrid::Connect("alien://"); | |
922688c0 | 430 | if (!gGrid) |
431 | return kFALSE; | |
432 | ||
433 | return kTRUE; | |
434 | } | |
435 | ||
436 | //________________________________________________________________________ | |
437 | Bool_t AliRsnUtils::CleanParsLocal(TString pars) | |
438 | { | |
439 | // just delete directories which are in pars variable | |
440 | // | |
441 | // pars = "STEERBase:ESD" | |
442 | // will delete STEERBase and ESD directories | |
443 | // | |
5eb970a4 | 444 | |
445 | if (pars.IsNull()) return kTRUE; | |
446 | ||
447 | if (!pars.CompareTo("all")) pars = fgPARS; | |
448 | ||
922688c0 | 449 | TObjArray* array = pars.Tokenize(":"); |
450 | TObjString *str; | |
451 | TString strr; | |
5eb970a4 | 452 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
453 | str = (TObjString *) array->At(i); | |
922688c0 | 454 | strr = str->GetString(); |
5eb970a4 | 455 | Info("",Form("Cleaning %s.par...",strr.Data())); |
922688c0 | 456 | gSystem->Exec(Form("rm -Rf %s/",strr.Data())); |
457 | } | |
458 | ||
459 | } | |
460 | ||
461 | //________________________________________________________________________ | |
462 | Bool_t AliRsnUtils::CleanParsProof(TString pars) | |
463 | { | |
464 | // clear par files in proof (divided by ":"). example "STEERBase:ESD" | |
465 | // will clear STEERBase.par and ESD.par | |
5eb970a4 | 466 | // if pars is ALL clears all packages |
922688c0 | 467 | |
5eb970a4 | 468 | if (pars.IsNull()) return kTRUE; |
922688c0 | 469 | |
5eb970a4 | 470 | if (!pars.CompareTo("all")) { |
471 | Info("",Form("Cleaning %s par files...",pars.Data())); | |
922688c0 | 472 | gProof->ClearPackages(); |
473 | return kTRUE; | |
474 | } | |
5eb970a4 | 475 | |
476 | TObjArray* array = (TObjArray*) pars.Tokenize(":"); | |
922688c0 | 477 | TObjString *str; |
478 | TString strr; | |
5eb970a4 | 479 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
922688c0 | 480 | str = (TObjString *) array->At(i); |
481 | strr = str->GetString(); | |
5eb970a4 | 482 | Info("",Form("Cleaning %s.par...",strr.Data())); |
922688c0 | 483 | gProof->ClearPackage(strr.Data()); |
484 | } | |
485 | ||
486 | return kTRUE; | |
487 | } | |
488 | ||
489 | //________________________________________________________________________ | |
490 | Bool_t AliRsnUtils::LoadParsLocal(TString pars) | |
491 | { | |
492 | // loads pars localy | |
493 | TObjArray* array = pars.Tokenize(":"); | |
494 | TObjString *str; | |
495 | TString strr; | |
5eb970a4 | 496 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
922688c0 | 497 | str = (TObjString *) array->At(i); |
498 | strr = str->GetString(); | |
5eb970a4 | 499 | if (!ProcessPAR(strr.Data())) { |
922688c0 | 500 | return kFALSE; |
501 | } | |
502 | } | |
503 | ||
504 | return kTRUE; | |
505 | } | |
506 | ||
507 | //________________________________________________________________________ | |
508 | Bool_t AliRsnUtils::LoadParsProof(TString pars) | |
509 | { | |
510 | // load pars on proof | |
511 | if (!IsConnected()) return kFALSE; | |
512 | ||
513 | TObjArray* array = pars.Tokenize(":"); | |
514 | TObjString *str; | |
515 | TString strr; | |
5eb970a4 | 516 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
922688c0 | 517 | if (fShouldEnd) return kFALSE; |
518 | str = (TObjString *) array->At(i); | |
519 | strr = str->GetString(); | |
520 | gSystem->Exec(Form("rm -Rf %s",strr.Data())); | |
5eb970a4 | 521 | if (gProof->UploadPackage(Form("%s.par", strr.Data()))) { |
922688c0 | 522 | PrintErrorString(Form("Error uploading %s package!!!",strr)); |
523 | fShouldEnd = kTRUE; | |
524 | return kFALSE; | |
525 | } | |
5eb970a4 | 526 | if (gProof->EnablePackage(strr)) { |
922688c0 | 527 | PrintErrorString(Form("Error loading %s package!!!",strr)); |
528 | fShouldEnd = kTRUE; | |
529 | return kFALSE; | |
530 | } | |
531 | fShouldEnd = kFALSE; | |
532 | } | |
533 | gProof->ShowEnabledPackages(); | |
534 | return kTRUE; | |
535 | } | |
536 | ||
537 | //________________________________________________________________________ | |
538 | void AliRsnUtils::Print() | |
539 | { | |
540 | // prints number of events | |
541 | if (fChain) | |
542 | PrintInfoString(Form("Number of events %d",fChain->GetEntries())); | |
543 | } | |
544 | ||
545 | //________________________________________________________________________ | |
546 | Bool_t AliRsnUtils::CopyFilesToAliEn() | |
547 | { | |
548 | // copy needed files to alien | |
549 | if (!IsConnected()) return kFALSE; | |
550 | ||
551 | if (!fShouldCopy) return kTRUE; | |
552 | ||
5eb970a4 | 553 | if (fAlienProjectDir.IsNull()) { |
922688c0 | 554 | fAlienProjectDir = Form("%sRSNTASK/01",gGrid->GetHomeDirectory()); |
555 | PrintWarningString(Form("Alien Project directory is not defined.Setting \"%s\" as project directory ...",fAlienProjectDir.Data())); | |
556 | } | |
557 | gGrid->Rmdir(Form("%s",fAlienProjectDir.Data())); | |
558 | gGrid->Mkdir(Form("%s",fAlienProjectDir.Data()),"-p"); | |
559 | ||
560 | ||
561 | TObjArray* array = fFilesToAlien.Tokenize(":"); | |
562 | TObjString *str; | |
563 | TString strr; | |
5eb970a4 | 564 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
922688c0 | 565 | str = (TObjString *) array->At(i); |
566 | strr = str->GetString(); | |
567 | if (!CopyFileToAlien(Form("%s",strr.Data()) ,kFALSE)) return kFALSE; | |
568 | } | |
5eb970a4 | 569 | if (!CopyFileToAlien(fAlienRunFile.Data(),kFALSE)) return kFALSE; |
922688c0 | 570 | |
571 | return kTRUE; | |
572 | } | |
573 | ||
574 | //________________________________________________________________________ | |
575 | Bool_t AliRsnUtils::CreateRunAliEnFile(TString macro) | |
576 | { | |
577 | // generated AliRsnAlien.C macro which will be executed in alien | |
578 | if (!IsConnected()) return kFALSE; | |
579 | TString file = fAlienRunFile.Data(); | |
580 | ofstream outFile(file.Data()); | |
5eb970a4 | 581 | if (!outFile) { |
922688c0 | 582 | PrintErrorString(Form("Cannot open file %s",file.Data())); |
583 | return kFALSE; | |
584 | } | |
585 | file.ReplaceAll(".C",""); | |
586 | TString tmp; | |
587 | tmp = Form("Int_t %s() {",file.Data()); | |
588 | outFile << tmp.Data() << endl; | |
589 | ||
5eb970a4 | 590 | |
591 | ||
592 | tmp = "\tTStopwatch timer;"; | |
922688c0 | 593 | outFile << tmp.Data() << endl; |
594 | ||
5eb970a4 | 595 | tmp = "\ttimer.Start();\n"; |
922688c0 | 596 | outFile << tmp.Data() << endl; |
597 | ||
5eb970a4 | 598 | tmp = "\tBool_t returnValue = kTRUE;\n"; |
922688c0 | 599 | outFile << tmp.Data() << endl; |
600 | ||
5eb970a4 | 601 | tmp = "\tgROOT->LoadMacro (\"PWG2resonancesUtils.C\");\n"; |
922688c0 | 602 | outFile << tmp.Data() << endl; |
603 | ||
5eb970a4 | 604 | tmp = "\tAliRsnUtils *utils = new AliRsnUtils (AliRsnUtils::kLocal);\n"; |
922688c0 | 605 | outFile << tmp.Data() << endl; |
606 | ||
5eb970a4 | 607 | tmp = Form("\treturnValue = utils->LoadPars(\"%s\");",fParNames.Data()); |
608 | outFile << tmp.Data() << endl; | |
609 | ||
610 | tmp = "\tif (returnValue == kFALSE) {\n"; | |
611 | tmp += "\t\tError(\"\",\"Error in utils->LoadPars()\");\n"; | |
612 | tmp += "\t\ttimer.Stop();\n"; | |
613 | tmp += "\t\ttimer.Print();\n"; | |
614 | tmp += "\t\treturn -1;\n"; | |
615 | tmp += "\t}\n"; | |
616 | outFile << tmp.Data() << endl; | |
617 | ||
618 | TString collTypeName; | |
619 | if (fCurrentDataType == kXmlCollection) { | |
620 | collTypeName = "AliRsnUtils::kXmlCollection"; | |
621 | } else if (fCurrentDataType == kXmlCollectionTag) { | |
622 | collTypeName = "AliRsnUtils::kXmlCollectionTag"; | |
623 | } else { | |
624 | Error("",Form("File %s was not created correctly!!!!!!!",macro.Data())); | |
625 | return kFALSE; | |
626 | } | |
627 | ||
628 | tmp = Form("\treturnValue = utils->SetInputData(%s,\"wn.xml\",\"%s\");",collTypeName.Data(),fTreeName.Data()); | |
629 | outFile << tmp.Data() << endl; | |
630 | ||
631 | tmp = "\tif (returnValue == kFALSE) {\n"; | |
632 | tmp += "\t\tError(\"\",\"Error in utils->SetInputData()\");\n"; | |
633 | tmp += "\t\ttimer.Stop();\n"; | |
634 | tmp += "\t\ttimer.Print();\n"; | |
635 | tmp += "\t\treturn -1;\n"; | |
636 | tmp += "\t}\n"; | |
637 | outFile << tmp.Data() << endl; | |
638 | ||
639 | tmp = Form("\treturnValue = utils->Run(\"%s\",10000000);",macro.Data()); | |
640 | outFile << tmp.Data() << endl; | |
641 | ||
642 | tmp = "\tif (returnValue == kFALSE) {\n"; | |
643 | tmp += "\t\tError(\"\",\"Error in utils->Run()\");\n"; | |
644 | tmp += "\t\ttimer.Stop();\n"; | |
645 | tmp += "\t\ttimer.Print();\n"; | |
646 | tmp += "\t\treturn -1;\n"; | |
647 | tmp += "\t}\n"; | |
648 | outFile << tmp.Data() << endl; | |
649 | ||
650 | tmp = "\ttimer.Stop();"; | |
651 | outFile << tmp.Data() << endl; | |
652 | ||
653 | tmp = "\ttimer.Print();\n"; | |
654 | outFile << tmp.Data() << endl; | |
655 | ||
656 | tmp = Form("\treturn 0;",file.Data()); | |
922688c0 | 657 | outFile << tmp.Data() << endl; |
658 | ||
659 | tmp = Form("}",file.Data()); | |
660 | outFile << tmp.Data() << endl; | |
661 | ||
662 | outFile.close(); | |
663 | ||
664 | return kTRUE; | |
665 | } | |
666 | ||
667 | //________________________________________________________________________ | |
668 | Bool_t AliRsnUtils::RunAliEnJob() | |
669 | { | |
670 | // runs alien job | |
671 | ||
672 | fJDL->SetArguments(Form("%s",fAlienRunFile.Data())); | |
673 | ||
674 | TObjArray* array = fFilesToAlien.Tokenize(":"); | |
675 | TObjString *str; | |
676 | TString strr; | |
5eb970a4 | 677 | for (Int_t i=0;i< array->GetEntriesFast();i++) { |
922688c0 | 678 | str = (TObjString *) array->At(i); |
679 | strr = str->GetString().Data(); | |
680 | fJDL->AddToInputSandbox(Form("LF:%s/%s",fAlienProjectDir.Data(),strr.Data())) ; | |
681 | } | |
682 | fJDL->AddToInputSandbox(Form("LF:%s/%s",fAlienProjectDir.Data(), fAlienRunFile.Data())) ; | |
683 | ||
684 | if (fShouldRunAlienJob == kFALSE) | |
685 | PrintInfoString(Form("\n%s",fJDL->Generate().Data())); | |
5eb970a4 | 686 | else { |
922688c0 | 687 | TGridJob* job = gGrid->Submit(fJDL->Generate()); |
5eb970a4 | 688 | if (job == 0) { |
922688c0 | 689 | Error("SubmitTest", "submitting failed"); |
690 | return kFALSE; | |
691 | } | |
692 | } | |
693 | return kTRUE; | |
694 | } | |
695 | ||
696 | //________________________________________________________________________ | |
697 | Bool_t AliRsnUtils::CopyFileToAlien(TString file, Bool_t overwrite) | |
698 | { | |
699 | // copy one file to alien | |
5eb970a4 | 700 | if (fAlienProjectDir.IsNull()) { |
922688c0 | 701 | PrintErrorString("AliEn project directory does not exist..."); |
702 | return kFALSE; | |
703 | } | |
704 | ||
705 | if (overwrite) | |
706 | gGrid->Rm(Form("alien://%s/%s",fAlienProjectDir.Data(),file.Data())); | |
707 | ||
708 | Info("",Form("Copy from %s to %s",file.Data(),Form("alien:://%s/%s",fAlienProjectDir.Data(),file.Data()))); | |
709 | ||
710 | ||
711 | return TFile::Cp(file.Data(),Form("alien:://%s/%s",fAlienProjectDir.Data(),file.Data())); | |
712 | } | |
713 | ||
714 | //________________________________________________________________________ | |
715 | Bool_t AliRsnUtils::ProcessPAR(TString pars) | |
716 | { | |
717 | // process one par | |
718 | ||
719 | TString pararchivenameS(pars); | |
720 | PrintInfoString(Form("==== Processing %s package LOCAL =====",pararchivenameS.Data())); | |
721 | ||
5eb970a4 | 722 | if (gSystem->AccessPathName(Form("%s.par",pararchivenameS.Data()))) { |
922688c0 | 723 | PrintErrorString(Form("File %s.par was not found !!!",pararchivenameS.Data())); |
724 | return kFALSE; | |
725 | } | |
726 | ||
727 | gROOT->ProcessLine(Form(".! tar xzf %s.par", pararchivenameS.Data())); | |
728 | TString ocwd = gSystem->WorkingDirectory(); | |
729 | // gSystem->ChangeDirectory(Form("%s/%s",dirname,pararchivenameS.Data())); | |
730 | gSystem->ChangeDirectory(Form("%s",pararchivenameS.Data())); | |
731 | // check for BUILD.sh and execute | |
5eb970a4 | 732 | if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { |
922688c0 | 733 | PrintInfoString(Form("==== Building %s package =====",pararchivenameS.Data())); |
5eb970a4 | 734 | if (gSystem->Exec("PROOF-INF/BUILD.sh")) { |
922688c0 | 735 | EPrintErrorString("Cannot Build the PAR Archive! - Abort!"); |
736 | return kFALSE; | |
737 | } | |
738 | } | |
739 | // check for SETUP.C and execute | |
5eb970a4 | 740 | if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { |
922688c0 | 741 | PrintInfoString(Form("==== Running SETUP.C of %s package =====",pararchivenameS.Data())); |
742 | gROOT->Macro("PROOF-INF/SETUP.C"); | |
5eb970a4 | 743 | if (gROOT->Macro("PROOF-INF/SETUP.C")) { |
922688c0 | 744 | PrintErrorString("Cannot SETUP the PAR Archive! - Abort!"); |
745 | return kFALSE; | |
746 | } | |
747 | } | |
748 | ||
749 | gSystem->ChangeDirectory(ocwd); | |
750 | ||
751 | PrintInfoString(Form("==== All OK for %s package LOCAL =====",pararchivenameS.Data())); | |
752 | return kTRUE; | |
753 | ||
754 | } | |
755 | ||
756 | //________________________________________________________________________ | |
757 | TChain* AliRsnUtils::CreateChainFromTXT | |
758 | (TString chainName, TString aDataDir, Int_t aRuns, Int_t offset, TString portNum) | |
759 | { | |
760 | // creates chain of files in a given directory or file containing a list. | |
761 | // In case of directory the structure is expected as: | |
762 | // <aDataDir>/<dir0>/AliESDs.root | |
763 | // <aDataDir>/<dir1>/AliESDs.root | |
764 | // ... | |
765 | ||
766 | PrintInfoString(Form("Loading the chain %s", chainName.Data())); | |
5eb970a4 | 767 | if (aDataDir.IsNull()) { |
922688c0 | 768 | PrintErrorString(Form("aDataDir not found.")); |
769 | return kFALSE; | |
770 | } | |
771 | ||
772 | Long_t id, size, flags, modtime; | |
5eb970a4 | 773 | if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) { |
922688c0 | 774 | PrintErrorString(Form("%s not found.", aDataDir.Data())); |
775 | return kFALSE; | |
776 | } | |
777 | ||
778 | TChain *chain = new TChain(chainName.Data()); | |
779 | ||
780 | // Open the input stream | |
781 | ifstream fileIn; | |
782 | fileIn.open(aDataDir.Data()); | |
783 | ||
784 | Int_t count = 0; | |
785 | ||
786 | // Read the input list of files and add them to the chain | |
787 | TString esdfile; | |
5eb970a4 | 788 | while (fileIn.good()) { |
922688c0 | 789 | fileIn >> esdfile; |
790 | if (esdfile.IsNull()) continue; | |
5eb970a4 | 791 | if (offset > 0) { |
922688c0 | 792 | --offset; |
793 | continue; | |
794 | } | |
795 | if (count++ == aRuns) break; | |
796 | ||
797 | // add esd file | |
798 | TString esdFileWithPort(esdfile); | |
799 | esdFileWithPort.ReplaceAll("root://",""); | |
5eb970a4 | 800 | if (!portNum.IsNull()) |
801 | esdFileWithPort.ReplaceAll("//",Form(":%s//",portNum.Data())); | |
802 | PrintInfoString (Form ("Adding root://%s",esdFileWithPort.Data())); | |
922688c0 | 803 | chain->Add(Form("root://%s",esdFileWithPort.Data())); |
804 | } | |
805 | fileIn.close(); | |
806 | ||
807 | PrintInfoString(Form("Loading the chain %s DONE.", chainName.Data())); | |
808 | return chain; | |
809 | } | |
810 | ||
811 | //________________________________________________________________________ | |
812 | TChain* AliRsnUtils::CreateChainFromCollection | |
813 | (TString chainName, TString collname, Int_t maxFiles, Int_t skipfiles) | |
814 | { | |
815 | // gets chain from xml collection file | |
816 | ||
817 | TChain *chain = new TChain(chainName.Data()); | |
818 | TAlienCollection *myCollection = TAlienCollection::Open(collname.Data()); | |
5eb970a4 | 819 | if (!myCollection) { |
922688c0 | 820 | PrintErrorString(Form("Cannot create an AliEn collection from %s", collectionFile)); |
821 | return 0x0; | |
822 | } | |
823 | ||
824 | // initialize a counter to check the number of read files | |
825 | Int_t nfiles = 0; | |
826 | TString filename; | |
827 | myCollection->Reset(); | |
5eb970a4 | 828 | while (myCollection->Next()) { |
829 | if (skipfiles > 0) { | |
830 | --skipfiles; | |
831 | continue; | |
832 | } | |
922688c0 | 833 | if (maxFiles > 0 && nfiles >= maxFiles) break; |
834 | // char fileName[255]; | |
835 | // sprintf(fileName, "%s", myCollection->GetTURL("")); | |
836 | filename = myCollection->GetTURL(""); | |
837 | // PrintInfoString(Form("Adding file '%s'", filename.Data())); | |
838 | chain->Add(filename.Data()); | |
839 | nfiles++; | |
840 | } | |
841 | ||
842 | return chain; | |
843 | } | |
844 | ||
5eb970a4 | 845 | //________________________________________________________________________ |
846 | TChain* AliRsnUtils::CreateChainFromCollectionTag | |
847 | (TString chainName, TString collname) | |
848 | { | |
849 | // gets chain from xml collection file | |
850 | ||
851 | TAlienCollection *coll = TAlienCollection::Open(collname.Data()); | |
852 | if (!coll) { | |
853 | PrintErrorString(Form("Cannot create an AliEn collection from %s", collname.Data())); | |
854 | return 0x0; | |
855 | } | |
856 | ||
857 | TString anaType = GetTagTypeFromTreeName(chainName); | |
858 | if (anaType.IsNull()) { | |
859 | PrintErrorString(Form("anaType is %s", anaType.Data())); | |
860 | return (TChain*)0x0; | |
861 | } | |
862 | ||
863 | TGridResult* tagResult = coll->GetGridResult("",kFALSE,kFALSE); | |
864 | AliTagAnalysis *tagAna = new AliTagAnalysis(anaType.Data()); | |
865 | tagAna->ChainGridTags(tagResult); | |
866 | ||
867 | AliRunTagCuts *runCuts = new AliRunTagCuts(); | |
868 | AliLHCTagCuts *lhcCuts = new AliLHCTagCuts(); | |
869 | AliDetectorTagCuts *detCuts = new AliDetectorTagCuts(); | |
870 | AliEventTagCuts *evCuts = new AliEventTagCuts(); | |
871 | // Check if the cuts configuration file was provided | |
872 | if (!gSystem->AccessPathName("ConfigureCuts.C")) { | |
873 | gROOT->LoadMacro("ConfigureCuts.C"); | |
874 | ConfigureCuts(runCuts, lhcCuts, detCuts, evCuts); | |
875 | } | |
876 | TChain *chain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evCuts); | |
877 | if (!chain || !chain->GetNtrees()) return (TChain*)0x0; | |
878 | chain->ls(); | |
879 | return chain; | |
880 | ||
881 | } | |
882 | ||
922688c0 | 883 | //________________________________________________________________________ |
884 | void AliRsnUtils::AddFilesToAlien(const TString &fileName) | |
885 | { | |
886 | // adds file to alien's list which will be copied to alien | |
887 | if (fFilesToAlien.IsNull()) fFilesToAlien += fileName; | |
5eb970a4 | 888 | else { |
922688c0 | 889 | fFilesToAlien += ":"; |
890 | fFilesToAlien += fileName; | |
891 | } | |
892 | } | |
893 | ||
894 | //________________________________________________________________________ | |
895 | TAlienJDL* AliRsnUtils::GetJDL() const | |
896 | { | |
897 | // gets JDL | |
898 | if (!fJDL) fJDL = (TAlienJDL*) gGrid->GetJDLGenerator(); | |
899 | return fJDL; | |
900 | } | |
5eb970a4 | 901 | |
902 | //________________________________________________________________________ | |
903 | TString AliRsnUtils::GetTagTypeFromTreeName(TString treeName) | |
904 | { | |
905 | // gets Tag name | |
906 | ||
907 | if (!treeName.CompareTo("esdTree")) | |
908 | return "ESD"; | |
909 | if (!treeName.CompareTo("aodTree")) | |
910 | return "AOD"; | |
911 | ||
912 | return ""; | |
913 | } | |
914 | ||
915 | // EXTRA MACROS | |
916 | ||
917 | static TString fgMode,fgProofToConnect,fgLIBS,fgPARS,fgPARSClean,fgMacro,fgPostMacro,fgInputFileName,fgTreeName; | |
918 | static TString fgAlirootLibPath; | |
919 | static TString fgPort,fgUser,fgReset,fgRootVersionInProof,fgCollName; | |
920 | static TString fgProjectDir,fgOutputDir,fgExtraInputFiles,fgProjectDirSE; | |
921 | static TString fgPostMacroArgs; | |
922 | static Int_t fgDataType,fgAlienSplit; | |
923 | static Long64_t fgNumOfEvents,fgNumOfEventsSkip; | |
924 | static Bool_t fgAlienShouldRun = kFALSE, fgAlienShoudlCopy = kFALSE,fgUseLocalLibs=kFALSE,fgDoMixing=kFALSE; | |
925 | static TAlienJDL *fgJDL=0; | |
926 | Bool_t runLocal() | |
927 | { | |
928 | ||
929 | Bool_t returnBool = kTRUE; | |
930 | ||
931 | // creating utils (located in macro PWG2resonancesUtils.C) | |
932 | AliRsnUtils *utils = new AliRsnUtils(AliRsnUtils::kLocal); | |
933 | utils->DoMixing(fgDoMixing); | |
934 | ||
935 | returnBool = utils->CleanPackages ( fgPARSClean ); | |
936 | if (!returnBool) return kFALSE; | |
937 | ||
938 | // Loading pars | |
939 | // if (fgUseLocalLibs) | |
940 | returnBool = runLocalLibs(fgLIBS.Data(),fgAlirootLibPath.Data()); | |
941 | // else | |
942 | returnBool = utils->LoadPars(fgPARS.Data()); | |
943 | ||
944 | if (!returnBool) return kFALSE; | |
945 | ||
946 | // Input Data | |
947 | returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName,fgPort); | |
948 | if (!returnBool) return kFALSE; | |
949 | ||
950 | // utils->Print(); | |
951 | ||
952 | if (fgMacro.IsNull()) { | |
953 | utils->PrintErrorString("fMacro is null"); | |
954 | return kFALSE; | |
955 | } | |
956 | ||
957 | // Running Macro | |
958 | utils->Run(fgMacro.Data(),fgNumOfEvents,fgNumOfEventsSkip); | |
959 | ||
960 | return returnBool; | |
961 | } | |
962 | Bool_t runProof() | |
963 | { | |
964 | ||
965 | Bool_t returnBool = kTRUE; | |
966 | ||
967 | // creating utils (located in macro PWG2resonancesUtils.C) | |
968 | AliRsnUtils *utils = new AliRsnUtils(AliRsnUtils::kProof,fgProofToConnect,fgReset,fgRootVersionInProof); | |
969 | utils->DoMixing(fgDoMixing); | |
970 | ||
971 | utils->CleanPackages(fgPARSClean); | |
972 | ||
973 | // Loading pars | |
974 | returnBool = utils->LoadPars(fgPARS.Data()); | |
975 | if (!returnBool) return kFALSE; | |
976 | ||
977 | // Input Data | |
978 | returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName); | |
979 | if (!returnBool) return kFALSE; | |
980 | ||
981 | // runs macro | |
982 | if (fgMacro.IsNull()) { | |
983 | utils->PrintErrorString("fgMacro is null"); | |
984 | return kFALSE; | |
985 | } | |
986 | utils->Run(fgMacro.Data(),fgNumOfEvents,fgNumOfEventsSkip); | |
987 | return returnBool; | |
988 | } | |
989 | ||
990 | Bool_t runAlien() | |
991 | { | |
992 | Bool_t returnBool = kTRUE; | |
993 | ||
994 | // creating utils (located in macro PWG2resonancesUtils.C) | |
995 | AliRsnUtils *utils = new AliRsnUtils ( AliRsnUtils::kAlien,fgAlienShouldRun,fgAlienShoudlCopy,fgJDL); | |
996 | utils->DoMixing(fgDoMixing); | |
997 | ||
998 | // Loading pars | |
999 | if (fgUseLocalLibs) { | |
1000 | returnBool = runLocalLibs(fgPARS.Data()); | |
1001 | if (!returnBool) return kFALSE; | |
1002 | } | |
1003 | returnBool = utils->LoadPars(fgPARS.Data(),!fgUseLocalLibs); | |
1004 | if (!returnBool) return kFALSE; | |
1005 | ||
1006 | // Input Data | |
1007 | returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName); | |
1008 | if (!returnBool) return kFALSE; | |
1009 | ||
1010 | ||
1011 | // set Directory in AliEn where all files will be copied first | |
1012 | // WARNING this directory will be removed first when fgAlienShoudlCopy | |
1013 | // in AliRsnUtils constructor is set to kTRUE and it is done by default | |
1014 | // utils->SetAlienProjectDir("/alice/cern.ch/user/m/mvala/RSNTASK/FILTER/28001"); | |
1015 | utils->SetAlienProjectDir(fgProjectDir.Data()); | |
1016 | // sets pname string (Project dir) for JDL setup | |
1017 | // TString pname(utils->GetAlienProjectDir()); | |
1018 | ||
1019 | if (fgMacro.IsNull()) { | |
1020 | utils->PrintErrorString("fgMacro is null"); | |
1021 | return kFALSE; | |
1022 | } | |
1023 | ||
1024 | // not working | |
1025 | if (!fgProjectDirSE.IsNull()) { | |
1026 | utils->SetAlienProjectDirSE(fgProjectDirSE); | |
1027 | } | |
1028 | ||
1029 | //run AliEn job (if shouldRun is set to kTRUE, if not it will just copy files | |
1030 | //if shouldCopy is set to kTRUE) | |
1031 | utils->Run(fgMacro.Data(),fgNumOfEvents,fgNumOfEventsSkip); | |
1032 | ||
1033 | // uncomment it when you wanna have | |
1034 | // AliEn shell after job is submited | |
1035 | //gGrid->Shell(); | |
1036 | ||
1037 | return returnBool; | |
1038 | } | |
1039 | ||
1040 | Bool_t runLocalLibs(TString pars,TString pathToAliRoot="$ALICE_ROOT/lib/tgt_$ALICE_TARGET") | |
1041 | { | |
1042 | Bool_t returnBool = kTRUE; | |
1043 | ||
1044 | if (pars.IsNull()) return kTRUE; | |
1045 | ||
1046 | gSystem->Load("libGeom.so"); | |
1047 | ||
1048 | TObjArray* array = pars.Tokenize(":"); | |
1049 | TObjString *str; | |
1050 | TString strr; | |
1051 | for (Int_t i=0;i< array->GetEntriesFast();i++) { | |
1052 | str = (TObjString *) array->At(i); | |
1053 | strr = str->GetString(); | |
1054 | Info("",Form("Loading %s ...",Form("%s/lib%s",gSystem->ExpandPathName(Form("%s",pathToAliRoot.Data())),strr.Data()))); | |
1055 | gSystem->Load(Form("%s/lib%s",gSystem->ExpandPathName(Form("%s",pathToAliRoot.Data())),strr.Data())); | |
1056 | } | |
1057 | ||
1058 | ||
1059 | return returnBool; | |
1060 | } |