From 2ba4c287c3c24d427c62e9d218cec348b97b90a8 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Thu, 1 Dec 2011 08:39:49 +0000 Subject: [PATCH] supporting multiple files in CopyLocalDataset --- ANALYSIS/AliAnalysisAlien.cxx | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/ANALYSIS/AliAnalysisAlien.cxx b/ANALYSIS/AliAnalysisAlien.cxx index 86b1cf5b507..932c4c936e6 100644 --- a/ANALYSIS/AliAnalysisAlien.cxx +++ b/ANALYSIS/AliAnalysisAlien.cxx @@ -1030,6 +1030,7 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte { // Copy data from the given grid directory according a pattern and make a local // dataset. +// archivefile (optional) results in that the archive containing the file is copied. archivefile can contain a list of files (semicolon-separated) which are all copied if (!Connect()) { Error("CopyLocalDataset", "Cannot copy local dataset with no grid connection"); return kFALSE; @@ -1047,6 +1048,16 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte return kFALSE; } printf("... found %d files. Copying locally ...\n", nfound); + + // archives + TObjArray* additionalArchives = 0; + if (strlen(archivefile) > 0 && TString(archivefile).Contains(";")) { + additionalArchives = TString(archivefile).Tokenize(";"); + archivefile = additionalArchives->At(0)->GetName(); + additionalArchives->RemoveAt(0); + additionalArchives->Compress(); + } + // Copy files locally ofstream out; out.open(output, ios::out); @@ -1074,12 +1085,26 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte targetFileName = archivefile; } if (TFile::Cp(source, Form("file:./%s/%s", dirname.Data(), targetFileName.Data()))) { - if (strlen(archivefile) > 0) targetFileName = Form("%s#%s", targetFileName.Data(), gSystem->BaseName(turl.Data())); - out << cdir << Form("/%s/%s/%s", outputdir, dirname.Data(), targetFileName.Data()) << endl; + Bool_t success = kTRUE; + if (additionalArchives) + for (Int_t j=0; jGetEntriesFast(); j++) + { + TString target; + target.Form("./%s/%s", dirname.Data(), additionalArchives->At(j)->GetName()); + gSystem->MakeDirectory(gSystem->DirName(target)); + success &= TFile::Cp(Form("%s/%s", gSystem->DirName(source.Data()), additionalArchives->At(j)->GetName()), Form("file:%s", target.Data())); + } + + if (success) { + if (strlen(archivefile) > 0) targetFileName = Form("%s#%s", targetFileName.Data(), gSystem->BaseName(turl.Data())); + out << cdir << Form("/%s/%s/%s", outputdir, dirname.Data(), targetFileName.Data()) << endl; + } } } gSystem->ChangeDirectory(cdir); delete res; + if (additionalArchives) + delete additionalArchives; return kTRUE; } -- 2.43.0