rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

LHCB_2016_I1394391

Dalitz plot analysis of $D^0\to K^0_SK^\pm\pi^\mp$
Experiment: LHCB (LHC)
Inspire ID: 1394391
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 93 (2016) 5, 052018
Beams: * *
Beam energies: ANY
    No run details listed

Measurement of Kinematic distributions in the decays $D^0\to K^0_SK^\pm\pi^\mp$. The data were extracted from the plots in the paper. Resolution/acceptance effects have been not unfolded but an efficiency function base on Fig 4 of the paper is applied. Given the agreement with the model in the paper this analysis should only be used for qualitative studies.

Source code: LHCB_2016_I1394391.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  D0 -> KS) K+/- pi-/+
 10  class LHCB_2016_I1394391 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2016_I1394391);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      UnstableParticles ufs = UnstableParticles(Cuts::abspid==421);
 24      declare(ufs, "UFS");
 25      DecayedParticles D0(ufs);
 26      D0.addStable(PID::PI0);
 27      D0.addStable(PID::K0S);
 28      D0.addStable(PID::ETA);
 29      D0.addStable(PID::ETAPRIME);
 30      declare(D0, "D0");
 31      // histograms
 32      book(_h_Kmpip,1,1,1);
 33      book(_h_K0pip,1,1,2);
 34      book(_h_K0Km ,1,1,3);
 35      book(_h_Kppim,2,1,1);
 36      book(_h_K0pim,2,1,2);
 37      book(_h_K0Kp ,2,1,3);
 38      book(_dalitz [0],"dalitz_1",50,0.3,2.0,50,0.3,2.);
 39      book(_dalitz [1],"dalitz_2",50,0.3,2.0,50,0.3,2.);
 40    }
 41
 42    double efficiency(const double & x, const double &y) {
 43      double X=x-2., Y=y-1.;
 44      static const double E0 = 5.8096, Ex = -3.645, Ey = -3.174, Ex2=  0.831,
 45	Exy = 2.131, Ey2 = 4.43, Ex3 = -0.427, Ex2y = 2.65, Exy2 = 1.50, Ey3 = -3.92;
 46      return E0 + Ex*X + Ey*Y + Ex2*sqr(X) + Ey2*sqr(Y) + Exy*X*Y +
 47	Ex3*pow(X,3) + Ex2y*sqr(X)*Y + Exy2*X*sqr(Y) + Ey3*pow(Y,3);
 48    }
 49
 50    /// Perform the per-event analysis
 51    void analyze(const Event& event) {
 52      static const map<PdgId,unsigned int> & mode   = { { 321,1},{-211,1}, { 310,1}};
 53      static const map<PdgId,unsigned int> & modeCC = { {-321,1},{ 211,1}, { 310,1}};
 54      DecayedParticles D0 = apply<DecayedParticles>(event, "D0");
 55      // loop over particles
 56      for(unsigned int ix=0;ix<D0.decaying().size();++ix) {
 57	if( !D0.modeMatches(ix,3,mode  ) &&
 58	    !D0.modeMatches(ix,3,modeCC) ) continue;
 59	const Particles & K0 = D0.decayProducts()[ix].at(310);
 60	int sign = D0.decaying()[ix].pid()/421;
 61	const Particles & pip= D0.decayProducts()[ix].find( sign*211) == D0.decayProducts()[ix].end() ?
 62	  Particles() : D0.decayProducts()[ix].at( sign*211);
 63	const Particles & pim= D0.decayProducts()[ix].find(-sign*211) == D0.decayProducts()[ix].end() ?
 64	  Particles() : D0.decayProducts()[ix].at(-sign*211);
 65	const Particles & Kp = D0.decayProducts()[ix].find( sign*321) == D0.decayProducts()[ix].end() ?
 66	  Particles() : D0.decayProducts()[ix].at( sign*321);
 67	const Particles & Km = D0.decayProducts()[ix].find(-sign*321) == D0.decayProducts()[ix].end() ?
 68	  Particles() : D0.decayProducts()[ix].at(-sign*321);
 69	// K0S K- pi+
 70	if( Km.size()==1 && pip.size()==1) {
 71	  double mK0pip = (K0[0].momentum()+pip[0].momentum() ).mass2();
 72	  double mKmpip = (Km[0].momentum()+pip[0].momentum() ).mass2();
 73	  double mKK    = (K0[0].momentum()+Km [0].momentum() ).mass2();
 74	  double eff = efficiency(mKK,mK0pip);
 75	  _h_K0Km ->fill(mKK   ,eff);
 76	  _h_K0pip->fill(mK0pip,eff);
 77	  _h_Kmpip->fill(mKmpip,eff);
 78	  _dalitz[0]->fill(mKmpip,mK0pip); 
 79	}
 80	// K0S K+ pi-
 81	else if( Kp.size()==1 && pim.size()==1) {
 82	  double mK0pim = (K0[0].momentum()+pim[0].momentum() ).mass2();
 83	  double mKppim = (Kp[0].momentum()+pim[0].momentum() ).mass2();
 84	  double mKK    = (K0[0].momentum()+Kp [0].momentum() ).mass2();
 85	  double eff = efficiency(mKK,mK0pim);
 86	  _h_K0Kp ->fill(mKK   ,eff);
 87	  _h_K0pim->fill(mK0pim,eff);
 88	  _h_Kppim->fill(mKppim,eff);
 89	  _dalitz[1]->fill(mKppim,mK0pim); 
 90	}
 91      }
 92    }
 93
 94
 95    /// Normalise histograms etc., after the runbook
 96    void finalize() {
 97      normalize(_h_Kmpip);
 98      normalize(_h_K0pip);
 99      normalize(_h_K0Km );
100      normalize(_h_Kppim);
101      normalize(_h_K0pim);
102      normalize(_h_K0Kp );
103      normalize(_dalitz [0]);
104      normalize(_dalitz [1]);
105    }
106
107    /// @}
108
109
110    /// @name Histograms
111    /// @{
112    Histo1DPtr _h_Kmpip, _h_K0pip, _h_K0Km;
113    Histo1DPtr _h_Kppim, _h_K0pim, _h_K0Kp;
114    Histo2DPtr _dalitz[2];
115    /// @}
116
117
118  };
119
120
121  RIVET_DECLARE_PLUGIN(LHCB_2016_I1394391);
122
123}