2 // Jet mass analysis task for jets recoiling from high pT hadron
6 #include <TClonesArray.h>
10 #include <THnSparse.h>
12 #include <TLorentzVector.h>
22 #include "AliVCluster.h"
23 #include "AliVTrack.h"
24 #include "AliEmcalJet.h"
25 #include "AliRhoParameter.h"
27 #include "AliEmcalParticle.h"
28 #include "AliAnalysisManager.h"
29 #include "AliJetContainer.h"
30 #include "AliParticleContainer.h"
32 #include "AliAODEvent.h"
34 #include "AliAnalysisTaskEmcalHJetMass.h"
36 ClassImp(EmcalHJetMassAnalysis::AliAnalysisTaskEmcalHJetMass)
38 namespace EmcalHJetMassAnalysis {
40 //________________________________________________________________________
41 AliAnalysisTaskEmcalHJetMass::AliAnalysisTaskEmcalHJetMass() :
42 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalHJetMass", kTRUE),
47 fMinFractionShared(0),
51 fTriggerTrackType(kInclusive),
60 fh3PtJet1VsMassVsHPtAllSel(0),
61 fh3PtJet1VsMassVsHPtAllSelMatch(0),
62 fh3PtJet1VsMassVsHPtTagged(0),
63 fh3PtJet1VsMassVsHPtTaggedMatch(0),
64 fh3PtJet1VsRatVsHPtAllSel(0),
65 fh3PtJet1VsRatVsHPtAllSelMatch(0),
66 fh3PtJet1VsRatVsHPtTagged(0),
67 fh3PtJet1VsRatVsHPtTaggedMatch(0),
73 // Default constructor.
75 fh1PtHadron = new TH1F*[fNcentBins];
76 fh1PtHadronMatch = new TH1F*[fNcentBins];
77 fh3PtHPtJDPhi = new TH3F*[fNcentBins];
78 fh3PtJet1VsMassVsHPtAllSel = new TH3F*[fNcentBins];
79 fh3PtJet1VsMassVsHPtAllSelMatch = new TH3F*[fNcentBins];
80 fh3PtJet1VsMassVsHPtTagged = new TH3F*[fNcentBins];
81 fh3PtJet1VsMassVsHPtTaggedMatch = new TH3F*[fNcentBins];
82 fh3PtJet1VsRatVsHPtAllSel = new TH3F*[fNcentBins];
83 fh3PtJet1VsRatVsHPtAllSelMatch = new TH3F*[fNcentBins];
84 fh3PtJet1VsRatVsHPtTagged = new TH3F*[fNcentBins];
85 fh3PtJet1VsRatVsHPtTaggedMatch = new TH3F*[fNcentBins];
86 fhnAllSel = new THnSparse*[fNcentBins];
87 fhnAllSelMatch = new THnSparse*[fNcentBins];
88 fhnTagged = new THnSparse*[fNcentBins];
89 fhnTaggedMatch = new THnSparse*[fNcentBins];
91 for (Int_t i = 0; i < fNcentBins; i++) {
93 fh1PtHadronMatch[i] = 0;
95 fh3PtJet1VsMassVsHPtAllSel[i] = 0;
96 fh3PtJet1VsMassVsHPtAllSelMatch[i] = 0;
97 fh3PtJet1VsMassVsHPtTagged[i] = 0;
98 fh3PtJet1VsMassVsHPtTaggedMatch[i] = 0;
99 fh3PtJet1VsRatVsHPtAllSel[i] = 0;
100 fh3PtJet1VsRatVsHPtAllSelMatch[i] = 0;
101 fh3PtJet1VsRatVsHPtTagged[i] = 0;
102 fh3PtJet1VsRatVsHPtTaggedMatch[i] = 0;
104 fhnAllSelMatch[i] = 0;
106 fhnTaggedMatch[i] = 0;
109 fPtTTMin = new TArrayF();
110 fPtTTMax = new TArrayF();
112 SetMakeGeneralHistograms(kTRUE);
115 //________________________________________________________________________
116 AliAnalysisTaskEmcalHJetMass::AliAnalysisTaskEmcalHJetMass(const char *name) :
117 AliAnalysisTaskEmcalJet(name, kTRUE),
119 fDoNSHJetAna(kFALSE),
122 fMinFractionShared(0),
126 fTriggerTrackType(kInclusive),
135 fh3PtJet1VsMassVsHPtAllSel(0),
136 fh3PtJet1VsMassVsHPtAllSelMatch(0),
137 fh3PtJet1VsMassVsHPtTagged(0),
138 fh3PtJet1VsMassVsHPtTaggedMatch(0),
139 fh3PtJet1VsRatVsHPtAllSel(0),
140 fh3PtJet1VsRatVsHPtAllSelMatch(0),
141 fh3PtJet1VsRatVsHPtTagged(0),
142 fh3PtJet1VsRatVsHPtTaggedMatch(0),
148 // Standard constructor.
150 fh1PtHadron = new TH1F*[fNcentBins];
151 fh1PtHadronMatch = new TH1F*[fNcentBins];
152 fh3PtHPtJDPhi = new TH3F*[fNcentBins];
153 fh3PtJet1VsMassVsHPtAllSel = new TH3F*[fNcentBins];
154 fh3PtJet1VsMassVsHPtAllSelMatch = new TH3F*[fNcentBins];
155 fh3PtJet1VsMassVsHPtTagged = new TH3F*[fNcentBins];
156 fh3PtJet1VsMassVsHPtTaggedMatch = new TH3F*[fNcentBins];
157 fh3PtJet1VsRatVsHPtAllSel = new TH3F*[fNcentBins];
158 fh3PtJet1VsRatVsHPtAllSelMatch = new TH3F*[fNcentBins];
159 fh3PtJet1VsRatVsHPtTagged = new TH3F*[fNcentBins];
160 fh3PtJet1VsRatVsHPtTaggedMatch = new TH3F*[fNcentBins];
161 fhnAllSel = new THnSparse*[fNcentBins];
162 fhnAllSelMatch = new THnSparse*[fNcentBins];
163 fhnTagged = new THnSparse*[fNcentBins];
164 fhnTaggedMatch = new THnSparse*[fNcentBins];
166 for (Int_t i = 0; i < fNcentBins; i++) {
168 fh1PtHadronMatch[i] = 0;
169 fh3PtHPtJDPhi[i] = 0;
170 fh3PtJet1VsMassVsHPtAllSel[i] = 0;
171 fh3PtJet1VsMassVsHPtAllSelMatch[i] = 0;
172 fh3PtJet1VsMassVsHPtTagged[i] = 0;
173 fh3PtJet1VsMassVsHPtTaggedMatch[i] = 0;
174 fh3PtJet1VsRatVsHPtAllSel[i] = 0;
175 fh3PtJet1VsRatVsHPtAllSelMatch[i] = 0;
176 fh3PtJet1VsRatVsHPtTagged[i] = 0;
177 fh3PtJet1VsRatVsHPtTaggedMatch[i] = 0;
179 fhnAllSelMatch[i] = 0;
181 fhnTaggedMatch[i] = 0;
184 fPtTTMin = new TArrayF();
185 fPtTTMax = new TArrayF();
187 SetMakeGeneralHistograms(kTRUE);
190 //________________________________________________________________________
191 AliAnalysisTaskEmcalHJetMass::~AliAnalysisTaskEmcalHJetMass()
195 if(fRandom) delete fRandom;
196 if(fPtTTMin) delete fPtTTMin;
197 if(fPtTTMax) delete fPtTTMax;
200 //________________________________________________________________________
201 void AliAnalysisTaskEmcalHJetMass::UserCreateOutputObjects()
203 // Create user output.
205 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
207 Bool_t oldStatus = TH1::AddDirectoryStatus();
208 TH1::AddDirectory(kFALSE);
210 const Int_t nBinsPt = 200;
211 const Double_t minPt = -50.;
212 const Double_t maxPt = 150.;
214 const Int_t nBinsM = 90;
215 const Double_t minM = -10.;
216 const Double_t maxM = 80.;
218 const Int_t nBinsR = 100;
219 const Double_t minR = -0.2;
220 const Double_t maxR = 0.8;
222 const Int_t nBinsPtH = 100;
223 const Double_t minPtH = 0.;
224 const Double_t maxPtH = 100.;
226 const Int_t nBinsPhi = 18*4;
227 const Double_t minPhi = -0.5*TMath::Pi();
228 const Double_t maxPhi = 1.5*TMath::Pi();
230 const Int_t nBinsSparse0 = 4; //PtJetAS,MJetAS,PtHNS,MJetNS
231 const Int_t nBins0[nBinsSparse0] = {nBinsPt,nBinsM,nBinsPtH,nBinsM};
232 const Double_t xmin0[nBinsSparse0] = { minPt, minM, minPtH, minM};
233 const Double_t xmax0[nBinsSparse0] = { maxPt, maxM, maxPtH, maxM};
235 TString histName = "";
236 TString histTitle = "";
237 for (Int_t i = 0; i < fNcentBins; i++) {
238 histName = TString::Format("fh1PtHadron_%d",i);
239 histTitle = TString::Format("%s;#it{p}_{T,h}",histName.Data());
240 fh1PtHadron[i] = new TH1F(histName.Data(),histTitle.Data(),200.,0.,200.);
241 fOutput->Add(fh1PtHadron[i]);
243 histName = TString::Format("fh1PtHadronMatch_%d",i);
244 histTitle = TString::Format("%s;#it{p}_{T,h}",histName.Data());
245 fh1PtHadronMatch[i] = new TH1F(histName.Data(),histTitle.Data(),200.,0.,200.);
246 fOutput->Add(fh1PtHadronMatch[i]);
248 histName = TString::Format("fh3PtHPtJDPhi_%d",i);
249 histTitle = TString::Format("%s;#it{p}_{T,h};#it{p}_{T,jet};#Delta#varphi_{h,jet}",histName.Data());
250 fh3PtHPtJDPhi[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPtH,minPtH,maxPtH,nBinsPt,minPt,maxPt,nBinsPhi,minPhi,maxPhi);
251 fOutput->Add(fh3PtHPtJDPhi[i]);
254 histName = TString::Format("fh3PtJet1VsMassVsHPtAllSel_%d",i);
255 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
256 fh3PtJet1VsMassVsHPtAllSel[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
257 fOutput->Add(fh3PtJet1VsMassVsHPtAllSel[i]);
259 histName = TString::Format("fh3PtJet1VsMassVsHPtAllSelMatch_%d",i);
260 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
261 fh3PtJet1VsMassVsHPtAllSelMatch[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
262 fOutput->Add(fh3PtJet1VsMassVsHPtAllSelMatch[i]);
264 histName = TString::Format("fh3PtJet1VsMassVsHPtTagged_%d",i);
265 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
266 fh3PtJet1VsMassVsHPtTagged[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
267 fOutput->Add(fh3PtJet1VsMassVsHPtTagged[i]);
269 histName = TString::Format("fh3PtJet1VsMassVsHPtTaggedMatch_%d",i);
270 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1};#it{p}_{T,h}",histName.Data());
271 fh3PtJet1VsMassVsHPtTaggedMatch[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM,nBinsPtH,minPtH,maxPtH);
272 fOutput->Add(fh3PtJet1VsMassVsHPtTaggedMatch[i]);
275 histName = TString::Format("fh3PtJet1VsRatVsHPtAllSel_%d",i);
276 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
277 fh3PtJet1VsRatVsHPtAllSel[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
278 fOutput->Add(fh3PtJet1VsRatVsHPtAllSel[i]);
280 histName = TString::Format("fh3PtJet1VsRatVsHPtAllSelMatch_%d",i);
281 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
282 fh3PtJet1VsRatVsHPtAllSelMatch[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
283 fOutput->Add(fh3PtJet1VsRatVsHPtAllSelMatch[i]);
285 histName = TString::Format("fh3PtJet1VsRatVsHPtTagged_%d",i);
286 histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{M}_{jet1}/#it{p}_{T,jet1};#it{p}_{T,h}",histName.Data());
287 fh3PtJet1VsRatVsHPtTagged[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
288 fOutput->Add(fh3PtJet1VsRatVsHPtTagged[i]);
290 histName = TString::Format("fh3PtJet1VsRatVsHPtTaggedMatch_%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 fh3PtJet1VsRatVsHPtTaggedMatch[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,nBinsPtH,minPtH,maxPtH);
293 fOutput->Add(fh3PtJet1VsRatVsHPtTaggedMatch[i]);
297 histName = TString::Format("fhnAllSel_%d",i);
298 histTitle = Form("%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
299 fhnAllSel[i] = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
300 fOutput->Add(fhnAllSel[i]);
302 histName = TString::Format("fhnAllSelMatch_%d",i);
303 histTitle = Form("%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
304 fhnAllSelMatch[i] = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
305 fOutput->Add(fhnAllSelMatch[i]);
307 histName = TString::Format("fhnTagged_%d",i);
308 histTitle = Form("%s;#it{p}_{T,jet}^{AS};#it{M}_{jet}^{AS};#it{p}_{T,h}^{NS};#it{M}_{jet}^{NS}",histName.Data());
309 fhnTagged[i] = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
310 fOutput->Add(fhnTagged[i]);
312 histName = TString::Format("fhnTaggedMatch_%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 fhnTaggedMatch[i] = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
315 fOutput->Add(fhnTaggedMatch[i]);
319 TH1::AddDirectory(oldStatus);
321 fRandom = new TRandom3(0);
323 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
326 //________________________________________________________________________
327 Bool_t AliAnalysisTaskEmcalHJetMass::Run()
329 // Run analysis code here, if needed. It will be executed before FillHistograms().
331 AliParticleContainer *pCont = GetParticleContainer(0);
332 AliJetContainer *jCont = GetJetContainer(fContainerBase);
333 if(!pCont || !jCont) return kFALSE;
335 AliVParticle *vp = NULL;
337 if(fTriggerTrackType==kInclusive) {
338 pCont->ResetCurrentID();
339 while((vp = pCont->GetNextAcceptParticle())) {
340 fh1PtHadron[fCentBin]->Fill(vp->Pt()); //all hadrons
341 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel )
342 fh1PtHadronMatch[fCentBin]->Fill(vp->Pt()); //hadrons matched to MC
343 AliEmcalJet* jet = NULL;
345 jCont->ResetCurrentID();
346 while((jet = jCont->GetNextAcceptJet())) {
347 Double_t dphi = GetDeltaPhi(vp,jet)-TMath::Pi();
348 fh3PtHPtJDPhi[fCentBin]->Fill(vp->Pt(),jet->Pt() - GetRhoVal(fContainerBase)*jet->Area(),dphi);
349 if(dphi>fDPhiHJetMax) continue;
350 FillHJetHistograms(vp,jet);
355 else if(fTriggerTrackType==kSingleInclusive) {
356 for(Int_t it = 0; it<fPtTTMin->GetSize(); it++) {
357 vp = GetSingleInclusiveTT(pCont,fPtTTMin->At(it),fPtTTMax->At(it));
359 fh1PtHadron[fCentBin]->Fill(vp->Pt()); //all trigger tracks
360 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel )
361 fh1PtHadronMatch[fCentBin]->Fill(vp->Pt()); //hadrons matched to MC
362 AliEmcalJet* jet = NULL;
363 jCont->ResetCurrentID();
364 while((jet = jCont->GetNextAcceptJet())) {
365 Double_t dphi = GetDeltaPhi(vp,jet)-TMath::Pi();
366 fh3PtHPtJDPhi[fCentBin]->Fill(vp->Pt(),jet->Pt() - GetRhoVal(fContainerBase)*jet->Area(),dphi);
367 if(dphi>fDPhiHJetMax) continue;
368 FillHJetHistograms(vp,jet);
370 }//trigger track types
375 //________________________________________________________________________
376 AliVParticle* AliAnalysisTaskEmcalHJetMass::GetSingleInclusiveTT(AliParticleContainer *pCont, Double_t ptmin, Double_t ptmax) const {
378 TArrayI arr; arr.Set(pCont->GetNParticles());
381 pCont->ResetCurrentID();
382 while((vp = pCont->GetNextAcceptParticle())) {
383 if(vp->Pt()>=ptmin && vp->Pt()<ptmax ) {
385 arr.SetAt(pCont->GetCurrentID(),counter);
388 if(counter<0) return NULL;
389 //select trigger track randomly
390 fRandom->SetSeed(arr.At(0)); //random selection reproducible
391 Double_t rnd = fRandom->Uniform() * counter;
392 Int_t trigID = arr.At(TMath::FloorNint(rnd));
393 vp = pCont->GetParticle(trigID);
397 //________________________________________________________________________
398 Bool_t AliAnalysisTaskEmcalHJetMass::FillHJetHistograms(const AliVParticle *vp, const AliEmcalJet *jet)
400 // Fill hadron-jet histograms.
401 Double_t pt = vp->Pt();
402 Double_t ptJet = jet->Pt() - GetRhoVal(fContainerBase)*jet->Area();
403 Double_t mJet = GetJetMass(jet);
405 if(ptJet<0. || ptJet>0.) rat = mJet/ptJet;
407 Double_t var[4] = {ptJet,mJet,pt,-99.};
409 AliEmcalJet *jetNS = FindNearSideJet(vp);
410 if(jetNS) var[3] = GetJetMass(jetNS);
414 fh3PtJet1VsMassVsHPtAllSel[fCentBin]->Fill(ptJet,mJet,pt);
415 fh3PtJet1VsRatVsHPtAllSel[fCentBin]->Fill(ptJet,rat,pt);
419 fhnAllSel[fCentBin]->Fill(var);
421 Double_t fraction = 1.;
423 AliEmcalJet *jetUS = NULL;
424 AliJetContainer *jetContUS = GetJetContainer(fContainerUnsub);
427 for(Int_t i = 0; i<jetContUS->GetNJets(); i++) {
428 jetUS = jetContUS->GetJet(i);
429 if(jetUS->GetLabel()==jet->GetLabel()) {
431 if(ifound==1) ilab = i;
434 if(ifound>1) AliDebug(2,Form("Found %d partners",ifound));
435 if(ifound==0) jetUS = 0x0;
436 else jetUS = jetContUS->GetJet(ilab);
437 fraction = jetContUS->GetFractionSharedPt(jetUS);
439 AliJetContainer *jetCont = GetJetContainer(fContainerBase);
440 fraction = jetCont->GetFractionSharedPt(jet);
443 Bool_t mcMatch = kFALSE;
444 if(fMarkMCLabel>0 && TMath::Abs(vp->GetLabel()) >= fMarkMCLabel ) mcMatch = kTRUE;
445 if(fMinFractionShared>0. && fraction>fMinFractionShared) mcMatch = kTRUE;
446 else mcMatch = kFALSE;
450 fh3PtJet1VsMassVsHPtAllSelMatch[fCentBin]->Fill(ptJet,mJet,pt);
451 fh3PtJet1VsRatVsHPtAllSelMatch[fCentBin]->Fill(ptJet,rat,pt);
454 fhnAllSelMatch[fCentBin]->Fill(var);
457 if(jet->GetTagStatus()<1 || !jet->GetTaggedJet())
461 fh3PtJet1VsMassVsHPtTagged[fCentBin]->Fill(ptJet,mJet,pt);
462 fh3PtJet1VsRatVsHPtTagged[fCentBin]->Fill(ptJet,rat,pt);
465 fhnTagged[fCentBin]->Fill(var);
469 fh3PtJet1VsMassVsHPtTaggedMatch[fCentBin]->Fill(ptJet,mJet,pt);
470 fh3PtJet1VsRatVsHPtTaggedMatch[fCentBin]->Fill(ptJet,rat,pt);
473 fhnTaggedMatch[fCentBin]->Fill(var);
478 //________________________________________________________________________
479 AliEmcalJet* AliAnalysisTaskEmcalHJetMass::FindNearSideJet(const AliVParticle *vp) {
480 AliJetContainer *jCont = GetJetContainer(fContainerBase);
481 AliEmcalJet* jet = NULL;
483 jCont->ResetCurrentID();
484 while((jet = jCont->GetNextAcceptJet())) {
485 Int_t n = (Int_t)jet->GetNumberOfTracks();
487 for (Int_t i = 0; i < n; i++) {
488 AliVParticle *vp2 = static_cast<AliVParticle*>(jet->TrackAt(i, jCont->GetParticleContainer()->GetArray()));
490 if(vp->Phi()==vp2->Phi()) return jet;
497 //________________________________________________________________________
498 Double_t AliAnalysisTaskEmcalHJetMass::GetJetMass(const AliEmcalJet *jet) const {
499 //calc subtracted jet mass
500 if(fJetMassType==kRaw)
502 else if(fJetMassType==kDeriv)
503 return jet->GetSecondOrderSubtracted();
508 //________________________________________________________________________
509 Double_t AliAnalysisTaskEmcalHJetMass::GetDeltaPhi(const AliVParticle *vp, const AliEmcalJet* jet) const {
510 // Calculate azimuthal angle between particle and jet. range:[-0.5\pi,1.5\pi]
511 return GetDeltaPhi(vp->Phi(),jet->Phi());
514 //________________________________________________________________________
515 Double_t AliAnalysisTaskEmcalHJetMass::GetDeltaPhi(Double_t phi1, Double_t phi2) const {
516 // Calculate azimuthal angle between phi1 and phi2. range:[-0.5\pi,1.5\pi]
517 Double_t dPhi = phi1-phi2;
518 if(dPhi <-0.5*TMath::Pi()) dPhi += TMath::TwoPi();
519 if(dPhi > 1.5*TMath::Pi()) dPhi -= TMath::TwoPi();
523 //________________________________________________________________________
524 Bool_t AliAnalysisTaskEmcalHJetMass::RetrieveEventObjects() {
526 // retrieve event objects
528 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
534 //________________________________________________________________________
535 void AliAnalysisTaskEmcalHJetMass::AddTriggerTrackPtCuts(Float_t min, Float_t max) {
536 if(!fPtTTMin) fPtTTMin = new TArrayF();
537 if(!fPtTTMax) fPtTTMax = new TArrayF();
538 Int_t newSize = fPtTTMin->GetSize()+1;
539 fPtTTMin->Set(newSize);
540 fPtTTMax->Set(newSize);
541 fPtTTMin->AddAt(min,newSize-1);
542 fPtTTMax->AddAt(max,newSize-1);
545 //_______________________________________________________________________
546 void AliAnalysisTaskEmcalHJetMass::Terminate(Option_t *)
548 // Called once at the end of the analysis.