Rivet analyses referenceD0_2008_I724239Measurement of the ratio $\sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*)$Experiment: D0 (Tevatron Run 2) Inspire ID: 724239 Status: VALIDATED Authors:
Beam energies: (980.0, 980.0) GeV Run details:
Cross sections as a function of $p_\perp$ of the three leading jets and $n$-jet cross section ratios in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4 \text{fb}^{-1}$. Source code: D0_2008_I724239.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/DileptonFinder.hh"
4#include "Rivet/Projections/FastJets.hh"
5
6namespace Rivet {
7
8
9 /// D0 measurement of the ratio \f$ \sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*) \f$
10 class D0_2008_I724239 : public Analysis {
11 public:
12
13 RIVET_DEFAULT_ANALYSIS_CTOR(D0_2008_I724239);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 // Book histograms
20 void init() {
21 DileptonFinder zfinder(91.2*GeV, 0.2, Cuts::abspid == PID::ELECTRON, Cuts::massIn(40*GeV, 200*GeV));
22 declare(zfinder, "DileptonFinder");
23
24 FastJets conefinder(zfinder.remainingFinalState(), JetAlg::D0ILCONE, 0.5);
25 declare(conefinder, "ConeFinder");
26
27 book(_crossSectionRatio, 1, 1, 1);
28 book(_pTjet1, 2, 1, 1);
29 book(_pTjet2, 3, 1, 1);
30 book(_pTjet3, 4, 1, 1);
31 }
32
33
34 /// Do the analysis
35 void analyze(const Event& event) {
36
37 if (_edges.empty()) _edges = _crossSectionRatio->xEdges();
38
39 const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
40 if (zfinder.bosons().size() != 1) vetoEvent;
41
42 FourMomentum e0 = zfinder.constituents()[0].mom();
43 FourMomentum e1 = zfinder.constituents()[1].mom();
44
45 Jets jets = apply<JetFinder>(event, "ConeFinder").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.5);
46 idiscard(jets, deltaRLess(e0, 0.4));
47 idiscard(jets, deltaRLess(e1, 0.4));
48
49 // For normalisation of crossSection data (includes events with no jets passing cuts)
50 _crossSectionRatio->fill(string("INC"));
51
52 // Fill jet pT and multiplicities
53 if (jets.size() >= 1) {
54 _crossSectionRatio->fill(_edges[0]);
55 _pTjet1->fill(jets[0].pT());
56 }
57 if (jets.size() >= 2) {
58 _crossSectionRatio->fill(_edges[1]);
59 _pTjet2->fill(jets[1].pT());
60 }
61 if (jets.size() >= 3) {
62 _crossSectionRatio->fill(_edges[2]);
63 _pTjet3->fill(jets[2].pT());
64 }
65 if (jets.size() >= 4) {
66 _crossSectionRatio->fill(_edges[3]);
67 }
68 }
69
70
71 /// Finalize
72 void finalize() {
73 // Now divide by the inclusive result (in the otherflow)
74 scale(_crossSectionRatio, 1.0/_crossSectionRatio->bin(0).sumW());
75
76 // Normalise jet pTs to integrals of data
77 // @note There is no other way to do this, because these quantities are not detector-corrected
78 normalize(_pTjet1, refData(2, 1, 1).auc());
79 normalize(_pTjet2, refData(3, 1, 1).auc());
80 normalize(_pTjet3, refData(4, 1, 1).auc());
81 }
82
83 /// @}
84
85
86 private:
87
88 /// @name Histograms
89 /// @{
90 BinnedHistoPtr<string> _crossSectionRatio;
91 Histo1DPtr _pTjet1, _pTjet2, _pTjet3;
92 vector<string> _edges;
93 /// @}
94
95 };
96
97
98 RIVET_DECLARE_ALIASED_PLUGIN(D0_2008_I724239, D0_2008_S6879055);
99
100}
|