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),
74 fFillTrackHistograms(kTRUE),
75 fFillJetHistograms(kTRUE),
76 fFillInclusiveTree(kFALSE),
77 fFillRecoilTree(kFALSE),
80 fHistEvtSelection(0x0),
95 fhPhiHybrPartCor(0x0),
97 fhPtDetMatchedToPart(0x0),
101 fhPhiPhiResidual(0x0),
102 fhPtDetPartRecoil(0x0),
103 fhPtHybrDetRecoil(0x0),
104 fhPtHybrPartRecoil(0x0),
105 fhPtHybrPartCorRecoil(0x0),
107 fhPtDetMatchedToPartRecoil(0x0),
108 fhResidualRecoil(0x0),
109 fhPtResidualRecoil(0x0),
110 fhDphiResidualRecoil(0x0),
111 fhDphiphiResidualRecoil(0x0),
112 fhTTPtDetMatchedToPart(0x0),
113 fhTTPhiDetMatchedToPart(0x0),
114 fhDPhiHybrPartCorRecoil(0x0),
115 fTreeEmbInclusive(0x0),
120 DefineOutput(1, TList::Class());
122 DefineOutput(2, TTree::Class());
124 DefineOutput(3, TTree::Class());
197 DefineOutput(1, TList::Class());
198 DefineOutput(2, TTree::Class());
199 DefineOutput(3, TTree::Class());
225 while ((obj = next())) {
246 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
247 groupname = clusCont->GetName();
250 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The cluster containers will be filled into the same histograms.", GetName(), groupname.Data()));
255 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(), cent);
256 histtitle = TString::Format(
"%s;#it{E}_{cluster} (GeV);counts", histname.Data());
259 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(), cent);
260 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{exotic} (GeV);counts", histname.Data());
263 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(), cent);
264 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{non-lin.corr.} (GeV);counts", histname.Data());
267 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(), cent);
268 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{had.corr.} (GeV);counts", histname.Data());
271 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(), cent);
272 histtitle = TString::Format(
"%s;#it{#phi}_{custer};counts", histname.Data());
275 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(), cent);
276 histtitle = TString::Format(
"%s;#it{#eta}_{custer};counts", histname.Data());
279 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(), cent);
280 histtitle = TString::Format(
"%s;number of clusters;events", histname.Data());
290 histname =
"fHistSumNClusters";
291 histtitle = TString::Format(
"%s;Sum of n clusters;events", histname.Data());
313 histname = TString::Format(
"%s/histCellEnergy_%d", groupname.Data(), cent);
314 histtitle = TString::Format(
"%s;#it{E}_{cell} (GeV);counts", histname.Data());
317 histname = TString::Format(
"%s/histNCells_%d", groupname.Data(), cent);
318 histtitle = TString::Format(
"%s;number of cells;events", histname.Data());
341 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
342 groupname = partCont->GetName();
346 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The track containers will be filled into the same histograms.", GetName(), groupname.Data()));
351 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(), cent);
352 histtitle = TString::Format(
"%s;#it{p}_{T,track} (GeV/#it{c});counts", histname.Data());
355 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(), cent);
356 histtitle = TString::Format(
"%s;#it{#phi}_{track};counts", histname.Data());
359 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(), cent);
360 histtitle = TString::Format(
"%s;#it{#eta}_{track};counts", histname.Data());
363 if (TClass(partCont->GetClassName()).InheritsFrom(
"AliVTrack")) {
364 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(), cent);
365 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#eta}_{track}^{vertex} - #it{#eta}_{track}^{EMCal};counts", histname.Data());
368 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(), cent);
369 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#phi}_{track}^{vertex} - #it{#phi}_{track}^{EMCal};counts", histname.Data());
372 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(), cent);
373 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());
376 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(), cent);
377 histtitle = TString::Format(
"%s;#it{P}_{track} (GeV/#it{c});#it{E}_{cluster} / #it{P}_{track} #it{c};counts", histname.Data());
381 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(), cent);
382 histtitle = TString::Format(
"%s;number of tracks;events", histname.Data());
392 histname =
"fHistSumNTracks";
393 histtitle = TString::Format(
"%s;Sum of n tracks;events", histname.Data());
414 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
415 groupname = jetCont->GetName();
418 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The jet containers will be filled into the same histograms.", GetName(), groupname.Data()));
423 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(), cent);
424 histtitle = TString::Format(
"%s;#it{p}_{T,jet} (GeV/#it{c});counts", histname.Data());
427 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(), cent);
428 histtitle = TString::Format(
"%s;#it{A}_{jet};counts", histname.Data());
431 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(), cent);
432 histtitle = TString::Format(
"%s;#it{#phi}_{jet};counts", histname.Data());
435 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(), cent);
436 histtitle = TString::Format(
"%s;#it{#eta}_{jet};counts", histname.Data());
439 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(), cent);
440 histtitle = TString::Format(
"%s;number of jets;events", histname.Data());
449 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(), cent);
450 histtitle = TString::Format(
"%s;#it{p}_{T,jet}^{corr} (GeV/#it{c});counts", histname.Data());
460 Bool_t oldStatus = TH1::AddDirectoryStatus();
461 TH1::AddDirectory(kFALSE);
492 const Int_t dimSpec = 6;
493 const Int_t nBinsSpec[dimSpec] = {100,100, 280, 50,200,
fNRPBins};
494 const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0,-0.5*TMath::Pi(), 0};
496 fHJetSpec =
new THnSparseF(
"fHJetSpec",
"Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
517 fhDphiPtSig =
new TH2F(
"hDphiPtS",
"recoil #Delta #phi vs jet pT signal",100,-2,5,250,-50,200);
519 fhDphiPtSig->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
520 fhDphiPtRef =
new TH2F(
"hDphiPtR",
"recoil #Delta #phi vs jet pT reference",100,-2,5,250,-50,200);
522 fhDphiPtRef->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
528 fhPtHybrDet=
new TH2F(
"hPtHybrDet",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
529 fhPtHybrDet->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
530 fhPtHybrDet->GetYaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
531 fhPtDetPart=
new TH2F(
"hPtDetPart",
"pT response PYTHIA vs part",200,0,200,200,0,200);
532 fhPtDetPart->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
533 fhPtDetPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
535 fhPtHybrPart->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
536 fhPtHybrPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
538 fhPtHybrPartCor->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
541 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());
544 fhResidual =
new TH1F(
"hResidual",
"residual",50,-1,1);
545 fhResidual->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
547 fhPtResidual->GetXaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
548 fhPtResidual->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
549 fhPhiResidual =
new TH1F(
"hPhiResidual",
"residual phi",50,-1,1);
550 fhPhiResidual->GetXaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
551 fhPhiPhiResidual=
new TH2F(
"hPhiPhiResidual",
"pT vs residual",600,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
553 fhPhiPhiResidual->GetYaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
555 fhPtDet=
new TH1F(
"hPtDet",
"pT detector level",200,0,200);
556 fhPtDet->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
557 fhPtDetMatchedToPart =
new TH1F(
"hPtDetMatchedToPart",
"pT detector level matched to particle level jet",200,0,200);
560 fhPtHybrDetRecoil=
new TH2F(
"hPtHybrDetRecoil",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
573 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());
577 fhResidualRecoil->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
580 fhPtResidualRecoil->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
583 fhDphiResidualRecoil->GetXaxis()->SetTitle(
"#Delta#phi^{reco} - #Delta#phi^{true} / #Delta#phi^{true}");
584 fhDphiphiResidualRecoil=
new TH2F(
"hDphiphiResidualRecoil",
"#Delta#phi vs residual in phi",400,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
587 fhPtDetRecoil=
new TH1F(
"hPtDetRecoil",
"pT detector level",200,0,200);
588 fhPtDetRecoil->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
589 fhPtDetMatchedToPartRecoil =
new TH1F(
"hPtDetMatchedToPartRecoil",
"pT detector level matched to particle level jet",200,0,200);
595 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());
626 TString varNamesInclusive[8]={
"centrality",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"ptPart",
"phiPart",
"binPtHard"};
627 TString varNamesRecoil[11]={
"centrality",
"ptTT",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"DPhiRec",
"ptPart",
"phiPart",
"DPhiPart",
"binPtHard"};
629 const char* nameEmbInclusive = GetOutputSlot(2)->GetContainer()->GetName();
631 for(
Int_t ivar=0; ivar < 8; ivar++){
637 const char* nameEmbRecoil= GetOutputSlot(3)->GetContainer()->GetName();
639 for(
Int_t ivar=0; ivar < 11; ivar++){
651 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
660 TH1::AddDirectory(oldStatus);
677 AliVEvent *ev = InputEvent();
707 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
709 while ((jetCont = static_cast<AliJetContainer*>(next())))
710 AliError(Form(
"%s",jetCont->GetName()));
716 if(fDebug) Printf(
"centrality: %f\n",
fCent);
727 if(fDebug) Printf(
"rho = %f",rho);
758 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);
766 for(
Int_t tt=0;tt<ParticleList.GetEntries();tt++){
770 AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);
771 if(!partback)
continue;
772 if(fDebug) Printf(
"trigger particle pt = %f \teta = %f \t phi = %f",partback->Pt(),partback->Eta(),partback->Phi());
780 if(
fCent<20.)
fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt());
781 if(
fCent<10.)
fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt());
791 groupname = jetCont->GetName();
793 for(
auto jetbig : jetCont->
accepted()) {
794 if (!jetbig)
continue;
796 ptbig = jetbig->Pt();
797 etabig = jetbig->Eta();
798 phibig = jetbig->Phi();
799 if(ptbig==0)
continue;
801 areabig = jetbig->Area();
805 if(areabig>=0.07) injet=injet+1;
806 if(areabig>=0.4) injet4=injet4+1;
808 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);
812 Double_t dPhiShift=phibig-partback->Phi();
813 if(dPhiShift>2*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
814 if(dPhiShift<-2*TMath::Pi()) dPhiShift += 2*TMath::Pi();
815 if(dPhiShift<-0.5*TMath::Pi()) dPhiShift += 2*TMath::Pi();
816 if(dPhiShift>1.5*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
828 if(phitt<0)phitt+=TMath::Pi()*2.;
831 Double_t fillspec[] = {
fCent,areabig,ptcorr,partback->Pt(),dPhiShift,
static_cast<Double_t>(phiBintt)};
842 for(
auto partMC : partCont->
accepted()) {
843 Int_t labtr = partback->GetLabel();
844 Int_t labpa = partMC->GetLabel();
846 ptTTMC = partMC->Pt();
847 phiTTMC = partMC->Phi();
852 if(TTmatched!=1)
continue;
854 Double_t phiTTreco = partback->Phi();
855 if(fDebug) Printf(
"found corresponding truth-level particle, pt reco = %f pt MC = %f, phi reco = %f phi MC = %f",ptTTreco,ptTTMC,phiTTreco,phiTTMC);
859 auto jet2 = jetbig->ClosestJet();
865 auto jet3 = jet2->ClosestJet();
876 if(dPhiPart>2*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
877 if(dPhiPart<-2*TMath::Pi()) dPhiPart += 2*TMath::Pi();
878 if(dPhiPart<-0.5*TMath::Pi()) dPhiPart += 2*TMath::Pi();
879 if(dPhiPart>1.5*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
881 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);
887 Double_t residual = (ptcorr - ptJet3) / ptJet3;
888 Double_t residualDphi = (dPhiShift - dPhiPart) / dPhiPart;
928 if(!jetCont || !jetContPart || !jetContTrue)
930 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
932 while ((jetCont = static_cast<AliJetContainer*>(next())))
933 AliError(Form(
"%s",jetCont->GetName()));
939 Printf(
"n particle jets = %i",jetContPart->
GetNJets());
940 Printf(
"n reco jets = %i",jetCont->GetNJets());
941 Printf(
"n PYTHIA jets = %i",jetContTrue->
GetNJets());
946 if (jetCont->GetRhoParameter()) rho = jetCont->GetRhoVal();
973 for(
auto jet1 : jetCont->accepted()) {
977 auto jet2 = jet1->ClosestJet();
983 auto jet3 = jet2->ClosestJet();
992 if(phiJet3>2*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
993 if(phiJet3<-2*TMath::Pi()) phiJet3 += 2*TMath::Pi();
994 if(phiJet3<-0.5*TMath::Pi()) phiJet3 += 2*TMath::Pi();
995 if(phiJet3>1.5*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
997 if(phiJet1>2*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
998 if(phiJet1<-2*TMath::Pi()) phiJet1 += 2*TMath::Pi();
999 if(phiJet1<-0.5*TMath::Pi()) phiJet1 += 2*TMath::Pi();
1000 if(phiJet1>1.5*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
1002 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);
1005 Double_t fraction = jetCont->GetFractionSharedPt(jet1);
1011 Double_t residual = (ptCorr - ptJet3) / ptJet3;
1012 Double_t residualPhi = (phiJet1 - phiJet3) / phiJet3;
1065 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
1066 groupname = jetCont->GetName();
1068 for(
auto jet : jetCont->
accepted()) {
1072 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(),
fCentBin);
1075 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(),
fCentBin);
1078 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(),
fCentBin);
1081 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(),
fCentBin);
1085 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(),
fCentBin);
1089 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(),
fCentBin);
1104 UInt_t sumAcceptedTracks = 0;
1107 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
1108 groupname = partCont->GetName();
1110 for(
auto part : partCont->
accepted()) {
1111 if (!part)
continue;
1114 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(),
fCentBin);
1117 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(),
fCentBin);
1120 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(),
fCentBin);
1123 if (partCont->GetLoadedClass()->InheritsFrom(
"AliVTrack")) {
1124 const AliVTrack* track =
static_cast<const AliVTrack*
>(part);
1126 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(),
fCentBin);
1129 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(),
fCentBin);
1132 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(),
fCentBin);
1136 Int_t iCluster = track->GetEMCALcluster();
1137 if (iCluster >= 0) {
1140 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(),
fCentBin);
1147 sumAcceptedTracks += count;
1149 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(),
fCentBin);
1153 histname =
"fHistSumNTracks";
1165 UInt_t sumAcceptedClusters = 0;
1168 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
1169 groupname = clusCont->GetName();
1171 for(
auto cluster : clusCont->
all()) {
1172 if (!cluster)
continue;
1174 if (cluster->GetIsExotic()) {
1175 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(),
fCentBin);
1181 for(
auto cluster : clusCont->
accepted()) {
1182 if (!cluster)
continue;
1186 cluster->GetMomentum(nPart,
fVertex);
1188 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(),
fCentBin);
1191 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(),
fCentBin);
1194 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(),
fCentBin);
1197 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(),
fCentBin);
1200 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(),
fCentBin);
1203 sumAcceptedClusters += count;
1205 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(),
fCentBin);
1209 histname =
"fHistSumNClusters";
1229 for (
Short_t pos = 0; pos < ncells; pos++) {
1267 Int_t triggers[100];
1269 for(
Int_t cr=0;cr<100;cr++) triggers[cr]=-1;
1277 groupname = partCont->GetName();
1279 for(
auto part : partCont->
accepted()) {
1280 if (!part)
continue;
1283 if(part->Pt()>=minT && part->Pt()<maxT){
1284 triggers[im]=iCount-1;
1290 if(im>0) rd=
fRandom->Integer(im);
1299 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1300 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1301 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1302 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1303 double dphi = mphi-vphi;
1304 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1305 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1312 if(!(TMath::Abs(phi)<=2*TMath::Pi())){AliError(
"phi w.r.t. RP out of defined range");
return -1;}
1313 Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
1315 if(phibin<0||phibin>=
fNRPBins){AliError(
"Phi Bin not defined");}
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
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
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
void AllocateJetHistograms()
Int_t GetPhiBin(Double_t phi)