rivet is hosted by Hepforge, IPPP Durham

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// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/ZFinder.hh"
  5#include "Rivet/Tools/BinnedHistogram.hh"
  6
  7/// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder...
  8
  9namespace Rivet {
 10
 11
 12  class ATLAS_2014_I1300647 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    ATLAS_2014_I1300647()
 17      : Analysis("ATLAS_2014_I1300647")
 18    {    }
 19
 20
 21  public:
 22
 23    /// @name Analysis methods
 24    //@{
 25
 26    /// Book histograms and initialise projections before the run
 27    void init() {
 28   
 29      FinalState fs;
 30      
 31      ZFinder zfinder_dressed_el(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.1);
 32      declare(zfinder_dressed_el, "ZFinder_dressed_el");
 33      
 34      ZFinder zfinder_bare_el(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.0);
 35      declare(zfinder_bare_el,	"ZFinder_bare_el");
 36      
 37      ZFinder zfinder_dressed_mu(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::MUON,     66.0*GeV, 116.0*GeV, 0.1);
 38      declare(zfinder_dressed_mu, "ZFinder_dressed_mu");
 39      
 40      ZFinder zfinder_bare_mu(fs, Cuts::abseta<2.4 && Cuts::pT>20.0*GeV, PID::MUON,     66.0*GeV, 116.0*GeV, 0.0);
 41      declare(zfinder_bare_mu,	"ZFinder_bare_mu");
 42      
 43      // Book histograms
 44      book(_hist_zpt_el_dressed ,1, 1, 1);  // electron "dressed"
 45      book(_hist_zpt_mu_dressed ,1, 1, 2);  // muon "dressed"
 46      book(_hist_zpt_el_bare    ,1, 2, 1);  // electron "bare"
 47      book(_hist_zpt_mu_bare    ,1, 2, 2);  // muon "bare"	 
 48
 49      //double-differential plots
 50      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(0.0, 1.0, book(tmp, 3, 1, 2));}
 51      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(1.0, 2.0, book(tmp, 3, 1, 4));}
 52      {Histo1DPtr tmp; _h_zpt_el_mu_dressed.add(2.0, 2.4, book(tmp, 3, 1, 6));}
 53 
 54    }
 55
 56
 57    /// Perform the per-event analysis
 58    void analyze(const Event& event) {
 59
 60      const ZFinder& zfinder_dressed_el = apply<ZFinder>(event, "ZFinder_dressed_el");
 61      const ZFinder& zfinder_bare_el    = apply<ZFinder>(event, "ZFinder_bare_el");
 62      const ZFinder& zfinder_dressed_mu = apply<ZFinder>(event, "ZFinder_dressed_mu");
 63      const ZFinder& zfinder_bare_mu    = apply<ZFinder>(event, "ZFinder_bare_mu");	
 64      
 65      FillPlots1d(zfinder_dressed_el, _hist_zpt_el_dressed);
 66
 67      FillPlots1d(zfinder_bare_el,    _hist_zpt_el_bare);
 68          
 69      FillPlots1d(zfinder_dressed_mu, _hist_zpt_mu_dressed);
 70          
 71      FillPlots1d(zfinder_bare_mu,    _hist_zpt_mu_bare);  
 72      
 73      FillPlots3d(zfinder_dressed_el, _h_zpt_el_mu_dressed);      
 74      FillPlots3d(zfinder_dressed_mu, _h_zpt_el_mu_dressed);    
 75
 76    }
 77
 78    void FillPlots1d(const ZFinder& zfinder, Histo1DPtr hist) {
 79      if(zfinder.bosons().size() != 1) return;
 80      const FourMomentum pZ = zfinder.bosons()[0].momentum();
 81      hist->fill(pZ.pT()/GeV);
 82      return; 
 83    } 
 84    
 85    void FillPlots3d(const ZFinder& zfinder, BinnedHistogram& binnedHist) {
 86      if(zfinder.bosons().size() != 1) return;
 87      const FourMomentum pZ = zfinder.bosons()[0].momentum();
 88      binnedHist.fill(pZ.rapidity(), pZ.pT()/GeV);   
 89      return; 
 90    }  
 91
 92    /// Normalise histograms etc., after the run
 93    void finalize() {
 94    
 95      normalize(_hist_zpt_el_dressed);
 96      normalize(_hist_zpt_el_bare);
 97      
 98      normalize(_hist_zpt_mu_dressed);  
 99      normalize(_hist_zpt_mu_bare); 
100
101      for (Histo1DPtr hist : _h_zpt_el_mu_dressed.histos()) { normalize(hist); }
102
103    }
104
105    //@}
106
107
108  private:
109
110    // Data members like post-cuts event weight counters go here
111
112
113  private:
114
115    /// @name Histograms
116    //@{
117    BinnedHistogram _h_zpt_el_mu_dressed;
118  
119 
120    Histo1DPtr _hist_zpt_el_dressed;
121    Histo1DPtr _hist_zpt_el_bare;     
122    Histo1DPtr _hist_zpt_mu_dressed;
123    Histo1DPtr _hist_zpt_mu_bare;    
124
125    //@}
126
127  };
128
129
130  // The hook for the plugin system
131  RIVET_DECLARE_PLUGIN(ATLAS_2014_I1300647);
132}