]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/AliAnalysisTaskEMCALPi0V2ShSh.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliAnalysisTaskEMCALPi0V2ShSh.cxx
1 // $Id: AliAnalysisTaskEMCALPi0V2ShSh.cxx$
2
3 #include "AliAnalysisTaskEMCALPi0V2ShSh.h"
4
5 //Root include files 
6 //#include <Riostream.h>
7 #include <TParticle.h>
8 #include <TRefArray.h>
9 #include <TCanvas.h>
10 #include <TChain.h>
11 #include <TFile.h>
12 #include <TH1F.h>
13 #include <TH1D.h>
14 #include <TH2F.h>
15 #include <THnSparse.h>
16 #include <TList.h>
17 #include <TMath.h>
18 #include <TVirtualFFT.h>
19
20 //AliRoot include files 
21 #include "AliAnalysisTaskSE.h"
22 #include "AliRunLoader.h"
23 #include "AliAnalysisManager.h"
24 #include "AliAnalysisTask.h"
25 #include "AliStack.h"
26 #include "AliEMCALGeometry.h"
27 #include "AliESDEvent.h"
28 #include "AliESDVertex.h"
29 #include "AliESDCaloCells.h"
30 #include "AliESDCaloCluster.h"
31 #include "AliESDEvent.h"
32 #include "AliESDHeader.h"
33 #include "AliESDInputHandler.h"
34 #include "AliESDtrack.h"
35 #include "AliKFParticle.h"
36 #include "AliAODEvent.h"
37 #include "AliVCluster.h"
38 #include "AliCentrality.h"
39 #include "AliEventplane.h"
40 #include "AliOADBContainer.h"
41
42
43
44 ClassImp(AliAnalysisTaskEMCALPi0V2ShSh)
45
46 //________________________________________________________________________
47 AliAnalysisTaskEMCALPi0V2ShSh::AliAnalysisTaskEMCALPi0V2ShSh() : 
48   AliAnalysisTaskSE(), 
49   fEventPlane(0),
50   fCentralityV0M(99.),
51   fESDClusters(0),
52   fAODClusters(0),
53   fESDCells(0),
54   fAODCells(0),
55   fGeom(0),
56   fGeoName("EMCAL_COMPLETEV1"),
57   fOADBContainer(0),
58   fESD(0),
59   fAOD(0),
60   fOutputList(0),
61   fEPTPC(-999.),
62   fEPTPCResolution(0.),
63   fEPV0(-999.),
64   fEPV0A(-999.),
65   fEPV0C(-999.),
66   fEPV0Ar(-999.),
67   fEPV0Cr(-999.),
68   fEPV0r(-999.),
69   fEPV0A4r(-999.),
70   fEPV0A5r(-999.),
71   fEPV0A6r(-999.),
72   fEPV0A7r(-999.),
73   fEPV0C0r(-999.),
74   fEPV0C1r(-999.),
75   fEPV0C2r(-999.),
76   fEPV0C3r(-999.),
77   fHistAllcentV0(0),
78   fHistAllcentV0r(0),
79   fHistAllcentV0A(0),
80   fHistAllcentV0C(0),
81   fHistAllcentTPC(0),
82   fHistEPTPC(0),
83   fHistEPTPCResolution(0),
84   fHistEPV0(0),
85   fHistEPV0A(0),
86   fHistEPV0C(0),
87   fHistEPV0Ar(0),
88   fHistEPV0Cr(0),
89   fHistEPV0r(0),
90   fHistEPV0A4r(0),
91   fHistEPV0A7r(0),
92   fHistEPV0C0r(0),
93   fHistEPV0C3r(0),
94   fHistdifV0A_V0C0r(0),
95   fHistdifV0A_V0C3r(0),
96   fHistdifV0C0r_V0C3r(0),
97   fHistdifV0C_V0A4r(0),
98   fHistdifV0C_V0A7r(0),
99   fHistdifV0A4r_V0A7r(0),
100   fHistdifV0Ar_V0Cr(0),
101   fHistClusterEta(0),
102   fHistClusterPhi(0),
103   fHistClusterE(0),
104   fHistClusterEt(0),
105   fHistClusterN(0),
106   fHistClusterM02(0),
107   fHistClusterEN(0),
108   fHistClusterEM02(0),
109   fHistClusterPhiEta(0),
110   fHistClusterEtN(0),
111   fHistClusterEtM02(0),
112   fHistClusterdphiV0(0),
113   fHistTrackPt(0),
114   fHistTrackEta(0),
115   fHistTrackPhi(0),
116   fHistTrackPhiEta(0),
117   fClusterPbV0(0),
118   fClusterPbV0A(0),
119   fClusterPbV0C(0),
120   fClusterPbTPC(0)
121 {
122   // Default constructor.
123   for(Int_t i = 0; i < 12;    i++)  fGeomMatrix[i] =  0;
124 }
125
126 //________________________________________________________________________
127 AliAnalysisTaskEMCALPi0V2ShSh::AliAnalysisTaskEMCALPi0V2ShSh(const char *name) : 
128   AliAnalysisTaskSE(name), 
129   fEventPlane(0), 
130   fCentralityV0M(99.), 
131   fESDClusters(0),
132   fAODClusters(0),
133   fESDCells(0),
134   fAODCells(0),
135   fGeom(0),
136   fGeoName("EMCAL_COMPLETEV1"),
137   fOADBContainer(0),
138   fESD(0), 
139   fAOD(0),
140   fOutputList(0),
141   fEPTPC(-999.), 
142   fEPTPCResolution(0.), 
143   fEPV0(-999.), 
144   fEPV0A(-999.), 
145   fEPV0C(-999.),
146   fEPV0Ar(-999.),
147   fEPV0Cr(-999.),
148   fEPV0r(-999.),
149   fEPV0A4r(-999.),
150   fEPV0A5r(-999.),
151   fEPV0A6r(-999.), 
152   fEPV0A7r(-999.),
153   fEPV0C0r(-999.), 
154   fEPV0C1r(-999.), 
155   fEPV0C2r(-999.), 
156   fEPV0C3r(-999.),
157   fHistAllcentV0(0), 
158   fHistAllcentV0r(0), 
159   fHistAllcentV0A(0), 
160   fHistAllcentV0C(0), 
161   fHistAllcentTPC(0),
162   fHistEPTPC(0), 
163   fHistEPTPCResolution(0),
164   fHistEPV0(0), 
165   fHistEPV0A(0), 
166   fHistEPV0C(0), 
167   fHistEPV0Ar(0), 
168   fHistEPV0Cr(0), 
169   fHistEPV0r(0), 
170   fHistEPV0A4r(0),
171   fHistEPV0A7r(0),
172   fHistEPV0C0r(0),
173   fHistEPV0C3r(0),
174   fHistdifV0A_V0C0r(0),
175   fHistdifV0A_V0C3r(0),
176   fHistdifV0C0r_V0C3r(0),
177   fHistdifV0C_V0A4r(0), 
178   fHistdifV0C_V0A7r(0), 
179   fHistdifV0A4r_V0A7r(0), 
180   fHistdifV0Ar_V0Cr(0),
181   fHistClusterEta(0), 
182   fHistClusterPhi(0), 
183   fHistClusterE(0), 
184   fHistClusterEt(0), 
185   fHistClusterN(0), 
186   fHistClusterM02(0),
187   fHistClusterEN(0), 
188   fHistClusterEM02(0), 
189   fHistClusterPhiEta(0), 
190   fHistClusterEtN(0), 
191   fHistClusterEtM02(0), 
192   fHistClusterdphiV0(0),
193   fHistTrackPt(0), 
194   fHistTrackEta(0), 
195   fHistTrackPhi(0), 
196   fHistTrackPhiEta(0),
197   fClusterPbV0(0), 
198   fClusterPbV0A(0), 
199   fClusterPbV0C(0), 
200   fClusterPbTPC(0)
201 {
202   // Constructor
203   // Define input and output slots here
204   // Input slot #0 works with a TChain
205   for(Int_t i = 0; i < 12;    i++)  fGeomMatrix[i] =  0;
206   DefineInput(0, TChain::Class());
207   // Output slot #0 id reserved by the base class for AOD
208   // Output slot #1 writes into a TH1 container
209   DefineOutput(1, TList::Class());
210 }
211
212 //________________________________________________________________________
213 void AliAnalysisTaskEMCALPi0V2ShSh::UserCreateOutputObjects()
214 {
215   // Create histograms, called once.
216     
217   fESDClusters = new TObjArray();
218   fAODClusters = new TObjArray();
219   fGeom = AliEMCALGeometry::GetInstance(fGeoName.Data());
220   fOADBContainer = new AliOADBContainer("AliEMCALgeo");
221   fOADBContainer->InitFromFile(Form("$ALICE_ROOT/OADB/EMCAL/EMCALlocal2master.root"),"AliEMCALgeo");
222
223   fOutputList = new TList();
224   fOutputList->SetOwner();// Container cleans up all histos (avoids leaks in merging)   
225   
226   fHistTrackPt = new TH1F("fHistTrackPt","Track Transverse Momentum Distribution of Pb+Pb",100,0.0,30.0);
227   fHistTrackPt->GetYaxis()->SetTitle("Entries"); fHistTrackPt->GetXaxis()->SetTitle("P_{t} [GeV/c]");
228   fOutputList->Add(fHistTrackPt);
229
230   fHistTrackEta = new TH1F("fHistTrackEta","Track Pseudorapidity Distribution of Pb+Pb",100,-1.0,1.0);
231   fHistTrackEta->GetYaxis()->SetTitle("Entries"); fHistTrackEta->GetXaxis()->SetTitle("#eta");
232   fOutputList->Add(fHistTrackEta);
233
234   fHistTrackPhi = new TH1F("fHistTrackPhi","Track #phi Distribution of Pb+Pb",100,0.0,6.29);
235   fHistTrackPhi->GetYaxis()->SetTitle("Entries"); fHistTrackPhi->GetXaxis()->SetTitle("#phi [rad]");
236   fOutputList->Add(fHistTrackPhi);
237
238   fHistTrackPhiEta = new TH2F("fHistTrackPhiEta","Track Pseudorapidity vs #phi of Pb+Pb",100,-1.0,1.0,100,0.0,6.29);
239   fHistTrackPhiEta->GetXaxis()->SetTitle("#eta"); fHistTrackPhiEta->GetYaxis()->SetTitle("#phi [rad]");
240   fOutputList->Add(fHistTrackPhiEta);
241   
242   fHistClusterEta = new TH1F("fHistClusterEta","Cluster Pseudorapidity Distribution of Pb+Pb",100,-1.0,1.0);
243   fHistClusterEta->GetYaxis()->SetTitle("Entries"); fHistClusterEta->GetXaxis()->SetTitle("#eta");
244   fOutputList->Add(fHistClusterEta);
245
246   fHistClusterPhi = new TH1F("fHistClusterPhi","Cluster #phi Distribution of Pb+Pb",100,0.0,6.29);
247   fHistClusterPhi->GetYaxis()->SetTitle("Entries"); fHistClusterPhi->GetXaxis()->SetTitle("#phi [rad]");
248   fOutputList->Add(fHistClusterPhi);
249
250   fHistClusterPhiEta = new TH2F("fHistClusterPhiEta","Cluster Pseudorapidity vs #phi of Pb+Pb",100,-1.0,1.0,100,0.0,6.29);
251   fHistClusterPhiEta->GetXaxis()->SetTitle("#eta"); fHistClusterPhiEta->GetYaxis()->SetTitle("#phi [rad]");
252   fOutputList->Add(fHistClusterPhiEta);
253
254   fHistClusterM02 = new TH1F("fHistClusterM02","Cluster M02 Distribution of Pb+Pb",100,0.0,3.0);
255   fHistClusterM02->GetYaxis()->SetTitle("Entries"); fHistClusterM02->GetXaxis()->SetTitle("M02");
256   fOutputList->Add(fHistClusterM02);
257
258   fHistClusterE = new TH1F("fHistClusterE","Cluster Energy Distribution of Pb+Pb",100,0.0,20.0);
259   fHistClusterE->GetYaxis()->SetTitle("Entries"); fHistClusterE->GetXaxis()->SetTitle("Energy [GeV]");
260   fOutputList->Add(fHistClusterE);
261   
262   fHistClusterEt = new TH1F("fHistClusterEt","Cluster Transverse Energy Distribution of Pb+Pb",100,0.0,20.0);
263   fHistClusterEt->GetYaxis()->SetTitle("Entries"); fHistClusterEt->GetXaxis()->SetTitle("Transverse Energy [GeV]");
264   fOutputList->Add(fHistClusterEt);
265   
266   fHistClusterEM02 = new TH2F("fHistClusterEM02","Cluster Energy vs M02 of Pb+Pb",100,0.0,20.0,100,0.0,3.0);
267   fHistClusterEM02->GetYaxis()->SetTitle("M02"); fHistClusterEM02->GetXaxis()->SetTitle("Energy [GeV]");
268   fOutputList->Add(fHistClusterEM02);
269
270   fHistClusterEtM02 = new TH2F("fHistClusterEtM02","Cluster Transverse Energy vs M02 of Pb+Pb",100,0.0,20.0,100,0.0,3.0);
271   fHistClusterEtM02->GetYaxis()->SetTitle("M02"); fHistClusterEtM02->GetXaxis()->SetTitle("Transverse Energy [GeV]");
272   fOutputList->Add(fHistClusterEtM02);
273   
274   fHistClusterN = new TH1F("fHistClusterN","Cluster N Distribution of Pb+Pb",30,0.0,30.0);
275   fHistClusterN->GetYaxis()->SetTitle("Entries"); fHistClusterN->GetXaxis()->SetTitle("N");
276   fOutputList->Add(fHistClusterN);
277   
278   fHistClusterEN = new TH2F("fHistClusterEN","N vs Cluster Energy of Pb+Pb",100,0.0,20.0,30,0.0,30.0);
279   fHistClusterEN->GetYaxis()->SetTitle("N"); fHistClusterEN->GetXaxis()->SetTitle("Energy [GeV]");
280   fOutputList->Add(fHistClusterEN);
281
282   fHistClusterEtN = new TH2F("fHistClusterEtN","N vs Cluster Transverse Energy of Pb+Pb",100,0.0,20.0,30,0.0,30.0);
283   fHistClusterEtN->GetYaxis()->SetTitle("N"); fHistClusterEtN->GetXaxis()->SetTitle("Transverse Energy [GeV]");
284   fOutputList->Add(fHistClusterEtN);
285
286   fHistClusterdphiV0 = new TH1D("fHistClusterdphiV0","Cluster dphiV0 Distribution of Pb+Pb",100,0.0,TMath::Pi());
287   fHistClusterdphiV0->GetYaxis()->SetTitle("Entries"); fHistClusterdphiV0->GetXaxis()->SetTitle("dphiV0 [rad]");
288   fOutputList->Add(fHistClusterdphiV0);
289   
290   fHistEPV0 = new TH2F("fHistEPV0","V0 Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
291   fHistEPV0->GetYaxis()->SetTitle("V0 Event Plane Angle [rad]"); fHistEPV0->GetXaxis()->SetTitle("V0M Centrality");
292   fOutputList->Add(fHistEPV0);
293
294   fHistEPV0A = new TH2F("fHistEPV0A","V0A Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
295   fHistEPV0A->GetYaxis()->SetTitle("V0A Event Plane Angle [rad]"); fHistEPV0A->GetXaxis()->SetTitle("V0M Centrality");
296   fOutputList->Add(fHistEPV0A);
297
298   fHistEPV0C = new TH2F("fHistEPV0","V0C Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
299   fHistEPV0C->GetYaxis()->SetTitle("V0C Event Plane Angle [rad]"); fHistEPV0C->GetXaxis()->SetTitle("V0M Centrality");
300   fOutputList->Add(fHistEPV0C);
301
302   fHistEPV0r = new TH2F("fHistEPV0r","V0r Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
303   fHistEPV0r->GetYaxis()->SetTitle("V0r Event Plane Angle [rad]"); fHistEPV0r->GetXaxis()->SetTitle("V0M Centrality");
304   fOutputList->Add(fHistEPV0r);
305
306   fHistEPV0Ar = new TH2F("fHistEPV0","V0Ar Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
307   fHistEPV0Ar->GetYaxis()->SetTitle("V0Ar Event Plane Angle [rad]"); fHistEPV0Ar->GetXaxis()->SetTitle("V0M Centrality");
308   fOutputList->Add(fHistEPV0Ar);
309
310   fHistEPV0Cr = new TH2F("fHistEPV0Cr","V0Cr Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
311   fHistEPV0Cr->GetYaxis()->SetTitle("V0Cr Event Plane Angle [rad]"); fHistEPV0Cr->GetXaxis()->SetTitle("V0M Centrality");
312   fOutputList->Add(fHistEPV0Cr);
313
314   fHistEPV0A4r = new TH2F("fHistEPV0Cr","V0A4r Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
315   fHistEPV0A4r->GetYaxis()->SetTitle("V0A4r Event Plane Angle [rad]"); fHistEPV0A4r->GetXaxis()->SetTitle("V0M Centrality");
316   fOutputList->Add(fHistEPV0A4r);
317
318   fHistEPV0A7r = new TH2F("fHistEPV0Cr","V0A7r Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
319   fHistEPV0A7r->GetYaxis()->SetTitle("V0A7r Event Plane Angle [rad]"); fHistEPV0A7r->GetXaxis()->SetTitle("V0M Centrality");
320   fOutputList->Add(fHistEPV0A7r);
321
322   fHistEPV0C0r = new TH2F("fHistEPV0Cr","V0C0r Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
323   fHistEPV0C0r->GetYaxis()->SetTitle("V0C0r Event Plane Angle [rad]"); fHistEPV0C0r->GetXaxis()->SetTitle("V0M Centrality");
324   fOutputList->Add(fHistEPV0C0r);
325
326   fHistEPV0C3r = new TH2F("fHistEPV0Cr","V0C3r Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
327   fHistEPV0C3r->GetYaxis()->SetTitle("V0C3r Event Plane Angle [rad]"); fHistEPV0C3r->GetXaxis()->SetTitle("V0M Centrality");
328   fOutputList->Add(fHistEPV0C3r);
329
330   fHistdifV0A_V0C0r = new TH2F("fHistdifV0A_V0C0r","(V0A - V0C0r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
331   fHistdifV0A_V0C0r->GetYaxis()->SetTitle("Cos[2*(V0A - V0C0r)]"); fHistdifV0A_V0C0r->GetXaxis()->SetTitle("V0M Centrality");
332   fOutputList->Add(fHistdifV0A_V0C0r);
333
334   fHistdifV0A_V0C3r = new TH2F("fHistdifV0A_V0C3r","(V0A - V0C3r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
335   fHistdifV0A_V0C3r->GetYaxis()->SetTitle("Cos[2*(V0A - V0C3r)]"); fHistdifV0A_V0C3r->GetXaxis()->SetTitle("V0M Centrality");
336   fOutputList->Add(fHistdifV0A_V0C3r);
337
338   fHistdifV0C0r_V0C3r = new TH2F("fHistdifV0C0r_V0C3r","(V0C0r - V0C3r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
339   fHistdifV0C0r_V0C3r->GetYaxis()->SetTitle("Cos[2*(V0C0r - V0C3r)]"); fHistdifV0C0r_V0C3r->GetXaxis()->SetTitle("V0M Centrality");
340   fOutputList->Add(fHistdifV0C0r_V0C3r);
341
342   fHistdifV0C_V0A4r = new TH2F("fHistdifV0C_V0A4r","(V0C - V0A4r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
343   fHistdifV0C_V0A4r->GetYaxis()->SetTitle("Cos[2*(V0C - V0C4r)]"); fHistdifV0C_V0A4r->GetXaxis()->SetTitle("V0M Centrality");
344   fOutputList->Add(fHistdifV0C_V0A4r);
345
346   fHistdifV0C_V0A7r = new TH2F("fHistdifV0C_V0A3r","(V0C - V0A7r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
347   fHistdifV0C_V0A7r->GetYaxis()->SetTitle("Cos[2*(V0C - V0A7r)]"); fHistdifV0C_V0A7r->GetXaxis()->SetTitle("V0M Centrality");
348   fOutputList->Add(fHistdifV0C_V0A7r);
349
350   fHistdifV0A4r_V0A7r = new TH2F("fHistdifV0A4r_V0A7r","(V0A4r - V0A7r) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
351   fHistdifV0A4r_V0A7r->GetYaxis()->SetTitle("Cos[2*(V0A4r - V0A7r)]"); fHistdifV0A4r_V0A7r->GetXaxis()->SetTitle("V0M Centrality");
352   fOutputList->Add(fHistdifV0A4r_V0A7r);
353
354   fHistdifV0Ar_V0Cr = new TH2F("fHistdifV0Ar_V0Cr","(V0Ar - V0Cr) vs Centrality of Pb+Pb",100,0,100,100,-1.0,1.0);
355   fHistdifV0Ar_V0Cr->GetYaxis()->SetTitle("Cos[2*(V0Ar - V0Cr)]"); fHistdifV0Ar_V0Cr->GetXaxis()->SetTitle("V0M Centrality");
356   fOutputList->Add(fHistdifV0Ar_V0Cr);
357
358   fHistAllcentV0 = new TH1F("fHistAllcentV0","V0 Event Plane Angle of Pb+Pb",100,0.0,TMath::Pi());
359   fHistAllcentV0->GetXaxis()->SetTitle("V0 Event Plane Angle [rad]"); fHistAllcentV0->GetYaxis()->SetTitle("");
360   fOutputList->Add(fHistAllcentV0);
361
362   fHistAllcentV0r = new TH1F("fHistAllcentV0r","V0r Event Plane Angle of Pb+Pb",100,0.0,TMath::Pi());
363   fHistAllcentV0r->GetXaxis()->SetTitle("V0r Event Plane Angle [rad]"); fHistAllcentV0r->GetYaxis()->SetTitle("");
364   fOutputList->Add(fHistAllcentV0r);
365
366   fHistAllcentV0A = new TH1F("fHistAllcentV0A","V0A Event Plane Angle of Pb+Pb",100,0.0,TMath::Pi());
367   fHistAllcentV0A->GetXaxis()->SetTitle("V0A Event Plane Angle [rad]"); fHistAllcentV0A->GetYaxis()->SetTitle("");
368   fOutputList->Add(fHistAllcentV0A);
369
370   fHistAllcentV0C = new TH1F("fHistAllcentV0C","V0C Event Plane Angle of Pb+Pb",100,0.0,TMath::Pi());
371   fHistAllcentV0C->GetXaxis()->SetTitle("V0C Event Plane Angle [rad]"); fHistAllcentV0C->GetYaxis()->SetTitle("");
372   fOutputList->Add(fHistAllcentV0C);
373
374   fHistAllcentTPC = new TH1F("fHistAllcentTPC","TPC Event Plane Angle of Pb+Pb",100,0.0,TMath::Pi());
375   fHistAllcentTPC->GetXaxis()->SetTitle("TPC Event Plane Angle [rad]"); fHistAllcentTPC->GetYaxis()->SetTitle("");
376   fOutputList->Add(fHistAllcentTPC);
377
378   fHistEPTPC = new TH2F("fHistEPTPC","TPC Event Plane Angle vs Centrality of Pb+Pb",100,0,100,100,0.0,TMath::Pi());
379   fHistEPTPC->GetYaxis()->SetTitle("Event Plane Angle [rad]"); fHistEPTPC->GetXaxis()->SetTitle("V0M Centrality");
380   fOutputList->Add(fHistEPTPC);
381
382   fHistEPTPCResolution = new TH2F("fHistEPTPCResolution","TPC Resolution vs Centrality of Pb+Pb",100,0,100,100,0.0,1.0);
383   fHistEPTPCResolution->GetYaxis()->SetTitle("TPC Resolution"); fHistEPTPCResolution->GetXaxis()->SetTitle("V0M Centrality");
384   fOutputList->Add(fHistEPTPCResolution);
385  
386
387                     //  Et   M02  V0Mcent DeltaPhi    Cos[2*DeltaPhi]
388   Int_t    bins[5] = {  500, 250,  100,     100,          100  }; // binning
389   Double_t min[5]  = {  0.0, 0.0,    0,     0.0,         -1.0}; // min x
390   Double_t max[5]  = { 50.0, 2.5,  100,  TMath::Pi(),     1.0}; // max x
391          
392   fClusterPbV0 = new THnSparseF("fClusterPbV0","",5,bins,min,max);
393   fClusterPbV0->GetAxis(0)->SetTitle("Transverse Energy [GeV]"); fClusterPbV0->GetAxis(1)->SetTitle("M02"); fClusterPbV0->GetAxis(2)->SetTitle("V0M Centrality"); 
394   fClusterPbV0->GetAxis(3)->SetTitle("Delta(#phi) [rad]"); fClusterPbV0->GetAxis(4)->SetTitle("Cos[2*Delta(#phi)]");  
395   fOutputList->Add(fClusterPbV0);
396          
397   fClusterPbV0A = new THnSparseF("fClusterPbV0A","",5,bins,min,max);
398   fClusterPbV0A->GetAxis(0)->SetTitle("Transverse Energy [GeV]"); fClusterPbV0A->GetAxis(1)->SetTitle("M02"); fClusterPbV0A->GetAxis(2)->SetTitle("V0M Centrality"); 
399   fClusterPbV0A->GetAxis(3)->SetTitle("Delta(#phi) [rad]"); fClusterPbV0A->GetAxis(4)->SetTitle("Cos[2*Delta(#phi)]");  
400   fOutputList->Add(fClusterPbV0A);
401          
402   fClusterPbV0C = new THnSparseF("fClusterPbV0C","",5,bins,min,max);
403   fClusterPbV0C->GetAxis(0)->SetTitle("Transverse Energy [GeV]"); fClusterPbV0C->GetAxis(1)->SetTitle("M02"); fClusterPbV0C->GetAxis(2)->SetTitle("V0M Centrality"); 
404   fClusterPbV0C->GetAxis(3)->SetTitle("Delta(#phi) [rad]"); fClusterPbV0C->GetAxis(4)->SetTitle("Cos[2*Delta(#phi)]");  
405   fOutputList->Add(fClusterPbV0C);
406          
407   fClusterPbTPC = new THnSparseF("fClusterPbTPC","",5,bins,min,max);
408   fClusterPbTPC->GetAxis(0)->SetTitle("Transverse Energy [GeV]"); fClusterPbTPC->GetAxis(1)->SetTitle("M02"); fClusterPbTPC->GetAxis(2)->SetTitle("V0M Centrality"); 
409   fClusterPbTPC->GetAxis(3)->SetTitle("Delta(#phi) [rad]"); fClusterPbTPC->GetAxis(4)->SetTitle("Cos[2*Delta(#phi)]");  
410   fOutputList->Add(fClusterPbTPC);
411
412
413   PostData(1, fOutputList);
414 }
415
416 //________________________________________________________________________
417 void AliAnalysisTaskEMCALPi0V2ShSh::UserExec(Option_t *) 
418 {
419   // Main loop, called for each event.
420   fESDClusters = 0;
421   fESDCells = 0;
422   fAODClusters = 0;
423   fAODCells = 0;
424
425   // Create pointer to reconstructed event
426   AliVEvent *event = InputEvent();
427   if (!event) { Printf("ERROR: Could not retrieve event\n"); return; }
428
429   fESD = dynamic_cast<AliESDEvent*>(event);
430   if (!fESD) {
431     fAOD =  dynamic_cast<AliAODEvent*>(event);
432     if(!fAOD){
433       printf("ERROR: Could not retrieve the event\n");
434       return;
435     }
436   }
437
438   //Bool_t isSelected =0;      
439   //isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kSemiCentral));
440   //if(!isSelected) { return; }
441   
442   if(event->GetCentrality()){
443     fCentralityV0M = event->GetCentrality()->GetCentralityPercentile("V0M");
444   } else {
445     printf("ERROR: Could not retrieve the Centrality\n");
446     return;
447   }     
448   
449   fEventPlane = event->GetEventplane(); 
450   if (fEventPlane) {
451      VZEROEventPlane();
452   } else {
453      printf("ERROR: Could not retrieve the Centrality\n");
454      return;
455   }
456   Int_t   runnumber = InputEvent()->GetRunNumber() ;
457
458   TObjArray *matEMCAL=(TObjArray*)fOADBContainer->GetObject(runnumber,"EmcalMatrices");
459   for(Int_t mod=0; mod < (fGeom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
460     if(fGeoName=="EMCAL_FIRSTYEARV1" && mod>3)
461       break;
462     /*if(fESD)
463       fGeom->SetMisalMatrix(fESD->GetEMCALMatrix(mod), mod);
464       else*/
465     // if(fVEvent->GetEMCALMatrix(mod))
466     fGeomMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod);
467     fGeom->SetMisalMatrix(fGeomMatrix[mod] , mod);
468   }
469
470   if(fESD){
471     TList *l = fESD->GetList();
472     if(1){//fDebug){
473       for(int nk=0;nk<l->GetEntries();nk++){
474           TObject *obj = (TObject*)l->At(nk);
475           TString oname = obj->GetName();
476           //if(oname.Contains("lus"))
477           printf("Object %d has a clus array named %s +++++++++\n",nk,oname.Data());
478         }
479     }
480     fESDClusters =  dynamic_cast<TClonesArray*>(l->FindObject("CaloClusters"));
481     fESDCells = fESD->GetEMCALCells();
482     if(fDebug)
483       printf("ESD cluster mult= %d\n",fESDClusters->GetEntriesFast());
484     if(fESDClusters->GetEntriesFast()<1){
485       printf("ERROR: There are no EMCAL clusters in this event\n");
486       return;
487     }
488   }
489   else if(fAOD){
490     fAODClusters = dynamic_cast<TClonesArray*>(fAOD->GetCaloClusters());
491     fAODCells = fAOD->GetEMCALCells();
492     if(fDebug)
493       printf("AOD cluster mult= %d\n",fAODClusters->GetEntriesFast());
494     if(fAODClusters->GetEntriesFast()<1){
495       printf("ERROR: There are no EMCAL clusters in this event\n");
496       return;
497     }
498   }
499     
500   if(fESD)
501     FillTrackHists();
502
503   PostData(1, fOutputList);
504 }
505
506 //________________________________________________________________________
507 void AliAnalysisTaskEMCALPi0V2ShSh::VZEROEventPlane()
508 {// Calculate the V0 Event Plane
509
510       if (fEventPlane->GetQVector()) { 
511         fEPTPC = TVector2::Phi_0_2pi(fEventPlane->GetQVector()->Phi())/2.0; //if(fEPTPC>TMath::Pi()) {fEPTPC-=TMath::Pi();} 
512       } else { fEPTPC = -999.; }
513
514       if (fEventPlane->GetQsub1()&&fEventPlane->GetQsub2()) {
515         fEPTPCResolution = TMath::Cos(2.0*(fEventPlane->GetQsub1()->Phi()/2.0-fEventPlane->GetQsub2()->Phi()/2.0)); }
516       else { fEPTPCResolution = -1; }
517
518       fEPV0  = TVector2::Phi_0_2pi(fEventPlane->GetEventplane("V0",  fESD)); if(fEPV0>TMath::Pi()) {fEPV0-=TMath::Pi();}
519       fEPV0A = TVector2::Phi_0_2pi(fEventPlane->GetEventplane("V0A", fESD)); if(fEPV0A>TMath::Pi()) {fEPV0A-=TMath::Pi();}
520       fEPV0C = TVector2::Phi_0_2pi(fEventPlane->GetEventplane("V0C", fESD)); if(fEPV0C>TMath::Pi()) {fEPV0C-=TMath::Pi();}
521
522       Double_t qx=0, qy=0, qxr=0, qyr=0;
523       fEPV0Ar = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 4, 5, 2, qxr, qyr)); if(fEPV0Ar>TMath::Pi()) {fEPV0Ar-=TMath::Pi();}
524       fEPV0Cr = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 2, 3, 2, qx,  qy)); if(fEPV0Cr>TMath::Pi()) {fEPV0Cr-=TMath::Pi();}
525       qxr += qx; qyr += qy;
526       fEPV0r   = TVector2::Phi_0_2pi(TMath::ATan2(qyr,qxr))/2.0; 
527
528       fEPV0A4r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 4, 2, qx, qy)); if(fEPV0A4r>TMath::Pi()) {fEPV0A4r-=TMath::Pi();}
529       fEPV0A5r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 5, 2, qx, qy)); if(fEPV0A5r>TMath::Pi()) {fEPV0A5r-=TMath::Pi();}
530       fEPV0A6r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 6, 2, qx, qy)); if(fEPV0A6r>TMath::Pi()) {fEPV0A6r-=TMath::Pi();}
531       fEPV0A7r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 7, 2, qx, qy)); if(fEPV0A7r>TMath::Pi()) {fEPV0A7r-=TMath::Pi();}
532       fEPV0C0r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 0, 2, qx, qy)); if(fEPV0C0r>TMath::Pi()) {fEPV0C0r-=TMath::Pi();}
533       fEPV0C1r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 1, 2, qx, qy)); if(fEPV0C1r>TMath::Pi()) {fEPV0C1r-=TMath::Pi();}
534       fEPV0C2r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 2, 2, qx, qy)); if(fEPV0C2r>TMath::Pi()) {fEPV0C2r-=TMath::Pi();}
535       fEPV0C3r = TVector2::Phi_0_2pi(fEventPlane->CalculateVZEROEventPlane(fESD, 3, 2, qx, qy)); if(fEPV0C3r>TMath::Pi()) {fEPV0C3r-=TMath::Pi();}
536
537       fHistEPTPC->Fill(fCentralityV0M,  fEPTPC); 
538       if(fEPTPCResolution!=-1) { fHistEPTPCResolution->Fill(fCentralityV0M, fEPTPCResolution); }
539       fHistEPV0->Fill(fCentralityV0M, fEPV0);
540       fHistEPV0A->Fill(fCentralityV0M, fEPV0A);
541       fHistEPV0C->Fill(fCentralityV0M, fEPV0C);
542       fHistEPV0Ar->Fill(fCentralityV0M, fEPV0Ar);
543       fHistEPV0Cr->Fill(fCentralityV0M, fEPV0Cr);
544       fHistEPV0r->Fill(fCentralityV0M, fEPV0r);
545       fHistEPV0A4r->Fill(fCentralityV0M, fEPV0A4r);
546       fHistEPV0A7r->Fill(fCentralityV0M, fEPV0A7r);
547       fHistEPV0C0r->Fill(fCentralityV0M, fEPV0C0r);
548       fHistEPV0C3r->Fill(fCentralityV0M, fEPV0C3r);
549
550       fHistAllcentV0->Fill(fEPV0);
551       fHistAllcentV0r->Fill(fEPV0r);
552       fHistAllcentV0A->Fill(fEPV0A);
553       fHistAllcentV0C->Fill(fEPV0C);  
554       fHistAllcentTPC->Fill(fEPTPC);
555
556       fHistdifV0A_V0C0r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0A - fEPV0C0r)));
557       fHistdifV0A_V0C3r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0A - fEPV0C3r)));
558       fHistdifV0C0r_V0C3r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0C0r - fEPV0C3r)));
559       fHistdifV0C_V0A4r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0C - fEPV0A4r)));
560       fHistdifV0C_V0A7r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0C - fEPV0A7r)));
561       fHistdifV0A4r_V0A7r->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0A4r - fEPV0A7r)));   
562       fHistdifV0Ar_V0Cr->Fill(fCentralityV0M, TMath::Cos(2.0*(fEPV0Ar - fEPV0Cr)));
563
564 }  
565
566 //________________________________________________________________________
567 void AliAnalysisTaskEMCALPi0V2ShSh::FillClusterHists()
568 {// Fill cluster histograms.
569
570   Float_t pos[3] ; 
571
572   TObjArray *clusters = fESDClusters;
573   if (!clusters)
574     clusters = fAODClusters;
575   if (!clusters)
576     return;
577
578   const Int_t nclus = clusters->GetEntries();
579
580   if(nclus==0)
581     return;
582
583   for(Int_t iclus=0;iclus<nclus;iclus++){
584     AliVCluster *clus = (AliVCluster *) clusters->At(iclus); // retrieve cluster from esd
585     if(!clus)
586       continue;
587     if(!clus->IsEMCAL()){ 
588       printf("ERROR: Current Cluster is not an EMCAL Cluster\n");
589       continue;
590     }
591     clus->GetPosition(pos);
592     TVector3 vpos(pos[0],pos[1],pos[2]);
593     Double_t Transverse_Energy = ((clus->E())/ (TMath::CosH(vpos.Eta())));    
594     Double_t dphiV0 = TVector2::Phi_0_2pi(vpos.Phi()-fEPV0r); if(dphiV0>TMath::Pi()) {dphiV0-=TMath::Pi();}
595     Double_t dphiV0A = TVector2::Phi_0_2pi(vpos.Phi()-fEPV0A); if(dphiV0A>TMath::Pi()) {dphiV0A-=TMath::Pi();}
596     Double_t dphiV0C = TVector2::Phi_0_2pi(vpos.Phi()-fEPV0C); if(dphiV0C>TMath::Pi()) {dphiV0C-=TMath::Pi();}
597     Double_t dphiTPC = TVector2::Phi_0_2pi(vpos.Phi()-fEPTPC); if(dphiTPC>TMath::Pi()) {dphiTPC-=TMath::Pi();}
598
599     Double_t DataV0[5];
600     DataV0[0] = Transverse_Energy;        
601     DataV0[1] = clus->GetM02(); 
602     DataV0[2] = fCentralityV0M;
603     DataV0[3] = dphiV0;
604     DataV0[4] = TMath::Cos(2.0*(dphiV0));
605     fClusterPbV0->Fill(DataV0);
606
607     Double_t DataV0A[5];
608     DataV0A[0] = Transverse_Energy;       
609     DataV0A[1] = clus->GetM02(); 
610     DataV0A[2] = fCentralityV0M;
611     DataV0A[3] = dphiV0A;
612     DataV0A[4] = TMath::Cos(2.0*(dphiV0A));
613     fClusterPbV0A->Fill(DataV0A);
614
615     Double_t DataV0C[5];
616     DataV0C[0] = Transverse_Energy;       
617     DataV0C[1] = clus->GetM02(); 
618     DataV0C[2] = fCentralityV0M;
619     DataV0C[3] = dphiV0C;
620     DataV0C[4] = TMath::Cos(2.0*(dphiV0C));
621     fClusterPbV0C->Fill(DataV0C);
622
623     Double_t DataTPC[5];
624     DataTPC[0] = Transverse_Energy;       
625     DataTPC[1] = clus->GetM02(); 
626     DataTPC[2] = fCentralityV0M;
627     DataTPC[3] = dphiTPC;
628     DataTPC[4] = TMath::Cos(2.0*(dphiTPC));
629     fClusterPbTPC->Fill(DataTPC); 
630
631     fHistClusterE->Fill(clus->E());
632     fHistClusterEt->Fill(Transverse_Energy);
633     fHistClusterM02->Fill(clus->GetM02());
634     fHistClusterN->Fill(clus->GetNCells());
635     fHistClusterPhi->Fill(vpos.Phi());
636     fHistClusterEta->Fill(vpos.Eta());  
637     fHistClusterPhiEta->Fill(vpos.Eta(),vpos.Phi()); 
638     fHistClusterEN->Fill(clus->E(),clus->GetNCells()); 
639     fHistClusterEM02->Fill(clus->E(),clus->GetM02()); 
640     fHistClusterEtN->Fill(Transverse_Energy,clus->GetNCells()); 
641     fHistClusterEtM02->Fill(Transverse_Energy,clus->GetM02()); 
642     fHistClusterdphiV0->Fill(dphiV0);
643
644   }
645 }
646
647 //________________________________________________________________________
648 void AliAnalysisTaskEMCALPi0V2ShSh::FillTrackHists()
649 {// Fill track histograms.
650   if(!fESD)
651     return;
652   for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
653     AliESDtrack* track = (AliESDtrack*)fESD->GetTrack(iTracks);
654     if (!track){
655       printf("ERROR: Could not retreive esdtrack\n");
656       continue;
657     }
658     fHistTrackPt->Fill(track->Pt());
659     fHistTrackEta->Fill(track->Eta());
660     fHistTrackPhi->Fill(track->Phi());
661     fHistTrackPhiEta->Fill(track->Eta(),track->Phi());
662
663   }
664 }
665   
666 //________________________________________________________________________
667 void AliAnalysisTaskEMCALPi0V2ShSh::Terminate(Option_t *) 
668 {
669   // Draw result to screen, or perform fitting, normalizations
670   // Called once at the end of the query
671
672  /* fOutputList = dynamic_cast<TList*> (GetOutputData(1));
673   if(!fOutputList) { Printf("ERROR: could not retrieve TList fOutputList"); return; }
674       
675   fHistTrackPt = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistTrackPt"));
676   if (!fHistTrackPt) { Printf("ERROR: could not retrieve fHistTrackPt"); return;}
677   fHistTrackEta = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistTrackEta"));
678   if (!fHistTrackEta) { Printf("ERROR: could not retrieve fHistTrackEta"); return;}
679   fHistTrackPhi = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistTrackPhi"));
680   if (!fHistTrackPhi) { Printf("ERROR: could not retrieve fHistTrackPhi"); return;}
681   fHistClusterEta = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistClusterEta"));
682   if (!fHistClusterEta) { Printf("ERROR: could not retrieve fHistClusterEta"); return;}
683   fHistClusterPhi = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistClusterPhi"));
684   if (!fHistClusterPhi) { Printf("ERROR: could not retrieve fHistClusterPhi"); return;}
685   fHistClusterE = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistClusterE"));
686   if (!fHistClusterE) { Printf("ERROR: could not retrieve fHistClusterE"); return;}
687   fHistClusterN = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistClusterN"));
688   if (!fHistClusterN) { Printf("ERROR: could not retrieve fHistClusterN"); return;}
689   fHistClusterM02 = dynamic_cast<TH1F*> (fOutputList->FindObject("fHistClusterM02"));
690   if (!fHistClusterM02) { Printf("ERROR: could not retrieve fHistClusterM02"); return;}
691       
692     // Get the physics selection histograms with the selection statistics
693     //AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
694     //AliESDInputHandler *inputH = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
695     //TH2F *histStat = (TH2F*)inputH->GetStatistics();
696    
697    
698   TCanvas *canvas1 = new TCanvas("canvas1","Track P_{T} & #eta & #phi",10,10,1020,510);
699   canvas1->Divide(3,1);
700   canvas1->cd(1)->SetLogy();
701   fHistTrackPt->DrawCopy("");
702   canvas1->cd(2);
703   fHistTrackEta->DrawCopy("");
704   canvas1->cd(3);
705   fHistTrackPhi->DrawCopy("");
706  
707   TCanvas *canvas2 = new TCanvas("canvas2","Cluster #eta & #phi",10,10,1020,510);
708   canvas2->Divide(2,1);
709   canvas2->cd(1);
710   fHistClusterEta->DrawCopy("");
711   canvas2->cd(2);
712   fHistClusterPhi->DrawCopy("");
713
714   TCanvas *canvas3 = new TCanvas("canvas3","Cluster E & N & M02",10,10,1020,510);
715   canvas3->Divide(3,1);
716   canvas3->cd(1)->SetLogy();
717   fHistClusterE->DrawCopy("");
718   canvas3->cd(2)->SetLogy();
719   fHistClusterN->DrawCopy("");
720   canvas3->cd(3)->SetLogy();
721   fHistClusterM02->DrawCopy("");
722
723   TCanvas *canvas4 = new TCanvas("canvas4","Track #phi vs #eta &  Cluster #phi vs #eta",10,10,1020,510);
724   canvas4->Divide(2,1);
725   canvas4->cd(1)->SetLogz();
726   fHistTrackPhiEta->DrawCopy("colorz");
727   canvas4->cd(2)->SetLogz();
728   fHistClusterPhiEta->DrawCopy("colorz");
729
730   TCanvas *canvas5 = new TCanvas("canvas5","Cluster E vs N &  E vs M02",10,10,1020,510);
731   canvas5->Divide(2,1);
732   canvas5->cd(1)->SetLogz();
733   fHistClusterEN->DrawCopy("colorz");
734   canvas5->cd(2)->SetLogz();
735   fHistClusterEM02->DrawCopy("colorz");
736
737   TCanvas *canvas6 = new TCanvas("canvas6","Cluster Et & Et vs N & Et vs M02",10,10,1020,510);
738   canvas6->cd(1)->SetLogy();
739   fHistClusterEt->DrawCopy("");
740   canvas6->cd(2)->SetLogz();
741   fHistClusterEtN->DrawCopy("colorz");
742   canvas6->cd(3)->SetLogz();
743   fHistClusterEtM02->DrawCopy("colorz");
744
745   canvas1->SaveAs("lhc11h_2_Track_PT_Eta_Phi.jpg");
746   canvas2->SaveAs("lhc11h_2_Cluster_Eta_Phi.jpg");
747   canvas3->SaveAs("lhc11h_2_Cluster_E_N_M02.jpg");
748   canvas4->SaveAs("lhc11h_2_Track_PhivsEta_Cluster_PhivsEta.jpg");
749   canvas5->SaveAs("lhc11h_2_Cluster_EvsN_EvsM02.jpg");
750   canvas6->SaveAs("lhc11h_2_Cluster_Et_EtvsN_EtvsM02.jpg"); */
751 }