]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/SPECTRA/AliAnalysisTaskProtonsQA.cxx
fd19a671791391b020fcdd69b640738963e70835
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskProtonsQA.cxx
1 #include "TChain.h"
2 #include "TTree.h"
3 #include "TList.h"
4
5 #include "AliAnalysisTask.h"
6 #include "AliAnalysisManager.h"
7
8 #include "AliGenEventHeader.h"
9 #include "AliESDEvent.h"
10 #include "AliESDInputHandler.h"
11 #include "AliMCEventHandler.h"
12 #include "AliMCEvent.h"
13 #include "AliStack.h"
14 #include "AliESDVertex.h"
15
16 #include "AliProtonQAAnalysis.h"
17 #include "AliProtonAnalysisBase.h"
18 #include "AliAnalysisTaskProtonsQA.h"
19
20 //-----------------------------------------------------------------
21 //                 AliAnalysisTakProtonsQA class
22 //   This is the task to run the \bar{p}/p QA analysis
23 //   Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch
24 //-----------------------------------------------------------------
25
26 ClassImp(AliAnalysisTaskProtonsQA)
27   
28 //________________________________________________________________________ 
29 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA()
30   : AliAnalysisTask(), fESD(0), fMC(0),
31     fList0(0), fList1(0), fList2(0), fList3(0), 
32     fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
33     fProtonQAAnalysis(0) {
34   //Dummy constructor
35 }
36
37 //________________________________________________________________________
38 AliAnalysisTaskProtonsQA::AliAnalysisTaskProtonsQA(const char *name) 
39   : AliAnalysisTask(name, ""), fESD(0), fMC(0),
40     fList0(0), fList1(0), fList2(0), fList3(0), 
41     fList4(0), fList5(0), fList6(0), fList7(0), fList8(0),
42     fProtonQAAnalysis(0) {
43   // Constructor
44   
45   // Define input and output slots here
46   // Input slot #0 works with a TChain
47   DefineInput(0, TChain::Class());
48   // Output slot #0 writes into a TList container
49   DefineOutput(0, TList::Class());
50   DefineOutput(1, TList::Class());
51   DefineOutput(2, TList::Class());
52   DefineOutput(3, TList::Class());
53   DefineOutput(4, TList::Class());
54   DefineOutput(5, TList::Class());
55   DefineOutput(6, TList::Class());
56   DefineOutput(7, TList::Class());
57   DefineOutput(8, TList::Class());
58 }
59
60 //________________________________________________________________________
61 void AliAnalysisTaskProtonsQA::ConnectInputData(Option_t *) {
62   // Connect ESD or AOD here
63   // Called once
64
65   TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
66   if (!tree) {
67     Printf("ERROR: Could not read chain from input slot 0");
68   } else {
69     AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
70      
71     if (!esdH) {
72       Printf("ERROR: Could not get ESDInputHandler");
73     } else
74       fESD = esdH->GetEvent();
75   }
76
77   AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
78   if (!mcH) {
79     Printf("ERROR: Could not retrieve MC event handler");
80   }
81   else
82     fMC = mcH->MCEvent();
83 }
84
85 //________________________________________________________________________
86 void AliAnalysisTaskProtonsQA::CreateOutputObjects() {
87   // Create histograms
88   // Called once  
89   fList0 = new TList();
90   fList0 = fProtonQAAnalysis->GetGlobalQAList();
91
92   fList1 = new TList();
93   fList1 = fProtonQAAnalysis->GetPDGList();
94
95   fList2 = new TList();
96   fList2 = fProtonQAAnalysis->GetMCProcessesList();
97
98   fList3 = new TList();
99   fList3 = fProtonQAAnalysis->GetAcceptedCutList();
100
101   fList4 = new TList();
102   fList4 = fProtonQAAnalysis->GetRejectedCutList();
103
104   fList5 = new TList();
105   fList5 = fProtonQAAnalysis->GetAcceptedDCAList();
106
107   fList6 = new TList();
108   fList6 = fProtonQAAnalysis->GetEfficiencyQAList();
109
110   fList7 = new TList();
111   fList7 = fProtonQAAnalysis->GetVertexQAList();
112
113   fList8 = new TList();
114   fList8 = fProtonQAAnalysis->GetCutEfficiencyList();
115 }
116
117 //________________________________________________________________________
118 void AliAnalysisTaskProtonsQA::Exec(Option_t *) {
119   // Main loop
120   // Called for each event
121   
122   if (!fESD) {
123     Printf("ERROR: fESD not available");
124     return;
125   }
126   
127   if (!fMC) {
128     Printf("ERROR: Could not retrieve MC event");
129     return;
130   }
131   
132   AliGenEventHeader *header = fMC->GenEventHeader();
133   if (!header) {
134      Printf("ERROR: Could not retrieve the header");
135      return;
136   }
137
138   AliStack* stack = fMC->Stack();
139   if (!stack) {
140     Printf("ERROR: Could not retrieve the stack");
141     return;
142   }
143   
144     if(dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonQAAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) {
145       fProtonQAAnalysis->RunVertexQA(header,
146                                      fESD);
147       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());
148     if(vertex) {
149       fProtonQAAnalysis->RunQAAnalysis(stack, fESD, vertex);
150       fProtonQAAnalysis->RunMCAnalysis(stack);
151       fProtonQAAnalysis->RunPIDEfficiencyAnalysis(stack, fESD, vertex);
152       fProtonQAAnalysis->RunReconstructionEfficiencyAnalysis(fMC,fESD,vertex);
153       fProtonQAAnalysis->RunCutEfficiencyAnalysis(stack, fESD, vertex);
154     }//accepted vertex
155   }//triggered event
156   
157   // Post output data.
158   PostData(0, fList0);
159   PostData(1, fList1);
160   PostData(2, fList2);
161   PostData(3, fList3);
162   PostData(4, fList4);
163   PostData(5, fList5);
164   PostData(6, fList6);
165   PostData(7, fList7);
166   PostData(8, fList8);
167 }      
168
169 //________________________________________________________________________
170 void AliAnalysisTaskProtonsQA::Terminate(Option_t *) {
171   // Draw result to the screen
172   // Called once at the end of the query
173   
174   fList0 = dynamic_cast<TList*> (GetOutputData(0));
175   if (!fList0) {
176     Printf("ERROR: fList0 not available");
177     return;
178   }
179   fList1 = dynamic_cast<TList*> (GetOutputData(1));
180   if (!fList1) {
181     Printf("ERROR: fList1 not available");
182     return;
183   }
184   fList2 = dynamic_cast<TList*> (GetOutputData(2));
185   if (!fList2) {
186     Printf("ERROR: fList2 not available");
187     return;
188   }
189   fList3 = dynamic_cast<TList*> (GetOutputData(3));
190   if (!fList3) {
191     Printf("ERROR: fList3 not available");
192     return;
193   }
194   fList4 = dynamic_cast<TList*> (GetOutputData(4));
195   if (!fList4) {
196     Printf("ERROR: fList4 not available");
197     return;
198   }
199   fList5 = dynamic_cast<TList*> (GetOutputData(5));
200   if (!fList5) {
201     Printf("ERROR: fList5 not available");
202     return;
203   }
204   fList6 = dynamic_cast<TList*> (GetOutputData(6));
205   if (!fList6) {
206     Printf("ERROR: fList6 not available");
207     return;
208   }
209   fList7 = dynamic_cast<TList*> (GetOutputData(7));
210   if (!fList7) {
211     Printf("ERROR: fList7 not available");
212     return;
213   }
214   fList8 = dynamic_cast<TList*> (GetOutputData(8));
215   if (!fList8) {
216     Printf("ERROR: fList8 not available");
217     return;
218   }
219 }
220
221