rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2018_I1674528

Positron momentum spectrum in semileptonic $\Lambda_c^+$ decay
Experiment: BESIII (BEPC)
Inspire ID: 1674528
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 121 (2018) 25, 251801
Beams: e+ e-
Beam energies: (2.0, 2.0); (3.0, 3.0) GeV
Run details:
  • e+e -> hadrons

Measurement of the positron momentum spectrum in the lab frame for semileptonic $\Lambda_c^+$ decay.

Source code: BESIII_2018_I1674528.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief Semileptonic Lambda_c+
 9  class BESIII_2018_I1674528 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2018_I1674528);
14
15
16    /// @name Analysis methods
17    /// @{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21      // projections
22      declare(UnstableParticles(Cuts::abspid==4122),"UFS");
23      // histos
24      book(_h,1,1,1);
25    }
26
27    void findDecayProducts(Particle parent, Particles & em, Particles & ep,
28			   Particles & nue, Particles & nueBar) {
29      for(const Particle & p : parent.children()) {
30	if(p.pid() == PID::EMINUS) {
31	  em.push_back(p);
32	}
33	else if(p.pid() == PID::EPLUS) {
34	  ep.push_back(p);
35	}
36	else if(p.pid() == PID::NU_E) {
37	  nue.push_back(p);
38	}
39	else if(p.pid() == PID::NU_EBAR) {
40	  nueBar.push_back(p);
41	}
42	else if(!PID::isHadron(p.pid())) {
43	  findDecayProducts(p,em,ep,nue,nueBar);
44	}
45      }
46    }
47
48    /// Perform the per-event analysis
49    void analyze(const Event& event) {
50      for(const Particle & p : apply<UnstableParticles>(event, "UFS").particles()) {
51	Particles em,ep,nue,nueBar;
52	findDecayProducts(p,em,ep,nue,nueBar);
53	if(em.size()==1 && nueBar.size()==1) {
54	  double pmod = em[0].momentum().p3().mod();
55	  _h->fill(pmod);
56	}
57	else if(ep.size()==1 && nue.size()==1) {
58	  double pmod = ep[0].momentum().p3().mod();
59	  _h->fill(pmod);
60	}
61      }
62    }
63
64
65    /// Normalise histograms etc., after the run
66    void finalize() {
67      normalize(_h,1.,false);
68    }
69
70    /// @}
71
72
73    /// @name Histograms
74    /// @{
75    Histo1DPtr _h;
76    /// @}
77
78
79  };
80
81
82  RIVET_DECLARE_PLUGIN(BESIII_2018_I1674528);
83
84}