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),
55 // Default constructor.
57 for (Int_t i = 0; i < 4; i++) {
58 for (Int_t j = 0; j < 4; j++) fHistTrPhiEtaPt[i][j] = 0;
60 fHistTrNegativeLabels[i] = 0;
61 fHistTrZeroLabels[i] = 0;
62 fHistTrPhiEtaZeroLab[i] = 0;
63 fHistTrPtZeroLab[i] = 0;
64 fHistTrEmcPhiEta[i] = 0;
66 fHistTrPhiEtaNonProp[i] = 0;
67 fHistTrPtNonProp[i] = 0;
68 fHistDeltaEtaPt[i] = 0;
69 fHistDeltaPhiPt[i] = 0;
70 fHistDeltaPtvsPt[i] = 0;
72 fHistClusPhiEtaEnergy[i] = 0;
73 fHistClusDeltaPhiEPEnergy[i] = 0;
74 fHistNCellsEnergy[i] = 0;
75 fHistFcrossEnergy[i] = 0;
76 fHistClusTimeEnergy[i] = 0;
77 fHistClusMCEnergyFraction[i] = 0;
79 fHistCellsAbsIdEnergy[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),
107 // Standard constructor.
109 for (Int_t i = 0; i < 4; i++) {
110 for (Int_t j = 0; j < 4; j++) fHistTrPhiEtaPt[i][j] = 0;
112 fHistTrNegativeLabels[i] = 0;
113 fHistTrZeroLabels[i] = 0;
114 fHistTrPhiEtaZeroLab[i] = 0;
115 fHistTrPtZeroLab[i] = 0;
116 fHistTrEmcPhiEta[i] = 0;
118 fHistTrPhiEtaNonProp[i] = 0;
119 fHistTrPtNonProp[i] = 0;
120 fHistDeltaEtaPt[i] = 0;
121 fHistDeltaPhiPt[i] = 0;
122 fHistDeltaPtvsPt[i] = 0;
124 fHistClusPhiEtaEnergy[i] = 0;
125 fHistClusDeltaPhiEPEnergy[i] = 0;
126 fHistNCellsEnergy[i] = 0;
127 fHistFcrossEnergy[i] = 0;
128 fHistClusTimeEnergy[i] = 0;
129 fHistClusMCEnergyFraction[i] = 0;
131 fHistCellsAbsIdEnergy[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();
155 if (fParticleCollArray.GetEntriesFast()>0) {
156 if (!fParticleLevel && fIsMC) {
157 for (Int_t i = 0; i < fNcentBins; i++) {
158 histname = Form("fHistTrNegativeLabels_%d",i);
159 fHistTrNegativeLabels[i] = new TH1F(histname,histname, 500, 0, 1);
160 fHistTrNegativeLabels[i]->GetXaxis()->SetTitle("% of negative labels");
161 fHistTrNegativeLabels[i]->GetYaxis()->SetTitle("counts");
162 fOutput->Add(fHistTrNegativeLabels[i]);
164 histname = Form("fHistTrZeroLabels_%d",i);
165 fHistTrZeroLabels[i] = new TH1F(histname,histname, 500, 0, 1);
166 fHistTrZeroLabels[i]->GetXaxis()->SetTitle("% of negative labels");
167 fHistTrZeroLabels[i]->GetYaxis()->SetTitle("counts");
168 fOutput->Add(fHistTrZeroLabels[i]);
176 for (Int_t i = 0; i < fNcentBins; i++) {
177 for (Int_t j = 0; j < nlabels; j++) {
178 histname = Form("fHistTrPhiEtaPt_%d_%d",i,j);
179 fHistTrPhiEtaPt[i][j] = new TH3F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
180 fHistTrPhiEtaPt[i][j]->GetXaxis()->SetTitle("#eta");
181 fHistTrPhiEtaPt[i][j]->GetYaxis()->SetTitle("#phi");
182 fHistTrPhiEtaPt[i][j]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
183 fOutput->Add(fHistTrPhiEtaPt[i][j]);
186 if (!fParticleLevel) {
188 histname = Form("fHistTrPhiEtaZeroLab_%d",i);
189 fHistTrPhiEtaZeroLab[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
190 fHistTrPhiEtaZeroLab[i]->GetXaxis()->SetTitle("#eta");
191 fHistTrPhiEtaZeroLab[i]->GetYaxis()->SetTitle("#phi");
192 fHistTrPhiEtaZeroLab[i]->GetZaxis()->SetTitle("counts");
193 fOutput->Add(fHistTrPhiEtaZeroLab[i]);
195 histname = Form("fHistTrPtZeroLab_%d",i);
196 fHistTrPtZeroLab[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
197 fHistTrPtZeroLab[i]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
198 fHistTrPtZeroLab[i]->GetYaxis()->SetTitle("counts");
199 fOutput->Add(fHistTrPtZeroLab[i]);
202 histname = Form("fHistTrEmcPhiEta_%d",i);
203 fHistTrEmcPhiEta[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
204 fHistTrEmcPhiEta[i]->GetXaxis()->SetTitle("#eta");
205 fHistTrEmcPhiEta[i]->GetYaxis()->SetTitle("#phi");
206 fOutput->Add(fHistTrEmcPhiEta[i]);
208 histname = Form("fHistTrEmcPt_%d",i);
209 fHistTrEmcPt[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
210 fHistTrEmcPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
211 fHistTrEmcPt[i]->GetYaxis()->SetTitle("counts");
212 fOutput->Add(fHistTrEmcPt[i]);
214 histname = Form("fHistTrPhiEtaNonProp_%d",i);
215 fHistTrPhiEtaNonProp[i] = new TH2F(histname,histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
216 fHistTrPhiEtaNonProp[i]->GetXaxis()->SetTitle("#eta");
217 fHistTrPhiEtaNonProp[i]->GetYaxis()->SetTitle("#phi");
218 fOutput->Add(fHistTrPhiEtaNonProp[i]);
220 histname = Form("fHistTrPtNonProp_%d",i);
221 fHistTrPtNonProp[i] = new TH1F(histname,histname, fNbins, fMinBinPt, fMaxBinPt);
222 fHistTrPtNonProp[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
223 fHistTrPtNonProp[i]->GetYaxis()->SetTitle("counts");
224 fOutput->Add(fHistTrPtNonProp[i]);
226 histname = Form("fHistDeltaEtaPt_%d",i);
227 fHistDeltaEtaPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 50, -0.5, 0.5);
228 fHistDeltaEtaPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
229 fHistDeltaEtaPt[i]->GetYaxis()->SetTitle("#delta#eta");
230 fOutput->Add(fHistDeltaEtaPt[i]);
232 histname = Form("fHistDeltaPhiPt_%d",i);
233 fHistDeltaPhiPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 200, -2, 2);
234 fHistDeltaPhiPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
235 fHistDeltaPhiPt[i]->GetYaxis()->SetTitle("#delta#phi");
236 fOutput->Add(fHistDeltaPhiPt[i]);
238 histname = Form("fHistDeltaPtvsPt_%d",i);
239 fHistDeltaPtvsPt[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, fNbins, -fMaxBinPt/2, fMaxBinPt/2);
240 fHistDeltaPtvsPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
241 fHistDeltaPtvsPt[i]->GetYaxis()->SetTitle("#deltap_{T} (GeV/c)");
242 fHistDeltaPtvsPt[i]->GetZaxis()->SetTitle("counts");
243 fOutput->Add(fHistDeltaPtvsPt[i]);
248 if (fClusterCollArray.GetEntriesFast()>0) {
249 for (Int_t i = 0; i < fNcentBins; i++) {
250 histname = "fHistClusPhiEtaEnergy_";
252 fHistClusPhiEtaEnergy[i] = new TH3F(histname, histname, 100, -1, 1, 101, 0, TMath::Pi() * 2.02, fNbins, fMinBinPt, fMaxBinPt);
253 fHistClusPhiEtaEnergy[i]->GetXaxis()->SetTitle("#eta");
254 fHistClusPhiEtaEnergy[i]->GetYaxis()->SetTitle("#phi");
255 fHistClusPhiEtaEnergy[i]->GetZaxis()->SetTitle("E_{cluster} (GeV)");
256 fOutput->Add(fHistClusPhiEtaEnergy[i]);
258 histname = "fHistClusDeltaPhiEPEnergy_";
260 fHistClusDeltaPhiEPEnergy[i] = new TH2F(histname, histname, fNbins, fMinBinPt, fMaxBinPt, 100, 0, TMath::Pi());
261 fHistClusDeltaPhiEPEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
262 fHistClusDeltaPhiEPEnergy[i]->GetYaxis()->SetTitle("#phi_{cluster} - #psi_{RP}");
263 fOutput->Add(fHistClusDeltaPhiEPEnergy[i]);
266 histname = "fHistClusMCEnergyFraction_";
268 fHistClusMCEnergyFraction[i] = new TH1F(histname, histname, fNbins, 0, 1.2);
269 fHistClusMCEnergyFraction[i]->GetXaxis()->SetTitle("MC fraction");
270 fHistClusMCEnergyFraction[i]->GetYaxis()->SetTitle("counts");
271 fOutput->Add(fHistClusMCEnergyFraction[i]);
274 histname = "fHistClusTimeEnergy_";
276 fHistClusTimeEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, fNbins, -1e-6, 1e-6);
277 fHistClusTimeEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
278 fHistClusTimeEnergy[i]->GetYaxis()->SetTitle("Time");
279 fOutput->Add(fHistClusTimeEnergy[i]);
281 Int_t nbins = fMaxCellsInCluster;
282 while (nbins > fNbins) nbins /= 2;
283 histname = "fHistNCellsEnergy_";
285 fHistNCellsEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, nbins, -0.5, fMaxCellsInCluster-0.5);
286 fHistNCellsEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
287 fHistNCellsEnergy[i]->GetYaxis()->SetTitle("N_{cells}");
288 fOutput->Add(fHistNCellsEnergy[i]);
290 histname = "fHistFcrossEnergy_";
292 fHistFcrossEnergy[i] = new TH2F(histname,histname, fNbins, fMinBinPt, fMaxBinPt, 200, -3.5, 1.5);
293 fHistFcrossEnergy[i]->GetXaxis()->SetTitle("E_{cluster} (GeV)");
294 fHistFcrossEnergy[i]->GetYaxis()->SetTitle("F_{cross}");
295 fOutput->Add(fHistFcrossEnergy[i]);
297 histname = "fHistCellsAbsIdEnergy_";
299 fHistCellsAbsIdEnergy[i] = new TH2F(histname,histname, 11600,0,11599,(Int_t)(fNbins / 2), fMinBinPt, fMaxBinPt / 2);
300 fHistCellsAbsIdEnergy[i]->GetXaxis()->SetTitle("cell abs. Id");
301 fHistCellsAbsIdEnergy[i]->GetYaxis()->SetTitle("E_{cluster} (GeV)");
302 fHistCellsAbsIdEnergy[i]->GetZaxis()->SetTitle("counts");
303 fOutput->Add(fHistCellsAbsIdEnergy[i]);
307 if (fJetCollArray.GetEntriesFast()>0) {
308 for (Int_t i = 0; i < fNcentBins; i++) {
309 histname = "fHistJetsPhiEta_";
311 fHistJetsPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 100, -1, 1, 101, 0, TMath::Pi() * 2.02);
312 fHistJetsPhiEta[i]->GetXaxis()->SetTitle("#eta");
313 fHistJetsPhiEta[i]->GetYaxis()->SetTitle("#phi");
314 fHistJetsPhiEta[i]->GetZaxis()->SetTitle("counts");
315 fOutput->Add(fHistJetsPhiEta[i]);
317 histname = "fHistJetsPtArea_";
319 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, 50, 0, 1.5);
320 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
321 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
322 fOutput->Add(fHistJetsPtArea[i]);
328 Int_t nbins[20] = {0};
329 Double_t min[20] = {0};
330 Double_t max[20] = {0};
332 if (fForceBeamType != AliAnalysisTaskEmcal::kpp) {
333 title[dim] = "Centrality %";
339 if (!fCentMethod2.IsNull()) {
340 title[dim] = Form("Centrality %s %%", fCentMethod2.Data());
347 if (!fCentMethod3.IsNull()) {
348 title[dim] = Form("Centrality %s %%", fCentMethod3.Data());
356 title[dim] = "V0A total multiplicity";
362 title[dim] = "V0C total multiplicity";
368 else if (fDoV0QA==2) {
369 title[dim] = "V0A+V0C total multiplicity";
376 if (!fRhoName.IsNull()) {
377 title[dim] = "#rho (GeV/c)";
378 nbins[dim] = fNbins*4;
385 title[dim] = "#psi_{RP}";
387 min[dim] = -TMath::Pi();
388 max[dim] = TMath::Pi();
393 if (fParticleCollArray.GetEntriesFast()>0) {
394 title[dim] = "No. of tracks";
400 title[dim] = "p_{T,track}^{leading} (GeV/c)";
402 min[dim] = fMinBinPt;
403 max[dim] = fMaxBinPt;
406 if (fDoLeadingObjectPosition) {
407 title[dim] = "#eta_{track}^{leading}";
413 title[dim] = "#phi_{track}^{leading}";
416 max[dim] = TMath::Pi() * 2.02;
421 if (fClusterCollArray.GetEntriesFast()>0) {
422 title[dim] = "No. of clusters";
428 title[dim] = "E_{cluster}^{leading} (GeV)";
430 min[dim] = fMinBinPt;
431 max[dim] = fMaxBinPt;
434 if (fDoLeadingObjectPosition) {
435 title[dim] = "#eta_{cluster}^{leading}";
441 title[dim] = "#phi_{cluster}^{leading}";
444 max[dim] = TMath::Pi() * 2.02;
449 if (!fCaloCellsName.IsNull()) {
450 title[dim] = "No. of cells";
457 if (fJetCollArray.GetEntriesFast()>0) {
458 title[dim] = "No. of jets";
464 title[dim] = "p_{T,jet}^{leading} (GeV/c)";
466 min[dim] = fMinBinPt;
467 max[dim] = fMaxBinPt;
470 if (fDoLeadingObjectPosition) {
471 title[dim] = "#eta_{jet}^{leading}";
477 title[dim] = "#phi_{jet}^{leading}";
480 max[dim] = TMath::Pi() * 2.02;
485 fHistEventQA = new THnSparseF("fHistEventQA","fHistEventQA",dim,nbins,min,max);
486 for (Int_t i = 0; i < dim; i++)
487 fHistEventQA->GetAxis(i)->SetTitle(title[i]);
488 fOutput->Add(fHistEventQA);
490 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
493 //________________________________________________________________________
494 void AliAnalysisTaskSAQA::ExecOnce()
496 AliAnalysisTaskEmcalJet::ExecOnce();
499 fVZERO = InputEvent()->GetVZEROData();
501 AliError("AliVVZERO not available");
506 //________________________________________________________________________
507 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
509 // Retrieve event objects.
511 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
514 if (!fCentMethod2.IsNull() || !fCentMethod3.IsNull()) {
515 if (fBeamType == kAA || fBeamType == kpA ) {
516 AliCentrality *aliCent = InputEvent()->GetCentrality();
518 if (!fCentMethod2.IsNull())
519 fCent2 = aliCent->GetCentralityPercentile(fCentMethod2);
520 if (!fCentMethod3.IsNull())
521 fCent3 = aliCent->GetCentralityPercentile(fCentMethod3);
527 fV0ATotMult = AliESDUtils::GetCorrV0A(fVZERO->GetMTotV0A(),fVertex[2]);
528 fV0CTotMult = AliESDUtils::GetCorrV0C(fVZERO->GetMTotV0C(),fVertex[2]);
535 //________________________________________________________________________
536 Bool_t AliAnalysisTaskSAQA::FillHistograms()
540 Float_t trackSum = 0;
549 Float_t leadingClusE = 0;
550 Float_t leadingClusEta = 0;
551 Float_t leadingClusPhi = 0;
553 Float_t leadingTrackPt = 0;
554 Float_t leadingTrackEta = 0;
555 Float_t leadingTrackPhi = 0;
557 Float_t leadingJetPt = 0;
558 Float_t leadingJetEta = 0;
559 Float_t leadingJetPhi = 0;
562 AliVParticle *leadingTrack = 0;
564 ntracks = DoTrackLoop(trackSum, leadingTrack);
565 AliDebug(2,Form("%d tracks found in the event", ntracks));
568 leadingTrackPt = leadingTrack->Pt();
569 leadingTrackEta = leadingTrack->Eta();
570 leadingTrackPhi = leadingTrack->Phi();
575 AliVCluster *leadingClus = 0;
577 nclusters = DoClusterLoop(clusSum, leadingClus);
578 AliDebug(2,Form("%d clusters found in the event", nclusters));
581 TLorentzVector leadingClusVect;
582 leadingClus->GetMomentum(leadingClusVect, fVertex);
583 leadingClusE = leadingClus->E();
584 leadingClusEta = leadingClusVect.Eta();
585 leadingClusPhi = leadingClusVect.Phi();
590 ncells = DoCellLoop(cellSum);
591 AliDebug(2,Form("%d cells found in the event", ncells));
595 AliEmcalJet *leadingJet = 0;
597 njets = DoJetLoop(leadingJet);
598 AliDebug(2,Form("%d jets found in the event", njets));
601 leadingJetPt = leadingJet->Pt();
602 leadingJetEta = leadingJet->Eta();
603 leadingJetPhi = leadingJet->Phi();
607 FillEventQAHisto(fCent, fCent2, fCent3, fV0ATotMult, fV0CTotMult, fEPV0, fRhoVal,
608 ntracks, nclusters, ncells, njets,
609 leadingTrackPt, leadingTrackEta, leadingTrackPhi,
610 leadingClusE, leadingClusEta, leadingClusPhi,
611 leadingJetPt, leadingJetEta, leadingJetPhi);
616 //________________________________________________________________________
617 void AliAnalysisTaskSAQA::FillEventQAHisto(Float_t cent, Float_t cent2, Float_t cent3, Float_t v0a, Float_t v0c,
618 Float_t ep, Float_t rho, Int_t ntracks, Int_t nclusters, Int_t ncells, Int_t njets,
619 Float_t maxTrackPt, Float_t maxTrackEta, Float_t maxTrackPhi,
620 Float_t maxClusterE, Float_t maxClusterEta, Float_t maxClusterPhi,
621 Float_t maxJetPt, Float_t maxJetEta, Float_t maxJetPhi)
623 Double_t contents[20]={0};
625 for (Int_t i = 0; i < fHistEventQA->GetNdimensions(); i++) {
626 TString title(fHistEventQA->GetAxis(i)->GetTitle());
627 if (title=="Centrality %")
629 else if (title==Form("Centrality %s %%", fCentMethod2.Data()))
631 else if (title==Form("Centrality %s %%", fCentMethod3.Data()))
633 else if (title=="V0A total multiplicity")
635 else if (title=="V0C total multiplicity")
637 else if (title=="V0A+V0C total multiplicity")
638 contents[i] = v0a+v0c;
639 else if (title=="#psi_{RP}")
641 else if (title=="#rho (GeV/c)")
643 else if (title=="No. of tracks")
644 contents[i] = ntracks;
645 else if (title=="No. of clusters")
646 contents[i] = nclusters;
647 else if (title=="No. of cells")
648 contents[i] = ncells;
649 else if (title=="No. of jets")
651 else if (title=="p_{T,track}^{leading} (GeV/c)")
652 contents[i] = maxTrackPt;
653 else if (title=="#eta_{track}^{leading}")
654 contents[i] = maxTrackEta;
655 else if (title=="#phi_{track}^{leading}")
656 contents[i] = maxTrackPhi;
657 else if (title=="E_{cluster}^{leading} (GeV)")
658 contents[i] = maxClusterE;
659 else if (title=="#eta_{cluster}^{leading}")
660 contents[i] = maxClusterEta;
661 else if (title=="#phi_{cluster}^{leading}")
662 contents[i] = maxClusterPhi;
663 else if (title=="p_{T,jet}^{leading} (GeV/c)")
664 contents[i] = maxJetPt;
665 else if (title=="#eta_{jet}^{leading}")
666 contents[i] = maxJetEta;
667 else if (title=="#phi_{jet}^{leading}")
668 contents[i] = maxJetPhi;
670 AliWarning(Form("Unable to fill dimension %s!",title.Data()));
673 fHistEventQA->Fill(contents);
676 //________________________________________________________________________
677 Int_t AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum)
681 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
686 const Int_t ncells = cells->GetNumberOfCells();
689 for (Int_t pos = 0; pos < ncells; pos++) {
690 Float_t amp = cells->GetAmplitude(pos);
691 Int_t absId = cells->GetCellNumber(pos);
693 if (amp < fCellEnergyCut)
696 fHistCellsAbsIdEnergy[fCentBin]->Fill(absId,amp);
704 //________________________________________________________________________
705 Double_t AliAnalysisTaskSAQA::GetFcross(AliVCluster *cluster, AliVCaloCells *cells)
707 Int_t AbsIdseed = -1;
709 for (Int_t i = 0; i < cluster->GetNCells(); i++) {
710 if (cells->GetCellAmplitude(cluster->GetCellAbsId(i)) > AbsIdseed) {
711 Eseed = cells->GetCellAmplitude(cluster->GetCellAbsId(i));
712 AbsIdseed = cluster->GetCellAbsId(i);
719 Int_t imod = -1, iphi =-1, ieta=-1,iTower = -1, iIphi = -1, iIeta = -1;
720 fGeom->GetCellIndex(AbsIdseed,imod,iTower,iIphi,iIeta);
721 fGeom->GetCellPhiEtaIndexInSModule(imod,iTower,iIphi,iIeta,iphi,ieta);
723 //Get close cells index and energy, not in corners
728 if (iphi < AliEMCALGeoParams::fgkEMCALRows-1) absID1 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi+1, ieta);
729 if (iphi > 0) absID2 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi-1, ieta);
731 // In case of cell in eta = 0 border, depending on SM shift the cross cell index
736 if (ieta == AliEMCALGeoParams::fgkEMCALCols-1 && !(imod%2)) {
737 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod+1, iphi, 0);
738 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
740 else if (ieta == 0 && imod%2) {
741 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
742 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod-1, iphi, AliEMCALGeoParams::fgkEMCALCols-1);
745 if (ieta < AliEMCALGeoParams::fgkEMCALCols-1)
746 absID3 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta+1);
748 absID4 = fGeom->GetAbsCellIdFromCellIndexes(imod, iphi, ieta-1);
751 Double_t ecell1 = cells->GetCellAmplitude(absID1);
752 Double_t ecell2 = cells->GetCellAmplitude(absID2);
753 Double_t ecell3 = cells->GetCellAmplitude(absID3);
754 Double_t ecell4 = cells->GetCellAmplitude(absID4);
756 Double_t Ecross = ecell1 + ecell2 + ecell3 + ecell4;
758 Double_t Fcross = 1 - Ecross/Eseed;
763 //________________________________________________________________________
764 Int_t AliAnalysisTaskSAQA::DoClusterLoop(Float_t &sum, AliVCluster* &leading)
771 Int_t nAccClusters = 0;
773 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
779 const Int_t nclusters = fCaloClusters->GetEntriesFast();
781 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
782 AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
784 AliError(Form("Could not receive cluster %d", iClusters));
788 if (!AcceptCluster(cluster))
793 if (!leading || leading->E() < cluster->E()) leading = cluster;
795 TLorentzVector nPart;
796 cluster->GetMomentum(nPart, fVertex);
798 fHistClusPhiEtaEnergy[fCentBin]->Fill(nPart.Eta(), nPart.Phi(), cluster->E());
800 Double_t ep = nPart.Phi() - fEPV0;
801 while (ep < 0) ep += TMath::Pi();
802 while (ep >= TMath::Pi()) ep -= TMath::Pi();
803 fHistClusDeltaPhiEPEnergy[fCentBin]->Fill(cluster->E(), ep);
805 fHistNCellsEnergy[fCentBin]->Fill(cluster->E(), cluster->GetNCells());
807 fHistClusTimeEnergy[fCentBin]->Fill(cluster->E(), cluster->GetTOF());
809 if (cells) fHistFcrossEnergy[fCentBin]->Fill(cluster->E(), GetFcross(cluster, cells));
811 if (fHistClusMCEnergyFraction[fCentBin])
812 fHistClusMCEnergyFraction[fCentBin]->Fill(cluster->GetMCEnergyFraction());
820 //________________________________________________________________________
821 Int_t AliAnalysisTaskSAQA::DoTrackLoop(Float_t &sum, AliVParticle* &leading)
827 Int_t nAccTracks = 0;
832 const Int_t ntracks = fTracks->GetEntriesFast();
836 for (Int_t i = 0; i < ntracks; i++) {
837 AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
840 AliError(Form("Could not retrieve track %d",i));
844 if (!AcceptTrack(track))
851 if (!leading || leading->Pt() < track->Pt()) leading = track;
853 if (fParticleLevel) {
854 fHistTrPhiEtaPt[fCentBin][0]->Fill(track->Eta(), track->Phi(), track->Pt());
857 fHistTrPhiEtaPt[fCentBin][3]->Fill(track->Eta(), track->Phi(), track->Pt());
858 if (track->GetLabel() == 0) {
860 if (fHistTrPhiEtaZeroLab[fCentBin]) {
861 fHistTrPhiEtaZeroLab[fCentBin]->Fill(track->Eta(), track->Phi());
862 fHistTrPtZeroLab[fCentBin]->Fill(track->Pt());
866 if (track->GetLabel() < 0)
871 AliPicoTrack* ptrack = dynamic_cast<AliPicoTrack*>(track);
873 type = ptrack->GetTrackType();
875 if (type >= 0 && type < 3)
876 fHistTrPhiEtaPt[fCentBin][type]->Fill(track->Eta(), track->Phi(), track->Pt());
878 AliDebug(2,Form("%s: track type %d not recognized!", GetName(), type));
881 AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
886 if ((vtrack->GetTrackEtaOnEMCal() == -999 || vtrack->GetTrackPhiOnEMCal() == -999) && fHistTrPhiEtaNonProp[fCentBin]) {
887 fHistTrPhiEtaNonProp[fCentBin]->Fill(vtrack->Eta(), vtrack->Phi());
888 fHistTrPtNonProp[fCentBin]->Fill(vtrack->Pt());
891 if (fHistTrEmcPhiEta[fCentBin])
892 fHistTrEmcPhiEta[fCentBin]->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
893 if (fHistTrEmcPt[fCentBin])
894 fHistTrEmcPt[fCentBin]->Fill(vtrack->GetTrackPtOnEMCal());
895 if (fHistDeltaEtaPt[fCentBin])
896 fHistDeltaEtaPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Eta() - vtrack->GetTrackEtaOnEMCal());
897 if (fHistDeltaPhiPt[fCentBin])
898 fHistDeltaPhiPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Phi() - vtrack->GetTrackPhiOnEMCal());
899 if (fHistDeltaPtvsPt[fCentBin])
900 fHistDeltaPtvsPt[fCentBin]->Fill(vtrack->Pt(), vtrack->Pt() - vtrack->GetTrackPtOnEMCal());
903 if (fHistTrNegativeLabels[fCentBin])
904 fHistTrNegativeLabels[fCentBin]->Fill(1. * neg / ntracks);
906 if (fHistTrZeroLabels[fCentBin])
907 fHistTrZeroLabels[fCentBin]->Fill(1. * zero / ntracks);
912 //________________________________________________________________________
913 Int_t AliAnalysisTaskSAQA::DoJetLoop(AliEmcalJet* &leading)
924 Int_t njets = fJets->GetEntriesFast();
926 for (Int_t ij = 0; ij < njets; ij++) {
928 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
931 AliError(Form("Could not receive jet %d", ij));
938 if (!leading || leading->Pt() < jet->Pt()) leading = jet;
942 fHistJetsPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
943 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());