]>
Commit | Line | Data |
---|---|---|
3074a323 | 1 | // $Id$ |
2 | // | |
f09b22c5 | 3 | // Base class for rho calculation. |
4 | // Calculates parameterized rho for given centrality independent of input. | |
3074a323 | 5 | // |
1b3d7f8f | 6 | // Author: S.Aiola |
3074a323 | 7 | |
8 | #include <TF1.h> | |
a487deae | 9 | #include <TH1F.h> |
10 | #include <TH2F.h> | |
11 | #include <TClonesArray.h> | |
3074a323 | 12 | |
1b3d7f8f | 13 | #include "AliLog.h" |
14 | #include "AliRhoParameter.h" | |
a487deae | 15 | #include "AliEmcalJet.h" |
3074a323 | 16 | |
17 | #include "AliAnalysisTaskRhoBase.h" | |
18 | ||
19 | ClassImp(AliAnalysisTaskRhoBase) | |
20 | ||
21 | //________________________________________________________________________ | |
22 | AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase() : | |
a487deae | 23 | AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoBase", kFALSE), |
24 | fRhoScaledName(), | |
25 | fCompareRhoName(), | |
26 | fCompareRhoScaledName(), | |
27 | fRhoFunction(0), | |
28 | fScaleFunction(0), | |
624bef5b | 29 | fInEventSigmaRho(35.83), |
6f18d73a | 30 | fAttachToEvent(kTRUE), |
a487deae | 31 | fRhoScaled(0), |
32 | fCompareRho(0), | |
33 | fCompareRhoScaled(0), | |
34 | fHistJetPtvsCent(0), | |
35 | fHistJetAreavsCent(0), | |
1f9c287f | 36 | fHistJetRhovsCent(0), |
a487deae | 37 | fHistNjetvsCent(0), |
38 | fHistJetPtvsNtrack(0), | |
39 | fHistJetAreavsNtrack(0), | |
40 | fHistNjetvsNtrack(0), | |
41 | fHistRhovsCent(0), | |
42 | fHistRhoScaledvsCent(0), | |
43 | fHistDeltaRhovsCent(0), | |
44 | fHistDeltaRhoScalevsCent(0), | |
45 | fHistRhovsNtrack(0), | |
46 | fHistRhoScaledvsNtrack(0), | |
47 | fHistDeltaRhovsNtrack(0), | |
48 | fHistDeltaRhoScalevsNtrack(0), | |
49 | fHistRhovsNcluster(0), | |
50 | fHistRhoScaledvsNcluster(0) | |
3074a323 | 51 | { |
52 | // Constructor. | |
624bef5b | 53 | |
73e2fd59 | 54 | for (Int_t i = 0; i < 4; i++) { |
624bef5b | 55 | fHistJetNconstVsPt[i] = 0; |
e8df4140 | 56 | fHistJetRhovsEta[i] = 0; |
624bef5b | 57 | } |
58 | for (Int_t i = 0; i < 12; i++) { | |
73e2fd59 | 59 | fHistNjUEoverNjVsNj[i] = 0; |
60 | } | |
3074a323 | 61 | } |
62 | ||
63 | //________________________________________________________________________ | |
a487deae | 64 | AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase(const char *name, Bool_t histo) : |
65 | AliAnalysisTaskEmcalJet(name, histo), | |
66 | fRhoScaledName(), | |
67 | fCompareRhoName(), | |
68 | fCompareRhoScaledName(), | |
69 | fRhoFunction(0), | |
70 | fScaleFunction(0), | |
624bef5b | 71 | fInEventSigmaRho(35.83), |
6f18d73a | 72 | fAttachToEvent(kTRUE), |
a487deae | 73 | fRhoScaled(0), |
74 | fCompareRho(0), | |
75 | fCompareRhoScaled(0), | |
76 | fHistJetPtvsCent(0), | |
77 | fHistJetAreavsCent(0), | |
1f9c287f | 78 | fHistJetRhovsCent(0), |
a487deae | 79 | fHistNjetvsCent(0), |
80 | fHistJetPtvsNtrack(0), | |
81 | fHistJetAreavsNtrack(0), | |
82 | fHistNjetvsNtrack(0), | |
83 | fHistRhovsCent(0), | |
84 | fHistRhoScaledvsCent(0), | |
85 | fHistDeltaRhovsCent(0), | |
86 | fHistDeltaRhoScalevsCent(0), | |
87 | fHistRhovsNtrack(0), | |
88 | fHistRhoScaledvsNtrack(0), | |
89 | fHistDeltaRhovsNtrack(0), | |
90 | fHistDeltaRhoScalevsNtrack(0), | |
91 | fHistRhovsNcluster(0), | |
92 | fHistRhoScaledvsNcluster(0) | |
3074a323 | 93 | { |
94 | // Constructor. | |
a487deae | 95 | |
73e2fd59 | 96 | for (Int_t i = 0; i < 4; i++) { |
624bef5b | 97 | fHistJetNconstVsPt[i] = 0; |
e8df4140 | 98 | fHistJetRhovsEta[i] = 0; |
624bef5b | 99 | } |
100 | for (Int_t i = 0; i < 12; i++) { | |
73e2fd59 | 101 | fHistNjUEoverNjVsNj[i] = 0; |
102 | } | |
a487deae | 103 | SetMakeGeneralHistograms(histo); |
3074a323 | 104 | } |
105 | ||
106 | //________________________________________________________________________ | |
107 | void AliAnalysisTaskRhoBase::UserCreateOutputObjects() | |
108 | { | |
a487deae | 109 | // User create output objects, called at the beginning of the analysis. |
3074a323 | 110 | |
a487deae | 111 | if (!fCreateHisto) |
3074a323 | 112 | return; |
a487deae | 113 | |
114 | AliAnalysisTaskEmcalJet::UserCreateOutputObjects(); | |
115 | ||
116 | fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2); | |
117 | fOutput->Add(fHistRhovsCent); | |
118 | ||
119 | if (!fTracksName.IsNull()) { | |
120 | fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt*2); | |
121 | fOutput->Add(fHistRhovsNtrack); | |
3074a323 | 122 | } |
123 | ||
a487deae | 124 | if (!fCaloName.IsNull()) { |
125 | fHistRhovsNcluster = new TH2F("RhovsNcluster", "RhovsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2); | |
126 | fOutput->Add(fHistRhovsNcluster); | |
127 | } | |
3074a323 | 128 | |
a487deae | 129 | if (!fJetsName.IsNull()) { |
130 | fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt); | |
131 | fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3); | |
1f9c287f | 132 | fHistJetRhovsCent = new TH2F("fHistJetRhovsCent", "fHistJetRhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2); |
a487deae | 133 | fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 150, -0.5, 149.5); |
134 | ||
135 | fOutput->Add(fHistJetPtvsCent); | |
136 | fOutput->Add(fHistJetAreavsCent); | |
137 | fOutput->Add(fHistNjetvsCent); | |
138 | ||
139 | if (!fTracksName.IsNull()) { | |
140 | fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt); | |
141 | fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 125, 0, 4000, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3); | |
142 | fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 125, 0, 4000, 150, -0.5, 149.5); | |
3074a323 | 143 | |
a487deae | 144 | fOutput->Add(fHistJetPtvsNtrack); |
145 | fOutput->Add(fHistJetAreavsNtrack); | |
146 | fOutput->Add(fHistNjetvsNtrack); | |
147 | } | |
73e2fd59 | 148 | |
624bef5b | 149 | |
150 | TString name; | |
73e2fd59 | 151 | for (Int_t i = 0; i < 4; i++) { |
624bef5b | 152 | name = Form("fHistJetNconstVsPt_%d",i); |
153 | fHistJetNconstVsPt[i] = new TH2F(name, name, 150, -0.5, 149.5, fNbins, fMinBinPt, fMaxBinPt); | |
154 | fHistJetNconstVsPt[i]->GetXaxis()->SetTitle("# of constituents"); | |
155 | fHistJetNconstVsPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)"); | |
156 | fOutput->Add(fHistJetNconstVsPt[i]); | |
157 | ||
e8df4140 | 158 | name = Form("HistJetRhovsEta_%d",i); |
159 | fHistJetRhovsEta[i] = new TH2F(name, name, fNbins, fMinBinPt, fMaxBinPt*2, 16, -0.8, 0.8); | |
160 | fHistJetRhovsEta[i]->GetXaxis()->SetTitle("Rho"); | |
161 | fHistJetRhovsEta[i]->GetYaxis()->SetTitle("eta"); | |
162 | fOutput->Add(fHistJetRhovsEta[i]); | |
163 | ||
624bef5b | 164 | for (Int_t j = 0; j < 3; j++) { |
165 | name = Form("NjUEoverNjVsNj_%d_%d",i,j+1); | |
166 | fHistNjUEoverNjVsNj[i*3+j] = new TH2F(name, name, 150, -0.5, 149.5, 120, 0.01, 1.21); | |
167 | fHistNjUEoverNjVsNj[i*3+j]->GetXaxis()->SetTitle("N_{jet}"); | |
168 | fHistNjUEoverNjVsNj[i*3+j]->GetYaxis()->SetTitle("N_{jet_{UE}} / N_{jet}"); | |
169 | fOutput->Add(fHistNjUEoverNjVsNj[i*3+j]); | |
170 | } | |
73e2fd59 | 171 | } |
a487deae | 172 | } |
173 | ||
174 | if (!fCompareRhoName.IsNull()) { | |
175 | fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt); | |
176 | fOutput->Add(fHistDeltaRhovsCent); | |
177 | if (!fTracksName.IsNull()) { | |
178 | fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 125, 0, 4000, fNbins, -fMaxBinPt, fMaxBinPt); | |
179 | fOutput->Add(fHistDeltaRhovsNtrack); | |
180 | } | |
f09b22c5 | 181 | } |
182 | ||
a487deae | 183 | if (fScaleFunction) { |
184 | fHistRhoScaledvsCent = new TH2F("RhoScaledvsCent", "RhoScalevsCent", 101, -1, 100, fNbins, fMinBinPt , fMaxBinPt*2); | |
185 | fOutput->Add(fHistRhoScaledvsCent); | |
186 | ||
187 | if (!fTracksName.IsNull()) { | |
188 | fHistRhoScaledvsNtrack = new TH2F("RhoScaledvsNtrack", "RhoScaledvsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt*2); | |
189 | fOutput->Add(fHistRhoScaledvsNtrack); | |
190 | } | |
191 | ||
192 | if (!fCaloName.IsNull()) { | |
193 | fHistRhoScaledvsNcluster = new TH2F("RhoScaledvsNcluster", "RhoScaledvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2); | |
194 | fOutput->Add(fHistRhoScaledvsNcluster); | |
195 | } | |
196 | ||
197 | if (!fCompareRhoScaledName.IsNull()) { | |
198 | fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt); | |
199 | fOutput->Add(fHistDeltaRhoScalevsCent); | |
200 | ||
201 | if (!fTracksName.IsNull()) { | |
202 | fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 125, 0, 4000, fNbins, -fMaxBinPt, fMaxBinPt); | |
203 | fOutput->Add(fHistDeltaRhoScalevsNtrack); | |
204 | } | |
205 | } | |
206 | } | |
207 | } | |
208 | ||
209 | //________________________________________________________________________ | |
210 | Bool_t AliAnalysisTaskRhoBase::Run() | |
211 | { | |
212 | // Run the analysis. | |
f09b22c5 | 213 | |
214 | Double_t rho = GetRhoFactor(fCent); | |
215 | fRho->SetVal(rho); | |
a487deae | 216 | |
217 | if (fScaleFunction) { | |
218 | Double_t rhoScaled = rho * GetScaleFactor(fCent); | |
219 | fRhoScaled->SetVal(rhoScaled); | |
220 | } | |
221 | ||
222 | return kTRUE; | |
223 | } | |
f09b22c5 | 224 | |
225 | //________________________________________________________________________ | |
a487deae | 226 | Bool_t AliAnalysisTaskRhoBase::FillHistograms() |
f09b22c5 | 227 | { |
a487deae | 228 | // Fill histograms. |
f09b22c5 | 229 | |
a487deae | 230 | Int_t Ntracks = 0; |
231 | Int_t Nclusters = 0; | |
232 | ||
a487deae | 233 | if (fTracks) |
234 | Ntracks = fTracks->GetEntriesFast(); | |
235 | if (fCaloClusters) | |
236 | Nclusters = fCaloClusters->GetEntriesFast(); | |
237 | ||
a487deae | 238 | if (fJets) { |
624bef5b | 239 | Int_t Njets = fJets->GetEntries(); |
240 | Int_t NjetAcc = 0; | |
241 | Int_t NjetUE1Sigma = 0; | |
242 | Int_t NjetUE2Sigma = 0; | |
243 | Int_t NjetUE3Sigma = 0; | |
244 | Double_t rhoPlus1Sigma = fRho->GetVal() + fInEventSigmaRho; | |
245 | Double_t rhoPlus2Sigma = fRho->GetVal() + 2*fInEventSigmaRho; | |
246 | Double_t rhoPlus3Sigma = fRho->GetVal() + 3*fInEventSigmaRho; | |
a487deae | 247 | |
248 | for (Int_t i = 0; i < Njets; ++i) { | |
249 | ||
250 | AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(i)); | |
251 | if (!jet) { | |
252 | AliError(Form("%s: Could not receive jet %d", GetName(), i)); | |
253 | continue; | |
254 | } | |
255 | ||
256 | if (!AcceptJet(jet)) | |
257 | continue; | |
258 | ||
259 | fHistJetPtvsCent->Fill(fCent, jet->Pt()); | |
260 | fHistJetAreavsCent->Fill(fCent, jet->Area()); | |
1f9c287f | 261 | fHistJetRhovsCent->Fill(fCent, jet->Pt() / jet->Area()); |
e8df4140 | 262 | fHistJetRhovsEta[fCentBin]->Fill(jet->Pt() / jet->Area(), jet->Eta()); |
263 | ||
a487deae | 264 | if (fTracks) { |
265 | fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt()); | |
266 | fHistJetAreavsNtrack->Fill(Ntracks, jet->Area()); | |
267 | } | |
73e2fd59 | 268 | |
624bef5b | 269 | fHistJetNconstVsPt[fCentBin]->Fill(jet->GetNumberOfConstituents(), jet->Pt()); |
270 | ||
271 | if (jet->Pt() < rhoPlus1Sigma * jet->Area()) | |
272 | NjetUE1Sigma++; | |
273 | ||
274 | if (jet->Pt() < rhoPlus2Sigma * jet->Area()) | |
275 | NjetUE2Sigma++; | |
276 | ||
277 | if (jet->Pt() < rhoPlus3Sigma * jet->Area()) | |
278 | NjetUE3Sigma++; | |
a487deae | 279 | |
280 | NjetAcc++; | |
281 | } | |
f09b22c5 | 282 | |
624bef5b | 283 | if (NjetAcc>0) { |
284 | fHistNjUEoverNjVsNj[fCentBin*3 ]->Fill(NjetAcc,1.*NjetUE1Sigma/NjetAcc); | |
285 | fHistNjUEoverNjVsNj[fCentBin*3+1]->Fill(NjetAcc,1.*NjetUE2Sigma/NjetAcc); | |
286 | fHistNjUEoverNjVsNj[fCentBin*3+2]->Fill(NjetAcc,1.*NjetUE3Sigma/NjetAcc); | |
287 | } | |
73e2fd59 | 288 | |
a487deae | 289 | fHistNjetvsCent->Fill(fCent, NjetAcc); |
290 | if (fTracks) | |
291 | fHistNjetvsNtrack->Fill(Ntracks, NjetAcc); | |
292 | } | |
293 | ||
294 | fHistRhovsCent->Fill(fCent, fRho->GetVal()); | |
295 | ||
296 | if (fTracks) | |
297 | fHistRhovsNtrack->Fill(Ntracks, fRho->GetVal()); | |
298 | if (fCaloClusters) | |
299 | fHistRhovsNcluster->Fill(Nclusters, fRho->GetVal()); | |
300 | if (fCompareRho) { | |
301 | fHistDeltaRhovsCent->Fill(fCent, fRho->GetVal() - fCompareRho->GetVal()); | |
302 | if (fTracks) | |
303 | fHistDeltaRhovsNtrack->Fill(Ntracks, fRho->GetVal() - fCompareRho->GetVal()); | |
304 | } | |
305 | ||
6f18d73a | 306 | if (fRhoScaled) { |
a487deae | 307 | fHistRhoScaledvsCent->Fill(fCent, fRhoScaled->GetVal()); |
308 | if (fTracks) | |
309 | fHistRhoScaledvsNtrack->Fill(Ntracks, fRhoScaled->GetVal()); | |
310 | if (fCaloClusters) | |
311 | fHistRhoScaledvsNcluster->Fill(Nclusters, fRhoScaled->GetVal()); | |
312 | if (fCompareRhoScaled) { | |
313 | fHistDeltaRhoScalevsCent->Fill(fCent, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal()); | |
314 | if (fTracks) | |
315 | fHistDeltaRhoScalevsNtrack->Fill(Ntracks, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal()); | |
f09b22c5 | 316 | } |
317 | } | |
a487deae | 318 | |
319 | return kTRUE; | |
320 | } | |
321 | ||
f09b22c5 | 322 | |
323 | //________________________________________________________________________ | |
324 | void AliAnalysisTaskRhoBase::ExecOnce() | |
325 | { | |
a487deae | 326 | // Init the analysis. |
f09b22c5 | 327 | |
6f18d73a | 328 | if (!fRho) { |
329 | fRho = new AliRhoParameter(fRhoName, 0); | |
a487deae | 330 | |
6f18d73a | 331 | if (fAttachToEvent) { |
332 | if (!(InputEvent()->FindListObject(fRhoName))) { | |
333 | InputEvent()->AddObject(fRho); | |
334 | } else { | |
335 | AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoName.Data())); | |
336 | return; | |
337 | } | |
338 | } | |
339 | ||
340 | if (fScaleFunction && !fRhoScaled) { | |
341 | fRhoScaled = new AliRhoParameter(fRhoScaledName, 0); | |
342 | if (fAttachToEvent) { | |
343 | if (!(InputEvent()->FindListObject(fRhoScaledName))) { | |
344 | InputEvent()->AddObject(fRhoScaled); | |
345 | } else { | |
346 | AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoScaledName.Data())); | |
347 | return; | |
348 | } | |
349 | } | |
a487deae | 350 | } |
0627844d | 351 | } |
352 | ||
a487deae | 353 | if (!fCompareRhoName.IsNull() && !fCompareRho) { |
354 | fCompareRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoName)); | |
355 | if (!fCompareRho) { | |
356 | AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoName.Data())); | |
357 | } | |
358 | } | |
0627844d | 359 | |
a487deae | 360 | if (!fCompareRhoScaledName.IsNull() && !fCompareRhoScaled) { |
361 | fCompareRhoScaled = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoScaledName)); | |
362 | if (!fCompareRhoScaled) { | |
363 | AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoScaledName.Data())); | |
0627844d | 364 | } |
365 | } | |
366 | ||
a487deae | 367 | AliAnalysisTaskEmcalJet::ExecOnce(); |
0627844d | 368 | } |
369 | ||
3074a323 | 370 | //________________________________________________________________________ |
f09b22c5 | 371 | Double_t AliAnalysisTaskRhoBase::GetRhoFactor(Double_t cent) |
3074a323 | 372 | { |
f09b22c5 | 373 | // Return rho per centrality. |
3074a323 | 374 | |
a487deae | 375 | Double_t rho = 0; |
f09b22c5 | 376 | if (fRhoFunction) |
377 | rho = fRhoFunction->Eval(cent); | |
378 | return rho; | |
3074a323 | 379 | } |
a487deae | 380 | |
381 | //________________________________________________________________________ | |
382 | Double_t AliAnalysisTaskRhoBase::GetScaleFactor(Double_t cent) | |
383 | { | |
384 | // Get scale factor. | |
385 | ||
386 | Double_t scale = 1; | |
387 | if (fScaleFunction) | |
388 | scale = fScaleFunction->Eval(cent); | |
389 | return scale; | |
390 | } |