Rivet analyses


title: CMS_2011_I884811

Production cross-sections of muons from $b$ hadron decays in $pp$ collisions

Experiment: CMS (LHC)

Inspire ID: 884811

Status: VALIDATED

Authors: - Wolfram Erdmann

References: - JHEP 1103,090 - DOI: 10.1007/JHEP03(2011)090 - arXiv: 1101.3512

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Inclusive QCD at 7 TeV, with no pT cuts.

A measurement of the $b$-hadron production cross-section in proton-proton collisions at $\sqrt{s} = 7$~TeV. The dataset, corresponding to 85 inverse nanobarns, was recorded with the CMS experiment at the LHC using a low-threshold single-muon trigger. Events are selected by the presence of a muon with transverse momentum greater than 6 GeV with respect to the beam direction and pseudorapidity less than 2.1. The transverse momentum of the muon with respect to the closest jet discriminates events containing $b$ hadrons from background. The inclusive $b$-hadron production cross section is presented as a function of muon transverse momentum and pseudorapidity.

Source code:CMS_2011_I884811.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Particle.hh"

include "Rivet/Projections/IdentifiedFinalState.hh"

namespace Rivet {

/// Production cross-sections of muons from $b$ hadron decays in $pp$ collisions class CMS_2011_I884811 : public Analysis { public:

RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2011_I884811);


/// Book histograms and initialise projections before the run
void init() {
  book(_h_total, 1, 1, 1);
  book(_h_mupt, 2, 1, 1);
  book(_h_mueta, 3, 1, 1);

  IdentifiedFinalState ifs(Cuts::abseta < 2.1 && Cuts::pT > 6 * GeV);
  ifs.acceptIdPair(PID::MUON);
  declare(ifs, "IFS");
}


/// Perform the per-event analysis
void analyze(const Event& event) {

  // a b-quark must have been produced
  /// @todo Ouch. Use hadron tagging...
  int nb = 0;
  for (ConstGenParticlePtr p : HepMCUtils::particles(event.genEvent())) {
    if (abs(p->pdg_id()) == PID::BQUARK) nb += 1;
  }
  if (nb == 0) vetoEvent;

  // Event must contain a muon
  Particles muons = apply<IdentifiedFinalState>(event, "IFS").particlesByPt();
  if (muons.size() < 1) vetoEvent;

  FourMomentum pmu = muons[0].momentum();
  _h_total->fill(7000);
  _h_mupt->fill(pmu.pT() / GeV);
  _h_mueta->fill(pmu.eta() / GeV);
}


/// Normalise histograms etc., after the run
void finalize() {
  scale(_h_total, crossSection() / microbarn / sumOfWeights());
  scale(_h_mupt, crossSection() / nanobarn / sumOfWeights());
  scale(_h_mueta, crossSection() / nanobarn / sumOfWeights());
}

private:

/// @{
BinnedHistoPtr<int> _h_total;
Histo1DPtr _h_mupt;
Histo1DPtr _h_mueta;
/// @}

};

RIVET_DECLARE_ALIASED_PLUGIN(CMS_2011_I884811, CMS_2011_S8941262);

} ```

Aliases: - CMS_2011_S8941262