rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOC_2008_I769777

$q^2$ spectra in semi-leptonic $D$ decays
Experiment: CLEOC (CESR)
Inspire ID: 769777
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D77 (2008) 112005
Beams: * *
Beam energies: ANY
Run details:
  • any process producing charm mesons

Measurement of the $q^2$ spectra for semi-leptonic $D$ meson decays by CLEOC.

Source code: CLEOC_2008_I769777.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief D -> pi,K semi-leptonic q^2
  9  class CLEOC_2008_I769777 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2008_I769777);
 14
 15
 16    /// @name Analysis methods
 17    ///@{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21
 22      // Initialise and register projections
 23      declare(UnstableParticles(), "UFS");
 24      // histograms
 25      book(_h_q2_D0_pi,1,1,1);
 26      book(_h_q2_Dp_pi,1,1,2);
 27      book(_h_q2_D0_K ,1,1,3);
 28      book(_h_q2_Dp_K ,1,1,4);
 29      book(_nD0,"TMP/nD0");
 30      book(_nDp,"TMP/nDp");
 31    }
 32
 33    // Calculate the Q2 using mother and daugher meson
 34    double q2(const Particle& B, int mesonID) {
 35      FourMomentum q = B.mom() - filter_select(B.children(), Cuts::abspid==abs(mesonID))[0];
 36      return q*q;
 37    }
 38
 39    // Check for explicit decay into pdgids
 40    bool isSemileptonicDecay(const Particle& mother, vector<int> ids) {
 41      // Trivial check to ignore any other decays but the one in question modulo photons
 42      const Particles children = mother.children(Cuts::pid!=PID::PHOTON);
 43      if (children.size()!=ids.size()) return false;
 44      // Check for the explicit decay
 45      return all(ids, [&](int i){return count(children, hasPID(i))==1;});
 46    }
 47
 48    /// Perform the per-event analysis
 49    void analyze(const Event& event) {
 50      // Loop over D mesons 
 51      for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==PID::D0 or
 52									       Cuts::abspid==PID::DPLUS )) {
 53        if (p.abspid()==PID::D0) {
 54	  _nD0->fill();
 55	  if(isSemileptonicDecay(p, {PID::PIMINUS, PID::POSITRON, PID::NU_E}) ||
 56	     isSemileptonicDecay(p, {PID::PIPLUS , PID::ELECTRON, PID::NU_EBAR}) )
 57	    _h_q2_D0_pi->fill(q2(p, PID::PIMINUS));
 58	  else if(isSemileptonicDecay(p, {PID::KMINUS, PID::POSITRON, PID::NU_E}) ||
 59		  isSemileptonicDecay(p, {PID::KPLUS , PID::ELECTRON, PID::NU_EBAR}))
 60	    _h_q2_D0_K ->fill(q2(p, PID::KMINUS));
 61        }
 62	else if(p.abspid()==PID::DPLUS) {
 63	  _nDp->fill();
 64	  if(isSemileptonicDecay(p, {PID::PI0, PID::POSITRON, PID::NU_E})  ||
 65	     isSemileptonicDecay(p, {PID::PI0, PID::ELECTRON, PID::NU_EBAR}))
 66	    _h_q2_Dp_pi->fill(q2(p, PID::PI0));
 67	  else if(isSemileptonicDecay(p, {-311, PID::POSITRON, PID::NU_E}))
 68	    _h_q2_Dp_K ->fill(q2(p, -311));
 69	  else if(isSemileptonicDecay(p, { 311, PID::ELECTRON, PID::NU_EBAR}))
 70	    _h_q2_Dp_K ->fill(q2(p, 311));
 71	  else if(isSemileptonicDecay(p, {PID::K0S, PID::POSITRON, PID::NU_E}) ||
 72		  isSemileptonicDecay(p, {PID::K0S, PID::ELECTRON, PID::NU_EBAR}))
 73	    _h_q2_Dp_K ->fill(q2(p, PID::K0S));
 74	  else if(isSemileptonicDecay(p, {PID::K0L, PID::POSITRON, PID::NU_E}) ||
 75		  isSemileptonicDecay(p, {PID::K0L, PID::ELECTRON, PID::NU_EBAR}))
 76	    _h_q2_Dp_K ->fill(q2(p, PID::K0L));
 77	}
 78      }
 79    }
 80
 81
 82    /// Normalise histograms etc., after the run
 83    void finalize() {
 84      scale(_h_q2_D0_pi,100./ *_nD0);
 85      scale(_h_q2_D0_K ,100./ *_nD0);
 86      scale(_h_q2_Dp_pi,100./ *_nDp);
 87      scale(_h_q2_Dp_K ,100./ *_nDp);
 88    }
 89
 90    ///@}
 91
 92
 93    /// @name Histograms
 94    ///@{
 95    Histo1DPtr _h_q2_D0_pi, _h_q2_D0_K, _h_q2_Dp_pi, _h_q2_Dp_K;
 96    CounterPtr _nD0,_nDp;
 97    ///@}
 98
 99
100  };
101
102
103  RIVET_DECLARE_PLUGIN(CLEOC_2008_I769777);
104
105}