3 // Base class for rho calculation.
4 // Calculates parameterized rho for given centrality independent of input.
11 #include <TClonesArray.h>
13 #include "AliAnalysisManager.h"
15 #include "AliRhoParameter.h"
16 #include "AliEmcalJet.h"
18 #include "AliAnalysisTaskRhoBase.h"
20 ClassImp(AliAnalysisTaskRhoBase)
22 //________________________________________________________________________
23 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase() :
24 AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoBase", kFALSE),
27 fCompareRhoScaledName(),
30 fInEventSigmaRho(71.66),
35 fHistJetAreavsCent(0),
37 fHistJetPtvsNtrack(0),
38 fHistJetAreavsNtrack(0),
41 fHistRhoScaledvsCent(0),
42 fHistDeltaRhovsCent(0),
43 fHistDeltaRhoScalevsCent(0),
45 fHistRhoScaledvsNtrack(0),
46 fHistDeltaRhovsNtrack(0),
47 fHistDeltaRhoScalevsNtrack(0),
48 fHistRhovsNcluster(0),
49 fHistRhoScaledvsNcluster(0)
52 for (Int_t i = 0; i < 4; i++) {
54 fHistNjUEoverNjVsNj[i] = 0;
58 //________________________________________________________________________
59 AliAnalysisTaskRhoBase::AliAnalysisTaskRhoBase(const char *name, Bool_t histo) :
60 AliAnalysisTaskEmcalJet(name, histo),
63 fCompareRhoScaledName(),
66 fInEventSigmaRho(71.66),
71 fHistJetAreavsCent(0),
73 fHistJetPtvsNtrack(0),
74 fHistJetAreavsNtrack(0),
77 fHistRhoScaledvsCent(0),
78 fHistDeltaRhovsCent(0),
79 fHistDeltaRhoScalevsCent(0),
81 fHistRhoScaledvsNtrack(0),
82 fHistDeltaRhovsNtrack(0),
83 fHistDeltaRhoScalevsNtrack(0),
84 fHistRhovsNcluster(0),
85 fHistRhoScaledvsNcluster(0)
89 for (Int_t i = 0; i < 4; i++) {
91 fHistNjUEoverNjVsNj[i] = 0;
94 SetMakeGeneralHistograms(histo);
97 //________________________________________________________________________
98 void AliAnalysisTaskRhoBase::UserCreateOutputObjects()
100 // User create output objects, called at the beginning of the analysis.
105 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
107 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
108 fOutput->Add(fHistRhovsCent);
110 if (!fTracksName.IsNull()) {
111 fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt*2);
112 fOutput->Add(fHistRhovsNtrack);
115 if (!fCaloName.IsNull()) {
116 fHistRhovsNcluster = new TH2F("RhovsNcluster", "RhovsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
117 fOutput->Add(fHistRhovsNcluster);
120 if (!fJetsName.IsNull()) {
121 fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt);
122 fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3);
123 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 150, -0.5, 149.5);
125 fOutput->Add(fHistJetPtvsCent);
126 fOutput->Add(fHistJetAreavsCent);
127 fOutput->Add(fHistNjetvsCent);
129 if (!fTracksName.IsNull()) {
130 fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt);
131 fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 125, 0, 4000, 30, 0, fJetRadius * fJetRadius * TMath::Pi() * 3);
132 fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 125, 0, 4000, 150, -0.5, 149.5);
134 fOutput->Add(fHistJetPtvsNtrack);
135 fOutput->Add(fHistJetAreavsNtrack);
136 fOutput->Add(fHistNjetvsNtrack);
139 for (Int_t i = 0; i < 4; i++) {
140 TString name1(Form("NjUEvsNj_%d",i));
141 fHistNjUEvsNj[i] = new TH2F(name1, name1, 150, -0.5, 149.5, 150, -0.5, 149.5);
142 fHistNjUEvsNj[i]->GetXaxis()->SetTitle("N_{jet}");
143 fHistNjUEvsNj[i]->GetYaxis()->SetTitle("N_{jet_{UE}}");
144 fOutput->Add(fHistNjUEvsNj[i]);
146 TString name2(Form("NjUEoverNjVsNj_%d",i));
147 fHistNjUEoverNjVsNj[i] = new TH2F(name2, name2, 150, -0.5, 149.5, 120, -0.01, 1.19);
148 fHistNjUEoverNjVsNj[i]->GetXaxis()->SetTitle("N_{jet_{UE}} / N_{jet}");
149 fHistNjUEoverNjVsNj[i]->GetYaxis()->SetTitle("N_{jet}");
150 fOutput->Add(fHistNjUEoverNjVsNj[i]);
154 if (!fCompareRhoName.IsNull()) {
155 fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
156 fOutput->Add(fHistDeltaRhovsCent);
157 if (!fTracksName.IsNull()) {
158 fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 125, 0, 4000, fNbins, -fMaxBinPt, fMaxBinPt);
159 fOutput->Add(fHistDeltaRhovsNtrack);
163 if (fScaleFunction) {
164 fHistRhoScaledvsCent = new TH2F("RhoScaledvsCent", "RhoScalevsCent", 101, -1, 100, fNbins, fMinBinPt , fMaxBinPt*2);
165 fOutput->Add(fHistRhoScaledvsCent);
167 if (!fTracksName.IsNull()) {
168 fHistRhoScaledvsNtrack = new TH2F("RhoScaledvsNtrack", "RhoScaledvsNtrack", 125, 0, 4000, fNbins, fMinBinPt, fMaxBinPt*2);
169 fOutput->Add(fHistRhoScaledvsNtrack);
172 if (!fCaloName.IsNull()) {
173 fHistRhoScaledvsNcluster = new TH2F("RhoScaledvsNcluster", "RhoScaledvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
174 fOutput->Add(fHistRhoScaledvsNcluster);
177 if (!fCompareRhoScaledName.IsNull()) {
178 fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
179 fOutput->Add(fHistDeltaRhoScalevsCent);
181 if (!fTracksName.IsNull()) {
182 fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 125, 0, 4000, fNbins, -fMaxBinPt, fMaxBinPt);
183 fOutput->Add(fHistDeltaRhoScalevsNtrack);
189 //________________________________________________________________________
190 Bool_t AliAnalysisTaskRhoBase::Run()
194 Double_t rho = GetRhoFactor(fCent);
197 if (fScaleFunction) {
198 Double_t rhoScaled = rho * GetScaleFactor(fCent);
199 fRhoScaled->SetVal(rhoScaled);
205 //________________________________________________________________________
206 Bool_t AliAnalysisTaskRhoBase::FillHistograms()
214 Ntracks = fTracks->GetEntriesFast();
216 Nclusters = fCaloClusters->GetEntriesFast();
219 Int_t Njets = fJets->GetEntries();
222 Double_t rhoPlusSigma = fRho->GetVal() + fInEventSigmaRho;
224 for (Int_t i = 0; i < Njets; ++i) {
226 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(i));
228 AliError(Form("%s: Could not receive jet %d", GetName(), i));
235 fHistJetPtvsCent->Fill(fCent, jet->Pt());
236 fHistJetAreavsCent->Fill(fCent, jet->Area());
239 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
240 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
243 if (jet->Pt() < rhoPlusSigma * jet->Area())
249 fHistNjUEvsNj[fCentBin]->Fill(NjetAcc,NjetUE);
252 fHistNjUEoverNjVsNj[fCentBin]->Fill(NjetAcc,1.*NjetUE/NjetAcc);
254 fHistNjetvsCent->Fill(fCent, NjetAcc);
256 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
259 fHistRhovsCent->Fill(fCent, fRho->GetVal());
262 fHistRhovsNtrack->Fill(Ntracks, fRho->GetVal());
264 fHistRhovsNcluster->Fill(Nclusters, fRho->GetVal());
266 fHistDeltaRhovsCent->Fill(fCent, fRho->GetVal() - fCompareRho->GetVal());
268 fHistDeltaRhovsNtrack->Fill(Ntracks, fRho->GetVal() - fCompareRho->GetVal());
271 if (fScaleFunction) {
272 fHistRhoScaledvsCent->Fill(fCent, fRhoScaled->GetVal());
274 fHistRhoScaledvsNtrack->Fill(Ntracks, fRhoScaled->GetVal());
276 fHistRhoScaledvsNcluster->Fill(Nclusters, fRhoScaled->GetVal());
277 if (fCompareRhoScaled) {
278 fHistDeltaRhoScalevsCent->Fill(fCent, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
280 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, fRhoScaled->GetVal() - fCompareRhoScaled->GetVal());
288 //________________________________________________________________________
289 void AliAnalysisTaskRhoBase::ExecOnce()
291 // Init the analysis.
293 // add rho to event if not yet there
294 fRho = new AliRhoParameter(fRhoName, 0);
296 if (!(InputEvent()->FindListObject(fRhoName))) {
297 InputEvent()->AddObject(fRho);
299 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoName.Data()));
303 if (fScaleFunction) {
304 fRhoScaled = new AliRhoParameter(fRhoScaledName, 0);
305 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
306 InputEvent()->AddObject(fRhoScaled);
308 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoScaledName.Data()));
313 if (!fCompareRhoName.IsNull() && !fCompareRho) {
314 fCompareRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoName));
316 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoName.Data()));
320 if (!fCompareRhoScaledName.IsNull() && !fCompareRhoScaled) {
321 fCompareRhoScaled = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoScaledName));
322 if (!fCompareRhoScaled) {
323 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoScaledName.Data()));
327 AliAnalysisTaskEmcalJet::ExecOnce();
330 //________________________________________________________________________
331 Double_t AliAnalysisTaskRhoBase::GetRhoFactor(Double_t cent)
333 // Return rho per centrality.
337 rho = fRhoFunction->Eval(cent);
341 //________________________________________________________________________
342 Double_t AliAnalysisTaskRhoBase::GetScaleFactor(Double_t cent)
348 scale = fScaleFunction->Eval(cent);