Rivet analyses referenceBESIII_2023_I2614192$e^+e^-\to n \bar{n}$ between 2 and 2.95 GeVExperiment: BESIII (BEPC) Inspire ID: 2614192 Status: VALIDATED NOHEPDATA SINGLEWEIGHT Authors:
Beam energies: ANY Run details:
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}
|