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),
106 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),
183 fNsubMeasure(kFALSE),
191 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 fhTrackEta =
new TH1F(
"fhTrackEta",
"Track Eta ",600,-1.5,1.5);
327 fhGroomedPtvJetPt=
new TH2F(
"fhGroomedPtvJetPt",
"Groomed Jet p_{T} v Original Jet p_{T}",150,0,150,150,0,150);
329 fhDroppedBranches=
new TH1F(
"fhDroppedBranches",
"Number of Softdropped branches",50,0,50);
331 fhDetJetPt_Incl=
new TH1F(
"fhDetJetPt_Incl",
"Jet Pt",200,-0.5,199.5 );
336 const Int_t dimSpec = 5;
337 const Int_t nBinsSpec[5] = {50,50,10,3,10};
338 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
339 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
341 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
342 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
347 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
348 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
354 fhJetPt_Det=
new TH1F(
"fhJetPt_Det",
"Jet Pt Detector Level",1500,-0.5,149.5 );
356 fhJetPt_True=
new TH1F(
"fhJetPt_True",
"Jet Pt Particle Level",1500,-0.5,149.5 );
358 fhJetPhi_Det=
new TH1F(
"fhJetPhi_Det",
"Jet Phi Detector Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
360 fhJetPhi_True=
new TH1F(
"fhJetPhi_True",
"Jet Phi Particle Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
366 fhJetMass_Det=
new TH1F(
"fhJetMass_Det",
"Jet Mass Detector Level", 4000,-0.5, 39.5);
368 fhJetMass_True=
new TH1F(
"fhJetMass_True",
"Jet Mass Particle Level", 4000,-0.5, 39.5);
370 fhJetRadius_Det=
new TH1F(
"fhJetRadius_Det",
"Jet Radius Detector Level", 100, -0.05,0.995);
372 fhJetRadius_True=
new TH1F(
"fhJetRadius_True",
"Jet Radius Particle Level", 100, -0.05,0.995);
374 fhNumberOfJetTracks_Det=
new TH1F(
"fhNumberOfJetTracks_Det",
"Number of Tracks within a Jet Detector Level", 300, -0.5,299.5);
376 fhNumberOfJetTracks_True=
new TH1F(
"fhNumberOfJetTracks_True",
"Number of Tracks within a Jet Particle Level", 300, -0.5,299.5);
379 fhJetCounter_Det=
new TH1F(
"fhJetCounter_Det",
"Jet Counter Detector Level", 150, -0.5, 149.5);
381 fhJetCounter_True=
new TH1F(
"fhJetCounter_True",
"Jet Counter Particle Level", 150, -0.5, 149.5);
383 fh2PtRatio=
new TH2F(
"fhPtRatio",
"MC pt for detector level vs particle level jets",1500,-0.5,149.5,1500,-0.5,149.5);
386 const Int_t dimSpec = 5;
387 const Int_t nBinsSpec[5] = {50,50,10,3,10};
388 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
389 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
391 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
392 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
396 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
397 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
420 Error(
"UserExec",
"AOD not available");
436 AliAODTrack *TriggerHadron = 0x0;
440 if (TriggerHadronLabel==-99999)
return 0;
451 TClonesArray *TrackArray = NULL;
452 TClonesArray *TrackArrayMC = NULL;
454 else TrackArray = PartCont->GetArray();
456 else TriggerHadron =
static_cast<AliAODTrack*
>(TrackArray->At(TriggerHadronLabel));
457 if (!TriggerHadron)
return 0;
479 Bool_t EventCounter=kFALSE;
483 JetCont->ResetCurrentID();
487 else JetPt_ForThreshold = Jet1->
Pt();
508 TClonesArray *TracksArray = NULL;
509 TracksArray = TrackCont->GetArray();
510 Double_t NTracks = TracksArray->GetEntriesFast();
511 AliAODTrack *
Track = 0x0;
512 for(
Int_t i=0; i < NTracks; i++){
514 if (!Track)
continue;
521 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
522 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
594 Bool_t JetsMatched = kFALSE;
596 JetContHybridS->ResetCurrentID();
597 JetContHybridUS->ResetCurrentID();
598 JetContPythDet->ResetCurrentID();
599 JetContPythTrue->ResetCurrentID();
608 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
609 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
612 JetHybridUS = JetContHybridUS->
GetJet(i);
613 if (!JetHybridUS)
continue;
619 if(JetNumber==-1)
continue;
620 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
629 Printf(
"Unsubtracted embedded jet does not exist, returning");
632 if (!JetPythDet)
continue;
633 UInt_t rejectionReason = 0;
634 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
637 if(!JetPythTrue)
continue;
691 Bool_t JetsMatched=kFALSE;
693 Bool_t EventCounter=kFALSE;
694 Int_t JetCounter_Det=0,JetCounter_True=0;
695 JetContDet->ResetCurrentID();
696 JetContTrue->ResetCurrentID();
710 RecoilDeltaPhi =
RelativePhi(TriggerHadron->Phi(), JetDet->
Phi());
717 JetPhiDet=JetDet->
Phi();
718 if(JetPhiDet < -1*TMath::Pi()) JetPhiDet += (2*TMath::Pi());
719 else if (JetPhiDet > TMath::Pi()) JetPhiDet -= (2*TMath::Pi());
729 JetPhiTrue=JetTrue->
Phi();
730 if(JetPhiTrue < -1*TMath::Pi()) JetPhiTrue += (2*TMath::Pi());
731 else if (JetPhiTrue > TMath::Pi()) JetPhiTrue -= (2*TMath::Pi());
796 Bool_t EventCounter=kFALSE;
800 JetCont->ResetCurrentID();
804 else JetPt_ForThreshold = Jet1->
Pt();
823 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
824 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
876 if(Phi < -1*TMath::Pi()) Phi += (2*TMath::Pi());
877 else if (Phi > TMath::Pi()) Phi -= (2*TMath::Pi());
879 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
880 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
886 if(Phi1 < -1*TMath::Pi()) Phi1 += (2*TMath::Pi());
887 else if (Phi1 > TMath::Pi()) Phi1 -= (2*TMath::Pi());
888 if(Phi2 < -1*TMath::Pi()) Phi2 += (2*TMath::Pi());
889 else if (Phi2 > TMath::Pi()) Phi2 -= (2*TMath::Pi());
891 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
892 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
905 AliVParticle *Particle=0x0;
911 if(!Particle)
continue;
913 Angularity_Numerator=Angularity_Numerator+(Particle->Pt()*TMath::Sqrt(((Particle->Eta()-Jet->
Eta())*(Particle->Eta()-Jet->
Eta()))+(DeltaPhi*
DeltaPhi)));
914 Angularity_Denominator= Angularity_Denominator+Particle->Pt();
916 if(Angularity_Denominator!=0)
return Angularity_Numerator/Angularity_Denominator;
929 AliVParticle *Particle=0x0;
933 if(!Particle)
continue;
934 PTD_Numerator=PTD_Numerator+(Particle->Pt()*Particle->Pt());
935 PTD_Denominator=PTD_Denominator+Particle->Pt();
937 if(PTD_Denominator!=0)
return TMath::Sqrt(PTD_Numerator)/PTD_Denominator;
944 std::vector<fastjet::PseudoJet> fInputVectors;
945 Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
948 Double_t FJTrackEta[9999],FJTrackPhi[9999],FJTrackPt[9999],EmcalJetTrackEta[9999],EmcalJetTrackPhi[9999],EmcalJetTrackPt[9999];
949 UShort_t FJNTracks=0,EmcalJetNTracks=0;
951 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
952 JetInvMass += fTrk->M();
954 fastjet::PseudoJet PseudoTracks(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
955 TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
956 TrackEnergy += fTrk->E();
957 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
958 PseudJetInvMass += PseudoTracks.m();
959 fInputVectors.push_back(PseudoTracks);
960 EmcalJetTrackEta[i]=fTrk->Eta();
961 EmcalJetTrackPhi[i]=fTrk->Phi();
962 EmcalJetTrackPt[i]=fTrk->Pt();
965 fastjet::JetDefinition *fJetDef;
966 fastjet::ClusterSequence *fClustSeqSA;
969 fJetDef =
new fastjet::JetDefinition(fastjet::antikt_algorithm,
fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
972 fClustSeqSA =
new fastjet::ClusterSequence(fInputVectors, *fJetDef);
973 }
catch (fastjet::Error) {
974 AliError(
" [w] FJ Exception caught.");
978 std::vector<fastjet::PseudoJet> fOutputJets;
980 fOutputJets=fClustSeqSA->inclusive_jets(0);
982 std::vector<fastjet::PseudoJet> jet_constituents = fOutputJets[0].constituents();
983 Float_t NSubjettinessResult[3], NSubBeta = 1, R0=0.4;
984 std::vector<fastjet::PseudoJet> Subjet_Axes;
985 fastjet::PseudoJet SubJet1_Axis,SubJet2_Axis;
989 for(
Int_t j=1; j<3; j++){
990 if(jet_constituents.size() < j){
1002 fastjet::contrib::Nsubjettiness nSub(j,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(NSubBeta,R0));
1003 NSubjettinessResult[j] = nSub.result(fOutputJets[0]);
1005 Subjet_Axes = nSub.currentAxes();
1006 SubJet1_Axis = Subjet_Axes[0];
1007 SubJet2_Axis = Subjet_Axes[1];
1009 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1010 Double_t SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1011 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1012 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1013 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1014 Double_t SubJet2_Phi=SubJet2_Axis.phi();
1015 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1016 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1018 Double_t DeltaPhiSubJets,DeltaEtaSubJets;
1019 DeltaPhiSubJets=SubJet1_Phi-SubJet2_Phi;
1020 DeltaEtaSubJets=SubJet1_Eta-SubJet2_Eta;
1021 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
1022 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
1024 DelR = TMath::Power(TMath::Power(DeltaPhiSubJets,2)+TMath::Power(DeltaEtaSubJets,2),0.5);
1041 fastjet::contrib::SoftDrop softdrop(beta, zcut);
1043 softdrop.set_verbose_structure(kTRUE);
1046 fastjet::contrib::Recluster *recluster;
1047 if(
fReclusterAlgo == 2) recluster =
new fastjet::contrib::Recluster(fastjet::kt_algorithm,1,
true);
1048 if(
fReclusterAlgo == 1) recluster =
new fastjet::contrib::Recluster(fastjet::antikt_algorithm,1,
true);
1049 if(
fReclusterAlgo == 0) recluster =
new fastjet::contrib::Recluster(fastjet::cambridge_algorithm,1,
true);
1050 softdrop.set_reclustering(
true,recluster);
1051 fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
1058 std::vector<fastjet::PseudoJet> fSDTracks=finaljet.constituents();
1059 Double_t FastjetTrackDelR,EmcalTrackDelR;
1061 if(i<=finaljet.constituents().size()){
1062 FastjetTrackDelR = TMath::Sqrt(TMath::Power(fSDTracks[i].eta()-JetEta,2)+TMath::Power(fSDTracks[i].phi()-JetPhi,2));
1063 FJTrackEta[i]=fSDTracks[i].eta();
1064 FJTrackPhi[i]=fSDTracks[i].phi();
1065 FJTrackPt[i]=fSDTracks[i].perp();
1068 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1069 EmcalTrackDelR = TMath::Sqrt(TMath::Power(fTrk->Eta()-JetEta,2)+TMath::Power(fTrk->Phi()-JetPhi,2));
1072 Int_t nConstituents(fClustSeqSA->constituents(finaljet).size());
1075 SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
1076 Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
1077 DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
1080 std::vector<fastjet::PseudoJet> subjets;
1081 if ( finaljet.has_pieces() ) {
1082 subjets = finaljet.pieces();
1083 fastjet::PseudoJet subjet1 = subjets[0];
1084 fastjet::PseudoJet subjet2 = subjets[1];
1086 if(subjets[0].perp() > subjets[1].perp()){
1098 if(subjets[0].perp() > subjets[1].perp()){
1147 std::vector<fastjet::PseudoJet> fInputVectors;
1148 fInputVectors.clear();
1149 fastjet::PseudoJet PseudoTracks;
1154 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1155 if (!fTrk)
continue;
1156 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1157 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
1158 fInputVectors.push_back(PseudoTracks);
1161 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
1163 if(ReclusterAlgo==0){ xflagalgo=0.5;
1164 jetalgo=fastjet::kt_algorithm ;}
1165 if(ReclusterAlgo==1){ xflagalgo=1.5;
1166 jetalgo=fastjet::cambridge_algorithm;}
1167 if(ReclusterAlgo==2){ xflagalgo=2.5;
1168 jetalgo=fastjet::antikt_algorithm;}
1170 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1175 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
1176 std::vector<fastjet::PseudoJet> fOutputJets;
1177 fOutputJets.clear();
1178 fOutputJets=fClustSeqSA.inclusive_jets(0);
1180 fastjet::PseudoJet jj;
1181 fastjet::PseudoJet j1;
1182 fastjet::PseudoJet j2;
1185 while(jj.has_parents(j1,j2)){
1188 if(j1.perp() < j2.perp())
swap(j1,j2);
1189 double delta_R=j1.delta_R(j2);
1190 double z=j2.perp()/(j1.perp()+j2.perp());
1191 if(z > 0.1) nhard=nhard+1;
1192 double y =log(1.0/delta_R);
1193 double lnpt_rel=log(z*delta_R);
1194 Double_t LundEntries[5] = {y,lnpt_rel,fOutputJets[0].perp(),xflagalgo,ndepth};
1205 catch (fastjet::Error) {
1206 AliError(
" [w] FJ Exception caught.");
1209 if(ReclusterAlgo==1){
1226 std::vector< fastjet::PseudoJet > constituents = jet.constituents();
1227 fastjet::PseudoJet leadingtrack = constituents[0];
1229 for(
size_t i=0; i<constituents.size(); i++){
1230 track_pt=constituents[i].perp();
1231 if (track_pt > leadingtrack.perp()){
1232 leadingtrack = constituents[i];
1235 return leadingtrack.perp();
1255 TClonesArray *TracksArray = NULL;
1256 TClonesArray *TracksArrayMC = NULL;
1258 else TracksArray = PartCont->GetArray();
1261 if(!PartContMC || !TracksArrayMC)
return -99999;
1264 if(!PartCont || !TracksArray)
return -99999;
1267 AliAODTrack *
Track = 0x0;
1268 Int_t Trigger_Index[100];
1269 for (
Int_t i=0; i<100; i++) Trigger_Index[i] = 0;
1270 Int_t Trigger_Counter = 0;
1273 else NTracks = TracksArray->GetEntriesFast();
1274 for(
Int_t i=0; i < NTracks; i++){
1277 if (!Track)
continue;
1278 if(TMath::Abs(Track->Eta())>0.9)
continue;
1279 if (Track->Pt()<0.15)
continue;
1280 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1281 Trigger_Index[Trigger_Counter] = i;
1287 if((Track = static_cast<AliAODTrack*>(PartCont->
GetAcceptTrack(i)))){
1288 if (!Track)
continue;
1289 if(TMath::Abs(Track->Eta())>0.9)
continue;
1290 if (Track->Pt()<0.15)
continue;
1291 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1292 Trigger_Index[Trigger_Counter] = i;
1298 if (Trigger_Counter == 0)
return -99999;
1299 Int_t RandomNumber = 0, Index = 0 ;
1300 TRandom3* Random =
new TRandom3(0);
1301 RandomNumber = Random->Integer(Trigger_Counter);
1302 Index = Trigger_Index[RandomNumber];
1311 if (!jet2)
return -1;
1314 if (jetPt2 <= 0)
return -1;
1316 Int_t bgeom = kTRUE;
1317 if (!cont2) bgeom = kFALSE;
1319 AliVParticle *vpf = 0x0;
1324 AliVParticle *p2 = 0x0;
1325 if (bgeom) p2 =
static_cast<AliVParticle*
>(jet2->
TrackAt(icc, cont2->GetArray()));
1328 if (!bgeom && idx == jet1->
TrackAt(icf) && iFound == 0 ) {
1330 vpf = jet1->
Track(icf);
1331 if (vpf) sumPt += vpf->Pt();
1335 vpf = jet1->
Track(icf);
1343 Double_t fraction = sumPt / jetPt2;
1351 if(!part1)
return kFALSE;
1352 if(!part2)
return kFALSE;
1353 Double_t dPhi = TMath::Abs(part1->Phi() - part2->Phi());
1354 dPhi = TVector2::Phi_mpi_pi(dPhi);
1355 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