Rivet analyses
Differential cross sections for associated production of a W boson and jets at 8 TeV
Experiment: CMS (LHC)
Inspire ID: 1491953
Status: VALIDATED
Authors: - Emanuela Barberis - B. Bhawandeep - Apichart Hortiangtham - Kadir Ocalan - Philippe Gras
References: - Phys.Rev. D95 (2017) 052002 - DOI: 10.1103/PhysRevD.95.052002 - arXiv: 1610.04222 - Expt page: CMS-SMP-14-023
Beams: p+ p+
Beam energies: (4000.0, 4000.0)GeV
Run details: - 8 TeV pp → W + jets.
Differential cross sections for a W boson produced in association with jets are measured in a data sample of proton-proton collisions at a center-of-mass energy of 8 TeV recorded with the CMS detector and corresponding to an integrated luminosity of 19.6 inverse femtobarns. The W bosons are identified through their decay into a muon and a neutrino. The cross sections are reported as functions of jet multiplicity, jet transverse momenta, and the scalar sum of jet transverse momenta (HT) for different jet multiplicities. Distributions of the angular correlations between the jets and the muon are examined, as well as the average number of jets as a function of HT and as a function of angular variables. The cross sections are measured in the fiducial region defined by a muon with pT > 25 GeV and pseudorapidity |η| < 2.1, and by a transverse mass between the muon and the missing transverse energy MT > 50 GeV. Jets are reconstructed using the anti-kT algorithm with a distance parameter R = 0.5, and only jets with pT > 30 GeV, |η| < 2.4, and a separation of ΔR > 0.5 from the muon are considered.
Source
code:CMS_2016_I1491953.cc
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/MissingMomentum.hh"
namespace Rivet {
/// @brief Differential cross sections for associated production of a W boson and jets at 8 TeV
class CMS_2016_I1491953 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2016_I1491953);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
LeptonFinder lf(0.1, Cuts::abseta < 2.4 && Cuts::abspid == PID::MUON);
declare(lf, "Muons");
declare(MissingMom(), "MET");
// Define veto FS
VetoedFinalState vfs;
vfs.addVetoOnThisFinalState(lf);
vfs.addVetoPairId(PID::MUON);
vfs.vetoNeutrinos();
FastJets fastjets(vfs, JetAlg::ANTIKT, 0.5);
declare(fastjets, "Jets");
book(_hist_Mult_exc ,1,1,1);
book(_hist_inc_WJetMult ,2,1,1);
book(_hist_addJetPt1j ,3,1,1);
book(_hist_addJetPt2j ,4,1,1);
book(_hist_addJetPt3j ,5,1,1);
book(_hist_addJetPt4j ,6,1,1);
book(_hist_addHt_1j ,7,1,1);
book(_hist_addHt_2j ,8,1,1);
book(_hist_addHt_3j ,9,1,1);
book(_hist_addHt_4j ,10,1,1);
book(_hist_diJetPt_2j ,11,1,1);
book(_hist_diJetPt_3j ,12,1,1);
book(_hist_diJetPt_4j ,13,1,1);
book(_hist_dijetM_2j ,14,1,1);
book(_hist_dijetM_3j ,15,1,1);
book(_hist_dijetM_4j ,16,1,1);
book(_hist_Jeteta1j ,17,1,1);
book(_hist_Jeteta2j ,18,1,1);
book(_hist_Jeteta3j ,19,1,1);
book(_hist_Jeteta4j ,20,1,1);
book(_hist_dyj1j2_2j ,21,1,1);
book(_hist_dyj1j2_3j ,22,1,1);
book(_hist_dyj1j2_4j ,23,1,1);
book(_hist_dyj1j3_3j ,24,1,1);
book(_hist_dyj2j3_3j ,25,1,1);
book(_hist_dyjFjB_2j ,26,1,1);
book(_hist_dyjFjB_3j ,27,1,1);
book(_hist_dyjFjB_4j ,28,1,1);
book(_hist_dphij1j2_2j ,29,1,1);
book(_hist_dphijFjB_2j ,30,1,1);
book(_hist_dRj1j2_2j ,31,1,1);
book(_hist_dphij1mu_1j ,32,1,1);
book(_hist_dphij2mu_2j ,33,1,1);
book(_hist_dphij3mu_3j ,34,1,1);
book(_hist_dphij4mu_4j ,35,1,1);
book(_hist_MeanNJht_1j ,36,1,1);
book(_hist_MeanNJht_2j ,37,1,1);
book(_hist_MeanNJdyj1j2_2j ,38,1,1);
book(_hist_MeanNJdyjFjB_2j ,39,1,1);
}
// Define function used for filiing inc Njets histo
void _fill(Histo1DPtr& _histJetMult, vector<FourMomentum>& finaljet_list) {
_histJetMult->fill(0);
for (size_t i = 0 ; i < finaljet_list.size() ; ++i) {
if (i == 7) break;
_histJetMult->fill(i+1); // inclusive multiplicity
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Identify the closest-matching l+MET to m == mW
const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
const Particles& mus = apply<LeptonFinder>(event, "Muons").particles();
const Particles mus_mtfilt = select(mus, [&](const Particle& m){ return mT(m, pmiss) > 0*GeV; });
const int ifound = closestMatchIndex(mus_mtfilt, pmiss, Kin::mass, 80.4*GeV);
// Make cuts on the identified mT and lepton
if (ifound < 0) vetoEvent;
const FourMomentum& lepton0 = mus_mtfilt[ifound].momentum();
const double WmT = mT(pmiss, lepton0);
if (WmT < 50.0*GeV) vetoEvent;
if (lepton0.abseta() > 2.1 || lepton0.pT() < 25.0*GeV) vetoEvent;
// Select final jets, ordered by decreasing pT
vector<FourMomentum> finaljet_list;
double HT = 0.0;
const Jets jListAll = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV);
for (const Jet& j : jListAll) {
if (j.abseta() < 2.4 && j.pT() > 30.0*GeV && deltaR(lepton0, j) > 0.5) {
finaljet_list.push_back(j.momentum());
HT += j.pT();
}
}
// Another jet list, sorted by increasing rapidity
vector<FourMomentum> jListRap = finaljet_list;
std::sort(jListRap.begin(), jListRap.end(), cmpMomByRap);
// Multiplicity exc plot.
if (finaljet_list.size()<=7) {
_hist_Mult_exc->fill(finaljet_list.size());
} else if (finaljet_list.size()>7){
_hist_Mult_exc->fill(7.);
}
// Multiplicity inc plot.
_fill(_hist_inc_WJetMult, finaljet_list);
if (finaljet_list.size()>=1) {
_hist_addJetPt1j->fill(finaljet_list[0].pT());
_hist_Jeteta1j->fill(fabs(finaljet_list[0].eta()));
_hist_addHt_1j->fill(HT);
_hist_dphij1mu_1j->fill( deltaPhi(finaljet_list[0].phi(), lepton0.phi()) );
_hist_MeanNJht_1j->fill( HT, finaljet_list.size());
}
if (finaljet_list.size()>=2) {
_hist_addJetPt2j->fill(finaljet_list[1].pT());
_hist_Jeteta2j->fill(fabs(finaljet_list[1].eta()));
_hist_addHt_2j->fill(HT);
_hist_dyj1j2_2j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
_hist_dyjFjB_2j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
_hist_dphij1j2_2j ->fill( deltaPhi(finaljet_list[0].phi(), finaljet_list[1].phi()));
_hist_dphijFjB_2j ->fill( deltaPhi(jListRap[0].phi(), jListRap[jListRap.size()-1].phi()) );
_hist_dijetM_2j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
_hist_diJetPt_2j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
_hist_dRj1j2_2j ->fill( deltaR(finaljet_list[0].rapidity(), finaljet_list[0].phi(), finaljet_list[1].rapidity(), finaljet_list[1].phi()));
_hist_dphij2mu_2j ->fill( deltaPhi(finaljet_list[1].phi(), lepton0.phi()) );
_hist_MeanNJht_2j->fill( HT, finaljet_list.size());
_hist_MeanNJdyj1j2_2j->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()), finaljet_list.size());
_hist_MeanNJdyjFjB_2j->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()), finaljet_list.size());
}
if (finaljet_list.size()>=3) {
_hist_addJetPt3j->fill(finaljet_list[2].pT());
_hist_Jeteta3j->fill(fabs(finaljet_list[2].eta()));
_hist_addHt_3j->fill(HT);
_hist_dyj1j2_3j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
_hist_dyj1j3_3j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[2].rapidity()));
_hist_dyj2j3_3j ->fill( fabs(finaljet_list[1].rapidity() - finaljet_list[2].rapidity()));
_hist_dyjFjB_3j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
_hist_dijetM_3j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
_hist_diJetPt_3j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
_hist_dphij3mu_3j->fill( deltaPhi(finaljet_list[2].phi(), lepton0.phi()) );
}
if (finaljet_list.size()>=4) {
_hist_addJetPt4j->fill(finaljet_list[3].pT());
_hist_Jeteta4j->fill(fabs(finaljet_list[3].eta()));
_hist_addHt_4j->fill(HT);
_hist_dyj1j2_4j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
_hist_dyjFjB_4j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
_hist_dijetM_4j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
_hist_diJetPt_4j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
_hist_dphij4mu_4j->fill( deltaPhi(finaljet_list[3].phi(), lepton0.phi()) );
}
} //void loop
/// Normalise histograms etc., after the run
void finalize() {
const double crossec = !std::isnan(crossSectionPerEvent()) ? crossSection() : 36703*picobarn;
if (std::isnan(crossSectionPerEvent())){
MSG_INFO("No valid cross-section given, using NNLO xsec calculated by FEWZ " << crossec/picobarn << " pb");
}
scale(_hist_Mult_exc, crossec/picobarn/sumOfWeights());
scale(_hist_inc_WJetMult, crossec/picobarn/sumOfWeights());
scale(_hist_addJetPt1j, crossec/picobarn/sumOfWeights());
scale(_hist_addJetPt2j, crossec/picobarn/sumOfWeights());
scale(_hist_addJetPt3j, crossec/picobarn/sumOfWeights());
scale(_hist_addJetPt4j, crossec/picobarn/sumOfWeights());
scale(_hist_Jeteta1j, crossec/picobarn/sumOfWeights());
scale(_hist_Jeteta2j, crossec/picobarn/sumOfWeights());
scale(_hist_Jeteta3j, crossec/picobarn/sumOfWeights());
scale(_hist_Jeteta4j, crossec/picobarn/sumOfWeights());
scale(_hist_addHt_1j, crossec/picobarn/sumOfWeights());
scale(_hist_addHt_2j, crossec/picobarn/sumOfWeights());
scale(_hist_addHt_3j, crossec/picobarn/sumOfWeights());
scale(_hist_addHt_4j, crossec/picobarn/sumOfWeights());
//-------------------------------------
scale(_hist_dyj1j2_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dyj1j2_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dyj1j2_4j, crossec/picobarn/sumOfWeights());
scale(_hist_dyjFjB_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dyjFjB_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dyjFjB_4j, crossec/picobarn/sumOfWeights());
scale(_hist_dyj1j3_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dyj2j3_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dphij1j2_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dphijFjB_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dRj1j2_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dijetM_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dijetM_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dijetM_4j, crossec/picobarn/sumOfWeights());
scale(_hist_diJetPt_2j, crossec/picobarn/sumOfWeights());
scale(_hist_diJetPt_3j, crossec/picobarn/sumOfWeights());
scale(_hist_diJetPt_4j, crossec/picobarn/sumOfWeights());
scale(_hist_dphij1mu_1j, crossec/picobarn/sumOfWeights());
scale(_hist_dphij2mu_2j, crossec/picobarn/sumOfWeights());
scale(_hist_dphij3mu_3j, crossec/picobarn/sumOfWeights());
scale(_hist_dphij4mu_4j, crossec/picobarn/sumOfWeights());
}
/// @}
private:
/// @name Histograms
/// @{
Histo1DPtr _hist_inc_WJetMult;
Histo1DPtr _hist_Mult_exc;
Histo1DPtr _hist_addJetPt1j;
Histo1DPtr _hist_addJetPt2j;
Histo1DPtr _hist_addJetPt3j;
Histo1DPtr _hist_addJetPt4j;
Histo1DPtr _hist_Jeteta1j;
Histo1DPtr _hist_Jeteta2j;
Histo1DPtr _hist_Jeteta3j;
Histo1DPtr _hist_Jeteta4j;
Histo1DPtr _hist_addHt_1j;
Histo1DPtr _hist_addHt_2j;
Histo1DPtr _hist_addHt_3j;
Histo1DPtr _hist_addHt_4j;
//-------------------------------------
Histo1DPtr _hist_dyj1j2_2j;
Histo1DPtr _hist_dyj1j2_3j;
Histo1DPtr _hist_dyj1j2_4j;
Histo1DPtr _hist_dyjFjB_2j;
Histo1DPtr _hist_dyjFjB_3j;
Histo1DPtr _hist_dyjFjB_4j;
Histo1DPtr _hist_dyj1j3_3j;
Histo1DPtr _hist_dyj2j3_3j;
Histo1DPtr _hist_dphij1j2_2j;
Histo1DPtr _hist_dphijFjB_2j;
Histo1DPtr _hist_dRj1j2_2j;
Histo1DPtr _hist_dijetM_2j;
Histo1DPtr _hist_dijetM_3j;
Histo1DPtr _hist_dijetM_4j;
Histo1DPtr _hist_diJetPt_2j;
Histo1DPtr _hist_diJetPt_3j;
Histo1DPtr _hist_diJetPt_4j;
Histo1DPtr _hist_dphij1mu_1j;
Histo1DPtr _hist_dphij2mu_2j;
Histo1DPtr _hist_dphij3mu_3j;
Histo1DPtr _hist_dphij4mu_4j;
//-------------------------------------
Profile1DPtr _hist_MeanNJht_1j;
Profile1DPtr _hist_MeanNJht_2j;
Profile1DPtr _hist_MeanNJdyj1j2_2j;
Profile1DPtr _hist_MeanNJdyjFjB_2j;
/// @}
};
RIVET_DECLARE_PLUGIN(CMS_2016_I1491953);
}