rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

OPAL_1995_I382219

Scaled energy distribution of $D^*$ with flavour separation at LEP
Experiment: OPAL (LEP)
Inspire ID: 382219
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C67 (1995) 27-44, 1995
Beams: e+ e-
Beam energies: (45.6, 45.6) GeV
Run details:
  • Hadronic $Z$ decays at 91.2 GeV.

The scaled energy distribution of $D^{*\pm}$ is measure, including separating the contributions from $c\bar{c}$ and $b\bar{b}$ events.

Source code: OPAL_1995_I382219.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/Beam.hh"
 4#include "Rivet/Projections/ChargedFinalState.hh"
 5#include "Rivet/Projections/UnstableParticles.hh"
 6
 7namespace Rivet {
 8
 9
10  /// @brief D* production
11  class OPAL_1995_I382219 : public Analysis {
12  public:
13
14    /// Constructor
15    RIVET_DEFAULT_ANALYSIS_CTOR(OPAL_1995_I382219);
16
17
18    /// @name Analysis methods
19    /// @{
20
21    /// Book histograms and initialise projections before the run
22    void init() {
23      declare(Beam(), "Beams");
24      declare(UnstableParticles(), "UFS");
25
26      book(_h_Xe_Ds  , 3, 1, 1);
27      book(_h_Xe_Ds_b, 4, 1, 1);
28      book(_h_Xe_Ds_c, 5, 1, 1);
29    }
30
31
32    /// Perform the per-event analysis
33    void analyze(const Event& event) {
34      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
35
36      // Get beams and average beam momentum
37      const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
38      const double meanBeamMom = ( beams.first.p3().mod() +
39                                   beams.second.p3().mod() ) / 2.0/GeV;
40      // check if b hadrons or not
41      unsigned int nB= (select(ufs.particles(), isBottomHadron)).size();
42      // Accept all D*+- decays.
43      for (const Particle& p : select(ufs.particles(), Cuts::abspid==PID::DSTARPLUS)) {
44	// Scaled energy.
45	const double energy = p.E()/GeV;
46	const double scaledEnergy = energy/meanBeamMom;
47	_h_Xe_Ds->fill(scaledEnergy);
48	if(nB==0)
49	  _h_Xe_Ds_c->fill(scaledEnergy);
50	else
51	  _h_Xe_Ds_b->fill(scaledEnergy);
52      }
53    }
54
55
56    /// Normalise histograms etc., after the run
57    void finalize() {
58      // brs for D*+/- -> D0 pi+/- and D0->K+pi-
59      double br = 0.677*0.03950;
60      scale(_h_Xe_Ds  , 1./sumOfWeights()*br);
61      scale(_h_Xe_Ds_b, 1./sumOfWeights()*br);
62      scale(_h_Xe_Ds_c, 1./sumOfWeights()*br);
63    }
64
65    /// @}
66
67
68    /// @name Histograms
69    /// @{
70    Histo1DPtr _h_Xe_Ds,_h_Xe_Ds_b,_h_Xe_Ds_c;
71    /// @}
72
73
74  };
75
76
77  RIVET_DECLARE_PLUGIN(OPAL_1995_I382219);
78
79
80}