6 #include <TClonesArray.h>
10 #include <THnSparse.h>
12 #include <TLorentzVector.h>
22 #include "AliVCluster.h"
23 #include "AliVTrack.h"
28 #include "AliAnalysisManager.h"
32 #include "AliAODEvent.h"
38 namespace EmcalHJetMassAnalysis {
41 AliAnalysisTaskEmcalHJetMass::AliAnalysisTaskEmcalHJetMass() :
47 fMinFractionShared(0),
51 fTriggerTrackType(kInclusive),
63 fh3PtJet1VsMassVsHPtAllSel(0),
64 fh3PtJet1VsMassVsHPtAllSelMatch(0),
65 fh3PtJet1VsMassVsHPtTagged(0),
66 fh3PtJet1VsMassVsHPtTaggedMatch(0),
67 fh3PtJet1VsRatVsHPtAllSel(0),
68 fh3PtJet1VsRatVsHPtAllSelMatch(0),
69 fh3PtJet1VsRatVsHPtTagged(0),
70 fh3PtJet1VsRatVsHPtTaggedMatch(0),
78 fh1PtHadron =
new TH1F*[fNcentBins];
79 fh1PtHadronMatch =
new TH1F*[fNcentBins];
80 fh1PhiHadron =
new TH1F*[fNcentBins];
81 fh3PtHPtJDPhi =
new TH3F*[fNcentBins];
82 fh3PtJet1VsMassVsHPtAllSel =
new TH3F*[fNcentBins];
83 fh3PtJet1VsMassVsHPtAllSelMatch =
new TH3F*[fNcentBins];
84 fh3PtJet1VsMassVsHPtTagged =
new TH3F*[fNcentBins];
85 fh3PtJet1VsMassVsHPtTaggedMatch =
new TH3F*[fNcentBins];
86 fh3PtJet1VsRatVsHPtAllSel =
new TH3F*[fNcentBins];
87 fh3PtJet1VsRatVsHPtAllSelMatch =
new TH3F*[fNcentBins];
88 fh3PtJet1VsRatVsHPtTagged =
new TH3F*[fNcentBins];
89 fh3PtJet1VsRatVsHPtTaggedMatch =
new TH3F*[fNcentBins];
90 fhnAllSel =
new THnSparse*[fNcentBins];
91 fhnAllSelMatch =
new THnSparse*[fNcentBins];
92 fhnTagged =
new THnSparse*[fNcentBins];
93 fhnTaggedMatch =
new THnSparse*[fNcentBins];
95 for (
Int_t i = 0; i < fNcentBins; i++) {
97 fh1PtHadronMatch[i] = 0;
100 fh3PtJet1VsMassVsHPtAllSel[i] = 0;
101 fh3PtJet1VsMassVsHPtAllSelMatch[i] = 0;
102 fh3PtJet1VsMassVsHPtTagged[i] = 0;
103 fh3PtJet1VsMassVsHPtTaggedMatch[i] = 0;
104 fh3PtJet1VsRatVsHPtAllSel[i] = 0;
105 fh3PtJet1VsRatVsHPtAllSelMatch[i] = 0;
106 fh3PtJet1VsRatVsHPtTagged[i] = 0;
107 fh3PtJet1VsRatVsHPtTaggedMatch[i] = 0;
109 fhnAllSelMatch[i] = 0;
111 fhnTaggedMatch[i] = 0;
114 fPtTTMin =
new TArrayF();
115 fPtTTMax =
new TArrayF();
117 SetMakeGeneralHistograms(kTRUE);
121 AliAnalysisTaskEmcalHJetMass::AliAnalysisTaskEmcalHJetMass(
const char *name) :
124 fDoNSHJetAna(kFALSE),
127 fMinFractionShared(0),
131 fTriggerTrackType(kInclusive),
143 fh3PtJet1VsMassVsHPtAllSel(0),
144 fh3PtJet1VsMassVsHPtAllSelMatch(0),
145 fh3PtJet1VsMassVsHPtTagged(0),
146 fh3PtJet1VsMassVsHPtTaggedMatch(0),
147 fh3PtJet1VsRatVsHPtAllSel(0),
148 fh3PtJet1VsRatVsHPtAllSelMatch(0),
149 fh3PtJet1VsRatVsHPtTagged(0),
150 fh3PtJet1VsRatVsHPtTaggedMatch(0),
158 fh1PtHadron =
new TH1F*[fNcentBins];
159 fh1PtHadronMatch =
new TH1F*[fNcentBins];
160 fh1PhiHadron =
new TH1F*[fNcentBins];
161 fh3PtHPtJDPhi =
new TH3F*[fNcentBins];
162 fh3PtJet1VsMassVsHPtAllSel =
new TH3F*[fNcentBins];
163 fh3PtJet1VsMassVsHPtAllSelMatch =
new TH3F*[fNcentBins];
164 fh3PtJet1VsMassVsHPtTagged =
new TH3F*[fNcentBins];
165 fh3PtJet1VsMassVsHPtTaggedMatch =
new TH3F*[fNcentBins];
166 fh3PtJet1VsRatVsHPtAllSel =
new TH3F*[fNcentBins];
167 fh3PtJet1VsRatVsHPtAllSelMatch =
new TH3F*[fNcentBins];
168 fh3PtJet1VsRatVsHPtTagged =
new TH3F*[fNcentBins];
169 fh3PtJet1VsRatVsHPtTaggedMatch =
new TH3F*[fNcentBins];
170 fhnAllSel =
new THnSparse*[fNcentBins];
171 fhnAllSelMatch =
new THnSparse*[fNcentBins];
172 fhnTagged =
new THnSparse*[fNcentBins];
173 fhnTaggedMatch =
new THnSparse*[fNcentBins];
175 for (
Int_t i = 0; i < fNcentBins; i++) {
177 fh1PtHadronMatch[i] = 0;
179 fh3PtHPtJDPhi[i] = 0;
180 fh3PtJet1VsMassVsHPtAllSel[i] = 0;
181 fh3PtJet1VsMassVsHPtAllSelMatch[i] = 0;
182 fh3PtJet1VsMassVsHPtTagged[i] = 0;
183 fh3PtJet1VsMassVsHPtTaggedMatch[i] = 0;
184 fh3PtJet1VsRatVsHPtAllSel[i] = 0;
185 fh3PtJet1VsRatVsHPtAllSelMatch[i] = 0;
186 fh3PtJet1VsRatVsHPtTagged[i] = 0;
187 fh3PtJet1VsRatVsHPtTaggedMatch[i] = 0;
189 fhnAllSelMatch[i] = 0;
191 fhnTaggedMatch[i] = 0;
194 fPtTTMin =
new TArrayF();
195 fPtTTMax =
new TArrayF();
197 SetMakeGeneralHistograms(kTRUE);
201 AliAnalysisTaskEmcalHJetMass::~AliAnalysisTaskEmcalHJetMass()
205 if(fRandom)
delete fRandom;
206 if(fPtTTMin)
delete fPtTTMin;
207 if(fPtTTMax)
delete fPtTTMax;
211 void AliAnalysisTaskEmcalHJetMass::UserCreateOutputObjects()
217 Bool_t oldStatus = TH1::AddDirectoryStatus();
218 TH1::AddDirectory(kFALSE);
220 const Int_t nBinsPt = 200;
224 const Int_t nBinsM = 90;
228 const Int_t nBinsR = 100;
232 const Int_t nBinsPtH = 100;
236 const Int_t nBinsPhi = 18*4;
237 const Double_t minPhi = -0.5*TMath::Pi();
238 const Double_t maxPhi = 1.5*TMath::Pi();
240 const Int_t nBinsSparse0 = 4;
241 const Int_t nBins0[nBinsSparse0] = {nBinsPt,nBinsM,nBinsPtH,nBinsM};
242 const Double_t xmin0[nBinsSparse0] = { minPt, minM, minPtH, minM};
243 const Double_t xmax0[nBinsSparse0] = { maxPt, maxM, maxPtH, maxM};
247 for (
Int_t i = 0; i < fNcentBins; i++) {
248 histName = TString::Format(
"fh1PtHadron_%d",i);
249 histTitle = TString::Format(
"%s;#it{p}_{T,h}",histName.Data());
250 fh1PtHadron[i] =
new TH1F(histName.Data(),histTitle.Data(),200.,0.,200.);
251 fOutput->Add(fh1PtHadron[i]);
253 histName = TString::Format(
"fh1PtHadronMatch_%d",i);
254 histTitle = TString::Format(
"%s;#it{p}_{T,h}",histName.Data());
255 fh1PtHadronMatch[i] =
new TH1F(histName.Data(),histTitle.Data(),200.,0.,200.);
256 fOutput->Add(fh1PtHadronMatch[i]);
258 histName = TString::Format(
"fh1PhiHadron_%d",i);
259 histTitle = TString::Format(
"%s;#varphi",histName.Data());
260 fh1PhiHadron[i] =
new TH1F(histName.Data(),histTitle.Data(),nBinsPhi,0.,TMath::TwoPi());
261 fOutput->Add(fh1PhiHadron[i]);
263 histName = TString::Format(
"fh3PtHPtJDPhi_%d",i);
264 histTitle = TString::Format(
"%s;#it{p}_{T,h};#it{p}_{T,jet};#Delta#varphi_{h,jet}",histName.Data());
265 fh3PtHPtJDPhi[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPtH,minPtH,maxPtH,nBinsPt,minPt,maxPt,nBinsPhi,minPhi,maxPhi);
266 fOutput->Add(fh3PtHPtJDPhi[i]);
269 histName = TString::Format(
"fh3PtJet1VsMassVsHPtAllSel_%d",i);
270 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
271 fh3PtJet1VsMassVsHPtAllSel[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
272 fOutput->Add(fh3PtJet1VsMassVsHPtAllSel[i]);
274 histName = TString::Format(
"fh3PtJet1VsMassVsHPtAllSelMatch_%d",i);
275 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
276 fh3PtJet1VsMassVsHPtAllSelMatch[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
277 fOutput->Add(fh3PtJet1VsMassVsHPtAllSelMatch[i]);
279 histName = TString::Format(
"fh3PtJet1VsMassVsHPtTagged_%d",i);
280 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
281 fh3PtJet1VsMassVsHPtTagged[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
282 fOutput->Add(fh3PtJet1VsMassVsHPtTagged[i]);
284 histName = TString::Format(
"fh3PtJet1VsMassVsHPtTaggedMatch_%d",i);
285 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
286 fh3PtJet1VsMassVsHPtTaggedMatch[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
287 fOutput->Add(fh3PtJet1VsMassVsHPtTaggedMatch[i]);
290 histName = TString::Format(
"fh3PtJet1VsRatVsHPtAllSel_%d",i);
291 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
292 fh3PtJet1VsRatVsHPtAllSel[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
293 fOutput->Add(fh3PtJet1VsRatVsHPtAllSel[i]);
295 histName = TString::Format(
"fh3PtJet1VsRatVsHPtAllSelMatch_%d",i);
296 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
297 fh3PtJet1VsRatVsHPtAllSelMatch[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
298 fOutput->Add(fh3PtJet1VsRatVsHPtAllSelMatch[i]);
300 histName = TString::Format(
"fh3PtJet1VsRatVsHPtTagged_%d",i);
301 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
302 fh3PtJet1VsRatVsHPtTagged[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
303 fOutput->Add(fh3PtJet1VsRatVsHPtTagged[i]);
305 histName = TString::Format(
"fh3PtJet1VsRatVsHPtTaggedMatch_%d",i);
306 histTitle = TString::Format(
"%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
307 fh3PtJet1VsRatVsHPtTaggedMatch[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
308 fOutput->Add(fh3PtJet1VsRatVsHPtTaggedMatch[i]);
312 histName = TString::Format(
"fhnAllSel_%d",i);
313 histTitle = Form(
"%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
314 fhnAllSel[i] =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
315 fOutput->Add(fhnAllSel[i]);
317 histName = TString::Format(
"fhnAllSelMatch_%d",i);
318 histTitle = Form(
"%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
319 fhnAllSelMatch[i] =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
320 fOutput->Add(fhnAllSelMatch[i]);
322 histName = TString::Format(
"fhnTagged_%d",i);
323 histTitle = Form(
"%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
324 fhnTagged[i] =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
325 fOutput->Add(fhnTagged[i]);
327 histName = TString::Format(
"fhnTaggedMatch_%d",i);
328 histTitle = Form(
"%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
329 fhnTaggedMatch[i] =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
330 fOutput->Add(fhnTaggedMatch[i]);
334 TH1::AddDirectory(oldStatus);
336 fRandom =
new TRandom3(0);
338 PostData(1, fOutput);
342 Bool_t AliAnalysisTaskEmcalHJetMass::Run()
348 if(!pCont || !jCont)
return kFALSE;
350 AliVParticle *vp = NULL;
352 if(fTriggerTrackType==kInclusive) {
353 pCont->ResetCurrentID();
355 fh1PtHadron[fCentBin]->Fill(vp->Pt());
356 fh1PhiHadron[fCentBin]->Fill(vp->Phi());
357 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel )
358 fh1PtHadronMatch[fCentBin]->Fill(vp->Pt());
361 jCont->ResetCurrentID();
363 Double_t dphi = GetDeltaPhi(vp,jet);
364 fh3PtHPtJDPhi[fCentBin]->Fill(vp->Pt(),jet->
Pt() - GetRhoVal(fContainerBase)*jet->
Area(),dphi);
365 if(TMath::Abs(dphi-TMath::Pi())>fDPhiHJetMax)
continue;
366 FillHJetHistograms(vp,jet);
371 else if(fTriggerTrackType==kSingleInclusive) {
372 for(
Int_t it = 0; it<fPtTTMin->GetSize(); it++) {
373 vp = GetSingleInclusiveTT(pCont,fPtTTMin->At(it),fPtTTMax->At(it));
375 fh1PtHadron[fCentBin]->Fill(vp->Pt());
376 fh1PhiHadron[fCentBin]->Fill(vp->Phi());
377 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel )
378 fh1PtHadronMatch[fCentBin]->Fill(vp->Pt());
380 jCont->ResetCurrentID();
382 Double_t dphi = GetDeltaPhi(vp,jet);
383 fh3PtHPtJDPhi[fCentBin]->Fill(vp->Pt(),jet->
Pt() - GetRhoVal(fContainerBase)*jet->
Area(),dphi);
384 if(TMath::Abs(dphi-TMath::Pi())>fDPhiHJetMax)
continue;
385 FillHJetHistograms(vp,jet);
398 pCont->ResetCurrentID();
400 if(vp->Pt()>=ptmin && vp->Pt()<
ptmax ) {
402 arr.SetAt(pCont->GetCurrentID(),counter);
405 if(counter<0)
return NULL;
407 fRandom->SetSeed(arr.At(0));
408 Double_t rnd = fRandom->Uniform() * counter;
409 Int_t trigID = arr.At(TMath::FloorNint(rnd));
413 Double_t phiOp = vp->Phi()+TMath::Pi();
414 if(phiOp>TMath::TwoPi()) phiOp-=TMath::TwoPi();
415 Double_t phiOpMin = phiOp - fDPhiHJetMax;
416 if(phiOpMin<0.) phiOpMin+=TMath::TwoPi();
417 Double_t phiOpMax = phiOp + fDPhiHJetMax;
418 if(phiOpMax>TMath::TwoPi()) phiOpMax-=TMath::TwoPi();
419 if(phiOpMin > fGapPhiMin && phiOpMin < fGapPhiMax)
return NULL;
420 if(phiOpMax > fGapPhiMin && phiOpMax < fGapPhiMax)
return NULL;
426 Bool_t AliAnalysisTaskEmcalHJetMass::FillHJetHistograms(
const AliVParticle *vp,
const AliEmcalJet *jet)
430 Double_t ptJet = jet->
Pt() - GetRhoVal(fContainerBase)*jet->
Area();
433 if(ptJet<0. || ptJet>0.) rat = mJet/ptJet;
435 Double_t var[4] = {ptJet,mJet,pt,-99.};
438 if(jetNS) var[3] = GetJetMass(jetNS);
442 fh3PtJet1VsMassVsHPtAllSel[fCentBin]->Fill(ptJet,mJet,pt);
443 fh3PtJet1VsRatVsHPtAllSel[fCentBin]->Fill(ptJet,rat,pt);
447 fhnAllSel[fCentBin]->Fill(var);
456 jetUS = jetContUS->
GetJet(i);
459 if(ifound==1) ilab = i;
462 if(ifound>1) AliDebug(2,Form(
"Found %d partners",ifound));
463 if(ifound==0) jetUS = 0x0;
464 else jetUS = jetContUS->
GetJet(ilab);
472 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel ) mcMatch = kTRUE;
473 if(fMinFractionShared>0. && fraction>fMinFractionShared) mcMatch = kTRUE;
474 else mcMatch = kFALSE;
478 fh3PtJet1VsMassVsHPtAllSelMatch[fCentBin]->Fill(ptJet,mJet,pt);
479 fh3PtJet1VsRatVsHPtAllSelMatch[fCentBin]->Fill(ptJet,rat,pt);
482 fhnAllSelMatch[fCentBin]->Fill(var);
489 fh3PtJet1VsMassVsHPtTagged[fCentBin]->Fill(ptJet,mJet,pt);
490 fh3PtJet1VsRatVsHPtTagged[fCentBin]->Fill(ptJet,rat,pt);
493 fhnTagged[fCentBin]->Fill(var);
497 fh3PtJet1VsMassVsHPtTaggedMatch[fCentBin]->Fill(ptJet,mJet,pt);
498 fh3PtJet1VsRatVsHPtTaggedMatch[fCentBin]->Fill(ptJet,rat,pt);
501 fhnTaggedMatch[fCentBin]->Fill(var);
507 AliEmcalJet* AliAnalysisTaskEmcalHJetMass::FindNearSideJet(
const AliVParticle *vp) {
511 jCont->ResetCurrentID();
515 for (
Int_t i = 0; i < n; i++) {
518 if(vp->Phi()==vp2->Phi())
return jet;
528 if(fJetMassType==kRaw)
530 else if(fJetMassType==kDeriv)
537 Double_t AliAnalysisTaskEmcalHJetMass::GetDeltaPhi(
const AliVParticle *vp,
const AliEmcalJet* jet)
const {
539 return GetDeltaPhi(vp->Phi(),jet->
Phi());
546 if(dPhi <-0.5*TMath::Pi()) dPhi += TMath::TwoPi();
547 if(dPhi > 1.5*TMath::Pi()) dPhi -= TMath::TwoPi();
552 Bool_t AliAnalysisTaskEmcalHJetMass::RetrieveEventObjects() {
563 void AliAnalysisTaskEmcalHJetMass::AddTriggerTrackPtCuts(
Float_t min,
Float_t max) {
564 if(!fPtTTMin) fPtTTMin =
new TArrayF();
565 if(!fPtTTMax) fPtTTMax =
new TArrayF();
566 Int_t newSize = fPtTTMin->GetSize()+1;
567 fPtTTMin->Set(newSize);
568 fPtTTMax->Set(newSize);
569 fPtTTMin->AddAt(min,newSize-1);
570 fPtTTMax->AddAt(max,newSize-1);
574 void AliAnalysisTaskEmcalHJetMass::Terminate(
Option_t *)
virtual AliVParticle * GetNextAcceptParticle()
AliEmcalJet * GetTaggedJet() const
Int_t GetTagStatus() const
Int_t GetNParticles() const
Bool_t RetrieveEventObjects()
Container for particles within the EMCAL framework.
UShort_t GetNumberOfTracks() const
AliParticleContainer * GetParticleContainer() const
virtual AliVParticle * GetParticle(Int_t i=-1) const
Double_t GetSecondOrderSubtracted() const
AliEmcalJet * GetNextAcceptJet()
Short_t TrackAt(Int_t idx) const
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
void UserCreateOutputObjects()
AliEmcalJetShapeProperties * GetShapeProperties() const
Container for jet within the EMCAL jet framework.
ClassImp(EmcalHJetMassAnalysis::AliAnalysisTaskEmcalHJetMass) namespace EmcalHJetMassAnalysis
AliEmcalJet * GetJet(Int_t i) const