Rivet analyses
Λb0 and B0 production at 7 and 8 TeV
Experiment: LHCB (LHC)
Inspire ID: 1391317
Status: VALIDATED
Authors: - Peter Richardson
References: - Chin.Phys.C 40 (2016) 011001, 2016
Beams: p+ p+
Beam energies: (3500.0, 3500.0); (4000.0, 4000.0)GeV
Run details: - hadronic events
Double differential cross section in p⟂ and y for Λb0 and B0 production at 7 and 8 TeV.
Source
code:LHCB_2016_I1391317.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief Lambda_b and B0 production at 7 and 8 TeV
class LHCB_2016_I1391317 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2016_I1391317);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
declare(UnstableParticles(), "UFS");
for (double eVal : allowedEnergies()) {
const int en = round(eVal);
if (isCompatibleWithSqrtS(eVal)) _sqs = en;
int ih(en==8000);
// histograms
book(_h_Lambda[en],{2.0,2.5,3.0,3.5,4.0,4.5});
book(_h_B[en] ,{2.0,2.5,3.0,3.5,4.0,4.5});
for (size_t iy=0; iy < _h_Lambda[en]->numBins(); ++iy) {
book(_h_Lambda[en]->bin(iy+1), 1+ih, 1, 1+iy);
book(_h_B[en] ->bin(iy+1), 3+ih, 1, 1+iy);
}
for (size_t ix=0; ix<2; ++ix) {
book(_h_pT[en+ix],"TMP/h_pT_"+toString(en+ix),refData(5,1,1+ih));
book(_h_y [en+ix],"TMP/h_y_" +toString(en+ix),refData(6,1,1+ih));
}
}
raiseBeamErrorIf(_sqs==0);
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// 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==5122 || Cuts::abspid==511)) {
// skip copies due mixing
if (p.children().size()==1 && p.children()[0].abspid()==p.abspid()) continue;
const double rap = p.rap();
if (rap<2. || rap>4.5) continue;
const double pT = p.pT();
if (p.abspid()==5122) {
_h_Lambda[_sqs]->fill(rap, pT/GeV);
if (p.pid()>0) {
_h_pT[_sqs+0]->fill(pT/GeV);
if (pT<20*GeV) _h_y[_sqs+0]->fill(rap);
}
else {
_h_pT[_sqs+1]->fill(pT);
if (pT<20*GeV) _h_y[_sqs+1]->fill(rap);
}
}
else {
_h_B[_sqs]->fill(rap, pT/GeV);
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
// branching ratios
const vector<double> br={3.2e-4,1.27e-3};
// 0.5 particle/antiparticle
const double factor = 0.5*crossSection()/picobarn/sumOfWeights();
scale(_h_Lambda, br[0]*factor);
divByGroupWidth(_h_Lambda);
scale(_h_B, br[1]*factor);
divByGroupWidth(_h_B);
for (double eVal : allowedEnergies()) {
const int en = int(eVal+0.5);
int ih(en==8000);
Estimate1DPtr tmp;
book(tmp, 5, 1, 1+ih);
asymm(_h_pT[en+0], _h_pT[en+1], tmp);
tmp->scale(100.);
book(tmp, 6, 1, 1+ih);
asymm(_h_y[en+0], _h_y[en+1], tmp);
tmp->scale(100.);
}
}
/// @}
/// @name Histograms
/// @{
map<int,Histo1DGroupPtr> _h_Lambda, _h_B;
map<int,Histo1DPtr> _h_pT, _h_y;
int _sqs = 0;
/// @}
};
RIVET_DECLARE_PLUGIN(LHCB_2016_I1391317);
}