rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2005_I651511

Helicity angle and $\pi^+\pi^0$ mass in $B^+\to\pi^+\pi^0\pi^0$
Experiment: BELLE (KEKB)
Inspire ID: 651511
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 94 (2005) 031801
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B+ mesons, originally Upsilon(4S) decays

Measurement of the Helicity angle and $\pi^+\pi^0$ mass in $B^+\to\pi^+\pi^0\pi^0$. The background subracted was read from figures 2 and 3 in the paper.

Source code: BELLE_2005_I651511.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+ -> pi+ pi0 pi0
10  class BELLE_2005_I651511 : public Analysis {
11  public:
12
13    /// Constructor
14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2005_I651511);
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==521);
24      declare(ufs, "UFS");
25      DecayedParticles BP(ufs);
26      BP.addStable( 111);
27      declare(BP, "BP");
28      // histos
29      for (unsigned int ix=0; ix<2; ++ix) {
30        book(_h[ix], 1+ix, 1, 1);
31      }
32    }
33
34
35    /// Perform the per-event analysis
36    void analyze(const Event& event) {
37      DecayedParticles BP = apply<DecayedParticles>(event, "BP");
38      for (unsigned int ix=0;ix<BP.decaying().size();++ix) {
39      	int sign = 1;
40      	if (BP.decaying()[ix].pid()>0 && BP.modeMatches(ix,3,mode))        sign= 1;
41      	else if (BP.decaying()[ix].pid()<0 && BP.modeMatches(ix,3,modeCC)) sign=-1;
42      	else continue;
43       	const Particle& pip = BP.decayProducts()[ix].at( sign*211)[0];
44       	const Particles& pi0 = BP.decayProducts()[ix].at(      111);
45        FourMomentum pRho[2] = {pip.mom()+pi0[0].mom(),	pip.mom()+pi0[1].mom()};
46        double mRho[2] = {pRho[0].mass(),pRho[1].mass()};
47        unsigned int iloc = mRho[0]<mRho[1] ? 0 : 1;
48        _h[1]->fill(mRho[iloc]);
49        // compute the helicity angles
50        LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].mom().betaVec());
51        FourMomentum prho = boost1.transform(pRho[iloc]);
52        FourMomentum ppi  = boost1.transform(pip.mom());
53        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(prho.betaVec());
54        ppi = boost2.transform(ppi);
55        const double cTheta = ppi.p3().unit().dot(prho.p3().unit());
56        _h[0]->fill(cTheta);
57      }
58    }
59
60
61    /// Normalise histograms etc., after the run
62    void finalize() {
63      normalize(_h, 1.0, false);
64    }
65    /// @}
66
67
68    /// @name Histograms
69    /// @{
70    Histo1DPtr _h[2];
71    const map<PdgId,unsigned int> mode   = { { 211,1}, { 111,2}};
72    const map<PdgId,unsigned int> modeCC = { {-211,1}, { 111,2}};
73    /// @}
74
75
76  };
77
78
79  RIVET_DECLARE_PLUGIN(BELLE_2005_I651511);
80
81}