rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2022_I2618227

$D_s^+\to\pi^+\pi^+\pi^-+X$ decays
Experiment: BESIII (BEPC)
Inspire ID: 2618227
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: (2.1, 2.1) GeV
Run details:
  • Needs e+e- events at 4.178 due cuts

Measurement of mass and momentum distributions in $D_s^+\to\pi^+\pi^+\pi^-+X$ decays. The mass distribution was read from table VII in the paper and is corrected while the momentum distributions were extracted from the figures and are background subtracted but not corrected.

Source code: BESIII_2022_I2618227.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief D_s -> pi+ pi+ pi- +X
 9  class BESIII_2022_I2618227 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2022_I2618227);
14
15
16    /// @name Analysis methods
17    /// @{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21      // projections
22      declare(UnstableParticles(Cuts::abspid==431),"UFS");
23      // histos
24      book(_h_br,1,1,1);
25      book(_h_mass,2,1,1);
26      for(unsigned int ix=0;ix<3;++ix)
27	book(_h_mom[ix],3,1,1+ix);
28      book(_c,"TMP/nDs");
29    }
30    
31    void findChildren(const Particle & p, Particles & piPlus, Particles & piMinus) {
32      for( const Particle &child : p.children()) {
33	if(child.pid()==PID::PIPLUS) {
34	  piPlus.push_back(child);
35	}
36	else if(child.pid()==PID::PIMINUS) {
37	  piMinus.push_back(child);
38	}
39	else if(child.pid()==PID::K0S || child.pid()==PID::K0L)
40	  continue;
41	else if(!child.children().empty())
42	  findChildren(child,piPlus,piMinus);
43      }
44    }
45
46
47    /// Perform the per-event analysis
48    void analyze(const Event& event) {
49      for (const Particle& p :  apply<FinalState>(event, "UFS").particles()) {
50	_c->fill();
51	Particles piPlus,piMinus;
52	findChildren(p,piPlus,piMinus);
53	if(p.pid()<0) swap(piPlus,piMinus);
54	if(piPlus.size()>=2 && !piMinus.empty()) {
55	  _h_br->fill(.5);
56	  sortBy(piMinus,cmpMomByP);
57	  sortBy(piPlus ,cmpMomByP);
58	  _h_mom[0]->fill(piMinus[0].p3().mod());
59	  for(unsigned int ix=0;ix<2;++ix)
60	    _h_mom[1+ix]->fill(piPlus[ix].p3().mod());
61	  double mass = (piMinus[0].momentum()+piPlus[0].momentum()+piPlus[1].momentum()).mass();
62	  _h_mass->fill(mass);
63	}
64      }
65    }
66
67
68    /// Normalise histograms etc., after the run
69    void finalize() {
70      scale(_h_br,   100./ *_c);
71      scale(_h_mass, 100./ *_c);
72      for(unsigned int ix=0;ix<3;++ix)
73	normalize(_h_mom[ix],1.,false);
74    }
75
76    /// @}
77
78
79    /// @name Histograms
80    /// @{
81    Histo1DPtr _h_br,_h_mass,_h_mom[3];
82    CounterPtr _c;
83    /// @}
84
85
86  };
87
88
89  RIVET_DECLARE_PLUGIN(BESIII_2022_I2618227);
90
91}