Rivet analyses referenceLHCB_2019_I1720413Measurement of $B^+$, $B^0$ and $\mathit{\Lambda}_b^0$ production in $p\mathrm{Pb}$ collisions at $\sqrt{s_\mathrm{NN}} = 8.16\,\mathrm{TeV}$Experiment: LHCB (LHC) Inspire ID: 1720413 Status: VALIDATED Authors:
Beam energies: (6500.0, 533000.0) GeV Run details:
The production of $B^+$, $B^0$ and $\mathit{\Lambda}_b^0$ hadrons is studied in proton-lead collisions at a center-of-mass energy per nucleon pair of $\sqrt{s_\mathrm{NN}} = 8.16\,\mathrm{TeV}$ recorded with the LHCb detector at the LHC. The measurement uses a dataset corresponding to an integrated luminosity of $12.2\pm 0.3\,\mathrm{nb}^{-1}$ for the case where the proton beam is projected into the LHCb detector (corresponding to measuring hadron production at positive rapidity) and $18.6\pm 0.5\,\mathrm{nb}^{-1}$ for the lead beam projected into the LHCb detector (corresponding to measuring hadron production at negative rapidity). Double-differential cross-sections are measured and used to determine forward-backward ratios and nuclear modification factors, which directly probe nuclear effects in the production of beauty hadrons. The double-differential cross-sections are measured as a function of the beauty-hadron transverse momentum and rapidity in the nucleon-nucleon center-of-mass frame. Forward-to-backward cross-section ratios and nuclear modification factors indicate a significant nuclear suppression at positive rapidity. The ratio of $\mathit{\Lambda}_b^0$ over $B^0$ production cross-sections is reported and is consistent with the corresponding measurement in $pp$ collisions. Source code: LHCB_2019_I1720413.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Tools/HistoGroup.hh"
5
6namespace Rivet {
7
8 class LHCB_2019_I1720413 : public Analysis {
9
10 public:
11
12 RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2019_I1720413);
13
14 void init() {
15
16 size_t ih = 1;
17 vector<double> ybins = { -4.5, -3.5, -2.5, 1.5, 2.5, 3.5 };
18 for (const string& label : vector<string>{"b_plus", "b_0", "lambda_b_0"}) {
19 book(_g[label], ybins);
20 _g[label]->maskBin(3);
21 size_t idx = 1;
22 for (auto& b : _g[label]->bins()) {
23 book(b, ih, 1, idx++);
24 }
25 ++ih;
26 }
27
28 book(_h["b_plus"], 4, 1, 1);
29 book(_h["b_0"], 4, 1, 2);
30 book(_h["lambda_b_0"], 4, 1, 3);
31
32 book(_e["b_plus_diff"], 5, 1, 1);
33 book(_e["b_0_diff"], 5, 1, 2);
34 book(_e["lambda_b_0_diff"], 5, 1, 3);
35
36 book(_e["b_plus"], 6, 1, 1);
37 book(_e["b_0"], 6, 1, 2);
38 book(_e["lambda_b_0"], 6, 1, 3);
39
40 // Define histograms with one rapidity interval to compute
41 // transverse-momentum-integrated forward-to-backward ratio
42 const vector<double> forw_y_ints = {2.0, 20.0};
43 book(_h["b_plus_fwd"], "_b_plus_fwd", forw_y_ints);
44 book(_h["b_plus_bwd"], "_b_plus_bwd", forw_y_ints);
45 book(_h["b_0_fwd"], "_b_0_fwd", forw_y_ints);
46 book(_h["b_0_bwd"], "_b_0_bwd", forw_y_ints);
47 book(_h["lambda_b_0_fwd"], "_lambda_b_0_fwd", forw_y_ints);
48 book(_h["lambda_b_0_bwd"], "_lambda_b_0_bwd", forw_y_ints);
49
50 // Select B+, B0 and Lambdab0 hadrons and their antiparticles
51 declare(
52 UnstableParticles(
53 ((Cuts::abspid == PID::BPLUS) ||
54 (Cuts::abspid == PID::B0) ||
55 (Cuts::abspid == PID::LAMBDAB)) &&
56 (Cuts::ptIn(2 * GeV, 20 * GeV)) &&
57 (Cuts::rapIn(-4.5, -2.5) || Cuts::rapIn(1.5, 3.5))), "UPs");
58 }
59
60 void analyze(const Event &event) {
61 // Apply UnstableParticles projection
62 const UnstableParticles &unst_parts = apply<UnstableParticles>(event, "UPs");
63 for (const Particle &part : unst_parts.particles()) {
64 const double y = part.rapidity();
65 const double pt = part.pT();
66
67 if (part.abspid () == PID::BPLUS) {
68 _g["b_plus"]->fill(y, pt/GeV);
69 _h["b_plus"]->fill(y);
70 if (fabs(y) < 2.5 || fabs(y) > 3.5) continue;
71 if (y>0.) _h["b_plus_fwd"]->fill(pt/GeV);
72 else _h["b_plus_bwd"]->fill(pt/GeV);
73 }
74 else if (part.abspid() == PID::B0) {
75 _g["b_0"]->fill(y, pt/GeV);
76 _h["b_0"]->fill(y);
77 if (fabs(y) < 2.5 || fabs(y) > 3.5) continue;
78 if (y>0.) _h["b_0_fwd"]->fill(pt/GeV);
79 else _h["b_0_bwd"]->fill(pt/GeV);
80 }
81 else if (part.abspid() == PID::LAMBDAB) {
82 _g["lambda_b_0"]->fill(y, pt/GeV);
83 _h["lambda_b_0"]->fill(y);
84 if (fabs(y) < 2.5 || fabs(y) > 3.5) continue;
85 if (y>0.) _h["lambda_b_0_fwd"]->fill(pt/GeV);
86 else _h["lambda_b_0_bwd"]->fill(pt/GeV);
87 }
88 }
89 }
90
91 void finalize() {
92 // Compute scale factor with inelastic cross-section from input file and sum of
93 // weights (corresponds to number of events in input file)
94 const double sf = crossSection() / microbarn / sumOfWeights();
95 scale(_g, sf);
96 scale(_h, sf);
97
98 // Compute forward-to-backward ratio with correct indices from HistoGroup
99 for (auto& grp : _g) {
100 divide(grp.second->bin(5), grp.second->bin(2), _e[grp.first + "_diff"s]);
101 divide(_h[grp.first+"_fwd"s], _h[grp.first+"_bwd"s], _e[grp.first]);
102 }
103 }
104
105 private:
106
107 map<string,Histo1DPtr> _h;
108 map<string,Estimate1DPtr> _e;
109 map<string,Histo1DGroupPtr> _g;
110 };
111
112 RIVET_DECLARE_PLUGIN(LHCB_2019_I1720413);
113}
|