Rivet analyses referenceATLAS_2012_I1083318W+jets production at 7 TeVExperiment: ATLAS (LHC) Inspire ID: 1083318 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
Differential cross-sections of properties of the four leading jets in W+jets production, using the full 2010 dataset of 36 pb−1. Observables include jet multiplicities, pT, HT, angular distances, and others. All observables are available using jets with pT>30 and pT>20 GeV. Source code: ATLAS_2012_I1083318.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/IdentifiedFinalState.hh"
4#include "Rivet/Projections/VetoedFinalState.hh"
5#include "Rivet/Projections/MissingMomentum.hh"
6#include "Rivet/Projections/FastJets.hh"
7#include "Rivet/Projections/LeptonFinder.hh"
8#include "Rivet/Projections/LeadingParticlesFinalState.hh"
9
10namespace Rivet {
11
12
13 /// ATLAS W + jets production at 7 TeV
14 class ATLAS_2012_I1083318 : public Analysis {
15 public:
16
17 /// Constructor
18 RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2012_I1083318);
19
20
21 /// @name Analysis methods
22 /// @{
23
24 /// Book histograms and initialise projections before the run
25 void init() {
26
27 FinalState fs;
28 Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 20*GeV;
29 LeptonFinder leptons(0.1, cuts && (Cuts::abspid == PID::ELECTRON || Cuts::abspid == PID::MUON));
30 declare(leptons, "leptons");
31
32 // Leading neutrinos for Etmiss
33 LeadingParticlesFinalState neutrinos(fs);
34 neutrinos.addParticleIdPair(PID::NU_E);
35 neutrinos.addParticleIdPair(PID::NU_MU);
36 neutrinos.setLeadingOnly(true);
37 declare(neutrinos, "neutrinos");
38
39 // Input for the jets: "Neutrinos, electrons, and muons from decays of the
40 // massive W boson were not used"
41 VetoedFinalState veto;
42 veto.addVetoOnThisFinalState(leptons);
43 veto.addVetoOnThisFinalState(neutrinos);
44 FastJets jets(veto, JetAlg::ANTIKT, 0.4, JetMuons::ALL, JetInvisibles::DECAY);
45 declare(jets, "jets");
46
47 for (size_t i = 0; i < 2; ++i) {
48 book(_h_NjetIncl[i] ,1, 1, i+1);
49 book(_h_RatioNjetIncl[i], 2, 1, i+1);
50 book(_h_FirstJetPt_1jet[i] ,3, 1, i+1);
51 book(_h_FirstJetPt_2jet[i] ,4, 1, i+1);
52 book(_h_FirstJetPt_3jet[i] ,5, 1, i+1);
53 book(_h_FirstJetPt_4jet[i] ,6, 1, i+1);
54 book(_h_SecondJetPt_2jet[i] ,7, 1, i+1);
55 book(_h_SecondJetPt_3jet[i] ,8, 1, i+1);
56 book(_h_SecondJetPt_4jet[i] ,9, 1, i+1);
57 book(_h_ThirdJetPt_3jet[i] ,10, 1, i+1);
58 book(_h_ThirdJetPt_4jet[i] ,11, 1, i+1);
59 book(_h_FourthJetPt_4jet[i] ,12, 1, i+1);
60 book(_h_Ht_1jet[i] ,13, 1, i+1);
61 book(_h_Ht_2jet[i] ,14, 1, i+1);
62 book(_h_Ht_3jet[i] ,15, 1, i+1);
63 book(_h_Ht_4jet[i] ,16, 1, i+1);
64 book(_h_Minv_2jet[i] ,17, 1, i+1);
65 book(_h_Minv_3jet[i] ,18, 1, i+1);
66 book(_h_Minv_4jet[i] ,19, 1, i+1);
67 book(_h_JetRapidity[i] ,20, 1, i+1);
68 book(_h_DeltaYElecJet[i] ,21, 1, i+1);
69 book(_h_SumYElecJet[i] ,22, 1, i+1);
70 book(_h_DeltaR_2jet[i] ,23, 1, i+1);
71 book(_h_DeltaY_2jet[i] ,24, 1, i+1);
72 book(_h_DeltaPhi_2jet[i] ,25, 1, i+1);
73 }
74 }
75
76
77 /// Perform the per-event analysis
78 void analyze(const Event& event) {
79 const DressedLeptons& leptons = apply<LeptonFinder>(event, "leptons").dressedLeptons();
80 Particles neutrinos = apply<FinalState>(event, "neutrinos").particlesByPt();
81
82 if (leptons.size() != 1 || (neutrinos.size() == 0)) vetoEvent;
83
84 FourMomentum lepton = leptons[0].momentum();
85 FourMomentum p_miss = neutrinos[0].momentum();
86 if (p_miss.Et() < 25.0*GeV) vetoEvent;
87
88 double mT = sqrt(2.0 * lepton.pT() * p_miss.Et() * (1.0 - cos( lepton.phi()-p_miss.phi()) ) );
89 if (mT < 40.0*GeV) vetoEvent;
90
91 double jetcuts[] = { 30.0*GeV, 20.0*GeV };
92 for (size_t i = 0; i < 2; ++i) {
93 Jets jets = apply<FastJets>(event, "jets").jetsByPt(Cuts::absrap < 4.4 && Cuts::pT > jetcuts[i]);
94 idiscard(jets, deltaRLess(lepton, 0.5));
95
96 const double HT = sum(jets, Kin::pT, lepton.pT() + p_miss.pT());
97
98 _h_NjetIncl[i]->fill(0.0);
99
100 // Njet>=1 observables
101 if (jets.size() < 1) continue;
102 _h_NjetIncl[i]->fill(1.0);
103 _h_FirstJetPt_1jet[i]->fill(jets[0].pT());
104 _h_JetRapidity[i]->fill(jets[0].rapidity());
105 _h_Ht_1jet[i]->fill(HT);
106 _h_DeltaYElecJet[i]->fill(lepton.rapidity()-jets[0].rapidity());
107 _h_SumYElecJet[i]->fill(lepton.rapidity()+jets[0].rapidity());
108
109 // Njet>=2 observables
110 if (jets.size() < 2) continue;
111 _h_NjetIncl[i]->fill(2.0);
112 _h_FirstJetPt_2jet[i]->fill(jets[0].pT());
113 _h_SecondJetPt_2jet[i]->fill(jets[1].pT());
114 _h_Ht_2jet[i]->fill(HT);
115 double m2_2jet = (jets[0].mom()+jets[1].mom()).mass2();
116 _h_Minv_2jet[i]->fill(m2_2jet>0.0 ? sqrt(m2_2jet) : 0.0);
117 _h_DeltaR_2jet[i]->fill(deltaR(jets[0], jets[1]));
118 _h_DeltaY_2jet[i]->fill(jets[0].rapidity()-jets[1].rapidity());
119 _h_DeltaPhi_2jet[i]->fill(deltaPhi(jets[0], jets[1]));
120
121 // Njet>=3 observables
122 if (jets.size() < 3) continue;
123 _h_NjetIncl[i]->fill(3.0);
124 _h_FirstJetPt_3jet[i]->fill(jets[0].pT());
125 _h_SecondJetPt_3jet[i]->fill(jets[1].pT());
126 _h_ThirdJetPt_3jet[i]->fill(jets[2].pT());
127 _h_Ht_3jet[i]->fill(HT);
128 double m2_3jet = (jets[0].mom()+jets[1].mom()+jets[2].mom()).mass2();
129 _h_Minv_3jet[i]->fill(m2_3jet>0.0 ? sqrt(m2_3jet) : 0.0);
130
131 // Njet>=4 observables
132 if (jets.size() < 4) continue;
133 _h_NjetIncl[i]->fill(4.0);
134 _h_FirstJetPt_4jet[i]->fill(jets[0].pT());
135 _h_SecondJetPt_4jet[i]->fill(jets[1].pT());
136 _h_ThirdJetPt_4jet[i]->fill(jets[2].pT());
137 _h_FourthJetPt_4jet[i]->fill(jets[3].pT());
138 _h_Ht_4jet[i]->fill(HT);
139 double m2_4jet = (jets[0].mom()+jets[1].mom()+jets[2].mom()+jets[3].mom()).mass2();
140 _h_Minv_4jet[i]->fill(m2_4jet>0.0 ? sqrt(m2_4jet) : 0.0);
141
142 // Njet>=5 observables
143 if (jets.size() < 5) continue;
144 _h_NjetIncl[i]->fill(5.0);
145 }
146 }
147
148
149 /// Normalise histograms etc., after the run
150 void finalize() {
151 for (size_t i = 0; i < 2; ++i) {
152
153 // Construct jet multiplicity ratio
154 for (size_t n = 1; n < _h_NjetIncl[i]->numBins(); ++n) {
155 const auto& b0 = _h_NjetIncl[i]->bin(n);
156 const auto& b1 = _h_NjetIncl[i]->bin(n+1);
157 double val = 0.0, err= 0.0;
158 if (b0.sumW() && b1.sumW()) {
159 val = b1.sumW() / b0.sumW();
160 err = b1.sumW() / b0.sumW() * (b0.relErrW() + b1.relErrW());
161 }
162 _h_RatioNjetIncl[i]->bin(n).set(val, err);
163 }
164
165 // Scale all histos to the cross section
166 const double factor = crossSection()/picobarn/sumOfWeights();
167 scale(_h_DeltaPhi_2jet[i], factor);
168 scale(_h_DeltaR_2jet[i], factor);
169 scale(_h_DeltaY_2jet[i], factor);
170 scale(_h_DeltaYElecJet[i], factor);
171 scale(_h_FirstJetPt_1jet[i], factor);
172 scale(_h_FirstJetPt_2jet[i], factor);
173 scale(_h_FirstJetPt_3jet[i], factor);
174 scale(_h_FirstJetPt_4jet[i], factor);
175 scale(_h_FourthJetPt_4jet[i], factor);
176 scale(_h_Ht_1jet[i], factor);
177 scale(_h_Ht_2jet[i], factor);
178 scale(_h_Ht_3jet[i], factor);
179 scale(_h_Ht_4jet[i], factor);
180 scale(_h_JetRapidity[i], factor);
181 scale(_h_Minv_2jet[i], factor);
182 scale(_h_Minv_3jet[i], factor);
183 scale(_h_Minv_4jet[i], factor);
184 scale(_h_NjetIncl[i], factor);
185 scale(_h_SecondJetPt_2jet[i], factor);
186 scale(_h_SecondJetPt_3jet[i], factor);
187 scale(_h_SecondJetPt_4jet[i], factor);
188 scale(_h_SumYElecJet[i], factor);
189 scale(_h_ThirdJetPt_3jet[i], factor);
190 scale(_h_ThirdJetPt_4jet[i], factor);
191 }
192 }
193
194 /// @}
195
196
197 private:
198
199 /// @name Histograms
200 /// @{
201 Histo1DPtr _h_DeltaPhi_2jet[2];
202 Histo1DPtr _h_DeltaR_2jet[2];
203 Histo1DPtr _h_DeltaY_2jet[2];
204 Histo1DPtr _h_DeltaYElecJet[2];
205 Histo1DPtr _h_FirstJetPt_1jet[2];
206 Histo1DPtr _h_FirstJetPt_2jet[2];
207 Histo1DPtr _h_FirstJetPt_3jet[2];
208 Histo1DPtr _h_FirstJetPt_4jet[2];
209 Histo1DPtr _h_FourthJetPt_4jet[2];
210 Histo1DPtr _h_Ht_1jet[2];
211 Histo1DPtr _h_Ht_2jet[2];
212 Histo1DPtr _h_Ht_3jet[2];
213 Histo1DPtr _h_Ht_4jet[2];
214 Histo1DPtr _h_JetRapidity[2];
215 Histo1DPtr _h_Minv_2jet[2];
216 Histo1DPtr _h_Minv_3jet[2];
217 Histo1DPtr _h_Minv_4jet[2];
218 Histo1DPtr _h_NjetIncl[2];
219 Estimate1DPtr _h_RatioNjetIncl[2];
220 Histo1DPtr _h_SecondJetPt_2jet[2];
221 Histo1DPtr _h_SecondJetPt_3jet[2];
222 Histo1DPtr _h_SecondJetPt_4jet[2];
223 Histo1DPtr _h_SumYElecJet[2];
224 Histo1DPtr _h_ThirdJetPt_3jet[2];
225 Histo1DPtr _h_ThirdJetPt_4jet[2];
226 /// @}
227
228
229 };
230
231
232
233 RIVET_DECLARE_PLUGIN(ATLAS_2012_I1083318);
234
235}
|