rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2011_I930220

Inclusive and dijet cross-sections of $b$-jets in $pp$ collisions at $\sqrt{s} = 7$ TeV with ATLAS
Experiment: ATLAS (LHC)
Inspire ID: 930220
Status: VALIDATED
Authors:
  • Stephen Paul Bieniek
References:
  • Eur.Phys.J. C71 (2011) 1846
  • arXiv: 1109.6833
Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • QCD events at 7 TeV

The inclusive and dijet production cross-sections have been measured for jets containing $b$-hadrons ($b$-jets) in proton--proton collisions at a centre-of-mass energy of $\sqrt{s} = 7$ TeV, using the ATLAS detector at the LHC. The measurements use data corresponding to an integrated luminosity of 34 pb$^-1$. The $b$-jets are identified using either a lifetime-based method, where secondary decay vertices of $b$-hadrons in jets are reconstructed using information from the tracking detectors, or a muon-based method where the presence of a muon is used to identify semileptonic decays of $b$-hadrons inside jets. The inclusive $b$-jet cross-section is measured as a function of transverse momentum in the range $20 < pT < 400$ GeV and rapidity in the range $|y| < 2.1$. The $b\bar{b}$-dijet cross-section is measured as a function of the dijet invariant mass in the range $110 < $m_{jj}$ < 760$\;GeV, the azimuthal angle difference between the two jets and the angular variable $\chi$ in two dijet mass regions. The results are compared with next-to-leading-order QCD predictions. Good agreement is observed between the measured cross-sections and the predictions obtained using POWHEG+Pythia6. MC@NLO+Herwig shows good agreement with the measured $b\bar{b}$-dijet cross-section. However, it does not reproduce the measured inclusive cross-section well, particularly for central $b$-jets with large transverse momenta.

Source code: ATLAS_2011_I930220.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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/HeavyHadrons.hh"
#include "Rivet/Tools/BinnedHistogram.hh"

namespace Rivet {


  /// @brief ATLAS inclusive b-jet pT spectrum, di-jet mass and di-jet chi
  class ATLAS_2011_I930220: public Analysis {
  public:

    ATLAS_2011_I930220()
      : Analysis("ATLAS_2011_I930220")
    {    }


    void init() {
      FinalState fs(-3.5, 3.5);
      declare(fs, "FinalState");
      FastJets fj(fs, FastJets::ANTIKT, 0.4);
      fj.useInvisibles();
      declare(fj, "Jets");
      declare(HeavyHadrons(Cuts::abseta < 3.5 && Cuts::pT > 5*GeV), "BHadrons");

      double ybins[] = { 0.0, 0.3, 0.8, 1.2, 2.1 };
      for (size_t i = 0; i < 4; ++i)
        _bjetpT_SV0.addHistogram(ybins[i], ybins[i+1], bookHisto1D(i+1, 1, 1));

      _bjetpT_SV0_All    = bookHisto1D(5, 1, 1);
      _bjetpT_pTRel      = bookHisto1D(6, 1, 1);
      _dijet_mass        = bookHisto1D(7, 1, 1);
      _dijet_phi         = bookHisto1D(8, 1, 1);
      _dijet_chi_110_370 = bookHisto1D(9, 1, 1);
      _dijet_chi_370_850 = bookHisto1D(10, 1, 1);

      _chiCounter1 = 0.0;
      _chiCounter2 = 0.0;
      _phiCounter  = 0.0;
    }


    void analyze(const Event& evt) {
      const double weight = evt.weight();

      const Particles& bHadrons = apply<HeavyHadrons>(evt, "BHadrons").bHadrons();
      const Jets& jets = apply<JetAlg>(evt, "Jets").jetsByPt(15*GeV);

      FourMomentum leadingJet, subleadingJet;
      int leadJet = 0, subJet = 0;
      foreach (const Jet& j, jets) {
        bool hasB = false;
        foreach (const Particle& b, bHadrons)
          if (deltaR(j, b) < 0.3) { hasB = true; break; }

        // Identify and classify the leading and subleading jets
        if (j.absrap() < 2.1) { ///< Move this into the jets defn
          if (!leadJet) {
            leadingJet = j.momentum();
            leadJet = (hasB && j.pT() > 40*GeV) ? 2 : 1;
          }
          else if (leadJet && !subJet) {
            subleadingJet = j.momentum();
            subJet = (hasB && j.pT() > 40*GeV) ? 2 : 1;
          }
          if (hasB) {
            _bjetpT_SV0.fill(j.absrap(), j.pT()/GeV, weight);
            _bjetpT_SV0_All->fill(j.pT()/GeV, weight);
            _bjetpT_pTRel->fill(j.pT()/GeV, weight);
          }
        }
      }

      // Di-b-jet plots require both the leading and subleading jets to be b-tagged and have pT > 40 GeV
      if (leadJet == 2 && subJet == 2) {
        const double mass = FourMomentum( leadingJet + subleadingJet ).mass();
        _dijet_mass->fill(mass/GeV, weight);

        // Plot dphi for high-mass di-b-jets
        if (mass > 110*GeV) {
          _phiCounter += weight;
          const double d_phi = deltaPhi( leadingJet.phi(), subleadingJet.phi() );
          _dijet_phi->fill(fabs(d_phi), weight);
        }

        // Plot chi for low y_boost di-b-jets (in two high-mass bins)
        const double y_boost = 0.5 * (leadingJet.rapidity() + subleadingJet.rapidity());
        const double chi = exp( fabs( leadingJet.rapidity() - subleadingJet.rapidity() ) );
        if ( fabs(y_boost) < 1.1 ) {
          if (inRange(mass/GeV, 110, 370)) {
            _chiCounter1 += weight;
            _dijet_chi_110_370->fill(chi, weight);
          } else if (inRange(mass/GeV, 370, 850)) {
            _chiCounter2 += weight;
            _dijet_chi_370_850->fill(chi, weight);
          }
        }
      }
    }


    void finalize() {
      // Normalizing to cross-section and mass
      // Additional factors represent the division by rapidity
      const double xsec = crossSectionPerEvent()/(picobarn);
      const double chiScale1 = 1 / _chiCounter1 / 260.0;
      const double chiScale2 = 1 / _chiCounter2 / 480.0;
      const double phiScale  = 1 / _phiCounter;

      _bjetpT_SV0.scale(xsec/2, this);
      scale(_bjetpT_SV0_All, xsec);
      scale(_bjetpT_pTRel, xsec);
      scale(_dijet_mass, xsec);
      scale(_dijet_phi, phiScale );
      scale(_dijet_chi_110_370, chiScale1);
      scale(_dijet_chi_370_850, chiScale2);
    }


  private:

    BinnedHistogram<double> _bjetpT_SV0;

    Histo1DPtr _bjetpT_SV0_All;
    Histo1DPtr _bjetpT_pTRel;
    Histo1DPtr _dijet_mass;
    Histo1DPtr _dijet_phi;
    Histo1DPtr _dijet_chi_110_370;
    Histo1DPtr _dijet_chi_370_850;

    double _chiCounter1;
    double _chiCounter2;
    double _phiCounter;
  };


  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(ATLAS_2011_I930220);

}