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,1e-3)) imax=2;
26 else if(isCompatibleWithSqrtS(4.17)) imin=2;
27 else
28 MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
29
30 for (unsigned int ix=imin; ix<imax; ++ix) {
31 book(_n_D[ix], "TMP/n_D_"+std::to_string(ix));
32 book(_br_eta [ix],1,1,ix+1);
33 book(_br_etaPrime[ix],2,1,ix+1);
34 book(_br_phi [ix],3,1,ix+1);
35 book(_s_eta [ix],4,1,ix+1);
36 book(_s_phi [ix],5,1,ix+1);
37 }
38 }
39
40 void fillHistos(const Particle & Dmeson, const LorentzTransform & boost) {
41 Particles ssbar;
42 unsigned int iMeson=0;
43 if(Dmeson.abspid()==421)
44 iMeson = 1;
45 else if(Dmeson.abspid()==431)
46 iMeson = 2;
47 _n_D[iMeson]->fill();
48 findDecayProducts(Dmeson,ssbar);
49 for(const Particle & dec : ssbar) {
50 FourMomentum p = boost.transform(dec.momentum());
51 double mom=p.p3().mod();
52 if(dec.pid()==221) {
53 _br_eta[iMeson]->fill();
54 _s_eta[iMeson]->fill(mom);
55 }
56 else if(dec.pid()==331) {
57 _br_etaPrime[iMeson]->fill();
58 }
59 else {
60 _br_phi[iMeson]->fill();
61 _s_phi[iMeson] ->fill(mom);
62 }
63 }
64 }
65
66 void findDecayProducts(const Particle & mother, Particles & ssbar) {
67 for(const Particle & p : mother.children()) {
68 int id = p.pid();
69 if (id==221 || id==331 || id==333) {
70 ssbar.push_back(p);
71 findDecayProducts(p,ssbar);
72 }
73 else if ( !p.children().empty() ) {
74 findDecayProducts(p,ssbar);
75 }
76 }
77 }
78
79 /// Perform the per-event analysis
80 void analyze(const Event& event) {
81 // find psi(3770)
82 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
83 Particles psi = ufs.particles(Cuts::pid==30443);
84 // D_s
85 if(psi.empty()) {
86 LorentzTransform boost;
87 for(const Particle & Dmeson : apply<UnstableParticles>("UFS",event).particles(Cuts::abspid==431)) {
88 fillHistos(Dmeson,boost);
89 }
90 }
91 // D0 D+
92 else {
93 for(const Particle& p : psi) {
94 // boost to rest frame
95 LorentzTransform boost;
96 if (p.p3().mod() > 1*MeV)
97 boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
98 // loop over D0 and D+ children
99 for(const Particle & Dmeson : p.children()) {
100 if(Dmeson.abspid()!=411 && Dmeson.abspid()!=421) continue;
101 fillHistos(Dmeson,boost);
102 }
103 }
104 }
105 }
106
107
108 /// Normalise histograms etc., after the run
109 void finalize() {
110 unsigned int imin(0),imax(3);
111 if(isCompatibleWithSqrtS(3.77,1e-3)) imax=2;
112 else if(isCompatibleWithSqrtS(4.17)) imin=2;
113 else
114 MSG_ERROR("Invalid CMS energy in CLEOC_2006_I728043");
115 for(unsigned int ix=imin;ix<imax;++ix) {
116 if(_n_D[ix]->effNumEntries()<=0.) continue;
117 scale(_br_eta [ix], 100./ *_n_D[ix]);
118 scale(_br_etaPrime[ix], 100./ *_n_D[ix]);
119 scale(_br_phi [ix], 100./ *_n_D[ix]);
120 scale(_s_eta [ix], 100./ *_n_D[ix]);
121 scale(_s_phi [ix], 100./ *_n_D[ix]);
122 }
123 }
124
125 /// @}
126
127
128 /// @name Histograms
129 /// @{
130 CounterPtr _n_D[3], _br_eta[3],_br_etaPrime[3],_br_phi[3];
131 Histo1DPtr _s_eta[3], _s_phi[3];
132 /// @}
133
134
135 };
136
137
138 RIVET_DECLARE_PLUGIN(CLEOC_2006_I728043);
139
140}
|