Rivet analyses referenceUA5_1988_I263399Charged particle correlations in UA5 $p\bar{p}$ NSD events at $\sqrt{s} = 200$, 546 and 900 GeVExperiment: UA5 (CERN SPS) Inspire ID: 263399 Status: VALIDATED Authors:
Beam energies: (100.0, 100.0); (273.0, 273.0); (450.0, 450.0) GeV Run details:
Data on two-particle pseudorapidity and multiplicity correlations of charged particles for non single-diffractive $p\\bar{p}$ collisions at c.m. energies of 200, 546 and 900 GeV. Pseudorapidity correlations are interpreted in terms of a cluster model, which has been motivated by this and other experiments, require on average about two charged particles per cluster. The decay width of the clusters in pseudorapidity is approximately independent of multiplicity and of c.m. energy. The investigations of correlations in terms of pseudorapidity gaps confirm the picture of cluster production. The strength of forward--backward multiplicity correlations increases linearly with ins and depends strongly on position and size of the pseudorapidity gap separating the forward and backward interval. All our correlation studies can be understood in terms of a cluster model in which clusters contain on average about two charged particles, i.e. are of similar magnitude to earlier estimates from the ISR. Beam energy must be specified as analysis option "ENERGY" (200, 546 or 900 GeV) when rivet-merging samples. Source code: UA5_1988_I263399.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/ChargedFinalState.hh"
4#include "Rivet/Projections/Beam.hh"
5#include "Rivet/Projections/TriggerUA5.hh"
6
7namespace Rivet {
8
9
10 /// @brief UA5 charged particle correlations at 200, 546 and 900 GeV
11 class UA5_1988_I263399 : public Analysis {
12 public:
13
14 UA5_1988_I263399()
15 : Analysis("UA5_1988_I263399")
16 { }
17
18
19 /// @name Analysis methods
20 /// @{
21
22 void init() {
23 // Projections
24 declare(TriggerUA5(), "Trigger");
25
26 // Symmetric eta interval
27 declare(ChargedFinalState((Cuts::etaIn(-0.5, 0.5))), "CFS05");
28
29 // Asymmetric intervals first
30 // Forward eta intervals
31 declare(ChargedFinalState((Cuts::etaIn(0.0, 1.0))), "CFS10F");
32 declare(ChargedFinalState((Cuts::etaIn(0.5, 1.5))), "CFS15F");
33 declare(ChargedFinalState((Cuts::etaIn(1.0, 2.0))), "CFS20F");
34 declare(ChargedFinalState((Cuts::etaIn(1.5, 2.5))), "CFS25F");
35 declare(ChargedFinalState((Cuts::etaIn(2.0, 3.0))), "CFS30F");
36 declare(ChargedFinalState((Cuts::etaIn(2.5, 3.5))), "CFS35F");
37 declare(ChargedFinalState((Cuts::etaIn(3.0, 4.0))), "CFS40F");
38
39 // Backward eta intervals
40 declare(ChargedFinalState((Cuts::etaIn(-1.0, 0.0))), "CFS10B");
41 declare(ChargedFinalState((Cuts::etaIn(-1.5, -0.5))), "CFS15B");
42 declare(ChargedFinalState((Cuts::etaIn(-2.0, -1.0))), "CFS20B");
43 declare(ChargedFinalState((Cuts::etaIn(-2.5, -1.5))), "CFS25B");
44 declare(ChargedFinalState((Cuts::etaIn(-3.0, -2.0))), "CFS30B");
45 declare(ChargedFinalState((Cuts::etaIn(-3.5, -2.5))), "CFS35B");
46 declare(ChargedFinalState((Cuts::etaIn(-4.0, -3.0))), "CFS40B");
47
48 // Histogram booking, we have sqrt(s) = 200, 546 and 900 GeV
49 // TODO use Estimate1D to be able to output errors
50 if (isCompatibleWithSqrtS(200.0*GeV)) {
51 book(_hist_correl, 2, 1, 1);
52 book(_hist_correl_asym, 3, 1, 1);
53 } else if (isCompatibleWithSqrtS(546.0*GeV)) {
54 book(_hist_correl, 2, 1, 2);
55 book(_hist_correl_asym, 3, 1, 2);
56 } else if (isCompatibleWithSqrtS(900.0*GeV)) {
57 book(_hist_correl, 2, 1, 3);
58 book(_hist_correl_asym, 3, 1, 3);
59 }
60
61 book(_sumWPassed, "sumW");
62 }
63
64
65 void analyze(const Event& event) {
66 // Trigger
67 const bool trigger = apply<TriggerUA5>(event, "Trigger").nsdDecision();
68 if (!trigger) vetoEvent;
69 _sumWPassed->fill();
70
71 // Count forward/backward particles
72 n_10f.push_back(apply<ChargedFinalState>(event, "CFS10F").size());
73 n_15f.push_back(apply<ChargedFinalState>(event, "CFS15F").size());
74 n_20f.push_back(apply<ChargedFinalState>(event, "CFS20F").size());
75 n_25f.push_back(apply<ChargedFinalState>(event, "CFS25F").size());
76 n_30f.push_back(apply<ChargedFinalState>(event, "CFS30F").size());
77 n_35f.push_back(apply<ChargedFinalState>(event, "CFS35F").size());
78 n_40f.push_back(apply<ChargedFinalState>(event, "CFS40F").size());
79 //
80 n_10b.push_back(apply<ChargedFinalState>(event, "CFS10B").size());
81 n_15b.push_back(apply<ChargedFinalState>(event, "CFS15B").size());
82 n_20b.push_back(apply<ChargedFinalState>(event, "CFS20B").size());
83 n_25b.push_back(apply<ChargedFinalState>(event, "CFS25B").size());
84 n_30b.push_back(apply<ChargedFinalState>(event, "CFS30B").size());
85 n_35b.push_back(apply<ChargedFinalState>(event, "CFS35B").size());
86 n_40b.push_back(apply<ChargedFinalState>(event, "CFS40B").size());
87 //
88 n_05 .push_back(apply<ChargedFinalState>(event, "CFS05").size());
89 }
90
91
92 void finalize() {
93 // The correlation strength is defined in formulas
94 // 4.1 and 4.2
95
96 // Fill histos, gap width histo comes first
97 // * Set the errors as Delta b / sqrt(sumWPassed) with
98 // Delta b being the absolute uncertainty of b according to
99 // Gaussian error-propagation (linear limit) and assuming
100 // Poissonian uncertainties for the number of particles in
101 // the eta-intervals
102 //
103
104 // Fill the DPS
105 pair<double,double> corr;
106 corr = correlation_helper(n_10f, n_10b, _sumWPassed);
107 _hist_correl->bin(1).set(corr.first, corr.second);
108 corr = correlation_helper(n_15f, n_15b, _sumWPassed);
109 _hist_correl->bin(2).set(corr.first, corr.second);
110 corr = correlation_helper(n_20f, n_20b, _sumWPassed);
111 _hist_correl->bin(3).set(corr.first, corr.second);
112 corr = correlation_helper(n_25f, n_25b, _sumWPassed);
113 _hist_correl->bin(4).set(corr.first, corr.second);
114 corr = correlation_helper(n_30f, n_30b, _sumWPassed);
115 _hist_correl->bin(5).set(corr.first, corr.second);
116 corr = correlation_helper(n_35f, n_35b, _sumWPassed);
117 _hist_correl->bin(6).set(corr.first, corr.second);
118 corr = correlation_helper(n_40f, n_40b, _sumWPassed);
119 _hist_correl->bin(7).set(corr.first, corr.second);
120
121 // Fill gap-center histo (Fig 15)
122 //
123 // The first bin contains the c_str strengths of
124 // the gap size histo that has ane eta gap of two
125 //
126 // Fill in correlation strength for assymetric intervals,
127 // see Tab. 5
128 // Fill the DPS
129 corr = correlation_helper(n_20f, n_20b, _sumWPassed);
130 _hist_correl_asym->bin(1).set(corr.first, corr.second);
131 corr = correlation_helper(n_25f, n_15b, _sumWPassed);
132 _hist_correl_asym->bin(2).set(corr.first, corr.second);
133 corr = correlation_helper(n_30f, n_10b, _sumWPassed);
134 _hist_correl_asym->bin(3).set(corr.first, corr.second);
135 corr = correlation_helper(n_35f, n_05 , _sumWPassed);
136 _hist_correl_asym->bin(4).set(corr.first, corr.second);
137 corr = correlation_helper(n_40f, n_10f, _sumWPassed);
138 _hist_correl_asym->bin(5).set(corr.first, corr.second);
139
140 }
141
142 /// @}
143
144
145 private:
146
147 /// Helper function to fill correlation points into scatter plot
148 pair<double,double> correlation_helper(const vector<int>& nf, const vector<int>& nb, CounterPtr sumWPassed) {
149 return make_pair(correlation(nf, nb), correlation_err(nf, nb)/sqrt(sumWPassed->val()));
150 }
151
152 /// Counter
153 CounterPtr _sumWPassed;
154
155
156 /// @name Vectors for storing the number of particles in the different eta intervals per event.
157 /// @todo A better way is needed to make this re-entrant
158 /// @{
159 vector<int> n_10f, n_15f, n_20f, n_25f, n_30f, n_35f, n_40f;
160 vector<int> n_10b, n_15b, n_20b, n_25b, n_30b, n_35b, n_40b;
161 vector<int> n_05;
162 /// @}
163
164
165 /// @name Histograms
166 /// @{
167 // Symmetric eta intervals
168 Estimate1DPtr _hist_correl;
169 // For asymmetric eta intervals
170 Estimate1DPtr _hist_correl_asym;
171 /// @}
172
173 };
174
175
176 RIVET_DECLARE_ALIASED_PLUGIN(UA5_1988_I263399, UA5_1988_S1867512);
177
178}
|