Rivet analyses

Spectra of D hadrons in e+e at $\sqrt{s}=10.55\,$GeV

Experiment: CLEO (CESR)

Inspire ID: 22954

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Rev.D 37 (1988) 1719

Beams: e+ e-

Beam energies: (5.3, 5.3)GeV

Run details: - e+ e- > hadrons

Scaled momentum spectra for D*+, D*0, D+, D0, Ds+ and Λc+ in e+e at $\sqrt{s}=10.55\,$GeV

Source code:CLEO_1988_I22954.cc

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

namespace Rivet {


  /// @brief charm spectra at 10.55
  class CLEO_1988_I22954 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_1988_I22954);


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

    /// Book histograms and initialise projections before the run
    void init() {
      // projections
      declare(UnstableParticles(Cuts::abspid == 411 || Cuts::abspid == 421 || Cuts::abspid == 413
                                || Cuts::abspid == 423 || Cuts::abspid == 431 || Cuts::abspid == 4122),
              "UFS");
      // histos
      for (unsigned int ix = 0; ix < 4; ++ix) {
        book(_h_spect[ix], 1 + 2 * ix, 1, 1);
        book(_h_scale[ix], 2 + 2 * ix, 1, 1);
        book(_h_sigma[ix], 14, 1, 1 + ix);
        if (ix == 3) continue;
        book(_h_spect[4 + ix], 9 + ix, 1, 1);
      }
      book(_h_scale[4], 12, 1, 1);
      for (unsigned int ix = 0; ix < 2; ++ix) {
        for (unsigned int iy = 0; iy < 7; ++iy) {
          book(_h_sigma_br[ix][iy], 13, 1 + ix, 1 + iy);
        }
      }
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
      for (const Particle& p : ufs.particles()) {
        double Emax = 0.5 * sqrtS();
        double pmax = sqrt(sqr(Emax) - p.mass2());
        double xp = (p.E() + p.p3().mod()) / (Emax + pmax);
        if (p.abspid() == 413) {
          _h_spect[0]->fill(xp);
          _h_scale[0]->fill(xp);
          _h_spect[1]->fill(xp);
          _h_scale[1]->fill(xp);
          _h_sigma[2]->fill("10.55"s);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][2]->fill(xp);
          }
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][3]->fill(xp);
          }
        }
        else if (p.abspid() == 421) {
          _h_spect[2]->fill(xp);
          _h_scale[2]->fill(xp);
          _h_sigma[0]->fill("10.55"s);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][0]->fill(xp);
          }
        }
        else if (p.abspid() == 411) {
          _h_spect[3]->fill(xp);
          _h_scale[3]->fill(xp);
          _h_sigma[1]->fill("10.55"s);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][1]->fill(xp);
          }
        }
        else if (p.abspid() == 431) {
          _h_spect[4]->fill(xp);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][5]->fill(xp);
          }
        }
        else if (p.abspid() == 4122) {
          _h_spect[5]->fill(xp);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][6]->fill(xp);
          }
        }
        else if (p.abspid() == 423) {
          _h_spect[6]->fill(xp);
          _h_scale[4]->fill(xp);
          _h_sigma[3]->fill("10.55"s);
          for (unsigned int ix = 0; ix < 2; ++ix) {
            _h_sigma_br[ix][4]->fill(xp);
          }
        }
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      const vector<double> br = {0.677 * 0.03947, 0.677 * 0.0822, 0.03947, 0.0938, 0.045, 0.0628, 0.03947};
      const double fact1 = crossSection() / picobarn / sumOfWeights();
      const double fact2 = crossSection() / nanobarn / sumOfWeights() * sqr(sqrtS());
      for (unsigned int ix = 0; ix < 7; ++ix) {
        scale(_h_spect[ix], fact1 * br[ix]);
        if (ix > 4) continue;
        scale(_h_scale[ix], fact2);
        if (ix == 4) continue;
        scale(_h_sigma[ix], fact1 * 1e-3);
      }
      const double width[2] = {1., 0.5};
      for (unsigned int ix = 0; ix < 2; ++ix) {
        scale(_h_sigma_br[ix][0], width[ix] * fact1 * br[2]);
        scale(_h_sigma_br[ix][1], width[ix] * fact1 * br[3]);
        scale(_h_sigma_br[ix][2], width[ix] * fact1 * br[0]);
        scale(_h_sigma_br[ix][3], width[ix] * fact1 * br[1]);
        scale(_h_sigma_br[ix][4], width[ix] * fact1 * br[6]);
        scale(_h_sigma_br[ix][5], width[ix] * fact1 * br[4]);
        scale(_h_sigma_br[ix][6], width[ix] * fact1 * br[5]);
      }
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h_spect[7], _h_scale[5], _h_sigma_br[2][7];
    BinnedHistoPtr<string> _h_sigma[4];
    /// @}
  };


  RIVET_DECLARE_PLUGIN(CLEO_1988_I22954);

}