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),
54 fh2PtVsMassRCExLJDPhi(0),
55 fh2PtVsMassPerpConeLJ(0),
56 fh2PtVsMassPerpConeTJ(0),
59 fpPtVsMassPerpConeLJ(0),
60 fpPtVsMassPerpConeTJ(0),
62 fh2EtaVsMassRCExLJ(0),
63 fh2EtaVsMassPerpConeLJ(0),
64 fh2EtaVsMassPerpConeTJ(0),
66 fh2CentVsMassRCExLJ(0),
67 fh2CentVsMassPerpConeLJ(0),
68 fh2CentVsMassPerpConeTJ(0),
70 fh2MultVsMassRCExLJ(0),
71 fh2MultVsMassPerpConeLJ(0),
72 fh2MultVsMassPerpConeTJ(0),
73 fh2CentVsMedianMassRC(0),
74 fh2CentVsMedianMassRCExLJ(0),
75 fh2MultVsMedianMassRC(0),
76 fh2MultVsMedianMassRCExLJ(0),
77 fh2CentVsMeanMassRC(0),
78 fh2CentVsMeanMassRCExLJ(0),
79 fh2MultVsMeanMassRC(0),
80 fh2MultVsMeanMassRCExLJ(0),
81 fh2CentVsMedianMassPerAreaRC(0),
82 fh2CentVsMedianMassPerAreaRCExLJ(0),
83 fh2MultVsMedianMassPerAreaRC(0),
84 fh2MultVsMedianMassPerAreaRCExLJ(0)
86 // Default constructor.
88 fh2PtVsMassRC = new TH2F*[fNcentBins];
89 fh2PtVsMassRCExLJDPhi = new TH3F*[fNcentBins];
90 fh2PtVsMassPerpConeLJ = new TH2F*[fNcentBins];
91 fh2PtVsMassPerpConeTJ = new TH2F*[fNcentBins];
93 fpPtVsMassRC = new TProfile*[fNcentBins];
94 fpPtVsMassRCExLJ = new TProfile*[fNcentBins];
95 fpPtVsMassPerpConeLJ = new TProfile*[fNcentBins];
96 fpPtVsMassPerpConeTJ = new TProfile*[fNcentBins];
98 fh2EtaVsMassRC = new TH2F*[fNcentBins];
99 fh2EtaVsMassRCExLJ = new TH2F*[fNcentBins];
100 fh2EtaVsMassPerpConeLJ = new TH2F*[fNcentBins];
101 fh2EtaVsMassPerpConeTJ = new TH2F*[fNcentBins];
103 for (Int_t i = 0; i < fNcentBins; i++) {
104 fh2PtVsMassRC[i] = 0;
105 fh2PtVsMassRCExLJDPhi[i] = 0;
106 fh2PtVsMassPerpConeLJ[i] = 0;
107 fh2PtVsMassPerpConeTJ[i] = 0;
110 fpPtVsMassRCExLJ[i] = 0;
111 fpPtVsMassPerpConeLJ[i] = 0;
112 fpPtVsMassPerpConeTJ[i] = 0;
114 fh2EtaVsMassRC[i] = 0;
115 fh2EtaVsMassRCExLJ[i] = 0;
116 fh2EtaVsMassPerpConeLJ[i] = 0;
117 fh2EtaVsMassPerpConeTJ[i] = 0;
120 SetMakeGeneralHistograms(kTRUE);
124 //________________________________________________________________________
125 AliAnalysisTaskEmcalJetMassBkg::AliAnalysisTaskEmcalJetMassBkg(const char *name) :
126 AliAnalysisTaskEmcalJet(name, kTRUE),
134 fConeMaxPhi(TMath::Pi()*2),
137 fCaloClustersCont(0),
139 fh2PtVsMassRCExLJDPhi(0),
140 fh2PtVsMassPerpConeLJ(0),
141 fh2PtVsMassPerpConeTJ(0),
144 fpPtVsMassPerpConeLJ(0),
145 fpPtVsMassPerpConeTJ(0),
147 fh2EtaVsMassRCExLJ(0),
148 fh2EtaVsMassPerpConeLJ(0),
149 fh2EtaVsMassPerpConeTJ(0),
151 fh2CentVsMassRCExLJ(0),
152 fh2CentVsMassPerpConeLJ(0),
153 fh2CentVsMassPerpConeTJ(0),
155 fh2MultVsMassRCExLJ(0),
156 fh2MultVsMassPerpConeLJ(0),
157 fh2MultVsMassPerpConeTJ(0),
158 fh2CentVsMedianMassRC(0),
159 fh2CentVsMedianMassRCExLJ(0),
160 fh2MultVsMedianMassRC(0),
161 fh2MultVsMedianMassRCExLJ(0),
162 fh2CentVsMeanMassRC(0),
163 fh2CentVsMeanMassRCExLJ(0),
164 fh2MultVsMeanMassRC(0),
165 fh2MultVsMeanMassRCExLJ(0),
166 fh2CentVsMedianMassPerAreaRC(0),
167 fh2CentVsMedianMassPerAreaRCExLJ(0),
168 fh2MultVsMedianMassPerAreaRC(0),
169 fh2MultVsMedianMassPerAreaRCExLJ(0)
171 // Standard constructor.
173 fh2PtVsMassRC = new TH2F*[fNcentBins];
174 fh2PtVsMassRCExLJDPhi = new TH3F*[fNcentBins];
175 fh2PtVsMassPerpConeLJ = new TH2F*[fNcentBins];
176 fh2PtVsMassPerpConeTJ = new TH2F*[fNcentBins];
178 fpPtVsMassRC = new TProfile*[fNcentBins];
179 fpPtVsMassRCExLJ = new TProfile*[fNcentBins];
180 fpPtVsMassPerpConeLJ = new TProfile*[fNcentBins];
181 fpPtVsMassPerpConeTJ = new TProfile*[fNcentBins];
183 fh2EtaVsMassRC = new TH2F*[fNcentBins];
184 fh2EtaVsMassRCExLJ = new TH2F*[fNcentBins];
185 fh2EtaVsMassPerpConeLJ = new TH2F*[fNcentBins];
186 fh2EtaVsMassPerpConeTJ = new TH2F*[fNcentBins];
188 for (Int_t i = 0; i < fNcentBins; i++) {
189 fh2PtVsMassRC[i] = 0;
190 fh2PtVsMassRCExLJDPhi[i] = 0;
191 fh2PtVsMassPerpConeLJ[i] = 0;
192 fh2PtVsMassPerpConeTJ[i] = 0;
195 fpPtVsMassRCExLJ[i] = 0;
196 fpPtVsMassPerpConeLJ[i] = 0;
197 fpPtVsMassPerpConeTJ[i] = 0;
199 fh2EtaVsMassRC[i] = 0;
200 fh2EtaVsMassRCExLJ[i] = 0;
201 fh2EtaVsMassPerpConeLJ[i] = 0;
202 fh2EtaVsMassPerpConeTJ[i] = 0;
205 SetMakeGeneralHistograms(kTRUE);
208 //________________________________________________________________________
209 AliAnalysisTaskEmcalJetMassBkg::~AliAnalysisTaskEmcalJetMassBkg()
214 //________________________________________________________________________
215 void AliAnalysisTaskEmcalJetMassBkg::UserCreateOutputObjects()
217 // Create user output.
219 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
221 fJetsCont = GetJetContainer(fContainerBase);
222 fTracksCont = fJetsCont->GetParticleContainer();
223 fCaloClustersCont = fJetsCont->GetClusterContainer();
225 Bool_t oldStatus = TH1::AddDirectoryStatus();
226 TH1::AddDirectory(kFALSE);
228 const Int_t nBinsPt = 250;
229 const Double_t minPt = -50.;
230 const Double_t maxPt = 200.;
232 const Int_t nBinsEta = 100;
233 const Double_t minEta = -1.;
234 const Double_t maxEta = 1.;
236 const Int_t nBinsCent = 100;
237 const Double_t minCent = 0.;
238 const Double_t maxCent = 100.;
240 const Int_t nBinsMult = 400;
241 const Double_t minMult = 0.;
242 const Double_t maxMult = 4000.;
244 fh2CentVsMassRC = new TH2F("fh2CentVsMassRC","fh2CentVsMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
245 fOutput->Add(fh2CentVsMassRC);
247 fh2CentVsMassRCExLJ = new TH2F("fh2CentVsMassRCExLJ","fh2CentVsMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
248 fOutput->Add(fh2CentVsMassRCExLJ);
250 fh2CentVsMassPerpConeLJ = new TH2F("fh2CentVsMassPerpConeLJ","fh2CentVsMassPerpConeLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
251 fOutput->Add(fh2CentVsMassPerpConeLJ);
253 fh2CentVsMassPerpConeTJ = new TH2F("fh2CentVsMassPerpConeTJ","fh2CentVsMassPerpConeTJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
254 fOutput->Add(fh2CentVsMassPerpConeTJ);
256 fh2MultVsMassRC = new TH2F("fh2MultVsMassRC","fh2MultVsMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
257 fOutput->Add(fh2MultVsMassRC);
259 fh2MultVsMassRCExLJ = new TH2F("fh2MultVsMassRCExLJ","fh2MultVsMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
260 fOutput->Add(fh2MultVsMassRCExLJ);
262 fh2MultVsMassPerpConeLJ = new TH2F("fh2MultVsMassPerpConeLJ","fh2MultVsMassPerpConeLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
263 fOutput->Add(fh2MultVsMassPerpConeLJ);
265 fh2MultVsMassPerpConeTJ = new TH2F("fh2MultVsMassPerpConeTJ","fh2MultVsMassPerpConeTJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
266 fOutput->Add(fh2MultVsMassPerpConeTJ);
268 fh2CentVsMedianMassRC = new TH2F("fh2CentVsMedianMassRC","fh2CentVsMedianMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
269 fOutput->Add(fh2CentVsMedianMassRC);
271 fh2CentVsMedianMassRCExLJ = new TH2F("fh2CentVsMedianMassRCExLJ","fh2CentVsMedianMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
272 fOutput->Add(fh2CentVsMedianMassRCExLJ);
274 fh2MultVsMedianMassRC = new TH2F("fh2MultVsMedianMassRC","fh2MultVsMedianMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
275 fOutput->Add(fh2MultVsMedianMassRC);
277 fh2MultVsMedianMassRCExLJ = new TH2F("fh2MultVsMedianMassRCExLJ","fh2MultVsMedianMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
278 fOutput->Add(fh2MultVsMedianMassRCExLJ);
280 fh2CentVsMeanMassRC = new TH2F("fh2CentVsMeanMassRC","fh2CentVsMeanMassRC;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
281 fOutput->Add(fh2CentVsMeanMassRC);
283 fh2CentVsMeanMassRCExLJ = new TH2F("fh2CentVsMeanMassRCExLJ","fh2CentVsMeanMassRCExLJ;cent;#it{M}_{RC}",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
284 fOutput->Add(fh2CentVsMeanMassRCExLJ);
286 fh2MultVsMeanMassRC = new TH2F("fh2MultVsMeanMassRC","fh2MultVsMeanMassRC;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
287 fOutput->Add(fh2MultVsMeanMassRC);
289 fh2MultVsMeanMassRCExLJ = new TH2F("fh2MultVsMeanMassRCExLJ","fh2MultVsMeanMassRCExLJ;#it{N}_{track};#it{M}_{RC}",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
290 fOutput->Add(fh2MultVsMeanMassRCExLJ);
292 fh2CentVsMedianMassPerAreaRC = new TH2F("fh2CentVsMedianMassPerAreaRC","fh2CentVsMedianMassPerAreaRC;cent;#it{M}_{RC}/A",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
293 fOutput->Add(fh2CentVsMedianMassPerAreaRC);
295 fh2CentVsMedianMassPerAreaRCExLJ = new TH2F("fh2CentVsMedianMassPerAreaRCExLJ","fh2CentVsMedianMassPerAreaRCExLJ;cent;#it{M}_{RC}/A",nBinsCent,minCent,maxCent,nBinsPt,minPt,maxPt);
296 fOutput->Add(fh2CentVsMedianMassPerAreaRCExLJ);
298 fh2MultVsMedianMassPerAreaRC = new TH2F("fh2MultVsMedianMassPerAreaRC","fh2MultVsMedianMassPerAreaRC;#it{N}_{track};#it{M}_{RC}/A",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
299 fOutput->Add(fh2MultVsMedianMassPerAreaRC);
301 fh2MultVsMedianMassPerAreaRCExLJ = new TH2F("fh2MultVsMedianMassPerAreaRCExLJ","fh2MultVsMedianMassPerAreaRCExLJ;#it{N}_{track};#it{M}_{RC}/A",nBinsMult,minMult,maxMult,nBinsPt,minPt,maxPt);
302 fOutput->Add(fh2MultVsMedianMassPerAreaRCExLJ);
304 TString histName = "";
305 TString histTitle = "";
306 for (Int_t i = 0; i < fNcentBins; i++) {
307 histName = TString::Format("fh2PtVsMassRC_%d",i);
308 histTitle = TString::Format("%s;#it{p}_{T,RC};#it{M}_{RC}",histName.Data());
309 fh2PtVsMassRC[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
310 fOutput->Add(fh2PtVsMassRC[i]);
312 histName = TString::Format("fh2PtVsMassRCExLJDPhi_%d",i);
313 histTitle = TString::Format("%s;#it{p}_{T,RC};#it{M}_{RC}",histName.Data());
314 fh2PtVsMassRCExLJDPhi[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt,72,-0.5*TMath::Pi(),1.5*TMath::Pi());
315 fOutput->Add(fh2PtVsMassRCExLJDPhi[i]);
317 histName = TString::Format("fh2PtVsMassPerpConeLJ_%d",i);
318 histTitle = TString::Format("%s;#it{p}_{T,PerpConeLJ};#it{M}_{PerpConeLJ}",histName.Data());
319 fh2PtVsMassPerpConeLJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
320 fOutput->Add(fh2PtVsMassPerpConeLJ[i]);
322 histName = TString::Format("fh2PtVsMassPerpConeTJ_%d",i);
323 histTitle = TString::Format("%s;#it{p}_{T,PerpConeTJ};#it{M}_{PerpConeTJ}",histName.Data());
324 fh2PtVsMassPerpConeTJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
325 fOutput->Add(fh2PtVsMassPerpConeTJ[i]);
327 histName = TString::Format("fh2EtaVsMassRC_%d",i);
328 histTitle = TString::Format("%s;#eta_{RC};#it{M}_{RC}",histName.Data());
329 fh2EtaVsMassRC[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsEta,minEta,maxEta,nBinsPt,minPt,maxPt);
330 fOutput->Add(fh2EtaVsMassRC[i]);
332 histName = TString::Format("fh2EtaVsMassRCExLJ_%d",i);
333 histTitle = TString::Format("%s;#eta_{RC};#it{M}_{RC}",histName.Data());
334 fh2EtaVsMassRCExLJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsEta,minEta,maxEta,nBinsPt,minPt,maxPt);
335 fOutput->Add(fh2EtaVsMassRCExLJ[i]);
337 histName = TString::Format("fh2EtaVsMassPerpConeLJ_%d",i);
338 histTitle = TString::Format("%s;#eta_{PerpConeLJ};#it{M}_{PerpConeLJ}",histName.Data());
339 fh2EtaVsMassPerpConeLJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsEta,minEta,maxEta,nBinsPt,minPt,maxPt);
340 fOutput->Add(fh2EtaVsMassPerpConeLJ[i]);
342 histName = TString::Format("fh2EtaVsMassPerpConeTJ_%d",i);
343 histTitle = TString::Format("%s;#eta_{PerpConeTJ};#it{M}_{PerpConeTJ}",histName.Data());
344 fh2EtaVsMassPerpConeTJ[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsEta,minEta,maxEta,nBinsPt,minPt,maxPt);
345 fOutput->Add(fh2EtaVsMassPerpConeTJ[i]);
347 histName = TString::Format("fpPtVsMassRC_%d",i);
348 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
349 fpPtVsMassRC[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
350 fOutput->Add(fpPtVsMassRC[i]);
352 histName = TString::Format("fpPtVsMassRCExLJ_%d",i);
353 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
354 fpPtVsMassRCExLJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
355 fOutput->Add(fpPtVsMassRCExLJ[i]);
357 histName = TString::Format("fpPtVsMassPerpConeLJ_%d",i);
358 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
359 fpPtVsMassPerpConeLJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
360 fOutput->Add(fpPtVsMassPerpConeLJ[i]);
362 histName = TString::Format("fpPtVsMassPerpConeTJ_%d",i);
363 histTitle = TString::Format("%s;#it{p}_{T,RC};Avg #it{M}_{RC}",histName.Data());
364 fpPtVsMassPerpConeTJ[i] = new TProfile(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt);
365 fOutput->Add(fpPtVsMassPerpConeTJ[i]);
368 // =========== Switch on Sumw2 for all histos ===========
369 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
370 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
375 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
379 TH1::AddDirectory(oldStatus);
381 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
384 //________________________________________________________________________
385 Bool_t AliAnalysisTaskEmcalJetMassBkg::Run()
387 // Run analysis code here, if needed. It will be executed before FillHistograms().
392 //________________________________________________________________________
393 Bool_t AliAnalysisTaskEmcalJetMassBkg::FillHistograms()
397 const Float_t rcArea = fConeRadius * fConeRadius * TMath::Pi();
400 Double_t rho = GetRhoVal(fContainerBase);
401 Int_t trackMult = fTracksCont->GetNAcceptedParticles();
404 AliEmcalJet* jet = NULL;
406 jet = fJetsCont->GetLeadingJet("rho");
408 TLorentzVector lvRC(0.,0.,0.,0.);
414 static Double_t massvecRC[999];
415 static Double_t massPerAreavecRC[999];
417 static Double_t massvecRCExLJ[999];
418 static Double_t massPerAreavecRCExLJ[999];
421 Int_t nRCExLJAcc = 0;
423 for (Int_t i = 0; i < fRCperEvent; i++) {
424 // Simple random cones
425 lvRC.SetPxPyPzE(0.,0.,0.,0.);
429 GetRandomCone(lvRC,RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, 0);
432 fh2PtVsMassRC[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
433 fpPtVsMassRC[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
434 fh2EtaVsMassRC[fCentBin]->Fill(RCeta,RCmass);
435 fh2CentVsMassRC->Fill(fCent,RCmass);
436 fh2MultVsMassRC->Fill(trackMult,RCmass);
438 massvecRC[nRCAcc] = RCmass;
439 massPerAreavecRC[nRCAcc] = RCmass/rcArea;
443 if (fJetsCont && jet) {
444 // Random cones far away from leading jet(s)
445 lvRC.SetPxPyPzE(0.,0.,0.,0.);
449 GetRandomCone(lvRC,RCpt, RCeta, RCphi, fTracksCont, fCaloClustersCont, jet);
451 if (RCpt > 0 && jet) {
452 Float_t dphi = RCphi - jet->Phi();
453 if (dphi > 1.5*TMath::Pi()) dphi -= TMath::Pi() * 2;
454 if (dphi < -0.5*TMath::Pi()) dphi += TMath::Pi() * 2;
455 fh2PtVsMassRCExLJDPhi[fCentBin]->Fill(RCpt - rho*rcArea,RCmass,dphi);
456 fpPtVsMassRCExLJ[fCentBin]->Fill(RCpt - rho*rcArea,RCmass);
457 fh2EtaVsMassRCExLJ[fCentBin]->Fill(RCeta,RCmass);
458 fh2CentVsMassRCExLJ->Fill(fCent,RCmass);
459 fh2MultVsMassRCExLJ->Fill(trackMult,RCmass);
461 massvecRCExLJ[nRCExLJAcc] = RCmass;
462 massPerAreavecRCExLJ[nRCExLJAcc] = RCmass/rcArea;
468 Double_t medianRC, medianRCExLJ = 0.;
469 medianRC = TMath::Median(nRCAcc,massvecRC);
470 medianRCExLJ = TMath::Median(nRCExLJAcc,massvecRCExLJ);
472 fh2CentVsMedianMassRC->Fill(fCent,medianRC);
473 fh2CentVsMedianMassRCExLJ->Fill(fCent,medianRCExLJ);
475 fh2MultVsMedianMassRC->Fill(trackMult,medianRC);
476 fh2MultVsMedianMassRCExLJ->Fill(trackMult,medianRCExLJ);
478 Double_t meanRC = 0.; Double_t meanRCExLJ = 0.;
479 if(nRCAcc>0) meanRC = TMath::Mean(nRCAcc,massvecRC);
480 if(nRCExLJAcc) meanRCExLJ = TMath::Mean(nRCExLJAcc,massvecRCExLJ);
482 fh2CentVsMeanMassRC->Fill(fCent,meanRC);
483 fh2CentVsMeanMassRCExLJ->Fill(fCent,meanRCExLJ);
485 fh2MultVsMeanMassRC->Fill(trackMult,meanRC);
486 fh2MultVsMeanMassRCExLJ->Fill(trackMult,meanRCExLJ);
488 Double_t medianPerAreaRC, medianPerAreaRCExLJ = 0.;
489 medianPerAreaRC = TMath::Median(nRCAcc,massPerAreavecRC);
490 medianPerAreaRCExLJ = TMath::Median(nRCExLJAcc,massPerAreavecRCExLJ);
492 fh2CentVsMedianMassPerAreaRC->Fill(fCent,medianPerAreaRC);
493 fh2CentVsMedianMassPerAreaRCExLJ->Fill(fCent,medianPerAreaRCExLJ);
495 fh2MultVsMedianMassPerAreaRC->Fill(trackMult,medianPerAreaRC);
496 fh2MultVsMedianMassPerAreaRCExLJ->Fill(trackMult,medianPerAreaRCExLJ);
499 if(fJetsCont && jet) {
500 //cone perpendicular to leading jet
501 TLorentzVector lvPC(0.,0.,0.,0.);
507 GetPerpCone(lvPC,PCpt, PCeta, PCphi, fTracksCont, fCaloClustersCont, jet);
510 fh2PtVsMassPerpConeLJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
511 fpPtVsMassPerpConeLJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
512 fh2EtaVsMassPerpConeLJ[fCentBin]->Fill(PCeta,PCmass);
513 fh2CentVsMassPerpConeLJ->Fill(fCent,PCmass);
514 fh2MultVsMassPerpConeLJ->Fill(trackMult,PCmass);
517 //cone perpendicular to all tagged jets
518 for(int i = 0; i < fJetsCont->GetNJets();++i) {
519 jet = static_cast<AliEmcalJet*>(fJetsCont->GetAcceptJet(i));
522 if(jet->GetTagStatus()<1)
525 lvPC.SetPxPyPzE(0.,0.,0.,0.);
529 GetPerpCone(lvPC,PCpt, PCeta, PCphi, fTracksCont, fCaloClustersCont, jet);
532 fh2PtVsMassPerpConeTJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
533 fpPtVsMassPerpConeTJ[fCentBin]->Fill(PCpt-rho*rcArea,PCmass);
534 fh2EtaVsMassPerpConeTJ[fCentBin]->Fill(PCeta,PCmass);
535 fh2CentVsMassPerpConeTJ->Fill(fCent,PCmass);
536 fh2MultVsMassPerpConeTJ->Fill(trackMult,PCmass);
545 //________________________________________________________________________
546 void AliAnalysisTaskEmcalJetMassBkg::GetRandomCone(TLorentzVector& lvRC,Float_t &pt, Float_t &eta, Float_t &phi,
547 AliParticleContainer* tracks, AliClusterContainer* clusters,
548 AliEmcalJet *jet) const
551 lvRC.SetPxPyPzE(0.,0.,0.,0.);
557 if (!tracks && !clusters)
568 Float_t maxEta = fConeMaxEta;
569 Float_t minEta = fConeMinEta;
570 Float_t maxPhi = fConeMaxPhi;
571 Float_t minPhi = fConeMinPhi;
573 if (maxPhi > TMath::Pi() * 2) maxPhi = TMath::Pi() * 2;
574 if (minPhi < 0) minPhi = 0;
578 Bool_t reject = kTRUE;
580 eta = gRandom->Rndm() * (maxEta - minEta) + minEta;
581 phi = gRandom->Rndm() * (maxPhi - minPhi) + minPhi;
582 dLJ = TMath::Sqrt((LJeta - eta) * (LJeta - eta) + (LJphi - phi) * (LJphi - phi));
585 } while (dLJ < fMinRC2LJ && repeats < 999 && reject);
587 if (repeats == 999) {
588 AliWarning(Form("%s: Could not get random cone!", GetName()));
592 GetCone(lvRC,pt,eta,phi,tracks,clusters);
597 //________________________________________________________________________
598 void AliAnalysisTaskEmcalJetMassBkg::GetCone(TLorentzVector& lvRC,Float_t &pt, Float_t eta, Float_t phi, AliParticleContainer* tracks, AliClusterContainer* clusters) const
602 lvRC.SetPxPyPzE(0.,0.,0.,0.);
605 AliVCluster* cluster = clusters->GetNextAcceptCluster(0);
607 TLorentzVector nPart;
608 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
610 Float_t cluseta = nPart.Eta();
611 Float_t clusphi = nPart.Phi();
613 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi + 2 * TMath::Pi()))
614 clusphi += 2 * TMath::Pi();
615 if (TMath::Abs(clusphi - phi) > TMath::Abs(clusphi - phi - 2 * TMath::Pi()))
616 clusphi -= 2 * TMath::Pi();
618 Float_t d = TMath::Sqrt((cluseta - eta) * (cluseta - eta) + (clusphi - phi) * (clusphi - phi));
619 if (d <= fConeRadius) {
621 TLorentzVector lvcl(nPart.Px(),nPart.Py(),nPart.Pz(),nPart.E());
625 cluster = clusters->GetNextAcceptCluster();
630 AliVParticle* track = tracks->GetNextAcceptParticle(0);
632 Float_t tracketa = track->Eta();
633 Float_t trackphi = track->Phi();
635 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi + 2 * TMath::Pi()))
636 trackphi += 2 * TMath::Pi();
637 if (TMath::Abs(trackphi - phi) > TMath::Abs(trackphi - phi - 2 * TMath::Pi()))
638 trackphi -= 2 * TMath::Pi();
640 Float_t d = TMath::Sqrt((tracketa - eta) * (tracketa - eta) + (trackphi - phi) * (trackphi - phi));
641 if (d <= fConeRadius) {
643 TLorentzVector lvtr(track->Px(),track->Py(),track->Pz(),track->E());
647 track = tracks->GetNextAcceptParticle();
653 //________________________________________________________________________
654 void AliAnalysisTaskEmcalJetMassBkg::GetPerpCone(TLorentzVector& lvRC,Float_t &pt, Float_t &eta, Float_t &phi, AliParticleContainer* tracks, AliClusterContainer* clusters, AliEmcalJet *jet) const
657 lvRC.SetPxPyPzE(0.,0.,0.,0.);
663 if (!tracks && !clusters)
669 Float_t LJeta = jet->Eta();
670 Float_t LJphi = jet->Phi();
673 phi = LJphi + 0.5*TMath::Pi();
674 if(phi>TMath::TwoPi()) phi-=TMath::TwoPi();
676 GetCone(lvRC,pt,eta,phi,tracks,clusters);
679 //________________________________________________________________________
680 void AliAnalysisTaskEmcalJetMassBkg::SetConeEtaPhiEMCAL()
682 // Set default cuts for full cones
684 SetConeEtaLimits(-0.7+fConeRadius,0.7-fConeRadius);
685 SetConePhiLimits(1.405+fConeRadius,3.135-fConeRadius);
688 //________________________________________________________________________
689 void AliAnalysisTaskEmcalJetMassBkg::SetConeEtaPhiTPC()
691 // Set default cuts for charged cones
693 SetConeEtaLimits(-0.9+fConeRadius, 0.9-fConeRadius);
694 SetConePhiLimits(-10, 10);
697 //________________________________________________________________________
698 void AliAnalysisTaskEmcalJetMassBkg::ExecOnce() {
700 AliAnalysisTaskEmcalJet::ExecOnce();
702 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
703 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
705 if (fRCperEvent < 0) {
706 Double_t area = (fConeMaxEta - fConeMinEta) * (fConeMaxPhi - fConeMinPhi);
707 Double_t rcArea = TMath::Pi() * fConeRadius * fConeRadius;
708 fRCperEvent = TMath::FloorNint(area / rcArea - 0.5);
709 if (fRCperEvent == 0)
714 fMinRC2LJ = fConeRadius * 1.5;
716 const Float_t maxDist = TMath::Max(fConeMaxPhi - fConeMinPhi, fConeMaxEta - fConeMinEta) / 2;
717 if (fMinRC2LJ > maxDist) {
718 AliWarning(Form("The parameter fMinRC2LJ = %f is too large for the considered acceptance. "
719 "Will use fMinRC2LJ = %f", fMinRC2LJ, maxDist));
725 //________________________________________________________________________
726 Bool_t AliAnalysisTaskEmcalJetMassBkg::RetrieveEventObjects() {
728 // retrieve event objects
731 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
738 //_______________________________________________________________________
739 void AliAnalysisTaskEmcalJetMassBkg::Terminate(Option_t *)
741 // Called once at the end of the analysis.