Rivet analyses referenceBESIII_2021_I1909391Dalitz plot analysis of $D_s^+\to \pi^+\pi^+\pi^-$Experiment: BESIII (BEPC) Inspire ID: 1909391 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
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// -*- 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 D_s+ -> pi+pi+pi-
10 class BESIII_2021_I1909391 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2021_I1909391);
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==431);
24 declare(ufs, "UFS");
25 DecayedParticles DS(ufs);
26 DS.addStable(PID::PI0);
27 DS.addStable(PID::K0S);
28 declare(DS,"DS");
29 // histos
30 book(_h_pippim[0],1,1,1);
31 book(_h_pippip ,1,1,2);
32 book(_h_pippim[1],1,1,3);
33 book(_h_pippim[2],1,1,4);
34 book(_dalitz, "dalitz",50,0.,3.5,50,0.0,3.5);
35 }
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 // parameters from the efficiency function, table 1 in paper
40 static const double E1 = 0.064;
41 static const double E2 = -0.066;
42 static const double E3 = -0.006;
43 static const double E11 = -0.158;
44 static const double E12 = 0.090;
45 static const double Eth[3] = {1.516,1.516,1.563};
46 static const map<PdgId,unsigned int> & mode = { { 211,2}, {-211,1}};
47 static const map<PdgId,unsigned int> & modeCC = { {-211,2}, { 211,1}};
48 DecayedParticles DS = apply<DecayedParticles>(event, "DS");
49 // loop over particles
50 for(unsigned int ix=0;ix<DS.decaying().size();++ix) {
51 int sign = 1;
52 if (DS.decaying()[ix].pid()>0 && DS.modeMatches(ix,3,mode)) {
53 sign=1;
54 }
55 else if (DS.decaying()[ix].pid()<0 && DS.modeMatches(ix,3,modeCC)) {
56 sign=-1;
57 }
58 else
59 continue;
60 const Particles & pip = DS.decayProducts()[ix].at( sign*211);
61 const Particle & pim = DS.decayProducts()[ix].at(-sign*211)[0];
62 // kinematic variables
63 double x[3] = {(pim.momentum()+pip[0].momentum()).mass2(),
64 (pim.momentum()+pip[1].momentum()).mass2(),
65 (pip[0].momentum()+pip[1].momentum()).mass2()};
66 if(x[0]>x[1]) swap(x[0],x[1]);
67 _dalitz->fill(x[0],x[1]);
68 _dalitz->fill(x[1],x[0]);
69 // calculate the efficiency
70 double xh = x[0]-1.,yh=x[1]-1.;
71 double eff = (1.+E1*(xh+yh)+E2*(sqr(xh)+sqr(yh))+E3*(pow(xh,3)+pow(yh,3))
72 +E11*xh*yh+E12*xh*yh*(xh+yh));
73 double xmax = sqr(DS.decaying()[ix].mass()-pip[0].mass());
74 double T=1.;
75 for(unsigned int ix=0;ix<3;++ix) {
76 double arg = Eth[ix]*abs(x[ix]-xmax);
77 if(arg<0.5*M_PI) T *=sin(arg);
78 }
79 eff *=T;
80 // fill plots
81 _h_pippim[0]->fill(x[0],eff);
82 _h_pippim[0]->fill(x[1],eff);
83 _h_pippim[1]->fill(x[0],eff);
84 _h_pippim[2]->fill(x[1],eff);
85 _h_pippip ->fill(x[2],eff);
86 }
87 }
88
89
90 /// Normalise histograms etc., after the run
91 void finalize() {
92 for(unsigned int ix=0;ix<3;++ix)
93 normalize(_h_pippim[ix]);
94 normalize(_h_pippip);
95 normalize(_dalitz);
96 }
97
98 /// @}
99
100
101 /// @name Histograms
102 /// @{
103 Histo1DPtr _h_pippim[3],_h_pippip;
104 Histo2DPtr _dalitz;
105 /// @}
106
107
108 };
109
110
111 RIVET_DECLARE_PLUGIN(BESIII_2021_I1909391);
112
113}
|