rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

MC_WWJETS

Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production
Experiment: ()
Status: VALIDATED
Authors:
  • Frank Siegert
No references listed
Beams: * *
Beam energies: ANY
Run details:
  • $WW$ + jets analysis.

In addition to the typical jet observables this analysis contains observables related to properties of the WW-pair momentum, correlations between the WW, properties of the W bosons, properties of the leptons, correlations between the opposite charge leptons and correlations with jets.

Source code: MC_WWJETS.cc
  1// -*- C++ -*-
  2#include "Rivet/Analyses/MC_JetAnalysis.hh"
  3#include "Rivet/Projections/WFinder.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/VetoedFinalState.hh"
  6
  7namespace Rivet {
  8
  9
 10
 11
 12  /// @brief MC validation analysis for W^+[enu]W^-[munu] + jets events
 13  class MC_WWJETS : public MC_JetAnalysis {
 14  public:
 15
 16    /// Default constructor
 17    MC_WWJETS()
 18      : MC_JetAnalysis("MC_WWJETS", 4, "Jets")
 19    {    }
 20
 21
 22    /// @name Analysis methods
 23    //@{
 24
 25    /// Book histograms
 26    void init() {
 27      FinalState fs;
 28      WFinder wenufinder(fs, Cuts::abseta < 3.5 && Cuts::pT > 25*GeV, PID::ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
 29      declare(wenufinder, "WenuFinder");
 30
 31      VetoedFinalState wmnuinput;
 32      wmnuinput.addVetoOnThisFinalState(wenufinder);
 33      WFinder wmnufinder(wmnuinput, Cuts::abseta < 3.5 && Cuts::pT > 25*GeV, PID::MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
 34      declare(wmnufinder, "WmnuFinder");
 35
 36      VetoedFinalState jetinput;
 37      jetinput
 38          .addVetoOnThisFinalState(wenufinder)
 39          .addVetoOnThisFinalState(wmnufinder);
 40      FastJets jetpro(jetinput, FastJets::ANTIKT, 0.4);
 41      declare(jetpro, "Jets");
 42
 43      // correlations with jets
 44      book(_h_WW_jet1_deta ,"WW_jet1_deta", 70, -7.0, 7.0);
 45      book(_h_WW_jet1_dR ,"WW_jet1_dR", 25, 1.5, 7.0);
 46      book(_h_We_jet1_dR ,"We_jet1_dR", 25, 0.0, 7.0);
 47
 48      // global stuff
 49      book(_h_HT ,"HT", logspace(100, 100.0, 0.5*(sqrtS()>0.?sqrtS():14000.)));
 50      book(_h_jets_m_12 ,"jets_m_12", logspace(100, 1.0, 0.25*(sqrtS()>0.?sqrtS():14000.)));
 51
 52      MC_JetAnalysis::init();
 53    }
 54
 55
 56
 57    /// Do the analysis
 58    void analyze(const Event& e) {
 59      const double weight = 1.0;
 60
 61      const WFinder& wenufinder = apply<WFinder>(e, "WenuFinder");
 62      if (wenufinder.bosons().size() !=1 ) vetoEvent;
 63
 64      const WFinder& wmnufinder = apply<WFinder>(e, "WmnuFinder");
 65      if (wmnufinder.bosons().size() !=1 ) vetoEvent;
 66
 67      FourMomentum wenu = wenufinder.bosons()[0].momentum();
 68      FourMomentum wmnu = wmnufinder.bosons()[0].momentum();
 69      FourMomentum ww = wenu + wmnu;
 70      // find leptons
 71      FourMomentum ep = wenufinder.constituentLeptons()[0].momentum();
 72      FourMomentum enu = wenufinder.constituentNeutrinos()[0].momentum();
 73      FourMomentum mm = wmnufinder.constituentLeptons()[0].momentum();
 74      FourMomentum mnu = wmnufinder.constituentNeutrinos()[0].momentum();
 75
 76      const Jets& jets = apply<FastJets>(e, "Jets").jetsByPt(_jetptcut);
 77      if (jets.size() > 0) {
 78        _h_WW_jet1_deta->fill(ww.eta()-jets[0].eta(), weight);
 79        _h_WW_jet1_dR->fill(deltaR(ww, jets[0].momentum()), weight);
 80        _h_We_jet1_dR->fill(deltaR(ep, jets[0].momentum()), weight);
 81      }
 82
 83      double HT = ep.pT() + mm.pT() + FourMomentum(enu+mnu).pT();
 84      for (const Jet& jet : jets) HT += jet.pT();
 85      if (HT > 0.0) _h_HT->fill(HT/GeV, weight);
 86
 87      if (jets.size() > 1) {
 88        const FourMomentum jet1 = jets[0].momentum();
 89        const FourMomentum jet2 = jets[1].momentum();
 90        _h_jets_m_12->fill((jet1+jet2).mass()/GeV, weight);
 91      }
 92
 93      MC_JetAnalysis::analyze(e);
 94    }
 95
 96
 97    /// Finalize
 98    void finalize() {
 99      const double norm = crossSection()/picobarn/sumOfWeights();
100      scale(_h_WW_jet1_deta, norm);
101      scale(_h_WW_jet1_dR, norm);
102      scale(_h_We_jet1_dR, norm);
103      scale(_h_jets_m_12, norm);
104      scale(_h_HT, norm);
105      MC_JetAnalysis::finalize();
106    }
107
108    //@}
109
110
111  private:
112
113    /// @name Histograms
114    //@{
115    Histo1DPtr _h_WW_jet1_deta;
116    Histo1DPtr _h_WW_jet1_dR;
117    Histo1DPtr _h_We_jet1_dR;
118    Histo1DPtr _h_jets_m_12;
119    Histo1DPtr _h_HT;
120    //@}
121
122  };
123
124
125
126  // The hook for the plugin system
127  RIVET_DECLARE_PLUGIN(MC_WWJETS);
128
129}