rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2023_I2614192

$e^+e^-\to n \bar{n}$ between 2 and 2.95 GeV
Experiment: BESIII (BEPC)
Inspire ID: 2614192
Status: VALIDATED NOHEPDATA SINGLEWEIGHT
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 130 (2023) 15, 151905
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+ e- to hadrons

Measurement of the electric and magnetic form factors for $e^+e^-\to n \bar{n}$ between 2 and 2.95 GeV.

Source code: BESIII_2023_I2614192.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/FinalState.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief e+ e- > n nbar
 9  class BESIII_2023_I2614192 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2023_I2614192);
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(FinalState(), "FS");
24
25      for(unsigned int ix=0; ix<2; ++ix) {
26        book(_c[ix],"/TMP/c_"+toString(ix));
27      }
28    }
29
30
31    /// Perform the per-event analysis
32    void analyze(const Event& event) {
33      const FinalState& fs = apply<FinalState>(event, "FS");
34      if(fs.particles().size()!=2) vetoEvent;
35      double cTheta(0.);
36      for (const Particle& p :  fs.particles()) {
37        if(abs(p.pid())!=PID::NEUTRON) vetoEvent;
38        if(p.pid()==PID::NEUTRON) cTheta = p.mom().z()/p.mom().p3().mod();
39      }
40      _c[0]->fill();
41      _c[1]->fill(2.-5.*sqr(cTheta));
42    }
43
44
45    /// Normalise histograms etc., after the run
46    void finalize() {
47      // storage of the values to fill histos
48      const double mn    = 0.93956542052;
49      const double tau   = 4.*sqr(mn/sqrtS());
50      const double beta  = sqrt(1.-tau);
51      const double alpha = 7.2973525693e-3;
52      const double GeV2nb = 0.3893793721e6;
53      const double fact = 4./3.*M_PI*sqr(alpha)*beta/2/sqr(sqrtS())*GeV2nb;
54      scale(_c, crossSection()/sumOfWeights()/nanobarn/fact);
55
56      double val[3], err[3];
57      val[0] = sqrt(2.*_c[1]->val()/(_c[0]->val()-_c[1]->val())/tau);
58      err[0] = 0.5/_c[1]->val()/tau*(sqr(_c[0]->err()*_c[1]->val())+sqr(_c[1]->err()*_c[0]->val())) /
59               pow(_c[0]->val()-_c[1]->val(),3);
60      val[1] = 1e2*sqrt(0.5*(_c[0]->val()-_c[1]->val()));
61      err[1] = 1e2*0.125*(sqr(_c[0]->err())+sqr(_c[1]->err()))/(_c[0]->val()-_c[1]->val());
62      val[2] = 1e2*sqrt(_c[1]->val()/tau);
63      err[2] = 1e2*0.25*sqr(_c[1]->err())/_c[1]->val()/tau;
64      // fill histos
65      for (unsigned int ix=0; ix<3; ++ix) {
66        Estimate1DPtr  mult;
67        book(mult, 1, 1, 1+ix);
68        for (auto& b : mult->bins()) {
69          if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
70            b.set(val[ix], err[ix]);
71          }
72        }
73      }
74    }
75
76    /// @}
77
78
79    /// @name Histograms
80    /// @{
81    CounterPtr _c[2];
82    /// @}
83
84
85  };
86
87
88  RIVET_DECLARE_PLUGIN(BESIII_2023_I2614192);
89
90}