3 // Base class for rho calculation.
4 // Calculates parameterized rho for given centrality independent of input.
11 #include <TClonesArray.h>
14 #include "AliRhoParameter.h"
15 #include "AliEmcalJet.h"
17 #include "AliAnalysisTaskRhoBase.h"
19 ClassImp(AliAnalysisTaskRhoBase)
21 //________________________________________________________________________
22 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase() :
23 AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoBase", kFALSE),
26 fCompareRhoScaledName(),
29 fInEventSigmaRho(35.83),
30 fAttachToEvent(kTRUE),
35 fHistJetAreavsCent(0),
38 fHistJetPtvsNtrack(0),
39 fHistJetAreavsNtrack(0),
42 fHistRhoScaledvsCent(0),
43 fHistDeltaRhovsCent(0),
44 fHistDeltaRhoScalevsCent(0),
46 fHistRhoScaledvsNtrack(0),
47 fHistDeltaRhovsNtrack(0),
48 fHistDeltaRhoScalevsNtrack(0),
49 fHistRhovsNcluster(0),
50 fHistRhoScaledvsNcluster(0)
54 for (Int_t i = 0; i < 4; i++) {
55 fHistJetNconstVsPt[i] = 0;
56 fHistJetRhovsEta[i] = 0;
58 for (Int_t i = 0; i < 12; i++) {
59 fHistNjUEoverNjVsNj[i] = 0;
63 //________________________________________________________________________
64 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase(const char *name, Bool_t histo) :
65 AliAnalysisTaskEmcalJet(name, histo),
68 fCompareRhoScaledName(),
71 fInEventSigmaRho(35.83),
72 fAttachToEvent(kTRUE),
77 fHistJetAreavsCent(0),
80 fHistJetPtvsNtrack(0),
81 fHistJetAreavsNtrack(0),
84 fHistRhoScaledvsCent(0),
85 fHistDeltaRhovsCent(0),
86 fHistDeltaRhoScalevsCent(0),
88 fHistRhoScaledvsNtrack(0),
89 fHistDeltaRhovsNtrack(0),
90 fHistDeltaRhoScalevsNtrack(0),
91 fHistRhovsNcluster(0),
92 fHistRhoScaledvsNcluster(0)
96 for (Int_t i = 0; i < 4; i++) {
97 fHistJetNconstVsPt[i] = 0;
98 fHistJetRhovsEta[i] = 0;
100 for (Int_t i = 0; i < 12; i++) {
101 fHistNjUEoverNjVsNj[i] = 0;
103 SetMakeGeneralHistograms(histo);
106 //________________________________________________________________________
107 void AliAnalysisTaskRhoBase::UserCreateOutputObjects()
109 // User create output objects, called at the beginning of the analysis.
114 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
116 fHistRhovsCent = new TH2F("fHistRhovsCent", "fHistRhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
117 fHistRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
118 fHistRhovsCent->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
119 fOutput->Add(fHistRhovsCent);
121 if (!fTracksName.IsNull()) {
122 fHistRhovsNtrack = new TH2F("fHistRhovsNtrack", "fHistRhovsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt*2);
123 fHistRhovsNtrack->GetXaxis()->SetTitle("No. of tracks");
124 fHistRhovsNtrack->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
125 fOutput->Add(fHistRhovsNtrack);
128 if (!fCaloName.IsNull()) {
129 fHistRhovsNcluster = new TH2F("fHistRhovsNcluster", "fHistRhovsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
130 fHistRhovsNcluster->GetXaxis()->SetTitle("No. of tracks");
131 fHistRhovsNcluster->GetYaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
132 fOutput->Add(fHistRhovsNcluster);
135 if (!fJetsName.IsNull()) {
136 fHistJetPtvsCent = new TH2F("fHistJetPtvsCent", "fHistJetPtvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt);
137 fHistJetPtvsCent->GetXaxis()->SetTitle("Centrality (%)");
138 fHistJetPtvsCent->GetYaxis()->SetTitle("#it{p}_{T,jet} (GeV/c)");
139 fOutput->Add(fHistJetPtvsCent);
141 fHistJetAreavsCent = new TH2F("fHistJetAreavsCent", "fHistJetAreavsCent", 101, -1, 100, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3);
142 fHistJetAreavsCent->GetXaxis()->SetTitle("Centrality (%)");
143 fHistJetAreavsCent->GetYaxis()->SetTitle("Jet area");
144 fOutput->Add(fHistJetAreavsCent);
146 fHistJetRhovsCent = new TH2F("fHistJetRhovsCent", "fHistJetRhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
147 fHistJetRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
148 fHistJetRhovsCent->GetYaxis()->SetTitle("Jet #rho (GeV/c)");
149 fOutput->Add(fHistJetRhovsCent);
151 fHistNjetvsCent = new TH2F("fHistNjetvsCent", "fHistNjetvsCent", 101, -1, 100, 150, -0.5, 149.5);
152 fHistNjetvsCent->GetXaxis()->SetTitle("Centrality (%)");
153 fHistNjetvsCent->GetYaxis()->SetTitle("No. of jets");
154 fOutput->Add(fHistNjetvsCent);
157 if (!fTracksName.IsNull()) {
158 fHistJetPtvsNtrack = new TH2F("fHistJetPtvsNtrack", "fHistJetPtvsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt);
159 fHistJetPtvsNtrack->GetXaxis()->SetTitle("No. of tracks");
160 fHistJetPtvsNtrack->GetYaxis()->SetTitle("#it{p}_{T,jet} (GeV/c)");
161 fOutput->Add(fHistJetPtvsNtrack);
163 fHistJetAreavsNtrack = new TH2F("fHistJetAreavsNtrack", "fHistJetAreavsNtrack", 150, 0, 6000, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3);
164 fHistJetAreavsNtrack->GetXaxis()->SetTitle("No. of tracks");
165 fHistJetAreavsNtrack->GetYaxis()->SetTitle("Jet area");
166 fOutput->Add(fHistJetAreavsNtrack);
168 fHistNjetvsNtrack = new TH2F("fHistNjetvsNtrack", "fHistNjetvsNtrack", 150, 0, 6000, 150, -0.5, 149.5);
169 fHistJetAreavsNtrack->GetXaxis()->SetTitle("No. of tracks");
170 fHistJetAreavsNtrack->GetYaxis()->SetTitle("Jet area");
171 fOutput->Add(fHistNjetvsNtrack);
176 for (Int_t i = 0; i < 4; i++) {
177 name = Form("fHistJetNconstVsPt_%d",i);
178 fHistJetNconstVsPt[i] = new TH2F(name, name, 150, -0.5, 149.5, fNbins, fMinBinPt, fMaxBinPt);
179 fHistJetNconstVsPt[i]->GetXaxis()->SetTitle("No. of constituents");
180 fHistJetNconstVsPt[i]->GetYaxis()->SetTitle("p_{T,jet} (GeV/c)");
181 fOutput->Add(fHistJetNconstVsPt[i]);
183 name = Form("fHistJetRhovsEta_%d",i);
184 fHistJetRhovsEta[i] = new TH2F(name, name, fNbins, fMinBinPt, fMaxBinPt*2, 16, -0.8, 0.8);
185 fHistJetRhovsEta[i]->GetXaxis()->SetTitle("#rho (GeV/c * rad^{-1})");
186 fHistJetRhovsEta[i]->GetYaxis()->SetTitle("#eta");
187 fOutput->Add(fHistJetRhovsEta[i]);
189 for (Int_t j = 0; j < 3; j++) {
190 name = Form("NjUEoverNjVsNj_%d_%d",i,j+1);
191 fHistNjUEoverNjVsNj[i*3+j] = new TH2F(name, name, 150, -0.5, 149.5, 120, 0.01, 1.21);
192 fHistNjUEoverNjVsNj[i*3+j]->GetXaxis()->SetTitle("N_{jet}");
193 fHistNjUEoverNjVsNj[i*3+j]->GetYaxis()->SetTitle("N_{jet_{UE}} / N_{jet}");
194 fOutput->Add(fHistNjUEoverNjVsNj[i*3+j]);
199 if (!fCompareRhoName.IsNull()) {
200 fHistDeltaRhovsCent = new TH2F("fHistDeltaRhovsCent", "fHistDeltaRhovsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
201 fHistDeltaRhovsCent->GetXaxis()->SetTitle("Centrality (%)");
202 fHistDeltaRhovsCent->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
203 fOutput->Add(fHistDeltaRhovsCent);
205 if (!fTracksName.IsNull()) {
206 fHistDeltaRhovsNtrack = new TH2F("fHistDeltaRhovsNtrack", "fHistDeltaRhovsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
207 fHistDeltaRhovsNtrack->GetXaxis()->SetTitle("No. of tracks");
208 fHistDeltaRhovsNtrack->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
209 fOutput->Add(fHistDeltaRhovsNtrack);
213 if (fScaleFunction) {
214 fHistRhoScaledvsCent = new TH2F("fHistRhoScaledvsCent", "fHistRhoScaledvsCent", 101, -1, 100, fNbins, fMinBinPt , fMaxBinPt*2);
215 fHistRhoScaledvsCent->GetXaxis()->SetTitle("Centrality (%)");
216 fHistRhoScaledvsCent->GetYaxis()->SetTitle("#rho_{scaled} (GeV/c * rad^{-1})");
217 fOutput->Add(fHistRhoScaledvsCent);
219 if (!fTracksName.IsNull()) {
220 fHistRhoScaledvsNtrack = new TH2F("fHistRhoScaledvsNtrack", "fHistRhoScaledvsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt*2);
221 fHistRhoScaledvsNtrack->GetXaxis()->SetTitle("No. of tracks");
222 fHistRhoScaledvsNtrack->GetYaxis()->SetTitle("#rho_{scaled} (GeV/c * rad^{-1})");
223 fOutput->Add(fHistRhoScaledvsNtrack);
226 if (!fCaloName.IsNull()) {
227 fHistRhoScaledvsNcluster = new TH2F("fHistRhoScaledvsNcluster", "fHistRhoScaledvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
228 fHistRhoScaledvsNcluster->GetXaxis()->SetTitle("No. of clusters");
229 fHistRhoScaledvsNcluster->GetYaxis()->SetTitle("#rho_{scaled} (GeV/c * rad^{-1})");
230 fOutput->Add(fHistRhoScaledvsNcluster);
233 if (!fCompareRhoScaledName.IsNull()) {
234 fHistDeltaRhoScalevsCent = new TH2F("fHistDeltaRhoScalevsCent", "fHistDeltaRhoScalevsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
235 fHistDeltaRhoScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
236 fHistDeltaRhoScalevsCent->GetYaxis()->SetTitle("#Delta#rho_{scaled} (GeV/c * rad^{-1})");
237 fOutput->Add(fHistDeltaRhoScalevsCent);
239 if (!fTracksName.IsNull()) {
240 fHistDeltaRhoScalevsNtrack = new TH2F("fHistDeltaRhoScalevsNtrack", "fHistDeltaRhoScalevsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
241 fHistDeltaRhoScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
242 fHistDeltaRhoScalevsNtrack->GetYaxis()->SetTitle("#Delta#rho_{scaled} (GeV/c * rad^{-1})");
243 fOutput->Add(fHistDeltaRhoScalevsNtrack);
249 //________________________________________________________________________
250 Bool_t AliAnalysisTaskRhoBase::Run()
254 Double_t rho = GetRhoFactor(fCent);
257 if (fScaleFunction) {
258 Double_t rhoScaled = rho * GetScaleFactor(fCent);
259 fRhoScaled->SetVal(rhoScaled);
265 //________________________________________________________________________
266 Bool_t AliAnalysisTaskRhoBase::FillHistograms()
274 Ntracks = fTracks->GetEntries();
276 Nclusters = fCaloClusters->GetEntries();
279 Int_t Njets = fJets->GetEntries();
281 Int_t NjetUE1Sigma = 0;
282 Int_t NjetUE2Sigma = 0;
283 Int_t NjetUE3Sigma = 0;
284 Double_t rhoPlus1Sigma = fRho->GetVal() + fInEventSigmaRho;
285 Double_t rhoPlus2Sigma = fRho->GetVal() + 2*fInEventSigmaRho;
286 Double_t rhoPlus3Sigma = fRho->GetVal() + 3*fInEventSigmaRho;
288 for (Int_t i = 0; i < Njets; ++i) {
290 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(i));
292 AliError(Form("%s: Could not receive jet %d", GetName(), i));
299 fHistJetPtvsCent->Fill(fCent, jet->Pt());
300 fHistJetAreavsCent->Fill(fCent, jet->Area());
301 fHistJetRhovsCent->Fill(fCent, jet->Pt() / jet->Area());
302 fHistJetRhovsEta[fCentBin]->Fill(jet->Pt() / jet->Area(), jet->Eta());
305 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
306 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
309 fHistJetNconstVsPt[fCentBin]->Fill(jet->GetNumberOfConstituents(), jet->Pt());
311 if (jet->Pt() < rhoPlus1Sigma * jet->Area())
314 if (jet->Pt() < rhoPlus2Sigma * jet->Area())
317 if (jet->Pt() < rhoPlus3Sigma * jet->Area())
324 fHistNjUEoverNjVsNj[fCentBin*3 ]->Fill(NjetAcc,1.*NjetUE1Sigma/NjetAcc);
325 fHistNjUEoverNjVsNj[fCentBin*3+1]->Fill(NjetAcc,1.*NjetUE2Sigma/NjetAcc);
326 fHistNjUEoverNjVsNj[fCentBin*3+2]->Fill(NjetAcc,1.*NjetUE3Sigma/NjetAcc);
329 fHistNjetvsCent->Fill(fCent, NjetAcc);
331 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
334 fHistRhovsCent->Fill(fCent, fRho->GetVal());
337 fHistRhovsNtrack->Fill(Ntracks, fRho->GetVal());
339 fHistRhovsNcluster->Fill(Nclusters, fRho->GetVal());
341 fHistDeltaRhovsCent->Fill(fCent, fRho->GetVal() - fCompareRho->GetVal());
343 fHistDeltaRhovsNtrack->Fill(Ntracks, fRho->GetVal() - fCompareRho->GetVal());
347 fHistRhoScaledvsCent->Fill(fCent, fRhoScaled->GetVal());
349 fHistRhoScaledvsNtrack->Fill(Ntracks, fRhoScaled->GetVal());
351 fHistRhoScaledvsNcluster->Fill(Nclusters, fRhoScaled->GetVal());
352 if (fCompareRhoScaled) {
353 fHistDeltaRhoScalevsCent->Fill(fCent, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
355 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
363 //________________________________________________________________________
364 void AliAnalysisTaskRhoBase::ExecOnce()
366 // Init the analysis.
369 fRho = new AliRhoParameter(fRhoName, 0);
371 if (fAttachToEvent) {
372 if (!(InputEvent()->FindListObject(fRhoName))) {
373 InputEvent()->AddObject(fRho);
375 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoName.Data()));
380 if (fScaleFunction && !fRhoScaled) {
381 fRhoScaled = new AliRhoParameter(fRhoScaledName, 0);
382 if (fAttachToEvent) {
383 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
384 InputEvent()->AddObject(fRhoScaled);
386 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoScaledName.Data()));
393 if (!fCompareRhoName.IsNull() && !fCompareRho) {
394 fCompareRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoName));
396 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoName.Data()));
400 if (!fCompareRhoScaledName.IsNull() && !fCompareRhoScaled) {
401 fCompareRhoScaled = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoScaledName));
402 if (!fCompareRhoScaled) {
403 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoScaledName.Data()));
407 AliAnalysisTaskEmcalJet::ExecOnce();
410 //________________________________________________________________________
411 Double_t AliAnalysisTaskRhoBase::GetRhoFactor(Double_t cent)
413 // Return rho per centrality.
417 rho = fRhoFunction->Eval(cent);
421 //________________________________________________________________________
422 Double_t AliAnalysisTaskRhoBase::GetScaleFactor(Double_t cent)
428 scale = fScaleFunction->Eval(cent);