1 // Jet v2 task using QA method, based on jet sample task (S.Aiola).
3 // Authors: Jason Mueller (CERN summer student 2014) & Alice Ohlson
6 #include <TClonesArray.h>
11 #include <TLorentzVector.h>
14 #include "AliVCluster.h"
15 #include "AliAODCaloCluster.h"
16 #include "AliESDCaloCluster.h"
17 #include "AliVTrack.h"
18 #include "AliEmcalJet.h"
19 #include "AliRhoParameter.h"
21 #include "AliJetContainer.h"
22 #include "AliParticleContainer.h"
23 #include "AliClusterContainer.h"
24 #include "AliPicoTrack.h"
26 #include "AliAnalysisTaskEmcalJetv2QA.h"
31 ClassImp(AliAnalysisTaskEmcalJetv2QA)
33 //________________________________________________________________________
34 AliAnalysisTaskEmcalJetv2QA::AliAnalysisTaskEmcalJetv2QA() :
35 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetv2QA", kTRUE),
47 fHistLeadingJetPtCorr(0),
50 fHistJetsPtLeadHad(0),
51 fHistJetsCorrPtArea(0),
52 fHistPtDEtaDPhiTrackClus(0),
53 fHistPtDEtaDPhiClusTrack(0),
97 // Default constructor.
99 SetMakeGeneralHistograms(kTRUE);
102 //________________________________________________________________________
103 AliAnalysisTaskEmcalJetv2QA::AliAnalysisTaskEmcalJetv2QA(const char *name) :
104 AliAnalysisTaskEmcalJet(name, kTRUE),
115 fHistLeadingJetPt(0),
116 fHistLeadingJetPtCorr(0),
119 fHistJetsPtLeadHad(0),
120 fHistJetsCorrPtArea(0),
121 fHistPtDEtaDPhiTrackClus(0),
122 fHistPtDEtaDPhiClusTrack(0),
166 // Standard constructor.
169 Double_t centBinsTemp[7] = {0,5,10,20,30,40,50};
170 SetCentBins(6,centBinsTemp);
171 Double_t jetPtBinsTemp[6] = {40.,50.,70.,90.,120.,200.};
172 SetJetPtBins(5,jetPtBinsTemp);
174 SetMakeGeneralHistograms(kTRUE);
177 //________________________________________________________________________
178 AliAnalysisTaskEmcalJetv2QA::~AliAnalysisTaskEmcalJetv2QA()
183 //________________________________________________________________________
184 void AliAnalysisTaskEmcalJetv2QA::UserCreateOutputObjects()
186 // Create user output.
188 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
190 fJetsCont = GetJetContainer(0);
191 if(fJetsCont) { //get particles and clusters connected to jets
192 fTracksCont = fJetsCont->GetParticleContainer();
193 fCaloClustersCont = fJetsCont->GetClusterContainer();
194 } else { //no jets, just analysis tracks and clusters
195 fTracksCont = GetParticleContainer(0);
196 fCaloClustersCont = GetClusterContainer(0);
199 fTracksCont->SetClassName("AliVTrack");
200 fCaloClustersCont->SetClassName("AliVCluster");
202 fHistTracksPt = new TH1F("fHistTracksPt","fHistTracksPt", fNbins / 2, fMinBinPt, fMaxBinPt / 2);
203 fHistTracksPt->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
204 fHistTracksPt->GetYaxis()->SetTitle("counts");
205 fOutput->Add(fHistTracksPt);
207 fHistClustersPt = new TH1F("fHistClustersPt", "fHistClustersPt", fNbins / 2, fMinBinPt, fMaxBinPt / 2);
208 fHistClustersPt->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
209 fHistClustersPt->GetYaxis()->SetTitle("counts");
210 fOutput->Add(fHistClustersPt);
212 fHistLeadingJetPt = new TH1F("fHistLeadingJetPt", "fHistLeadingJetPt", fNbins, fMinBinPt, fMaxBinPt);
213 fHistLeadingJetPt->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
214 fHistLeadingJetPt->GetYaxis()->SetTitle("counts");
215 fOutput->Add(fHistLeadingJetPt);
217 fHistLeadingJetPtCorr = new TH1F("fHistLeadingJetPtCorr", "fHistLeadingJetPtCorr", fNbins, fMinBinPt, fMaxBinPt);
218 fHistLeadingJetPtCorr->GetXaxis()->SetTitle("p_{T}^{corr} (GeV/c)");
219 fHistLeadingJetPtCorr->GetYaxis()->SetTitle("counts");
220 fOutput->Add(fHistLeadingJetPtCorr);
222 fHistJetsPhiEta = new TH2F("fHistJetsPhiEta", "fHistJetsPhiEta", 50, -1, 1, 101, 0, TMath::Pi()*2 + TMath::Pi()/200);
223 fHistJetsPhiEta->GetXaxis()->SetTitle("#eta");
224 fHistJetsPhiEta->GetYaxis()->SetTitle("#phi");
225 fOutput->Add(fHistJetsPhiEta);
227 fHistJetsPtArea = new TH2F("fHistJetsPtArea", "fHistJetsPtArea", fNbins, fMinBinPt, fMaxBinPt, 30, 0, 3);
228 fHistJetsPtArea->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
229 fHistJetsPtArea->GetYaxis()->SetTitle("area");
230 fOutput->Add(fHistJetsPtArea);
232 fHistJetsPtLeadHad = new TH2F("fHistJetsPtLeadHad", "fHistJetsPtLeadHad", fNbins, fMinBinPt, fMaxBinPt, fNbins / 2, fMinBinPt, fMaxBinPt / 2);
233 fHistJetsPtLeadHad->GetXaxis()->SetTitle("p_{T}^{raw} (GeV/c)");
234 fHistJetsPtLeadHad->GetYaxis()->SetTitle("p_{T,lead} (GeV/c)");
235 fHistJetsPtLeadHad->GetZaxis()->SetTitle("counts");
236 fOutput->Add(fHistJetsPtLeadHad);
238 fHistJetsCorrPtArea = new TH2F("fHistJetsCorrPtArea", "fHistJetsCorrPtArea", fNbins*2, -fMaxBinPt, fMaxBinPt, 30, 0, 3);
239 fHistJetsCorrPtArea->GetXaxis()->SetTitle("p_{T}^{corr} [GeV/c]");
240 fHistJetsCorrPtArea->GetYaxis()->SetTitle("area");
241 fOutput->Add(fHistJetsCorrPtArea);
243 fHistPtDEtaDPhiTrackClus = new TH3F("fHistPtDEtaDPhiTrackClus","fHistPtDEtaDPhiTrackClus;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
244 fOutput->Add(fHistPtDEtaDPhiTrackClus);
246 fHistPtDEtaDPhiClusTrack = new TH3F("fHistPtDEtaDPhiClusTrack","fHistPtDEtaDPhiClusTrack;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
247 fOutput->Add(fHistPtDEtaDPhiClusTrack);
249 fDPhiJet = new TH1F("fDPhiJet","fDPhiJet",90, -TMath::Pi()/3, 5*TMath::Pi()/3);
250 fDPhiJet->GetXaxis()->SetTitle("#Delta#varphi");
251 fDPhiJet->GetYaxis()->SetTitle("counts");
252 fOutput->Add(fDPhiJet);
254 fDPhiJetPythia = new TH1F("fDPhiJetPythia","fDPhiJetPythia",90, -TMath::Pi()/3, 5*TMath::Pi()/3);
255 fDPhiJetPythia->GetXaxis()->SetTitle("#Delta#varphi");
256 fDPhiJetPythia->GetYaxis()->SetTitle("counts");
257 fOutput->Add(fDPhiJetPythia);
259 fDPhiEP = new TH1F("fDPhiEP","fDPhiEP",90, 0, 2*TMath::Pi());
260 fDPhiEP->GetXaxis()->SetTitle("#Delta#varphi");
261 fDPhiEP->GetYaxis()->SetTitle("counts");
262 fOutput->Add(fDPhiEP);
264 hGx = new TH2D("hGx", "Gx v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
265 hGx->GetXaxis()->SetTitle("Centrality (%)");
266 hGx->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
269 hGy2 = new TH2D("hGy2", "Gy2 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
270 hGy2->GetXaxis()->SetTitle("Centrality (%)");
271 hGy2->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
274 hGxGy2 = new TH2D("hGxGy2", "GxGy2 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
275 hGxGy2->GetXaxis()->SetTitle("Centrality (%)");
276 hGxGy2->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
277 fOutput->Add(hGxGy2);
279 hGy4 = new TH2D("hGy4", "Gy4 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
280 hGy4->GetXaxis()->SetTitle("Centrality (%)");
281 hGy4->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
284 hGx2 = new TH2D("hGx2", "Gx2 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
285 hGx2->GetXaxis()->SetTitle("Centrality (%)");
286 hGx2->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
289 hGx2Gy2 = new TH2D("hGx2Gy2", "Gx2Gy2 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
290 hGx2Gy2->GetXaxis()->SetTitle("Centrality (%)");
291 hGx2Gy2->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
292 fOutput->Add(hGx2Gy2);
294 hGxGy4 = new TH2D("hGxGy4", "GxGy4 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
295 hGxGy4->GetXaxis()->SetTitle("Centrality (%)");
296 hGxGy4->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
297 fOutput->Add(hGxGy4);
299 hGy6 = new TH2D("hGy6", "Gy6 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
300 hGy6->GetXaxis()->SetTitle("Centrality (%)");
301 hGy6->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
304 hGx2Gy4 = new TH2D("hGx2Gy4", "Gx2Gy4 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
305 hGx2Gy4->GetXaxis()->SetTitle("Centrality (%)");
306 hGx2Gy4->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
307 fOutput->Add(hGx2Gy4);
309 hGxGy6 = new TH2D("hGxGy6", "GxGy6 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
310 hGxGy6->GetXaxis()->SetTitle("Centrality (%)");
311 hGxGy6->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
312 fOutput->Add(hGxGy6);
314 hGy8 = new TH2D("hGy8", "Gy8 v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
315 hGy8->GetXaxis()->SetTitle("Centrality (%)");
316 hGy8->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
319 hGy = new TH2D("hGy", "Gy v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
320 hGy->GetXaxis()->SetTitle("Centrality (%)");
321 hGy->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
324 hN = new TH2D("hN", "N v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
325 hN->GetXaxis()->SetTitle("Centrality (%)");
326 hN->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
329 htv2std = new TH2D("htv2std", "v2std v Centrality v JetPt w/o jets", nCentBins, centBins, nJetPtBins, jetPtBins);
330 htv2std->GetXaxis()->SetTitle("Centrality (%)");
331 htv2std->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
332 fOutput->Add(htv2std);
334 htjv2std = new TH2D("htjv2std", "v2std v Centrality v JetPt w/ jets", nCentBins, centBins, nJetPtBins, jetPtBins);
335 htjv2std->GetXaxis()->SetTitle("Centrality (%)");
336 htjv2std->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
337 fOutput->Add(htjv2std);
339 htj2v2std = new TH2D("htj2v2std", "v2std v Centrality v JetPt w/ trackPt < 2 GeV", nCentBins, centBins, nJetPtBins, jetPtBins);
340 htj2v2std->GetXaxis()->SetTitle("Centrality (%)");
341 htj2v2std->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
342 fOutput->Add(htj2v2std);
344 hV0jv2std = new TH2D("hV0jv2std", "v2std v Centrality v JetPt", nCentBins, centBins, nJetPtBins, jetPtBins);
345 hV0jv2std->GetXaxis()->SetTitle("Centrality (%)");
346 hV0jv2std->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
347 fOutput->Add(hV0jv2std);
349 Int_t ndpsibins = 100;
350 Double_t dpsibins[101];
351 for(Int_t t = 0; t < 101; t++) dpsibins[t] = TMath::Pi()*t/50.;
353 htdPsi = new TH3D("htdPsi", "JetAxis - EventPlane w/o jets", nCentBins, centBins, nJetPtBins, jetPtBins, ndpsibins, dpsibins);
354 htdPsi->GetZaxis()->SetTitle("#Psi_{jet} - #Psi_{EP}");
355 fOutput->Add(htdPsi);
357 htjdPsi = new TH3D("htjdPsi", "JetAxis - EventPlane w/ jets", nCentBins, centBins, nJetPtBins, jetPtBins, ndpsibins, dpsibins);
358 htjdPsi->GetZaxis()->SetTitle("#Psi_{jet} - #Psi_{EP}");
359 fOutput->Add(htjdPsi);
361 htj2dPsi = new TH3D("htj2dPsi", "JetAxis - EventPlane w/ trackPt < 2 GeV", nCentBins, centBins, nJetPtBins, jetPtBins, ndpsibins, dpsibins);
362 htj2dPsi->GetZaxis()->SetTitle("#Psi_{jet} - #Psi_{EP}");
363 fOutput->Add(htj2dPsi);
365 hV0jdPsi = new TH3D("hV0jdPsi", "JetAxis - EventPlane", nCentBins, centBins, nJetPtBins, jetPtBins, ndpsibins, dpsibins);
366 hV0jdPsi->GetZaxis()->SetTitle("#Psi_{jet} - #Psi_{EP}");
367 fOutput->Add(hV0jdPsi);
369 hQx = new TH2D("hQx", "Qx Distribution in EP frame", 100, -0.3, 0.3, nCentBins, centBins);
370 hQx->GetXaxis()->SetTitle("Qx");
371 hQx->GetYaxis()->SetTitle("Centrality (%)");
374 hQy = new TH2D("hQy", "Qy Distribution in EP frame", 100, -0.3, 0.3, nCentBins, centBins);
375 hQy->GetXaxis()->SetTitle("Qy");
376 hQy->GetYaxis()->SetTitle("Centrality (%)");
379 hAx = new TH2D("hAx", "Ax Distribution in EP frame w/o Dijets", 100, -35, 70, nJetPtBins, jetPtBins);
380 hAx->GetXaxis()->SetTitle("Ax");
381 hAx->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
384 hAxDijet = new TH2D("hAxDijet", "Ax Distribution in EP frame w/ Dijets", 100, -35, 70, nJetPtBins, jetPtBins);
385 hAxDijet->GetXaxis()->SetTitle("Ax");
386 hAxDijet->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
387 fOutput->Add(hAxDijet);
389 hEventData = new TH1F("hEventData","Events Kept and Discarded", 9, 0, 9);
390 hEventData->GetYaxis()->SetTitle("counts");
391 fOutput->Add(hEventData);
393 hNTracks = new TH2F("hNTracks","Number of Tracks Per Event", 100, 0, 3000, 3, 0, 3);
394 hNTracks->GetXaxis()->SetTitle("# tracks");
395 fOutput->Add(hNTracks);
397 hNTracksCent = new TH2D("hNTracksCent", "NTracks by centrality", 100, 0, 3000, (Int_t)centBins[nCentBins], centBins[0], centBins[nCentBins]);
398 hNTracksCent->GetXaxis()->SetTitle("# tracks");
399 hNTracksCent->GetYaxis()->SetTitle("Centrality (%)");
400 fOutput->Add(hNTracksCent);
402 hGxTracks = new TH2D("hGxTracks", "Gx by NTracks", 200, -200, 200, 100, 0, 3000);
403 hGxTracks->GetXaxis()->SetTitle("Gx");
404 hGxTracks->GetYaxis()->SetTitle("# tracks");
405 fOutput->Add(hGxTracks);
407 hGyTracks = new TH2D("hGyTracks", "Gy by NTracks", 200, -200, 200, 100, 0, 3000);
408 hGyTracks->GetXaxis()->SetTitle("Gy");
409 hGyTracks->GetYaxis()->SetTitle("# tracks");
410 fOutput->Add(hGyTracks);
412 hGy2Tracks = new TH2D("hGy2Tracks", "Gy2 by NTracks", 100, 0, 20000, 100, 0, 3000);
413 hGy2Tracks->GetXaxis()->SetTitle("Gy2");
414 hGy2Tracks->GetYaxis()->SetTitle("# tracks");
415 fOutput->Add(hGy2Tracks);
417 hGxGy2Tracks = new TH2D("hGxGy2Tracks", "GxGy2 by NTracks", 100, -100000, 100000, 100, 0, 3000);
418 hGxGy2Tracks->GetXaxis()->SetTitle("GxGy2");
419 hGxGy2Tracks->GetYaxis()->SetTitle("# tracks");
420 fOutput->Add(hGxGy2Tracks);
422 hGy4Tracks = new TH2D("hGy4Tracks", "Gy4 by NTracks", 100, 0, 100000000, 100, 0, 3000);
423 hGy4Tracks->GetXaxis()->SetTitle("Gy4");
424 hGy4Tracks->GetYaxis()->SetTitle("# tracks");
425 fOutput->Add(hGy4Tracks);
427 htEPRes = new TH2D("htEPRes", "EP Resolution w/o Jets", nCentBins, centBins, nJetPtBins, jetPtBins);
428 htEPRes->GetXaxis()->SetTitle("Centrality (%)");
429 htEPRes->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
430 fOutput->Add(htEPRes);
432 htjEPRes = new TH2D("htjEPRes", "EP Resolution w/ Jets", nCentBins, centBins, nJetPtBins, jetPtBins);
433 htjEPRes->GetXaxis()->SetTitle("Centrality (%)");
434 htjEPRes->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
435 fOutput->Add(htjEPRes);
437 htj2EPRes = new TH2D("htj2EPRes", "EP Resolution w/ trackPT < 2 GeV", nCentBins, centBins, nJetPtBins, jetPtBins);
438 htj2EPRes->GetXaxis()->SetTitle("Centrality (%)");
439 htj2EPRes->GetYaxis()->SetTitle("Leading Jet pT (GeV/c)");
440 fOutput->Add(htj2EPRes);
442 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
445 //________________________________________________________________________
446 Bool_t AliAnalysisTaskEmcalJetv2QA::FillHistograms()
454 //________________________________________________________________________
455 void AliAnalysisTaskEmcalJetv2QA::ExecOnce() {
457 AliAnalysisTaskEmcalJet::ExecOnce();
459 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
460 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
461 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
465 //________________________________________________________________________
466 Bool_t AliAnalysisTaskEmcalJetv2QA::Run() // this part loops over each event
468 // Run analysis code here, if needed. It will be executed before FillHistograms().
470 Double_t jetPhi = -999; // angle of leading jet
471 Double_t jetPt = -999; // pt of leading jet
472 Double_t jetArea = -999;
473 Double_t trackPt = -999;
474 Double_t phi = -999; // track phi
475 Double_t dPhi = -999; // track phi - jet axis
476 Double_t dPhiQA = -999; // track phi - EP
477 Double_t tSin = 0; // used for std EP calc
478 Double_t tCos = 0; // used for std EP calc
479 Double_t jSin = 0; // used for std EP calc
480 Double_t jCos = 0; // used for std EP calc
481 Double_t tSin2 = 0; // used for std EP calc with trackPt < 2 GeV
482 Double_t tCos2 = 0; // used for std EP calc with trackPt < 2 GeV
483 Double_t qx = 0; // used for Qx distribution
484 Double_t qy = 0; // used for Qy distribution
485 Double_t ax = 0; // used for Ax distribution
486 Double_t tEP = -999; // EP w/o jets
487 Double_t tjEP = -999; // EP w/ jets
488 Double_t tjEP2 = -999; // EP w/ jets
489 Double_t dPsi = -999; // jet axis - EP
490 Double_t gx = 0; // used for G moment calc
491 Double_t gy = 0; // used for G moment calc
492 Int_t isDijet = 0; // if 0, no dijet. if 1, dijet.
493 Int_t nTracksBkgnd = 0; // used to keep track of number of tracks in background
494 Int_t nTracksJet =0; // used to keep track of number of tracks in jets
499 AliEmcalJet *jettest = fJetsCont->GetNextAcceptJet(0);
502 fHistJetsPtArea->Fill(jettest->Pt(), jettest->Area());
503 fHistJetsPhiEta->Fill(jettest->Eta(), jettest->Phi());
505 Float_t ptLeading = fJetsCont->GetLeadingHadronPt(jettest);
506 fHistJetsPtLeadHad->Fill(jettest->Pt(), ptLeading);
508 if (fHistJetsCorrPtArea) {
509 Float_t corrPt = jettest->Pt() - fJetsCont->GetRhoVal() * jettest->Area();
510 fHistJetsCorrPtArea->Fill(corrPt, jettest->Area());
512 jettest = fJetsCont->GetNextAcceptJet();
516 AliEmcalJet *jet = fJetsCont->GetLeadingJet();
519 jetPhi = jet->Phi(); // get leading jet phi (jet axis)
520 jetPt = jet->Pt(); // get leading jet pT to filter out low pT jet events
521 jetArea = jet->Area();
528 hEventData->Fill("!fTracksCont",1);
533 hEventData->Fill("!fJetsCont",1);
538 hEventData->Fill("jetPt=-999",1);
541 if(jetPt < jetPtBins[0])
543 hEventData->Fill("leadingJetPt<jetPtMin",1);
546 if(jetPt > jetPtBins[nJetPtBins])
548 hEventData->Fill("leadingJetPt>jetPtMax",1);
551 if(fCent < centBins[0])
553 hEventData->Fill("cent<centMin",1);
556 if(fCent > centBins[nCentBins])
558 hEventData->Fill("cent>centMax",1);
561 hEventData->Fill("good event",1);
563 AliEmcalJet *dijet = fJetsCont->GetNextAcceptJet(0); // check for dijet events
566 if(dijet->Pt() > jetPt*2./3. && fabs(jetPhi-dijet->Phi()-TMath::Pi()) < 0.4) // loop over jets with pT>50 and exclude leading jet and check that angular separation is < 0.4
568 dijet = fJetsCont->GetNextAcceptJet();
571 if (fCaloClustersCont)
573 AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
575 TLorentzVector nPart;
576 cluster->GetMomentum(nPart, fVertex);
577 fHistClustersPt->Fill(nPart.Pt());
578 cluster = fCaloClustersCont->GetNextAcceptCluster();
582 fHistLeadingJetPt->Fill(jetPt);
583 fHistLeadingJetPtCorr->Fill(jetPt-fJetsCont->GetRhoVal()*jetArea);
585 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
587 { // loop over all particles (including jet tracks)
588 trackPt = track->Pt();
589 fHistTracksPt->Fill(trackPt);
590 phi = track->Phi(); // get track phi
592 dPhi = phi-jetPhi; // get track phi - jet axis
593 if(dPhi < 0) dPhi += TMath::TwoPi();
594 if(dPhi > TMath::TwoPi()) dPhi -= TMath::TwoPi();
596 dPhiQA = phi-fEPV0; // get track phi - EP
597 if(dPhiQA < 0) dPhiQA += TMath::TwoPi();
598 if(dPhiQA > TMath::TwoPi()) dPhiQA -= TMath::TwoPi();
599 fDPhiEP->Fill(dPhiQA);
601 // fill jet-hadron correlation just to check if track labels make sense...
604 Double_t dphiJet = dPhi;
605 if(dphiJet > 5*TMath::Pi()/3) dphiJet -= 2*TMath::Pi();
606 if(dphiJet < -TMath::Pi()/3) dphiJet += 2*TMath::Pi();
607 if(track->GetLabel() == 0)
608 fDPhiJet->Fill(dphiJet);
610 fDPhiJetPythia->Fill(dphiJet);
613 Double_t weight = 1.;
614 if(doPtWeight) weight = trackPt;
616 gx += weight*cos(2*dPhi);
617 gy += weight*sin(2*dPhi);
619 if(track->GetLabel() == 0)
620 { // sum for std EP method
621 tSin += weight*sin(2*phi); // bkgnd has label = 0
622 tCos += weight*cos(2*phi);
623 qx += weight*cos(2*dPhiQA);
624 qy += weight*sin(2*dPhiQA);
629 jSin += weight*sin(2*phi); // jets have label =/= 0
630 jCos += weight*cos(2*phi);
631 ax += weight*cos(2*dPhi);
636 { // sum for std EP method w/ trackPt < 2 GeV
637 tSin2 += weight*sin(2*phi);
638 tCos2 += weight*cos(2*phi);
642 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle()); // increment to next track
643 } // close loop over particles
645 hNTracks->Fill(nTracksBkgnd,"Bkgnd Tracks",1);
646 hNTracks->Fill(nTracksJet,"Jet Tracks",1);
647 hNTracks->Fill(nTracksBkgnd+nTracksJet,"Total Tracks",1);
648 hNTracksCent->Fill(nTracksBkgnd+nTracksJet,fCent,1);
650 if(nTracksBkgnd == 0)
652 hEventData->Fill("no tracks",1);
653 hEventData->Fill("good event",-1);
657 Double_t v2weight = 1+2*fJetv2*cos(2*(jetPhi-fEPV0)); // set v2 weight for event
659 hGx->Fill(fCent, jetPt, v2weight*gx); // fill histograms for QA method
660 hGy2->Fill(fCent, jetPt, v2weight*gy*gy);
661 hGxGy2->Fill(fCent, jetPt, v2weight*gx*gy*gy);
662 hGy4->Fill(fCent, jetPt, v2weight*gy*gy*gy*gy);
663 hGx2->Fill(fCent, jetPt, v2weight*gx*gx);
664 hGx2Gy2->Fill(fCent, jetPt, v2weight*gx*gx*gy*gy);
665 hGxGy4->Fill(fCent, jetPt, v2weight*gx*gy*gy*gy*gy);
666 hGy6->Fill(fCent, jetPt, v2weight*gy*gy*gy*gy*gy*gy);
667 hGx2Gy4->Fill(fCent, jetPt, v2weight*gx*gx*gy*gy*gy*gy);
668 hGxGy6->Fill(fCent, jetPt, v2weight*gx*gy*gy*gy*gy*gy*gy);
669 hGy8->Fill(fCent, jetPt, v2weight*gy*gy*gy*gy*gy*gy*gy*gy);
670 hGy->Fill(fCent, jetPt, v2weight*gy);
671 hN->Fill(fCent, jetPt, v2weight);
673 hGxTracks->Fill(gx,nTracksBkgnd+nTracksJet);
674 hGyTracks->Fill(gy,nTracksBkgnd+nTracksJet);
675 hGy2Tracks->Fill(gy*gy,nTracksBkgnd+nTracksJet);
676 hGxGy2Tracks->Fill(gx*gy*gy,nTracksBkgnd+nTracksJet);
677 hGy4Tracks->Fill(gy*gy*gy*gy,nTracksBkgnd+nTracksJet);
678 hQx->Fill(qx/nTracksBkgnd,fCent);
679 hQy->Fill(qy/nTracksBkgnd,fCent);
684 hAxDijet->Fill(ax,jetPt);
686 tEP = 0.5*atan2(tSin,tCos); // calculate EP w/o jets
687 tjEP = 0.5*atan2((tSin+jSin),(tCos+jCos)); // calculate EP w/ jets
688 tjEP2 = 0.5*atan2(tSin2,tCos2); // calculate EP w/ trackPt < 2 GeV
690 htEPRes->Fill(fCent, jetPt, v2weight*cos(2*(tEP-fEPV0)));
691 htjEPRes->Fill(fCent, jetPt, v2weight*cos(2*(tjEP-fEPV0)));
692 htj2EPRes->Fill(fCent, jetPt, v2weight*cos(2*(tjEP2-fEPV0)));
696 if(dPsi < 0) dPsi += TMath::TwoPi();
697 if(dPsi > TMath::TwoPi()) dPsi -= TMath::TwoPi();
699 htv2std->Fill(fCent, jetPt, v2weight*cos(2*dPsi)); // fill histogram with v2 data w/o jets
700 htdPsi->Fill(fCent,jetPt,dPsi); // fill histogram with jet axis - EP w/o jets
703 if(dPsi < 0) dPsi += TMath::TwoPi();
704 if(dPsi > TMath::TwoPi()) dPsi -= TMath::TwoPi();
706 htjv2std->Fill(fCent, jetPt, v2weight*cos(2*dPsi)); // fill histogram with v2 data w/ jets
707 htjdPsi->Fill(fCent,jetPt,dPsi); // fill histogram with jet axis - EP w/ jets
710 if(dPsi < 0) dPsi += TMath::TwoPi();
711 if(dPsi > TMath::TwoPi()) dPsi -= TMath::TwoPi();
713 htj2v2std->Fill(fCent, jetPt, v2weight*cos(2*dPsi)); // fill histogram with v2 data w/ trackPt < 2 GeV
714 htj2dPsi->Fill(fCent,jetPt,dPsi); // fill histogram with jet axis - EP w/ trackPt < 2 GeV
717 if(dPsi < 0) dPsi += TMath::TwoPi();
718 if(dPsi > TMath::TwoPi()) dPsi -= TMath::TwoPi();
720 hV0jv2std->Fill(fCent, jetPt, v2weight*cos(2*dPsi)); // fill histogram with v2 data
721 hV0jdPsi->Fill(fCent,jetPt,dPsi); // fill histogram with jet axis - EPV0
724 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
727 //________________________________________________________________________
728 void AliAnalysisTaskEmcalJetv2QA::Terminate(Option_t *)
730 // Called once at the end of the analysis.
731 if(centBins) delete [] centBins;
732 if(jetPtBins) delete [] jetPtBins;
735 void AliAnalysisTaskEmcalJetv2QA::SetCentBins(Int_t n, Double_t* bins)
737 if(centBins) delete [] centBins;
740 centBins = new Double_t[nCentBins+1];
741 for(Int_t i = 0; i < nCentBins+1; i++)
743 cout << endl << "Setting " << nCentBins << " centrality bins: " << endl;
744 for(Int_t i = 0; i < nCentBins+1; i++)
745 cout << centBins[i] << " ";
746 cout << endl << endl;
749 void AliAnalysisTaskEmcalJetv2QA::SetJetPtBins(Int_t n, Double_t* bins)
751 if(jetPtBins) delete [] jetPtBins;
754 jetPtBins = new Double_t[nJetPtBins+1];
755 for(Int_t i = 0; i < nJetPtBins+1; i++)
756 jetPtBins[i]=bins[i];
757 cout << endl << "Setting " << nJetPtBins << " jet pt bins: " << endl;
758 for(Int_t i = 0; i < nJetPtBins+1; i++)
759 cout << jetPtBins[i] << " ";
760 cout << endl << endl;