Rivet analyses
KS0 - and (anti-)Λ-hadron correlations in pp collisions at $\sqrt{s} = 13$ TeV
Experiment: ALICE (LHC)
Inspire ID: 1891391
Status: VALIDATED
Authors: - Lucia Anna Tarasovicova - Daniel Gunther
References: - Eur.Phys.J.C 81 (2021) 10, 945 - arXiv: 2107.11209
Beams: p+ p+
Beam energies: (6500.0, 6500.0)GeV
Run details: none listed
δφ projections of two-particle correlation functions, triggered with charged hadrons, KS0, and Λ($\overline{\Lambda}$), per-trigger jet-like yields spectra extracted from these correlation functions on the near-side and away-side as a function of multiplicity class, pT of the trigger particle, and pT of the associated particle in pp collisions at $\sqrt{s} = 13$ TeV. The ratios of these yields to the yields from minimum bias collisions as well as the ratios of yields triggered with different particles are also included.
Source
code:ALICE_2021_I1891391.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Analyses/AliceCommon.hh"
#include "Rivet/Projections/CentralityProjection.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/EventMixingFinalState.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/PromptFinalState.hh"
#include "YODA/Utils/sortedvector.h"
namespace Rivet {
/// @brief KS0 and (anti-)Lambda hadron correlations in pp collisions at 13 TeV
class ALICE_2021_I1891391 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2021_I1891391);
/// @name Analysis methods
/// @{
void fillbyparticles(Histo1DGroupPtr& _histo, const Particle& tp, const Particle& ap) {
double dphi = (ap.phi() - tp.phi());
if (dphi < -0.5 * M_PI) dphi = dphi + 2 * M_PI;
if (dphi > 1.5 * M_PI) dphi = dphi - 2 * M_PI;
double deta = (ap.eta() - tp.eta());
_histo->fill(deta, dphi);
}
void S2DProjectionY(Scatter2DPtr projection, Histo1DGroupPtr& hist2D) {
double phiValues[N_phibins];
double phiValueserr[N_phibins];
vector<Point2D> points = projection->points();
for (int i = 0; i < N_phibins; ++i) {
phiValues[i] = 0;
phiValueserr[i] = 0;
}
for (const auto& hist : hist2D->bins()) {
for (const auto& bin : hist->bins()) {
phiValues[bin.index() - 1] += bin.sumW();
phiValueserr[bin.index() - 1] += bin.sumW2();
}
}
projection->reset();
for (size_t idx = 0; idx < N_phibins; ++idx) {
phiValueserr[idx] = sqrt(phiValueserr[idx]);
phiValues[idx] = phiValues[idx];
projection->addPoint(points[idx].x(), phiValues[idx], points[idx].xErrAvg(), phiValueserr[idx]);
}
return;
}
pair<double, double> BackgEstimate(const Scatter2DPtr& hist) {
pair<double, double> backg;
vector<Point2D> points = hist->points();
backg.first = (points[1].y() + points[2].y() + points[3].y() + points[34].y() + points[35].y()
+ points[36].y())
/ 6;
backg.second = pow(points[1].yErrAvg(), 2) + pow(points[2].yErrAvg(), 2) + pow(points[3].yErrAvg(), 2);
backg.second += pow(points[34].yErrAvg(), 2) + pow(points[35].yErrAvg(), 2)
+ pow(points[36].yErrAvg(), 2);
backg.second = sqrt(backg.second) / 6;
return backg;
}
void ZYAM(Scatter2DPtr& hist_final, const Scatter2DPtr& hist) {
vector<Point2D> points = hist->points();
pair<double, double> backg = BackgEstimate(hist);
hist_final->reset();
for (size_t idx = 0; idx < N_phibins; ++idx) {
hist_final->addPoint(points[idx].x(), points[idx].y() - backg.first, points[idx].xErrAvg(),
sqrt(pow(points[idx].yErrAvg(), 2) + pow(backg.second, 2)));
}
}
Point2D IntegratePeak(Scatter2DPtr s, const pair<double, double>& PeakInterval) {
Point2D PeakYield;
pair<double, double> Errs{0, 0};
PeakYield.setY(0);
PeakYield.setYErrs(Errs);
for (const auto& point : s->points()) {
if (point.xMin() > PeakInterval.first && point.xMax() < PeakInterval.second) {
PeakYield.setY(point.y() + PeakYield.y());
Errs.first = sqrt(pow(point.yErrs().first, 2) + pow(PeakYield.yErrs().first, 2));
Errs.second = sqrt(pow(point.yErrs().second, 2) + pow(PeakYield.yErrs().second, 2));
PeakYield.setYErrs(Errs);
}
}
PeakYield.setY(PeakYield.y() * 2 * M_PI / N_phibins);
Errs.first = PeakYield.yErrs().first * 2 * M_PI / N_phibins;
Errs.second = PeakYield.yErrs().second * 2 * M_PI / N_phibins;
PeakYield.setYErrs(Errs);
return PeakYield;
}
void IntegratePeakByPT(Scatter2DPtr& s,
Scatter2DPtr vs[8],
pair<double, double> PeakInterval,
int pt_interval) {
Point2D PeakYield;
double xval_trig[PT_ASSOC_BINS] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 8., 10., 13., 17.5};
double xval_trigerr[PT_ASSOC_BINS] = {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1., 1., 2., 2.5};
s->reset();
int pt = 0;
for (int pTsel = 0; pTsel < pt_interval + 2; ++pTsel) {
if (pt_interval == 8) {
pt = pTsel + 2;
if (pTsel > 7) continue;
}
else
pt = pTsel;
PeakYield = IntegratePeak(vs[pTsel], PeakInterval);
s->addPoint(xval_trig[pt], PeakYield.y(), xval_trigerr[pt], PeakYield.yErrAvg());
}
}
void sdivide(Scatter2DPtr& V0hist,
Scatter2DPtr& hhist,
Scatter2DPtr& ratio_hist,
int pt_interval,
bool V0mult) {
vector<Point2D> V0h_points = V0hist->points();
vector<Point2D> hh_points = hhist->points();
double xval[PT_ASSOC_BINS] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 8., 10., 13., 17.5};
double xval_err[PT_ASSOC_BINS] = {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1., 1., 2., 2.5};
double ratio, ratio_err;
if (V0mult) {
xval[6] = 9;
xval[7] = 15.5;
xval_err[6] = 2;
xval_err[7] = 4.5;
}
ratio_hist->reset();
int pt = 0;
for (int idx = 0; idx < pt_interval + 2; ++idx) {
if (pt_interval >= 7 || V0mult) {
pt = idx + 2;
if (idx > pt_interval - 1) continue;
}
else {
pt = idx;
}
if (V0mult && idx > 3) {
if (idx == 4 && (hh_points[4].y() > 0 || hh_points[5].y())) {
ratio = (V0h_points[4].y() + V0h_points[5].y()) / (hh_points[4].y() + hh_points[5].y());
ratio_err = sqrt(pow(V0h_points[4].yErrAvg() / (hh_points[4].y() + hh_points[5].y()), 2)
+ pow(V0h_points[5].yErrAvg() / (hh_points[4].y() + hh_points[5].y()), 2)
+ pow(((V0h_points[4].y() + V0h_points[5].y()) * hh_points[4].yErrAvg())
/ (pow(hh_points[4].y() + hh_points[5].y(), 2)),
2)
+ pow(((V0h_points[4].y() + V0h_points[5].y()) * hh_points[5].yErrAvg())
/ (pow(hh_points[4].y() + hh_points[5].y(), 2)),
2));
}
else if (idx == 5 && (hh_points[6].y() > 0 || hh_points[7].y())) {
ratio = (V0h_points[6].y() + V0h_points[7].y()) / (hh_points[6].y() + hh_points[7].y());
ratio_err = sqrt(pow(V0h_points[6].yErrAvg() / (hh_points[6].y() + hh_points[7].y()), 2)
+ pow(V0h_points[7].yErrAvg() / (hh_points[6].y() + hh_points[7].y()), 2)
+ pow(((V0h_points[6].y() + V0h_points[7].y()) * hh_points[6].yErrAvg())
/ (pow(hh_points[6].y() + hh_points[7].y(), 2)),
2)
+ pow(((V0h_points[6].y() + V0h_points[7].y()) * hh_points[7].yErrAvg())
/ (pow(hh_points[6].y() + hh_points[7].y(), 2)),
2));
}
else {
ratio = 1;
ratio_err = 0.02;
}
}
else if (hh_points[idx].y() > 0) {
ratio = V0h_points[idx].y() / hh_points[idx].y();
ratio_err = sqrt(
pow(V0h_points[idx].yErrAvg() / hh_points[idx].y(), 2)
+ pow((V0h_points[idx].y() * hh_points[idx].yErrAvg()) / (pow(hh_points[idx].y(), 2)), 2));
}
else {
ratio = 10;
ratio_err = 1;
}
ratio_hist->addPoint(xval[pt], ratio, xval_err[pt], ratio_err);
}
}
int profileIndex(vector<double> cBins, double c) {
int index = 100;
for (size_t i = 0; i < cBins.size() - 1; ++i) {
if (c > cBins[i] && c <= cBins[i + 1]) {
index = i;
break;
}
}
return index;
}
/// Book histograms and initialise projections before the run
void init() {
// Projections
declareCentrality(ALICE::V0MMultiplicity(), "ALICE_2015_CENT_PP", "V0M", "V0M");
// Projections for trigger particles: charged, primary particles
// with |eta| < 0.8 and different pT bins
for (int ipt = 0; ipt < PT_TRIGG_BINS; ++ipt) {
Cut cut = Cuts::abseta < 0.8 && Cuts::abscharge > 0
&& Cuts::ptIn(bins_pt_trigg[ipt] * GeV, bins_pt_trigg[ipt + 1] * GeV);
declare(ALICE::PrimaryParticles(cut), "APRIMTrigg" + toString(ipt));
}
// Projections for trigger particles: neutral, primary particles
// with |y| < 0.5 and different pT bins
for (int ipt = 0; ipt < PT_TRIGG_BINS; ++ipt) {
Cut cut = Cuts::absrap < 0.5 && Cuts::abscharge == 0
&& Cuts::ptIn(bins_pt_trigg[ipt] * GeV, bins_pt_trigg[ipt + 1] * GeV);
declare(ALICE::PrimaryParticles(cut), "APRIMTrigg0" + toString(ipt));
}
// Projections for associated particles: charged, primary particles
// with |eta| < 0.8 and different pT bins
for (int ipt = 0; ipt < PT_ASSOC_BINS; ++ipt) {
Cut cut = Cuts::abseta < 0.8 && Cuts::abscharge > 0
&& Cuts::ptIn(bins_pt_assoc[ipt] * GeV, bins_pt_assoc[ipt + 1] * GeV);
declare(ALICE::PrimaryParticles(cut), "APRIMAssoc" + toString(ipt));
}
const ChargedFinalState cfs(Cuts::pT > 1 * GeV && Cuts::abseta < 0.8);
declare(cfs, "CFS");
const EventMixingFinalState evmc(cfs, cfs, 5, 0, 100, 10, 1.0);
declare(evmc, "EVMc");
multiplicityBins = {0., 1., 3., 7., 15., 50, 100.};
etabins.resize(39);
etabins[0] = -1.013333 - 2.666650e-02;
for (size_t i = 1; i < etabins.size(); ++i) {
etabins[i] = etabins[i - 1] + (2 * 2.666650e-02);
}
// Histograms
const auto& ref = refData(2, 1, 1);
for (size_t imult = 0; imult < MULT_BINS; ++imult) {
for (size_t ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
book(_hist_hh_2D_mult[imult][ipt_trigg], etabins);
book(_hist_K0h_2D_mult[imult][ipt_trigg], etabins);
book(_hist_Lamh_2D_mult[imult][ipt_trigg], etabins);
for (size_t i = 0; i < _hist_hh_2D_mult[imult][ipt_trigg]->numBins(); ++i) {
const string suff = mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg] + to_string(i);
book(_hist_hh_2D_mult[imult][ipt_trigg]->bin(i + 1), "TMP/ist_hh_2D_mult_" + suff, ref);
book(_hist_K0h_2D_mult[imult][ipt_trigg]->bin(i + 1), "TMP/ist_K0h_2D_mult_" + suff, ref);
book(_hist_Lamh_2D_mult[imult][ipt_trigg]->bin(i + 1), "TMP/ist_Lamh_2D_mult_" + suff, ref);
}
book(_counterChargedTriggers_mult[imult][ipt_trigg],
"TMP/counterChargedTriggers_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg]);
book(_counterK0Triggers_mult[imult][ipt_trigg],
"TMP/counterK0Triggers_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg]);
book(_counterLamTriggers_mult[imult][ipt_trigg],
"TMP/counterLamTriggers_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg]);
book(_hist_dPhi_hh_mult[imult][ipt_trigg],
"TMP/hist_dPhi_hh_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(2, 1, 1).mkScatter());
book(_hist_dPhi_K0h_mult[imult][ipt_trigg],
"TMP/hist_dPhi_K0h_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(3, 1, 1).mkScatter());
book(_hist_dPhi_Lamh_mult[imult][ipt_trigg],
"TMP/hist_dPhi_Lamh_mult_" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(4, 1, 1).mkScatter());
if (imult < 6 || (imult == 6 && !(ipt_trigg == 0 || ipt_trigg == 5))) {
book(_hist_dPhi_hh_mult_fin[imult][ipt_trigg],
"TMP/hist_dPhi_hh_mult_fin" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(2, 1, 1).mkScatter());
book(_hist_dPhi_K0h_mult_fin[imult][ipt_trigg],
"TMP/hist_dPhi_K0h_mult_fin" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(3, 1, 1).mkScatter());
book(_hist_dPhi_Lamh_mult_fin[imult][ipt_trigg],
"TMP/hist_dPhi_Lamh_mult_fin" + mulsel_name[imult] + "_" + bins_pt_trigg_name[ipt_trigg],
refData(4, 1, 1).mkScatter());
}
}
}
book(_hist_dPhi_hh_mult_fin[6][0], 2, 1, 1);
book(_hist_dPhi_K0h_mult_fin[6][0], 3, 1, 1);
book(_hist_dPhi_Lamh_mult_fin[6][0], 4, 1, 1);
book(_hist_dPhi_hh_mult_fin[6][5], 5, 1, 1);
book(_hist_dPhi_K0h_mult_fin[6][5], 6, 1, 1);
book(_hist_dPhi_Lamh_mult_fin[6][5], 7, 1, 1);
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
for (int ipt_assoc = 0; ipt_assoc < PT_ASSOC_BINS; ++ipt_assoc) {
book(_hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc], etabins);
book(_hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc], etabins);
book(_hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc], etabins);
for (size_t i = 0; i < _hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc]->numBins(); ++i) {
const string suff = bins_pt_trigg_name[ipt_trigg] + bins_pt_assoc_name[ipt_assoc] + to_string(i);
book(_hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc]->bin(i + 1), "TMP/ist_hh_2D_ptassoc_" + suff, ref);
book(_hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc]->bin(i + 1), "TMP/ist_K0h_2D_ptassoc_" + suff,
ref);
book(_hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc]->bin(i + 1), "TMP/ist_Lamh_2D_ptassoc_" + suff,
ref);
}
book(_hist_dPhi_hh_ptassoc[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_hh_ptassoc_" + bins_pt_trigg_name[ipt_trigg] + bins_pt_assoc_name[ipt_assoc],
refData(2, 1, 1).mkScatter());
book(_hist_dPhi_K0h_ptassoc[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_K0h_ptassoc_" + bins_pt_trigg_name[ipt_trigg] + bins_pt_assoc_name[ipt_assoc],
refData(3, 1, 1).mkScatter());
book(_hist_dPhi_Lamh_ptassoc[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_Lamh_ptassoc_" + bins_pt_trigg_name[ipt_trigg] + bins_pt_assoc_name[ipt_assoc],
refData(4, 1, 1).mkScatter());
book(_hist_dPhi_hh_ptassoc_fin[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_hh_ptassoc_fin_" + bins_pt_trigg_name[ipt_trigg]
+ bins_pt_assoc_name[ipt_assoc],
refData(2, 1, 1).mkScatter());
book(_hist_dPhi_K0h_ptassoc_fin[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_K0h_ptassoc_fin_" + bins_pt_trigg_name[ipt_trigg]
+ bins_pt_assoc_name[ipt_assoc],
refData(3, 1, 1).mkScatter());
book(_hist_dPhi_Lamh_ptassoc_fin[ipt_trigg][ipt_assoc],
"TMP/hist_dPhi_Lamh_ptassoc_fin_" + bins_pt_trigg_name[ipt_trigg]
+ bins_pt_assoc_name[ipt_assoc],
refData(4, 1, 1).mkScatter());
}
}
for (int imult = 0; imult < MULT_BINS; ++imult) {
book(_hist_hh_NearSideYield_mult[imult], 8, 1, imult + 1);
book(_hist_K0h_NearSideYield_mult[imult], 9, 1, imult + 1);
book(_hist_Lamh_NearSideYield_mult[imult], 10, 1, imult + 1);
book(_hist_hh_AwaySideYield_mult[imult], 11, 1, imult + 1);
book(_hist_K0h_AwaySideYield_mult[imult], 12, 1, imult + 1);
book(_hist_Lamh_AwaySideYield_mult[imult], 13, 1, imult + 1);
if (imult < MULT_BINS - 1) {
book(_hist_hh_NearSideYield_mult_ratio[imult], 14, 1, imult + 1);
book(_hist_K0h_NearSideYield_mult_ratio[imult], 15, 1, imult + 1);
book(_hist_Lamh_NearSideYield_mult_ratio[imult], 16, 1, imult + 1);
book(_hist_hh_AwaySideYield_mult_ratio[imult], 17, 1, imult + 1);
book(_hist_K0h_AwaySideYield_mult_ratio[imult], 18, 1, imult + 1);
book(_hist_Lamh_AwaySideYield_mult_ratio[imult], 19, 1, imult + 1);
book(_hist_K0h_NearSideYield_ratioTo_hh_mult[imult], imult + 27, 1, 1);
book(_hist_Lamh_NearSideYield_ratioTo_hh_mult[imult], imult + 34, 1, 1);
book(_hist_K0h_AwaySideYield_ratioTo_hh_mult[imult], imult + 41, 1, 1);
book(_hist_Lamh_AwaySideYield_ratioTo_hh_mult[imult], imult + 48, 1, 1);
}
else {
book(_hist_K0h_NearSideYield_ratioTo_hh_mult[imult], 26, 1, 1);
book(_hist_Lamh_NearSideYield_ratioTo_hh_mult[imult], 33, 1, 1);
book(_hist_K0h_AwaySideYield_ratioTo_hh_mult[imult], 40, 1, 1);
book(_hist_Lamh_AwaySideYield_ratioTo_hh_mult[imult], 47, 1, 1);
}
}
for (int ipttrigg = 0; ipttrigg < PT_TRIGG_BINS; ++ipttrigg) {
book(_hist_hh_NearSideYield_ptassoc[ipttrigg], 20, 1, ipttrigg + 1);
book(_hist_hh_AwaySideYield_ptassoc[ipttrigg], 23, 1, ipttrigg + 1);
book(_hist_K0h_NearSideYield_ptassoc[ipttrigg], 21, 1, ipttrigg + 1);
book(_hist_K0h_AwaySideYield_ptassoc[ipttrigg], 24, 1, ipttrigg + 1);
if (ipttrigg < PT_TRIGG_BINS - 1) {
book(_hist_Lamh_NearSideYield_ptassoc[ipttrigg], 22, 1, ipttrigg + 1);
book(_hist_Lamh_AwaySideYield_ptassoc[ipttrigg], 25, 1, ipttrigg + 1);
book(_hist_K0h_NearSideYield_ratioTo_hh_ptassoc[ipttrigg], ipttrigg + 54, 1, 1);
book(_hist_Lamh_NearSideYield_ratioTo_hh_ptassoc[ipttrigg], ipttrigg + 61, 1, 1);
book(_hist_K0h_AwaySideYield_ratioTo_hh_ptassoc[ipttrigg], ipttrigg + 68, 1, 1);
book(_hist_Lamh_AwaySideYield_ratioTo_hh_ptassoc[ipttrigg], ipttrigg + 75, 1, 1);
}
}
book(_hist_mix_hh, etabins);
book(_hist_mix_K0h, etabins);
book(_hist_mix_Lamh, etabins);
for (size_t i = 0; i < _hist_mix_hh->numBins(); ++i) {
const string suff = to_string(i);
book(_hist_mix_hh->bin(i + 1), "TMP/hist_mix_hh" + suff, ref);
book(_hist_mix_K0h->bin(i + 1), "TMP/hist_mix_K0h" + suff, ref);
book(_hist_mix_Lamh->bin(i + 1), "TMP/hist_mix_Lamh" + suff, ref);
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
//multiplicity block
const CentralityProjection& cent = apply<CentralityProjection>(event, "V0M");
double c = cent();
int index = profileIndex(multiplicityBins, c);
//particle correlation block
// Get trigger particles, charged hadrons
Particles trigg_h_Particles[PT_TRIGG_BINS];
for (int ipt = 0; ipt < PT_TRIGG_BINS; ++ipt) {
string pname = "APRIMTrigg" + toString(ipt);
trigg_h_Particles[ipt] = apply<ALICE::PrimaryParticles>(event, pname).particles();
}
// Get trigger particles, neutral hadrons
Particles trigg_V0_Particles[PT_TRIGG_BINS];
for (int ipt = 0; ipt < PT_TRIGG_BINS; ++ipt) {
string pname = "APRIMTrigg0" + toString(ipt);
trigg_V0_Particles[ipt] = apply<ALICE::PrimaryParticles>(event, pname).particles();
}
// Get associated particles particles, charged hadrons
Particles assocParticles[PT_ASSOC_BINS];
for (int ipt = 0; ipt < PT_ASSOC_BINS; ++ipt) {
string pname = "APRIMAssoc" + toString(ipt);
assocParticles[ipt] = apply<ALICE::PrimaryParticles>(event, pname).particles();
}
//trigger = any charged particle
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
if (trigg_h_Particles[ipt_trigg].size() == 0) continue;
for (const Particle& trigg : trigg_h_Particles[ipt_trigg]) {
_counterChargedTriggers_mult[6][ipt_trigg]->fill(1);
if (index > -1 && index < 6) _counterChargedTriggers_mult[index][ipt_trigg]->fill(1);
for (int ipt_assoc = 0; ipt_assoc < PT_ASSOC_BINS; ++ipt_assoc) {
if (assocParticles[ipt_assoc].size() == 0) continue;
for (const Particle& assoc : assocParticles[ipt_assoc]) {
if (assoc.pT() < trigg.pT()) {
fillbyparticles(_hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc], trigg, assoc);
if (index > -1 && index < 6)
fillbyparticles(_hist_hh_2D_mult[index][ipt_trigg], trigg, assoc);
fillbyparticles(_hist_hh_2D_mult[6][ipt_trigg], trigg, assoc);
}
}
}
}
}
//trigger = V0
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
if (trigg_V0_Particles[ipt_trigg].size() == 0) continue;
for (const Particle& triggV0 : trigg_V0_Particles[ipt_trigg]) {
const int pid = abs(triggV0.pid());
if (pid == 310) {
_counterK0Triggers_mult[6][ipt_trigg]->fill(1);
if (index > -1 && index < 6) _counterK0Triggers_mult[index][ipt_trigg]->fill(1);
}
if (pid == 3122) {
_counterLamTriggers_mult[6][ipt_trigg]->fill(1);
if (index > -1 && index < 6) _counterLamTriggers_mult[index][ipt_trigg]->fill(1);
}
for (int ipt_assoc = 0; ipt_assoc < PT_ASSOC_BINS; ++ipt_assoc) {
if (assocParticles[ipt_assoc].size() == 0) continue;
for (const Particle& assoc : assocParticles[ipt_assoc]) {
if (assoc.pT() < triggV0.pT() && pid == 310) {
fillbyparticles(_hist_K0h_2D_mult[6][ipt_trigg], triggV0, assoc);
if (index > -1 && index < 6)
fillbyparticles(_hist_K0h_2D_mult[index][ipt_trigg], triggV0, assoc);
fillbyparticles(_hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc], triggV0, assoc);
}
if (assoc.pT() < triggV0.pT() && pid == 3122) {
fillbyparticles(_hist_Lamh_2D_mult[6][ipt_trigg], triggV0, assoc);
if (index > -1 && index < 6)
fillbyparticles(_hist_Lamh_2D_mult[index][ipt_trigg], triggV0, assoc);
fillbyparticles(_hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc], triggV0, assoc);
}
}
}
}
}
//end of particle correlation block
//mixed event block
const EventMixingFinalState& evmc = apply<EventMixingFinalState>(event, "EVMc");
if (!evmc.hasMixingEvents()) return;
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
if (trigg_h_Particles[ipt_trigg].size() == 0) continue;
for (const Particle& trigg : trigg_h_Particles[ipt_trigg]) {
if (evmc.particles().size() == 0) continue;
for (const Particle& assoc_mix : evmc.particles()) {
if (assoc_mix.pT() < trigg.pT()) fillbyparticles(_hist_mix_hh, trigg, assoc_mix);
}
}
}
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
if (trigg_V0_Particles[ipt_trigg].size() == 0) continue;
for (const Particle& triggV0 : trigg_V0_Particles[ipt_trigg]) {
const int pid = abs(triggV0.pid());
if (evmc.particles().size() == 0) continue;
for (const Particle& assoc_mix : evmc.particles()) {
if (assoc_mix.pT() < triggV0.pT() && pid == 310)
fillbyparticles(_hist_mix_K0h, triggV0, assoc_mix);
if (assoc_mix.pT() < triggV0.pT() && pid == 3122)
fillbyparticles(_hist_mix_Lamh, triggV0, assoc_mix);
}
}
}
//end of mixed event block
}
/// Finalize
void finalize() {
double mix_nomalisation_hh = (_hist_mix_hh->bin(0))->integral() / (_hist_mix_hh->bin(0))->numBins();
double mix_scaling_hh[38];
for (auto& b : _hist_mix_hh->bins()) {
mix_scaling_hh[b.index() - 1] = b->integral() / b->numBins() / mix_nomalisation_hh;
}
double mix_nomalisation_K0h = (_hist_mix_K0h->bin(0))->integral() / (_hist_mix_K0h->bin(0))->numBins();
double mix_scaling_K0h[38];
for (auto& b : _hist_mix_K0h->bins()) {
mix_scaling_K0h[b.index() - 1] = b->integral() / b->numBins() / mix_nomalisation_K0h;
}
double mix_nomalisation_Lamh = (_hist_mix_Lamh->bin(0))->integral()
/ (_hist_mix_Lamh->bin(0))->numBins();
double mix_scaling_Lamh[38];
for (auto& b : _hist_mix_Lamh->bins()) {
mix_scaling_Lamh[b.index() - 1] = b->integral() / b->numBins() / mix_nomalisation_Lamh;
}
size_t i_mix = 0;
for (int imult = 0; imult < MULT_BINS; ++imult) {
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
//cor. scaling + mixing
if (_counterChargedTriggers_mult[imult][ipt_trigg]->sumW() > 0) {
scale(_hist_hh_2D_mult[imult][ipt_trigg],
1. / _counterChargedTriggers_mult[imult][ipt_trigg]->sumW());
}
i_mix = 0;
for (auto& hist : _hist_hh_2D_mult[imult][ipt_trigg]->bins()) {
if (mix_scaling_hh[i_mix] > 0) scale(hist, 1. / mix_scaling_hh[i_mix]);
++i_mix;
}
if (_counterK0Triggers_mult[imult][ipt_trigg]->sumW() > 0) {
for (auto& hist : _hist_K0h_2D_mult[imult][ipt_trigg]->bins()) {
scale(hist, 1. / _counterK0Triggers_mult[imult][ipt_trigg]->sumW());
}
}
i_mix = 0;
for (auto& hist : _hist_K0h_2D_mult[imult][ipt_trigg]->bins()) {
if (mix_scaling_K0h[i_mix] > 0) scale(hist, 1. / mix_scaling_K0h[i_mix]);
++i_mix;
}
if (_counterLamTriggers_mult[imult][ipt_trigg]->sumW() > 0) {
for (auto& hist : _hist_Lamh_2D_mult[imult][ipt_trigg]->bins()) {
scale(hist, 1. / _counterLamTriggers_mult[imult][ipt_trigg]->sumW());
}
}
i_mix = 0;
for (auto& hist : _hist_Lamh_2D_mult[imult][ipt_trigg]->bins()) {
if (mix_scaling_Lamh[i_mix] > 0) scale(hist, 1. / mix_scaling_Lamh[i_mix]);
++i_mix;
}
//integration by eta
S2DProjectionY(_hist_dPhi_hh_mult[imult][ipt_trigg], _hist_hh_2D_mult[imult][ipt_trigg]);
S2DProjectionY(_hist_dPhi_K0h_mult[imult][ipt_trigg], _hist_K0h_2D_mult[imult][ipt_trigg]);
S2DProjectionY(_hist_dPhi_Lamh_mult[imult][ipt_trigg], _hist_Lamh_2D_mult[imult][ipt_trigg]);
//ZYAM
ZYAM(_hist_dPhi_hh_mult_fin[imult][ipt_trigg], _hist_dPhi_hh_mult[imult][ipt_trigg]);
ZYAM(_hist_dPhi_K0h_mult_fin[imult][ipt_trigg], _hist_dPhi_K0h_mult[imult][ipt_trigg]);
ZYAM(_hist_dPhi_Lamh_mult_fin[imult][ipt_trigg], _hist_dPhi_Lamh_mult[imult][ipt_trigg]);
}
}
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
for (int ipt_assoc = 0; ipt_assoc < PT_ASSOC_BINS; ++ipt_assoc) {
//cor. scaling + mixing
if (_counterChargedTriggers_mult[6][ipt_trigg]->sumW() > 0) {
for (auto& hist : _hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
scale(hist, 1. / _counterChargedTriggers_mult[6][ipt_trigg]->sumW());
}
}
i_mix = 0;
for (auto& hist : _hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
if (mix_scaling_hh[i_mix] > 0) scale(hist, 1. / mix_scaling_hh[i_mix]);
++i_mix;
}
if (_counterK0Triggers_mult[6][ipt_trigg]->sumW() > 0) {
for (auto& hist : _hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
scale(hist, 1. / _counterK0Triggers_mult[6][ipt_trigg]->sumW());
}
}
i_mix = 0;
for (auto& hist : _hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
if (mix_scaling_K0h[i_mix] > 0) scale(hist, 1. / mix_scaling_K0h[i_mix]);
++i_mix;
}
if (_counterLamTriggers_mult[6][ipt_trigg]->sumW() > 0) {
for (auto& hist : _hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
scale(hist, 1. / _counterLamTriggers_mult[6][ipt_trigg]->sumW());
}
}
i_mix = 0;
for (Histo1DPtr hist : _hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc]->bins()) {
if (mix_scaling_Lamh[i_mix] > 0) scale(hist, 1. / mix_scaling_Lamh[i_mix]);
++i_mix;
}
//integration by eta
S2DProjectionY(_hist_dPhi_hh_ptassoc[ipt_trigg][ipt_assoc],
_hist_hh_2D_ptassoc[ipt_trigg][ipt_assoc]);
S2DProjectionY(_hist_dPhi_K0h_ptassoc[ipt_trigg][ipt_assoc],
_hist_K0h_2D_ptassoc[ipt_trigg][ipt_assoc]);
S2DProjectionY(_hist_dPhi_Lamh_ptassoc[ipt_trigg][ipt_assoc],
_hist_Lamh_2D_ptassoc[ipt_trigg][ipt_assoc]);
//Subtracting underlying event with the ZYAM method
ZYAM(_hist_dPhi_hh_ptassoc_fin[ipt_trigg][ipt_assoc], _hist_dPhi_hh_ptassoc[ipt_trigg][ipt_assoc]);
ZYAM(_hist_dPhi_K0h_ptassoc_fin[ipt_trigg][ipt_assoc],
_hist_dPhi_K0h_ptassoc[ipt_trigg][ipt_assoc]);
ZYAM(_hist_dPhi_Lamh_ptassoc_fin[ipt_trigg][ipt_assoc],
_hist_dPhi_Lamh_ptassoc[ipt_trigg][ipt_assoc]);
}
}
//PeakYield
pair<double, double> NearInterval = {-0.9, 0.9};
pair<double, double> AwayInterval = {M_PI - 1.4, M_PI + 1.4};
for (int imult = MULT_BINS - 1; imult > -1; --imult) {
//fig 3
IntegratePeakByPT(_hist_hh_NearSideYield_mult[imult], _hist_dPhi_hh_mult_fin[imult], NearInterval, 8);
IntegratePeakByPT(_hist_K0h_NearSideYield_mult[imult], _hist_dPhi_K0h_mult_fin[imult], NearInterval,
8);
IntegratePeakByPT(_hist_Lamh_NearSideYield_mult[imult], _hist_dPhi_Lamh_mult_fin[imult], NearInterval,
8);
IntegratePeakByPT(_hist_hh_AwaySideYield_mult[imult], _hist_dPhi_hh_mult_fin[imult], AwayInterval, 8);
IntegratePeakByPT(_hist_K0h_AwaySideYield_mult[imult], _hist_dPhi_K0h_mult_fin[imult], AwayInterval,
8);
IntegratePeakByPT(_hist_Lamh_AwaySideYield_mult[imult], _hist_dPhi_Lamh_mult_fin[imult], AwayInterval,
8);
//fig 4
if (imult < MULT_BINS - 1) {
sdivide(_hist_hh_NearSideYield_mult[imult], _hist_hh_NearSideYield_mult[6],
_hist_hh_NearSideYield_mult_ratio[imult], 8, false);
sdivide(_hist_hh_AwaySideYield_mult[imult], _hist_hh_AwaySideYield_mult[6],
_hist_hh_AwaySideYield_mult_ratio[imult], 8, false);
sdivide(_hist_K0h_NearSideYield_mult[imult], _hist_K0h_NearSideYield_mult[6],
_hist_K0h_NearSideYield_mult_ratio[imult], 6, true);
sdivide(_hist_K0h_AwaySideYield_mult[imult], _hist_K0h_AwaySideYield_mult[6],
_hist_K0h_AwaySideYield_mult_ratio[imult], 6, true);
sdivide(_hist_Lamh_NearSideYield_mult[imult], _hist_Lamh_NearSideYield_mult[6],
_hist_Lamh_NearSideYield_mult_ratio[imult], 6, true);
if (imult == 1)
sdivide(_hist_Lamh_AwaySideYield_mult[imult], _hist_Lamh_AwaySideYield_mult[6],
_hist_Lamh_AwaySideYield_mult_ratio[imult], 5, true);
else
sdivide(_hist_Lamh_AwaySideYield_mult[imult], _hist_Lamh_AwaySideYield_mult[6],
_hist_Lamh_AwaySideYield_mult_ratio[imult], 6, true);
}
}
//fig 5
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS; ++ipt_trigg) {
IntegratePeakByPT(_hist_hh_NearSideYield_ptassoc[ipt_trigg], _hist_dPhi_hh_ptassoc_fin[ipt_trigg],
NearInterval, ipt_trigg);
IntegratePeakByPT(_hist_hh_AwaySideYield_ptassoc[ipt_trigg], _hist_dPhi_hh_ptassoc_fin[ipt_trigg],
AwayInterval, ipt_trigg);
IntegratePeakByPT(_hist_K0h_NearSideYield_ptassoc[ipt_trigg], _hist_dPhi_K0h_ptassoc_fin[ipt_trigg],
NearInterval, ipt_trigg);
IntegratePeakByPT(_hist_K0h_AwaySideYield_ptassoc[ipt_trigg], _hist_dPhi_K0h_ptassoc_fin[ipt_trigg],
AwayInterval, ipt_trigg);
if (ipt_trigg < 7)
IntegratePeakByPT(_hist_Lamh_NearSideYield_ptassoc[ipt_trigg],
_hist_dPhi_Lamh_ptassoc_fin[ipt_trigg], NearInterval, ipt_trigg);
if (ipt_trigg == 6)
IntegratePeakByPT(_hist_Lamh_AwaySideYield_ptassoc[ipt_trigg],
_hist_dPhi_Lamh_ptassoc_fin[ipt_trigg], AwayInterval, 2);
else if (ipt_trigg == 7)
continue;
else
IntegratePeakByPT(_hist_Lamh_AwaySideYield_ptassoc[ipt_trigg],
_hist_dPhi_Lamh_ptassoc_fin[ipt_trigg], AwayInterval, ipt_trigg);
}
//fig 8
for (int imult = 0; imult < MULT_BINS; ++imult) {
sdivide(_hist_K0h_NearSideYield_mult[imult], _hist_hh_NearSideYield_mult[imult],
_hist_K0h_NearSideYield_ratioTo_hh_mult[imult], 7, false);
sdivide(_hist_K0h_AwaySideYield_mult[imult], _hist_hh_AwaySideYield_mult[imult],
_hist_K0h_AwaySideYield_ratioTo_hh_mult[imult], 7, false);
sdivide(_hist_Lamh_NearSideYield_mult[imult], _hist_hh_NearSideYield_mult[imult],
_hist_Lamh_NearSideYield_ratioTo_hh_mult[imult], 7, false);
sdivide(_hist_Lamh_AwaySideYield_mult[imult], _hist_hh_AwaySideYield_mult[imult],
_hist_Lamh_AwaySideYield_ratioTo_hh_mult[imult], 7, false);
}
//fig 9
for (int ipt_trigg = 0; ipt_trigg < PT_TRIGG_BINS - 1; ++ipt_trigg) {
sdivide(_hist_K0h_NearSideYield_ptassoc[ipt_trigg], _hist_hh_NearSideYield_ptassoc[ipt_trigg],
_hist_K0h_NearSideYield_ratioTo_hh_ptassoc[ipt_trigg], ipt_trigg, false);
sdivide(_hist_K0h_AwaySideYield_ptassoc[ipt_trigg], _hist_hh_AwaySideYield_ptassoc[ipt_trigg],
_hist_K0h_AwaySideYield_ratioTo_hh_ptassoc[ipt_trigg], ipt_trigg, false);
sdivide(_hist_Lamh_NearSideYield_ptassoc[ipt_trigg], _hist_hh_NearSideYield_ptassoc[ipt_trigg],
_hist_Lamh_NearSideYield_ratioTo_hh_ptassoc[ipt_trigg], ipt_trigg, false);
if (ipt_trigg < 6)
sdivide(_hist_Lamh_AwaySideYield_ptassoc[ipt_trigg], _hist_hh_AwaySideYield_ptassoc[ipt_trigg],
_hist_Lamh_AwaySideYield_ratioTo_hh_ptassoc[ipt_trigg], ipt_trigg, false);
else
sdivide(_hist_Lamh_AwaySideYield_ptassoc[ipt_trigg], _hist_hh_AwaySideYield_ptassoc[ipt_trigg],
_hist_Lamh_AwaySideYield_ratioTo_hh_ptassoc[ipt_trigg], 2, false);
}
}
/// @}
private:
static const int PT_TRIGG_BINS = 8;
static const int PT_ASSOC_BINS = 10;
static const int MULT_BINS = 7;
static const int N_phibins = 72;
/// @name Histograms
/// @{
Histo1DGroupPtr _hist_mix_hh, _hist_mix_K0h, _hist_mix_Lamh;
CounterPtr _counterChargedTriggers_mult[MULT_BINS][PT_TRIGG_BINS];
CounterPtr _counterK0Triggers_mult[MULT_BINS][PT_TRIGG_BINS];
CounterPtr _counterLamTriggers_mult[MULT_BINS][PT_TRIGG_BINS];
Histo1DGroupPtr _hist_hh_2D_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Histo1DGroupPtr _hist_K0h_2D_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Histo1DGroupPtr _hist_Lamh_2D_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Histo1DGroupPtr _hist_hh_2D_mult[MULT_BINS][PT_TRIGG_BINS];
Histo1DGroupPtr _hist_K0h_2D_mult[MULT_BINS][PT_TRIGG_BINS];
Histo1DGroupPtr _hist_Lamh_2D_mult[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_hh_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_K0h_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_Lamh_ptassoc[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_hh_ptassoc_fin[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_K0h_ptassoc_fin[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_Lamh_ptassoc_fin[PT_TRIGG_BINS][PT_ASSOC_BINS];
Scatter2DPtr _hist_dPhi_hh_mult[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_K0h_mult[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_Lamh_mult[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_hh_mult_fin[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_K0h_mult_fin[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_dPhi_Lamh_mult_fin[MULT_BINS][PT_TRIGG_BINS];
Scatter2DPtr _hist_K0h_NearSideYield_ratioTo_hh_mult[MULT_BINS];
Scatter2DPtr _hist_K0h_AwaySideYield_ratioTo_hh_mult[MULT_BINS];
Scatter2DPtr _hist_Lamh_NearSideYield_ratioTo_hh_mult[MULT_BINS];
Scatter2DPtr _hist_Lamh_AwaySideYield_ratioTo_hh_mult[MULT_BINS];
Scatter2DPtr _hist_K0h_NearSideYield_ratioTo_hh_ptassoc[PT_TRIGG_BINS - 1];
Scatter2DPtr _hist_K0h_AwaySideYield_ratioTo_hh_ptassoc[PT_TRIGG_BINS - 1];
Scatter2DPtr _hist_Lamh_NearSideYield_ratioTo_hh_ptassoc[PT_TRIGG_BINS - 1];
Scatter2DPtr _hist_Lamh_AwaySideYield_ratioTo_hh_ptassoc[PT_TRIGG_BINS - 1];
Scatter2DPtr _hist_hh_NearSideYield_mult[MULT_BINS];
Scatter2DPtr _hist_K0h_NearSideYield_mult[MULT_BINS];
Scatter2DPtr _hist_Lamh_NearSideYield_mult[MULT_BINS];
Scatter2DPtr _hist_hh_AwaySideYield_mult[MULT_BINS];
Scatter2DPtr _hist_K0h_AwaySideYield_mult[MULT_BINS];
Scatter2DPtr _hist_Lamh_AwaySideYield_mult[MULT_BINS];
Scatter2DPtr _hist_hh_NearSideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_K0h_NearSideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_Lamh_NearSideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_hh_AwaySideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_K0h_AwaySideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_Lamh_AwaySideYield_mult_ratio[MULT_BINS];
Scatter2DPtr _hist_hh_NearSideYield_ptassoc[PT_TRIGG_BINS];
Scatter2DPtr _hist_hh_AwaySideYield_ptassoc[PT_TRIGG_BINS];
Scatter2DPtr _hist_K0h_NearSideYield_ptassoc[PT_TRIGG_BINS];
Scatter2DPtr _hist_K0h_AwaySideYield_ptassoc[PT_TRIGG_BINS];
Scatter2DPtr _hist_Lamh_NearSideYield_ptassoc[PT_TRIGG_BINS - 1];
Scatter2DPtr _hist_Lamh_AwaySideYield_ptassoc[PT_TRIGG_BINS - 1];
vector<double> multiplicityBins;
vector<double> etabins;
vector<double> bins_pt_trigg = {3., 4., 5., 6., 7., 9., 11., 15., 20.};
vector<double> bins_pt_assoc = {1., 2., 3., 4., 5., 6., 7., 9., 11., 15., 20.};
vector<string> mulsel_name = {"000-001", "001-003", "003-007", "007-015", "015-050", "050-100", "MB"};
vector<string> bins_pt_trigg_name = {"3-4", "4-5", "5-6", "6-7", "7-9", "9-11", "11-15", "15-20"};
vector<string> bins_pt_assoc_name = {"_1-2", "_2-3", "_3-4", "_4-5", "_5-6",
"_6-7", "_7-9", "_9-11", "_11-15", "_15-20"};
/// @}
};
RIVET_DECLARE_PLUGIN(ALICE_2021_I1891391);
}