AliPhysics  2c6b7ad (2c6b7ad)
AliAnalysisTaskEmcalJetShapeExtra.cxx
Go to the documentation of this file.
1 #include <TClonesArray.h>
2 #include <TH1F.h>
3 #include <TH2F.h>
4 #include <TH3F.h>
5 #include <THnSparse.h>
6 #include <TTree.h>
7 #include <TList.h>
8 #include <TLorentzVector.h>
9 #include <TProfile.h>
10 #include <TChain.h>
11 #include <TSystem.h>
12 #include <TFile.h>
13 #include <TKey.h>
14 #include <AliAnalysisDataSlot.h>
15 #include <AliAnalysisDataContainer.h>
16 #include "TMatrixD.h"
17 #include "TMatrixDSym.h"
18 #include "TMatrixDSymEigen.h"
19 #include "TVector3.h"
20 #include "TVector2.h"
21 #include "AliVCluster.h"
22 #include "AliVTrack.h"
23 #include "AliEmcalJet.h"
24 #include "AliRhoParameter.h"
25 #include "AliLog.h"
26 #include "AliEmcalParticle.h"
27 #include "AliMCEvent.h"
28 #include "AliGenPythiaEventHeader.h"
29 #include "AliAODMCHeader.h"
30 #include "AliMCEvent.h"
31 #include "AliAnalysisManager.h"
32 #include "AliJetContainer.h"
33 #include "AliParticleContainer.h"
34 #include "AliEmcalPythiaInfo.h"
35 #include "TRandom3.h"
36 
37 
38 
39 #include "AliAODEvent.h"
41 
42 using std::cout;
43 using std::endl;
44 
46 
47 //________________________________________________________________________
50  fContainer(0),
51  fJetShapeType(kPythiaDef),
52  fJetShapeSub(kNoSub),
53  // fJetSelection(kInclusive),
54  fh2ResponseUW(0x0),
55  fPtJet(0x0),
56  fNbOfConstvspT(0x0),
57  fNumberOfJet(0x0),
58 fTreeObservableTagging(0)
59 
60 {
61  for(Int_t i=0;i<17;i++){
62  fShapesVar[i]=0;}
63  SetMakeGeneralHistograms(kTRUE);
64  DefineOutput(1, TList::Class());
65  DefineOutput(2, TTree::Class());
66 }
67 
68 //________________________________________________________________________
70  AliAnalysisTaskEmcalJet(name, kTRUE),
71  fContainer(0),
72  fJetShapeType(kPythiaDef),
73 fJetShapeSub(kNoSub),
74 // fJetSelection(kInclusive),
75  fh2ResponseUW(0x0),
76  fPtJet(0x0),
77  fNbOfConstvspT(0x0),
78 fNumberOfJet(0x0),
79 fTreeObservableTagging(0)
80 
81 {
82  // Standard constructor.
83  for(Int_t i=0;i<17;i++){
84  fShapesVar[i]=0;}
86 
87  DefineOutput(1, TList::Class());
88  DefineOutput(2, TTree::Class());
89 }
90 
91 //________________________________________________________________________
93 {
94  // Destructor.
95 }
96 
97 //________________________________________________________________________
99 {
100  // Create user output.
101 
103 
104  Bool_t oldStatus = TH1::AddDirectoryStatus();
105  TH1::AddDirectory(kFALSE);
106 
107 
108 
109 
110  fh2ResponseUW= new TH2F("fh2ResponseUW", "fh2ResponseUW", 100, 0, 200, 100, 0, 200);
111  fOutput->Add(fh2ResponseUW);
112  fPtJet= new TH1F("fPtJet", "fPtJet", 100, 0, 200);
113  fOutput->Add(fPtJet);
114 
115 
116  fNbOfConstvspT=new TH2F("fNbOfConstvspT", "fNbOfConstvspT", 100, 0, 100, 200, 0, 200);
117  fOutput->Add(fNbOfConstvspT);
118 
119  fNumberOfJet= new TH1F("fNumberOfJet","fNumberOfJet",100,0.5,100.5);
120  fOutput->Add(fNumberOfJet);
121  // =========== Switch on Sumw2 for all histos ===========
122  for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
123  TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
124  if (h1){
125  h1->Sumw2();
126  continue;
127  }
128  THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
129  if(hn)hn->Sumw2();
130  }
131 
132 
133  TH1::AddDirectory(oldStatus);
134  const Int_t nVar = 16;
135  const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
136  fTreeObservableTagging = new TTree(nameoutput, nameoutput);
137 
138 
139  TString *fShapesVarNames = new TString [nVar];
140 
141  fShapesVarNames[0] = "partonCode";
142  fShapesVarNames[1] = "ptJet";
143  fShapesVarNames[2] = "ptDJet";
144  fShapesVarNames[3] = "mJet";
145  // fShapesVarNames[4] = "nbOfConst";
146  fShapesVarNames[4] = "angularity";
147  fShapesVarNames[5] = "circularity";
148  fShapesVarNames[6] = "lesub";
149  //fShapesVarNames[6] = "sigma2";
150 
151  fShapesVarNames[7] = "ptJetMatch";
152  fShapesVarNames[8] = "ptDJetMatch";
153  fShapesVarNames[9] = "mJetMatch";
154  // fShapesVarNames[12] = "nbOfConstMatch";
155  fShapesVarNames[10] = "angularityMatch";
156  fShapesVarNames[11] = "circularityMatch";
157  fShapesVarNames[12] = "lesubMatch";
158  //fShapesVarNames[12] = "sigma2Match";
159  fShapesVarNames[13]="weightPythia";
160  fShapesVarNames[14]="ntrksEvt";
161 // fShapesVarNames[15]="rhoVal";
162 // fShapesVarNames[16]="rhoMassVal";
163  fShapesVarNames[15]="ptUnsub";
164 
165  for(Int_t ivar=0; ivar < nVar; ivar++){
166  cout<<"looping over variables"<<endl;
167  fTreeObservableTagging->Branch(fShapesVarNames[ivar].Data(), &fShapesVar[ivar], Form("%s/F", fShapesVarNames[ivar].Data()));}
168 
169  PostData(1,fOutput);
170  PostData(2,fTreeObservableTagging);
171 
172  delete [] fShapesVarNames;
173 }
174 
175 //________________________________________________________________________
177 {
178  // Run analysis code here, if needed. It will be executed before FillHistograms().
179 
180  return kTRUE;
181 }
182 
183 //________________________________________________________________________
185 {
186  // Fill histograms.
187  //cout<<"base container"<<endl;
188  AliEmcalJet* jet1 = NULL;
189  AliJetContainer *jetCont = GetJetContainer(0);
190  Float_t kWeight=1;
191 
192 
194  TClonesArray *trackArrayAn = partContAn->GetArray();
195  Int_t ntracksEvt = trackArrayAn->GetEntriesFast();
196 
197 
198  if(jetCont) {
199 
200  jetCont->ResetCurrentID();
201 
202  Int_t count=0;
203  while((jet1 = jetCont->GetNextAcceptJet())) {
204  count++;
205  if (!jet1) continue;
206  AliEmcalJet* jet3 = 0x0;
207  fPtJet->Fill(jet1->Pt());
208 
209  cout<<"Jet detector level Pt is"<<jet1->Pt()<<endl;
210 
211 
212 
213  fShapesVar[0] = 0.;
214 
215 
216  if (fJetShapeType == kPythiaDef){
217 
218  if(!(fJetShapeSub==kConstSub)) jet3 = jet1->ClosestJet();
219  if (!jet3) {
220  Printf("jet3 does not exist, returning");
221  continue;
222  }
223 
224  cout<<"jet3 particle level pt is"<<jet3->Pt()<<endl;
225  fh2ResponseUW->Fill(jet1->Pt(),jet3->Pt());
226 
227 
228  }
229 
230 
231 
232 
233 
234 
235 
236  fNbOfConstvspT->Fill(GetJetNumberOfConstituents(jet1,0), jet1->Pt());
237  if (jet1->GetNumberOfTracks() <= 1) continue;
238 
239 
240  fShapesVar[1] = jet1->Pt();
241  fShapesVar[2] = GetJetpTD(jet1,0);
242  fShapesVar[3] = GetJetMass(jet1,0);
243  fShapesVar[4] = GetJetAngularity(jet1,0);
244  fShapesVar[5] = GetJetCircularity(jet1,0);
245  fShapesVar[6] = GetJetLeSub(jet1,0);
246 
247 
248  Float_t ptMatch=0., ptDMatch=0., massMatch=0.,angulMatch=0.,circMatch=0., lesubMatch=0.;
249  Int_t kMatched = 0;
250 
251  if (fJetShapeType==kPythiaDef) {
252  kMatched =1;
253  if(fJetShapeSub==kConstSub) kMatched = 3;
254 
255  ptMatch=jet3->Pt();
256  ptDMatch=GetJetpTD(jet3, kMatched);
257  massMatch=GetJetMass(jet3,kMatched);
258  //constMatch=1.*GetJetNumberOfConstituents(jet2,kMatched);
259  angulMatch=GetJetAngularity(jet3, kMatched);
260  circMatch=GetJetCircularity(jet3, kMatched);
261  lesubMatch=GetJetLeSub(jet3, kMatched);
262  //sigma2Match = GetSigma2(jet2, kMatched);
263  }
264 
265 
266 
267 
268  if (fJetShapeType == kData ) {
269  kMatched = 0;
270  ptMatch=0.;
271  ptDMatch=0.;
272  massMatch=0.;
273  //constMatch=0.;
274  angulMatch=0.;
275  circMatch=0.;
276  lesubMatch=0.;
277  //sigma2Match =0.;
278 
279  }
280 
281 
282 
283  fShapesVar[7] = ptMatch;
284  fShapesVar[8] = ptDMatch;
285  fShapesVar[9] = massMatch;
286  fShapesVar[10] = angulMatch;
287  fShapesVar[11] = circMatch;
288  fShapesVar[12] = lesubMatch;
289  fShapesVar[13] = kWeight;
290  fShapesVar[14] = ntracksEvt;
291 // fShapesVar[15] = rhoVal;
292 // fShapesVar[16] = rhoMassVal;
293  fShapesVar[15] = jet1->Pt();
294 
295 
296  fTreeObservableTagging->Fill();
297 
298 
299 
300 
301 
302 
303  }
304 
305  fNumberOfJet->Fill(count);
306 
307  }
308 
309  return kTRUE;
310 }
311 
312 //________________________________________________________________________
314 
315  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
317  else
318  return jet->M();
319 }
320 
321 //________________________________________________________________________
323 
324  AliJetContainer *jetCont = GetJetContainer(jetContNb);
325  if (!jet->GetNumberOfTracks())
326  return 0;
327  Double_t den=0.;
328  Double_t num = 0.;
329  AliVParticle *vp1 = 0x0;
330  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
331  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
332 
333  if (!vp1){
334  Printf("AliVParticle associated to constituent not found");
335  continue;
336  }
337 
338  Double_t dphi = RelativePhi(vp1->Phi(),jet->Phi());
339  Double_t dr2 = (vp1->Eta()-jet->Eta())*(vp1->Eta()-jet->Eta()) + dphi*dphi;
340  Double_t dr = TMath::Sqrt(dr2);
341  num=num+vp1->Pt()*dr;
342  den=den+vp1->Pt();
343  }
344  return num/den;
345 }
346 
347 //________________________________________________________________________
349 
350  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
352  else
353  return Angularity(jet, jetContNb);
354 
355 }
356 
357 
358 //________________________________________________________________________
360 
361  AliJetContainer *jetCont = GetJetContainer(jetContNb);
362  if (!jet->GetNumberOfTracks())
363  return 0;
364  Double_t den=0.;
365  Double_t num = 0.;
366  AliVParticle *vp1 = 0x0;
367  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
368  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
369 
370  if (!vp1){
371  Printf("AliVParticle associated to constituent not found");
372  continue;
373  }
374 
375  num=num+vp1->Pt()*vp1->Pt();
376  den=den+vp1->Pt();
377  }
378  return TMath::Sqrt(num)/den;
379 }
380 
381 //________________________________________________________________________
383  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
385  else
386  return PTD(jet, jetContNb);
387 
388 }
389 
390 //_____________________________________________________________________________
392 
393  AliJetContainer *jetCont = GetJetContainer(jetContNb);
394  if (!jet->GetNumberOfTracks())
395  return 0;
396  Double_t mxx = 0.;
397  Double_t myy = 0.;
398  Double_t mxy = 0.;
399  int nc = 0;
400  Double_t sump2 = 0.;
401  Double_t pxjet=jet->Px();
402  Double_t pyjet=jet->Py();
403  Double_t pzjet=jet->Pz();
404 
405 
406  //2 general normalized vectors perpendicular to the jet
407  TVector3 ppJ1(pxjet, pyjet, pzjet);
408  TVector3 ppJ3(- pxjet* pzjet, - pyjet * pzjet, pxjet * pxjet + pyjet * pyjet);
409  ppJ3.SetMag(1.);
410  TVector3 ppJ2(-pyjet, pxjet, 0);
411  ppJ2.SetMag(1.);
412  AliVParticle *vp1 = 0x0;
413  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
414  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
415 
416  if (!vp1){
417  Printf("AliVParticle associated to constituent not found");
418  continue;
419  }
420 
421  TVector3 pp(vp1->Px(), vp1->Py(), vp1->Pz());
422 
423  //local frame
424  TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
425  TVector3 pPerp = pp - pLong;
426  //projection onto the two perpendicular vectors defined above
427 
428  Float_t ppjX = pPerp.Dot(ppJ2);
429  Float_t ppjY = pPerp.Dot(ppJ3);
430  Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
431  if(ppjT<=0) return 0;
432 
433  mxx += (ppjX * ppjX / ppjT);
434  myy += (ppjY * ppjY / ppjT);
435  mxy += (ppjX * ppjY / ppjT);
436  nc++;
437  sump2 += ppjT;}
438 
439  if(nc<2) return 0;
440  if(sump2==0) return 0;
441  // Sphericity Matrix
442  Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
443  TMatrixDSym m0(2,ele);
444 
445  // Find eigenvectors
446  TMatrixDSymEigen m(m0);
447  TVectorD eval(2);
448  TMatrixD evecm = m.GetEigenVectors();
449  eval = m.GetEigenValues();
450  // Largest eigenvector
451  int jev = 0;
452  // cout<<eval[0]<<" "<<eval[1]<<endl;
453  if (eval[0] < eval[1]) jev = 1;
454  TVectorD evec0(2);
455  // Principle axis
456  evec0 = TMatrixDColumn(evecm, jev);
457  Double_t compx=evec0[0];
458  Double_t compy=evec0[1];
459  TVector2 evec(compx, compy);
460  Double_t circ=0;
461  if(jev==1) circ=2*eval[0];
462  if(jev==0) circ=2*eval[1];
463 
464  return circ;
465 
466 
467 
468 }
469 
470 
471 
472 
473 //________________________________________________________________________
475  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
477  else
478  return Circularity(jet, jetContNb);
479 
480 }
481 
482 //________________________________________________________________________
484 
485  AliJetContainer *jetCont = GetJetContainer(jetContNb);
486  if (!jet->GetNumberOfTracks())
487  return 0;
488  Double_t den=0.;
489  Double_t num = 0.;
490  AliVParticle *vp1 = 0x0;
491  AliVParticle *vp2 = 0x0;
492  std::vector<int> ordindex;
493  ordindex=jet->GetPtSortedTrackConstituentIndexes(jetCont->GetParticleContainer()->GetArray());
494  //Printf("Nbof const = %d", jet->GetNumberOfTracks());
495  //Printf("ordindex[0] = %d, ordindex[1] = %d", ordindex[0], ordindex[1]);
496 
497  if(ordindex.size()<2) return -1;
498 
499  vp1 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[0], jetCont->GetParticleContainer()->GetArray()));
500  if (!vp1){
501  Printf("AliVParticle associated to Leading constituent not found");
502  return -1;
503  }
504 
505  vp2 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[1], jetCont->GetParticleContainer()->GetArray()));
506  if (!vp2){
507  Printf("AliVParticle associated to Subleading constituent not found");
508  return -1;
509  }
510 
511 
512  num=vp1->Pt();
513  den=vp2->Pt();
514  //Printf("vp1->Pt() =%f, vp2->Pt() =%f", vp1->Pt(), vp2->Pt());
515 
516  return num-den;
517 }
518 
519 //________________________________________________________________________
521  //calc subtracted jet mass
522 
523  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
525  else
526  return LeSub(jet, jetContNb);
527 
528 }
529 
530 //________________________________________________________________________
532  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
534  else
535  return jet->GetNumberOfTracks();
536 
537 }
538 
539 
540 //______________________________________________________________________________
542 
543  AliJetContainer *jetCont = GetJetContainer(jetContNb);
544  if (!jet->GetNumberOfTracks())
545  return 0;
546  Double_t mxx = 0.;
547  Double_t myy = 0.;
548  Double_t mxy = 0.;
549  int nc = 0;
550  Double_t sump2 = 0.;
551 
552  AliVParticle *vp1 = 0x0;
553  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
554  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
555 
556  if (!vp1){
557  Printf("AliVParticle associated to constituent not found");
558  continue;
559  }
560 
561  Double_t ppt=vp1->Pt();
562  Double_t dphi = RelativePhi(vp1->Phi(),jet->Phi());
563 
564  Double_t deta = vp1->Eta()-jet->Eta();
565  mxx += ppt*ppt*deta*deta;
566  myy += ppt*ppt*dphi*dphi;
567  mxy -= ppt*ppt*deta*TMath::Abs(dphi);
568  nc++;
569  sump2 += ppt*ppt;
570 
571  }
572  if(nc<2) return 0;
573  if(sump2==0) return 0;
574  // Sphericity Matrix
575  Double_t ele[4] = {mxx , mxy , mxy , myy };
576  TMatrixDSym m0(2,ele);
577 
578  // Find eigenvectors
579  TMatrixDSymEigen m(m0);
580  TVectorD eval(2);
581  TMatrixD evecm = m.GetEigenVectors();
582  eval = m.GetEigenValues();
583  // Largest eigenvector
584  int jev = 0;
585  // cout<<eval[0]<<" "<<eval[1]<<endl;
586  if (eval[0] < eval[1]) jev = 1;
587  TVectorD evec0(2);
588  // Principle axis
589  evec0 = TMatrixDColumn(evecm, jev);
590  Double_t compx=evec0[0];
591  Double_t compy=evec0[1];
592  TVector2 evec(compx, compy);
593  Double_t sig=0;
594  if(jev==1) sig=TMath::Sqrt(TMath::Abs(eval[0])/sump2);
595  if(jev==0) sig=TMath::Sqrt(TMath::Abs(eval[1])/sump2);
596 
597  return sig;
598 
599 }
600 
601 //________________________________________________________________________
603  //calc subtracted jet mass
604 
605  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
607  else
608  return Sigma2(jet, jetContNb);
609 
610 }
611 
612 
613 //__________________________________________________________________________________
615 
616  if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
617  else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
618  if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
619  else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
620  double dphi = mphi-vphi;
621  if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
622  else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
623  return dphi;//dphi in [-Pi, Pi]
624 }
625 
626 
627 //________________________________________________________________________
629  //
630  // retrieve event objects
631  //
633  return kFALSE;
634 
635  return kTRUE;
636 }
637 
638 //_______________________________________________________________________
640 {
641  // Called once at the end of the analysis.
642 
643  // fTreeObservableTagging = dynamic_cast<TTree*>(GetOutputData(1));
644  // if (!fTreeObservableTagging){
645  // Printf("ERROR: fTreeObservableTagging not available");
646  // return;
647  // }
648 
649 }
650 
double Double_t
Definition: External.C:58
Float_t GetJetNumberOfConstituents(AliEmcalJet *jet, Int_t jetContNb)
Definition: External.C:236
AliEmcalJet * ClosestJet() const
Definition: AliEmcalJet.h:327
Double_t RelativePhi(Double_t mphi, Double_t vphi)
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t GetJetLeSub(AliEmcalJet *jet, Int_t jetContNb)
Float_t GetJetAngularity(AliEmcalJet *jet, Int_t jetContNb)
Double_t Eta() const
Definition: AliEmcalJet.h:121
Double_t Py() const
Definition: AliEmcalJet.h:107
Double_t Phi() const
Definition: AliEmcalJet.h:117
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
Float_t Circularity(AliEmcalJet *jet, Int_t jetContNb)
Container for particles within the EMCAL framework.
Int_t TrackAt(Int_t idx) const
Definition: AliEmcalJet.h:160
UShort_t GetNumberOfTracks() const
Definition: AliEmcalJet.h:139
Double_t Px() const
Definition: AliEmcalJet.h:106
Float_t GetJetMass(AliEmcalJet *jet, Int_t jetContNb)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliParticleContainer * GetParticleContainer() const
int Int_t
Definition: External.C:63
Float_t PTD(AliEmcalJet *jet, Int_t jetContNb)
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
Bool_t FillHistograms()
Function filling histograms.
Float_t GetJetpTD(AliEmcalJet *jet, Int_t jetContNb)
Float_t GetJetCircularity(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalJet * GetNextAcceptJet()
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t Pt() const
Definition: AliEmcalJet.h:109
AliEmcalList * fOutput
!output list
Float_t GetSigma2(AliEmcalJet *jet, Int_t jetContNb)
Float_t Angularity(AliEmcalJet *jet, Int_t jetContNb)
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:51
Double_t Pz() const
Definition: AliEmcalJet.h:108
Declaration of class AliEmcalPythiaInfo.
const char Option_t
Definition: External.C:48
Float_t Sigma2(AliEmcalJet *jet, Int_t jetContNb)
void UserCreateOutputObjects()
Main initialization function on the worker.
bool Bool_t
Definition: External.C:53
Float_t LeSub(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalJetShapeProperties * GetShapeProperties() const
Definition: AliEmcalJet.h:361
Double_t M() const
Definition: AliEmcalJet.h:120
Container for jet within the EMCAL jet framework.
Definition: External.C:196
std::vector< int > GetPtSortedTrackConstituentIndexes(TClonesArray *tracks) const