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.
178 fRhoScaled->SetVal(-1);
182 const Int_t Njets = fJets->GetEntries();
184 Int_t maxJetIds[] = {-1, -1};
185 Float_t maxJetPts[] = { 0, 0};
187 if (fNExclLeadJets > 0) {
188 for (Int_t ij = 0; ij < Njets; ++ij) {
189 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ij));
191 AliError(Form("%s: Could not receive jet %d", GetName(), ij));
194 if (jet->Pt() > maxJetPts[0]) {
195 maxJetPts[1] = maxJetPts[0];
196 maxJetIds[1] = maxJetIds[0];
197 maxJetPts[0] = jet->Pt();
199 } else if (jet->Pt() > maxJetPts[1]) {
200 maxJetPts[1] = jet->Pt();
204 if (fNExclLeadJets < 2) {
210 static Double_t rhovec[999];
213 // push all jets within selected acceptance into stack
214 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
216 // exlcuding lead jets
217 if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
220 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
224 // applying some other cuts
225 if (jet->Area() < fAreaCut)
227 if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
229 if ((jet->Eta() < fEtaMin) || (jet->Eta() > fEtaMax))
232 rhovec[NjetAcc] = jet->Pt() / jet->Area();
237 // filling histograms
238 const Int_t Ntracks = fTracks->GetEntriesFast();
239 fHistJetPt->Fill(jet->Pt());
240 fHistJetArea->Fill(jet->Area());
241 fHistJetPtvsCent->Fill(fCent, jet->Pt());
242 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
243 fHistJetAreavsCent->Fill(fCent, jet->Area());
244 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
250 Double_t rho0 = TMath::Median(NjetAcc, rhovec);
253 Double_t rhoScaled = rho0;
255 rhoScaled *= GetScaleFactor(fCent);
256 fRhoScaled->SetVal(rhoScaled);
260 // filling other histograms
261 Double_t rho = GetRhoFactor(fCent);
262 const Int_t Ntracks = fTracks->GetEntriesFast();
263 fHistRhovsCent->Fill(fCent, rho0);
264 fHistDeltaRhovsCent->Fill(fCent, rho0 - rho);
265 fHistDeltaRhoScalevsCent->Fill(fCent, rhoScaled - rho);
266 fHistRhovsNtrack->Fill(Ntracks, rho0);
267 fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rho);
268 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rhoScaled - rho);
273 const Int_t Ntracks = fTracks->GetEntriesFast();
274 fHistCentrality->Fill(fCent);
275 fHistNjetvsCent->Fill(fCent, NjetAcc);
276 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
277 PostData(1, fOutputList);
281 //________________________________________________________________________
282 void AliAnalysisTaskRho::ExecOnce()
284 // Initialize some settings that need to be determined in UserExec.
286 AliAnalysisTaskRhoBase::ExecOnce();
289 // add rho to event if not yet there
290 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
291 InputEvent()->AddObject(fRhoScaled);
293 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fRhoScaledName.Data()));
299 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
301 AliError(Form("%s: Pointer to tracks %s == 0", GetName(), fTracksName.Data() ));
306 fJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
308 AliError(Form("%s: Pointer to jets %s == 0", GetName(), fJetsName.Data() ));
313 //________________________________________________________________________
314 Double_t AliAnalysisTaskRho::GetScaleFactor(Double_t cent)
320 scale = fScaleFunction->Eval(cent);