Rivet analyses referenceARGUS_1989_I276860Spectra for $\pi^\pm$, $K^\pm$, $K^0_S$ and $\bar{p}$ in $e^+e^-$ collisions at the $\Upsilon(1S)$ and continuumExperiment: ARGUS (DORIS) Inspire ID: 276860 Status: VALIDATED Authors:
Beam energies: (4.7, 4.7); (5.0, 5.0) GeV Run details:
Spectra for the production of $\pi^\pm$, $K^\pm$, $K^0_S$ and $\bar{p}$ in $e^+e^-$ collisions. Data are taken on the $\Upsilon(1S)$ and in the nearby continuum. Source code: ARGUS_1989_I276860.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief pi+- K+- K0S pbar spectra continuum and Upsilon 1s
10 class ARGUS_1989_I276860 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1989_I276860);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 declare(FinalState(), "FS");
25 declare(UnstableParticles(), "UFS");
26 // Book histograms
27 book(_h_pi_ups1_p, 5, 1, 1);
28 book(_h_pi_cont_p, 5, 1, 2);
29 book(_h_pi_ups1_z, 9, 1, 1);
30 book(_h_pi_cont_z, 9, 1, 2);
31
32 book(_h_Kp_ups1_p, 6, 1, 1);
33 book(_h_Kp_cont_p, 6, 1, 2);
34 book(_h_Kp_ups1_z, 10, 1, 1);
35 book(_h_Kp_cont_z, 10, 1, 2);
36
37 book(_h_KS_ups1_p, 7, 1, 1);
38 book(_h_KS_cont_p, 7, 1, 2);
39 book(_h_KS_ups1_z, 11, 1, 1);
40 book(_h_KS_cont_z, 11, 1, 2);
41
42 book(_h_pt_ups1_p, 8, 1, 1);
43 book(_h_pt_cont_p, 8, 1, 2);
44 book(_h_pt_ups1_z, 12, 1, 1);
45 book(_h_pt_cont_z, 12, 1, 2);
46
47 // Counters
48 book(_n_PiA,1,1,1);
49 book(_n_PiB,1,1,2);
50 book(_n_KS ,2,1,1);
51 book(_n_Kp ,3,1,1);
52 book(_n_ptA,4,1,1);
53 book(_n_ptB,4,1,2);
54
55 // weights
56 book(_weightSum_cont,"/TMP/weightSum_cont");
57 book(_weightSum_Ups1,"/TMP/weightSum_Ups1");
58 }
59
60 /// Recursively walk the decay tree to find decay products of @a p
61 void findDecayProducts(Particle mother, Particles& unstable) {
62 for(const Particle & p: mother.children()) {
63 const int id = abs(p.pid());
64 if(id == 211 || id == 2212 || id == 310|| id==130 || id == 321) {
65 unstable.push_back(p);
66 }
67 if(!p.children().empty())
68 findDecayProducts(p, unstable);
69 }
70 }
71
72
73 /// Perform the per-event analysis
74 void analyze(const Event& event) {
75 // Find the Upsilons among the unstables
76 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
77 const FinalState & fs = apply<FinalState>(event, "FS");
78 Particles upsilons = ufs.particles(Cuts::pid==553);
79 // Continuum
80 if (upsilons.empty()) {
81 MSG_DEBUG("No Upsilons found => continuum event");
82 _weightSum_cont->fill();
83 // stable particles
84 for (const Particle& p : fs.particles(Cuts::abspid==211 or Cuts::abspid==2212 or Cuts::abspid==321 )) {
85 const int id = abs(p.pid());
86 const double xE = 2.*p.E()/sqrtS();
87 const double modp = p.p3().mod();
88 const double beta = modp / p.E();
89 int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
90 if(id==211) {
91 // not from K0S or Lambda decays
92 if(idMom!=310 && idMom != 3122) {
93 _h_pi_cont_p->fill(modp);
94 _h_pi_cont_z->fill(xE ,1./beta);
95 _n_PiA->fill("9.98"s);
96 }
97 _n_PiB->fill("9.98"s);
98 }
99 else if(id==321) {
100 _h_Kp_cont_p->fill(modp);
101 _h_Kp_cont_z->fill(xE ,1./beta);
102 _n_Kp->fill("9.98"s);
103 }
104 else if(id==2212) {
105 // not from K0S or Lambda decays
106 if(idMom!=310 && idMom != 3122) {
107 _h_pt_cont_p->fill(modp);
108 _h_pt_cont_z->fill(xE ,1./beta);
109 _n_ptA->fill("9.98"s);
110 }
111 _n_ptB->fill("9.98"s);
112 }
113 }
114 // Unstable particles
115 for (const Particle& p : ufs.particles(Cuts::pid==310 || Cuts::pid==130)) {
116 const double xE = 2.*p.E()/sqrtS();
117 const double modp = p.p3().mod();
118 const double beta = modp / p.E();
119 _h_KS_cont_p->fill(modp);
120 _h_KS_cont_z->fill(xE ,1./beta);
121 _n_KS->fill("9.98"s);
122 }
123 }
124 // Upsilon(s) found
125 else {
126 MSG_DEBUG("Upsilons found => resonance event");
127 for (const Particle& ups : upsilons) {
128 _weightSum_Ups1->fill();
129 Particles unstable;
130 // Find the decay products we want
131 findDecayProducts(ups, unstable);
132 LorentzTransform cms_boost;
133 if (ups.p3().mod() > 1*MeV)
134 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
135 const double mass = ups.mass();
136 // loop over decay products
137 for(const Particle& p : unstable) {
138 const int id = abs(p.pid());
139 const FourMomentum p2 = cms_boost.transform(p.momentum());
140 const double xE = 2.*p2.E()/mass;
141 const double modp = p2.p3().mod();
142 const double beta = modp / p2.E();
143 int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
144 if(id==211) {
145 // not from K0S or Lambda decays
146 if(idMom!=310 && idMom != 3122) {
147 _h_pi_ups1_p->fill(modp);
148 _h_pi_ups1_z->fill(xE ,1./beta);
149 _n_PiA->fill("9.46"s);
150 }
151 _n_PiB->fill("9.46"s);
152 }
153 else if(id==321) {
154 _h_Kp_ups1_p->fill(modp);
155 _h_Kp_ups1_z->fill(xE ,1./beta);
156 _n_Kp->fill("9.46"s);
157 }
158 else if(id==2212) {
159 // not from K0S or Lambda decays
160 if(idMom!=310 && idMom != 3122) {
161 _h_pt_ups1_p->fill(modp);
162 _h_pt_ups1_z->fill(xE ,1./beta);
163 _n_ptA->fill("9.46"s);
164 }
165 _n_ptB->fill("9.46"s);
166 }
167 else if(id==310 || id==130) {
168 _h_KS_ups1_p->fill(modp);
169 _h_KS_ups1_z->fill(xE ,1./beta);
170 _n_KS->fill("9.46"s);
171 }
172 }
173 }
174 }
175 }
176
177
178 /// Normalise histograms etc., after the run
179 void finalize() {
180 // Scale histos
181 if (_weightSum_cont->val() > 0.) {
182 scale(_h_pi_cont_p, 1./ *_weightSum_cont);
183 scale(_h_Kp_cont_p, 1./ *_weightSum_cont);
184 scale(_h_KS_cont_p, 1./ *_weightSum_cont);
185 scale(_h_pt_cont_p, 1./ *_weightSum_cont);
186 scale(_h_pi_cont_z, 1./ *_weightSum_cont);
187 scale(_h_Kp_cont_z, 1./ *_weightSum_cont);
188 scale(_h_KS_cont_z, 1./ *_weightSum_cont);
189 scale(_h_pt_cont_z, 1./ *_weightSum_cont);
190
191 }
192 if (_weightSum_Ups1->val() > 0.) {
193 scale(_h_pi_ups1_p, 1./ *_weightSum_Ups1);
194 scale(_h_Kp_ups1_p, 1./ *_weightSum_Ups1);
195 scale(_h_KS_ups1_p, 1./ *_weightSum_Ups1);
196 scale(_h_pt_ups1_p, 1./ *_weightSum_Ups1);
197 scale(_h_pi_ups1_z, 1./ *_weightSum_Ups1);
198 scale(_h_Kp_ups1_z, 1./ *_weightSum_Ups1);
199 scale(_h_KS_ups1_z, 1./ *_weightSum_Ups1);
200 scale(_h_pt_ups1_z, 1./ *_weightSum_Ups1);
201 }
202 // Counters
203 vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
204 vector<string> labels={"9.46","9.98"};
205 for (unsigned int ix=0;ix<2;++ix) {
206 _n_PiA->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
207 _n_PiB->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
208 _n_Kp->binAt(labels[ix] ).scaleW(1./ scales[ix]->val());
209 _n_KS->binAt(labels[ix] ).scaleW(1./ scales[ix]->val());
210 _n_ptA->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
211 _n_ptB->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
212 }
213 }
214
215 /// @}
216
217
218 /// @name Histograms
219 /// @{
220 Histo1DPtr _h_pi_ups1_p, _h_pi_cont_p, _h_pi_ups1_z, _h_pi_cont_z;
221 Histo1DPtr _h_Kp_ups1_p, _h_Kp_cont_p, _h_Kp_ups1_z, _h_Kp_cont_z;
222 Histo1DPtr _h_KS_ups1_p, _h_KS_cont_p, _h_KS_ups1_z, _h_KS_cont_z;
223 Histo1DPtr _h_pt_ups1_p, _h_pt_cont_p, _h_pt_ups1_z, _h_pt_cont_z;
224
225 // Counters
226 BinnedHistoPtr<string> _n_PiA, _n_PiB, _n_Kp, _n_KS, _n_ptA,_n_ptB;
227 CounterPtr _weightSum_cont,_weightSum_Ups1;
228 /// @}
229
230 };
231
232
233 RIVET_DECLARE_PLUGIN(ARGUS_1989_I276860);
234
235}
|