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