2 // Jet mass background analysis task.
6 #include <TClonesArray.h>
10 #include <THnSparse.h>
12 #include <TLorentzVector.h>
20 #include "AliVCluster.h"
21 #include "AliVTrack.h"
22 #include "AliEmcalJet.h"
23 #include "AliRhoParameter.h"
25 #include "AliEmcalParticle.h"
26 #include "AliMCEvent.h"
27 #include "AliGenPythiaEventHeader.h"
28 #include "AliAODMCHeader.h"
29 #include "AliMCEvent.h"
30 #include "AliAnalysisManager.h"
31 #include "AliJetContainer.h"
32 #include "AliClusterContainer.h"
33 #include "AliParticleContainer.h"
35 #include "AliAnalysisTaskEmcalJetMassBkg.h"
37 ClassImp(AliAnalysisTaskEmcalJetMassBkg)
39 //________________________________________________________________________
40 AliAnalysisTaskEmcalJetMassBkg::AliAnalysisTaskEmcalJetMassBkg() :
41 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetMassBkg", kTRUE),
49 fConeMaxPhi(TMath::Pi()*2),
55 fh2PtVsMassRCExLJDPhi(0),
57 fh2PtVsMassPerpConeLJ(0),
58 fpPtVsMassPerpConeLJ(0),
59 fh2PtVsMassPerpConeTJ(0),
60 fpPtVsMassPerpConeTJ(0),
62 fh2CentVsMassRCExLJ(0),
63 fh2CentVsMassPerpConeLJ(0),
64 fh2CentVsMassPerpConeTJ(0),
66 fh2MultVsMassRCExLJ(0),
67 fh2MultVsMassPerpConeLJ(0),
68 fh2MultVsMassPerpConeTJ(0),
69 fh2CentVsMedianMassRC(0),
70 fh2CentVsMedianMassRCExLJ(0),
71 fh2MultVsMedianMassRC(0),
72 fh2MultVsMedianMassRCExLJ(0),
73 fh2CentVsMeanMassRC(0),
74 fh2CentVsMeanMassRCExLJ(0),
75 fh2MultVsMeanMassRC(0),
76 fh2MultVsMeanMassRCExLJ(0),
77 fh2CentVsMedianMassPerAreaRC(0),
78 fh2CentVsMedianMassPerAreaRCExLJ(0),
79 fh2MultVsMedianMassPerAreaRC(0),
80 fh2MultVsMedianMassPerAreaRCExLJ(0)
82 // Default constructor.
84 fh2PtVsMassRC = new TH2F*[fNcentBins];
85 fpPtVsMassRC = new TProfile*[fNcentBins];
86 fh2PtVsMassRCExLJDPhi = new TH3F*[fNcentBins];
87 fpPtVsMassRCExLJ = new TProfile*[fNcentBins];
88 fh2PtVsMassPerpConeLJ = new TH2F*[fNcentBins];
89 fpPtVsMassPerpConeLJ = new TProfile*[fNcentBins];
90 fh2PtVsMassPerpConeTJ = new TH2F*[fNcentBins];
91 fpPtVsMassPerpConeTJ = new TProfile*[fNcentBins];
93 for (Int_t i = 0; i < fNcentBins; i++) {
96 fh2PtVsMassRCExLJDPhi[i] = 0;
97 fpPtVsMassRCExLJ[i] = 0;
98 fh2PtVsMassPerpConeLJ[i] = 0;
99 fpPtVsMassPerpConeLJ[i] = 0;
100 fh2PtVsMassPerpConeTJ[i] = 0;
101 fpPtVsMassPerpConeTJ[i] = 0;
104 SetMakeGeneralHistograms(kTRUE);
108 //________________________________________________________________________
109 AliAnalysisTaskEmcalJetMassBkg::AliAnalysisTaskEmcalJetMassBkg(const char *name) :
110 AliAnalysisTaskEmcalJet(name, kTRUE),
118 fConeMaxPhi(TMath::Pi()*2),
121 fCaloClustersCont(0),
124 fh2PtVsMassRCExLJDPhi(0),
126 fh2PtVsMassPerpConeLJ(0),
127 fpPtVsMassPerpConeLJ(0),
128 fh2PtVsMassPerpConeTJ(0),
129 fpPtVsMassPerpConeTJ(0),
131 fh2CentVsMassRCExLJ(0),
132 fh2CentVsMassPerpConeLJ(0),
133 fh2CentVsMassPerpConeTJ(0),
135 fh2MultVsMassRCExLJ(0),
136 fh2MultVsMassPerpConeLJ(0),
137 fh2MultVsMassPerpConeTJ(0),
138 fh2CentVsMedianMassRC(0),
139 fh2CentVsMedianMassRCExLJ(0),
140 fh2MultVsMedianMassRC(0),
141 fh2MultVsMedianMassRCExLJ(0),
142 fh2CentVsMeanMassRC(0),
143 fh2CentVsMeanMassRCExLJ(0),
144 fh2MultVsMeanMassRC(0),
145 fh2MultVsMeanMassRCExLJ(0),
146 fh2CentVsMedianMassPerAreaRC(0),
147 fh2CentVsMedianMassPerAreaRCExLJ(0),
148 fh2MultVsMedianMassPerAreaRC(0),
149 fh2MultVsMedianMassPerAreaRCExLJ(0)
151 // Standard constructor.
153 fh2PtVsMassRC = new TH2F*[fNcentBins];
154 fpPtVsMassRC = new TProfile*[fNcentBins];
155 fh2PtVsMassRCExLJDPhi = new TH3F*[fNcentBins];
156 fpPtVsMassRCExLJ = new TProfile*[fNcentBins];
157 fh2PtVsMassPerpConeLJ = new TH2F*[fNcentBins];
158 fpPtVsMassPerpConeLJ = new TProfile*[fNcentBins];
159 fh2PtVsMassPerpConeTJ = new TH2F*[fNcentBins];
160 fpPtVsMassPerpConeTJ = new TProfile*[fNcentBins];
162 for (Int_t i = 0; i < fNcentBins; i++) {
163 fh2PtVsMassRC[i] = 0;
165 fh2PtVsMassRCExLJDPhi[i] = 0;
166 fpPtVsMassRCExLJ[i] = 0;
167 fh2PtVsMassPerpConeLJ[i] = 0;
168 fpPtVsMassPerpConeLJ[i] = 0;
169 fh2PtVsMassPerpConeTJ[i] = 0;
170 fpPtVsMassPerpConeTJ[i] = 0;
173 SetMakeGeneralHistograms(kTRUE);
176 //________________________________________________________________________
177 AliAnalysisTaskEmcalJetMassBkg::~AliAnalysisTaskEmcalJetMassBkg()
182 //________________________________________________________________________
183 void AliAnalysisTaskEmcalJetMassBkg::UserCreateOutputObjects()
185 // Create user output.
187 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
189 fJetsCont = GetJetContainer(fContainerBase);
190 fTracksCont = fJetsCont->GetParticleContainer();
191 fCaloClustersCont = fJetsCont->GetClusterContainer();
193 Bool_t oldStatus = TH1::AddDirectoryStatus();
194 TH1::AddDirectory(kFALSE);
196 const Int_t nBinsPt = 250;
197 const Double_t minPt = -50.;
198 const Double_t maxPt = 200.;
200 const Int_t nBinsCent = 100;
201 const Double_t minCent = 0.;
202 const Double_t maxCent = 100.;
204 const Int_t nBinsMult = 400;
205 const Double_t minMult = 0.;
206 const Double_t maxMult = 4000.;
208 fh2CentVsMassRC = new TH2F("fh2CentVsMassRC","fh2CentVsMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
209 fOutput->Add(fh2CentVsMassRC);
211 fh2CentVsMassRCExLJ = new TH2F("fh2CentVsMassRCExLJ","fh2CentVsMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
212 fOutput->Add(fh2CentVsMassRCExLJ);
214 fh2CentVsMassPerpConeLJ = new TH2F("fh2CentVsMassPerpConeLJ","fh2CentVsMassPerpConeLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
215 fOutput->Add(fh2CentVsMassPerpConeLJ);
217 fh2CentVsMassPerpConeTJ = new TH2F("fh2CentVsMassPerpConeTJ","fh2CentVsMassPerpConeTJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
218 fOutput->Add(fh2CentVsMassPerpConeTJ);
220 fh2MultVsMassRC = new TH2F("fh2MultVsMassRC","fh2MultVsMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
221 fOutput->Add(fh2MultVsMassRC);
223 fh2MultVsMassRCExLJ = new TH2F("fh2MultVsMassRCExLJ","fh2MultVsMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
224 fOutput->Add(fh2MultVsMassRCExLJ);
226 fh2MultVsMassPerpConeLJ = new TH2F("fh2MultVsMassPerpConeLJ","fh2MultVsMassPerpConeLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
227 fOutput->Add(fh2MultVsMassPerpConeLJ);
229 fh2MultVsMassPerpConeTJ = new TH2F("fh2MultVsMassPerpConeTJ","fh2MultVsMassPerpConeTJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
230 fOutput->Add(fh2MultVsMassPerpConeTJ);
232 fh2CentVsMedianMassRC = new TH2F("fh2CentVsMedianMassRC","fh2CentVsMedianMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
233 fOutput->Add(fh2CentVsMedianMassRC);
235 fh2CentVsMedianMassRCExLJ = new TH2F("fh2CentVsMedianMassRCExLJ","fh2CentVsMedianMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
236 fOutput->Add(fh2CentVsMedianMassRCExLJ);
238 fh2MultVsMedianMassRC = new TH2F("fh2MultVsMedianMassRC","fh2MultVsMedianMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
239 fOutput->Add(fh2MultVsMedianMassRC);
241 fh2MultVsMedianMassRCExLJ = new TH2F("fh2MultVsMedianMassRCExLJ","fh2MultVsMedianMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
242 fOutput->Add(fh2MultVsMedianMassRCExLJ);
244 fh2CentVsMeanMassRC = new TH2F("fh2CentVsMeanMassRC","fh2CentVsMeanMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
245 fOutput->Add(fh2CentVsMeanMassRC);
247 fh2CentVsMeanMassRCExLJ = new TH2F("fh2CentVsMeanMassRCExLJ","fh2CentVsMeanMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
248 fOutput->Add(fh2CentVsMeanMassRCExLJ);
250 fh2MultVsMeanMassRC = new TH2F("fh2MultVsMeanMassRC","fh2MultVsMeanMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
251 fOutput->Add(fh2MultVsMeanMassRC);
253 fh2MultVsMeanMassRCExLJ = new TH2F("fh2MultVsMeanMassRCExLJ","fh2MultVsMeanMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
254 fOutput->Add(fh2MultVsMeanMassRCExLJ);
256 fh2CentVsMedianMassPerAreaRC = new TH2F("fh2CentVsMedianMassPerAreaRC","fh2CentVsMedianMassPerAreaRC;cent;#it{M}_{RC}/A",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
257 fOutput->Add(fh2CentVsMedianMassPerAreaRC);
259 fh2CentVsMedianMassPerAreaRCExLJ = new TH2F("fh2CentVsMedianMassPerAreaRCExLJ","fh2CentVsMedianMassPerAreaRCExLJ;cent;#it{M}_{RC}/A",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
260 fOutput->Add(fh2CentVsMedianMassPerAreaRCExLJ);
262 fh2MultVsMedianMassPerAreaRC = new TH2F("fh2MultVsMedianMassPerAreaRC","fh2MultVsMedianMassPerAreaRC;#it{N}_{track};#it{M}_{RC}/A",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
263 fOutput->Add(fh2MultVsMedianMassPerAreaRC);
265 fh2MultVsMedianMassPerAreaRCExLJ = new TH2F("fh2MultVsMedianMassPerAreaRCExLJ","fh2MultVsMedianMassPerAreaRCExLJ;#it{N}_{track};#it{M}_{RC}/A",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
266 fOutput->Add(fh2MultVsMedianMassPerAreaRCExLJ);
268 TString histName = "";
269 TString histTitle = "";
270 for (Int_t i = 0; i < fNcentBins; i++) {
271 histName = TString::Format("fh2PtVsMassRC_%d",i);
272 histTitle = TString::Format("%s;#it{p}_{T,RC};#it{M}_{RC}",histName.Data());
273 fh2PtVsMassRC[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
274 fOutput->Add(fh2PtVsMassRC[i]);
276 histName = TString::Format("fpPtVsMassRC_%d",i);
277 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
278 fpPtVsMassRC[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
279 fOutput->Add(fpPtVsMassRC[i]);
281 histName = TString::Format("fh2PtVsMassRCExLJDPhi_%d",i);
282 histTitle = TString::Format("%s;#it{p}_{T,RC};#it{M}_{RC}",histName.Data());
283 fh2PtVsMassRCExLJDPhi[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt,72,-0.5*TMath::Pi(),1.5*TMath::Pi());
284 fOutput->Add(fh2PtVsMassRCExLJDPhi[i]);
286 histName = TString::Format("fpPtVsMassRCExLJ_%d",i);
287 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
288 fpPtVsMassRCExLJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
289 fOutput->Add(fpPtVsMassRCExLJ[i]);
291 histName = TString::Format("fh2PtVsMassPerpConeLJ_%d",i);
292 histTitle = TString::Format("%s;#it{p}_{T,PerpConeLJ};#it{M}_{PerpConeLJ}",histName.Data());
293 fh2PtVsMassPerpConeLJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
294 fOutput->Add(fh2PtVsMassPerpConeLJ[i]);
296 histName = TString::Format("fpPtVsMassPerpConeLJ_%d",i);
297 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
298 fpPtVsMassPerpConeLJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
299 fOutput->Add(fpPtVsMassPerpConeLJ[i]);
301 histName = TString::Format("fh2PtVsMassPerpConeTJ_%d",i);
302 histTitle = TString::Format("%s;#it{p}_{T,PerpConeTJ};#it{M}_{PerpConeTJ}",histName.Data());
303 fh2PtVsMassPerpConeTJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
304 fOutput->Add(fh2PtVsMassPerpConeTJ[i]);
306 histName = TString::Format("fpPtVsMassPerpConeTJ_%d",i);
307 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
308 fpPtVsMassPerpConeTJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
309 fOutput->Add(fpPtVsMassPerpConeTJ[i]);
312 // =========== Switch on Sumw2 for all histos ===========
313 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
314 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
319 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
323 TH1::AddDirectory(oldStatus);
325 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
328 //________________________________________________________________________
329 Bool_t AliAnalysisTaskEmcalJetMassBkg::Run()
331 // Run analysis code here, if needed. It will be executed before FillHistograms().
336 //________________________________________________________________________
337 Bool_t AliAnalysisTaskEmcalJetMassBkg::FillHistograms()
341 const Float_t rcArea = fConeRadius * fConeRadius * TMath::Pi();
344 Double_t rho = GetRhoVal(fContainerBase);
345 Int_t trackMult = fTracksCont->GetNAcceptedParticles();
348 AliEmcalJet* jet = NULL;
350 jet = fJetsCont->GetLeadingJet("rho");
352 TLorentzVector lvRC(0.,0.,0.,0.);
358 static Double_t massvecRC[999];
359 static Double_t massPerAreavecRC[999];
361 static Double_t massvecRCExLJ[999];
362 static Double_t massPerAreavecRCExLJ[999];
365 Int_t nRCExLJAcc = 0;
367 for (Int_t i = 0; i < fRCperEvent; i++) {
368 // Simple random cones
369 lvRC.SetPxPyPzE(0.,0.,0.,0.);
373 GetRandomCone(lvRC,RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, 0);
376 fh2PtVsMassRC[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
377 fpPtVsMassRC[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
378 fh2CentVsMassRC->Fill(fCent,RCmass);
379 fh2MultVsMassRC->Fill(trackMult,RCmass);
381 massvecRC[nRCAcc] = RCmass;
382 massPerAreavecRC[nRCAcc] = RCmass/rcArea;
386 if (fJetsCont && jet) {
387 // Random cones far away from leading jet(s)
388 lvRC.SetPxPyPzE(0.,0.,0.,0.);
392 GetRandomCone(lvRC,RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet);
394 if (RCpt > 0 && jet) {
395 Float_t dphi = RCphi - jet->Phi();
396 if (dphi > 1.5*TMath::Pi()) dphi -= TMath::Pi() * 2;
397 if (dphi < -0.5*TMath::Pi()) dphi += TMath::Pi() * 2;
398 fh2PtVsMassRCExLJDPhi[fCentBin]->Fill(RCpt - rho*rcArea,RCmass,dphi);
399 fpPtVsMassRCExLJ[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
400 fh2CentVsMassRCExLJ->Fill(fCent,RCmass);
401 fh2MultVsMassRCExLJ->Fill(trackMult,RCmass);
403 massvecRCExLJ[nRCExLJAcc] = RCmass;
404 massPerAreavecRCExLJ[nRCExLJAcc] = RCmass/rcArea;
410 Double_t medianRC, medianRCExLJ = 0.;
411 medianRC = TMath::Median(nRCAcc,massvecRC);
412 medianRCExLJ = TMath::Median(nRCExLJAcc,massvecRCExLJ);
414 fh2CentVsMedianMassRC->Fill(fCent,medianRC);
415 fh2CentVsMedianMassRCExLJ->Fill(fCent,medianRCExLJ);
417 fh2MultVsMedianMassRC->Fill(trackMult,medianRC);
418 fh2MultVsMedianMassRCExLJ->Fill(trackMult,medianRCExLJ);
420 Double_t meanRC = 0.; Double_t meanRCExLJ = 0.;
421 if(nRCAcc>0) meanRC = TMath::Mean(nRCAcc,massvecRC);
422 if(nRCExLJAcc) meanRCExLJ = TMath::Mean(nRCExLJAcc,massvecRCExLJ);
424 fh2CentVsMeanMassRC->Fill(fCent,meanRC);
425 fh2CentVsMeanMassRCExLJ->Fill(fCent,meanRCExLJ);
427 fh2MultVsMeanMassRC->Fill(trackMult,meanRC);
428 fh2MultVsMeanMassRCExLJ->Fill(trackMult,meanRCExLJ);
430 Double_t medianPerAreaRC, medianPerAreaRCExLJ = 0.;
431 medianPerAreaRC = TMath::Median(nRCAcc,massPerAreavecRC);
432 medianPerAreaRCExLJ = TMath::Median(nRCExLJAcc,massPerAreavecRCExLJ);
434 fh2CentVsMedianMassPerAreaRC->Fill(fCent,medianPerAreaRC);
435 fh2CentVsMedianMassPerAreaRCExLJ->Fill(fCent,medianPerAreaRCExLJ);
437 fh2MultVsMedianMassPerAreaRC->Fill(trackMult,medianPerAreaRC);
438 fh2MultVsMedianMassPerAreaRCExLJ->Fill(trackMult,medianPerAreaRCExLJ);
441 if(fJetsCont && jet) {
442 //cone perpendicular to leading jet
443 TLorentzVector lvPC(0.,0.,0.,0.);
449 GetPerpCone(lvPC,PCpt, PCeta, PCphi, fTracksCont, fCaloClustersCont, jet);
452 fh2PtVsMassPerpConeLJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
453 fpPtVsMassPerpConeLJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
454 fh2CentVsMassPerpConeLJ->Fill(fCent,PCmass);
455 fh2MultVsMassPerpConeLJ->Fill(trackMult,PCmass);
458 //cone perpendicular to all tagged jets
459 for(int i = 0; i < fJetsCont->GetNJets();++i) {
460 jet = static_cast<AliEmcalJet*>(fJetsCont->GetAcceptJet(i));
463 if(jet->GetTagStatus()<1)
466 lvPC.SetPxPyPzE(0.,0.,0.,0.);
470 GetPerpCone(lvPC,PCpt, PCeta, PCphi, fTracksCont, fCaloClustersCont, jet);
473 fh2PtVsMassPerpConeTJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
474 fpPtVsMassPerpConeTJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
475 fh2CentVsMassPerpConeTJ->Fill(fCent,PCmass);
476 fh2MultVsMassPerpConeTJ->Fill(trackMult,PCmass);
485 //________________________________________________________________________
486 void AliAnalysisTaskEmcalJetMassBkg::GetRandomCone(TLorentzVector& lvRC,Float_t &pt, Float_t &eta, Float_t &phi,
487 AliParticleContainer* tracks, AliClusterContainer* clusters,
488 AliEmcalJet *jet) const
491 lvRC.SetPxPyPzE(0.,0.,0.,0.);
497 if (!tracks && !clusters)
508 Float_t maxEta = fConeMaxEta;
509 Float_t minEta = fConeMinEta;
510 Float_t maxPhi = fConeMaxPhi;
511 Float_t minPhi = fConeMinPhi;
513 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
514 if (minPhi < 0) minPhi = 0;
518 Bool_t reject = kTRUE;
520 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
521 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
522 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
525 } while (dLJ < fMinRC2LJ && repeats < 999 && reject);
527 if (repeats == 999) {
528 AliWarning(Form("%s: Could not get random cone!", GetName()));
532 GetCone(lvRC,pt,eta,phi,tracks,clusters);
537 //________________________________________________________________________
538 void AliAnalysisTaskEmcalJetMassBkg::GetCone(TLorentzVector& lvRC,Float_t &pt, Float_t eta, Float_t phi, AliParticleContainer* tracks, AliClusterContainer* clusters) const
542 lvRC.SetPxPyPzE(0.,0.,0.,0.);
545 AliVCluster* cluster = clusters->GetNextAcceptCluster(0);
547 TLorentzVector nPart;
548 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
550 Float_t cluseta = nPart.Eta();
551 Float_t clusphi = nPart.Phi();
553 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi + 2 * TMath::Pi()))
554 clusphi += 2 * TMath::Pi();
555 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi - 2 * TMath::Pi()))
556 clusphi -= 2 * TMath::Pi();
558 Float_t d = TMath::Sqrt((cluseta - eta) * (cluseta - eta) + (clusphi - phi) * (clusphi - phi));
559 if (d <= fConeRadius) {
561 TLorentzVector lvcl(nPart.Px(),nPart.Py(),nPart.Pz(),nPart.E());
565 cluster = clusters->GetNextAcceptCluster();
570 AliVParticle* track = tracks->GetNextAcceptParticle(0);
572 Float_t tracketa = track->Eta();
573 Float_t trackphi = track->Phi();
575 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
576 trackphi += 2 * TMath::Pi();
577 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
578 trackphi -= 2 * TMath::Pi();
580 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
581 if (d <= fConeRadius) {
583 TLorentzVector lvtr(track->Px(),track->Py(),track->Pz(),track->E());
587 track = tracks->GetNextAcceptParticle();
593 //________________________________________________________________________
594 void AliAnalysisTaskEmcalJetMassBkg::GetPerpCone(TLorentzVector& lvRC,Float_t &pt, Float_t &eta, Float_t &phi, AliParticleContainer* tracks, AliClusterContainer* clusters, AliEmcalJet *jet) const
597 lvRC.SetPxPyPzE(0.,0.,0.,0.);
603 if (!tracks && !clusters)
609 Float_t LJeta = jet->Eta();
610 Float_t LJphi = jet->Phi();
613 phi = LJphi + 0.5*TMath::Pi();
614 if(phi>TMath::TwoPi()) phi-=TMath::TwoPi();
616 GetCone(lvRC,pt,eta,phi,tracks,clusters);
619 //________________________________________________________________________
620 void AliAnalysisTaskEmcalJetMassBkg::SetConeEtaPhiEMCAL()
622 // Set default cuts for full cones
624 SetConeEtaLimits(-0.7+fConeRadius,0.7-fConeRadius);
625 SetConePhiLimits(1.405+fConeRadius,3.135-fConeRadius);
628 //________________________________________________________________________
629 void AliAnalysisTaskEmcalJetMassBkg::SetConeEtaPhiTPC()
631 // Set default cuts for charged cones
633 SetConeEtaLimits(-0.9+fConeRadius, 0.9-fConeRadius);
634 SetConePhiLimits(-10, 10);
637 //________________________________________________________________________
638 void AliAnalysisTaskEmcalJetMassBkg::ExecOnce() {
640 AliAnalysisTaskEmcalJet::ExecOnce();
642 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
643 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
645 if (fRCperEvent < 0) {
646 Double_t area = (fConeMaxEta - fConeMinEta) * (fConeMaxPhi - fConeMinPhi);
647 Double_t rcArea = TMath::Pi() * fConeRadius * fConeRadius;
648 fRCperEvent = TMath::FloorNint(area / rcArea - 0.5);
649 if (fRCperEvent == 0)
654 fMinRC2LJ = fConeRadius * 1.5;
656 const Float_t maxDist = TMath::Max(fConeMaxPhi - fConeMinPhi, fConeMaxEta - fConeMinEta) / 2;
657 if (fMinRC2LJ > maxDist) {
658 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. "
659 "Will use fMinRC2LJ = %f", fMinRC2LJ, maxDist));
665 //________________________________________________________________________
666 Bool_t AliAnalysisTaskEmcalJetMassBkg::RetrieveEventObjects() {
668 // retrieve event objects
671 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
678 //_______________________________________________________________________
679 void AliAnalysisTaskEmcalJetMassBkg::Terminate(Option_t *)
681 // Called once at the end of the analysis.