]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/SPECTRA/AliAnalysisTaskProtons.cxx
Mods in the drawProtonResult
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskProtons.cxx
CommitLineData
42270c4c 1#include "Riostream.h"
0ab648ea 2#include "TStyle.h"
734d2c12 3#include "TChain.h"
4#include "TTree.h"
df01f00b 5#include "TString.h"
734d2c12 6#include "TList.h"
0ab648ea 7#include "TFile.h"
734d2c12 8#include "TH2F.h"
3c669e09 9#include "TH1F.h"
734d2c12 10#include "TCanvas.h"
734d2c12 11
12#include "AliAnalysisTask.h"
13#include "AliAnalysisManager.h"
14
15#include "AliESDEvent.h"
16#include "AliESDInputHandler.h"
b620b667 17#include "AliAODEvent.h"
18#include "AliAODInputHandler.h"
e4358d7f 19#include "AliMCEventHandler.h"
20#include "AliMCEvent.h"
21#include "AliStack.h"
6667f3a7 22#include "AliESDVertex.h"
734d2c12 23
5ae0977e 24#include "AliProtonAnalysis.h"
0ab648ea 25#include "AliProtonAnalysisBase.h"
734d2c12 26#include "AliAnalysisTaskProtons.h"
27
73aba974 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//-----------------------------------------------------------------
734d2c12 33
34ClassImp(AliAnalysisTaskProtons)
0ab648ea 35
df01f00b 36//________________________________________________________________________
37AliAnalysisTaskProtons::AliAnalysisTaskProtons()
0ab648ea 38 : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),
3c669e09 39 fListAnalysis(0), fListQA(0), fHistEventStats(0),
735cc63d 40 fProtonAnalysis(0) {
db10bcb0 41 //Dummy constructor
0ab648ea 42
db10bcb0 43}
44
734d2c12 45//________________________________________________________________________
46AliAnalysisTaskProtons::AliAnalysisTaskProtons(const char *name)
0ab648ea 47 : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0),
3c669e09 48 fListAnalysis(0), fListQA(0), fHistEventStats(0),
49 fProtonAnalysis(0) {
734d2c12 50 // Constructor
0ab648ea 51
734d2c12 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());
735cc63d 57 DefineOutput(1, TList::Class());
734d2c12 58}
59
60//________________________________________________________________________
61void AliAnalysisTaskProtons::ConnectInputData(Option_t *) {
62 // Connect ESD or AOD here
63 // Called once
0ab648ea 64 TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel();
734d2c12 65
66 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
67 if (!tree) {
68 Printf("ERROR: Could not read chain from input slot 0");
69 } else {
0ab648ea 70 if(gAnalysisLevel == "ESD") {
df01f00b 71 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
72
b620b667 73 if (!esdH) {
74 Printf("ERROR: Could not get ESDInputHandler");
75 } else
76 fESD = esdH->GetEvent();
77 }
0ab648ea 78 else if(gAnalysisLevel == "AOD") {
df01f00b 79 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
80
81 if (!aodH) {
82 Printf("ERROR: Could not get AODInputHandler");
83 } else
84 fAOD = aodH->GetEvent();
b620b667 85 }
0ab648ea 86 else if(gAnalysisLevel == "MC") {
df01f00b 87 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
88 if (!mcH) {
89 Printf("ERROR: Could not retrieve MC event handler");
90 }
91 else
92 fMC = mcH->MCEvent();
e4358d7f 93 }
df01f00b 94 else
e4358d7f 95 Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
734d2c12 96 }
97}
98
99//________________________________________________________________________
100void AliAnalysisTaskProtons::CreateOutputObjects() {
0ab648ea 101 // Create output objects
734d2c12 102 // Called once
3c669e09 103 char *gCutName[4] = {"Total","Triggered","Vertex","Analyzed"};
104 fHistEventStats = new TH1F("fHistEventStats",
105 "Event statistics;;N_{events}",
106 4,0.5,4.5);
107 for(Int_t i = 1; i <= 4; i++)
108 fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1]);
109
735cc63d 110 fListAnalysis = new TList();
111 fListAnalysis->Add(fProtonAnalysis->GetProtonYPtHistogram());
112 fListAnalysis->Add(fProtonAnalysis->GetAntiProtonYPtHistogram());
113 fListAnalysis->Add(fProtonAnalysis->GetEventHistogram());
114 fListAnalysis->Add(fProtonAnalysis->GetProtonContainer());
115 fListAnalysis->Add(fProtonAnalysis->GetAntiProtonContainer());
3c669e09 116 fListAnalysis->Add(fHistEventStats);
735cc63d 117
118 fListQA = new TList();
119 fListQA->SetName("fListQA");
120 fListQA->Add(fProtonAnalysis->GetQAList());
121 fListQA->Add(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertexQAList());
734d2c12 122}
123
124//________________________________________________________________________
125void AliAnalysisTaskProtons::Exec(Option_t *) {
126 // Main loop
127 // Called for each event
0ab648ea 128 TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel();
734d2c12 129
0ab648ea 130 if(gAnalysisLevel == "ESD") {
b620b667 131 if (!fESD) {
132 Printf("ERROR: fESD not available");
133 return;
134 }
3c669e09 135
136 fHistEventStats->Fill(1);
42270c4c 137 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) {
3c669e09 138 fHistEventStats->Fill(2);
42270c4c 139 AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
0ab648ea 140 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());
3c669e09 141 fHistEventStats->Fill(3);
6667f3a7 142 if(vertex) {
10cd755c 143 AliDebug(1,Form("Proton ESD analysis task: There are %d tracks in this event",fESD->GetNumberOfTracks()));
144 //Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks());
6667f3a7 145 fProtonAnalysis->Analyze(fESD,vertex);
3c669e09 146 fHistEventStats->Fill(4);
6667f3a7 147 }//reconstructed vertex
42270c4c 148 }//triggered event
df01f00b 149 }//ESD analysis
150
0ab648ea 151 else if(gAnalysisLevel == "AOD") {
b620b667 152 if (!fAOD) {
153 Printf("ERROR: fAOD not available");
154 return;
155 }
10cd755c 156 AliDebug(1,Form("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()));
157 //Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());
6667f3a7 158 fProtonAnalysis->Analyze(fAOD);
0ab648ea 159 }//AOD analysis
df01f00b 160
0ab648ea 161 else if(gAnalysisLevel == "MC") {
e4358d7f 162 if (!fMC) {
163 Printf("ERROR: Could not retrieve MC event");
164 return;
165 }
df01f00b 166
e4358d7f 167 AliStack* stack = fMC->Stack();
168 if (!stack) {
169 Printf("ERROR: Could not retrieve the stack");
170 return;
171 }
10cd755c 172 AliDebug(1,Form("Proton MC analysis task: There are %d primaries in this event", stack->GetNprimary()));
173 //Printf("Proton MC analysis task: There are %d primaries in this event", stack->GetNprimary());
da8c4c1c 174 fProtonAnalysis->Analyze(stack,kFALSE);//kTRUE in case of inclusive measurement
df01f00b 175 }//MC analysis
734d2c12 176
177 // Post output data.
735cc63d 178 PostData(0, fListAnalysis);
179 PostData(1, fListQA);
734d2c12 180}
181
182//________________________________________________________________________
183void AliAnalysisTaskProtons::Terminate(Option_t *) {
184 // Draw result to the screen
185 // Called once at the end of the query
0ab648ea 186 gStyle->SetPalette(1,0);
187
735cc63d 188 fListAnalysis = dynamic_cast<TList*> (GetOutputData(0));
189 if (!fListAnalysis) {
190 Printf("ERROR: fListAnalysis not available");
734d2c12 191 return;
192 }
193
735cc63d 194 TH2F *fHistYPtProtons = (TH2F *)fListAnalysis->At(0);
195 TH2F *fHistYPtAntiProtons = (TH2F *)fListAnalysis->At(1);
734d2c12 196
df01f00b 197 TCanvas *c1 = new TCanvas("c1","p-\bar{p}",200,0,800,400);
198 c1->SetFillColor(10); c1->SetHighLightColor(10); c1->Divide(2,1);
734d2c12 199
df01f00b 200 c1->cd(1)->SetLeftMargin(0.15); c1->cd(1)->SetBottomMargin(0.15);
734d2c12 201 if (fHistYPtProtons) fHistYPtProtons->DrawCopy("colz");
df01f00b 202 c1->cd(2)->SetLeftMargin(0.15); c1->cd(2)->SetBottomMargin(0.15);
734d2c12 203 if (fHistYPtAntiProtons) fHistYPtAntiProtons->DrawCopy("colz");
6667f3a7 204
0ab648ea 205 TCanvas *c2 = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetListOfCuts();
206 TFile *flocal = TFile::Open("ListOfCuts.root","recreate");
207 c2->Write();
208 flocal->Close();
6667f3a7 209}
210