Rivet analyses referenceATLAS_2017_I1609253Multijet transverse energy-energy correlations (TEEC) at 8 TeVExperiment: ATLAS (LHC) Inspire ID: 1609253 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
Measurements of transverse energy-energy correlations and their associated asymmetries in multi-jet events using the ATLAS detector at the LHC are presented. The data used correspond to $\sqrt{s} = 8$ TeV proton-proton collisions with an integrated luminosity of 20.2 fb$^{-1}$. The results are presented in bins of the scalar sum of the transverse momenta of the two leading jets, unfolded to the particle level and compared to the predictions from Monte Carlo simulations. A comparison with next-to-leading-order perturbative QCD is also performed, showing excellent agreement within the uncertainties. From this comparison, the value of the strong coupling constant is extracted for different energy regimes, thus testing the running of $\alpha_\text{s}(\mu)$ predicted in QCD up to scales over 1 TeV. A global fit to the transverse energy-energy correlation distributions yields $\alpha_\text{s}(m_Z) = 0.1162\pm 0.0011\text{(exp.)}^{+0.0084}_{-0.0070}\text{(theo.)}$, while a global fit to the asymmetry distributions yields a value of $\alpha_\text{s}(m_Z) = 0.1196\pm 0.0013\text{(exp.)}^{+0.0075}_{-0.0045}\text{(theo.)}$. Source code: ATLAS_2017_I1609253.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 /// @brief Multijet transverse energy-energy correlations (TEEC) at 8 TeV
10 class ATLAS_2017_I1609253 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2017_I1609253);
15
16
17 /// Initialization, called once before running
18 void init() {
19
20 // Projections
21 const FastJets jets(FinalState(), FastJets::ANTIKT, 0.4, JetAlg::Muons::ALL, JetAlg::Invisibles::ALL);
22 declare(jets, "Jets");
23
24 // Book histograms
25 book(_hist_EEC1 , 1, 1, 1);
26 book(_hist_AEEC1, 2, 1, 1);
27 book(_hist_EEC2 , 3, 1, 1);
28 book(_hist_AEEC2, 4, 1, 1);
29 book(_hist_EEC3 , 5, 1, 1);
30 book(_hist_AEEC3, 6, 1, 1);
31 book(_hist_EEC4 , 7, 1, 1);
32 book(_hist_AEEC4, 8, 1, 1);
33 book(_hist_EEC5 , 9, 1, 1);
34 book(_hist_AEEC5, 10, 1, 1);
35 book(_hist_EEC6 , 11, 1, 1);
36 book(_hist_AEEC6, 12, 1, 1);
37 }
38
39
40 void analyze(const Event& event) {
41
42 const Jets& jets = applyProjection<FastJets>(event, "Jets").jetsByPt(Cuts::abseta < 2.5 && Cuts::pT > 100*GeV);
43 if (jets.size() < 2) vetoEvent;
44
45 double sumPt12 = jets[0].pt() + jets[1].pt();
46 if (sumPt12 < 800*GeV) vetoEvent;
47
48 double sumEt = 0.;
49 for (const Jet& j : jets) sumEt += j.Et();
50
51 for (const Jet& j1 : jets) {
52 double et1 = j1.Et();
53
54 for (const Jet& j2 : jets) {
55 double et2 = j2.Et();
56
57 double etWeight = et1*et2/(sumEt*sumEt);
58 double dPhi = deltaPhi(j1, j2);
59 double cosPhi = cos(dPhi);
60 if (cos(dPhi) == 1.0) cosPhi = 0.9999;
61
62 if (sumPt12 > 800*GeV && sumPt12 <= 850*GeV) _hist_EEC1->fill(cosPhi, etWeight);
63 if (sumPt12 > 850*GeV && sumPt12 <= 900*GeV) _hist_EEC2->fill(cosPhi, etWeight);
64 if (sumPt12 > 900*GeV && sumPt12 <= 1000*GeV) _hist_EEC3->fill(cosPhi, etWeight);
65 if (sumPt12 > 1000*GeV && sumPt12 <= 1100*GeV) _hist_EEC4->fill(cosPhi, etWeight);
66 if (sumPt12 > 1100*GeV && sumPt12 <= 1400*GeV) _hist_EEC5->fill(cosPhi, etWeight);
67 if (sumPt12 > 1400*GeV) _hist_EEC6->fill(cosPhi, etWeight);
68 }
69 }
70 }
71
72
73 void finalize() {
74
75 normalize(_hist_EEC1);
76 normalize(_hist_EEC2);
77 normalize(_hist_EEC3);
78 normalize(_hist_EEC4);
79 normalize(_hist_EEC5);
80 normalize(_hist_EEC6);
81
82 vector<Point2D> points1, points2, points3, points4, points5, points6;
83 size_t nBins = _hist_EEC1->numBins();
84 for (size_t k = 0; k < nBins/2; ++k) {
85 double x = _hist_EEC1->bin(k).midpoint(); double ex = _hist_EEC1->bin(k).xWidth()/2;
86
87 double y1 = _hist_EEC1->bin(k).height() - _hist_EEC1->bin(nBins-(k+1)).height();
88 double ey1 = sqrt( pow(_hist_EEC1->bin(k).heightErr(),2) + pow(_hist_EEC1->bin(nBins-(k+1)).heightErr(),2) );
89 points1.push_back(Point2D(x,y1,ex,ey1));
90
91 double y2 = _hist_EEC2->bin(k).height() - _hist_EEC2->bin(nBins-(k+1)).height();
92 double ey2 = sqrt( pow(_hist_EEC2->bin(k).heightErr(),2) + pow(_hist_EEC2->bin(nBins-(k+1)).heightErr(),2) );
93 points2.push_back(Point2D(x,y2,ex,ey2));
94
95 double y3 = _hist_EEC3->bin(k).height() - _hist_EEC3->bin(nBins-(k+1)).height();
96 double ey3 = sqrt( pow(_hist_EEC3->bin(k).heightErr(),2) + pow(_hist_EEC3->bin(nBins-(k+1)).heightErr(),2) );
97 points3.push_back(Point2D(x,y3,ex,ey3));
98
99 double y4 = _hist_EEC4->bin(k).height() - _hist_EEC4->bin(nBins-(k+1)).height();
100 double ey4 = sqrt( pow(_hist_EEC4->bin(k).heightErr(),2) + pow(_hist_EEC4->bin(nBins-(k+1)).heightErr(),2) );
101 points4.push_back(Point2D(x,y4,ex,ey4));
102
103 double y5 = _hist_EEC5->bin(k).height() - _hist_EEC5->bin(nBins-(k+1)).height();
104 double ey5 = sqrt( pow(_hist_EEC5->bin(k).heightErr(),2) + pow(_hist_EEC5->bin(nBins-(k+1)).heightErr(),2) );
105 points5.push_back(Point2D(x,y5,ex,ey5));
106
107 double y6 = _hist_EEC6->bin(k).height() - _hist_EEC6->bin(nBins-(k+1)).height();
108 double ey6 = sqrt( pow(_hist_EEC6->bin(k).heightErr(),2) + pow(_hist_EEC6->bin(nBins-(k+1)).heightErr(),2) );
109 points6.push_back(Point2D(x,y6,ex,ey6));
110 }
111
112 _hist_AEEC1->addPoints(points1);
113 _hist_AEEC2->addPoints(points2);
114 _hist_AEEC3->addPoints(points3);
115 _hist_AEEC4->addPoints(points4);
116 _hist_AEEC5->addPoints(points5);
117 _hist_AEEC6->addPoints(points6);
118 }
119
120
121 private:
122
123 Histo1DPtr _hist_EEC1, _hist_EEC2, _hist_EEC3, _hist_EEC4, _hist_EEC5, _hist_EEC6;
124 Scatter2DPtr _hist_AEEC1, _hist_AEEC2, _hist_AEEC3, _hist_AEEC4, _hist_AEEC5, _hist_AEEC6;
125
126 };
127
128
129 // The hook for the plugin system
130 RIVET_DECLARE_PLUGIN(ATLAS_2017_I1609253);
131
132
133}
|