3 // Calculation of rho from a collection of jets.
4 // If scale function is given the scaled rho will be exported
5 // with the name as "fRhoName".apppend("_Scaled").
7 // Authors: R.Reed, S.Aiola
9 #include "AliAnalysisTaskRho.h"
11 #include <TClonesArray.h>
18 #include "AliAnalysisManager.h"
19 #include "AliCentrality.h"
20 #include "AliEmcalJet.h"
22 #include "AliRhoParameter.h"
23 #include "AliVCluster.h"
24 #include "AliVEventHandler.h"
26 ClassImp(AliAnalysisTaskRho)
28 //________________________________________________________________________
29 AliAnalysisTaskRho::AliAnalysisTaskRho() :
30 AliAnalysisTaskRhoBase(),
31 fTracksName("tracks"),
49 fHistDeltaRhovsCent(0),
50 fHistDeltaRhoScalevsCent(0),
52 fHistJetAreavsCent(0),
55 fHistDeltaRhovsNtrack(0),
56 fHistDeltaRhoScalevsNtrack(0),
57 fHistJetPtvsNtrack(0),
58 fHistJetAreavsNtrack(0),
65 //________________________________________________________________________
66 AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name, Bool_t histo) :
67 AliAnalysisTaskRhoBase(name),
68 fTracksName("tracks"),
72 fPhiMax(TMath::TwoPi()),
86 fHistDeltaRhovsCent(0),
87 fHistDeltaRhoScalevsCent(0),
89 fHistJetAreavsCent(0),
92 fHistDeltaRhovsNtrack(0),
93 fHistDeltaRhoScalevsNtrack(0),
94 fHistJetPtvsNtrack(0),
95 fHistJetAreavsNtrack(0),
102 DefineOutput(1, TList::Class());
105 //________________________________________________________________________
106 void AliAnalysisTaskRho::UserCreateOutputObjects()
108 // User create output objects, called at the beginning of the analysis.
110 AliAnalysisTaskRhoBase::UserCreateOutputObjects();
112 if (fScaleFunction) {
113 fRhoScaledName = fRhoName;
114 fRhoScaledName += "_Scaled";
115 fRhoScaled = new AliRhoParameter(fRhoScaledName, 0);
122 fOutputList = new TList();
123 fOutputList->SetOwner();
125 fHistCentrality = new TH1F("Centrality", "Centrality", 101, -1, 100);
126 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, 500, 0, 500);
127 fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, 500, -250, 250);
128 fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, 500, -250, 250);
129 fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, 200, 0, 500);
130 fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 100, 0, 1.0);
131 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 100, 0, 100);
133 fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 500, 0, 2500, 500, 0, 500);
134 fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 500, 0, 2500, 500, -250, 250);
135 fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 500, 0, 2500, 500, -250, 250);
136 fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 500, 0, 2500, 200, 0, 500);
137 fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 500, 0, 2500, 100, 0, 1.0);
138 fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 500, 0, 2500, 100, 0, 100);
140 fHistJetPt = new TH1F("JetPt", "Jet Pt", 100, 0, 250);
141 fHistJetArea = new TH1F("JetArea", "Jet Area", 100, 0.0, 1.0);
143 fOutputList->Add(fHistCentrality);
144 fOutputList->Add(fHistRhovsCent);
145 fOutputList->Add(fHistJetPt);
146 fOutputList->Add(fHistJetArea);
147 fOutputList->Add(fHistDeltaRhovsCent);
148 fOutputList->Add(fHistDeltaRhoScalevsCent);
149 fOutputList->Add(fHistJetPtvsCent);
150 fOutputList->Add(fHistJetAreavsCent);
151 fOutputList->Add(fHistNjetvsCent);
153 fOutputList->Add(fHistRhovsNtrack);
154 fOutputList->Add(fHistDeltaRhovsNtrack);
155 fOutputList->Add(fHistDeltaRhoScalevsNtrack);
156 fOutputList->Add(fHistJetPtvsNtrack);
157 fOutputList->Add(fHistJetAreavsNtrack);
158 fOutputList->Add(fHistNjetvsNtrack);
160 PostData(1, fOutputList);
163 //________________________________________________________________________
164 void AliAnalysisTaskRho::UserExec(Option_t *)
166 // Main loop, called for each event.
175 fRhoScaled->SetVal(-1);
179 const Int_t Njets = fJets->GetEntries();
181 Int_t maxJetIds[] = {-1, -1};
182 Float_t maxJetPts[] = { 0, 0};
184 if (fNExclLeadJets > 0) {
185 for (Int_t ij = 0; ij < Njets; ++ij) {
186 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ij));
188 AliError(Form("%s: Could not receive jet %d", GetName(), ij));
191 if (jet->Pt() > maxJetPts[0]) {
192 maxJetPts[1] = maxJetPts[0];
193 maxJetIds[1] = maxJetIds[0];
194 maxJetPts[0] = jet->Pt();
196 } else if (jet->Pt() > maxJetPts[1]) {
197 maxJetPts[1] = jet->Pt();
201 if (fNExclLeadJets < 2) {
207 static Double_t rhovec[999];
210 // push all jets within selected acceptance into stack
211 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
213 // exlcuding lead jets
214 if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
217 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
221 // applying some other cuts
222 if (jet->Area() < fAreaCut)
224 if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
226 if ((jet->Eta() < fEtaMin) || (jet->Eta() > fEtaMax))
229 rhovec[NjetAcc] = jet->Pt() / jet->Area();
234 // filling histograms
235 const Int_t Ntracks = fTracks->GetEntriesFast();
236 fHistJetPt->Fill(jet->Pt());
237 fHistJetArea->Fill(jet->Area());
238 fHistJetPtvsCent->Fill(fCent, jet->Pt());
239 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
240 fHistJetAreavsCent->Fill(fCent, jet->Area());
241 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
247 Double_t rho0 = TMath::Median(NjetAcc, rhovec);
250 Double_t rhoScaled = rho0;
252 rhoScaled *= GetScaleFactor(fCent);
253 fRhoScaled->SetVal(rhoScaled);
257 // filling other histograms
258 Double_t rho = GetRhoFactor(fCent);
259 const Int_t Ntracks = fTracks->GetEntriesFast();
260 fHistRhovsCent->Fill(fCent, rho0);
261 fHistDeltaRhovsCent->Fill(fCent, rho0 - rho);
262 fHistDeltaRhoScalevsCent->Fill(fCent, rhoScaled - rho);
263 fHistRhovsNtrack->Fill(Ntracks, rho0);
264 fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rho);
265 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rhoScaled - rho);
270 const Int_t Ntracks = fTracks->GetEntriesFast();
271 fHistCentrality->Fill(fCent);
272 fHistNjetvsCent->Fill(fCent, NjetAcc);
273 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
274 PostData(1, fOutputList);
278 //________________________________________________________________________
279 void AliAnalysisTaskRho::ExecOnce()
281 // Initialize some settings that need to be determined in UserExec.
283 AliAnalysisTaskRhoBase::ExecOnce();
286 // add rho to event if not yet there
287 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
288 InputEvent()->AddObject(fRhoScaled);
290 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoScaledName.Data()));
296 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
298 AliError(Form("%s: Pointer to tracks %s == 0", GetName(), fTracksName.Data() ));
303 fJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
305 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fJetsName.Data() ));
310 //________________________________________________________________________
311 Double_t AliAnalysisTaskRho::GetScaleFactor(Double_t cent)
317 scale = fScaleFunction->Eval(cent);