Rivet analyses referenceBESIII_2023_I2686032Cross section for $e^+e^-\to\Lambda^0\bar{\Sigma}^0+\text{c.c.}$ for $\sqrt{s}=2.3094\to3.0800\,$GeVExperiment: BESIII (BEPC) Inspire ID: 2686032 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (1.2, 1.2); (1.2, 1.2); (1.2, 1.2); (1.2, 1.2); (1.3, 1.3); (1.3, 1.3); (1.4, 1.4); (1.4, 1.4); (1.4, 1.4); (1.5, 1.5); (1.5, 1.5); (1.5, 1.5); (1.5, 1.5); (1.5, 1.5) GeV Run details:
Measurement of the cross section for $e^+e^-\to\Lambda^0\bar{\Sigma}^0+\text{c.c.}$ for $\sqrt{s}=2.3094\to3.0800\,$GeV by the BESIII collaboration. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples. Source code: BESIII_2023_I2686032.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief e+e- > Lambda0 Sigmabar0 + c.c.
10 class BESIII_2023_I2686032 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2023_I2686032);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 declare(FinalState(), "FS");
24 declare(UnstableParticles(), "UFS");
25 book(_nLS, 1, 1, 1);
26 for (const string& en : _nLS.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())
34 MSG_ERROR("Beam energy incompatible with analysis.");
35 }
36
37 void findChildren(const Particle& p, map<long,int>& nRes, int& ncount) {
38 for (const Particle& child : p.children()) {
39 if (child.children().empty()) {
40 nRes[child.pid()]-=1;
41 --ncount;
42 }
43 else {
44 findChildren(child,nRes,ncount);
45 }
46 }
47 }
48
49 /// Perform the per-event analysis
50 void analyze(const Event& event) {
51 const FinalState& fs = apply<FinalState>(event, "FS");
52 // total hadronic and muonic cross sections
53 map<long,int> nCount;
54 int ntotal(0);
55 for (const Particle& p : fs.particles()) {
56 nCount[p.pid()] += 1;
57 ++ntotal;
58 }
59
60 // find the Lambdas and Sigmas
61 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
62 for (const Particle& p1 : ufs.particles(Cuts::abspid==3122)) {
63 bool matched = false;
64 // check fs
65 bool fs = true;
66 for (const Particle& child : p1.children()) {
67 if (child.pid()==p1.pid()) {
68 fs = false;
69 break;
70 }
71 }
72 if (!fs) continue;
73 // find the children
74 map<long,int> nRes = nCount;
75 int ncount = ntotal;
76 findChildren(p1, nRes, ncount);
77 int sign = p1.pid()/3122;
78 for (const Particle& p2 : ufs.particles(Cuts::pid==-sign*3212)) {
79 // check fs
80 bool fs = true;
81 for (const Particle& child : p2.children()) {
82 if (child.pid()==p2.pid()) {
83 fs = false;
84 break;
85 }
86 }
87 if (!fs) continue;
88 map<long,int> nRes2 = nRes;
89 int ncount2 = ncount;
90 findChildren(p2,nRes2,ncount2);
91 if (ncount2!=0) continue;
92 matched=true;
93 for (const auto& val : nRes2) {
94 if (val.second!=0) {
95 matched = false;
96 break;
97 }
98 }
99 if (matched) {
100 _nLS->fill(_ecms);
101 break;
102 }
103 }
104 if (matched) break;
105 }
106 }
107
108
109 /// Normalise histograms etc., after the run
110 void finalize() {
111 scale(_nLS, crossSection()/ sumOfWeights() /picobarn);
112 const double mL = 1.115683;
113 const double mS = 1.192642;
114 const double tau = sqr(sqrtS()/(mL+mS));
115 const double beta = sqrt(1.-2.*(sqr(mS)+sqr(mL))/sqr(sqrtS())+sqr((sqr(mS)-sqr(mL))/sqr(sqrtS())));
116 const double alpha = 7.2973525693e-3;
117 const double GeV2pb = 0.3893793721e9;
118 const double sigma0 = 4.*M_PI*sqr(alpha/sqrtS())*beta*GeV2pb;
119 BinnedEstimatePtr<string> tmp;
120 book(tmp,1,1,2);
121 for(const auto & b : _nLS->bins()) {
122 tmp->bin(b.index()).set(sqrt(3.*b.sumW()*tau/(sigma0*(0.5 + 0.5*tau))),
123 sqrt(1.5*tau/b.sumW()/sigma0/(1.+2.*tau))*b.errW());
124 }
125 }
126
127 /// @}
128
129
130 /// @name Histograms
131 /// @{
132 BinnedHistoPtr<string> _nLS;
133 string _ecms;
134 /// @}
135
136
137 };
138
139
140 RIVET_DECLARE_PLUGIN(BESIII_2023_I2686032);
141
142}
|