Rivet analyses referenceBESIII_2021_I1929314Cross sections for $e^+e^-\to$ $K^+K^-\pi^+\pi^-(\pi^0)$, $K^+K^-K^+K^-(\pi^0)$, $\pi^+\pi^-\pi^+\pi^-(\pi^0)$ and $p\bar{p}\pi^+\pi^-(\pi^0)$ between 3.773 and 4.6 GeVExperiment: BESIII (BEPC) Inspire ID: 1929314 Status: VALIDATED Authors:
Beam energies: (1.9, 1.9); (1.9, 1.9); (1.9, 1.9); (1.9, 1.9); (1.9, 1.9); (2.0, 2.0); (2.0, 2.0); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3) GeV Run details:
Measurement of the dressed cross sections for $e^+e^-\to$ $K^+K^-\pi^+\pi^-(\pi^0)$, $K^+K^-K^+K^-(\pi^0)$, $\pi^+\pi^-\pi^+\pi^-(\pi^0)$ and $p\bar{p}\pi^+\pi^-(\pi^0)$ between 3.773 and 4.6 GeV by the BESIII collaboration. There were three duplicate energy points in the data, for these points the one with higher statistics was retained. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples. Source code: BESIII_2021_I1929314.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 /// @brief e+e- -> 4 charged particles (+pi0) cross sections
9 class BESIII_2021_I1929314 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2021_I1929314);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 declare(FinalState(), "FS");
22 for (unsigned int ix=0;ix<8;++ix) {
23 book(_nCharged[ix], 1, 1, ix+1);
24 }
25
26 for (const string& en : _nCharged[0].binning().edges<0>()) {
27 const double end = std::stod(en)*GeV;
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 map<long,int> nCount;
41 int ntotal(0);
42 for (const Particle& p : fs.particles()) {
43 nCount[p.pid()] += 1;
44 ++ntotal;
45 }
46 if(ntotal==4) {
47 if(nCount[211]==1 && nCount[-211]==1) {
48 if(nCount[321]==1 && nCount[-321]==1 )
49 _nCharged[0]->fill(_ecms);
50 else if(nCount[2212]==1 && nCount[-2212]==1 )
51 _nCharged[3]->fill(_ecms);
52 }
53 else if(nCount[321]==2 && nCount[-321]==2 )
54 _nCharged[1]->fill(_ecms);
55 else if (nCount[211]==2 && nCount[-211]==2 )
56 _nCharged[2]->fill(_ecms);
57 }
58 else if(ntotal==5 && nCount[111]==1) {
59 if(nCount[211]==1 && nCount[-211]==1) {
60 if(nCount[321]==1 && nCount[-321]==1 )
61 _nCharged[4]->fill(_ecms);
62 else if(nCount[2212]==1 && nCount[-2212]==1 )
63 _nCharged[7]->fill(_ecms);
64 }
65 else if(nCount[321]==2 && nCount[-321]==2 )
66 _nCharged[5]->fill(_ecms);
67 else if (nCount[211]==2 && nCount[-211]==2 )
68 _nCharged[6]->fill(_ecms);
69 }
70 }
71
72
73 /// Normalise histograms etc., after the run
74 void finalize() {
75 double fact = crossSection()/ sumOfWeights() /picobarn;
76 for (unsigned int ix=0;ix<8;++ix)
77 scale(_nCharged[ix],fact);
78 }
79 /// @}
80
81
82 /// @name Histograms
83 /// @{
84 BinnedHistoPtr<string> _nCharged[8];
85 string _ecms;
86 /// @}
87
88
89 };
90
91
92 RIVET_DECLARE_PLUGIN(BESIII_2021_I1929314);
93
94}
|