- add output graphs for efficiency
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 18 Feb 2009 14:20:53 +0000 (14:20 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 18 Feb 2009 14:20:53 +0000 (14:20 +0000)
- update train to cope with running only ESD task (fast check)

TRD/qaRec/AliTRDcheckESD.cxx
TRD/qaRec/AliTRDcheckESD.h
TRD/qaRec/run.C

index 752061a83e67f6975e911a6628589cc3a2f39350..85cf979c74c43de05c384bf5db2dd4be373b5c5a 100644 (file)
@@ -18,6 +18,7 @@
 #include <TObjArray.h>
 #include <TObject.h>
 #include <TH2I.h>
+#include <TGraphErrors.h>
 #include <TFile.h>
 #include <TTree.h>
 #include <TROOT.h>
@@ -115,6 +116,10 @@ void AliTRDcheckESD::CreateOutputObjects()
     h->GetZaxis()->SetTitle("entries");
   } else h->Reset();
   fHistos->AddAt(h, kTRDstat);
+
+  TObjArray *res = new TObjArray();
+  res->SetName("Results");
+  fHistos->AddAt(res, kResults);
 }
 
 //____________________________________________________________________
@@ -123,18 +128,18 @@ void AliTRDcheckESD::Exec(Option_t *){
   // Run the Analysis
   //
   if(!fESD){
-    AliError("ESD not found");
+    AliError("ESD event missing.");
     return;
   }
 
   // Get MC information if available
   AliStack * fStack = 0x0;
   if(HasMC() && !fMC){ 
-    AliWarning("Monte Carlo Event not available");
+    AliWarning("MC event missing");
     SetMC(kFALSE);
   } else {
     if(!(fStack = fMC->Stack())){
-      AliWarning("Cannot get the Monte Carlo Stack");
+      AliWarning("MC stack missing");
       SetMC(kFALSE);
     }
   }
@@ -151,7 +156,7 @@ void AliTRDcheckESD::Exec(Option_t *){
     if(esdTrack->GetNcls(2)) nTRD++;
 
     // track status
-    ULong_t status = esdTrack->GetStatus();
+    //ULong_t status = esdTrack->GetStatus();
 
     // TRD PID
     Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
@@ -180,12 +185,16 @@ void AliTRDcheckESD::Exec(Option_t *){
     // read MC particle
     AliMCParticle *mcParticle = 0x0; 
     if(!(mcParticle = fMC->GetTrack(TMath::Abs(fLabel)))){
-      AliWarning(Form("MC particle missing for ESD fLabel %d.", fLabel));
+      AliWarning(Form("MC particle missing. Label[ %d].", fLabel));
       continue;
     }
 
     AliTrackReference *ref = 0x0; 
     Int_t nRefs = mcParticle->GetNumberOfTrackReferences();
+    if(!nRefs){
+      AliWarning(Form("Track refs missing. Label[%d].", fLabel));
+      continue;
+    }
     Int_t iref = 0;
     while(iref<nRefs){
       ref = mcParticle->GetTrackReference(iref);
@@ -195,7 +204,7 @@ void AliTRDcheckESD::Exec(Option_t *){
 
     // read TParticle
     TParticle *tParticle = mcParticle->Particle(); 
-    Int_t fPdg = tParticle->GetPdgCode();
+    //Int_t fPdg = tParticle->GetPdgCode();
     //tParticle->IsPrimary();
 
     //printf("[%c] ref[%2d]=", tParticle->IsPrimary() ? 'P' : 'S', iref);
@@ -204,16 +213,23 @@ void AliTRDcheckESD::Exec(Option_t *){
     if(ref){
       if(ref->LocalX() > xTOF){ 
         //printf("  TOF   [");
-        ref = mcParticle->GetTrackReference(iref-1);
+        ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0));
       } else {
         //printf("%7.2f [", ref->LocalX());
-        TRDin=1;
-        if(esdTrack->GetNcls(2)) TRDout=1;
-        if(esdTrack->GetTRDpidQuality()) TRDpid=1;
+        if(ref->LocalX() < 300. && tParticle->IsPrimary()){
+          TRDin=1;
+          if(esdTrack->GetNcls(2)) TRDout=1;
+          if(esdTrack->GetTRDpidQuality()) TRDpid=1;
+        }
       }
     } else { 
       //printf("  TPC   [");
-      ref = mcParticle->GetTrackReference(iref-1);
+      ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0));
+    }
+    if(!ref){
+      printf("[%c] ref[%2d] [", tParticle->IsPrimary() ? 'P' : 'S', iref);
+      for(Int_t ir=0; ir<nRefs; ir++) printf(" %6.2f", mcParticle->GetTrackReference(ir)->LocalX());
+      printf("]\n");
     }
     Float_t pt = ref->Pt();
     //printf("%f]\n", pt);
@@ -235,4 +251,58 @@ void AliTRDcheckESD::Exec(Option_t *){
 //____________________________________________________________________
 void AliTRDcheckESD::Terminate(Option_t *)
 {
+  TH2I *h2 = (TH2I*)fHistos->At(kTRDstat);
+  TAxis *ax = h2->GetXaxis();
+  TObjArray *res = (TObjArray*)fHistos->At(kResults);
+  
+  TH1 *h1[2] = {0x0, 0x0};
+  TGraphErrors *g = 0x0;
+  res->Expand(1);
+  Int_t n1 = 0, n2 = 0, ip=0;
+  Double_t eff = 0.;
+  
+  // geometrical efficiency
+  h1[0] = h2->ProjectionX("px0", 1, 1);
+  h1[1] = h2->ProjectionX("px1", 2, 2);
+  res->Add(g = new TGraphErrors());
+  g->SetNameTitle("geom", "TRD geometrical efficiency (TRDin/TPCout)");
+  for(Int_t ib=1; ib<=ax->GetNbins(); ib++){
+    if(!(n1 = (Int_t)h1[0]->GetBinContent(ib))) continue;
+    n2 = (Int_t)h1[1]->GetBinContent(ib);
+    eff = n2/Float_t(n1);
+
+    ip=g->GetN();
+    g->SetPoint(ip, ax->GetBinCenter(ib), eff);
+    g->SetPointError(ip, 0., n2 ? eff*TMath::Sqrt(1./n1+1./n2) : 0.);
+  }
+
+  // tracking efficiency
+  h1[0] = h2->ProjectionX("px0", 2, 2);
+  h1[1] = h2->ProjectionX("px1", 3, 3);
+  res->Add(g = new TGraphErrors());
+  g->SetNameTitle("tracking", "TRD tracking efficiency (TRDout/TRDin)");
+  for(Int_t ib=1; ib<=ax->GetNbins(); ib++){
+    if(!(n1 = (Int_t)h1[0]->GetBinContent(ib))) continue;
+    n2 = (Int_t)h1[1]->GetBinContent(ib);
+    eff = n2/Float_t(n1);
+
+    ip=g->GetN();
+    g->SetPoint(ip, ax->GetBinCenter(ib), eff);
+    g->SetPointError(ip, 0., n2 ? eff*TMath::Sqrt(1./n1+1./n2) : 0.);
+  }
+
+  // PID efficiency
+  h1[0] = h2->ProjectionX("px0", 2, 2);
+  h1[1] = h2->ProjectionX("px1", 4, 4);
+  res->Add(g = new TGraphErrors());
+  g->SetNameTitle("PID", "TRD PID efficiency (TRDpid/TRDin)");
+  for(Int_t ib=1; ib<=ax->GetNbins(); ib++){
+    if(!(n1 = (Int_t)h1[0]->GetBinContent(ib))) continue;
+    n2 = (Int_t)h1[1]->GetBinContent(ib);
+    eff = n2/Float_t(n1);
+
+    ip=g->GetN();
+    g->SetPoint(ip, ax->GetBinCenter(ib), eff);
+    g->SetPointError(ip, 0., n2 ? eff*TMath::Sqrt(1./n1+1./n2) : 0.);
+  }
 }
index 7f617f13aa1596e76877ddce09ce15f77cc8b4fd..9b8beb0969533465c754a9dc39b3d4817d990109 100644 (file)
@@ -25,17 +25,18 @@ public:
   };
   enum ETRDcheckESDhistos {
     kNCl     = 0   // number of clusters per track
-   ,kTRDstat = 2   // TRD tracks status
+   ,kTRDstat = 1   // TRD tracks status
+   ,kResults = 2   // graphs as results
   };
   AliTRDcheckESD();
   virtual ~AliTRDcheckESD();
   
   void    ConnectInputData(Option_t *);
   void    CreateOutputObjects();
+  void    Exec(Option_t *);
 
   Bool_t  HasMC() const { return TESTBIT(fStatus, kMC);}
-
-  void    Exec(Option_t *);
+  Bool_t  Load(const Char_t *fn);
   void    SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
   void    Terminate(Option_t *);
 
index 5bf0dd79fbf25ab5ef40ccdd81aa842946bded9b..00bf284d6e1b56355d78ec71d25d5efcb2d8d08c 100644 (file)
@@ -116,11 +116,11 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0)
   Bool_t fHasFriends = kTRUE;
   TObjArray *tasksArray = TString(tasks).Tokenize(" ");
 
-  Int_t fSteerTask = 0; SETBIT(fSteerTask, kInfoGen);
+  Int_t fSteerTask = 0;
   for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
     TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
     if(s.CompareTo("ALL") == 0){
-      for(Int_t itask = 1; itask < NQATASKS; itask++) SETBIT(fSteerTask, itask);
+      for(Int_t itask = 0; itask < NQATASKS; itask++) SETBIT(fSteerTask, itask);
       continue;
     } else if(s.CompareTo("NOFR") == 0){ 
       fHasFriends = kFALSE;
@@ -130,7 +130,7 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0)
       Bool_t foundOpt = kFALSE;  
       for(Int_t itask = 1; itask < NTRDTASKS; itask++){
         if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
-        SETBIT(fSteerTask, itask);
+        SETBIT(fSteerTask, itask); SETBIT(fSteerTask, 0);
         foundOpt = kTRUE;
         break;
       }
@@ -186,15 +186,17 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0)
 
   //____________________________________________
   // TRD track summary generator
-  mgr->AddTask(task = new AliTRDtrackInfoGen());
-  taskPtr[(Int_t)kInfoGen] = task;
-  task->SetDebugLevel(0);
-  task->SetMCdata(fHasMCdata);
-  mgr->ConnectInput( task, 0, mgr->GetCommonInputContainer());
-  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
-  AliAnalysisDataContainer *coutput1a = mgr->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer);
-  mgr->ConnectOutput(task, 0, coutput1);
-  mgr->ConnectOutput(task, 1, coutput1a);
+       if(TSTBIT(fSteerTask, kInfoGen)){
+    mgr->AddTask(task = new AliTRDtrackInfoGen());
+    taskPtr[(Int_t)kInfoGen] = task;
+    task->SetDebugLevel(0);
+    task->SetMCdata(fHasMCdata);
+    mgr->ConnectInput( task, 0, mgr->GetCommonInputContainer());
+    AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
+    AliAnalysisDataContainer *coutput1a = mgr->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer);
+    mgr->ConnectOutput(task, 0, coutput1);
+    mgr->ConnectOutput(task, 1, coutput1a);
+  }
 
   //____________________________________________
   // TRD detector checker