Rivet analyses referenceD0_2008_I792812Measurement of differential $Z/\gamma^*$ + jet + $X$ cross sectionsExperiment: D0 (Tevatron Run 2) Inspire ID: 792812 Status: VALIDATED Authors:
Beam energies: (980.0, 980.0) GeV Run details:
Cross sections as a function of pT and rapidity of the boson and pT and rapidity of the leading jet in the di-muon channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 1.0 fb$^{-1}$. Source code: D0_2008_I792812.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 /// @brief D0 differential Z/\f$ \gamma^* \f$ + jet + \f$ X \f$ cross sections
10 ///
11 /// @author Gavin Hesketh, Andy Buckley, Frank Siegert
12 class D0_2008_I792812 : public Analysis {
13 public:
14
15 RIVET_DEFAULT_ANALYSIS_CTOR(D0_2008_I792812);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms
22 void init() {
23
24 Cut cut = Cuts::abseta < 1.7 && Cuts::pT > 15*GeV;
25 DileptonFinder zfinder(91.2*GeV, 0.2, cut && Cuts::abspid == PID::MUON, Cuts::massIn(65*GeV, 115*GeV));
26 declare(zfinder, "DileptonFinder");
27
28 FastJets conefinder(zfinder.remainingFinalState(), JetAlg::D0ILCONE, 0.5);
29 declare(conefinder, "ConeFinder");
30
31 book(_sum_of_weights_inclusive, "sum_of_weights_inclusive");
32
33 book(_h_jet_pT_cross_section ,1, 1, 1);
34 book(_h_jet_pT_normalised ,1, 1, 2);
35 book(_h_jet_y_cross_section ,2, 1, 1);
36 book(_h_jet_y_normalised ,2, 1, 2);
37 book(_h_Z_pT_cross_section ,3, 1, 1);
38 book(_h_Z_pT_normalised ,3, 1, 2);
39 book(_h_Z_y_cross_section ,4, 1, 1);
40 book(_h_Z_y_normalised ,4, 1, 2);
41 book(_h_total_cross_section ,5, 1, 1);
42 }
43
44
45 // Do the analysis
46 void analyze(const Event& e) {
47 const DileptonFinder& zfinder = apply<DileptonFinder>(e, "DileptonFinder");
48 if (zfinder.bosons().size()==1) {
49 _sum_of_weights_inclusive->fill();
50 const JetFinder& jetpro = apply<JetFinder>(e, "ConeFinder");
51 const Jets& jets = jetpro.jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.8);
52
53 // Return if there are no jets:
54 if (jets.size() < 1) {
55 MSG_DEBUG("Skipping event " << numEvents() << " because no jets pass cuts ");
56 vetoEvent;
57 }
58
59 const FourMomentum Zmom = zfinder.bosons()[0].momentum();
60
61 // In jet pT
62 _h_jet_pT_cross_section->fill( jets[0].pT());
63 _h_jet_pT_normalised->fill( jets[0].pT());
64 _h_jet_y_cross_section->fill( fabs(jets[0].rapidity()));
65 _h_jet_y_normalised->fill( fabs(jets[0].rapidity()));
66
67 // In Z pT
68 _h_Z_pT_cross_section->fill(Zmom.pT());
69 _h_Z_pT_normalised->fill(Zmom.pT());
70 _h_Z_y_cross_section->fill(Zmom.absrap());
71 _h_Z_y_normalised->fill(Zmom.absrap());
72
73 _h_total_cross_section->fill(1960);
74 }
75 }
76
77
78 /// Finalize
79 void finalize() {
80 const double invlumi = crossSection()/picobarn/sumOfWeights();
81 scale(_h_total_cross_section, invlumi);
82 scale(_h_jet_pT_cross_section, invlumi);
83 scale(_h_jet_y_cross_section, invlumi);
84 scale(_h_Z_pT_cross_section, invlumi);
85 scale(_h_Z_y_cross_section, invlumi);
86
87 double factor=1/dbl(*_sum_of_weights_inclusive);
88 if (_sum_of_weights_inclusive->val() == 0) factor = 0;
89 scale(_h_jet_pT_normalised, factor);
90 scale(_h_jet_y_normalised, factor);
91 scale(_h_Z_pT_normalised, factor);
92 scale(_h_Z_y_normalised, factor);
93 }
94
95 /// @}
96
97
98 private:
99
100 /// @name Histograms
101 /// @{
102 Histo1DPtr _h_jet_pT_cross_section;
103 Histo1DPtr _h_jet_y_cross_section;
104 Histo1DPtr _h_Z_pT_cross_section;
105 Histo1DPtr _h_Z_y_cross_section;
106 Histo1DPtr _h_total_cross_section;
107 Histo1DPtr _h_jet_pT_normalised;
108 Histo1DPtr _h_jet_y_normalised;
109 Histo1DPtr _h_Z_pT_normalised;
110 Histo1DPtr _h_Z_y_normalised;
111 /// @}
112
113 CounterPtr _sum_of_weights_inclusive;
114
115 };
116
117
118 RIVET_DECLARE_ALIASED_PLUGIN(D0_2008_I792812, D0_2008_S7863608);
119
120}
|