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