]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisAlien.cxx
CopyLocalDataset returns now the number of entries for which the files were actually...
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisAlien.cxx
index dc146227c35e207e683f05a1643a3dd712da1bd2..af9744031a7fab42ad252615a3e6feb46ab25ba4 100644 (file)
 #include "AliAnalysisDataContainer.h"
 #include "AliMultiInputEventHandler.h"
 
+using std::ofstream;
+using std::ifstream;
+using std::ios;
+using std::endl;
 ClassImp(AliAnalysisAlien)
 #if 0
 ;
@@ -1040,18 +1044,18 @@ Bool_t AliAnalysisAlien::CheckInputData()
 }   
 
 //______________________________________________________________________________
-Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *pattern, Int_t nfiles, const char *output, const char *archivefile, const char *outputdir)
+Int_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *pattern, Int_t nfiles, const char *output, const char *archivefile, const char *outputdir)
 {
 // 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 <pattern> 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;
+      return 0;
    }
    if (!DirectoryExists(griddir)) {
       Error("CopyLocalDataset", "Data directory %s not existing.", griddir);
-      return kFALSE;
+      return 0;
    }
    TString command = Form("find -z -l %d %s %s", nfiles, griddir, pattern);
    printf("Running command: %s\n", command.Data());
@@ -1059,7 +1063,7 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte
    Int_t nfound = res->GetEntries();
    if (!nfound) {
       Error("CopyLocalDataset", "No file found in <%s> having pattern <%s>", griddir, pattern);
-      return kFALSE;
+      return 0;
    }
    printf("... found %d files. Copying locally ...\n", nfound);
    
@@ -1080,6 +1084,7 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte
    TString cdir = gSystem->WorkingDirectory();
    gSystem->MakeDirectory(outputdir);
    gSystem->ChangeDirectory(outputdir);
+   Int_t ncopied = 0;
    for (Int_t i=0; i<nfound; i++) {
       map = (TMap*)res->At(i);
       turl = map->GetValue("turl")->GetName();
@@ -1092,34 +1097,34 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte
       TString targetFileName(filename);
       
       if (strlen(archivefile) > 0) {
-       // TODO here the archive in which the file resides should be determined
-       // however whereis returns only a guid, and guid2lfn does not work
-       // Therefore we use the one provided as argument for now
-       source = Form("%s/%s", gSystem->DirName(source.Data()), archivefile);
-       targetFileName = archivefile;
+// TODO here the archive in which the file resides should be determined
+// however whereis returns only a guid, and guid2lfn does not work
+// Therefore we use the one provided as argument for now
+         source = Form("%s/%s", gSystem->DirName(source.Data()), archivefile);
+         targetFileName = archivefile;
       }
       if (TFile::Cp(source, Form("file:./%s/%s", dirname.Data(), targetFileName.Data()))) {
-        Bool_t success = kTRUE;
-        if (additionalArchives)
-           for (Int_t j=0; j<additionalArchives->GetEntriesFast(); 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()));
-           }
+         Bool_t success = kTRUE;
+         if (additionalArchives) {
+            for (Int_t j=0; j<additionalArchives->GetEntriesFast(); 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;
-        }
+         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;
+            ncopied++;
+         }
       }
    }
    gSystem->ChangeDirectory(cdir);
    delete res;
-   if (additionalArchives)
-     delete additionalArchives;
-   return kTRUE;
+   delete additionalArchives;
+   return ncopied;
 }   
 
 //______________________________________________________________________________
@@ -2236,9 +2241,11 @@ TChain *AliAnalysisAlien::GetChainForTestMode(const char *treeName) const
    Int_t count = 0;
     // Read the input list of files and add them to the chain
    TString line;
-   TChain *chain = new TChain(treeName);
+   TString streeName(treeName);
+   if (IsUseMCchain()) streeName = "TE";
+   TChain *chain = new TChain(streeName);
    TChain *chainFriend = 0;
-   if (!fFriendChainName.IsNull()) chainFriend = new TChain(treeName);       
+   if (!fFriendChainName.IsNull()) chainFriend = new TChain(streeName);       
    while (in.good())
    {
       in >> line;
@@ -3737,6 +3744,10 @@ void AliAnalysisAlien::WriteAnalysisMacro()
       out << "   TStopwatch timer;" << endl;
       out << "   timer.Start();" << endl << endl;
       // Change temp directory to current one
+      if (!IsLocalTest()) {  
+         out << "// connect to AliEn and make the chain" << endl;
+         out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
+      }   
       out << "// Set temporary merging directory to current one" << endl;
       out << "   gSystem->Setenv(\"TMPDIR\", gSystem->pwd());" << endl << endl;   
       out << "// Set temporary compilation directory to current one" << endl;
@@ -3886,10 +3897,6 @@ void AliAnalysisAlien::WriteAnalysisMacro()
          out << "   gEnv->SetValue(\"XNet.ReconnectTimeout\",50);" << endl;
          out << "   gEnv->SetValue(\"XNet.FirstConnectMaxCnt\",1);" << endl << endl;
       } 
-      if (!IsLocalTest()) {  
-         out << "// connect to AliEn and make the chain" << endl;
-         out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
-      }   
       out << "// read the analysis manager from file" << endl;
       TString analysisFile = fExecutable;
       analysisFile.ReplaceAll(".sh", ".root");
@@ -3906,6 +3913,8 @@ void AliAnalysisAlien::WriteAnalysisMacro()
          out << "   plugin->SetNtestFiles(" << fNtestFiles << ");" << endl;
          if (!fFriendChainName.IsNull()) 
             out << "   plugin->SetFriendChainName(\"" << fFriendChainName << "\");" << endl;
+         if (IsUseMCchain())
+            out << "   plugin->SetUseMCchain();" << endl;
          out << "   mgr->SetGridHandler(plugin);" << endl;
          if (AliAnalysisManager::GetAnalysisManager()) {
             out << "   mgr->SetDebugLevel(" << AliAnalysisManager::GetAnalysisManager()->GetDebugLevel() << ");" << endl;
@@ -4234,12 +4243,12 @@ void AliAnalysisAlien::WriteMergingMacro()
          out << "   gEnv->SetValue(\"XNet.FirstConnectMaxCnt\",1);" << endl << endl;
       }
       // Change temp directory to current one
+      out << "// Connect to AliEn" << endl;
+      out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
       out << "// Set temporary merging directory to current one" << endl;
       out << "   gSystem->Setenv(\"TMPDIR\", gSystem->pwd());" << endl << endl;   
       out << "// Set temporary compilation directory to current one" << endl;
       out << "   gSystem->SetBuildDir(gSystem->pwd(), kTRUE);" << endl << endl;   
-      out << "// Connect to AliEn" << endl;
-      out << "   if (!TGrid::Connect(\"alien://\")) return;" << endl;
       out << "   TString outputDir = dir;" << endl;  
       out << "   TString outputFiles = \"" << GetListOfFiles("out") << "\";" << endl;
       out << "   TString mergeExcludes = \"" << fMergeExcludes << " " << fRegisterExcludes << "\";" << endl;