6 #include <TClonesArray.h> 11 #include <THnSparse.h> 14 #include <TLorentzVector.h> 20 #include <AliAnalysisDataSlot.h> 21 #include <AliAnalysisDataContainer.h> 23 #include "TMatrixDSym.h" 24 #include "TMatrixDSymEigen.h" 27 #include "AliVCluster.h" 28 #include "AliVTrack.h" 33 #include "AliMCEvent.h" 34 #include "AliGenPythiaEventHeader.h" 35 #include "AliAODMCHeader.h" 36 #include "AliMCEvent.h" 37 #include "AliAnalysisManager.h" 44 #include "AliAODEvent.h" 46 #include "AliMultSelection.h" 72 fMinFractionShared(0),
75 fJetSelection(kInclusive),
78 fPtMinTriggerHadron(20.),
79 fPtMaxTriggerHadron(50.),
80 fRecoilAngularWindow(0.6),
92 fSharedFractionPtMin(0.5),
107 fhNumberOfJetTracks(0x0),
111 fhGroomedPtvJetPt(0x0),
112 fhDroppedBranches(0x0),
113 fhPtTriggerHadron(0x0),
114 fh2PtTriggerHadronJet(0x0),
115 fhPhiTriggerHadronJet(0x0),
116 fhPhiTriggerHadronEventPlane(0x0),
117 fhPhiTriggerHadronEventPlaneTPC(0x0),
118 fhDetJetPt_Incl(0x0),
119 fhDetJetPt_Matched(0x0),
128 fhJetRadius_Det(0x0),
129 fhJetRadius_True(0x0),
130 fhJetCounter_Det(0x0),
131 fhJetCounter_True(0x0),
132 fhNumberOfJetTracks_Det(0x0),
133 fhNumberOfJetTracks_True(0x0),
135 fhLundIterative(0x0),
136 fhLundIterativeTrue(0x0),
138 fSubMatching(kFALSE),
139 bMinSubjetPt(kFALSE),
148 SetMakeGeneralHistograms(kTRUE);
149 DefineOutput(1, TList::Class());
150 DefineOutput(2, TTree::Class());
157 fMinFractionShared(0),
158 fJetShapeType(
kData),
159 fJetShapeSub(kNoSub),
160 fJetSelection(kInclusive),
161 fPtThreshold(-9999.),
163 fPtMinTriggerHadron(20.),
164 fPtMaxTriggerHadron(50.),
165 fRecoilAngularWindow(0.6),
169 fCentSelectOn(kTRUE),
177 fSharedFractionPtMin(0.5),
184 fNsubMeasure(kFALSE),
192 fhNumberOfJetTracks(0x0),
196 fhGroomedPtvJetPt(0x0),
197 fhDroppedBranches(0x0),
198 fhPtTriggerHadron(0x0),
199 fh2PtTriggerHadronJet(0x0),
200 fhPhiTriggerHadronJet(0x0),
201 fhPhiTriggerHadronEventPlane(0x0),
202 fhPhiTriggerHadronEventPlaneTPC(0x0),
203 fhDetJetPt_Incl(0x0),
204 fhDetJetPt_Matched(0x0),
213 fhJetRadius_Det(0x0),
214 fhJetRadius_True(0x0),
215 fhJetCounter_Det(0x0),
216 fhJetCounter_True(0x0),
217 fhNumberOfJetTracks_Det(0x0),
218 fhNumberOfJetTracks_True(0x0),
220 fhLundIterative(0x0),
221 fhLundIterativeTrue(0x0),
223 fSubMatching(kFALSE),
224 bMinSubjetPt(kFALSE),
232 DefineOutput(1, TList::Class());
233 DefineOutput(2, TTree::Class());
249 Bool_t oldStatus = TH1::AddDirectoryStatus();
250 TH1::AddDirectory(kFALSE);
251 TH1::AddDirectory(oldStatus);
252 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
256 const Int_t nVarMin = 22;
259 fJetInfoVarNames[0] =
"Pt";
260 fJetInfoVarNames[1] =
"Pt_Truth";
261 fJetInfoVarNames[2] =
"SymParam";
262 fJetInfoVarNames[3] =
"SymParam_Truth";
263 fJetInfoVarNames[4] =
"Mass";
264 fJetInfoVarNames[5] =
"Mass_Truth";
265 fJetInfoVarNames[6] =
"SLSubJetMass";
266 fJetInfoVarNames[7] =
"SLSubJetMass_Truth";
267 fJetInfoVarNames[8] =
"LeadingParton";
268 fJetInfoVarNames[9] =
"LeadingParton_Truth";
269 fJetInfoVarNames[10] =
"SLSubJetPt";
270 fJetInfoVarNames[11] =
"SLSubJetPt_Truth";
271 fJetInfoVarNames[12] =
"DelR";
272 fJetInfoVarNames[13] =
"DelR_Truth";
273 fJetInfoVarNames[14] =
"N_SplittingsHard";
274 fJetInfoVarNames[15] =
"N_SplittingsHard_Truth";
275 fJetInfoVarNames[16] =
"Groomed_Jet_Pt";
276 fJetInfoVarNames[17] =
"Groomed_Jet_Pt_Truth";
277 fJetInfoVarNames[18] =
"Groomed_Mass";
278 fJetInfoVarNames[19] =
"Groomed_Mass_Truth";
279 fJetInfoVarNames[20] =
"N_SplittingsAll";
280 fJetInfoVarNames[21] =
"N_SplittingsAll_Truth";
283 for(
Int_t ivar=0; ivar < nVarMin; ivar++){
284 cout<<
"looping over variables"<<endl;
289 fhPtTriggerHadron=
new TH1F(
"fhPtTriggerHadron",
"fhPtTriggerHadron",1500,-0.5,149.5);
293 fhPhiTriggerHadronJet=
new TH1F(
"fhPhiTriggerHadronJet",
"fhPhiTriggerHadronJet",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
295 fhPhiTriggerHadronEventPlane=
new TH1F(
"fhPhiTriggerHadronEventPlane",
"fhPhiTriggerHadronEventPlane",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
297 fhPhiTriggerHadronEventPlaneTPC=
new TH1F(
"fhPhiTriggerHadronEventPlaneTPC",
"fhPhiTriggerHadronEventPlaneTPC",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
307 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",150,-0.5,149.5 );
309 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
313 fhJetMass=
new TH1F(
"fhJetMass",
"Jet Mass", 4000,-0.5, 39.5);
315 fhJetRadius=
new TH1F(
"fhJetRadius",
"Jet Radius", 100, -0.05,0.995);
317 fhNumberOfJetTracks=
new TH1F(
"fhNumberOfJetTracks",
"Number of Tracks within a Jet", 300, -0.5,299.5);
319 fhJetCounter=
new TH1F(
"fhJetCounter",
"Jet Counter", 150, -0.5, 149.5);
321 fhJetArea=
new TH1F(
"fhJetArea",
"Jet Area", 400,-0.5, 1.95);
323 fhTrackPt=
new TH1F(
"fhTrackPt",
"Track Pt",600,-0.5,59.5);
325 fhGroomedPtvJetPt=
new TH2F(
"fhGroomedPtvJetPt",
"Groomed Jet p_{T} v Original Jet p_{T}",150,0,150,150,0,150);
327 fhDroppedBranches=
new TH1F(
"fhDroppedBranches",
"Number of Softdropped branches",50,0,50);
329 fhDetJetPt_Incl=
new TH1F(
"fhDetJetPt_Incl",
"Jet Pt",200,-0.5,199.5 );
334 const Int_t dimSpec = 5;
335 const Int_t nBinsSpec[5] = {50,50,10,3,10};
336 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
337 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
339 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
340 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
345 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
346 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
352 fhJetPt_Det=
new TH1F(
"fhJetPt_Det",
"Jet Pt Detector Level",1500,-0.5,149.5 );
354 fhJetPt_True=
new TH1F(
"fhJetPt_True",
"Jet Pt Particle Level",1500,-0.5,149.5 );
356 fhJetPhi_Det=
new TH1F(
"fhJetPhi_Det",
"Jet Phi Detector Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
358 fhJetPhi_True=
new TH1F(
"fhJetPhi_True",
"Jet Phi Particle Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
364 fhJetMass_Det=
new TH1F(
"fhJetMass_Det",
"Jet Mass Detector Level", 4000,-0.5, 39.5);
366 fhJetMass_True=
new TH1F(
"fhJetMass_True",
"Jet Mass Particle Level", 4000,-0.5, 39.5);
368 fhJetRadius_Det=
new TH1F(
"fhJetRadius_Det",
"Jet Radius Detector Level", 100, -0.05,0.995);
370 fhJetRadius_True=
new TH1F(
"fhJetRadius_True",
"Jet Radius Particle Level", 100, -0.05,0.995);
372 fhNumberOfJetTracks_Det=
new TH1F(
"fhNumberOfJetTracks_Det",
"Number of Tracks within a Jet Detector Level", 300, -0.5,299.5);
374 fhNumberOfJetTracks_True=
new TH1F(
"fhNumberOfJetTracks_True",
"Number of Tracks within a Jet Particle Level", 300, -0.5,299.5);
377 fhJetCounter_Det=
new TH1F(
"fhJetCounter_Det",
"Jet Counter Detector Level", 150, -0.5, 149.5);
379 fhJetCounter_True=
new TH1F(
"fhJetCounter_True",
"Jet Counter Particle Level", 150, -0.5, 149.5);
381 fh2PtRatio=
new TH2F(
"fhPtRatio",
"MC pt for detector level vs particle level jets",1500,-0.5,149.5,1500,-0.5,149.5);
384 const Int_t dimSpec = 5;
385 const Int_t nBinsSpec[5] = {50,50,10,3,10};
386 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
387 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
389 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
390 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
394 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
395 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
418 Error(
"UserExec",
"AOD not available");
434 AliAODTrack *TriggerHadron = 0x0;
438 if (TriggerHadronLabel==-99999)
return 0;
449 TClonesArray *TrackArray = NULL;
450 TClonesArray *TrackArrayMC = NULL;
452 else TrackArray = PartCont->GetArray();
454 else TriggerHadron =
static_cast<AliAODTrack*
>(TrackArray->At(TriggerHadronLabel));
455 if (!TriggerHadron)
return 0;
477 Bool_t EventCounter=kFALSE;
481 JetCont->ResetCurrentID();
485 else JetPt_ForThreshold = Jet1->
Pt();
504 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
505 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
576 Bool_t JetsMatched = kFALSE;
578 JetContHybridS->ResetCurrentID();
579 JetContHybridUS->ResetCurrentID();
580 JetContPythDet->ResetCurrentID();
581 JetContPythTrue->ResetCurrentID();
590 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
591 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
594 JetHybridUS = JetContHybridUS->
GetJet(i);
595 if (!JetHybridUS)
continue;
601 if(JetNumber==-1)
continue;
602 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
611 Printf(
"Unsubtracted embedded jet does not exist, returning");
614 if (!JetPythDet)
continue;
615 UInt_t rejectionReason = 0;
616 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
619 if(!JetPythTrue)
continue;
673 Bool_t JetsMatched=kFALSE;
675 Bool_t EventCounter=kFALSE;
676 Int_t JetCounter_Det=0,JetCounter_True=0;
677 JetContDet->ResetCurrentID();
678 JetContTrue->ResetCurrentID();
692 RecoilDeltaPhi =
RelativePhi(TriggerHadron->Phi(), JetDet->
Phi());
699 JetPhiDet=JetDet->
Phi();
700 if(JetPhiDet < -1*TMath::Pi()) JetPhiDet += (2*TMath::Pi());
701 else if (JetPhiDet > TMath::Pi()) JetPhiDet -= (2*TMath::Pi());
711 JetPhiTrue=JetTrue->
Phi();
712 if(JetPhiTrue < -1*TMath::Pi()) JetPhiTrue += (2*TMath::Pi());
713 else if (JetPhiTrue > TMath::Pi()) JetPhiTrue -= (2*TMath::Pi());
778 Bool_t EventCounter=kFALSE;
782 JetCont->ResetCurrentID();
786 else JetPt_ForThreshold = Jet1->
Pt();
805 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
806 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
858 if(Phi < -1*TMath::Pi()) Phi += (2*TMath::Pi());
859 else if (Phi > TMath::Pi()) Phi -= (2*TMath::Pi());
861 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
862 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
868 if(Phi1 < -1*TMath::Pi()) Phi1 += (2*TMath::Pi());
869 else if (Phi1 > TMath::Pi()) Phi1 -= (2*TMath::Pi());
870 if(Phi2 < -1*TMath::Pi()) Phi2 += (2*TMath::Pi());
871 else if (Phi2 > TMath::Pi()) Phi2 -= (2*TMath::Pi());
873 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
874 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
887 AliVParticle *Particle=0x0;
893 if(!Particle)
continue;
895 Angularity_Numerator=Angularity_Numerator+(Particle->Pt()*TMath::Sqrt(((Particle->Eta()-Jet->
Eta())*(Particle->Eta()-Jet->
Eta()))+(DeltaPhi*
DeltaPhi)));
896 Angularity_Denominator= Angularity_Denominator+Particle->Pt();
898 if(Angularity_Denominator!=0)
return Angularity_Numerator/Angularity_Denominator;
911 AliVParticle *Particle=0x0;
915 if(!Particle)
continue;
916 PTD_Numerator=PTD_Numerator+(Particle->Pt()*Particle->Pt());
917 PTD_Denominator=PTD_Denominator+Particle->Pt();
919 if(PTD_Denominator!=0)
return TMath::Sqrt(PTD_Numerator)/PTD_Denominator;
926 std::vector<fastjet::PseudoJet> fInputVectors;
927 Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
930 Double_t FJTrackEta[9999],FJTrackPhi[9999],FJTrackPt[9999],EmcalJetTrackEta[9999],EmcalJetTrackPhi[9999],EmcalJetTrackPt[9999];
931 UShort_t FJNTracks=0,EmcalJetNTracks=0;
933 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
934 JetInvMass += fTrk->M();
936 fastjet::PseudoJet PseudoTracks(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
937 TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
938 TrackEnergy += fTrk->E();
939 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
940 PseudJetInvMass += PseudoTracks.m();
941 fInputVectors.push_back(PseudoTracks);
942 EmcalJetTrackEta[i]=fTrk->Eta();
943 EmcalJetTrackPhi[i]=fTrk->Phi();
944 EmcalJetTrackPt[i]=fTrk->Pt();
947 fastjet::JetDefinition *fJetDef;
948 fastjet::ClusterSequence *fClustSeqSA;
951 fJetDef =
new fastjet::JetDefinition(fastjet::antikt_algorithm,
fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
954 fClustSeqSA =
new fastjet::ClusterSequence(fInputVectors, *fJetDef);
955 }
catch (fastjet::Error) {
956 AliError(
" [w] FJ Exception caught.");
960 std::vector<fastjet::PseudoJet> fOutputJets;
962 fOutputJets=fClustSeqSA->inclusive_jets(0);
964 std::vector<fastjet::PseudoJet> jet_constituents = fOutputJets[0].constituents();
965 Float_t NSubjettinessResult[3], NSubBeta = 1, R0=0.4;
966 std::vector<fastjet::PseudoJet> Subjet_Axes;
967 fastjet::PseudoJet SubJet1_Axis,SubJet2_Axis;
971 for(
Int_t j=1; j<3; j++){
972 if(jet_constituents.size() < j){
984 fastjet::contrib::Nsubjettiness nSub(j,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(NSubBeta,R0));
985 NSubjettinessResult[j] = nSub.result(fOutputJets[0]);
987 Subjet_Axes = nSub.currentAxes();
988 SubJet1_Axis = Subjet_Axes[0];
989 SubJet2_Axis = Subjet_Axes[1];
991 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
992 Double_t SubJet2_Eta=SubJet2_Axis.pseudorapidity();
993 Double_t SubJet1_Phi=SubJet1_Axis.phi();
994 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
995 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
996 Double_t SubJet2_Phi=SubJet2_Axis.phi();
997 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
998 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1000 Double_t DeltaPhiSubJets,DeltaEtaSubJets;
1001 DeltaPhiSubJets=SubJet1_Phi-SubJet2_Phi;
1002 DeltaEtaSubJets=SubJet1_Eta-SubJet2_Eta;
1003 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
1004 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
1006 DelR = TMath::Power(TMath::Power(DeltaPhiSubJets,2)+TMath::Power(DeltaEtaSubJets,2),0.5);
1023 fastjet::contrib::SoftDrop softdrop(beta, zcut);
1025 softdrop.set_verbose_structure(kTRUE);
1028 fastjet::contrib::Recluster *recluster;
1029 if(
fReclusterAlgo == 2) recluster =
new fastjet::contrib::Recluster(fastjet::kt_algorithm,1,
true);
1030 if(
fReclusterAlgo == 1) recluster =
new fastjet::contrib::Recluster(fastjet::antikt_algorithm,1,
true);
1031 if(
fReclusterAlgo == 0) recluster =
new fastjet::contrib::Recluster(fastjet::cambridge_algorithm,1,
true);
1032 softdrop.set_reclustering(
true,recluster);
1033 fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
1040 std::vector<fastjet::PseudoJet> fSDTracks=finaljet.constituents();
1041 Double_t FastjetTrackDelR,EmcalTrackDelR;
1043 if(i<=finaljet.constituents().size()){
1044 FastjetTrackDelR = TMath::Sqrt(TMath::Power(fSDTracks[i].eta()-JetEta,2)+TMath::Power(fSDTracks[i].phi()-JetPhi,2));
1045 FJTrackEta[i]=fSDTracks[i].eta();
1046 FJTrackPhi[i]=fSDTracks[i].phi();
1047 FJTrackPt[i]=fSDTracks[i].perp();
1050 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1051 EmcalTrackDelR = TMath::Sqrt(TMath::Power(fTrk->Eta()-JetEta,2)+TMath::Power(fTrk->Phi()-JetPhi,2));
1054 Int_t nConstituents(fClustSeqSA->constituents(finaljet).size());
1057 SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
1058 Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
1059 DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
1062 std::vector<fastjet::PseudoJet> subjets;
1063 if ( finaljet.has_pieces() ) {
1064 subjets = finaljet.pieces();
1065 fastjet::PseudoJet subjet1 = subjets[0];
1066 fastjet::PseudoJet subjet2 = subjets[1];
1068 if(subjets[0].perp() > subjets[1].perp()){
1080 if(subjets[0].perp() > subjets[1].perp()){
1129 std::vector<fastjet::PseudoJet> fInputVectors;
1130 fInputVectors.clear();
1131 fastjet::PseudoJet PseudoTracks;
1136 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1137 if (!fTrk)
continue;
1138 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1139 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
1140 fInputVectors.push_back(PseudoTracks);
1143 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
1145 if(ReclusterAlgo==0){ xflagalgo=0.5;
1146 jetalgo=fastjet::kt_algorithm ;}
1147 if(ReclusterAlgo==1){ xflagalgo=1.5;
1148 jetalgo=fastjet::cambridge_algorithm;}
1149 if(ReclusterAlgo==2){ xflagalgo=2.5;
1150 jetalgo=fastjet::antikt_algorithm;}
1152 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1157 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
1158 std::vector<fastjet::PseudoJet> fOutputJets;
1159 fOutputJets.clear();
1160 fOutputJets=fClustSeqSA.inclusive_jets(0);
1162 fastjet::PseudoJet jj;
1163 fastjet::PseudoJet j1;
1164 fastjet::PseudoJet j2;
1167 while(jj.has_parents(j1,j2)){
1170 if(j1.perp() < j2.perp())
swap(j1,j2);
1171 double delta_R=j1.delta_R(j2);
1172 double z=j2.perp()/(j1.perp()+j2.perp());
1173 if(z > 0.1) nhard=nhard+1;
1174 double y =log(1.0/delta_R);
1175 double lnpt_rel=log(z*delta_R);
1176 Double_t LundEntries[5] = {y,lnpt_rel,fOutputJets[0].perp(),xflagalgo,ndepth};
1187 catch (fastjet::Error) {
1188 AliError(
" [w] FJ Exception caught.");
1191 if(ReclusterAlgo==1){
1208 std::vector< fastjet::PseudoJet > constituents = jet.constituents();
1209 fastjet::PseudoJet leadingtrack = constituents[0];
1211 for(
size_t i=0; i<constituents.size(); i++){
1212 track_pt=constituents[i].perp();
1213 if (track_pt > leadingtrack.perp()){
1214 leadingtrack = constituents[i];
1217 return leadingtrack.perp();
1237 TClonesArray *TracksArray = NULL;
1238 TClonesArray *TracksArrayMC = NULL;
1240 else TracksArray = PartCont->GetArray();
1243 if(!PartContMC || !TracksArrayMC)
return -99999;
1246 if(!PartCont || !TracksArray)
return -99999;
1249 AliAODTrack *
Track = 0x0;
1250 Int_t Trigger_Index[100];
1251 for (
Int_t i=0; i<100; i++) Trigger_Index[i] = 0;
1252 Int_t Trigger_Counter = 0;
1255 else NTracks = TracksArray->GetEntriesFast();
1256 for(
Int_t i=0; i < NTracks; i++){
1259 if (!Track)
continue;
1260 if(TMath::Abs(Track->Eta())>0.9)
continue;
1261 if (Track->Pt()<0.15)
continue;
1262 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1263 Trigger_Index[Trigger_Counter] = i;
1269 if((Track = static_cast<AliAODTrack*>(PartCont->
GetAcceptTrack(i)))){
1270 if (!Track)
continue;
1271 if(TMath::Abs(Track->Eta())>0.9)
continue;
1272 if (Track->Pt()<0.15)
continue;
1273 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1274 Trigger_Index[Trigger_Counter] = i;
1280 if (Trigger_Counter == 0)
return -99999;
1281 Int_t RandomNumber = 0, Index = 0 ;
1282 TRandom3* Random =
new TRandom3(0);
1283 RandomNumber = Random->Integer(Trigger_Counter);
1284 Index = Trigger_Index[RandomNumber];
1293 if (!jet2)
return -1;
1296 if (jetPt2 <= 0)
return -1;
1298 Int_t bgeom = kTRUE;
1299 if (!cont2) bgeom = kFALSE;
1301 AliVParticle *vpf = 0x0;
1306 AliVParticle *p2 = 0x0;
1307 if (bgeom) p2 =
static_cast<AliVParticle*
>(jet2->
TrackAt(icc, cont2->GetArray()));
1310 if (!bgeom && idx == jet1->
TrackAt(icf) && iFound == 0 ) {
1312 vpf = jet1->
Track(icf);
1313 if (vpf) sumPt += vpf->Pt();
1317 vpf = jet1->
Track(icf);
1325 Double_t fraction = sumPt / jetPt2;
1333 if(!part1)
return kFALSE;
1334 if(!part2)
return kFALSE;
1335 Double_t dPhi = TMath::Abs(part1->Phi() - part2->Phi());
1336 dPhi = TVector2::Phi_mpi_pi(dPhi);
1337 if (dPhi > dist)
return kFALSE;
virtual ~AliAnalysisTaskRecoilJetYield()
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
JetShapeType fJetShapeType
Double_t PTD(AliEmcalJet *Jet, Int_t JetContNb)
static Double_t DeltaPhi(Double_t phia, Double_t phib, Double_t rMin=-TMath::Pi()/2, Double_t rMax=3 *TMath::Pi()/2)
AliEmcalJet * ClosestJet() const
AliJetContainer * GetJetContainer(Int_t i=0) const
Bool_t FillHistograms()
Function filling histograms.
Container with name, TClonesArray and cuts for particles.
Double_t fEPV0
!event plane V0
AliVParticle * Track(Int_t idx) const
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
void SoftDrop(AliEmcalJet *fJet, AliJetContainer *fJetCont, double zcut, double beta, Bool_t fTruthJet)
Bool_t RetrieveEventObjects()
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
TString kData
Declare data MC or deltaAOD.
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliParticleContainer * GetParticleContainer() const
void Terminate(Option_t *option)
TH1F * fhPhiTriggerHadronEventPlane
TH1F * fhPhiTriggerHadronJet
Int_t SelectTriggerHadron(Float_t PtMin, Float_t PtMax)
TH1F * fhDetJetPt_Matched
Double_t GetFractionSharedPt_SubMatching(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
TH1F * fhNumberOfJetTracks_True
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
THnSparse * fhLundIterativeTrue
Double_t fCent
!event centrality
Double_t Angularity(AliEmcalJet *Jet, Int_t JetContNb)
Float_t fPtMinTriggerHadron
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 RelativePhi(Double_t Phi1, Double_t Phi2)
static Bool_t SameParticle(const AliVParticle *part1, const AliVParticle *part2, Double_t dist=1.e-4)
void UserCreateOutputObjects()
Double_t GetRhoVal(Int_t i=0) const
AliAnalysisTaskRecoilJetYield()
AliEmcalList * fOutput
!output list
TH1F * fhNumberOfJetTracks
AliTrackContainer * GetTrackContainer(Int_t i=0) const
Double_t DeltaR(const AliVParticle *part1, const AliVParticle *part2)
TH1F * fhNumberOfJetTracks_Det
void SetMakeGeneralHistograms(Bool_t g)
void RecursiveParents(AliEmcalJet *fJet, AliJetContainer *fJetCont, Int_t ReclusterAlgo, Bool_t bTrue)
virtual AliVTrack * GetAcceptTrack(Int_t i=-1) const
Base task in the EMCAL jet framework.
Double_t fSharedFractionPtMin
Represent a jet reconstructed using the EMCal jet framework.
Double_t fJetInfoVar[nBranch]
void SetNumberOfTracks(Int_t n)
Float_t fPtMaxTriggerHadron
TH1F * fhPhiTriggerHadronEventPlaneTPC
void UserCreateOutputObjects()
Main initialization function on the worker.
Float_t fRecoilAngularWindow
TH2F * fh2PtTriggerHadronJet
JetSelectionType fJetSelection
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 RelativePhiEventPlane(Double_t EventPlane, Double_t Phi)
Double_t LeadingTrackPt(fastjet::PseudoJet jet)
Container for jet within the EMCAL jet framework.
THnSparse * fhLundIterative
AliEmcalJet * GetJet(Int_t i) const