Rivet analyses referenceCLEOC_2008_I780363Kinematic distributions in the decay D+→K−π+π+Experiment: CLEOC (CESR) Inspire ID: 780363 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Kinematic distributions in the decay D+→K−π+π+. The first part of the efficiency function given in the paper is applied, although the second is not as it makes the agreement between the modesl show in the paper much worse. Source code: CLEOC_2008_I780363.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+ -> K- pi+ pi+
10 class CLEOC_2008_I780363 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2008_I780363);
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 declare(ufs, "UFS");
25 DecayedParticles DP(ufs);
26 DP.addStable(PID::PI0);
27 DP.addStable(PID::K0S);
28 DP.addStable(PID::ETA);
29 DP.addStable(PID::ETAPRIME);
30 declare(DP, "DP");
31 // histos
32 book(_h_Kpiall,1,1,1);
33 book(_h_pipi ,1,2,1);
34
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.0153;
41 static const double E2 = -0.030;
42 static const double E3 = 0.162;
43 static const double Exy = -0.053;
44 static const double Exyn = 0.673;
45 // static const double Eth[3] = {4.25,4.25,2.907};
46
47
48 static const map<PdgId,unsigned int> & mode = { { 211,2},{-321,1}};
49 static const map<PdgId,unsigned int> & modeCC = { {-211,2},{ 321,1}};
50 DecayedParticles DP = apply<DecayedParticles>(event, "DP");
51 // loop over particles
52 for(unsigned int ix=0;ix<DP.decaying().size();++ix) {
53 int sign = 1;
54 if (DP.decaying()[ix].pid()>0 && DP.modeMatches(ix,3,mode)) {
55 sign=1;
56 }
57 else if (DP.decaying()[ix].pid()<0 && DP.modeMatches(ix,3,modeCC)) {
58 sign=-1;
59 }
60 else
61 continue;
62 const Particle & Km = DP.decayProducts()[ix].at(-sign*321)[0];
63 const Particles & pip= DP.decayProducts()[ix].at( sign*211);
64 // kinematic variables
65 double x[3] = {(Km .momentum() +pip[0].momentum()).mass2(),
66 (Km .momentum() +pip[1].momentum()).mass2(),
67 (pip[0].momentum()+pip[1].momentum()).mass2()};
68 if(x[1]<x[0]) swap(x[0],x[1]);
69 // calculate the efficiency, eqns 6,7 from paper
70 // double xmax[3] = {sqr(meson.mass()-pip[0].mass()),
71 // sqr(meson.mass()-pip[0].mass()),
72 // sqr(meson.mass()-Km .mass())};
73 double xh = x[0]-1.5,yh=x[1]-1.5;
74 double eff = (1.+E1*(xh+yh)+E2*(sqr(xh)+sqr(yh))+E3*(pow(xh,3)+pow(yh,3))
75 +Exy*xh*yh+Exyn*xh*yh*(xh+yh));
76 // double T=1.;
77 // for(unsigned int ix=2;ix<3;++ix) {
78 // double arg = Eth[ix]*abs(x[ix]-xmax[ix]);
79 // if(arg<0.5*M_PI) T *=sin(arg);
80 // }
81 // eff *=T;
82 // fill plots
83 _h_Kpiall->fill( x[0],eff);
84 _h_Kpiall->fill( x[1],eff);
85 _h_pipi ->fill( x[2],eff);
86 }
87 }
88
89
90 /// Normalise histograms etc., after the run
91 void finalize() {
92 normalize(_h_Kpiall);
93 normalize(_h_pipi );
94 }
95
96 /// @}
97
98
99 /// @name Histograms
100 /// @{
101 Histo1DPtr _h_Kpiall, _h_pipi;
102 /// @}
103
104 };
105
106
107 RIVET_DECLARE_PLUGIN(CLEOC_2008_I780363);
108
109}
|