Rivet analyses referenceBELLE_2005_I679165Differential branching ratios in $B^+\to p\bar{p}K^+$, $B^0\to p\bar{p}K^0_S$ and $B^0\to p\bar{\Lambda}\pi^-$Experiment: BELLE (KEKB) Inspire ID: 679165 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Differential branching ratios in $B^+\to p\bar{p}K^+$, $B^0\to p\bar{p}K^0_S$ and $B^0\to p\bar{\Lambda}\pi^-$.The corrected data was read from the figures in the paper. Source code: BELLE_2005_I679165.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 -> p pbar K or p Lambdabar pi
10 class BELLE_2005_I679165 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2005_I679165);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 || Cuts::abspid==521);
24 declare(ufs, "UFS");
25 DecayedParticles BB(ufs);
26 BB.addStable(310);
27 BB.addStable( 3122);
28 BB.addStable(-3122);
29 declare(BB, "BB");
30 // histograms
31 for (unsigned int ix=0; ix<4; ++ix) {
32 book(_h_angle[ix], 2, 1, 1+ix);
33 if (ix==3) continue;
34 book(_h_mass[ix], 1, 1, 1+ix);
35 }
36 for (unsigned int ix=0; ix<2; ++ix) {
37 book(_c[ix],"TMP/nB_"+toString(ix+1));
38 }
39 }
40
41
42 /// Perform the per-event analysis
43 void analyze(const Event& event) {
44 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
45 // loop over particles
46 for (unsigned int ix=0; ix<BB.decaying().size(); ++ix) {
47 int sign = BB.decaying()[ix].pid()/BB.decaying()[ix].abspid();
48 int imode=-1;
49 if (BB.decaying()[ix].abspid()==511) _c[0]->fill();
50 else _c[1]->fill();
51 if ((sign>0 &&BB.modeMatches(ix,3,mode1)) ||
52 (sign<0 &&BB.modeMatches(ix,3,mode1CC))) imode = 0;
53 else if ((sign>0 &&BB.modeMatches(ix,3,mode2)) ||
54 (sign<0 &&BB.modeMatches(ix,3,mode2CC))) imode = 1;
55 else if ((sign>0 &&BB.modeMatches(ix,3,mode3)) ||
56 (sign<0 &&BB.modeMatches(ix,3,mode3CC))) imode = 2;
57 else {
58 continue;
59 }
60 // boost to B rest frame
61 LorentzTransform boost =
62 LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. mom().betaVec());
63 if (imode<2) {
64 const Particle& pp = BB.decayProducts()[ix].at( sign*2212)[0];
65 const Particle& pbar = BB.decayProducts()[ix].at(-sign*2212)[0];
66 const Particle& meson = BB.decayProducts()[ix].at( imode==0 ? sign*321 : 310)[0];
67 FourMomentum pbaryon = pp.mom()+pbar.mom();
68 double mass = pbaryon.mass();
69 if (2.850<mass && mass<3.12 ) continue;
70 if (3.315<mass && mass<3.735) continue;
71 _h_mass[imode]->fill(mass);
72 if (mass>2.85) continue;
73 FourMomentum pp1 = boost.transform(pp.mom());
74 pbaryon = boost.transform(pbaryon);
75 Vector3 axis = boost.transform(meson.mom()).p3().unit();
76 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(pbaryon.betaVec());
77 double cosp = axis.dot(boost1.transform(pp1).p3().unit());
78 _h_angle[imode]->fill(cosp);
79 }
80 else {
81 const Particle& pp = BB.decayProducts()[ix].at( sign*2212)[0];
82 const Particle& lbar = BB.decayProducts()[ix].at(-sign*3122)[0];
83 const Particle& meson = BB.decayProducts()[ix].at(-sign* 211)[0];
84 FourMomentum pbaryon = pp.mom()+lbar.mom();
85 double mass = pbaryon.mass();
86 _h_mass[imode]->fill(mass);
87 FourMomentum pp1 = boost.transform(pp.mom());
88 FourMomentum pppi = pp.mom()+meson.mom();
89 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pppi.betaVec());
90 Vector3 axis = boost.transform(lbar.mom()).p3().unit();
91 double cosp = axis.dot(boost2.transform(pp1).p3().unit());
92 _h_angle[3]->fill(cosp);
93 if (mass>2.85) continue;
94 pbaryon = boost.transform(pbaryon);
95 axis = boost.transform(meson.mom()).p3().unit();
96 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(pbaryon.betaVec());
97 cosp = axis.dot(boost1.transform(pp1).p3().unit());
98 _h_angle[imode]->fill(cosp);
99 }
100 }
101 }
102
103
104 /// Normalise histograms etc., after the run
105 void finalize() {
106 scale(_h_mass [0], 1e6/ *_c[1]);
107 scale(_h_mass [1], 1e6/ *_c[0]);
108 scale(_h_mass [2], 1e6/ *_c[0]);
109 scale(_h_angle[0], 1e6/ *_c[1]);
110 for (unsigned int ix=1; ix<4; ++ix) {
111 scale(_h_angle[ix], 1e6/ *_c[0]);
112 }
113 }
114
115 /// @}
116
117
118 /// @name Histograms
119 /// @{
120 Histo1DPtr _h_mass[3], _h_angle[4];
121 CounterPtr _c[2];
122 const map<PdgId,unsigned int> mode1 = { { 2212,1}, {-2212,1}, { 321,1} };
123 const map<PdgId,unsigned int> mode1CC = { { 2212,1}, {-2212,1}, {-321,1} };
124 const map<PdgId,unsigned int> mode2 = { { 2212,1}, {-2212,1}, { 310,1} };
125 const map<PdgId,unsigned int> mode2CC = { { 2212,1}, {-2212,1}, { 310,1} };
126 const map<PdgId,unsigned int> mode3 = { { 2212,1}, {-3122,1}, {-211,1} };
127 const map<PdgId,unsigned int> mode3CC = { {-2212,1}, { 3122,1}, { 211,1} };
128 /// @}
129
130
131 };
132
133
134 RIVET_DECLARE_PLUGIN(BELLE_2005_I679165);
135
136}
|