AliPhysics  914d8ff (914d8ff)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEmcalJetShapesMC.cxx
Go to the documentation of this file.
1 //
2 // Jet QG tagging analysis task.
3 //
4 // Author: D. Caffarri, L. Cunqueiro
5 
6 #include <TClonesArray.h>
7 #include <TH1F.h>
8 #include <TH2F.h>
9 #include <TH3F.h>
10 #include <THnSparse.h>
11 #include <TTree.h>
12 #include <TList.h>
13 #include <TLorentzVector.h>
14 #include <TProfile.h>
15 #include <TChain.h>
16 #include <TSystem.h>
17 #include <TFile.h>
18 #include <TKey.h>
19 #include <AliAnalysisDataSlot.h>
20 #include <AliAnalysisDataContainer.h>
21 #include "TMatrixD.h"
22 #include "TMatrixDSym.h"
23 #include "TMatrixDSymEigen.h"
24 #include "TVector3.h"
25 #include "TVector2.h"
26 #include "AliVCluster.h"
27 #include "AliVTrack.h"
28 #include "AliEmcalJet.h"
29 #include "AliRhoParameter.h"
30 #include "AliLog.h"
31 #include "AliEmcalParticle.h"
32 #include "AliMCEvent.h"
33 #include "AliGenPythiaEventHeader.h"
34 #include "AliAODMCHeader.h"
35 #include "AliMCEvent.h"
36 #include "AliAnalysisManager.h"
37 #include "AliJetContainer.h"
38 #include "AliParticleContainer.h"
39 #include "AliEmcalPythiaInfo.h"
40 #include "TRandom3.h"
41 #include "AliEmcalJetFinder.h"
42 #include "AliAODEvent.h"
44 
45 using std::cout;
46 using std::endl;
47 
49 
50 //________________________________________________________________________
53  fContainer(0),
54  fMinFractionShared(0),
55  fJetShapeType(kGenShapes),
56  fJetShapeSub(kNoSub),
57  fJetSelection(kInclusive),
58  fPtThreshold(-9999.),
59  fRMatching(0.2),
60  fJetRadius(0.4),
61  fSubjetRadius(0.2),
62  fSelectedShapes(0),
63  fminpTTrig(20.),
64  fmaxpTTrig(50.),
65  fangWindowRecoil(0.6),
66  fSemigoodCorrect(0),
67  fHolePos(0),
68  fHoleWidth(0),
69  fCentSelectOn(kTRUE),
70  fCentMin(0),
71  fCentMax(10),
72  fOneConstSelectOn(kFALSE),
73  fDerivSubtrOrder(0),
74  fPhiJetCorr6(0x0),
75  fPhiJetCorr7(0x0),
76  fEtaJetCorr6(0x0),
77  fEtaJetCorr7(0x0),
78  fPtJetCorr(0x0),
79  fPtJet(0x0),
80  fhpTjetpT(0x0),
81  fhPt(0x0),
82  fhPhi(0x0),
83  fNbOfConstvspT(0x0),
84  fTreeObservableTagging(0x0)
85 
86 {
87  for(Int_t i=0;i<33;i++){
88  fShapesVar[i]=0;}
89  SetMakeGeneralHistograms(kTRUE);
90 }
91 
92 //________________________________________________________________________
94  AliAnalysisTaskEmcalJet(name, kTRUE),
95  fContainer(0),
96  fMinFractionShared(0),
97  fJetShapeType(kGenShapes),
98  fJetShapeSub(kNoSub),
99  fJetSelection(kInclusive),
100  fPtThreshold(-9999.),
101  fRMatching(0.2),
102  fSelectedShapes(0),
103  fminpTTrig(20.),
104  fmaxpTTrig(50.),
105  fangWindowRecoil(0.6),
106  fSemigoodCorrect(0),
107  fHolePos(0),
108  fHoleWidth(0),
109  fCentSelectOn(kTRUE),
110  fCentMin(0),
111  fCentMax(10),
112  fOneConstSelectOn(kFALSE),
113  fDerivSubtrOrder(0),
114  fPhiJetCorr6(0x0),
115  fPhiJetCorr7(0x0),
116  fEtaJetCorr6(0x0),
117  fEtaJetCorr7(0x0),
118  fPtJetCorr(0x0),
119  fPtJet(0x0),
120  fhpTjetpT(0x0),
121  fhPt(0x0),
122  fhPhi(0x0),
123  fNbOfConstvspT(0x0),
124  fTreeObservableTagging(0x0)
125 
126 {
127  // Standard constructor.
128 
129 
130  for(Int_t i=0;i<33;i++){
131  fShapesVar[i]=0;}
132 
134 
135  DefineOutput(1, TList::Class());
136  DefineOutput(2, TTree::Class());
137 
138 
139 }
140 
141 //________________________________________________________________________
143 {
145  delete fTreeObservableTagging;
147  }
148 
149 }
150 
151 //________________________________________________________________________
153 {
154  // Create user output.
156 
157  Bool_t oldStatus = TH1::AddDirectoryStatus();
158  TH1::AddDirectory(oldStatus);
159 
160  //fTreeObservableTagging = new TTree("fTreeJetShape", "fTreeJetShape");
161 
162  //TH1::AddDirectory(oldStatus);
163 
164  const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
165  fTreeObservableTagging = new TTree(nameoutput, nameoutput);
166 
167  const Int_t nVar = 33;
168 
169  TString *fShapesVarNames = new TString [nVar];
170 
171  fShapesVarNames[0] = "partonCode";
172  fShapesVarNames[1] = "ptJet";
173  fShapesVarNames[2] = "ptDJet";
174  fShapesVarNames[3] = "mJet";
175  fShapesVarNames[4] = "nbOfConst";
176  fShapesVarNames[5] = "angularity";
177  fShapesVarNames[6] = "Nsubjet1kt";
178  fShapesVarNames[7] = "Nsubjet2kt";
179  fShapesVarNames[8] = "Nsubjet1Min";
180  fShapesVarNames[9] = "Nsubjet2Min";
181  fShapesVarNames[10] = "DeltaRkt";
182  fShapesVarNames[11] = "DeltaRMin";
183  fShapesVarNames[12] = "SDSymm";
184  fShapesVarNames[13] = "SDDeltaR";
185  fShapesVarNames[14] = "SDGroomedFrac";
186  fShapesVarNames[15] = "SDGroomedN";
187  fShapesVarNames[16] = "SDSymmkt";
188  fShapesVarNames[17] = "SDDeltaRkt";
189  fShapesVarNames[18] = "SDGroomedFrackt";
190  fShapesVarNames[19] = "SDGroomedNkt";
191  fShapesVarNames[20] = "SDSymmAkt";
192  fShapesVarNames[21] = "SDDeltaRAkt";
193  fShapesVarNames[22] = "SDGroomedFracAkt";
194  fShapesVarNames[23] = "SDGroomedNAkt";
195  fShapesVarNames[24] = "SDSymmBeta1";
196  fShapesVarNames[25] = "SDDeltaRBeta1";
197  fShapesVarNames[26] = "SDGroomedFracBeta1";
198  fShapesVarNames[27] = "SDGroomedNBeta1";
199  fShapesVarNames[28] = "SDSymmBeta2";
200  fShapesVarNames[29] = "SDDeltaRBeta2";
201  fShapesVarNames[30] = "SDGroomedFracBeta2";
202  fShapesVarNames[31] = "SDGroomedNBeta2";
203  fShapesVarNames[32] = "weightPythia";
204 
205 
206 
207  //fShapesVarNames[7] = "lesub";
208  //fShapesVarNames[8] = "CoreFraction";
209  //fShapesVarNames[9] = "Nsubjet1";
210  //fShapesVarNames[10] = "Nsubjet2";
211  //fShapesVarNames[11] = "DeltaR";
212  //fShapesVarNames[12] = "OpenAngle";
213  //fShapesVarNames[13] = "weightPythia";
214 
215  //fShapesVarNames[14] = "NT70";
216  //fShapesVarNames[15] = "nConstNT70";
217  //fShapesVarNames[16] = "NT80";
218  //fShapesVarNames[17] = "nConstNT80";
219  //fShapesVarNames[18] = "NT90";
220  //fShapesVarNames[19] = "nConstNT90";
221  //fShapesVarNames[20] = "NT95";
222  //fShapesVarNames[21] = "nConstNT95";
223 
224  //fShapesVarNames[22] = "SubjetFraction";
225 
226 
227  for(Int_t ivar=0; ivar < nVar; ivar++){
228  cout<<"looping over variables"<<endl;
229  fTreeObservableTagging->Branch(fShapesVarNames[ivar].Data(), &fShapesVar[ivar], Form("%s/F", fShapesVarNames[ivar].Data()));}
230 
231 
232 
233  fPhiJetCorr6= new TH2F("fPhiJetCorr6", "fPhiJetCorr6", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
234  fOutput->Add(fPhiJetCorr6);
235  fEtaJetCorr6= new TH2F("fEtaJetCorr6", "fEtaJetCorr6", 50, -1.5, 1.5, 50, -1.5, 1.5);
236  fOutput->Add(fEtaJetCorr6);
237 
238  fPhiJetCorr7= new TH2F("fPhiJetCorr7", "fPhiJetCorr7", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
239  fOutput->Add(fPhiJetCorr7);
240  fEtaJetCorr7= new TH2F("fEtaJetCorr7", "fEtaJetCorr7", 50, -1.5, 1.5, 50, -1.5, 1.5);
241  fOutput->Add(fEtaJetCorr7);
242 
243  fPtJetCorr= new TH2F("fPtJetCorr", "fPtJetCorr", 100, 0, 200, 100, 0, 200);
244  fOutput->Add(fPtJetCorr);
245  fPtJet= new TH1F("fPtJet", "fPtJet", 100, 0, 200);
246  fOutput->Add(fPtJet);
247 
248  fhpTjetpT= new TH2F("fhpTjetpT", "fhpTjetpT", 200, 0, 200, 200, 0, 200);
249  fOutput->Add(fhpTjetpT);
250  fhPt= new TH1F("fhPt", "fhPt", 200, 0, 200);
251  fOutput->Add(fhPt);
252  fhPhi= new TH1F("fhPhi", "fhPhi", 100, -TMath::Pi(), TMath::Pi());
253  fOutput->Add(fhPhi);
254 
255  fNbOfConstvspT=new TH2F("fNbOfConstvspT", "fNbOfConstvspT", 100, 0, 100, 200, 0, 200);
256  fOutput->Add(fNbOfConstvspT);
257 
258  //fOutput->Add(fTreeObservableTagging);
259 
260 
261  PostData(1, fOutput); // Post data for ALL output slots > 0 here
262  PostData(2, fTreeObservableTagging);
263 
264  delete [] fShapesVarNames;
265 
266 }
267 
268 //________________________________________________________________________
270 {
271  // Run analysis code here, if needed. It will be executed before FillHistograms().
272 
273  return kTRUE;
274 }
275 
276 //________________________________________________________________________
278 {
279  // Fill histograms.
280  //cout<<"IntoFillHistograms"<<endl;
281  AliEmcalJet* jet1 = NULL;
282  AliJetContainer *jetCont = GetJetContainer(0);
283 
284  Float_t kWeight=1;
285  if (fCentSelectOn)
286  if ((fCent>fCentMax) || (fCent<fCentMin)) return 0;
287 
288  AliAODTrack *triggerHadron = 0x0;
289 
290  if (fJetSelection == kRecoil) {
291  //Printf("Recoil jets!!!, fminpTTrig = %f, fmaxpTTrig = %f", fminpTTrig, fmaxpTTrig);
292  Int_t triggerHadronLabel = SelectTrigger(fminpTTrig, fmaxpTTrig);
293 
294 
295  if (triggerHadronLabel==-99999) {
296  //Printf ("Trigger Hadron not found, return");
297  return 0;}
298 
299 
301  TClonesArray *trackArrayAn = partContAn->GetArray();
302  triggerHadron = static_cast<AliAODTrack*>(trackArrayAn->At(triggerHadronLabel));
303 
304  if (!triggerHadron) {
305  //Printf("No Trigger hadron with the found label!!");
306  return 0;
307  }
308 
309  if(fSemigoodCorrect){
310  Double_t disthole=RelativePhi(triggerHadron->Phi(),fHolePos);
311  if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-fangWindowRecoil){
312  return 0;}
313  }
314 
315  fhPt->Fill(triggerHadron->Pt());
316 
317  }
318 
319  if(jetCont) {
320  jetCont->ResetCurrentID();
321  while((jet1 = jetCont->GetNextAcceptJet())) {
322  //Printf("jet1=%p", jet1);
323  if (!jet1) continue;
324  AliEmcalJet* jet2 = 0x0;
325  AliEmcalJet* jet3 = 0x0;
326  fPtJet->Fill(jet1->Pt());
327  AliEmcalJet *jetUS = NULL;
328  Int_t ifound=0, jfound=0;
329  Int_t ilab=-1, jlab=-1;
330 
332  Double_t disthole=RelativePhi(jet1->Phi(),fHolePos);
333  if(TMath::Abs(disthole)<fHoleWidth){
334  continue;
335  }
336  }
337 
338  Float_t dphiRecoil = 0.;
339  if (fJetSelection == kRecoil){
340  dphiRecoil = RelativePhi(triggerHadron->Phi(), jet1->Phi());
341  if (TMath::Abs(dphiRecoil) < (TMath::Pi() - fangWindowRecoil)) {
342  // Printf("Recoil jets back to back not found! continuing");
343  continue;
344  }
345 
346  fhpTjetpT->Fill(triggerHadron->Pt(), jet1->Pt());
347  //Printf(" ************ FILLING HISTOS****** shapeSub = %d, triggerHadron = %f, jet1 = %f", fJetShapeSub, triggerHadron->Pt(), jet1->Pt());
348  fhPhi->Fill(RelativePhi(triggerHadron->Phi(), jet1->Phi()));
349 
350  }
351 
352 
353  fShapesVar[0] = 0.;
354 
355  if (fJetShapeType == kGenShapes){
356  const AliEmcalPythiaInfo *partonsInfo = 0x0;
357  partonsInfo = GetPythiaInfo();
358  //Printf("partonsInfo=%p", partonsInfo);
359  Double_t jp1=RelativePhi(jet1->Phi(),partonsInfo->GetPartonPhi6());
360  Double_t detap1=(jet1->Eta())-(partonsInfo->GetPartonEta6());
361  kWeight=partonsInfo->GetPythiaEventWeight();
362  //Printf("kWeight=%f", kWeight);
363  fShapesVar[32] = kWeight;
364 
365  Float_t dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
366  fEtaJetCorr6->Fill(jet1->Eta(), partonsInfo->GetPartonEta6());
367  fPhiJetCorr6->Fill(jet1->Phi(), partonsInfo->GetPartonPhi6());
368  if(dRp1 < fRMatching) {
369  fShapesVar[0] = partonsInfo->GetPartonFlag6();
370  fPtJetCorr ->Fill(partonsInfo->GetPartonPt6(), jet1->Pt());
371  }
372  else {
373  jp1=RelativePhi(jet1->Phi(),partonsInfo->GetPartonPhi7());
374  detap1=(jet1->Eta())-(partonsInfo->GetPartonEta7());
375  dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
376  fEtaJetCorr7->Fill(jet1->Eta(), partonsInfo->GetPartonEta7());
377  fPhiJetCorr7->Fill(jet1->Phi(), partonsInfo->GetPartonPhi7());
378  if(dRp1 < fRMatching) {
379  fShapesVar[0] = partonsInfo->GetPartonFlag7();
380  fPtJetCorr->Fill(partonsInfo->GetPartonPt7(), jet1->Pt());
381  }
382  else fShapesVar[0]=0;
383  }
384  }
385 
386  Double_t ptSubtracted = 0;
387  ptSubtracted= jet1->Pt();
388  //Printf("ptSubtracted=%f", ptSubtracted);
389 
390 
391  if (ptSubtracted < fPtThreshold) continue;
392 
393  if ((fCentSelectOn == kFALSE) && (jet1->GetNumberOfTracks() < 2)) continue;
394 
395  //AliEmcalJetFinder *Reclusterer1; //Object containg Subjets from Subtracted Hybrid Jets
396  //Reclusterer1 = Recluster(jet1, 0, fJetRadius, fSubjetRadius, 1, 0, "SubJetFinder_1");
397 
398 
399 
400 
401 
402 
403 
404  fShapesVar[1] = ptSubtracted;
405  fShapesVar[2] = GetJetpTD(jet1,0);
406  fShapesVar[3] = GetJetMass(jet1,0);
407  fShapesVar[4] = 1.*GetJetNumberOfConstituents(jet1,0);
408  fShapesVar[5] = GetJetAngularity(jet1,0);
409  //nsub1 and nsub2 for kT
410  fShapesVar[6] = fjNSubJettiness(jet1,0,1,0,1,0);
411  fShapesVar[7] = fjNSubJettiness(jet1,0,2,0,1,0);
412  //nsub1 and nsub2 for min_axis
413  fShapesVar[8] = fjNSubJettiness(jet1,0,1,10,1,0);
414  fShapesVar[9] = fjNSubJettiness(jet1,0,2,10,1,0);
415  //deltaRkt
416  fShapesVar[10] = fjNSubJettiness(jet1,0,2,0,1,2);
417  //deltaRmin
418  fShapesVar[11] = fjNSubJettiness(jet1,0,2,10,1,2);
419 
420  //SoftDropParameters for different reclustering strategies and beta values
421  SoftDrop(jet1,jetCont,0.1,0,0);
422  SoftDrop(jet1,jetCont,0.1,0,1);
423  SoftDrop(jet1,jetCont,0.1,0,2);
424  SoftDrop(jet1,jetCont,0.1,1,0);
425  SoftDrop(jet1,jetCont,0.1,2,0);
426 
427 
428  // Float_t nTFractions[8]={0.,0.,0.,0.,0.,0.,0.,0.};
429  //NTValues(jet1, 0, nTFractions);
430  //shape 13 is pythia weight!
431  //for (Int_t ishape=14; ishape<22; ishape++) fShapesVar[ishape] = nTFractions[ishape-14];
432 
433  //fShapesVar[22]= GetSubjetFraction(jet1,0,fJetRadius,Reclusterer1);
434 
435  fTreeObservableTagging->Fill();
436 
437  }
438 
439  }
440 
441  return kTRUE;
442 }
443 
444 //________________________________________________________________________
446  //calc subtracted jet mass
447  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
449  else return jet->GetShapeProperties()->GetSecondOrderSubtracted();
450  else
451  return jet->M();
452 }
453 
454 //________________________________________________________________________
456 
457  AliJetContainer *jetCont = GetJetContainer(jetContNb);
458  if (!jet->GetNumberOfTracks())
459  return 0;
460  Double_t den=0.;
461  Double_t num = 0.;
462  AliVParticle *vp1 = 0x0;
463  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
464  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
465 
466  if (!vp1){
467  Printf("AliVParticle associated to constituent not found");
468  continue;
469  }
470 
471  Double_t dphi = RelativePhi(vp1->Phi(),jet->Phi());
472  Double_t dr2 = (vp1->Eta()-jet->Eta())*(vp1->Eta()-jet->Eta()) + dphi*dphi;
473  Double_t dr = TMath::Sqrt(dr2);
474  num=num+vp1->Pt()*dr;
475  den=den+vp1->Pt();
476  }
477  return num/den;
478 }
479 
480 //________________________________________________________________________
482 
483  if((fJetShapeSub==kDerivSub) && (jetContNb==0))
486  else
487  return Angularity(jet, jetContNb);
488 
489 }
490 
491 
492 //________________________________________________________________________
494 
495  AliJetContainer *jetCont = GetJetContainer(jetContNb);
496  if (!jet->GetNumberOfTracks())
497  return 0;
498  Double_t den=0.;
499  Double_t num = 0.;
500  AliVParticle *vp1 = 0x0;
501  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
502  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
503 
504  if (!vp1){
505  Printf("AliVParticle associated to constituent not found");
506  continue;
507  }
508 
509  num=num+vp1->Pt()*vp1->Pt();
510  den=den+vp1->Pt();
511  }
512  return TMath::Sqrt(num)/den;
513 }
514 
515 //________________________________________________________________________
517  //calc subtracted jet mass
518  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
520  else return jet->GetShapeProperties()->GetSecondOrderSubtractedpTD();
521  else
522  return PTD(jet, jetContNb);
523 
524 }
525 
526 //_____________________________________________________________________________
528 
529  AliJetContainer *jetCont = GetJetContainer(jetContNb);
530  if (!jet->GetNumberOfTracks())
531  return 0;
532  Double_t mxx = 0.;
533  Double_t myy = 0.;
534  Double_t mxy = 0.;
535  int nc = 0;
536  Double_t sump2 = 0.;
537  Double_t pxjet=jet->Px();
538  Double_t pyjet=jet->Py();
539  Double_t pzjet=jet->Pz();
540 
541 
542  //2 general normalized vectors perpendicular to the jet
543  TVector3 ppJ1(pxjet, pyjet, pzjet);
544  TVector3 ppJ3(- pxjet* pzjet, - pyjet * pzjet, pxjet * pxjet + pyjet * pyjet);
545  ppJ3.SetMag(1.);
546  TVector3 ppJ2(-pyjet, pxjet, 0);
547  ppJ2.SetMag(1.);
548  AliVParticle *vp1 = 0x0;
549  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
550  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
551 
552  if (!vp1){
553  Printf("AliVParticle associated to constituent not found");
554  continue;
555  }
556 
557  TVector3 pp(vp1->Px(), vp1->Py(), vp1->Pz());
558 
559  //local frame
560  TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
561  TVector3 pPerp = pp - pLong;
562  //projection onto the two perpendicular vectors defined above
563 
564  Float_t ppjX = pPerp.Dot(ppJ2);
565  Float_t ppjY = pPerp.Dot(ppJ3);
566  Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
567  if(ppjT<=0) return 0;
568 
569  mxx += (ppjX * ppjX / ppjT);
570  myy += (ppjY * ppjY / ppjT);
571  mxy += (ppjX * ppjY / ppjT);
572  nc++;
573  sump2 += ppjT;}
574 
575  if(nc<2) return 0;
576  if(sump2==0) return 0;
577  // Sphericity Matrix
578  Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
579  TMatrixDSym m0(2,ele);
580 
581  // Find eigenvectors
582  TMatrixDSymEigen m(m0);
583  TVectorD eval(2);
584  TMatrixD evecm = m.GetEigenVectors();
585  eval = m.GetEigenValues();
586  // Largest eigenvector
587  int jev = 0;
588  // cout<<eval[0]<<" "<<eval[1]<<endl;
589  if (eval[0] < eval[1]) jev = 1;
590  TVectorD evec0(2);
591  // Principle axis
592  evec0 = TMatrixDColumn(evecm, jev);
593  Double_t compx=evec0[0];
594  Double_t compy=evec0[1];
595  TVector2 evec(compx, compy);
596  Double_t circ=0;
597  if(jev==1) circ=2*eval[0];
598  if(jev==0) circ=2*eval[1];
599 
600  return circ;
601 
602 
603 
604 }
605 
606 
607 
608 
609 //________________________________________________________________________
611  //calc subtracted jet mass
612 
613  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
616  else
617  return Circularity(jet, jetContNb);
618 
619 }
620 
621 //________________________________________________________________________
623 
624  AliJetContainer *jetCont = GetJetContainer(jetContNb);
625  if (!jet->GetNumberOfTracks())
626  return 0;
627  Double_t den=0.;
628  Double_t num = 0.;
629  AliVParticle *vp1 = 0x0;
630  AliVParticle *vp2 = 0x0;
631  std::vector<int> ordindex;
632  ordindex=jet->GetPtSortedTrackConstituentIndexes(jetCont->GetParticleContainer()->GetArray());
633  //Printf("Nbof const = %d", jet->GetNumberOfTracks());
634  //Printf("ordindex[0] = %d, ordindex[1] = %d", ordindex[0], ordindex[1]);
635 
636  if(ordindex.size()<2) return -1;
637 
638  vp1 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[0], jetCont->GetParticleContainer()->GetArray()));
639  if (!vp1){
640  Printf("AliVParticle associated to Leading constituent not found");
641  return -1;
642  }
643 
644  vp2 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[1], jetCont->GetParticleContainer()->GetArray()));
645  if (!vp2){
646  Printf("AliVParticle associated to Subleading constituent not found");
647  return -1;
648  }
649 
650 
651  num=vp1->Pt();
652  den=vp2->Pt();
653  //Printf("vp1->Pt() =%f, vp2->Pt() =%f", vp1->Pt(), vp2->Pt());
654 
655 return num-den;
656 }
657 
658 //________________________________________________________________________
660  //calc subtracted jet mass
661 
662  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
665  else
666  return LeSub(jet, jetContNb);
667 
668 }
669 
670 //________________________________________________________________________
672  //calc subtracted jet mass
673 
674  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
677  else
678  return jet->GetNumberOfTracks();
679 
680  }
681 
682 
683 //________________________________________________________________________
684 AliEmcalJetFinder *AliAnalysisTaskEmcalJetShapesMC::Recluster(AliEmcalJet *Jet, Int_t JetContNb, Double_t JetRadius, Double_t SubJetRadius, Double_t SubJetMinPt, Int_t Algorithm, const char* Name){
685 
686  AliJetContainer *JetCont = GetJetContainer(JetContNb);
687  AliEmcalJetFinder *Reclusterer = new AliEmcalJetFinder(Name); //JetFinder Object for reclustered jets
688  Reclusterer->SetRadius(SubJetRadius);
689  Reclusterer->SetJetMinPt(SubJetMinPt);
690  Reclusterer->SetJetAlgorithm(Algorithm); //0 for anti-kt 1 for kt
691  Reclusterer->SetJetMaxEta(0.9-JetRadius);
692  Reclusterer->SetRecombSheme(0);
693  const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
694 
695  //Double_t dVtx[3]={vert->GetX(),vert->GetY(),vert->GetZ()};
696  Double_t dVtx[3]={0.,0.,0.};
697  if(Reclusterer->AliEmcalJetFinder::Filter(Jet, JetCont, dVtx)){;} //reclustering jet1 using the jetfinderobject Reclusterer
698  return Reclusterer;
699 }
700 
701 
702 
703 
704 //----------------------------------------------------------------------
706  AliJetContainer *JetCont = GetJetContainer(JetContNb);
707  AliEmcalJet *SubJet=NULL;
708  Double_t DeltaR1=0;
709  Double_t DeltaR2=0;
710  AliVParticle *JetParticle=0x0;
711  Double_t SubJetiness_Numerator = 0;
712  Double_t SubJetiness_Denominator = 0;
713  Double_t Index=-2;
714  if (Reclusterer->GetNumberOfJets() < 1) return -2;
715  Index=SubJetOrdering(Jet,Reclusterer,1,0,kTRUE);
716  if(Index==-999) return -2;
717  SubJetiness_Numerator=(Reclusterer->GetJet(Index)->Pt());
718  SubJetiness_Denominator=Jet->Pt();
719  return SubJetiness_Numerator/SubJetiness_Denominator;
720 
721 
722 }
723 //__________________________________________________________________________________
725 
726  AliJetContainer *jetCont = GetJetContainer(jetContNb);
727  if (!jet->GetNumberOfTracks())
728  return 0;
729  Double_t den=0.;
730  Double_t num = 0.;
731  AliVParticle *vp1 = 0x0;
732  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
733  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
734 
735  if (!vp1){
736  Printf("AliVParticle associated to constituent not found");
737  continue;
738  }
739 
740  Double_t dphi = RelativePhi(vp1->Phi(),jet->Phi());
741  Double_t dr2 = (vp1->Eta()-jet->Eta())*(vp1->Eta()-jet->Eta()) + dphi*dphi;
742  Double_t dr = TMath::Sqrt(dr2);
743  if(dr<=fSubjetRadius) num=num+vp1->Pt();
744 
745  }
746  return num/jet->Pt();
747 }
748 
749 
750 
751 
752 //________________________________________________________________________
754  //calc subtracted jet mass
755 
756  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
759  else
760  return CoreFrac(jet, jetContNb);
761 
762 }
763 
764 
765 
766 
767 //----------------------------------------------------------------------
769  AliEmcalJet *SubJet=NULL;
770  Double_t SortingVariable;
771  Int_t ArraySize =N+1;
772  TArrayD *JetSorter = new TArrayD(ArraySize);
773  TArrayD *JetIndexSorter = new TArrayD(ArraySize);
774  for (Int_t i=0; i<ArraySize; i++){
775  JetSorter->SetAt(0,i);
776  }
777  for (Int_t i=0; i<ArraySize; i++){
778  JetIndexSorter->SetAt(0,i);
779  }
780  if(Reclusterer->GetNumberOfJets()<N) return -999;
781  for (Int_t i=0; i<Reclusterer->GetNumberOfJets(); i++){
782  SubJet=Reclusterer->GetJet(i);
783  if (Type==0) SortingVariable=SubJet->Pt();
784  else if (Type==1) SortingVariable=SubJet->E();
785  else if (Type==2) SortingVariable=SubJet->M();
786  for (Int_t j=0; j<N; j++){
787  if (SortingVariable>JetSorter->GetAt(j)){
788  for (Int_t k=N-1; k>=j; k--){
789  JetSorter->SetAt(JetSorter->GetAt(k),k+1);
790  JetIndexSorter->SetAt(JetIndexSorter->GetAt(k),k+1);
791  }
792  JetSorter->SetAt(SortingVariable,j);
793  JetIndexSorter->SetAt(i,j);
794  break;
795  }
796  }
797  }
798  if (!Index) return JetSorter->GetAt(N-1);
799  else return JetIndexSorter->GetAt(N-1);
800 }
801 
802 
803 
804 //returns -1 if the Nth hardest jet is requested where N>number of available jets
805 //type: 0=Pt 1=E 2=M
806 //Index TRUE=returns index FALSE=returns value of quantatiy in question
807 
808 
809 
810 
811 
812 //______________________________________________________________________________
814 
815  AliJetContainer *jetCont = GetJetContainer(jetContNb);
816  if (!jet->GetNumberOfTracks())
817  return 0;
818  Double_t mxx = 0.;
819  Double_t myy = 0.;
820  Double_t mxy = 0.;
821  int nc = 0;
822  Double_t sump2 = 0.;
823 
824  AliVParticle *vp1 = 0x0;
825  for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
826  vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
827 
828  if (!vp1){
829  Printf("AliVParticle associated to constituent not found");
830  continue;
831  }
832 
833  Double_t ppt=vp1->Pt();
834  Double_t dphi = RelativePhi(vp1->Phi(),jet->Phi());
835 
836  Double_t deta = vp1->Eta()-jet->Eta();
837  mxx += ppt*ppt*deta*deta;
838  myy += ppt*ppt*dphi*dphi;
839  mxy -= ppt*ppt*deta*TMath::Abs(dphi);
840  nc++;
841  sump2 += ppt*ppt;
842 
843  }
844  if(nc<2) return 0;
845  if(sump2==0) return 0;
846  // Sphericity Matrix
847  Double_t ele[4] = {mxx , mxy , mxy , myy };
848  TMatrixDSym m0(2,ele);
849 
850  // Find eigenvectors
851  TMatrixDSymEigen m(m0);
852  TVectorD eval(2);
853  TMatrixD evecm = m.GetEigenVectors();
854  eval = m.GetEigenValues();
855  // Largest eigenvector
856  int jev = 0;
857  // cout<<eval[0]<<" "<<eval[1]<<endl;
858  if (eval[0] < eval[1]) jev = 1;
859  TVectorD evec0(2);
860  // Principle axis
861  evec0 = TMatrixDColumn(evecm, jev);
862  Double_t compx=evec0[0];
863  Double_t compy=evec0[1];
864  TVector2 evec(compx, compy);
865  Double_t sig=0;
866  if(jev==1) sig=TMath::Sqrt(TMath::Abs(eval[0])/sump2);
867  if(jev==0) sig=TMath::Sqrt(TMath::Abs(eval[1])/sump2);
868 
869  return sig;
870 
871 }
872 
873 //________________________________________________________________________
875  //calc subtracted jet mass
876 
877  if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
880  else
881  return Sigma2(jet, jetContNb);
882 
883 }
884 
885 
886 //_________________________________________________________________________
888 
889  AliJetContainer *jetCont = GetJetContainer(jetContNb);
890  if (!jet->GetNumberOfTracks())
891  return;
892 
893  Double_t ptJet = jet->Pt();
894 
895  AliVParticle *vp1 = 0x0;
896  std::vector<int> ordindex;
897  ordindex=jet->GetPtSortedTrackConstituentIndexes(jetCont->GetParticleContainer()->GetArray());
898  //Printf("Nbof const = %d", jet->GetNumberOfTracks());
899  //Printf("ordindex[0] = %d, ordindex[1] = %d", ordindex[0], ordindex[1]);
900  //if(ordindex.size()<2) return -1;
901 
902  for(Int_t iconst =0; iconst<jet->GetNumberOfTracks(); iconst++){
903 
904  vp1 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[iconst], jetCont->GetParticleContainer()->GetArray()));
905  if (!vp1){
906  Printf("AliVParticle associated to Leading constituent not found");
907  return;
908  }
909 
910  if (nTFractions[0] <= 0.7*ptJet){
911  nTFractions[0] += vp1->Pt();
912  nTFractions[1] +=1;
913  }
914 
915  if (nTFractions[2] <= 0.8*ptJet){
916  nTFractions[2] += vp1->Pt();
917  nTFractions[3] +=1;
918  }
919 
920  if (nTFractions[4] <= 0.9*ptJet){
921  nTFractions[4] += vp1->Pt();
922  nTFractions[5] +=1;
923  }
924 
925  if (nTFractions[6] <= 0.95*ptJet){
926  nTFractions[6] += vp1->Pt();
927  nTFractions[7] +=1;
928  }
929  }
930 }
931 //_________________________________________________________________________________________________
933 
934  //WARNING!!! Only works for parent jets that are clustered with Anti-Kt! To change go to AliEmcalJetFinder.cxx and look at the Nsubjettiness() function
935 
936  //Algorithm==0 -> kt_axes;
937  // Algorithm==1 -> ca_axes;
938  //Algorithm==2 -> antikt_0p2_axes;
939  //Algorithm==3 -> wta_kt_axes;
940  //Algorithm==4 -> wta_ca_axes;
941  //Algorithm==5 -> onepass_kt_axes;
942  //Algorithm==6 -> onepass_ca_axes;
943  //Algorithm==7 -> onepass_antikt_0p2_axes;
944  //Algorithm==8 -> onepass_wta_kt_axes;
945  //Algorithm==9 -> onepass_wta_ca_axes;
946  //Algorithm==10 -> min_axes;
947 
948 
949  //Option==0 returns Nsubjettiness Value
950  //Option==1 && N==2 returns opening angle between two subjet axes(Delta R?)
951  //Option==2 && N==2 returns Delta R
952 
953  if (Jet->GetNumberOfTracks()>=N){
954  AliJetContainer *JetCont = GetJetContainer(JetContNb);
955  AliEmcalJetFinder *JetFinder=new AliEmcalJetFinder("Nsubjettiness");
956  JetFinder->SetJetMaxEta(0.9-fJetRadius);
957  JetFinder->SetRadius(fJetRadius);
958  JetFinder->SetJetAlgorithm(0); //0 for anti-kt 1 for kt //this is for the JET!!!!!!!!!! Not the SubJets
959  JetFinder->SetRecombSheme(0);
960  JetFinder->SetJetMinPt(Jet->Pt());
961  //Double_t dVtx[3]={vert->GetX(),vert->GetY(),vert->GetZ()};
962  Double_t dVtx[3]={1,1,1};
963  //Printf("JetFinder->Nsubjettiness =%f", JetFinder->Nsubjettiness(Jet,JetCont,dVtx,N,Algorithm,fSubjetRadius,Beta,Option));
964  return JetFinder->Nsubjettiness(Jet,JetCont,dVtx,N,Algorithm,0.2,Beta,Option,0,0,0);
965 
966  }
967  else return -2;
968 }
969 
970 
971 
972 //________________________________________________________________________
974 
976  TClonesArray *tracksArray = partCont->GetArray();
977 
978  if(!partCont || !tracksArray) return -99999;
979  AliAODTrack *track = 0x0;
980  AliEmcalParticle *emcPart = 0x0;
981 
982 
983  TList *trackList = new TList();
984  Int_t triggers[100];
985  for (Int_t iTrigger=0; iTrigger<100; iTrigger++) triggers[iTrigger] = 0;
986  Int_t iTT = 0;
987 
988  for(Int_t iTrack=0; iTrack <= tracksArray->GetEntriesFast(); iTrack++){
989 
990 
991  if (fJetShapeSub == kConstSub){
992  emcPart = static_cast<AliEmcalParticle*>(tracksArray->At(iTrack));
993  if (!emcPart) continue;
994  if(TMath::Abs(emcPart->Eta())>0.9) continue;
995  if (emcPart->Pt()<0.15) continue;
996 
997  if ((emcPart->Pt() >= minpT) && (emcPart->Pt()< maxpT)) {
998  trackList->Add(emcPart);
999  triggers[iTT] = iTrack;
1000  iTT++;
1001  }
1002  }
1003  else{
1004  track = static_cast<AliAODTrack*>(tracksArray->At(iTrack));
1005  if (!track) continue;
1006  if(TMath::Abs(track->Eta())>0.9) continue;
1007  if (track->Pt()<0.15) continue;
1008  if (!(track->TestFilterBit(768))) continue;
1009 
1010  if ((track->Pt() >= minpT) && (track->Pt()< maxpT)) {
1011  trackList->Add(track);
1012  triggers[iTT] = iTrack;
1013  iTT++;
1014 
1015  }
1016  }
1017  }
1018 
1019  if (iTT == 0) return -99999;
1020  Int_t nbRn = 0, index = 0 ;
1021  TRandom3* random = new TRandom3(0);
1022  nbRn = random->Integer(iTT);
1023 
1024  index = triggers[nbRn];
1025  //Printf("iTT Total= %d, nbRn = %d, Index = %d",iTT, nbRn, index );
1026  return index;
1027 
1028 }
1029 
1030 //__________________________________________________________________________________
1032 
1033  if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1034  else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1035  if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1036  else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1037  double dphi = mphi-vphi;
1038  if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1039  else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1040  return dphi;//dphi in [-Pi, Pi]
1041 }
1042 
1043 
1044 //________________________________________________________________________
1046  //
1047  // retrieve event objects
1048  //
1050  return kFALSE;
1051 
1052  return kTRUE;
1053 }
1054 
1055 //_______________________________________________________________________
1057 {
1058  // Called once at the end of the analysis.
1059 
1060  AliInfo("Terminate");
1061  AliAnalysisTaskSE::Terminate();
1062 
1063  fOutput = dynamic_cast<AliEmcalList*> (GetOutputData(1));
1064  if (!fOutput) {
1065  AliError("fOutput not available");
1066  return;
1067  }
1068 
1069  fTreeObservableTagging = dynamic_cast<TTree*>(GetOutputData(2));
1070  if (!fTreeObservableTagging){
1071  Printf("ERROR: fTreeObservableTagging not available");
1072  return;
1073  }
1074 
1075 }
1076 
1077 //_________________________________________________________________________
1078 void AliAnalysisTaskEmcalJetShapesMC::SoftDrop(AliEmcalJet *fJet,AliJetContainer *fJetCont, double zcut, double beta, int ReclusterAlgo){
1079 
1080  std::vector<fastjet::PseudoJet> fInputVectors;
1081  Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
1082 
1083  AliParticleContainer *fTrackCont = fJetCont->GetParticleContainer();
1084 
1085  Double_t JetEta=fJet->Eta(),JetPhi=fJet->Phi();
1086  Double_t FJTrackEta[9999],FJTrackPhi[9999],FJTrackPt[9999],EmcalJetTrackEta[9999],EmcalJetTrackPhi[9999],EmcalJetTrackPt[9999];
1087  UShort_t FJNTracks=0,EmcalJetNTracks=0;
1088 
1089  if (fTrackCont) for (Int_t i=0; i<fJet->GetNumberOfTracks(); i++) {
1090  AliVParticle *fTrk = fJet->TrackAt(i, fTrackCont->GetArray());
1091  if (!fTrk) continue;
1092  JetInvMass += fTrk->M();
1093 
1094  fastjet::PseudoJet PseudoTracks(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1095  TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
1096  TrackEnergy += fTrk->E();
1097  PseudoTracks.set_user_index(fJet->TrackAt(i)+100);
1098  PseudJetInvMass += PseudoTracks.m();
1099  fInputVectors.push_back(PseudoTracks);
1100  EmcalJetTrackEta[i]=fTrk->Eta();
1101  EmcalJetTrackPhi[i]=fTrk->Phi();
1102  EmcalJetTrackPt[i]=fTrk->Pt();
1103  EmcalJetNTracks++;
1104  }
1105  fastjet::JetDefinition *fJetDef;
1106  fastjet::ClusterSequence *fClustSeqSA;
1107 
1108 
1109 
1110  fJetDef = new fastjet::JetDefinition(fastjet::antikt_algorithm, fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1111 
1112  try {
1113  fClustSeqSA = new fastjet::ClusterSequence(fInputVectors, *fJetDef);
1114  } catch (fastjet::Error) {
1115  AliError(" [w] FJ Exception caught.");
1116  //return -1;
1117  }
1118 
1119  std::vector<fastjet::PseudoJet> fOutputJets;
1120  fOutputJets.clear();
1121  fOutputJets=fClustSeqSA->inclusive_jets(0);
1122 
1123 
1124  std::vector<fastjet::PseudoJet> jet_constituents = fOutputJets[0].constituents();
1125  fastjet::contrib::SoftDrop softdrop(beta, zcut);
1126  //fastjet::contrib::SoftDrop softdrop_antikt(beta,zcut);
1127  softdrop.set_verbose_structure(kTRUE);
1128  //fastjet::JetDefinition jet_def_akt(fastjet::antikt_algorithm, 0.4);
1129  // fastjet::contrib::Recluster *antiKT_Recluster(jet_def_akt);
1130  fastjet::contrib::Recluster *recluster;
1131  if(ReclusterAlgo == 1) recluster = new fastjet::contrib::Recluster(fastjet::kt_algorithm,1,true);
1132  if(ReclusterAlgo == 2) recluster = new fastjet::contrib::Recluster(fastjet::antikt_algorithm,1,true);
1133  if(ReclusterAlgo == 0) recluster = new fastjet::contrib::Recluster(fastjet::cambridge_algorithm,1,true);
1134  softdrop.set_reclustering(true,recluster);
1135  fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
1136  // fastjet::PseudoJet finaljet_antikt = softdrop_antikt(fOutputJets[0]);
1137  //cout<< finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry()<<endl;
1138  //cout<< finaljet_antikt.structure_of<fastjet::contrib::SoftDrop>().symmetry()<<endl;
1139 
1140 
1141  //AliEmcalJet* jet = new AliEmcalJet(finaljet.perp(), finaljet.eta(), finaljet.phi(), finaljet.m());
1142  //std::vector<fastjet::PseudoJet> fSDTracks=finaljet.constituents();
1143  //Double_t FastjetTrackDelR,EmcalTrackDelR;
1144  //for(Int_t i=0;i<fJet->GetNumberOfConstituents();i++){
1145  // if(i<=finaljet.constituents().size()){
1146  // FastjetTrackDelR = TMath::Sqrt(TMath::Power(fSDTracks[i].eta()-JetEta,2)+TMath::Power(fSDTracks[i].phi()-JetPhi,2));
1147  // FJTrackEta[i]=fSDTracks[i].eta();
1148  // FJTrackPhi[i]=fSDTracks[i].phi();
1149  // FJTrackPt[i]=fSDTracks[i].perp();
1150  // FJNTracks++;
1151  // }
1152  // AliVParticle *fTrk = fJet->TrackAt(i, fTrackCont->GetArray());
1153  // EmcalTrackDelR = TMath::Sqrt(TMath::Power(fTrk->Eta()-JetEta,2)+TMath::Power(fTrk->Phi()-JetPhi,2));
1154  //}
1155  Int_t NDroppedTracks = fJet->GetNumberOfTracks()-finaljet.constituents().size();
1156  //Int_t nConstituents(fClustSeqSA->constituents(finaljet).size());
1157  //jet->SetNumberOfTracks(nConstituents);
1158  Double_t SymParam, Mu, DeltaR, GroomedPt;
1159  Int_t NGroomedBranches;
1160  SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
1161  Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
1162  DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
1163  NGroomedBranches=finaljet.structure_of<fastjet::contrib::SoftDrop>().dropped_count();
1164  GroomedPt=finaljet.perp();
1165  if(beta==0){
1166  if(ReclusterAlgo==0){
1167  fShapesVar[12]=SymParam;
1168  fShapesVar[13]=DeltaR;
1169  fShapesVar[14]=GroomedPt;
1170  fShapesVar[15]=NGroomedBranches;}
1171  if(ReclusterAlgo==1){
1172  fShapesVar[16]=SymParam;
1173  fShapesVar[17]=DeltaR;
1174  fShapesVar[18]=GroomedPt;
1175  fShapesVar[19]=NGroomedBranches;}
1176 
1177  if(ReclusterAlgo==2){
1178  fShapesVar[20]=SymParam;
1179  fShapesVar[21]=DeltaR;
1180  fShapesVar[22]=GroomedPt;
1181  fShapesVar[23]=NGroomedBranches;}}
1182  if(beta==1){
1183  fShapesVar[24]=SymParam;
1184  fShapesVar[25]=DeltaR;
1185  fShapesVar[26]=GroomedPt;
1186  fShapesVar[27]=NGroomedBranches;}
1187 
1188  if(beta==2){
1189  fShapesVar[28]=SymParam;
1190  fShapesVar[29]=DeltaR;
1191  fShapesVar[30]=GroomedPt;
1192  fShapesVar[31]=NGroomedBranches;}
1193 
1194 
1195  return;
1196 
1197 
1198 }
void SetRadius(Double_t val)
Float_t GetSigma2(AliEmcalJet *jet, Int_t jetContNb=0)
Double_t GetFirstOrderSubtractedAngularity() const
Float_t GetJetMass(AliEmcalJet *jet, Int_t jetContNb=0)
double Double_t
Definition: External.C:58
void SetJetMinPt(Double_t val)
Double_t GetSecondOrderSubtractedSigma2() const
Definition: External.C:236
Float_t GetPartonEta6() const
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t GetPartonEta7() const
Double_t GetSecondOrderSubtractedConstituent() const
Double_t Eta() const
Definition: AliEmcalJet.h:114
ClassImp(AliAnalysisTaskEmcalJetShapesMC) AliAnalysisTaskEmcalJetShapesMC
Double_t Py() const
Definition: AliEmcalJet.h:100
Double_t Phi() const
Definition: AliEmcalJet.h:110
Float_t GetPythiaEventWeight() const
Float_t GetPartonPhi7() const
Double_t Nsubjettiness(AliEmcalJet *pJet, AliJetContainer *pContJets, Double_t dVtx[3], Int_t N, Int_t Algorithm, Double_t Radius, Double_t Beta, Int_t Option=0, Int_t Measure=0, Double_t Beta_SD=0, Double_t ZCut=0.1)
Float_t CoreFrac(AliEmcalJet *jet, Int_t jetContNb=0)
Float_t GetJetCircularity(AliEmcalJet *jet, Int_t jetContNb=0)
Double_t E() const
Definition: AliEmcalJet.h:112
Float_t GetJetpTD(AliEmcalJet *jet, Int_t jetContNb=0)
Int_t GetPartonFlag7() const
Container for particles within the EMCAL framework.
Float_t GetPartonPhi6() const
Int_t TrackAt(Int_t idx) const
Definition: AliEmcalJet.h:153
UShort_t GetNumberOfTracks() const
Definition: AliEmcalJet.h:132
Double_t Px() const
Definition: AliEmcalJet.h:99
Float_t GetJetCoreFrac(AliEmcalJet *jet, Int_t jetContNb=0)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Double_t fjNSubJettiness(AliEmcalJet *Jet, Int_t JetContNb, Int_t N, Int_t Algorithm, Double_t Beta, Int_t Option)
Int_t GetPartonFlag6() const
AliParticleContainer * GetParticleContainer() const
Double_t GetFirstOrderSubtractedConstituent() const
void SetRecombSheme(Int_t val)
void SetJetAlgorithm(Int_t val)
int Int_t
Definition: External.C:63
Double_t Eta() const
Double_t Pt() const
unsigned int UInt_t
Definition: External.C:33
Float_t GetJetNumberOfConstituents(AliEmcalJet *jet, Int_t jetContNb=0)
float Float_t
Definition: External.C:68
Task to store and correlate the MC shapes.
TTree * fTreeObservableTagging
! Tree with tagging variables subtracted MC or true MC or raw
Double_t RelativePhi(Double_t mphi, Double_t vphi)
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.
Double_t GetSecondOrderSubtractedAngularity() const
Double_t GetSubjetFraction(AliEmcalJet *Jet, Int_t JetContNb, Double_t JetRadius, AliEmcalJetFinder *Reclusterer)
void SoftDrop(AliEmcalJet *fJet, AliJetContainer *fJetCont, double zcut, double beta, Int_t ReclusterAlgo)
Definition: Option.C:68
AliEmcalJetFinder * Recluster(AliEmcalJet *Jet, Int_t JetContNb, Double_t JetRadius, Double_t SubJetRadius, Double_t SubJetMinPt, Int_t Algorithm, const char *Name)
Double_t fCent
!event centrality
Float_t PTD(AliEmcalJet *jet, Int_t jetContNb=0)
void SetJetMaxEta(Double_t val)
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)
Float_t GetJetAngularity(AliEmcalJet *jet, Int_t jetContNb=0)
Int_t SelectTrigger(Float_t minpT, Float_t maxpT)
AliEmcalJet * GetJet(Int_t index)
Double_t Pt() const
Definition: AliEmcalJet.h:102
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
Definition: AliEmcalList.h:25
Float_t Angularity(AliEmcalJet *jet, Int_t jetContNb=0)
Bool_t FillHistograms()
Function filling histograms.
Double_t GetFirstOrderSubtractedCircularity() const
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliEmcalList * fOutput
!output list
Double_t SubJetOrdering(AliEmcalJet *Jet, AliEmcalJetFinder *Reclusterer, Int_t N, Int_t Type, Bool_t Index)
void NTValues(AliEmcalJet *jet, Int_t jetContNb, Float_t *nTFractions)
const Int_t nVar
Double_t GetSecondOrderSubtractedCircularity() const
Double_t DeltaR(const AliVParticle *part1, const AliVParticle *part2)
Float_t GetJetLeSub(AliEmcalJet *jet, Int_t jetContNb=0)
Store some informaion about a Pythia eventThis class is used to store some information about a Pythia...
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:44
const AliEmcalPythiaInfo * GetPythiaInfo() const
unsigned short UShort_t
Definition: External.C:28
Double_t Pz() const
Definition: AliEmcalJet.h:101
Float_t Circularity(AliEmcalJet *jet, Int_t jetContNb=0)
Declaration of class AliEmcalPythiaInfo.
const char Option_t
Definition: External.C:48
void UserCreateOutputObjects()
Main initialization function on the worker.
Double_t GetFirstOrderSubtractedSigma2() const
Float_t Sigma2(AliEmcalJet *jet, Int_t jetContNb=0)
bool Bool_t
Definition: External.C:53
AliEmcalJetShapeProperties * GetShapeProperties() const
Definition: AliEmcalJet.h:255
Float_t GetPartonPt7() const
Float_t LeSub(AliEmcalJet *jet, Int_t jetContNb=0)
Double_t M() const
Definition: AliEmcalJet.h:113
Container for jet within the EMCAL jet framework.
std::vector< int > GetPtSortedTrackConstituentIndexes(TClonesArray *tracks) const
Float_t GetPartonPt6() const