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],"/TMP/PiACont");
49 book(_n_PiA[0],"/TMP/PiAUps1");
50 book(_n_PiB[1],"/TMP/PiBCont");
51 book(_n_PiB[0],"/TMP/PiBUps1");
52 book(_n_Kp[1] ,"/TMP/KpCont");
53 book(_n_Kp[0] ,"/TMP/KpUps1");
54 book(_n_KS[1] ,"/TMP/KSCont");
55 book(_n_KS[0] ,"/TMP/KSUps1");
56 book(_n_ptA[1],"/TMP/ptACont");
57 book(_n_ptA[0],"/TMP/ptAUps1");
58 book(_n_ptB[1],"/TMP/ptBCont");
59 book(_n_ptB[0],"/TMP/ptBUps1");
60 // weights
61 book(_weightSum_cont,"/TMP/weightSum_cont");
62 book(_weightSum_Ups1,"/TMP/weightSum_Ups1");
63 }
64
65 /// Recursively walk the decay tree to find decay products of @a p
66 void findDecayProducts(Particle mother, Particles& unstable) {
67 for(const Particle & p: mother.children()) {
68 const int id = abs(p.pid());
69 if(id == 211 || id == 2212 || id == 310|| id==130 || id == 321) {
70 unstable.push_back(p);
71 }
72 if(!p.children().empty())
73 findDecayProducts(p, unstable);
74 }
75 }
76
77
78 /// Perform the per-event analysis
79 void analyze(const Event& event) {
80 // Find the Upsilons among the unstables
81 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
82 const FinalState & fs = apply<FinalState>(event, "FS");
83 Particles upsilons = ufs.particles(Cuts::pid==553);
84 // Continuum
85 if (upsilons.empty()) {
86 MSG_DEBUG("No Upsilons found => continuum event");
87 _weightSum_cont->fill();
88 // stable particles
89 for (const Particle& p : fs.particles(Cuts::abspid==211 or Cuts::abspid==2212 or Cuts::abspid==321 )) {
90 const int id = abs(p.pid());
91 const double xE = 2.*p.E()/sqrtS();
92 const double modp = p.p3().mod();
93 const double beta = modp / p.E();
94 int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
95 if(id==211) {
96 // not from K0S or Lambda decays
97 if(idMom!=310 && idMom != 3122) {
98 _h_pi_cont_p->fill(modp);
99 _h_pi_cont_z->fill(xE ,1./beta);
100 _n_PiA[1]->fill();
101 }
102 _n_PiB[1]->fill();
103 }
104 else if(id==321) {
105 _h_Kp_cont_p->fill(modp);
106 _h_Kp_cont_z->fill(xE ,1./beta);
107 _n_Kp[1]->fill();
108 }
109 else if(id==2212) {
110 // not from K0S or Lambda decays
111 if(idMom!=310 && idMom != 3122) {
112 _h_pt_cont_p->fill(modp);
113 _h_pt_cont_z->fill(xE ,1./beta);
114 _n_ptA[1]->fill();
115 }
116 _n_ptB[1]->fill();
117 }
118 }
119 // Unstable particles
120 for (const Particle& p : ufs.particles(Cuts::pid==310 || Cuts::pid==130)) {
121 const double xE = 2.*p.E()/sqrtS();
122 const double modp = p.p3().mod();
123 const double beta = modp / p.E();
124 _h_KS_cont_p->fill(modp);
125 _h_KS_cont_z->fill(xE ,1./beta);
126 _n_KS[1]->fill();
127 }
128 }
129 // Upsilon(s) found
130 else {
131 MSG_DEBUG("Upsilons found => resonance event");
132 for (const Particle& ups : upsilons) {
133 _weightSum_Ups1->fill();
134 Particles unstable;
135 // Find the decay products we want
136 findDecayProducts(ups, unstable);
137 LorentzTransform cms_boost;
138 if (ups.p3().mod() > 1*MeV)
139 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
140 const double mass = ups.mass();
141 // loop over decay products
142 for(const Particle& p : unstable) {
143 const int id = abs(p.pid());
144 const FourMomentum p2 = cms_boost.transform(p.momentum());
145 const double xE = 2.*p2.E()/mass;
146 const double modp = p2.p3().mod();
147 const double beta = modp / p2.E();
148 int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
149 if(id==211) {
150 // not from K0S or Lambda decays
151 if(idMom!=310 && idMom != 3122) {
152 _h_pi_ups1_p->fill(modp);
153 _h_pi_ups1_z->fill(xE ,1./beta);
154 _n_PiA[0]->fill();
155 }
156 _n_PiB[0]->fill();
157 }
158 else if(id==321) {
159 _h_Kp_ups1_p->fill(modp);
160 _h_Kp_ups1_z->fill(xE ,1./beta);
161 _n_Kp[0]->fill();
162 }
163 else if(id==2212) {
164 // not from K0S or Lambda decays
165 if(idMom!=310 && idMom != 3122) {
166 _h_pt_ups1_p->fill(modp);
167 _h_pt_ups1_z->fill(xE ,1./beta);
168 _n_ptA[0]->fill();
169 }
170 _n_ptB[0]->fill();
171 }
172 else if(id==310 || id==130) {
173 _h_KS_ups1_p->fill(modp);
174 _h_KS_ups1_z->fill(xE ,1./beta);
175 _n_KS[0]->fill();
176 }
177 }
178 }
179 }
180 }
181
182
183 /// Normalise histograms etc., after the run
184 void finalize() {
185 // Scale histos
186 if (_weightSum_cont->val() > 0.) {
187 scale(_h_pi_cont_p, 1./ *_weightSum_cont);
188 scale(_h_Kp_cont_p, 1./ *_weightSum_cont);
189 scale(_h_KS_cont_p, 1./ *_weightSum_cont);
190 scale(_h_pt_cont_p, 1./ *_weightSum_cont);
191 scale(_h_pi_cont_z, 1./ *_weightSum_cont);
192 scale(_h_Kp_cont_z, 1./ *_weightSum_cont);
193 scale(_h_KS_cont_z, 1./ *_weightSum_cont);
194 scale(_h_pt_cont_z, 1./ *_weightSum_cont);
195
196 }
197 if (_weightSum_Ups1->val() > 0.) {
198 scale(_h_pi_ups1_p, 1./ *_weightSum_Ups1);
199 scale(_h_Kp_ups1_p, 1./ *_weightSum_Ups1);
200 scale(_h_KS_ups1_p, 1./ *_weightSum_Ups1);
201 scale(_h_pt_ups1_p, 1./ *_weightSum_Ups1);
202 scale(_h_pi_ups1_z, 1./ *_weightSum_Ups1);
203 scale(_h_Kp_ups1_z, 1./ *_weightSum_Ups1);
204 scale(_h_KS_ups1_z, 1./ *_weightSum_Ups1);
205 scale(_h_pt_ups1_z, 1./ *_weightSum_Ups1);
206 }
207 // Counters
208 Scatter2DPtr nPiA;
209 book(nPiA, 1, 1, 1, true);
210 Scatter2DPtr nPiB;
211 book(nPiB, 1, 1, 2, true);
212 Scatter2DPtr nKS ;
213 book(nKS, 2, 1, 1, true);
214 Scatter2DPtr nKp ;
215 book(nKp,3, 1, 1, true);
216 Scatter2DPtr nptA;
217 book(nptA,4, 1, 1, true);
218 Scatter2DPtr nptB;
219 book(nptB,4, 1, 2, true);
220 vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
221 for(unsigned int ix=0;ix<2;++ix) {
222 scale(_n_PiA[ix],1./ *scales[ix]);
223 nPiA->point(ix).setY(_n_PiA[ix]->val(),_n_PiA[ix]->err());
224 scale(_n_PiB[ix],1./ *scales[ix]);
225 nPiB->point(ix).setY(_n_PiB[ix]->val(),_n_PiB[ix]->err());
226 scale(_n_Kp[ix] ,1./ *scales[ix]);
227 nKp->point(ix).setY(_n_Kp[ix]->val(),_n_Kp[ix]->err());
228 scale(_n_KS[ix] ,1./ *scales[ix]);
229 nKS->point(ix).setY(_n_KS[ix]->val(),_n_KS[ix]->err());
230 scale(_n_ptA[ix],1./ *scales[ix]);
231 nptA->point(ix).setY(_n_ptA[ix]->val(),_n_ptA[ix]->err());
232 scale(_n_ptB[ix],1./ *scales[ix]);
233 nptB->point(ix).setY(_n_ptB[ix]->val(),_n_ptB[ix]->err());
234 }
235 }
236
237 //@}
238
239
240 /// @name Histograms
241 //@{
242 Histo1DPtr _h_pi_ups1_p, _h_pi_cont_p, _h_pi_ups1_z, _h_pi_cont_z;
243 Histo1DPtr _h_Kp_ups1_p, _h_Kp_cont_p, _h_Kp_ups1_z, _h_Kp_cont_z;
244 Histo1DPtr _h_KS_ups1_p, _h_KS_cont_p, _h_KS_ups1_z, _h_KS_cont_z;
245 Histo1DPtr _h_pt_ups1_p, _h_pt_cont_p, _h_pt_ups1_z, _h_pt_cont_z;
246
247 // Counters
248 CounterPtr _n_PiA[2], _n_PiB[2], _n_Kp[2], _n_KS[2], _n_ptA[2],_n_ptB[2];
249 CounterPtr _weightSum_cont,_weightSum_Ups1;
250 //@}
251
252 };
253
254
255 // The hook for the plugin system
256 RIVET_DECLARE_PLUGIN(ARGUS_1989_I276860);
257
258}
|