Rivet analyses
Measurement of the ratio σ(Z/γ* + n jets)/σ(Z/γ*)
Experiment: D0 (Tevatron Run 2)
Inspire ID: 724239
Status: VALIDATED
Authors: - Giulio Lenzi - Frank Siegert
References: - hep-ex/0608052
Beams: p- p+
Beam energies: (980.0, 980.0)GeV
Run details: - pp̄ → e+e− + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than 75 < mee < 105 GeV.
Cross sections as a function of $\pT$ of the three leading jets and n-jet cross section ratios in pp̄ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 0.4 fb−1.
Source
code:D0_2008_I724239.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DileptonFinder.hh"
#include "Rivet/Projections/FastJets.hh"
namespace Rivet {
/// D0 measurement of the ratio \f$ \sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*) \f$
class D0_2008_I724239 : public Analysis {
public:
RIVET_DEFAULT_ANALYSIS_CTOR(D0_2008_I724239);
/// @name Analysis methods
/// @{
// Book histograms
void init() {
DileptonFinder zfinder(91.2*GeV, 0.2, Cuts::abspid == PID::ELECTRON, Cuts::massIn(40*GeV, 200*GeV));
declare(zfinder, "DileptonFinder");
FastJets conefinder(zfinder.remainingFinalState(), JetAlg::D0ILCONE, 0.5);
declare(conefinder, "ConeFinder");
book(_crossSectionRatio, 1, 1, 1);
book(_pTjet1, 2, 1, 1);
book(_pTjet2, 3, 1, 1);
book(_pTjet3, 4, 1, 1);
}
/// Do the analysis
void analyze(const Event& event) {
if (_edges.empty()) _edges = _crossSectionRatio->xEdges();
const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
if (zfinder.bosons().size() != 1) vetoEvent;
FourMomentum e0 = zfinder.constituents()[0].mom();
FourMomentum e1 = zfinder.constituents()[1].mom();
Jets jets = apply<JetFinder>(event, "ConeFinder").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.5);
idiscard(jets, deltaRLess(e0, 0.4));
idiscard(jets, deltaRLess(e1, 0.4));
// For normalisation of crossSection data (includes events with no jets passing cuts)
_crossSectionRatio->fill(string("INC"));
// Fill jet pT and multiplicities
if (jets.size() >= 1) {
_crossSectionRatio->fill(_edges[0]);
_pTjet1->fill(jets[0].pT());
}
if (jets.size() >= 2) {
_crossSectionRatio->fill(_edges[1]);
_pTjet2->fill(jets[1].pT());
}
if (jets.size() >= 3) {
_crossSectionRatio->fill(_edges[2]);
_pTjet3->fill(jets[2].pT());
}
if (jets.size() >= 4) {
_crossSectionRatio->fill(_edges[3]);
}
}
/// Finalize
void finalize() {
// Now divide by the inclusive result (in the otherflow)
scale(_crossSectionRatio, 1.0/_crossSectionRatio->bin(0).sumW());
// Normalise jet pTs to integrals of data
// @note There is no other way to do this, because these quantities are not detector-corrected
normalize(_pTjet1, refData(2, 1, 1).auc());
normalize(_pTjet2, refData(3, 1, 1).auc());
normalize(_pTjet3, refData(4, 1, 1).auc());
}
/// @}
private:
/// @name Histograms
/// @{
BinnedHistoPtr<string> _crossSectionRatio;
Histo1DPtr _pTjet1, _pTjet2, _pTjet3;
vector<string> _edges;
/// @}
};
RIVET_DECLARE_ALIASED_PLUGIN(D0_2008_I724239, D0_2008_S6879055);
}Aliases: - D0_2008_S6879055