Rivet Analyses Reference

ATLAS_2014_I1300647

Measurement of $Z/\gamma^*$ boson $p_T$ at $\sqrt{s} = 7\text{TeV}$
Experiment: ATLAS (LHC)
Inspire ID: 1300647
Status: VALIDATED
Authors:
  • Elena Yatsenko
References:Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $Z/\gamma^*$ production with decays to electrons and/or muons.

A measurement of the $Z/\gamma^*$ transverse momentum spectrum using ATLAS proton-proton collision data at a center of mass energy of $\sqrt{s} = 7{\text{TeV}}$ at the LHC. The measurement is performed in both $Z/\gamma^* \rightarrow ee$ and $Z/\gamma^* \rightarrow \mu \mu$ channels.

Source code: ATLAS_2014_I1300647.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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ZFinder.hh"
#include "Rivet/Tools/BinnedHistogram.hh"

/// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder...

namespace Rivet {


  class ATLAS_2014_I1300647 : public Analysis {
  public:

    /// Constructor
    ATLAS_2014_I1300647()
      : Analysis("ATLAS_2014_I1300647")
    {    }


  public:

    /// @name Analysis methods
    //@{

    /// Book histograms and initialise projections before the run
    void init() {
   
      FinalState fs;
      
      ZFinder zfinder_dressed_el(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.1);
      declare(zfinder_dressed_el, "ZFinder_dressed_el");
      
      ZFinder zfinder_bare_el(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.0);
      declare(zfinder_bare_el,	"ZFinder_bare_el");
      
      ZFinder zfinder_dressed_mu(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::MUON,     66.0*GeV, 116.0*GeV, 0.1);
      declare(zfinder_dressed_mu, "ZFinder_dressed_mu");
      
      ZFinder zfinder_bare_mu(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::MUON,     66.0*GeV, 116.0*GeV, 0.0);
      declare(zfinder_bare_mu,	"ZFinder_bare_mu");
      
      // Book histograms
      book(_hist_zpt_el_dressed ,1, 1, 1);  // electron "dressed"
      book(_hist_zpt_mu_dressed ,1, 1, 2);  // muon "dressed"
      book(_hist_zpt_el_bare    ,1, 2, 1);  // electron "bare"
      book(_hist_zpt_mu_bare    ,1, 2, 2);  // muon "bare"	 

      //double-differential plots
      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(0.0, 1.0, book(tmp, 3, 1, 2));}
      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(1.0, 2.0, book(tmp, 3, 1, 4));}
      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(2.0, 2.4, book(tmp, 3, 1, 6));}
 
    }


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

      const ZFinder& zfinder_dressed_el = apply<ZFinder>(event, "ZFinder_dressed_el");
      const ZFinder& zfinder_bare_el    = apply<ZFinder>(event, "ZFinder_bare_el");
      const ZFinder& zfinder_dressed_mu = apply<ZFinder>(event, "ZFinder_dressed_mu");
      const ZFinder& zfinder_bare_mu    = apply<ZFinder>(event, "ZFinder_bare_mu");	
      
      FillPlots1d(zfinder_dressed_el, _hist_zpt_el_dressed);

      FillPlots1d(zfinder_bare_el,    _hist_zpt_el_bare);
          
      FillPlots1d(zfinder_dressed_mu, _hist_zpt_mu_dressed);
          
      FillPlots1d(zfinder_bare_mu,    _hist_zpt_mu_bare);  
      
      FillPlots3d(zfinder_dressed_el, _h_zpt_el_mu_dressed);      
      FillPlots3d(zfinder_dressed_mu, _h_zpt_el_mu_dressed);    

    }

    void FillPlots1d(const ZFinder& zfinder, Histo1DPtr hist) {
      if(zfinder.bosons().size() != 1) return;
      const FourMomentum pZ = zfinder.bosons()[0].momentum();
      hist->fill(pZ.pT()/GeV);
      return; 
    } 
    
    void FillPlots3d(const ZFinder& zfinder, BinnedHistogram& binnedHist) {
      if(zfinder.bosons().size() != 1) return;
      const FourMomentum pZ = zfinder.bosons()[0].momentum();
      binnedHist.fill(pZ.rapidity(), pZ.pT()/GeV);   
      return; 
    }  

    /// Normalise histograms etc., after the run
    void finalize() {
    
      normalize(_hist_zpt_el_dressed);
      normalize(_hist_zpt_el_bare);
      
      normalize(_hist_zpt_mu_dressed);  
      normalize(_hist_zpt_mu_bare); 

      for (Histo1DPtr hist : _h_zpt_el_mu_dressed.histos()) { normalize(hist); }

    }

    //@}


  private:

    // Data members like post-cuts event weight counters go here


  private:

    /// @name Histograms
    //@{
    BinnedHistogram _h_zpt_el_mu_dressed;
  
 
    Histo1DPtr _hist_zpt_el_dressed;
    Histo1DPtr _hist_zpt_el_bare;     
    Histo1DPtr _hist_zpt_mu_dressed;
    Histo1DPtr _hist_zpt_mu_bare;    

    //@}

  };


  // The hook for the plugin system
  RIVET_DECLARE_PLUGIN(ATLAS_2014_I1300647);
}