Rivet analyses referenceARGUS_1993_I342061Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region.Experiment: ARGUS (DORIS) Inspire ID: 342061 Status: VALIDATED Authors:
Beam energies: (4.7, 4.7); (5.0, 5.0); (5.2, 5.2) GeV Run details:
Measurement of the inclusive production of the $\eta'(958)$ and $f_0(980)$ mesons in $e^+e^-$ annihilation in the Upsilon region. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonances and in the nearby continuum (9.36 to 10.45 GeV center-of-mass energy) Source code: ARGUS_1993_I342061.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region
9 ///
10 /// @author Peter Richardson
11 class ARGUS_1993_I342061 : public Analysis {
12 public:
13
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_I342061);
15
16
17 void init() {
18 declare(UnstableParticles(), "UFS");
19
20 book(_weightSum_cont, "TMP/weightSum_cont");
21 book(_weightSum_Ups1, "TMP/weightSum_Ups1");
22 book(_weightSum_Ups2, "TMP/weightSum_Ups2");
23
24 for ( auto i : {0,1,2} ) {
25 if ( i < 2 )
26 book(_count_etaPrime_highZ[i], "TMP/count_etaPrime_highz_" + to_str(i));
27 book(_count_etaPrime_allZ[i], "TMP/count_etaPrime_allz_" + to_str(i));
28 book(_count_f0[i], "TMP/count_f0_" + to_str(i));
29 }
30
31 book(_hist_cont_f0 ,2, 1, 1);
32 book(_hist_Ups1_f0 ,3, 1, 1);
33 book(_hist_Ups2_f0 ,4, 1, 1);
34 }
35
36
37 void analyze(const Event& e) {
38 // Find the Upsilons among the unstables
39 const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
40 Particles upsilons = ufs.particles(Cuts::pid==553 or Cuts::pid==100553);
41 // Continuum
42 if (upsilons.empty()) {
43 MSG_DEBUG("No Upsilons found => continuum event");
44 _weightSum_cont->fill();
45 for (const Particle& p : ufs.particles()) {
46 const int id = p.pid();
47 const double xp = 2.*p.E()/sqrtS();
48 const double beta = p.p3().mod() / p.E();
49 if (id == 9010221) {
50 _hist_cont_f0->fill(xp, 1./beta);
51 _count_f0[2]->fill();
52 } else if (id == 331) {
53 if (xp > 0.35) _count_etaPrime_highZ[1]->fill();
54 _count_etaPrime_allZ[2]->fill();
55 }
56 }
57 }
58 // Upsilon(s) found
59 else {
60 for (const Particle& ups : upsilons) {
61 const int parentId = ups.pid();
62 if(parentId==553) {
63 _weightSum_Ups1->fill();
64 }
65 else {
66 _weightSum_Ups2->fill();
67 }
68 Particles unstable;
69 // Find the decay products we want
70 findDecayProducts(ups, unstable);
71 // boost to rest frame (if required)
72 LorentzTransform cms_boost;
73 if (ups.p3().mod() > 1*MeV)
74 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
75 const double mass = ups.mass();
76 // loop over decay products
77 for(const Particle& p : unstable) {
78 const int id = p.pid();
79 const FourMomentum p2 = cms_boost.transform(p.momentum());
80 const double xp = 2.*p2.E()/mass;
81 const double beta = p2.p3().mod()/p2.E();
82 if (id == 9010221) {
83 if(parentId == 553 ) {
84 _hist_Ups1_f0->fill(xp, 1./beta);
85 _count_f0[0]->fill();
86 }
87 else {
88 _hist_Ups2_f0->fill(xp, 1./beta);
89 _count_f0[1]->fill();
90 }
91 }
92 else if ( id == 331 ) {
93 if (parentId == 553) {
94 if (xp > 0.35) _count_etaPrime_highZ[0]->fill();
95 _count_etaPrime_allZ[0]->fill();
96 }
97 else {
98 _count_etaPrime_allZ[1]->fill();
99 }
100 }
101 }
102 }
103 }
104 }
105
106 void finalize() {
107 // High-Z eta' multiplicity
108 Estimate1DPtr s111;
109 book(s111, 1, 1, 1);
110 if (_weightSum_Ups1->val() > 0) // Point at 9.460
111 s111->bin(1).set(_count_etaPrime_highZ[0]->val() / _weightSum_Ups1->val(), 0);
112 if (_weightSum_cont->val() > 0) // Point at 9.905
113 s111->bin(2).set(_count_etaPrime_highZ[1]->val() / _weightSum_cont->val(), 0);
114
115 // All-Z eta' multiplicity
116 Estimate1DPtr s112;
117 book(s112, 1, 1, 2);
118 if (_weightSum_Ups1->val() > 0) // Point at 9.460
119 s112->bin(1).set(_count_etaPrime_allZ[0]->val() / _weightSum_Ups1->val(), 0);
120 if (_weightSum_cont->val() > 0) // Point at 9.905
121 s112->bin(2).set(_count_etaPrime_allZ[2]->val() / _weightSum_cont->val(), 0);
122 if (_weightSum_Ups2->val() > 0) // Point at 10.02
123 s112->bin(3).set(_count_etaPrime_allZ[1]->val() / _weightSum_Ups2->val(), 0);
124
125
126 // f0 multiplicity
127 Estimate1DPtr s511;
128 book(s511, 5, 1, 1);
129 if (_weightSum_Ups1->val() > 0) // Point at 9.46
130 s511->bin(1).set(_count_f0[0]->val() / _weightSum_Ups1->val(), 0);
131 if (_weightSum_Ups2->val() > 0) // Point at 10.02
132 s511->bin(1).set(_count_f0[1]->val() / _weightSum_Ups2->val(), 0);
133 if (_weightSum_cont->val() > 0) // Point at 10.45
134 s511->bin(1).set(_count_f0[2]->val() / _weightSum_cont->val(), 0);
135
136 // Scale histos
137 if (_weightSum_cont->val() > 0.) scale(_hist_cont_f0, 1./ *_weightSum_cont);
138 if (_weightSum_Ups1->val() > 0.) scale(_hist_Ups1_f0, 1./ *_weightSum_Ups1);
139 if (_weightSum_Ups2->val() > 0.) scale(_hist_Ups2_f0, 1./ *_weightSum_Ups2);
140 }
141
142
143 private:
144
145 /// @name Counters
146 /// @{
147 array<CounterPtr,3> _count_etaPrime_highZ, _count_etaPrime_allZ, _count_f0;
148 CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2;
149 /// @}
150
151
152 /// Histos
153 Histo1DPtr _hist_cont_f0, _hist_Ups1_f0, _hist_Ups2_f0;
154
155
156 /// Recursively walk the decay tree to find decay products of @a p
157 void findDecayProducts(Particle mother, Particles& unstable) {
158 for (const Particle & p: mother.children()) {
159 const int id = p.pid();
160 if (id == 331 || id == 9010221) {
161 unstable.push_back(p);
162 }
163 else if(!p.children().empty()) {
164 findDecayProducts(p, unstable);
165 }
166 }
167 }
168
169 };
170
171
172
173 RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_I342061, ARGUS_1993_S2669951);
174
175}
|