Rivet analyses referenceUA5_1989_I267179UA5 charged multiplicity measurementsExperiment: UA5 (CERN SPS) Inspire ID: 267179 Status: VALIDATED Authors:
Beam energies: (100.0, 100.0); (450.0, 450.0) GeV Run details:
Multiplicity distributions of charged particles produced in non-single-diffractive collisions between protons and antiprotons at centre-of-mass energies of 200 and 900 GeV. The data were recorded in the UA5 streamer chambers at the CERN collider, which was operated in a pulsed mode between the two energies. This analysis confirms the violation of KNO scaling in full phase space found by the UA5 group at an energy of 546 GeV, with similar measurements at 200 and 900 GeV. Beam energy must be specified as analysis option "ENERGY" (200 or 900 GeV) when rivet-merging samples. Source code: UA5_1989_I267179.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/ChargedFinalState.hh"
4#include "Rivet/Projections/TriggerUA5.hh"
5
6namespace Rivet {
7
8
9 /// UA5 min bias charged multiplicities in central \f$ \eta \f$ ranges
10 class UA5_1989_I267179 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(UA5_1989_I267179);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and projections
21 void init() {
22 declare(TriggerUA5(), "Trigger");
23 declare(ChargedFinalState(Cuts::abseta < 0.5), "CFS05");
24 declare(ChargedFinalState(Cuts::abseta < 1.5), "CFS15");
25 declare(ChargedFinalState(Cuts::abseta < 3.0), "CFS30");
26 declare(ChargedFinalState(Cuts::abseta < 5.0), "CFS50");
27
28 // NB. _hist_nch and _hist_ncheta50 use the same data but different binning
29 vector<double> tmp;
30 if (isCompatibleWithSqrtS(200*GeV)) {
31 book(_hist_nch, 1, 1, 1);
32 book(_hist_nch_eta05, 3, 1, 1);
33 book(_hist_nch_eta15, 4, 1, 1);
34 book(_hist_nch_eta30, 5, 1, 1);
35 book(_hist_nch_eta50, 6, 1, 1);
36 book(_hist_mean_nch , 11, 1, 1);
37 Ecm = 200;
38
39 // _hist_nch axis
40 tmp.clear(); tmp.reserve(32);
41 for (size_t i = 1; i < 30; ++i) tmp.push_back(2*i-1);
42 tmp.push_back(60); tmp.push_back(62); tmp.push_back(74);
43 _axes[0] = YODA::Axis<double>(tmp);
44
45 // _hist_nch_eta05 axis
46 _axes[1] = YODA::Axis<double>({-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5,
47 7.5, 8.5, 9.5, 10.5, 11.5, 13.0, 19.0});
48
49 // _hist_nch_eta15 axis
50 tmp.clear(); tmp.reserve(33);
51 for (size_t i = 1; i < 31; ++i) tmp.push_back(i-0.5);
52 tmp.push_back(31); tmp.push_back(32); tmp.push_back(45);
53 _axes[2] = YODA::Axis<double>(tmp);
54
55 // _hist_nch_eta30 axis
56 tmp.clear(); tmp.reserve(54);
57 for (size_t i = 0; i < 49; ++i) tmp.push_back(i-0.5);
58 tmp.push_back(49); tmp.push_back(50);
59 tmp.push_back(51); tmp.push_back(53);
60 tmp.push_back(81);
61 _axes[3] = YODA::Axis<double>(tmp);
62
63 // _hist_nch_eta50 axis
64 tmp.clear(); tmp.reserve(59);
65 tmp.push_back(0);
66 for (size_t i = 3; i < 56; ++i) tmp.push_back(i-0.5);
67 tmp.push_back(56); tmp.push_back(57);
68 tmp.push_back(58); tmp.push_back(60);
69 tmp.push_back(74);
70 _axes[4] = YODA::Axis<double>(tmp);
71 }
72 else if (isCompatibleWithSqrtS(900*GeV)) {
73 book(_hist_nch, 2, 1, 1);
74 book(_hist_nch_eta05, 7, 1, 1);
75 book(_hist_nch_eta15, 8, 1, 1);
76 book(_hist_nch_eta30, 9, 1, 1);
77 book(_hist_nch_eta50, 10, 1, 1);
78 book(_hist_mean_nch, 12, 1, 1);
79 Ecm = 900;
80
81 // _hist_nch axis
82 tmp.clear(); tmp.reserve(55);
83 for (size_t i = 4; i < 53; ++i) tmp.push_back(2*i-1);
84 tmp.push_back(106); tmp.push_back(108); tmp.push_back(110);
85 tmp.push_back(112); tmp.push_back(116);
86 _axes[0] = YODA::Axis<double>(tmp);
87
88 // _hist_nch_eta05 axis
89 tmp.clear(); tmp.reserve(23);
90 for (size_t i = 0; i < 21; ++i) tmp.push_back(i-0.5);
91 tmp.push_back(21); tmp.push_back(23); tmp.push_back(30);
92 _axes[1] = YODA::Axis<double>(tmp);
93
94 // _hist_nch_eta15 axis
95 tmp.clear(); tmp.reserve(53);
96 for (size_t i = 0; i < 47; ++i) tmp.push_back(i-0.5);
97 tmp.push_back(47); tmp.push_back(48); tmp.push_back(49);
98 tmp.push_back(51); tmp.push_back(55); tmp.push_back(71);
99 _axes[2] = YODA::Axis<double>(tmp);
100
101 // _hist_nch_eta30 axis
102 tmp.clear(); tmp.reserve(84);
103 for (size_t i = 0; i < 76; ++i) tmp.push_back(i-0.5);
104 tmp.push_back(76); tmp.push_back(77); tmp.push_back(78);
105 tmp.push_back(79); tmp.push_back(81); tmp.push_back(84);
106 tmp.push_back(90); tmp.push_back(113);
107 _axes[3] = YODA::Axis<double>(tmp);
108
109 // _hist_nch_eta50 axis
110 tmp.clear(); tmp.reserve(102);
111 tmp.push_back(0); tmp.push_back(2);
112 for (size_t i = 4; i < 95; ++i) tmp.push_back(i-0.5);
113 tmp.push_back(95); tmp.push_back(96); tmp.push_back(97);
114 tmp.push_back(98); tmp.push_back(99); tmp.push_back(102);
115 tmp.push_back(106); tmp.push_back(112); tmp.push_back(130);
116 _axes[4] = YODA::Axis<double>(tmp);
117 }
118 book(_sumWPassed, "SumW");
119 /// @todo Moments of distributions
120 }
121
122
123 /// Do the analysis
124 void analyze(const Event& event) {
125 // Trigger
126 const TriggerUA5& trigger = apply<TriggerUA5>(event, "Trigger");
127 if (!trigger.nsdDecision()) vetoEvent;
128
129 _sumWPassed->fill();
130
131 // Count final state particles in several eta regions
132 const int numP05 = apply<ChargedFinalState>(event, "CFS05").size();
133 const int numP15 = apply<ChargedFinalState>(event, "CFS15").size();
134 const int numP30 = apply<ChargedFinalState>(event, "CFS30").size();
135 const int numP50 = apply<ChargedFinalState>(event, "CFS50").size();
136
137 // Fill histograms
138 _hist_nch->fill(map2string(numP50, 0));
139 _hist_nch_eta05->fill(map2string(numP05, 1));
140 _hist_nch_eta15->fill(map2string(numP15, 2));
141 _hist_nch_eta30->fill(map2string(numP30, 3));
142 _hist_nch_eta50->fill(map2string(numP50, 4));
143 _hist_mean_nch->fill(Ecm, numP50);
144 }
145
146 string map2string(const int n, const int b) const {
147 if (Ecm == 200) {
148 if (b == 0) {
149 if (64 <= n && n <= 76) return "64.0 - 76.0";
150 if (60 <= n && n <= 62) return "60.0 - 62.0";
151 if (58 == n) return "58";
152 }
153 if (b == 1) {
154 if (13 <= n && n <= 19) return "13.0 - 19.0";
155 }
156 if (b == 2) {
157 if (33 <= n && n <= 45) return "33.0 - 45.0";
158 if (31 <= n && n <= 32) return "31.0 - 32.0";
159 if (30 == n) return "30.0";
160 }
161 if (b == 3) {
162 if (56 <= n && n <= 74) return "56.0 - 74.0";
163 if (53 <= n && n <= 55) return "53.0 - 55.0";
164 if (51 <= n && n <= 52) return "51.0 - 52.0";
165 if (49 <= n && n <= 50) return "49.0 - 50.0";
166 if (48 == n) return "48.0";
167 }
168 if (b == 4) {
169 if (63 <= n && n <= 77) return "63.0 - 77.0";
170 if (60 <= n && n <= 62) return "60.0 - 62.0";
171 if (58 <= n && n <= 59) return "58.0 - 59.0";
172 if (56 <= n && n <= 57) return "56.0 - 57.0";
173 if (55 == n) return "55.0";
174 if ( 0 <= n && n <= 2) return "0.0 - 2.0";
175 }
176 }
177 if (Ecm == 600) {
178 if (b == 0) {
179 if (122 <= n && n <= 136) return "122.0 - 136.0";
180 if (114 <= n && n <= 120) return "114.0 - 120.0";
181 if (106 <= n && n <= 108) return "106.0 - 108.0";
182 if (104 == n) return "104.0";
183 if ( 2 <= n && n <= 6) return "2.0 - 6.0";
184 }
185 if (b == 1) {
186 if (24 <= n && n <= 31) return "24.0 - 31.0";
187 if (21 <= n && n <= 23) return "21.0 - 23.0";
188 if (20 == n) return "20.0";
189 }
190 if (b == 2) {
191 if (59 <= n && n <= 75) return "59.0 - 75.0";
192 if (54 <= n && n <= 58) return "54.0 - 58.0";
193 if (51 <= n && n <= 53) return "51.0 - 53.0";
194 if (49 <= n && n <= 50) return "49.0 - 50.0";
195 if (47 <= n && n <= 48) return "47.0 - 48.0";
196 if (46 == n) return "46.0";
197 }
198 if (b == 3) {
199 if (96 <= n && n <= 119) return "69.0 - 119.0";
200 if (89 <= n && n <= 95) return "89.0 - 95.0";
201 if (85 <= n && n <= 88) return "85.0 - 88.0";
202 if (82 <= n && n <= 84) return "82.0 - 84.0";
203 if (80 <= n && n <= 81) return "80.0 - 81.0";
204 if (78 <= n && n <= 79) return "78.0 - 79.0";
205 if (76 <= n && n <= 77) return "76.0 - 77.0";
206 if (75 == n) return "75.0";
207 }
208 if (b == 4) {
209 if (119 <= n && n <= 137) return "119.0 - 137.0";
210 if (112 <= n && n <= 118) return "112.0 - 118.0";
211 if (107 <= n && n <= 111) return "107.0 - 111.0";
212 if (103 <= n && n <= 106) return "103.0 - 106.0";
213 if (101 <= n && n <= 102) return "101.0 - 102.0";
214 if ( 99 <= n && n <= 100) return "99.0 - 100.0";
215 if ( 97 <= n && n <= 98) return "97.0 - 98.0";
216 if ( 95 <= n && n <= 96) return "95.0 - 96.0";
217 if ( 94 == n) return "94.0";
218 if ( 0 <= n && n <= 2) return "0.0 - 2.0";
219 }
220 }
221 const size_t idx = _axes[b].index((double)n);
222 double val = _axes[b].mid(idx);
223 val = val + 0.5 - (val<0);
224 return std::to_string((int)val) + ".0";
225 }
226
227 void finalize() {
228 scale(_hist_nch, 1.0 / *_sumWPassed);
229 scale(_hist_nch_eta05, 1.0 / *_sumWPassed);
230 scale(_hist_nch_eta15, 1.0 / *_sumWPassed);
231 scale(_hist_nch_eta30, 1.0 / *_sumWPassed);
232 scale(_hist_nch_eta50, 1.0 / *_sumWPassed);
233 scale(_hist_mean_nch, 1.0 / *_sumWPassed);
234 for (auto& b: _hist_nch->bins()) {
235 const size_t idx = b.index();
236 double sf = _axes[0].width(idx);
237 b.scaleW(1.0/sf);
238 }
239 for (auto& b: _hist_nch_eta05->bins()) {
240 const size_t idx = b.index();
241 double sf = _axes[1].width(idx);
242 b.scaleW(1.0/sf);
243 }
244 for (auto& b: _hist_nch_eta15->bins()) {
245 const size_t idx = b.index();
246 double sf = _axes[2].width(idx);
247 b.scaleW(1.0/sf);
248 }
249 for (auto& b: _hist_nch_eta30->bins()) {
250 const size_t idx = b.index();
251 double sf = _axes[3].width(idx);
252 b.scaleW(1.0/sf);
253 }
254 for (auto& b: _hist_nch_eta50->bins()) {
255 const size_t idx = b.index();
256 double sf = _axes[4].width(idx);
257 b.scaleW(1.0/sf);
258 }
259 }
260
261 /// @}
262
263
264 private:
265
266 /// Weight counter
267 CounterPtr _sumWPassed;
268
269 /// @name Histograms
270 /// @{
271 BinnedHistoPtr<string> _hist_nch;
272 BinnedHistoPtr<string> _hist_nch_eta05;
273 BinnedHistoPtr<string> _hist_nch_eta15;
274 BinnedHistoPtr<string> _hist_nch_eta30;
275 BinnedHistoPtr<string> _hist_nch_eta50;
276 BinnedHistoPtr<int> _hist_mean_nch;
277 YODA::Axis<double> _axes[5];
278 int Ecm;
279 /// @}
280
281 };
282
283
284
285 RIVET_DECLARE_ALIASED_PLUGIN(UA5_1989_I267179, UA5_1989_S1926373);
286
287}
|