Rivet analyses


title: CMS_2019_I1697571

$B_s^0$ production at 5.02 TeV

Experiment: CMS (LHC)

Inspire ID: 1697571

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Lett.B 796 (2019) 168-190 - Expt page: CMS-HIN-17-008 - arXiv: 1810.03022

Beams: p+ p+

Beam energies: (2510.0, 2510.0)GeV

Run details: - hadronic events

Differential cross section in $p_\perp$ for $B^0_s$ production at 5.02 TeV

Source code:CMS_2019_I1697571.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief B_s0 at 5.02 TeV class CMS_2019_I1697571 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2019_I1697571);


/// @name Analysis methods
/// @{

/// Book histograms and initialise projections before the run
void init() {
  // projection
  declare(UnstableParticles(), "UFS");
  // histograms
  book(_h_pT[0], 1, 1, 1);
  book(_h_pT[1], 2, 1, 1);

  _axes[0] = YODA::Axis<double>({7., 15., 20., 50.});
  _axes[1] = YODA::Axis<double>({7., 15., 50.});
}


/// Perform the per-event analysis
void analyze(const Event& event) {
  if (_edges[0].empty()) {
    _edges[0] = _h_pT[0]->xEdges();
    _edges[1] = _h_pT[1]->xEdges();
  }
  // Final state of unstable particles to get particle spectra
  const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
  // loop over onium states
  for (const Particle& p : ufs.particles(Cuts::abspid == 531)) {
    // skip copies due mixing
    if (p.children().size() == 1 && p.children()[0].abspid() == 531) continue;
    // rapidity and pT
    const double y = p.absrap();
    if (y > 2.4) continue;
    const double pT = p.perp();
    if (pT < 7. || pT > 50.) continue;
    for (unsigned int ix = 0; ix < 2; ++ix) {
      const size_t idx = _axes[ix].index(pT);
      string edge("OTHER");
      if (idx && idx <= _edges[ix].size()) edge = _edges[ix][idx - 1];
      _h_pT[ix]->fill(edge);
    }
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  // 0.5 from particle/antiparticle
  double fact = 0.5 * crossSection() / picobarn / sumOfWeights();
  for (unsigned int ix = 0; ix < 2; ++ix) {
    scale(_h_pT[ix], fact);
    for (auto& b : _h_pT[ix]->bins()) {
      b.scaleW(1.0 / _axes[ix].width(b.index()));
    }
  }
}

/// @}


/// @name Histograms
/// @{
BinnedHistoPtr<string> _h_pT[2];
YODA::Axis<double> _axes[2];
vector<string> _edges[2];
/// @}

};

RIVET_DECLARE_PLUGIN(CMS_2019_I1697571);

} ```