]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/AntiprotonToProton/AliAnalysisTaskProtons.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / AntiprotonToProton / AliAnalysisTaskProtons.cxx
1 #include "Riostream.h"
2 #include "TStyle.h"
3 #include "TChain.h"
4 #include "TTree.h"
5 #include "TString.h"
6 #include "TList.h"
7 #include "TFile.h"
8 #include "TH2F.h"
9 #include "TH1F.h"
10 #include "TCanvas.h"
11
12 #include "AliAnalysisTask.h"
13 #include "AliAnalysisManager.h"
14
15 #include "AliESDEvent.h"
16 #include "AliESDInputHandler.h"
17 #include "AliAODEvent.h"
18 #include "AliAODInputHandler.h"
19 #include "AliMCEventHandler.h"
20 #include "AliMCEvent.h"
21 #include "AliStack.h"
22 #include "AliESDVertex.h"
23
24 #include "AliProtonAnalysis.h"
25 #include "AliProtonAnalysisBase.h"
26 #include "AliAnalysisTaskProtons.h"
27
28 //-----------------------------------------------------------------
29 //                 AliAnalysisTakProtons class
30 //   This is the task to run the \bar{p}/p analysis
31 //   Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch
32 //-----------------------------------------------------------------
33
34 ClassImp(AliAnalysisTaskProtons)
35   
36 //________________________________________________________________________ 
37 AliAnalysisTaskProtons::AliAnalysisTaskProtons()
38   : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),
39     fListAnalysis(0), fListQA(0), fHistEventStats(0), 
40   fProtonAnalysis(0) {//, fCutCanvas(0) {
41   //Dummy constructor
42   
43 }
44
45 //________________________________________________________________________
46 AliAnalysisTaskProtons::AliAnalysisTaskProtons(const char *name) 
47   : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0),
48     fListAnalysis(0), fListQA(0), fHistEventStats(0), 
49   fProtonAnalysis(0) {//, fCutCanvas(0) {
50   // Constructor
51   
52   // Define input and output slots here
53   // Input slot #0 works with a TChain
54   DefineInput(0, TChain::Class());
55   // Output slot #0 writes into a TList container
56   DefineOutput(0, TList::Class());
57   DefineOutput(1, TList::Class());
58   DefineOutput(2, TCanvas::Class());
59 }
60
61 //________________________________________________________________________
62 void AliAnalysisTaskProtons::ConnectInputData(Option_t *) {
63   // Connect ESD or AOD here
64   // Called once
65   TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); 
66
67   TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
68   if (!tree) {
69     Printf("ERROR: Could not read chain from input slot 0");
70   } else {
71     if(gAnalysisLevel == "ESD") {
72       AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
73      
74       if (!esdH) {
75         Printf("ERROR: Could not get ESDInputHandler");
76       } else
77         fESD = esdH->GetEvent();
78     }
79     else if(gAnalysisLevel == "AOD") {
80      AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
81      
82      if (!aodH) {
83        Printf("ERROR: Could not get AODInputHandler");
84      } else
85        fAOD = aodH->GetEvent();
86     }
87     else if(gAnalysisLevel == "MC") {
88      AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
89      if (!mcH) {
90        Printf("ERROR: Could not retrieve MC event handler");
91      }
92      else
93        fMC = mcH->MCEvent();
94     }
95     else
96       Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
97   }
98 }
99
100 //________________________________________________________________________
101 void AliAnalysisTaskProtons::CreateOutputObjects() {
102   // Create output objects
103   // Called once
104   TString gCutName[5] = {"Total","Triggered","Offline trigger",
105                          "Vertex","Analyzed"};
106   fHistEventStats = new TH1F("fHistEventStats",
107                              "Event statistics;;N_{events}",
108                              5,0.5,5.5);
109   for(Int_t i = 1; i <= 5; i++) 
110     fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
111
112   fListAnalysis = new TList();
113   fListAnalysis->Add(fProtonAnalysis->GetProtonYPtHistogram());
114   fListAnalysis->Add(fProtonAnalysis->GetAntiProtonYPtHistogram());
115   fListAnalysis->Add(fProtonAnalysis->GetEventHistogram());
116   fListAnalysis->Add(fProtonAnalysis->GetProtonContainer());
117   fListAnalysis->Add(fProtonAnalysis->GetAntiProtonContainer());
118   fListAnalysis->Add(fHistEventStats);
119
120   if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsQARun()) {
121     fListQA = new TList();
122     fListQA->SetName("fListQA");
123     fListQA->Add(fProtonAnalysis->GetQAList());
124     fListQA->Add(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertexQAList());
125   }
126
127   //fCutCanvas = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetListOfCuts();
128 }
129
130 //________________________________________________________________________
131 void AliAnalysisTaskProtons::Exec(Option_t *) {
132   // Main loop
133   // Called for each event
134   TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); 
135   
136   if(gAnalysisLevel == "ESD") {
137     if (!fESD) {
138       Printf("ERROR: fESD not available");
139       return;
140     }
141     
142     fHistEventStats->Fill(1);
143     if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsOnlineTriggerUsed()) {
144       //online trigger
145       if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) {
146         fHistEventStats->Fill(2);
147         AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
148         
149         //offline trigger
150         if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
151           AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
152           if(gPhysicselection->IsCollisionCandidate(fESD)) {
153             fHistEventStats->Fill(3);
154             AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
155             //Reconstructed vertex
156             const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
157             fHistEventStats->Fill(4);
158             if(vertex) {
159               AliDebug(1,Form("Proton ESD analysis task: There are %d tracks in this event",fESD->GetNumberOfTracks()));
160               fProtonAnalysis->Analyze(fESD,vertex);
161               fHistEventStats->Fill(5);
162             }//reconstructed vertex
163           }//offline trigger
164         }//usage of the offline trigger
165         else {
166           fHistEventStats->Fill(3);
167           AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
168           //Reconstructed vertex
169           const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
170           fHistEventStats->Fill(4);
171           if(vertex) {
172             AliDebug(1,Form("Proton ESD analysis task: There are %d tracks in this event",fESD->GetNumberOfTracks()));
173             fProtonAnalysis->Analyze(fESD,vertex);
174             fHistEventStats->Fill(5);
175             }//reconstructed vertex
176         }//offline trigger not used
177       }//triggered event - online
178     }//online trigger used
179     else {
180       fHistEventStats->Fill(2);
181       AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
182       
183       //offline trigger
184       if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsOfflineTriggerUsed()) {
185         AliPhysicsSelection *gPhysicselection = dynamic_cast<AliPhysicsSelection *>(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetPhysicsSelectionObject());
186         if(gPhysicselection->IsCollisionCandidate(fESD)) {
187           fHistEventStats->Fill(3);
188           AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
189           //Reconstructed vertex
190           const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
191           fHistEventStats->Fill(4);
192           if(vertex) {
193             AliDebug(1,Form("Proton ESD analysis task: There are %d tracks in this event",fESD->GetNumberOfTracks()));
194             fProtonAnalysis->Analyze(fESD,vertex);
195             fHistEventStats->Fill(5);
196           }//reconstructed vertex
197         }//offline trigger
198       }//usage of the offline trigger
199       else {
200         fHistEventStats->Fill(3);
201         AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
202         //Reconstructed vertex
203         const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());
204         fHistEventStats->Fill(4);
205         if(vertex) {
206           AliDebug(1,Form("Proton ESD analysis task: There are %d tracks in this event",fESD->GetNumberOfTracks()));
207           fProtonAnalysis->Analyze(fESD,vertex);
208           fHistEventStats->Fill(5);
209         }//reconstructed vertex
210       }//offline trigger not used
211     }//online trigger not used
212   }//ESD analysis              
213   
214   else if(gAnalysisLevel == "AOD") {
215     if (!fAOD) {
216       Printf("ERROR: fAOD not available");
217       return;
218     }
219     AliDebug(1,Form("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()));
220     //Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());
221     fProtonAnalysis->Analyze(fAOD);
222   }//AOD analysis
223   
224   else if(gAnalysisLevel == "MC") {
225     if (!fMC) {
226       Printf("ERROR: Could not retrieve MC event");
227       return;
228     }
229
230     AliStack* stack = fMC->Stack();
231     if (!stack) {
232       Printf("ERROR: Could not retrieve the stack");
233       return;
234     }
235     AliDebug(1,Form("Proton MC analysis task: There are %d primaries in this event", stack->GetNprimary()));
236     //Printf("Proton MC analysis task: There are %d primaries in this event", stack->GetNprimary());
237     fProtonAnalysis->Analyze(stack,kFALSE);//kTRUE in case of inclusive measurement
238   }//MC analysis                      
239
240   // Post output data.
241   PostData(0, fListAnalysis);
242   if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsQARun()) 
243     PostData(1, fListQA);
244   //PostData(2, fCutCanvas);
245 }      
246
247 //________________________________________________________________________
248 void AliAnalysisTaskProtons::Terminate(Option_t *) {
249   // Draw result to the screen
250   // Called once at the end of the query
251   gStyle->SetPalette(1,0);
252
253   fListAnalysis = dynamic_cast<TList*> (GetOutputData(0));
254   if (!fListAnalysis) {
255     Printf("ERROR: fListAnalysis not available");
256     return;
257   }
258    
259   TH2F *fHistYPtProtons = (TH2F *)fListAnalysis->At(0);
260   TH2F *fHistYPtAntiProtons = (TH2F *)fListAnalysis->At(1);
261     
262   TCanvas *c1 = new TCanvas("c1","p-\bar{p}",200,0,800,400);
263   c1->SetFillColor(10); c1->SetHighLightColor(10); c1->Divide(2,1);
264
265   c1->cd(1)->SetLeftMargin(0.15); c1->cd(1)->SetBottomMargin(0.15);  
266   if (fHistYPtProtons) fHistYPtProtons->DrawCopy("colz");
267   c1->cd(2)->SetLeftMargin(0.15); c1->cd(2)->SetBottomMargin(0.15);  
268   if (fHistYPtAntiProtons) fHistYPtAntiProtons->DrawCopy("colz");
269
270   /*TCanvas *c2 = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetListOfCuts();
271   TFile *flocal = TFile::Open("ListOfCuts.root","recreate");
272   c2->Write();
273   flocal->Close();*/
274 }
275