rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2007_I748975

$B^+\to p \bar{\Lambda}^0\gamma$, $B^+\to p \bar{\Lambda}^0\pi^0$ and $B^0\to p \bar{\Lambda}^0\pi^-$
Experiment: BELLE (KEKB)
Inspire ID: 748975
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 76 (2007) 052004
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B0 and B+ mesons, originally Upsilon(4S) decays

Mass and angular distributions in $B^+\to p \bar{\Lambda}^0\gamma$, $B^+\to p \bar{\Lambda}^0\pi^0$ and $B^0\to p \bar{\Lambda}^0\pi^-$ decays. The mass distributions, $\alpha$ parameters and average $\bar{\Lambda}^0$ energies were read from the table in the paper, while the $\cos\theta_p$ distributions were extracted from the figures.

Source code: BELLE_2007_I748975.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 Lambdabar X decays
 10  class BELLE_2007_I748975 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2007_I748975);
 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==511 || Cuts::abspid==521);
 23      declare(ufs, "UFS");
 24      DecayedParticles BB(ufs);
 25      BB.addStable(PID::PI0);
 26      BB.addStable( 3122);
 27      BB.addStable(-3122);
 28      declare(BB, "BB");
 29      // histos
 30      for (unsigned int iy=0; iy<3; ++iy) {
 31        book(_h_mass [iy],1,1,1+iy);
 32        book(_h_cosp [iy],2,1,1+iy);
 33        book(_h_alpha[iy][0],3,1,1+iy);
 34        book(_h_alpha[iy][1],"TMP/h_alpha_"+toString(1+iy));
 35        book(_h_E    [iy][0],4,1,1+iy);
 36        book(_h_E    [iy][1],"TMP/h_E_"+toString(1+iy));
 37      }
 38      for (unsigned int iy=0;iy<2;++iy) {
 39        book(_c[iy],"TMP/c_"+toString(iy+1));
 40      }
 41    }
 42
 43
 44    /// Perform the per-event analysis
 45    void analyze(const Event& event) {
 46      DecayedParticles BB = apply<DecayedParticles>(event, "BB");
 47      // loop over particles
 48      for (unsigned int ix=0; ix<BB.decaying().size(); ++ix) {
 49        int imode=0, sign=1, idOther=22;
 50        if (BB.decaying()[ix].abspid()==521) {
 51          _c[0]->fill();
 52          if (BB.modeMatches(ix,3,mode1)) {
 53            imode= 0;
 54            sign = 1;
 55          }
 56          else if (BB.modeMatches(ix,3,mode1CC)) {
 57            imode= 0;
 58            sign =-1;
 59          }
 60          else if (BB.modeMatches(ix,3,mode2)) {
 61            imode= 1;
 62            sign = 1;
 63            idOther= 111;
 64          }
 65          else if (BB.modeMatches(ix,3,mode2CC)) {
 66            imode= 1;
 67            sign =-1;
 68            idOther= 111;
 69          }
 70          else continue;
 71        }
 72        else {
 73          _c[1]->fill();
 74          if (BB.modeMatches(ix,3,mode3)) {
 75            imode= 2;
 76            sign = 1;
 77            idOther=-211;
 78          }
 79          else if (BB.modeMatches(ix,3,mode3CC)) {
 80            imode= 2;
 81            sign =-1;
 82            idOther= 211;
 83          }
 84          else continue;
 85        }
 86        const Particle& pp = BB.decayProducts()[ix].at( sign*2212)[0];
 87        const Particle& lbar  = BB.decayProducts()[ix].at(-sign*3122)[0];
 88        const Particle& other = BB.decayProducts()[ix].at(idOther)[0];
 89        FourMomentum pbaryon = pp.mom()+lbar.mom();
 90        double mass = pbaryon.mass();
 91        _h_mass[imode]->fill(mass);
 92        // boost to B rest frame
 93        LorentzTransform boost =
 94          LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. mom().betaVec());
 95        FourMomentum pLam = boost.transform(lbar.mom());
 96        pbaryon = boost.transform(pbaryon);
 97        FourMomentum pProton = boost.transform(pp.mom());
 98        _h_E[imode][0]->fill(pLam.E());
 99        _h_E[imode][1]->fill();
100        if (mass<2.8) {
101          Vector3 axis = boost.transform(other.mom()).p3().unit();
102          LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(pbaryon.betaVec());
103          double cosp = axis.dot(boost1.transform(pProton).p3().unit());
104          _h_cosp[imode]->fill(cosp);
105        }
106        // finally the alpha parameter
107        // Lambda decay products
108        if (lbar.children().size()!=2) continue;
109        Particle pbar;
110        if (lbar.children()[0].pid()==-2212 &&
111           lbar.children()[1].pid()== 211) {
112          pbar = lbar.children()[0];
113        }
114        else if (lbar.children()[1].pid()==-sign*2212 &&
115          lbar.children()[0].pid()== sign*211) {
116          pbar = lbar.children()[1];
117        }
118        else {
119          continue;
120        }
121        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pLam.betaVec());
122        Vector3 axis1 = - boost2.transform(boost.transform(BB.decaying()[ix].mom())).p3().unit();
123        Vector3 axis2 = - boost2.transform(boost.transform(pbar.mom())).p3().unit();
124        double cTheta = axis1.dot(axis2);
125        _h_alpha[imode][0]->fill(1.5*cTheta);
126        _h_alpha[imode][1]->fill();
127      }
128    }
129
130
131    /// Normalise histograms etc., after the run
132    void finalize() {
133      normalize(_h_cosp, 1.0, false);
134      scale(_h_mass[0],1e6/ *_c[0]);
135      scale(_h_mass[1],1e6/ *_c[0]);
136      scale(_h_mass[2],1e6/ *_c[1]);
137      for(unsigned int ix=0;ix<3;++ix) {
138        scale(_h_alpha[ix][0], 1./ *_h_alpha[ix][1]);
139        scale(_h_E    [ix][0], 1./ *_h_E    [ix][1]);
140      }
141    }
142
143    /// @}
144
145
146    /// @name Histograms
147    /// @{
148    Histo1DPtr _h_mass[3],_h_cosp[3];
149    CounterPtr _h_alpha[3][2],_h_E[3][2];
150    CounterPtr _c[2];
151    const map<PdgId,unsigned int> mode1   = { { 2212,1}, {-3122,1}, { 22,1} };
152    const map<PdgId,unsigned int> mode1CC = { {-2212,1}, { 3122,1}, { 22,1} };
153    const map<PdgId,unsigned int> mode2   = { { 2212,1}, {-3122,1}, { 111,1} };
154    const map<PdgId,unsigned int> mode2CC = { {-2212,1}, { 3122,1}, { 111,1} };
155    const map<PdgId,unsigned int> mode3   = { { 2212,1}, {-3122,1}, {-211,1} };
156    const map<PdgId,unsigned int> mode3CC = { {-2212,1}, { 3122,1}, { 211,1} };
157    /// @}
158
159
160  };
161
162
163  RIVET_DECLARE_PLUGIN(BELLE_2007_I748975);
164
165}