]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALJetTasks/AliAnalysisTaskSAJF.cxx
Fixes in EINCLUDE
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / AliAnalysisTaskSAJF.cxx
CommitLineData
00514d01 1// $Id$
91f4b7c5 2//
b12a85c3 3// Jet analysis task (S.Aiola).
91f4b7c5 4//
5//
25283b37 6
b5ee47fb 7#include <TObject.h>
25283b37 8#include <TChain.h>
9#include <TClonesArray.h>
10#include <TH1F.h>
11#include <TH2F.h>
12#include <TList.h>
13#include <TLorentzVector.h>
a55e4f1d 14#include <TRandom3.h>
226f511d 15#include <TParameter.h>
25283b37 16
17#include "AliAnalysisManager.h"
18#include "AliCentrality.h"
f0a0fd33 19#include "AliVCluster.h"
df43b607 20#include "AliVParticle.h"
6fd5039f 21#include "AliVTrack.h"
25283b37 22#include "AliEmcalJet.h"
23#include "AliVEventHandler.h"
55264f20 24#include "AliLog.h"
25283b37 25
00514d01 26#include "AliAnalysisTaskSAJF.h"
25283b37 27
00514d01 28ClassImp(AliAnalysisTaskSAJF)
25283b37 29
30//________________________________________________________________________
00514d01 31AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
6fd5039f 32 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAJF"),
b12a85c3 33 fMinRC2LJ(1.0),
2bee31e9 34 fEmbJetsName("EmbJets"),
b12a85c3 35 fRandTracksName("TracksRandomized"),
36 fRandCaloName("CaloClustersRandomized"),
226f511d 37 fRhoName("Rho"),
6fd5039f 38 fSkipEventsWithNoJets(kTRUE),
2bee31e9 39 fEmbJets(0),
b12a85c3 40 fRandTracks(0),
41 fRandCaloClusters(0),
b12a85c3 42 fRho(0),
f0a0fd33 43 fHistCentrality(0),
fb9ac42f 44 fHistRejectedEvents(0),
b12a85c3 45 fHistRhoVSleadJetPt(0),
46 fHistRCPhiEta(0),
47 fHistRCPtExLJVSDPhiLJ(0),
48 fHistRhoVSRCPt(0),
b5ee47fb 49 fHistEmbJetPhiEta(0),
50 fHistEmbPartPhiEta(0),
b12a85c3 51 fHistRhoVSEmbBkg(0)
226f511d 52
25283b37 53{
54 // Default constructor.
f0a0fd33 55
56 for (Int_t i = 0; i < 4; i++) {
df43b607 57 fHistJetPhiEta[i] = 0;
55264f20 58 fHistJetsPt[i] = 0;
df43b607 59 fHistJetsPtArea[i] = 0;
55264f20 60 fHistLeadingJetPt[i] = 0;
61 fHist2LeadingJetPt[i] = 0;
b12a85c3 62 fHistJetsNEFvsPt[i] = 0;
63 fHistJetsZvsPt[i] = 0;
b12a85c3 64 fHistRho[i] = 0;
65 fHistCorrJetsPt[i] = 0;
b12a85c3 66 fHistCorrLeadingJetPt[i] = 0;
a55e4f1d 67 fHistRCPt[i] = 0;
68 fHistRCPtExLJ[i] = 0;
b12a85c3 69 fHistRCPtRand[i] = 0;
70 fHistDeltaPtRC[i] = 0;
71 fHistDeltaPtRCExLJ[i] = 0;
72 fHistDeltaPtRCRand[i] = 0;
2bee31e9 73 fHistEmbJets[i] = 0;
74 fHistEmbPart[i] = 0;
b12a85c3 75 fHistDeltaPtEmb[i] = 0;
f0a0fd33 76 }
91f4b7c5 77
25283b37 78}
79
80//________________________________________________________________________
00514d01 81AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
6fd5039f 82 AliAnalysisTaskEmcalJet(name),
b12a85c3 83 fMinRC2LJ(1.0),
2bee31e9 84 fEmbJetsName("EmbJets"),
b12a85c3 85 fRandTracksName("TracksRandomized"),
86 fRandCaloName("CaloClustersRandomized"),
226f511d 87 fRhoName("Rho"),
6fd5039f 88 fSkipEventsWithNoJets(kTRUE),
2bee31e9 89 fEmbJets(0),
b12a85c3 90 fRandTracks(0),
91 fRandCaloClusters(0),
b12a85c3 92 fRho(0),
f0a0fd33 93 fHistCentrality(0),
fb9ac42f 94 fHistRejectedEvents(0),
b12a85c3 95 fHistRhoVSleadJetPt(0),
96 fHistRCPhiEta(0),
97 fHistRCPtExLJVSDPhiLJ(0),
98 fHistRhoVSRCPt(0),
b5ee47fb 99 fHistEmbJetPhiEta(0),
100 fHistEmbPartPhiEta(0),
b12a85c3 101 fHistRhoVSEmbBkg(0)
25283b37 102{
103 // Standard constructor.
104
f0a0fd33 105 for (Int_t i = 0; i < 4; i++) {
df43b607 106 fHistJetPhiEta[i] = 0;
55264f20 107 fHistJetsPt[i] = 0;
df43b607 108 fHistJetsPtArea[i] = 0;
55264f20 109 fHistLeadingJetPt[i] = 0;
110 fHist2LeadingJetPt[i] = 0;
b12a85c3 111 fHistJetsNEFvsPt[i] = 0;
112 fHistJetsZvsPt[i] = 0;
b12a85c3 113 fHistRho[i] = 0;
114 fHistCorrJetsPt[i] = 0;
b12a85c3 115 fHistCorrLeadingJetPt[i] = 0;
a55e4f1d 116 fHistRCPt[i] = 0;
117 fHistRCPtExLJ[i] = 0;
b12a85c3 118 fHistRCPtRand[i] = 0;
119 fHistDeltaPtRC[i] = 0;
120 fHistDeltaPtRCExLJ[i] = 0;
121 fHistDeltaPtRCRand[i] = 0;
2bee31e9 122 fHistEmbJets[i] = 0;
123 fHistEmbPart[i] = 0;
b12a85c3 124 fHistDeltaPtEmb[i] = 0;
f0a0fd33 125 }
91f4b7c5 126
25283b37 127}
128
129//________________________________________________________________________
00514d01 130AliAnalysisTaskSAJF::~AliAnalysisTaskSAJF()
25283b37 131{
132 // Destructor
133}
134
135//________________________________________________________________________
00514d01 136void AliAnalysisTaskSAJF::UserCreateOutputObjects()
25283b37 137{
6fd5039f 138 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
df43b607 139
f0a0fd33 140 // Create histograms
11d4d636 141
6fd5039f 142 const Float_t binWidth = (fMaxBinPt - fMinBinPt) / fNbins;
25283b37 143
226f511d 144 OpenFile(1);
25283b37 145 fOutput = new TList();
226f511d 146 fOutput->SetOwner();
25283b37 147
fb9ac42f 148 fHistCentrality = new TH1F("fHistCentrality","fHistCentrality", fNbins, 0, 100);
f0a0fd33 149 fHistCentrality->GetXaxis()->SetTitle("Centrality (%)");
150 fHistCentrality->GetYaxis()->SetTitle("counts");
151 fOutput->Add(fHistCentrality);
25283b37 152
6fd5039f 153 fHistRejectedEvents = new TH1F("fHistRejectedEvents","fHistRejectedEvents", 6, 0, 6);
fb9ac42f 154 fHistRejectedEvents->GetXaxis()->SetTitle("Reason");
155 fHistRejectedEvents->GetYaxis()->SetTitle("counts");
156 fHistRejectedEvents->GetXaxis()->SetBinLabel(1, "Rho <= 0");
157 fHistRejectedEvents->GetXaxis()->SetBinLabel(2, "Max Jet <= 0");
158 fHistRejectedEvents->GetXaxis()->SetBinLabel(3, "Max Jet not found");
6fd5039f 159 fHistRejectedEvents->GetXaxis()->SetBinLabel(4, "No jets");
fb9ac42f 160 fOutput->Add(fHistRejectedEvents);
161
6fd5039f 162 fHistRhoVSleadJetPt = new TH2F("fHistRhoVSleadJetPt","fHistRhoVSleadJetPt", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 163 fHistRhoVSleadJetPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
164 fHistRhoVSleadJetPt->GetYaxis()->SetTitle("Leading jet p_{T} [GeV/c]");
165 fOutput->Add(fHistRhoVSleadJetPt);
b5ee47fb 166
6fd5039f 167 fHistRCPhiEta = new TH2F("fHistRCPhiEta","Phi-Eta distribution of rigid cones", 40, -2, 2, 64, 0, 6.4);
b12a85c3 168 fHistRCPhiEta->GetXaxis()->SetTitle("#eta");
169 fHistRCPhiEta->GetYaxis()->SetTitle("#phi");
170 fOutput->Add(fHistRCPhiEta);
b5ee47fb 171
6fd5039f 172 fHistRCPtExLJVSDPhiLJ = new TH2F("fHistRCPtExLJVSDPhiLJ","fHistRCPtExLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8);
b12a85c3 173 fHistRCPtExLJVSDPhiLJ->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
b5ee47fb 174 fHistRCPtExLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi");
175 fOutput->Add(fHistRCPtExLJVSDPhiLJ);
176
6fd5039f 177 fHistRhoVSRCPt = new TH2F("fHistRhoVSRCPt","fHistRhoVSRCPt", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 178 fHistRhoVSRCPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
179 fHistRhoVSRCPt->GetYaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
180 fOutput->Add(fHistRhoVSRCPt);
181
6fd5039f 182 fHistEmbJetPhiEta = new TH2F("fHistEmbJetPhiEta","Phi-Eta distribution of embedded jets", 40, -2, 2, 64, 0, 6.4);
b12a85c3 183 fHistEmbJetPhiEta->GetXaxis()->SetTitle("#eta");
184 fHistEmbJetPhiEta->GetYaxis()->SetTitle("#phi");
185 fOutput->Add(fHistEmbJetPhiEta);
186
6fd5039f 187 fHistEmbPartPhiEta = new TH2F("fHistEmbPartPhiEta","Phi-Eta distribution of embedded particles", 40, -2, 2, 64, 0, 6.4);
b12a85c3 188 fHistEmbPartPhiEta->GetXaxis()->SetTitle("#eta");
189 fHistEmbPartPhiEta->GetYaxis()->SetTitle("#phi");
190 fOutput->Add(fHistEmbPartPhiEta);
191
6fd5039f 192 fHistRhoVSEmbBkg = new TH2F("fHistRhoVSEmbBkg","fHistRhoVSEmbBkg", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 193 fHistRhoVSEmbBkg->GetXaxis()->SetTitle("rho * area [GeV/c]");
194 fHistRhoVSEmbBkg->GetYaxis()->SetTitle("background of embedded track [GeV/c]");
195 fOutput->Add(fHistRhoVSEmbBkg);
b5ee47fb 196
f0a0fd33 197 TString histname;
198
199 for (Int_t i = 0; i < 4; i++) {
df43b607 200 histname = "fHistJetPhiEta_";
201 histname += i;
6fd5039f 202 fHistJetPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 40, -2, 2, 64, 0, 6.4);
df43b607 203 fHistJetPhiEta[i]->GetXaxis()->SetTitle("#eta");
204 fHistJetPhiEta[i]->GetYaxis()->SetTitle("#phi");
205 fOutput->Add(fHistJetPhiEta[i]);
206
55264f20 207 histname = "fHistJetsPt_";
f0a0fd33 208 histname += i;
6fd5039f 209 fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 210 fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
55264f20 211 fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
212 fOutput->Add(fHistJetsPt[i]);
226f511d 213
df43b607 214 histname = "fHistJetsPtArea_";
215 histname += i;
6fd5039f 216 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
df43b607 217 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
218 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
219 fOutput->Add(fHistJetsPtArea[i]);
220
55264f20 221 histname = "fHistLeadingJetPt_";
f0a0fd33 222 histname += i;
6fd5039f 223 fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 224 fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
55264f20 225 fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
226 fOutput->Add(fHistLeadingJetPt[i]);
b5ee47fb 227
228 histname = "fHist2LeadingJetPt_";
229 histname += i;
6fd5039f 230 fHist2LeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 231 fHist2LeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
b5ee47fb 232 fHist2LeadingJetPt[i]->GetYaxis()->SetTitle("counts");
233 fOutput->Add(fHist2LeadingJetPt[i]);
234
b12a85c3 235 histname = "fHistJetsZvsPt_";
b5ee47fb 236 histname += i;
6fd5039f 237 fHistJetsZvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 238 fHistJetsZvsPt[i]->GetXaxis()->SetTitle("Z");
239 fHistJetsZvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
240 fOutput->Add(fHistJetsZvsPt[i]);
241
242 if (fAnaType == kEMCAL) {
243 histname = "fHistJetsNEFvsPt_";
244 histname += i;
6fd5039f 245 fHistJetsNEFvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 246 fHistJetsNEFvsPt[i]->GetXaxis()->SetTitle("NEF");
247 fHistJetsNEFvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
248 fOutput->Add(fHistJetsNEFvsPt[i]);
b12a85c3 249 }
250
b12a85c3 251 histname = "fHistRho_";
252 histname += i;
6fd5039f 253 fHistRho[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
b12a85c3 254 fHistRho[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
255 fHistRho[i]->GetYaxis()->SetTitle("counts");
256 fOutput->Add(fHistRho[i]);
257
258 histname = "fHistCorrJetsPt_";
259 histname += i;
6fd5039f 260 fHistCorrJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
b12a85c3 261 fHistCorrJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
262 fHistCorrJetsPt[i]->GetYaxis()->SetTitle("counts");
263 fOutput->Add(fHistCorrJetsPt[i]);
264
b12a85c3 265 histname = "fHistCorrLeadingJetPt_";
266 histname += i;
6fd5039f 267 fHistCorrLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
b12a85c3 268 fHistCorrLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
269 fHistCorrLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
270 fOutput->Add(fHistCorrLeadingJetPt[i]);
271
272 histname = "fHistRCPt_";
c554a987 273 histname += i;
6fd5039f 274 fHistRCPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
b12a85c3 275 fHistRCPt[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
276 fHistRCPt[i]->GetYaxis()->SetTitle("counts");
277 fOutput->Add(fHistRCPt[i]);
c554a987 278
b12a85c3 279 histname = "fHistRCPtExLJ_";
c554a987 280 histname += i;
6fd5039f 281 fHistRCPtExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
b12a85c3 282 fHistRCPtExLJ[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
283 fHistRCPtExLJ[i]->GetYaxis()->SetTitle("counts");
284 fOutput->Add(fHistRCPtExLJ[i]);
c554a987 285
b12a85c3 286 histname = "fHistRCPtRand_";
c554a987 287 histname += i;
6fd5039f 288 fHistRCPtRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
b12a85c3 289 fHistRCPtRand[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
290 fHistRCPtRand[i]->GetYaxis()->SetTitle("counts");
291 fOutput->Add(fHistRCPtRand[i]);
a55e4f1d 292
293 histname = "fHistDeltaPtRC_";
294 histname += i;
6fd5039f 295 fHistDeltaPtRC[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
b12a85c3 296 fHistDeltaPtRC[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
a55e4f1d 297 fHistDeltaPtRC[i]->GetYaxis()->SetTitle("counts");
298 fOutput->Add(fHistDeltaPtRC[i]);
299
300 histname = "fHistDeltaPtRCExLJ_";
301 histname += i;
6fd5039f 302 fHistDeltaPtRCExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
b12a85c3 303 fHistDeltaPtRCExLJ[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
a55e4f1d 304 fHistDeltaPtRCExLJ[i]->GetYaxis()->SetTitle("counts");
305 fOutput->Add(fHistDeltaPtRCExLJ[i]);
306
b12a85c3 307 histname = "fHistDeltaPtRCRand_";
a55e4f1d 308 histname += i;
6fd5039f 309 fHistDeltaPtRCRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
b12a85c3 310 fHistDeltaPtRCRand[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
311 fHistDeltaPtRCRand[i]->GetYaxis()->SetTitle("counts");
312 fOutput->Add(fHistDeltaPtRCRand[i]);
2bee31e9 313
314 histname = "fHistEmbJets_";
315 histname += i;
6fd5039f 316 fHistEmbJets[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 317 fHistEmbJets[i]->GetXaxis()->SetTitle("embedded jet p_{T} [GeV/c]");
2bee31e9 318 fHistEmbJets[i]->GetYaxis()->SetTitle("counts");
319 fOutput->Add(fHistEmbJets[i]);
320
321 histname = "fHistEmbPart_";
322 histname += i;
6fd5039f 323 fHistEmbPart[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
b12a85c3 324 fHistEmbPart[i]->GetXaxis()->SetTitle("embedded particle p_{T} [GeV/c]");
2bee31e9 325 fHistEmbPart[i]->GetYaxis()->SetTitle("counts");
326 fOutput->Add(fHistEmbPart[i]);
327
b12a85c3 328 histname = "fHistDeltaPtEmb_";
2bee31e9 329 histname += i;
6fd5039f 330 fHistDeltaPtEmb[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
b12a85c3 331 fHistDeltaPtEmb[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
332 fHistDeltaPtEmb[i]->GetYaxis()->SetTitle("counts");
333 fOutput->Add(fHistDeltaPtEmb[i]);
e82e282c 334 }
335
25283b37 336 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
337}
338
55264f20 339//________________________________________________________________________
6fd5039f 340Bool_t AliAnalysisTaskSAJF::RetrieveEventObjects()
25283b37 341{
6fd5039f 342 if(!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
343 return kFALSE;
344
345 fRho = -1;
346
347 if (strcmp(fRhoName,"")) {
348 TParameter<Double_t> *rho = dynamic_cast<TParameter<Double_t>*>(InputEvent()->FindListObject(fRhoName));
349
350 if (rho) {
351 fRho = rho->GetVal();
352 }
353 else {
354 AliWarning(Form("Could not retrieve rho %s!", fRhoName.Data()));
355 }
356 }
df43b607 357
2bee31e9 358 if (strcmp(fEmbJetsName,"")) {
359 fEmbJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fEmbJetsName));
360 if (!fEmbJets) {
b12a85c3 361 AliWarning(Form("Could not retrieve emb jets %s!", fEmbJetsName.Data()));
362 }
363 }
364
365 if (strcmp(fRandCaloName,"") && fAnaType == kEMCAL) {
366 fRandCaloClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fRandCaloName));
367 if (!fRandCaloClusters) {
368 AliWarning(Form("Could not retrieve randomized clusters %s!", fRandCaloName.Data()));
369 }
370 }
371
372 if (strcmp(fRandTracksName,"")) {
373 fRandTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fRandTracksName));
374 if (!fRandTracks) {
375 AliWarning(Form("Could not retrieve randomized tracks %s!", fRandTracksName.Data()));
2bee31e9 376 }
377 }
f0a0fd33 378
6fd5039f 379 return kTRUE;
2bee31e9 380}
381
55264f20 382//________________________________________________________________________
6fd5039f 383Bool_t AliAnalysisTaskSAJF::FillHistograms()
25283b37 384{
df43b607 385 if (fRho < 0) {
6fd5039f 386 fHistRejectedEvents->Fill("Rho <= 0", 1);
387 return kFALSE;
df43b607 388 }
389
55264f20 390 Int_t maxJetIndex = -1;
391 Int_t max2JetIndex = -1;
25283b37 392
b12a85c3 393 // ************
394 // General histograms
395 // _________________________________
396
6fd5039f 397 GetLeadingJets(maxJetIndex, max2JetIndex);
55264f20 398
6fd5039f 399 if (fSkipEventsWithNoJets && maxJetIndex < 0) {
400 fHistRejectedEvents->Fill("No jets", 1);
401 return kFALSE;
fb9ac42f 402 }
c554a987 403
df43b607 404 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
6fd5039f 405 if (fSkipEventsWithNoJets && !jet) {
406 fHistRejectedEvents->Fill("Max Jet not found", 1);
407 return kFALSE;
fb9ac42f 408 }
c554a987 409
6fd5039f 410 Float_t maxJetCorrPt = 0;
411
412 if (jet)
413 maxJetCorrPt = jet->Pt() - fRho * jet->Area();
11d4d636 414
6fd5039f 415 if (fSkipEventsWithNoJets && maxJetCorrPt <= 0) {
416 fHistRejectedEvents->Fill("Max Jet <= 0", 1);
417 return kFALSE;
418 }
b12a85c3 419
6fd5039f 420 fHistCentrality->Fill(fCent);
421 fHistRho[fCentBin]->Fill(fRho);
422
423 if (jet) {
424 fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
425 fHistRhoVSleadJetPt->Fill(fRho * jet->Area(), jet->Pt());
426 fHistCorrLeadingJetPt[fCentBin]->Fill(maxJetCorrPt);
427 }
55264f20 428
429 AliEmcalJet* jet2 = 0;
430 if (max2JetIndex >= 0)
df43b607 431 jet2 = dynamic_cast<AliEmcalJet*>(fJets->At(max2JetIndex));
55264f20 432
6fd5039f 433 if (jet2)
b5ee47fb 434 fHist2LeadingJetPt[fCentBin]->Fill(jet2->Pt());
b5ee47fb 435
6fd5039f 436 DoJetLoop();
55264f20 437
b12a85c3 438 // ************
439 // Random cones
440 // _________________________________
a55e4f1d 441
d41a0b1c 442 const Float_t rcArea = fJetRadius * fJetRadius * TMath::Pi();
443
b12a85c3 444 // Simple random cones
445 Float_t RCpt = 0;
446 Float_t RCeta = 0;
447 Float_t RCphi = 0;
448 GetRigidCone(RCpt, RCeta, RCphi, kFALSE, 0);
449 if (RCpt > 0) {
d41a0b1c 450 fHistRCPt[fCentBin]->Fill(RCpt / rcArea);
451 fHistDeltaPtRC[fCentBin]->Fill(RCpt - rcArea * fRho);
b12a85c3 452 }
453
454 // Random cones far from leading jet
455 Float_t RCptExLJ = 0;
456 Float_t RCetaExLJ = 0;
457 Float_t RCphiExLJ = 0;
458 GetRigidCone(RCptExLJ, RCetaExLJ, RCphiExLJ, kFALSE, jet);
459 if (RCptExLJ > 0) {
460 fHistRCPhiEta->Fill(RCetaExLJ, RCphiExLJ);
d41a0b1c 461 fHistRhoVSRCPt->Fill(fRho, RCptExLJ / rcArea);
b5ee47fb 462
463 Float_t dphi = RCphiExLJ - jet->Phi();
464 if (dphi > 4.8) dphi -= TMath::Pi() * 2;
465 if (dphi < -1.6) dphi += TMath::Pi() * 2;
466 fHistRCPtExLJVSDPhiLJ->Fill(RCptExLJ, dphi);
b12a85c3 467
d41a0b1c 468 fHistRCPtExLJ[fCentBin]->Fill(RCptExLJ / rcArea);
469 fHistDeltaPtRCExLJ[fCentBin]->Fill(RCptExLJ - rcArea * fRho);
b12a85c3 470 }
471
472 // Random cones with randomized particles
473 Float_t RCptRand = 0;
474 Float_t RCetaRand = 0;
475 Float_t RCphiRand = 0;
476 GetRigidCone(RCptRand, RCetaRand, RCphiRand, kTRUE, 0, fRandTracks, fRandCaloClusters);
477 if (RCptRand > 0) {
d41a0b1c 478 fHistRCPtRand[fCentBin]->Fill(RCptRand / rcArea);
479 fHistDeltaPtRCRand[fCentBin]->Fill(RCptRand - rcArea * fRho);
a55e4f1d 480 }
2bee31e9 481
b12a85c3 482 // ************
483 // Embedding
484 // _________________________________
485
df43b607 486 if (!fEmbJets)
6fd5039f 487 return kTRUE;
df43b607 488
b12a85c3 489 AliEmcalJet *embJet = 0;
b5ee47fb 490 TObject *maxPart = 0;
2bee31e9 491
b12a85c3 492 DoEmbJetLoop(embJet, maxPart);
2bee31e9 493
fb9ac42f 494 if (embJet) {
495
496 fHistEmbJets[fCentBin]->Fill(embJet->Pt());
497 fHistEmbPart[fCentBin]->Fill(embJet->MCPt());
498 fHistEmbJetPhiEta->Fill(embJet->Eta(), embJet->Phi());
499 fHistDeltaPtEmb[fCentBin]->Fill(embJet->Pt() - embJet->Area() * fRho - embJet->MCPt());
500 fHistRhoVSEmbBkg->Fill(embJet->Area() * fRho, embJet->Pt() - embJet->MCPt());
b12a85c3 501
502 AliVCluster *cluster = dynamic_cast<AliVCluster*>(maxPart);
b5ee47fb 503 if (cluster) {
b5ee47fb 504 Float_t pos[3];
505 cluster->GetPosition(pos);
506 TVector3 clusVec(pos);
507
fb9ac42f 508 fHistEmbPartPhiEta->Fill(clusVec.Eta(), clusVec.Phi());
b5ee47fb 509 }
b5ee47fb 510 else {
6fd5039f 511 AliVTrack *track = dynamic_cast<AliVTrack*>(maxPart);
b12a85c3 512 if (track) {
fb9ac42f 513 fHistEmbPartPhiEta->Fill(track->Eta(), track->Phi());
b12a85c3 514 }
515 else {
6fd5039f 516 AliWarning(Form("%s - Embedded particle type not found or not recognized (neither AliVCluster nor AliVTrack)!", GetName()));
517 return kTRUE;
b12a85c3 518 }
b5ee47fb 519 }
b12a85c3 520
2bee31e9 521 }
522 else {
fb9ac42f 523 AliWarning(Form("%s - Embedded jet not found in the event!", GetName()));
2bee31e9 524 }
6fd5039f 525
526 return kTRUE;
55264f20 527}
528
529//________________________________________________________________________
6fd5039f 530void AliAnalysisTaskSAJF::GetLeadingJets(Int_t &maxJetIndex, Int_t &max2JetIndex)
55264f20 531{
df43b607 532 if (!fJets)
533 return;
534
535 Int_t njets = fJets->GetEntriesFast();
55264f20 536
537 Float_t maxJetPt = 0;
538 Float_t max2JetPt = 0;
25283b37 539 for (Int_t ij = 0; ij < njets; ij++) {
f0a0fd33 540
df43b607 541 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
f0a0fd33 542
25283b37 543 if (!jet) {
a55e4f1d 544 AliError(Form("Could not receive jet %d", ij));
25283b37 545 continue;
546 }
f0a0fd33 547
91f4b7c5 548 if (!AcceptJet(jet))
549 continue;
550
226f511d 551 Float_t corrPt = jet->Pt() - fRho * jet->Area();
552
6fd5039f 553 if (maxJetIndex == -1 || maxJetPt < corrPt) {
554 max2JetPt = maxJetPt;
555 max2JetIndex = maxJetIndex;
556 maxJetPt = corrPt;
557 maxJetIndex = ij;
b12a85c3 558 }
6fd5039f 559 else if (max2JetIndex == -1 || max2JetPt < corrPt) {
560 max2JetPt = corrPt;
561 max2JetIndex = ij;
b12a85c3 562 }
6fd5039f 563 } //jet loop
564}
565
566
567//________________________________________________________________________
568void AliAnalysisTaskSAJF::DoJetLoop()
569{
570 if (!fJets)
571 return;
572
573 Int_t njets = fJets->GetEntriesFast();
574
575 for (Int_t ij = 0; ij < njets; ij++) {
576
577 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
578
579 if (!jet) {
580 AliError(Form("Could not receive jet %d", ij));
581 continue;
582 }
583
584 if (!AcceptJet(jet))
585 continue;
586
587 Float_t corrPt = jet->Pt() - fRho * jet->Area();
226f511d 588
11d4d636 589 fHistJetsPt[fCentBin]->Fill(jet->Pt());
df43b607 590 fHistJetsPtArea[fCentBin]->Fill(corrPt, jet->Area());
11d4d636 591 fHistCorrJetsPt[fCentBin]->Fill(corrPt);
f0a0fd33 592
df43b607 593 fHistJetPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
b12a85c3 594
595 if (fAnaType == kEMCAL)
596 fHistJetsNEFvsPt[fCentBin]->Fill(jet->NEF(), jet->Pt());
226f511d 597
6e8d91c9 598 if (fTracks) {
599 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
600 AliVParticle *track = jet->TrackAt(it, fTracks);
601 if (track)
602 fHistJetsZvsPt[fCentBin]->Fill(track->Pt() / jet->Pt(), jet->Pt());
603 }
35789a2d 604 }
a55e4f1d 605
6e8d91c9 606 if (fCaloClusters) {
607 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
608 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
609
610 if (cluster) {
611 TLorentzVector nPart;
612 cluster->GetMomentum(nPart, fVertex);
df43b607 613 fHistJetsZvsPt[fCentBin]->Fill(nPart.Et() / jet->Pt(), jet->Pt());
6e8d91c9 614 }
55264f20 615 }
f0a0fd33 616 }
25283b37 617 } //jet loop
55264f20 618}
e82e282c 619
55264f20 620//________________________________________________________________________
b12a85c3 621void AliAnalysisTaskSAJF::DoEmbJetLoop(AliEmcalJet* &embJet, TObject* &maxPart)
55264f20 622{
df43b607 623 if (!fEmbJets)
624 return;
625
fb9ac42f 626 TLorentzVector maxClusVect;
2bee31e9 627
df43b607 628 Int_t nembjets = fEmbJets->GetEntriesFast();
2bee31e9 629
2bee31e9 630 for (Int_t ij = 0; ij < nembjets; ij++) {
631
df43b607 632 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fEmbJets->At(ij));
2bee31e9 633
634 if (!jet) {
635 AliError(Form("Could not receive jet %d", ij));
636 continue;
637 }
638
df43b607 639 if (!AcceptJet(jet))
640 continue;
2bee31e9 641
fb9ac42f 642 if (!jet->IsMC())
643 continue;
644
df43b607 645 AliVParticle *maxTrack = 0;
2bee31e9 646
b12a85c3 647 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
df43b607 648 AliVParticle *track = jet->TrackAt(it, fTracks);
b12a85c3 649
fb9ac42f 650 if (!track)
651 continue;
652
1f6fff78 653 if (track->GetLabel() != 100)
fb9ac42f 654 continue;
b12a85c3 655
656 if (!maxTrack || track->Pt() > maxTrack->Pt())
657 maxTrack = track;
2bee31e9 658 }
2bee31e9 659
b12a85c3 660 AliVCluster *maxClus = 0;
2bee31e9 661
b12a85c3 662 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
663 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
664
fb9ac42f 665 if (!cluster)
666 continue;
667
668 if (cluster->Chi2() != 100)
669 continue;
b12a85c3 670
671 TLorentzVector nPart;
672 cluster->GetMomentum(nPart, fVertex);
673
fb9ac42f 674 if (!maxClus || nPart.Et() > maxClusVect.Et()) {
675 new (&maxClusVect) TLorentzVector(nPart);
b12a85c3 676 maxClus = cluster;
677 }
678 }
2bee31e9 679
fb9ac42f 680 if ((maxClus && maxTrack && maxClusVect.Et() > maxTrack->Pt()) || (maxClus && !maxTrack)) {
681 maxPart = maxClus;
682 embJet = jet;
b12a85c3 683 }
684 else if (maxTrack) {
fb9ac42f 685 maxPart = maxTrack;
686 embJet = jet;
b12a85c3 687 }
b12a85c3 688
fb9ac42f 689 return; // MC jets found, exit
690 }
2bee31e9 691}
692
a55e4f1d 693//________________________________________________________________________
b12a85c3 694void AliAnalysisTaskSAJF::GetRigidCone(Float_t &pt, Float_t &eta, Float_t &phi, Bool_t acceptMC,
695 AliEmcalJet *jet, TClonesArray* tracks, TClonesArray* clusters) const
a55e4f1d 696{
b12a85c3 697 if (!tracks)
698 tracks = fTracks;
a55e4f1d 699
b12a85c3 700 if (!clusters)
701 clusters = fCaloClusters;
a55e4f1d 702
df43b607 703 if (!tracks && !clusters)
704 return;
705
b5ee47fb 706 eta = 0;
707 phi = 0;
b12a85c3 708 pt = 0;
a55e4f1d 709
710 Float_t LJeta = 999;
711 Float_t LJphi = 999;
712
713 if (jet) {
714 LJeta = jet->Eta();
715 LJphi = jet->Phi();
716 }
717
1f6fff78 718 Float_t maxEta = fMaxEta;
719 Float_t minEta = fMinEta;
720 Float_t maxPhi = fMaxPhi;
721 Float_t minPhi = fMinPhi;
b5ee47fb 722
723 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
724 if (minPhi < 0) minPhi = 0;
725
a55e4f1d 726 Float_t dLJ = 0;
b12a85c3 727 Int_t repeats = 0;
a55e4f1d 728 do {
b12a85c3 729 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
730 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
a55e4f1d 731 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
b12a85c3 732 repeats++;
733 } while (dLJ < fMinRC2LJ && repeats < 999);
734
735 if (repeats == 999)
736 return;
b5ee47fb 737
df43b607 738 if (fAnaType == kEMCAL && clusters) {
b12a85c3 739 Int_t nclusters = clusters->GetEntriesFast();
b5ee47fb 740 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
b12a85c3 741 AliVCluster* cluster = dynamic_cast<AliVCluster*>(clusters->At(iClusters));
b5ee47fb 742 if (!cluster) {
743 AliError(Form("Could not receive cluster %d", iClusters));
744 continue;
745 }
746
747 if (!(cluster->IsEMCAL())) continue;
748
b12a85c3 749 if (!AcceptCluster(cluster, acceptMC)) continue;
b5ee47fb 750
751 TLorentzVector nPart;
b12a85c3 752 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
b5ee47fb 753
754 Float_t pos[3];
755 cluster->GetPosition(pos);
756 TVector3 clusVec(pos);
757
758 Float_t d = TMath::Sqrt((clusVec.Eta() - eta) * (clusVec.Eta() - eta) + (clusVec.Phi() - phi) * (clusVec.Phi() - phi));
759
760 if (d <= fJetRadius)
761 pt += nPart.Pt();
762 }
a55e4f1d 763 }
764
df43b607 765 if (tracks) {
766 Int_t ntracks = tracks->GetEntriesFast();
767 for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
6fd5039f 768 AliVTrack* track = dynamic_cast<AliVTrack*>(tracks->At(iTracks));
df43b607 769 if(!track) {
770 AliError(Form("Could not retrieve track %d",iTracks));
771 continue;
772 }
773
774 if (!AcceptTrack(track, acceptMC)) continue;
775
776 Float_t tracketa = track->Eta();
777 Float_t trackphi = track->Phi();
778
779 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
780 trackphi += 2 * TMath::Pi();
781 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
782 trackphi -= 2 * TMath::Pi();
783
784 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
a55e4f1d 785
df43b607 786 if (d <= fJetRadius)
787 pt += track->Pt();
788 }
25283b37 789 }
f0a0fd33 790}
a55e4f1d 791//________________________________________________________________________
df43b607 792void AliAnalysisTaskSAJF::Init()
25283b37 793{
6fd5039f 794 AliAnalysisTaskEmcalJet::Init();
25283b37 795
df43b607 796 const Float_t semiDiag = TMath::Sqrt((fMaxPhi - fMinPhi) * (fMaxPhi - fMinPhi) + (fMaxEta - fMinEta) * (fMaxEta - fMinEta)) / 2;
797 if (fMinRC2LJ > semiDiag * 0.5) {
798 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. Will use fMinRC2LJ = %f", fMinRC2LJ, semiDiag * 0.5));
799 fMinRC2LJ = semiDiag * 0.5;
b12a85c3 800 }
25283b37 801}
802
803//________________________________________________________________________
00514d01 804void AliAnalysisTaskSAJF::Terminate(Option_t *)
25283b37 805{
806 // Called once at the end of the analysis.
807}