rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2003_I620180

Mass and helicity angles in $B^+\to\rho^+\rho^0$
Experiment: BELLE (KEKB)
Inspire ID: 620180
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 91 (2003) 221801
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B+, originally Upsilon(4S) decay

Mass and helicity angles in $B^+\to\rho^+\rho^0$. The background subtracted data were read from figures 2 and 3 in the paper. Due to the large asymmetry due to the cuts the $\rho^+$ helicity angle is not included.

Source code: BELLE_2003_I620180.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+ -> rho0 rho+
10  class BELLE_2003_I620180 : public Analysis {
11  public:
12
13    /// Constructor
14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2003_I620180);
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( 113);
27      BP.addStable( 213);
28      BP.addStable(-213);
29      declare(BP, "BP");
30      // histos
31      book(_p[0],1,1,1);
32      book(_p[1],"TMP/nW");
33      for (unsigned int ix=0; ix<2; ++ix) {
34        book(_h_mass[ix], 2, 1, 1+ix);
35      }
36      book(_h_angle, 3, 1, 1);
37    }
38
39
40    /// Perform the per-event analysis
41    void analyze(const Event& event) {
42      DecayedParticles BP = apply<DecayedParticles>(event, "BP");
43      for(unsigned int ix=0;ix<BP.decaying().size();++ix) {
44       	int sign = BP.decaying()[ix].pid()/BP.decaying()[ix].abspid();
45        if ((sign== 1 && BP.modeMatches(ix,2,mode)) || (sign==-1 && BP.modeMatches(ix,2,modeCC))) {
46          const Particle& rhop = BP.decayProducts()[ix].at( sign*213)[0];
47          const Particle& rho0 = BP.decayProducts()[ix].at(      113)[0];
48          _h_mass[0]->fill(rho0.mass());
49          _h_mass[1]->fill(rhop.mass());
50          // compute the helicity angle
51          if (rho0.children().size()!=2) continue;
52          if (rho0.children()[0].pid()!=-rho0.children()[1].pid()) continue;
53          if (rho0.children()[0].abspid()!=211) continue;
54          LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].mom().betaVec());
55          FourMomentum prho = boost1.transform(rho0.mom());
56          FourMomentum ppi  = boost1.transform(rho0.children()[0].mom());
57          LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(prho.betaVec());
58          ppi = boost2.transform(ppi);
59          const double cTheta = ppi.p3().unit().dot(prho.p3().unit());
60          _h_angle->fill(cTheta);
61          _p[0]->fill(-50.*(1.-5.*sqr(cTheta)));
62          _p[1]->fill();
63        }
64      }
65    }
66
67
68    /// Normalise histograms etc., after the run
69    void finalize() {
70      normalize(_h_mass, 1.0, false);
71      normalize(_h_angle, 1.0, false);
72      scale(_p[0], 1./ *_p[1]);
73    }
74
75    /// @}
76
77
78    /// @name Histograms
79    /// @{
80    Histo1DPtr _h_mass[2],_h_angle;
81    CounterPtr _p[2];
82    const map<PdgId,unsigned int> mode   = { { 213,1}, {113,1} };
83    const map<PdgId,unsigned int> modeCC = { {-213,1}, {113,1} };
84    /// @}
85
86
87  };
88
89
90  RIVET_DECLARE_PLUGIN(BELLE_2003_I620180);
91
92}