Rivet analyses referenceBELLE_2020_I1796822$m_{\pi\pi}$ and $q^2$ distribution in $B^+\to\pi^+\pi^-\ell^+\nu_\ell$Experiment: BELLE (KEKB) Inspire ID: 1796822 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the $m_{\pi\pi}$ and $q^2$ distributions in the $B^+\to\pi^+\pi^-\ell^+\nu_\ell$ decay by the BELLE collaboration Source code: BELLE_2020_I1796822.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief B->D semileptonic decays
10 class BELLE_2020_I1796822 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2020_I1796822);
15
16
17 /// @name Analysis methods
18 ///@{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 declare(UnstableParticles(), "UFS");
25 // Book histograms
26 book(_h_mpipi,1,1,1);
27 book(_h_q2 ,2,1,1);
28 book(_nB,"/TMP/nB");
29 }
30
31 void findChildren(const Particle & p, unsigned int &ncount,
32 Particles & pi, Particles & ell, Particles & nu) {
33 _nB->fill();
34 for (const Particle &child : p.children()) {
35 if(child.children().empty()) {
36 if(child.abspid()==211) {
37 ++ncount;
38 pi.push_back(child);
39 }
40 else if(child.abspid()==11 || child.abspid()==13) {
41 ++ncount;
42 ell.push_back(child);
43 }
44 else if(child.abspid()==12 || child.abspid()==14) {
45 ++ncount;
46 nu.push_back(child);
47 }
48 else if(child.pid()!=22)
49 ++ncount;
50 }
51 // veto gamma gamma decaying mesons and K0
52 else if(child.pid()==111 || child.pid()==221 || child.pid()==331 ||
53 child.pid()==130 || child.pid()==310) {
54 ++ncount;
55 }
56 else
57 findChildren(child,ncount,pi,ell,nu);
58 }
59 }
60
61
62 /// Perform the per-event analysis
63 void analyze(const Event& event) {
64 for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==PID::BPLUS)) {
65 Particles pi,ell,nu;
66 unsigned int ncount = 0;
67 findChildren(p,ncount,pi,ell,nu);
68 // check the decay
69 // 4 outgoing
70 if(ncount!=4) continue;
71 // including pi+ pi-
72 if(pi.size()!=2 || pi[0].pid() != -pi[1].pid()) continue;
73 // and ell- nubar or ell+ nu
74 if(ell.size()!=1 || nu.size()!=1) continue;
75 int inu = ell[0].abspid()+1;
76 if(ell[0].pid()>0) inu *=-1;
77 if(nu[0].pid()!=inu) continue;
78 // fill histos
79 // m pipi
80 FourMomentum ppi = pi[0].momentum()+pi[1].momentum();
81 _h_mpipi->fill(ppi.mass());
82 // q2
83 FourMomentum q = p.momentum() - ppi;
84 _h_q2->fill(q.mass2());
85 }
86 }
87
88
89 /// Normalise histograms etc., after the run
90 void finalize() {
91 scale(_h_mpipi,1e5/ *_nB);
92 scale(_h_q2 ,1e5/ *_nB);
93 }
94
95 ///@}
96
97
98 /// @name Histograms
99 ///@{
100 Histo1DPtr _h_mpipi,_h_q2;
101 CounterPtr _nB;
102 ///@}
103
104
105 };
106
107
108 RIVET_DECLARE_PLUGIN(BELLE_2020_I1796822);
109
110}
|