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(30),
54 fHistTrNegativeLabels(0),
58 fHistClusTimeEnergy(0),
59 fHistClusEnergyMinusCellEnergy(0),
60 fHistCellsAbsIdEnergy(0),
63 fHistChVSneCorrCells(0)
65 // Default constructor.
67 for (Int_t i = 0; i < 4; i++) {
68 for (Int_t j = 0; j < 4; j++) fHistTrPhiEtaPt[i][j] = 0;
69 fHistTrPhiEtaZeroLab[i] = 0;
70 fHistTrPtZeroLab[i] = 0;
71 fHistTrEmcPhiEta[i] = 0;
73 fHistTrPhiEtaNonProp[i] = 0;
74 fHistTrPtNonProp[i] = 0;
75 fHistDeltaEtaPt[i] = 0;
76 fHistDeltaPhiPt[i] = 0;
77 fHistDeltaPtvsPt[i] = 0;
78 fHistClusPhiEtaEnergy[i] = 0;
79 fHistClusDeltaPhiEPEnergy[i] = 0;
80 fHistClusMCEnergyFraction[i] = 0;
81 fHistJetsPhiEta[i] = 0;
82 fHistJetsPtArea[i] = 0;
85 SetMakeGeneralHistograms(kTRUE);
88 //________________________________________________________________________
89 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
90 AliAnalysisTaskEmcalJet(name, kTRUE),
92 fParticleLevel(kFALSE),
98 fDoLeadingObjectPosition(0),
99 fMaxCellsInCluster(30),
106 fHistTrNegativeLabels(0),
107 fHistTrZeroLabels(0),
108 fHistNCellsEnergy(0),
109 fHistFcrossEnergy(0),
110 fHistClusTimeEnergy(0),
111 fHistClusEnergyMinusCellEnergy(0),
112 fHistCellsAbsIdEnergy(0),
115 fHistChVSneCorrCells(0)
117 // Standard constructor.
119 for (Int_t i = 0; i < 4; i++) {
120 for (Int_t j = 0; j < 4; j++) fHistTrPhiEtaPt[i][j] = 0;
121 fHistTrPhiEtaZeroLab[i] = 0;
122 fHistTrPtZeroLab[i] = 0;
123 fHistTrEmcPhiEta[i] = 0;
125 fHistTrPhiEtaNonProp[i] = 0;
126 fHistTrPtNonProp[i] = 0;
127 fHistDeltaEtaPt[i] = 0;
128 fHistDeltaPhiPt[i] = 0;
129 fHistDeltaPtvsPt[i] = 0;
130 fHistClusPhiEtaEnergy[i] = 0;
131 fHistClusDeltaPhiEPEnergy[i] = 0;
132 fHistClusMCEnergyFraction[i] = 0;
133 fHistJetsPhiEta[i] = 0;
134 fHistJetsPtArea[i] = 0;
137 SetMakeGeneralHistograms(kTRUE);
140 //________________________________________________________________________
141 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
146 //________________________________________________________________________
147 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
151 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
153 if (fParticleCollArray.GetEntriesFast()>0) {
154 if (!fParticleLevel && fIsMC) {
155 fHistTrNegativeLabels = new TH1F("fHistTrNegativeLabels","fHistTrNegativeLabels", 500, 0, 1);
156 fHistTrNegativeLabels->GetXaxis()->SetTitle("% of negative labels");
157 fHistTrNegativeLabels->GetYaxis()->SetTitle("counts");
158 fOutput->Add(fHistTrNegativeLabels);
160 fHistTrZeroLabels = new TH1F("fHistTrZeroLabels","fHistTrZeroLabels", 500, 0, 1);
161 fHistTrZeroLabels->GetXaxis()->SetTitle("% of negative labels");
162 fHistTrZeroLabels->GetYaxis()->SetTitle("counts");
163 fOutput->Add(fHistTrZeroLabels);
172 for (Int_t i = 0; i < fNcentBins; i++) {
173 for (Int_t j = 0; j < nlabels; j++) {
174 histname = Form("fHistTrPhiEtaPt_%d_%d",i,j);
175 fHistTrPhiEtaPt[i][j] = new TH3F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
176 fHistTrPhiEtaPt[i][j]->GetXaxis()->SetTitle("#eta");
177 fHistTrPhiEtaPt[i][j]->GetYaxis()->SetTitle("#phi");
178 fHistTrPhiEtaPt[i][j]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
179 fOutput->Add(fHistTrPhiEtaPt[i][j]);
182 if (!fParticleLevel) {
184 histname = Form("fHistTrPhiEtaZeroLab_%d",i);
185 fHistTrPhiEtaZeroLab[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
186 fHistTrPhiEtaZeroLab[i]->GetXaxis()->SetTitle("#eta");
187 fHistTrPhiEtaZeroLab[i]->GetYaxis()->SetTitle("#phi");
188 fHistTrPhiEtaZeroLab[i]->GetZaxis()->SetTitle("counts");
189 fOutput->Add(fHistTrPhiEtaZeroLab[i]);
191 histname = Form("fHistTrPtZeroLab_%d",i);
192 fHistTrPtZeroLab[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
193 fHistTrPtZeroLab[i]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
194 fHistTrPtZeroLab[i]->GetYaxis()->SetTitle("counts");
195 fOutput->Add(fHistTrPtZeroLab[i]);
198 histname = Form("fHistTrEmcPhiEta_%d",i);
199 fHistTrEmcPhiEta[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
200 fHistTrEmcPhiEta[i]->GetXaxis()->SetTitle("#eta");
201 fHistTrEmcPhiEta[i]->GetYaxis()->SetTitle("#phi");
202 fOutput->Add(fHistTrEmcPhiEta[i]);
204 histname = Form("fHistTrEmcPt_%d",i);
205 fHistTrEmcPt[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
206 fHistTrEmcPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
207 fHistTrEmcPt[i]->GetYaxis()->SetTitle("counts");
208 fOutput->Add(fHistTrEmcPt[i]);
210 histname = Form("fHistTrPhiEtaNonProp_%d",i);
211 fHistTrPhiEtaNonProp[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
212 fHistTrPhiEtaNonProp[i]->GetXaxis()->SetTitle("#eta");
213 fHistTrPhiEtaNonProp[i]->GetYaxis()->SetTitle("#phi");
214 fOutput->Add(fHistTrPhiEtaNonProp[i]);
216 histname = Form("fHistTrPtNonProp_%d",i);
217 fHistTrPtNonProp[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
218 fHistTrPtNonProp[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
219 fHistTrPtNonProp[i]->GetYaxis()->SetTitle("counts");
220 fOutput->Add(fHistTrPtNonProp[i]);
222 histname = Form("fHistDeltaEtaPt_%d",i);
223 fHistDeltaEtaPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 50, -0.5, 0.5);
224 fHistDeltaEtaPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
225 fHistDeltaEtaPt[i]->GetYaxis()->SetTitle("#delta#eta");
226 fOutput->Add(fHistDeltaEtaPt[i]);
228 histname = Form("fHistDeltaPhiPt_%d",i);
229 fHistDeltaPhiPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 200, -2, 2);
230 fHistDeltaPhiPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
231 fHistDeltaPhiPt[i]->GetYaxis()->SetTitle("#delta#phi");
232 fOutput->Add(fHistDeltaPhiPt[i]);
234 histname = Form("fHistDeltaPtvsPt_%d",i);
235 fHistDeltaPtvsPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, fNbins, -fMaxBinPt/2, fMaxBinPt/2);
236 fHistDeltaPtvsPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
237 fHistDeltaPtvsPt[i]->GetYaxis()->SetTitle("#deltap_{T} (GeV/c)");
238 fHistDeltaPtvsPt[i]->GetZaxis()->SetTitle("counts");
239 fOutput->Add(fHistDeltaPtvsPt[i]);
244 if (fClusterCollArray.GetEntriesFast()>0) {
247 for (Int_t i = 0; i < fNcentBins; i++) {
248 histname = "fHistClusPhiEtaEnergy_";
250 fHistClusPhiEtaEnergy[i] = new TH3F(histname, histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
251 fHistClusPhiEtaEnergy[i]->GetXaxis()->SetTitle("#eta");
252 fHistClusPhiEtaEnergy[i]->GetYaxis()->SetTitle("#phi");
253 fHistClusPhiEtaEnergy[i]->GetZaxis()->SetTitle("E_{cluster} (GeV)");
254 fOutput->Add(fHistClusPhiEtaEnergy[i]);
256 histname = "fHistClusDeltaPhiEPEnergy_";
258 fHistClusDeltaPhiEPEnergy[i] = new TH2F(histname, histname, fNbins, fMinBinPt, fMaxBinPt, 100, 0, TMath::Pi());
259 fHistClusDeltaPhiEPEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
260 fHistClusDeltaPhiEPEnergy[i]->GetYaxis()->SetTitle("#phi_{cluster} - #psi_{RP}");
261 fOutput->Add(fHistClusDeltaPhiEPEnergy[i]);
264 histname = "fHistClusMCEnergyFraction_";
266 fHistClusMCEnergyFraction[i] = new TH1F(histname, histname, fNbins, 0, 1.2);
267 fHistClusMCEnergyFraction[i]->GetXaxis()->SetTitle("MC fraction");
268 fHistClusMCEnergyFraction[i]->GetYaxis()->SetTitle("counts");
269 fOutput->Add(fHistClusMCEnergyFraction[i]);
273 fHistClusTimeEnergy = new TH2F("fHistClusTimeEnergy","Time vs. energy of clusters", fNbins, fMinBinPt, fMaxBinPt, fNbins, -1e-6, 1e-6);
274 fHistClusTimeEnergy->GetXaxis()->SetTitle("E_{cluster} (GeV)");
275 fHistClusTimeEnergy->GetYaxis()->SetTitle("Time");
276 fOutput->Add(fHistClusTimeEnergy);
278 Int_t nbins = fMaxCellsInCluster;
279 while (nbins > fNbins) nbins /= 2;
280 fHistNCellsEnergy = new TH2F("fHistNCellsEnergy","Number of cells vs. energy of clusters", fNbins, fMinBinPt, fMaxBinPt, nbins, -0.5, fMaxCellsInCluster-0.5);
281 fHistNCellsEnergy->GetXaxis()->SetTitle("E_{cluster} (GeV)");
282 fHistNCellsEnergy->GetYaxis()->SetTitle("N_{cells}");
283 fOutput->Add(fHistNCellsEnergy);
285 fHistFcrossEnergy = new TH2F("fHistFcrossEnergy","fHistFcrossEnergy", fNbins, fMinBinPt, fMaxBinPt, 200, -3.5, 1.5);
286 fHistFcrossEnergy->GetXaxis()->SetTitle("E_{cluster} (GeV)");
287 fHistFcrossEnergy->GetYaxis()->SetTitle("F_{cross}");
288 fOutput->Add(fHistFcrossEnergy);
290 fHistClusEnergyMinusCellEnergy = new TH2F("fHistClusEnergyMinusCellEnergy","fHistClusEnergyMinusCellEnergy",
291 fNbins, fMinBinPt, fMaxBinPt, fNbins, -fMaxBinPt/2, fMaxBinPt/2);
292 fHistClusEnergyMinusCellEnergy->GetXaxis()->SetTitle("E_{cluster} (GeV)");
293 fHistClusEnergyMinusCellEnergy->GetYaxis()->SetTitle("E_{cluster} - #Sigma_{i}E_{cell,i} (GeV)");
294 fOutput->Add(fHistClusEnergyMinusCellEnergy);
296 fHistCellsAbsIdEnergy = new TH2F("fHistCellsAbsIdEnergy","fHistCellsAbsIdEnergy", 11600,0,11599,(Int_t)(fNbins / 2), fMinBinPt, fMaxBinPt / 2);
297 fHistCellsAbsIdEnergy->GetXaxis()->SetTitle("cell abs. Id");
298 fHistCellsAbsIdEnergy->GetYaxis()->SetTitle("E_{cluster} (GeV)");
299 fHistCellsAbsIdEnergy->GetZaxis()->SetTitle("counts");
300 fOutput->Add(fHistCellsAbsIdEnergy);
302 fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy",
303 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5);
304 fHistChVSneCells->GetXaxis()->SetTitle("Energy (GeV)");
305 fHistChVSneCells->GetYaxis()->SetTitle("Momentum (GeV/c)");
306 fOutput->Add(fHistChVSneCells);
308 fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy",
309 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5);
310 fHistChVSneClus->GetXaxis()->SetTitle("Energy (GeV)");
311 fHistChVSneClus->GetYaxis()->SetTitle("Momentum (GeV/c)");
312 fOutput->Add(fHistChVSneClus);
314 fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy",
315 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt , fMaxBinPt * 2.5);
316 fHistChVSneCorrCells->GetXaxis()->SetTitle("Energy (GeV)");
317 fHistChVSneCorrCells->GetYaxis()->SetTitle("Momentum (GeV/c)");
318 fOutput->Add(fHistChVSneCorrCells);
321 if (fJetCollArray.GetEntriesFast()>0) {
325 for (Int_t i = 0; i < fNcentBins; i++) {
326 histname = "fHistJetsPhiEta_";
328 fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
329 fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
330 fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
331 fHistJetsPhiEta[i]->GetZaxis()->SetTitle("counts");
332 fOutput->Add(fHistJetsPhiEta[i]);
334 histname = "fHistJetsPtArea_";
336 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, 50, 0, 1.5);
337 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
338 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
339 fOutput->Add(fHistJetsPtArea[i]);
345 Int_t nbins[20] = {0};
346 Double_t min[20] = {0};
347 Double_t max[20] = {0};
349 if (fForceBeamType != AliAnalysisTaskEmcal::kpp) {
350 title[dim] = "Centrality %";
356 if (!fCentMethod2.IsNull()) {
357 title[dim] = Form("Centrality %s %%", fCentMethod2.Data());
364 if (!fCentMethod3.IsNull()) {
365 title[dim] = Form("Centrality %s %%", fCentMethod3.Data());
373 title[dim] = "V0A total multiplicity";
379 title[dim] = "V0C total multiplicity";
385 else if (fDoV0QA==2) {
386 title[dim] = "V0A+V0C total multiplicity";
393 if (!fRhoName.IsNull()) {
394 title[dim] = "#rho (GeV/c)";
395 nbins[dim] = fNbins*4;
402 title[dim] = "#psi_{RP}";
404 min[dim] = -TMath::Pi();
405 max[dim] = TMath::Pi();
410 if (fParticleCollArray.GetEntriesFast()>0) {
411 title[dim] = "No. of tracks";
417 title[dim] = "p_{T,track}^{leading} (GeV/c)";
419 min[dim] = fMinBinPt;
420 max[dim] = fMaxBinPt;
423 if (fDoLeadingObjectPosition) {
424 title[dim] = "#eta_{track}^{leading}";
430 title[dim] = "#phi_{track}^{leading}";
433 max[dim] = TMath::Pi() * 2.02;
438 if (fClusterCollArray.GetEntriesFast()>0) {
439 title[dim] = "No. of clusters";
445 title[dim] = "E_{cluster}^{leading} (GeV)";
447 min[dim] = fMinBinPt;
448 max[dim] = fMaxBinPt;
451 if (fDoLeadingObjectPosition) {
452 title[dim] = "#eta_{cluster}^{leading}";
458 title[dim] = "#phi_{cluster}^{leading}";
461 max[dim] = TMath::Pi() * 2.02;
466 if (!fCaloCellsName.IsNull()) {
467 title[dim] = "No. of cells";
474 if (fJetCollArray.GetEntriesFast()>0) {
475 title[dim] = "No. of jets";
481 title[dim] = "p_{T,jet}^{leading} (GeV/c)";
483 min[dim] = fMinBinPt;
484 max[dim] = fMaxBinPt;
487 if (fDoLeadingObjectPosition) {
488 title[dim] = "#eta_{jet}^{leading}";
494 title[dim] = "#phi_{jet}^{leading}";
497 max[dim] = TMath::Pi() * 2.02;
502 fHistEventQA = new THnSparseF("fHistEventQA","fHistEventQA",dim,nbins,min,max);
503 for (Int_t i = 0; i < dim; i++)
504 fHistEventQA->GetAxis(i)->SetTitle(title[i]);
505 fOutput->Add(fHistEventQA);
507 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
510 //________________________________________________________________________
511 void AliAnalysisTaskSAQA::ExecOnce()
513 AliAnalysisTaskEmcalJet::ExecOnce();
516 fVZERO = InputEvent()->GetVZEROData();
518 AliError("AliVVZERO not available");
523 //________________________________________________________________________
524 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
526 // Retrieve event objects.
528 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
531 if (!fCentMethod2.IsNull() || !fCentMethod3.IsNull()) {
532 if (fBeamType == kAA || fBeamType == kpA ) {
533 AliCentrality *aliCent = InputEvent()->GetCentrality();
535 if (!fCentMethod2.IsNull())
536 fCent2 = aliCent->GetCentralityPercentile(fCentMethod2);
537 if (!fCentMethod3.IsNull())
538 fCent3 = aliCent->GetCentralityPercentile(fCentMethod3);
544 fV0ATotMult = AliESDUtils::GetCorrV0A(fVZERO->GetMTotV0A(),fVertex[2]);
545 fV0CTotMult = AliESDUtils::GetCorrV0C(fVZERO->GetMTotV0C(),fVertex[2]);
552 //________________________________________________________________________
553 Bool_t AliAnalysisTaskSAQA::FillHistograms()
557 Float_t trackSum = 0;
560 Float_t cellCutSum = 0;
567 Float_t leadingClusE = 0;
568 Float_t leadingClusEta = 0;
569 Float_t leadingClusPhi = 0;
571 Float_t leadingTrackPt = 0;
572 Float_t leadingTrackEta = 0;
573 Float_t leadingTrackPhi = 0;
575 Float_t leadingJetPt = 0;
576 Float_t leadingJetEta = 0;
577 Float_t leadingJetPhi = 0;
580 AliVParticle *leadingTrack = 0;
582 ntracks = DoTrackLoop(trackSum, leadingTrack);
583 AliDebug(2,Form("%d tracks found in the event", ntracks));
586 leadingTrackPt = leadingTrack->Pt();
587 leadingTrackEta = leadingTrack->Eta();
588 leadingTrackPhi = leadingTrack->Phi();
593 AliVCluster *leadingClus = 0;
595 nclusters = DoClusterLoop(clusSum, leadingClus);
596 AliDebug(2,Form("%d clusters found in the event", nclusters));
599 TLorentzVector leadingClusVect;
600 leadingClus->GetMomentum(leadingClusVect, fVertex);
601 leadingClusE = leadingClus->E();
602 leadingClusEta = leadingClusVect.Eta();
603 leadingClusPhi = leadingClusVect.Phi();
606 fHistChVSneClus->Fill(clusSum, trackSum);
610 ncells = DoCellLoop(cellSum, cellCutSum);
611 AliDebug(2,Form("%d cells found in the event", ncells));
613 fHistChVSneCells->Fill(cellSum, trackSum);
614 fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
618 AliEmcalJet *leadingJet = 0;
620 njets = DoJetLoop(leadingJet);
621 AliDebug(2,Form("%d jets found in the event", njets));
624 leadingJetPt = leadingJet->Pt();
625 leadingJetEta = leadingJet->Eta();
626 leadingJetPhi = leadingJet->Phi();
630 FillEventQAHisto(fCent, fCent2, fCent3, fV0ATotMult, fV0CTotMult, fEPV0, fRhoVal,
631 ntracks, nclusters, ncells, njets,
632 leadingTrackPt, leadingTrackEta, leadingTrackPhi,
633 leadingClusE, leadingClusEta, leadingClusPhi,
634 leadingJetPt, leadingJetEta, leadingJetPhi);
639 //________________________________________________________________________
640 void AliAnalysisTaskSAQA::FillEventQAHisto(Float_t cent, Float_t cent2, Float_t cent3, Float_t v0a, Float_t v0c,
641 Float_t ep, Float_t rho, Int_t ntracks, Int_t nclusters, Int_t ncells, Int_t njets,
642 Float_t maxTrackPt, Float_t maxTrackEta, Float_t maxTrackPhi,
643 Float_t maxClusterE, Float_t maxClusterEta, Float_t maxClusterPhi,
644 Float_t maxJetPt, Float_t maxJetEta, Float_t maxJetPhi)
646 Double_t contents[20]={0};
648 for (Int_t i = 0; i < fHistEventQA->GetNdimensions(); i++) {
649 TString title(fHistEventQA->GetAxis(i)->GetTitle());
650 if (title=="Centrality %")
652 else if (title==Form("Centrality %s %%", fCentMethod2.Data()))
654 else if (title==Form("Centrality %s %%", fCentMethod3.Data()))
656 else if (title=="V0A total multiplicity")
658 else if (title=="V0C total multiplicity")
660 else if (title=="V0A+V0C total multiplicity")
661 contents[i] = v0a+v0c;
662 else if (title=="#psi_{RP}")
664 else if (title=="#rho (GeV/c)")
666 else if (title=="No. of tracks")
667 contents[i] = ntracks;
668 else if (title=="No. of clusters")
669 contents[i] = nclusters;
670 else if (title=="No. of cells")
671 contents[i] = ncells;
672 else if (title=="No. of jets")
674 else if (title=="p_{T,track}^{leading} (GeV/c)")
675 contents[i] = maxTrackPt;
676 else if (title=="#eta_{track}^{leading}")
677 contents[i] = maxTrackEta;
678 else if (title=="#phi_{track}^{leading}")
679 contents[i] = maxTrackPhi;
680 else if (title=="E_{cluster}^{leading} (GeV)")
681 contents[i] = maxClusterE;
682 else if (title=="#eta_{cluster}^{leading}")
683 contents[i] = maxClusterEta;
684 else if (title=="#phi_{cluster}^{leading}")
685 contents[i] = maxClusterPhi;
686 else if (title=="p_{T,jet}^{leading} (GeV/c)")
687 contents[i] = maxJetPt;
688 else if (title=="#eta_{jet}^{leading}")
689 contents[i] = maxJetEta;
690 else if (title=="#phi_{jet}^{leading}")
691 contents[i] = maxJetPhi;
693 AliWarning(Form("Unable to fill dimension %s!",title.Data()));
696 fHistEventQA->Fill(contents);
699 //________________________________________________________________________
700 Int_t AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
704 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
709 const Int_t ncells = cells->GetNumberOfCells();
711 for (Int_t pos = 0; pos < ncells; pos++) {
712 Float_t amp = cells->GetAmplitude(pos);
713 Int_t absId = cells->GetCellNumber(pos);
714 fHistCellsAbsIdEnergy->Fill(absId,amp);
716 if (amp < fCellEnergyCut)
724 //________________________________________________________________________
725 Double_t AliAnalysisTaskSAQA::GetCellEnergySum(AliVCluster *cluster, AliVCaloCells *cells)
728 for (Int_t i = 0; i < cluster->GetNCells(); i++)
729 sum += cells->GetCellAmplitude(cluster->GetCellAbsId(i));
733 //________________________________________________________________________
734 Double_t AliAnalysisTaskSAQA::GetFcross(AliVCluster *cluster, AliVCaloCells *cells)
736 Int_t AbsIdseed = -1;
738 for (Int_t i = 0; i < cluster->GetNCells(); i++) {
739 if (cells->GetCellAmplitude(cluster->GetCellAbsId(i)) > AbsIdseed) {
740 Eseed = cells->GetCellAmplitude(cluster->GetCellAbsId(i));
741 AbsIdseed = cluster->GetCellAbsId(i);
748 Int_t imod = -1, iphi =-1, ieta=-1,iTower = -1, iIphi = -1, iIeta = -1;
749 fGeom->GetCellIndex(AbsIdseed,imod,iTower,iIphi,iIeta);
750 fGeom->GetCellPhiEtaIndexInSModule(imod,iTower,iIphi,iIeta,iphi,ieta);
752 //Get close cells index and energy, not in corners
757 if (iphi < AliEMCALGeoParams::fgkEMCALRows-1) absID1 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi+1, ieta);
758 if (iphi > 0) absID2 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi-1, ieta);
760 // In case of cell in eta = 0 border, depending on SM shift the cross cell index
765 if (ieta == AliEMCALGeoParams::fgkEMCALCols-1 && !(imod%2)) {
766 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod+1, iphi, 0);
767 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
769 else if (ieta == 0 && imod%2) {
770 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
771 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod-1, iphi, AliEMCALGeoParams::fgkEMCALCols-1);
774 if (ieta < AliEMCALGeoParams::fgkEMCALCols-1)
775 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
777 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
780 Double_t ecell1 = cells->GetCellAmplitude(absID1);
781 Double_t ecell2 = cells->GetCellAmplitude(absID2);
782 Double_t ecell3 = cells->GetCellAmplitude(absID3);
783 Double_t ecell4 = cells->GetCellAmplitude(absID4);
785 Double_t Ecross = ecell1 + ecell2 + ecell3 + ecell4;
787 Double_t Fcross = 1 - Ecross/Eseed;
792 //________________________________________________________________________
793 Int_t AliAnalysisTaskSAQA::DoClusterLoop(Float_t &sum, AliVCluster* &leading)
800 Int_t nAccClusters = 0;
802 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
808 const Int_t nclusters = fCaloClusters->GetEntriesFast();
810 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
811 AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
813 AliError(Form("Could not receive cluster %d", iClusters));
817 if (!AcceptCluster(cluster))
822 if (!leading || leading->E() < cluster->E()) leading = cluster;
824 TLorentzVector nPart;
825 cluster->GetMomentum(nPart, fVertex);
827 fHistClusPhiEtaEnergy[fCentBin]->Fill(nPart.Eta(), nPart.Phi(), cluster->E());
829 Double_t ep = nPart.Phi() - fEPV0;
830 while (ep < 0) ep += TMath::Pi();
831 while (ep >= TMath::Pi()) ep -= TMath::Pi();
832 fHistClusDeltaPhiEPEnergy[fCentBin]->Fill(cluster->E(), ep);
834 fHistNCellsEnergy->Fill(cluster->E(), cluster->GetNCells());
836 fHistClusTimeEnergy->Fill(cluster->E(), cluster->GetTOF());
838 if (cells) fHistFcrossEnergy->Fill(cluster->E(), GetFcross(cluster, cells));
840 if (cells) fHistClusEnergyMinusCellEnergy->Fill(cluster->E(), cluster->E() - GetCellEnergySum(cluster,cells));
842 if (fHistClusMCEnergyFraction[fCentBin])
843 fHistClusMCEnergyFraction[fCentBin]->Fill(cluster->GetMCEnergyFraction());
851 //________________________________________________________________________
852 Int_t AliAnalysisTaskSAQA::DoTrackLoop(Float_t &sum, AliVParticle* &leading)
859 Int_t nAccTracks = 0;
864 const Int_t ntracks = fTracks->GetEntriesFast();
868 for (Int_t i = 0; i < ntracks; i++) {
870 AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
873 AliError(Form("Could not retrieve track %d",i));
877 if (!AcceptTrack(track))
884 if (!leading || leading->Pt() < track->Pt()) leading = track;
886 if (fParticleLevel) {
887 fHistTrPhiEtaPt[fCentBin][0]->Fill(track->Eta(), track->Phi(), track->Pt());
890 fHistTrPhiEtaPt[fCentBin][3]->Fill(track->Eta(), track->Phi(), track->Pt());
891 if (track->GetLabel() == 0) {
893 if (fHistTrPhiEtaZeroLab[fCentBin]) {
894 fHistTrPhiEtaZeroLab[fCentBin]->Fill(track->Eta(), track->Phi());
895 fHistTrPtZeroLab[fCentBin]->Fill(track->Pt());
899 if (track->GetLabel() < 0)
904 AliPicoTrack* ptrack = dynamic_cast<AliPicoTrack*>(track);
906 type = ptrack->GetTrackType();
908 if (type >= 0 && type < 3)
909 fHistTrPhiEtaPt[fCentBin][type]->Fill(track->Eta(), track->Phi(), track->Pt());
911 AliDebug(2,Form("%s: track type %d not recognized!", GetName(), type));
914 AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
919 if ((vtrack->GetTrackEtaOnEMCal() == -999 || vtrack->GetTrackPhiOnEMCal() == -999) && fHistTrPhiEtaNonProp[fCentBin]) {
920 fHistTrPhiEtaNonProp[fCentBin]->Fill(vtrack->Eta(), vtrack->Phi());
921 fHistTrPtNonProp[fCentBin]->Fill(vtrack->Pt());
924 if (fHistTrEmcPhiEta[fCentBin])
925 fHistTrEmcPhiEta[fCentBin]->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
926 if (fHistTrEmcPt[fCentBin])
927 fHistTrEmcPt[fCentBin]->Fill(vtrack->GetTrackPtOnEMCal());
928 if (fHistDeltaEtaPt[fCentBin])
929 fHistDeltaEtaPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Eta() - vtrack->GetTrackEtaOnEMCal());
930 if (fHistDeltaPhiPt[fCentBin])
931 fHistDeltaPhiPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Phi() - vtrack->GetTrackPhiOnEMCal());
932 if (fHistDeltaPtvsPt[fCentBin])
933 fHistDeltaPtvsPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Pt() - vtrack->GetTrackPtOnEMCal());
936 if (fHistTrNegativeLabels)
937 fHistTrNegativeLabels->Fill(1. * neg / ntracks);
939 if (fHistTrZeroLabels)
940 fHistTrZeroLabels->Fill(1. * zero / ntracks);
945 //________________________________________________________________________
946 Int_t AliAnalysisTaskSAQA::DoJetLoop(AliEmcalJet* &leading)
957 Int_t njets = fJets->GetEntriesFast();
959 for (Int_t ij = 0; ij < njets; ij++) {
961 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
964 AliError(Form("Could not receive jet %d", ij));
971 if (!leading || leading->Pt() < jet->Pt()) leading = jet;
975 fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
976 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());