7 #include <TClonesArray.h>
11 #include <THnSparse.h>
13 #include <TLorentzVector.h>
15 #include "AliAnalysisManager.h"
16 #include "AliCentrality.h"
17 #include "AliVCluster.h"
18 #include "AliVParticle.h"
19 #include "AliVTrack.h"
20 #include "AliEmcalJet.h"
21 #include "AliVEventHandler.h"
22 #include "AliAODEvent.h"
23 #include "AliExternalTrackParam.h"
24 #include "AliTrackerBase.h"
26 #include "AliEMCALGeometry.h"
27 #include "AliEMCALGeoParams.h"
28 #include "AliPicoTrack.h"
29 #include "AliVVZERO.h"
30 #include "AliESDUtils.h"
32 #include "AliAnalysisTaskSAQA.h"
34 ClassImp(AliAnalysisTaskSAQA)
36 //________________________________________________________________________
37 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA() :
38 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA", kTRUE),
40 fParticleLevel(kFALSE),
46 fDoLeadingObjectPosition(0),
47 fMaxCellsInCluster(50),
54 fHistTrNegativeLabels(0),
57 fHistTrPhiEtaZeroLab(0),
61 fHistTrPhiEtaNonProp(0),
66 fHistClusPhiEtaEnergy(0),
67 fHistClusDeltaPhiEPEnergy(0),
70 fHistClusTimeEnergy(0),
71 fHistClusMCEnergyFraction(0),
72 fHistCellsAbsIdEnergy(0),
76 // Default constructor.
78 SetMakeGeneralHistograms(kTRUE);
81 //________________________________________________________________________
82 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
83 AliAnalysisTaskEmcalJet(name, kTRUE),
85 fParticleLevel(kFALSE),
91 fDoLeadingObjectPosition(0),
92 fMaxCellsInCluster(50),
99 fHistTrNegativeLabels(0),
100 fHistTrZeroLabels(0),
102 fHistTrPhiEtaZeroLab(0),
106 fHistTrPhiEtaNonProp(0),
111 fHistClusPhiEtaEnergy(0),
112 fHistClusDeltaPhiEPEnergy(0),
113 fHistNCellsEnergy(0),
114 fHistFcrossEnergy(0),
115 fHistClusTimeEnergy(0),
116 fHistClusMCEnergyFraction(0),
117 fHistCellsAbsIdEnergy(0),
123 SetMakeGeneralHistograms(kTRUE);
126 //________________________________________________________________________
127 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
132 //________________________________________________________________________
133 void AliAnalysisTaskSAQA::AllocateHistogramArrays()
135 fHistTrNegativeLabels = new TH1*[fNcentBins];
136 fHistTrZeroLabels = new TH1*[fNcentBins];
137 fHistTrPhiEtaZeroLab = new TH2*[fNcentBins];
138 fHistTrPtZeroLab = new TH1*[fNcentBins];
139 fHistTrEmcPhiEta = new TH2*[fNcentBins];
140 fHistTrEmcPt = new TH1*[fNcentBins];
141 fHistTrPhiEtaNonProp = new TH2*[fNcentBins];
142 fHistTrPtNonProp = new TH1*[fNcentBins];
143 fHistDeltaEtaPt = new TH2*[fNcentBins];
144 fHistDeltaPhiPt = new TH2*[fNcentBins];
145 fHistDeltaPtvsPt = new TH2*[fNcentBins];
147 fHistClusPhiEtaEnergy = new TH3*[fNcentBins];
148 fHistClusDeltaPhiEPEnergy = new TH2*[fNcentBins];
149 fHistNCellsEnergy = new TH2*[fNcentBins];
150 fHistFcrossEnergy = new TH2*[fNcentBins];
151 fHistClusTimeEnergy = new TH2*[fNcentBins];
152 fHistClusMCEnergyFraction = new TH1*[fNcentBins];
154 fHistCellsAbsIdEnergy = new TH2*[fNcentBins];
156 fHistJetsPhiEta = new TH2*[fNcentBins];
157 fHistJetsPtArea = new TH2*[fNcentBins];
159 fHistTrPhiEtaPt = new TH3**[fNcentBins];
161 for (Int_t i = 0; i < fNcentBins; i++) {
163 fHistTrPhiEtaPt[i] = new TH3*[4];
164 for (Int_t j = 0; j < 4; j++) fHistTrPhiEtaPt[i][j] = 0;
166 fHistTrNegativeLabels[i] = 0;
167 fHistTrZeroLabels[i] = 0;
168 fHistTrPhiEtaZeroLab[i] = 0;
169 fHistTrPtZeroLab[i] = 0;
170 fHistTrEmcPhiEta[i] = 0;
172 fHistTrPhiEtaNonProp[i] = 0;
173 fHistTrPtNonProp[i] = 0;
174 fHistDeltaEtaPt[i] = 0;
175 fHistDeltaPhiPt[i] = 0;
176 fHistDeltaPtvsPt[i] = 0;
178 fHistClusPhiEtaEnergy[i] = 0;
179 fHistClusDeltaPhiEPEnergy[i] = 0;
180 fHistNCellsEnergy[i] = 0;
181 fHistFcrossEnergy[i] = 0;
182 fHistClusTimeEnergy[i] = 0;
183 fHistClusMCEnergyFraction[i] = 0;
185 fHistCellsAbsIdEnergy[i] = 0;
187 fHistJetsPhiEta[i] = 0;
188 fHistJetsPtArea[i] = 0;
192 //________________________________________________________________________
193 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
197 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
199 AllocateHistogramArrays();
203 if (fParticleCollArray.GetEntriesFast()>0) {
204 if (!fParticleLevel && fIsMC) {
205 for (Int_t i = 0; i < fNcentBins; i++) {
206 histname = Form("fHistTrNegativeLabels_%d",i);
207 fHistTrNegativeLabels[i] = new TH1F(histname,histname, 500, 0, 1);
208 fHistTrNegativeLabels[i]->GetXaxis()->SetTitle("% of negative labels");
209 fHistTrNegativeLabels[i]->GetYaxis()->SetTitle("counts");
210 fOutput->Add(fHistTrNegativeLabels[i]);
212 histname = Form("fHistTrZeroLabels_%d",i);
213 fHistTrZeroLabels[i] = new TH1F(histname,histname, 500, 0, 1);
214 fHistTrZeroLabels[i]->GetXaxis()->SetTitle("% of negative labels");
215 fHistTrZeroLabels[i]->GetYaxis()->SetTitle("counts");
216 fOutput->Add(fHistTrZeroLabels[i]);
224 for (Int_t i = 0; i < fNcentBins; i++) {
225 for (Int_t j = 0; j < nlabels; j++) {
226 histname = Form("fHistTrPhiEtaPt_%d_%d",i,j);
227 fHistTrPhiEtaPt[i][j] = new TH3F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
228 fHistTrPhiEtaPt[i][j]->GetXaxis()->SetTitle("#eta");
229 fHistTrPhiEtaPt[i][j]->GetYaxis()->SetTitle("#phi");
230 fHistTrPhiEtaPt[i][j]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
231 fOutput->Add(fHistTrPhiEtaPt[i][j]);
234 if (!fParticleLevel) {
236 histname = Form("fHistTrPhiEtaZeroLab_%d",i);
237 fHistTrPhiEtaZeroLab[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
238 fHistTrPhiEtaZeroLab[i]->GetXaxis()->SetTitle("#eta");
239 fHistTrPhiEtaZeroLab[i]->GetYaxis()->SetTitle("#phi");
240 fHistTrPhiEtaZeroLab[i]->GetZaxis()->SetTitle("counts");
241 fOutput->Add(fHistTrPhiEtaZeroLab[i]);
243 histname = Form("fHistTrPtZeroLab_%d",i);
244 fHistTrPtZeroLab[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
245 fHistTrPtZeroLab[i]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
246 fHistTrPtZeroLab[i]->GetYaxis()->SetTitle("counts");
247 fOutput->Add(fHistTrPtZeroLab[i]);
250 histname = Form("fHistTrEmcPhiEta_%d",i);
251 fHistTrEmcPhiEta[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
252 fHistTrEmcPhiEta[i]->GetXaxis()->SetTitle("#eta");
253 fHistTrEmcPhiEta[i]->GetYaxis()->SetTitle("#phi");
254 fOutput->Add(fHistTrEmcPhiEta[i]);
256 histname = Form("fHistTrEmcPt_%d",i);
257 fHistTrEmcPt[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
258 fHistTrEmcPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
259 fHistTrEmcPt[i]->GetYaxis()->SetTitle("counts");
260 fOutput->Add(fHistTrEmcPt[i]);
262 histname = Form("fHistTrPhiEtaNonProp_%d",i);
263 fHistTrPhiEtaNonProp[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
264 fHistTrPhiEtaNonProp[i]->GetXaxis()->SetTitle("#eta");
265 fHistTrPhiEtaNonProp[i]->GetYaxis()->SetTitle("#phi");
266 fOutput->Add(fHistTrPhiEtaNonProp[i]);
268 histname = Form("fHistTrPtNonProp_%d",i);
269 fHistTrPtNonProp[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
270 fHistTrPtNonProp[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
271 fHistTrPtNonProp[i]->GetYaxis()->SetTitle("counts");
272 fOutput->Add(fHistTrPtNonProp[i]);
274 histname = Form("fHistDeltaEtaPt_%d",i);
275 fHistDeltaEtaPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 50, -0.5, 0.5);
276 fHistDeltaEtaPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
277 fHistDeltaEtaPt[i]->GetYaxis()->SetTitle("#delta#eta");
278 fOutput->Add(fHistDeltaEtaPt[i]);
280 histname = Form("fHistDeltaPhiPt_%d",i);
281 fHistDeltaPhiPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 200, -2, 2);
282 fHistDeltaPhiPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
283 fHistDeltaPhiPt[i]->GetYaxis()->SetTitle("#delta#phi");
284 fOutput->Add(fHistDeltaPhiPt[i]);
286 histname = Form("fHistDeltaPtvsPt_%d",i);
287 fHistDeltaPtvsPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, fNbins, -fMaxBinPt/2, fMaxBinPt/2);
288 fHistDeltaPtvsPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
289 fHistDeltaPtvsPt[i]->GetYaxis()->SetTitle("#deltap_{T} (GeV/c)");
290 fHistDeltaPtvsPt[i]->GetZaxis()->SetTitle("counts");
291 fOutput->Add(fHistDeltaPtvsPt[i]);
296 if (fClusterCollArray.GetEntriesFast()>0) {
297 for (Int_t i = 0; i < fNcentBins; i++) {
298 histname = "fHistClusPhiEtaEnergy_";
300 fHistClusPhiEtaEnergy[i] = new TH3F(histname, histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
301 fHistClusPhiEtaEnergy[i]->GetXaxis()->SetTitle("#eta");
302 fHistClusPhiEtaEnergy[i]->GetYaxis()->SetTitle("#phi");
303 fHistClusPhiEtaEnergy[i]->GetZaxis()->SetTitle("E_{cluster} (GeV)");
304 fOutput->Add(fHistClusPhiEtaEnergy[i]);
306 histname = "fHistClusDeltaPhiEPEnergy_";
308 fHistClusDeltaPhiEPEnergy[i] = new TH2F(histname, histname, fNbins, fMinBinPt, fMaxBinPt, 100, 0, TMath::Pi());
309 fHistClusDeltaPhiEPEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
310 fHistClusDeltaPhiEPEnergy[i]->GetYaxis()->SetTitle("#phi_{cluster} - #psi_{RP}");
311 fOutput->Add(fHistClusDeltaPhiEPEnergy[i]);
314 histname = "fHistClusMCEnergyFraction_";
316 fHistClusMCEnergyFraction[i] = new TH1F(histname, histname, fNbins, 0, 1.2);
317 fHistClusMCEnergyFraction[i]->GetXaxis()->SetTitle("MC fraction");
318 fHistClusMCEnergyFraction[i]->GetYaxis()->SetTitle("counts");
319 fOutput->Add(fHistClusMCEnergyFraction[i]);
322 histname = "fHistClusTimeEnergy_";
324 fHistClusTimeEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, fNbins, -1e-6, 1e-6);
325 fHistClusTimeEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
326 fHistClusTimeEnergy[i]->GetYaxis()->SetTitle("Time");
327 fOutput->Add(fHistClusTimeEnergy[i]);
329 Int_t nbins = fMaxCellsInCluster;
330 while (nbins > fNbins) nbins /= 2;
331 histname = "fHistNCellsEnergy_";
333 fHistNCellsEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, nbins, -0.5, fMaxCellsInCluster-0.5);
334 fHistNCellsEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
335 fHistNCellsEnergy[i]->GetYaxis()->SetTitle("N_{cells}");
336 fOutput->Add(fHistNCellsEnergy[i]);
338 histname = "fHistFcrossEnergy_";
340 fHistFcrossEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 200, -3.5, 1.5);
341 fHistFcrossEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
342 fHistFcrossEnergy[i]->GetYaxis()->SetTitle("F_{cross}");
343 fOutput->Add(fHistFcrossEnergy[i]);
345 histname = "fHistCellsAbsIdEnergy_";
347 fHistCellsAbsIdEnergy[i] = new TH2F(histname,histname, 11600,0,11599,(Int_t)(fNbins / 2), fMinBinPt, fMaxBinPt / 2);
348 fHistCellsAbsIdEnergy[i]->GetXaxis()->SetTitle("cell abs. Id");
349 fHistCellsAbsIdEnergy[i]->GetYaxis()->SetTitle("E_{cluster} (GeV)");
350 fHistCellsAbsIdEnergy[i]->GetZaxis()->SetTitle("counts");
351 fOutput->Add(fHistCellsAbsIdEnergy[i]);
355 if (fJetCollArray.GetEntriesFast()>0) {
356 for (Int_t i = 0; i < fNcentBins; i++) {
357 histname = "fHistJetsPhiEta_";
359 fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
360 fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
361 fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
362 fHistJetsPhiEta[i]->GetZaxis()->SetTitle("counts");
363 fOutput->Add(fHistJetsPhiEta[i]);
365 histname = "fHistJetsPtArea_";
367 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, 50, 0, 1.5);
368 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
369 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
370 fOutput->Add(fHistJetsPtArea[i]);
376 Int_t nbins[20] = {0};
377 Double_t min[20] = {0};
378 Double_t max[20] = {0};
380 if (fForceBeamType != AliAnalysisTaskEmcal::kpp) {
381 title[dim] = "Centrality %";
387 if (!fCentMethod2.IsNull()) {
388 title[dim] = Form("Centrality %s %%", fCentMethod2.Data());
395 if (!fCentMethod3.IsNull()) {
396 title[dim] = Form("Centrality %s %%", fCentMethod3.Data());
404 title[dim] = "V0A total multiplicity";
410 title[dim] = "V0C total multiplicity";
416 else if (fDoV0QA==2) {
417 title[dim] = "V0A+V0C total multiplicity";
424 if (!fRhoName.IsNull()) {
425 title[dim] = "#rho (GeV/c)";
426 nbins[dim] = fNbins*4;
433 title[dim] = "#psi_{RP}";
435 min[dim] = -TMath::Pi();
436 max[dim] = TMath::Pi();
441 if (fParticleCollArray.GetEntriesFast()>0) {
442 title[dim] = "No. of tracks";
448 title[dim] = "p_{T,track}^{leading} (GeV/c)";
450 min[dim] = fMinBinPt;
451 max[dim] = fMaxBinPt;
454 if (fDoLeadingObjectPosition) {
455 title[dim] = "#eta_{track}^{leading}";
461 title[dim] = "#phi_{track}^{leading}";
464 max[dim] = TMath::Pi() * 2.02;
469 if (fClusterCollArray.GetEntriesFast()>0) {
470 title[dim] = "No. of clusters";
476 title[dim] = "E_{cluster}^{leading} (GeV)";
478 min[dim] = fMinBinPt;
479 max[dim] = fMaxBinPt;
482 if (fDoLeadingObjectPosition) {
483 title[dim] = "#eta_{cluster}^{leading}";
489 title[dim] = "#phi_{cluster}^{leading}";
492 max[dim] = TMath::Pi() * 2.02;
497 if (!fCaloCellsName.IsNull()) {
498 title[dim] = "No. of cells";
505 if (fJetCollArray.GetEntriesFast()>0) {
506 title[dim] = "No. of jets";
512 title[dim] = "p_{T,jet}^{leading} (GeV/c)";
514 min[dim] = fMinBinPt;
515 max[dim] = fMaxBinPt;
518 if (fDoLeadingObjectPosition) {
519 title[dim] = "#eta_{jet}^{leading}";
525 title[dim] = "#phi_{jet}^{leading}";
528 max[dim] = TMath::Pi() * 2.02;
533 fHistEventQA = new THnSparseF("fHistEventQA","fHistEventQA",dim,nbins,min,max);
534 for (Int_t i = 0; i < dim; i++)
535 fHistEventQA->GetAxis(i)->SetTitle(title[i]);
536 fOutput->Add(fHistEventQA);
538 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
541 //________________________________________________________________________
542 void AliAnalysisTaskSAQA::ExecOnce()
544 AliAnalysisTaskEmcalJet::ExecOnce();
547 fVZERO = InputEvent()->GetVZEROData();
549 AliError("AliVVZERO not available");
554 //________________________________________________________________________
555 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
557 // Retrieve event objects.
559 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
562 if (!fCentMethod2.IsNull() || !fCentMethod3.IsNull()) {
563 if (fBeamType == kAA || fBeamType == kpA ) {
564 AliCentrality *aliCent = InputEvent()->GetCentrality();
566 if (!fCentMethod2.IsNull())
567 fCent2 = aliCent->GetCentralityPercentile(fCentMethod2);
568 if (!fCentMethod3.IsNull())
569 fCent3 = aliCent->GetCentralityPercentile(fCentMethod3);
575 fV0ATotMult = AliESDUtils::GetCorrV0A(fVZERO->GetMTotV0A(),fVertex[2]);
576 fV0CTotMult = AliESDUtils::GetCorrV0C(fVZERO->GetMTotV0C(),fVertex[2]);
583 //________________________________________________________________________
584 Bool_t AliAnalysisTaskSAQA::FillHistograms()
588 Float_t trackSum = 0;
597 Float_t leadingClusE = 0;
598 Float_t leadingClusEta = 0;
599 Float_t leadingClusPhi = 0;
601 Float_t leadingTrackPt = 0;
602 Float_t leadingTrackEta = 0;
603 Float_t leadingTrackPhi = 0;
605 Float_t leadingJetPt = 0;
606 Float_t leadingJetEta = 0;
607 Float_t leadingJetPhi = 0;
610 AliVParticle *leadingTrack = 0;
612 ntracks = DoTrackLoop(trackSum, leadingTrack);
613 AliDebug(2,Form("%d tracks found in the event", ntracks));
616 leadingTrackPt = leadingTrack->Pt();
617 leadingTrackEta = leadingTrack->Eta();
618 leadingTrackPhi = leadingTrack->Phi();
623 AliVCluster *leadingClus = 0;
625 nclusters = DoClusterLoop(clusSum, leadingClus);
626 AliDebug(2,Form("%d clusters found in the event", nclusters));
629 TLorentzVector leadingClusVect;
630 leadingClus->GetMomentum(leadingClusVect, fVertex);
631 leadingClusE = leadingClus->E();
632 leadingClusEta = leadingClusVect.Eta();
633 leadingClusPhi = leadingClusVect.Phi();
638 ncells = DoCellLoop(cellSum);
639 AliDebug(2,Form("%d cells found in the event", ncells));
643 AliEmcalJet *leadingJet = 0;
645 njets = DoJetLoop(leadingJet);
646 AliDebug(2,Form("%d jets found in the event", njets));
649 leadingJetPt = leadingJet->Pt();
650 leadingJetEta = leadingJet->Eta();
651 leadingJetPhi = leadingJet->Phi();
655 FillEventQAHisto(fCent, fCent2, fCent3, fV0ATotMult, fV0CTotMult, fEPV0, fRhoVal,
656 ntracks, nclusters, ncells, njets,
657 leadingTrackPt, leadingTrackEta, leadingTrackPhi,
658 leadingClusE, leadingClusEta, leadingClusPhi,
659 leadingJetPt, leadingJetEta, leadingJetPhi);
664 //________________________________________________________________________
665 void AliAnalysisTaskSAQA::FillEventQAHisto(Float_t cent, Float_t cent2, Float_t cent3, Float_t v0a, Float_t v0c,
666 Float_t ep, Float_t rho, Int_t ntracks, Int_t nclusters, Int_t ncells, Int_t njets,
667 Float_t maxTrackPt, Float_t maxTrackEta, Float_t maxTrackPhi,
668 Float_t maxClusterE, Float_t maxClusterEta, Float_t maxClusterPhi,
669 Float_t maxJetPt, Float_t maxJetEta, Float_t maxJetPhi)
671 Double_t contents[20]={0};
673 for (Int_t i = 0; i < fHistEventQA->GetNdimensions(); i++) {
674 TString title(fHistEventQA->GetAxis(i)->GetTitle());
675 if (title=="Centrality %")
677 else if (title==Form("Centrality %s %%", fCentMethod2.Data()))
679 else if (title==Form("Centrality %s %%", fCentMethod3.Data()))
681 else if (title=="V0A total multiplicity")
683 else if (title=="V0C total multiplicity")
685 else if (title=="V0A+V0C total multiplicity")
686 contents[i] = v0a+v0c;
687 else if (title=="#psi_{RP}")
689 else if (title=="#rho (GeV/c)")
691 else if (title=="No. of tracks")
692 contents[i] = ntracks;
693 else if (title=="No. of clusters")
694 contents[i] = nclusters;
695 else if (title=="No. of cells")
696 contents[i] = ncells;
697 else if (title=="No. of jets")
699 else if (title=="p_{T,track}^{leading} (GeV/c)")
700 contents[i] = maxTrackPt;
701 else if (title=="#eta_{track}^{leading}")
702 contents[i] = maxTrackEta;
703 else if (title=="#phi_{track}^{leading}")
704 contents[i] = maxTrackPhi;
705 else if (title=="E_{cluster}^{leading} (GeV)")
706 contents[i] = maxClusterE;
707 else if (title=="#eta_{cluster}^{leading}")
708 contents[i] = maxClusterEta;
709 else if (title=="#phi_{cluster}^{leading}")
710 contents[i] = maxClusterPhi;
711 else if (title=="p_{T,jet}^{leading} (GeV/c)")
712 contents[i] = maxJetPt;
713 else if (title=="#eta_{jet}^{leading}")
714 contents[i] = maxJetEta;
715 else if (title=="#phi_{jet}^{leading}")
716 contents[i] = maxJetPhi;
718 AliWarning(Form("Unable to fill dimension %s!",title.Data()));
721 fHistEventQA->Fill(contents);
724 //________________________________________________________________________
725 Int_t AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum)
729 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
734 const Int_t ncells = cells->GetNumberOfCells();
737 for (Int_t pos = 0; pos < ncells; pos++) {
738 Float_t amp = cells->GetAmplitude(pos);
739 Int_t absId = cells->GetCellNumber(pos);
741 if (amp < fCellEnergyCut)
744 fHistCellsAbsIdEnergy[fCentBin]->Fill(absId,amp);
752 //________________________________________________________________________
753 Double_t AliAnalysisTaskSAQA::GetFcross(AliVCluster *cluster, AliVCaloCells *cells)
755 Int_t AbsIdseed = -1;
757 for (Int_t i = 0; i < cluster->GetNCells(); i++) {
758 if (cells->GetCellAmplitude(cluster->GetCellAbsId(i)) > AbsIdseed) {
759 Eseed = cells->GetCellAmplitude(cluster->GetCellAbsId(i));
760 AbsIdseed = cluster->GetCellAbsId(i);
767 Int_t imod = -1, iphi =-1, ieta=-1,iTower = -1, iIphi = -1, iIeta = -1;
768 fGeom->GetCellIndex(AbsIdseed,imod,iTower,iIphi,iIeta);
769 fGeom->GetCellPhiEtaIndexInSModule(imod,iTower,iIphi,iIeta,iphi,ieta);
771 //Get close cells index and energy, not in corners
776 if (iphi < AliEMCALGeoParams::fgkEMCALRows-1) absID1 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi+1, ieta);
777 if (iphi > 0) absID2 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi-1, ieta);
779 // In case of cell in eta = 0 border, depending on SM shift the cross cell index
784 if (ieta == AliEMCALGeoParams::fgkEMCALCols-1 && !(imod%2)) {
785 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod+1, iphi, 0);
786 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
788 else if (ieta == 0 && imod%2) {
789 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
790 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod-1, iphi, AliEMCALGeoParams::fgkEMCALCols-1);
793 if (ieta < AliEMCALGeoParams::fgkEMCALCols-1)
794 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
796 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
799 Double_t ecell1 = cells->GetCellAmplitude(absID1);
800 Double_t ecell2 = cells->GetCellAmplitude(absID2);
801 Double_t ecell3 = cells->GetCellAmplitude(absID3);
802 Double_t ecell4 = cells->GetCellAmplitude(absID4);
804 Double_t Ecross = ecell1 + ecell2 + ecell3 + ecell4;
806 Double_t Fcross = 1 - Ecross/Eseed;
811 //________________________________________________________________________
812 Int_t AliAnalysisTaskSAQA::DoClusterLoop(Float_t &sum, AliVCluster* &leading)
819 Int_t nAccClusters = 0;
821 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
827 const Int_t nclusters = fCaloClusters->GetEntriesFast();
829 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
830 AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
832 AliError(Form("Could not receive cluster %d", iClusters));
836 if (!AcceptCluster(cluster))
841 if (!leading || leading->E() < cluster->E()) leading = cluster;
843 TLorentzVector nPart;
844 cluster->GetMomentum(nPart, fVertex);
846 fHistClusPhiEtaEnergy[fCentBin]->Fill(nPart.Eta(), nPart.Phi(), cluster->E());
848 Double_t ep = nPart.Phi() - fEPV0;
849 while (ep < 0) ep += TMath::Pi();
850 while (ep >= TMath::Pi()) ep -= TMath::Pi();
851 fHistClusDeltaPhiEPEnergy[fCentBin]->Fill(cluster->E(), ep);
853 fHistNCellsEnergy[fCentBin]->Fill(cluster->E(), cluster->GetNCells());
855 fHistClusTimeEnergy[fCentBin]->Fill(cluster->E(), cluster->GetTOF());
857 if (cells) fHistFcrossEnergy[fCentBin]->Fill(cluster->E(), GetFcross(cluster, cells));
859 if (fHistClusMCEnergyFraction[fCentBin])
860 fHistClusMCEnergyFraction[fCentBin]->Fill(cluster->GetMCEnergyFraction());
868 //________________________________________________________________________
869 Int_t AliAnalysisTaskSAQA::DoTrackLoop(Float_t &sum, AliVParticle* &leading)
875 Int_t nAccTracks = 0;
880 const Int_t ntracks = fTracks->GetEntriesFast();
884 for (Int_t i = 0; i < ntracks; i++) {
885 AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
888 AliError(Form("Could not retrieve track %d",i));
892 if (!AcceptTrack(track))
899 if (!leading || leading->Pt() < track->Pt()) leading = track;
901 if (fParticleLevel) {
902 fHistTrPhiEtaPt[fCentBin][0]->Fill(track->Eta(), track->Phi(), track->Pt());
905 fHistTrPhiEtaPt[fCentBin][3]->Fill(track->Eta(), track->Phi(), track->Pt());
906 if (track->GetLabel() == 0) {
908 if (fHistTrPhiEtaZeroLab[fCentBin]) {
909 fHistTrPhiEtaZeroLab[fCentBin]->Fill(track->Eta(), track->Phi());
910 fHistTrPtZeroLab[fCentBin]->Fill(track->Pt());
914 if (track->GetLabel() < 0)
919 AliPicoTrack* ptrack = dynamic_cast<AliPicoTrack*>(track);
921 type = ptrack->GetTrackType();
923 if (type >= 0 && type < 3)
924 fHistTrPhiEtaPt[fCentBin][type]->Fill(track->Eta(), track->Phi(), track->Pt());
926 AliDebug(2,Form("%s: track type %d not recognized!", GetName(), type));
929 AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
934 if ((vtrack->GetTrackEtaOnEMCal() == -999 || vtrack->GetTrackPhiOnEMCal() == -999) && fHistTrPhiEtaNonProp[fCentBin]) {
935 fHistTrPhiEtaNonProp[fCentBin]->Fill(vtrack->Eta(), vtrack->Phi());
936 fHistTrPtNonProp[fCentBin]->Fill(vtrack->Pt());
939 if (fHistTrEmcPhiEta[fCentBin])
940 fHistTrEmcPhiEta[fCentBin]->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
941 if (fHistTrEmcPt[fCentBin])
942 fHistTrEmcPt[fCentBin]->Fill(vtrack->GetTrackPtOnEMCal());
943 if (fHistDeltaEtaPt[fCentBin])
944 fHistDeltaEtaPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Eta() - vtrack->GetTrackEtaOnEMCal());
945 if (fHistDeltaPhiPt[fCentBin])
946 fHistDeltaPhiPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Phi() - vtrack->GetTrackPhiOnEMCal());
947 if (fHistDeltaPtvsPt[fCentBin])
948 fHistDeltaPtvsPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Pt() - vtrack->GetTrackPtOnEMCal());
951 if (fHistTrNegativeLabels[fCentBin])
952 fHistTrNegativeLabels[fCentBin]->Fill(1. * neg / ntracks);
954 if (fHistTrZeroLabels[fCentBin])
955 fHistTrZeroLabels[fCentBin]->Fill(1. * zero / ntracks);
960 //________________________________________________________________________
961 Int_t AliAnalysisTaskSAQA::DoJetLoop(AliEmcalJet* &leading)
972 Int_t njets = fJets->GetEntriesFast();
974 for (Int_t ij = 0; ij < njets; ij++) {
976 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
979 AliError(Form("Could not receive jet %d", ij));
986 if (!leading || leading->Pt() < jet->Pt()) leading = jet;
990 fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
991 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());