]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALJetTasks/AliAnalysisTaskRho.cxx
get beam type
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / AliAnalysisTaskRho.cxx
CommitLineData
5b5bad1d 1// $Id$
192fc3f4 2//
3// Calculation of rho
4//
5// Authors: R.Reed, S.Aiola
6
5b5bad1d 7#include "AliAnalysisTaskRho.h"
8
020052e4 9#include <TList.h>
10#include <TH1F.h>
11#include <TH2F.h>
12#include <TClonesArray.h>
192fc3f4 13#include <TF1.h>
c60e0a21 14#include <TMath.h>
020052e4 15
16#include "AliLog.h"
17#include "AliAnalysisManager.h"
18#include "AliVEventHandler.h"
19#include "AliCentrality.h"
20#include "AliEmcalJet.h"
21#include "AliVCluster.h"
22
020052e4 23ClassImp(AliAnalysisTaskRho)
24
25//________________________________________________________________________
26AliAnalysisTaskRho::AliAnalysisTaskRho() :
192fc3f4 27 AliAnalysisTaskRhoBase(),
020052e4 28 fTracksName("tracks"),
192fc3f4 29 fJetsName("KtJets"),
192fc3f4 30 fRhoScaledName(""),
31 fPhiMin(0),
32 fPhiMax(0),
33 fEtaMin(0),
34 fEtaMax(0),
35 fAreaCut(0),
c60e0a21 36 fNExclLeadJets(0),
192fc3f4 37 fScaleFunction(0),
c60e0a21 38 fCreateHisto(kFALSE),
020052e4 39 fOutputList(0),
40 fHistCentrality(0),
41 fHistJetPt(0),
192fc3f4 42 fHistJetArea(0),
020052e4 43 fHistRhovsCent(0),
192fc3f4 44 fHistDeltaRhovsCent(0),
45 fHistDeltaRhoScalevsCent(0),
020052e4 46 fHistJetPtvsCent(0),
192fc3f4 47 fHistJetAreavsCent(0),
020052e4 48 fHistNjetvsCent(0),
49 fHistRhovsNtrack(0),
192fc3f4 50 fHistDeltaRhovsNtrack(0),
51 fHistDeltaRhoScalevsNtrack(0),
020052e4 52 fHistJetPtvsNtrack(0),
53 fHistJetAreavsNtrack(0),
54 fHistNjetvsNtrack(0),
c60e0a21 55 fRhoScaled(0)
020052e4 56{
57 // Constructor
020052e4 58}
5d845887 59
020052e4 60//________________________________________________________________________
61AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name) :
192fc3f4 62 AliAnalysisTaskRhoBase(name),
020052e4 63 fTracksName("tracks"),
192fc3f4 64 fJetsName("KtJets"),
192fc3f4 65 fRhoScaledName(""),
66 fPhiMin(0),
67 fPhiMax(0),
68 fEtaMin(0),
69 fEtaMax(0),
70 fAreaCut(0),
c60e0a21 71 fNExclLeadJets(0),
192fc3f4 72 fScaleFunction(0),
c60e0a21 73 fCreateHisto(kFALSE),
020052e4 74 fOutputList(0),
75 fHistCentrality(0),
76 fHistJetPt(0),
192fc3f4 77 fHistJetArea(0),
020052e4 78 fHistRhovsCent(0),
192fc3f4 79 fHistDeltaRhovsCent(0),
80 fHistDeltaRhoScalevsCent(0),
020052e4 81 fHistJetPtvsCent(0),
192fc3f4 82 fHistJetAreavsCent(0),
020052e4 83 fHistNjetvsCent(0),
84 fHistRhovsNtrack(0),
192fc3f4 85 fHistDeltaRhovsNtrack(0),
86 fHistDeltaRhoScalevsNtrack(0),
020052e4 87 fHistJetPtvsNtrack(0),
88 fHistJetAreavsNtrack(0),
89 fHistNjetvsNtrack(0),
c60e0a21 90 fRhoScaled(0)
020052e4 91{
92 // Constructor
020052e4 93}
94
5d845887 95//________________________________________________________________________
96AliAnalysisTaskRho::AliAnalysisTaskRho(const char *name, Bool_t histo) :
97 AliAnalysisTaskRhoBase(name),
98 fTracksName("tracks"),
99 fJetsName("KtJets"),
5d845887 100 fRhoScaledName(""),
101 fPhiMin(0),
102 fPhiMax(0),
103 fEtaMin(0),
104 fEtaMax(0),
105 fAreaCut(0),
106 fNExclLeadJets(0),
107 fScaleFunction(0),
108 fCreateHisto(histo),
109 fOutputList(0),
110 fHistCentrality(0),
111 fHistJetPt(0),
112 fHistJetArea(0),
113 fHistRhovsCent(0),
114 fHistDeltaRhovsCent(0),
115 fHistDeltaRhoScalevsCent(0),
116 fHistJetPtvsCent(0),
117 fHistJetAreavsCent(0),
118 fHistNjetvsCent(0),
119 fHistRhovsNtrack(0),
120 fHistDeltaRhovsNtrack(0),
121 fHistDeltaRhoScalevsNtrack(0),
122 fHistJetPtvsNtrack(0),
123 fHistJetAreavsNtrack(0),
124 fHistNjetvsNtrack(0),
125 fRhoScaled(0)
126{
127 // Constructor
128
129 if (fCreateHisto)
130 DefineOutput(1, TList::Class());
131}
132
133
020052e4 134//________________________________________________________________________
135void AliAnalysisTaskRho::UserCreateOutputObjects()
136{
5b5bad1d 137 // User create output objects, called at the beginning of the analysis.
138
192fc3f4 139 AliAnalysisTaskRhoBase::UserCreateOutputObjects();
020052e4 140
192fc3f4 141 fRhoScaledName = fRhoName;
142 fRhoScaledName += "_Scaled";
c60e0a21 143 fRhoScaled = new TParameter<Double_t>(fRhoScaledName, 0);
020052e4 144
5d845887 145 if (!fCreateHisto)
146 return;
147
020052e4 148 OpenFile(1);
149 fOutputList = new TList();
150 fOutputList->SetOwner();
151
c60e0a21 152 if (!fCreateHisto) {
153 PostData(1, fOutputList);
154 return;
155 }
156
020052e4 157 fHistCentrality = new TH1F("Centrality", "Centrality", 101, -1, 100);
158 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, 500, 0, 500);
159 fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, 500, -250, 250);
160 fHistDeltaRhoScalevsCent = new TH2F("DeltaRhoScalevsCent", "DeltaRhoScalevsCent", 101, -1, 100, 500, -250, 250);
161 fHistJetPtvsCent = new TH2F("JetPtvsCent", "JetPtvsCent", 101, -1, 100, 200, 0, 500);
162 fHistJetAreavsCent = new TH2F("JetAreavsCent", "JetAreavsCent", 101, -1, 100, 100, 0, 1.0);
163 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 101, -1, 100, 100, 0, 100);
164
165 fHistRhovsNtrack = new TH2F("RhovsNtrack", "RhovsNtrack", 500, 0, 2500, 500, 0, 500);
166 fHistDeltaRhovsNtrack = new TH2F("DeltaRhovsNtrack", "DeltaRhovsNtrack", 500, 0, 2500, 500, -250, 250);
167 fHistDeltaRhoScalevsNtrack = new TH2F("DeltaRhoScalevsNtrack", "DeltaRhoScalevsNtrack", 500, 0, 2500, 500, -250, 250);
168 fHistJetPtvsNtrack = new TH2F("JetPtvsNtrack", "JetPtvsNtrack", 500, 0, 2500, 200, 0, 500);
169 fHistJetAreavsNtrack = new TH2F("JetAreavsNtrack", "JetAreavsNtrack", 500, 0, 2500, 100, 0, 1.0);
170 fHistNjetvsNtrack = new TH2F("NjetvsNtrack", "rNjetvsNtrack", 500, 0, 2500, 100, 0, 100);
171
172 fHistJetPt = new TH1F("JetPt", "Jet Pt", 100, 0, 250);
173 fHistJetArea = new TH1F("JetArea", "Jet Area", 100, 0.0, 1.0);
174
175 fOutputList->Add(fHistCentrality);
176 fOutputList->Add(fHistRhovsCent);
177 fOutputList->Add(fHistJetPt);
178 fOutputList->Add(fHistJetArea);
179 fOutputList->Add(fHistDeltaRhovsCent);
180 fOutputList->Add(fHistDeltaRhoScalevsCent);
181 fOutputList->Add(fHistJetPtvsCent);
182 fOutputList->Add(fHistJetAreavsCent);
183 fOutputList->Add(fHistNjetvsCent);
184
185 fOutputList->Add(fHistRhovsNtrack);
186 fOutputList->Add(fHistDeltaRhovsNtrack);
187 fOutputList->Add(fHistDeltaRhoScalevsNtrack);
188 fOutputList->Add(fHistJetPtvsNtrack);
189 fOutputList->Add(fHistJetAreavsNtrack);
190 fOutputList->Add(fHistNjetvsNtrack);
191
192 PostData(1, fOutputList);
193
194}
195
196//________________________________________________________________________
197Double_t AliAnalysisTaskRho::GetScaleFactor(Double_t cent)
198{
192fc3f4 199 Double_t scale = 1;
200 if (fScaleFunction)
201 scale = fScaleFunction->Eval(cent);
020052e4 202 return scale;
203}
204
c60e0a21 205
020052e4 206//________________________________________________________________________
207void AliAnalysisTaskRho::UserExec(Option_t *)
208{
209 // Main loop, called for each event.
192fc3f4 210
211 AliAnalysisTaskRhoBase::UserExec("");
020052e4 212
c60e0a21 213 fRho->SetVal(-1);
214
215 // add rho to event if not yet there
192fc3f4 216 if (!(InputEvent()->FindListObject(fRhoScaledName))) {
c60e0a21 217 new(fRhoScaled) TParameter<Double_t>(fRhoScaledName, -1);
192fc3f4 218 InputEvent()->AddObject(fRhoScaled);
219 }
c60e0a21 220 else {
221 fRhoScaled->SetVal(-1);
222 }
020052e4 223
224 // optimization in case autobranch loading is off
225 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
226 if (fTracksName == "Tracks")
227 am->LoadBranch("Tracks");
228
020052e4 229 TClonesArray *jets = 0;
230 TClonesArray *tracks = 0;
231
192fc3f4 232 tracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
020052e4 233 if (!tracks) {
234 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
235 return;
236 }
237
192fc3f4 238 jets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
020052e4 239 if (!jets) {
c60e0a21 240 AliError(Form("Pointer to jets %s == 0", fJetsName.Data() ));
020052e4 241 return;
242 }
c60e0a21 243
244 if (fCreateHisto)
245 fHistCentrality->Fill(fCent);
020052e4 246
020052e4 247 const Int_t Ntracks = tracks->GetEntries();
248 const Int_t Njets = jets->GetEntries();
c60e0a21 249
250 Int_t maxJetIds[] = {-1, -1};
5b5bad1d 251 Float_t maxJetPts[] = {0, 0};
c60e0a21 252 if (fNExclLeadJets > 0) {
253 for (Int_t ij = 0; ij < Njets; ij++) {
254
255 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ij));
256
257 if (!jet) {
258 AliError(Form("Could not receive jet %d", ij));
259 continue;
260 }
261
262 if (jet->Pt() > maxJetPts[0]) {
263 maxJetPts[1] = maxJetPts[0];
5b5bad1d 264 maxJetIds[1] = maxJetIds[0];
c60e0a21 265 maxJetPts[0] = jet->Pt();
266 maxJetIds[0] = ij;
267 }
268
269 if (jet->Pt() > maxJetPts[1]) {
270 maxJetPts[1] = jet->Pt();
271 maxJetIds[1] = ij;
272 }
273 }
5b5bad1d 274
c60e0a21 275 if (fNExclLeadJets < 2) {
276 maxJetIds[1] = -1;
277 maxJetPts[1] = -1;
278 }
279 }
280
281 static Double_t rhovec[999];
020052e4 282 Int_t NjetAcc = 0;
283
c60e0a21 284 // push all jets within selected acceptance into stack
020052e4 285 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
c60e0a21 286
287 // exlcuding lead jets
288 if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
289 continue;
290
020052e4 291 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(iJets));
c60e0a21 292
020052e4 293 if (!jet)
294 continue;
c60e0a21 295
296 // applying some other cuts
020052e4 297 if (jet->Area() < fAreaCut)
298 continue;
299 if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
300 continue;
301 if ((jet->Eta() < fEtaMin) || (jet->Eta() > fEtaMax))
302 continue;
303 if (jet->Area() == 0)
304 continue;
c60e0a21 305
306 rhovec[NjetAcc] = jet->Pt() / jet->Area();
307
020052e4 308 NjetAcc++;
c60e0a21 309
310 if (fCreateHisto) {
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());
318 }
020052e4 319 }
320
c60e0a21 321 if (fCreateHisto) {
322 fHistNjetvsCent->Fill(fCent, NjetAcc);
323 fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
324 }
192fc3f4 325
326 Double_t scale = GetScaleFactor(fCent);
327 Double_t rhochem = GetRhoFactor(fCent);
328
020052e4 329 Double_t rho0 = -1;
330
c60e0a21 331 if (NjetAcc > 0){
020052e4 332 //find median value
c60e0a21 333 rho0 = TMath::Median(NjetAcc, rhovec);
192fc3f4 334
c60e0a21 335 Double_t rhoScaled = rho0 * scale;
192fc3f4 336
c60e0a21 337 fRho->SetVal(rho0);
338 fRhoScaled->SetVal(rhoScaled);
020052e4 339
c60e0a21 340 if (fCreateHisto) {
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);
020052e4 348 }
020052e4 349 }
020052e4 350
c60e0a21 351 if (fCreateHisto)
352 PostData(1, fOutputList);
353}
020052e4 354
192fc3f4 355//________________________________________________________________________
356void AliAnalysisTaskRho::Terminate(Option_t *)
357{
5b5bad1d 358 // Called at the end of the analysis.
192fc3f4 359}