Rivet analyses referenceARGUS_1988_I251097Hyperon spectra in $e^+e^-$ collisions in the continuum at 10 GeV and at $\Upsilon_{1,2}$Experiment: ARGUS (DORIS) Inspire ID: 251097 Status: VALIDATED Authors:
Beam energies: (4.7, 4.7); (5.0, 5.0); (5.0, 5.0) GeV Run details:
Measurement of the spectra for the production of $\Lambda$ and $\Xi^-$ baryons. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and in the nearby continuum. N.B. data tables 10 onwards are duplicates and therefore not implemented. Source code: ARGUS_1988_I251097.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief hyperon production
9 class ARGUS_1988_I251097 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1988_I251097);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 // Initialise and register projections
23 declare(UnstableParticles(), "UFS");
24
25 for (unsigned int ix = 0; ix<2; ++ix) {
26 for (unsigned int iy = 0; iy<7; ++iy) {
27 book(_mult[ix][iy], ix+1, 1, iy+1);
28 }
29 }
30 book(_hist_ups1_lambda , 3,1,1);
31 book(_hist_ups2_lambda , 4,1,1);
32 book(_hist_cont_lambda1, 5,1,1);
33 book(_hist_cont_lambda2, 6,1,1);
34
35 book(_hist_ups1_xi , 7,1,1);
36 book(_hist_ups2_xi , 8,1,1);
37 book(_hist_cont_xi , 9,1,1);
38 book(_weightSum_cont,"TMP/sum_cont");
39 book(_weightSum_Ups1,"TMP/sum_ups1");
40 book(_weightSum_Ups2,"TMP/sum_ups2");
41 }
42
43 /// Recursively walk the decay tree to find decay products of @a p
44 void findDecayProducts(Particle mother, Particles& unstable) {
45 for(const Particle & p: mother.children()) {
46 const int id = abs(p.pid());
47 if (id == 3122 || id == 3312 || id == 3212 || id == 3114 ||
48 id == 3224 || id == 3324 || id == 3334) {
49 unstable.push_back(p);
50 }
51 if(!p.children().empty())
52 findDecayProducts(p, unstable);
53 }
54 }
55
56 /// Perform the per-event analysis
57 void analyze(const Event& event) {
58 // First in unstable final state
59 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
60 Particles upsilons = ufs.particles(Cuts::pid==553 || Cuts::pid==100553);
61 // continuum
62 if (upsilons.empty()) {
63 _weightSum_cont->fill();
64 for (const Particle& p : ufs.particles()) {
65 int id = p.abspid();
66 double modp = p.p3().mod();
67 double xp = 2.*modp/sqrtS();
68 double xE = 2.*p.E()/sqrtS();
69 double beta = modp/p.E();
70 if (id == 3122) {
71 _hist_cont_lambda1->fill(xp);
72 _hist_cont_lambda2->fill(xE, 1./beta);
73 _mult[1][0]->fill(Ecms);
74 }
75 else if (id == 3312) {
76 _hist_cont_xi->fill(xE, 1./beta);
77 _mult[1][1]->fill(Ecms);
78 }
79 else if (id == 3212) {
80 _mult[1][2]->fill(Ecms);
81 }
82 else if (id == 3114) {
83 _mult[1][3]->fill(Ecms);
84 }
85 else if (id == 3224) {
86 _mult[1][4]->fill(Ecms);
87 }
88 else if (id == 3324) {
89 _mult[1][5]->fill(Ecms);
90 }
91 else if (id == 3334) {
92 _mult[1][6]->fill(Ecms);
93 }
94 }
95 }
96 // Upslion decays
97 else {
98 for (const Particle& ups : upsilons) {
99 const int parentId = ups.pid();
100 if( parentId == 553)
101 _weightSum_Ups1->fill();
102 else
103 _weightSum_Ups2->fill();
104 Particles unstable;
105 // Find the decay products we want
106 findDecayProducts(ups,unstable);
107 LorentzTransform cms_boost;
108 if (ups.p3().mod() > 0.001)
109 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
110 double mass = ups.mass();
111 for(const Particle & p : unstable) {
112 int id = p.abspid();
113 FourMomentum p2 = cms_boost.transform(p.momentum());
114 double modp = p2.p3().mod();
115 double xp = 2.*modp/mass;
116 if (id == 3122) {
117 if(parentId==553) {
118 _hist_ups1_lambda->fill(xp);
119 _mult[0][0]->fill(Ecms);
120 }
121 else {
122 _hist_ups2_lambda->fill(xp);
123 }
124 }
125 else if (id == 3312) {
126 if (parentId==553) {
127 _hist_ups1_xi->fill(xp);
128 _mult[0][1]->fill(Ecms);
129 }
130 else {
131 _hist_ups2_xi->fill(xp);
132 }
133 }
134 else if(parentId==553) {
135 if (id == 3212) {
136 _mult[0][2]->fill(Ecms);
137 }
138 else if (id == 3114) {
139 _mult[0][3]->fill(Ecms);
140 }
141 else if (id == 3224) {
142 _mult[0][4]->fill(Ecms);
143 }
144 else if (id == 3324) {
145 _mult[0][5]->fill(Ecms);
146 }
147 else if (id == 3334) {
148 _mult[0][6]->fill(Ecms);
149 }
150 }
151 }
152 }
153 }
154 }
155
156
157 /// Normalise histograms etc., after the run
158 void finalize() {
159 // multiplicities
160 const vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
161 for (unsigned int ix=0;ix<2;++ix) {
162 if (scales[ix]->effNumEntries()<=0.) continue;
163 scale(_mult[ix], 1./ *scales[ix]);
164 }
165 if(_weightSum_Ups1->val()>0.) {
166 scale(_hist_ups1_lambda,1./ *_weightSum_Ups1);
167 scale(_hist_ups1_xi ,1./ *_weightSum_Ups1);
168 }
169 if(_weightSum_Ups2->val()>0.) {
170 scale(_hist_ups2_lambda,1./ *_weightSum_Ups2);
171 scale(_hist_ups2_xi ,1./ *_weightSum_Ups2);
172 }
173 if(_weightSum_cont->val()) {
174 scale(_hist_cont_lambda1, 1./ *_weightSum_cont);
175 scale(_hist_cont_lambda2, 1./ *_weightSum_cont);
176 scale(_hist_cont_xi , 1./ *_weightSum_cont);
177 }
178 }
179
180 /// @}
181
182
183 /// @name Histograms
184 /// @{
185 Histo1DPtr _hist_ups1_lambda, _hist_ups2_lambda, _hist_cont_lambda1, _hist_cont_lambda2;
186 Histo1DPtr _hist_ups1_xi, _hist_ups2_xi, _hist_cont_xi;
187 BinnedHistoPtr<int> _mult[2][7];
188 CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2;
189 const int Ecms = 10;
190 /// @}
191
192
193 };
194
195
196 RIVET_DECLARE_PLUGIN(ARGUS_1988_I251097);
197
198
199}
|