Rivet analyses referenceCMS_2012_I1113442$\Lambda_b$ production at 7 TeVExperiment: CMS (LHC) Inspire ID: 1113442 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
Measurement of the cross section for $\Lambda_b$ production at 7 TeV at TeV. The ratio of $\bar{\Lambda}_b$ to $\Lambda_b$ production is also measured. Source code: CMS_2012_I1113442.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Lambda_b at 7 TeV
9 class CMS_2012_I1113442 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2012_I1113442);
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 // histograms
23 book(_h_lam , 1,1,1);
24 book(_h_bar , "TMP/bar_total",refData<YODA::BinnedEstimate<int> >(1,1,2));
25 book(_h_pT_lam, 2,1,1);
26 book(_h_pT_bar, "TMP/bar_pT" ,refData(2,1,2));
27 book(_h_y_lam , 3,1,1);
28 book(_h_y_bar , "TMP/bar_y" ,refData(3,1,2));
29 for (unsigned int ix=0; ix<2; ++ix) {
30 book(_c_lam[ix], "TMP/c_lam_"+toString(ix+1));
31 }
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 // Final state of unstable particles to get particle spectra
38 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
39 for (const Particle& p : ufs.particles(Cuts::abspid==5122) ) {
40 // stuff for the branching ratio
41 const double sign = p.pid()/p.abspid();
42 if (p.children().size()==2 &&
43 ( (p.children()[0].pid()==sign*3122 && p.children()[1].pid()==443) ||
44 (p.children()[1].pid()==sign*3122 && p.children()[0].pid()==443) )) {
45 _c_lam[0]->fill(1.);
46 }
47 _c_lam[1]->fill(1.);
48 const double pT = p.perp();
49 const double y = p.absrap();
50 if (y>2. || pT<10.) continue;
51 if (p.pid()>0) {
52 _h_lam->fill(round(sqrtS()));
53 _h_pT_lam->fill(pT);
54 _h_y_lam ->fill(y);
55 }
56 else {
57 _h_bar->fill(round(sqrtS()));
58 _h_pT_bar->fill(pT);
59 _h_y_bar ->fill(y);
60 }
61 }
62 }
63
64
65 /// Normalise histograms etc., after the run
66 void finalize() {
67 double fact = crossSection()/nanobarn/sumOfWeights();
68 // total cross sectiohn and ratio
69 scale(_h_lam, fact);
70 scale(_h_bar, fact);
71 BinnedEstimatePtr<int> tmpI;
72 book(tmpI,1,1,2);
73 divide(_h_bar, _h_lam, tmpI);
74 // d sig / dpT
75 fact *= 1000.;
76 scale(_h_pT_lam, fact);
77 scale(_h_pT_bar, fact);
78 Estimate1DPtr tmp;
79 book(tmp, 2, 1, 2);
80 divide(_h_pT_bar, _h_pT_lam, tmp);
81 // d sig / dy
82 scale(_h_y_lam, fact);
83 scale(_h_y_bar, fact);
84 book(tmp,3, 1, 2);
85 divide(_h_y_bar, _h_y_lam, tmp);
86 // now branching ratio for cross sections
87 if (_c_lam[1]->effNumEntries()>0.) {
88 scale(_h_lam , *_c_lam[0]/ *_c_lam[1]);
89 scale(_h_pT_lam, *_c_lam[0]/ *_c_lam[1]);
90 scale(_h_y_lam , *_c_lam[0]/ *_c_lam[1]);
91 }
92 }
93
94 /// @}
95
96
97 /// @name Histograms
98 /// @{
99 BinnedHistoPtr<int> _h_lam,_h_bar;
100 Histo1DPtr _h_pT_lam,_h_pT_bar;
101 Histo1DPtr _h_y_lam,_h_y_bar;
102 CounterPtr _c_lam[2];
103 /// @}
104
105
106 };
107
108
109 RIVET_DECLARE_PLUGIN(CMS_2012_I1113442);
110
111}
|