]>
Commit | Line | Data |
---|---|---|
1 | // $Id$ | |
2 | // | |
3 | // Jet deltaPt task. | |
4 | // | |
5 | // Author: S.Aiola | |
6 | ||
7 | #include <TClonesArray.h> | |
8 | #include <TH1F.h> | |
9 | #include <TH2F.h> | |
10 | #include <TH3F.h> | |
11 | #include <TList.h> | |
12 | #include <TLorentzVector.h> | |
13 | #include <TRandom3.h> | |
14 | ||
15 | #include "AliVCluster.h" | |
16 | #include "AliVParticle.h" | |
17 | #include "AliVTrack.h" | |
18 | #include "AliEmcalJet.h" | |
19 | #include "AliRhoParameter.h" | |
20 | #include "AliLog.h" | |
21 | #include "AliJetContainer.h" | |
22 | #include "AliParticleContainer.h" | |
23 | #include "AliClusterContainer.h" | |
24 | ||
25 | #include "AliAnalysisTaskDeltaPt.h" | |
26 | ||
27 | ClassImp(AliAnalysisTaskDeltaPt) | |
28 | ||
29 | //________________________________________________________________________ | |
30 | AliAnalysisTaskDeltaPt::AliAnalysisTaskDeltaPt() : | |
31 | AliAnalysisTaskEmcalJet("AliAnalysisTaskDeltaPt", kTRUE), | |
32 | fMCJetPtThreshold(1), | |
33 | fMinRC2LJ(-1), | |
34 | fRCperEvent(-1), | |
35 | fConeRadius(0.2), | |
36 | fConeMinEta(-0.9), | |
37 | fConeMaxEta(0.9), | |
38 | fConeMinPhi(0), | |
39 | fConeMaxPhi(TMath::Pi()*2), | |
40 | fJetsCont(0), | |
41 | fTracksCont(0), | |
42 | fCaloClustersCont(0), | |
43 | fEmbJetsCont(0), | |
44 | fEmbTracksCont(0), | |
45 | fEmbCaloClustersCont(0), | |
46 | fRandTracksCont(0), | |
47 | fRandCaloClustersCont(0), | |
48 | fHistRCPhiEta(0), | |
49 | fHistRCPt(0), | |
50 | fHistRCPtExLJ(0), | |
51 | fHistRCPtExPartialLJ(0), | |
52 | fHistRCPtRand(0), | |
53 | fHistRhoVSRCPt(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), | |
64 | fHistEmbBkgArea(0), | |
65 | fHistRhoVSEmbBkg(0), | |
66 | fHistDeltaPtEmbArea(0), | |
67 | fHistDeltaPtEmbvsEP(0), | |
68 | fHistRCPtExLJVSDPhiLJ(0), | |
69 | fHistRCPtExPartialLJVSDPhiLJ(0), | |
70 | fHistEmbJetsPhiEta(0), | |
71 | fHistLeadPartPhiEta(0) | |
72 | { | |
73 | // Default constructor. | |
74 | ||
75 | fHistRCPt = 0; | |
76 | fHistRCPtExLJ = 0; | |
77 | fHistRCPtExPartialLJ = 0; | |
78 | fHistRCPtRand = 0; | |
79 | fHistRhoVSRCPt = 0; | |
80 | fHistDeltaPtRCvsEP = 0; | |
81 | fHistDeltaPtRCExLJ = 0; | |
82 | fHistDeltaPtRCExPartialLJ = 0; | |
83 | fHistDeltaPtRCRand = 0; | |
84 | fHistEmbJetsPtArea = 0; | |
85 | fHistEmbJetsCorrPtArea = 0; | |
86 | fHistEmbPartPtvsJetPt = 0; | |
87 | fHistEmbPartPtvsJetCorrPt = 0; | |
88 | fHistJetPtvsJetCorrPt = 0; | |
89 | fHistDistLeadPart2JetAxis = 0; | |
90 | fHistEmbBkgArea = 0; | |
91 | fHistRhoVSEmbBkg = 0; | |
92 | fHistDeltaPtEmbArea = 0; | |
93 | fHistDeltaPtEmbvsEP = 0; | |
94 | ||
95 | SetMakeGeneralHistograms(kTRUE); | |
96 | } | |
97 | ||
98 | //________________________________________________________________________ | |
99 | AliAnalysisTaskDeltaPt::AliAnalysisTaskDeltaPt(const char *name) : | |
100 | AliAnalysisTaskEmcalJet(name, kTRUE), | |
101 | fMCJetPtThreshold(1), | |
102 | fMinRC2LJ(-1), | |
103 | fRCperEvent(-1), | |
104 | fConeRadius(0.2), | |
105 | fConeMinEta(-0.9), | |
106 | fConeMaxEta(0.9), | |
107 | fConeMinPhi(0), | |
108 | fConeMaxPhi(TMath::Pi()*2), | |
109 | fJetsCont(0), | |
110 | fTracksCont(0), | |
111 | fCaloClustersCont(0), | |
112 | fEmbJetsCont(0), | |
113 | fEmbTracksCont(0), | |
114 | fEmbCaloClustersCont(0), | |
115 | fRandTracksCont(0), | |
116 | fRandCaloClustersCont(0), | |
117 | fHistRCPhiEta(0), | |
118 | fHistRCPt(0), | |
119 | fHistRCPtExLJ(0), | |
120 | fHistRCPtExPartialLJ(0), | |
121 | fHistRCPtRand(0), | |
122 | fHistRhoVSRCPt(0), | |
123 | fHistDeltaPtRCvsEP(0), | |
124 | fHistDeltaPtRCExLJ(0), | |
125 | fHistDeltaPtRCExPartialLJ(0), | |
126 | fHistDeltaPtRCRand(0), | |
127 | fHistEmbJetsPtArea(0), | |
128 | fHistEmbJetsCorrPtArea(0), | |
129 | fHistEmbPartPtvsJetPt(0), | |
130 | fHistEmbPartPtvsJetCorrPt(0), | |
131 | fHistJetPtvsJetCorrPt(0), | |
132 | fHistDistLeadPart2JetAxis(0), | |
133 | fHistEmbBkgArea(0), | |
134 | fHistRhoVSEmbBkg(0), | |
135 | fHistDeltaPtEmbArea(0), | |
136 | fHistDeltaPtEmbvsEP(0), | |
137 | fHistRCPtExLJVSDPhiLJ(0), | |
138 | fHistRCPtExPartialLJVSDPhiLJ(0), | |
139 | fHistEmbJetsPhiEta(0), | |
140 | fHistLeadPartPhiEta(0) | |
141 | { | |
142 | // Standard constructor. | |
143 | ||
144 | fHistRCPt = 0; | |
145 | fHistRCPtExLJ = 0; | |
146 | fHistRCPtExPartialLJ = 0; | |
147 | fHistRCPtRand = 0; | |
148 | fHistRhoVSRCPt = 0; | |
149 | fHistDeltaPtRCvsEP = 0; | |
150 | fHistDeltaPtRCExLJ = 0; | |
151 | fHistDeltaPtRCExPartialLJ = 0; | |
152 | fHistDeltaPtRCRand = 0; | |
153 | fHistEmbJetsPtArea = 0; | |
154 | fHistEmbJetsCorrPtArea = 0; | |
155 | fHistEmbPartPtvsJetPt = 0; | |
156 | fHistEmbPartPtvsJetCorrPt = 0; | |
157 | fHistJetPtvsJetCorrPt = 0; | |
158 | fHistDistLeadPart2JetAxis = 0; | |
159 | fHistEmbBkgArea = 0; | |
160 | fHistRhoVSEmbBkg = 0; | |
161 | fHistDeltaPtEmbArea = 0; | |
162 | fHistDeltaPtEmbvsEP = 0; | |
163 | ||
164 | SetMakeGeneralHistograms(kTRUE); | |
165 | } | |
166 | ||
167 | //________________________________________________________________________ | |
168 | void AliAnalysisTaskDeltaPt::AllocateHistogramArrays() | |
169 | { | |
170 | fHistRCPt = new TH1*[fNcentBins]; | |
171 | fHistRCPtExLJ = new TH1*[fNcentBins]; | |
172 | fHistRCPtExPartialLJ = new TH1*[fNcentBins]; | |
173 | fHistRCPtRand = new TH1*[fNcentBins]; | |
174 | fHistRhoVSRCPt = new TH2*[fNcentBins]; | |
175 | fHistDeltaPtRCvsEP = new TH2*[fNcentBins]; | |
176 | fHistDeltaPtRCExLJ = new TH1*[fNcentBins]; | |
177 | fHistDeltaPtRCExPartialLJ = new TH1*[fNcentBins]; | |
178 | fHistDeltaPtRCRand = new TH1*[fNcentBins]; | |
179 | fHistEmbJetsPtArea = new TH3*[fNcentBins]; | |
180 | fHistEmbJetsCorrPtArea = new TH3*[fNcentBins]; | |
181 | fHistEmbPartPtvsJetPt = new TH2*[fNcentBins]; | |
182 | fHistEmbPartPtvsJetCorrPt = new TH2*[fNcentBins]; | |
183 | fHistJetPtvsJetCorrPt = new TH2*[fNcentBins]; | |
184 | fHistDistLeadPart2JetAxis = new TH1*[fNcentBins]; | |
185 | fHistEmbBkgArea = new TH2*[fNcentBins]; | |
186 | fHistRhoVSEmbBkg = new TH2*[fNcentBins]; | |
187 | fHistDeltaPtEmbArea = new TH2*[fNcentBins]; | |
188 | fHistDeltaPtEmbvsEP = new TH2*[fNcentBins]; | |
189 | ||
190 | for (Int_t i = 0; i < fNcentBins; i++) { | |
191 | fHistRCPt[i] = 0; | |
192 | fHistRCPtExLJ[i] = 0; | |
193 | fHistRCPtExPartialLJ[i] = 0; | |
194 | fHistRCPtRand[i] = 0; | |
195 | fHistRhoVSRCPt[i] = 0; | |
196 | fHistDeltaPtRCvsEP[i] = 0; | |
197 | fHistDeltaPtRCExLJ[i] = 0; | |
198 | fHistDeltaPtRCExPartialLJ[i] = 0; | |
199 | fHistDeltaPtRCRand[i] = 0; | |
200 | fHistEmbJetsPtArea[i] = 0; | |
201 | fHistEmbJetsCorrPtArea[i] = 0; | |
202 | fHistEmbPartPtvsJetPt[i] = 0; | |
203 | fHistEmbPartPtvsJetCorrPt[i] = 0; | |
204 | fHistJetPtvsJetCorrPt[i] = 0; | |
205 | fHistDistLeadPart2JetAxis[i] = 0; | |
206 | fHistEmbBkgArea[i] = 0; | |
207 | fHistRhoVSEmbBkg[i] = 0; | |
208 | fHistDeltaPtEmbArea[i] = 0; | |
209 | fHistDeltaPtEmbvsEP[i] = 0; | |
210 | } | |
211 | } | |
212 | ||
213 | //________________________________________________________________________ | |
214 | void AliAnalysisTaskDeltaPt::UserCreateOutputObjects() | |
215 | { | |
216 | // Create user output. | |
217 | ||
218 | AliAnalysisTaskEmcalJet::UserCreateOutputObjects(); | |
219 | ||
220 | AllocateHistogramArrays(); | |
221 | ||
222 | fJetsCont = GetJetContainer("Jets"); | |
223 | fTracksCont = GetParticleContainer("Tracks"); | |
224 | fCaloClustersCont = GetClusterContainer("CaloClusters"); | |
225 | fEmbJetsCont = GetJetContainer("EmbJets"); | |
226 | fEmbTracksCont = GetParticleContainer("EmbTracks"); | |
227 | fEmbCaloClustersCont = GetClusterContainer("EmbCaloClusters"); | |
228 | fRandTracksCont = GetParticleContainer("RandTracks"); | |
229 | fRandCaloClustersCont = GetClusterContainer("RandCaloClusters"); | |
230 | ||
231 | if (fTracksCont || fCaloClustersCont) { | |
232 | fHistRCPhiEta = new TH2F("fHistRCPhiEta","fHistRCPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01); | |
233 | fHistRCPhiEta->GetXaxis()->SetTitle("#eta"); | |
234 | fHistRCPhiEta->GetYaxis()->SetTitle("#phi"); | |
235 | fOutput->Add(fHistRCPhiEta); | |
236 | ||
237 | if (fJetsCont) { | |
238 | fHistRCPtExLJVSDPhiLJ = new TH2F("fHistRCPtExLJVSDPhiLJ","fHistRCPtExLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8); | |
239 | fHistRCPtExLJVSDPhiLJ->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})"); | |
240 | fHistRCPtExLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi"); | |
241 | fOutput->Add(fHistRCPtExLJVSDPhiLJ); | |
242 | ||
243 | fHistRCPtExPartialLJVSDPhiLJ = new TH2F("fHistRCPtExPartialLJVSDPhiLJ","fHistRCPtExPartialLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8); | |
244 | fHistRCPtExPartialLJVSDPhiLJ->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})"); | |
245 | fHistRCPtExPartialLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi"); | |
246 | fOutput->Add(fHistRCPtExPartialLJVSDPhiLJ); | |
247 | } | |
248 | } | |
249 | ||
250 | if (fEmbJetsCont) { | |
251 | fHistEmbJetsPhiEta = new TH2F("fHistEmbJetsPhiEta","fHistEmbJetsPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01); | |
252 | fHistEmbJetsPhiEta->GetXaxis()->SetTitle("#eta"); | |
253 | fHistEmbJetsPhiEta->GetYaxis()->SetTitle("#phi"); | |
254 | fOutput->Add(fHistEmbJetsPhiEta); | |
255 | ||
256 | fHistLeadPartPhiEta = new TH2F("fHistLeadPartPhiEta","fHistLeadPartPhiEta", 100, -1, 1, 201, 0, TMath::Pi() * 2.01); | |
257 | fHistLeadPartPhiEta->GetXaxis()->SetTitle("#eta"); | |
258 | fHistLeadPartPhiEta->GetYaxis()->SetTitle("#phi"); | |
259 | fOutput->Add(fHistLeadPartPhiEta); | |
260 | } | |
261 | ||
262 | TString histname; | |
263 | ||
264 | const Int_t nbinsZ = 12; | |
265 | Float_t binsZ[nbinsZ+1] = {0,1,2,3,4,5,6,7,8,9,10,20,1000}; | |
266 | ||
267 | Float_t *binsPt = GenerateFixedBinArray(fNbins, fMinBinPt, fMaxBinPt); | |
268 | Float_t *binsCorrPt = GenerateFixedBinArray(fNbins*2, -fMaxBinPt, fMaxBinPt); | |
269 | Float_t *binsArea = GenerateFixedBinArray(50, 0, 2); | |
270 | ||
271 | for (Int_t i = 0; i < fNcentBins; i++) { | |
272 | if (fTracksCont || fCaloClustersCont) { | |
273 | histname = "fHistRCPt_"; | |
274 | histname += i; | |
275 | fHistRCPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2); | |
276 | fHistRCPt[i]->GetXaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})"); | |
277 | fHistRCPt[i]->GetYaxis()->SetTitle("counts"); | |
278 | fOutput->Add(fHistRCPt[i]); | |
279 | ||
280 | histname = "fHistRhoVSRCPt_"; | |
281 | histname += i; | |
282 | fHistRhoVSRCPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt); | |
283 | fHistRhoVSRCPt[i]->GetXaxis()->SetTitle("A#rho (GeV/#it{c})"); | |
284 | fHistRhoVSRCPt[i]->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})"); | |
285 | fOutput->Add(fHistRhoVSRCPt[i]); | |
286 | ||
287 | histname = "fHistDeltaPtRCvsEP_"; | |
288 | histname += i; | |
289 | fHistDeltaPtRCvsEP[i] = new TH2F(histname.Data(), histname.Data(), 101, 0, TMath::Pi()*1.01, fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
290 | fHistDeltaPtRCvsEP[i]->GetXaxis()->SetTitle("#phi_{RC} - #psi_{RP}"); | |
291 | fHistDeltaPtRCvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})"); | |
292 | fHistDeltaPtRCvsEP[i]->GetZaxis()->SetTitle("counts"); | |
293 | fOutput->Add(fHistDeltaPtRCvsEP[i]); | |
294 | ||
295 | if (fJetsCont) { | |
296 | histname = "fHistRCPtExLJ_"; | |
297 | histname += i; | |
298 | fHistRCPtExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2); | |
299 | fHistRCPtExLJ[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})"); | |
300 | fHistRCPtExLJ[i]->GetYaxis()->SetTitle("counts"); | |
301 | fOutput->Add(fHistRCPtExLJ[i]); | |
302 | ||
303 | histname = "fHistDeltaPtRCExLJ_"; | |
304 | histname += i; | |
305 | fHistDeltaPtRCExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
306 | fHistDeltaPtRCExLJ[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})"); | |
307 | fHistDeltaPtRCExLJ[i]->GetYaxis()->SetTitle("counts"); | |
308 | fOutput->Add(fHistDeltaPtRCExLJ[i]); | |
309 | ||
310 | histname = "fHistRCPtExPartialLJ_"; | |
311 | histname += i; | |
312 | fHistRCPtExPartialLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2); | |
313 | fHistRCPtExPartialLJ[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})"); | |
314 | fHistRCPtExPartialLJ[i]->GetYaxis()->SetTitle("counts"); | |
315 | fOutput->Add(fHistRCPtExPartialLJ[i]); | |
316 | ||
317 | histname = "fHistDeltaPtRCExPartialLJ_"; | |
318 | histname += i; | |
319 | fHistDeltaPtRCExPartialLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
320 | fHistDeltaPtRCExPartialLJ[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})"); | |
321 | fHistDeltaPtRCExPartialLJ[i]->GetYaxis()->SetTitle("counts"); | |
322 | fOutput->Add(fHistDeltaPtRCExPartialLJ[i]); | |
323 | } | |
324 | } | |
325 | ||
326 | if (fRandTracksCont || fRandCaloClustersCont) { | |
327 | histname = "fHistRCPtRand_"; | |
328 | histname += i; | |
329 | fHistRCPtRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2); | |
330 | fHistRCPtRand[i]->GetXaxis()->SetTitle("#it{p}_{T}^{RC} (GeV/#it{c})"); | |
331 | fHistRCPtRand[i]->GetYaxis()->SetTitle("counts"); | |
332 | fOutput->Add(fHistRCPtRand[i]); | |
333 | ||
334 | histname = "fHistDeltaPtRCRand_"; | |
335 | histname += i; | |
336 | fHistDeltaPtRCRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
337 | fHistDeltaPtRCRand[i]->GetXaxis()->SetTitle("#delta#it{p}_{T}^{RC} (GeV/#it{c})"); | |
338 | fHistDeltaPtRCRand[i]->GetYaxis()->SetTitle("counts"); | |
339 | fOutput->Add(fHistDeltaPtRCRand[i]); | |
340 | } | |
341 | ||
342 | if (fEmbJetsCont) { | |
343 | histname = "fHistEmbJetsPtArea_"; | |
344 | histname += i; | |
345 | fHistEmbJetsPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins, binsPt, nbinsZ, binsZ); | |
346 | fHistEmbJetsPtArea[i]->GetXaxis()->SetTitle("area"); | |
347 | fHistEmbJetsPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,raw} (GeV/#it{c})"); | |
348 | fOutput->Add(fHistEmbJetsPtArea[i]); | |
349 | ||
350 | histname = "fHistEmbJetsCorrPtArea_"; | |
351 | histname += i; | |
352 | fHistEmbJetsCorrPtArea[i] = new TH3F(histname.Data(), histname.Data(), 50, binsArea, fNbins * 2, binsCorrPt, nbinsZ, binsZ); | |
353 | fHistEmbJetsCorrPtArea[i]->GetXaxis()->SetTitle("area"); | |
354 | fHistEmbJetsCorrPtArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb,corr} (GeV/#it{c})"); | |
355 | fOutput->Add(fHistEmbJetsCorrPtArea[i]); | |
356 | ||
357 | histname = "fHistEmbPartPtvsJetPt_"; | |
358 | histname += i; | |
359 | fHistEmbPartPtvsJetPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt); | |
360 | fHistEmbPartPtvsJetPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})"); | |
361 | fHistEmbPartPtvsJetPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})"); | |
362 | fHistEmbPartPtvsJetPt[i]->GetZaxis()->SetTitle("counts"); | |
363 | fOutput->Add(fHistEmbPartPtvsJetPt[i]); | |
364 | ||
365 | histname = "fHistEmbPartPtvsJetCorrPt_"; | |
366 | histname += i; | |
367 | fHistEmbPartPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(), | |
368 | fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt); | |
369 | fHistEmbPartPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#sum#it{p}_{T,const}^{emb} (GeV/#it{c})"); | |
370 | fHistEmbPartPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})"); | |
371 | fHistEmbPartPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts"); | |
372 | fOutput->Add(fHistEmbPartPtvsJetCorrPt[i]); | |
373 | ||
374 | histname = "fHistJetPtvsJetCorrPt_"; | |
375 | histname += i; | |
376 | fHistJetPtvsJetCorrPt[i] = new TH2F(histname.Data(), histname.Data(), | |
377 | fNbins, fMinBinPt, fMaxBinPt, fNbins*2, -fMaxBinPt, fMaxBinPt); | |
378 | fHistJetPtvsJetCorrPt[i]->GetXaxis()->SetTitle("#it{p}_{T,jet}^{emb} (GeV/#it{c})"); | |
379 | fHistJetPtvsJetCorrPt[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - A#rho (GeV/#it{c})"); | |
380 | fHistJetPtvsJetCorrPt[i]->GetZaxis()->SetTitle("counts"); | |
381 | fOutput->Add(fHistJetPtvsJetCorrPt[i]); | |
382 | ||
383 | histname = "fHistDistLeadPart2JetAxis_"; | |
384 | histname += i; | |
385 | fHistDistLeadPart2JetAxis[i] = new TH1F(histname.Data(), histname.Data(), 50, 0, 0.5); | |
386 | fHistDistLeadPart2JetAxis[i]->GetXaxis()->SetTitle("distance"); | |
387 | fHistDistLeadPart2JetAxis[i]->GetYaxis()->SetTitle("counts"); | |
388 | fOutput->Add(fHistDistLeadPart2JetAxis[i]); | |
389 | ||
390 | histname = "fHistEmbBkgArea_"; | |
391 | histname += i; | |
392 | fHistEmbBkgArea[i] = new TH2F(histname.Data(), histname.Data(), 50, 0, 2, fNbins, fMinBinPt, fMaxBinPt); | |
393 | fHistEmbBkgArea[i]->GetXaxis()->SetTitle("area"); | |
394 | fHistEmbBkgArea[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})"); | |
395 | fOutput->Add(fHistEmbBkgArea[i]); | |
396 | ||
397 | histname = "fHistRhoVSEmbBkg_"; | |
398 | histname += i; | |
399 | fHistRhoVSEmbBkg[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt); | |
400 | fHistRhoVSEmbBkg[i]->GetXaxis()->SetTitle("A#rho (GeV/#it{c})"); | |
401 | fHistRhoVSEmbBkg[i]->GetYaxis()->SetTitle("#it{p}_{T,jet}^{emb} - #sum#it{p}_{T,const}^{emb} (GeV/#it{c})"); | |
402 | fOutput->Add(fHistRhoVSEmbBkg[i]); | |
403 | ||
404 | histname = "fHistDeltaPtEmbArea_"; | |
405 | histname += i; | |
406 | fHistDeltaPtEmbArea[i] = new TH2F(histname.Data(), histname.Data(), | |
407 | 50, 0, 2, fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
408 | fHistDeltaPtEmbArea[i]->GetXaxis()->SetTitle("area"); | |
409 | fHistDeltaPtEmbArea[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})"); | |
410 | fHistDeltaPtEmbArea[i]->GetZaxis()->SetTitle("counts"); | |
411 | fOutput->Add(fHistDeltaPtEmbArea[i]); | |
412 | ||
413 | histname = "fHistDeltaPtEmbvsEP_"; | |
414 | histname += i; | |
415 | fHistDeltaPtEmbvsEP[i] = new TH2F(histname.Data(), histname.Data(), | |
416 | 402, -TMath::Pi()*1.01, TMath::Pi()*3.01, fNbins * 2, -fMaxBinPt, fMaxBinPt); | |
417 | fHistDeltaPtEmbvsEP[i]->GetXaxis()->SetTitle("#phi_{jet} - #Psi_{EP}"); | |
418 | fHistDeltaPtEmbvsEP[i]->GetYaxis()->SetTitle("#delta#it{p}_{T}^{emb} (GeV/#it{c})"); | |
419 | fHistDeltaPtEmbvsEP[i]->GetZaxis()->SetTitle("counts"); | |
420 | fOutput->Add(fHistDeltaPtEmbvsEP[i]); | |
421 | } | |
422 | } | |
423 | ||
424 | delete[] binsPt; | |
425 | delete[] binsCorrPt; | |
426 | delete[] binsArea; | |
427 | ||
428 | PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram | |
429 | } | |
430 | ||
431 | //________________________________________________________________________ | |
432 | Bool_t AliAnalysisTaskDeltaPt::FillHistograms() | |
433 | { | |
434 | // Fill histograms. | |
435 | ||
436 | // ************ | |
437 | // Random cones | |
438 | // _________________________________ | |
439 | ||
440 | const Float_t rcArea = fConeRadius * fConeRadius * TMath::Pi(); | |
441 | Float_t RCpt = 0; | |
442 | Float_t RCeta = 0; | |
443 | Float_t RCphi = 0; | |
444 | ||
445 | if (fTracksCont || fCaloClustersCont) { | |
446 | ||
447 | for (Int_t i = 0; i < fRCperEvent; i++) { | |
448 | // Simple random cones | |
449 | RCpt = 0; | |
450 | RCeta = 0; | |
451 | RCphi = 0; | |
452 | GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, 0); | |
453 | if (RCpt > 0) { | |
454 | fHistRCPhiEta->Fill(RCeta, RCphi); | |
455 | fHistRhoVSRCPt[fCentBin]->Fill(fRhoVal * rcArea, RCpt); | |
456 | ||
457 | fHistRCPt[fCentBin]->Fill(RCpt); | |
458 | ||
459 | Double_t ep = RCphi - fEPV0; | |
460 | while (ep < 0) ep += TMath::Pi(); | |
461 | while (ep >= TMath::Pi()) ep -= TMath::Pi(); | |
462 | ||
463 | fHistDeltaPtRCvsEP[fCentBin]->Fill(ep, RCpt - rcArea * fRhoVal); | |
464 | } | |
465 | ||
466 | if (fJetsCont) { | |
467 | ||
468 | // Random cones far from leading jet | |
469 | AliEmcalJet* jet = fJetsCont->GetLeadingJet("rho"); | |
470 | ||
471 | RCpt = 0; | |
472 | RCeta = 0; | |
473 | RCphi = 0; | |
474 | GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet); | |
475 | if (RCpt > 0) { | |
476 | if (jet) { | |
477 | Float_t dphi = RCphi - jet->Phi(); | |
478 | if (dphi > 4.8) dphi -= TMath::Pi() * 2; | |
479 | if (dphi < -1.6) dphi += TMath::Pi() * 2; | |
480 | fHistRCPtExLJVSDPhiLJ->Fill(RCpt, dphi); | |
481 | } | |
482 | fHistRCPtExLJ[fCentBin]->Fill(RCpt); | |
483 | fHistDeltaPtRCExLJ[fCentBin]->Fill(RCpt - rcArea * fRhoVal); | |
484 | } | |
485 | ||
486 | //partial exclusion | |
487 | if(fBeamType == kpA) { | |
488 | ||
489 | RCpt = 0; | |
490 | RCeta = 0; | |
491 | RCphi = 0; | |
492 | GetRandomCone(RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet, kTRUE); | |
493 | ||
494 | if (RCpt > 0) { | |
495 | if (jet) { | |
496 | Float_t dphi = RCphi - jet->Phi(); | |
497 | if (dphi > 4.8) dphi -= TMath::Pi() * 2; | |
498 | if (dphi < -1.6) dphi += TMath::Pi() * 2; | |
499 | fHistRCPtExPartialLJVSDPhiLJ->Fill(RCpt, dphi); | |
500 | } | |
501 | fHistRCPtExPartialLJ[fCentBin]->Fill(RCpt); | |
502 | fHistDeltaPtRCExPartialLJ[fCentBin]->Fill(RCpt - rcArea * fRhoVal); | |
503 | } | |
504 | } | |
505 | } | |
506 | } | |
507 | } | |
508 | ||
509 | // Random cones with randomized particles | |
510 | if (fRandTracksCont || fRandCaloClustersCont) { | |
511 | RCpt = 0; | |
512 | RCeta = 0; | |
513 | RCphi = 0; | |
514 | GetRandomCone(RCpt, RCeta, RCphi, fRandTracksCont, fRandCaloClustersCont, 0); | |
515 | if (RCpt > 0) { | |
516 | fHistRCPtRand[fCentBin]->Fill(RCpt); | |
517 | fHistDeltaPtRCRand[fCentBin]->Fill(RCpt - rcArea * fRhoVal); | |
518 | } | |
519 | } | |
520 | ||
521 | // ************ | |
522 | // Embedding | |
523 | // _________________________________ | |
524 | ||
525 | if (fEmbJetsCont) { | |
526 | ||
527 | AliEmcalJet *embJet = NextEmbeddedJet(kTRUE); | |
528 | ||
529 | while (embJet != 0) { | |
530 | TLorentzVector mom; | |
531 | fEmbJetsCont->GetLeadingHadronMomentum(mom,embJet); | |
532 | ||
533 | Double_t distLeading2Jet = TMath::Sqrt((embJet->Eta() - mom.Eta()) * (embJet->Eta() - mom.Eta()) + (embJet->Phi() - mom.Phi()) * (embJet->Phi() - mom.Phi())); | |
534 | ||
535 | fHistEmbPartPtvsJetPt[fCentBin]->Fill(embJet->MCPt(), embJet->Pt()); | |
536 | fHistEmbPartPtvsJetCorrPt[fCentBin]->Fill(embJet->MCPt(), embJet->Pt() - embJet->Area() * fRhoVal); | |
537 | fHistLeadPartPhiEta->Fill(mom.Eta(), mom.Phi()); | |
538 | fHistDistLeadPart2JetAxis[fCentBin]->Fill(distLeading2Jet); | |
539 | ||
540 | fHistEmbJetsPtArea[fCentBin]->Fill(embJet->Area(), embJet->Pt(), mom.Pt()); | |
541 | fHistEmbJetsCorrPtArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - fRhoVal * embJet->Area(), mom.Pt()); | |
542 | fHistEmbJetsPhiEta->Fill(embJet->Eta(), embJet->Phi()); | |
543 | fHistJetPtvsJetCorrPt[fCentBin]->Fill(embJet->Pt(), embJet->Pt() - fRhoVal * embJet->Area()); | |
544 | ||
545 | fHistEmbBkgArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->MCPt()); | |
546 | fHistRhoVSEmbBkg[fCentBin]->Fill(fRhoVal * embJet->Area(), embJet->Pt() - embJet->MCPt()); | |
547 | fHistDeltaPtEmbArea[fCentBin]->Fill(embJet->Area(), embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt()); | |
548 | fHistDeltaPtEmbvsEP[fCentBin]->Fill(embJet->Phi() - fEPV0, embJet->Pt() - embJet->Area() * fRhoVal - embJet->MCPt()); | |
549 | ||
550 | embJet = NextEmbeddedJet(); | |
551 | } | |
552 | } | |
553 | ||
554 | return kTRUE; | |
555 | } | |
556 | ||
557 | //________________________________________________________________________ | |
558 | AliEmcalJet* AliAnalysisTaskDeltaPt::NextEmbeddedJet(Bool_t reset) | |
559 | { | |
560 | // Get the next accepted embedded jet. | |
561 | ||
562 | Int_t i = reset ? 0 : -1; | |
563 | ||
564 | AliEmcalJet* jet = fEmbJetsCont->GetNextAcceptJet(i); | |
565 | while (jet && jet->MCPt() < fMCJetPtThreshold) jet = fEmbJetsCont->GetNextAcceptJet(); | |
566 | ||
567 | return jet; | |
568 | } | |
569 | ||
570 | //________________________________________________________________________ | |
571 | void AliAnalysisTaskDeltaPt::GetRandomCone(Float_t &pt, Float_t &eta, Float_t &phi, | |
572 | AliParticleContainer* tracks, AliClusterContainer* clusters, | |
573 | AliEmcalJet *jet, Bool_t bPartialExclusion) const | |
574 | { | |
575 | // Get rigid cone. | |
576 | ||
577 | eta = -999; | |
578 | phi = -999; | |
579 | pt = 0; | |
580 | ||
581 | if (!tracks && !clusters) | |
582 | return; | |
583 | ||
584 | Float_t LJeta = 999; | |
585 | Float_t LJphi = 999; | |
586 | ||
587 | if (jet) { | |
588 | LJeta = jet->Eta(); | |
589 | LJphi = jet->Phi(); | |
590 | } | |
591 | ||
592 | Float_t maxEta = fConeMaxEta; | |
593 | Float_t minEta = fConeMinEta; | |
594 | Float_t maxPhi = fConeMaxPhi; | |
595 | Float_t minPhi = fConeMinPhi; | |
596 | ||
597 | if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2; | |
598 | if (minPhi < 0) minPhi = 0; | |
599 | ||
600 | Float_t dLJ = 0; | |
601 | Int_t repeats = 0; | |
602 | Bool_t reject = kTRUE; | |
603 | do { | |
604 | eta = gRandom->Rndm() * (maxEta - minEta) + minEta; | |
605 | phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi; | |
606 | dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi)); | |
607 | ||
608 | if(bPartialExclusion) { | |
609 | reject = kFALSE; | |
610 | ||
611 | TRandom3 rnd; | |
612 | rnd.SetSeed(0); | |
613 | ||
614 | Double_t ncoll = GetNColl(); | |
615 | ||
616 | Double_t prob = 0.; | |
617 | if(ncoll>0) | |
618 | prob = 1./ncoll; | |
619 | ||
620 | if(rnd.Rndm()<=prob) reject = kTRUE; //reject cone | |
621 | } | |
622 | ||
623 | repeats++; | |
624 | } while (dLJ < fMinRC2LJ && repeats < 999 && reject); | |
625 | ||
626 | if (repeats == 999) { | |
627 | AliWarning(Form("%s: Could not get random cone!", GetName())); | |
628 | return; | |
629 | } | |
630 | ||
631 | if (clusters) { | |
632 | AliVCluster* cluster = clusters->GetNextAcceptCluster(0); | |
633 | while (cluster) { | |
634 | TLorentzVector nPart; | |
635 | cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex)); | |
636 | ||
637 | Float_t cluseta = nPart.Eta(); | |
638 | Float_t clusphi = nPart.Phi(); | |
639 | ||
640 | if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi + 2 * TMath::Pi())) | |
641 | clusphi += 2 * TMath::Pi(); | |
642 | if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi - 2 * TMath::Pi())) | |
643 | clusphi -= 2 * TMath::Pi(); | |
644 | ||
645 | Float_t d = TMath::Sqrt((cluseta - eta) * (cluseta - eta) + (clusphi - phi) * (clusphi - phi)); | |
646 | if (d <= fConeRadius) | |
647 | pt += nPart.Pt(); | |
648 | ||
649 | cluster = clusters->GetNextAcceptCluster(); | |
650 | } | |
651 | } | |
652 | ||
653 | if (tracks) { | |
654 | AliVParticle* track = tracks->GetNextAcceptParticle(0); | |
655 | while(track) { | |
656 | Float_t tracketa = track->Eta(); | |
657 | Float_t trackphi = track->Phi(); | |
658 | ||
659 | if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi())) | |
660 | trackphi += 2 * TMath::Pi(); | |
661 | if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi())) | |
662 | trackphi -= 2 * TMath::Pi(); | |
663 | ||
664 | Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi)); | |
665 | if (d <= fConeRadius) | |
666 | pt += track->Pt(); | |
667 | ||
668 | track = tracks->GetNextAcceptParticle(); | |
669 | } | |
670 | } | |
671 | } | |
672 | ||
673 | //________________________________________________________________________ | |
674 | void AliAnalysisTaskDeltaPt::SetConeEtaPhiEMCAL() | |
675 | { | |
676 | // Set default cuts for full cones | |
677 | ||
678 | SetConeEtaLimits(-0.7+fConeRadius,0.7-fConeRadius); | |
679 | SetConePhiLimits(1.4+fConeRadius,TMath::Pi()-fConeRadius); | |
680 | } | |
681 | ||
682 | //________________________________________________________________________ | |
683 | void AliAnalysisTaskDeltaPt::SetConeEtaPhiTPC() | |
684 | { | |
685 | // Set default cuts for charged cones | |
686 | ||
687 | SetConeEtaLimits(-0.9+fConeRadius, 0.9-fConeRadius); | |
688 | SetConePhiLimits(-10, 10); | |
689 | } | |
690 | ||
691 | //________________________________________________________________________ | |
692 | void AliAnalysisTaskDeltaPt::ExecOnce() | |
693 | { | |
694 | // Initialize the analysis. | |
695 | ||
696 | AliAnalysisTaskEmcalJet::ExecOnce(); | |
697 | ||
698 | if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0; | |
699 | if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0; | |
700 | if (fEmbTracksCont && fEmbTracksCont->GetArray() == 0) fEmbTracksCont = 0; | |
701 | if (fEmbCaloClustersCont && fEmbCaloClustersCont->GetArray() == 0) fEmbCaloClustersCont = 0; | |
702 | if (fRandTracksCont && fRandTracksCont->GetArray() == 0) fRandTracksCont = 0; | |
703 | if (fRandCaloClustersCont && fRandCaloClustersCont->GetArray() == 0) fRandCaloClustersCont = 0; | |
704 | if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0; | |
705 | if (fEmbJetsCont && fEmbJetsCont->GetArray() == 0) fEmbJetsCont = 0; | |
706 | ||
707 | if (fRCperEvent < 0) { | |
708 | Double_t area = (fConeMaxEta - fConeMinEta) * (fConeMaxPhi - fConeMinPhi); | |
709 | Double_t rcArea = TMath::Pi() * fConeRadius * fConeRadius; | |
710 | fRCperEvent = TMath::FloorNint(area / rcArea - 0.5); | |
711 | if (fRCperEvent == 0) | |
712 | fRCperEvent = 1; | |
713 | } | |
714 | ||
715 | if (fMinRC2LJ < 0) | |
716 | fMinRC2LJ = fConeRadius * 1.5; | |
717 | ||
718 | const Float_t maxDist = TMath::Max(fConeMaxPhi - fConeMinPhi, fConeMaxEta - fConeMinEta) / 2; | |
719 | if (fMinRC2LJ > maxDist) { | |
720 | AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. " | |
721 | "Will use fMinRC2LJ = %f", fMinRC2LJ, maxDist)); | |
722 | fMinRC2LJ = maxDist; | |
723 | } | |
724 | } | |
725 | ||
726 | //________________________________________________________________________ | |
727 | Double_t AliAnalysisTaskDeltaPt::GetNColl() const { | |
728 | // Get NColl - returns value of corresponding bin | |
729 | // only works for pA | |
730 | // values taken from V0A slicing https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PACentStudies#Tables_with_centrality_bins_from | |
731 | ||
732 | if(fBeamType == kpA) { | |
733 | ||
734 | const Int_t nNCollBins = 7; | |
735 | ||
736 | Double_t centMin[nNCollBins] = {0.,5.,10.,20.,40.,60.,80.}; | |
737 | Double_t centMax[nNCollBins] = {5.,10.,20.,40.,60.,80.,100.}; | |
738 | ||
739 | Double_t nColl[nNCollBins] = {14.7,13.,11.7,9.38,6.49,3.96,1.52}; | |
740 | ||
741 | for(Int_t i = 0; i<nNCollBins; i++) { | |
742 | if(fCent>=centMin[i] && fCent<centMax[i]) | |
743 | return nColl[i]; | |
744 | } | |
745 | ||
746 | return -1.; | |
747 | } | |
748 | else { | |
749 | AliWarning(Form("%s: Only works for pA analysis. Returning -1",GetName())); | |
750 | return -1.; | |
751 | } | |
752 | } |