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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// -*- 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();
      
      ifilter_select(muons, [](const Particle& muon) {
        double theta = muon.theta()/M_PI * 180.;
        return (theta > 20. && theta < 160.);
      });
      
      ifilter_select(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);

}