Rivet analyses
Form factors for the decays χc(1, 2) → J/ψμ+μ−
Experiment: BESIII (BEPC)
Inspire ID: 1716256
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Phys.Rev.D 99 (2019) 5, 051101
Beams: * *
Beam energies: ANY
Run details: none listed
Measurement of the form factors and differential branching ratios for the decays χc(1, 2) → J/ψμ+μ− by the BESIII collaboration.
Source
code:BESIII_2019_I1716256.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DecayedParticles.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief chi_c -> J/psi mu+mu-
class BESIII_2019_I1716256 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2019_I1716256);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
UnstableParticles ufs = UnstableParticles(Cuts::pid == 20443 || Cuts::pid == 445);
declare(ufs, "UFS");
DecayedParticles chi(ufs);
chi.addStable(PID::JPSI);
declare(chi, "chi");
// Initialise and register projections
for (unsigned int ix = 0; ix < 2; ++ix) {
for (unsigned int iy = 0; iy < 2; ++iy) {
book(_h[ix][iy], 1 + ix, 1, 1 + iy);
book(_n[ix][iy], "TMP/n_" + toString(ix + 1) + "_" + toString(iy + 1));
}
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
static double alpha = 7.2973525664e-3;
static const map<PdgId, unsigned int>& mode1 = {{443, 1}, {22, 1}};
static const map<PdgId, unsigned int>& mode2 = {{443, 1}, {13, 1}, {-13, 1}};
DecayedParticles chi = apply<DecayedParticles>(event, "chi");
// loop over particles
for (unsigned int ix = 0; ix < chi.decaying().size(); ++ix) {
unsigned int iloc = chi.decaying()[ix].pid() == 20443 ? 0 : 1;
_n[iloc][0]->fill();
if (chi.modeMatches(ix, 2, mode1)) {
_n[iloc][1]->fill();
}
else if (chi.modeMatches(ix, 3, mode2)) {
const Particle& mum = chi.decayProducts()[ix].at(13)[0];
const Particle& mup = chi.decayProducts()[ix].at(-13)[0];
const Particle& Jpsi = chi.decayProducts()[ix].at(443)[0];
double q = (mum.momentum() + mup.momentum()).mass();
// br
_h[iloc][0]->fill(q);
double M2 = chi.decaying()[ix].mass2();
double m = Jpsi.mass();
// factor for form factor (eqn 2 arXiv:1709.02444)
double fact = alpha / 3. / M_PI / sqr(q) * sqrt((1. - sqr(m + q) / M2) * (1. - sqr(m - q) / M2))
/ (1. - sqr(m) / M2) * (1. + 2. * sqr(mum.mass() / q)) * sqrt(1. - 4. * sqr(mum.mass() / q));
// additional factor of 2q from dq^2 = 2q dq
_h[iloc][1]->fill(q, 1. / fact / 2 / q);
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
for (unsigned int ix = 0; ix < 2; ++ix) {
for (unsigned int iy = 0; iy < 2; ++iy) {
scale(_h[ix][iy], 1. / *_n[ix][iy]);
}
scale(_h[ix][0], 1e5);
}
}
/// @}
/// @name Histograms
///@{
Histo1DPtr _h[2][2];
CounterPtr _n[2][2];
///@}
};
RIVET_DECLARE_PLUGIN(BESIII_2019_I1716256);
}