Rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2013_I1219109

W + b production at 7 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1219109
Status: VALIDATED
Authors:
  • Christian Gutschow
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • W+b in the electron channel

Measurements of the W+b-jets ($W+b+X$ and $W+b\bar{b}+X$) production cross-section in proton-proton collisions at a centre-of-mass energy of 7 TeV at the LHC. These results are based on data corresponding to an integrated luminosity of 4.6 $fb^{1}$, collected with the ATLAS detector. Cross-sections are presented as a function of jet multiplicity and of the transverse momentum of the leading b-jet for both the combined muon and electron decay modes of the W boson. The default routine will consider the electron decay channel of the W boson. Use ATLAS_2013_I1217863_W_EL and ATLAS_2013_I1217863_W_MU to specify the decay channel directly.

Source code: ATLAS_2013_I1219109.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/WFinder.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/HeavyHadrons.hh"

namespace Rivet {


  /// @brief ATLAS W+b measurement
  class ATLAS_2013_I1219109: public Analysis {
  public:

    ATLAS_2013_I1219109(string name = "ATLAS_2013_I1219109")
      : Analysis(name)
    {
      // the electron mode is used by default
      _mode = 1;
    }


    void init() {
      FinalState fs;
      declare(fs, "FinalState");

      Cut cuts = Cuts::abseta < 2.5 && Cuts::pT >= 25*GeV;

      // W finder for electrons and muons
      WFinder wf(fs, cuts, _mode==3? PID::MUON : PID::ELECTRON, 0.0*GeV, MAXDOUBLE, 0.0, 0.1,
                 WFinder::CLUSTERNODECAY, WFinder::NOTRACK, WFinder::TRANSMASS);
      declare(wf, "WF");

      // jets
      VetoedFinalState jet_fs(fs);
      jet_fs.addVetoOnThisFinalState(getProjection<WFinder>("WF"));
      FastJets fj(jet_fs, FastJets::ANTIKT, 0.4);
      fj.useInvisibles();
      declare(fj, "Jets");
      declare(HeavyHadrons(Cuts::abseta < 2.5 && Cuts::pT > 5*GeV), "BHadrons");


      // book histograms
      _njet     = bookHisto1D(1, 1, _mode); // dSigma / dNjet
      _jet1_bPt = bookHisto1D(2, 1, _mode); // dSigma / dBjetPt for Njet = 1
      _jet2_bPt = bookHisto1D(2, 2, _mode); // dSigma / dBjetPt for Njet = 2

    }


    void analyze(const Event& event) {

      const double weight = event.weight();

      //  retrieve W boson candidate
      const WFinder& wf = apply<WFinder>(event, "WF");
      if( wf.bosons().size() != 1 )  vetoEvent; // only one W boson candidate
      if( !(wf.mT() > 60.0*GeV) )    vetoEvent;
      //const Particle& Wboson  = wf.boson();


      // retrieve constituent neutrino
      const Particle& neutrino = wf.constituentNeutrino();
      if( !(neutrino.pT() > 25.0*GeV) )  vetoEvent;

      // retrieve constituent lepton
      const Particle& lepton = wf.constituentLepton();

      // count good jets, check if good jet contains B hadron
      const Particles& bHadrons = apply<HeavyHadrons>(event, "BHadrons").bHadrons();
      const Jets& jets = apply<JetAlg>(event, "Jets").jetsByPt(25*GeV);
      int goodjets = 0, bjets = 0;
      double bPt = 0.;
      foreach(const Jet& j, jets) {
        if( (j.abseta() < 2.1) && (deltaR(lepton, j) > 0.5) ) {
          // this jet passes the selection!
          ++goodjets;
          // j.bTagged() uses ghost association which is
          // more elegant, but not what has been used in
          // this analysis originally, will match B had-
          // rons in eta-phi space instead
          foreach(const Particle& b, bHadrons) {
            if( deltaR(j, b) < 0.3 ) {
              // jet matched to B hadron!
              if(!bPt)  bPt = j.pT() * GeV; // leading b-jet pT
              ++bjets; // count number of b-jets
              break;
            }
          }
        }
      }
      if( goodjets > 2 )  vetoEvent; // at most two jets
      if( !bjets )  vetoEvent; // at least one of them b-tagged

      double njets = double(goodjets);
      double ncomb = 3.0;
      _njet->fill(njets, weight);
      _njet->fill(ncomb, weight);

      if(     goodjets == 1)  _jet1_bPt->fill(bPt, weight);
      else if(goodjets == 2)  _jet2_bPt->fill(bPt, weight);
    }


    void finalize() {

      // Print summary info
      const double xs_pb(crossSection() / picobarn);
      const double sumw(sumOfWeights());
      MSG_INFO("Cross-Section/pb: " << xs_pb      );
      MSG_INFO("Sum of weights  : " << sumw       );
      MSG_INFO("nEvents         : " << numEvents());

      const double sf(xs_pb / sumw);

      scale(_njet,     sf);
      scale(_jet1_bPt, sf);
      scale(_jet2_bPt, sf);
    }

  protected:

    size_t _mode;

  private:

    Histo1DPtr _njet;
    Histo1DPtr _jet1_bPt;
    Histo1DPtr _jet2_bPt;

    //bool _isMuon;

  };

  class ATLAS_2013_I1219109_EL : public ATLAS_2013_I1219109 {
  public:
    ATLAS_2013_I1219109_EL()
      : ATLAS_2013_I1219109("ATLAS_2013_I1219109_EL")
    {
      _mode = 2;
    }
  };

  class ATLAS_2013_I1219109_MU : public ATLAS_2013_I1219109 {
  public:
    ATLAS_2013_I1219109_MU()
      : ATLAS_2013_I1219109("ATLAS_2013_I1219109_MU")
    {
      _mode = 3;
    }
  };

  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(ATLAS_2013_I1219109);
  DECLARE_RIVET_PLUGIN(ATLAS_2013_I1219109_EL);
  DECLARE_RIVET_PLUGIN(ATLAS_2013_I1219109_MU);

}