Rivet analyses referenceARGUS_1993_S2789213Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the upsilon energy region.Experiment: ARGUS (DORIS) Inspire ID: 356616 Status: VALIDATED Authors:
Beam energies: (4.7, 4.7); (5.2, 5.2); (5.3, 5.3) GeV Run details:
Measurement of the inclusive production of the vector mesons $K^*(892)$, $\rho^0(770)$ and $\omega(783)$ in $e^+e^-$ annihilation in the Upsilon region by the Argus Collaboration. Useful for tuning simulations of B meson and bottomium decays. Source code: ARGUS_1993_S2789213.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief ARGUS vector meson production
9 ///
10 /// @author Peter Richardson
11 class ARGUS_1993_S2789213 : public Analysis {
12 public:
13
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_S2789213);
15
16
17 void init() {
18 declare(UnstableParticles(), "UFS");
19 for(unsigned int ix=0;ix<3;++ix) {
20 for(unsigned int iy=0;iy<5;++iy) {
21 std::ostringstream title;
22 title << "/TMP/MULT_" << ix << "_" << iy;
23 book(_mult[ix][iy],title.str());
24 }
25 }
26
27 book(_hist_cont_KStarPlus , 4, 1, 1);
28 book(_hist_Ups1_KStarPlus , 5, 1, 1);
29 book(_hist_Ups4_KStarPlus , 6, 1, 1);
30
31 book(_hist_cont_KStar0 , 7, 1, 1);
32 book(_hist_Ups1_KStar0 , 8, 1, 1);
33 book(_hist_Ups4_KStar0 , 9, 1, 1);
34
35 book(_hist_cont_Rho0 ,10, 1, 1);
36 book(_hist_Ups1_Rho0 ,11, 1, 1);
37 book(_hist_Ups4_Rho0 ,12, 1, 1);
38
39 book(_hist_cont_Omega ,13, 1, 1);
40 book(_hist_Ups1_Omega ,14, 1, 1);
41
42
43 book(_weightSum_cont,"TMP/weightSumcont");
44 book(_weightSum_Ups1,"TMP/weightSumUps1");
45 book(_weightSum_Ups4,"TMP/weightSumUps4");
46 }
47
48
49 void analyze(const Event& e) {
50 // Find the upsilons
51 // First in unstable final state
52 const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
53 Particles upsilons = ufs.particles(Cuts::pid==553 || Cuts::pid==300553);
54 // continuum
55 if (upsilons.empty()) {
56 _weightSum_cont->fill();
57 for (const Particle& p : ufs.particles()) {
58 int id = p.abspid();
59 double xp = 2.*p.E()/sqrtS();
60 double beta = p.p3().mod()/p.E();
61 if (id == 113) {
62 _hist_cont_Rho0->fill(xp, 1./beta);
63 _mult[0][1]->fill();
64 }
65 else if (id == 313) {
66 _hist_cont_KStar0->fill(xp, 1./beta);
67 _mult[0][2]->fill();
68 }
69 else if (id == 223) {
70 _hist_cont_Omega->fill(xp, 1./beta);
71 _mult[0][0]->fill();
72 }
73 else if (id == 323) {
74 _hist_cont_KStarPlus->fill(xp,1./beta);
75 _mult[0][3]->fill();
76 }
77 else if (id == 333) {
78 _mult[0][4]->fill();
79 }
80 }
81 }
82 // found an upsilon
83 else {
84 for (const Particle& ups : upsilons) {
85 const int parentId = ups.pid();
86 if(parentId == 553)
87 _weightSum_Ups1->fill();
88 else
89 _weightSum_Ups4->fill();
90 Particles unstable;
91 // Find the decay products we want
92 findDecayProducts(ups,unstable);
93 LorentzTransform cms_boost;
94 if (ups.p3().mod() > 0.001)
95 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
96 double mass = ups.mass();
97 for( const Particle & p : unstable) {
98 int id = p.abspid();
99 FourMomentum p2 = cms_boost.transform(p.momentum());
100 double xp = 2.*p2.E()/mass;
101 double beta = p2.p3().mod()/p2.E();
102 if (id == 113) {
103 if (parentId == 553) {
104 _hist_Ups1_Rho0->fill(xp,1./beta);
105 _mult[1][1]->fill();
106 }
107 else {
108 _hist_Ups4_Rho0->fill(xp,1./beta);
109 _mult[2][1]->fill();
110 }
111 }
112 else if (id == 313) {
113 if (parentId == 553) {
114 _hist_Ups1_KStar0->fill(xp,1./beta);
115 _mult[1][2]->fill();
116 }
117 else {
118 _hist_Ups4_KStar0->fill(xp,1./beta);
119 _mult[2][2]->fill();
120 }
121 }
122 else if (id == 223) {
123 if (parentId == 553) {
124 _hist_Ups1_Omega->fill(xp,1./beta);
125 _mult[1][0]->fill();
126 }
127 else {
128 _mult[2][0]->fill();
129 }
130 }
131 else if (id == 323) {
132 if (parentId == 553) {
133 _hist_Ups1_KStarPlus->fill(xp,1./beta);
134 _mult[1][3]->fill();
135 }
136 else {
137 _hist_Ups4_KStarPlus->fill(xp,1./beta);
138 _mult[2][3]->fill();
139 }
140 }
141 else if (id == 333) {
142 if (parentId == 553) {
143 _mult[1][4]->fill();
144 }
145 else {
146 _mult[2][4]->fill();
147 }
148 }
149 }
150 }
151 }
152 }
153
154
155 void finalize() {
156 // multiplicities
157 vector<CounterPtr> scales = {_weightSum_cont,_weightSum_Ups1,_weightSum_Ups4};
158 for(unsigned int ix=0;ix<3;++ix) {
159 if(scales[ix]->val() <= 0.) continue;
160 for(unsigned int iy=0;iy<5;++iy) {
161 // skip Upsilon(4S) -> omega, just an upper limit
162 if(ix==2&&iy==0) continue;
163 Scatter2DPtr scatter;
164 book(scatter,ix+1, 1, iy+1, true);
165 scale(_mult[ix][iy],1./ *scales[ix]);
166 scatter->point(0).setY(_mult[ix][iy]->val(),_mult[ix][iy]->err());
167 }
168 }
169 // spectra
170 if (_weightSum_cont->val() > 0.) {
171 scale(_hist_cont_KStarPlus, 1. / *_weightSum_cont);
172 scale(_hist_cont_KStar0 , 1. / *_weightSum_cont);
173 scale(_hist_cont_Rho0 , 1. / *_weightSum_cont);
174 scale(_hist_cont_Omega , 1. / *_weightSum_cont);
175 }
176 if (_weightSum_Ups1->val() > 0.) {
177 scale(_hist_Ups1_KStarPlus, 1. / *_weightSum_Ups1);
178 scale(_hist_Ups1_KStar0 , 1. / *_weightSum_Ups1);
179 scale(_hist_Ups1_Rho0 , 1. / *_weightSum_Ups1);
180 scale(_hist_Ups1_Omega , 1. / *_weightSum_Ups1);
181 }
182 if (_weightSum_Ups4->val() > 0.) {
183 scale(_hist_Ups4_KStarPlus, 1. / *_weightSum_Ups4);
184 scale(_hist_Ups4_KStar0 , 1. / *_weightSum_Ups4);
185 scale(_hist_Ups4_Rho0 , 1. / *_weightSum_Ups4);
186 }
187 }
188
189
190 private:
191
192 Histo1DPtr _hist_cont_KStarPlus, _hist_Ups1_KStarPlus, _hist_Ups4_KStarPlus;
193 Histo1DPtr _hist_cont_KStar0, _hist_Ups1_KStar0, _hist_Ups4_KStar0 ;
194 Histo1DPtr _hist_cont_Rho0, _hist_Ups1_Rho0, _hist_Ups4_Rho0;
195 Histo1DPtr _hist_cont_Omega, _hist_Ups1_Omega;
196
197 CounterPtr _mult[3][5];
198 CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups4;
199
200
201 /// Recursively walk the decay tree to find decay products of @a p
202 void findDecayProducts(Particle mother, Particles& unstable) {
203 for(const Particle & p: mother.children()) {
204 const int id = abs(p.pid());
205 if (id == 113 || id == 313 || id == 323 ||
206 id == 333 || id == 223 ) {
207 unstable.push_back(p);
208 }
209 else if(!p.children().empty())
210 findDecayProducts(p, unstable);
211 }
212 }
213
214 };
215
216
217
218 RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_S2789213, ARGUS_1993_I356616);
219
220}
|