Rivet analyses
Cross section for e+e− → ωX(3872) for $\sqrt{s}=4.661$ to 4.951 GeV
Experiment: BESIII (BEPC)
Inspire ID: 2614215
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - arXiv: 2212.07291
Beams: e+ e-
Beam energies: (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.4, 2.4); (2.4, 2.4); (2.4, 2.4); (2.4, 2.4); (2.5, 2.5); (2.5, 2.5)GeV
Run details: - e+e- > hadrons
Measurement of the cross section for e+e− → ωX(3872) for $\sqrt{s}=4.661$ to 4.951 GeV by the BESIII collaboration. There is no consensus as to the nature of the X(3872) cc̄ state and therefore we taken its PDG code to be 9030443, i.e. the first unused code for an undetermined spin one cc̄ state. This can be changed using the PID option if a different code is used by the event generator performing the simulation.
Source
code:BESIII_2022_I2614215.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief e+e- > omega X(3872)
class BESIII_2022_I2614215 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2022_I2614215);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// set the PDG code
_pid = getOption<double>("PID", 9030443);
// projections
declare(FinalState(), "FS");
declare(UnstableParticles(), "UFS");
// counters
book(_sigma,1,1,1);
for(const string& en : _sigma.binning().edges<0>()) {
const double eval = stod(en);
if (isCompatibleWithSqrtS(eval)) {
_sqs = en; break;
}
}
raiseBeamErrorIf(_sqs.empty());
}
void findChildren(const Particle& p, map<long,int>& nRes, int& ncount) const {
for (const Particle &child : p.children()) {
if (child.children().empty()) {
--nRes[child.pid()];
--ncount;
}
else {
findChildren(child,nRes,ncount);
}
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
const FinalState& fs = apply<FinalState>(event, "FS");
map<long,int> nCount;
int ntotal(0);
for (const Particle& p: fs.particles()) {
nCount[p.pid()] += 1;
++ntotal;
}
const FinalState& ufs = apply<FinalState>(event, "UFS");
for (const Particle& XX : ufs.particles(Cuts::pid==_pid)) {
if (XX.children().empty()) continue;
bool matched = false;
map<long,int> nRes = nCount;
int ncount = ntotal;
findChildren(XX,nRes,ncount);
for (const Particle & omega : ufs.particles(Cuts::pid==223)) {
if (omega.parents()[0].pid()==_pid || omega.children().empty()) continue;
map<long,int> nRes2 = nRes;
int ncount2 = ncount;
findChildren(omega,nRes2,ncount2);
matched = true;
for (const auto& val : nRes2) {
if (val.second!=0) {
matched = false;
break;
}
}
if (matched) {
_sigma->fill(_sqs);
break;
}
}
if (matched) break;
}
}
/// Normalise histograms etc., after the run
void finalize() {
scale(_sigma, crossSection()/ sumOfWeights() /picobarn);
}
/// @}
/// @name Histograms
/// @{
int _pid;
BinnedHistoPtr<string> _sigma;
string _sqs = "";
/// @}
};
RIVET_DECLARE_PLUGIN(BESIII_2022_I2614215);
}