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);

} ```