Rivet analyses


title: ATLAS_2012_I1118269

$b$-hadron production cross-section using decays to $D^*\mu^-X$ at $\sqrt{s} = 7$~TeV

Experiment: ATLAS (LHC)

Inspire ID: 1118269

Status: VALIDATED

Authors: - Andy Buckley - Sercan Sen - Peter Skands

References: - Expt page: ATLAS-BPHY-2011-02 - arXiv: 1206.3122

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - pp to b-hadron + X at 7 TeV, i.e. switch on "HardQCD:gg2bbbar" and "HardQCD:qqbar2bbbar" flags in Pythia8.

Measurement of $b$-hadron production cross section using 3.3~pb$^{-1}$ of integrated luminosity, collected during the 2010 LHC run. The $b$-hadrons are selected by partially reconstructing $D^{}\mu^-X$ final states using only direct semileptonic decays of $b$ to $D^\mu^-X$. Differential cross sections as functions of $p_\perp$ and $|\eta|$.

Source code:ATLAS_2012_I1118269.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Particle.hh"

namespace Rivet {

class ATLAS_2012_I1118269 : public Analysis { public:

ATLAS_2012_I1118269()
    : Analysis("ATLAS_2012_I1118269") { }

void init() {
  book(_h_sigma_vs_pt, 1, 1, 1);
  book(_h_sigma_vs_eta, 2, 1, 1);
}

/// Perform the per-event analysis
void analyze(const Event& event) {
  Particles bhadrons;
  for (ConstGenParticlePtr p : HepMCUtils::particles(event.genEvent())) {

    if (!(PID::isHadron(p->pdg_id()) && PID::hasBottom(p->pdg_id()))) continue;

    ConstGenVertexPtr dv = p->end_vertex();

    /// @todo In future, convert to use built-in 'last B hadron' function
    bool hasBdaughter = false;
    if (PID::isHadron(p->pdg_id()) && PID::hasBottom(p->pdg_id())) { // b-hadron selection
      if (dv) {
        /// @todo particles_out_const_iterator is deprecated in HepMC3
        for (ConstGenParticlePtr pp : HepMCUtils::particles(dv, Relatives::CHILDREN)) {
          if (PID::isHadron(pp->pdg_id()) && PID::hasBottom(pp->pdg_id())) {
            hasBdaughter = true;
          }
        }
      }
    }
    if (hasBdaughter) continue;

    bhadrons += Particle(*p);
  }

  for (const Particle& particle : bhadrons) {
    double eta = particle.eta();
    double pt = particle.pT();

    if (!(inRange(eta, -2.5, 2.5))) continue;
    if (pt < 9. * GeV) continue;

    _h_sigma_vs_pt->fill(pt);
    _h_sigma_vs_eta->fill(fabs(eta));
  }
}


void finalize() {
  scale(_h_sigma_vs_pt, crossSection() / nanobarn / sumOfWeights());
  scale(_h_sigma_vs_eta, crossSection() / microbarn / sumOfWeights());
}

private:

Histo1DPtr _h_sigma_vs_pt;
Histo1DPtr _h_sigma_vs_eta;

};

RIVET_DECLARE_PLUGIN(ATLAS_2012_I1118269);

} ```