rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2005_I677084

Helicity angle in $B^-\to D^0 D^{*-}$
Experiment: BELLE (KEKB)
Inspire ID: 677084
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 95 (2005) 041803
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B+- mesons, originally Upsilon(4S) decays

Measurement of the helicity angle distribution in $B^-\to D^0 D^{*-}$ decays. The background subtracted data were read from Figure 2 in the paper.

Source code: BELLE_2005_I677084.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief B- -> D0 D*-
 9  class BELLE_2005_I677084 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2005_I677084);
14
15
16    /// @name Analysis methods
17    /// @{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21
22      // Initialise and register projections
23      declare(UnstableParticles(Cuts::abspid==521), "UFS");
24
25      // Book histograms
26      book(_h_cTheta,1,1,1);
27    }
28
29
30    /// Perform the per-event analysis
31    void analyze(const Event& event) {
32      // Loop over B0 mesons
33      for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
34        // find the B decay
35        int sign = p.pid()/p.abspid();
36        if (p.children().size()!=2) continue;
37        Particle Dstar;
38        if (p.children()[0].pid()== sign*413 &&
39            p.children()[1].pid()==-sign*421) {
40          Dstar = p.children()[0];
41        }
42        else if (p.children()[1].pid()== sign*413 &&
43          p.children()[0].pid()==-sign*421) {
44          Dstar = p.children()[1];
45        }
46        else {
47          continue;
48        }
49        // and the D* decay
50        if (Dstar.children().size()!=2) continue;
51        Particle pip;
52        if (Dstar.children()[0].pid()==sign*421 &&
53            Dstar.children()[1].pid()==sign*211) {
54          pip = Dstar.children()[1];
55        }
56        else if (Dstar.children()[1].pid()==sign*421 &&
57                 Dstar.children()[0].pid()==sign*211) {
58          pip = Dstar.children()[0];
59        }
60        else {
61          continue;
62        }
63        // compute the helicity angle
64        // boost to B+ rest frame
65        LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
66        FourMomentum pDstar = boost1.transform(Dstar.momentum());
67        FourMomentum pPi    = boost1.transform(pip  .momentum());
68        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
69        pPi = boost2.transform(pPi);
70        const double cTheta = pPi.p3().unit().dot(pDstar.p3().unit());
71        _h_cTheta->fill(cTheta);
72      }
73    }
74
75
76    /// Normalise histograms etc., after the run
77    void finalize() {
78      normalize(_h_cTheta);
79    }
80
81    /// @}
82
83
84    /// @name Histograms
85    /// @{
86    Histo1DPtr _h_cTheta;
87    /// @}
88
89
90  };
91
92
93  RIVET_DECLARE_PLUGIN(BELLE_2005_I677084);
94
95}