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