3 // Base class for rho mass calculation.
4 // Calculates parameterized rho mass for given centrality independent of input.
6 // Author: M. Verweij. Similar to AliAnalysisTaskRhoBase
11 #include <TClonesArray.h>
14 #include "AliRhoParameter.h"
15 #include "AliEmcalJet.h"
17 #include "AliAnalysisTaskRhoMassBase.h"
19 ClassImp(AliAnalysisTaskRhoMassBase)
21 //________________________________________________________________________
22 AliAnalysisTaskRhoMassBase::AliAnalysisTaskRhoMassBase() :
23 AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoMassBase", kFALSE),
25 fOutRhoMassScaledName(),
26 fCompareRhoMassName(),
27 fCompareRhoMassScaledName(),
30 fAttachToEvent(kTRUE),
34 fCompareRhoMassScaled(0),
35 fHistJetMassvsCent(0),
36 fHistJetRhoMassvsCent(0),
37 fHistRhoMassvsCent(0),
38 fHistRhoMassScaledvsCent(0),
39 fHistDeltaRhoMassvsCent(0),
40 fHistDeltaRhoMassScalevsCent(0),
41 fHistRhoMassvsNtrack(0),
42 fHistRhoMassScaledvsNtrack(0),
43 fHistDeltaRhoMassvsNtrack(0),
44 fHistDeltaRhoMassScalevsNtrack(0),
45 fHistRhoMassvsNcluster(0),
46 fHistRhoMassScaledvsNcluster(0),
51 for (Int_t i = 0; i < 4; i++)
52 fHistJetRhoMassvsEta[i] = 0;
55 //________________________________________________________________________
56 AliAnalysisTaskRhoMassBase::AliAnalysisTaskRhoMassBase(const char *name, Bool_t histo) :
57 AliAnalysisTaskEmcalJet(name, histo),
59 fOutRhoMassScaledName(),
60 fCompareRhoMassName(),
61 fCompareRhoMassScaledName(),
64 fAttachToEvent(kTRUE),
68 fCompareRhoMassScaled(0),
69 fHistJetMassvsCent(0),
70 fHistJetRhoMassvsCent(0),
71 fHistRhoMassvsCent(0),
72 fHistRhoMassScaledvsCent(0),
73 fHistDeltaRhoMassvsCent(0),
74 fHistDeltaRhoMassScalevsCent(0),
75 fHistRhoMassvsNtrack(0),
76 fHistRhoMassScaledvsNtrack(0),
77 fHistDeltaRhoMassvsNtrack(0),
78 fHistDeltaRhoMassScalevsNtrack(0),
79 fHistRhoMassvsNcluster(0),
80 fHistRhoMassScaledvsNcluster(0),
85 for (Int_t i = 0; i < 4; i++)
86 fHistJetRhoMassvsEta[i] = 0;
88 SetMakeGeneralHistograms(histo);
91 //________________________________________________________________________
92 void AliAnalysisTaskRhoMassBase::UserCreateOutputObjects()
94 // User create output objects, called at the beginning of the analysis.
99 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
101 fHistRhoMassvsCent = new TH2F("fHistRhoMassvsCent", "fHistRhoMassvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt/2.);
102 fHistRhoMassvsCent->GetXaxis()->SetTitle("Centrality (%)");
103 fHistRhoMassvsCent->GetYaxis()->SetTitle("#rho_{m} (GeV/c * rad^{-1})");
104 fOutput->Add(fHistRhoMassvsCent);
106 if (fParticleCollArray.GetEntriesFast()>0) {
107 fHistRhoMassvsNtrack = new TH2F("fHistRhoMassvsNtrack", "fHistRhoMassvsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt/2);
108 fHistRhoMassvsNtrack->GetXaxis()->SetTitle("No. of tracks");
109 fHistRhoMassvsNtrack->GetYaxis()->SetTitle("#rho_{m} (GeV/c * rad^{-1})");
110 fOutput->Add(fHistRhoMassvsNtrack);
113 fHistGammaVsNtrack = new TH2F("fHistGammaVsNtrack", "fHistGammaVsNtrack", 150, 0, 6000, 100,0.,10.);
114 fHistGammaVsNtrack->GetXaxis()->SetTitle("No. of tracks");
115 fHistGammaVsNtrack->GetYaxis()->SetTitle("#gamma = #LT E #GT / #LT M #GT");
116 fOutput->Add(fHistGammaVsNtrack);
119 if (fClusterCollArray.GetEntriesFast()>0) {
120 fHistRhoMassvsNcluster = new TH2F("fHistRhoMassvsNcluster", "fHistRhoMassvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt/2);
121 fHistRhoMassvsNcluster->GetXaxis()->SetTitle("No. of tracks");
122 fHistRhoMassvsNcluster->GetYaxis()->SetTitle("#rho_{m} (GeV/c * rad^{-1})");
123 fOutput->Add(fHistRhoMassvsNcluster);
126 if (fJetCollArray.GetEntriesFast()>0) {
127 fHistJetMassvsCent = new TH2F("fHistJetMassvsCent", "fHistJetMassvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt);
128 fHistJetMassvsCent->GetXaxis()->SetTitle("Centrality (%)");
129 fHistJetMassvsCent->GetYaxis()->SetTitle("#it{M}_{jet} (GeV/c)");
130 fOutput->Add(fHistJetMassvsCent);
132 fHistJetRhoMassvsCent = new TH2F("fHistJetRhoMassvsCent", "fHistJetRhoMassvsCent", 101, -1, 100, fNbins, fMinBinPt, fMaxBinPt*2);
133 fHistJetRhoMassvsCent->GetXaxis()->SetTitle("Centrality (%)");
134 fHistJetRhoMassvsCent->GetYaxis()->SetTitle("Jet #rho_{m} (GeV/c)");
135 fOutput->Add(fHistJetRhoMassvsCent);
139 for (Int_t i = 0; i < 4; i++) {
140 name = Form("fHistJetRhoMassvsEta_%d",i);
141 fHistJetRhoMassvsEta[i] = new TH2F(name, name, fNbins, fMinBinPt, fMaxBinPt*2, 16, -0.8, 0.8);
142 fHistJetRhoMassvsEta[i]->GetXaxis()->SetTitle("#rho_{m} (GeV/c)");
143 fHistJetRhoMassvsEta[i]->GetYaxis()->SetTitle("#eta");
144 fOutput->Add(fHistJetRhoMassvsEta[i]);
148 if (!fCompareRhoMassName.IsNull()) {
149 fHistDeltaRhoMassvsCent = new TH2F("fHistDeltaRhoMassvsCent", "fHistDeltaRhoMassvsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
150 fHistDeltaRhoMassvsCent->GetXaxis()->SetTitle("Centrality (%)");
151 fHistDeltaRhoMassvsCent->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
152 fOutput->Add(fHistDeltaRhoMassvsCent);
154 if (fParticleCollArray.GetEntriesFast()>0) {
155 fHistDeltaRhoMassvsNtrack = new TH2F("fHistDeltaRhoMassvsNtrack", "fHistDeltaRhoMassvsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
156 fHistDeltaRhoMassvsNtrack->GetXaxis()->SetTitle("No. of tracks");
157 fHistDeltaRhoMassvsNtrack->GetYaxis()->SetTitle("#Delta#rho (GeV/c * rad^{-1})");
158 fOutput->Add(fHistDeltaRhoMassvsNtrack);
162 if (fScaleFunction) {
163 fHistRhoMassScaledvsCent = new TH2F("fHistRhoMassScaledvsCent", "fHistRhoMassScaledvsCent", 101, -1, 100, fNbins, fMinBinPt , fMaxBinPt*2);
164 fHistRhoMassScaledvsCent->GetXaxis()->SetTitle("Centrality (%)");
165 fHistRhoMassScaledvsCent->GetYaxis()->SetTitle("#rho_{m,scaled} (GeV/c * rad^{-1})");
166 fOutput->Add(fHistRhoMassScaledvsCent);
168 if (fParticleCollArray.GetEntriesFast()>0) {
169 fHistRhoMassScaledvsNtrack = new TH2F("fHistRhoMassScaledvsNtrack", "fHistRhoMassScaledvsNtrack", 150, 0, 6000, fNbins, fMinBinPt, fMaxBinPt*2);
170 fHistRhoMassScaledvsNtrack->GetXaxis()->SetTitle("No. of tracks");
171 fHistRhoMassScaledvsNtrack->GetYaxis()->SetTitle("#rho_{m,scaled} (GeV/c * rad^{-1})");
172 fOutput->Add(fHistRhoMassScaledvsNtrack);
175 if (fClusterCollArray.GetEntriesFast()>0) {
176 fHistRhoMassScaledvsNcluster = new TH2F("fHistRhoMassScaledvsNcluster", "fHistRhoMassScaledvsNcluster", 50, 0, 1500, fNbins, fMinBinPt, fMaxBinPt*2);
177 fHistRhoMassScaledvsNcluster->GetXaxis()->SetTitle("No. of clusters");
178 fHistRhoMassScaledvsNcluster->GetYaxis()->SetTitle("#rho_{m,scaled} (GeV/c * rad^{-1})");
179 fOutput->Add(fHistRhoMassScaledvsNcluster);
182 if (!fCompareRhoMassScaledName.IsNull()) {
183 fHistDeltaRhoMassScalevsCent = new TH2F("fHistDeltaRhoMassScalevsCent", "fHistDeltaRhoMassScalevsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
184 fHistDeltaRhoMassScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
185 fHistDeltaRhoMassScalevsCent->GetYaxis()->SetTitle("#Delta#rho_{m,scaled} (GeV/c * rad^{-1})");
186 fOutput->Add(fHistDeltaRhoMassScalevsCent);
188 if (fParticleCollArray.GetEntriesFast()>0) {
189 fHistDeltaRhoMassScalevsNtrack = new TH2F("fHistDeltaRhoMassScalevsNtrack", "fHistDeltaRhoMassScalevsNtrack", 150, 0, 6000, fNbins, -fMaxBinPt, fMaxBinPt);
190 fHistDeltaRhoMassScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
191 fHistDeltaRhoMassScalevsNtrack->GetYaxis()->SetTitle("#Delta#rho_{m,scaled} (GeV/c * rad^{-1})");
192 fOutput->Add(fHistDeltaRhoMassScalevsNtrack);
198 //________________________________________________________________________
199 Bool_t AliAnalysisTaskRhoMassBase::Run()
203 Double_t rhom = GetRhoMassFactor(fCent);
204 fOutRhoMass->SetVal(rhom);
206 if (fScaleFunction) {
207 Double_t rhomScaled = rhom * GetScaleFactor(fCent);
208 fOutRhoMassScaled->SetVal(rhomScaled);
214 //________________________________________________________________________
215 Bool_t AliAnalysisTaskRhoMassBase::FillHistograms()
223 Ntracks = fTracks->GetEntries();
225 Nclusters = fCaloClusters->GetEntries();
228 Int_t Njets = fJets->GetEntries();
231 for (Int_t i = 0; i < Njets; ++i) {
232 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(i));
234 AliError(Form("%s: Could not receive jet %d", GetName(), i));
241 fHistJetMassvsCent->Fill(fCent, jet->M());
242 fHistJetRhoMassvsCent->Fill(fCent, jet->M() / jet->Area());
243 fHistJetRhoMassvsEta[fCentBin]->Fill(jet->M() / jet->Area(), jet->Eta());
249 fHistRhoMassvsCent->Fill(fCent, fOutRhoMass->GetVal());
252 fHistRhoMassvsNtrack->Fill(Ntracks, fOutRhoMass->GetVal());
254 fHistRhoMassvsNcluster->Fill(Nclusters, fOutRhoMass->GetVal());
255 if (fCompareRhoMass) {
256 fHistDeltaRhoMassvsCent->Fill(fCent, fOutRhoMass->GetVal() - fCompareRhoMass->GetVal());
258 fHistDeltaRhoMassvsNtrack->Fill(Ntracks, fOutRhoMass->GetVal() - fCompareRhoMass->GetVal());
261 if (fOutRhoMassScaled) {
262 fHistRhoMassScaledvsCent->Fill(fCent, fOutRhoMassScaled->GetVal());
264 fHistRhoMassScaledvsNtrack->Fill(Ntracks, fOutRhoMassScaled->GetVal());
266 fHistRhoMassScaledvsNcluster->Fill(Nclusters, fOutRhoMassScaled->GetVal());
267 if (fCompareRhoMassScaled) {
268 fHistDeltaRhoMassScalevsCent->Fill(fCent, fOutRhoMassScaled->GetVal() - fCompareRhoMassScaled->GetVal());
270 fHistDeltaRhoMassScalevsNtrack->Fill(Ntracks, fOutRhoMassScaled->GetVal() - fCompareRhoMassScaled->GetVal());
278 //________________________________________________________________________
279 void AliAnalysisTaskRhoMassBase::ExecOnce()
281 // Init the analysis.
284 fOutRhoMass = new AliRhoParameter(fOutRhoMassName, 0);
286 if (fAttachToEvent) {
287 if (!(InputEvent()->FindListObject(fOutRhoMassName))) {
288 InputEvent()->AddObject(fOutRhoMass);
290 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutRhoMassName.Data()));
296 if (fScaleFunction && !fOutRhoMassScaled) {
297 fOutRhoMassScaled = new AliRhoParameter(fOutRhoMassScaledName, 0);
299 if (fAttachToEvent) {
300 if (!(InputEvent()->FindListObject(fOutRhoMassScaledName))) {
301 InputEvent()->AddObject(fOutRhoMassScaled);
303 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutRhoMassScaledName.Data()));
309 if (!fCompareRhoMassName.IsNull() && !fCompareRhoMass) {
310 fCompareRhoMass = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoMassName));
311 if (!fCompareRhoMass) {
312 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoMassName.Data()));
316 if (!fCompareRhoMassScaledName.IsNull() && !fCompareRhoMassScaled) {
317 fCompareRhoMassScaled = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fCompareRhoMassScaledName));
318 if (!fCompareRhoMassScaled) {
319 AliWarning(Form("%s: Could not retrieve rho %s!", GetName(), fCompareRhoMassScaledName.Data()));
323 AliAnalysisTaskEmcalJet::ExecOnce();
326 //________________________________________________________________________
327 Double_t AliAnalysisTaskRhoMassBase::GetRhoMassFactor(Double_t cent)
329 // Return rho per centrality.
332 if (fRhoMassFunction)
333 rho = fRhoMassFunction->Eval(cent);
337 //________________________________________________________________________
338 Double_t AliAnalysisTaskRhoMassBase::GetScaleFactor(Double_t cent)
344 scale = fScaleFunction->Eval(cent);