Rivet analyses referenceBESIII_2021_I1929365Dalitz plot analysis of $D_s^+\to \pi^+\pi^0\pi^0$Experiment: BESIII (BEPC) Inspire ID: 1929365 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY
Measurement of the mass distributions in the decay $D_s^+\to \pi^+\pi^0\pi^0$. The data were read from the plots in the paper. Resolution/acceptance effects have been not unfolded and given the agreement with the model in the paper this analysis should only be used for qualitative studies. Source code: BESIII_2021_I1929365.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+ pi0 pi0
10 class BESIII_2021_I1929365 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2021_I1929365);
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_pi0pi0,1,1,1);
31 book(_h_pippi0,1,1,2);
32 book(_dalitz, "dalitz",50,0.,3.5,50,0.,3.5);
33 }
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 static const map<PdgId,unsigned int> & mode = { { 211,1},{ 111,2}};
38 static const map<PdgId,unsigned int> & modeCC = { {-211,1},{ 111,2}};
39 DecayedParticles DS = apply<DecayedParticles>(event, "DS");
40 // loop over particles
41 for(unsigned int ix=0;ix<DS.decaying().size();++ix) {
42 int sign = 1;
43 if (DS.decaying()[ix].pid()>0 && DS.modeMatches(ix,3,mode)) {
44 sign=1;
45 }
46 else if (DS.decaying()[ix].pid()<0 && DS.modeMatches(ix,3,modeCC)) {
47 sign=-1;
48 }
49 else
50 continue;
51 const Particles & pi0 = DS.decayProducts()[ix].at( 111);
52 const Particle & pip = DS.decayProducts()[ix].at( sign*211)[0];
53 double mp1 = (pip .momentum() +pi0[0].momentum()).mass2();
54 double mp2 = (pip .momentum() +pi0[1].momentum()).mass2();
55 double m0 = (pi0[0].momentum() +pi0[1].momentum()).mass();
56 _dalitz ->fill(mp1,mp2);
57 _dalitz ->fill(mp2,mp1);
58 // K_S0 veto
59 if(m0>0.458 && m0<0.520) continue;
60 _h_pippi0->fill(sqrt(mp1));
61 _h_pippi0->fill(sqrt(mp2));
62 _h_pi0pi0->fill(m0 );
63 }
64 }
65
66
67 /// Normalise histograms etc., after the run
68 void finalize() {
69 normalize(_h_pi0pi0);
70 normalize(_h_pippi0);
71 normalize(_dalitz );
72 }
73
74 /// @}
75
76
77 /// @name Histograms
78 /// @{
79 Histo1DPtr _h_pi0pi0,_h_pippi0;
80 Histo2DPtr _dalitz;
81 /// @}
82
83
84 };
85
86
87 RIVET_DECLARE_PLUGIN(BESIII_2021_I1929365);
88
89}
|