rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2009_I803343

Mass and angular distributions in $B\to\Lambda^0\bar\Lambda^0 K^{(*)}$
Experiment: BELLE (KEKB)
Inspire ID: 803343
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 79 (2009) 052006
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B0, originally Upsilon(4S) decay

Measurement of mass and angular distributions in $B^0\to\Lambda^0\bar\Lambda^0 K^0$, $B^+\to\Lambda^0\bar\Lambda^0 K^+$ and $B^0\to\Lambda^0\bar\Lambda^0 K^{*0}$. The data for the mass spectra was read from the tables in the paper and are fully corrected, while those for the angular distributions in the threshold region were read from the figures and may not be corrected.

Source code: BELLE_2009_I803343.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 B0 -> Lambda Lambdabar K(*)0
 10  class BELLE_2009_I803343 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2009_I803343);
 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::pid==511 ||
 24						Cuts::pid==521);
 25      declare(ufs, "UFS");
 26      DecayedParticles BB(ufs);
 27      BB.addStable( 3122);
 28      BB.addStable(-3122);
 29      BB.addStable( 310);
 30      BB.addStable( 313);
 31      BB.addStable(-313);
 32      declare(BB, "BB");
 33      // histograms
 34      for(unsigned int ix=0;ix<3;++ix) {
 35	book(_h_mass[ix],1,1,1+ix);
 36	book(_h_angle[ix],2+ix,1,1);
 37      }
 38      book(_c[0],"TMP/nB0");
 39      book(_c[1],"TMP/nBP");
 40    }
 41
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45      static const map<PdgId,unsigned int> & mode1   = { { 3122,1},{-3122,1}, { 310,1}};
 46      static const map<PdgId,unsigned int> & mode2   = { { 3122,1},{-3122,1}, { 321,1}};
 47      static const map<PdgId,unsigned int> & mode2CC = { { 3122,1},{-3122,1}, {-321,1}};
 48      static const map<PdgId,unsigned int> & mode3   = { { 3122,1},{-3122,1}, { 313,1}};
 49      static const map<PdgId,unsigned int> & mode3CC = { { 3122,1},{-3122,1}, {-313,1}};
 50      DecayedParticles BB = apply<DecayedParticles>(event, "BB");
 51      // loop over particles
 52      for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
 53	if(BB.decaying()[ix].abspid()==511) _c[0]->fill();
 54	else                                _c[1]->fill();
 55	unsigned int imode=0;
 56	if (BB.modeMatches(ix,3,mode1))
 57	  imode=0;
 58	else if((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) ||
 59		(BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)))
 60	  imode=1;
 61	else if((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3)) ||
 62		(BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3CC)))
 63	  imode=2;
 64	else
 65	  continue;
 66	int sign = BB.decaying()[ix].pid()>0 ? 1 : -1;
 67       	const Particle & Lam    = BB.decayProducts()[ix].at( sign*3122)[0];
 68       	const Particle & LamBar = BB.decayProducts()[ix].at(-sign*3122)[0];
 69	FourMomentum pLL = Lam.momentum()+LamBar.momentum();
 70	double mass = pLL.mass();
 71	_h_mass[imode]->fill(mass);
 72	// rest just in threshold region
 73	if(mass>2.85) continue;
 74	// boost to B rest frame
 75	LorentzTransform boost =
 76	  LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. momentum().betaVec());
 77	// B+ K+
 78	if(imode==1) {
 79	  pLL = boost.transform(pLL);
 80	  LorentzTransform boost2 =
 81	    LorentzTransform::mkFrameTransformFromBeta(pLL.betaVec());
 82	  
 83	  FourMomentum pLam    = boost2.transform(boost.transform(Lam.momentum()));
 84	  FourMomentum pLamB   = boost2.transform(boost.transform(LamBar.momentum()));
 85	  const Particle & Kp  = BB.decayProducts()[ix].at( sign*321)[0];
 86	  FourMomentum pK      = boost2.transform(boost.transform(Kp.momentum()));
 87	  double cLam = pK.p3().unit().dot(pLamB.p3().unit());
 88	  _h_angle[1]->fill(cLam);
 89	  if(Lam.children().size()==2) {
 90	    Particle proton;
 91	    if(Lam.children()[0].pid()== sign*2212 &&
 92	       Lam.children()[1].pid()==-sign*211 ) {
 93	      proton = Lam.children()[0];
 94	    }
 95	    else if(Lam.children()[1].pid()== sign*2212 &&
 96		    Lam.children()[0].pid()==-sign*211 ){
 97	      proton = Lam.children()[1];
 98	    }
 99	    if(proton.pid()==sign*2212) {
100	      LorentzTransform boostL =  LorentzTransform::mkFrameTransformFromBeta(pLam.betaVec());
101	      FourMomentum pp = boostL.transform(boost2.transform(boost.transform(proton.momentum())));
102	      double cTheta = pp.p3().unit().dot(pLam.p3().unit());
103	      _h_angle[0]->fill(cTheta);
104	    }
105	  }
106	}
107	// B0 -> K*0
108	else if(imode==2) {
109	  const Particle & Kstar  = BB.decayProducts()[ix].at( sign*313)[0];
110	  Particle KK;
111	  if(Kstar.children()[0].abspid()==321 &&
112	     Kstar.children()[1].abspid()==211)
113	    KK = Kstar.children()[0];
114	  else if(Kstar.children()[1].abspid()==321 &&
115		  Kstar.children()[0].abspid()==211)
116	    KK = Kstar.children()[1];
117	  else continue;
118	  FourMomentum pKstar = boost.transform(Kstar.momentum());
119	  FourMomentum pK     = boost.transform(KK   .momentum());
120	  const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
121	  pK = boost3.transform(pK);
122	  FourMomentum pB = boost3.transform(boost.transform(BB.decaying()[ix].momentum()));
123	  double cosK = -pB.p3().unit().dot(pK.p3().unit());
124	  _h_angle[2]->fill(cosK);
125	}
126      }
127    }
128
129
130    /// Normalise histograms etc., after the run
131    void finalize() {
132      for(unsigned int ix=0;ix<3;++ix) {
133	if(ix%2==0) scale(_h_mass[ix],1e6/ *_c[0]);
134	else        scale(_h_mass[ix],1e6/ *_c[1]);
135	normalize(_h_angle[ix]);
136      }
137    }
138
139    /// @}
140
141    /// @name Histograms
142    /// @{
143    Histo1DPtr _h_mass[3],_h_angle[3];
144    CounterPtr _c[2];
145    /// @}
146
147
148  };
149
150
151  RIVET_DECLARE_PLUGIN(BELLE_2009_I803343);
152
153}