7 #include <TClonesArray.h>
10 #include <THnSparse.h>
12 #include <TLorentzVector.h>
14 #include "AliVCluster.h"
15 #include "AliVParticle.h"
16 #include "AliEmcalJet.h"
17 #include "AliRhoParameter.h"
20 #include "AliAnalysisTaskSAJF.h"
22 ClassImp(AliAnalysisTaskSAJF)
24 //________________________________________________________________________
25 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
26 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAJF", kTRUE),
28 fHistJetObservables(0)
31 // Default constructor.
33 for (Int_t i = 0; i < 4; i++) {
34 fHistTracksJetPt[i] = 0;
35 fHistClustersJetPt[i] = 0;
36 fHistTracksPtDist[i] = 0;
37 fHistClustersPtDist[i] = 0;
39 fHistJetPtEtaPhi[i] = 0;
40 fHistJetPtArea[i] = 0;
44 fHistJetPtLeadingPartPt[i] = 0;
45 fHistJetCorrPtEtaPhi[i] = 0;
46 fHistJetCorrPtArea[i] = 0;
47 fHistJetCorrPtEP[i] = 0;
48 fHistJetCorrPtNEF[i] = 0;
49 fHistJetCorrPtZ[i] = 0;
50 fHistJetCorrPtLeadingPartPt[i] = 0;
51 fHistJetPtCorrPt[i] = 0;
52 fHistJetPtMCPt[i] = 0;
53 fHistJetMCPtCorrPt[i] = 0;
56 SetMakeGeneralHistograms(kTRUE);
59 //________________________________________________________________________
60 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
61 AliAnalysisTaskEmcalJet(name, kTRUE),
63 fHistJetObservables(0)
65 // Standard constructor.
67 for (Int_t i = 0; i < 4; i++) {
68 fHistTracksJetPt[i] = 0;
69 fHistClustersJetPt[i] = 0;
70 fHistTracksPtDist[i] = 0;
71 fHistClustersPtDist[i] = 0;
73 fHistJetPtEtaPhi[i] = 0;
74 fHistJetPtArea[i] = 0;
78 fHistJetPtLeadingPartPt[i] = 0;
79 fHistJetCorrPtEtaPhi[i] = 0;
80 fHistJetCorrPtArea[i] = 0;
81 fHistJetCorrPtEP[i] = 0;
82 fHistJetCorrPtNEF[i] = 0;
83 fHistJetCorrPtZ[i] = 0;
84 fHistJetCorrPtLeadingPartPt[i] = 0;
85 fHistJetPtCorrPt[i] = 0;
86 fHistJetPtMCPt[i] = 0;
87 fHistJetMCPtCorrPt[i] = 0;
90 SetMakeGeneralHistograms(kTRUE);
93 //________________________________________________________________________
94 void AliAnalysisTaskSAJF::AllocateTHnSparse()
96 TString title[20]= {""};
97 Int_t nbins[20] = {0};
98 Double_t min[20] = {0.};
99 Double_t max[20] = {0.};
102 if (fForceBeamType != kpp) {
103 title[dim] = "Centrality (%)";
109 title[dim] = "#phi_{jet} - #psi_{RP}";
112 max[dim] = TMath::Pi();
122 title[dim] = "#phi_{jet} (rad)";
125 max[dim] = 2*TMath::Pi()*nbins[dim]/(nbins[dim]-1);
128 title[dim] = "p_{T} (GeV/c)";
130 min[dim] = fMinBinPt;
131 max[dim] = fMaxBinPt;
135 title[dim] = "p_{T}^{MC} (GeV/c)";
137 min[dim] = fMinBinPt;
138 max[dim] = fMaxBinPt;
142 if (!GetRhoName().IsNull()) {
143 title[dim] = "p_{T}^{corr} (GeV/c)";
144 nbins[dim] = fNbins*2;
145 min[dim] = -fMaxBinPt;
146 max[dim] = fMaxBinPt;
150 title[dim] = "A_{jet}";
168 title[dim] = "No. of constituents";
174 title[dim] = "p_{T,particle}^{leading} (GeV/c)";
180 fHistJetObservables = new THnSparseD("fHistJetObservables","fHistJetObservables",dim,nbins,min,max);
181 fOutput->Add(fHistJetObservables);
182 for (Int_t i = 0; i < dim; i++)
183 fHistJetObservables->GetAxis(i)->SetTitle(title[i]);
186 //________________________________________________________________________
187 void AliAnalysisTaskSAJF::AllocateTHX()
189 for (Int_t i = 0; i < 4; i++) {
192 histname = "fHistJetPtEtaPhi_";
194 fHistJetPtEtaPhi[i] = new TH3F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 20, -1, 1, 41, 0, 2*TMath::Pi()*41/40);
195 fHistJetPtEtaPhi[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
196 fHistJetPtEtaPhi[i]->GetYaxis()->SetTitle("#eta");
197 fHistJetPtEtaPhi[i]->GetZaxis()->SetTitle("#phi_{jet} (rad)");
198 fOutput->Add(fHistJetPtEtaPhi[i]);
200 histname = "fHistJetPtArea_";
202 fHistJetPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 150, 0, 1.5);
203 fHistJetPtArea[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
204 fHistJetPtArea[i]->GetYaxis()->SetTitle("A_{jet}");
205 fHistJetPtArea[i]->GetZaxis()->SetTitle("counts");
206 fOutput->Add(fHistJetPtArea[i]);
208 histname = "fHistJetPtEP_";
210 fHistJetPtEP[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 100, 0, TMath::Pi());
211 fHistJetPtEP[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
212 fHistJetPtEP[i]->GetYaxis()->SetTitle("#phi_{jet} - #psi_{RP}");
213 fHistJetPtEP[i]->GetZaxis()->SetTitle("counts");
214 fOutput->Add(fHistJetPtEP[i]);
216 histname = "fHistJetPtNEF_";
218 fHistJetPtNEF[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 102, 0, 1.02);
219 fHistJetPtNEF[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
220 fHistJetPtNEF[i]->GetYaxis()->SetTitle("NEF");
221 fHistJetPtNEF[i]->GetZaxis()->SetTitle("counts");
222 fOutput->Add(fHistJetPtNEF[i]);
224 histname = "fHistJetPtZ_";
226 fHistJetPtZ[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 102, 0, 1.02);
227 fHistJetPtZ[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
228 fHistJetPtZ[i]->GetYaxis()->SetTitle("z");
229 fHistJetPtZ[i]->GetZaxis()->SetTitle("counts");
230 fOutput->Add(fHistJetPtZ[i]);
232 histname = "fHistJetPtLeadingPartPt_";
234 fHistJetPtLeadingPartPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 120, 0, 120);
235 fHistJetPtLeadingPartPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
236 fHistJetPtLeadingPartPt[i]->GetYaxis()->SetTitle("p_{T,particle}^{leading} (GeV/c)");
237 fHistJetPtLeadingPartPt[i]->GetZaxis()->SetTitle("counts");
238 fOutput->Add(fHistJetPtLeadingPartPt[i]);
240 if (!GetRhoName().IsNull()) {
241 histname = "fHistJetCorrPtEtaPhi_";
243 fHistJetCorrPtEtaPhi[i] = new TH3F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 20, -1, 1, 41, 0, 2*TMath::Pi()*201/200);
244 fHistJetCorrPtEtaPhi[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
245 fHistJetCorrPtEtaPhi[i]->GetYaxis()->SetTitle("#eta");
246 fHistJetCorrPtEtaPhi[i]->GetZaxis()->SetTitle("#phi_{jet} (rad)");
247 fOutput->Add(fHistJetCorrPtEtaPhi[i]);
249 histname = "fHistJetCorrPtArea_";
251 fHistJetCorrPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 150, 0, 1.5);
252 fHistJetCorrPtArea[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
253 fHistJetCorrPtArea[i]->GetYaxis()->SetTitle("A_{jet}");
254 fHistJetCorrPtArea[i]->GetZaxis()->SetTitle("counts");
255 fOutput->Add(fHistJetCorrPtArea[i]);
257 histname = "fHistJetCorrPtEP_";
259 fHistJetCorrPtEP[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 100, 0, TMath::Pi());
260 fHistJetCorrPtEP[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
261 fHistJetCorrPtEP[i]->GetYaxis()->SetTitle("#phi_{jet} - #psi_{RP}");
262 fHistJetCorrPtEP[i]->GetZaxis()->SetTitle("counts");
263 fOutput->Add(fHistJetCorrPtEP[i]);
265 histname = "fHistJetCorrPtNEF_";
267 fHistJetCorrPtNEF[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 102, 0, 1.02);
268 fHistJetCorrPtNEF[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
269 fHistJetCorrPtNEF[i]->GetYaxis()->SetTitle("NEF");
270 fHistJetCorrPtNEF[i]->GetZaxis()->SetTitle("counts");
271 fOutput->Add(fHistJetCorrPtNEF[i]);
273 histname = "fHistJetCorrPtZ_";
275 fHistJetCorrPtZ[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 102, 0, 1.02);
276 fHistJetCorrPtZ[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
277 fHistJetCorrPtZ[i]->GetYaxis()->SetTitle("z");
278 fHistJetCorrPtZ[i]->GetZaxis()->SetTitle("counts");
279 fOutput->Add(fHistJetCorrPtZ[i]);
281 histname = "fHistJetCorrPtLeadingPartPt_";
283 fHistJetCorrPtLeadingPartPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins*2, -fMaxBinPt, fMaxBinPt, 120, 0, 120);
284 fHistJetCorrPtLeadingPartPt[i]->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
285 fHistJetCorrPtLeadingPartPt[i]->GetYaxis()->SetTitle("p_{T,particle}^{leading} (GeV/c)");
286 fHistJetCorrPtLeadingPartPt[i]->GetZaxis()->SetTitle("counts");
287 fOutput->Add(fHistJetCorrPtLeadingPartPt[i]);
289 histname = "fHistJetPtCorrPt_";
291 fHistJetPtCorrPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
292 fHistJetPtCorrPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
293 fHistJetPtCorrPt[i]->GetYaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
294 fHistJetPtCorrPt[i]->GetZaxis()->SetTitle("counts");
295 fOutput->Add(fHistJetPtCorrPt[i]);
298 histname = "fHistJetMCPtCorrPt_";
300 fHistJetMCPtCorrPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
301 fHistJetMCPtCorrPt[i]->GetXaxis()->SetTitle("p_{T}^{MC} (GeV/c)");
302 fHistJetMCPtCorrPt[i]->GetYaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
303 fHistJetMCPtCorrPt[i]->GetZaxis()->SetTitle("counts");
304 fOutput->Add(fHistJetMCPtCorrPt[i]);
309 histname = "fHistJetPtMCPt_";
311 fHistJetPtMCPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
312 fHistJetPtMCPt[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
313 fHistJetPtMCPt[i]->GetYaxis()->SetTitle("p_{T}^{MC} (GeV/c)");
314 fHistJetPtMCPt[i]->GetZaxis()->SetTitle("counts");
315 fOutput->Add(fHistJetPtMCPt[i]);
320 //________________________________________________________________________
321 void AliAnalysisTaskSAJF::UserCreateOutputObjects()
323 // Create user output.
325 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
332 for (Int_t i = 0; i < 4; i++) {
335 if (fParticleCollArray.GetEntriesFast()>0) {
336 histname = "fHistTracksJetPt_";
338 fHistTracksJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
339 fHistTracksJetPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
340 fHistTracksJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
341 fHistTracksJetPt[i]->GetZaxis()->SetTitle("counts");
342 fOutput->Add(fHistTracksJetPt[i]);
344 histname = "fHistTracksPtDist_";
346 fHistTracksPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
347 fHistTracksPtDist[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
348 fHistTracksPtDist[i]->GetYaxis()->SetTitle("d");
349 fHistTracksPtDist[i]->GetZaxis()->SetTitle("counts");
350 fOutput->Add(fHistTracksPtDist[i]);
353 if (fClusterCollArray.GetEntriesFast()>0) {
354 histname = "fHistClustersJetPt_";
356 fHistClustersJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, fNbins, fMinBinPt, fMaxBinPt);
357 fHistClustersJetPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
358 fHistClustersJetPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
359 fHistClustersJetPt[i]->GetZaxis()->SetTitle("counts");
360 fOutput->Add(fHistClustersJetPt[i]);
362 histname = "fHistClustersPtDist_";
364 fHistClustersPtDist[i] = new TH2F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2, 100, 0, 5);
365 fHistClustersPtDist[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
366 fHistClustersPtDist[i]->GetYaxis()->SetTitle("d");
367 fHistClustersPtDist[i]->GetZaxis()->SetTitle("counts");
368 fOutput->Add(fHistClustersPtDist[i]);
372 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
376 //________________________________________________________________________
377 Bool_t AliAnalysisTaskSAJF::FillHistograms()
382 AliError(Form("%s - Jet array not provided, returning...", GetName()));
386 for (Int_t ij = 0; ij < fJets->GetEntriesFast(); ij++) {
388 AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(ij));
391 AliError(Form("Could not receive jet %d", ij));
398 Float_t ptLeading = GetLeadingHadronPt(jet);
399 Float_t corrPt = jet->Pt() - fRhoVal * jet->Area();
402 Double_t ep = jet->Phi() - fEPV0;
403 while (ep < 0) ep += TMath::Pi();
404 while (ep >= TMath::Pi()) ep -= TMath::Pi();
406 FillJetHisto(fCent, ep, jet->Eta(), jet->Phi(), jet->Pt(), jet->MCPt(), corrPt, jet->Area(),
407 jet->NEF(), ptLeading/jet->Pt(), jet->GetNumberOfConstituents(), ptLeading);
410 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
411 AliVParticle *track = jet->TrackAt(it, fTracks);
413 fHistTracksJetPt[fCentBin]->Fill(track->Pt(), jet->Pt());
414 Double_t dist = TMath::Sqrt((track->Eta() - jet->Eta()) * (track->Eta() - jet->Eta()) + (track->Phi() - jet->Phi()) * (track->Phi() - jet->Phi()));
415 fHistTracksPtDist[fCentBin]->Fill(track->Pt(), dist);
421 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
422 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
425 TLorentzVector nPart;
426 cluster->GetMomentum(nPart, fVertex);
428 fHistClustersJetPt[fCentBin]->Fill(nPart.Pt(), jet->Pt());
429 Double_t dist = TMath::Sqrt((nPart.Eta() - jet->Eta()) * (nPart.Eta() - jet->Eta()) + (nPart.Phi() - jet->Phi()) * (nPart.Phi() - jet->Phi()));
430 fHistClustersPtDist[fCentBin]->Fill(nPart.Pt(), dist);
439 //________________________________________________________________________
440 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,
441 Double_t NEF, Double_t z, Int_t n, Double_t leadingpt)
443 if (fHistoType == 0) {
444 fHistJetPtEtaPhi[fCentBin]->Fill(pt,eta,phi);
445 fHistJetPtArea[fCentBin]->Fill(pt,area);
446 fHistJetPtEP[fCentBin]->Fill(pt,ep);
447 fHistJetPtNEF[fCentBin]->Fill(pt,NEF);
448 fHistJetPtZ[fCentBin]->Fill(pt,z);
449 fHistJetPtLeadingPartPt[fCentBin]->Fill(pt,leadingpt);
450 if (fHistJetCorrPtEtaPhi[fCentBin]) {
451 fHistJetCorrPtEtaPhi[fCentBin]->Fill(corrpt,eta,phi);
452 fHistJetCorrPtArea[fCentBin]->Fill(corrpt,area);
453 fHistJetCorrPtEP[fCentBin]->Fill(corrpt,ep);
454 fHistJetCorrPtNEF[fCentBin]->Fill(corrpt,NEF);
455 fHistJetCorrPtZ[fCentBin]->Fill(corrpt,z);
456 fHistJetCorrPtLeadingPartPt[fCentBin]->Fill(corrpt,leadingpt);
457 fHistJetPtCorrPt[fCentBin]->Fill(pt,corrpt);
459 fHistJetMCPtCorrPt[fCentBin]->Fill(MCpt,corrpt);
462 fHistJetPtMCPt[fCentBin]->Fill(pt,MCpt);
466 Double_t contents[20]={0};
468 for (Int_t i = 0; i < fHistJetObservables->GetNdimensions(); i++) {
469 TString title(fHistJetObservables->GetAxis(i)->GetTitle());
470 if (title=="Centrality (%)")
472 else if (title=="#phi_{jet} - #psi_{RP}")
474 else if (title=="#eta")
476 else if (title=="#phi_{jet} (rad)")
478 else if (title=="p_{T} (GeV/c)")
480 else if (title=="p_{T}^{MC} (GeV/c)")
482 else if (title=="p_{T}^{corr} (GeV/c)")
483 contents[i] = corrpt;
484 else if (title=="A_{jet}")
486 else if (title=="NEF")
490 else if (title=="No. of constituents")
492 else if (title=="p_{T,particle}^{leading} (GeV/c)")
493 contents[i] = leadingpt;
495 AliWarning(Form("Unable to fill dimension %s!",title.Data()));
498 fHistJetObservables->Fill(contents);