rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2019_I1702549

$D_s^+\to K^0 e^+\nu_e$ $q^2$ spectrum
Experiment: BESIII (BEPC)
Inspire ID: 1702549
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 122 (2019) 6, 061801
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing D_s+

Measurement of the $q^2$ spectrum in the decay $D_s^+\to K^0 e^+\nu_e$ BES-III.

Source code: BESIII_2019_I1702549.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief q^2 in D_s+ -> K0 e+ nu_e
 9  class BESIII_2019_I1702549 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2019_I1702549);
14
15
16    /// @name Analysis methods
17    ///@{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21
22      // Initialise and register projections
23      declare(UnstableParticles(), "UFS");
24
25      // Book histograms
26      book(_h_q2, 1, 1, 1);
27      book(_nD,"/TMP/nD");
28    }
29
30    // Calculate the Q2 using mother and daugher meson
31    double q2(const Particle& B, int mesonID) {
32      FourMomentum q = B.mom() - filter_select(B.children(), Cuts::pid==mesonID)[0];
33      return q*q;
34    }
35
36    // Check for explicit decay into pdgids
37    bool isSemileptonicDecay(const Particle& mother, vector<int> ids) {
38      // Trivial check to ignore any other decays but the one in question modulo photons
39      const Particles children = mother.children(Cuts::pid!=PID::PHOTON);
40      if (children.size()!=ids.size()) return false;
41      // Check for the explicit decay
42      return all(ids, [&](int i){return count(children, hasPID(i))==1;});
43    }
44
45    /// Perform the per-event analysis
46    void analyze(const Event& event) {
47      // Loop over D+ mesons 
48      for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==431 )) {
49        _nD->fill();
50        if(p.pid()==431 && isSemileptonicDecay(p, {PID::K0, PID::EPLUS, PID::NU_E}) ) {
51      	  _h_q2->fill(q2(p, PID::K0));
52        }
53        else if(p.pid()==431 && isSemileptonicDecay(p, {130, PID::EPLUS, PID::NU_E}) ) {
54      	  _h_q2->fill(q2(p, 130));
55        }
56        else if(p.pid()==431 && isSemileptonicDecay(p, {310, PID::EPLUS, PID::NU_E}) ) {
57      	  _h_q2->fill(q2(p, 310));
58        }
59      }
60    }
61
62
63    /// Normalise histograms etc., after the run
64    void finalize() {
65       // normalise to width in inverse ns
66       scale(_h_q2, 1./0.504e-3/ *_nD);
67    }
68
69    ///@}
70
71
72    /// @name Histograms
73    ///@{
74    Histo1DPtr _h_q2;
75    CounterPtr _nD;
76    ///@}
77
78
79  };
80
81
82  RIVET_DECLARE_PLUGIN(BESIII_2019_I1702549);
83
84}