6 #include <TClonesArray.h>
11 #include <TLorentzVector.h>
13 #include "AliVCluster.h"
14 #include "AliVParticle.h"
15 #include "AliEmcalJet.h"
16 #include "AliRhoParameter.h"
19 #include "AliAnalysisTaskSAJF.h"
21 ClassImp(AliAnalysisTaskSAJF)
23 //________________________________________________________________________
24 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
25 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAJF", kTRUE),
28 fHistClustersJetPt(0),
30 fHistClustersPtDist(0),
31 fHistJetObservables(0),
37 fHistJetPtLeadingPartPt(0),
38 fHistJetCorrPtEtaPhi(0),
39 fHistJetCorrPtArea(0),
43 fHistJetCorrPtLeadingPartPt(0),
48 // Default constructor.
50 SetMakeGeneralHistograms(kTRUE);
53 //________________________________________________________________________
54 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
55 AliAnalysisTaskEmcalJet(name, kTRUE),
58 fHistClustersJetPt(0),
60 fHistClustersPtDist(0),
61 fHistJetObservables(0),
67 fHistJetPtLeadingPartPt(0),
68 fHistJetCorrPtEtaPhi(0),
69 fHistJetCorrPtArea(0),
73 fHistJetCorrPtLeadingPartPt(0),
78 // Standard constructor.
80 SetMakeGeneralHistograms(kTRUE);
83 //________________________________________________________________________
84 void AliAnalysisTaskSAJF::AllocateTHnSparse()
86 TString title[20]= {""};
87 Int_t nbins[20] = {0};
88 Double_t min[20] = {0.};
89 Double_t max[20] = {0.};
92 if (fForceBeamType != kpp) {
93 title[dim] = "Centrality (%)";
99 title[dim] = "#phi_{jet} - #psi_{RP}";
102 max[dim] = TMath::Pi();
112 title[dim] = "#phi_{jet} (rad)";
115 max[dim] = 2*TMath::Pi()*nbins[dim]/(nbins[dim]-1);
118 title[dim] = "p_{T} (GeV/c)";
120 min[dim] = fMinBinPt;
121 max[dim] = fMaxBinPt;
125 title[dim] = "p_{T}^{MC} (GeV/c)";
127 min[dim] = fMinBinPt;
128 max[dim] = fMaxBinPt;
132 if (!GetRhoName().IsNull()) {
133 title[dim] = "p_{T}^{corr} (GeV/c)";
134 nbins[dim] = fNbins*2;
135 min[dim] = -fMaxBinPt;
136 max[dim] = fMaxBinPt;
140 title[dim] = "A_{jet}";
158 title[dim] = "No. of constituents";
164 title[dim] = "p_{T,particle}^{leading} (GeV/c)";
170 fHistJetObservables = new THnSparseD("fHistJetObservables","fHistJetObservables",dim,nbins,min,max);
171 fOutput->Add(fHistJetObservables);
172 for (Int_t i = 0; i < dim; i++)
173 fHistJetObservables->GetAxis(i)->SetTitle(title[i]);
176 //________________________________________________________________________
177 void AliAnalysisTaskSAJF::AllocateTHX()
179 fHistJetPtEtaPhi = new TH3*[fNcentBins];
180 fHistJetPtArea = new TH2*[fNcentBins];
181 fHistJetPtEP = new TH2*[fNcentBins];
182 fHistJetPtNEF = new TH2*[fNcentBins];
183 fHistJetPtZ = new TH2*[fNcentBins];
184 fHistJetPtLeadingPartPt = new TH2*[fNcentBins];
185 fHistJetCorrPtEtaPhi = new TH3*[fNcentBins];
186 fHistJetCorrPtArea = new TH2*[fNcentBins];
187 fHistJetCorrPtEP = new TH2*[fNcentBins];
188 fHistJetCorrPtNEF = new TH2*[fNcentBins];
189 fHistJetCorrPtZ = new TH2*[fNcentBins];
190 fHistJetCorrPtLeadingPartPt = new TH2*[fNcentBins];
191 fHistJetPtCorrPt = new TH2*[fNcentBins];
192 fHistJetPtMCPt = new TH2*[fNcentBins];
193 fHistJetMCPtCorrPt = new TH2*[fNcentBins];
195 for (Int_t i = 0; i < fNcentBins; i++) {
198 histname = "fHistJetPtEtaPhi_";
200 fHistJetPtEtaPhi[i] = new TH3F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 20, -1, 1, 41, 0, 2*TMath::Pi()*41/40);
201 fHistJetPtEtaPhi[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
202 fHistJetPtEtaPhi[i]->GetYaxis()->SetTitle("#eta");
203 fHistJetPtEtaPhi[i]->GetZaxis()->SetTitle("#phi_{jet} (rad)");
204 fOutput->Add(fHistJetPtEtaPhi[i]);
206 histname = "fHistJetPtArea_";
208 fHistJetPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 150, 0, 1.5);
209 fHistJetPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
210 fHistJetPtArea[i]->GetYaxis()->SetTitle("A_{jet}");
211 fHistJetPtArea[i]->GetZaxis()->SetTitle("counts");
212 fOutput->Add(fHistJetPtArea[i]);
214 histname = "fHistJetPtEP_";
216 fHistJetPtEP[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 100, 0, TMath::Pi());
217 fHistJetPtEP[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
218 fHistJetPtEP[i]->GetYaxis()->SetTitle("#phi_{jet} - #psi_{RP}");
219 fHistJetPtEP[i]->GetZaxis()->SetTitle("counts");
220 fOutput->Add(fHistJetPtEP[i]);
222 histname = "fHistJetPtNEF_";
224 fHistJetPtNEF[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 102, 0, 1.02);
225 fHistJetPtNEF[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
226 fHistJetPtNEF[i]->GetYaxis()->SetTitle("NEF");
227 fHistJetPtNEF[i]->GetZaxis()->SetTitle("counts");
228 fOutput->Add(fHistJetPtNEF[i]);
230 histname = "fHistJetPtZ_";
232 fHistJetPtZ[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 102, 0, 1.02);
233 fHistJetPtZ[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
234 fHistJetPtZ[i]->GetYaxis()->SetTitle("z");
235 fHistJetPtZ[i]->GetZaxis()->SetTitle("counts");
236 fOutput->Add(fHistJetPtZ[i]);
238 histname = "fHistJetPtLeadingPartPt_";
240 fHistJetPtLeadingPartPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 120, 0, 120);
241 fHistJetPtLeadingPartPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
242 fHistJetPtLeadingPartPt[i]->GetYaxis()->SetTitle("p_{T,particle}^{leading} (GeV/c)");
243 fHistJetPtLeadingPartPt[i]->GetZaxis()->SetTitle("counts");
244 fOutput->Add(fHistJetPtLeadingPartPt[i]);
246 if (!GetRhoName().IsNull()) {
247 histname = "fHistJetCorrPtEtaPhi_";
249 fHistJetCorrPtEtaPhi[i] = new TH3F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 20, -1, 1, 41, 0, 2*TMath::Pi()*201/200);
250 fHistJetCorrPtEtaPhi[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
251 fHistJetCorrPtEtaPhi[i]->GetYaxis()->SetTitle("#eta");
252 fHistJetCorrPtEtaPhi[i]->GetZaxis()->SetTitle("#phi_{jet} (rad)");
253 fOutput->Add(fHistJetCorrPtEtaPhi[i]);
255 histname = "fHistJetCorrPtArea_";
257 fHistJetCorrPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 150, 0, 1.5);
258 fHistJetCorrPtArea[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
259 fHistJetCorrPtArea[i]->GetYaxis()->SetTitle("A_{jet}");
260 fHistJetCorrPtArea[i]->GetZaxis()->SetTitle("counts");
261 fOutput->Add(fHistJetCorrPtArea[i]);
263 histname = "fHistJetCorrPtEP_";
265 fHistJetCorrPtEP[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 100, 0, TMath::Pi());
266 fHistJetCorrPtEP[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
267 fHistJetCorrPtEP[i]->GetYaxis()->SetTitle("#phi_{jet} - #psi_{RP}");
268 fHistJetCorrPtEP[i]->GetZaxis()->SetTitle("counts");
269 fOutput->Add(fHistJetCorrPtEP[i]);
271 histname = "fHistJetCorrPtNEF_";
273 fHistJetCorrPtNEF[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 102, 0, 1.02);
274 fHistJetCorrPtNEF[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
275 fHistJetCorrPtNEF[i]->GetYaxis()->SetTitle("NEF");
276 fHistJetCorrPtNEF[i]->GetZaxis()->SetTitle("counts");
277 fOutput->Add(fHistJetCorrPtNEF[i]);
279 histname = "fHistJetCorrPtZ_";
281 fHistJetCorrPtZ[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 102, 0, 1.02);
282 fHistJetCorrPtZ[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
283 fHistJetCorrPtZ[i]->GetYaxis()->SetTitle("z");
284 fHistJetCorrPtZ[i]->GetZaxis()->SetTitle("counts");
285 fOutput->Add(fHistJetCorrPtZ[i]);
287 histname = "fHistJetCorrPtLeadingPartPt_";
289 fHistJetCorrPtLeadingPartPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 120, 0, 120);
290 fHistJetCorrPtLeadingPartPt[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
291 fHistJetCorrPtLeadingPartPt[i]->GetYaxis()->SetTitle("p_{T,particle}^{leading} (GeV/c)");
292 fHistJetCorrPtLeadingPartPt[i]->GetZaxis()->SetTitle("counts");
293 fOutput->Add(fHistJetCorrPtLeadingPartPt[i]);
295 histname = "fHistJetPtCorrPt_";
297 fHistJetPtCorrPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
298 fHistJetPtCorrPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
299 fHistJetPtCorrPt[i]->GetYaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
300 fHistJetPtCorrPt[i]->GetZaxis()->SetTitle("counts");
301 fOutput->Add(fHistJetPtCorrPt[i]);
304 histname = "fHistJetMCPtCorrPt_";
306 fHistJetMCPtCorrPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
307 fHistJetMCPtCorrPt[i]->GetXaxis()->SetTitle("p_{T}^{MC} (GeV/c)");
308 fHistJetMCPtCorrPt[i]->GetYaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
309 fHistJetMCPtCorrPt[i]->GetZaxis()->SetTitle("counts");
310 fOutput->Add(fHistJetMCPtCorrPt[i]);
315 histname = "fHistJetPtMCPt_";
317 fHistJetPtMCPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
318 fHistJetPtMCPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
319 fHistJetPtMCPt[i]->GetYaxis()->SetTitle("p_{T}^{MC} (GeV/c)");
320 fHistJetPtMCPt[i]->GetZaxis()->SetTitle("counts");
321 fOutput->Add(fHistJetPtMCPt[i]);
326 //________________________________________________________________________
327 void AliAnalysisTaskSAJF::UserCreateOutputObjects()
329 // Create user output.
331 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
338 fHistTracksJetPt = new TH2*[fNcentBins];
339 fHistClustersJetPt = new TH2*[fNcentBins];
340 fHistTracksPtDist = new TH2*[fNcentBins];
341 fHistClustersPtDist = new TH2*[fNcentBins];
343 for (Int_t i = 0; i < fNcentBins; i++) {
346 if (fParticleCollArray.GetEntriesFast() > 0) {
347 histname = "fHistTracksJetPt_";
349 fHistTracksJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
350 fHistTracksJetPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
351 fHistTracksJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
352 fHistTracksJetPt[i]->GetZaxis()->SetTitle("counts");
353 fOutput->Add(fHistTracksJetPt[i]);
355 histname = "fHistTracksPtDist_";
357 fHistTracksPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
358 fHistTracksPtDist[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
359 fHistTracksPtDist[i]->GetYaxis()->SetTitle("d");
360 fHistTracksPtDist[i]->GetZaxis()->SetTitle("counts");
361 fOutput->Add(fHistTracksPtDist[i]);
364 if (fClusterCollArray.GetEntriesFast() > 0) {
365 histname = "fHistClustersJetPt_";
367 fHistClustersJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
368 fHistClustersJetPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
369 fHistClustersJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
370 fHistClustersJetPt[i]->GetZaxis()->SetTitle("counts");
371 fOutput->Add(fHistClustersJetPt[i]);
373 histname = "fHistClustersPtDist_";
375 fHistClustersPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
376 fHistClustersPtDist[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
377 fHistClustersPtDist[i]->GetYaxis()->SetTitle("d");
378 fHistClustersPtDist[i]->GetZaxis()->SetTitle("counts");
379 fOutput->Add(fHistClustersPtDist[i]);
383 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
387 //________________________________________________________________________
388 Bool_t AliAnalysisTaskSAJF::FillHistograms()
393 AliError(Form("%s - Jet array not provided, returning...", GetName()));
397 for (Int_t ij = 0; ij < fJets->GetEntriesFast(); ij++) {
399 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
402 AliError(Form("Could not receive jet %d", ij));
409 Float_t ptLeading = GetLeadingHadronPt(jet);
410 Float_t corrPt = jet->Pt() - fRhoVal * jet->Area();
413 Double_t ep = jet->Phi() - fEPV0;
414 while (ep < 0) ep += TMath::Pi();
415 while (ep >= TMath::Pi()) ep -= TMath::Pi();
417 FillJetHisto(fCent, ep, jet->Eta(), jet->Phi(), jet->Pt(), jet->MCPt(), corrPt, jet->Area(),
418 jet->NEF(), ptLeading/jet->Pt(), jet->GetNumberOfConstituents(), ptLeading);
421 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
422 AliVParticle *track = jet->TrackAt(it, fTracks);
424 fHistTracksJetPt[fCentBin]->Fill(track->Pt(), jet->Pt());
425 Double_t dist = TMath::Sqrt((track->Eta() - jet->Eta()) * (track->Eta() - jet->Eta()) + (track->Phi() - jet->Phi()) * (track->Phi() - jet->Phi()));
426 fHistTracksPtDist[fCentBin]->Fill(track->Pt(), dist);
432 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
433 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
436 TLorentzVector nPart;
437 cluster->GetMomentum(nPart, fVertex);
439 fHistClustersJetPt[fCentBin]->Fill(nPart.Pt(), jet->Pt());
440 Double_t dist = TMath::Sqrt((nPart.Eta() - jet->Eta()) * (nPart.Eta() - jet->Eta()) + (nPart.Phi() - jet->Phi()) * (nPart.Phi() - jet->Phi()));
441 fHistClustersPtDist[fCentBin]->Fill(nPart.Pt(), dist);
450 //________________________________________________________________________
451 void AliAnalysisTaskSAJF::FillJetHisto(Double_t cent, Double_t ep, Double_t eta, Double_t phi, Double_t pt, Double_t MCpt, Double_t corrpt, Double_t area,
452 Double_t NEF, Double_t z, Int_t n, Double_t leadingpt)
454 if (fHistoType == 0) {
455 fHistJetPtEtaPhi[fCentBin]->Fill(pt,eta,phi);
456 fHistJetPtArea[fCentBin]->Fill(pt,area);
457 fHistJetPtEP[fCentBin]->Fill(pt,ep);
458 fHistJetPtNEF[fCentBin]->Fill(pt,NEF);
459 fHistJetPtZ[fCentBin]->Fill(pt,z);
460 fHistJetPtLeadingPartPt[fCentBin]->Fill(pt,leadingpt);
461 if (fHistJetCorrPtEtaPhi[fCentBin]) {
462 fHistJetCorrPtEtaPhi[fCentBin]->Fill(corrpt,eta,phi);
463 fHistJetCorrPtArea[fCentBin]->Fill(corrpt,area);
464 fHistJetCorrPtEP[fCentBin]->Fill(corrpt,ep);
465 fHistJetCorrPtNEF[fCentBin]->Fill(corrpt,NEF);
466 fHistJetCorrPtZ[fCentBin]->Fill(corrpt,z);
467 fHistJetCorrPtLeadingPartPt[fCentBin]->Fill(corrpt,leadingpt);
468 fHistJetPtCorrPt[fCentBin]->Fill(pt,corrpt);
470 fHistJetMCPtCorrPt[fCentBin]->Fill(MCpt,corrpt);
473 fHistJetPtMCPt[fCentBin]->Fill(pt,MCpt);
477 Double_t contents[20]={0};
479 for (Int_t i = 0; i < fHistJetObservables->GetNdimensions(); i++) {
480 TString title(fHistJetObservables->GetAxis(i)->GetTitle());
481 if (title=="Centrality (%)")
483 else if (title=="#phi_{jet} - #psi_{RP}")
485 else if (title=="#eta")
487 else if (title=="#phi_{jet} (rad)")
489 else if (title=="p_{T} (GeV/c)")
491 else if (title=="p_{T}^{MC} (GeV/c)")
493 else if (title=="p_{T}^{corr} (GeV/c)")
494 contents[i] = corrpt;
495 else if (title=="A_{jet}")
497 else if (title=="NEF")
501 else if (title=="No. of constituents")
503 else if (title=="p_{T,particle}^{leading} (GeV/c)")
504 contents[i] = leadingpt;
506 AliWarning(Form("Unable to fill dimension %s!",title.Data()));
509 fHistJetObservables->Fill(contents);