Rivet analyses referenceCMS_2017_I1471287Two- and multi-particle angular correlations in pp collisions at $\sqrt{s} = 13$ TeV.Experiment: CMS (LHC) Inspire ID: 1471287 Status: UNVALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
Measurement of two- and multi-particle angular correlations of charged particles as well as $K^0_s$ and $\Lambda + \bar{\Lambda}$. Measurements are done $p_\perp$ integrated as function of event multiplicity, and $p_\perp$ differential in two bins of event multiplicity; high and low. The experimental analysis performs also a subtraction procedure of low multiplicity results from high multiplicity ones. Such a subtraction is not performed in the RIVET analysis (due to the difficulty of performing the same procedure on MC), and as such, only unsubtracted values are used. Bin edges for integrated correlations are not reported in HepData, and are as such based simply on midpoints between reported points. Source code: CMS_2017_I1471287.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/ChargedFinalState.hh"
4#include "Rivet/Projections/PrimaryParticles.hh"
5#include "Rivet/Tools/Correlators.hh"
6
7namespace Rivet {
8
9
10 /// @brief Add a short analysis description here
11 class CMS_2017_I1471287 : public CumulantAnalysis {
12 public:
13
14 /// Constructor
15 CMS_2017_I1471287() : CumulantAnalysis("CMS_2017_I1471287") { };
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23 // A projection for charged tracks to manage centrality, corresponding
24 // to CMS offline tracks.
25 ChargedFinalState cfsMult(Cuts::abseta < 2.4 && Cuts::pT > 0.4*GeV);
26 declare(cfsMult, "CFSMult");
27
28 // The positive eta side used for rapidity gap, integrated.
29 const ChargedFinalState& cfsp = ChargedFinalState(Cuts::eta > 1.0 &&
30 Cuts::eta < 2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 3.0*GeV);
31 declare(cfsp, "CFSP");
32 // ..negative ditto.
33 const ChargedFinalState& cfsn = ChargedFinalState(Cuts::eta < -1.0 &&
34 Cuts::eta > -2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 3.0*GeV);
35 declare(cfsn, "CFSN");
36
37
38 // The positive eta side used for rapidity gap, differential, charged particles.
39 const ChargedFinalState& cfsppT = ChargedFinalState(Cuts::eta > 1.0 &&
40 Cuts::eta < 2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
41 declare(cfsppT, "CFSPPT");
42 // ..negative ditto.
43 const ChargedFinalState& cfsnpT = ChargedFinalState(Cuts::eta < -1.0 &&
44 Cuts::eta > -2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
45 declare(cfsnpT, "CFSNPT");
46
47 // The positive eta side used for rapidity gap, differential, Kaons.
48 const PrimaryParticles& kfsppT = PrimaryParticles({310},Cuts::eta > 1.0 &&
49 Cuts::eta < 2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
50 declare(kfsppT, "KFSP");
51 // ..negative ditto.
52 const PrimaryParticles& kfsnpT = PrimaryParticles({310},Cuts::eta < -1.0 &&
53 Cuts::eta > -2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
54 declare(kfsnpT, "KFSN");
55 // The positive eta side used for rapidity gap, differential, Lambda.
56 const PrimaryParticles& lfsppT = PrimaryParticles({3122},Cuts::eta > 1.0 &&
57 Cuts::eta < 2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
58 declare(lfsppT, "LFSP");
59 // ..negative ditto.
60 const PrimaryParticles& lfsnpT = PrimaryParticles({3122},Cuts::eta < -1.0 &&
61 Cuts::eta > -2.0 && Cuts::pT > 0.3*GeV && Cuts::pT < 6.0*GeV);
62 declare(lfsnpT, "LFSN");
63
64 // v22 |delta eta| > 2 (fig 4a)
65 book(h_v22, 1, 1, 1);
66 // v32 |delta eta| > 2 (fig 4b)
67 book(h_v32, 3, 1, 1);
68 // v22(pT) high mult., high pT (fig 6a)
69 book(h_v22pT, 11, 1, 1);
70 // v22(pT) charged low mult. (fig. 7a)
71 book(h_v22pTh, 17, 1, 1);
72 // v22(pT) K0S low mult. (fig. 7a)
73 book(h_v22pTK, 18, 1, 1);
74 // v22(pT) Lambda low mult. (fig. 7a)
75 book(h_v22pTL, 19, 1, 1);
76 // v22(pT) K0S high mult. (fig. 7b)
77 book(h_v22pTKc, 21, 1, 1);
78 // v22(pT) Lambda high mult. (fig. 7b)
79 book(h_v22pTLc, 22, 1, 1);
80 // c24 (fig. 9a)
81 book(h_c24, 28, 1, 1);
82 // c26 (fig. 9b)
83 book(h_c26, 31, 1, 1);
84
85 // Corresponding event averaged correlators.
86 ec22 = bookECorrelatorGap<2,2>("ec22",refData(1,1,1));
87 ec32 = bookECorrelatorGap<3,2>("ec32",refData(3,1,1));
88
89 // ... pT binned
90 ec22pT = bookECorrelatorGap<2,2>("ec22pT",refData(11,1,1));
91 ec22pTh = bookECorrelatorGap<2,2>("ec22pTh",refData(17,1,1));
92 ec22pTK = bookECorrelatorGap<2,2>("ec22pTK",refData(18,1,1));
93 ec22pTL = bookECorrelatorGap<2,2>("ec22pTL",refData(19,1,1));
94 ec22pTKc = bookECorrelatorGap<2,2>("ec22pTKc",refData(21,1,1));
95 ec22pTLc = bookECorrelatorGap<2,2>("ec22pTLc",refData(22,1,1));
96
97 // Maximal N and P for the gapped.
98 pair<int, int> max = getMaxValues();
99
100 // For the four particle cumulant.
101 ec22_4 = bookECorrelator<2,2>("ec22_4",refData(28,1,1));
102 ec24_4 = bookECorrelator<2,4>("ec24_4",refData(28,1,1));
103
104 // For the six particle cumulant.
105 ec22_6 = bookECorrelator<2,2>("ec22_6",refData(31,1,1));
106 ec24_6 = bookECorrelator<2,4>("ec24_6",refData(31,1,1));
107 ec26_6 = bookECorrelator<2,6>("ec26_6",refData(31,1,1));
108
109 // Maximal N and P for the higher orders.
110 pair<int, int> maxH = getMaxValues();
111
112 // Declare correlator projections.
113 // For integrated.
114 declare(Correlators(cfsMult, maxH.first, maxH.second),"CH");
115
116 // ... gapped
117 declare(Correlators(cfsp, max.first, max.second),"CPos");
118 declare(Correlators(cfsn, max.first, max.second),"CNeg");
119
120 // For pT differential, charged particles, low multiplicity.
121 declare(Correlators(cfsppT, max.first, max.second, refData(17,1,1)),"CPosLowPT");
122 declare(Correlators(cfsnpT, max.first, max.second, refData(17,1,1)),"CNegLowPT");
123
124 // For pT differential, charged particles, high multiplicity.
125 declare(Correlators(cfsppT, max.first, max.second, refData(11,1,1)),"CPosHighPT");
126 declare(Correlators(cfsnpT, max.first, max.second, refData(11,1,1)),"CNegHighPT");
127
128 // For pT differential, kaons. low multiplicity.
129 declare(Correlators(kfsppT, max.first, max.second, refData(18,1,1)),"CPosLowPTK");
130 declare(Correlators(kfsnpT, max.first, max.second, refData(18,1,1)),"CNegLowPTK");
131
132 // For pT differential, kaons. high multiplicity.
133 declare(Correlators(kfsppT, max.first, max.second, refData(21,1,1)),"CPosHighPTK");
134 declare(Correlators(kfsnpT, max.first, max.second, refData(21,1,1)),"CNegHighPTK");
135
136 // For pT differential, lambda. low multiplicity.
137 declare(Correlators(lfsppT, max.first, max.second, refData(19,1,1)),"CPosLowPTL");
138 declare(Correlators(lfsnpT, max.first, max.second, refData(19,1,1)),"CNegLowPTL");
139
140 // For pT differential, lambda. high multiplicity.
141 declare(Correlators(lfsppT, max.first, max.second, refData(22,1,1)),"CPosHighPTL");
142 declare(Correlators(lfsnpT, max.first, max.second, refData(22,1,1)),"CNegHighPTL");
143
144
145 }
146
147
148 /// Perform the per-event analysis
149 void analyze(const Event& event) {
150 const double nTrk = apply<ChargedFinalState>(event, "CFSMult").particles().size();
151 if (nTrk < 10) vetoEvent;
152
153 // The correlators.
154 const Correlators& ch = apply<Correlators>(event, "CH");
155
156 const Correlators& cp = apply<Correlators>(event, "CPos");
157 const Correlators& cn = apply<Correlators>(event, "CNeg");
158
159 const Correlators& cpLow = apply<Correlators>(event, "CPosLowPT");
160 const Correlators& cnLow = apply<Correlators>(event, "CNegLowPT");
161
162 const Correlators& cpHigh = apply<Correlators>(event, "CPosHighPT");
163 const Correlators& cnHigh = apply<Correlators>(event, "CNegHighPT");
164
165 const Correlators& cpLowK = apply<Correlators>(event, "CPosLowPTK");
166 const Correlators& cnLowK = apply<Correlators>(event, "CNegLowPTK");
167
168 const Correlators& cpHighK = apply<Correlators>(event, "CPosHighPTK");
169 const Correlators& cnHighK = apply<Correlators>(event, "CNegHighPTK");
170
171 const Correlators& cpLowL = apply<Correlators>(event, "CPosLowPTL");
172 const Correlators& cnLowL = apply<Correlators>(event, "CNegLowPTL");
173
174 const Correlators& cpHighL = apply<Correlators>(event, "CPosHighPTL");
175 const Correlators& cnHighL = apply<Correlators>(event, "CNegHighPTL");
176
177 ec22->fill(nTrk, cp, cn);
178 ec32->fill(nTrk, cp, cn);
179
180 ec22_4->fill(nTrk, ch);
181 ec24_4->fill(nTrk, ch);
182 ec22_6->fill(nTrk, ch);
183 ec24_6->fill(nTrk, ch);
184 ec26_6->fill(nTrk, ch);
185
186 if (nTrk < 20) {
187 ec22pTh->fill(cpLow, cnLow);
188 ec22pTK->fill(cpLowK, cnLowK);
189 ec22pTL->fill(cpLowL, cnLowL);
190 } else if(nTrk >= 105 && nTrk < 150) { //< AB: brace was missing so condition only applied to first fill: seems wrong
191 ec22pT->fill(cpHigh, cnHigh);
192 ec22pTKc->fill(cpHighK, cnHighK);
193 ec22pTLc->fill(cpHighL, cnHighL);
194 }
195 }
196
197
198 /// Normalise histograms etc., after the run
199 void finalize() {
200 cnTwoInt(h_v22, ec22);
201 cnTwoInt(h_v32, ec32);
202 vnTwoDiff(h_v22pT, ec22pT);
203 vnTwoDiff(h_v22pTh, ec22pTh);
204 cnFourInt(h_c24, ec22_4, ec24_4);
205 cnSixInt(h_c26, ec22_6, ec24_6, ec26_6);
206
207 // Set correct reference flow for pid flow.
208 ec22pTK->setReference(ec22pTh->getReference());
209 vnTwoDiff(h_v22pTK, ec22pTK);
210 ec22pTL->setReference(ec22pTh->getReference());
211 vnTwoDiff(h_v22pTL, ec22pTL);
212 ec22pTKc->setReference(ec22pT->getReference());
213 vnTwoDiff(h_v22pTKc, ec22pTKc);
214 ec22pTLc->setReference(ec22pT->getReference());
215 vnTwoDiff(h_v22pTLc, ec22pTLc);
216
217 }
218
219 /// @}
220 Scatter2DPtr h_v22;
221 Scatter2DPtr h_v32;
222 Scatter2DPtr h_v22pT;
223 Scatter2DPtr h_v22pTh;
224 Scatter2DPtr h_v22pTK;
225 Scatter2DPtr h_v22pTL;
226 Scatter2DPtr h_v22pTKc;
227 Scatter2DPtr h_v22pTLc;
228 Scatter2DPtr h_c24;
229 Scatter2DPtr h_c26;
230
231 ECorrPtr ec22;
232 ECorrPtr ec32;
233
234 ECorrPtr ec22_4;
235 ECorrPtr ec24_4;
236
237 ECorrPtr ec22_6;
238 ECorrPtr ec24_6;
239 ECorrPtr ec26_6;
240
241 ECorrPtr ec22pT;
242 ECorrPtr ec22pTh;
243 ECorrPtr ec22pTK;
244 ECorrPtr ec22pTL;
245 ECorrPtr ec22pTKc;
246 ECorrPtr ec22pTLc;
247
248 };
249
250
251 RIVET_DECLARE_PLUGIN(CMS_2017_I1471287);
252
253
254}
|