8 #include <TClonesArray.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"
27 #include "AliAnalysisTaskSAQA.h"
29 ClassImp(AliAnalysisTaskSAQA)
31 //________________________________________________________________________
32 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA() :
33 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAQA", kTRUE),
46 fHistTrPhiEtaNonProp(0),
50 fHistClusTimeEnergy(0),
54 fHistChVSneCorrCells(0)
56 // Default constructor.
58 for (Int_t i = 0; i < 5; i++) {
63 for (Int_t i = 0; i < 4; i++) {
64 fHistTrPhiEtaPt[i] = 0;
65 fHistClusPhiEtaEnergy[i] = 0;
66 fHistJetsPhiEtaPt[i] = 0;
67 fHistJetsPtArea[i] = 0;
70 SetMakeGeneralHistograms(kTRUE);
73 //________________________________________________________________________
74 AliAnalysisTaskSAQA::AliAnalysisTaskSAQA(const char *name) :
75 AliAnalysisTaskEmcalJet(name, kTRUE),
88 fHistTrPhiEtaNonProp(0),
92 fHistClusTimeEnergy(0),
96 fHistChVSneCorrCells(0)
98 // Standard constructor.
100 for (Int_t i = 0; i < 5; i++) {
101 fHistTrackPhi[i] = 0;
102 fHistTrackEta[i] = 0;
105 for (Int_t i = 0; i < 4; i++) {
106 fHistTrPhiEtaPt[i] = 0;
107 fHistClusPhiEtaEnergy[i] = 0;
108 fHistJetsPhiEtaPt[i] = 0;
109 fHistJetsPtArea[i] = 0;
112 SetMakeGeneralHistograms(kTRUE);
115 //________________________________________________________________________
116 AliAnalysisTaskSAQA::~AliAnalysisTaskSAQA()
121 //________________________________________________________________________
122 void AliAnalysisTaskSAQA::UserCreateOutputObjects()
126 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
128 if (!fTracksName.IsNull()) {
129 fHistTracksCent = new TH2F("fHistTracksCent","Tracks vs. centrality", 100, 0, 100, fNbins, 0, 4000);
130 fHistTracksCent->GetXaxis()->SetTitle("Centrality (%)");
131 fHistTracksCent->GetYaxis()->SetTitle("No. of tracks");
132 fOutput->Add(fHistTracksCent);
136 for (Int_t i = 0; i < 4; i++) {
137 histname = "fHistTrPhiEtaPt_";
139 fHistTrPhiEtaPt[i] = new TH3F(histname,histname, 100, -1, 1, 201, 0, TMath::Pi() * 2.01, fNbins, fMinBinPt, fMaxBinPt);
140 fHistTrPhiEtaPt[i] ->GetXaxis()->SetTitle("#eta");
141 fHistTrPhiEtaPt[i] ->GetYaxis()->SetTitle("#phi");
142 fHistTrPhiEtaPt[i] ->GetZaxis()->SetTitle("p_{T} (GeV/c)");
143 fOutput->Add(fHistTrPhiEtaPt[i]);
146 fHistTrEmcPhiEta = new TH2F("fHistTrEmcPhiEta","Phi-Eta emcal distribution of tracks", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
147 fHistTrEmcPhiEta->GetXaxis()->SetTitle("#eta");
148 fHistTrEmcPhiEta->GetYaxis()->SetTitle("#phi");
149 fOutput->Add(fHistTrEmcPhiEta);
151 fHistTrPhiEtaNonProp = new TH2F("fHistTrPhiEtaNonProp","fHistTrPhiEtaNonProp", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
152 fHistTrPhiEtaNonProp->GetXaxis()->SetTitle("#eta");
153 fHistTrPhiEtaNonProp->GetYaxis()->SetTitle("#phi");
154 fOutput->Add(fHistTrPhiEtaNonProp);
156 fHistDeltaEtaPt = new TH2F("fHistDeltaEtaPt","fHistDeltaEtaPt", fNbins, fMinBinPt, fMaxBinPt, 80, -0.5, 0.5);
157 fHistDeltaEtaPt->GetXaxis()->SetTitle("p_{T} [GeV/c]");
158 fHistDeltaEtaPt->GetYaxis()->SetTitle("#delta#eta");
159 fOutput->Add(fHistDeltaEtaPt);
161 fHistDeltaPhiPt = new TH2F("fHistDeltaPhiPt","fHistDeltaPhiPt", fNbins, fMinBinPt, fMaxBinPt, 256, -1.6, 4.8);
162 fHistDeltaPhiPt->GetXaxis()->SetTitle("p_{T} [GeV/c]");
163 fHistDeltaPhiPt->GetYaxis()->SetTitle("#delta#phi");
164 fOutput->Add(fHistDeltaPhiPt);
166 for (Int_t i = 0; i < 5; i++) {
167 TString histnamephi("fHistTrackPhi_");
169 fHistTrackPhi[i] = new TH1F(histnamephi.Data(),histnamephi.Data(), 201, 0, TMath::Pi() * 2.01);
170 fHistTrackPhi[i]->GetXaxis()->SetTitle("Phi");
171 fOutput->Add(fHistTrackPhi[i]);
173 TString histnameeta("fHistTrackEta_");
175 fHistTrackEta[i] = new TH1F(histnameeta.Data(),histnameeta.Data(), 100, -1, 1);
176 fHistTrackEta[i]->GetXaxis()->SetTitle("Eta");
177 fOutput->Add(fHistTrackEta[i]);
180 fHistTrackPhi[0]->SetLineColor(kRed);
181 fHistTrackEta[0]->SetLineColor(kRed);
182 fHistTrackPhi[1]->SetLineColor(kBlue);
183 fHistTrackEta[1]->SetLineColor(kBlue);
184 fHistTrackPhi[2]->SetLineColor(kGreen);
185 fHistTrackEta[2]->SetLineColor(kGreen);
186 fHistTrackPhi[3]->SetLineColor(kOrange);
187 fHistTrackEta[3]->SetLineColor(kOrange);
188 fHistTrackPhi[4]->SetLineColor(kBlack);
189 fHistTrackEta[4]->SetLineColor(kBlack);
192 if (!fCaloName.IsNull()) {
193 fHistClusCent = new TH2F("fHistClusCent","Clusters vs. centrality", 100, 0, 100, fNbins, 0, 2000);
194 fHistClusCent->GetXaxis()->SetTitle("Centrality (%)");
195 fHistClusCent->GetYaxis()->SetTitle("No. of clusters");
196 fOutput->Add(fHistClusCent);
198 fHistClusTracks = new TH2F("fHistClusTracks","Clusters vs. tracks", fNbins, 0, 4000, fNbins, 0, 2000);
199 fHistClusTracks->GetXaxis()->SetTitle("No. of tracks");
200 fHistClusTracks->GetYaxis()->SetTitle("No. of clusters");
201 fOutput->Add(fHistClusTracks);
203 fHistCellsCent = new TH2F("fHistCellsCent","Cells vs. centrality", 100, 0, 100, fNbins, 0, 6000);
204 fHistCellsCent->GetXaxis()->SetTitle("Centrality (%)");
205 fHistCellsCent->GetYaxis()->SetTitle("No. of EMCal cells");
206 fOutput->Add(fHistCellsCent);
208 fHistCellsTracks = new TH2F("fHistCellsTracks","Cells vs. tracks", fNbins, 0, 4000, fNbins, 0, 6000);
209 fHistCellsTracks->GetXaxis()->SetTitle("No. of tracks");
210 fHistCellsTracks->GetYaxis()->SetTitle("No. of EMCal cells");
211 fOutput->Add(fHistCellsTracks);
215 for (Int_t i = 0; i < 4; i++) {
216 histname = "fHistClusPhiEtaEnergy_";
218 fHistClusPhiEtaEnergy[i] = new TH3F(histname, histname, 100, -1.2, 1.2, 201, 0, TMath::Pi() * 2.01, fNbins, fMinBinPt, fMaxBinPt);
219 fHistClusPhiEtaEnergy[i]->GetXaxis()->SetTitle("#eta");
220 fHistClusPhiEtaEnergy[i]->GetYaxis()->SetTitle("#phi");
221 fHistClusPhiEtaEnergy[i]->GetZaxis()->SetTitle("Energy (GeV)");
222 fOutput->Add(fHistClusPhiEtaEnergy[i]);
225 fHistClusTimeEnergy = new TH2F("fHistClusTimeEnergy","Time vs. energy of clusters", fNbins, fMinBinPt, fMaxBinPt, fNbins, -1e-6, 1e-6);
226 fHistClusTimeEnergy->GetXaxis()->SetTitle("Energy (GeV)");
227 fHistClusTimeEnergy->GetYaxis()->SetTitle("Time");
228 fOutput->Add(fHistClusTimeEnergy);
230 fHistNCellsEnergy = new TH2F("fHistNCellsEnergy","Number of cells vs. energy of clusters", fNbins, fMinBinPt, fMaxBinPt, 30, 0, 30);
231 fHistNCellsEnergy->GetXaxis()->SetTitle("Energy (GeV)");
232 fHistNCellsEnergy->GetYaxis()->SetTitle("N_{cells}");
233 fOutput->Add(fHistNCellsEnergy);
235 fHistCellsEnergy = new TH1F("fHistCellsEnergy","Energy spectrum of cells", fNbins, fMinBinPt, fMaxBinPt);
236 fHistCellsEnergy->GetXaxis()->SetTitle("Energy (GeV)");
237 fHistCellsEnergy->GetYaxis()->SetTitle("counts");
238 fOutput->Add(fHistCellsEnergy);
240 fHistChVSneCells = new TH2F("fHistChVSneCells","Charged energy vs. neutral (cells) energy",
241 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5);
242 fHistChVSneCells->GetXaxis()->SetTitle("Energy (GeV)");
243 fHistChVSneCells->GetYaxis()->SetTitle("Momentum (GeV/c)");
244 fOutput->Add(fHistChVSneCells);
246 fHistChVSneClus = new TH2F("fHistChVSneClus","Charged energy vs. neutral (clusters) energy",
247 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5);
248 fHistChVSneClus->GetXaxis()->SetTitle("Energy (GeV)");
249 fHistChVSneClus->GetYaxis()->SetTitle("Momentum (GeV/c)");
250 fOutput->Add(fHistChVSneClus);
252 fHistChVSneCorrCells = new TH2F("fHistChVSneCorrCells","Charged energy vs. neutral (corrected cells) energy",
253 (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, (Int_t)(fNbins * 2.5), fMinBinPt , fMaxBinPt * 2.5);
254 fHistChVSneCorrCells->GetXaxis()->SetTitle("Energy (GeV)");
255 fHistChVSneCorrCells->GetYaxis()->SetTitle("Momentum (GeV/c)");
256 fOutput->Add(fHistChVSneCorrCells);
259 if (!fJetsName.IsNull()) {
260 fHistJetsCent = new TH2F("fHistJetsCent","Jets vs. centrality", 100, 0, 100, 150, -0.5, 149.5);
261 fHistJetsCent->GetXaxis()->SetTitle("Centrality (%)");
262 fHistJetsCent->GetYaxis()->SetTitle("No. of jets");
263 fOutput->Add(fHistJetsCent);
265 fHistJetsParts = new TH2F("fHistJetsParts","Jets vs. centrality", fNbins, 0, 6000, 150, -0.5, 149.5);
266 fHistJetsParts->GetXaxis()->SetTitle("No. of particles");
267 fHistJetsParts->GetYaxis()->SetTitle("No. of jets");
268 fOutput->Add(fHistJetsParts);
272 for (Int_t i = 0; i < 4; i++) {
273 histname = "fHistJetsPhiEtaPt_";
275 fHistJetsPhiEtaPt[i] = new TH3F(histname.Data(), histname.Data(), 100, -1.2, 1.2, 201, 0, TMath::Pi() * 2.01, (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5);
276 fHistJetsPhiEtaPt[i]->GetXaxis()->SetTitle("#eta");
277 fHistJetsPhiEtaPt[i]->GetYaxis()->SetTitle("#phi");
278 fHistJetsPhiEtaPt[i]->GetZaxis()->SetTitle("p_{T} (GeV/c)");
279 fOutput->Add(fHistJetsPhiEtaPt[i]);
281 histname = "fHistJetsPtArea_";
283 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), (Int_t)(fNbins * 2.5), fMinBinPt, fMaxBinPt * 2.5, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3);
284 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
285 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
286 fOutput->Add(fHistJetsPtArea[i]);
290 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
293 //________________________________________________________________________
294 Bool_t AliAnalysisTaskSAQA::RetrieveEventObjects()
296 // Retrieve event objects.
298 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
309 //________________________________________________________________________
310 Bool_t AliAnalysisTaskSAQA::FillHistograms()
315 Float_t trackSum = 0;
318 trackSum = DoTrackLoop();
320 fHistTracksCent->Fill(fCent, fNtracks);
324 clusSum = DoClusterLoop();
326 fHistClusCent->Fill(fCent, fNclusters);
327 fHistClusTracks->Fill(fNtracks, fNclusters);
329 Float_t cellSum = 0, cellCutSum = 0;
331 Int_t ncells = DoCellLoop(cellSum, cellCutSum);
334 fHistCellsTracks->Fill(fNtracks, ncells);
336 fHistCellsCent->Fill(fCent, ncells);
338 fHistChVSneCells->Fill(cellSum, trackSum);
339 fHistChVSneClus->Fill(clusSum, trackSum);
340 fHistChVSneCorrCells->Fill(cellCutSum, trackSum);
346 fHistJetsCent->Fill(fCent, fNjets);
347 fHistJetsParts->Fill(fNtracks + fNclusters, fNjets);
353 //________________________________________________________________________
354 Int_t AliAnalysisTaskSAQA::DoCellLoop(Float_t &sum, Float_t &sum_cut)
358 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
363 const Int_t ncells = cells->GetNumberOfCells();
365 for (Int_t pos = 0; pos < ncells; pos++) {
366 Float_t amp = cells->GetAmplitude(pos);
367 fHistCellsEnergy->Fill(amp);
369 if (amp < fCellEnergyCut)
377 //________________________________________________________________________
378 Float_t AliAnalysisTaskSAQA::DoClusterLoop()
388 Int_t nclusters = fCaloClusters->GetEntriesFast();
390 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
391 AliVCluster* cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
393 AliError(Form("Could not receive cluster %d", iClusters));
397 if (!AcceptCluster(cluster, kTRUE))
402 TLorentzVector nPart;
403 cluster->GetMomentum(nPart, fVertex);
405 fHistClusPhiEtaEnergy[fCentBin]->Fill(nPart.Eta(), nPart.Phi(), cluster->E());
406 fHistNCellsEnergy->Fill(cluster->E(), cluster->GetNCells());
408 fHistClusTimeEnergy->Fill(cluster->E(), cluster->GetTOF());
416 //________________________________________________________________________
417 Float_t AliAnalysisTaskSAQA::DoTrackLoop()
426 Int_t ntracks = fTracks->GetEntriesFast();
429 nclusters = fCaloClusters->GetEntriesFast();
431 for (Int_t i = 0; i < ntracks; i++) {
433 AliVParticle* track = static_cast<AliVParticle*>(fTracks->At(i)); // pointer to reconstructed to track
436 AliError(Form("Could not retrieve track %d",i));
440 AliVTrack* vtrack = dynamic_cast<AliVTrack*>(track);
442 if (vtrack && !AcceptTrack(vtrack, kTRUE))
449 fHistTrPhiEtaPt[fCentBin]->Fill(track->Eta(), track->Phi(), track->Pt());
451 Int_t label = track->GetLabel();
453 if (label >= 0 && label < 4) {
454 fHistTrackEta[label]->Fill(track->Eta());
455 fHistTrackPhi[label]->Fill(track->Phi());
458 fHistTrackEta[4]->Fill(track->Eta());
459 fHistTrackPhi[4]->Fill(track->Phi());
464 if (vtrack->GetTrackEtaOnEMCal() == -999 || vtrack->GetTrackPhiOnEMCal() == -999)
465 fHistTrPhiEtaNonProp->Fill(vtrack->Eta(), vtrack->Phi());
467 fHistTrEmcPhiEta->Fill(vtrack->GetTrackEtaOnEMCal(), vtrack->GetTrackPhiOnEMCal());
468 fHistDeltaEtaPt->Fill(vtrack->Pt(), vtrack->Eta() - vtrack->GetTrackEtaOnEMCal());
469 fHistDeltaPhiPt->Fill(vtrack->Pt(), vtrack->Phi() - vtrack->GetTrackPhiOnEMCal());
475 //________________________________________________________________________
476 void AliAnalysisTaskSAQA::DoJetLoop()
483 Int_t njets = fJets->GetEntriesFast();
485 for (Int_t ij = 0; ij < njets; ij++) {
487 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
490 AliError(Form("Could not receive jet %d", ij));
499 fHistJetsPhiEtaPt[fCentBin]->Fill(jet->Eta(), jet->Phi(), jet->Pt());
500 fHistJetsPtArea[fCentBin]->Fill(jet->Pt(), jet->Area());
505 //________________________________________________________________________
506 void AliAnalysisTaskSAQA::Terminate(Option_t *)
508 // Called once at the end of the analysis.