rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2017_I1471287

Two- and multi-particle angular correlations in pp collisions at $\sqrt{s} = 13$ TeV.
Experiment: CMS (LHC)
Inspire ID: 1471287
Status: UNVALIDATED
Authors:
  • Christian Bierlich
References:
  • Phys.Lett. B765 (2017) 193-220
  • DOI:10.1016/j.physletb.2016.12.009
  • arXiv: 1606.06198
Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • Minimum bias QCD events.

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}