Processing math: 100%
rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2012_I941555

Measurement of differential Z/γ pT and y
Experiment: CMS (LHC)
Inspire ID: 941555
Status: VALIDATED
Authors:
  • Luca Perrozzi
  • Justin Hugon
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • ppμ+μ+X 7 TeV. Needs mass cut on lepton pair to avoid photon singularity, restrict Z/γ mass range to roughly 50GeV/c2<mμμ<130GeV/c2 for efficiency. Result is corrected for QED FSR (i.e. leptons are dressed), so turn off in generator.

Cross section as a function of pT and y of the Z boson decaying into muons in p p collisions at s = 7 TeV. pT and y cross sections are measured for 60<mμμ<120 GeV. The pT cross section is measured for lepton pT>20 GeV and η<2.1, while the y cross section is extrapolated to all lepton pT and η. This measurement was performed using 36 pb1 of data collected during 2010 with the CMS detector at the LHC.

Source code: CMS_2012_I941555.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/DileptonFinder.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief CMS Z pT and rapidity in Drell-Yan events at 7 TeV
  9  ///
 10  /// @author Justin Hugon, Luca Perrozzi
 11  class CMS_2012_I941555 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2012_I941555);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    void init() {
 22
 23      // Set up projections
 24      /// @todo Really?: was DileptonFinder zfinder_dressed_mu_pt(-2.1, 2.1, 20, PID::MUON, 60*GeV, 120*GeV, 0.2, false, true);
 25      Cut cuts = Cuts::abseta < 2.1 && Cuts::pT > 20*GeV;
 26      DileptonFinder zfinder_dressed_mu_pt(91.2*GeV, 0.2, cuts && Cuts::abspid == PID::MUON, Cuts::massIn(60*GeV, 120*GeV));
 27      declare(zfinder_dressed_mu_pt, "DileptonFinder_dressed_mu_pt");
 28      DileptonFinder zfinder_dressed_el_pt(91.2*GeV, 0.1, cuts && Cuts::abspid == PID::ELECTRON, Cuts::massIn(60*GeV, 120*GeV));
 29      declare(zfinder_dressed_el_pt, "DileptonFinder_dressed_el_pt");
 30
 31      DileptonFinder zfinder_dressed_mu_rap(91.2*GeV, 0.1, Cuts::abspid == PID::MUON, Cuts::massIn(60*GeV, 120*GeV));
 32      declare(zfinder_dressed_mu_rap, "DileptonFinder_dressed_mu_rap");
 33      DileptonFinder zfinder_dressed_el_rap(91.2*GeV, 0.1, Cuts::abspid == PID::ELECTRON, Cuts::massIn(60*GeV, 120*GeV));
 34      declare(zfinder_dressed_el_rap, "DileptonFinder_dressed_el_rap");
 35
 36      // Book histograms
 37      book(_hist_zrap_mu_dressed      , 1, 1, 1);  // muon "dressed" rapidity
 38      book(_hist_zrap_el_dressed      , 1, 1, 2);  // electron "dressed" rapidity
 39      book(_hist_zrap_comb_dressed    , 1, 1, 3);  // electron "dressed" rapidity
 40
 41      book(_hist_zpt_mu_dressed       , 2, 1, 1);  // muon "dressed" pt
 42      book(_hist_zpt_el_dressed       , 2, 1, 2);  // electron "dressed" pt
 43      book(_hist_zpt_comb_dressed     , 2, 1, 3);  // electron "dressed" pt
 44
 45      book(_hist_zptpeak_mu_dressed   , 3, 1, 1);  // muon "dressed" pt peak
 46      book(_hist_zptpeak_el_dressed   , 3, 1, 2);  // electron "dressed" pt peak
 47      book(_hist_zptpeak_comb_dressed , 3, 1, 3);  // electron "dressed" pt peak
 48    }
 49
 50
 51    /// Do the analysis
 52    void analyze(const Event& evt) {
 53
 54      const DileptonFinder& zfinder_dressed_mu_rap = apply<DileptonFinder>(evt, "DileptonFinder_dressed_mu_rap");
 55      if (!zfinder_dressed_mu_rap.bosons().empty()) {
 56        const FourMomentum pZ = zfinder_dressed_mu_rap.bosons()[0].momentum();
 57        _hist_zrap_mu_dressed->fill(pZ.absrapidity());
 58        _hist_zrap_comb_dressed->fill(pZ.absrapidity());
 59      }
 60
 61      const DileptonFinder& zfinder_dressed_mu_pt = apply<DileptonFinder>(evt, "DileptonFinder_dressed_mu_pt");
 62      if (!zfinder_dressed_mu_pt.bosons().empty()) {
 63        const FourMomentum pZ = zfinder_dressed_mu_pt.bosons()[0].momentum();
 64        _hist_zpt_mu_dressed->fill(pZ.pT()/GeV);
 65        _hist_zpt_comb_dressed->fill(pZ.pT()/GeV);
 66        if (pZ.pT() < 30*GeV) {
 67          _hist_zptpeak_mu_dressed->fill(pZ.pT()/GeV);
 68          _hist_zptpeak_comb_dressed->fill(pZ.pT()/GeV);
 69        }
 70      }
 71
 72      const DileptonFinder& zfinder_dressed_el_rap = apply<DileptonFinder>(evt, "DileptonFinder_dressed_el_rap");
 73      if (!zfinder_dressed_el_rap.bosons().empty()) {
 74        const FourMomentum pZ = zfinder_dressed_el_rap.bosons()[0].momentum();
 75        _hist_zrap_el_dressed->fill(abs(pZ.rapidity()/GeV));
 76        _hist_zrap_comb_dressed->fill(abs(pZ.rapidity()/GeV));
 77      }
 78
 79      const DileptonFinder& zfinder_dressed_el_pt = apply<DileptonFinder>(evt, "DileptonFinder_dressed_el_pt");
 80      if (!zfinder_dressed_el_pt.bosons().empty()) {
 81        const FourMomentum pZ = zfinder_dressed_el_pt.bosons()[0].momentum();
 82        _hist_zpt_el_dressed->fill(pZ.pT()/GeV);
 83        _hist_zpt_comb_dressed->fill(pZ.pT()/GeV);
 84        if (pZ.pT() < 30*GeV) {
 85          _hist_zptpeak_el_dressed->fill(pZ.pT()/GeV);
 86          _hist_zptpeak_comb_dressed->fill(pZ.pT()/GeV);
 87        }
 88      }
 89
 90    }
 91
 92
 93    void finalize() {
 94      normalize(_hist_zrap_mu_dressed);
 95      normalize(_hist_zpt_mu_dressed);
 96      normalize(_hist_zptpeak_mu_dressed);
 97
 98      normalize(_hist_zrap_el_dressed);
 99      normalize(_hist_zpt_el_dressed);
100      normalize(_hist_zptpeak_el_dressed);
101
102      normalize(_hist_zrap_comb_dressed);
103      normalize(_hist_zpt_comb_dressed);
104      normalize(_hist_zptpeak_comb_dressed);
105    }
106
107    /// @}
108
109
110  private:
111
112    Histo1DPtr _hist_zrap_mu_dressed;
113    Histo1DPtr _hist_zpt_mu_dressed;
114    Histo1DPtr _hist_zptpeak_mu_dressed;
115
116    Histo1DPtr _hist_zrap_el_dressed;
117    Histo1DPtr _hist_zpt_el_dressed;
118    Histo1DPtr _hist_zptpeak_el_dressed;
119
120    Histo1DPtr _hist_zrap_comb_dressed;
121    Histo1DPtr _hist_zpt_comb_dressed;
122    Histo1DPtr _hist_zptpeak_comb_dressed;
123
124  };
125
126
127  RIVET_DECLARE_PLUGIN(CMS_2012_I941555);
128
129}