Rivet analyses referenceCMS_2012_I941555Measurement of differential $Z/\gamma^*$ $p_T$ and yExperiment: CMS (LHC) Inspire ID: 941555 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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// -*- 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}
|