AliPhysics  9b6b435 (9b6b435)
AliAnalysisTaskEmcalJetTagger.cxx
Go to the documentation of this file.
1 /************************************************************************************
2  * Copyright (C) 2013, Copyright Holders of the ALICE Collaboration *
3  * All rights reserved. *
4  * *
5  * Redistribution and use in source and binary forms, with or without *
6  * modification, are permitted provided that the following conditions are met: *
7  * * Redistributions of source code must retain the above copyright *
8  * notice, this list of conditions and the following disclaimer. *
9  * * Redistributions in binary form must reproduce the above copyright *
10  * notice, this list of conditions and the following disclaimer in the *
11  * documentation and/or other materials provided with the distribution. *
12  * * Neither the name of the <organization> nor the *
13  * names of its contributors may be used to endorse or promote products *
14  * derived from this software without specific prior written permission. *
15  * *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
19  * DISCLAIMED. IN NO EVENT SHALL ALICE COLLABORATION BE LIABLE FOR ANY *
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
26  ************************************************************************************/
27 #include <TH1F.h>
28 #include <TH2F.h>
29 #include <TH3F.h>
30 #include <THnSparse.h>
31 
32 #include "AliEmcalJet.h"
33 #include "AliLog.h"
34 #include "AliJetContainer.h"
35 #include "AliParticleContainer.h"
36 
38 
40 
42  AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetTagger", kTRUE),
43  fJetTaggingType(kTag),
44  fJetTaggingMethod(kGeo),
45  fContainerBase(0),
46  fContainerTag(1),
47  fSpecPartContTag(-1),
48  fMinFractionShared(0),
49  fUseSumw2(0),
50  fMatchingDone(0),
51  fTypeAcc(3),
52  fMaxDist(0.3),
53  fInit(kFALSE),
54  fh3PtJet1VsDeltaEtaDeltaPhi(0),
55  fh2PtJet1VsDeltaR(0),
56  fh2PtJet2VsFraction(0),
57  fh2PtJet1VsLeadPtAllSel(0),
58  fh2PtJet1VsLeadPtTagged(0),
59  fh2PtJet1VsPtJet2(0),
60  fh2PtJet2VsRelPt(0),
61  fh3PtJetDEtaDPhiConst(0),
62  fh3PtJetAreaDRConst(0)
63 {
71 
72  for (Int_t i = 0; i < fNcentBins; i++) {
74  fh2PtJet1VsDeltaR[i] = 0;
75  fh2PtJet2VsFraction[i] = 0;
78  fh2PtJet1VsPtJet2[i] = 0;
79  fh2PtJet2VsRelPt[i] = 0;
80  }
81 
83 }
84 
86  AliAnalysisTaskEmcalJet(name, kTRUE),
89  fContainerBase(0),
90  fContainerTag(1),
91  fSpecPartContTag(-1),
93  fUseSumw2(0),
94  fMatchingDone(0),
95  fTypeAcc(3),
96  fMaxDist(0.3),
97  fInit(kFALSE),
104  fh2PtJet2VsRelPt(0),
107 {
115 
116  for (Int_t i = 0; i < fNcentBins; i++) {
118  fh2PtJet1VsDeltaR[i] = 0;
119  fh2PtJet2VsFraction[i] = 0;
122  fh2PtJet1VsPtJet2[i] = 0;
123  fh2PtJet2VsRelPt[i] = 0;
124  }
125 
127 
128 }
129 
131 {
132 }
133 
135 {
137 
138  Bool_t oldStatus = TH1::AddDirectoryStatus();
139  TH1::AddDirectory(kFALSE);
140 
141  const Int_t nBinsPt = 40;
142  const Int_t nBinsDPhi = 72;
143  const Int_t nBinsDEta = 100;
144  const Int_t nBinsDR = 50;
145  const Int_t nBinsFraction = 101;
146 
147  const Double_t minPt = -50.;
148  const Double_t maxPt = 150.;
149  const Double_t minDPhi = -0.5;
150  const Double_t maxDPhi = 0.5;
151  const Double_t minDEta = -0.5;
152  const Double_t maxDEta = 0.5;
153  const Double_t minDR = 0.;
154  const Double_t maxDR = 0.5;
155  const Double_t minFraction = -0.005;
156  const Double_t maxFraction = 1.005;
157 
158  TString histName = "";
159  TString histTitle = "";
160  for (Int_t i = 0; i < fNcentBins; i++) {
161 
162  histName = TString::Format("fh3PtJet1VsDeltaEtaDeltaPhi_%d",i);
163  histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{#Delta#eta};#it{#Delta#varphi}",histName.Data());
164  fh3PtJet1VsDeltaEtaDeltaPhi[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsDEta,minDEta,maxDEta,nBinsDPhi,minDPhi,maxDPhi);
165  fOutput->Add(fh3PtJet1VsDeltaEtaDeltaPhi[i]);
166 
167  histName = TString::Format("fh2PtJet1VsDeltaR_%d",i);
168  histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{#Delta R}",histName.Data());
169  fh2PtJet1VsDeltaR[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsDR,minDR,maxDR);
170  fOutput->Add(fh2PtJet1VsDeltaR[i]);
171 
172  histName = TString::Format("fh2PtJet2VsFraction_%d",i);
173  histTitle = TString::Format("%s;#it{p}_{T,jet2};#it{f}_{shared}",histName.Data());
174  fh2PtJet2VsFraction[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsFraction,minFraction,maxFraction);
175  fOutput->Add(fh2PtJet2VsFraction[i]);
176 
177  histName = TString::Format("fh2PtJet1VsLeadPtAllSel_%d",i);
178  histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{p}_{T,lead trk}",histName.Data());
179  fh2PtJet1VsLeadPtAllSel[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,20,0.,20.);
180  fOutput->Add(fh2PtJet1VsLeadPtAllSel[i]);
181 
182  histName = TString::Format("fh2PtJet1VsLeadPtTagged_%d",i);
183  histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{p}_{T,lead trk}",histName.Data());
184  fh2PtJet1VsLeadPtTagged[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,20,0.,20.);
185  fOutput->Add(fh2PtJet1VsLeadPtTagged[i]);
186 
187  histName = TString::Format("fh2PtJet1VsPtJet2_%d",i);
188  histTitle = TString::Format("%s;#it{p}_{T,jet1};#it{p}_{T,jet2}",histName.Data());
189  fh2PtJet1VsPtJet2[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt);
190  fOutput->Add(fh2PtJet1VsPtJet2[i]);
191 
192  histName = TString::Format("fh2PtJet2VsRelPt_%d",i);
193  histTitle = TString::Format("%s;#it{p}_{T,jet2};(#it{p}_{T,jet2}-#it{p}_{T,jet1})/#it{p}_{T,jet1}",histName.Data());
194  fh2PtJet2VsRelPt[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,241,-2.41,2.41);
195  fOutput->Add(fh2PtJet2VsRelPt[i]);
196  }
197 
198  fh3PtJetDEtaDPhiConst = new TH3F("fh3PtJetDEtaDPhiConst","fh3PtJetDEtaDPhiConst;pT;#Delta #eta;#Delta #varphi",nBinsPt,minPt,maxPt,nBinsDEta,-1.,1.,nBinsDPhi,-1.,1.);
200 
201  fh3PtJetAreaDRConst = new TH3F("fh3PtJetAreaDRConst","fh3PtJetAreaDRConst;pT;A;#Delta R",nBinsPt,minPt,maxPt,50,0.,1.,50,0.,1.);
203 
204  fNAccJets = new TH1F("fNAccJets","fNAccJets;N/ev",11,-0.5, 9.5);
205  fOutput->Add(fNAccJets);
206 
207  if(fUseSumw2) {
208  // =========== Switch on Sumw2 for all histos ===========
209  for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
210  TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
211  if (h1){
212  h1->Sumw2();
213  continue;
214  }
215  THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
216  if(hn)hn->Sumw2();
217  }
218  }
219 
220  TH1::AddDirectory(oldStatus);
221 
222  PostData(1, fOutput); // Post data for ALL output slots > 0 here.
223 }
224 
226 
227  if(fInit) return;
228 
231  if(!cont1 || !cont2) AliError("Missing jet container");
232 
233  // when full azimuth, don't do anything
234  Double_t phiMin1 = cont1->GetJetPhiMin();
235  Double_t phiMin2 = cont2->GetJetPhiMin();
236  Bool_t isZeroTwoPi1 = kFALSE;
237  //check only one side of phi, since the upper bound is not well defined
238  if(phiMin1 > -1.e-6 && phiMin1 < 1.e-6) isZeroTwoPi1 = kTRUE;
239  Bool_t isZeroTwoPi2 = kFALSE;
240  if(phiMin2 > -1.e-6 && phiMin2 < 1.e-6) isZeroTwoPi2 = kTRUE;
241 
242  if(fTypeAcc==1)
243  cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
244  else if(fTypeAcc==2) {
245  cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
246  if(!isZeroTwoPi2) cont2->SetJetPhiLimits(cont2->GetJetPhiMin()-0.1,cont2->GetJetPhiMax()+0.1);
247  }
248  else if(fTypeAcc==3) {
249  cont1->SetJetEtaLimits(cont1->GetJetEtaMin()-0.1,cont1->GetJetEtaMax()+0.1);
250  if(!isZeroTwoPi1) cont1->SetJetPhiLimits(cont1->GetJetPhiMin()-0.1,cont1->GetJetPhiMax()+0.1);
251  cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
252  if(!isZeroTwoPi2) cont2->SetJetPhiLimits(cont2->GetJetPhiMin()-0.1,cont2->GetJetPhiMax()+0.1);
253  }
254  fInit = kTRUE;
255  return;
256 }
258 {
260  return kTRUE;
261 }
262 
264 {
265  // Fill histograms.
266 
267  AliEmcalJet *jet1 = NULL;
269  if(!jetCont) return kFALSE;
270  jetCont->ResetCurrentID();
271  Int_t count = 0;
272  while((jet1 = jetCont->GetNextAcceptJet())) {
273  count++;
274  Double_t ptJet1 = jet1->Pt() - jetCont->GetRhoVal()*jet1->Area();
275  fh2PtJet1VsLeadPtAllSel[fCentBin]->Fill(ptJet1,jet1->MaxTrackPt());
276 
277  //fill histo with angle between jet axis and constituents
278  for(Int_t icc=0; icc<jet1->GetNumberOfTracks(); icc++) {
279  AliVParticle *vp = static_cast<AliVParticle*>(jet1->Track(icc));
280  if(!vp) continue;
281  Double_t dEta = jet1->Eta()-vp->Eta();
282  Double_t dPhi = jet1->Phi()-vp->Phi();
283  if(dPhi<TMath::Pi()) dPhi+=TMath::TwoPi();
284  if(dPhi>TMath::Pi()) dPhi-=TMath::TwoPi();
285  fh3PtJetDEtaDPhiConst->Fill(ptJet1,dEta,dPhi);
286 
287  Double_t dR = TMath::Sqrt(dPhi*dPhi+dEta*dEta);
288  fh3PtJetAreaDRConst->Fill(ptJet1,jet1->Area(),dR);
289  }
290 
291  if(jet1->GetTagStatus()<1 && fJetTaggingType==kTag)
292  continue;
293 
294  AliEmcalJet *jet2 = NULL;
295  if(fJetTaggingType==kTag) jet2 = jet1->GetTaggedJet();
296  if(fJetTaggingType==kClosest) jet2 = jet1->ClosestJet();
297  if(!jet2) continue;
298 
299  Double_t ptJet2 = jet2->Pt() - GetRhoVal(fContainerTag)*jet2->Area();
300 
301  Double_t fraction = -2;
302  if(fSpecPartContTag > -1) fraction = jetCont->GetFractionSharedPt(jet1, GetParticleContainer(fSpecPartContTag));
303  else fraction = jetCont->GetFractionSharedPt(jet1);
304 
305  fh2PtJet2VsFraction[fCentBin]->Fill(ptJet2,fraction);
306  AliDebug(5, Form("Fraction = %f, minimum = %f", fraction, fMinFractionShared));
307  //if(fJetTaggingType==kClosest) Printf("Fraction = %f, minimum = %f", fraction, fMinFractionShared);
309  continue;
310  fh2PtJet1VsLeadPtTagged[fCentBin]->Fill(ptJet1,jet1->MaxTrackPt());
311  fh2PtJet1VsPtJet2[fCentBin]->Fill(ptJet1,ptJet2);
312  if(ptJet2>0.) fh2PtJet2VsRelPt[fCentBin]->Fill(ptJet2,(ptJet1-ptJet2)/ptJet2);
313 
314  Double_t dPhi = GetDeltaPhi(jet1->Phi(),jet2->Phi());
315  if(dPhi>TMath::Pi())
316  dPhi -= TMath::TwoPi();
317  if(dPhi<(-1.*TMath::Pi()))
318  dPhi += TMath::TwoPi();
319 
320  fh3PtJet1VsDeltaEtaDeltaPhi[fCentBin]->Fill(ptJet1,jet1->Eta()-jet2->Eta(),dPhi);
321  fh2PtJet1VsDeltaR[fCentBin]->Fill(ptJet1,jet1->DeltaR(jet2));
322  }
323  fNAccJets->Fill(count);
324  return kTRUE;
325 }
326 
328  for(int i = 0;i<GetNJets(c);i++){
329  AliEmcalJet *jet = static_cast<AliEmcalJet*>(GetJetFromArray(i, c));
330  if(!jet) continue;
332  jet->ResetMatching();
333  else if(fJetTaggingType==kTag) {
334  jet->SetTaggedJet(0x0);
335  jet->SetTagStatus(-1);
336  }
337  }
338 }
339 
341  Int_t iDebug, Float_t maxDist, Int_t type, Bool_t bReset) {
342  if(c1<0) c1 = fContainerBase;
343  if(c2<0) c2 = fContainerTag;
344  Init();
345  const Int_t nJets1 = GetNJets(c1);
346  const Int_t nJets2 = GetNJets(c2);
347 
348  if(nJets1==0 || nJets2==0) return;
349 
350  AliDebugStream(1) << "Jets Base (" << GetJetContainer(c1)->GetNJets() << ", accepted " << GetJetContainer(c1)->GetNAcceptedJets() << "), jets tag("
351  << GetJetContainer(c2)->GetNJets() << ", accepted " << GetJetContainer(c2)->GetNAcceptedJets() << "), max distance " << maxDist << std::endl;
352 
353  if(bReset) {
354  ResetTagging(c1);
355  ResetTagging(c2);
356  }
357  fMatchingDone = kFALSE;
358 
359  TArrayI faMatchIndex1;
360  faMatchIndex1.Set(nJets2+1);
361  faMatchIndex1.Reset(-1);
362 
363  TArrayI faMatchIndex2;
364  faMatchIndex2.Set(nJets1+1);
365  faMatchIndex2.Reset(-1);
366 
367  static TArrayS iFlag(nJets1*nJets2);
368  if(iFlag.GetSize()<(nJets1*nJets2)){
369  iFlag.Set(nJets1*nJets2+1);
370  }
371  iFlag.Reset(0);
372 
373  //AliJetContainer *cont1 = GetJetContainer(c1);
374  //AliJetContainer *cont2 = GetJetContainer(c2);
375  //Printf("eta cont 1 %f - %f", cont1->GetJetEtaMin(), cont1->GetJetEtaMax());
376  //Printf("phi cont 1 %f - %f", cont1->GetJetPhiMin(), cont1->GetJetPhiMax());
377  //if(type==1)
378  // cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
379  //else if(type==2) {
380  // cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
381  // cont2->SetJetPhiLimits(cont2->GetJetPhiMin()-0.1,cont2->GetJetPhiMax()+0.1);
382  //}
383  //else if(type==3) {
384  // cont1->SetJetEtaLimits(cont1->GetJetEtaMin()-0.1,cont1->GetJetEtaMax()+0.1);
385  // cont1->SetJetPhiLimits(cont1->GetJetPhiMin()-0.1,cont1->GetJetPhiMax()+0.1);
386  // cont2->SetJetEtaLimits(cont2->GetJetEtaMin()-0.1,cont2->GetJetEtaMax()+0.1);
387  // cont2->SetJetPhiLimits(cont2->GetJetPhiMin()-0.1,cont2->GetJetPhiMax()+0.1);
388  //}
389 
390  // find the closest distance to the full jet
391  for(int i = 0;i<nJets1;i++){
392 
393  AliEmcalJet *jet1 = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(i, c1));
394  if(!jet1) continue;
395 
396  Float_t dist = maxDist;
397 
398  for(int j = 0;j <nJets2; j++){
399  AliEmcalJet *jet2 = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(j, c2));
400  if(!jet2) continue;
401 
402  Double_t dR = jet1->DeltaR(jet2);
403  if(dR<dist && dR<maxDist){
404  faMatchIndex2[i]=j;
405  dist = dR;
406  }
407  }//j jet loop
408  if(faMatchIndex2[i]>=0) {
409  iFlag[i*nJets2+faMatchIndex2[i]]+=1;//j closest to i
410  if(iDebug>10) Printf("Full Distance (%d)--(%d) %3.3f flag[%d] = %d",i,faMatchIndex2[i],dist,i*nJets2+faMatchIndex2[i],iFlag[i*nJets2+faMatchIndex2[i]]);
411  }
412  }//i jet loop
413 
414  // other way around
415  for(int j = 0;j<nJets2;j++){
416  AliEmcalJet *jet2 = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(j, c2));
417  if(!jet2)
418  continue;
419 
420  Float_t dist = maxDist;
421  for(int i = 0;i<nJets1;i++){
422  AliEmcalJet *jet1 = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(i, c1));
423  if(!jet1) continue;
424 
425  Double_t dR = jet1->DeltaR(jet2);
426  if(dR<dist && dR<maxDist){
427  faMatchIndex1[j]=i;
428  dist = dR;
429  }
430  }
431  if(faMatchIndex1[j]>=0) {
432  iFlag[faMatchIndex1[j]*nJets2+j]+=2;//i closest to j
433  if(iDebug>10) Printf("Other way Distance (%d)--(%d) %3.3f flag[%d] = %d",faMatchIndex1[j],j,dist,faMatchIndex1[j]*nJets2+j,iFlag[faMatchIndex1[j]*nJets2+j]);
434  }
435  }
436 
437  // check for "true" correlations
438  for(int i = 0;i<nJets1;i++){
439  AliEmcalJet *jet1 = static_cast<AliEmcalJet*>(GetJetFromArray(i, c1));
440  for(int j = 0;j<nJets2;j++){
441  AliEmcalJet *jet2 = static_cast<AliEmcalJet*>(GetJetFromArray(j, c2));
442  AliDebug(11,Form("%s: Flag[%d][%d] %d ",GetName(),i,j,iFlag[i*nJets2+j]));
443 
444  // we have a uniqe correlation
445  if(iFlag[i*nJets2+j]==3) {
446  Double_t dR = jet1->DeltaR(jet2);
447  if(iDebug>1) Printf("closest jets %d %d dR = %f",j,i,dR);
448 
449  if(fJetTaggingType==kTag) {
450  jet1->SetTaggedJet(jet2);
451  jet1->SetTagStatus(1);
452 
453  jet2->SetTaggedJet(jet1);
454  jet2->SetTagStatus(1);
455  }
456  else if(fJetTaggingType==kClosest) {
457  jet1->SetClosestJet(jet2,dR);
458  jet2->SetClosestJet(jet1,dR);
459  }
460  }
461  }
462  }
463  fMatchingDone = kTRUE;
464 }
465 
467  return GetDeltaPhi(jet1->Phi(),jet2->Phi());
468 }
469 
471  Double_t dPhi = phi1-phi2;
472  if(dPhi <-0.5*TMath::Pi()) dPhi += TMath::TwoPi();
473  if(dPhi > 1.5*TMath::Pi()) dPhi -= TMath::TwoPi();
474 
475  return dPhi;
476 }
477 
480  return kFALSE;
481 
482  return kTRUE;
483 }
484 
486 {
487 }
488 
void SetTagStatus(Int_t i)
Definition: AliEmcalJet.h:350
Double_t Area() const
Definition: AliEmcalJet.h:130
Double_t GetRhoVal() const
AliEmcalJet * GetJetFromArray(Int_t j, Int_t c=0) const
double Double_t
Definition: External.C:58
AliEmcalJet * GetTaggedJet() const
Definition: AliEmcalJet.h:351
Definition: External.C:260
Definition: External.C:236
Double_t GetJetEtaMin() const
void SetTaggedJet(AliEmcalJet *j)
Definition: AliEmcalJet.h:349
AliEmcalJet * ClosestJet() const
Definition: AliEmcalJet.h:341
AliJetContainer * GetJetContainer(Int_t i=0) const
Int_t GetTagStatus() const
Definition: AliEmcalJet.h:352
Double_t fMaxDist
distance allowed for two jets to match
Double_t Eta() const
Definition: AliEmcalJet.h:121
Double_t GetJetPhiMax() const
Int_t GetNJets(Int_t i=0) const
Double_t Phi() const
Definition: AliEmcalJet.h:117
TH1 * fNAccJets
pt jet vs Area vs delta R of constituents
void MatchJetsGeo(Int_t c1=-1, Int_t c2=-1, Int_t iDebug=0, Float_t maxDist=0.3, Int_t type=2, Bool_t bReset=kTRUE)
Match the full jets to the corresponding charged jets.
TH3F ** fh3PtJet1VsDeltaEtaDeltaPhi
! pt jet 1 vs deta vs dphi
Bool_t fInit
true when the containers are initialized
Double_t GetJetEtaMax() const
Pure geometric tagging (max. distance + acceptance cut)
AliVParticle * Track(Int_t idx) const
TCanvas * c
Definition: TestFitELoss.C:172
Int_t fCentBin
!event centrality bin
TH2F ** fh2PtJet2VsRelPt
! pT of tagged jet vs pt base jet / pt tagged jet
TH2F ** fh2PtJet2VsFraction
! pt jet 1 vs shared fraction
UShort_t GetNumberOfTracks() const
Definition: AliEmcalJet.h:139
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
void ResetMatching()
Double_t fMinFractionShared
only fill histos for jets if shared fraction larger than X
Int_t fTypeAcc
acceptance cut for the jet containers, see method MatchJetsGeo in .cxx for possibilities ...
Double_t GetJetPhiMin() const
int Int_t
Definition: External.C:63
float Float_t
Definition: External.C:68
JetTaggingType fJetTaggingType
jet matching type
void SetJetPhiLimits(Float_t min, Float_t max)
Int_t GetNJets() const
Int_t fNcentBins
how many centrality bins
Double_t MaxTrackPt() const
Definition: AliEmcalJet.h:155
AliEmcalJet * GetAcceptJetFromArray(Int_t j, Int_t c=0) const
void Terminate(Option_t *option)
Terminate method - not implemented for the jet tagger task.
AliEmcalJet * GetNextAcceptJet()
JetTaggingMethod fJetTaggingMethod
jet matching method
Bool_t fMatchingDone
flag to indicate if matching is done or not
Double_t DeltaR(const AliVParticle *part) const
TH2F ** fh2PtJet1VsPtJet2
! pT of base jet vs tagged jet
Tagging jets with jet from another source.
Double_t Pt() const
Definition: AliEmcalJet.h:109
Double_t GetRhoVal(Int_t i=0) const
AliEmcalList * fOutput
!output list
void SetClosestJet(AliEmcalJet *j, Double_t d)
Definition: AliEmcalJet.h:337
Bool_t FillHistograms()
Filling internal QA histograms of jet tagger task.
void SetMakeGeneralHistograms(Bool_t g)
Enable general histograms.
TH2F ** fh2PtJet1VsLeadPtAllSel
! all jets after std selection
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:51
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
Only the closest jet in distance is tagged.
Bool_t fUseSumw2
activate sumw2 for output histograms
const char Option_t
Definition: External.C:48
void ResetTagging(const Int_t c)
Remove tag status of all jets in a given jet container.
void UserCreateOutputObjects()
Main initialization function on the worker.
Double_t GetDeltaPhi(const AliEmcalJet *jet1, const AliEmcalJet *jet2)
Calculate azimuthal angle between the axises of the jets.
bool Bool_t
Definition: External.C:53
All jets within a maximum distance are tagged.
TH3F * fh3PtJetAreaDRConst
pt jet vs delta eta vs delta phi of constituents
void SetJetEtaLimits(Float_t min, Float_t max)
void ResetCurrentID(Int_t i=-1)
Reset the iterator to a given index.
Int_t fContainerTag
jets used for tagging
Container for jet within the EMCAL jet framework.
void UserCreateOutputObjects()
Creating interal QA histograms of the jet tagger task.
Definition: External.C:196
Bool_t RetrieveEventObjects()
Retrieving event objects.
Int_t fSpecPartContTag
particle container optionally used in AliJetContainer::GetFractionSharedPt(). Set only if needed...