Rivet Analyses Reference

LHCB_2014_I1262703

Study of forward Z + jet production in $pp$ collisions at $\sqrt{s}=7$ TeV in the LHCb fiducial phase-space
Experiment: LHCb (LHC)
Inspire ID: 1262703
Status: VALIDATED
Authors:
  • William Barter
  • Albert Bursche
  • Marek Sirendi
References:Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $pp$ $Z +$ jet events at 7 TeV with direct $\mu$ decays

A study of forward $Z +$ jet production in $pp$ collisions at $\sqrt{s}=7$ TeV is presented. Results are shown for two jet thresholds of $p_T>10$ GeV and $p_T>20$ GeV. Total cross-sections and six differential cross-sections are measured.

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

namespace Rivet {


  /// @brief Study of forward Z + jet production at 7 TeV at LHCb
  /// @author W. Barter, A. Bursche, M. Sirendi (Rivet implementation)
  class LHCB_2014_I1262703 : public Analysis {
  public:

    /// Default constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2014_I1262703);


    /// Initialise histograms and projections
    void init() {

      // Projections
      const Cut mycut = Cuts::eta >= 2.0 && Cuts::eta <= 4.5 && Cuts::pT > 20*GeV;
      ZFinder zfinder(FinalState(), mycut, PID::MUON, 60*GeV, 120*GeV, 0., ZFinder::ClusterPhotons::NONE);
      declare(zfinder, "ZFinder");
      FastJets jetpro(zfinder.remainingFinalState(), FastJets::ANTIKT, 0.5);
      declare(jetpro, "Jets");

      // Histograms
      book(_h_jet_pT   , 3, 1, 1);
      book(_h_jet_eta20, 4, 1, 1);
      book(_h_jet_eta10, 4, 1, 2);
      book(_h_Z_y20    , 5, 1, 1);
      book(_h_Z_y10    , 5, 1, 2);
      book(_h_Z_pT20   , 6, 1, 1);
      book(_h_Z_pT10   , 6, 1, 2);
      book(_h_dphi20   , 7, 1, 1);
      book(_h_dphi10   , 7, 1, 2);
      book(_h_dy20     , 8, 1, 1);
      book(_h_dy10     , 8, 1, 2);
    }


    /// Do the analysis
    void analyze(const Event & e) {

      const ZFinder& zfinder = apply<ZFinder>(e, "ZFinder");
      if (zfinder.bosons().size() != 1) vetoEvent;
      const Particles leptons = zfinder.constituents();

      const Cut jetSelector = Cuts::eta >= 2.0 && Cuts::eta <= 4.5 && Cuts::pT > 10*GeV;
      const Jets jets = apply<FastJets>(e, "Jets").jetsByPt(jetSelector);

      if (jets.empty()) vetoEvent;

      // Clean the jets against the lepton candidates with a deltaR cut of 0.4
      const Jets cleanedJets = filter_discard(jets, [&](const Jet& j) { return any(leptons, deltaRLess(j, 0.4)); });
      // vector<const Jet*> cleanedJets;
      // for (size_t i = 0; i < jets.size(); i++) {
      //   bool isolated = true;
      //   for (size_t j = 0; j < 2; j++) {
      //     if (deltaR(leptons[j], jets[i]) < 0.4) {
      //       isolated = false;
      //       break;
      //     }
      //   }
      //   if (isolated) cleanedJets.push_back(&jets[i]);
      // }

      // Require at least 1 survivor and note if it is above a 20 GeV jet pT threshold
      if (cleanedJets.empty()) vetoEvent;
      const bool above20 = cleanedJets[0].pT() > 20*GeV;
      const double dphi = deltaPhi(zfinder.boson(), cleanedJets[0]);
      const double drap = zfinder.boson().rap() - cleanedJets[0].rap();

      // Fill histograms
      _h_jet_pT->fill(cleanedJets[0].pT()/GeV);
      _h_jet_eta10->fill(cleanedJets[0].eta());
      _h_Z_y10->fill(zfinder.boson().rap());
      _h_Z_pT10->fill(zfinder.boson().pT()/GeV);
      _h_dphi10->fill(dphi);
      _h_dy10->fill(drap);
      if (above20) {
        _h_jet_eta20->fill(cleanedJets[0].eta());
        _h_Z_y20->fill(zfinder.boson().rap());
        _h_Z_pT20->fill(zfinder.boson().pT()/GeV);
        _h_dphi20->fill(dphi);
        _h_dy20->fill(drap);
      }

    }


    /// Finalize
    void finalize() {
      normalize(_h_jet_pT); normalize(_h_jet_eta20); normalize(_h_jet_eta10); 
      normalize(_h_Z_y20);  normalize(_h_Z_y10);     normalize(_h_Z_pT20); 
      normalize(_h_Z_pT10); normalize(_h_dphi20);    normalize(_h_dphi10); 
      normalize(_h_dy20);   normalize(_h_dy10);
    }


    /// Histograms
    Histo1DPtr _h_jet_pT, _h_jet_eta20, _h_jet_eta10, _h_Z_y20, _h_Z_y10, _h_Z_pT20, _h_Z_pT10, _h_dphi20, _h_dphi10, _h_dy20, _h_dy10;

  };


  RIVET_DECLARE_PLUGIN(LHCB_2014_I1262703);

}