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),
112 fhGroomedPtvJetPt(0x0),
113 fhDroppedBranches(0x0),
114 fhPtTriggerHadron(0x0),
115 fh2PtTriggerHadronJet(0x0),
116 fhPhiTriggerHadronJet(0x0),
117 fhPhiTriggerHadronEventPlane(0x0),
118 fhPhiTriggerHadronEventPlaneTPC(0x0),
119 fhDetJetPt_Incl(0x0),
120 fhDetJetPt_Matched(0x0),
129 fhJetRadius_Det(0x0),
130 fhJetRadius_True(0x0),
131 fhJetCounter_Det(0x0),
132 fhJetCounter_True(0x0),
133 fhNumberOfJetTracks_Det(0x0),
134 fhNumberOfJetTracks_True(0x0),
136 fhLundIterative(0x0),
137 fhLundIterativeTrue(0x0),
139 fSubMatching(kFALSE),
140 bMinSubjetPt(kFALSE),
149 SetMakeGeneralHistograms(kTRUE);
150 DefineOutput(1, TList::Class());
151 DefineOutput(2, TTree::Class());
158 fMinFractionShared(0),
159 fJetShapeType(
kData),
160 fJetShapeSub(kNoSub),
161 fJetSelection(kInclusive),
162 fPtThreshold(-9999.),
164 fPtMinTriggerHadron(20.),
165 fPtMaxTriggerHadron(50.),
166 fRecoilAngularWindow(0.6),
170 fCentSelectOn(kTRUE),
178 fSharedFractionPtMin(0.5),
185 fNsubMeasure(kFALSE),
193 fhNumberOfJetTracks(0x0),
198 fhGroomedPtvJetPt(0x0),
199 fhDroppedBranches(0x0),
200 fhPtTriggerHadron(0x0),
201 fh2PtTriggerHadronJet(0x0),
202 fhPhiTriggerHadronJet(0x0),
203 fhPhiTriggerHadronEventPlane(0x0),
204 fhPhiTriggerHadronEventPlaneTPC(0x0),
205 fhDetJetPt_Incl(0x0),
206 fhDetJetPt_Matched(0x0),
215 fhJetRadius_Det(0x0),
216 fhJetRadius_True(0x0),
217 fhJetCounter_Det(0x0),
218 fhJetCounter_True(0x0),
219 fhNumberOfJetTracks_Det(0x0),
220 fhNumberOfJetTracks_True(0x0),
222 fhLundIterative(0x0),
223 fhLundIterativeTrue(0x0),
225 fSubMatching(kFALSE),
226 bMinSubjetPt(kFALSE),
234 DefineOutput(1, TList::Class());
235 DefineOutput(2, TTree::Class());
251 Bool_t oldStatus = TH1::AddDirectoryStatus();
252 TH1::AddDirectory(kFALSE);
253 TH1::AddDirectory(oldStatus);
254 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
258 const Int_t nVarMin = 22;
261 fJetInfoVarNames[0] =
"Pt";
262 fJetInfoVarNames[1] =
"Pt_Truth";
263 fJetInfoVarNames[2] =
"SymParam";
264 fJetInfoVarNames[3] =
"SymParam_Truth";
265 fJetInfoVarNames[4] =
"Mass";
266 fJetInfoVarNames[5] =
"Mass_Truth";
267 fJetInfoVarNames[6] =
"SLSubJetMass";
268 fJetInfoVarNames[7] =
"SLSubJetMass_Truth";
269 fJetInfoVarNames[8] =
"LeadingParton";
270 fJetInfoVarNames[9] =
"LeadingParton_Truth";
271 fJetInfoVarNames[10] =
"SLSubJetPt";
272 fJetInfoVarNames[11] =
"SLSubJetPt_Truth";
273 fJetInfoVarNames[12] =
"DelR";
274 fJetInfoVarNames[13] =
"DelR_Truth";
275 fJetInfoVarNames[14] =
"N_SplittingsHard";
276 fJetInfoVarNames[15] =
"N_SplittingsHard_Truth";
277 fJetInfoVarNames[16] =
"Groomed_Jet_Pt";
278 fJetInfoVarNames[17] =
"Groomed_Jet_Pt_Truth";
279 fJetInfoVarNames[18] =
"Groomed_Mass";
280 fJetInfoVarNames[19] =
"Groomed_Mass_Truth";
281 fJetInfoVarNames[20] =
"N_SplittingsAll";
282 fJetInfoVarNames[21] =
"N_SplittingsAll_Truth";
285 for(
Int_t ivar=0; ivar < nVarMin; ivar++){
286 cout<<
"looping over variables"<<endl;
291 fhPtTriggerHadron=
new TH1F(
"fhPtTriggerHadron",
"fhPtTriggerHadron",1500,-0.5,149.5);
295 fhPhiTriggerHadronJet=
new TH1F(
"fhPhiTriggerHadronJet",
"fhPhiTriggerHadronJet",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
297 fhPhiTriggerHadronEventPlane=
new TH1F(
"fhPhiTriggerHadronEventPlane",
"fhPhiTriggerHadronEventPlane",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
299 fhPhiTriggerHadronEventPlaneTPC=
new TH1F(
"fhPhiTriggerHadronEventPlaneTPC",
"fhPhiTriggerHadronEventPlaneTPC",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
309 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",150,-0.5,149.5 );
311 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
315 fhJetMass=
new TH1F(
"fhJetMass",
"Jet Mass", 4000,-0.5, 39.5);
317 fhJetRadius=
new TH1F(
"fhJetRadius",
"Jet Radius", 100, -0.05,0.995);
319 fhNumberOfJetTracks=
new TH1F(
"fhNumberOfJetTracks",
"Number of Tracks within a Jet", 300, -0.5,299.5);
321 fhJetCounter=
new TH1F(
"fhJetCounter",
"Jet Counter", 150, -0.5, 149.5);
323 fhJetArea=
new TH1F(
"fhJetArea",
"Jet Area", 400,-0.5, 1.95);
325 fhTrackPt=
new TH1F(
"fhTrackPt",
"Track Pt",600,-0.5,59.5);
327 fhTrackEta =
new TH1F(
"fhTrackEta",
"Track Eta ",600,-1.5,1.5);
329 fhGroomedPtvJetPt=
new TH2F(
"fhGroomedPtvJetPt",
"Groomed Jet p_{T} v Original Jet p_{T}",150,0,150,150,0,150);
331 fhDroppedBranches=
new TH1F(
"fhDroppedBranches",
"Number of Softdropped branches",50,0,50);
333 fhDetJetPt_Incl=
new TH1F(
"fhDetJetPt_Incl",
"Jet Pt",200,-0.5,199.5 );
338 const Int_t dimSpec = 5;
339 const Int_t nBinsSpec[5] = {50,50,10,3,10};
340 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
341 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
343 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
344 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
349 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
350 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
356 fhJetPt_Det=
new TH1F(
"fhJetPt_Det",
"Jet Pt Detector Level",1500,-0.5,149.5 );
358 fhJetPt_True=
new TH1F(
"fhJetPt_True",
"Jet Pt Particle Level",1500,-0.5,149.5 );
360 fhJetPhi_Det=
new TH1F(
"fhJetPhi_Det",
"Jet Phi Detector Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
362 fhJetPhi_True=
new TH1F(
"fhJetPhi_True",
"Jet Phi Particle Level",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
368 fhJetMass_Det=
new TH1F(
"fhJetMass_Det",
"Jet Mass Detector Level", 4000,-0.5, 39.5);
370 fhJetMass_True=
new TH1F(
"fhJetMass_True",
"Jet Mass Particle Level", 4000,-0.5, 39.5);
372 fhJetRadius_Det=
new TH1F(
"fhJetRadius_Det",
"Jet Radius Detector Level", 100, -0.05,0.995);
374 fhJetRadius_True=
new TH1F(
"fhJetRadius_True",
"Jet Radius Particle Level", 100, -0.05,0.995);
376 fhNumberOfJetTracks_Det=
new TH1F(
"fhNumberOfJetTracks_Det",
"Number of Tracks within a Jet Detector Level", 300, -0.5,299.5);
378 fhNumberOfJetTracks_True=
new TH1F(
"fhNumberOfJetTracks_True",
"Number of Tracks within a Jet Particle Level", 300, -0.5,299.5);
381 fhJetCounter_Det=
new TH1F(
"fhJetCounter_Det",
"Jet Counter Detector Level", 150, -0.5, 149.5);
383 fhJetCounter_True=
new TH1F(
"fhJetCounter_True",
"Jet Counter Particle Level", 150, -0.5, 149.5);
385 fh2PtRatio=
new TH2F(
"fhPtRatio",
"MC pt for detector level vs particle level jets",1500,-0.5,149.5,1500,-0.5,149.5);
388 const Int_t dimSpec = 5;
389 const Int_t nBinsSpec[5] = {50,50,10,3,10};
390 const Double_t lowBinSpec[5] = {0.0,-10, 0,0,0};
391 const Double_t hiBinSpec[5] = {5.0, 0,200,3,10};
393 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
394 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
398 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo,ndepth]",
399 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
422 Error(
"UserExec",
"AOD not available");
438 AliAODTrack *TriggerHadron = 0x0;
442 if (TriggerHadronLabel==-99999)
return 0;
453 TClonesArray *TrackArray = NULL;
454 TClonesArray *TrackArrayMC = NULL;
456 else TrackArray = PartCont->GetArray();
458 else TriggerHadron =
static_cast<AliAODTrack*
>(TrackArray->At(TriggerHadronLabel));
459 if (!TriggerHadron)
return 0;
481 Bool_t EventCounter=kFALSE;
485 JetCont->ResetCurrentID();
489 else JetPt_ForThreshold = Jet1->
Pt();
510 TClonesArray *TracksArray = NULL;
511 TracksArray = TrackCont->GetArray();
512 Double_t NTracks = TracksArray->GetEntriesFast();
513 AliAODTrack *
Track = 0x0;
514 for(
Int_t i=0; i < NTracks; i++){
516 if (!Track)
continue;
523 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
524 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
596 Bool_t JetsMatched = kFALSE;
598 JetContHybridS->ResetCurrentID();
599 JetContHybridUS->ResetCurrentID();
600 JetContPythDet->ResetCurrentID();
601 JetContPythTrue->ResetCurrentID();
610 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
611 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
614 JetHybridUS = JetContHybridUS->
GetJet(i);
615 if (!JetHybridUS)
continue;
621 if(JetNumber==-1)
continue;
622 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
631 Printf(
"Unsubtracted embedded jet does not exist, returning");
634 if (!JetPythDet)
continue;
635 UInt_t rejectionReason = 0;
636 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
639 if(!JetPythTrue)
continue;
693 Bool_t JetsMatched=kFALSE;
695 Bool_t EventCounter=kFALSE;
696 Int_t JetCounter_Det=0,JetCounter_True=0;
697 JetContDet->ResetCurrentID();
698 JetContTrue->ResetCurrentID();
712 RecoilDeltaPhi =
RelativePhi(TriggerHadron->Phi(), JetDet->
Phi());
719 JetPhiDet=JetDet->
Phi();
720 if(JetPhiDet < -1*TMath::Pi()) JetPhiDet += (2*TMath::Pi());
721 else if (JetPhiDet > TMath::Pi()) JetPhiDet -= (2*TMath::Pi());
731 JetPhiTrue=JetTrue->
Phi();
732 if(JetPhiTrue < -1*TMath::Pi()) JetPhiTrue += (2*TMath::Pi());
733 else if (JetPhiTrue > TMath::Pi()) JetPhiTrue -= (2*TMath::Pi());
798 Bool_t EventCounter=kFALSE;
802 JetCont->ResetCurrentID();
806 else JetPt_ForThreshold = Jet1->
Pt();
825 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
826 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
878 if(Phi < -1*TMath::Pi()) Phi += (2*TMath::Pi());
879 else if (Phi > TMath::Pi()) Phi -= (2*TMath::Pi());
881 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
882 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
888 if(Phi1 < -1*TMath::Pi()) Phi1 += (2*TMath::Pi());
889 else if (Phi1 > TMath::Pi()) Phi1 -= (2*TMath::Pi());
890 if(Phi2 < -1*TMath::Pi()) Phi2 += (2*TMath::Pi());
891 else if (Phi2 > TMath::Pi()) Phi2 -= (2*TMath::Pi());
893 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
894 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
907 AliVParticle *Particle=0x0;
913 if(!Particle)
continue;
915 Angularity_Numerator=Angularity_Numerator+(Particle->Pt()*TMath::Sqrt(((Particle->Eta()-Jet->
Eta())*(Particle->Eta()-Jet->
Eta()))+(DeltaPhi*
DeltaPhi)));
916 Angularity_Denominator= Angularity_Denominator+Particle->Pt();
918 if(Angularity_Denominator!=0)
return Angularity_Numerator/Angularity_Denominator;
931 AliVParticle *Particle=0x0;
935 if(!Particle)
continue;
936 PTD_Numerator=PTD_Numerator+(Particle->Pt()*Particle->Pt());
937 PTD_Denominator=PTD_Denominator+Particle->Pt();
939 if(PTD_Denominator!=0)
return TMath::Sqrt(PTD_Numerator)/PTD_Denominator;
946 std::vector<fastjet::PseudoJet> fInputVectors;
947 Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
950 Double_t FJTrackEta[9999],FJTrackPhi[9999],FJTrackPt[9999],EmcalJetTrackEta[9999],EmcalJetTrackPhi[9999],EmcalJetTrackPt[9999];
951 UShort_t FJNTracks=0,EmcalJetNTracks=0;
953 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
954 JetInvMass += fTrk->M();
956 fastjet::PseudoJet PseudoTracks(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
957 TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
958 TrackEnergy += fTrk->E();
959 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
960 PseudJetInvMass += PseudoTracks.m();
961 fInputVectors.push_back(PseudoTracks);
962 EmcalJetTrackEta[i]=fTrk->Eta();
963 EmcalJetTrackPhi[i]=fTrk->Phi();
964 EmcalJetTrackPt[i]=fTrk->Pt();
967 fastjet::JetDefinition *fJetDef;
968 fastjet::ClusterSequence *fClustSeqSA;
971 fJetDef =
new fastjet::JetDefinition(fastjet::antikt_algorithm,
fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
974 fClustSeqSA =
new fastjet::ClusterSequence(fInputVectors, *fJetDef);
975 }
catch (fastjet::Error) {
976 AliError(
" [w] FJ Exception caught.");
980 std::vector<fastjet::PseudoJet> fOutputJets;
982 fOutputJets=fClustSeqSA->inclusive_jets(0);
984 std::vector<fastjet::PseudoJet> jet_constituents = fOutputJets[0].constituents();
985 Float_t NSubjettinessResult[3], NSubBeta = 1, R0=0.4;
986 std::vector<fastjet::PseudoJet> Subjet_Axes;
987 fastjet::PseudoJet SubJet1_Axis,SubJet2_Axis;
991 for(
Int_t j=1; j<3; j++){
992 if(jet_constituents.size() < j){
1004 fastjet::contrib::Nsubjettiness nSub(j,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(NSubBeta,R0));
1005 NSubjettinessResult[j] = nSub.result(fOutputJets[0]);
1007 Subjet_Axes = nSub.currentAxes();
1008 SubJet1_Axis = Subjet_Axes[0];
1009 SubJet2_Axis = Subjet_Axes[1];
1011 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
1012 Double_t SubJet2_Eta=SubJet2_Axis.pseudorapidity();
1013 Double_t SubJet1_Phi=SubJet1_Axis.phi();
1014 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1015 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1016 Double_t SubJet2_Phi=SubJet2_Axis.phi();
1017 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
1018 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
1020 Double_t DeltaPhiSubJets,DeltaEtaSubJets;
1021 DeltaPhiSubJets=SubJet1_Phi-SubJet2_Phi;
1022 DeltaEtaSubJets=SubJet1_Eta-SubJet2_Eta;
1023 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
1024 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
1026 DelR = TMath::Power(TMath::Power(DeltaPhiSubJets,2)+TMath::Power(DeltaEtaSubJets,2),0.5);
1043 fastjet::contrib::SoftDrop softdrop(beta, zcut);
1045 softdrop.set_verbose_structure(kTRUE);
1048 fastjet::contrib::Recluster *recluster;
1049 if(
fReclusterAlgo == 2) recluster =
new fastjet::contrib::Recluster(fastjet::kt_algorithm,1,
true);
1050 if(
fReclusterAlgo == 1) recluster =
new fastjet::contrib::Recluster(fastjet::antikt_algorithm,1,
true);
1051 if(
fReclusterAlgo == 0) recluster =
new fastjet::contrib::Recluster(fastjet::cambridge_algorithm,1,
true);
1052 softdrop.set_reclustering(
true,recluster);
1053 fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
1060 std::vector<fastjet::PseudoJet> fSDTracks=finaljet.constituents();
1061 Double_t FastjetTrackDelR,EmcalTrackDelR;
1063 if(i<=finaljet.constituents().size()){
1064 FastjetTrackDelR = TMath::Sqrt(TMath::Power(fSDTracks[i].eta()-JetEta,2)+TMath::Power(fSDTracks[i].phi()-JetPhi,2));
1065 FJTrackEta[i]=fSDTracks[i].eta();
1066 FJTrackPhi[i]=fSDTracks[i].phi();
1067 FJTrackPt[i]=fSDTracks[i].perp();
1070 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1071 EmcalTrackDelR = TMath::Sqrt(TMath::Power(fTrk->Eta()-JetEta,2)+TMath::Power(fTrk->Phi()-JetPhi,2));
1074 Int_t nConstituents(fClustSeqSA->constituents(finaljet).size());
1077 SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
1078 Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
1079 DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
1082 std::vector<fastjet::PseudoJet> subjets;
1083 if ( finaljet.has_pieces() ) {
1084 subjets = finaljet.pieces();
1085 fastjet::PseudoJet subjet1 = subjets[0];
1086 fastjet::PseudoJet subjet2 = subjets[1];
1088 if(subjets[0].perp() > subjets[1].perp()){
1100 if(subjets[0].perp() > subjets[1].perp()){
1149 std::vector<fastjet::PseudoJet> fInputVectors;
1150 fInputVectors.clear();
1151 fastjet::PseudoJet PseudoTracks;
1156 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
1157 if (!fTrk)
continue;
1158 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
1159 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
1160 fInputVectors.push_back(PseudoTracks);
1163 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
1165 if(ReclusterAlgo==0){ xflagalgo=0.5;
1166 jetalgo=fastjet::kt_algorithm ;}
1167 if(ReclusterAlgo==1){ xflagalgo=1.5;
1168 jetalgo=fastjet::cambridge_algorithm;}
1169 if(ReclusterAlgo==2){ xflagalgo=2.5;
1170 jetalgo=fastjet::antikt_algorithm;}
1172 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
1177 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
1178 std::vector<fastjet::PseudoJet> fOutputJets;
1179 fOutputJets.clear();
1180 fOutputJets=fClustSeqSA.inclusive_jets(0);
1182 fastjet::PseudoJet jj;
1183 fastjet::PseudoJet j1;
1184 fastjet::PseudoJet j2;
1187 while(jj.has_parents(j1,j2)){
1190 if(j1.perp() < j2.perp())
swap(j1,j2);
1191 double delta_R=j1.delta_R(j2);
1192 double z=j2.perp()/(j1.perp()+j2.perp());
1193 if(z > 0.1) nhard=nhard+1;
1194 double y =log(1.0/delta_R);
1195 double lnpt_rel=log(z*delta_R);
1196 Double_t LundEntries[5] = {y,lnpt_rel,fOutputJets[0].perp(),xflagalgo,ndepth};
1207 catch (fastjet::Error) {
1208 AliError(
" [w] FJ Exception caught.");
1211 if(ReclusterAlgo==1){
1228 std::vector< fastjet::PseudoJet > constituents = jet.constituents();
1229 fastjet::PseudoJet leadingtrack = constituents[0];
1231 for(
size_t i=0; i<constituents.size(); i++){
1232 track_pt=constituents[i].perp();
1233 if (track_pt > leadingtrack.perp()){
1234 leadingtrack = constituents[i];
1237 return leadingtrack.perp();
1257 TClonesArray *TracksArray = NULL;
1258 TClonesArray *TracksArrayMC = NULL;
1260 else TracksArray = PartCont->GetArray();
1263 if(!PartContMC || !TracksArrayMC)
return -99999;
1266 if(!PartCont || !TracksArray)
return -99999;
1269 AliAODTrack *
Track = 0x0;
1270 Int_t Trigger_Index[100];
1271 for (
Int_t i=0; i<100; i++) Trigger_Index[i] = 0;
1272 Int_t Trigger_Counter = 0;
1275 else NTracks = TracksArray->GetEntriesFast();
1276 for(
Int_t i=0; i < NTracks; i++){
1279 if (!Track)
continue;
1280 if(TMath::Abs(Track->Eta())>0.9)
continue;
1281 if (Track->Pt()<0.15)
continue;
1282 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1283 Trigger_Index[Trigger_Counter] = i;
1289 if((Track = static_cast<AliAODTrack*>(PartCont->
GetAcceptTrack(i)))){
1290 if (!Track)
continue;
1291 if(TMath::Abs(Track->Eta())>0.9)
continue;
1292 if (Track->Pt()<0.15)
continue;
1293 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
1294 Trigger_Index[Trigger_Counter] = i;
1300 if (Trigger_Counter == 0)
return -99999;
1301 Int_t RandomNumber = 0, Index = 0 ;
1302 TRandom3* Random =
new TRandom3(0);
1303 RandomNumber = Random->Integer(Trigger_Counter);
1304 Index = Trigger_Index[RandomNumber];
1313 if (!jet2)
return -1;
1316 if (jetPt2 <= 0)
return -1;
1318 Int_t bgeom = kTRUE;
1319 if (!cont2) bgeom = kFALSE;
1321 AliVParticle *vpf = 0x0;
1326 AliVParticle *p2 = 0x0;
1327 if (bgeom) p2 =
static_cast<AliVParticle*
>(jet2->
TrackAt(icc, cont2->GetArray()));
1330 if (!bgeom && idx == jet1->
TrackAt(icf) && iFound == 0 ) {
1332 vpf = jet1->
Track(icf);
1333 if (vpf) sumPt += vpf->Pt();
1337 vpf = jet1->
Track(icf);
1345 Double_t fraction = sumPt / jetPt2;
1353 if(!part1)
return kFALSE;
1354 if(!part2)
return kFALSE;
1355 Double_t dPhi = TMath::Abs(part1->Phi() - part2->Phi());
1356 dPhi = TVector2::Phi_mpi_pi(dPhi);
1357 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