1 #ifndef AliRsnUtils_cxx
2 #define AliRsnUtils_cxx
22 AliRsnUtils(EType type, TString where, TString reset = "", TString rootVer = "");
23 AliRsnUtils(EType type, Bool_t shouldRun = kTRUE, Bool_t shouldCopy = kTRUE,TAlienJDL*jdl=0);
27 Bool_t CleanPackages(TString pars = "all");
28 Bool_t LoadPars(TString pars = "STEERBase:ESD:AOD:ANALYSIS:ANALYSISalice:PWG2resonances",Bool_t loadParsLocaly=kTRUE);
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);
35 void PrintInfoString(TString s);
36 void PrintWarningString(TString s);
37 void PrintErrorString(TString s);
39 Bool_t IsConnected() const { return fIsConnected; }
41 void ShouldCopy(const Bool_t& theValue) { fShouldCopy = theValue; }
43 void SetAlienRunFile(const TString& theValue) { fAlienRunFile = theValue; }
45 void AddFilesToAlien(const TString& theValue);
47 void SetAlienProjectDir(const TString& theValue) { fAlienProjectDir = theValue; }
48 TString GetAlienProjectDir() const { return fAlienProjectDir; }
50 TAlienJDL* SetJDL(TAlienJDL*jdl) const { fJDL= jdl;}
51 TAlienJDL* GetJDL() const;
53 void ShouldRunAlienJob(const Bool_t& theValue) { fShouldRunAlienJob = theValue; }
55 TString GetTagTypeFromTreeName(TString treeName);
57 void SetAlienProjectDirSE(TString se="ALICE::CERN::SE") { fAlienProjectDirSE = se; };
59 void DoMixing(Bool_t doMix=kTRUE) { fDoMixing = doMix; }
63 EType fCurrentType; // current analysis type
64 EDataType fCurrentDataType; // current data type
65 Bool_t fDoMixing; // flag if we will use mixing (AliAnalysisTaskME)
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
75 TString fAlienProjectDir; // alien Project directory
76 TString fAlienProjectDirSE; // alien Project directory Storage Element
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
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
87 Bool_t ConnectProof();
88 Bool_t ConnectAliEn();
91 Bool_t CleanParsLocal(TString pars);
92 Bool_t CleanParsProof(TString pars);
95 Bool_t LoadParsLocal(TString pars);
96 Bool_t LoadParsProof(TString pars);
99 Bool_t ProcessPAR(TString pars);
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");
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);
107 // gets chain from xml collection file
108 TChain* CreateChainFromCollectionTag(TString chainName = "ESD", TString collname = "tag.xml");
110 // copy to AliEn function
111 Bool_t CopyFilesToAliEn();
113 // generates macro which will be run on alien
114 Bool_t CreateRunAliEnFile(TString macro);
117 Bool_t RunAliEnJob();
119 // copies one file to alien
120 Bool_t CopyFileToAlien(TString file,Bool_t overwrite = kTRUE);
122 ClassDef(AliRsnUtils, 1)
127 ClassImp(AliRsnUtils)
129 //________________________________________________________________________
130 AliRsnUtils::AliRsnUtils(EType type, TString where, TString reset, TString rootVer) :
132 fCurrentDataType(kTxt),
134 fIsConnected(kFALSE),
137 fAlienProjectDirSE("ALICE::CERN::SE"),
140 fShouldRunAlienJob(kTRUE),
141 fAlienRunFile("AliRsnAlien.C")
146 // setting up parameters
147 fConnectInfo[0] = where;
148 fConnectInfo[1] = reset;
149 fConnectInfo[2] = rootVer;
155 //________________________________________________________________________
156 AliRsnUtils::AliRsnUtils(EType type, Bool_t shouldRun, Bool_t shouldCopy,TAlienJDL*jdl) :
158 fCurrentDataType(kTxt),
160 fIsConnected(kFALSE),
164 fShouldRunAlienJob(shouldRun),
165 fShouldCopy(shouldCopy),
166 fAlienRunFile("AliRsnAlien.C")
173 //________________________________________________________________________
174 void AliRsnUtils::PrintInfoString(const char *msg)
176 // prints message as Info
180 //________________________________________________________________________
181 void AliRsnUtils::PrintWarningString(const char *msg)
183 // prints message as Warning
187 //________________________________________________________________________
188 void AliRsnUtils::PrintErrorString(const char *msg)
190 // prints message as Error
194 //________________________________________________________________________
195 Bool_t AliRsnUtils::Connect()
197 // connect to local, proof, alien if needed
198 switch (fCurrentType) {
200 PrintInfoString("Running Local...");
201 fIsConnected = kTRUE;
204 PrintInfoString(Form("Running Proof at %s...", fConnectInfo[0].Data()));
205 fIsConnected = ConnectProof();
206 if (!IsConnected()) {
207 PrintErrorString(Form("Not connected to %s !!!", fConnectInfo[0].Data()));
211 PrintInfoString(Form("Running AliEn..."));
212 fIsConnected = ConnectAliEn();
213 if (!IsConnected()) {
214 PrintErrorString("Not connected to AliEn !!!");
218 PrintErrorString("Wrong type");
219 fIsConnected = kFALSE;
223 if (!IsConnected()) {
224 PrintErrorString("Connection failed. Aborting...");
231 //________________________________________________________________________
232 Bool_t AliRsnUtils::CleanPackages(TString pars)
236 if (fShouldEnd) return kFALSE;
237 switch (fCurrentType) {
239 return CleanParsLocal(pars);
242 if (!IsConnected()) return kFALSE;
243 return CleanParsProof(pars);
249 PrintErrorString("Wrong type");
254 //________________________________________________________________________
255 Bool_t AliRsnUtils::LoadPars(TString pars,Bool_t loadParsLocaly)
258 if (fShouldEnd) return kFALSE;
259 switch (fCurrentType) {
261 if (!IsConnected()) return kFALSE;
262 return LoadParsLocal(pars);
265 if (!IsConnected()) return kFALSE;
266 return LoadParsProof(pars);
269 if (!pars.IsNull()) {
271 pars.ReplaceAll(":",".par:");
273 AddFilesToAlien(pars);
275 return LoadParsLocal(pars);
280 PrintErrorString("Wrong type");
287 //________________________________________________________________________
288 Bool_t AliRsnUtils::SetInputData
289 (EDataType type, TString source, TString treeName, TString port, Int_t numfiles, Int_t filesSkip)
291 // sets input which will be used in Run() function
294 fDataInfo[type] = source;
297 fCurrentDataType = type;
298 fChain = CreateChainFromTXT(treeName, fDataInfo[type], numfiles, filesSkip, port);
299 if (!fChain) return kFALSE;
303 fCurrentDataType = type;
306 fCurrentDataType = type;
307 fTreeName = treeName;
308 if (fCurrentType == AliRsnUtils::kAlien) return kTRUE;
309 if (fCurrentType == AliRsnUtils::kLocal) ConnectAliEn();
310 fChain = CreateChainFromCollection(treeName, fDataInfo[type], numfiles, filesSkip);
312 case kXmlCollectionTag:
313 fCurrentDataType = type;
314 fTreeName = treeName;
315 if (fCurrentType == AliRsnUtils::kAlien) return kTRUE;
316 if (fCurrentType == AliRsnUtils::kLocal) ConnectAliEn();
317 fDataInfo[type] = source;
318 fChain = CreateChainFromCollectionTag(treeName, fDataInfo[type]);
322 PrintErrorString("Wrong type");
329 //________________________________________________________________________
330 Bool_t AliRsnUtils::Run(TString macro, Long64_t numEvents, Long64_t numEventsSkip)
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;
343 gROOT->LoadMacro(macro.Data());
344 macro.ReplaceAll(".C","");
345 AliAnalysisManager *mgr = (AliAnalysisManager *) gROOT->ProcessLine(Form("%s();", macro.Data()));
347 if (!mgr) return kFALSE;
349 if (mgr->InitAnalysis()) {
352 switch (fCurrentDataType) {
354 if (!fChain) PrintErrorString("fChain is null");
355 TString mode = "local";
356 if (fCurrentType == AliRsnUtils::kProof) mode="proof";
357 if (fDoMixing) mode="mix";
358 Info("AliRsnUtils::Run",Form("Running mgr->StartAnalysis(\"%s\",%p,%d,%d)",mode.Data(),fChain,numEvents,numEventsSkip));
359 return mgr->StartAnalysis(mode, fChain,numEvents,numEventsSkip);
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);
370 PrintErrorString("fChain is null");
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);
378 case kXmlCollectionTag:
380 PrintErrorString("fChain is null");
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);
389 PrintErrorString("Wrong type");
397 //________________________________________________________________________
398 Bool_t AliRsnUtils::ConnectProof()
402 // if one uses AliRsnUtils::kProof constructor
403 // AliRsnUtils ( AliRsnUtils::kProof,TString where = "mvala@lxb6046.cern.ch
404 // " , TString reset = "RESET", TString rootVer = "HEADXYZ" );
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"
410 if (fConnectInfo[0].IsNull()) {
411 PrintErrorString("Proof is empty!!!");
415 if (!fConnectInfo[1].IsNull())
416 TProof::Reset(fConnectInfo[0].Data());
418 if (!fConnectInfo[2].IsNull())
419 TProof::Mgr(fConnectInfo[0].Data())->SetROOTVersion(fConnectInfo[2].Data());
421 return TProof::Open(fConnectInfo[0].Data());
424 //________________________________________________________________________
425 Bool_t AliRsnUtils::ConnectAliEn()
429 TGrid::Connect("alien://");
436 //________________________________________________________________________
437 Bool_t AliRsnUtils::CleanParsLocal(TString pars)
439 // just delete directories which are in pars variable
441 // pars = "STEERBase:ESD"
442 // will delete STEERBase and ESD directories
445 if (pars.IsNull()) return kTRUE;
447 if (!pars.CompareTo("all")) pars = fgPARS;
449 TObjArray* array = pars.Tokenize(":");
452 for (Int_t i=0;i< array->GetEntriesFast();i++) {
453 str = (TObjString *) array->At(i);
454 strr = str->GetString();
455 Info("",Form("Cleaning %s.par...",strr.Data()));
456 gSystem->Exec(Form("rm -Rf %s/",strr.Data()));
461 //________________________________________________________________________
462 Bool_t AliRsnUtils::CleanParsProof(TString pars)
464 // clear par files in proof (divided by ":"). example "STEERBase:ESD"
465 // will clear STEERBase.par and ESD.par
466 // if pars is ALL clears all packages
468 if (pars.IsNull()) return kTRUE;
470 if (!pars.CompareTo("all")) {
471 Info("",Form("Cleaning %s par files...",pars.Data()));
472 gProof->ClearPackages();
476 TObjArray* array = (TObjArray*) pars.Tokenize(":");
479 for (Int_t i=0;i< array->GetEntriesFast();i++) {
480 str = (TObjString *) array->At(i);
481 strr = str->GetString();
482 Info("",Form("Cleaning %s.par...",strr.Data()));
483 gProof->ClearPackage(strr.Data());
489 //________________________________________________________________________
490 Bool_t AliRsnUtils::LoadParsLocal(TString pars)
493 TObjArray* array = pars.Tokenize(":");
496 for (Int_t i=0;i< array->GetEntriesFast();i++) {
497 str = (TObjString *) array->At(i);
498 strr = str->GetString();
499 if (!ProcessPAR(strr.Data())) {
507 //________________________________________________________________________
508 Bool_t AliRsnUtils::LoadParsProof(TString pars)
510 // load pars on proof
511 if (!IsConnected()) return kFALSE;
513 TObjArray* array = pars.Tokenize(":");
516 for (Int_t i=0;i< array->GetEntriesFast();i++) {
517 if (fShouldEnd) return kFALSE;
518 str = (TObjString *) array->At(i);
519 strr = str->GetString();
520 gSystem->Exec(Form("rm -Rf %s",strr.Data()));
521 if (gProof->UploadPackage(Form("%s.par", strr.Data()))) {
522 PrintErrorString(Form("Error uploading %s package!!!",strr));
526 if (gProof->EnablePackage(strr)) {
527 PrintErrorString(Form("Error loading %s package!!!",strr));
533 gProof->ShowEnabledPackages();
537 //________________________________________________________________________
538 void AliRsnUtils::Print()
540 // prints number of events
542 PrintInfoString(Form("Number of events %d",fChain->GetEntries()));
545 //________________________________________________________________________
546 Bool_t AliRsnUtils::CopyFilesToAliEn()
548 // copy needed files to alien
549 if (!IsConnected()) return kFALSE;
551 if (!fShouldCopy) return kTRUE;
553 if (fAlienProjectDir.IsNull()) {
554 fAlienProjectDir = Form("%sRSNTASK/01",gGrid->GetHomeDirectory());
555 PrintWarningString(Form("Alien Project directory is not defined.Setting \"%s\" as project directory ...",fAlienProjectDir.Data()));
557 gGrid->Rmdir(Form("%s",fAlienProjectDir.Data()));
558 gGrid->Mkdir(Form("%s",fAlienProjectDir.Data()),"-p");
561 TObjArray* array = fFilesToAlien.Tokenize(":");
564 for (Int_t i=0;i< array->GetEntriesFast();i++) {
565 str = (TObjString *) array->At(i);
566 strr = str->GetString();
567 if (!CopyFileToAlien(Form("%s",strr.Data()) ,kFALSE)) return kFALSE;
569 if (!CopyFileToAlien(fAlienRunFile.Data(),kFALSE)) return kFALSE;
574 //________________________________________________________________________
575 Bool_t AliRsnUtils::CreateRunAliEnFile(TString macro)
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());
582 PrintErrorString(Form("Cannot open file %s",file.Data()));
585 file.ReplaceAll(".C","");
587 tmp = Form("Int_t %s() {",file.Data());
588 outFile << tmp.Data() << endl;
592 tmp = "\tTStopwatch timer;";
593 outFile << tmp.Data() << endl;
595 tmp = "\ttimer.Start();\n";
596 outFile << tmp.Data() << endl;
598 tmp = "\tBool_t returnValue = kTRUE;\n";
599 outFile << tmp.Data() << endl;
601 tmp = "\tgROOT->LoadMacro (\"PWG2resonancesUtils.C\");\n";
602 outFile << tmp.Data() << endl;
604 tmp = "\tAliRsnUtils *utils = new AliRsnUtils (AliRsnUtils::kLocal);\n";
605 outFile << tmp.Data() << endl;
607 tmp = Form("\treturnValue = utils->LoadPars(\"%s\");",fParNames.Data());
608 outFile << tmp.Data() << endl;
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";
616 outFile << tmp.Data() << endl;
618 TString collTypeName;
619 if (fCurrentDataType == kXmlCollection) {
620 collTypeName = "AliRsnUtils::kXmlCollection";
621 } else if (fCurrentDataType == kXmlCollectionTag) {
622 collTypeName = "AliRsnUtils::kXmlCollectionTag";
624 Error("",Form("File %s was not created correctly!!!!!!!",macro.Data()));
628 tmp = Form("\treturnValue = utils->SetInputData(%s,\"wn.xml\",\"%s\");",collTypeName.Data(),fTreeName.Data());
629 outFile << tmp.Data() << endl;
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";
637 outFile << tmp.Data() << endl;
639 tmp = Form("\treturnValue = utils->Run(\"%s\",10000000);",macro.Data());
640 outFile << tmp.Data() << endl;
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";
648 outFile << tmp.Data() << endl;
650 tmp = "\ttimer.Stop();";
651 outFile << tmp.Data() << endl;
653 tmp = "\ttimer.Print();\n";
654 outFile << tmp.Data() << endl;
656 tmp = Form("\treturn 0;",file.Data());
657 outFile << tmp.Data() << endl;
659 tmp = Form("}",file.Data());
660 outFile << tmp.Data() << endl;
667 //________________________________________________________________________
668 Bool_t AliRsnUtils::RunAliEnJob()
672 fJDL->SetArguments(Form("%s",fAlienRunFile.Data()));
674 TObjArray* array = fFilesToAlien.Tokenize(":");
677 for (Int_t i=0;i< array->GetEntriesFast();i++) {
678 str = (TObjString *) array->At(i);
679 strr = str->GetString().Data();
680 fJDL->AddToInputSandbox(Form("LF:%s/%s",fAlienProjectDir.Data(),strr.Data())) ;
682 fJDL->AddToInputSandbox(Form("LF:%s/%s",fAlienProjectDir.Data(), fAlienRunFile.Data())) ;
684 if (fShouldRunAlienJob == kFALSE)
685 PrintInfoString(Form("\n%s",fJDL->Generate().Data()));
687 TGridJob* job = gGrid->Submit(fJDL->Generate());
689 Error("SubmitTest", "submitting failed");
696 //________________________________________________________________________
697 Bool_t AliRsnUtils::CopyFileToAlien(TString file, Bool_t overwrite)
699 // copy one file to alien
700 if (fAlienProjectDir.IsNull()) {
701 PrintErrorString("AliEn project directory does not exist...");
706 gGrid->Rm(Form("alien://%s/%s",fAlienProjectDir.Data(),file.Data()));
708 Info("",Form("Copy from %s to %s",file.Data(),Form("alien:://%s/%s",fAlienProjectDir.Data(),file.Data())));
711 return TFile::Cp(file.Data(),Form("alien:://%s/%s",fAlienProjectDir.Data(),file.Data()));
714 //________________________________________________________________________
715 Bool_t AliRsnUtils::ProcessPAR(TString pars)
719 TString pararchivenameS(pars);
720 PrintInfoString(Form("==== Processing %s package LOCAL =====",pararchivenameS.Data()));
722 if (gSystem->AccessPathName(Form("%s.par",pararchivenameS.Data()))) {
723 PrintErrorString(Form("File %s.par was not found !!!",pararchivenameS.Data()));
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
732 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
733 PrintInfoString(Form("==== Building %s package =====",pararchivenameS.Data()));
734 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
735 EPrintErrorString("Cannot Build the PAR Archive! - Abort!");
739 // check for SETUP.C and execute
740 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
741 PrintInfoString(Form("==== Running SETUP.C of %s package =====",pararchivenameS.Data()));
742 gROOT->Macro("PROOF-INF/SETUP.C");
743 if (gROOT->Macro("PROOF-INF/SETUP.C")) {
744 PrintErrorString("Cannot SETUP the PAR Archive! - Abort!");
749 gSystem->ChangeDirectory(ocwd);
751 PrintInfoString(Form("==== All OK for %s package LOCAL =====",pararchivenameS.Data()));
756 //________________________________________________________________________
757 TChain* AliRsnUtils::CreateChainFromTXT
758 (TString chainName, TString aDataDir, Int_t aRuns, Int_t offset, TString portNum)
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
766 PrintInfoString(Form("Loading the chain %s", chainName.Data()));
767 if (aDataDir.IsNull()) {
768 PrintErrorString(Form("aDataDir not found."));
772 Long_t id, size, flags, modtime;
773 if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) {
774 PrintErrorString(Form("%s not found.", aDataDir.Data()));
778 TChain *chain = new TChain(chainName.Data());
780 // Open the input stream
782 fileIn.open(aDataDir.Data());
786 // Read the input list of files and add them to the chain
788 while (fileIn.good()) {
790 if (esdfile.IsNull()) continue;
795 if (count++ == aRuns) break;
798 TString esdFileWithPort(esdfile);
799 esdFileWithPort.ReplaceAll("root://","");
800 if (!portNum.IsNull())
801 esdFileWithPort.ReplaceAll("//",Form(":%s//",portNum.Data()));
802 PrintInfoString (Form ("Adding root://%s",esdFileWithPort.Data()));
803 chain->Add(Form("root://%s",esdFileWithPort.Data()));
807 PrintInfoString(Form("Loading the chain %s DONE.", chainName.Data()));
811 //________________________________________________________________________
812 TChain* AliRsnUtils::CreateChainFromCollection
813 (TString chainName, TString collname, Int_t maxFiles, Int_t skipfiles)
815 // gets chain from xml collection file
817 TChain *chain = new TChain(chainName.Data());
818 TAlienCollection *myCollection = TAlienCollection::Open(collname.Data());
820 PrintErrorString(Form("Cannot create an AliEn collection from %s", collectionFile));
824 // initialize a counter to check the number of read files
827 myCollection->Reset();
828 while (myCollection->Next()) {
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());
845 //________________________________________________________________________
846 TChain* AliRsnUtils::CreateChainFromCollectionTag
847 (TString chainName, TString collname)
849 // gets chain from xml collection file
851 TAlienCollection *coll = TAlienCollection::Open(collname.Data());
853 PrintErrorString(Form("Cannot create an AliEn collection from %s", collname.Data()));
857 TString anaType = GetTagTypeFromTreeName(chainName);
858 if (anaType.IsNull()) {
859 PrintErrorString(Form("anaType is %s", anaType.Data()));
863 TGridResult* tagResult = coll->GetGridResult("",kFALSE,kFALSE);
864 AliTagAnalysis *tagAna = new AliTagAnalysis(anaType.Data());
865 tagAna->ChainGridTags(tagResult);
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);
876 TChain *chain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evCuts);
877 if (!chain || !chain->GetNtrees()) return (TChain*)0x0;
883 //________________________________________________________________________
884 void AliRsnUtils::AddFilesToAlien(const TString &fileName)
886 // adds file to alien's list which will be copied to alien
887 if (fFilesToAlien.IsNull()) fFilesToAlien += fileName;
889 fFilesToAlien += ":";
890 fFilesToAlien += fileName;
894 //________________________________________________________________________
895 TAlienJDL* AliRsnUtils::GetJDL() const
898 if (!fJDL) fJDL = (TAlienJDL*) gGrid->GetJDLGenerator();
902 //________________________________________________________________________
903 TString AliRsnUtils::GetTagTypeFromTreeName(TString treeName)
907 if (!treeName.CompareTo("esdTree"))
909 if (!treeName.CompareTo("aodTree"))
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;
929 Bool_t returnBool = kTRUE;
931 // creating utils (located in macro PWG2resonancesUtils.C)
932 AliRsnUtils *utils = new AliRsnUtils(AliRsnUtils::kLocal);
933 utils->DoMixing(fgDoMixing);
935 returnBool = utils->CleanPackages ( fgPARSClean );
936 if (!returnBool) return kFALSE;
939 // if (fgUseLocalLibs)
940 returnBool = runLocalLibs(fgLIBS.Data(),fgAlirootLibPath.Data());
942 returnBool = utils->LoadPars(fgPARS.Data());
944 if (!returnBool) return kFALSE;
947 returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName,fgPort);
948 if (!returnBool) return kFALSE;
952 if (fgMacro.IsNull()) {
953 utils->PrintErrorString("fMacro is null");
958 utils->Run(fgMacro.Data(),fgNumOfEvents,fgNumOfEventsSkip);
965 Bool_t returnBool = kTRUE;
967 // creating utils (located in macro PWG2resonancesUtils.C)
968 AliRsnUtils *utils = new AliRsnUtils(AliRsnUtils::kProof,fgProofToConnect,fgReset,fgRootVersionInProof);
969 utils->DoMixing(fgDoMixing);
971 utils->CleanPackages(fgPARSClean);
974 returnBool = utils->LoadPars(fgPARS.Data());
975 if (!returnBool) return kFALSE;
978 returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName);
979 if (!returnBool) return kFALSE;
982 if (fgMacro.IsNull()) {
983 utils->PrintErrorString("fgMacro is null");
986 utils->Run(fgMacro.Data(),fgNumOfEvents,fgNumOfEventsSkip);
992 Bool_t returnBool = kTRUE;
994 // creating utils (located in macro PWG2resonancesUtils.C)
995 AliRsnUtils *utils = new AliRsnUtils ( AliRsnUtils::kAlien,fgAlienShouldRun,fgAlienShoudlCopy,fgJDL);
996 utils->DoMixing(fgDoMixing);
999 if (fgUseLocalLibs) {
1000 returnBool = runLocalLibs(fgPARS.Data());
1001 if (!returnBool) return kFALSE;
1003 returnBool = utils->LoadPars(fgPARS.Data(),!fgUseLocalLibs);
1004 if (!returnBool) return kFALSE;
1007 returnBool = utils->SetInputData((AliRsnUtils::EDataType)fgDataType,fgInputFileName,fgTreeName);
1008 if (!returnBool) return kFALSE;
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());
1019 if (fgMacro.IsNull()) {
1020 utils->PrintErrorString("fgMacro is null");
1025 if (!fgProjectDirSE.IsNull()) {
1026 utils->SetAlienProjectDirSE(fgProjectDirSE);
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);
1033 // uncomment it when you wanna have
1034 // AliEn shell after job is submited
1040 Bool_t runLocalLibs(TString pars,TString pathToAliRoot="$ALICE_ROOT/lib/tgt_$ALICE_TARGET")
1042 Bool_t returnBool = kTRUE;
1044 if (pars.IsNull()) return kTRUE;
1046 gSystem->Load("libGeom.so");
1048 TObjArray* array = pars.Tokenize(":");
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()));