X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliAnalysisAlien.cxx;h=a88525a42005e2cac4af96b36ebfce6954f1da82;hb=a6889bf1ecfd1414eaf6212c5c4e3ed54e04efa8;hp=a93796db035aac6ea300c310d3d4436c4e267d54;hpb=0d239a91ab079f0af3b3ff59a33f29d6b0779ff2;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliAnalysisAlien.cxx b/ANALYSIS/AliAnalysisAlien.cxx index a93796db035..a88525a4200 100644 --- a/ANALYSIS/AliAnalysisAlien.cxx +++ b/ANALYSIS/AliAnalysisAlien.cxx @@ -770,6 +770,7 @@ Bool_t AliAnalysisAlien::LoadFriendLibs() const for (Int_t ilib=0; ilibGetEntriesFast(); ilib++) { lib = list->At(ilib)->GetName(); lib.ReplaceAll(".so",""); + lib.ReplaceAll(".dylib",""); lib.ReplaceAll(" ",""); if (lib.BeginsWith("lib")) lib.Remove(0, 3); lib.Prepend("lib"); @@ -1757,7 +1758,8 @@ Bool_t AliAnalysisAlien::CreateJDL() arr = fAdditionalLibs.Tokenize(" "); TIter next(arr); while ((os=(TObjString*)next())) { - if (os->GetString().Contains(".so")) continue; + if (os->GetString().Contains(".so") || + os->GetString().Contains(".dylib")) continue; fGridJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), os->GetString().Data())); fMergingJDL->AddToInputSandbox(Form("LF:%s/%s", workdir.Data(), os->GetString().Data())); } @@ -1799,7 +1801,9 @@ Bool_t AliAnalysisAlien::CreateJDL() if (TestBit(AliAnalysisGrid::kDefaultOutputs)) { outputArchive = "log_archive.zip:std*@disk=1 "; // Add normal output files, extra files + terminate files - TString files = GetListOfFiles("outextter"); + TString files; + if (IsMergeAOD()) files = GetListOfFiles("outaodextter"); + else files = GetListOfFiles("outextter"); // Do not register files in fRegisterExcludes if (!fRegisterExcludes.IsNull()) { arr = fRegisterExcludes.Tokenize(" "); @@ -1920,7 +1924,8 @@ Bool_t AliAnalysisAlien::CreateJDL() TObjString *os; TIter next(arr); while ((os=(TObjString*)next())) { - if (os->GetString().Contains(".so")) continue; + if (os->GetString().Contains(".so") || + os->GetString().Contains(".dylib")) continue; Info("CreateJDL", "\n##### Copying dependency: <%s> to your alien workspace", os->GetString().Data()); if (FileExists(os->GetString())) gGrid->Rm(os->GetString()); // TFile::Cp(Form("file:%s",os->GetString().Data()), Form("alien://%s/%s", workdir.Data(), os->GetString().Data())); @@ -1952,7 +1957,7 @@ Bool_t AliAnalysisAlien::WriteJDL(Bool_t copy) // Writes one or more JDL's corresponding to findex. If findex is negative, // all run numbers are considered in one go (jdl). For non-negative indices // they correspond to the indices in the array fInputFiles. - if (!fInputFiles) return kFALSE; + if (!fInputFiles && !fMCLoop) return kFALSE; TObject *os; TString workdir; if (!fProductionMode && !fGridWorkingDir.BeginsWith("/alice")) workdir = gGrid->GetHomeDirectory(); @@ -1985,7 +1990,7 @@ Bool_t AliAnalysisAlien::WriteJDL(Bool_t copy) fGridJDL->SetOutputDirectory(Form("#alienfulldir#/../%s",fOutputSingle.Data()), "Output directory"); else { fGridJDL->SetOutputDirectory(Form("%s/#alien_counter_03i#", fGridOutputDir.Data()), "Output directory"); - fMergingJDL->SetOutputDirectory(fGridOutputDir); +// fMergingJDL->SetOutputDirectory(fGridOutputDir); } } else { // One jdl to be submitted with 2 input parameters: data collection name and output dir prefix @@ -2198,30 +2203,31 @@ Bool_t AliAnalysisAlien::FileExists(const char *lfn) Bool_t AliAnalysisAlien::DirectoryExists(const char *dirname) { // Returns true if directory exists. Can be also a path. +// Since there is not API in TAlien, we use the Cd trick: if (!gGrid) return kFALSE; - // Check if dirname is a path - TString dirstripped = dirname; - dirstripped = dirstripped.Strip(); - dirstripped = dirstripped.Strip(TString::kTrailing, '/'); - TString dir = gSystem->BaseName(dirstripped); - dir += "/"; - TString path = gSystem->DirName(dirstripped); - TGridResult *res = gGrid->Ls(path, "-F"); - if (!res) return kFALSE; - TIter next(res); - TMap *map; - TObject *obj; - while ((map=dynamic_cast(next()))) { - obj = map->GetValue("name"); - if (!obj) break; - if (dir == obj->GetName()) { - delete res; - return kTRUE; - } + // Backup current path + TString cpath = gGrid->Pwd(); + TString command = "cd "; + TString sdir(dirname); + sdir.ReplaceAll("alien://", ""); + command += sdir; + TGridResult *res = gGrid->Command(command); + if (!res) { + gGrid->Cd(cpath); + return kFALSE; + } + TMap *map = (TMap*)res->At(0); + if (!map) { + gGrid->Cd(cpath); + delete res; + return kFALSE; } + TString sval = map->GetValue("__result__")->GetName(); + Bool_t retval = (Bool_t)sval.Atoi(); + gGrid->Cd(cpath); delete res; - return kFALSE; -} + return retval; +} //______________________________________________________________________________ void AliAnalysisAlien::CheckDataType(const char *lfn, Bool_t &isCollection, Bool_t &isXml, Bool_t &useTags) @@ -2688,7 +2694,8 @@ void AliAnalysisAlien::SetFriendChainName(const char *name, const char *libnames fFriendLibs = libnames; if (fFriendLibs.Length()) { - if(!fFriendLibs.Contains(".so")) + if(!fFriendLibs.Contains(".so") && + !fFriendLibs.Contains(".dylib")) Fatal("SetFriendChainName()", "You should provide explicit library names (with extension)"); fFriendLibs.ReplaceAll(",", " "); fFriendLibs.Strip(); @@ -3234,13 +3241,6 @@ void AliAnalysisAlien::SetOutputArchive(const char *list) fOutputArchive = list; } -//______________________________________________________________________________ -void AliAnalysisAlien::SetPreferedSE(const char */*se*/) -{ -// Setting a prefered output SE is not allowed anymore. - Warning("SetPreferedSE", "Setting a preferential SE is not allowed anymore via the plugin. Use SetNumberOfReplicas() and SetDefaultOutputs()"); -} - //______________________________________________________________________________ void AliAnalysisAlien::SetProofParameter(const char *pname, const char *value) { @@ -3374,7 +3374,7 @@ Bool_t AliAnalysisAlien::StartAnalysis(Long64_t /*nentries*/, Long64_t /*firstEn TString extraLibs; Bool_t parMode = kFALSE; if (!alirootMode.IsNull()) extraLibs = "ANALYSIS:OADB:ANALYSISalice"; - // Parse the extra libs for .so + // Parse the extra libs for .so or .dylib if (fAdditionalLibs.Length()) { TString additionalLibs = fAdditionalLibs; additionalLibs.Strip(); @@ -3385,7 +3385,8 @@ Bool_t AliAnalysisAlien::StartAnalysis(Long64_t /*nentries*/, Long64_t /*firstEn TIter next(list); TObjString *str; while((str=(TObjString*)next())) { - if (str->GetString().Contains(".so")) { + if (str->GetString().Contains(".so") || + str->GetString().Contains(".dylib") ) { if (parMode) { Warning("StartAnalysis", "Plugin does not support loading libs after par files in PROOF mode. Library %s and following will not load on workers", str->GetName()); break; @@ -3393,6 +3394,7 @@ Bool_t AliAnalysisAlien::StartAnalysis(Long64_t /*nentries*/, Long64_t /*firstEn TString stmp = str->GetName(); if (stmp.BeginsWith("lib")) stmp.Remove(0,3); stmp.ReplaceAll(".so",""); + stmp.ReplaceAll(".dylib",""); if (!extraLibs.IsNull()) extraLibs += ":"; extraLibs += stmp; continue; @@ -3472,7 +3474,8 @@ Bool_t AliAnalysisAlien::StartAnalysis(Long64_t /*nentries*/, Long64_t /*firstEn if (list) delete list; } } else { - if (fAdditionalLibs.Contains(".so") && !testMode) { + if ((fAdditionalLibs.Contains(".so") || fAdditionalLibs.Contains(".dylib")) && + !testMode) { Error("StartAnalysis", "You request additional libs to be loaded but did not enabled any AliRoot mode. Please refer to: \ \n http://aaf.cern.ch/node/83 and use a parameter for SetAliRootMode()"); return kFALSE; @@ -3698,10 +3701,12 @@ const char *AliAnalysisAlien::GetListOfFiles(const char *type) return files.Data(); } if (mgr->GetOutputEventHandler()) { - aodfiles = mgr->GetOutputEventHandler()->GetOutputFileName(); - TString extraaod = mgr->GetOutputEventHandler()->GetExtraOutputs(); - if (!extraaod.IsNull()) { - aodfiles += ","; + aodfiles = ""; + if (mgr->GetOutputEventHandler()->GetFillAOD()) + aodfiles = mgr->GetOutputEventHandler()->GetOutputFileName(); + TString extraaod = mgr->GetOutputEventHandler()->GetExtraOutputs(kTRUE); + if (!extraaod.IsNull() && mgr->GetOutputEventHandler()->GetFillExtension()) { + if (!aodfiles.IsNull()) aodfiles += ","; aodfiles += extraaod; } } @@ -3719,11 +3724,11 @@ const char *AliAnalysisAlien::GetListOfFiles(const char *type) if (!(strcmp(filename, "default"))) continue; if (outputfiles.Contains(filename)) continue; if (aodfiles.Contains(filename)) continue; - if (!outputfiles.IsNull()) outputfiles += ","; + if (!outputfiles.IsNull() && strlen(filename)) outputfiles += ","; outputfiles += filename; } if (stype.Contains("out")) { - if (!files.IsNull()) files += ","; + if (!files.IsNull() && !outputfiles.IsNull()) files += ","; files += outputfiles; if (stype == "out") return files.Data(); } @@ -3745,7 +3750,7 @@ const char *AliAnalysisAlien::GetListOfFiles(const char *type) } delete fextra; if (stype.Contains("ext")) { - if (!files.IsNull()) files += ","; + if (!files.IsNull() && !sextra.IsNull()) files += ","; files += sextra; } } @@ -4074,7 +4079,7 @@ void AliAnalysisAlien::WriteAnalysisMacro() TIter next(list); TObjString *str; while((str=(TObjString*)next())) { - if (str->GetString().Contains(".so")) + if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib")) out << " gSystem->Load(\"" << str->GetString().Data() << "\");" << endl; } if (list) delete list; @@ -4184,7 +4189,7 @@ void AliAnalysisAlien::WriteAnalysisMacro() TIter next(list); TObjString *str; while((str=(TObjString*)next())) { - if (str->GetString().Contains(".so")) + if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib")) out << " gSystem->Load(\"" << str->GetString().Data() << "\");" << endl; if (str->GetString().Contains(".par")) out << " if (!" << setupPar << "(\"" << str->GetString() << "\")) return;" << endl; @@ -4468,7 +4473,7 @@ void AliAnalysisAlien::WriteMergingMacro() TIter next(list); TObjString *str; while((str=(TObjString*)next())) { - if (str->GetString().Contains(".so")) + if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib")) out << " gSystem->Load(\"" << str->GetString().Data() << "\");" << endl; } if (list) delete list; @@ -4579,7 +4584,7 @@ void AliAnalysisAlien::WriteMergingMacro() TIter next(list); TObjString *str; while((str=(TObjString*)next())) { - if (str->GetString().Contains(".so")) + if (str->GetString().Contains(".so") || str->GetString().Contains(".dylib")) out << " gSystem->Load(\"" << str->GetString().Data() << "\");" << endl; } if (list) delete list; @@ -4615,7 +4620,10 @@ void AliAnalysisAlien::WriteMergingMacro() out << "// Set temporary compilation directory to current one" << endl; out << " gSystem->SetBuildDir(gSystem->pwd(), kTRUE);" << endl << endl; out << " TString outputDir = dir;" << endl; - out << " TString outputFiles = \"" << GetListOfFiles("out") << "\";" << endl; + if (IsMergeAOD()) + out << " TString outputFiles = \"" << GetListOfFiles("outaod") << "\";" << endl; + else + out << " TString outputFiles = \"" << GetListOfFiles("out") << "\";" << endl; out << " TString mergeExcludes = \"" << fMergeExcludes << " " << fRegisterExcludes << "\";" << endl; out << " TObjArray *list = outputFiles.Tokenize(\",\");" << endl; out << " TIter *iter = new TIter(list);" << endl; @@ -4631,9 +4639,9 @@ void AliAnalysisAlien::WriteMergingMacro() out << " return;" << endl; out << " }" << endl; if (IsLocalTest()) { - out << " printf(\"===================================\n\");" << endl; + out << " printf(\"===================================\\n\");" << endl; out << " printf(\"Testing merging...\\n\");" << endl; - out << " printf(\"===================================\n\");" << endl; + out << " printf(\"===================================\\n\");" << endl; } out << " while((str=(TObjString*)iter->Next())) {" << endl; out << " outputFile = str->GetString();" << endl; @@ -4662,9 +4670,9 @@ void AliAnalysisAlien::WriteMergingMacro() out << " out.close();" << endl; out << " // read the analysis manager from file" << endl; if (IsLocalTest()) { - out << " printf(\"===================================\n\");" << endl; + out << " printf(\"===================================\\n\");" << endl; out << " printf(\"Testing Terminate()...\\n\");" << endl; - out << " printf(\"===================================\n\");" << endl; + out << " printf(\"===================================\\n\");" << endl; } else { out << " if (!outputDir.Contains(\"Stage\")) return;" << endl; } @@ -5022,7 +5030,7 @@ void AliAnalysisAlien::WriteValidationScript(Bool_t merge) out << "parArch=`grep -Ei \"Cannot Build the PAR Archive\" stderr`" << endl; out << "segViol=`grep -Ei \"Segmentation violation\" stderr`" << endl; out << "segFault=`grep -Ei \"Segmentation fault\" stderr`" << endl; - out << "glibcErr=`grep -Ei \"*** glibc detected ***\" stderr`" << endl; + out << "glibcErr=`grep -Ei '\\*\\*\\* glibc detected \\*\\*\\*' stderr`" << endl; out << "" << endl; out << "if [ \"$parArch\" != \"\" ] ; then" << endl; @@ -5057,7 +5065,7 @@ void AliAnalysisAlien::WriteValidationScript(Bool_t merge) TString outputFiles = fOutputFiles; if (merge && !fTerminateFiles.IsNull()) { - outputFiles += ","; + if (!outputFiles.IsNull()) outputFiles += ","; outputFiles += fTerminateFiles; } TObjArray *arr = outputFiles.Tokenize(",");