rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2016_I1444991

Higgs-to-WW differential cross sections at 8 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1444991
Status: VALIDATED
Authors:
  • Kathrin Becker
References: Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • gg -> H -> W W* -> enu munu production at 8 TeV

This paper describes a measurement of fiducial and differential cross sections of gluon-fusion Higgs boson production in the HWWeνμν channel, using 20.3 fb1 of proton-proton collision data. The data were produced at a centre-of-mass energy of s=8 TeV at the CERN Large Hadron Collider and recorded by the ATLAS detector in 2012. Cross sections are measured from the observed HWWeνμν signal yield in categories distinguished by the number of associated jets. The total cross section is measured in a fiducial region defined by the kinematic properties of the charged leptons and neutrinos. Differential cross sections are reported as a function of the number of jets, the Higgs boson transverse momentum, the dilepton rapidity, and the transverse momentum of the leading jet. The jet-veto efficiency, or fraction of events with no jets above a given transverse momentum threshold, is also reported. All measurements are compared to QCD predictions from Monte Carlo generators and fixed-order calculations, and are in agreement with the Standard Model predictions.

Source code: ATLAS_2016_I1444991.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/LeptonFinder.hh"
  5#include "Rivet/Projections/IdentifiedFinalState.hh"
  6#include "Rivet/Projections/PromptFinalState.hh"
  7#include "Rivet/Projections/VetoedFinalState.hh"
  8#include "Rivet/Projections/FastJets.hh"
  9#include "Rivet/Projections/VisibleFinalState.hh"
 10
 11namespace Rivet {
 12
 13
 14  /// Higgs-to-WW differential cross sections at 8 TeV
 15  class ATLAS_2016_I1444991 : public Analysis {
 16  public:
 17
 18    /// Constructor
 19    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2016_I1444991);
 20
 21
 22    /// Book histograms and initialise projections before the run
 23    void init() {
 24
 25      // All particles within |eta| < 5.0
 26      const FinalState FS(Cuts::abseta < 5.0);
 27
 28      // Project photons for dressing
 29      IdentifiedFinalState photon_id(FS);
 30      photon_id.acceptIdPair(PID::PHOTON);
 31
 32      // Project dressed electrons with pT > 15 GeV and |eta| < 2.47
 33      IdentifiedFinalState el_id(FS);
 34      el_id.acceptIdPair(PID::ELECTRON);
 35      PromptFinalState el_bare(el_id);
 36      Cut cuts = (Cuts::abseta < 2.47) && ( (Cuts::abseta <= 1.37) || (Cuts::abseta >= 1.52) ) && (Cuts::pT > 15*GeV);
 37      LeptonFinder el_dressed_FS(el_bare, photon_id, 0.1, cuts);
 38      declare(el_dressed_FS,"EL_DRESSED_FS");
 39
 40      // Project dressed muons with pT > 15 GeV and |eta| < 2.5
 41      IdentifiedFinalState mu_id(FS);
 42      mu_id.acceptIdPair(PID::MUON);
 43      PromptFinalState mu_bare(mu_id);
 44      LeptonFinder mu_dressed_FS(mu_bare, photon_id, 0.1, Cuts::abseta < 2.5 && Cuts::pT > 15*GeV);
 45      declare(mu_dressed_FS,"MU_DRESSED_FS");
 46
 47      // get MET from generic invisibles
 48      VetoedFinalState inv_fs(FS);
 49      inv_fs.addVetoOnThisFinalState(VisibleFinalState(FS));
 50      declare(inv_fs, "InvisibleFS");
 51
 52      // Project jets
 53      FastJets jets(FS, JetAlg::ANTIKT, 0.4);
 54      jets.useInvisibles(JetInvisibles::NONE);
 55      jets.useMuons(JetMuons::NONE);
 56      declare(jets, "jets");
 57
 58      // Book histograms
 59      book(_h_Njets        , 2,1,1);
 60      book(_h_PtllMET      , 3,1,1);
 61      book(_h_Yll          , 4,1,1);
 62      book(_h_PtLead       , 5,1,1);
 63      book(_h_Njets_norm   , 6,1,1);
 64      book(_h_PtllMET_norm , 7,1,1);
 65      book(_h_Yll_norm     , 8,1,1);
 66      book(_h_PtLead_norm  , 9,1,1);
 67      book(_h_JetVeto      , 10, 1, 1);
 68
 69      //histos for jetveto
 70      std::vector<double> ptlead25_bins = { 0., 25., 300. };
 71      std::vector<double> ptlead40_bins = { 0., 40., 300. };
 72      book(_h_pTj1_sel25 , "pTj1_sel25", ptlead25_bins);
 73      book(_h_pTj1_sel40 , "pTj1_sel40", ptlead40_bins);
 74    }
 75
 76
 77    /// Perform the per-event analysis
 78    void analyze(const Event& event) {
 79
 80      // Get final state particles
 81      const FinalState& ifs = apply<FinalState>(event, "InvisibleFS");
 82      const DressedLeptons& good_mu = apply<LeptonFinder>(event, "MU_DRESSED_FS").dressedLeptons();
 83      const DressedLeptons& el_dressed = apply<LeptonFinder>(event, "EL_DRESSED_FS").dressedLeptons();
 84      const Jets& jets = apply<FastJets>(event, "jets").jetsByPt(Cuts::pT>25*GeV && Cuts::abseta < 4.5);
 85
 86      //find good electrons
 87      DressedLeptons good_el;
 88      for (const DressedLepton& el : el_dressed){
 89        bool keep = true;
 90        for (const DressedLepton& mu : good_mu) {
 91          keep &= deltaR(el, mu) >= 0.1;
 92        }
 93        if (keep)  good_el += el;
 94      }
 95
 96      // select only emu events
 97      if ((good_el.size() != 1) || good_mu.size() != 1)  vetoEvent;
 98
 99      //built dilepton
100      FourMomentum dilep = good_el[0].momentum() + good_mu[0].momentum();
101      double Mll = dilep.mass();
102      double Yll = dilep.rapidity();
103      double DPhill = fabs(deltaPhi(good_el[0], good_mu[0]));
104      double pTl1 = (good_el[0].pT() > good_mu[0].pT())? good_el[0].pT() : good_mu[0].pT();
105
106      //get MET
107      FourMomentum met;
108      for (const Particle& p : ifs.particles())  met += p.momentum();
109
110      // do a few cuts before looking at jets
111      if (pTl1 <= 22. || DPhill >= 1.8 || met.pT() <= 20.)  vetoEvent;
112      if (Mll <= 10. || Mll >= 55.)  vetoEvent;
113
114      Jets jets_selected;
115      for (const Jet &j : jets) {
116        if( j.abseta() > 2.4 && j.pT()<=30*GeV ) continue;
117        bool keep = true;
118        for(DressedLepton el : good_el) {
119          keep &= deltaR(j, el) >= 0.3;
120        }
121        if (keep)  jets_selected += j;
122      }
123
124      double PtllMET = (met + good_el[0].momentum() + good_mu[0].momentum()).pT();
125
126      double Njets = jets_selected.size() > 2 ? 2 : jets_selected.size();
127      double pTj1 = jets_selected.size()? jets_selected[0].pT() : 0.1;
128
129      // Fill histograms
130      _h_Njets->fill(Njets);
131      _h_PtllMET->fill(PtllMET);
132      _h_Yll->fill(fabs(Yll));
133      _h_PtLead->fill(pTj1);
134      _h_Njets_norm->fill(Njets);
135      _h_PtllMET_norm->fill(PtllMET);
136      _h_Yll_norm->fill(fabs(Yll));
137      _h_PtLead_norm->fill(pTj1);
138      _h_pTj1_sel25->fill(pTj1);
139      _h_pTj1_sel40->fill(pTj1);
140    }
141
142
143    /// Normalise histograms etc., after the run
144    void finalize() {
145
146      const double xs = crossSectionPerEvent()/femtobarn;
147
148      /// @todo Normalise, scale and otherwise manipulate histograms here
149      scale(_h_Njets, xs);
150      scale(_h_PtllMET, xs);
151      scale(_h_Yll, xs);
152      scale(_h_PtLead, xs);
153      normalize(_h_Njets_norm);
154      normalize(_h_PtllMET_norm);
155      normalize(_h_Yll_norm);
156      normalize(_h_PtLead_norm);
157      scale(_h_pTj1_sel25, xs);
158      scale(_h_pTj1_sel40, xs);
159      normalize(_h_pTj1_sel25);
160      normalize(_h_pTj1_sel40);
161      // fill jet veto efficiency histogram
162      _h_JetVeto->bin(1).set(_h_pTj1_sel25->bin(1).sumW(), _h_pTj1_sel25->bin(1).errW());
163      _h_JetVeto->bin(2).set(_h_PtLead_norm->bin(1).sumW(), _h_PtLead_norm->bin(1).errW());
164      _h_JetVeto->bin(3).set(_h_pTj1_sel40->bin(1).sumW(), _h_pTj1_sel25->bin(1).errW());
165
166      scale(_h_PtLead_norm , 1000.); // curveball unit change in HepData, just for this one
167      scale(_h_PtllMET_norm, 1000.); // curveball unit change in HepData, and this one
168    }
169
170  private:
171
172    /// @name Histograms
173    /// @{
174    Histo1DPtr _h_Njets;
175    Histo1DPtr _h_PtllMET;
176    Histo1DPtr _h_Yll;
177    Histo1DPtr _h_PtLead;
178    Histo1DPtr _h_Njets_norm;
179    Histo1DPtr _h_PtllMET_norm;
180    Histo1DPtr _h_Yll_norm;
181    Histo1DPtr _h_PtLead_norm;
182
183    Estimate1DPtr _h_JetVeto;
184
185    Histo1DPtr _h_pTj1_sel25;
186    Histo1DPtr _h_pTj1_sel40;
187
188  };
189
190
191  RIVET_DECLARE_PLUGIN(ATLAS_2016_I1444991);
192
193}