]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/qaRec/makeResults.C
extend macro to run on batch
[u/mrichter/AliRoot.git] / TRD / qaRec / makeResults.C
index c10cac93e3787007fcfd6d0c88a6b4d1921856b8..6562f5a9c0703f874a9e68690a608620e24fa908 100644 (file)
 
 Char_t *libs[] = {"libProofPlayer.so", "libANALYSIS.so", "libTRDqaRec.so", "libPyROOT"};
 
-void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
+void makeResults(Char_t *args = "ALL")
 {
        // Load Libraries in interactive mode
   Int_t nlibs = static_cast<Int_t>(sizeof(libs)/sizeof(Char_t *));
   for(Int_t ilib=0; ilib<nlibs; ilib++){
-    if(!gSystem->Load(libs[ilib])) continue;
+    if(gSystem->Load(libs[ilib]) >= 0) continue;
     printf("Failed to load %s.\n", libs[ilib]);
     return;
   }
@@ -36,10 +36,29 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
   Bool_t mc      = kTRUE;
   Bool_t friends = kTRUE;
 
+  Char_t *dir = 0x0;
+  TString tasks;
+  TObjArray *argsArray = TString(args).Tokenize("?");
+  switch(argsArray->GetEntriesFast()){
+  case 1:
+    tasks = ((TObjString*)(*argsArray)[0])->String();
+    dir=0x0;
+    break;
+  case 2:
+    tasks = ((TObjString*)(*argsArray)[0])->String();
+    dir = ((TObjString*)(*argsArray)[1])->GetName();
+    break;
+  default:
+    printf("Macro accepts 2 arguments separated by a '?'.\n");
+    printf("arg #1 : list of tasks/options\n");
+    printf("arg #2 : base directory to be processed\n");
+    return;
+  }
+
   // select tasks to process; we should move it to an 
   // individual function and move the task identifiers 
   // outside the const space
-  TObjArray *tasksArray = TString(tasks).Tokenize(" ");
+  TObjArray *tasksArray = tasks.Tokenize(" ");
   Int_t fSteerTask = 0;
   for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
     TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
@@ -74,7 +93,9 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
   TObjArray *fContainer = 0x0;
   AliTRDrecoTask *task = 0x0;
 
-  printf("\n\tPROCESSING DATA FOR TASKS [%d]:\n", fSteerTask);
+  if(gSystem->AccessPathName(Form("%s/merge",  gSystem->ExpandPathName("$PWD")))) gSystem->Exec(Form("mkdir -v %s/merge",  gSystem->ExpandPathName("$PWD")));
+
+  printf("\n\tPROCESSING DATA FOR TASKS [%b]:\n", fSteerTask);
   for(Int_t itask = 1; itask <fknTasks; itask++){
     if(!TESTBIT(fSteerTask, itask)) continue;
 
@@ -86,7 +107,7 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
     printf("\t%s [%s]\n", task->GetTitle(), task->GetName());
 
      // setup filelist
-    TString pathname(dir ? "." : gSystem->ExpandPathName("$PWD"));
+    TString pathname = gSystem->ExpandPathName( dir ? dir : "$PWD");
     TString filestring((const Char_t*) pyshell->Eval(Form("commands.getstatusoutput(\"find %s | grep TRD.Task%s.root\")[1]", pathname.Data(), task->GetName())));
     TObjArray *filenames = filestring.Tokenize("\n");
     Int_t nFiles = filenames->GetEntriesFast();
@@ -99,19 +120,18 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
 
     if(nFiles>1){
       fFM = new(fFM) TFileMerger(kTRUE);
-      fFM->OutputFile(Form("merge/TRD.Task%s.root",  task->GetName()));
+      fFM->OutputFile(Form("%s/merge/TRD.Task%s.root",  gSystem->ExpandPathName("$PWD"), task->GetName()));
       for(Int_t ifile = 0; ifile < nFiles; ifile++){
         TString filename = (dynamic_cast<TObjString *>(filenames->UncheckedAt(ifile)))->String();
         if(filename.Contains("merge")) continue;
-        printf("\tProcessing %s ...\n", filename.Data());
+        //printf("\tProcessing %s ...\n", filename.Data());
         fFM->AddFile(filename.Data());
       }
       fFM->Merge();
       fFM->~TFileMerger();
-      task->Load(Form("%s/merge/TRD.Task%s.root",gSystem->ExpandPathName("$PWD"), task->GetName()));
+      task->Load(Form("%s/merge/TRD.Task%s.root", gSystem->ExpandPathName("$PWD"), task->GetName()));
     } else task->Load((dynamic_cast<TObjString *>(filenames->UncheckedAt(0)))->String().Data());
 
-
     if(!(fContainer = task->Container())) {
       delete task;
       delete ctask;
@@ -128,10 +148,10 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
       
       if(o->InheritsFrom("TH1")){ 
         h = dynamic_cast<TH1*>(o);
-        h->Draw("pl");
+        h->Draw(opt);
       } else if(o->InheritsFrom("TGraph")){ 
         g = dynamic_cast<TGraph*>(o);
-        g->Draw("apl");
+        g->Draw(Form("a%s", opt));
       } else{
         printf("No idea how to plot object of type %s.\n", o->IsA()->GetName());
         printf("Please teach me.\n");
@@ -142,10 +162,10 @@ void makeResults(Char_t* dir=0x0, Char_t *tasks = "ALL")
         if(!(o = fContainer->At(ig))) continue;
         if(o->InheritsFrom("TH1")){
           h = dynamic_cast<TH1*>(o);
-          h->Draw("plsame");
+          h->Draw(Form("%ssame", opt));
         } else if(o->InheritsFrom("TGraph")){
           g = dynamic_cast<TGraph*>(o);
-          g->Draw("pl");
+          g->Draw(opt);
         }
       }
       c->SaveAs(Form("%s_fig%d.gif", task->GetName(), ipic));