Rivet analyses referenceE691_1992_I342947Dalitz plot analysis of $D\to K\pi\pi$ decaysExperiment: E691 (Fermilab) Inspire ID: 342947 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the mass distributions in the decays $D^0\to K^-\pi^+\pi^0$, $D^0\to K^0_S\pi^+\pi^-$ and $D^+\to K^-\pi^+\pi^+$. The data were read from the plots in the paper. Resolution/acceptance effects have been not unfolded and no background subtracted therefore given the agreement with the model in the paper this analysis should only be used for qualitative studies. Source code: E691_1992_I342947.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/DecayedParticles.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief D -> K pi pi dalitz
10 class E691_1992_I342947 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(E691_1992_I342947);
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 or
24 Cuts::abspid==421);
25 declare(ufs, "UFS");
26 DecayedParticles DD(ufs);
27 DD.addStable(PID::PI0);
28 DD.addStable(PID::K0S);
29 declare(DD, "DD");
30 // histograms
31 book(_h_1_pipi ,1,1,1);
32 book(_h_1_Kmpip,1,1,2);
33 book(_dalitz1, "dalitz1",50,0.3,3.2,50,0.3,3.2);
34
35 book(_h_2_Kmpip,1,1,3);
36 book(_h_2_Kmpi0,1,1,4);
37 book(_h_2_pipi ,1,1,5);
38 book(_dalitz2, "dalitz2",50,0.3,3.2,50,0.3,3.2);
39
40 book(_h_3_K0pip,1,1,7);
41 book(_h_3_K0pim,1,1,6);
42 book(_h_3_pipi ,1,1,8);
43 book(_dalitz3, "dalitz3",50,0.3,3.2,50,0.3,3.2);
44 }
45
46 /// Perform the per-event analysis
47 void analyze(const Event& event) {
48 static const map<PdgId,unsigned int> & mode1 = { { 211,1}, {-321,1}, {111,1} };
49 static const map<PdgId,unsigned int> & mode1CC = { {-211,1}, { 321,1}, {111,1} };
50 static const map<PdgId,unsigned int> & mode2 = { { 211,1}, {-211,1}, {310,1} };
51 static const map<PdgId,unsigned int> & mode3 = { { 211,2}, {-321,1} };
52 static const map<PdgId,unsigned int> & mode3CC = { {-211,2}, { 321,1} };
53 // Loop over D+ mesons
54 DecayedParticles DD = apply<DecayedParticles>(event, "DD");
55 for(unsigned int ix=0;ix<DD.decaying().size();++ix) {
56 int sign = DD.decaying()[ix].pid()/DD.decaying()[ix].abspid();
57 if(DD.decaying()[ix].abspid()==421) {
58 if ( ( DD.decaying()[ix].pid()>0 && DD.modeMatches(ix,3,mode1 )) ||
59 ( DD.decaying()[ix].pid()<0 && DD.modeMatches(ix,3,mode1CC))) {
60 const Particle & pi0 = DD.decayProducts()[ix].at( 111)[0];
61 const Particle & pip = DD.decayProducts()[ix].at( sign*211)[0];
62 const Particle & Km = DD.decayProducts()[ix].at(-sign*321)[0];
63 double mneut = (Km.momentum()+pip.momentum()).mass2();
64 double mminus = (Km.momentum()+pi0.momentum()).mass2();
65 double mpipi = (pip.momentum()+pi0.momentum()).mass2();
66 _h_2_Kmpip->fill(mneut );
67 _h_2_pipi ->fill(mpipi );
68 _h_2_Kmpi0->fill(mminus);
69 _dalitz2 ->fill(mminus,mneut);
70 }
71 else if ( DD.modeMatches(ix,3,mode2 )) {
72 const Particle & K0 = DD.decayProducts()[ix].at( 310)[0];
73 const Particle & pip = DD.decayProducts()[ix].at( sign*211)[0];
74 const Particle & pim = DD.decayProducts()[ix].at(-sign*211)[0];
75 double mminus = (pim.momentum()+K0.momentum() ).mass2();
76 double mplus = (pip.momentum()+K0.momentum() ).mass2();
77 double mpipi = (pip.momentum()+pim.momentum()).mass2();
78 _h_3_K0pip->fill(mplus);
79 _h_3_K0pim->fill(mminus);
80 _h_3_pipi ->fill(mpipi);
81 _dalitz3 ->fill(mplus,mminus);
82 }
83 }
84 else if(DD.decaying()[ix].abspid()==411 &&
85 (DD.modeMatches(ix,3,mode3 ) ||
86 DD.modeMatches(ix,3,mode3CC))) {
87 const Particles & pip = DD.decayProducts()[ix].at( sign*211);
88 const Particle & Km = DD.decayProducts()[ix].at(-sign*321)[0];
89 double mplus = (Km.momentum() +pip[0].momentum()).mass2();
90 double mminus = (Km.momentum() +pip[1].momentum()).mass2();
91 double mpipi = (pip[0].momentum()+pip[1].momentum()).mass2();
92 _h_1_Kmpip->fill(mminus);
93 _h_1_Kmpip->fill(mplus );
94 _h_1_pipi ->fill( mpipi);
95 _dalitz1 ->fill(mminus,mplus);
96 _dalitz1 ->fill(mplus,mminus);
97 }
98 }
99 }
100
101
102 /// Normalise histograms etc., after the run
103 void finalize() {
104 normalize(_h_1_pipi );
105 normalize(_h_1_Kmpip);
106 normalize(_dalitz1 );
107
108 normalize(_h_2_Kmpip);
109 normalize(_h_2_pipi );
110 normalize(_h_2_Kmpi0);
111 normalize(_dalitz2 );
112
113 normalize(_h_3_K0pip);
114 normalize(_h_3_pipi );
115 normalize(_h_3_K0pim);
116 normalize(_dalitz3 );
117 }
118
119 /// @}
120
121
122 /// @name Histograms
123 /// @{
124 Histo1DPtr _h_1_Kmpip, _h_1_pipi;
125 Histo2DPtr _dalitz1;
126 Histo1DPtr _h_2_Kmpip, _h_2_pipi, _h_2_Kmpi0;
127 Histo2DPtr _dalitz2;
128 Histo1DPtr _h_3_K0pip, _h_3_pipi, _h_3_K0pim;
129 Histo2DPtr _dalitz3;
130 /// @}
131
132
133 };
134
135
136 RIVET_DECLARE_PLUGIN(E691_1992_I342947);
137
138}
|