rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2021_I1909391

Dalitz plot analysis of $D_s^+\to \pi^+\pi^+\pi^-$
Experiment: BESIII (BEPC)
Inspire ID: 1909391
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References: Beams: * *
Beam energies: ANY
Run details:
  • Any process producing D_s+ -> pi+ pi+ pi-

Measurement of the mass distributions in the decay $D_s^+\to \pi^+\pi^+\pi^-$. The data were read from the plots in the paper and in many case the size of the point was greater than the errors. Resolution/acceptance effects have been not unfolded, although the efficiency function given in the paper is applied. Given the agreement with the model in the paper this analysis should only be used for qualitative studies.

Source code: BESIII_2021_I1909391.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Projections/DecayedParticles.hh"

namespace Rivet {


  /// @brief  D_s+ -> pi+pi+pi-
  class BESIII_2021_I1909391 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2021_I1909391);


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

    /// Book histograms and initialise projections before the run
    void init() {
      // Initialise and register projections
      UnstableParticles ufs = UnstableParticles(Cuts::abspid==431);
      declare(ufs, "UFS");
      DecayedParticles DS(ufs);
      DS.addStable(PID::PI0);
      DS.addStable(PID::K0S);
      declare(DS,"DS");
      // histos
      book(_h_pippim[0],1,1,1);
      book(_h_pippip   ,1,1,2);
      book(_h_pippim[1],1,1,3);
      book(_h_pippim[2],1,1,4);
      book(_dalitz, "dalitz",50,0.,3.5,50,0.0,3.5);
    }

    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // parameters from the efficiency function, table 1 in paper
      static const double E1  =  0.064;
      static const double E2  = -0.066;
      static const double E3  = -0.006;
      static const double E11 = -0.158;
      static const double E12 =  0.090;
      static const double Eth[3] = {1.516,1.516,1.563};
      static const map<PdgId,unsigned int> & mode   = { { 211,2}, {-211,1}};
      static const map<PdgId,unsigned int> & modeCC = { {-211,2}, { 211,1}};
      DecayedParticles DS = apply<DecayedParticles>(event, "DS");
      // loop over particles
      for(unsigned int ix=0;ix<DS.decaying().size();++ix) {
	int sign = 1;
	if (DS.decaying()[ix].pid()>0 && DS.modeMatches(ix,3,mode)) {
	  sign=1;
	}
	else if  (DS.decaying()[ix].pid()<0 && DS.modeMatches(ix,3,modeCC)) {
	  sign=-1;
	}
	else
	  continue;
	const Particles & pip = DS.decayProducts()[ix].at( sign*211);
	const Particle  & pim = DS.decayProducts()[ix].at(-sign*211)[0];
	// kinematic variables
	double x[3] = {(pim.momentum()+pip[0].momentum()).mass2(),
		       (pim.momentum()+pip[1].momentum()).mass2(),
		       (pip[0].momentum()+pip[1].momentum()).mass2()};
	if(x[0]>x[1]) swap(x[0],x[1]);
	_dalitz->fill(x[0],x[1]);
	_dalitz->fill(x[1],x[0]);
	// calculate the efficiency
	double xh = x[0]-1.,yh=x[1]-1.;
	double eff = (1.+E1*(xh+yh)+E2*(sqr(xh)+sqr(yh))+E3*(pow(xh,3)+pow(yh,3))
		      +E11*xh*yh+E12*xh*yh*(xh+yh));
	double xmax = sqr(DS.decaying()[ix].mass()-pip[0].mass());
	double T=1.;
	for(unsigned int ix=0;ix<3;++ix) {
	  double arg = Eth[ix]*abs(x[ix]-xmax);
	  if(arg<0.5*M_PI) T *=sin(arg);
	}
	eff *=T;
	// fill plots
	_h_pippim[0]->fill(x[0],eff);
	_h_pippim[0]->fill(x[1],eff);
	_h_pippim[1]->fill(x[0],eff);
	_h_pippim[2]->fill(x[1],eff);
	_h_pippip   ->fill(x[2],eff);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      for(unsigned int ix=0;ix<3;++ix)
	normalize(_h_pippim[ix]);
      normalize(_h_pippip);
      normalize(_dalitz);
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h_pippim[3],_h_pippip;
    Histo2DPtr _dalitz;
    /// @}


  };


  RIVET_DECLARE_PLUGIN(BESIII_2021_I1909391);

}