Rivet analyses

Kinematic distributions in the decay D+ → Kπ+π+

Experiment: CLEOC (CESR)

Inspire ID: 780363

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys. Rev. D78:052001, 2008

Beams: * *

Beam energies: ANY

Run details: - Any process producing D+/-

Kinematic distributions in the decay D+ → Kπ+π+. The first part of the efficiency function given in the paper is applied, although the second is not as it makes the agreement between the modesl show in the paper much worse.

Source code:CLEOC_2008_I780363.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Projections/DecayedParticles.hh"

namespace Rivet {


  /// @brief D+ -> K- pi+ pi+
  class CLEOC_2008_I780363 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2008_I780363);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      // Initialise and register projections
      UnstableParticles ufs = UnstableParticles(Cuts::abspid==411);
      declare(ufs, "UFS");
      DecayedParticles DP(ufs);
      DP.addStable(PID::PI0);
      DP.addStable(PID::K0S);
      DP.addStable(PID::ETA);
      DP.addStable(PID::ETAPRIME);
      declare(DP, "DP");
      // histos
      book(_h_Kpiall,1,1,1);
      book(_h_pipi  ,1,2,1);

    }
    
    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // parameters from the efficiency function, table 1 in paper
      static const double E1   = -0.0153;
      static const double E2   = -0.030;
      static const double E3   =  0.162;
      static const double Exy  = -0.053;
      static const double Exyn =  0.673;
      // static const double Eth[3] = {4.25,4.25,2.907};


      static const map<PdgId,unsigned int> & mode   = { { 211,2},{-321,1}};
      static const map<PdgId,unsigned int> & modeCC = { {-211,2},{ 321,1}};
      DecayedParticles DP = apply<DecayedParticles>(event, "DP");
      // loop over particles
      for(unsigned int ix=0;ix<DP.decaying().size();++ix) {
    int sign = 1;
    if (DP.decaying()[ix].pid()>0 && DP.modeMatches(ix,3,mode)) {
      sign=1;
    }
    else if  (DP.decaying()[ix].pid()<0 && DP.modeMatches(ix,3,modeCC)) {
      sign=-1;
    }
    else
      continue;
    const Particle  & Km = DP.decayProducts()[ix].at(-sign*321)[0];
    const Particles & pip= DP.decayProducts()[ix].at( sign*211);
    // kinematic variables
    double x[3]  = {(Km    .momentum() +pip[0].momentum()).mass2(),
            (Km    .momentum() +pip[1].momentum()).mass2(),
            (pip[0].momentum()+pip[1].momentum()).mass2()};
    if(x[1]<x[0]) swap(x[0],x[1]);
    // calculate the efficiency, eqns 6,7 from paper
    // double xmax[3] = {sqr(meson.mass()-pip[0].mass()),
    //          sqr(meson.mass()-pip[0].mass()),
    //          sqr(meson.mass()-Km  .mass())};
    double xh = x[0]-1.5,yh=x[1]-1.5;
    double eff = (1.+E1*(xh+yh)+E2*(sqr(xh)+sqr(yh))+E3*(pow(xh,3)+pow(yh,3))
              +Exy*xh*yh+Exyn*xh*yh*(xh+yh));
    // double T=1.;
    // for(unsigned int ix=2;ix<3;++ix) {
    //   double arg = Eth[ix]*abs(x[ix]-xmax[ix]);
    //   if(arg<0.5*M_PI) T *=sin(arg);
    // }
    // eff *=T;
    // fill plots
    _h_Kpiall->fill( x[0],eff);
    _h_Kpiall->fill( x[1],eff);
    _h_pipi  ->fill( x[2],eff);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      normalize(_h_Kpiall);
      normalize(_h_pipi  );
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h_Kpiall, _h_pipi;
    /// @}

  };


  RIVET_DECLARE_PLUGIN(CLEOC_2008_I780363);

}