3 // Jet analysis task (S.Aiola).
9 #include <TClonesArray.h>
13 #include <TLorentzVector.h>
15 #include <TParameter.h>
17 #include "AliAnalysisManager.h"
18 #include "AliCentrality.h"
19 #include "AliVCluster.h"
20 #include "AliVParticle.h"
21 #include "AliEmcalJet.h"
22 #include "AliVEventHandler.h"
25 #include "AliAnalysisTaskSAJF.h"
27 ClassImp(AliAnalysisTaskSAJF)
29 //________________________________________________________________________
30 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
31 AliAnalysisTaskEmcal("AliAnalysisTaskSAJF"),
33 fEmbJetsName("EmbJets"),
34 fRandTracksName("TracksRandomized"),
35 fRandCaloName("CaloClustersRandomized"),
42 fHistRhoVSleadJetPt(0),
44 fHistRCPtExLJVSDPhiLJ(0),
47 fHistEmbPartPhiEta(0),
51 // Default constructor.
53 for (Int_t i = 0; i < 4; i++) {
54 fHistJetPhiEta[i] = 0;
56 fHistJetsPtArea[i] = 0;
57 fHistJetsPtTrack[i] = 0;
58 fHistJetsPtClus[i] = 0;
59 fHistJetsPtNonBias[i] = 0;
60 fHistLeadingJetPt[i] = 0;
61 fHist2LeadingJetPt[i] = 0;
62 fHistJetsNEFvsPt[i] = 0;
63 fHistJetsZvsPt[i] = 0;
64 fHistTracksPtLJ[i] = 0;
66 fHistTracksPtBkg[i] = 0;
67 fHistClusEtBkg[i] = 0;
69 fHistCorrJetsPt[i] = 0;
70 fHistCorrJetsPtClus[i] = 0;
71 fHistCorrJetsPtTrack[i] = 0;
72 fHistCorrJetsPtNonBias[i] = 0;
73 fHistCorrLeadingJetPt[i] = 0;
77 fHistDeltaPtRC[i] = 0;
78 fHistDeltaPtRCExLJ[i] = 0;
79 fHistDeltaPtRCRand[i] = 0;
82 fHistDeltaPtEmb[i] = 0;
87 //________________________________________________________________________
88 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
89 AliAnalysisTaskEmcal(name),
91 fEmbJetsName("EmbJets"),
92 fRandTracksName("TracksRandomized"),
93 fRandCaloName("CaloClustersRandomized"),
100 fHistRhoVSleadJetPt(0),
102 fHistRCPtExLJVSDPhiLJ(0),
104 fHistEmbJetPhiEta(0),
105 fHistEmbPartPhiEta(0),
108 // Standard constructor.
110 for (Int_t i = 0; i < 4; i++) {
111 fHistJetPhiEta[i] = 0;
113 fHistJetsPtArea[i] = 0;
114 fHistJetsPtTrack[i] = 0;
115 fHistJetsPtClus[i] = 0;
116 fHistJetsPtNonBias[i] = 0;
117 fHistLeadingJetPt[i] = 0;
118 fHist2LeadingJetPt[i] = 0;
119 fHistJetsNEFvsPt[i] = 0;
120 fHistJetsZvsPt[i] = 0;
121 fHistTracksPtLJ[i] = 0;
122 fHistClusEtLJ[i] = 0;
123 fHistTracksPtBkg[i] = 0;
124 fHistClusEtBkg[i] = 0;
126 fHistCorrJetsPt[i] = 0;
127 fHistCorrJetsPtClus[i] = 0;
128 fHistCorrJetsPtTrack[i] = 0;
129 fHistCorrJetsPtNonBias[i] = 0;
130 fHistCorrLeadingJetPt[i] = 0;
132 fHistRCPtExLJ[i] = 0;
133 fHistRCPtRand[i] = 0;
134 fHistDeltaPtRC[i] = 0;
135 fHistDeltaPtRCExLJ[i] = 0;
136 fHistDeltaPtRCRand[i] = 0;
139 fHistDeltaPtEmb[i] = 0;
144 //________________________________________________________________________
145 AliAnalysisTaskSAJF::~AliAnalysisTaskSAJF()
150 //________________________________________________________________________
151 void AliAnalysisTaskSAJF::UserCreateOutputObjects()
153 AliAnalysisTaskEmcal::UserCreateOutputObjects();
157 const Float_t binWidth = (fMaxPt - fMinPt) / fNbins;
160 fOutput = new TList();
163 fHistCentrality = new TH1F("fHistCentrality","Event centrality distribution", fNbins, 0, 100);
164 fHistCentrality->GetXaxis()->SetTitle("Centrality (%)");
165 fHistCentrality->GetYaxis()->SetTitle("counts");
166 fOutput->Add(fHistCentrality);
168 fHistRhoVSleadJetPt = new TH2F("fHistRhoVSleadJetPt","fHistRhoVSleadJetPt", fNbins, fMinPt, fMaxPt, fNbins, fMinPt, fMaxPt);
169 fHistRhoVSleadJetPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
170 fHistRhoVSleadJetPt->GetYaxis()->SetTitle("Leading jet p_{T} [GeV/c]");
171 fOutput->Add(fHistRhoVSleadJetPt);
173 fHistRCPhiEta = new TH2F("fHistRCPhiEta","Phi-Eta distribution of rigid cones", 20, -2, 2, 32, 0, 6.4);
174 fHistRCPhiEta->GetXaxis()->SetTitle("#eta");
175 fHistRCPhiEta->GetYaxis()->SetTitle("#phi");
176 fOutput->Add(fHistRCPhiEta);
178 fHistRCPtExLJVSDPhiLJ = new TH2F("fHistRCPtExLJVSDPhiLJ","fHistRCPtExLJVSDPhiLJ", fNbins, fMinPt, fMaxPt, 128, -1.6, 4.8);
179 fHistRCPtExLJVSDPhiLJ->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
180 fHistRCPtExLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi");
181 fOutput->Add(fHistRCPtExLJVSDPhiLJ);
183 fHistRhoVSRCPt = new TH2F("fHistRhoVSRCPt","fHistRhoVSRCPt", fNbins, fMinPt, fMaxPt, fNbins, fMinPt, fMaxPt);
184 fHistRhoVSRCPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
185 fHistRhoVSRCPt->GetYaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
186 fOutput->Add(fHistRhoVSRCPt);
188 fHistEmbJetPhiEta = new TH2F("fHistEmbJetPhiEta","Phi-Eta distribution of embedded jets", 20, -2, 2, 32, 0, 6.4);
189 fHistEmbJetPhiEta->GetXaxis()->SetTitle("#eta");
190 fHistEmbJetPhiEta->GetYaxis()->SetTitle("#phi");
191 fOutput->Add(fHistEmbJetPhiEta);
193 fHistEmbPartPhiEta = new TH2F("fHistEmbPartPhiEta","Phi-Eta distribution of embedded particles", 20, -2, 2, 32, 0, 6.4);
194 fHistEmbPartPhiEta->GetXaxis()->SetTitle("#eta");
195 fHistEmbPartPhiEta->GetYaxis()->SetTitle("#phi");
196 fOutput->Add(fHistEmbPartPhiEta);
198 fHistRhoVSEmbBkg = new TH2F("fHistRhoVSEmbBkg","fHistRhoVSEmbBkg", fNbins, fMinPt, fMaxPt, fNbins, fMinPt, fMaxPt);
199 fHistRhoVSEmbBkg->GetXaxis()->SetTitle("rho * area [GeV/c]");
200 fHistRhoVSEmbBkg->GetYaxis()->SetTitle("background of embedded track [GeV/c]");
201 fOutput->Add(fHistRhoVSEmbBkg);
205 for (Int_t i = 0; i < 4; i++) {
206 histname = "fHistJetPhiEta_";
208 fHistJetPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 20, -2, 2, 32, 0, 6.4);
209 fHistJetPhiEta[i]->GetXaxis()->SetTitle("#eta");
210 fHistJetPhiEta[i]->GetYaxis()->SetTitle("#phi");
211 fOutput->Add(fHistJetPhiEta[i]);
213 histname = "fHistJetsPt_";
215 fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
216 fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
217 fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
218 fOutput->Add(fHistJetsPt[i]);
220 histname = "fHistJetsPtArea_";
222 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
223 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
224 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
225 fOutput->Add(fHistJetsPtArea[i]);
227 if (fAnaType == kEMCAL) {
228 histname = "fHistJetsPtClus_";
230 fHistJetsPtClus[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
231 fHistJetsPtClus[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
232 fHistJetsPtClus[i]->GetYaxis()->SetTitle("counts");
233 fOutput->Add(fHistJetsPtClus[i]);
236 histname = "fHistJetsPtTrack_";
238 fHistJetsPtTrack[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
239 fHistJetsPtTrack[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
240 fHistJetsPtTrack[i]->GetYaxis()->SetTitle("counts");
241 fOutput->Add(fHistJetsPtTrack[i]);
243 histname = "fHistJetsPtNonBias_";
245 fHistJetsPtNonBias[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
246 fHistJetsPtNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
247 fHistJetsPtNonBias[i]->GetYaxis()->SetTitle("counts");
248 fOutput->Add(fHistJetsPtNonBias[i]);
250 histname = "fHistLeadingJetPt_";
252 fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
253 fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
254 fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
255 fOutput->Add(fHistLeadingJetPt[i]);
257 histname = "fHist2LeadingJetPt_";
259 fHist2LeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
260 fHist2LeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
261 fHist2LeadingJetPt[i]->GetYaxis()->SetTitle("counts");
262 fOutput->Add(fHist2LeadingJetPt[i]);
264 histname = "fHistJetsZvsPt_";
266 fHistJetsZvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinPt, fMaxPt);
267 fHistJetsZvsPt[i]->GetXaxis()->SetTitle("Z");
268 fHistJetsZvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
269 fOutput->Add(fHistJetsZvsPt[i]);
271 if (fAnaType == kEMCAL) {
272 histname = "fHistJetsNEFvsPt_";
274 fHistJetsNEFvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinPt, fMaxPt);
275 fHistJetsNEFvsPt[i]->GetXaxis()->SetTitle("NEF");
276 fHistJetsNEFvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
277 fOutput->Add(fHistJetsNEFvsPt[i]);
279 histname = "fHistClusEtLJ_";
281 fHistClusEtLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt / 5);
282 fHistClusEtLJ[i]->GetXaxis()->SetTitle("E_{T} [GeV]");
283 fHistClusEtLJ[i]->GetYaxis()->SetTitle("counts");
284 fOutput->Add(fHistClusEtLJ[i]);
286 histname = "fHistClusEtBkg_";
288 fHistClusEtBkg[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt / 5);
289 fHistClusEtBkg[i]->GetXaxis()->SetTitle("E_{T} [GeV]");
290 fHistClusEtBkg[i]->GetYaxis()->SetTitle("counts");
291 fOutput->Add(fHistClusEtBkg[i]);
294 histname = "fHistTracksPtLJ_";
296 fHistTracksPtLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt / 5);
297 fHistTracksPtLJ[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
298 fHistTracksPtLJ[i]->GetYaxis()->SetTitle("counts");
299 fOutput->Add(fHistTracksPtLJ[i]);
301 histname = "fHistTracksPtBkg_";
303 fHistTracksPtBkg[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt / 5);
304 fHistTracksPtBkg[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
305 fHistTracksPtBkg[i]->GetYaxis()->SetTitle("counts");
306 fOutput->Add(fHistTracksPtBkg[i]);
308 histname = "fHistRho_";
310 fHistRho[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt * 2);
311 fHistRho[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
312 fHistRho[i]->GetYaxis()->SetTitle("counts");
313 fOutput->Add(fHistRho[i]);
315 histname = "fHistCorrJetsPt_";
317 fHistCorrJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxPt, fMaxPt);
318 fHistCorrJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
319 fHistCorrJetsPt[i]->GetYaxis()->SetTitle("counts");
320 fOutput->Add(fHistCorrJetsPt[i]);
322 if (fAnaType == kEMCAL) {
323 histname = "fHistCorrJetsPtClus_";
325 fHistCorrJetsPtClus[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxPt, fMaxPt);
326 fHistCorrJetsPtClus[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
327 fHistCorrJetsPtClus[i]->GetYaxis()->SetTitle("counts");
328 fOutput->Add(fHistCorrJetsPtClus[i]);
331 histname = "fHistCorrJetsPtTrack_";
333 fHistCorrJetsPtTrack[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxPt, fMaxPt);
334 fHistCorrJetsPtTrack[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
335 fHistCorrJetsPtTrack[i]->GetYaxis()->SetTitle("counts");
336 fOutput->Add(fHistCorrJetsPtTrack[i]);
338 histname = "fHistCorrJetsPtNonBias_";
340 fHistCorrJetsPtNonBias[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxPt, fMaxPt);
341 fHistCorrJetsPtNonBias[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
342 fHistCorrJetsPtNonBias[i]->GetYaxis()->SetTitle("counts");
343 fOutput->Add(fHistCorrJetsPtNonBias[i]);
345 histname = "fHistCorrLeadingJetPt_";
347 fHistCorrLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxPt, fMaxPt);
348 fHistCorrLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
349 fHistCorrLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
350 fOutput->Add(fHistCorrLeadingJetPt[i]);
352 histname = "fHistRCPt_";
354 fHistRCPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt * 2);
355 fHistRCPt[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
356 fHistRCPt[i]->GetYaxis()->SetTitle("counts");
357 fOutput->Add(fHistRCPt[i]);
359 histname = "fHistRCPtExLJ_";
361 fHistRCPtExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt * 2);
362 fHistRCPtExLJ[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
363 fHistRCPtExLJ[i]->GetYaxis()->SetTitle("counts");
364 fOutput->Add(fHistRCPtExLJ[i]);
366 histname = "fHistRCPtRand_";
368 fHistRCPtRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt * 2);
369 fHistRCPtRand[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
370 fHistRCPtRand[i]->GetYaxis()->SetTitle("counts");
371 fOutput->Add(fHistRCPtRand[i]);
373 histname = "fHistDeltaPtRC_";
375 fHistDeltaPtRC[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt - fMaxPt / 2 + binWidth / 2, fMinPt + fMaxPt / 2 + binWidth / 2);
376 fHistDeltaPtRC[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
377 fHistDeltaPtRC[i]->GetYaxis()->SetTitle("counts");
378 fOutput->Add(fHistDeltaPtRC[i]);
380 histname = "fHistDeltaPtRCExLJ_";
382 fHistDeltaPtRCExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt - fMaxPt / 2 + binWidth / 2, fMinPt + fMaxPt / 2 + binWidth / 2);
383 fHistDeltaPtRCExLJ[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
384 fHistDeltaPtRCExLJ[i]->GetYaxis()->SetTitle("counts");
385 fOutput->Add(fHistDeltaPtRCExLJ[i]);
387 histname = "fHistDeltaPtRCRand_";
389 fHistDeltaPtRCRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt - fMaxPt / 2 + binWidth / 2, fMinPt + fMaxPt / 2 + binWidth / 2);
390 fHistDeltaPtRCRand[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
391 fHistDeltaPtRCRand[i]->GetYaxis()->SetTitle("counts");
392 fOutput->Add(fHistDeltaPtRCRand[i]);
394 histname = "fHistEmbJets_";
396 fHistEmbJets[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
397 fHistEmbJets[i]->GetXaxis()->SetTitle("embedded jet p_{T} [GeV/c]");
398 fHistEmbJets[i]->GetYaxis()->SetTitle("counts");
399 fOutput->Add(fHistEmbJets[i]);
401 histname = "fHistEmbPart_";
403 fHistEmbPart[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt, fMaxPt);
404 fHistEmbPart[i]->GetXaxis()->SetTitle("embedded particle p_{T} [GeV/c]");
405 fHistEmbPart[i]->GetYaxis()->SetTitle("counts");
406 fOutput->Add(fHistEmbPart[i]);
408 histname = "fHistDeltaPtEmb_";
410 fHistDeltaPtEmb[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinPt - fMaxPt / 2 + binWidth / 2, fMinPt + fMaxPt / 2 + binWidth / 2);
411 fHistDeltaPtEmb[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
412 fHistDeltaPtEmb[i]->GetYaxis()->SetTitle("counts");
413 fOutput->Add(fHistDeltaPtEmb[i]);
416 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
419 //________________________________________________________________________
420 void AliAnalysisTaskSAJF::RetrieveEventObjects()
422 AliAnalysisTaskEmcal::RetrieveEventObjects();
424 if (strcmp(fEmbJetsName,"")) {
425 fEmbJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fEmbJetsName));
427 AliWarning(Form("Could not retrieve emb jets %s!", fEmbJetsName.Data()));
431 if (strcmp(fRandCaloName,"") && fAnaType == kEMCAL) {
432 fRandCaloClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fRandCaloName));
433 if (!fRandCaloClusters) {
434 AliWarning(Form("Could not retrieve randomized clusters %s!", fRandCaloName.Data()));
438 if (strcmp(fRandTracksName,"")) {
439 fRandTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fRandTracksName));
441 AliWarning(Form("Could not retrieve randomized tracks %s!", fRandTracksName.Data()));
448 if (strcmp(fRhoName,"")) {
449 TParameter<Double_t> *rho = dynamic_cast<TParameter<Double_t>*>(InputEvent()->FindListObject(fRhoName));
452 fRho = rho->GetVal();
455 AliWarning(Form("Could not retrieve rho %s!", fRhoName.Data()));
460 //________________________________________________________________________
461 void AliAnalysisTaskSAJF::FillHistograms()
464 AliWarning(Form("Could not retrieve rho information! Event skipped!"));
468 Int_t maxJetIndex = -1;
469 Int_t max2JetIndex = -1;
472 // General histograms
473 // _________________________________
475 DoJetLoop(maxJetIndex, max2JetIndex);
480 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
484 fHistCentrality->Fill(fCent);
486 fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
487 fHistRhoVSleadJetPt->Fill(fRho * jet->Area(), jet->Pt());
489 jet->SortConstituents();
491 AliEmcalJet* jet2 = 0;
492 if (max2JetIndex >= 0)
493 jet2 = dynamic_cast<AliEmcalJet*>(fJets->At(max2JetIndex));
496 fHist2LeadingJetPt[fCentBin]->Fill(jet2->Pt());
497 jet2->SortConstituents();
500 fHistRho[fCentBin]->Fill(fRho);
502 Float_t maxJetCorrPt = jet->Pt() - fRho * jet->Area();
503 if (maxJetCorrPt > 0)
504 fHistCorrLeadingJetPt[fCentBin]->Fill(maxJetCorrPt);
506 DoTrackLoop(maxJetIndex);
508 if (fAnaType == kEMCAL)
509 DoClusterLoop(maxJetIndex);
513 // _________________________________
515 const Float_t rcArea = fJetRadius * fJetRadius * TMath::Pi();
517 // Simple random cones
521 GetRigidCone(RCpt, RCeta, RCphi, kFALSE, 0);
523 fHistRCPt[fCentBin]->Fill(RCpt / rcArea);
524 fHistDeltaPtRC[fCentBin]->Fill(RCpt - rcArea * fRho);
527 // Random cones far from leading jet
528 Float_t RCptExLJ = 0;
529 Float_t RCetaExLJ = 0;
530 Float_t RCphiExLJ = 0;
531 GetRigidCone(RCptExLJ, RCetaExLJ, RCphiExLJ, kFALSE, jet);
533 fHistRCPhiEta->Fill(RCetaExLJ, RCphiExLJ);
534 fHistRhoVSRCPt->Fill(fRho, RCptExLJ / rcArea);
536 Float_t dphi = RCphiExLJ - jet->Phi();
537 if (dphi > 4.8) dphi -= TMath::Pi() * 2;
538 if (dphi < -1.6) dphi += TMath::Pi() * 2;
539 fHistRCPtExLJVSDPhiLJ->Fill(RCptExLJ, dphi);
541 fHistRCPtExLJ[fCentBin]->Fill(RCptExLJ / rcArea);
542 fHistDeltaPtRCExLJ[fCentBin]->Fill(RCptExLJ - rcArea * fRho);
545 // Random cones with randomized particles
546 Float_t RCptRand = 0;
547 Float_t RCetaRand = 0;
548 Float_t RCphiRand = 0;
549 GetRigidCone(RCptRand, RCetaRand, RCphiRand, kTRUE, 0, fRandTracks, fRandCaloClusters);
551 fHistRCPtRand[fCentBin]->Fill(RCptRand / rcArea);
552 fHistDeltaPtRCRand[fCentBin]->Fill(RCptRand - rcArea * fRho);
557 // _________________________________
562 AliEmcalJet *embJet = 0;
563 TObject *maxPart = 0;
565 DoEmbJetLoop(embJet, maxPart);
567 if (embJet && maxPart) {
568 Float_t maxEmbPartPt = 0;
569 Float_t maxEmbPartEta = 0;
570 Float_t maxEmbPartPhi = 0;
572 AliVCluster *cluster = dynamic_cast<AliVCluster*>(maxPart);
574 TLorentzVector nPart;
575 cluster->GetMomentum(nPart, fVertex);
577 cluster->GetPosition(pos);
578 TVector3 clusVec(pos);
580 maxEmbPartPt = nPart.Et();
581 maxEmbPartEta = clusVec.Eta();
582 maxEmbPartPhi = clusVec.Phi();
585 AliVParticle *track = dynamic_cast<AliVParticle*>(maxPart);
587 maxEmbPartPt = track->Pt();
588 maxEmbPartEta = track->Eta();
589 maxEmbPartPhi = track->Phi();
592 AliWarning(Form("%s - Embedded particle type not recognized (neither AliVCluster nor AliVParticle)!", GetName()));
596 fHistEmbJets[fCentBin]->Fill(embJet->Pt());
597 fHistEmbPart[fCentBin]->Fill(maxEmbPartPt);
598 fHistEmbJetPhiEta->Fill(embJet->Eta(), embJet->Phi());
599 fHistEmbPartPhiEta->Fill(maxEmbPartEta, maxEmbPartPhi);
601 fHistDeltaPtEmb[fCentBin]->Fill(embJet->Pt() - embJet->Area() * fRho - maxEmbPartPt);
602 fHistRhoVSEmbBkg->Fill(embJet->Area() * fRho, embJet->Pt() - maxEmbPartPt);
605 AliWarning(Form("%s - Embedded particle not found in the event!", GetName()));
609 //________________________________________________________________________
610 void AliAnalysisTaskSAJF::DoJetLoop(Int_t &maxJetIndex, Int_t &max2JetIndex)
615 Int_t njets = fJets->GetEntriesFast();
617 Float_t maxJetPt = 0;
618 Float_t max2JetPt = 0;
619 for (Int_t ij = 0; ij < njets; ij++) {
621 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
624 AliError(Form("Could not receive jet %d", ij));
631 Float_t corrPt = jet->Pt() - fRho * jet->Area();
633 fHistJetsPtNonBias[fCentBin]->Fill(jet->Pt());
634 fHistCorrJetsPtNonBias[fCentBin]->Fill(corrPt);
636 if (jet->MaxTrackPt() > fPtBiasJetTrack) {
637 fHistJetsPtTrack[fCentBin]->Fill(jet->Pt());
638 fHistCorrJetsPtTrack[fCentBin]->Fill(corrPt);
641 if (fAnaType == kEMCAL && jet->MaxClusterPt() > fPtBiasJetClus) {
642 fHistJetsPtClus[fCentBin]->Fill(jet->Pt());
643 fHistCorrJetsPtClus[fCentBin]->Fill(corrPt);
646 if (jet->MaxTrackPt() < fPtBiasJetTrack && (fAnaType == kTPC || jet->MaxClusterPt() < fPtBiasJetClus))
649 fHistJetsPt[fCentBin]->Fill(jet->Pt());
650 fHistJetsPtArea[fCentBin]->Fill(corrPt, jet->Area());
651 fHistCorrJetsPt[fCentBin]->Fill(corrPt);
653 fHistJetPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
655 if (fAnaType == kEMCAL)
656 fHistJetsNEFvsPt[fCentBin]->Fill(jet->NEF(), jet->Pt());
659 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
660 AliVParticle *track = jet->TrackAt(it, fTracks);
662 fHistJetsZvsPt[fCentBin]->Fill(track->Pt() / jet->Pt(), jet->Pt());
667 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
668 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
671 TLorentzVector nPart;
672 cluster->GetMomentum(nPart, fVertex);
673 fHistJetsZvsPt[fCentBin]->Fill(nPart.Et() / jet->Pt(), jet->Pt());
678 if (maxJetPt < corrPt) {
679 max2JetPt = maxJetPt;
680 max2JetIndex = maxJetIndex;
684 else if (max2JetPt < corrPt) {
691 //________________________________________________________________________
692 void AliAnalysisTaskSAJF::DoEmbJetLoop(AliEmcalJet* &embJet, TObject* &maxPart)
697 TLorentzVector *maxClusVect = new TLorentzVector();
699 Int_t nembjets = fEmbJets->GetEntriesFast();
701 for (Int_t ij = 0; ij < nembjets; ij++) {
703 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fEmbJets->At(ij));
706 AliError(Form("Could not receive jet %d", ij));
713 AliVParticle *maxTrack = 0;
715 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
716 AliVParticle *track = jet->TrackAt(it, fTracks);
718 if (!track) continue;
720 if (!maxTrack || track->Pt() > maxTrack->Pt())
724 AliVCluster *maxClus = 0;
726 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
727 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
729 if (!cluster) continue;
731 TLorentzVector nPart;
732 cluster->GetMomentum(nPart, fVertex);
734 if (!maxClus || nPart.Et() > maxClusVect->Et()) {
735 new (maxClusVect) TLorentzVector(nPart);
740 if ((maxClus && maxTrack && maxClusVect->Et() > maxTrack->Pt()) || (maxClus && !maxTrack)) {
741 if (maxClus->Chi2() == 100) {
749 if (maxTrack->GetLabel() == 100) {
761 //________________________________________________________________________
762 void AliAnalysisTaskSAJF::DoTrackLoop(Int_t maxJetIndex)
767 AliEmcalJet* jet = 0;
768 if (maxJetIndex >= 0 && fJets)
769 jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
771 Int_t ntracks = fTracks->GetEntriesFast();
773 for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
774 AliVParticle* track = dynamic_cast<AliVParticle*>(fTracks->At(iTracks));
776 AliError(Form("Could not retrieve track %d",iTracks));
780 if (!AcceptTrack(track)) continue;
782 if (jet && IsJetTrack(jet, iTracks)) {
783 fHistTracksPtLJ[fCentBin]->Fill(track->Pt());
786 fHistTracksPtBkg[fCentBin]->Fill(track->Pt());
791 //________________________________________________________________________
792 void AliAnalysisTaskSAJF::DoClusterLoop(Int_t maxJetIndex)
797 AliEmcalJet* jet = 0;
798 if (maxJetIndex >= 0 && fJets)
799 jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
801 Int_t nclusters = fCaloClusters->GetEntriesFast();
802 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
803 AliVCluster* cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(iClusters));
805 AliError(Form("Could not receive cluster %d", iClusters));
809 if (!(cluster->IsEMCAL())) continue;
811 if (!AcceptCluster(cluster)) continue;
813 TLorentzVector nPart;
814 cluster->GetMomentum(nPart, fVertex);
816 if (jet && IsJetCluster(jet, iClusters)) {
817 fHistClusEtLJ[fCentBin]->Fill(nPart.Et());
820 fHistClusEtBkg[fCentBin]->Fill(nPart.Et());
825 //________________________________________________________________________
826 void AliAnalysisTaskSAJF::GetRigidCone(Float_t &pt, Float_t &eta, Float_t &phi, Bool_t acceptMC,
827 AliEmcalJet *jet, TClonesArray* tracks, TClonesArray* clusters) const
833 clusters = fCaloClusters;
835 if (!tracks && !clusters)
850 Float_t maxEta = fMaxEta - fJetRadius;
851 Float_t minEta = fMinEta + fJetRadius;
852 Float_t maxPhi = fMaxPhi - fJetRadius;
853 Float_t minPhi = fMinPhi + fJetRadius;
855 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
856 if (minPhi < 0) minPhi = 0;
861 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
862 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
863 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
865 } while (dLJ < fMinRC2LJ && repeats < 999);
870 if (fAnaType == kEMCAL && clusters) {
871 Int_t nclusters = clusters->GetEntriesFast();
872 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
873 AliVCluster* cluster = dynamic_cast<AliVCluster*>(clusters->At(iClusters));
875 AliError(Form("Could not receive cluster %d", iClusters));
879 if (!(cluster->IsEMCAL())) continue;
881 if (!AcceptCluster(cluster, acceptMC)) continue;
883 TLorentzVector nPart;
884 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
887 cluster->GetPosition(pos);
888 TVector3 clusVec(pos);
890 Float_t d = TMath::Sqrt((clusVec.Eta() - eta) * (clusVec.Eta() - eta) + (clusVec.Phi() - phi) * (clusVec.Phi() - phi));
898 Int_t ntracks = tracks->GetEntriesFast();
899 for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
900 AliVParticle* track = dynamic_cast<AliVParticle*>(tracks->At(iTracks));
902 AliError(Form("Could not retrieve track %d",iTracks));
906 if (!AcceptTrack(track, acceptMC)) continue;
908 Float_t tracketa = track->Eta();
909 Float_t trackphi = track->Phi();
911 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
912 trackphi += 2 * TMath::Pi();
913 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
914 trackphi -= 2 * TMath::Pi();
916 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
923 //________________________________________________________________________
924 void AliAnalysisTaskSAJF::Init()
926 AliAnalysisTaskEmcal::Init();
928 const Float_t semiDiag = TMath::Sqrt((fMaxPhi - fMinPhi) * (fMaxPhi - fMinPhi) + (fMaxEta - fMinEta) * (fMaxEta - fMinEta)) / 2;
929 if (fMinRC2LJ > semiDiag * 0.5) {
930 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. Will use fMinRC2LJ = %f", fMinRC2LJ, semiDiag * 0.5));
931 fMinRC2LJ = semiDiag * 0.5;
935 //________________________________________________________________________
936 void AliAnalysisTaskSAJF::Terminate(Option_t *)
938 // Called once at the end of the analysis.