16 #include <TClonesArray.h> 24 #include "THnSparse.h" 29 #include <AliAnalysisManager.h> 30 #include <AliVEventHandler.h> 31 #include <AliVEvent.h> 32 #include <AliVCluster.h> 33 #include <AliVParticle.h> 35 #include <AliAnalysisDataSlot.h> 36 #include <AliAnalysisDataContainer.h> 69 fJetHadronDeltaPhi(0.6),
70 fMinFractionSharedPt(0.5),
75 fFillTrackHistograms(kTRUE),
76 fFillJetHistograms(kTRUE),
77 fFillRecoilTHnSparse(kTRUE),
78 fFillInclusiveTree(kFALSE),
79 fFillRecoilTree(kFALSE),
81 fRejectionFactorInclusiveJets(1),
83 fHistEvtSelection(0x0),
98 fhPhiHybrPartCor(0x0),
100 fhPtDetMatchedToPart(0x0),
104 fhPhiPhiResidual(0x0),
105 fhPtDetPartRecoil(0x0),
106 fhPtHybrDetRecoil(0x0),
107 fhPtHybrPartRecoil(0x0),
108 fhPtHybrPartCorRecoil(0x0),
110 fhPtDetMatchedToPartRecoil(0x0),
111 fhResidualRecoil(0x0),
112 fhPtResidualRecoil(0x0),
113 fhDphiResidualRecoil(0x0),
114 fhDphiphiResidualRecoil(0x0),
115 fhTTPtDetMatchedToPart(0x0),
116 fhTTPhiDetMatchedToPart(0x0),
117 fhDPhiHybrPartCorRecoil(0x0),
118 fTreeEmbInclusive(0x0),
123 DefineOutput(1, TList::Class());
125 DefineOutput(2, TTree::Class());
127 DefineOutput(3, TTree::Class());
203 DefineOutput(1, TList::Class());
204 DefineOutput(2, TTree::Class());
205 DefineOutput(3, TTree::Class());
231 while ((obj = next())) {
252 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
253 groupname = clusCont->GetName();
256 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The cluster containers will be filled into the same histograms.", GetName(), groupname.Data()));
261 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(), cent);
262 histtitle = TString::Format(
"%s;#it{E}_{cluster} (GeV);counts", histname.Data());
265 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(), cent);
266 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{exotic} (GeV);counts", histname.Data());
269 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(), cent);
270 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{non-lin.corr.} (GeV);counts", histname.Data());
273 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(), cent);
274 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{had.corr.} (GeV);counts", histname.Data());
277 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(), cent);
278 histtitle = TString::Format(
"%s;#it{#phi}_{custer};counts", histname.Data());
281 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(), cent);
282 histtitle = TString::Format(
"%s;#it{#eta}_{custer};counts", histname.Data());
285 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(), cent);
286 histtitle = TString::Format(
"%s;number of clusters;events", histname.Data());
296 histname =
"fHistSumNClusters";
297 histtitle = TString::Format(
"%s;Sum of n clusters;events", histname.Data());
319 histname = TString::Format(
"%s/histCellEnergy_%d", groupname.Data(), cent);
320 histtitle = TString::Format(
"%s;#it{E}_{cell} (GeV);counts", histname.Data());
323 histname = TString::Format(
"%s/histNCells_%d", groupname.Data(), cent);
324 histtitle = TString::Format(
"%s;number of cells;events", histname.Data());
347 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
348 groupname = partCont->GetName();
352 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The track containers will be filled into the same histograms.", GetName(), groupname.Data()));
357 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(), cent);
358 histtitle = TString::Format(
"%s;#it{p}_{T,track} (GeV/#it{c});counts", histname.Data());
361 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(), cent);
362 histtitle = TString::Format(
"%s;#it{#phi}_{track};counts", histname.Data());
365 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(), cent);
366 histtitle = TString::Format(
"%s;#it{#eta}_{track};counts", histname.Data());
369 if (TClass(partCont->GetClassName()).InheritsFrom(
"AliVTrack")) {
370 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(), cent);
371 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#eta}_{track}^{vertex} - #it{#eta}_{track}^{EMCal};counts", histname.Data());
374 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(), cent);
375 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#phi}_{track}^{vertex} - #it{#phi}_{track}^{EMCal};counts", histname.Data());
378 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(), cent);
379 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{p}_{T,track}^{vertex} - #it{p}_{T,track}^{EMCal} (GeV/#it{c});counts", histname.Data());
382 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(), cent);
383 histtitle = TString::Format(
"%s;#it{P}_{track} (GeV/#it{c});#it{E}_{cluster} / #it{P}_{track} #it{c};counts", histname.Data());
387 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(), cent);
388 histtitle = TString::Format(
"%s;number of tracks;events", histname.Data());
398 histname =
"fHistSumNTracks";
399 histtitle = TString::Format(
"%s;Sum of n tracks;events", histname.Data());
420 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
421 groupname = jetCont->GetName();
424 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The jet containers will be filled into the same histograms.", GetName(), groupname.Data()));
429 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(), cent);
430 histtitle = TString::Format(
"%s;#it{p}_{T,jet} (GeV/#it{c});counts", histname.Data());
433 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(), cent);
434 histtitle = TString::Format(
"%s;#it{A}_{jet};counts", histname.Data());
437 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(), cent);
438 histtitle = TString::Format(
"%s;#it{#phi}_{jet};counts", histname.Data());
441 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(), cent);
442 histtitle = TString::Format(
"%s;#it{#eta}_{jet};counts", histname.Data());
445 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(), cent);
446 histtitle = TString::Format(
"%s;number of jets;events", histname.Data());
455 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(), cent);
456 histtitle = TString::Format(
"%s;#it{p}_{T,jet}^{corr} (GeV/#it{c});counts", histname.Data());
466 Bool_t oldStatus = TH1::AddDirectoryStatus();
467 TH1::AddDirectory(kFALSE);
499 const Int_t dimSpec = 6;
500 const Int_t nBinsSpec[dimSpec] = {100,100, 280, 50,200,
fNRPBins};
501 const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0,-0.5*TMath::Pi(), 0};
503 fHJetSpec =
new THnSparseF(
"fHJetSpec",
"Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
525 fhDphiPtSig =
new TH2F(
"hDphiPtS",
"recoil #Delta #phi vs jet pT signal",100,-2,5,250,-50,200);
527 fhDphiPtSig->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
528 fhDphiPtRef =
new TH2F(
"hDphiPtR",
"recoil #Delta #phi vs jet pT reference",100,-2,5,250,-50,200);
530 fhDphiPtRef->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
536 fhPtHybrDet=
new TH2F(
"hPtHybrDet",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
537 fhPtHybrDet->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
538 fhPtHybrDet->GetYaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
539 fhPtDetPart=
new TH2F(
"hPtDetPart",
"pT response PYTHIA vs part",200,0,200,200,0,200);
540 fhPtDetPart->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
541 fhPtDetPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
543 fhPtHybrPart->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
544 fhPtHybrPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
546 fhPtHybrPartCor->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
549 fhPhiHybrPartCor =
new TH2F(
"hPhiHybrPartCor",Form(
"phi response Pb-Pb+PYTHIA corrected vs part, min shared pT > %.0f",
fMinFractionSharedPt*100),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
552 fhResidual =
new TH1F(
"hResidual",
"residual",50,-1,1);
553 fhResidual->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
555 fhPtResidual->GetXaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
556 fhPtResidual->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
557 fhPhiResidual =
new TH1F(
"hPhiResidual",
"residual phi",50,-1,1);
558 fhPhiResidual->GetXaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
559 fhPhiPhiResidual=
new TH2F(
"hPhiPhiResidual",
"pT vs residual",600,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
561 fhPhiPhiResidual->GetYaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
563 fhPtDet=
new TH1F(
"hPtDet",
"pT detector level",200,0,200);
564 fhPtDet->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
565 fhPtDetMatchedToPart =
new TH1F(
"hPtDetMatchedToPart",
"pT detector level matched to particle level jet",200,0,200);
568 fhPtHybrDetRecoil=
new TH2F(
"hPtHybrDetRecoil",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
581 fhDPhiHybrPartCorRecoil =
new TH2F(
"hDPhiHybrPartCorRecoil",Form(
"#Delta#phi response Pb-Pb+PYTHIA corrected vs part, min shared pT > %.0f",
fMinFractionSharedPt*100),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
585 fhResidualRecoil->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
588 fhPtResidualRecoil->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
591 fhDphiResidualRecoil->GetXaxis()->SetTitle(
"#Delta#phi^{reco} - #Delta#phi^{true} / #Delta#phi^{true}");
592 fhDphiphiResidualRecoil=
new TH2F(
"hDphiphiResidualRecoil",
"#Delta#phi vs residual in phi",400,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
595 fhPtDetRecoil=
new TH1F(
"hPtDetRecoil",
"pT detector level",200,0,200);
596 fhPtDetRecoil->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
597 fhPtDetMatchedToPartRecoil =
new TH1F(
"hPtDetMatchedToPartRecoil",
"pT detector level matched to particle level jet",200,0,200);
603 fhTTPhiDetMatchedToPart =
new TH2F(
"hTTPhiDetMatchedToPart",
"trigger track #phi response reco vs partice",200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
634 TString varNamesInclusive[8]={
"centrality",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"ptPart",
"phiPart",
"binPtHard"};
635 TString varNamesRecoil[11]={
"centrality",
"ptTT",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"DPhiRec",
"ptPart",
"phiPart",
"DPhiPart",
"binPtHard"};
637 const char* nameEmbInclusive = GetOutputSlot(2)->GetContainer()->GetName();
639 for(
Int_t ivar=0; ivar < 8; ivar++){
645 const char* nameEmbRecoil= GetOutputSlot(3)->GetContainer()->GetName();
647 for(
Int_t ivar=0; ivar < 11; ivar++){
659 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
668 TH1::AddDirectory(oldStatus);
685 AliVEvent *ev = InputEvent();
715 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
717 while ((jetCont = static_cast<AliJetContainer*>(next())))
718 AliError(Form(
"%s",jetCont->GetName()));
724 if(fDebug) Printf(
"centrality: %f\n",
fCent);
735 if(fDebug) Printf(
"rho = %f",rho);
766 if(fDebug) Printf(
"%s class ---> n triggers between %f and %f = %i, index of trigger chosen = %i",dice>
fFrac?
"ref.":
"sig.",minT,maxT,number,nT);
774 for(
Int_t tt=0;tt<ParticleList.GetEntries();tt++){
778 AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);
779 if(!partback)
continue;
780 if(fDebug) Printf(
"trigger particle pt = %f \teta = %f \t phi = %f",partback->Pt(),partback->Eta(),partback->Phi());
788 if(
fCent<20.)
fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt());
789 if(
fCent<10.)
fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt());
799 groupname = jetCont->GetName();
801 for(
auto jetbig : jetCont->
accepted()) {
802 if (!jetbig)
continue;
804 ptbig = jetbig->Pt();
805 etabig = jetbig->Eta();
806 phibig = jetbig->Phi();
807 if(ptbig==0)
continue;
809 areabig = jetbig->Area();
813 if(areabig>=0.07) injet=injet+1;
814 if(areabig>=0.4) injet4=injet4+1;
816 if(fDebug) Printf(
"jet properties...\n\teta = %f \t phi = %f \t pt = %f \t relativephi = %f\t area = %f\t rho = %f",etabig,phibig,ptbig,dphi,areabig,rho);
820 Double_t dPhiShift=phibig-partback->Phi();
821 if(dPhiShift>2*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
822 if(dPhiShift<-2*TMath::Pi()) dPhiShift += 2*TMath::Pi();
823 if(dPhiShift<-0.5*TMath::Pi()) dPhiShift += 2*TMath::Pi();
824 if(dPhiShift>1.5*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
837 if(phitt<0)phitt+=TMath::Pi()*2.;
840 Double_t fillspec[] = {
fCent,areabig,ptcorr,partback->Pt(),dPhiShift,
static_cast<Double_t>(phiBintt)};
853 for(
auto partMC : partCont->
accepted()) {
854 Int_t labtr = partback->GetLabel();
855 Int_t labpa = partMC->GetLabel();
857 ptTTMC = partMC->Pt();
858 phiTTMC = partMC->Phi();
863 if(TTmatched!=1)
continue;
865 Double_t phiTTreco = partback->Phi();
866 if(fDebug) Printf(
"found corresponding truth-level particle, pt reco = %f pt MC = %f, phi reco = %f phi MC = %f",ptTTreco,ptTTMC,phiTTreco,phiTTMC);
870 auto jet2 = jetbig->ClosestJet();
876 auto jet3 = jet2->ClosestJet();
887 if(dPhiPart>2*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
888 if(dPhiPart<-2*TMath::Pi()) dPhiPart += 2*TMath::Pi();
889 if(dPhiPart<-0.5*TMath::Pi()) dPhiPart += 2*TMath::Pi();
890 if(dPhiPart>1.5*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
892 if(fDebug) Printf(
"--- recoil - jet pt = jet hybrid pt = %f\t jet matched det pt = %f\t jet matched particle level pt = %f\t\n\tjet reco phi = %f\t jet particle phi = %f",ptbig,ptJet2,ptJet3,phibig,phiJet3);
898 Double_t residual = (ptcorr - ptJet3) / ptJet3;
899 Double_t residualDphi = (dPhiShift - dPhiPart) / dPhiPart;
939 if(!jetCont || !jetContPart || !jetContTrue)
941 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
943 while ((jetCont = static_cast<AliJetContainer*>(next())))
944 AliError(Form(
"%s",jetCont->GetName()));
950 Printf(
"n particle jets = %i",jetContPart->
GetNJets());
951 Printf(
"n reco jets = %i",jetCont->GetNJets());
952 Printf(
"n PYTHIA jets = %i",jetContTrue->
GetNJets());
957 if (jetCont->GetRhoParameter()) rho = jetCont->GetRhoVal();
984 for(
auto jet1 : jetCont->accepted()) {
991 auto jet2 = jet1->ClosestJet();
997 auto jet3 = jet2->ClosestJet();
1006 if(phiJet3>2*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
1007 if(phiJet3<-2*TMath::Pi()) phiJet3 += 2*TMath::Pi();
1008 if(phiJet3<-0.5*TMath::Pi()) phiJet3 += 2*TMath::Pi();
1009 if(phiJet3>1.5*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
1011 if(phiJet1>2*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
1012 if(phiJet1<-2*TMath::Pi()) phiJet1 += 2*TMath::Pi();
1013 if(phiJet1<-0.5*TMath::Pi()) phiJet1 += 2*TMath::Pi();
1014 if(phiJet1>1.5*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
1016 if(fDebug) Printf(
"--- jet pt = jet hybrid pt = %f\t jet matched det pt = %f\t jet matched particle level pt = %f\t",ptJet1,ptJet2,ptJet3);
1019 Double_t fraction = jetCont->GetFractionSharedPt(jet1);
1023 Double_t residual = (ptCorr - ptJet3) / ptJet3;
1024 Double_t residualPhi = (phiJet1 - phiJet3) / phiJet3;
1077 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
1078 groupname = jetCont->GetName();
1080 for(
auto jet : jetCont->
accepted()) {
1084 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(),
fCentBin);
1087 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(),
fCentBin);
1090 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(),
fCentBin);
1093 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(),
fCentBin);
1097 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(),
fCentBin);
1101 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(),
fCentBin);
1116 UInt_t sumAcceptedTracks = 0;
1119 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
1120 groupname = partCont->GetName();
1122 for(
auto part : partCont->
accepted()) {
1123 if (!part)
continue;
1126 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(),
fCentBin);
1129 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(),
fCentBin);
1132 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(),
fCentBin);
1135 if (partCont->GetLoadedClass()->InheritsFrom(
"AliVTrack")) {
1136 const AliVTrack* track =
static_cast<const AliVTrack*
>(part);
1138 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(),
fCentBin);
1141 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(),
fCentBin);
1144 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(),
fCentBin);
1148 Int_t iCluster = track->GetEMCALcluster();
1149 if (iCluster >= 0) {
1152 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(),
fCentBin);
1159 sumAcceptedTracks += count;
1161 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(),
fCentBin);
1165 histname =
"fHistSumNTracks";
1177 UInt_t sumAcceptedClusters = 0;
1180 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
1181 groupname = clusCont->GetName();
1183 for(
auto cluster : clusCont->
all()) {
1184 if (!cluster)
continue;
1186 if (cluster->GetIsExotic()) {
1187 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(),
fCentBin);
1193 for(
auto cluster : clusCont->
accepted()) {
1194 if (!cluster)
continue;
1198 cluster->GetMomentum(nPart,
fVertex);
1200 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(),
fCentBin);
1203 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(),
fCentBin);
1206 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(),
fCentBin);
1209 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(),
fCentBin);
1212 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(),
fCentBin);
1215 sumAcceptedClusters += count;
1217 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(),
fCentBin);
1221 histname =
"fHistSumNClusters";
1241 for (
Short_t pos = 0; pos < ncells; pos++) {
1279 Int_t triggers[100];
1281 for(
Int_t cr=0;cr<100;cr++) triggers[cr]=-1;
1289 groupname = partCont->GetName();
1291 for(
auto part : partCont->
accepted()) {
1292 if (!part)
continue;
1295 if(part->Pt()>=minT && part->Pt()<maxT){
1296 triggers[im]=iCount-1;
1302 if(im>0) rd=
fRandom->Integer(im);
1311 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1312 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1313 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1314 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1315 double dphi = mphi-vphi;
1316 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1317 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1324 if(!(TMath::Abs(phi)<=2*TMath::Pi()))
return -1;
1325 Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
Float_t fJetHadronDeltaPhi
max angle from pi (set <0 for no selection)
TH2F * fhPtResidualRecoil
!
THashList * CreateHistoGroup(const char *groupname)
Create a new group of histograms within a parent group.
TObjArray fClusterCollArray
cluster collection array
Float_t fTTLowRef
minimum reference trigger track pt
TH1F * fhDphiResidualRecoil
!
Double_t GetRhoVal() const
const TString & GetRhoName() const
Float_t fFrac
fraction of events that are used to fill signal recoil jet population
Bool_t fFillRecoilTHnSparse
switch to fill recoil THnSparse for main analysis
Int_t SelectTrigger(TList *list, Double_t minT, Double_t maxT, Int_t &number)
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t fTTUpRef
maximum reference trigger track pt
void AllocateJetCoreHistograms()
void AllocateClusterHistograms()
Int_t GetNParticles() const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Declaration of class AliTLorentzVector.
Bool_t fFillInclusiveTree
switch to fill embedding tree with inclusive jet info
Double_t fMinBinPt
min pt in histograms
Double_t fEPV0
!event plane V0
Int_t fCentBin
!event centrality bin
Float_t fMinEmbJetPt
min corrected jet pt to use in embedding
TH1F * fhPtDetMatchedToPartRecoil
!
TH1I * fHistEvtSelection
!
TString fJetContName
Base level jet container name.
Float_t fMinFractionSharedPt
min fraction of pt between hybrid / detector jets
Container for particles within the EMCAL framework.
TString fJetContTrueName
True pp (detector) level jet container name.
TH2F * fhPtDetPartRecoil
!
TString kData
Declare data MC or deltaAOD.
TObjArray fParticleCollArray
particle/track collection array
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
const AliClusterIterableContainer all() const
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
TObject * FindObject(const char *name) const
Find an object inside the container.
Float_t fTTUpSig
maximum signal trigger track pt
THashList * GetListOfHistograms() const
Get the list of histograms.
Double_t Phi_0_2pi() const
Float_t fTTLowSig
minimum signal trigger track pt
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
BeamType fForceBeamType
forced beam type
Int_t fNcentBins
how many centrality bins
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
TH2F * fhPtHybrDetRecoil
!
AliVCluster * GetAcceptCluster(Int_t i) const
void UserCreateOutputObjects()
TString fJetContPartName
Particle(MC) level jet container name.
TH2F * fhPtHybrPartRecoil
!
TH2F * fhTTPtDetMatchedToPart
!
const AliClusterIterableContainer accepted() const
Double_t fCent
!event centrality
virtual ~AliAnalysisTaskJetCoreEmcal()
Float_t fCentMax
maximum centrality
TString fCaloCellsName
name of calo cell collection
Bool_t fFillJetHistograms
switch to fill jet histograms
Float_t fTreeVarsRecoil[11]
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
Float_t fJetEtaMax
maximum jet eta
TH2F * fhDphiphiResidualRecoil
!
TObjArray fJetCollArray
jet collection array
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 mphi, Double_t vphi)
AliVCaloCells * fCaloCells
!cells
Float_t fTreeVarsInclusive[8]
AliRhoParameter * GetRhoParameter()
AliEventCuts fEventCuts
Event cuts.
TH2F * fhDPhiHybrPartCorRecoil
!
AliAnalysisTaskJetCoreEmcal()
AliEmcalList * fOutput
!output list
Double_t fMaxBinPt
max pt in histograms
Int_t fPtHardBin
pt hard bin if running embedding
THistManager fHistManager
Histogram manager.
TH2F * fhPtHybrPartCorRecoil
!
Double_t fVertex[3]
!event vertex
TTree * fTreeEmbInclusive
!
void SetMakeGeneralHistograms(Bool_t g)
void Terminate(Option_t *option)
TH1F * fhPtDetMatchedToPart
!
Base task in the EMCAL jet framework.
Float_t fJetEtaMin
minimum jet eta
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
TH2F * fhTTPhiDetMatchedToPart
!
Declaration of class AliEmcalPythiaInfo.
const AliParticleIterableContainer accepted() const
void UserCreateOutputObjects()
Main initialization function on the worker.
const AliJetIterableContainer accepted() const
Bool_t fFillRecoilTree
switch to fill embedding tree with recoil jet info
void AllocateTrackHistograms()
void AllocateCellHistograms()
Container structure for EMCAL clusters.
Float_t fCentMin
minimum centrality
Container for jet within the EMCAL jet framework.
Bool_t fFillTrackHistograms
switch to fill track histograms
Int_t fNbins
no. of pt bins
Int_t fRejectionFactorInclusiveJets
factor to reject inclusive jets, to reduce size of ttree
void AllocateJetHistograms()
Int_t GetPhiBin(Double_t phi)