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);

}