Rivet analyses referenceBABAR_2017_I1621593$e^+e^-\to \pi^+\pi^-\pi^0\pi^0$ cross section from 0.85 to 4.5 GeVExperiment: BABAR (PEP-II) Inspire ID: 1621593 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the cross section for $e^+e^-\to \pi^+\pi^-\pi^0\pi^0$ between 0.85 to 4.5 GeV using radiative return. Source code: BABAR_2017_I1621593.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/FinalState.hh"
5
6
7namespace Rivet {
8
9
10 /// @brief e+e- > pi+ pi- 2pi0 (including omega)
11 class BABAR_2017_I1621593 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2017_I1621593);
16
17
18 /// @name Analysis methods
19 //@{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23
24 // Initialise and register projections
25 declare(FinalState(), "FS");
26 declare(UnstableParticles(), "UFS");
27
28 book(_num4pi, "TMP/num4");
29 book(_numOmega, "TMP/numOmega");
30 _mult.resize(2);
31 book(_mult[0], 1, 1, 1);
32 book(_mult[1], 2, 1, 1);
33
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 const FinalState& fs = apply<FinalState>(event, "FS");
40
41 map<long,int> nCount;
42 int ntotal(0);
43 for (const Particle& p : fs.particles()) {
44 nCount[p.pid()] += 1;
45 ++ntotal;
46 }
47 if(ntotal!=4) vetoEvent;
48 if(nCount[-211]==1&&nCount[211]==1&&nCount[111]==2) {
49 _num4pi->fill();
50 const FinalState& ufs = apply<FinalState>(event, "UFS");
51 if (!ufs.particles(Cuts::pid==223).empty()) {
52 _numOmega->fill();
53 }
54 }
55
56 }
57
58
59 /// Normalise histograms etc., after the run
60 void finalize() {
61
62 for(size_t ix=1;ix<3;++ix) {
63 double sigma,error;
64 if(ix==1) {
65 sigma = _num4pi->val();
66 error = _num4pi->err();
67 }
68 else {
69 sigma = _numOmega->val();
70 error = _numOmega->err();
71 }
72 sigma *= crossSection()/ sumOfWeights() /nanobarn;
73 error *= crossSection()/ sumOfWeights() /nanobarn;
74 Scatter2D temphisto(refData(ix, 1, 1));
75 for (size_t b = 0; b < temphisto.numPoints(); b++) {
76 const double x = temphisto.point(b).x();
77 pair<double,double> ex = temphisto.point(b).xErrs();
78 pair<double,double> ex2 = ex;
79 if(ex2.first ==0.) ex2. first=0.0001;
80 if(ex2.second==0.) ex2.second=0.0001;
81 if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
82 _mult[ix-1]->addPoint(x, sigma, ex, make_pair(error,error));
83 }
84 else {
85 _mult[ix-1]->addPoint(x, 0., ex, make_pair(0.,.0));
86 }
87 }
88 }
89 }
90
91 //@}
92
93 /// @name Histograms
94 //@{
95 CounterPtr _num4pi, _numOmega;
96 vector<Scatter2DPtr> _mult;
97 //@}
98
99
100 };
101
102
103 // The hook for the plugin system
104 RIVET_DECLARE_PLUGIN(BABAR_2017_I1621593);
105
106
107}
|