Rivet analyses referenceCMS_2017_I1598460Triple-differential dijet pT cross section and PDF constraints at 8 TeVExperiment: CMS (LHC) Inspire ID: 1598460 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
A measurement is presented of the triple-differential dijet cross section at a centre-of-mass energy of 8 TeV using 19.7 fb$^-1$ of data collected with the CMS detector in proton-proton collisions at the LHC. The cross section is measured as a function of the average transverse momentum, half the rapidity separation, and the boost of the two leading jets in the event. The cross section is corrected for detector effects and compared to calculations in perturbative quantum chromodynamics at next-to-leading order accuracy, complemented with electroweak and nonperturbative corrections. New constraints on parton distribution functions are obtained and the inferred value of the strong coupling constant is $\alpha_s(M_{Z})$ = 0.1199 $\pm$ 0.0015 (exp)$^{+0.0031}_{-0.0020}$ (theo), where M$_{Z}$ is the mass of the Z boson. Source code: CMS_2017_I1598460.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/FastJets.hh"
5
6namespace Rivet {
7
8
9 class CMS_2017_I1598460 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2017_I1598460);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 const FinalState fs;
23 declare(fs, "FinalState");
24 FastJets fj07(fs, JetAlg::ANTIKT, 0.7);
25 declare(fj07, "Jets");
26 /// @todo Book histograms here, e.g.:
27 for (int i = 0; i < 6; i++) {
28 Histo1DPtr tmp; _h_ybys.push_back(book(tmp, 2*i+1,1,1));
29 }
30 }
31
32
33 /// Perform the per-event analysis
34 void analyze(const Event& event) {
35 const FastJets& fj = apply<FastJets>(event,"Jets");
36 const Jets& jets = fj.jetsByPt(Cuts::pt > 50*GeV && Cuts::absrap < 5);
37
38 // Require two jets
39 if (jets.size() < 2) vetoEvent;
40
41 // Veto events if one of two leading jets |y|>3.0, otherwise
42 // the subleading jets can become the leading jets through jet selection
43 if (jets[0].absrap() > 3 || jets[1].absrap() > 3) vetoEvent;
44
45 double ystar = 0.5 * std::abs(jets[0].rap() - jets[1].rap());
46 double yboost = 0.5 * std::abs(jets[0].rap() + jets[1].rap());
47 double ptavg = 0.5 * (jets[0].pT() + jets[1].pT());
48
49 // Compute index of histogram to be filled: yb0ys0 --> 0 yb0ys1 --> 1 ...
50 size_t i = (size_t)yboost;
51 size_t j = (size_t)ystar;
52 size_t idx = j + 3*i - i*(i-1)/2;
53
54 _h_ybys[idx]->fill(ptavg/GeV);
55 }
56
57
58 /// Normalise histograms etc., after the run
59 void finalize() {
60 scale(_h_ybys, crossSection()/picobarn/sumOfWeights());
61 }
62
63 /// @}
64
65
66 vector<Histo1DPtr> _h_ybys;
67
68 };
69
70
71 RIVET_DECLARE_PLUGIN(CMS_2017_I1598460);
72
73}
|