Rivet analyses

Visible hadronic cross section near the Υ(1S), Υ(2S) and Υ(4S) resonances

Experiment: ARGUS (DORIS)

Inspire ID: 375418

Status: VALIDATED NOHEPDATA SINGLEWEIGHT

Authors: - Peter Richardson

References: - Z.Phys.C 65 (1995) 619-626

Beams: e- e+

Beam energies: ANY

Run details: - e+ e- to hadrons including the Upsilon resonances

Measurement of the visible hadronic cross section near the Υ(1S), Υ(2S) and Υ(4S) resonances. As the analyses requires the beam energy smearing described in the paper then central CMS energy should be specified using the ECENT (in GeV) option.

Source code:ARGUS_1994_I375418.cc

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

namespace Rivet {


  /// @brief e+ e- > hadrons near Upsilon resonances
  class ARGUS_1994_I375418 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1994_I375418);


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

    /// Book histograms and initialise projections before the run
    void init() {

      // Initialise and register projections
      declare(FinalState(), "FS");
      declare(ChargedFinalState(), "CFS");

      // Book histograms
      for(unsigned int ix=0;ix<3;++ix)
        book(_sigma[ix], 1+ix,1,1);
      _eCent = getOption<string>("ECENT", std::to_string(sqrtS()/MeV));
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      if (apply<ChargedFinalState>(event,"CFS").particles().size()<3) vetoEvent;
      const FinalState& fs = apply<FinalState>(event, "FS");
      map<long,int> nCount;
      int ntotal(0);
      for (const Particle& p : fs.particles()) {
        nCount[p.pid()] += 1;
        ++ntotal;
      }
      // mu+mu- + photons
      if (nCount[-13]==1 and nCount[13]==1 && ntotal==2+nCount[22]) {
        vetoEvent;
      }
      else if (nCount[-11]==1 and nCount[11]==1 && ntotal==2+nCount[22]) {
        vetoEvent;
      }
      else { // everything else
        _sigma[0]->fill(_eCent);
        _sigma[1]->fill(_eCent);
        double H0=0.,H2=0;
        for (unsigned int ix=0; ix<fs.particles().size(); ++ix) {
          double p1 = fs.particles()[ix].p3().mod();
          for (unsigned int iy=0; iy<fs.particles().size(); ++iy) {
            double p2 = fs.particles()[iy].p3().mod();
            double cTheta=fs.particles()[ix].p3().dot(fs.particles()[iy].p3())/p1/p2;
            double pre=p1*p2/sqr(sqrtS());
            H0 += pre;
            H2 += 0.5*pre*(3.*sqr(cTheta)-1);
          }
        }
        if (H2/H0<0.35) _sigma[2]->fill(_eCent);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      scale(_sigma, crossSection()/sumOfWeights()/nanobarn);
    }

    /// @}


    /// @name Histograms
    /// @{
    BinnedHistoPtr<string> _sigma[3];
    string _eCent;
    /// @}


  };


  RIVET_DECLARE_PLUGIN(ARGUS_1994_I375418);

}