rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2005_I679165

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^-$
Experiment: BELLE (KEKB)
Inspire ID: 679165
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B 617 (2005) 141-149
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B+ mesons, originally Upsilon(4S) decays

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}