add global monitor histo in task infoGen
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 13 Jul 2010 13:12:34 +0000 (13:12 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 13 Jul 2010 13:12:34 +0000 (13:12 +0000)
PWG1/TRD/AliTRDinfoGen.cxx
PWG1/TRD/AliTRDinfoGen.h
PWG1/TRD/macros/AddTRDcheckPID.C
PWG1/TRD/macros/AddTRDinfoGen.C
PWG1/TRD/macros/makeResults.C
PWG1/TRD/run.C

index 64d61e1..9485f35 100644 (file)
@@ -35,7 +35,8 @@
 #include <TObjArray.h>
 #include <TObject.h>
 #include <TString.h>
-#include <TH1F.h>
+#include <TH1S.h>
+#include <TPad.h>
 #include <TFile.h>
 #include <TTree.h>
 #include <TROOT.h>
@@ -108,6 +109,7 @@ AliTRDinfoGen::AliTRDinfoGen()
   ,fTracksSA(NULL)
   ,fTracksKink(NULL)
   ,fV0List(NULL)
+  ,fContainer(NULL)
   ,fDebugStream(NULL)
 {
   //
@@ -132,6 +134,7 @@ AliTRDinfoGen::AliTRDinfoGen(char* name)
   ,fTracksSA(NULL)
   ,fTracksKink(NULL)
   ,fV0List(NULL)
+  ,fContainer(NULL)
   ,fDebugStream(NULL)
 {
   //
@@ -143,6 +146,7 @@ AliTRDinfoGen::AliTRDinfoGen(char* name)
   DefineOutput(kTracksKink, TObjArray::Class());
   DefineOutput(kEventInfo, AliTRDeventInfo::Class());
   DefineOutput(kV0List, TObjArray::Class());
+  DefineOutput(kMonitor, TObjArray::Class()); // histogram list
 }
 
 //____________________________________________________________________
@@ -175,6 +179,22 @@ AliTRDinfoGen::~AliTRDinfoGen()
     delete fV0List;
     fV0List = NULL;
   }
+  if(fContainer){ 
+    fContainer->Delete(); 
+    delete fContainer;
+    fContainer = NULL;
+  }
+}
+
+//____________________________________________________________________
+Bool_t AliTRDinfoGen::GetRefFigure(Int_t)
+{
+  if(!gPad){
+    AliWarning("Please provide a canvas to draw results.");
+    return kFALSE;
+  }
+  fContainer->At(0)->Draw("bar");
+  return kTRUE;
 }
 
 //____________________________________________________________________
@@ -191,6 +211,50 @@ void AliTRDinfoGen::UserCreateOutputObjects()
   fTracksSA = new TObjArray(20); fTracksSA->SetOwner(kTRUE);
   fTracksKink = new TObjArray(20); fTracksKink->SetOwner(kTRUE);
   fV0List = new TObjArray(10); fV0List->SetOwner(kTRUE);
+
+  // define general monitor
+  fContainer = new TObjArray(1); fContainer->SetOwner(kTRUE);
+  TH1 *h=new TH1S("hStat", "Run statistics;Observable;Entries", 12, -0.5, 11.5);
+  TAxis *ax(h->GetXaxis());
+  ax->SetBinLabel( 1, "ESD");
+  ax->SetBinLabel( 2, "MC");
+  ax->SetBinLabel( 3, "V0");
+  ax->SetBinLabel( 4, "TPC");
+  ax->SetBinLabel( 5, "TRDin");
+  ax->SetBinLabel( 6, "TRDout");
+  ax->SetBinLabel( 7, "Barrel");
+  ax->SetBinLabel( 8, "BarrelMC");
+  ax->SetBinLabel( 9, "SA");
+  ax->SetBinLabel(10, "SAMC");
+  ax->SetBinLabel(11, "Kink");
+  ax->SetBinLabel(12, "KinkMC");
+  fContainer->AddAt(h, 0);
+}
+
+//____________________________________________________________________
+Bool_t AliTRDinfoGen::Load(const Char_t *file, const Char_t *dir, const Char_t *name)
+{
+// Load data from performance file
+
+  if(!TFile::Open(file)){
+    AliWarning(Form("Couldn't open file %s.", file));
+    return kFALSE;
+  }
+  if(dir){
+    if(!gFile->cd(dir)){
+      AliWarning(Form("Couldn't cd to %s in %s.", dir, file));
+      return kFALSE;
+    }
+  }
+  TObjArray *o(NULL);
+  const Char_t *tn=(name ? name : GetName());
+  if(!(o = (TObjArray*)gDirectory->Get(tn))){
+    AliWarning(Form("Missing histogram container %s.", tn));
+    return kFALSE;
+  }
+  fContainer = (TObjArray*)o->Clone(GetName());
+  gFile->Close();
+  return kTRUE;
 }
 
 //____________________________________________________________________
@@ -545,12 +609,27 @@ void AliTRDinfoGen::UserExec(Option_t *){
     ,nSA, nSAMC, fTracksSA->GetEntries()
     ,nKink, nKinkMC, fTracksKink->GetEntries()
   ));
+  // save track statistics
+  TH1 *h((TH1S*)fContainer->At(0));
+  h->Fill( 0., nTracksESD);
+  h->Fill( 1., nTracksMC);
+  h->Fill( 2., fV0List->GetEntries());
+  h->Fill( 3., nTPC);
+  h->Fill( 4., nTRDin);
+  h->Fill( 5., nTRDout);
+  h->Fill( 6., nBarrel);
+  h->Fill( 7., nBarrelMC);
+  h->Fill( 8., nSA);
+  h->Fill( 9., nSAMC);
+  h->Fill(10., nKink);
+  h->Fill(11., nKinkMC);
 
   PostData(kTracksBarrel, fTracksBarrel);
   PostData(kTracksSA, fTracksSA);
   PostData(kTracksKink, fTracksKink);
   PostData(kEventInfo, fEventInfo);
   PostData(kV0List, fV0List);
+  PostData(kMonitor, fContainer);
 }
 
 //____________________________________________________________________
@@ -581,3 +660,4 @@ TTreeSRedirector* AliTRDinfoGen::DebugStream()
 }
 
 
+
index 0b77e72..ebd9e89 100644 (file)
@@ -44,9 +44,12 @@ public:
   static Float_t GetEndITS() { return fgkITS;}
   static Float_t GetEndTPC() { return fgkTPC;}
   static Float_t GetEndTRD() { return fgkTRD;}
+  Int_t   GetNRefFigures() const  { return 1;} 
+  Bool_t  GetRefFigure(Int_t ifig);
+  Bool_t  Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
 
   Bool_t  HasMCdata() const       { return TestBit(kMCdata);};
-  // temporary until check with AliAnalysisTaskSE collision selection mechannism
+  // temporary until check with AliAnalysisTaskSE collision selection mechanism
   Bool_t  IsCollision() const {return TestBit(kCollision);}
   void    SetCollision(Bool_t set=kTRUE) {SetBit(kCollision, set);}
 
@@ -98,8 +101,9 @@ private:
   TObjArray        *fTracksSA;       //! Array of stand alone tracks
   TObjArray        *fTracksKink;     //! Array of kink tracks
   TObjArray        *fV0List;         //! V0 container
+  TObjArray        *fContainer;      //! container to store results
   TTreeSRedirector *fDebugStream;    //! debug stream
 
-  ClassDef(AliTRDinfoGen, 5)         // entry to TRD analysis train
+  ClassDef(AliTRDinfoGen, 6)         // entry to TRD analysis train
 };
 #endif
index 8a34736..6b6f6b6 100644 (file)
@@ -6,6 +6,7 @@
 #include "PWG1/TRD/macros/AliTRDperformanceTrain.h"
 #include "PWG1/TRD/AliTRDcheckPID.h"
 #include "PWG1/TRD/AliTRDpidRefMaker.h"
+#include "PWG1/TRD/AliTRDv0Monitor.h"
 #include "PWG1/TRD/AliTRDpidRefMakerNN.h"
 #include "PWG1/TRD/AliTRDpidRefMakerLQ.h"
 #endif
index a7e2fdc..5de8f8f 100644 (file)
@@ -37,6 +37,10 @@ void AddTRDinfoGen(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContaine
   co[kTracksSA] = mgr->CreateContainer("tracksSA", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
   co[kTracksKink] = mgr->CreateContainer("tracksKink", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
   co[kV0List] = mgr->CreateContainer("v0List", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
-  for(Int_t ios(1);ios<kNOutSlots;ios++) mgr->ConnectOutput(info, ios, co[ios]);
+  for(Int_t ios(1);ios<kNOutSlots-1;ios++) mgr->ConnectOutput(info, ios, co[ios]);
+  
+  // add last monitor container
+  AliAnalysisDataContainer *mon=mgr->CreateContainer("infoGen", TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("%s:TRD_Performance",mgr->GetCommonFileName()));
+  mgr->ConnectOutput(info, kNOutSlots-1, mon);
 }
 
index dcb0540..d553b7b 100644 (file)
@@ -123,9 +123,14 @@ void makeResults(Char_t *opt = "ALL", const Char_t *files="QAResults.root", Char
     new(ctask) TClass(fgkTRDtaskClassName[itask]);
     task = (AliAnalysisTask*)ctask->New();
     task->SetName(Form("%s%s", task->GetName(), cid));
-    printf("task %s, output file %s\n", task->GetName(), outputFile.Data());
+    printf(" *** task %s, output file %s\n", task->GetName(), outputFile.Data());
     if(task->IsA()->InheritsFrom("AliTRDrecoTask")) processTRD(task, outputFile.Data());
-    else processESD(task, outputFile.Data());
+    else if(strcmp(task->IsA()->GetName(), "AliTRDcheckESD")==0) processESD(task, outputFile.Data());
+    else if(strcmp(task->IsA()->GetName(), "AliTRDinfoGen")==0)processGEN(task, outputFile.Data());
+    else{
+      Error("makeResults.C", Form("Handling of class task \"%s\" not implemented.", task->IsA()->GetName()));
+      delete task;
+    }
   }
   delete ctask;
   delete c;
@@ -195,3 +200,26 @@ void processESD(TNamed *otask, const Char_t *filename)
   }
   delete esd;
 }
+
+//______________________________________________________
+void processGEN(TNamed *otask, const Char_t *filename)
+{
+  printf("process[%s] : %s\n", otask->GetName(), otask->GetTitle());
+
+  AliTRDinfoGen *info = dynamic_cast<AliTRDinfoGen*>(otask);
+
+  if(!info->Load(filename, "TRD_Performance")){
+    Error("makeResults.C", Form("Load data container for task %s failed.", info->GetName()));
+    delete info;
+    return;
+  }
+  if(!summary){
+    for(Int_t ipic(0); ipic<info->GetNRefFigures(); ipic++){
+      c->Clear(); 
+      if(!info->GetRefFigure(ipic)) continue;
+      c->SaveAs(Form("%s_Fig%02d.gif", info->GetName(), ipic));
+    }
+  }
+
+  delete info;
+}
\ No newline at end of file
index 4d26484..c9d87c9 100644 (file)
@@ -105,6 +105,7 @@ void run(Char_t *optList="ALL", const Char_t *files=0x0, Long64_t nev=1234567890
 
   // VERY GENERAL SETTINGS
   //AliLog::SetGlobalLogLevel(AliLog::kError);
+  gStyle->SetOptStat(0);
   if(gSystem->Load("libANALYSIS.so")<0) return;
   if(gSystem->Load("libANALYSISalice.so")<0) return;
   if(gSystem->Load("libTENDER.so")<0) return;