Rivet analyses

Measurement of B+, B0 and Λb0 production in pPb collisions at $\sqrt{s_\mathrm{NN}} = 8.16\,\mathrm{TeV}$

Experiment: LHCB (LHC)

Inspire ID: 1720413

Status: VALIDATED

Authors: - Joshua Friedman - Julian Boelhauve - Lars Kolk

References: - Phys.Rev.D 99 (2019) 5, 052011 - DOI:10.1103/PhysRevD.99.052011 - arXiv: 1902.05599 - CERN-EP-2019-010 - LHCB-PAPER-2018-048

Beams: p+ 1000822080

Beam energies: (6500.0, 533000.0)GeV

Run details: - Minimum-bias proton-lead interactions at 8.16 TeV centre-of-mass energy.

The production of B+, B0 and Λb0 hadrons is studied in proton-lead collisions at a center-of-mass energy per nucleon pair of $\sqrt{s_\mathrm{NN}} = 8.16\,\mathrm{TeV}$ recorded with the LHCb detector at the LHC. The measurement uses a dataset corresponding to an integrated luminosity of 12.2 ± 0.3 nb−1 for the case where the proton beam is projected into the LHCb detector (corresponding to measuring hadron production at positive rapidity) and 18.6 ± 0.5 nb−1 for the lead beam projected into the LHCb detector (corresponding to measuring hadron production at negative rapidity). Double-differential cross-sections are measured and used to determine forward-backward ratios and nuclear modification factors, which directly probe nuclear effects in the production of beauty hadrons. The double-differential cross-sections are measured as a function of the beauty-hadron transverse momentum and rapidity in the nucleon-nucleon center-of-mass frame. Forward-to-backward cross-section ratios and nuclear modification factors indicate a significant nuclear suppression at positive rapidity. The ratio of Λb0 over B0 production cross-sections is reported and is consistent with the corresponding measurement in pp collisions.

Source code:LHCB_2019_I1720413.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Tools/HistoGroup.hh"

namespace Rivet {

  class LHCB_2019_I1720413 : public Analysis {

  public:

    RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2019_I1720413);

    void init() {

      size_t ih = 1;
      vector<double> ybins = { -4.5, -3.5, -2.5, 1.5, 2.5, 3.5 };
      for (const string& label : vector<string>{"b_plus", "b_0", "lambda_b_0"}) {
        book(_g[label], ybins);
        _g[label]->maskBin(3);
        size_t idx = 1;
        for (auto& b : _g[label]->bins()) {
          book(b, ih, 1, idx++);
        }
        ++ih;
      }

      book(_h["b_plus"], 4, 1, 1);
      book(_h["b_0"], 4, 1, 2);
      book(_h["lambda_b_0"], 4, 1, 3);

      book(_e["b_plus_diff"], 5, 1, 1);
      book(_e["b_0_diff"], 5, 1, 2);
      book(_e["lambda_b_0_diff"], 5, 1, 3);

      book(_e["b_plus"], 6, 1, 1);
      book(_e["b_0"], 6, 1, 2);
      book(_e["lambda_b_0"], 6, 1, 3);

      // Define histograms with one rapidity interval to compute
      // transverse-momentum-integrated forward-to-backward ratio
      const vector<double> forw_y_ints = {2.0, 20.0};
      book(_h["b_plus_fwd"], "_b_plus_fwd", forw_y_ints);
      book(_h["b_plus_bwd"], "_b_plus_bwd", forw_y_ints);
      book(_h["b_0_fwd"], "_b_0_fwd", forw_y_ints);
      book(_h["b_0_bwd"], "_b_0_bwd", forw_y_ints);
      book(_h["lambda_b_0_fwd"], "_lambda_b_0_fwd", forw_y_ints);
      book(_h["lambda_b_0_bwd"], "_lambda_b_0_bwd", forw_y_ints);

      // Select B+, B0 and Lambdab0 hadrons and their antiparticles
      declare(
          UnstableParticles(
              ((Cuts::abspid == PID::BPLUS) ||
               (Cuts::abspid == PID::B0) ||
               (Cuts::abspid == PID::LAMBDAB)) &&
              (Cuts::ptIn(2 * GeV, 20 * GeV)) &&
              (Cuts::rapIn(-4.5, -2.5) || Cuts::rapIn(1.5, 3.5))), "UPs");
    }

    void analyze(const Event &event) {
      // Apply UnstableParticles projection
      const UnstableParticles &unst_parts = apply<UnstableParticles>(event, "UPs");
      for (const Particle &part : unst_parts.particles()) {
        const double y = part.rapidity();
        const double pt = part.pT();

        if (part.abspid () == PID::BPLUS) {
          _g["b_plus"]->fill(y, pt/GeV);
          _h["b_plus"]->fill(y);
          if (fabs(y) < 2.5 || fabs(y) > 3.5)  continue;
          if (y>0.)  _h["b_plus_fwd"]->fill(pt/GeV);
          else       _h["b_plus_bwd"]->fill(pt/GeV);
        }
        else if (part.abspid() == PID::B0) {
          _g["b_0"]->fill(y, pt/GeV);
          _h["b_0"]->fill(y);
          if (fabs(y) < 2.5 || fabs(y) > 3.5)  continue;
          if (y>0.)  _h["b_0_fwd"]->fill(pt/GeV);
          else       _h["b_0_bwd"]->fill(pt/GeV);
        }
        else if (part.abspid() == PID::LAMBDAB) {
          _g["lambda_b_0"]->fill(y, pt/GeV);
          _h["lambda_b_0"]->fill(y);
          if (fabs(y) < 2.5 || fabs(y) > 3.5)  continue;
          if (y>0.)  _h["lambda_b_0_fwd"]->fill(pt/GeV);
          else       _h["lambda_b_0_bwd"]->fill(pt/GeV);
        }
      }
    }

    void finalize() {
      // Compute scale factor with inelastic cross-section from input file and sum of
      // weights (corresponds to number of events in input file)
      const double sf = crossSection() / microbarn / sumOfWeights();
      scale(_g, sf);
      scale(_h, sf);

      // Compute forward-to-backward ratio with correct indices from HistoGroup
      for (auto& grp : _g) {
        divide(grp.second->bin(5), grp.second->bin(2), _e[grp.first + "_diff"s]);
        divide(_h[grp.first+"_fwd"s], _h[grp.first+"_bwd"s], _e[grp.first]);
      }
    }

  private:

    map<string,Histo1DPtr> _h;
    map<string,Estimate1DPtr> _e;
    map<string,Histo1DGroupPtr> _g;
  };

  RIVET_DECLARE_PLUGIN(LHCB_2019_I1720413);
}