#include "TChain.h"
#include "TTree.h"
#include "TList.h"
+#include "TH1F.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliMCEvent.h"
#include "AliStack.h"
#include "AliESDVertex.h"
+#include "AliPhysicsSelection.h"
#include "AliProtonQAAnalysis.h"
#include "AliProtonAnalysisBase.h"
//________________________________________________________________________
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
DefineOutput(5, TList::Class());
DefineOutput(6, TList::Class());
DefineOutput(7, TList::Class());
+ DefineOutput(8, TList::Class());
+ DefineOutput(9, TH1F::Class());
}
//________________________________________________________________________
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();
fList7 = new TList();
fList7 = fProtonQAAnalysis->GetVertexQAList();
+
+ fList8 = new TList();
+ fList8 = fProtonQAAnalysis->GetCutEfficiencyList();
}
//________________________________________________________________________
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);
PostData(5, fList5);
PostData(6, fList6);
PostData(7, fList7);
+ PostData(8, fList8);
+ PostData(9, fHistEventStats);
}
//________________________________________________________________________
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;
+ }
}