rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

DELPHI_1994_I375963

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
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/FinalState.hh"
 4#include "Rivet/Projections/PromptFinalState.hh"
 5
 6namespace Rivet {
 7
 8
 9  /// @brief A study of radiative muon pair events at Z0 energies
10  class DELPHI_1994_I375963 : public Analysis {
11  public:
12
13    /// Constructor
14    RIVET_DEFAULT_ANALYSIS_CTOR(DELPHI_1994_I375963);
15
16
17    /// @name Analysis methods
18    /// @{
19
20    /// Book histograms and initialise projections before the run
21    void init() {
22
23      // FinalState of prompt photons and muons
24      declare(PromptFinalState(Cuts::abspid == PID::MUON && Cuts::energy > 20*GeV), "muons");
25      declare(PromptFinalState(Cuts::abspid == PID::PHOTON && Cuts::energy > 2*GeV), "photons");
26
27      // Book histograms
28      book(_h["ph_energy"], 1, 1, 1);
29      book(_h["ph_angle"], 2, 1, 1);
30    }
31
32
33    /// Perform the per-event analysis
34    void analyze(const Event& event) {
35
36      Particles muons = apply<PromptFinalState>(event, "muons").particles();
37      Particles photons = apply<PromptFinalState>(event, "photons").particles();
38
39      iselect(muons, [](const Particle& muon) {
40        double theta = muon.theta()/M_PI * 180.;
41        return (theta > 20. && theta < 160.);
42      });
43
44      iselect(photons, [](const Particle& photon) {
45        double theta = photon.theta()/M_PI * 180.;
46        double phi = photon.phi()/M_PI * 180.;
47
48        bool femc = (theta > 10. && theta < 36.5) || (theta > 143.5 && theta < 170.);
49        bool hpc = theta > 43. && theta < 137. && abs(fmod(phi, 15.)) > 1.5 && abs(theta-90.) > 2.;
50
51        return (femc || hpc);
52      });
53
54      if (muons.size() != 2) vetoEvent;
55      if (photons.size() == 0) vetoEvent;
56
57      for (const Particle& photon : photons) {
58        double minAngle = 1000.;
59        for (const Particle& muon : muons) {
60          double angle = photon.angle(muon) / M_PI * 180.;
61          if (angle < minAngle) {
62            minAngle = angle;
63          }
64        }
65        if (minAngle > 5.) {
66          _h["ph_energy"]->fill(photon.energy()/GeV);
67          _h["ph_angle"]->fill(minAngle);
68        }
69      }
70
71    }
72
73
74    /// Normalise histograms etc., after the run
75    void finalize() {
76
77      scale({_h["ph_energy"], _h["ph_angle"]}, 1./sumW());
78
79    }
80
81    /// @}
82
83
84    /// @name Histograms
85    /// @{
86    map<string, Histo1DPtr> _h;
87    /// @}
88
89
90  };
91
92
93  RIVET_DECLARE_PLUGIN(DELPHI_1994_I375963);
94
95}