rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2013_I1217867

kT splitting scales in W->lv events
Experiment: ATLAS (LHC)
Inspire ID: 1217867
Status: VALIDATED
Authors:
  • Frank Siegert
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • W+jet events in the electron and/or the muon decay channel.

Cluster splitting scales are measured in events containing W bosons decaying to electrons or muons. The measurement comprises the four hardest splitting scales in a kT cluster sequence of the hadronic activity accompanying the W boson, and ratios of these splitting scales.

Source code: ATLAS_2013_I1217867.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/VetoedFinalState.hh"
  5#include "Rivet/Projections/IdentifiedFinalState.hh"
  6#include "Rivet/Projections/DressedLeptons.hh"
  7#include "Rivet/Projections/FastJets.hh"
  8
  9namespace Rivet {
 10
 11
 12
 13  class ATLAS_2013_I1217867 : public Analysis {
 14  public:
 15
 16    /// @name Constructors etc.
 17    //@{
 18
 19    /// Constructor
 20    ATLAS_2013_I1217867()
 21      : Analysis("ATLAS_2013_I1217867")
 22    {
 23      m_njet = 4;
 24      _h_dI.resize(2, std::vector<Histo1DPtr>(m_njet));
 25      _h_dI_ratio.resize(2, std::vector<Histo1DPtr>(m_njet-1));
 26    }
 27
 28    //@}
 29
 30
 31  public:
 32
 33    /// @name Analysis methods
 34    //@{
 35
 36    /// Book histograms and initialise projections before the run
 37    void init() {
 38      // Initialise projections
 39
 40      FinalState fs(Cuts::abseta < 5.0);
 41
 42      IdentifiedFinalState bareElectrons(fs);
 43      bareElectrons.acceptIdPair(PID::ELECTRON);
 44
 45      Cut cuts = (Cuts::absetaIn(0, 1.37) || Cuts::absetaIn(1.52, 2.47)) && Cuts::pT > 20*GeV;
 46
 47      DressedLeptons electronClusters(fs, bareElectrons, 0.1, cuts);
 48      declare(electronClusters, "electronClusters");
 49
 50      IdentifiedFinalState bareMuons(fs);
 51      bareMuons.acceptIdPair(PID::MUON);
 52      Cut mucuts = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
 53      DressedLeptons muonClusters(fs, bareMuons, 0.1, mucuts);
 54      declare(muonClusters, "muonClusters");
 55
 56      IdentifiedFinalState neutrinos(Cuts::pT > 25*GeV);
 57      neutrinos.acceptNeutrinos();
 58      declare(neutrinos, "neutrinos");
 59
 60      VetoedFinalState jetFS(fs);
 61      jetFS.addVetoOnThisFinalState(electronClusters);
 62      jetFS.addVetoOnThisFinalState(muonClusters);
 63      jetFS.addVetoOnThisFinalState(neutrinos);
 64      FastJets jetpro(jetFS, FastJets::KT, 0.6, JetAlg::Muons::ALL, JetAlg::Invisibles::DECAY);
 65      declare(jetpro, "jets");
 66
 67      // Book histograms
 68      for (size_t flav = 0; flav < 2; ++flav) {
 69        for (size_t i = 0; i < m_njet; ++i)   book(_h_dI[flav][i],         i+1, 1, flav+1);
 70        for (size_t i = 0; i < m_njet-1; ++i) book(_h_dI_ratio[flav][i], 4+i+1, 1, flav+1);
 71      }
 72    }
 73
 74
 75    /// Perform the per-event analysis
 76    void analyze(const Event& e) {
 77      const DressedLeptons& electronClusters = apply<DressedLeptons>(e, "electronClusters");
 78      const DressedLeptons& muonClusters = apply<DressedLeptons>(e, "muonClusters");
 79      int ne = electronClusters.dressedLeptons().size();
 80      int nmu = muonClusters.dressedLeptons().size();
 81
 82      FourMomentum lepton;
 83      size_t flav = 2;
 84      if (ne==1) {
 85        lepton=electronClusters.dressedLeptons()[0].momentum();
 86        flav = 0;
 87        if (nmu > 0) vetoEvent;
 88      }
 89      else if (nmu == 1) {
 90        lepton=muonClusters.dressedLeptons()[0].momentum();
 91        flav = 1;
 92        if (ne > 0) vetoEvent;
 93      }
 94      else {
 95        vetoEvent;
 96      }
 97
 98      const Particles& neutrinos = apply<FinalState>(e, "neutrinos").particlesByPt();
 99      if (neutrinos.size() < 1) vetoEvent;
100      FourMomentum neutrino = neutrinos[0].momentum();
101
102      double mtW=sqrt(2.0*lepton.pT()*neutrino.pT()*(1-cos(lepton.phi()-neutrino.phi())));
103      if (mtW<40.0*GeV) vetoEvent;
104
105      const shared_ptr<fastjet::ClusterSequence> seq = apply<FastJets>(e, "jets").clusterSeq();
106      if (seq) {
107        for (size_t i = 0; i < min(m_njet,(size_t)seq->n_particles()); ++i) {
108          double d_ij = sqrt(seq->exclusive_dmerge_max(i));
109          _h_dI[flav][i]->fill(d_ij);
110
111          if (i<m_njet-1) {
112            if (d_ij>20.0*GeV) {
113              double d_ijplus1 = sqrt(seq->exclusive_dmerge_max(i+1));
114              _h_dI_ratio[flav][i]->fill(d_ijplus1/d_ij);
115            }
116          }
117        }
118      }
119
120    }
121
122
123    /// Normalise histograms etc., after the run
124    void finalize() {
125      for (size_t flav = 0; flav < 2; ++flav) {
126        for (size_t i = 0; i < m_njet; ++i) {
127          normalize(_h_dI[flav][i], 1.0, false);
128          if (i < m_njet-1) normalize(_h_dI_ratio[flav][i], 1.0, false);
129        }
130      }
131    }
132
133    //@}
134
135
136  private:
137
138    /// @name Histograms
139    //@{
140    vector< vector<Histo1DPtr> > _h_dI;
141    vector< vector<Histo1DPtr> > _h_dI_ratio;
142    //@}
143
144    size_t m_njet;
145  };
146
147
148  // The hook for the plugin system
149  RIVET_DECLARE_PLUGIN(ATLAS_2013_I1217867);
150
151
152}