rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2008_I778726

$B^0\to p\bar{p}K^{*0}$ and $B^+\to p\bar{p}K^{*+}$
Experiment: BELLE (KEKB)
Inspire ID: 778726
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 100 (2008) 251801
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B0 and B+ mesons, originally Upsilon(4S) decays

Kinematic distributions in $B^0\to p\bar{p}K^{*0}$ and $B^+\to p\bar{p}K^{*+}$ decays. The branchingf ratio vs $p\bar{p}$ was taken from Table I in the paper, while the uncorrected kaon helicity angle and corrected proton angle were read from figures in the paper.

Source code: BELLE_2008_I778726.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*
 10  class BELLE_2008_I778726 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2008_I778726);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 || Cuts::abspid==521);
 24      declare(ufs, "UFS");
 25      DecayedParticles BB(ufs);
 26      BB.addStable( 313);
 27      BB.addStable(-313);
 28      BB.addStable( 323);
 29      BB.addStable(-323);
 30      declare(BB, "BB");
 31      // histos
 32      for(unsigned int iy=0;iy<2;++iy) {
 33        book(_c[iy],"TMP/c_+"+toString(iy+1));
 34        for (unsigned int ix=0;ix<3;++ix) {
 35          book(_h[ix][iy],ix+1,1,1+iy);
 36        }
 37      }
 38    }
 39
 40    bool isK(int id) const {
 41      return id==321 || id==311 || id==310 || id==130;
 42    }
 43
 44    bool isPi(int id) const {
 45      return id==211 || id==111;
 46    }
 47
 48    /// Perform the per-event analysis
 49    void analyze(const Event& event) {
 50      DecayedParticles BB = apply<DecayedParticles>(event, "BB");
 51      // loop over particles
 52      for (unsigned int ix=0; ix<BB.decaying().size(); ++ix) {
 53        int sign = 1;
 54        int imode=0;
 55        if (BB.decaying()[ix].abspid()==511) {
 56          _c[0]->fill();
 57          if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) {
 58            sign=1;
 59          }
 60          else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC)) {
 61            sign=-1;
 62          }
 63          else {
 64            continue;
 65          }
 66        }
 67        else {
 68          imode=1;
 69          _c[1]->fill();
 70          if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) {
 71            sign=1;
 72          }
 73          else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)) {
 74            sign=-1;
 75          }
 76          else {
 77            continue;
 78          }
 79        }
 80        int iK = imode==0 ? 313 : 323;
 81        const Particle& pp    = BB.decayProducts()[ix].at( sign*2212)[0];
 82        const Particle& pbar  = BB.decayProducts()[ix].at(-sign*2212)[0];
 83        const Particle& Kstar = BB.decayProducts()[ix].at( sign*iK  )[0];
 84        FourMomentum ppbar = pp.mom()+pbar.mom();
 85        double mppbar = ppbar.mass();
 86        _h[0][imode]->fill(mppbar);
 87        if (mppbar<2.85) {
 88          // boost to B rest frame
 89          LorentzTransform boost =
 90            LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. mom().betaVec());
 91          FourMomentum pKstar  = boost.transform(Kstar.mom());
 92          // proton helicity angle
 93          FourMomentum pProton = boost.transform(pp.mom());
 94          ppbar = boost.transform(ppbar);
 95          LorentzTransform boost1 =
 96            LorentzTransform::mkFrameTransformFromBeta(ppbar.betaVec());
 97          pProton = boost1.transform(pProton);
 98          _h[2][imode]->fill(pKstar.p3().unit().dot(pProton.p3().unit()));
 99          Particle KK;
100          if (isK (Kstar.children()[0].abspid()) &&
101             isPi(Kstar.children()[1].abspid())) {
102            KK = Kstar.children()[0];
103          }
104          else if (isK (Kstar.children()[1].abspid()) &&
105            isPi(Kstar.children()[0].abspid())) {
106            KK = Kstar.children()[1];
107          }
108          else {
109            continue;
110          }
111          FourMomentum pK = boost.transform(KK.mom());
112          const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
113          pK = boost3.transform(pK);
114          FourMomentum pB = boost3.transform(boost.transform(BB.decaying()[ix].mom()));
115          const double cosK = -pB.p3().unit().dot(pK.p3().unit());
116          _h[1][imode]->fill(cosK);
117        }
118      }
119    }
120
121
122    /// Normalise histograms etc., after the run
123    void finalize() {
124      for (unsigned int ix=0; ix<3; ++ix) {
125        for (unsigned int iy=0; iy<2; ++iy) {
126          if (ix==0) scale    (_h[ix][iy], 1e6/ *_c[iy]);
127          else       normalize(_h[ix][iy], 1.0, false);
128        }
129      }
130    }
131
132    /// @}
133
134
135    /// @name Histograms
136    /// @{
137    Histo1DPtr _h[3][2];
138    CounterPtr _c[2];
139    const map<PdgId,unsigned int> mode1   = { { 2212,1},{-2212,1}, { 313,1}};
140    const map<PdgId,unsigned int> mode1CC = { { 2212,1},{-2212,1}, {-313,1}};
141    const map<PdgId,unsigned int> mode2   = { { 2212,1},{-2212,1}, { 323,1}};
142    const map<PdgId,unsigned int> mode2CC = { { 2212,1},{-2212,1}, {-323,1}};
143    /// @}
144
145
146  };
147
148
149  RIVET_DECLARE_PLUGIN(BELLE_2008_I778726);
150
151}