Rivet analyses
title: BELLE_2001_I554520
Measurement of inclusive production of neutral pions from $\Upsilon(4S)$ decays.
Experiment: Belle (KEKB)
Inspire ID: 554520
Status: VALIDATED
Authors: - Peter Richardson
References: - Phys.Rev. D64 (2001) 072001 - hep-ex/0103041
Beams: e+ e-
Beam energies: (3.5, 8.0)GeV
Run details: - $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boosts of 8.0~GeV~($e^-$) and 3.5~GeV~($e^+$)
Measurement of the mean multiplicity and the momentum spectrum of neutral pions from the decays of the Upsilon(4S) resonance using the Belle detector operating at the KEKB $e^+e^-$ storage ring. Useful for tuning $B$ meson decay models.
Source code:BELLE_2001_I554520.cc
```c++ // -- C++ --
include "Rivet/Analysis.hh"
include "Rivet/Projections/Beam.hh"
include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief BELLE pi0 spectrum at Upsilon(4S) /// /// @author Peter Richardson class BELLE_2001_I554520 : public Analysis { public:
RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2001_I554520);
void init() {
declare(UnstableParticles(), "UFS");
book(_histdSigDp, 1, 1, 1); // spectrum
book(_histMult, 2, 1, 1); // multiplicity
book(_weightSum, "TMP/weightSum");
}
void analyze(const Event& e) {
// Find the upsilons
Particles upsilons;
// First in unstable final state
const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
for (const Particle& p : ufs.particles())
if (p.pid() == 300553) upsilons.push_back(p);
// Then in whole event if fails
if (upsilons.empty()) {
for (ConstGenParticlePtr p : HepMCUtils::particles(e.genEvent())) {
if (p->pdg_id() != 300553) continue;
ConstGenVertexPtr pv = p->production_vertex();
bool passed = true;
if (pv) {
for (ConstGenParticlePtr pp : HepMCUtils::particles(pv, Relatives::PARENTS)) {
if (p->pdg_id() == pp->pdg_id()) {
passed = false;
break;
}
}
}
if (passed) upsilons.push_back(Particle(p));
}
}
// Find upsilons
for (const Particle& p : upsilons) {
_weightSum->fill();
// Find the neutral pions from the decay
vector<ConstGenParticlePtr> pions;
findDecayProducts(p.genParticle(), pions);
const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
for (size_t ix = 0; ix < pions.size(); ++ix) {
const double pcm = cms_boost.transform(FourMomentum(pions[ix]->momentum())).p();
_histdSigDp->fill(pcm);
}
_histMult->fill(0, pions.size());
}
}
void finalize() {
scale(_histdSigDp, 1. / *_weightSum);
scale(_histMult, 1. / *_weightSum);
}
private:
/// @{
// count of weights
CounterPtr _weightSum;
/// Histograms
Histo1DPtr _histdSigDp;
BinnedProfilePtr<int> _histMult;
/// @}
void findDecayProducts(ConstGenParticlePtr p, vector<ConstGenParticlePtr>& pions) {
ConstGenVertexPtr dv = p->end_vertex();
for (ConstGenParticlePtr pp : HepMCUtils::particles(dv, Relatives::CHILDREN)) {
const int id = pp->pdg_id();
if (id == 111) {
pions.push_back(pp);
}
else if (pp->end_vertex())
findDecayProducts(pp, pions);
}
}
};
RIVET_DECLARE_ALIASED_PLUGIN(BELLE_2001_I554520, BELLE_2001_S4598261);
} ```
Aliases: - BELLE_2001_S4598261