Rivet analyses referenceLHCB_2022_I2138845Mass distributions in $B_c^+$ decays to charmonia + multihadron final statesExperiment: LHCB (LHC) Inspire ID: 2138845 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Mass distributions in $B_c^+$ decays to charmonia + multihadron final states. The data were read from the plots in the paper and may not be corrected for efficiency and acceptance. Source code: LHCB_2022_I2138845.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/DecayedParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief B_c to ccbar + hadrons
10 class LHCB_2022_I2138845 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2022_I2138845);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 UnstableParticles ufs = UnstableParticles(Cuts::abspid==541);
23 declare(ufs, "UFS");
24 DecayedParticles BC(ufs);
25 BC.addStable( PID::PI0);
26 BC.addStable( PID::K0S);
27 BC.addStable( PID::JPSI);
28 BC.addStable( PID::PSI2S);
29 declare(BC, "BC");
30 for(unsigned int ix=0;ix<3;++ix)
31 book(_h[ix],1,1,1+ix);
32 for(unsigned int ix=0;ix<2;++ix) {
33 book(_h[ix+3],2,1,1+ix);
34 book(_h[ix+5],3,1,1+ix);
35 book(_h[ix+7],4,1,1+ix);
36 }
37 }
38
39
40 /// Perform the per-event analysis
41 void analyze(const Event& event) {
42 static const map<PdgId,unsigned int> & mode1 = { { 443,1}, { 211,3}, {-211,2} };
43 static const map<PdgId,unsigned int> & mode1CC = { { 443,1}, {-211,3}, { 211,2} };
44 static const map<PdgId,unsigned int> & mode2 = { { 443,1}, { 321,1}, {-321,1}, { 211,2}, {-211,1} };
45 static const map<PdgId,unsigned int> & mode2CC = { { 443,1}, { 321,1}, {-321,1}, {-211,2}, { 211,1} };
46 static const map<PdgId,unsigned int> & mode3 = { { 443,1}, { 211,4}, {-211,3} };
47 static const map<PdgId,unsigned int> & mode3CC = { { 443,1}, {-211,4}, { 211,3} };
48 static const map<PdgId,unsigned int> & mode4 = { { 100443,1}, { 211,2}, {-211,1} };
49 static const map<PdgId,unsigned int> & mode4CC = { { 100443,1}, {-211,2}, { 211,1} };
50 DecayedParticles BC = apply<DecayedParticles>(event, "BC");
51 // loop over particles
52 for(unsigned int ix=0;ix<BC.decaying().size();++ix) {
53 int sign = BC.decaying()[ix].pid()/BC.decaying()[ix].abspid();
54 if ((sign== 1 && BC.modeMatches(ix,6,mode1 )) ||
55 (sign==-1 && BC.modeMatches(ix,6,mode1CC))) {
56 const Particles & pim = BC.decayProducts()[ix].at(-sign*211);
57 const Particles & pip = BC.decayProducts()[ix].at( sign*211);
58 FourMomentum ptotal=pim[0].momentum()+pim[1].momentum()+
59 pip[0].momentum()+pip[1].momentum()+pip[2].momentum();
60 _h[0]->fill(ptotal.mass());
61 for(unsigned int ix=0;ix<3;++ix)
62 for(unsigned int iy=0;iy<2;++iy) {
63 FourMomentum prho=pip[ix].momentum()+pim[iy].momentum();
64 _h[3]->fill((ptotal-prho).mass());
65 _h[5]->fill(prho.mass());
66 }
67 }
68 else if ((sign== 1 && BC.modeMatches(ix,6,mode2 )) ||
69 (sign==-1 && BC.modeMatches(ix,6,mode2CC))) {
70 const Particles & pim = BC.decayProducts()[ix].at(-sign*211);
71 const Particles & pip = BC.decayProducts()[ix].at( sign*211);
72 const Particle & Kp = BC.decayProducts()[ix].at( sign*321)[0];
73 const Particle & Km = BC.decayProducts()[ix].at(-sign*321)[0];
74 _h[1]->fill((Kp.momentum()+Km.momentum()+pim[0].momentum()+
75 pip[0].momentum()+pip[1].momentum()).mass());
76 _h[7]->fill((Kp.momentum()+pim[0].momentum()).mass());
77 _h[7]->fill((Km.momentum()+pip[0].momentum()).mass());
78 _h[7]->fill((Km.momentum()+pip[1].momentum()).mass());
79 _h[8]->fill((Kp.momentum()+Km.momentum()).mass());
80 }
81 else if ((sign== 1 && BC.modeMatches(ix,8,mode3 )) ||
82 (sign==-1 && BC.modeMatches(ix,8,mode3CC))) {
83 const Particles & pim = BC.decayProducts()[ix].at(-sign*211);
84 const Particles & pip = BC.decayProducts()[ix].at( sign*211);
85 _h[2]->fill((pim[0].momentum()+pim[1].momentum()+pim[2].momentum()+
86 pip[0].momentum()+pip[1].momentum()+pip[2].momentum()+pip[3].momentum()).mass());
87 }
88 else if ((sign== 1 && BC.modeMatches(ix,4,mode4 )) ||
89 (sign==-1 && BC.modeMatches(ix,4,mode4CC))) {
90 const Particles & pim = BC.decayProducts()[ix].at(-sign*211);
91 const Particles & pip = BC.decayProducts()[ix].at( sign*211);
92 _h[4]->fill((pim[0].momentum()+
93 pip[0].momentum()+pip[1].momentum()).mass());
94 for(unsigned int iy=0;iy<2;++iy)
95 _h[6]->fill((pim[0].momentum()+pip[ix].momentum()).mass());
96 }
97 }
98 }
99
100
101 /// Normalise histograms etc., after the run
102 void finalize() {
103 for(unsigned int ix=0;ix<9;++ix)
104 normalize(_h[ix],1.,false);
105 }
106
107 /// @}
108
109
110 /// @name Histograms
111 /// @{
112 Histo1DPtr _h[9];
113 /// @}
114
115
116 };
117
118
119 RIVET_DECLARE_PLUGIN(LHCB_2022_I2138845);
120
121}
|