1 // $Id: AliAnalysisTaskEMCALPi0V2ShSh.cxx$
3 #include "AliAnalysisTaskEMCALPi0V2ShSh.h"
6 //#include <Riostream.h>
15 #include <THnSparse.h>
18 #include <TVirtualFFT.h>
20 //AliRoot include files
21 #include "AliAnalysisTaskSE.h"
22 #include "AliRunLoader.h"
23 #include "AliAnalysisManager.h"
24 #include "AliAnalysisTask.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"
44 ClassImp(AliAnalysisTaskEMCALPi0V2ShSh)
46 //________________________________________________________________________
47 AliAnalysisTaskEMCALPi0V2ShSh::AliAnalysisTaskEMCALPi0V2ShSh() :
56 fGeoName("EMCAL_COMPLETEV1"),
83 fHistEPTPCResolution(0),
96 fHistdifV0C0r_V0C3r(0),
99 fHistdifV0A4r_V0A7r(0),
100 fHistdifV0Ar_V0Cr(0),
109 fHistClusterPhiEta(0),
111 fHistClusterEtM02(0),
112 fHistClusterdphiV0(0),
122 // Default constructor.
123 for(Int_t i = 0; i < 12; i++) fGeomMatrix[i] = 0;
126 //________________________________________________________________________
127 AliAnalysisTaskEMCALPi0V2ShSh::AliAnalysisTaskEMCALPi0V2ShSh(const char *name) :
128 AliAnalysisTaskSE(name),
136 fGeoName("EMCAL_COMPLETEV1"),
142 fEPTPCResolution(0.),
163 fHistEPTPCResolution(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),
189 fHistClusterPhiEta(0),
191 fHistClusterEtM02(0),
192 fHistClusterdphiV0(0),
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());
212 //________________________________________________________________________
213 void AliAnalysisTaskEMCALPi0V2ShSh::UserCreateOutputObjects()
215 // Create histograms, called once.
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");
223 fOutputList = new TList();
224 fOutputList->SetOwner();// Container cleans up all histos (avoids leaks in merging)
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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
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);
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);
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);
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);
413 PostData(1, fOutputList);
416 //________________________________________________________________________
417 void AliAnalysisTaskEMCALPi0V2ShSh::UserExec(Option_t *)
419 // Main loop, called for each event.
425 // Create pointer to reconstructed event
426 AliVEvent *event = InputEvent();
427 if (!event) { Printf("ERROR: Could not retrieve event\n"); return; }
429 fESD = dynamic_cast<AliESDEvent*>(event);
431 fAOD = dynamic_cast<AliAODEvent*>(event);
433 printf("ERROR: Could not retrieve the event\n");
438 //Bool_t isSelected =0;
439 //isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kSemiCentral));
440 //if(!isSelected) { return; }
442 if(event->GetCentrality()){
443 fCentralityV0M = event->GetCentrality()->GetCentralityPercentile("V0M");
445 printf("ERROR: Could not retrieve the Centrality\n");
449 fEventPlane = event->GetEventplane();
453 printf("ERROR: Could not retrieve the Centrality\n");
456 Int_t runnumber = InputEvent()->GetRunNumber() ;
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)
463 fGeom->SetMisalMatrix(fESD->GetEMCALMatrix(mod), mod);
465 // if(fVEvent->GetEMCALMatrix(mod))
466 fGeomMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod);
467 fGeom->SetMisalMatrix(fGeomMatrix[mod] , mod);
471 TList *l = fESD->GetList();
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());
480 fESDClusters = dynamic_cast<TClonesArray*>(l->FindObject("CaloClusters"));
481 fESDCells = fESD->GetEMCALCells();
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");
490 fAODClusters = dynamic_cast<TClonesArray*>(fAOD->GetCaloClusters());
491 fAODCells = fAOD->GetEMCALCells();
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");
503 PostData(1, fOutputList);
506 //________________________________________________________________________
507 void AliAnalysisTaskEMCALPi0V2ShSh::VZEROEventPlane()
508 {// Calculate the V0 Event Plane
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.; }
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; }
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();}
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;
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();}
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);
550 fHistAllcentV0->Fill(fEPV0);
551 fHistAllcentV0r->Fill(fEPV0r);
552 fHistAllcentV0A->Fill(fEPV0A);
553 fHistAllcentV0C->Fill(fEPV0C);
554 fHistAllcentTPC->Fill(fEPTPC);
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)));
566 //________________________________________________________________________
567 void AliAnalysisTaskEMCALPi0V2ShSh::FillClusterHists()
568 {// Fill cluster histograms.
572 TObjArray *clusters = fESDClusters;
574 clusters = fAODClusters;
578 const Int_t nclus = clusters->GetEntries();
583 for(Int_t iclus=0;iclus<nclus;iclus++){
584 AliVCluster *clus = (AliVCluster *) clusters->At(iclus); // retrieve cluster from esd
587 if(!clus->IsEMCAL()){
588 printf("ERROR: Current Cluster is not an EMCAL Cluster\n");
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();}
600 DataV0[0] = Transverse_Energy;
601 DataV0[1] = clus->GetM02();
602 DataV0[2] = fCentralityV0M;
604 DataV0[4] = TMath::Cos(2.0*(dphiV0));
605 fClusterPbV0->Fill(DataV0);
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);
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);
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);
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);
647 //________________________________________________________________________
648 void AliAnalysisTaskEMCALPi0V2ShSh::FillTrackHists()
649 {// Fill track histograms.
652 for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
653 AliESDtrack* track = (AliESDtrack*)fESD->GetTrack(iTracks);
655 printf("ERROR: Could not retreive esdtrack\n");
658 fHistTrackPt->Fill(track->Pt());
659 fHistTrackEta->Fill(track->Eta());
660 fHistTrackPhi->Fill(track->Phi());
661 fHistTrackPhiEta->Fill(track->Eta(),track->Phi());
666 //________________________________________________________________________
667 void AliAnalysisTaskEMCALPi0V2ShSh::Terminate(Option_t *)
669 // Draw result to screen, or perform fitting, normalizations
670 // Called once at the end of the query
672 /* fOutputList = dynamic_cast<TList*> (GetOutputData(1));
673 if(!fOutputList) { Printf("ERROR: could not retrieve TList fOutputList"); return; }
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;}
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();
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("");
703 fHistTrackEta->DrawCopy("");
705 fHistTrackPhi->DrawCopy("");
707 TCanvas *canvas2 = new TCanvas("canvas2","Cluster #eta & #phi",10,10,1020,510);
708 canvas2->Divide(2,1);
710 fHistClusterEta->DrawCopy("");
712 fHistClusterPhi->DrawCopy("");
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("");
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");
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");
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");
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"); */