Rivet analyses referenceCLEOII_2003_I616827Differential branching ratio in $B^0\to(\pi^-,\rho^-)\ell^+\nu_\ell$Experiment: CLEOII (CESR) Inspire ID: 616827 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Differential branching ratio with respect to $q^2$ in $B^0\to(\pi^-,\rho^-)\ell^+\nu_\ell$ Source code: CLEOII_2003_I616827.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief B0 -> pi/rho ell+ nu_ell
9 class CLEOII_2003_I616827 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_2003_I616827);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // Initialise and register projections
22 declare(UnstableParticles(Cuts::abspid==511), "UFS");
23 for (unsigned int ix=0; ix<2; ++ix) {
24 book(_h[ix], 1+ix, 1, 1);
25 }
26 book(_c,"TMP/nB");
27 }
28
29 // Calculate the Q2 using mother and daugher meson
30 double q2(const Particle& B, int mesonID) {
31 FourMomentum q = B.mom() - select(B.children(), Cuts::pid==mesonID)[0];
32 return q*q;
33 }
34
35 // Check for explicit decay into pdgids
36 bool isSemileptonicDecay(const Particle& mother, vector<int> ids) {
37 // Trivial check to ignore any other decays but the one in question modulo photons
38 const Particles children = mother.children(Cuts::pid!=PID::PHOTON);
39 if (children.size()!=ids.size()) return false;
40 // Check for the explicit decay
41 return all(ids, [&](int i){return count(children, hasPID(i))==1;});
42 }
43
44 /// Perform the per-event analysis
45 void analyze(const Event& event) {
46 // Loop over B0bar Mesons
47 for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==PID::B0BAR)) {
48 _c->fill();
49 if (isSemileptonicDecay(p, {PID::PIPLUS, PID::ELECTRON, PID::NU_EBAR}) ||
50 isSemileptonicDecay(p, {PID::PIPLUS, PID::MUON, PID::NU_MUBAR})) {
51 _h[0]->fill(q2(p, PID::PIPLUS));
52 }
53 if (isSemileptonicDecay(p, {PID::RHOPLUS, PID::ELECTRON, PID::NU_EBAR}) ||
54 isSemileptonicDecay(p, {PID::RHOPLUS, PID::MUON, PID::NU_MUBAR})) {
55 _h[1]->fill(q2(p, PID::RHOPLUS));
56 }
57 }
58 }
59
60
61 /// Normalise histograms etc., after the run
62 void finalize() {
63 // 1e4 for q0-4 in BR and 0.5 as both e/mu modes
64 scale(_h, 0.5*1e4/ *_c);
65 }
66
67 /// @}
68
69
70 /// @name Histograms
71 /// @{
72 Histo1DPtr _h[2];
73 CounterPtr _c;
74 /// @}
75
76
77 };
78
79
80 RIVET_DECLARE_PLUGIN(CLEOII_2003_I616827);
81
82}
|