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