Rivet analyses referenceDM1_1978_I134061Cross section for $e^+e^-\to \pi^+\pi^-$ between 0.483 and 1.096 GeVExperiment: DM1 (ACO) Inspire ID: 134061 Status: VALIDATED Authors:
Beam energies: (0.2, 0.2); (0.3, 0.3); (0.3, 0.3); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5) GeV Run details:
Measurement of the cross section for $e^+e^-\to \pi^+\pi^-$ at energies between 0.483 and 1.096 GeV. Useful for comparing models of the pion form factor. Source code: DM1_1978_I134061.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 /// @brief e+e- > pi+pi-
9 class DM1_1978_I134061 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(DM1_1978_I134061);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // Initialise and register projections
22 declare(FinalState(), "FS");
23
24 // Book histograms
25 book(_npion,1,1,1);
26 for (const string& en : _npion.binning().edges<0>()) {
27 double end = std::stod(en)*MeV;
28 if(isCompatibleWithSqrtS(end)) {
29 ecms = en;
30 break;
31 }
32 }
33 if(ecms.empty()) MSG_ERROR("Beam energy incompatible with analysis.");
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 const FinalState& fs = apply<FinalState>(event, "FS");
40 if(fs.particles().size()!=2) vetoEvent;
41 for (const Particle& p : fs.particles()) {
42 if(abs(p.pid())!=PID::PIPLUS) vetoEvent;
43 }
44 _npion->fill(ecms);
45 }
46
47
48 /// Normalise histograms etc., after the run
49 void finalize() {
50 scale(_npion,crossSection()/ sumOfWeights() /nanobarn);
51 }
52
53 /// @}
54
55
56 /// @name Histograms
57 /// @{
58 BinnedHistoPtr<string> _npion;
59 string ecms;
60 /// @}
61
62
63 };
64
65
66 RIVET_DECLARE_PLUGIN(DM1_1978_I134061);
67
68
69}
|