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