rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOC_2006_I728043

$\eta$, $\eta^\prime$ and $\phi$ rates and spectra in $D^0$, $D^+$ and $D_s^+$ decays
Experiment: CLEOC (CESR)
Inspire ID: 728043
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D74 (2006) 112005
Beams: e+ e-
Beam energies: (1.9, 1.9); (2.1, 2.1) GeV
Run details:
  • e+e- to hadrons via Psi(3770) for D0,D+ or at 4.17 GeV for D_s Beam energy must be specified as analysis option "ENERGY" when rivet-merge'ing samples.

Measurement of the inclusive branching ratios for $\eta$, $\eta^\prime$ and $\phi$ production in $D^0$, $D^+$ and $D_s^+$ decays. In addition the spectra for $\eta$ and $\phi$ production are also measured, in the CMS frame of the collision. N.B. The spetral information was really intended as part of the analysis to measure the inclusive branching ratios, not as a measurement, and therefore shoud be used with care. However there are few distrubtions available for D decays and therefore the spectra are still useful. Beam energy must be specified (in GeV) as analysis option "ENERGY" when rivet-merging samples.

Source code: CLEOC_2006_I728043.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief eta, eta' and phi in D0, D+, Ds decays
  9  class CLEOC_2006_I728043 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2006_I728043);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // projection
 22      declare(UnstableParticles(),"UFS");
 23      // histograms
 24      unsigned int imin(0), imax(3);
 25      if (isCompatibleWithSqrtS(3.77,1e-3)) imax=2;
 26      else if(isCompatibleWithSqrtS(4.17))	imin=2;
 27      else
 28        MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
 29
 30      for (unsigned int ix=imin; ix<imax; ++ix) {
 31        book(_n_D[ix], "TMP/n_D_"+std::to_string(ix));
 32        book(_br_eta     [ix],1,1,ix+1);
 33        book(_br_etaPrime[ix],2,1,ix+1);
 34        book(_br_phi     [ix],3,1,ix+1);
 35        book(_s_eta      [ix],4,1,ix+1);
 36        book(_s_phi      [ix],5,1,ix+1);
 37      }
 38    }
 39
 40    void fillHistos(const Particle & Dmeson, const LorentzTransform & boost) {
 41      Particles ssbar;
 42      unsigned int iMeson=0;
 43      if(Dmeson.abspid()==421)
 44        iMeson = 1;
 45      else if(Dmeson.abspid()==431)
 46        iMeson = 2;
 47      _n_D[iMeson]->fill();
 48      findDecayProducts(Dmeson,ssbar);
 49      for(const Particle & dec : ssbar) {
 50        FourMomentum p = boost.transform(dec.momentum());
 51        double mom=p.p3().mod();
 52        if(dec.pid()==221) {
 53          _br_eta[iMeson]->fill(0.5);
 54          _s_eta[iMeson]->fill(mom);
 55        }
 56        else if(dec.pid()==331) {
 57          _br_etaPrime[iMeson]->fill(0.5);
 58        }
 59        else {
 60          _br_phi[iMeson]->fill(0.5);
 61          _s_phi[iMeson] ->fill(mom);
 62        }
 63      }
 64    }
 65
 66    void findDecayProducts(const Particle & mother, Particles & ssbar) {
 67      for(const Particle & p : mother.children()) {
 68        int id = p.pid();
 69      	if (id==221 || id==331 || id==333) {
 70          ssbar.push_back(p);
 71          findDecayProducts(p,ssbar);
 72        }
 73        else if ( !p.children().empty() ) {
 74          findDecayProducts(p,ssbar);
 75        }
 76      }
 77    }
 78
 79    /// Perform the per-event analysis
 80    void analyze(const Event& event) {
 81      // find psi(3770)
 82      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 83      Particles psi = ufs.particles(Cuts::pid==30443);
 84      // D_s
 85      if(psi.empty()) {
 86        LorentzTransform boost;
 87        for(const Particle & Dmeson : apply<UnstableParticles>("UFS",event).particles(Cuts::abspid==431)) {
 88          fillHistos(Dmeson,boost);
 89        }
 90      }
 91      // D0 D+
 92      else {
 93        for(const Particle& p : psi) {
 94          // boost to rest frame
 95          LorentzTransform boost;
 96          if (p.p3().mod() > 1*MeV)
 97            boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
 98          // loop over D0 and D+ children
 99          for(const Particle & Dmeson : p.children()) {
100            if(Dmeson.abspid()!=411 && Dmeson.abspid()!=421) continue;
101            fillHistos(Dmeson,boost);
102          }
103        }
104      }
105    }
106
107
108    /// Normalise histograms etc., after the run
109    void finalize() {
110      unsigned int imin(0),imax(3);
111      if(isCompatibleWithSqrtS(3.77,1e-3))	imax=2;
112      else if(isCompatibleWithSqrtS(4.17)) imin=2;
113      else
114        MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
115      for(unsigned int ix=imin;ix<imax;++ix) {
116        if(_n_D[ix]->effNumEntries()<=0.) continue;
117      	scale(_br_eta     [ix], 100./ *_n_D[ix]);
118      	scale(_br_etaPrime[ix], 100./ *_n_D[ix]);
119      	scale(_br_phi     [ix], 100./ *_n_D[ix]);
120      	scale(_s_eta      [ix], 100./ *_n_D[ix]);
121      	scale(_s_phi      [ix], 100./ *_n_D[ix]);
122      }
123    }
124
125    /// @}
126
127
128    /// @name Histograms
129    /// @{
130    CounterPtr _n_D[3];
131    Histo1DPtr _br_eta[3],_br_etaPrime[3],_br_phi[3];
132    Histo1DPtr _s_eta[3], _s_phi[3];
133    /// @}
134
135
136  };
137
138
139  RIVET_DECLARE_PLUGIN(CLEOC_2006_I728043);
140
141}