5 // Authors: R.Reed, S.Aiola
7 #include "AliAnalysisTaskRho.h"
9 #include <TClonesArray.h>
16 #include "AliAnalysisManager.h"
17 #include "AliCentrality.h"
18 #include "AliEmcalJet.h"
20 #include "AliRhoParameter.h"
21 #include "AliVCluster.h"
22 #include "AliVEventHandler.h"
24 ClassImp(AliAnalysisTaskRho)
26 //________________________________________________________________________
27 AliAnalysisTaskRho::AliAnalysisTaskRho() :
28 AliAnalysisTaskRhoBase(),
29 fTracksName("tracks"),
45 fHistDeltaRhovsCent(0),
46 fHistDeltaRhoScalevsCent(0),
48 fHistJetAreavsCent(0),
51 fHistDeltaRhovsNtrack(0),
52 fHistDeltaRhoScalevsNtrack(0),
53 fHistJetPtvsNtrack(0),
54 fHistJetAreavsNtrack(0),
61 //________________________________________________________________________
62 AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name) :
63 AliAnalysisTaskRhoBase(name),
64 fTracksName("tracks"),
80 fHistDeltaRhovsCent(0),
81 fHistDeltaRhoScalevsCent(0),
83 fHistJetAreavsCent(0),
86 fHistDeltaRhovsNtrack(0),
87 fHistDeltaRhoScalevsNtrack(0),
88 fHistJetPtvsNtrack(0),
89 fHistJetAreavsNtrack(0),
96 //________________________________________________________________________
97 AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name, Bool_t histo) :
98 AliAnalysisTaskRhoBase(name),
99 fTracksName("tracks"),
115 fHistDeltaRhovsCent(0),
116 fHistDeltaRhoScalevsCent(0),
118 fHistJetAreavsCent(0),
121 fHistDeltaRhovsNtrack(0),
122 fHistDeltaRhoScalevsNtrack(0),
123 fHistJetPtvsNtrack(0),
124 fHistJetAreavsNtrack(0),
125 fHistNjetvsNtrack(0),
131 DefineOutput(1, TList::Class());
135 //________________________________________________________________________
136 void AliAnalysisTaskRho::UserCreateOutputObjects()
138 // User create output objects, called at the beginning of the analysis.
140 AliAnalysisTaskRhoBase::UserCreateOutputObjects();
142 fRhoScaledName = fRhoName;
143 fRhoScaledName += "_Scaled";
144 fRhoScaled = new AliRhoParameter(fRhoScaledName, 0);
150 fOutputList = new TList();
151 fOutputList->SetOwner();
154 PostData(1, fOutputList);
158 fHistCentrality = new TH1F("Centrality", "Centrality", 101, -1, 100);
159 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, 500, 0, 500);
160 fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, 500, -250, 250);
161 fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, 500, -250, 250);
162 fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, 200, 0, 500);
163 fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 100, 0, 1.0);
164 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 100, 0, 100);
166 fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 500, 0, 2500, 500, 0, 500);
167 fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 500, 0, 2500, 500, -250, 250);
168 fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 500, 0, 2500, 500, -250, 250);
169 fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 500, 0, 2500, 200, 0, 500);
170 fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 500, 0, 2500, 100, 0, 1.0);
171 fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 500, 0, 2500, 100, 0, 100);
173 fHistJetPt = new TH1F("JetPt", "Jet Pt", 100, 0, 250);
174 fHistJetArea = new TH1F("JetArea", "Jet Area", 100, 0.0, 1.0);
176 fOutputList->Add(fHistCentrality);
177 fOutputList->Add(fHistRhovsCent);
178 fOutputList->Add(fHistJetPt);
179 fOutputList->Add(fHistJetArea);
180 fOutputList->Add(fHistDeltaRhovsCent);
181 fOutputList->Add(fHistDeltaRhoScalevsCent);
182 fOutputList->Add(fHistJetPtvsCent);
183 fOutputList->Add(fHistJetAreavsCent);
184 fOutputList->Add(fHistNjetvsCent);
186 fOutputList->Add(fHistRhovsNtrack);
187 fOutputList->Add(fHistDeltaRhovsNtrack);
188 fOutputList->Add(fHistDeltaRhoScalevsNtrack);
189 fOutputList->Add(fHistJetPtvsNtrack);
190 fOutputList->Add(fHistJetAreavsNtrack);
191 fOutputList->Add(fHistNjetvsNtrack);
193 PostData(1, fOutputList);
196 //________________________________________________________________________
197 Double_t AliAnalysisTaskRho::GetScaleFactor(Double_t cent)
203 scale = fScaleFunction->Eval(cent);
207 //________________________________________________________________________
208 void AliAnalysisTaskRho::UserExec(Option_t *)
210 // Main loop, called for each event.
212 AliAnalysisTaskRhoBase::UserExec("");
216 // add rho to event if not yet there
217 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
218 InputEvent()->AddObject(fRhoScaled);
221 fRhoScaled->SetVal(-1);
224 // optimization in case autobranch loading is off
225 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
226 if (fTracksName == "Tracks")
227 am->LoadBranch("Tracks");
229 TClonesArray *jets = 0;
230 TClonesArray *tracks = 0;
232 tracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
234 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
238 jets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
240 AliError(Form("Pointer to jets %s == 0", fJetsName.Data() ));
245 fHistCentrality->Fill(fCent);
247 const Int_t Ntracks = tracks->GetEntries();
248 const Int_t Njets = jets->GetEntries();
250 Int_t maxJetIds[] = {-1, -1};
251 Float_t maxJetPts[] = {0, 0};
252 if (fNExclLeadJets > 0) {
253 for (Int_t ij = 0; ij < Njets; ij++) {
255 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ij));
258 AliError(Form("Could not receive jet %d", ij));
262 if (jet->Pt() > maxJetPts[0]) {
263 maxJetPts[1] = maxJetPts[0];
264 maxJetIds[1] = maxJetIds[0];
265 maxJetPts[0] = jet->Pt();
269 if (jet->Pt() > maxJetPts[1]) {
270 maxJetPts[1] = jet->Pt();
275 if (fNExclLeadJets < 2) {
281 static Double_t rhovec[999];
284 // push all jets within selected acceptance into stack
285 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
287 // exlcuding lead jets
288 if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
291 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(iJets));
296 // applying some other cuts
297 if (jet->Area() < fAreaCut)
299 if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
301 if ((jet->Eta() < fEtaMin) || (jet->Eta() > fEtaMax))
303 if (jet->Area() == 0)
306 rhovec[NjetAcc] = jet->Pt() / jet->Area();
311 // filling histograms
312 fHistJetPt->Fill(jet->Pt());
313 fHistJetArea->Fill(jet->Area());
314 fHistJetPtvsCent->Fill(fCent, jet->Pt());
315 fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
316 fHistJetAreavsCent->Fill(fCent, jet->Area());
317 fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
322 fHistNjetvsCent->Fill(fCent, NjetAcc);
323 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
326 Double_t scale = GetScaleFactor(fCent);
327 Double_t rhochem = GetRhoFactor(fCent);
333 rho0 = TMath::Median(NjetAcc, rhovec);
335 Double_t rhoScaled = rho0 * scale;
338 fRhoScaled->SetVal(rhoScaled);
341 // filling other histograms
342 fHistRhovsCent->Fill(fCent, rho0);
343 fHistDeltaRhovsCent->Fill(fCent, rho0 - rhochem);
344 fHistDeltaRhoScalevsCent->Fill(fCent, rhoScaled - rhochem);
345 fHistRhovsNtrack->Fill(Ntracks, rho0);
346 fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rhochem);
347 fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rhoScaled - rhochem);
352 PostData(1, fOutputList);
355 //________________________________________________________________________
356 void AliAnalysisTaskRho::Terminate(Option_t *)
358 // Called at the end of the analysis.