Rivet analyses referenceLHCB_2015_I1327230$B_c^+$ meson production at 8 TeVExperiment: LHCB (LHC) Inspire ID: 1327230 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
Measurement of the double differential (in $p_\perp$ and $y$) ratio $B_c^+/B^+$ meson production at 8 TeV by the LHCb collaboration. The branching ratio for the decay $B^+\to J\psi K^+$ is taken to be $0.00102$ from PDG2023 while by default the branching ratio for $B_c^+\to J\psi\pi^+$ is measured from the events, however it can be specified using the BCBR option. Source code: LHCB_2015_I1327230.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief B_c production
9 class LHCB_2015_I1327230 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2015_I1327230);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 declare(UnstableParticles(), "UFS");
22 for(unsigned int ib=0;ib<2;++ib) {
23 book(_h_pT[ib], "TMP/h_pT_"+toString(ib), refData(2,1,1));
24 book(_h_y [ib], "TMP/h_y_" +toString(ib), refData(3,1,1));
25 book(_h_B[ib],{2.0,2.9,3.3,4.5});
26 for(unsigned int iy=0;iy<3;++iy) {
27 book(_h_B[ib]->bin(iy+1),"TMP/hB_"+toString(ib)+"_"+toString(iy),refData(1,1,1+iy));
28 }
29 book(_c_Bc[ib],"TMP/c_Bc_"+toString(ib));
30 }
31 _brBp = getOption<double>("BPBR",1.02e-3);
32 _brBc = getOption<double>("BCBR",-1.);
33 }
34
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 // Final state of unstable particles to get particle spectra
39 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
40 for (const Particle& p : ufs.particles(Cuts::pid==521 or Cuts::pid==541 )) {
41 if(p.pid()==541) {
42 if(p.children().size()==2 &&
43 ( (p.children()[0].pid()==211 && p.children()[1].pid()==443) ||
44 (p.children()[1].pid()==211 && p.children()[0].pid()==443) ))
45 _c_Bc[0]->fill(1.);
46 _c_Bc[1]->fill(1.);
47 }
48 double absrap = p.absrap();
49 if(absrap<2. || absrap>4.5) continue;
50 double pT = p.perp();
51 // select B0
52 if(p.pid()==521) {
53 _h_B [1]->fill(absrap,pT);
54 _h_pT[1]->fill(pT);
55 if(pT<20.) _h_y [1]->fill(absrap);
56 }
57 // select B_c+
58 else {
59 _h_B [0]->fill(absrap,pT);
60 _h_pT[0]->fill(pT);
61 if(pT<20.) _h_y [0]->fill(absrap);
62 }
63 }
64 }
65
66
67 /// Normalise histograms etc., after the run
68 void finalize() {
69 // branching ratio Bc -> J/psi pi+
70 if (_brBc<0.) {
71 Estimate0DPtr tmp2;
72 book(tmp2,"TMP/br");
73 divide(_c_Bc[0],_c_Bc[1],tmp2);
74 _brBc = tmp2->val();
75 }
76 // scale by B+ br (for B_c directly selected before filling histos)
77 scale(_h_B[0], _brBc);
78 scale(_h_B[1],_brBp);
79 for(unsigned int ix=0;ix<2;++ix) divByGroupWidth(_h_B[ix]);
80 scale(_h_pT[0], _brBc);
81 scale(_h_pT[1],_brBp);
82 scale(_h_y [0], _brBc);
83 scale(_h_y [1], _brBp);
84 for(unsigned int iy=0;iy<3;++iy) {
85 Estimate1DPtr tmp;
86 book(tmp,1,1,1+iy);
87 divide(_h_B[0]->bin(iy+1),_h_B[1]->bin(iy+1),tmp);
88 // convert ratio to %
89 tmp->scale(100.);
90 }
91 Estimate1DPtr tmp;
92 book(tmp,2,1,1);
93 divide(_h_pT[0],_h_pT[1],tmp);
94 // convert ratio to %
95 tmp->scale(100.);
96 book(tmp,3,1,1);
97 divide(_h_y [0],_h_y [1],tmp);
98 // convert ratio to %
99 tmp->scale(100.);
100 }
101
102 /// @}
103
104
105 /// @name Histograms
106 /// @{
107 Histo1DGroupPtr _h_B[2];
108 Histo1DPtr _h_pT[2],_h_y[2];
109 CounterPtr _c_Bc[2];
110 double _brBp,_brBc;
111 /// @}
112
113
114 };
115
116
117 RIVET_DECLARE_PLUGIN(LHCB_2015_I1327230);
118
119}
|