Rivet Analyses Reference

CMS_2016_I1471281

Measurement of the transverse momentum spectra of weak vector bosons produced in proton-proton collisions at $\sqrt{s} = 8$ TeV
Experiment: CMS (LHC)
Inspire ID: 1471281
Status: VALIDATED
Authors:
  • SangEun Lee <d4space@google.com>
  • Khakimjan Butanov <khakimjan@yahoo.com>
  • Hammid Yusupov <hamid_yusupov@yahoo.com>
  • SangIl Pak <spak@cern.ch>
References:
  • JHEP 02(2016)096
  • DOI:10.1007/JHEP02(2017)096
  • arXiv: 1606.05864
Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • Run MC generators with $W$ and $Z$ bosons decaying to muons in $pp$ collisions at $sqrt{s} = 8$ TeV.

A measurement of the $W$ and $Z$ bosons production differential cross section as a function of transverse momentum of weak vector bosons in $pp$ collisions at a centre-of-mass energy of 8 TeV. Both $W$ and $Z$ distributions are pre-FSR level and events are generated by Powheg. For the $Z$ boson analysis, the dimuon invariant mass selection, $60 < m < 120$ GeV.

Source code: CMS_2016_I1471281.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/WFinder.hh"
#include "Rivet/Projections/ZFinder.hh"
#include "Rivet/Tools/BinnedHistogram.hh"

namespace Rivet {


  /// Measurement of the W and Z bosons pT produced in pp collisions at sqrt(s)=8 TeV
  class CMS_2016_I1471281 : public Analysis {
    public:

      /// Constructor
      CMS_2016_I1471281(std::string name="CMS_2016_I1471281")
        : Analysis(name)
        {
          _mode = 0; // init 
        }


      /// @name Analysis methods
      //@{

      /// Book histograms and initialise projections before the run
      void init() {
        
        // Get options from the new option system
        // default to both.
        if ( getOption("VMODE") == "BOTH" ) _mode = 0;
        if ( getOption("VMODE") == "W" )    _mode = 1;
        if ( getOption("VMODE") == "Z" )    _mode = 2;

        // Set up projections
        FinalState fs;

        Cut cut_mu = Cuts::abseta < 2.1 && Cuts::pT > 20*GeV;

        // Dressed Ws ...
        WFinder wmunu_Finder(fs, cut_mu, PID::MUON, 0*GeV, YODA::MAXDOUBLE, 0*GeV, 0, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY, WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
        declare(wmunu_Finder, "Wmunu_Finder");

        // Dressed Zs ... 
        ZFinder zmumu_Finder(fs, cut_mu, PID::MUON, 60*GeV, 120*GeV, 0, ZFinder::ChargedLeptons::PROMPT, ZFinder::ClusterPhotons::NODECAY, ZFinder::AddPhotons::NO);
        declare(zmumu_Finder, "Zmumu_Finder");

        // Histograms
        if (_mode == 0 || _mode == 1) {
          book(_hist_WtoMuNuPt, 8, 1, 1);
        }
        if (_mode == 0 || _mode == 2) {
          book(_hist_ZtoMuMuPt, 9, 1, 1);
        }
      }


      /// Perform the per-event analysis
      void analyze(const Event& event) {

        if (_mode == 0 || _mode == 1) {
          // Get the W bosons - muon decay channel
          const WFinder& wmunu_Finder = apply<WFinder>(event, "Wmunu_Finder");
          if (!wmunu_Finder.bosons().empty()) {
            const FourMomentum pWmunu = wmunu_Finder.bosons()[0].momentum();
            _hist_WtoMuNuPt->fill(pWmunu.pT()/GeV);
          }
        }

        if (_mode == 0 || _mode == 2) {
          // Get the Z bosons - muon decay channel
          const ZFinder& zmumu_Finder = apply<ZFinder>(event, "Zmumu_Finder");
          if (!zmumu_Finder.bosons().empty()) {
            const FourMomentum pZmumu = zmumu_Finder.bosons()[0].momentum();
            _hist_ZtoMuMuPt->fill(pZmumu.pT()/GeV);
          }
        }

      }


      /// Normalise histograms etc., after the run
      void finalize() {

        MSG_INFO("Cross section = " << std::setfill(' ') << std::setw(14) << std::fixed << std::setprecision(3) << crossSection() << " pb");
        MSG_INFO("# Events      = " << std::setfill(' ') << std::setw(14) << std::fixed << std::setprecision(3) << numEvents() );
        MSG_INFO("SumW          = " << std::setfill(' ') << std::setw(14) << std::fixed << std::setprecision(3) << sumOfWeights());

        if (_mode == 0 || _mode == 1) {
          normalize(_hist_WtoMuNuPt);
        }

        if (_mode == 0 || _mode == 2) {
          normalize(_hist_ZtoMuMuPt);
        }
              

      }

      //@}

    protected:

      // Data members
      size_t _mode;


    private:


      /// @name Histograms

      Histo1DPtr _hist_WtoMuNuPt;
      Histo1DPtr _hist_ZtoMuMuPt;

  };

  // The hook for the plugin system
  RIVET_DECLARE_PLUGIN(CMS_2016_I1471281);

}