Rivet analyses
Rate of Ξb− production at 7, 8 and 13 TeV
Experiment: LHCB (LHC)
Inspire ID: 1716259
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Phys.Rev.D 99 (2019) 5, 052006
Beams: p+ p+
Beam energies: (3500.0, 3500.0); (4000.0, 4000.0); (6500.0, 6500.0)GeV
Run details: - Xib production
Measurement of the rate of Ξb− production relative to that for Λb0 production at 7, 8, and 13 TeV by the LHCb experiment.
Source
code:LHCB_2019_I1716259.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief Xi_b- 7,8 and 13 TeV
class LHCB_2019_I1716259 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2019_I1716259);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projections
declare(UnstableParticles(), "UFS");
// CMS energy
for (double eVal : allowedEnergies()) {
const string en = toString(round(eVal));
if (isCompatibleWithSqrtS(eVal)) {
_sqs = (en == "13000"s) ? "13"s : "7 & 8"s;
}
}
raiseBeamErrorIf(_sqs.empty());
// histograms
for (const string& en : vector<string>{"7 & 8"s, "13"s}) {
for (size_t ix = 0; ix < 2; ++ix) {
book(_c[en + "xi" + toString(ix)], "TMP/c_xi_" + toString(ix + 1) + "_" + en);
book(_c[en + "lam" + toString(ix)], "TMP/c_lam_" + toString(ix + 1) + "_" + en);
}
}
const auto& ref = refData<YODA::BinnedEstimate<string>>(1, 1, 1);
book(_h_xi, "TMP/h_xi", ref);
book(_h_lam, "TMP/h_lam", ref);
}
void findDecayProducts(const Particle& mother,
double sign,
Particles& Lambda,
Particles& Xi,
Particles& Jpsi,
unsigned int& nstable) const {
for (const Particle& p : mother.children()) {
if (p.pid() == 3122 * sign)
Lambda += p;
else if (p.pid() == 3312 * sign)
Xi += p;
else if (p.pid() == 443)
Jpsi += p;
else if (p.pid() == 111 || p.children().empty())
++nstable;
else
findDecayProducts(p, sign, Lambda, Xi, Jpsi, nstable);
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
for (const Particle& p : ufs.particles(Cuts::abspid == 5122 || Cuts::abspid == 5132)) {
// decay modes
Particles Lambda, Xi, Jpsi;
unsigned int nstable = 0;
double sign = p.pid() > 0 ? 1. : -1.;
findDecayProducts(p, sign, Lambda, Xi, Jpsi, nstable);
if (p.abspid() == 5112) {
_c[_sqs + "lam1"s]->fill();
if (Lambda.size() == 1 && Jpsi.size() == 1 && nstable == 0) _c[_sqs + "lam0"s]->fill();
}
else {
_c[_sqs + "xi1"]->fill();
if (Xi.size() == 1 && Jpsi.size() == 1 && nstable == 0) _c[_sqs + "xi0"]->fill();
}
// pT and rapidity cuts
if (p.pT() > 20 * GeV) continue;
const double eta = p.abseta();
if (eta < 2. || eta > 6.) continue;
if (p.abspid() == 5122) {
_h_lam->fill(_sqs);
}
else {
_h_xi->fill(_sqs);
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
// first the simple ratio
BinnedEstimatePtr<string> tmp;
book(tmp, 2, 1, 1);
divide(_h_xi, _h_lam, tmp);
// and the one with brs included
book(tmp, 1, 1, 1);
for (const auto& b : tmp->bins()) {
const string edge = b.xEdge();
if (_c[edge + "xi1"]->sumW() > 0) {
_h_xi->bin(b.index()).scaleW(dbl(*_c[edge + "xi0"] / *_c[edge + "xi1"]));
}
if (_c[edge + "lam1"]->sumW() > 0) {
_h_lam->bin(b.index()).scaleW(dbl(*_c[edge + "lam0"] / *_c[edge + "lam1"]));
}
}
divide(_h_xi, _h_lam, tmp);
}
/// @}
/// @name Histograms
/// @{
BinnedHistoPtr<string> _h_xi, _h_lam;
map<string, CounterPtr> _c;
string _sqs = "";
/// @}
};
RIVET_DECLARE_PLUGIN(LHCB_2019_I1716259);
}