Rivet analyses referenceLHCB_2014_I1262703Study of forward Z + jet production in $pp$ collisions at $\sqrt{s}=7$ TeV in the LHCb fiducial phase-spaceExperiment: LHCb (LHC) Inspire ID: 1262703 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/DileptonFinder.hh"
4#include "Rivet/Projections/FastJets.hh"
5
6namespace Rivet {
7
8
9 /// @brief Study of forward Z + jet production at 7 TeV at LHCb
10 ///
11 /// @author W. Barter, A. Bursche, M. Sirendi (Rivet implementation)
12 class LHCB_2014_I1262703 : public Analysis {
13 public:
14
15 /// Default constructor
16 RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2014_I1262703);
17
18
19 /// Initialise histograms and projections
20 void init() {
21
22 // Projections
23 const Cut mycut = Cuts::eta >= 2.0 && Cuts::eta <= 4.5 && Cuts::pT > 20*GeV;
24 DileptonFinder zfinder(91.2*GeV, 0.0, mycut && Cuts::abspid == PID::MUON, Cuts::massIn(60*GeV, 120*GeV));
25 declare(zfinder, "DileptonFinder");
26 FastJets jetpro(zfinder.remainingFinalState(), JetAlg::ANTIKT, 0.5);
27 declare(jetpro, "Jets");
28
29 // Histograms
30 book(_h_jet_pT , 3, 1, 1);
31 book(_h_jet_eta20, 4, 1, 1);
32 book(_h_jet_eta10, 4, 1, 2);
33 book(_h_Z_y20 , 5, 1, 1);
34 book(_h_Z_y10 , 5, 1, 2);
35 book(_h_Z_pT20 , 6, 1, 1);
36 book(_h_Z_pT10 , 6, 1, 2);
37 book(_h_dphi20 , 7, 1, 1);
38 book(_h_dphi10 , 7, 1, 2);
39 book(_h_dy20 , 8, 1, 1);
40 book(_h_dy10 , 8, 1, 2);
41 }
42
43
44 /// Do the analysis
45 void analyze(const Event & e) {
46
47 const DileptonFinder& zfinder = apply<DileptonFinder>(e, "DileptonFinder");
48 if (zfinder.bosons().size() != 1) vetoEvent;
49 const Particles leptons = zfinder.constituents();
50
51 const Cut jetSelector = Cuts::eta >= 2.0 && Cuts::eta <= 4.5 && Cuts::pT > 10*GeV;
52 const Jets jets = apply<FastJets>(e, "Jets").jetsByPt(jetSelector);
53
54 if (jets.empty()) vetoEvent;
55
56 // Clean the jets against the lepton candidates with a deltaR cut of 0.4
57 const Jets cleanedJets = discard(jets, [&](const Jet& j) { return any(leptons, deltaRLess(j, 0.4)); });
58 // vector<const Jet*> cleanedJets;
59 // for (size_t i = 0; i < jets.size(); i++) {
60 // bool isolated = true;
61 // for (size_t j = 0; j < 2; j++) {
62 // if (deltaR(leptons[j], jets[i]) < 0.4) {
63 // isolated = false;
64 // break;
65 // }
66 // }
67 // if (isolated) cleanedJets.push_back(&jets[i]);
68 // }
69
70 // Require at least 1 survivor and note if it is above a 20 GeV jet pT threshold
71 if (cleanedJets.empty()) vetoEvent;
72 const bool above20 = cleanedJets[0].pT() > 20*GeV;
73 const double dphi = deltaPhi(zfinder.boson(), cleanedJets[0]);
74 const double drap = zfinder.boson().rap() - cleanedJets[0].rap();
75
76 // Fill histograms
77 _h_jet_pT->fill(cleanedJets[0].pT()/GeV);
78 _h_jet_eta10->fill(cleanedJets[0].eta());
79 _h_Z_y10->fill(zfinder.boson().rap());
80 _h_Z_pT10->fill(zfinder.boson().pT()/GeV);
81 _h_dphi10->fill(dphi);
82 _h_dy10->fill(drap);
83 if (above20) {
84 _h_jet_eta20->fill(cleanedJets[0].eta());
85 _h_Z_y20->fill(zfinder.boson().rap());
86 _h_Z_pT20->fill(zfinder.boson().pT()/GeV);
87 _h_dphi20->fill(dphi);
88 _h_dy20->fill(drap);
89 }
90
91 }
92
93
94 /// Finalize
95 void finalize() {
96 normalize(_h_jet_pT); normalize(_h_jet_eta20); normalize(_h_jet_eta10);
97 normalize(_h_Z_y20); normalize(_h_Z_y10); normalize(_h_Z_pT20);
98 normalize(_h_Z_pT10); normalize(_h_dphi20); normalize(_h_dphi10);
99 normalize(_h_dy20); normalize(_h_dy10);
100 }
101
102
103 /// Histograms
104 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;
105
106 };
107
108
109 RIVET_DECLARE_PLUGIN(LHCB_2014_I1262703);
110
111}
|