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 for (auto& b : _mult[ix-1]->bins()) {
75 if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
76 b.set(sigma, error);
77 }
78 }
79 }
80 }
81
82 /// @}
83
84 /// @name Histograms
85 /// @{
86 CounterPtr _num4pi, _numOmega;
87 vector<Estimate1DPtr> _mult;
88 /// @}
89
90
91 };
92
93
94 RIVET_DECLARE_PLUGIN(BABAR_2017_I1621593);
95
96
97}
|