3 // Base class for rho calculation.
4 // Calculates parameterized rho for given centrality independent of input.
12 #include <TClonesArray.h>
15 #include "AliRhoParameter.h"
16 #include "AliEmcalJet.h"
17 #include "AliParticleContainer.h"
18 #include "AliClusterContainer.h"
19 #include "AliVVZERO.h"
21 #include "AliAnalysisTaskRhoBase.h"
23 ClassImp(AliAnalysisTaskRhoBase)
25 //________________________________________________________________________
26 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase() :
27 AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoBase", kFALSE),
31 fCompareRhoScaledName(),
34 fInEventSigmaRho(35.83),
35 fAttachToEvent(kTRUE),
41 fHistJetAreavsCent(0),
44 fHistJetPtvsNtrack(0),
45 fHistJetAreavsNtrack(0),
48 fHistRhoScaledvsCent(0),
49 fHistDeltaRhovsCent(0),
50 fHistDeltaRhoScalevsCent(0),
51 fHistRhovsNtrackvsV0Mult(0),
52 fHistRhoScaledvsNtrackvsV0Mult(0),
53 fHistDeltaRhovsNtrack(0),
54 fHistDeltaRhoScalevsNtrack(0),
55 fHistRhovsNcluster(0),
56 fHistRhoScaledvsNcluster(0)
60 for (Int_t i = 0; i < 4; i++) {
61 fHistJetNconstVsPt[i] = 0;
62 fHistJetRhovsEta[i] = 0;
64 for (Int_t i = 0; i < 12; i++) {
65 fHistNjUEoverNjVsNj[i] = 0;
69 //________________________________________________________________________
70 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase(const char *name, Bool_t histo) :
71 AliAnalysisTaskEmcalJet(name, histo),
75 fCompareRhoScaledName(),
78 fInEventSigmaRho(35.83),
79 fAttachToEvent(kTRUE),
85 fHistJetAreavsCent(0),
88 fHistJetPtvsNtrack(0),
89 fHistJetAreavsNtrack(0),
92 fHistRhoScaledvsCent(0),
93 fHistDeltaRhovsCent(0),
94 fHistDeltaRhoScalevsCent(0),
95 fHistRhovsNtrackvsV0Mult(0),
96 fHistRhoScaledvsNtrackvsV0Mult(0),
97 fHistDeltaRhovsNtrack(0),
98 fHistDeltaRhoScalevsNtrack(0),
99 fHistRhovsNcluster(0),
100 fHistRhoScaledvsNcluster(0)
104 for (Int_t i = 0; i < 4; i++) {
105 fHistJetNconstVsPt[i] = 0;
106 fHistJetRhovsEta[i] = 0;
108 for (Int_t i = 0; i < 12; i++) {
109 fHistNjUEoverNjVsNj[i] = 0;
111 SetMakeGeneralHistograms(histo);
114 //________________________________________________________________________
115 void AliAnalysisTaskRhoBase::UserCreateOutputObjects()
117 // User create output objects, called at the beginning of the analysis.
122 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
124 fHistRhovsCent = new TH2F("fHistRhovsCent", "fHistRhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
125 fHistRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
126 fHistRhovsCent->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
127 fOutput->Add(fHistRhovsCent);
129 if (fParticleCollArray.GetEntriesFast()>0) {
130 fHistRhovsNtrackvsV0Mult = new TH3F("fHistRhovsNtrackvsV0Mult", "fHistRhovsNtrackvsV0Mult", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt*2,100,0.,25000.);
131 fHistRhovsNtrackvsV0Mult->GetXaxis()->SetTitle("No. of tracks");
132 fHistRhovsNtrackvsV0Mult->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
133 fHistRhovsNtrackvsV0Mult->GetZaxis()->SetTitle("V0 mult");
134 fOutput->Add(fHistRhovsNtrackvsV0Mult);
137 if (fClusterCollArray.GetEntriesFast()>0) {
138 fHistRhovsNcluster = new TH2F("fHistRhovsNcluster", "fHistRhovsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
139 fHistRhovsNcluster->GetXaxis()->SetTitle("No. of tracks");
140 fHistRhovsNcluster->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
141 fOutput->Add(fHistRhovsNcluster);
144 if (fJetCollArray.GetEntriesFast()>0) {
145 fHistJetPtvsCent = new TH2F("fHistJetPtvsCent", "fHistJetPtvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt);
146 fHistJetPtvsCent->GetXaxis()->SetTitle("Centrality (%)");
147 fHistJetPtvsCent->GetYaxis()->SetTitle("#it{p}_{T,jet} (GeV/c)");
148 fOutput->Add(fHistJetPtvsCent);
150 fHistJetAreavsCent = new TH2F("fHistJetAreavsCent", "fHistJetAreavsCent", 101, -1, 100, 100, 0, 1);
151 fHistJetAreavsCent->GetXaxis()->SetTitle("Centrality (%)");
152 fHistJetAreavsCent->GetYaxis()->SetTitle("Jet area");
153 fOutput->Add(fHistJetAreavsCent);
155 fHistJetRhovsCent = new TH2F("fHistJetRhovsCent", "fHistJetRhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
156 fHistJetRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
157 fHistJetRhovsCent->GetYaxis()->SetTitle("Jet #rho (GeV/c)");
158 fOutput->Add(fHistJetRhovsCent);
160 fHistNjetvsCent = new TH2F("fHistNjetvsCent", "fHistNjetvsCent", 101, -1, 100, 150, -0.5, 149.5);
161 fHistNjetvsCent->GetXaxis()->SetTitle("Centrality (%)");
162 fHistNjetvsCent->GetYaxis()->SetTitle("No. of jets");
163 fOutput->Add(fHistNjetvsCent);
166 if (fParticleCollArray.GetEntriesFast()>0) {
167 fHistJetPtvsNtrack = new TH2F("fHistJetPtvsNtrack", "fHistJetPtvsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt);
168 fHistJetPtvsNtrack->GetXaxis()->SetTitle("No. of tracks");
169 fHistJetPtvsNtrack->GetYaxis()->SetTitle("#it{p}_{T,jet} (GeV/c)");
170 fOutput->Add(fHistJetPtvsNtrack);
172 fHistJetAreavsNtrack = new TH2F("fHistJetAreavsNtrack", "fHistJetAreavsNtrack", 150, 0, 6000, 100, 0, 1);
173 fHistJetAreavsNtrack->GetXaxis()->SetTitle("No. of tracks");
174 fHistJetAreavsNtrack->GetYaxis()->SetTitle("Jet area");
175 fOutput->Add(fHistJetAreavsNtrack);
177 fHistNjetvsNtrack = new TH2F("fHistNjetvsNtrack", "fHistNjetvsNtrack", 150, 0, 6000, 150, -0.5, 149.5);
178 fHistNjetvsNtrack->GetXaxis()->SetTitle("No. of jets");
179 fHistNjetvsNtrack->GetYaxis()->SetTitle("No. of tracks");
180 fOutput->Add(fHistNjetvsNtrack);
185 for (Int_t i = 0; i < 4; i++) {
186 name = Form("fHistJetNconstVsPt_%d",i);
187 fHistJetNconstVsPt[i] = new TH2F(name, name, 150, -0.5, 149.5, fNbins, fMinBinPt, fMaxBinPt);
188 fHistJetNconstVsPt[i]->GetXaxis()->SetTitle("No. of constituents");
189 fHistJetNconstVsPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
190 fOutput->Add(fHistJetNconstVsPt[i]);
192 name = Form("fHistJetRhovsEta_%d",i);
193 fHistJetRhovsEta[i] = new TH2F(name, name, fNbins, fMinBinPt, fMaxBinPt*2, 16, -0.8, 0.8);
194 fHistJetRhovsEta[i]->GetXaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
195 fHistJetRhovsEta[i]->GetYaxis()->SetTitle("#eta");
196 fOutput->Add(fHistJetRhovsEta[i]);
198 for (Int_t j = 0; j < 3; j++) {
199 name = Form("NjUEoverNjVsNj_%d_%d",i,j+1);
200 fHistNjUEoverNjVsNj[i*3+j] = new TH2F(name, name, 150, -0.5, 149.5, 120, 0.01, 1.21);
201 fHistNjUEoverNjVsNj[i*3+j]->GetXaxis()->SetTitle("N_{jet}");
202 fHistNjUEoverNjVsNj[i*3+j]->GetYaxis()->SetTitle("N_{jet_{UE}} / N_{jet}");
203 fOutput->Add(fHistNjUEoverNjVsNj[i*3+j]);
208 if (!fCompareRhoName.IsNull()) {
209 fHistDeltaRhovsCent = new TH2F("fHistDeltaRhovsCent", "fHistDeltaRhovsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
210 fHistDeltaRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
211 fHistDeltaRhovsCent->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
212 fOutput->Add(fHistDeltaRhovsCent);
214 if (fParticleCollArray.GetEntriesFast()>0) {
215 fHistDeltaRhovsNtrack = new TH2F("fHistDeltaRhovsNtrack", "fHistDeltaRhovsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
216 fHistDeltaRhovsNtrack->GetXaxis()->SetTitle("No. of tracks");
217 fHistDeltaRhovsNtrack->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
218 fOutput->Add(fHistDeltaRhovsNtrack);
222 if (fScaleFunction) {
223 fHistRhoScaledvsCent = new TH2F("fHistRhoScaledvsCent", "fHistRhoScaledvsCent", 101, -1, 100, fNbins, fMinBinPt , fMaxBinPt*2);
224 fHistRhoScaledvsCent->GetXaxis()->SetTitle("Centrality (%)");
225 fHistRhoScaledvsCent->GetYaxis()->SetTitle("#rho_{scaled} (GeV/c * rad^{-1})");
226 fOutput->Add(fHistRhoScaledvsCent);
228 if (fParticleCollArray.GetEntriesFast()>0) {
229 fHistRhoScaledvsNtrackvsV0Mult = new TH3F("fHistRhoScaledvsNtrackvsV0Mult", "fHistRhoScaledvsNtrackvsV0Mult", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt*2,100,0.,25000.);
230 fHistRhoScaledvsNtrackvsV0Mult->GetXaxis()->SetTitle("No. of tracks");
231 fHistRhoScaledvsNtrackvsV0Mult->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
232 fHistRhoScaledvsNtrackvsV0Mult->GetZaxis()->SetTitle("V0 mult");
233 fOutput->Add(fHistRhoScaledvsNtrackvsV0Mult);
236 if (fClusterCollArray.GetEntriesFast()>0) {
237 fHistRhoScaledvsNcluster = new TH2F("fHistRhoScaledvsNcluster", "fHistRhoScaledvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
238 fHistRhoScaledvsNcluster->GetXaxis()->SetTitle("No. of clusters");
239 fHistRhoScaledvsNcluster->GetYaxis()->SetTitle("#rho_{scaled} (GeV/c * rad^{-1})");
240 fOutput->Add(fHistRhoScaledvsNcluster);
243 if (!fCompareRhoScaledName.IsNull()) {
244 fHistDeltaRhoScalevsCent = new TH2F("fHistDeltaRhoScalevsCent", "fHistDeltaRhoScalevsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
245 fHistDeltaRhoScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
246 fHistDeltaRhoScalevsCent->GetYaxis()->SetTitle("#Delta#rho_{scaled} (GeV/c * rad^{-1})");
247 fOutput->Add(fHistDeltaRhoScalevsCent);
249 if (fParticleCollArray.GetEntriesFast()>0) {
250 fHistDeltaRhoScalevsNtrack = new TH2F("fHistDeltaRhoScalevsNtrack", "fHistDeltaRhoScalevsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
251 fHistDeltaRhoScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
252 fHistDeltaRhoScalevsNtrack->GetYaxis()->SetTitle("#Delta#rho_{scaled} (GeV/c * rad^{-1})");
253 fOutput->Add(fHistDeltaRhoScalevsNtrack);
259 //________________________________________________________________________
260 Bool_t AliAnalysisTaskRhoBase::Run()
264 Double_t rho = GetRhoFactor(fCent);
265 fOutRho->SetVal(rho);
267 if (fScaleFunction) {
268 Double_t rhoScaled = rho * GetScaleFactor(fCent);
269 fOutRhoScaled->SetVal(rhoScaled);
275 //________________________________________________________________________
276 Bool_t AliAnalysisTaskRhoBase::FillHistograms()
283 AliVVZERO* vV0 = InputEvent()->GetVZEROData();
284 Float_t multV0A = vV0->GetMTotV0A();
285 Float_t multV0C = vV0->GetMTotV0C();
287 if (GetParticleContainer(0))
288 Ntracks = GetParticleContainer(0)->GetNAcceptedParticles();
289 if (GetClusterContainer(0))
290 Nclusters = GetClusterContainer(0)->GetNAcceptedClusters();
293 Int_t Njets = fJets->GetEntries();
295 Int_t NjetUE1Sigma = 0;
296 Int_t NjetUE2Sigma = 0;
297 Int_t NjetUE3Sigma = 0;
298 Double_t rhoPlus1Sigma = fOutRho->GetVal() + fInEventSigmaRho;
299 Double_t rhoPlus2Sigma = fOutRho->GetVal() + 2*fInEventSigmaRho;
300 Double_t rhoPlus3Sigma = fOutRho->GetVal() + 3*fInEventSigmaRho;
302 for (Int_t i = 0; i < Njets; ++i) {
304 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(i));
306 AliError(Form("%s: Could not receive jet %d", GetName(), i));
313 fHistJetPtvsCent->Fill(fCent, jet->Pt());
314 fHistJetAreavsCent->Fill(fCent, jet->Area());
315 fHistJetRhovsCent->Fill(fCent, jet->Pt() / jet->Area());
316 fHistJetRhovsEta[fCentBin]->Fill(jet->Pt() / jet->Area(), jet->Eta());
319 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
320 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
323 fHistJetNconstVsPt[fCentBin]->Fill(jet->GetNumberOfConstituents(), jet->Pt());
325 if (jet->Pt() < rhoPlus1Sigma * jet->Area())
328 if (jet->Pt() < rhoPlus2Sigma * jet->Area())
331 if (jet->Pt() < rhoPlus3Sigma * jet->Area())
338 fHistNjUEoverNjVsNj[fCentBin*3 ]->Fill(NjetAcc,1.*NjetUE1Sigma/NjetAcc);
339 fHistNjUEoverNjVsNj[fCentBin*3+1]->Fill(NjetAcc,1.*NjetUE2Sigma/NjetAcc);
340 fHistNjUEoverNjVsNj[fCentBin*3+2]->Fill(NjetAcc,1.*NjetUE3Sigma/NjetAcc);
343 fHistNjetvsCent->Fill(fCent, NjetAcc);
345 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
348 fHistRhovsCent->Fill(fCent, fOutRho->GetVal());
351 fHistRhovsNtrackvsV0Mult->Fill(Ntracks, fOutRho->GetVal(),multV0A+multV0C);
353 fHistRhovsNcluster->Fill(Nclusters, fOutRho->GetVal());
355 fHistDeltaRhovsCent->Fill(fCent, fOutRho->GetVal() - fCompareRho->GetVal());
357 fHistDeltaRhovsNtrack->Fill(Ntracks, fOutRho->GetVal() - fCompareRho->GetVal());
361 fHistRhoScaledvsCent->Fill(fCent, fOutRhoScaled->GetVal());
363 fHistRhoScaledvsNtrackvsV0Mult->Fill(Ntracks, fOutRhoScaled->GetVal(),multV0A+multV0C);
365 fHistRhoScaledvsNcluster->Fill(Nclusters, fOutRhoScaled->GetVal());
366 if (fCompareRhoScaled) {
367 fHistDeltaRhoScalevsCent->Fill(fCent, fOutRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
369 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, fOutRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
377 //________________________________________________________________________
378 void AliAnalysisTaskRhoBase::ExecOnce()
380 // Init the analysis.
383 fOutRho = new AliRhoParameter(fOutRhoName, 0);
385 if (fAttachToEvent) {
386 if (!(InputEvent()->FindListObject(fOutRhoName))) {
387 InputEvent()->AddObject(fOutRho);
389 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutRhoName.Data()));
395 if (fScaleFunction && !fOutRhoScaled) {
396 fOutRhoScaled = new AliRhoParameter(fOutRhoScaledName, 0);
398 if (fAttachToEvent) {
399 if (!(InputEvent()->FindListObject(fOutRhoScaledName))) {
400 InputEvent()->AddObject(fOutRhoScaled);
402 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutRhoScaledName.Data()));
408 if (!fCompareRhoName.IsNull() && !fCompareRho) {
409 fCompareRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoName));
411 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoName.Data()));
415 if (!fCompareRhoScaledName.IsNull() && !fCompareRhoScaled) {
416 fCompareRhoScaled = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoScaledName));
417 if (!fCompareRhoScaled) {
418 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoScaledName.Data()));
422 AliAnalysisTaskEmcalJet::ExecOnce();
425 //________________________________________________________________________
426 Double_t AliAnalysisTaskRhoBase::GetRhoFactor(Double_t cent)
428 // Return rho per centrality.
432 rho = fRhoFunction->Eval(cent);
436 //________________________________________________________________________
437 Double_t AliAnalysisTaskRhoBase::GetScaleFactor(Double_t cent)
443 scale = fScaleFunction->Eval(cent);