Rivet analyses
Hadron multiplicities in Υ(4S) decays
Experiment: PDG (Various)
Inspire ID: 1688995
Status: VALIDATED
Authors: - Peter Richardson
References: - Phys.Rev. D98 (2018) no.3, 030001
Beams: * *
Beam energies: ANY
Run details: - Any process producing Upsilon(4S) mesons
Hadron multiplicities in Υ(4S) decays. In the PDG these are quoted as the B±/B0 admixture, however in fact the quoted numbers are half the multplicity in Υ(4S) decays.
Source
code:PDG_UPSILON4S_HADRON_MULTIPLICITIES.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Tools/Cuts.hh"
namespace Rivet {
class PDG_UPSILON4S_HADRON_MULTIPLICITIES : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(PDG_UPSILON4S_HADRON_MULTIPLICITIES);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(UnstableParticles(), "UFS");
for (int ix : _ihistos) book(_histos[ix], ix, 1, 1);
book(_wSum, "/TMP/SumWeights");
}
/// Perform the per-event analysis
void analyze(const Event& event) {
for (const Particle& meson : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid == 300553)) {
_wSum->fill();
map<int, unsigned int> ncount;
findDecayProducts(meson, ncount);
_histos[29]->fill(10.579, double(ncount[411] + ncount[-411]));
_histos[30]->fill(10.579, double(ncount[421] + ncount[-421]));
_histos[31]->fill(10.579, double(ncount[413] + ncount[-413]));
_histos[32]->fill(10.579, double(ncount[423] + ncount[-423]));
_histos[33]->fill(10.579, double(ncount[431] + ncount[-431]));
_histos[34]->fill(10.579, double(ncount[433] + ncount[-433]));
_histos[48]->fill(10.579, double(ncount[443]));
_histos[50]->fill(10.579, double(ncount[100443]));
_histos[51]->fill(10.579, double(ncount[20443]));
_histos[53]->fill(10.579, double(ncount[445]));
_histos[60]->fill(10.579, double(ncount[321] + ncount[-321]));
_histos[61]->fill(10.579, double(ncount[321]));
_histos[62]->fill(10.579, double(ncount[-321]));
_histos[63]->fill(10.579, double(ncount[130] + ncount[310]));
_histos[64]->fill(10.579, double(ncount[323] + ncount[-323]));
_histos[65]->fill(10.579, double(ncount[313] + ncount[-313]));
_histos[87]->fill(10.579, double(ncount[211] + ncount[-211]));
_histos[88]->fill(10.579, double(ncount[111]));
_histos[89]->fill(10.579, double(ncount[221]));
_histos[90]->fill(10.579, double(ncount[113]));
_histos[92]->fill(10.579, double(ncount[333]));
_histos[96]->fill(10.579, double(ncount[4122] + ncount[-4122]));
_histos[104]->fill(10.579, double(ncount[-4222]));
_histos[106]->fill(10.579, double(ncount[-4112]));
_histos[110]->fill(10.579, double(ncount[2212] + ncount[-2212]));
_histos[113]->fill(10.579, double(ncount[3122] + ncount[-3122]));
_histos[116]->fill(10.579, double(ncount[3312] + ncount[-3312]));
}
}
void findDecayProducts(const Particle& mother, map<int, unsigned int>& ncount) {
for (const Particle& p : mother.children()) {
int id = p.pid();
if (p.children().empty()) {
ncount[id] += 1;
}
else {
// check particle is not a child or itself, eg copy or from photon radiation
bool isChild(false);
for (const Particle& p2 : p.children()) {
if (p2.pid() == id) {
isChild = true;
break;
}
}
if (!isChild) ncount[id] += 1;
findDecayProducts(p, ncount);
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
for (auto hist : _histos) {
scale(hist.second, 1. / _wSum->sumW());
}
}
/// @}
/// @name Histograms
/// @{
vector<int> _ihistos = {29, 30, 31, 32, 33, 34, 48, 50, 51, 53, 60, 61, 62, 63,
64, 65, 87, 88, 89, 90, 92, 96, 104, 106, 110, 113, 116};
map<int, Histo1DPtr> _histos;
CounterPtr _wSum;
/// @}
};
RIVET_DECLARE_PLUGIN(PDG_UPSILON4S_HADRON_MULTIPLICITIES);
}