rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2014_I1287631

$e^+e^-$ mass distribution in $J/\psi\to e^+e^-$ $+\eta^\prime,$ $\eta$ or $\pi^0$
Experiment: BESIII (BEPC)
Inspire ID: 1287631
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 89 (2014) 9, 092008
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing J/psi

$e^+e^-$ mass distribution in $J/\psi\to e^+e^-$ $+\eta^\prime,$ $\eta$ or $\pi^0$. Data read from plots in paper.Mass distributions are not efficiency corrected.

Source code: BESIII_2014_I1287631.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4#include "Rivet/Projections/DecayedParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief J/psi -> eta', eta, pi0 e+e-
 10  class BESIII_2014_I1287631 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2014_I1287631);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      UnstableParticles ufs = UnstableParticles(Cuts::abspid==PID::JPSI);
 23      declare(ufs, "UFS");
 24      DecayedParticles psi(ufs);
 25      psi.addStable(PID::PI0);
 26      psi.addStable(PID::ETA);
 27      psi.addStable(PID::ETAPRIME);
 28      declare(psi, "PSI");
 29      for(unsigned int ix=0;ix<5;++ix)
 30	book(_h[ix], 1, 1, ix+1);
 31      book(_h[5],2,1,1);
 32      book(_c,"TMP/den");
 33    }
 34
 35
 36    /// Perform the per-event analysis
 37    void analyze(const Event& event) {
 38      // define the decay mode
 39      static const map<PdgId,unsigned int> & mode0   = { {PID::ETAPRIME,1},{ PID::PHOTON,1} };
 40      static const map<PdgId,unsigned int> & mode1   = { {PID::ETAPRIME,1},{ 11,1}, { -11,1}};
 41      static const map<PdgId,unsigned int> & mode2   = { {PID::ETA     ,1},{ 11,1}, { -11,1}};
 42      static const map<PdgId,unsigned int> & mode3   = { {PID::PI0     ,1},{ 11,1}, { -11,1}};
 43      DecayedParticles psi = apply<DecayedParticles>(event, "PSI");
 44      // loop over particles
 45      for(unsigned int ix=0;ix<psi.decaying().size();++ix) {
 46	unsigned int imode=0;
 47	if(psi.modeMatches(ix,2,mode0)) {
 48	  _c->fill();
 49	  continue;
 50	}
 51	else if(psi.modeMatches(ix,3,mode1)) {
 52	  imode=1;
 53	}
 54	else if(psi.modeMatches(ix,3,mode2)) {
 55	  imode=2;
 56	}
 57	else if(psi.modeMatches(ix,3,mode3)) {
 58	  imode=3;
 59	}
 60	else
 61	  continue;
 62	// e+ e-
 63	const Particle & em = psi.decayProducts()[ix].at( 11)[0];
 64	const Particle & ep = psi.decayProducts()[ix].at(-11)[0];
 65	double q = (ep.momentum()+em.momentum()).mass();
 66	if(imode==1) {
 67	  _h[0]->fill(q);
 68	  _h[1]->fill(q);
 69	  double me = em.mass();
 70	  double beta = sqrt(1.-4.*sqr(me/q));
 71	  double mJpsi = psi.decaying()[ix].mass();
 72	  double mEta  = psi.decayProducts()[ix].at(331)[0].mass();
 73	  double p = sqrt(sqr(1.+sqr(q)/(sqr(mJpsi)-sqr(mEta)))-4.*sqr(mJpsi*q/(sqr(mJpsi)-sqr(mEta))));
 74	  double fact = beta*GeV/q*(1.+2.*sqr(me/q))*pow(p,3);
 75	  _h[5]->fill(q,1./fact);
 76	}
 77	else if(imode==2) {
 78	  _h[2]->fill(q);
 79	  _h[3]->fill(q);
 80	}
 81	else {
 82	  _h[4]->fill(q);
 83	}
 84      }
 85    }
 86
 87
 88    /// Normalise histograms etc., after the run
 89    void finalize() {
 90      for(unsigned int ix=0;ix<5;++ix)
 91	normalize(_h[ix],1.,false);
 92      static double alpha= 7.2973525664e-3;
 93      scale(_h[5], 1.5 *M_PI/alpha/ *_c);
 94    }
 95
 96    /// @}
 97
 98
 99    /// @name Histograms
100    /// @{
101    Histo1DPtr _h[6];
102    CounterPtr _c;
103    /// @}
104
105
106  };
107
108
109  RIVET_DECLARE_PLUGIN(BESIII_2014_I1287631);
110
111}