6 #include <TClonesArray.h> 10 #include <THnSparse.h> 13 #include <TLorentzVector.h> 19 #include <AliAnalysisDataSlot.h> 20 #include <AliAnalysisDataContainer.h> 22 #include "TMatrixDSym.h" 23 #include "TMatrixDSymEigen.h" 26 #include "AliVCluster.h" 27 #include "AliVTrack.h" 32 #include "AliMCEvent.h" 33 #include "AliGenPythiaEventHeader.h" 34 #include "AliAODMCHeader.h" 35 #include "AliMCEvent.h" 36 #include "AliAnalysisManager.h" 43 #include "AliAODEvent.h" 55 fMinFractionShared(0),
56 fJetShapeType(kGenShapes),
58 fJetSelection(kInclusive),
71 fOptionalPartonInfo(0),
74 fangWindowRecoil(0.6),
84 fOneConstSelectOn(kFALSE),
96 fHLundIterative_ktaxis(0x0),
97 fHLundIterativeInject(0x0),
99 fTreeObservableTagging(0x0),
107 fAddMedScatPtFrac(1),
112 for(
Int_t i=0;i<13;i++){
114 SetMakeGeneralHistograms(kTRUE);
115 DefineOutput(1, TList::Class());
116 DefineOutput(2, TTree::Class());
123 fMinFractionShared(0),
124 fJetShapeType(kGenShapes),
125 fJetShapeSub(kNoSub),
126 fJetSelection(kInclusive),
127 fPtThreshold(-9999.),
135 fAdditionalTracks(0),
137 fOptionalPartonInfo(0),
140 fangWindowRecoil(0.6),
147 fCentSelectOn(kTRUE),
150 fOneConstSelectOn(kFALSE),
161 fHLundIterative(0x0),
162 fHLundIterative_ktaxis(0x0),
163 fHLundIterativeInject(0x0),
165 fTreeObservableTagging(0x0),
173 fAddMedScatPtFrac(1),
179 for(
Int_t i=0;i<13;i++){
184 DefineOutput(1, TList::Class());
185 DefineOutput(2, TTree::Class());
212 Bool_t oldStatus = TH1::AddDirectoryStatus();
213 TH1::AddDirectory(oldStatus);
219 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
222 const Int_t nVar = 13;
226 fShapesVarNames[0] =
"partonCode";
227 fShapesVarNames[1] =
"ptJet";
228 fShapesVarNames[2] =
"ptDJet";
229 fShapesVarNames[3] =
"mJet";
230 fShapesVarNames[4] =
"nbOfConst";
231 fShapesVarNames[5] =
"angularity";
232 fShapesVarNames[6] =
"nitersd";
233 fShapesVarNames[7] =
"niterall";
234 fShapesVarNames[8] =
"weightPythia";
241 fShapesVarNames[9] =
"SDSymm";
242 fShapesVarNames[10] =
"scaledptJet";
243 fShapesVarNames[11] =
"zg";
244 fShapesVarNames[12] =
"rg";
300 for(
Int_t ivar=0; ivar < nVar; ivar++){
301 cout<<
"looping over variables"<<endl;
306 fPhiJetCorr6=
new TH2F(
"fPhiJetCorr6",
"fPhiJetCorr6", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
308 fEtaJetCorr6=
new TH2F(
"fEtaJetCorr6",
"fEtaJetCorr6", 50, -1.5, 1.5, 50, -1.5, 1.5);
311 fPhiJetCorr7=
new TH2F(
"fPhiJetCorr7",
"fPhiJetCorr7", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
313 fEtaJetCorr7=
new TH2F(
"fEtaJetCorr7",
"fEtaJetCorr7", 50, -1.5, 1.5, 50, -1.5, 1.5);
316 fPtJetCorr=
new TH2F(
"fPtJetCorr",
"fPtJetCorr", 100, 0, 200, 100, 0, 200);
318 fPtJet=
new TH1F(
"fPtJet",
"fPtJet", 100, 0, 200);
321 fhpTjetpT=
new TH2F(
"fhpTjetpT",
"fhpTjetpT", 200, 0, 200, 200, 0, 200);
323 fhPt=
new TH1F(
"fhPt",
"fhPt", 200, 0, 200);
325 fhPhi=
new TH1F(
"fhPhi",
"fhPhi", 100, -TMath::Pi(), TMath::Pi());
331 const Int_t dimSpec = 6;
332 const Int_t nBinsSpec[6] = {50,100,60,3,22,10};
333 const Double_t lowBinSpec[6] = {0.9,-10,0.0,0.0,0.0,0.0};
334 const Double_t hiBinSpec[6] = {5.0,2.0,600.0,3.0,22.0,10.0};
336 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,partonFlavor,depth]",
337 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
339 const Int_t nBinsSpec_ktaxis[6] = {50,100,60,3,22,10};
340 const Double_t lowBinSpec_ktaxis[6] = {0.9,-4.0,0.0,0.0,0.0,0.0};
341 const Double_t hiBinSpec_ktaxis[6] = {5.0,8.0,600.0,3.0,22.0,10.0};
343 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,partonFlavor,depth]",
344 dimSpec,nBinsSpec_ktaxis,lowBinSpec_ktaxis,hiBinSpec_ktaxis);
349 const Int_t dimSpecb = 4;
350 const Int_t nBinsSpecb[4] = {50,50,20,20};
351 const Double_t lowBinSpecb[4] = {0.0,-10, 0,0};
352 const Double_t hiBinSpecb[4] = {5.0, 0,200,200};
354 "LundIterativePlotInject [log(1/theta),log(z*theta),pTjet,algo]",
355 dimSpecb,nBinsSpecb,lowBinSpecb,hiBinSpecb);
359 fNbOfConstvspT=
new TH2F(
"fNbOfConstvspT",
"fNbOfConstvspT", 100, 0, 100, 200, 0, 200);
368 delete [] fShapesVarNames;
393 AliAODTrack *triggerHadron = 0x0;
400 if (triggerHadronLabel==-99999) {
406 TClonesArray *trackArrayAn = partContAn->GetArray();
407 triggerHadron =
static_cast<AliAODTrack*
>(trackArrayAn->At(triggerHadronLabel));
409 if (!triggerHadron) {
420 fhPt->Fill(triggerHadron->Pt());
425 jetCont->ResetCurrentID();
469 Float_t dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
479 dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
491 ptSubtracted= jet1->
Pt();
547 AliVParticle *vp1 = 0x0;
552 Printf(
"AliVParticle associated to constituent not found");
557 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
559 num=num+vp1->Pt()*dr;
585 AliVParticle *vp1 = 0x0;
590 Printf(
"AliVParticle associated to constituent not found");
594 num=num+vp1->Pt()*vp1->Pt();
597 return TMath::Sqrt(num)/den;
607 return PTD(jet, jetContNb);
628 TVector3 ppJ1(pxjet, pyjet, pzjet);
629 TVector3 ppJ3(- pxjet* pzjet, - pyjet * pzjet, pxjet * pxjet + pyjet * pyjet);
631 TVector3 ppJ2(-pyjet, pxjet, 0);
633 AliVParticle *vp1 = 0x0;
638 Printf(
"AliVParticle associated to constituent not found");
642 TVector3 pp(vp1->Px(), vp1->Py(), vp1->Pz());
645 TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
646 TVector3 pPerp = pp - pLong;
649 Float_t ppjX = pPerp.Dot(ppJ2);
650 Float_t ppjY = pPerp.Dot(ppJ3);
651 Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
652 if(ppjT<=0)
return 0;
654 mxx += (ppjX * ppjX / ppjT);
655 myy += (ppjY * ppjY / ppjT);
656 mxy += (ppjX * ppjY / ppjT);
661 if(sump2==0)
return 0;
663 Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
664 TMatrixDSym m0(2,ele);
667 TMatrixDSymEigen m(m0);
669 TMatrixD evecm = m.GetEigenVectors();
670 eval = m.GetEigenValues();
674 if (eval[0] < eval[1]) jev = 1;
677 evec0 = TMatrixDColumn(evecm, jev);
680 TVector2 evec(compx, compy);
682 if(jev==1) circ=2*eval[0];
683 if(jev==0) circ=2*eval[1];
714 AliVParticle *vp1 = 0x0;
715 AliVParticle *vp2 = 0x0;
716 std::vector<int> ordindex;
721 if(ordindex.size()<2)
return -1;
725 Printf(
"AliVParticle associated to Leading constituent not found");
731 Printf(
"AliVParticle associated to Subleading constituent not found");
751 return LeSub(jet, jetContNb);
782 if(Reclusterer->AliEmcalJetFinder::Filter(Jet, JetCont, dVtx)){;}
796 Double_t SubJetiness_Denominator = 0;
800 if(Index==-999)
return -2;
801 SubJetiness_Numerator=(Reclusterer->
GetJet(Index)->
Pt());
802 SubJetiness_Denominator=Jet->
Pt();
803 return SubJetiness_Numerator/SubJetiness_Denominator;
815 AliVParticle *vp1 = 0x0;
820 Printf(
"AliVParticle associated to constituent not found");
825 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
830 return num/jet->
Pt();
855 Int_t ArraySize =N+1;
858 for (
Int_t i=0; i<ArraySize; i++){
859 JetSorter->SetAt(0,i);
861 for (
Int_t i=0; i<ArraySize; i++){
862 JetIndexSorter->SetAt(0,i);
866 SubJet=Reclusterer->
GetJet(i);
867 if (Type==0) SortingVariable=SubJet->
Pt();
868 else if (Type==1) SortingVariable=SubJet->
E();
869 else if (Type==2) SortingVariable=SubJet->
M();
870 for (
Int_t j=0; j<N; j++){
871 if (SortingVariable>JetSorter->GetAt(j)){
872 for (
Int_t k=N-1; k>=j; k--){
873 JetSorter->SetAt(JetSorter->GetAt(k),k+1);
874 JetIndexSorter->SetAt(JetIndexSorter->GetAt(k),k+1);
876 JetSorter->SetAt(SortingVariable,j);
877 JetIndexSorter->SetAt(i,j);
882 if (!Index)
return JetSorter->GetAt(N-1);
883 else return JetIndexSorter->GetAt(N-1);
908 AliVParticle *vp1 = 0x0;
913 Printf(
"AliVParticle associated to constituent not found");
921 mxx += ppt*ppt*deta*deta;
922 myy += ppt*ppt*dphi*dphi;
923 mxy -= ppt*ppt*deta*TMath::Abs(dphi);
929 if(sump2==0)
return 0;
931 Double_t ele[4] = {mxx , mxy , mxy , myy };
932 TMatrixDSym m0(2,ele);
935 TMatrixDSymEigen m(m0);
937 TMatrixD evecm = m.GetEigenVectors();
938 eval = m.GetEigenValues();
942 if (eval[0] < eval[1]) jev = 1;
945 evec0 = TMatrixDColumn(evecm, jev);
948 TVector2 evec(compx, compy);
950 if(jev==1) sig=TMath::Sqrt(TMath::Abs(eval[0])/sump2);
951 if(jev==0) sig=TMath::Sqrt(TMath::Abs(eval[1])/sump2);
965 return Sigma2(jet, jetContNb);
979 AliVParticle *vp1 = 0x0;
980 std::vector<int> ordindex;
990 Printf(
"AliVParticle associated to Leading constituent not found");
994 if (nTFractions[0] <= 0.7*ptJet){
995 nTFractions[0] += vp1->Pt();
999 if (nTFractions[2] <= 0.8*ptJet){
1000 nTFractions[2] += vp1->Pt();
1004 if (nTFractions[4] <= 0.9*ptJet){
1005 nTFractions[4] += vp1->Pt();
1009 if (nTFractions[6] <= 0.95*ptJet){
1010 nTFractions[6] += vp1->Pt();
1048 return JetFinder->
Nsubjettiness(Jet,JetCont,dVtx,N,Algorithm,0.2,Beta,Option,0,Beta_SD,ZCut,SoftDropOn);
1060 TClonesArray *tracksArray = partCont->GetArray();
1062 if(!partCont || !tracksArray)
return -99999;
1063 AliAODTrack *track = 0x0;
1068 Int_t triggers[100];
1069 for (
Int_t iTrigger=0; iTrigger<100; iTrigger++) triggers[iTrigger] = 0;
1072 for(
Int_t iTrack=0; iTrack <= tracksArray->GetEntriesFast(); iTrack++){
1077 if (!emcPart)
continue;
1078 if(TMath::Abs(emcPart->
Eta())>0.9)
continue;
1079 if (emcPart->
Pt()<0.15)
continue;
1081 if ((emcPart->
Pt() >= minpT) && (emcPart->
Pt()< maxpT)) {
1082 trackList->Add(emcPart);
1083 triggers[iTT] = iTrack;
1088 track =
static_cast<AliAODTrack*
>(tracksArray->At(iTrack));
1089 if (!track)
continue;
1090 if(TMath::Abs(track->Eta())>0.9)
continue;
1091 if (track->Pt()<0.15)
continue;
1092 if (!(track->TestFilterBit(768)))
continue;
1094 if ((track->Pt() >= minpT) && (track->Pt()< maxpT)) {
1095 trackList->Add(track);
1096 triggers[iTT] = iTrack;
1103 if (iTT == 0)
return -99999;
1104 Int_t nbRn = 0, index = 0 ;
1105 TRandom3* random =
new TRandom3(0);
1106 nbRn = random->Integer(iTT);
1108 index = triggers[nbRn];
1117 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1118 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1119 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1120 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1121 double dphi = mphi-vphi;
1122 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1123 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1144 AliInfo(
"Terminate");
1145 AliAnalysisTaskSE::Terminate();
1149 AliError(
"fOutput not available");
1155 Printf(
"ERROR: fTreeObservableTagging not available");
1164 std::vector<fastjet::PseudoJet> fInputVectors;
1165 fInputVectors.clear();
1166 Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
1167 fastjet::PseudoJet PseudoTracks;
1168 fastjet::PseudoJet MyJet;
1169 fastjet::PseudoJet PseudoTracksCMS;
1176 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1177 if (!fTrk)
continue;
1178 JetInvMass += fTrk->M();
1180 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1181 TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
1182 TrackEnergy += fTrk->E();
1183 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
1184 PseudJetInvMass += PseudoTracks.m();
1185 fInputVectors.push_back(PseudoTracks);
1192 MyJet.reset(fJet->
Px(),fJet->
Py(),fJet->
Pz(),fJet->
E());
1200 Double_t ppx,ppy,ppz,kTscale,lim2o,lim1o;
1205 fTf1Kt=
new TF1(
"fTf1Kt",
"1/(x*x*x*x)",lim2,lim1);
1206 kTscale=
fTf1Kt->GetRandom();
1212 lim1o=kTscale/TMath::Sin(0.1);
1213 fTf1Omega=
new TF1(
"fTf1Omega",
"1/x",lim2o,lim1o);
1217 Double_t pptheta=TMath::ASin(sinpptheta);
1221 PseudoTracksCMS.reset(kTscale/TMath::Sqrt(2),kTscale/TMath::Sqrt(2),omega*TMath::Cos(pptheta),omega);
1223 fastjet::PseudoJet PseudoTracksLab=PseudoTracksCMS.boost(MyJet);
1225 fInputVectors.push_back(PseudoTracksLab);
1227 zeta=omega/fJet->
E();
1241 fastjet::JetDefinition fJetDef(fastjet::antikt_algorithm,
fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1242 fastjet::contrib::Recluster *recluster;
1244 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
1245 std::vector<fastjet::PseudoJet> fOutputJets;
1246 fOutputJets.clear();
1247 fOutputJets=fClustSeqSA.inclusive_jets(0);
1251 fastjet::contrib::SoftDrop softdrop(beta, zcut);
1253 softdrop.set_verbose_structure(kTRUE);
1254 fastjet::JetAlgorithm jetalgo(fastjet::cambridge_algorithm);
1255 if(ReclusterAlgo==2) jetalgo=fastjet::antikt_algorithm;
1256 if(ReclusterAlgo==1) jetalgo=fastjet::kt_algorithm;
1257 if(ReclusterAlgo==0) jetalgo=fastjet::cambridge_algorithm;
1259 recluster =
new fastjet::contrib::Recluster(jetalgo,1,
true);
1260 softdrop.set_reclustering(
true,recluster);
1261 fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
1265 Int_t NGroomedBranches;
1266 SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
1267 Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
1268 DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
1269 NGroomedBranches=finaljet.structure_of<fastjet::contrib::SoftDrop>().dropped_count();
1270 GroomedPt=finaljet.perp();
1271 GroomedMass=finaljet.m();
1330 }
catch (fastjet::Error) {
1331 AliError(
" [w] FJ Exception caught.");
1338 if(recluster) {
delete recluster; recluster = NULL; }
1354 std::vector<fastjet::PseudoJet> fInputVectors;
1355 fInputVectors.clear();
1356 fastjet::PseudoJet PseudoTracks;
1357 fastjet::PseudoJet PseudoTracksLab;
1359 double lnpt_relinject=0;
1362 double zinject,angleinject,pptheta,sinpptheta,omega,omega2,angle2;
1364 Float_t pTscale=0., phiscale=0., thetascale=0., pXscale=0., pYscale=0., pZscale=0., pscale=0.;
1367 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1368 if (!fTrk)
continue;
1370 pTscale =
xfraction*sqrt(pow(fTrk->Px(),2)+pow(fTrk->Py(),2));
1371 phiscale = fTrk->Phi();
1372 thetascale = 2.*TMath::ATan(TMath::Exp(-1.*(fTrk->Eta())));
1373 pXscale = pTscale * TMath::Cos(phiscale);
1374 pYscale = pTscale * TMath::Sin(phiscale);
1375 pZscale = pTscale/TMath::Tan(thetascale);
1376 pscale = TMath::Sqrt(pTscale*pTscale+pZscale*pZscale);
1377 PseudoTracks.reset(pXscale, pYscale, pZscale, pscale);
1379 else PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1380 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
1381 fInputVectors.push_back(PseudoTracks);
1399 Double_t ppx,ppy,ppz,SoftkTscale,lim2o,lim1o;
1402 fTf1SoftKt=
new TF1(
"fTf1SoftKt",
"1/(x)",lim1,lim2);
1406 lim1o=SoftkTscale/TMath::Sin(0.1);
1409 sinpptheta=SoftkTscale/omega;
1410 pptheta=TMath::ASin(sinpptheta);
1413 TLorentzVector pTrackCMS(SoftkTscale/TMath::Sqrt(2),SoftkTscale/TMath::Sqrt(2),omega*TMath::Cos(pptheta),omega);
1414 TVector3 MyJet(fJet->
Px(),fJet->
Py(),fJet->
Pz());
1415 TVector3 direction = MyJet.Unit();
1417 pTrackCMS.RotateUz(direction);
1420 PseudoTracksLab.reset(pTrackCMS.Px(),pTrackCMS.Py(),pTrackCMS.Pz(),pTrackCMS.E());
1424 omega2=PseudoTracksLab.perp();
1425 angle2=pTrackCMS.Angle(MyJet);
1427 fInputVectors.push_back(PseudoTracksLab);
1441 Double_t ppx,ppy,ppz,kTscale,lim2o,lim1o;
1446 fTf1Kt=
new TF1(
"fTf1Kt",
"1/(x*x*x*x)",lim2,lim1);
1447 kTscale=
fTf1Kt->GetRandom();
1453 lim1o=kTscale/TMath::Sin(0.1);
1454 fTf1Omega=
new TF1(
"fTf1Omega",
"1/x",lim2o,lim1o);
1456 sinpptheta=kTscale/omega;
1457 pptheta=TMath::ASin(sinpptheta);
1461 TLorentzVector pTrackCMS(kTscale/TMath::Sqrt(2),kTscale/TMath::Sqrt(2),omega*TMath::Cos(pptheta),omega);
1462 TVector3 MyJet(fJet->
Px(),fJet->
Py(),fJet->
Pz());
1463 TVector3 direction = MyJet.Unit();
1465 pTrackCMS.RotateUz(direction);
1468 PseudoTracksLab.reset(pTrackCMS.Px(),pTrackCMS.Py(),pTrackCMS.Pz(),pTrackCMS.E());
1472 omega2=PseudoTracksLab.perp();
1473 angle2=pTrackCMS.Angle(MyJet);
1475 fInputVectors.push_back(PseudoTracksLab);
1482 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
1483 if(ReclusterAlgo==0){ xflagalgo=0.5;
1484 jetalgo=fastjet::kt_algorithm ;}
1486 if(ReclusterAlgo==1){ xflagalgo=1.5;
1487 jetalgo=fastjet::cambridge_algorithm;}
1488 if(ReclusterAlgo==2){ xflagalgo=2.5;
1489 jetalgo=fastjet::antikt_algorithm;}
1491 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1494 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
1495 std::vector<fastjet::PseudoJet> fOutputJets;
1496 fOutputJets.clear();
1497 fOutputJets=fClustSeqSA.inclusive_jets(0);
1499 fastjet::PseudoJet jj;
1500 fastjet::PseudoJet j1;
1501 fastjet::PseudoJet j2;
1507 while(jj.has_parents(j1,j2)){
1509 if(j1.perp() < j2.perp())
swap(j1,j2);
1510 double delta_R=j1.delta_R(j2);
1511 double z=j2.perp()/(j1.perp()+j2.perp());
1512 double y =log(1.0/delta_R);
1513 double lnpt_rel=log(z*delta_R);
1514 double lnkt=log(jj.perp()*z*delta_R);
1520 if(nsd==1 && ReclusterAlgo==1)
fShapesVar[9]=z;
1521 Double_t LundEntries[6] = {y,lnpt_rel,fOutputJets[0].perp(),xflagalgo,partonFlavor,ndepth};
1522 Double_t LundEntries_kt[6] = {y,lnkt,fOutputJets[0].perp(),xflagalgo,partonFlavor,ndepth};
1528 if(ReclusterAlgo==1){
1532 if(fAdditionalTracks>0 && xflagAdded>0){
1533 zinject=omega2/fOutputJets[0].perp();
1536 yinject =log(1.0/angleinject);
1537 lnpt_relinject=log(zinject*angleinject);
1538 Double_t LundEntriesInject[4] = {yinject,lnpt_relinject,fOutputJets[0].perp(),fJet->
Pt()};
1542 }
catch (fastjet::Error) {
1543 AliError(
" [w] FJ Exception caught.");
1563 const char *ntracksPartLevel,
1565 const char *CentEst,
1570 const char *rhoName,
1582 ::Error(
"AliAnalysisTaskEmcalJetShapesMC",
"No analysis manager found.");
1586 ismc = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
1590 if (!mgr->GetInputEventHandler())
1592 ::Error(
"AddTaskJetShapesMC",
"This task requires an input event handler");
1596 TString wagonName1 = Form(
"JetShapesMC_%s_Histos%s%s",njetsBase,trigClass.Data(),tag.Data());
1597 TString wagonName2 = Form(
"JetShapesMC_%s_Tree%s%s",njetsBase,trigClass.Data(),tag.Data());
1603 task->SetJetShapeType(jetShapeType);
1604 task->SetJetShapeSub(jetShapeSub);
1605 task->SetJetSelection(jetSelection);
1606 task->SetDerivativeSubtractionOrder(derivSubtrOrder);
1607 task->SetJetRadius(jetradius);
1608 task->SetSubjetRadius(subjetradius);
1619 jetContBase = task->AddJetContainer(njetsBase,strType,jetradius);
1627 task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
1628 task->SetCentralityEstimator(CentEst);
1629 task->SelectCollisionCandidates(pSel);
1630 task->SetUseAliAnaUtils(kFALSE);
1635 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );
1638 TString contName1(wagonName1);
1639 TString contName2(wagonName2);
1642 contName1 +=
"_GenShapes";
1643 contName2 +=
"_GenShapes";
1646 switch (jetShapeSub) {
1649 contName1 +=
"_NoSub";
1650 contName2 +=
"_NoSub";
1654 contName1 +=
"_ConstSub";
1655 contName2 +=
"_ConstSub";
1659 contName1 +=
"_DerivSub";
1660 contName2 +=
"_DerivSub";
1666 switch (jetSelection) {
1668 contName1 +=
"_Incl";
1669 contName2 +=
"_Incl";
1674 TString recoilTriggerString = Form(
"_Recoil_%.0f_%0.f", minpTHTrigger, maxpTHTrigger);
1675 contName1 += recoilTriggerString;
1676 contName2 += recoilTriggerString;
1683 TString outputfile = Form(
"%s",AliAnalysisManager::GetCommonFileName());
1686 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contName1.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
1687 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contName2.Data(),TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
1689 mgr->ConnectOutput(task,1,coutput1);
1690 mgr->ConnectOutput(task,2,coutput2);
Int_t fOptionalPartonInfo
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)
void SetJetMinPt(Double_t val)
Double_t GetSecondOrderSubtractedSigma2() const
Float_t GetPartonEta6() const
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t GetPartonEta7() const
Double_t GetSecondOrderSubtractedConstituent() const
Double_t FjNSubJettiness(AliEmcalJet *Jet, Int_t JetContNb, Int_t N, Int_t Algorithm, Double_t Beta, Int_t Option, Double_t Beta_SD=0.0, Double_t ZCut=0.1, Int_t SoftDropOn=0)
Float_t GetPythiaEventWeight() const
void RecursiveParents(AliEmcalJet *fJet, AliJetContainer *fJetCont, Int_t ReclusterAlgo, Float_t PartonFlavor)
Float_t GetPartonPhi7() const
Double_t GetSecondOrderSubtractedpTD() const
Bool_t RetrieveEventObjects()
void SetPercAreaCut(Float_t p)
Double_t GetFirstOrderSubtractedLeSub() const
Float_t CoreFrac(AliEmcalJet *jet, Int_t jetContNb=0)
Float_t GetJetCircularity(AliEmcalJet *jet, Int_t jetContNb=0)
THnSparse * fHLundIterative_ktaxis
TF1 * fTf1SoftOmega
to generate kT according to BDMS tail
THnSparse * fHLundIterativeInject
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
Double_t GetFirstOrderSubtractedpTD() const
UShort_t GetNumberOfTracks() const
Float_t GetJetCoreFrac(AliEmcalJet *jet, Int_t jetContNb=0)
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, Int_t SoftDropOn=0)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Double_t GetSecondOrderSubtractedLeSub() const
Int_t GetPartonFlag6() const
void SetRhoName(const char *n)
AliParticleContainer * GetParticleContainer() const
Double_t GetFirstOrderSubtractedConstituent() const
void SetRecombSheme(Int_t val)
static AliAnalysisTaskEmcalJetShapesMC * AddTaskJetShapesMC(const char *njetsBase, const Double_t jetradius, const Double_t subjetradius, const char *ntracksPartLevel, const char *type, const char *CentEst, Int_t pSel, TString trigClass="", TString kEmcalTriggers="", TString tag="", const char *rhoName="", AliAnalysisTaskEmcalJetShapesMC::JetShapeType jetShapeType=AliAnalysisTaskEmcalJetShapesMC::kGenShapes, AliAnalysisTaskEmcalJetShapesMC::JetShapeSub jetShapeSub=AliAnalysisTaskEmcalJetShapesMC::kNoSub, AliAnalysisTaskEmcalJetShapesMC::JetSelectionType jetSelection=AliAnalysisTaskEmcalJetShapesMC::kInclusive, Float_t minpTHTrigger=0., Float_t maxpTHTrigger=0., AliAnalysisTaskEmcalJetShapesMC::DerivSubtrOrder derivSubtrOrder=AliAnalysisTaskEmcalJetShapesMC::kSecondOrder)
void SetJetAlgorithm(Int_t val)
Float_t GetJetNumberOfConstituents(AliEmcalJet *jet, Int_t jetContNb=0)
Float_t fqhat
Random number generator.
Task to store and correlate the MC shapes.
TF1 * fTf1SoftKt
to generate omega for soft background
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)
AliAnalysisTaskEmcalJetShapesMC()
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
Double_t GetSecondOrderSubtracted() const
Float_t PTD(AliEmcalJet *jet, Int_t jetContNb=0)
void SetJetMaxEta(Double_t val)
void Terminate(Option_t *option)
AliEmcalJet * GetNextAcceptJet()
TF1 * fTf1Kt
to generate omega according to BDMPS tail
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)
void ConnectParticleContainer(AliParticleContainer *c)
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
Float_t Angularity(AliEmcalJet *jet, Int_t jetContNb=0)
Bool_t FillHistograms()
Function filling histograms.
Double_t GetFirstOrderSubtractedCircularity() const
JetSelectionType fJetSelection
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliEmcalList * fOutput
!output list
THnSparse * fHLundIterative
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)
Double_t GetSecondOrderSubtractedCircularity() const
Double_t DeltaR(const AliVParticle *part1, const AliVParticle *part2)
Float_t GetJetLeSub(AliEmcalJet *jet, Int_t jetContNb=0)
void UserCreateOutputObjects()
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.
const AliEmcalPythiaInfo * GetPythiaInfo() const
Float_t Circularity(AliEmcalJet *jet, Int_t jetContNb=0)
void SoftDrop(AliEmcalJet *fJet, AliJetContainer *fJetCont, Double_t zcut, Double_t beta, Int_t ReclusterAlgo)
Declaration of class AliEmcalPythiaInfo.
virtual ~AliAnalysisTaskEmcalJetShapesMC()
void UserCreateOutputObjects()
Main initialization function on the worker.
Double_t GetFirstOrderSubtractedSigma2() const
Float_t Sigma2(AliEmcalJet *jet, Int_t jetContNb=0)
AliEmcalJetShapeProperties * GetShapeProperties() const
Float_t GetPartonPt7() const
Float_t LeSub(AliEmcalJet *jet, Int_t jetContNb=0)
Double_t GetFirstOrderSubtracted() const
Container for jet within the EMCAL jet framework.
std::vector< int > GetPtSortedTrackConstituentIndexes(TClonesArray *tracks) const
Float_t GetPartonPt6() const