]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisAlien.cxx
Fix for savannah bug report 87728 (Laurent) + fix invalid read found with valgrind...
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisAlien.cxx
index 73a0dc8ee0447fcbd403ffc9d5ea4812870c0a6f..537ebbff144c23ab306ae0432cbe82e0ca02ce4e 100644 (file)
@@ -569,6 +569,34 @@ Bool_t AliAnalysisAlien::LoadModule(AliAnalysisTaskCfg *mod)
    return kTRUE;
 }
 
+//______________________________________________________________________________
+Bool_t AliAnalysisAlien::GenerateTrain(const char *name)
+{
+// Generate the full train.
+   fAdditionalLibs = "";
+   if (!LoadModules()) return kFALSE;
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+   if (!mgr->InitAnalysis()) return kFALSE;
+   mgr->PrintStatus();
+   Int_t productionMode = fProductionMode;
+   SetProductionMode();
+   TString macro = fAnalysisMacro;
+   TString executable = fExecutable;
+   TString validation = fValidationScript;
+   TString execCommand = fExecutableCommand;
+   SetAnalysisMacro(Form("%s.C", name));
+   SetExecutable(Form("%s.sh", name));
+   SetExecutableCommand("aliroot -b -q ");
+   SetValidationScript(Form("%s_validation.sh", name));
+   StartAnalysis();
+   SetProductionMode(productionMode);
+   fAnalysisMacro = macro;
+   fExecutable = executable;
+   fExecutableCommand = execCommand;
+   fValidationScript = validation;
+   return kTRUE;   
+}   
+
 //______________________________________________________________________________
 Bool_t AliAnalysisAlien::GenerateTest(const char *name, const char *modname)
 {
@@ -969,7 +997,7 @@ Bool_t AliAnalysisAlien::CheckInputData()
 }   
 
 //______________________________________________________________________________
-Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *pattern, Int_t nfiles, const char *output, const char *anchorfile)
+Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *pattern, Int_t nfiles, const char *output, const char *anchorfile, const char *outputdir)
 {
 // Copy data from the given grid directory according a pattern and make a local
 // dataset.
@@ -996,8 +1024,8 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte
    TMap *map;
    TString turl, dirname, filename, temp;
    TString cdir = gSystem->WorkingDirectory();
-   gSystem->MakeDirectory("data");
-   gSystem->ChangeDirectory("data");
+   gSystem->MakeDirectory(outputdir);
+   gSystem->ChangeDirectory(outputdir);
    for (Int_t i=0; i<nfound; i++) {
       map = (TMap*)res->At(i);
       turl = map->GetValue("turl")->GetName();
@@ -1007,7 +1035,7 @@ Bool_t AliAnalysisAlien::CopyLocalDataset(const char *griddir, const char *patte
       gSystem->MakeDirectory(dirname);
       if (TFile::Cp(turl, Form("file:./%s/%s", dirname.Data(), filename.Data()))) {
          if (strlen(anchorfile)) filename = Form("%s#%s", filename.Data(), anchorfile);
-         out << cdir << "/data/" << Form("%s/%s", dirname.Data(), filename.Data()) << endl;
+         out << cdir << Form("/%s/%s/%s", outputdir, dirname.Data(), filename.Data()) << endl;
       }
    }
    gSystem->ChangeDirectory(cdir);
@@ -2422,7 +2450,7 @@ Bool_t AliAnalysisAlien::CheckMergedFiles(const char *filename, const char *alie
    }   
    // Copy the file in the output directory
    printf("===> Copying collection %s in the output directory %s\n", Form("Stage_%d.xml",stage), aliendir);
-   TFile::Cp(Form("Stage_%d.xml",stage), Form("alien://%s/Stage_%d.xml",aliendir,stage));
+//   TFile::Cp(Form("Stage_%d.xml",stage), Form("alien://%s/Stage_%d.xml",aliendir,stage));
    if (!copyLocal2Alien("CheckMergedFiles", Form("Stage_%d.xml",stage), 
         Form("%s/Stage_%d.xml",aliendir,stage))) Fatal("","Terminating");
    // Check if this is the last stage to be done.
@@ -2616,7 +2644,7 @@ Bool_t AliAnalysisAlien::MergeOutput(const char *output, const char *basedir, In
          // Loop 'find' results and get next LFN
          if (countZero == nmaxmerge) {
             // First file in chunk - create file merger and add previous chunk if any.
-            fm = new TFileMerger(kFALSE);
+            fm = new TFileMerger(kTRUE);
             fm->SetFastMethod(kTRUE);
             if (previousChunk.Length()) fm->AddFile(previousChunk.Data());
             outputChunk = outputFile;
@@ -2656,7 +2684,7 @@ Bool_t AliAnalysisAlien::MergeOutput(const char *output, const char *basedir, In
    }
    // Merging stage different than 0.
    // Move to the begining of the requested chunk.
-   fm = new TFileMerger(kFALSE);
+   fm = new TFileMerger(kTRUE);
    fm->SetFastMethod(kTRUE);
    while ((nextfile=next())) fm->AddFile(nextfile->GetName());
    delete listoffiles;
@@ -3548,7 +3576,6 @@ void AliAnalysisAlien::WriteAnalysisFile()
       workdir += fGridWorkingDir;
       Info("WriteAnalysisFile", "\n#####   Copying file <%s> containing your initialized analysis manager to your alien workspace", analysisFile.Data());
       if (FileExists(analysisFile)) gGrid->Rm(analysisFile);
-      TFile::Cp(Form("file:%s",analysisFile.Data()), Form("alien://%s/%s", workdir.Data(),analysisFile.Data()));
       if (!copyLocal2Alien("WriteAnalysisFile",analysisFile.Data(), 
           Form("%s/%s", workdir.Data(),analysisFile.Data()))) Fatal("","Terminating");
    }   
@@ -3762,10 +3789,19 @@ void AliAnalysisAlien::WriteAnalysisMacro()
       if (IsLocalTest()) {
          out << "   AliAnalysisAlien *plugin = new AliAnalysisAlien();" << endl;
          out << "   plugin->SetRunMode(\"test\");" << endl;
-         out << "   plugin->SetFileForTestMode(\"data.txt\");" << endl;
+         if (fFileForTestMode.IsNull())
+            out << "   plugin->SetFileForTestMode(\"data.txt\");" << endl;
+         else   
+            out << "   plugin->SetFileForTestMode(\"" << fFileForTestMode << "\");" << endl;
+         out << "   plugin->SetNtestFiles(" << fNtestFiles << ");" << endl;
          out << "   mgr->SetGridHandler(plugin);" << endl;
-         out << "   mgr->SetDebugLevel(10);" << endl;
-         out << "   mgr->SetNSysInfo(100);" << endl;
+         if (AliAnalysisManager::GetAnalysisManager()) {
+            out << "   mgr->SetDebugLevel(" << AliAnalysisManager::GetAnalysisManager()->GetDebugLevel() << ");" << endl;
+            out << "   mgr->SetNSysInfo(" << AliAnalysisManager::GetAnalysisManager()->GetNsysInfo() << ");" << endl;
+         } else {
+            out << "   mgr->SetDebugLevel(10);" << endl;
+            out << "   mgr->SetNSysInfo(100);" << endl;
+         }
       }
       out << "   mgr->PrintStatus();" << endl;
       if (AliAnalysisManager::GetAnalysisManager()) {
@@ -3911,7 +3947,7 @@ void AliAnalysisAlien::WriteMergingMacro()
    }   
    TString mergingMacro = fExecutable;
    mergingMacro.ReplaceAll(".sh","_merge.C");
-   if (!fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s/%s", gGrid->GetHomeDirectory(), fGridWorkingDir.Data(), fGridOutputDir.Data());
+   if (gGrid && !fGridOutputDir.Contains("/")) fGridOutputDir = Form("%s/%s/%s", gGrid->GetHomeDirectory(), fGridWorkingDir.Data(), fGridOutputDir.Data());
    if (!TestBit(AliAnalysisGrid::kSubmit)) {  
       ofstream out;
       out.open(mergingMacro.Data(), ios::out);