rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2015_I1411223

Cross section for $(BB^*)^\pm\pi^\mp$ and $(B^*B^*)^\pm\pi^\mp$ for $\sqrt{s}=10.866$ GeV
Experiment: BELLE (KEKB)
Inspire ID: 1411223
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 116 (2016) 21, 212001
Beams: e+ e-
Beam energies: (5.4, 5.4) GeV
Run details:
  • e+ e- to hadrons, pi0 set stable

Measurement of the cross section for $(BB^*)^\pm\pi^\mp$ and $(B^*B^*)^\pm\pi^\mp$ at $\sqrt{s}=10.866$ GeV.

Source code: BELLE_2015_I1411223.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief e+e- > B(*) B* pi
 10  class BELLE_2015_I1411223 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2015_I1411223);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projections
 23      declare(FinalState(), "FS");
 24      // histograms
 25      for (unsigned int ix=0;ix<2;++ix) {
 26        book(_h[ix],1,1,1+ix);
 27      }
 28    }
 29
 30
 31    /// Perform the per-event analysis
 32    void analyze(const Event& event) {
 33      Particles fs = apply<FinalState>(event, "FS").particles();
 34      Particles BB,other;
 35      for(const Particle & p : fs) {
 36      	Particle parent=p;
 37       	while (!parent.parents().empty()) {
 38      	  parent=parent.parents()[0];
 39      	  if (parent.abspid()==511 || parent.abspid()==521 ||
 40             parent.abspid()==513 || parent.abspid()==523) break;
 41      	}
 42        if ((parent.abspid()==511 || parent.abspid()==521) &&
 43             !parent.parents().empty()) {
 44          Particle Bstar = parent.parents()[0];
 45          if (Bstar.abspid()==513 || Bstar.abspid()==523) {
 46            parent=Bstar;
 47          }
 48        }
 49        if (parent.abspid()==511 || parent.abspid()==521 ||
 50            parent.abspid()==513 || parent.abspid()==523) {
 51          bool found=false;
 52          for (const auto& B : BB) {
 53            // B already in list
 54            if (fuzzyEquals(B.mom(),parent.mom())) {
 55              found=true;
 56              break;
 57            }
 58          }
 59          if (!found) BB += parent;
 60        }
 61       	else {
 62       	  other += p;
 63       	}
 64      }
 65      // B Bbar + charged pion
 66      if (BB.size()!=2 || other.size()!=1) vetoEvent;
 67      if (BB[0].pid()*BB[1].pid()>0) vetoEvent;
 68      if (other[0].abspid()!=211) vetoEvent;
 69      if (BB[0].abspid()%10!=3) swap(BB[0],BB[1]);
 70      // B0 B*- pi+ +cc
 71      if ((BB[0].pid()==-513 && BB[1].pid()== 521 && other[0].pid()==-211) ||
 72      	  (BB[0].pid()== 513 && BB[1].pid()==-521 && other[0].pid()== 211) ||
 73          (BB[0].pid()== 523 && BB[1].pid()==-511 && other[0].pid()==-211) ||
 74          (BB[0].pid()==-523 && BB[1].pid()== 511 && other[0].pid()== 211)) {
 75        _h[0]->fill("10.866"s);
 76      }
 77      else if ((BB[0].pid()==-513 && BB[1].pid()== 523 && other[0].pid()==-211) ||
 78               (BB[0].pid()== 513 && BB[1].pid()==-523 && other[0].pid()== 211) ||
 79               (BB[0].pid()== 523 && BB[1].pid()==-513 && other[0].pid()==-211) ||
 80               (BB[0].pid()==-523 && BB[1].pid()== 513 && other[0].pid()== 211)) {
 81      	_h[1]->fill("10.866"s);
 82      }
 83    }
 84
 85
 86    /// Normalise histograms etc., after the run
 87    void finalize() {
 88      scale(_h, crossSection()/ sumOfWeights() /picobarn);
 89    }
 90
 91    /// @}
 92
 93
 94    /// @name Histograms
 95    /// @{
 96    BinnedHistoPtr<string> _h[2];
 97    /// @}
 98
 99
100  };
101
102
103  RIVET_DECLARE_PLUGIN(BELLE_2015_I1411223);
104
105}