Rivet analyses

Rates and Spectra for Charm hadrons in Υ(4S) decays and the continuum

Experiment: BELLE (KEKB)

Inspire ID: 686014

Status: VALIDATED

Authors: - Peter Richardson

References: none listed

Beams: e+ e-

Beam energies: (5.3, 5.3); (5.3, 5.3)GeV

Run details: - e+e- to hadrons at the Upsilon 4S and nearby continuum.

Measurement of the cross section and scaled momentum spectrum for the production of charm hadrons, D0, D+, Ds+, Λc+, D*0 and D*+. The cross section and spectra in the continuum together with the branching ratio and spectra in Υ(4S) decays are measured.

Source code:BELLE_2005_I686014.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/MissingMomentum.hh"
#include "Rivet/Projections/PromptFinalState.hh"
#include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {


  /// @brief Charm-hadron production
  class BELLE_2005_I686014 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2005_I686014);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      // projections
      declare(UnstableParticles(),"UFS");

      // histos
      for (double eVal : allowedEnergies()) {

        const string en = toString(round(eVal/MeV));
        if (isCompatibleWithSqrtS(eVal, 1e-3))  _sqs = en;
        bool ih = en!="10520"s;

        for (size_t ix=0; ix<7; ++ix) {
          book(_r[en][ix], 2-ih, 1, ix+1);
          book(_h[en][ix], 3+ih, 1, ix+1);
        }
        book(_c[en],"TMP/wgt"+en);
      }
      raiseBeamErrorIf(_sqs.empty());
    }

    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // unstable particles
      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
      if (_sqs=="10580"s && ufs.particles(Cuts::pid==300553).size()!=1)  vetoEvent;

      _c[_sqs]->fill();
      for (const Particle & p : ufs.particles(Cuts::abspid==411 ||
                                              Cuts::abspid==421 ||
                                              Cuts::abspid==431 ||
                                              Cuts::abspid==413 ||
                                              Cuts::abspid==423 ||
                                              Cuts::abspid==4122 )) {
        double pmax = sqrt(0.25*sqr(sqrtS())-sqr(p.mass()));
        double xp = p.mom().p3().mod()/pmax;
        if (p.abspid()==421) {
          _r[_sqs][0]->fill(0.5);
          _h[_sqs][0]->fill(xp);
        }
        else if (p.abspid()==411) {
          _r[_sqs][1]->fill(0.5);
          _h[_sqs][1]->fill(xp);
        }
        else if (p.abspid()==431) {
          _r[_sqs][2]->fill(0.5);
          _h[_sqs][2]->fill(xp);
        }
        else if (p.abspid()==4122) {
          _r[_sqs][3]->fill(0.5);
          _h[_sqs][3]->fill(xp);
        }
        else if (p.abspid()==413) {
          _r[_sqs][4]->fill(0.5);
          _h[_sqs][4]->fill(xp);
          _r[_sqs][5]->fill(0.5);
          _h[_sqs][5]->fill(xp);
        }
        else if (p.abspid()==423) {
          _r[_sqs][6]->fill(0.5);
          _h[_sqs][6]->fill(xp);
        }
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      for (double eVal : allowedEnergies()) {
        const string en = toString(round(eVal/MeV));
        if (en == "10520"s) {
          scale(_r[en], crossSection()/picobarn/sumOfWeights());
        }
        else {
          scale(_r[en], 0.5/ *_c[en]);
        }
        scale(_h[en], crossSection()/nanobarn/sumOfWeights());
      }
    }

    /// @}


    /// @name Histograms
    /// @{
    map<string,map<int,Histo1DPtr>> _h;
    map<string,map<int,Histo1DPtr>> _r;
    map<string,CounterPtr> _c;
    string _sqs = "";
    /// @}


  };


  RIVET_DECLARE_PLUGIN(BELLE_2005_I686014);

}