Rivet analyses referenceBESIII_2018_I1693610Mass distributions in the decays D0→K−π+η′, D0→K0Sπ0η′, D+→K0Sπ+η′Experiment: BESIII (BEPC) Inspire ID: 1693610 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the mass distributions in the decays D0→K−π+η′, D0→K0Sπ0η′, D+→K0Sπ+η′ by BES. The data were read from the plots in the paper and therefore for some points the error bars are the size of the point. It is also not clear that any resolution effects have been unfolded. Source code: BESIII_2018_I1693610.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 -> eta' decays
10 class BESIII_2018_I1693610 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2018_I1693610);
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==411||
24 Cuts::abspid==421);
25 declare(ufs, "UFS");
26 DecayedParticles DD(ufs);
27 DD.addStable(PID::PI0);
28 DD.addStable(PID::K0S);
29 DD.addStable(PID::ETA);
30 DD.addStable(PID::ETAPRIME);
31 declare(DD, "DD");
32 // histograms
33 for(unsigned int ix=0;ix<9;++ix)
34 book(_h[ix],1,1,1+ix);
35 for(unsigned int ix=0;ix<3;++ix)
36 book(_dalitz[ix],"dalitz_"+toString(ix+1),50,0.4,0.9,50,1.1,1.9);
37 }
38
39
40 /// Perform the per-event analysis
41 void analyze(const Event& event) {
42 // define the decay modes
43 static const map<PdgId,unsigned int> & mode1 = { {-321,1},{ 211,1}, { 331,1}};
44 static const map<PdgId,unsigned int> & mode1CC = { { 321,1},{-211,1}, { 331,1}};
45 static const map<PdgId,unsigned int> & mode2 = { { 310,1},{ 111,1}, { 331,1}};
46 static const map<PdgId,unsigned int> & mode3 = { { 310,1},{ 211,1}, { 331,1}};
47 static const map<PdgId,unsigned int> & mode3CC = { { 310,1},{-211,1}, { 331,1}};
48 DecayedParticles DD = apply<DecayedParticles>(event, "DD");
49 // loop over particles
50 for(unsigned int ix=0;ix<DD.decaying().size();++ix) {
51 // D0 -> K- pi+ omega
52 if( (DD.decaying()[ix].pid()== 421 && DD.modeMatches(ix,3,mode1)) ||
53 (DD.decaying()[ix].pid()==-421 && DD.modeMatches(ix,3,mode1CC))) {
54 int sign = DD.decaying()[ix].pid()/421;
55 const Particles & pip = DD.decayProducts()[ix].at( sign*211);
56 const Particles & Km = DD.decayProducts()[ix].at(-sign*321);
57 const Particles & etaP = DD.decayProducts()[ix].at(331);
58 double mKpi = (pip[0].momentum()+Km[0].momentum()).mass2();
59 double mpietaP = (pip[0].momentum()+etaP[0].momentum()).mass2();
60 _dalitz[0]->fill(mKpi,mpietaP);
61 _h[0]->fill(sqrt(mKpi));
62 _h[1]->fill((Km[0].momentum()+etaP[0].momentum()).mass());
63 _h[2]->fill(sqrt(mpietaP));
64 }
65 // D0 -> KS0 pi0 etaP
66 else if (DD.decaying()[ix].abspid()==421 && DD.modeMatches(ix,3,mode2)) {
67 const Particles & pi0 = DD.decayProducts()[ix].at(111);
68 const Particles & KS0 = DD.decayProducts()[ix].at(310);
69 const Particles & etaP = DD.decayProducts()[ix].at(331);
70 double mKpi = (pi0[0].momentum()+KS0[0].momentum()).mass2();
71 double mpietaP = (pi0[0].momentum()+etaP[0].momentum()).mass2();
72 _dalitz[1]->fill(mKpi,mpietaP);
73 _h[3]->fill(sqrt(mKpi));
74 _h[4]->fill((KS0[0].momentum()+etaP[0].momentum()).mass());
75 _h[5]->fill(sqrt(mpietaP));
76 }
77 // D0 -> K- pi+ etaP
78 else if( (DD.decaying()[ix].pid()== 411 && DD.modeMatches(ix,3,mode3)) ||
79 (DD.decaying()[ix].pid()==-411 && DD.modeMatches(ix,3,mode3CC))) {
80 int sign = DD.decaying()[ix].pid()/411;
81 const Particles & pip = DD.decayProducts()[ix].at( sign*211);
82 const Particles & KS0 = DD.decayProducts()[ix].at(310);
83 const Particles & etaP = DD.decayProducts()[ix].at(331);
84 double mKpi = (pip[0].momentum()+KS0[0].momentum()).mass2();
85 double mpietaP = (pip[0].momentum()+etaP[0].momentum()).mass2();
86 _dalitz[2]->fill(mKpi,mpietaP);
87 _h[6]->fill(sqrt(mKpi));
88 _h[7]->fill((KS0[0].momentum()+etaP[0].momentum()).mass());
89 _h[8]->fill(sqrt(mpietaP));
90 }
91 }
92 }
93
94
95 /// Normalise histograms etc., after the run
96 void finalize() {
97 for(unsigned int ix=0;ix<9;++ix)
98 normalize(_h[ix],1.,false);
99 for(unsigned int ix=0;ix<3;++ix)
100 normalize(_dalitz[ix]);
101 }
102
103 /// @}
104
105
106 /// @name Histograms
107 /// @{
108 Histo1DPtr _h[9];
109 Histo2DPtr _dalitz[3];
110 /// @}
111
112
113 };
114
115
116 RIVET_DECLARE_PLUGIN(BESIII_2018_I1693610);
117
118}
|