]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/RESONANCES/macros/test/PWG2resonancesUtils.C
Made a general review to fix as possible most coding conventions violations.
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / macros / test / PWG2resonancesUtils.C
CommitLineData
922688c0 1#ifndef AliRsnUtils_cxx
2#define AliRsnUtils_cxx
3
4class 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
127ClassImp(AliRsnUtils)
128
129//________________________________________________________________________
130AliRsnUtils::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 156AliRsnUtils::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//________________________________________________________________________
174void AliRsnUtils::PrintInfoString(const char *msg)
175{
176 // prints message as Info
177 Info("", msg);
178}
179
180//________________________________________________________________________
181void AliRsnUtils::PrintWarningString(const char *msg)
182{
183 // prints message as Warning
184 Warning("", msg);
185}
186
187//________________________________________________________________________
188void AliRsnUtils::PrintErrorString(const char *msg)
189{
190 // prints message as Error
191 Error("", msg);
192}
193
194//________________________________________________________________________
195Bool_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//________________________________________________________________________
232Bool_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 255Bool_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//________________________________________________________________________
288Bool_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//________________________________________________________________________
330Bool_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//________________________________________________________________________
398Bool_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//________________________________________________________________________
425Bool_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//________________________________________________________________________
437Bool_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//________________________________________________________________________
462Bool_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//________________________________________________________________________
490Bool_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//________________________________________________________________________
508Bool_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//________________________________________________________________________
538void AliRsnUtils::Print()
539{
540// prints number of events
541 if (fChain)
542 PrintInfoString(Form("Number of events %d",fChain->GetEntries()));
543}
544
545//________________________________________________________________________
546Bool_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//________________________________________________________________________
575Bool_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//________________________________________________________________________
668Bool_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//________________________________________________________________________
697Bool_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//________________________________________________________________________
715Bool_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//________________________________________________________________________
757TChain* 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//________________________________________________________________________
812TChain* 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//________________________________________________________________________
846TChain* 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//________________________________________________________________________
884void 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//________________________________________________________________________
895TAlienJDL* AliRsnUtils::GetJDL() const
896{
897// gets JDL
898 if (!fJDL) fJDL = (TAlienJDL*) gGrid->GetJDLGenerator();
899 return fJDL;
900}
5eb970a4 901
902//________________________________________________________________________
903TString 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
917static TString fgMode,fgProofToConnect,fgLIBS,fgPARS,fgPARSClean,fgMacro,fgPostMacro,fgInputFileName,fgTreeName;
918static TString fgAlirootLibPath;
919static TString fgPort,fgUser,fgReset,fgRootVersionInProof,fgCollName;
920static TString fgProjectDir,fgOutputDir,fgExtraInputFiles,fgProjectDirSE;
921static TString fgPostMacroArgs;
922static Int_t fgDataType,fgAlienSplit;
923static Long64_t fgNumOfEvents,fgNumOfEventsSkip;
924static Bool_t fgAlienShouldRun = kFALSE, fgAlienShoudlCopy = kFALSE,fgUseLocalLibs=kFALSE,fgDoMixing=kFALSE;
925static TAlienJDL *fgJDL=0;
926Bool_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}
962Bool_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
990Bool_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
1040Bool_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}