Rivet analyses

Spectrum of D*+ mesons in e+e at $\sqrt{s}=10.4\,$GeV

Experiment: ARGUS (DORIS)

Inspire ID: 204851

Status: VALIDATED NOHEPDATA

Authors: - Peter Richardson

References: - Phys.Lett.B 150 (1985) 235-241

Beams: e+ e-

Beam energies: (5.2, 5.2)GeV

Run details: - e+ e- > hadrons

Measurement of the scaled momentum spectrum of D*+ mesons in e+e at $\sqrt{s}=10.4\,$GeV

Source code:ARGUS_1985_I204851.cc

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

namespace Rivet {


  /// @brief e+e- > D*+ + X
  class ARGUS_1985_I204851 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1985_I204851);


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

    /// Book histograms and initialise projections before the run
    void init() {
      // projections
      declare(UnstableParticles(Cuts::abspid == 413), "UFS");
      // histos
      for (unsigned int ix = 0; ix < 2; ++ix) {
        book(_h_sigma[ix], 1, 1, 1 + ix);
      }
      book(_h_spect, 2, 1, 1);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      if (_edges[0].empty()) {
        _edges[0] = _h_sigma[0]->xEdges();
        _edges[1] = _h_spect->xEdges();
      }
      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
      for (const Particle& p : ufs.particles()) {
        const double xp = p.p3().mod() / sqrt(0.25 * sqr(sqrtS()) - sqr(p.mass()));
        const size_t idx = _axis.index(xp);
        if (idx && idx <= _edges[1].size()) _h_spect->fill(_edges[1][idx - 1]);
        for (unsigned int ix = 0; ix < 2; ++ix) {
          _h_sigma[ix]->fill(_edges[0][1]);
          if (xp > 0.5) _h_sigma[ix]->fill(_edges[0][0]);
        }
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      const double br[2] = {0.03947, 0.0822};
      const double fact = 0.677 * crossSection() / sumOfWeights() / picobarn;
      for (unsigned int ix = 0; ix < 2; ++ix) {
        scale(_h_sigma[ix], fact * br[ix]);
      }
      scale(_h_spect, sqr(sqrtS()) * crossSection() / sumOfWeights() / microbarn);
      for (auto& b : _h_spect->bins()) {
        b.scaleW(1. / _axis.width(b.index()));
      }
    }

    /// @}


    /// @name Histograms
    /// @{
    BinnedHistoPtr<string> _h_spect, _h_sigma[2];
    vector<string> _edges[2];
    YODA::Axis<double> _axis{0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0};
    /// @}
  };


  RIVET_DECLARE_PLUGIN(ARGUS_1985_I204851);

}