Rivet analyses referenceBELLE_2005_I677084Helicity angle in $B^-\to D^0 D^{*-}$Experiment: BELLE (KEKB) Inspire ID: 677084 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
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}
|