12 #include "AliAnalysisTask.h"
13 #include "AliAnalysisManager.h"
15 #include "AliESDEvent.h"
16 #include "AliESDInputHandler.h"
17 #include "AliAODEvent.h"
18 #include "AliAODInputHandler.h"
19 #include "AliMCEventHandler.h"
20 #include "AliMCEvent.h"
22 #include "AliESDVertex.h"
24 #include "AliProtonAnalysis.h"
25 #include "AliProtonAnalysisBase.h"
26 #include "AliAnalysisTaskProtons.h"
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 //-----------------------------------------------------------------
34 ClassImp(AliAnalysisTaskProtons)
36 //________________________________________________________________________
37 AliAnalysisTaskProtons::AliAnalysisTaskProtons()
38 : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),
39 fListAnalysis(0), fListQA(0), fHistEventStats(0),
40 fProtonAnalysis(0) {//, fCutCanvas(0) {
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) {
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());
61 //________________________________________________________________________
62 void AliAnalysisTaskProtons::ConnectInputData(Option_t *) {
63 // Connect ESD or AOD here
65 TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel();
67 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
69 Printf("ERROR: Could not read chain from input slot 0");
71 if(gAnalysisLevel == "ESD") {
72 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
75 Printf("ERROR: Could not get ESDInputHandler");
77 fESD = esdH->GetEvent();
79 else if(gAnalysisLevel == "AOD") {
80 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
83 Printf("ERROR: Could not get AODInputHandler");
85 fAOD = aodH->GetEvent();
87 else if(gAnalysisLevel == "MC") {
88 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
90 Printf("ERROR: Could not retrieve MC event handler");
96 Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
100 //________________________________________________________________________
101 void AliAnalysisTaskProtons::CreateOutputObjects() {
102 // Create output objects
104 TString gCutName[5] = {"Total","Triggered","Offline trigger",
105 "Vertex","Analyzed"};
106 fHistEventStats = new TH1F("fHistEventStats",
107 "Event statistics;;N_{events}",
109 for(Int_t i = 1; i <= 5; i++)
110 fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
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);
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());
127 //fCutCanvas = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetListOfCuts();
130 //________________________________________________________________________
131 void AliAnalysisTaskProtons::Exec(Option_t *) {
133 // Called for each event
134 TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel();
136 if(gAnalysisLevel == "ESD") {
138 Printf("ERROR: fESD not available");
142 fHistEventStats->Fill(1);
143 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsOnlineTriggerUsed()) {
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()));
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);
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
164 }//usage of the offline trigger
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);
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
180 fHistEventStats->Fill(2);
181 AliDebug(1,Form("Fired trigger class: %s",fESD->GetFiredTriggerClasses().Data()));
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);
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
198 }//usage of the offline trigger
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);
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
214 else if(gAnalysisLevel == "AOD") {
216 Printf("ERROR: fAOD not available");
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);
224 else if(gAnalysisLevel == "MC") {
226 Printf("ERROR: Could not retrieve MC event");
230 AliStack* stack = fMC->Stack();
232 Printf("ERROR: Could not retrieve the stack");
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
241 PostData(0, fListAnalysis);
242 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsQARun())
243 PostData(1, fListQA);
244 //PostData(2, fCutCanvas);
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);
253 fListAnalysis = dynamic_cast<TList*> (GetOutputData(0));
254 if (!fListAnalysis) {
255 Printf("ERROR: fListAnalysis not available");
259 TH2F *fHistYPtProtons = (TH2F *)fListAnalysis->At(0);
260 TH2F *fHistYPtAntiProtons = (TH2F *)fListAnalysis->At(1);
262 TCanvas *c1 = new TCanvas("c1","p-\bar{p}",200,0,800,400);
263 c1->SetFillColor(10); c1->SetHighLightColor(10); c1->Divide(2,1);
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");
270 /*TCanvas *c2 = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetListOfCuts();
271 TFile *flocal = TFile::Open("ListOfCuts.root","recreate");