Rivet analyses referenceLHCB_2019_I1720423Dalitz plot analysis of $D^+\to K^+K^+K^-$Experiment: LHCB (LHC) Inspire ID: 1720423 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the mass distributions in the decay $D^+\to K^+K^+K^-$. The data were read extracted from the plots in the paper and the backgrounds subtracted. 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: LHCB_2019_I1720423.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D+ -> K+K+K-
9 class LHCB_2019_I1720423 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2019_I1720423);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 declare(UnstableParticles(), "UFS");
22 book(_h_KpKm[0],1,1,1);
23 book(_h_KpKp ,1,1,2);
24 book(_h_KpKm[1],1,1,3);
25 book(_h_KpKm[2],1,1,4);
26 book(_dalitz, "dalitz",50,0.9,1.8,50,1.1,1.9);
27 }
28
29 void findDecayProducts(const Particle & mother, unsigned int & nstable,
30 Particles & Kp , Particles & Km) {
31 for(const Particle & p : mother.children()) {
32 int id = p.pid();
33 if ( id == PID::PIPLUS || id == PID::PIMINUS ||
34 id == PID::K0S || id == PID::K0L ||
35 id == PID::PI0 ) {
36 ++nstable;
37 }
38 else if (id == PID::KPLUS) {
39 Kp.push_back(p);
40 ++nstable;
41 }
42 else if (id == PID::KMINUS) {
43 Km.push_back(p);
44 ++nstable;
45 }
46 else if ( !p.children().empty() ) {
47 findDecayProducts(p, nstable, Kp, Km);
48 }
49 else
50 ++nstable;
51 }
52 }
53
54
55 /// Perform the per-event analysis
56 void analyze(const Event& event) {
57 for(const Particle& meson : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid== 411 )) {
58 unsigned int nstable(0);
59 Particles Kp, Km;
60 findDecayProducts(meson, nstable, Kp, Km);
61 if(nstable !=3) continue;
62 if(meson.pid()<0) {
63 swap(Km,Kp);
64 }
65 if (Km.size()==1&&Kp.size()==2) {
66 double m1 = (Km[0].momentum()+Kp[0].momentum()).mass2();
67 double m2 = (Km[0].momentum()+Kp[1].momentum()).mass2();
68 double m3 = (Kp[0].momentum()+Kp[1].momentum()).mass2();
69 if(m1>m2) swap(m1,m2);
70 _dalitz->fill(m1,m2);
71 _h_KpKm[0]->fill(m1);
72 _h_KpKm[0]->fill(m2);
73 _h_KpKm[2]->fill(m1);
74 _h_KpKm[1]->fill(m2);
75 _h_KpKp->fill(m3);
76 }
77 }
78 }
79
80
81 /// Normalise histograms etc., after the run
82 void finalize() {
83 for(unsigned int ix=0;ix<3;++ix)
84 normalize(_h_KpKm[ix]);
85 normalize(_h_KpKp);
86 normalize(_dalitz);
87 }
88
89 /// @}
90
91
92 /// @name Histograms
93 /// @{
94 Histo1DPtr _h_KpKm[3],_h_KpKp;
95 Histo2DPtr _dalitz;
96 /// @}
97
98
99 };
100
101
102 RIVET_DECLARE_PLUGIN(LHCB_2019_I1720423);
103
104}
|