]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliAnalysisTaskProtonsQA.cxx
added ration ITS global/TPC
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskProtonsQA.cxx
index adb872473ced41e1dd84ad32cdd2bcd4e24799f9..0126bec84cba6f51b14998e5d237d30045613049 100644 (file)
@@ -1,6 +1,7 @@
 #include "TChain.h"
 #include "TTree.h"
 #include "TList.h"
+#include "TH1F.h"
 
 #include "AliAnalysisTask.h"
 #include "AliAnalysisManager.h"
@@ -12,6 +13,7 @@
 #include "AliMCEvent.h"
 #include "AliStack.h"
 #include "AliESDVertex.h"
+#include "AliPhysicsSelection.h"
 
 #include "AliProtonQAAnalysis.h"
 #include "AliProtonAnalysisBase.h"
@@ -27,18 +29,18 @@ ClassImp(AliAnalysisTaskProtonsQA)
   
 //________________________________________________________________________ 
 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA()
-  : AliAnalysisTask(), fESD(0), fMC(0),
+  : AliAnalysisTask(), fESD(0), fMC(0), fHistEventStats(0),
     fList0(0), fList1(0), fList2(0), fList3(0), 
-    fList4(0), fList5(0), fList6(0), fList7(0),
+    fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
     fProtonQAAnalysis(0) {
   //Dummy constructor
 }
 
 //________________________________________________________________________
 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA(const char *name) 
-  : AliAnalysisTask(name, ""), fESD(0), fMC(0),
+  : AliAnalysisTask(name, ""), fESD(0), fMC(0), fHistEventStats(0),
     fList0(0), fList1(0), fList2(0), fList3(0), 
-    fList4(0), fList5(0), fList6(0), fList7(0),
+    fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
     fProtonQAAnalysis(0) {
   // Constructor
   
@@ -54,6 +56,8 @@ AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA(const char *name)
   DefineOutput(5, TList::Class());
   DefineOutput(6, TList::Class());
   DefineOutput(7, TList::Class());
+  DefineOutput(8, TList::Class());
+  DefineOutput(9, TH1F::Class());
 }
 
 //________________________________________________________________________
@@ -85,6 +89,14 @@ void AliAnalysisTaskProtonsQA::ConnectInputData(Option_t *) {
 void AliAnalysisTaskProtonsQA::CreateOutputObjects() {
   // Create histograms
   // Called once  
+  TString gCutName[5] = {"Total","Triggered","Offline trigger",
+                        "Vertex","Analyzed"};
+  fHistEventStats = new TH1F("fHistEventStats",
+                            "Event statistics;;N_{events}",
+                            5,0.5,5.5);
+  for(Int_t i = 1; i <= 5; i++) 
+    fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
+
   fList0 = new TList();
   fList0 = fProtonQAAnalysis->GetGlobalQAList();
 
@@ -108,6 +120,9 @@ void AliAnalysisTaskProtonsQA::CreateOutputObjects() {
 
   fList7 = new TList();
   fList7 = fProtonQAAnalysis->GetVertexQAList();
+
+  fList8 = new TList();
+  fList8 = fProtonQAAnalysis->GetCutEfficiencyList();
 }
 
 //________________________________________________________________________
@@ -136,19 +151,96 @@ void AliAnalysisTaskProtonsQA::Exec(Option_t *) {
     Printf("ERROR: Could not retrieve the stack");
     return;
   }
-  
+
+  fHistEventStats->Fill(1);
+  if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOnlineTriggerUsed()) {
+    //online trigger
     if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) {
+      fHistEventStats->Fill(2);
+      
+      //offline trigger
+      if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
+       AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
+       if(gPhysicselection->IsCollisionCandidate(fESD)) {
+         fHistEventStats->Fill(3);
+         
+         fProtonQAAnalysis->RunVertexQA(header,
+                                        fESD);
+         const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
+         fHistEventStats->Fill(4);
+         
+         if(vertex) {
+           fHistEventStats->Fill(5);
+           fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
+           fProtonQAAnalysis->RunMCAnalysis(stack);
+           fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
+           fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
+           fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
+         }//accepted vertex
+       }//offline trigger
+      }//offline trigger used
+      else {
+       fHistEventStats->Fill(3);
+       
+       fProtonQAAnalysis->RunVertexQA(header,
+                                      fESD);
+       const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
+       fHistEventStats->Fill(4);
+       
+       if(vertex) {
+         fHistEventStats->Fill(5);
+         fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
+         fProtonQAAnalysis->RunMCAnalysis(stack);
+         fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
+         fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
+         fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
+       }//accepted vertex
+      }//offline trigger not used
+    }//triggered event - online
+  }//online trigger used
+  else {
+    fHistEventStats->Fill(2);
+    
+    //offline trigger
+    if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
+      AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
+      if(gPhysicselection->IsCollisionCandidate(fESD)) {
+       fHistEventStats->Fill(3);
+       
+       fProtonQAAnalysis->RunVertexQA(header,
+                                      fESD);
+       const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
+       fHistEventStats->Fill(4);
+       
+       if(vertex) {
+         fHistEventStats->Fill(5);
+         fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
+         fProtonQAAnalysis->RunMCAnalysis(stack);
+         fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
+         fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
+         fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
+       }//accepted vertex
+      }//offline trigger
+    }//offline trigger used
+    else {
+      fHistEventStats->Fill(3);
+      
       fProtonQAAnalysis->RunVertexQA(header,
                                     fESD);
       const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
-    if(vertex) {
-      fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
-      fProtonQAAnalysis->RunMCAnalysis(stack);
-      fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
-      fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC, fESD, vertex);
-    }//accepted vertex
-  }//triggered event
-  
+      fHistEventStats->Fill(4);
+      
+      if(vertex) {
+       fHistEventStats->Fill(5);
+       fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
+       fProtonQAAnalysis->RunMCAnalysis(stack);
+       fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
+       fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
+       fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
+      }//accepted vertex
+    }//offline trigger not used
+  }//online trigger not used
+
   // Post output data.
   PostData(0, fList0);
   PostData(1, fList1);
@@ -158,6 +250,8 @@ void AliAnalysisTaskProtonsQA::Exec(Option_t *) {
   PostData(5, fList5);
   PostData(6, fList6);
   PostData(7, fList7);
+  PostData(8, fList8);
+  PostData(9, fHistEventStats);
 }      
 
 //________________________________________________________________________
@@ -205,6 +299,16 @@ void AliAnalysisTaskProtonsQA::Terminate(Option_t *) {
     Printf("ERROR: fList7 not available");
     return;
   }
+  fList8 = dynamic_cast<TList*> (GetOutputData(8));
+  if (!fList8) {
+    Printf("ERROR: fList8 not available");
+    return;
+  }
+  fHistEventStats = dynamic_cast<TH1F*> (GetOutputData(9));
+  if (!fHistEventStats) {
+    Printf("ERROR: fHistEventStats not available");
+    return;
+  }
 }