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 "AliVTrack.h"
22 #include "AliEmcalJet.h"
23 #include "AliVEventHandler.h"
26 #include "AliAnalysisTaskSAJF.h"
28 ClassImp(AliAnalysisTaskSAJF)
30 //________________________________________________________________________
31 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF() :
32 AliAnalysisTaskEmcalJet("AliAnalysisTaskSAJF"),
34 fEmbJetsName("EmbJets"),
35 fRandTracksName("TracksRandomized"),
36 fRandCaloName("CaloClustersRandomized"),
38 fSkipEventsWithNoJets(kTRUE),
44 fHistRejectedEvents(0),
45 fHistRhoVSleadJetPt(0),
47 fHistRCPtExLJVSDPhiLJ(0),
50 fHistEmbPartPhiEta(0),
54 // Default constructor.
56 for (Int_t i = 0; i < 4; i++) {
57 fHistJetPhiEta[i] = 0;
59 fHistJetsPtArea[i] = 0;
60 fHistLeadingJetPt[i] = 0;
61 fHist2LeadingJetPt[i] = 0;
62 fHistJetsNEFvsPt[i] = 0;
63 fHistJetsZvsPt[i] = 0;
65 fHistCorrJetsPt[i] = 0;
66 fHistCorrLeadingJetPt[i] = 0;
70 fHistDeltaPtRC[i] = 0;
71 fHistDeltaPtRCExLJ[i] = 0;
72 fHistDeltaPtRCRand[i] = 0;
75 fHistDeltaPtEmb[i] = 0;
79 //________________________________________________________________________
80 AliAnalysisTaskSAJF::AliAnalysisTaskSAJF(const char *name) :
81 AliAnalysisTaskEmcalJet(name),
83 fEmbJetsName("EmbJets"),
84 fRandTracksName("TracksRandomized"),
85 fRandCaloName("CaloClustersRandomized"),
87 fSkipEventsWithNoJets(kTRUE),
93 fHistRejectedEvents(0),
94 fHistRhoVSleadJetPt(0),
96 fHistRCPtExLJVSDPhiLJ(0),
99 fHistEmbPartPhiEta(0),
102 // Standard constructor.
104 for (Int_t i = 0; i < 4; i++) {
105 fHistJetPhiEta[i] = 0;
107 fHistJetsPtArea[i] = 0;
108 fHistLeadingJetPt[i] = 0;
109 fHist2LeadingJetPt[i] = 0;
110 fHistJetsNEFvsPt[i] = 0;
111 fHistJetsZvsPt[i] = 0;
113 fHistCorrJetsPt[i] = 0;
114 fHistCorrLeadingJetPt[i] = 0;
116 fHistRCPtExLJ[i] = 0;
117 fHistRCPtRand[i] = 0;
118 fHistDeltaPtRC[i] = 0;
119 fHistDeltaPtRCExLJ[i] = 0;
120 fHistDeltaPtRCRand[i] = 0;
123 fHistDeltaPtEmb[i] = 0;
127 //________________________________________________________________________
128 AliAnalysisTaskSAJF::~AliAnalysisTaskSAJF()
133 //________________________________________________________________________
134 void AliAnalysisTaskSAJF::UserCreateOutputObjects()
136 // Create user output.
138 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
140 const Float_t binWidth = (fMaxBinPt - fMinBinPt) / fNbins;
143 fOutput = new TList();
146 fHistCentrality = new TH1F("fHistCentrality","fHistCentrality", fNbins, 0, 100);
147 fHistCentrality->GetXaxis()->SetTitle("Centrality (%)");
148 fHistCentrality->GetYaxis()->SetTitle("counts");
149 fOutput->Add(fHistCentrality);
151 fHistRejectedEvents = new TH1F("fHistRejectedEvents","fHistRejectedEvents", 6, 0, 6);
152 fHistRejectedEvents->GetXaxis()->SetTitle("Reason");
153 fHistRejectedEvents->GetYaxis()->SetTitle("counts");
154 fHistRejectedEvents->GetXaxis()->SetBinLabel(1, "Rho <= 0");
155 fHistRejectedEvents->GetXaxis()->SetBinLabel(2, "Max Jet <= 0");
156 fHistRejectedEvents->GetXaxis()->SetBinLabel(3, "Max Jet not found");
157 fHistRejectedEvents->GetXaxis()->SetBinLabel(4, "No jets");
158 fOutput->Add(fHistRejectedEvents);
160 fHistRhoVSleadJetPt = new TH2F("fHistRhoVSleadJetPt","fHistRhoVSleadJetPt", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
161 fHistRhoVSleadJetPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
162 fHistRhoVSleadJetPt->GetYaxis()->SetTitle("Leading jet p_{T} [GeV/c]");
163 fOutput->Add(fHistRhoVSleadJetPt);
165 fHistRCPhiEta = new TH2F("fHistRCPhiEta","Phi-Eta distribution of rigid cones", 40, -2, 2, 64, 0, 6.4);
166 fHistRCPhiEta->GetXaxis()->SetTitle("#eta");
167 fHistRCPhiEta->GetYaxis()->SetTitle("#phi");
168 fOutput->Add(fHistRCPhiEta);
170 fHistRCPtExLJVSDPhiLJ = new TH2F("fHistRCPtExLJVSDPhiLJ","fHistRCPtExLJVSDPhiLJ", fNbins, fMinBinPt, fMaxBinPt, 128, -1.6, 4.8);
171 fHistRCPtExLJVSDPhiLJ->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
172 fHistRCPtExLJVSDPhiLJ->GetYaxis()->SetTitle("#Delta#phi");
173 fOutput->Add(fHistRCPtExLJVSDPhiLJ);
175 fHistRhoVSRCPt = new TH2F("fHistRhoVSRCPt","fHistRhoVSRCPt", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
176 fHistRhoVSRCPt->GetXaxis()->SetTitle("#rho * area [GeV/c]");
177 fHistRhoVSRCPt->GetYaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
178 fOutput->Add(fHistRhoVSRCPt);
180 fHistEmbJetPhiEta = new TH2F("fHistEmbJetPhiEta","Phi-Eta distribution of embedded jets", 40, -2, 2, 64, 0, 6.4);
181 fHistEmbJetPhiEta->GetXaxis()->SetTitle("#eta");
182 fHistEmbJetPhiEta->GetYaxis()->SetTitle("#phi");
183 fOutput->Add(fHistEmbJetPhiEta);
185 fHistEmbPartPhiEta = new TH2F("fHistEmbPartPhiEta","Phi-Eta distribution of embedded particles", 40, -2, 2, 64, 0, 6.4);
186 fHistEmbPartPhiEta->GetXaxis()->SetTitle("#eta");
187 fHistEmbPartPhiEta->GetYaxis()->SetTitle("#phi");
188 fOutput->Add(fHistEmbPartPhiEta);
190 fHistRhoVSEmbBkg = new TH2F("fHistRhoVSEmbBkg","fHistRhoVSEmbBkg", fNbins, fMinBinPt, fMaxBinPt, fNbins, fMinBinPt, fMaxBinPt);
191 fHistRhoVSEmbBkg->GetXaxis()->SetTitle("rho * area [GeV/c]");
192 fHistRhoVSEmbBkg->GetYaxis()->SetTitle("background of embedded track [GeV/c]");
193 fOutput->Add(fHistRhoVSEmbBkg);
197 for (Int_t i = 0; i < 4; i++) {
198 histname = "fHistJetPhiEta_";
200 fHistJetPhiEta[i] = new TH2F(histname.Data(), histname.Data(), 40, -2, 2, 64, 0, 6.4);
201 fHistJetPhiEta[i]->GetXaxis()->SetTitle("#eta");
202 fHistJetPhiEta[i]->GetYaxis()->SetTitle("#phi");
203 fOutput->Add(fHistJetPhiEta[i]);
205 histname = "fHistJetsPt_";
207 fHistJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
208 fHistJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
209 fHistJetsPt[i]->GetYaxis()->SetTitle("counts");
210 fOutput->Add(fHistJetsPt[i]);
212 histname = "fHistJetsPtArea_";
214 fHistJetsPtArea[i] = new TH2F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt, 20, 0, fJetRadius * fJetRadius * TMath::Pi() * 1.5);
215 fHistJetsPtArea[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
216 fHistJetsPtArea[i]->GetYaxis()->SetTitle("area");
217 fOutput->Add(fHistJetsPtArea[i]);
219 histname = "fHistLeadingJetPt_";
221 fHistLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
222 fHistLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
223 fHistLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
224 fOutput->Add(fHistLeadingJetPt[i]);
226 histname = "fHist2LeadingJetPt_";
228 fHist2LeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
229 fHist2LeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV]");
230 fHist2LeadingJetPt[i]->GetYaxis()->SetTitle("counts");
231 fOutput->Add(fHist2LeadingJetPt[i]);
233 histname = "fHistJetsZvsPt_";
235 fHistJetsZvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinBinPt, fMaxBinPt);
236 fHistJetsZvsPt[i]->GetXaxis()->SetTitle("Z");
237 fHistJetsZvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
238 fOutput->Add(fHistJetsZvsPt[i]);
240 if (fAnaType == kEMCAL) {
241 histname = "fHistJetsNEFvsPt_";
243 fHistJetsNEFvsPt[i] = new TH2F(histname.Data(), histname.Data(), fNbins, 0, 1.2, fNbins, fMinBinPt, fMaxBinPt);
244 fHistJetsNEFvsPt[i]->GetXaxis()->SetTitle("NEF");
245 fHistJetsNEFvsPt[i]->GetYaxis()->SetTitle("p_{T} [GeV/c]");
246 fOutput->Add(fHistJetsNEFvsPt[i]);
249 histname = "fHistRho_";
251 fHistRho[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
252 fHistRho[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
253 fHistRho[i]->GetYaxis()->SetTitle("counts");
254 fOutput->Add(fHistRho[i]);
256 histname = "fHistCorrJetsPt_";
258 fHistCorrJetsPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
259 fHistCorrJetsPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
260 fHistCorrJetsPt[i]->GetYaxis()->SetTitle("counts");
261 fOutput->Add(fHistCorrJetsPt[i]);
263 histname = "fHistCorrLeadingJetPt_";
265 fHistCorrLeadingJetPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins * 2, -fMaxBinPt, fMaxBinPt);
266 fHistCorrLeadingJetPt[i]->GetXaxis()->SetTitle("p_{T} [GeV/c]");
267 fHistCorrLeadingJetPt[i]->GetYaxis()->SetTitle("counts");
268 fOutput->Add(fHistCorrLeadingJetPt[i]);
270 histname = "fHistRCPt_";
272 fHistRCPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
273 fHistRCPt[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
274 fHistRCPt[i]->GetYaxis()->SetTitle("counts");
275 fOutput->Add(fHistRCPt[i]);
277 histname = "fHistRCPtExLJ_";
279 fHistRCPtExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
280 fHistRCPtExLJ[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
281 fHistRCPtExLJ[i]->GetYaxis()->SetTitle("counts");
282 fOutput->Add(fHistRCPtExLJ[i]);
284 histname = "fHistRCPtRand_";
286 fHistRCPtRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt * 2);
287 fHistRCPtRand[i]->GetXaxis()->SetTitle("rigid cone p_{T} [GeV/c]");
288 fHistRCPtRand[i]->GetYaxis()->SetTitle("counts");
289 fOutput->Add(fHistRCPtRand[i]);
291 histname = "fHistDeltaPtRC_";
293 fHistDeltaPtRC[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
294 fHistDeltaPtRC[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
295 fHistDeltaPtRC[i]->GetYaxis()->SetTitle("counts");
296 fOutput->Add(fHistDeltaPtRC[i]);
298 histname = "fHistDeltaPtRCExLJ_";
300 fHistDeltaPtRCExLJ[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
301 fHistDeltaPtRCExLJ[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
302 fHistDeltaPtRCExLJ[i]->GetYaxis()->SetTitle("counts");
303 fOutput->Add(fHistDeltaPtRCExLJ[i]);
305 histname = "fHistDeltaPtRCRand_";
307 fHistDeltaPtRCRand[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
308 fHistDeltaPtRCRand[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
309 fHistDeltaPtRCRand[i]->GetYaxis()->SetTitle("counts");
310 fOutput->Add(fHistDeltaPtRCRand[i]);
312 histname = "fHistEmbJets_";
314 fHistEmbJets[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
315 fHistEmbJets[i]->GetXaxis()->SetTitle("embedded jet p_{T} [GeV/c]");
316 fHistEmbJets[i]->GetYaxis()->SetTitle("counts");
317 fOutput->Add(fHistEmbJets[i]);
319 histname = "fHistEmbPart_";
321 fHistEmbPart[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt, fMaxBinPt);
322 fHistEmbPart[i]->GetXaxis()->SetTitle("embedded particle p_{T} [GeV/c]");
323 fHistEmbPart[i]->GetYaxis()->SetTitle("counts");
324 fOutput->Add(fHistEmbPart[i]);
326 histname = "fHistDeltaPtEmb_";
328 fHistDeltaPtEmb[i] = new TH1F(histname.Data(), histname.Data(), fNbins, fMinBinPt - fMaxBinPt / 2 + binWidth / 2, fMinBinPt + fMaxBinPt / 2 + binWidth / 2);
329 fHistDeltaPtEmb[i]->GetXaxis()->SetTitle("#deltap_{T} [GeV/c]");
330 fHistDeltaPtEmb[i]->GetYaxis()->SetTitle("counts");
331 fOutput->Add(fHistDeltaPtEmb[i]);
334 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
337 //________________________________________________________________________
338 Bool_t AliAnalysisTaskSAJF::RetrieveEventObjects()
340 // Retrieve event objects.
342 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
347 if (strcmp(fRhoName,"")) {
348 TParameter<Double_t> *rho = dynamic_cast<TParameter<Double_t>*>(InputEvent()->FindListObject(fRhoName));
351 fRho = rho->GetVal();
354 AliWarning(Form("Could not retrieve rho %s!", fRhoName.Data()));
358 if (strcmp(fEmbJetsName,"")) {
359 fEmbJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fEmbJetsName));
361 AliWarning(Form("Could not retrieve emb jets %s!", fEmbJetsName.Data()));
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()));
372 if (strcmp(fRandTracksName,"")) {
373 fRandTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fRandTracksName));
375 AliWarning(Form("Could not retrieve randomized tracks %s!", fRandTracksName.Data()));
382 //________________________________________________________________________
383 Bool_t AliAnalysisTaskSAJF::FillHistograms()
388 fHistRejectedEvents->Fill("Rho <= 0", 1);
392 Int_t maxJetIndex = -1;
393 Int_t max2JetIndex = -1;
396 // General histograms
397 // _________________________________
399 GetLeadingJets(maxJetIndex, max2JetIndex);
401 if (fSkipEventsWithNoJets && maxJetIndex < 0) {
402 fHistRejectedEvents->Fill("No jets", 1);
406 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
407 if (fSkipEventsWithNoJets && !jet) {
408 fHistRejectedEvents->Fill("Max Jet not found", 1);
412 Float_t maxJetCorrPt = 0;
415 maxJetCorrPt = jet->Pt() - fRho * jet->Area();
417 if (fSkipEventsWithNoJets && maxJetCorrPt <= 0) {
418 fHistRejectedEvents->Fill("Max Jet <= 0", 1);
422 fHistCentrality->Fill(fCent);
423 fHistRho[fCentBin]->Fill(fRho);
426 fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
427 fHistRhoVSleadJetPt->Fill(fRho * jet->Area(), jet->Pt());
428 fHistCorrLeadingJetPt[fCentBin]->Fill(maxJetCorrPt);
431 AliEmcalJet* jet2 = 0;
432 if (max2JetIndex >= 0)
433 jet2 = dynamic_cast<AliEmcalJet*>(fJets->At(max2JetIndex));
436 fHist2LeadingJetPt[fCentBin]->Fill(jet2->Pt());
442 // _________________________________
444 const Float_t rcArea = fJetRadius * fJetRadius * TMath::Pi();
446 // Simple random cones
450 GetRigidCone(RCpt, RCeta, RCphi, kFALSE, 0);
452 fHistRCPt[fCentBin]->Fill(RCpt / rcArea);
453 fHistDeltaPtRC[fCentBin]->Fill(RCpt - rcArea * fRho);
456 // Random cones far from leading jet
457 Float_t RCptExLJ = 0;
458 Float_t RCetaExLJ = 0;
459 Float_t RCphiExLJ = 0;
460 GetRigidCone(RCptExLJ, RCetaExLJ, RCphiExLJ, kFALSE, jet);
462 fHistRCPhiEta->Fill(RCetaExLJ, RCphiExLJ);
463 fHistRhoVSRCPt->Fill(fRho, RCptExLJ / rcArea);
465 Float_t dphi = RCphiExLJ - jet->Phi();
466 if (dphi > 4.8) dphi -= TMath::Pi() * 2;
467 if (dphi < -1.6) dphi += TMath::Pi() * 2;
468 fHistRCPtExLJVSDPhiLJ->Fill(RCptExLJ, dphi);
470 fHistRCPtExLJ[fCentBin]->Fill(RCptExLJ / rcArea);
471 fHistDeltaPtRCExLJ[fCentBin]->Fill(RCptExLJ - rcArea * fRho);
474 // Random cones with randomized particles
475 Float_t RCptRand = 0;
476 Float_t RCetaRand = 0;
477 Float_t RCphiRand = 0;
478 GetRigidCone(RCptRand, RCetaRand, RCphiRand, kTRUE, 0, fRandTracks, fRandCaloClusters);
480 fHistRCPtRand[fCentBin]->Fill(RCptRand / rcArea);
481 fHistDeltaPtRCRand[fCentBin]->Fill(RCptRand - rcArea * fRho);
486 // _________________________________
491 AliEmcalJet *embJet = 0;
492 TObject *maxPart = 0;
494 DoEmbJetLoop(embJet, maxPart);
498 fHistEmbJets[fCentBin]->Fill(embJet->Pt());
499 fHistEmbPart[fCentBin]->Fill(embJet->MCPt());
500 fHistEmbJetPhiEta->Fill(embJet->Eta(), embJet->Phi());
501 fHistDeltaPtEmb[fCentBin]->Fill(embJet->Pt() - embJet->Area() * fRho - embJet->MCPt());
502 fHistRhoVSEmbBkg->Fill(embJet->Area() * fRho, embJet->Pt() - embJet->MCPt());
504 AliVCluster *cluster = dynamic_cast<AliVCluster*>(maxPart);
507 cluster->GetPosition(pos);
508 TVector3 clusVec(pos);
510 fHistEmbPartPhiEta->Fill(clusVec.Eta(), clusVec.Phi());
513 AliVTrack *track = dynamic_cast<AliVTrack*>(maxPart);
515 fHistEmbPartPhiEta->Fill(track->Eta(), track->Phi());
518 AliWarning(Form("%s - Embedded particle type not found or not recognized (neither AliVCluster nor AliVTrack)!", GetName()));
525 AliWarning(Form("%s - Embedded jet not found in the event!", GetName()));
531 //________________________________________________________________________
532 void AliAnalysisTaskSAJF::GetLeadingJets(Int_t &maxJetIndex, Int_t &max2JetIndex)
534 // Get the leading jets.
539 const Int_t njets = fJets->GetEntriesFast();
541 Float_t maxJetPt = 0;
542 Float_t max2JetPt = 0;
543 for (Int_t ij = 0; ij < njets; ij++) {
545 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
548 AliError(Form("Could not receive jet %d", ij));
555 Float_t corrPt = jet->Pt() - fRho * jet->Area();
557 if (maxJetIndex == -1 || maxJetPt < corrPt) {
558 max2JetPt = maxJetPt;
559 max2JetIndex = maxJetIndex;
563 else if (max2JetIndex == -1 || max2JetPt < corrPt) {
570 //________________________________________________________________________
571 void AliAnalysisTaskSAJF::DoJetLoop()
578 const Int_t njets = fJets->GetEntriesFast();
580 for (Int_t ij = 0; ij < njets; ij++) {
582 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(ij));
585 AliError(Form("Could not receive jet %d", ij));
592 Float_t corrPt = jet->Pt() - fRho * jet->Area();
594 fHistJetsPt[fCentBin]->Fill(jet->Pt());
595 fHistJetsPtArea[fCentBin]->Fill(corrPt, jet->Area());
596 fHistCorrJetsPt[fCentBin]->Fill(corrPt);
598 fHistJetPhiEta[fCentBin]->Fill(jet->Eta(), jet->Phi());
600 if (fAnaType == kEMCAL)
601 fHistJetsNEFvsPt[fCentBin]->Fill(jet->NEF(), jet->Pt());
604 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
605 AliVParticle *track = jet->TrackAt(it, fTracks);
607 fHistJetsZvsPt[fCentBin]->Fill(track->Pt() / jet->Pt(), jet->Pt());
612 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
613 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
616 TLorentzVector nPart;
617 cluster->GetMomentum(nPart, fVertex);
618 fHistJetsZvsPt[fCentBin]->Fill(nPart.Et() / jet->Pt(), jet->Pt());
625 //________________________________________________________________________
626 void AliAnalysisTaskSAJF::DoEmbJetLoop(AliEmcalJet* &embJet, TObject* &maxPart)
628 // Do the embedded jet loop.
633 TLorentzVector maxClusVect;
635 Int_t nembjets = fEmbJets->GetEntriesFast();
637 for (Int_t ij = 0; ij < nembjets; ij++) {
639 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fEmbJets->At(ij));
642 AliError(Form("Could not receive jet %d", ij));
652 AliVParticle *maxTrack = 0;
654 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
655 AliVParticle *track = jet->TrackAt(it, fTracks);
660 if (track->GetLabel() != 100)
663 if (!maxTrack || track->Pt() > maxTrack->Pt())
667 AliVCluster *maxClus = 0;
669 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
670 AliVCluster *cluster = jet->ClusterAt(ic, fCaloClusters);
675 if (cluster->Chi2() != 100)
678 TLorentzVector nPart;
679 cluster->GetMomentum(nPart, fVertex);
681 if (!maxClus || nPart.Et() > maxClusVect.Et()) {
682 new (&maxClusVect) TLorentzVector(nPart);
687 if ((maxClus && maxTrack && maxClusVect.Et() > maxTrack->Pt()) || (maxClus && !maxTrack)) {
696 return; // MC jets found, exit
700 //________________________________________________________________________
701 void AliAnalysisTaskSAJF::GetRigidCone(Float_t &pt, Float_t &eta, Float_t &phi, Bool_t acceptMC,
702 AliEmcalJet *jet, TClonesArray* tracks, TClonesArray* clusters) const
710 clusters = fCaloClusters;
712 if (!tracks && !clusters)
727 Float_t maxEta = fMaxEta;
728 Float_t minEta = fMinEta;
729 Float_t maxPhi = fMaxPhi;
730 Float_t minPhi = fMinPhi;
732 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
733 if (minPhi < 0) minPhi = 0;
738 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
739 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
740 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
742 } while (dLJ < fMinRC2LJ && repeats < 999);
747 if (fAnaType == kEMCAL && clusters) {
748 Int_t nclusters = clusters->GetEntriesFast();
749 for (Int_t iClusters = 0; iClusters < nclusters; iClusters++) {
750 AliVCluster* cluster = dynamic_cast<AliVCluster*>(clusters->At(iClusters));
752 AliError(Form("Could not receive cluster %d", iClusters));
756 if (!(cluster->IsEMCAL())) continue;
758 if (!AcceptCluster(cluster, acceptMC)) continue;
760 TLorentzVector nPart;
761 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
764 cluster->GetPosition(pos);
765 TVector3 clusVec(pos);
767 Float_t d = TMath::Sqrt((clusVec.Eta() - eta) * (clusVec.Eta() - eta) + (clusVec.Phi() - phi) * (clusVec.Phi() - phi));
775 Int_t ntracks = tracks->GetEntriesFast();
776 for(Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
777 AliVTrack* track = dynamic_cast<AliVTrack*>(tracks->At(iTracks));
779 AliError(Form("Could not retrieve track %d",iTracks));
783 if (!AcceptTrack(track, acceptMC)) continue;
785 Float_t tracketa = track->Eta();
786 Float_t trackphi = track->Phi();
788 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
789 trackphi += 2 * TMath::Pi();
790 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
791 trackphi -= 2 * TMath::Pi();
793 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
800 //________________________________________________________________________
801 void AliAnalysisTaskSAJF::Init()
803 // Initialize the analysis.
805 AliAnalysisTaskEmcalJet::Init();
807 const Float_t semiDiag = TMath::Sqrt((fMaxPhi - fMinPhi) * (fMaxPhi - fMinPhi) +
808 (fMaxEta - fMinEta) * (fMaxEta - fMinEta)) / 2;
809 if (fMinRC2LJ > semiDiag * 0.5) {
810 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. "
811 "Will use fMinRC2LJ = %f", fMinRC2LJ, semiDiag * 0.5));
812 fMinRC2LJ = semiDiag * 0.5;
816 //________________________________________________________________________
817 void AliAnalysisTaskSAJF::Terminate(Option_t *)
819 // Called once at the end of the analysis.