Rivet analyses

A study of radiative muon pair events at Z0 energies

Experiment: DELPHI (LEP)

Inspire ID: 375963

Status: VALIDATED NOTREENTRY NOHEPDATA

Authors: - Markus Seidel

References: - Z.Phys.C 65 (1995) 603-618 - DOI:10.1007/BF01578669 - CERN-PPE-94-121 - CERN-DELPHI-THESIS-111

Beams: e+ e-

Beam energies: (45.6, 45.6)GeV

Run details: - e+ e- > mu+ mu-, including ISR

Differential cross sections of the radiative photons as a function of photon energy and of the angle between the photon and the muon. Data points were digitised from the note, +8% photon efficiency uncertainty (as described in thesis), and divided by bin width for the Rivet analysis.

Source code:DELPHI_1994_I375963.cc

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

namespace Rivet {


  /// @brief A study of radiative muon pair events at Z0 energies
  class DELPHI_1994_I375963 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(DELPHI_1994_I375963);


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

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

      // FinalState of prompt photons and muons
      declare(PromptFinalState(Cuts::abspid == PID::MUON && Cuts::energy > 20*GeV), "muons");
      declare(PromptFinalState(Cuts::abspid == PID::PHOTON && Cuts::energy > 2*GeV), "photons");

      // Book histograms
      book(_h["ph_energy"], 1, 1, 1);
      book(_h["ph_angle"], 2, 1, 1);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      Particles muons = apply<PromptFinalState>(event, "muons").particles();
      Particles photons = apply<PromptFinalState>(event, "photons").particles();

      iselect(muons, [](const Particle& muon) {
        double theta = muon.theta()/M_PI * 180.;
        return (theta > 20. && theta < 160.);
      });

      iselect(photons, [](const Particle& photon) {
        double theta = photon.theta()/M_PI * 180.;
        double phi = photon.phi()/M_PI * 180.;

        bool femc = (theta > 10. && theta < 36.5) || (theta > 143.5 && theta < 170.);
        bool hpc = theta > 43. && theta < 137. && abs(fmod(phi, 15.)) > 1.5 && abs(theta-90.) > 2.;

        return (femc || hpc);
      });

      if (muons.size() != 2) vetoEvent;
      if (photons.size() == 0) vetoEvent;

      for (const Particle& photon : photons) {
        double minAngle = 1000.;
        for (const Particle& muon : muons) {
          double angle = photon.angle(muon) / M_PI * 180.;
          if (angle < minAngle) {
            minAngle = angle;
          }
        }
        if (minAngle > 5.) {
          _h["ph_energy"]->fill(photon.energy()/GeV);
          _h["ph_angle"]->fill(minAngle);
        }
      }

    }


    /// Normalise histograms etc., after the run
    void finalize() {

      scale({_h["ph_energy"], _h["ph_angle"]}, 1./sumW());

    }

    /// @}


    /// @name Histograms
    /// @{
    map<string, Histo1DPtr> _h;
    /// @}


  };


  RIVET_DECLARE_PLUGIN(DELPHI_1994_I375963);

}