rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

OPAL_1996_I402487

$J/\psi$ and $\psi^\prime$ Production in Hadronic $Z^0$ Decays
Experiment: OPAL (LEP 1)
Inspire ID: 402487
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C70 (1996) 197-210
Beams: e+ e-
Beam energies: (45.6, 45.6) GeV
Run details:
  • Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)

The production of $J/\psi$ and $\psi^\prime$ mesons measured by the OPAL experiment at LEP. The fragmentation function for $J/\psi$ and the multiplicities of $J/\psi$ and $\psi^\prime$ are included.

Source code: OPAL_1996_I402487.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/Beam.hh"
 4#include "Rivet/Projections/FinalState.hh"
 5#include "Rivet/Projections/ChargedFinalState.hh"
 6#include "Rivet/Projections/UnstableParticles.hh"
 7
 8namespace Rivet {
 9
10
11  /// @brief OPAL J/Psi fragmentation function paper
12  ///
13  /// @author Peter Richardson
14  class OPAL_1996_I402487 : public Analysis {
15  public:
16
17    RIVET_DEFAULT_ANALYSIS_CTOR(OPAL_1996_I402487);
18
19
20    /// @name Analysis methods
21    /// @{
22
23    void init() {
24      declare(Beam(), "Beams");
25      declare(ChargedFinalState(), "FS");
26      declare(UnstableParticles(), "UFS");
27      book(_histXpJPsi   , 1, 1, 1);
28      book(_multJPsi     , 2, 1, 1);
29      book(_multPsiPrime , 2, 1, 2);
30      book(_weightSum,"_weightSum");
31    }
32
33
34    void analyze(const Event& e) {
35      // First, veto on leptonic events by requiring at least 4 charged FS particles
36      const FinalState& fs = apply<FinalState>(e, "FS");
37      const size_t numParticles = fs.particles().size();
38
39      // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
40      if (numParticles < 2) {
41        MSG_DEBUG("Failed leptonic event cut");
42        vetoEvent;
43      }
44      MSG_DEBUG("Passed leptonic event cut");
45
46      // Get beams and average beam momentum
47      const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
48      const double meanBeamMom = ( beams.first.p3().mod() +
49                                   beams.second.p3().mod() ) / 2.0;
50      MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
51
52      // Final state of unstable particles to get particle spectra
53      const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
54
55      for (const Particle& p : ufs.particles()) {
56        if(p.abspid()==443) {
57          double xp = p.p3().mod()/meanBeamMom;
58          _histXpJPsi->fill(xp);
59          _multJPsi->fill(91.2);
60          _weightSum->fill();
61        }
62        else if(p.abspid()==100443) {
63          _multPsiPrime->fill(91.2);
64        }
65      }
66    }
67
68
69    /// Finalize
70    void finalize() {
71      if(_weightSum->val()>0.)
72        scale(_histXpJPsi  , 0.1/ *_weightSum);
73      scale(_multJPsi    , 1./sumOfWeights());
74      scale(_multPsiPrime, 1./sumOfWeights());
75    }
76
77    /// @}
78
79
80    /// @{
81    CounterPtr _weightSum;
82    Histo1DPtr _histXpJPsi;
83    Histo1DPtr _multJPsi;
84    Histo1DPtr _multPsiPrime;
85    /// @}
86
87  };
88
89
90
91  RIVET_DECLARE_ALIASED_PLUGIN(OPAL_1996_I402487, OPAL_1996_S3257789);
92
93}