Rivet analyses referenceCLEOC_2006_I728043$\eta$, $\eta^\prime$ and $\phi$ rates and spectra in $D^0$, $D^+$ and $D_s^+$ decaysExperiment: CLEOC (CESR) Inspire ID: 728043 Status: VALIDATED Authors:
Beam energies: (1.9, 1.9); (2.1, 2.1) GeV Run details:
Measurement of the inclusive branching ratios for $\eta$, $\eta^\prime$ and $\phi$ production in $D^0$, $D^+$ and $D_s^+$ decays. In addition the spectra for $\eta$ and $\phi$ production are also measured, in the CMS frame of the collision. N.B. The spetral information was really intended as part of the analysis to measure the inclusive branching ratios, not as a measurement, and therefore shoud be used with care. However there are few distrubtions available for D decays and therefore the spectra are still useful. Beam energy must be specified (in GeV) as analysis option "ENERGY" when rivet-merging samples. Source code: CLEOC_2006_I728043.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief eta, eta' and phi in D0, D+, Ds decays
9 class CLEOC_2006_I728043 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2006_I728043);
14
15
16 /// @name Analysis methods
17 ///@{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // projection
22 declare(UnstableParticles(),"UFS");
23 // histograms
24 unsigned int imin(0),imax(3);
25 if(isCompatibleWithSqrtS(3.77)) imax=2;
26 else if(isCompatibleWithSqrtS(4.17)) imin=2;
27 else
28 MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
29 for(unsigned int ix=imin;ix<imax;++ix) {
30 std::ostringstream title;
31 title << "TMP/n_D_" << ix;
32 book(_n_D[ix],title.str());
33 book(_br_eta [ix],1,1,ix+1);
34 book(_br_etaPrime[ix],2,1,ix+1);
35 book(_br_phi [ix],3,1,ix+1);
36 book(_s_eta [ix],4,1,ix+1);
37 book(_s_phi [ix],5,1,ix+1);
38 }
39 }
40
41 void fillHistos(const Particle & Dmeson, const LorentzTransform & boost) {
42 Particles ssbar;
43 unsigned int iMeson=0;
44 if(Dmeson.abspid()==421)
45 iMeson = 1;
46 else if(Dmeson.abspid()==431)
47 iMeson = 2;
48 _n_D[iMeson]->fill();
49 findDecayProducts(Dmeson,ssbar);
50 for(const Particle & dec : ssbar) {
51 FourMomentum p = boost.transform(dec.momentum());
52 double mom=p.p3().mod();
53 if(dec.pid()==221) {
54 _br_eta[iMeson]->fill(0.5);
55 _s_eta[iMeson]->fill(mom);
56 }
57 else if(dec.pid()==331) {
58 _br_etaPrime[iMeson]->fill(0.5);
59 }
60 else {
61 _br_phi[iMeson]->fill(0.5);
62 _s_phi[iMeson] ->fill(mom);
63 }
64 }
65 }
66
67 void findDecayProducts(const Particle & mother, Particles & ssbar) {
68 for(const Particle & p : mother.children()) {
69 int id = p.pid();
70 if (id==221 || id==331 || id==333) {
71 ssbar.push_back(p);
72 findDecayProducts(p,ssbar);
73 }
74 else if ( !p.children().empty() ) {
75 findDecayProducts(p,ssbar);
76 }
77 }
78 }
79
80 /// Perform the per-event analysis
81 void analyze(const Event& event) {
82 // find psi(3770)
83 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
84 Particles psi = ufs.particles(Cuts::pid==30443);
85 // D_s
86 if(psi.empty()) {
87 LorentzTransform boost;
88 for(const Particle & Dmeson : apply<UnstableParticles>("UFS",event).particles(Cuts::abspid==431)) {
89 fillHistos(Dmeson,boost);
90 }
91 }
92 // D0 D+
93 else {
94 for(const Particle& p : psi) {
95 // boost to rest frame
96 LorentzTransform boost;
97 if (p.p3().mod() > 1*MeV)
98 boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
99 // loop over D0 and D+ children
100 for(const Particle & Dmeson : p.children()) {
101 if(Dmeson.abspid()!=411 && Dmeson.abspid()!=421) continue;
102 fillHistos(Dmeson,boost);
103 }
104 }
105 }
106 }
107
108
109 /// Normalise histograms etc., after the run
110 void finalize() {
111 unsigned int imin(0),imax(3);
112 if(isCompatibleWithSqrtS(3.77)) imax=2;
113 else if(isCompatibleWithSqrtS(4.17)) imin=2;
114 else
115 MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
116 for(unsigned int ix=imin;ix<imax;++ix) {
117 if(_n_D[ix]->effNumEntries()<=0.) continue;
118 scale(_br_eta [ix], 100./ *_n_D[ix]);
119 scale(_br_etaPrime[ix], 100./ *_n_D[ix]);
120 scale(_br_phi [ix], 100./ *_n_D[ix]);
121 scale(_s_eta [ix], 100./ *_n_D[ix]);
122 scale(_s_phi [ix], 100./ *_n_D[ix]);
123 }
124 }
125
126 ///@}
127
128
129 /// @name Histograms
130 ///@{
131 CounterPtr _n_D[3];
132 Histo1DPtr _br_eta[3],_br_etaPrime[3],_br_phi[3];
133 Histo1DPtr _s_eta[3], _s_phi[3];
134 ///@}
135
136
137 };
138
139
140 RIVET_DECLARE_PLUGIN(CLEOC_2006_I728043);
141
142}
|