Rivet analyses
title: CLEO_2006_I710864
Cross sections for $e^+e^-\to J/\psi + \pi^+\pi^-$, $\pi^0\pi^0$ or $K^+K^-$
Experiment: CLEO (CESR)
Inspire ID: 710864
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Phys.Rev.Lett. 96 (2006) 162003
Beams: * *
Beam energies: (2.0, 2.0); (2.1, 2.1); (2.1, 2.1)GeV
Run details: - For the cross sections e+e- -> hadrons at 4.015, 4.160 or 4.260 GeV, any process producing psi(4230) for decays. pi0 should be set stable
Measurement of the cross section for $e^+e^-\to J/\psi + \pi^+\pi^-$, $\pi^0\pi^0$ or $K^+K^-$ at $\sqrt{s}=4.015$, $4.160$ or $4.260\,$GeV to study the properties of $\psi(4040)$ , $\psi(4160)$ and $Y(4260)$ (now $\psi(4230)$). Two modes are provided, one for the $e^+e^-$ cross secions (MODE=SIGMA) and a second which implements the measured mass distribution in $Y(4260)\to J/\psi\pi^+\pi^-$ decays. There is no consensus as to the nature of the $\psi(4230)$ $c\bar{c}$ state and therefore we taken its PDG code to be 9030443, i.e. the first unused code for an undetermined spin one $c\bar{c}$ state. This can be changed using the PID option if a different code is used by the event generator performing the simulation.
Source code:CLEO_2006_I710864.cc
```c++ // -- C++ --
include "Rivet/Analysis.hh"
include "Rivet/Projections/DecayedParticles.hh"
include "Rivet/Projections/FinalState.hh"
include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief Cross sections for $e^+e^-\to J/\psi + \pi^+\pi^-$, $\pi^0\pi^0$ or $K^+K^-$ class CLEO_2006_I710864 : public Analysis { public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_2006_I710864);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// set the PDG code
_pid = getOption<int>("PID", 9030443);
// setup for cross sections
declare(FinalState(), "FS");
declare(UnstableParticles(Cuts::pid == 443), "UFS");
// histograms
for (unsigned int ix = 0; ix < 3; ++ix) {
book(_sigma[ix], 1, 1, 1 + ix);
}
for (const string& en : _sigma[0].binning().edges<0>()) {
const size_t idx = en.find("to");
if (idx != string::npos) {
const double emin = std::stod(en.substr(0, idx));
const double emax = std::stod(en.substr(idx + 2, string::npos));
if (inRange(sqrtS() / GeV, emin, emax)) {
_sqs = en;
break;
}
}
else {
const double eval = stod(en);
if (isCompatibleWithSqrtS(eval)) {
_sqs = en;
break;
}
}
}
raiseBeamErrorIf(_sqs.empty());
// projections for decays
DecayedParticles PSI(UnstableParticles(Cuts::abspid == _pid));
PSI.addStable(443);
declare(PSI, "PSI");
book(_h, 2, 1, 1);
}
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) {
// cross section
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;
}
for (const Particle& psi : apply<UnstableParticles>(event, "UFS").particles()) {
if (psi.children().empty()) continue;
map<long, int> nRes = nCount;
int ncount = ntotal;
findChildren(psi, nRes, ncount);
if (ncount != 2) continue;
if (nRes.find(211) != nRes.end() && nRes.find(-211) != nRes.end() && nRes[211] == 1
&& nRes[-211] == 1) {
_sigma[0]->fill(_sqs);
break;
}
else if (nRes.find(111) != nRes.end() && nRes[111] == 2) {
_sigma[1]->fill(_sqs);
break;
}
else if (nRes.find(321) != nRes.end() && nRes.find(-321) != nRes.end() && nRes[321] == 1
&& nRes[-321] == 1) {
_sigma[2]->fill(_sqs);
break;
}
}
// decays
DecayedParticles PSI = apply<DecayedParticles>(event, "PSI");
for (unsigned int ix = 0; ix < PSI.decaying().size(); ++ix) {
if (!PSI.modeMatches(ix, 3, mode)) continue;
const Particle& pip = PSI.decayProducts()[ix].at(211)[0];
const Particle& pim = PSI.decayProducts()[ix].at(-211)[0];
double mpipi = (pip.mom() + pim.mom()).mass();
_h->fill(mpipi);
}
}
/// Normalise histograms etc., after the run
void finalize() {
// sigma
scale(_sigma, crossSection() / sumOfWeights() / picobarn);
// decay
normalize(_h, 1.0, false);
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h;
BinnedHistoPtr<string> _sigma[3];
string _sqs = "";
int _pid;
const map<PdgId, unsigned int> mode = {{211, 1}, {-211, 1}, {443, 1}};
/// @}
};
RIVET_DECLARE_PLUGIN(CLEO_2006_I710864);
} ```