Rivet analyses

Inclusive production of charged pions, kaons and protons in $\Upsilon(4S)$ decays.

Experiment: ()

Inspire ID: 340894

Status: VALIDATED

Authors: - Peter Richardson

References: - Z.Phys. C58 (1993) 191-198

Beams: e+ e-

Beam energies: (5.3, 5.3)GeV

Run details: - $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance.

Measurement of inclusive production of charged pions, kaons and protons from $\Upsilon(4S)$ decays. Kaon spectra are determined in two different ways using particle identification and detecting decays in-flight. Results are background continuum subtracted. This analysis is useful for tuning $B$ meson decay modes.

Source code:ARGUS_1993_I340894.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {


  /// @brief ARGUS pi+/-, K+/- and proton/antiproton spectrum at Upsilon(4S)
  ///
  /// @author Peter Richardson
  class ARGUS_1993_I340894 : public Analysis {
  public:

    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_I340894);


    void analyze(const Event& e) {
      // Find the upsilons
      const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
      for (const Particle& p : ufs.particles(Cuts::pid == 300553)) {
        _weightSum->fill();
        Particles pionsA, pionsB, protonsA, protonsB, kaons;
        // Find the decay products we want
        findDecayProducts(p, pionsA, pionsB, protonsA, protonsB, kaons);
        LorentzTransform cms_boost;
        if (p.p3().mod() > 1 * MeV)
          cms_boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
        for (size_t ix = 0; ix < pionsA.size(); ++ix) {
          FourMomentum ptemp(pionsA[ix].momentum());
          FourMomentum p2 = cms_boost.transform(ptemp);
          double pcm = cms_boost.transform(ptemp).vector3().mod();
          _histPiA->fill(pcm);
        }
        _multPiA->fill(Ecm, double(pionsA.size()));
        for (size_t ix = 0; ix < pionsB.size(); ++ix) {
          double pcm = cms_boost.transform(pionsB[ix].momentum()).vector3().mod();
          _histPiB->fill(pcm);
        }
        _multPiB->fill(Ecm, double(pionsB.size()));
        for (size_t ix = 0; ix < protonsA.size(); ++ix) {
          double pcm = cms_boost.transform(protonsA[ix].momentum()).vector3().mod();
          _histpA->fill(pcm);
        }
        _multpA->fill(Ecm, double(protonsA.size()));
        for (size_t ix = 0; ix < protonsB.size(); ++ix) {
          double pcm = cms_boost.transform(protonsB[ix].momentum()).vector3().mod();
          _histpB->fill(pcm);
        }
        _multpB->fill(Ecm, double(protonsB.size()));
        for (size_t ix = 0; ix < kaons.size(); ++ix) {
          double pcm = cms_boost.transform(kaons[ix].momentum()).vector3().mod();
          _histKA->fill(pcm);
          _histKB->fill(pcm);
        }
        _multK->fill(Ecm, double(kaons.size()));
      }
    }


    void finalize() {
      if (_weightSum->val() > 0.) {
        scale(_histPiA, 1. / *_weightSum);
        scale(_histPiB, 1. / *_weightSum);
        scale(_histKA, 1. / *_weightSum);
        scale(_histKB, 1. / *_weightSum);
        scale(_histpA, 1. / *_weightSum);
        scale(_histpB, 1. / *_weightSum);
        scale(_multPiA, 1. / *_weightSum);
        scale(_multPiB, 1. / *_weightSum);
        scale(_multK, 1. / *_weightSum);
        scale(_multpA, 1. / *_weightSum);
        scale(_multpB, 1. / *_weightSum);
      }
    }


    void init() {
      declare(UnstableParticles(), "UFS");

      // spectra
      book(_histPiA, 1, 1, 1);
      book(_histPiB, 2, 1, 1);
      book(_histKA, 3, 1, 1);
      book(_histKB, 6, 1, 1);
      book(_histpA, 4, 1, 1);
      book(_histpB, 5, 1, 1);
      // multiplicities
      book(_multPiA, 7, 1, 1);
      book(_multPiB, 8, 1, 1);
      book(_multK, 9, 1, 1);
      book(_multpA, 10, 1, 1);
      book(_multpB, 11, 1, 1);

      book(_weightSum, "TMP/weightSum");
    }


  private:

    /// @{
    /// Count of weights
    CounterPtr _weightSum;
    /// Spectra
    Histo1DPtr _histPiA, _histPiB, _histKA, _histKB, _histpA, _histpB;
    /// Multiplicities
    BinnedHistoPtr<string> _multPiA, _multPiB, _multK, _multpA, _multpB;
    const string Ecm = "10.58";
    /// @}


    void findDecayProducts(Particle parent,
                           Particles& pionsA,
                           Particles& pionsB,
                           Particles& protonsA,
                           Particles& protonsB,
                           Particles& kaons) {
      int parentId = parent.pid();
      for (const Particle& p : parent.children()) {
        int id = abs(p.pid());
        if (id == PID::PIPLUS) {
          if (parentId != PID::LAMBDA && parentId != PID::K0S) {
            pionsA.push_back(p);
            pionsB.push_back(p);
          }
          else
            pionsB.push_back(p);
        }
        else if (id == PID::PROTON) {
          if (parentId != PID::LAMBDA && parentId != PID::K0S) {
            protonsA.push_back(p);
            protonsB.push_back(p);
          }
          else
            protonsB.push_back(p);
        }
        else if (id == PID::KPLUS) {
          kaons.push_back(p);
        }
        else if (!p.children().empty())
          findDecayProducts(p, pionsA, pionsB, protonsA, protonsB, kaons);
      }
    }
  };


  RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_I340894, ARGUS_1993_S2653028);

}

Aliases: - ARGUS_1993_S2653028