rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2012_I941555

Measurement of differential $Z/\gamma^*$ $p_T$ and y
Experiment: CMS (LHC)
Inspire ID: 941555
Status: VALIDATED
Authors:
  • Luca Perrozzi
  • Justin Hugon
References:
  • Phys.Rev. D85 (2012) 032002
  • arXiv: 1110.4973
  • CMS-EWK-10-010
  • CERN-PH-EP-2011-169
Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $p p \to \mu^+ \mu^-$+X 7 TeV. Needs mass cut on lepton pair to avoid photon singularity, restrict $Z/\gamma^*$ mass range to roughly $50 \text{GeV}/c^2 < m_{\mu\mu} < 130 \text{GeV}/c^2$ for efficiency. Result is corrected for QED FSR (i.e. leptons are dressed), so turn off in generator.

Cross section as a function of $p_T$ and y of the Z boson decaying into muons in p p collisions at $\sqrt{s}$ = 7 TeV. $p_T$ and y cross sections are measured for $60 < m_{\mu\mu} < 120$ GeV. The $p_T$ cross section is measured for lepton $p_T > 20$ GeV and $\eta < 2.1$, while the y cross section is extrapolated to all lepton $p_T$ and $\eta$. This measurement was performed using 36 pb$^{-1}$ of data collected during 2010 with the CMS detector at the LHC.

Source code: CMS_2012_I941555.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ZFinder.hh"

namespace Rivet {


  /// @brief CMS Z pT and rapidity in Drell-Yan events at 7 TeV
  /// @author Justin Hugon, Luca Perrozzi
  class CMS_2012_I941555 : public Analysis {
  public:

    /// Constructor
    CMS_2012_I941555()
      : Analysis("CMS_2012_I941555")
    {
      _sumw_mu_dressed_pt  = 0;
      _sumwpeak_mu_dressed = 0;
      _sumw_el_dressed_rap = 0;
      _sumw_el_dressed_pt  = 0;
      _sumwpeak_el_dressed = 0;
    }


    /// @name Analysis methods
    //@{

    void init() {

      // Set up projections
      /// @todo Really?: ZFinder zfinder_dressed_mu_pt(-2.1, 2.1, 20, PID::MUON, 60*GeV, 120*GeV, 0.2, false, true);
      FinalState fs;
      Cut cuts = Cuts::abseta < 2.1 && Cuts::pT > 20*GeV;
      ZFinder zfinder_dressed_mu_pt(fs, cuts, PID::MUON, 60*GeV, 120*GeV, 0.2);
      declare(zfinder_dressed_mu_pt, "ZFinder_dressed_mu_pt");
      ZFinder zfinder_dressed_el_pt(fs, cuts, PID::ELECTRON, 60*GeV, 120*GeV, 0.1);
      declare(zfinder_dressed_el_pt, "ZFinder_dressed_el_pt");

      ZFinder zfinder_dressed_mu_rap(fs, Cuts::open(), PID::MUON, 60*GeV, 120*GeV, 0.1);
      declare(zfinder_dressed_mu_rap, "ZFinder_dressed_mu_rap");
      ZFinder zfinder_dressed_el_rap(fs, Cuts::open(), PID::ELECTRON, 60*GeV, 120*GeV, 0.1);
      declare(zfinder_dressed_el_rap, "ZFinder_dressed_el_rap");

      // Book histograms
      _hist_zrap_mu_dressed      = bookHisto1D(1, 1, 1);  // muon "dressed" rapidity
      _hist_zrap_el_dressed      = bookHisto1D(1, 1, 2);  // electron "dressed" rapidity
      _hist_zrap_comb_dressed    = bookHisto1D(1, 1, 3);  // electron "dressed" rapidity

      _hist_zpt_mu_dressed       = bookHisto1D(2, 1, 1);  // muon "dressed" pt
      _hist_zpt_el_dressed       = bookHisto1D(2, 1, 2);  // electron "dressed" pt
      _hist_zpt_comb_dressed     = bookHisto1D(2, 1, 3);  // electron "dressed" pt

      _hist_zptpeak_mu_dressed   = bookHisto1D(3, 1, 1);  // muon "dressed" pt peak
      _hist_zptpeak_el_dressed   = bookHisto1D(3, 1, 2);  // electron "dressed" pt peak
      _hist_zptpeak_comb_dressed = bookHisto1D(3, 1, 3);  // electron "dressed" pt peak
    }


    /// Do the analysis
    void analyze(const Event& evt) {
      const double weight = evt.weight();

      const ZFinder& zfinder_dressed_mu_rap = apply<ZFinder>(evt, "ZFinder_dressed_mu_rap");
      if (!zfinder_dressed_mu_rap.bosons().empty()) {
        _sumw_mu_dressed_rap += weight;
        const FourMomentum pZ = zfinder_dressed_mu_rap.bosons()[0].momentum();
        _hist_zrap_mu_dressed->fill(pZ.rapidity()/GeV, weight);
        _hist_zrap_comb_dressed->fill(pZ.rapidity()/GeV, weight);
      }

      const ZFinder& zfinder_dressed_mu_pt = apply<ZFinder>(evt, "ZFinder_dressed_mu_pt");
      if (!zfinder_dressed_mu_pt.bosons().empty()) {
        _sumw_mu_dressed_pt += weight;
        const FourMomentum pZ = zfinder_dressed_mu_pt.bosons()[0].momentum();
        _hist_zpt_mu_dressed->fill(pZ.pT()/GeV, weight);
        _hist_zpt_comb_dressed->fill(pZ.pT()/GeV, weight);
        if (pZ.pT() < 30*GeV) {
          _sumwpeak_mu_dressed += weight;
          _hist_zptpeak_mu_dressed->fill(pZ.pT()/GeV, weight);
          _hist_zptpeak_comb_dressed->fill(pZ.pT()/GeV, weight);
        }
      }

      const ZFinder& zfinder_dressed_el_rap = apply<ZFinder>(evt, "ZFinder_dressed_el_rap");
      if (!zfinder_dressed_el_rap.bosons().empty()) {
        _sumw_el_dressed_rap += weight;
        const FourMomentum pZ = zfinder_dressed_el_rap.bosons()[0].momentum();
        _hist_zrap_el_dressed->fill(pZ.rapidity()/GeV, weight);
        _hist_zrap_comb_dressed->fill(pZ.rapidity()/GeV, weight);
      }

      const ZFinder& zfinder_dressed_el_pt = apply<ZFinder>(evt, "ZFinder_dressed_el_pt");
      if (!zfinder_dressed_el_pt.bosons().empty()) {
        _sumw_el_dressed_pt += weight;
        const FourMomentum pZ = zfinder_dressed_el_pt.bosons()[0].momentum();
        _hist_zpt_el_dressed->fill(pZ.pT()/GeV, weight);
        _hist_zpt_comb_dressed->fill(pZ.pT()/GeV, weight);
        if (pZ.pT() < 30*GeV) {
          _sumwpeak_el_dressed += weight;
          _hist_zptpeak_el_dressed->fill(pZ.pT()/GeV, weight);
          _hist_zptpeak_comb_dressed->fill(pZ.pT()/GeV, weight);
        }
      }

    }


    void finalize() {
      scale(_hist_zrap_mu_dressed, safediv(1, _sumw_mu_dressed_rap, 1));
      scale(_hist_zpt_mu_dressed, safediv(1, _sumw_mu_dressed_pt, 1));
      scale(_hist_zptpeak_mu_dressed, safediv(1, _sumwpeak_mu_dressed, 1));

      scale(_hist_zrap_el_dressed, safediv(1, _sumw_el_dressed_rap, 1));
      scale(_hist_zpt_el_dressed, safediv(1, _sumw_el_dressed_pt, 1));
      scale(_hist_zptpeak_el_dressed, safediv(1, _sumwpeak_el_dressed, 1));

      scale(_hist_zrap_comb_dressed, safediv(1, _sumw_el_dressed_rap+_sumw_mu_dressed_rap, 1));
      scale(_hist_zpt_comb_dressed, safediv(1, _sumw_el_dressed_pt+_sumw_mu_dressed_pt, 1));
      scale(_hist_zptpeak_comb_dressed, safediv(1, _sumwpeak_el_dressed+_sumwpeak_mu_dressed, 1));
    }

    //@}


  private:

    double _sumw_mu_dressed_rap;
    double _sumw_mu_dressed_pt;
    double _sumwpeak_mu_dressed;

    double _sumw_el_dressed_rap;
    double _sumw_el_dressed_pt;
    double _sumwpeak_el_dressed;

    Histo1DPtr _hist_zrap_mu_dressed;
    Histo1DPtr _hist_zpt_mu_dressed;
    Histo1DPtr _hist_zptpeak_mu_dressed;

    Histo1DPtr _hist_zrap_el_dressed;
    Histo1DPtr _hist_zpt_el_dressed;
    Histo1DPtr _hist_zptpeak_el_dressed;

    Histo1DPtr _hist_zrap_comb_dressed;
    Histo1DPtr _hist_zpt_comb_dressed;
    Histo1DPtr _hist_zptpeak_comb_dressed;

  };


  DECLARE_RIVET_PLUGIN(CMS_2012_I941555);

}