6 #include "AliAnalysisTask.h"
7 #include "AliAnalysisManager.h"
9 #include "AliGenEventHeader.h"
10 #include "AliESDEvent.h"
11 #include "AliESDInputHandler.h"
12 #include "AliMCEventHandler.h"
13 #include "AliMCEvent.h"
15 #include "AliESDVertex.h"
16 #include "AliPhysicsSelection.h"
18 #include "AliProtonQAAnalysis.h"
19 #include "AliProtonAnalysisBase.h"
20 #include "AliAnalysisTaskProtonsQA.h"
22 //-----------------------------------------------------------------
23 // AliAnalysisTakProtonsQA class
24 // This is the task to run the \bar{p}/p QA analysis
25 // Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch
26 //-----------------------------------------------------------------
28 ClassImp(AliAnalysisTaskProtonsQA)
30 //________________________________________________________________________
31 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA()
32 : AliAnalysisTask(), fESD(0), fMC(0), fHistEventStats(0),
33 fList0(0), fList1(0), fList2(0), fList3(0),
34 fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
35 fProtonQAAnalysis(0) {
39 //________________________________________________________________________
40 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA(const char *name)
41 : AliAnalysisTask(name, ""), fESD(0), fMC(0), fHistEventStats(0),
42 fList0(0), fList1(0), fList2(0), fList3(0),
43 fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
44 fProtonQAAnalysis(0) {
47 // Define input and output slots here
48 // Input slot #0 works with a TChain
49 DefineInput(0, TChain::Class());
50 // Output slot #0 writes into a TList container
51 DefineOutput(0, TList::Class());
52 DefineOutput(1, TList::Class());
53 DefineOutput(2, TList::Class());
54 DefineOutput(3, TList::Class());
55 DefineOutput(4, TList::Class());
56 DefineOutput(5, TList::Class());
57 DefineOutput(6, TList::Class());
58 DefineOutput(7, TList::Class());
59 DefineOutput(8, TList::Class());
60 DefineOutput(9, TH1F::Class());
63 //________________________________________________________________________
64 void AliAnalysisTaskProtonsQA::ConnectInputData(Option_t *) {
65 // Connect ESD or AOD here
68 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
70 Printf("ERROR: Could not read chain from input slot 0");
72 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
75 Printf("ERROR: Could not get ESDInputHandler");
77 fESD = esdH->GetEvent();
80 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
82 Printf("ERROR: Could not retrieve MC event handler");
88 //________________________________________________________________________
89 void AliAnalysisTaskProtonsQA::CreateOutputObjects() {
92 TString gCutName[5] = {"Total","Triggered","Offline trigger",
94 fHistEventStats = new TH1F("fHistEventStats",
95 "Event statistics;;N_{events}",
97 for(Int_t i = 1; i <= 5; i++)
98 fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
100 fList0 = new TList();
101 fList0 = fProtonQAAnalysis->GetGlobalQAList();
103 fList1 = new TList();
104 fList1 = fProtonQAAnalysis->GetPDGList();
106 fList2 = new TList();
107 fList2 = fProtonQAAnalysis->GetMCProcessesList();
109 fList3 = new TList();
110 fList3 = fProtonQAAnalysis->GetAcceptedCutList();
112 fList4 = new TList();
113 fList4 = fProtonQAAnalysis->GetRejectedCutList();
115 fList5 = new TList();
116 fList5 = fProtonQAAnalysis->GetAcceptedDCAList();
118 fList6 = new TList();
119 fList6 = fProtonQAAnalysis->GetEfficiencyQAList();
121 fList7 = new TList();
122 fList7 = fProtonQAAnalysis->GetVertexQAList();
124 fList8 = new TList();
125 fList8 = fProtonQAAnalysis->GetCutEfficiencyList();
128 //________________________________________________________________________
129 void AliAnalysisTaskProtonsQA::Exec(Option_t *) {
131 // Called for each event
134 Printf("ERROR: fESD not available");
139 Printf("ERROR: Could not retrieve MC event");
143 AliGenEventHeader *header = fMC->GenEventHeader();
145 Printf("ERROR: Could not retrieve the header");
149 AliStack* stack = fMC->Stack();
151 Printf("ERROR: Could not retrieve the stack");
155 fHistEventStats->Fill(1);
156 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOnlineTriggerUsed()) {
158 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) {
159 fHistEventStats->Fill(2);
162 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
163 AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
164 if(gPhysicselection->IsCollisionCandidate(fESD)) {
165 fHistEventStats->Fill(3);
167 fProtonQAAnalysis->RunVertexQA(header,
169 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());
170 fHistEventStats->Fill(4);
173 fHistEventStats->Fill(5);
174 fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
175 fProtonQAAnalysis->RunMCAnalysis(stack);
176 fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
177 fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
178 fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
181 }//offline trigger used
183 fHistEventStats->Fill(3);
185 fProtonQAAnalysis->RunVertexQA(header,
187 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());
188 fHistEventStats->Fill(4);
191 fHistEventStats->Fill(5);
192 fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
193 fProtonQAAnalysis->RunMCAnalysis(stack);
194 fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
195 fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
196 fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
198 }//offline trigger not used
199 }//triggered event - online
200 }//online trigger used
202 fHistEventStats->Fill(2);
205 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
206 AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
207 if(gPhysicselection->IsCollisionCandidate(fESD)) {
208 fHistEventStats->Fill(3);
210 fProtonQAAnalysis->RunVertexQA(header,
212 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());
213 fHistEventStats->Fill(4);
216 fHistEventStats->Fill(5);
217 fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
218 fProtonQAAnalysis->RunMCAnalysis(stack);
219 fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
220 fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
221 fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
224 }//offline trigger used
226 fHistEventStats->Fill(3);
228 fProtonQAAnalysis->RunVertexQA(header,
230 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());
231 fHistEventStats->Fill(4);
234 fHistEventStats->Fill(5);
235 fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
236 fProtonQAAnalysis->RunMCAnalysis(stack);
237 fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
238 fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
239 fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
241 }//offline trigger not used
242 }//online trigger not used
254 PostData(9, fHistEventStats);
257 //________________________________________________________________________
258 void AliAnalysisTaskProtonsQA::Terminate(Option_t *) {
259 // Draw result to the screen
260 // Called once at the end of the query
262 fList0 = dynamic_cast<TList*> (GetOutputData(0));
264 Printf("ERROR: fList0 not available");
267 fList1 = dynamic_cast<TList*> (GetOutputData(1));
269 Printf("ERROR: fList1 not available");
272 fList2 = dynamic_cast<TList*> (GetOutputData(2));
274 Printf("ERROR: fList2 not available");
277 fList3 = dynamic_cast<TList*> (GetOutputData(3));
279 Printf("ERROR: fList3 not available");
282 fList4 = dynamic_cast<TList*> (GetOutputData(4));
284 Printf("ERROR: fList4 not available");
287 fList5 = dynamic_cast<TList*> (GetOutputData(5));
289 Printf("ERROR: fList5 not available");
292 fList6 = dynamic_cast<TList*> (GetOutputData(6));
294 Printf("ERROR: fList6 not available");
297 fList7 = dynamic_cast<TList*> (GetOutputData(7));
299 Printf("ERROR: fList7 not available");
302 fList8 = dynamic_cast<TList*> (GetOutputData(8));
304 Printf("ERROR: fList8 not available");
307 fHistEventStats = dynamic_cast<TH1F*> (GetOutputData(9));
308 if (!fHistEventStats) {
309 Printf("ERROR: fHistEventStats not available");