Rivet analyses
Cross sections for e+e− → J/ψ + π+π−, π0π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− → J/ψ + π+π−, π0π0 or K+K− at $\sqrt{s}=4.015$, 4.160 or 4.260 GeV to study the properties of ψ(4040) , ψ(4160) and Y(4260) (now ψ(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) → J/ψπ+π− decays. There is no consensus as to the nature of the ψ(4230) 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:CLEO_2006_I710864.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Projections/DecayedParticles.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);
}