7 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
15 #include "AliVCluster.h"
16 #include "AliVParticle.h"
17 #include "AliVTrack.h"
18 #include "AliEmcalJet.h"
19 #include "AliRhoParameter.h"
21 #include "AliJetContainer.h"
22 #include "AliParticleContainer.h"
23 #include "AliClusterContainer.h"
25 #include "AliAnalysisTaskDeltaPt.h"
27 ClassImp(AliAnalysisTaskDeltaPt)
29 //________________________________________________________________________
30 AliAnalysisTaskDeltaPt::AliAnalysisTaskDeltaPt() :
31 AliAnalysisTaskEmcalJetDev("AliAnalysisTaskDeltaPt", kTRUE),
39 fConeMaxPhi(TMath::Pi()*2),
45 fEmbCaloClustersCont(0),
47 fRandCaloClustersCont(0),
51 fHistRCPtExPartialLJ(0),
54 fHistDeltaPtRCvsEP(0),
55 fHistDeltaPtRCExLJ(0),
56 fHistDeltaPtRCExPartialLJ(0),
57 fHistDeltaPtRCRand(0),
58 fHistEmbJetsPtArea(0),
59 fHistEmbJetsCorrPtArea(0),
60 fHistEmbPartPtvsJetPt(0),
61 fHistEmbPartPtvsJetCorrPt(0),
62 fHistJetPtvsJetCorrPt(0),
63 fHistDistLeadPart2JetAxis(0),
66 fHistDeltaPtEmbArea(0),
67 fHistDeltaPtEmbvsEP(0),
68 fHistRCPtExLJVSDPhiLJ(0),
69 fHistRCPtExPartialLJVSDPhiLJ(0),
70 fHistEmbJetsPhiEta(0),
71 fHistLeadPartPhiEta(0)
73 // Default constructor.
75 fHistRCPt = new TH1*[fNcentBins];
76 fHistRCPtExLJ = new TH1*[fNcentBins];
77 fHistRCPtExPartialLJ = new TH1*[fNcentBins];
78 fHistRCPtRand = new TH1*[fNcentBins];
79 fHistRhoVSRCPt = new TH2*[fNcentBins];
80 fHistDeltaPtRCvsEP = new TH2*[fNcentBins];
81 fHistDeltaPtRCExLJ = new TH1*[fNcentBins];
82 fHistDeltaPtRCExPartialLJ = new TH1*[fNcentBins];
83 fHistDeltaPtRCRand = new TH1*[fNcentBins];
84 fHistEmbJetsPtArea = new TH3*[fNcentBins];
85 fHistEmbJetsCorrPtArea = new TH3*[fNcentBins];
86 fHistEmbPartPtvsJetPt = new TH2*[fNcentBins];
87 fHistEmbPartPtvsJetCorrPt = new TH2*[fNcentBins];
88 fHistJetPtvsJetCorrPt = new TH2*[fNcentBins];
89 fHistDistLeadPart2JetAxis = new TH1*[fNcentBins];
90 fHistEmbBkgArea = new TH2*[fNcentBins];
91 fHistRhoVSEmbBkg = new TH2*[fNcentBins];
92 fHistDeltaPtEmbArea = new TH2*[fNcentBins];
93 fHistDeltaPtEmbvsEP = new TH2*[fNcentBins];
95 for (Int_t i = 0; i < fNcentBins; i++) {
98 fHistRCPtExPartialLJ[i] = 0;
100 fHistRhoVSRCPt[i] = 0;
101 fHistDeltaPtRCvsEP[i] = 0;
102 fHistDeltaPtRCExLJ[i] = 0;
103 fHistDeltaPtRCExPartialLJ[i] = 0;
104 fHistDeltaPtRCRand[i] = 0;
105 fHistEmbJetsPtArea[i] = 0;
106 fHistEmbJetsCorrPtArea[i] = 0;
107 fHistEmbPartPtvsJetPt[i] = 0;
108 fHistEmbPartPtvsJetCorrPt[i] = 0;
109 fHistJetPtvsJetCorrPt[i] = 0;
110 fHistDistLeadPart2JetAxis[i] = 0;
111 fHistEmbBkgArea[i] = 0;
112 fHistRhoVSEmbBkg[i] = 0;
113 fHistDeltaPtEmbArea[i] = 0;
114 fHistDeltaPtEmbvsEP[i] = 0;
117 SetMakeGeneralHistograms(kTRUE);
120 //________________________________________________________________________
121 AliAnalysisTaskDeltaPt::AliAnalysisTaskDeltaPt(const char *name) :
122 AliAnalysisTaskEmcalJetDev(name, kTRUE),
123 fMCJetPtThreshold(1),
130 fConeMaxPhi(TMath::Pi()*2),
133 fCaloClustersCont(0),
136 fEmbCaloClustersCont(0),
138 fRandCaloClustersCont(0),
142 fHistRCPtExPartialLJ(0),
145 fHistDeltaPtRCvsEP(0),
146 fHistDeltaPtRCExLJ(0),
147 fHistDeltaPtRCExPartialLJ(0),
148 fHistDeltaPtRCRand(0),
149 fHistEmbJetsPtArea(0),
150 fHistEmbJetsCorrPtArea(0),
151 fHistEmbPartPtvsJetPt(0),
152 fHistEmbPartPtvsJetCorrPt(0),
153 fHistJetPtvsJetCorrPt(0),
154 fHistDistLeadPart2JetAxis(0),
157 fHistDeltaPtEmbArea(0),
158 fHistDeltaPtEmbvsEP(0),
159 fHistRCPtExLJVSDPhiLJ(0),
160 fHistRCPtExPartialLJVSDPhiLJ(0),
161 fHistEmbJetsPhiEta(0),
162 fHistLeadPartPhiEta(0)
164 // Standard constructor.
166 fHistRCPt = new TH1*[fNcentBins];
167 fHistRCPtExLJ = new TH1*[fNcentBins];
168 fHistRCPtExPartialLJ = new TH1*[fNcentBins];
169 fHistRCPtRand = new TH1*[fNcentBins];
170 fHistRhoVSRCPt = new TH2*[fNcentBins];
171 fHistDeltaPtRCvsEP = new TH2*[fNcentBins];
172 fHistDeltaPtRCExLJ = new TH1*[fNcentBins];
173 fHistDeltaPtRCExPartialLJ = new TH1*[fNcentBins];
174 fHistDeltaPtRCRand = new TH1*[fNcentBins];
175 fHistEmbJetsPtArea = new TH3*[fNcentBins];
176 fHistEmbJetsCorrPtArea = new TH3*[fNcentBins];
177 fHistEmbPartPtvsJetPt = new TH2*[fNcentBins];
178 fHistEmbPartPtvsJetCorrPt = new TH2*[fNcentBins];
179 fHistJetPtvsJetCorrPt = new TH2*[fNcentBins];
180 fHistDistLeadPart2JetAxis = new TH1*[fNcentBins];
181 fHistEmbBkgArea = new TH2*[fNcentBins];
182 fHistRhoVSEmbBkg = new TH2*[fNcentBins];
183 fHistDeltaPtEmbArea = new TH2*[fNcentBins];
184 fHistDeltaPtEmbvsEP = new TH2*[fNcentBins];
186 for (Int_t i = 0; i < fNcentBins; i++) {
188 fHistRCPtExLJ[i] = 0;
189 fHistRCPtExPartialLJ[i] = 0;
190 fHistRCPtRand[i] = 0;
191 fHistRhoVSRCPt[i] = 0;
192 fHistDeltaPtRCvsEP[i] = 0;
193 fHistDeltaPtRCExLJ[i] = 0;
194 fHistDeltaPtRCExPartialLJ[i] = 0;
195 fHistDeltaPtRCRand[i] = 0;
196 fHistEmbJetsPtArea[i] = 0;
197 fHistEmbJetsCorrPtArea[i] = 0;
198 fHistEmbPartPtvsJetPt[i] = 0;
199 fHistEmbPartPtvsJetCorrPt[i] = 0;
200 fHistJetPtvsJetCorrPt[i] = 0;
201 fHistDistLeadPart2JetAxis[i] = 0;
202 fHistEmbBkgArea[i] = 0;
203 fHistRhoVSEmbBkg[i] = 0;
204 fHistDeltaPtEmbArea[i] = 0;
205 fHistDeltaPtEmbvsEP[i] = 0;
208 SetMakeGeneralHistograms(kTRUE);
211 //________________________________________________________________________
212 void AliAnalysisTaskDeltaPt::UserCreateOutputObjects()
214 // Create user output.
216 AliAnalysisTaskEmcalJetDev::UserCreateOutputObjects();
218 fJetsCont = GetJetContainer("Jets");
219 fTracksCont = GetParticleContainer("Tracks");
220 fCaloClustersCont = GetClusterContainer("CaloClusters");
221 fEmbJetsCont = GetJetContainer("EmbJets");
222 fEmbTracksCont = GetParticleContainer("EmbTracks");
223 fEmbCaloClustersCont = GetClusterContainer("EmbCaloClusters");
224 fRandTracksCont = GetParticleContainer("RandTracks");
225 fRandCaloClustersCont = GetClusterContainer("RandCaloClusters");
227 if (fTracksCont || fCaloClustersCont) {
228 fHistRCPhiEta = new TH2F("fHistRCPhiEta","fHistRCPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
229 fHistRCPhiEta->GetXaxis()->SetTitle("#eta");
230 fHistRCPhiEta->GetYaxis()->SetTitle("#phi");
231 fOutput->Add(fHistRCPhiEta);
234 fHistRCPtExLJVSDPhiLJ = new TH2F("fHistRCPtExLJVSDPhiLJ","fHistRCPtExLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8);
235 fHistRCPtExLJVSDPhiLJ->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
236 fHistRCPtExLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi");
237 fOutput->Add(fHistRCPtExLJVSDPhiLJ);
239 fHistRCPtExPartialLJVSDPhiLJ = new TH2F("fHistRCPtExPartialLJVSDPhiLJ","fHistRCPtExPartialLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8);
240 fHistRCPtExPartialLJVSDPhiLJ->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
241 fHistRCPtExPartialLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi");
242 fOutput->Add(fHistRCPtExPartialLJVSDPhiLJ);
247 fHistEmbJetsPhiEta = new TH2F("fHistEmbJetsPhiEta","fHistEmbJetsPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
248 fHistEmbJetsPhiEta->GetXaxis()->SetTitle("#eta");
249 fHistEmbJetsPhiEta->GetYaxis()->SetTitle("#phi");
250 fOutput->Add(fHistEmbJetsPhiEta);
252 fHistLeadPartPhiEta = new TH2F("fHistLeadPartPhiEta","fHistLeadPartPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01);
253 fHistLeadPartPhiEta->GetXaxis()->SetTitle("#eta");
254 fHistLeadPartPhiEta->GetYaxis()->SetTitle("#phi");
255 fOutput->Add(fHistLeadPartPhiEta);
260 const Int_t nbinsZ = 12;
261 Float_t binsZ[nbinsZ+1] = {0,1,2,3,4,5,6,7,8,9,10,20,1000};
263 Float_t *binsPt = GenerateFixedBinArray(fNbins, fMinBinPt, fMaxBinPt);
264 Float_t *binsCorrPt = GenerateFixedBinArray(fNbins*2, -fMaxBinPt, fMaxBinPt);
265 Float_t *binsArea = GenerateFixedBinArray(50, 0, 2);
267 for (Int_t i = 0; i < fNcentBins; i++) {
268 if (fTracksCont || fCaloClustersCont) {
269 histname = "fHistRCPt_";
271 fHistRCPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
272 fHistRCPt[i]->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
273 fHistRCPt[i]->GetYaxis()->SetTitle("counts");
274 fOutput->Add(fHistRCPt[i]);
276 histname = "fHistRhoVSRCPt_";
278 fHistRhoVSRCPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
279 fHistRhoVSRCPt[i]->GetXaxis()->SetTitle("A#rho (GeV/#it{c})");
280 fHistRhoVSRCPt[i]->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
281 fOutput->Add(fHistRhoVSRCPt[i]);
283 histname = "fHistDeltaPtRCvsEP_";
285 fHistDeltaPtRCvsEP[i] = new TH2F(histname.Data(), histname.Data(), 402, -TMath::Pi()*1.01, TMath::Pi()*3.01, fNbins * 2, -fMaxBinPt, fMaxBinPt);
286 fHistDeltaPtRCvsEP[i]->GetXaxis()->SetTitle("#phi_{RC} - #Psi_{EP}");
287 fHistDeltaPtRCvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})");
288 fHistDeltaPtRCvsEP[i]->GetZaxis()->SetTitle("counts");
289 fOutput->Add(fHistDeltaPtRCvsEP[i]);
292 histname = "fHistRCPtExLJ_";
294 fHistRCPtExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
295 fHistRCPtExLJ[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})");
296 fHistRCPtExLJ[i]->GetYaxis()->SetTitle("counts");
297 fOutput->Add(fHistRCPtExLJ[i]);
299 histname = "fHistDeltaPtRCExLJ_";
301 fHistDeltaPtRCExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
302 fHistDeltaPtRCExLJ[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})");
303 fHistDeltaPtRCExLJ[i]->GetYaxis()->SetTitle("counts");
304 fOutput->Add(fHistDeltaPtRCExLJ[i]);
306 histname = "fHistRCPtExPartialLJ_";
308 fHistRCPtExPartialLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
309 fHistRCPtExPartialLJ[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})");
310 fHistRCPtExPartialLJ[i]->GetYaxis()->SetTitle("counts");
311 fOutput->Add(fHistRCPtExPartialLJ[i]);
313 histname = "fHistDeltaPtRCExPartialLJ_";
315 fHistDeltaPtRCExPartialLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
316 fHistDeltaPtRCExPartialLJ[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})");
317 fHistDeltaPtRCExPartialLJ[i]->GetYaxis()->SetTitle("counts");
318 fOutput->Add(fHistDeltaPtRCExPartialLJ[i]);
322 if (fRandTracksCont || fRandCaloClustersCont) {
323 histname = "fHistRCPtRand_";
325 fHistRCPtRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
326 fHistRCPtRand[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})");
327 fHistRCPtRand[i]->GetYaxis()->SetTitle("counts");
328 fOutput->Add(fHistRCPtRand[i]);
330 histname = "fHistDeltaPtRCRand_";
332 fHistDeltaPtRCRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
333 fHistDeltaPtRCRand[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})");
334 fHistDeltaPtRCRand[i]->GetYaxis()->SetTitle("counts");
335 fOutput->Add(fHistDeltaPtRCRand[i]);
339 histname = "fHistEmbJetsPtArea_";
341 fHistEmbJetsPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins, binsPt, nbinsZ, binsZ);
342 fHistEmbJetsPtArea[i]->GetXaxis()->SetTitle("area");
343 fHistEmbJetsPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,raw} (GeV/#it{c})");
344 fOutput->Add(fHistEmbJetsPtArea[i]);
346 histname = "fHistEmbJetsCorrPtArea_";
348 fHistEmbJetsCorrPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins * 2, binsCorrPt, nbinsZ, binsZ);
349 fHistEmbJetsCorrPtArea[i]->GetXaxis()->SetTitle("area");
350 fHistEmbJetsCorrPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,corr} (GeV/#it{c})");
351 fOutput->Add(fHistEmbJetsCorrPtArea[i]);
353 histname = "fHistEmbPartPtvsJetPt_";
355 fHistEmbPartPtvsJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
356 fHistEmbPartPtvsJetPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
357 fHistEmbPartPtvsJetPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})");
358 fHistEmbPartPtvsJetPt[i]->GetZaxis()->SetTitle("counts");
359 fOutput->Add(fHistEmbPartPtvsJetPt[i]);
361 histname = "fHistEmbPartPtvsJetCorrPt_";
363 fHistEmbPartPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(),
364 fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
365 fHistEmbPartPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
366 fHistEmbPartPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})");
367 fHistEmbPartPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts");
368 fOutput->Add(fHistEmbPartPtvsJetCorrPt[i]);
370 histname = "fHistJetPtvsJetCorrPt_";
372 fHistJetPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(),
373 fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt);
374 fHistJetPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})");
375 fHistJetPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})");
376 fHistJetPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts");
377 fOutput->Add(fHistJetPtvsJetCorrPt[i]);
379 histname = "fHistDistLeadPart2JetAxis_";
381 fHistDistLeadPart2JetAxis[i] = new TH1F(histname.Data(), histname.Data(), 50, 0, 0.5);
382 fHistDistLeadPart2JetAxis[i]->GetXaxis()->SetTitle("distance");
383 fHistDistLeadPart2JetAxis[i]->GetYaxis()->SetTitle("counts");
384 fOutput->Add(fHistDistLeadPart2JetAxis[i]);
386 histname = "fHistEmbBkgArea_";
388 fHistEmbBkgArea[i] = new TH2F(histname.Data(), histname.Data(), 50, 0, 2, fNbins, fMinBinPt, fMaxBinPt);
389 fHistEmbBkgArea[i]->GetXaxis()->SetTitle("area");
390 fHistEmbBkgArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
391 fOutput->Add(fHistEmbBkgArea[i]);
393 histname = "fHistRhoVSEmbBkg_";
395 fHistRhoVSEmbBkg[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
396 fHistRhoVSEmbBkg[i]->GetXaxis()->SetTitle("A#rho (GeV/#it{c})");
397 fHistRhoVSEmbBkg[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})");
398 fOutput->Add(fHistRhoVSEmbBkg[i]);
400 histname = "fHistDeltaPtEmbArea_";
402 fHistDeltaPtEmbArea[i] = new TH2F(histname.Data(), histname.Data(),
403 50, 0, 2, fNbins * 2, -fMaxBinPt, fMaxBinPt);
404 fHistDeltaPtEmbArea[i]->GetXaxis()->SetTitle("area");
405 fHistDeltaPtEmbArea[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
406 fHistDeltaPtEmbArea[i]->GetZaxis()->SetTitle("counts");
407 fOutput->Add(fHistDeltaPtEmbArea[i]);
409 histname = "fHistDeltaPtEmbvsEP_";
411 fHistDeltaPtEmbvsEP[i] = new TH2F(histname.Data(), histname.Data(),
412 402, -TMath::Pi()*1.01, TMath::Pi()*3.01, fNbins * 2, -fMaxBinPt, fMaxBinPt);
413 fHistDeltaPtEmbvsEP[i]->GetXaxis()->SetTitle("#phi_{jet} - #Psi_{EP}");
414 fHistDeltaPtEmbvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})");
415 fHistDeltaPtEmbvsEP[i]->GetZaxis()->SetTitle("counts");
416 fOutput->Add(fHistDeltaPtEmbvsEP[i]);
424 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
427 //________________________________________________________________________
428 Bool_t AliAnalysisTaskDeltaPt::FillHistograms()
434 // _________________________________
436 const Float_t rcArea = fConeRadius * fConeRadius * TMath::Pi();
441 if (fTracksCont || fCaloClustersCont) {
443 for (Int_t i = 0; i < fRCperEvent; i++) {
444 // Simple random cones
448 GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, 0);
450 fHistRCPhiEta->Fill(RCeta, RCphi);
451 fHistRhoVSRCPt[fCentBin]->Fill(fRhoVal * rcArea, RCpt);
453 fHistRCPt[fCentBin]->Fill(RCpt);
454 fHistDeltaPtRCvsEP[fCentBin]->Fill(RCphi - fEPV0, RCpt - rcArea * fRhoVal);
459 // Random cones far from leading jet
460 AliEmcalJet* jet = fJetsCont->GetLeadingJet("rho");
465 GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet);
468 Float_t dphi = RCphi - jet->Phi();
469 if (dphi > 4.8) dphi -= TMath::Pi() * 2;
470 if (dphi < -1.6) dphi += TMath::Pi() * 2;
471 fHistRCPtExLJVSDPhiLJ->Fill(RCpt, dphi);
473 fHistRCPtExLJ[fCentBin]->Fill(RCpt);
474 fHistDeltaPtRCExLJ[fCentBin]->Fill(RCpt - rcArea * fRhoVal);
478 if(fBeamType == kpA) {
483 GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet, kTRUE);
487 Float_t dphi = RCphi - jet->Phi();
488 if (dphi > 4.8) dphi -= TMath::Pi() * 2;
489 if (dphi < -1.6) dphi += TMath::Pi() * 2;
490 fHistRCPtExPartialLJVSDPhiLJ->Fill(RCpt, dphi);
492 fHistRCPtExPartialLJ[fCentBin]->Fill(RCpt);
493 fHistDeltaPtRCExPartialLJ[fCentBin]->Fill(RCpt - rcArea * fRhoVal);
500 // Random cones with randomized particles
501 if (fRandTracksCont || fRandCaloClustersCont) {
505 GetRandomCone(RCpt, RCeta, RCphi, fRandTracksCont, fRandCaloClustersCont, 0);
507 fHistRCPtRand[fCentBin]->Fill(RCpt);
508 fHistDeltaPtRCRand[fCentBin]->Fill(RCpt - rcArea * fRhoVal);
514 // _________________________________
518 AliEmcalJet *embJet = NextEmbeddedJet(kTRUE);
520 while (embJet != 0) {
522 fEmbJetsCont->GetLeadingHadronMomentum(mom,embJet);
524 Double_t distLeading2Jet = TMath::Sqrt((embJet->Eta() - mom.Eta()) * (embJet->Eta() - mom.Eta()) + (embJet->Phi() - mom.Phi()) * (embJet->Phi() - mom.Phi()));
526 fHistEmbPartPtvsJetPt[fCentBin]->Fill(embJet->MCPt(), embJet->Pt());
527 fHistEmbPartPtvsJetCorrPt[fCentBin]->Fill(embJet->MCPt(), embJet->Pt() - embJet->Area() * fRhoVal);
528 fHistLeadPartPhiEta->Fill(mom.Eta(), mom.Phi());
529 fHistDistLeadPart2JetAxis[fCentBin]->Fill(distLeading2Jet);
531 fHistEmbJetsPtArea[fCentBin]->Fill(embJet->Area(), embJet->Pt(), mom.Pt());
532 fHistEmbJetsCorrPtArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - fRhoVal * embJet->Area(), mom.Pt());
533 fHistEmbJetsPhiEta->Fill(embJet->Eta(), embJet->Phi());
534 fHistJetPtvsJetCorrPt[fCentBin]->Fill(embJet->Pt(), embJet->Pt() - fRhoVal * embJet->Area());
536 fHistEmbBkgArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->MCPt());
537 fHistRhoVSEmbBkg[fCentBin]->Fill(fRhoVal * embJet->Area(), embJet->Pt() - embJet->MCPt());
538 fHistDeltaPtEmbArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt());
539 fHistDeltaPtEmbvsEP[fCentBin]->Fill(embJet->Phi() - fEPV0, embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt());
541 embJet = NextEmbeddedJet();
548 //________________________________________________________________________
549 AliEmcalJet* AliAnalysisTaskDeltaPt::NextEmbeddedJet(Bool_t reset)
551 // Get the next accepted embedded jet.
553 Int_t i = reset ? 0 : -1;
555 AliEmcalJet* jet = fEmbJetsCont->GetNextAcceptJet(i);
556 while (jet && jet->MCPt() < fMCJetPtThreshold) jet = fEmbJetsCont->GetNextAcceptJet();
561 //________________________________________________________________________
562 void AliAnalysisTaskDeltaPt::GetRandomCone(Float_t &pt, Float_t &eta, Float_t &phi,
563 AliParticleContainer* tracks, AliClusterContainer* clusters,
564 AliEmcalJet *jet, Bool_t bPartialExclusion) const
572 if (!tracks && !clusters)
583 Float_t maxEta = fConeMaxEta;
584 Float_t minEta = fConeMinEta;
585 Float_t maxPhi = fConeMaxPhi;
586 Float_t minPhi = fConeMinPhi;
588 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
589 if (minPhi < 0) minPhi = 0;
593 Bool_t reject = kTRUE;
595 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
596 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
597 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
599 if(bPartialExclusion) {
605 Double_t ncoll = GetNColl();
611 if(rnd.Rndm()<=prob) reject = kTRUE; //reject cone
615 } while (dLJ < fMinRC2LJ && repeats < 999 && reject);
617 if (repeats == 999) {
618 AliWarning(Form("%s: Could not get random cone!", GetName()));
623 AliVCluster* cluster = clusters->GetNextAcceptCluster(0);
625 TLorentzVector nPart;
626 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
628 Float_t cluseta = nPart.Eta();
629 Float_t clusphi = nPart.Phi();
631 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi + 2 * TMath::Pi()))
632 clusphi += 2 * TMath::Pi();
633 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi - 2 * TMath::Pi()))
634 clusphi -= 2 * TMath::Pi();
636 Float_t d = TMath::Sqrt((cluseta - eta) * (cluseta - eta) + (clusphi - phi) * (clusphi - phi));
637 if (d <= fConeRadius)
640 cluster = clusters->GetNextAcceptCluster();
645 AliVParticle* track = tracks->GetNextAcceptParticle(0);
647 Float_t tracketa = track->Eta();
648 Float_t trackphi = track->Phi();
650 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
651 trackphi += 2 * TMath::Pi();
652 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
653 trackphi -= 2 * TMath::Pi();
655 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
656 if (d <= fConeRadius)
659 track = tracks->GetNextAcceptParticle();
664 //________________________________________________________________________
665 void AliAnalysisTaskDeltaPt::SetConeEtaPhiEMCAL()
667 // Set default cuts for full cones
669 SetConeEtaLimits(-0.7+fConeRadius,0.7-fConeRadius);
670 SetConePhiLimits(1.4+fConeRadius,TMath::Pi()-fConeRadius);
673 //________________________________________________________________________
674 void AliAnalysisTaskDeltaPt::SetConeEtaPhiTPC()
676 // Set default cuts for charged cones
678 SetConeEtaLimits(-0.9+fConeRadius, 0.9-fConeRadius);
679 SetConePhiLimits(-10, 10);
682 //________________________________________________________________________
683 void AliAnalysisTaskDeltaPt::ExecOnce()
685 // Initialize the analysis.
687 AliAnalysisTaskEmcalJetDev::ExecOnce();
689 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
690 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
691 if (fEmbTracksCont && fEmbTracksCont->GetArray() == 0) fEmbTracksCont = 0;
692 if (fEmbCaloClustersCont && fEmbCaloClustersCont->GetArray() == 0) fEmbCaloClustersCont = 0;
693 if (fRandTracksCont && fRandTracksCont->GetArray() == 0) fRandTracksCont = 0;
694 if (fRandCaloClustersCont && fRandCaloClustersCont->GetArray() == 0) fRandCaloClustersCont = 0;
695 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
696 if (fEmbJetsCont && fEmbJetsCont->GetArray() == 0) fEmbJetsCont = 0;
698 if (fRCperEvent < 0) {
699 Double_t area = (fConeMaxEta - fConeMinEta) * (fConeMaxPhi - fConeMinPhi);
700 Double_t rcArea = TMath::Pi() * fConeRadius * fConeRadius;
701 fRCperEvent = TMath::FloorNint(area / rcArea - 0.5);
702 if (fRCperEvent == 0)
707 fMinRC2LJ = fConeRadius * 1.5;
709 const Float_t maxDist = TMath::Max(fConeMaxPhi - fConeMinPhi, fConeMaxEta - fConeMinEta) / 2;
710 if (fMinRC2LJ > maxDist) {
711 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. "
712 "Will use fMinRC2LJ = %f", fMinRC2LJ, maxDist));
717 //________________________________________________________________________
718 Double_t AliAnalysisTaskDeltaPt::GetNColl() const {
719 // Get NColl - returns value of corresponding bin
721 // values taken from V0A slicing https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PACentStudies#Tables_with_centrality_bins_from
723 if(fBeamType == kpA) {
725 const Int_t nNCollBins = 7;
727 Double_t centMin[nNCollBins] = {0.,5.,10.,20.,40.,60.,80.};
728 Double_t centMax[nNCollBins] = {5.,10.,20.,40.,60.,80.,100.};
730 Double_t nColl[nNCollBins] = {14.7,13.,11.7,9.38,6.49,3.96,1.52};
732 for(Int_t i = 0; i<nNCollBins; i++) {
733 if(fCent>=centMin[i] && fCent<centMax[i])
740 AliWarning(Form("%s: Only works for pA analysis. Returning -1",GetName()));