Belle II Software  release-05-01-25
EvtBSemiTauonicDecayRateCalculator.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2013 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Koji Hara *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include "EvtGenBase/EvtComplex.hh"
12 #include "generators/evtgen/EvtBSemiTauonicDecayRateCalculator.h"
13 #include "generators/evtgen/models/EvtBSemiTauonicHelicityAmplitudeCalculator.h"
14 #include <cmath>
15 #include <complex>
16 
17 #include "TF1.h"
18 #include "TF2.h"
19 #include "Math/WrappedTF1.h"
20 #include "Math/WrappedMultiTF1.h"
21 //#include "Math/GSLIntegrator.h" // USABLE ON KEKCC BUT NOT ON BUILDBOT
22 #include "Math/GaussIntegrator.h"
23 #include "Math/AdaptiveIntegratorMultiDim.h"
24 //#include "Math/GSLMCIntegrator.h"
25 
26 namespace Belle2 {
32 // dgamma/dw/dcostau
34  double mtau, int tauhel, int Dhel, double w, double costau)
35  {
36  EvtComplex temp = BSTD.helAmp(mtau, tauhel, Dhel, w, costau);
37  std::complex<double> amp(real(temp), imag(temp));
38 
39  return std::norm(amp) * pf(BSTD, mtau, Dhel, w);
40  }
41 
42 // dgamma integrated for costau
44  double mtau, int tauhel, int Dhel, double w)
45  {
46  m_BSTD = &BSTD;
47  TF1 f1("f1", this, &EvtBSemiTauonicDecayRateCalculator::EvaluateByCostau, -1, 1, 4,
48  "EvtBSemiTauonicDecayRateCalculator", "EvaluateByCostau");
49  f1.SetParameter(0, mtau);
50  f1.SetParameter(1, tauhel);
51  f1.SetParameter(2, Dhel);
52  f1.SetParameter(3, w);
53  ROOT::Math::WrappedTF1 wf1(f1);
54 // ROOT::Math::GSLIntegrator ig;
55  ROOT::Math::GaussIntegrator ig;
56  ig.SetFunction(wf1);
57  return ig.Integral(-1, 1);
58  }
59 
60 // dgamma integrated for w
62  int tauhel, int Dhel, double costau)
63  {
64  m_BSTD = &BSTD;
65  TF1 f1("f1", this, &EvtBSemiTauonicDecayRateCalculator::EvaluateByW, BSTD.wmin(), BSTD.wmax(mtau, Dhel), 4,
66  "EvtBSemiTauonicDecayRateCalculator", "EvaluateByW");
67  f1.SetParameter(0, mtau);
68  f1.SetParameter(1, tauhel);
69  f1.SetParameter(2, Dhel);
70  f1.SetParameter(3, costau);
71  ROOT::Math::WrappedTF1 wf1(f1);
72 // ROOT::Math::GSLIntegrator ig;
73  ROOT::Math::GaussIntegrator ig;
74  ig.SetFunction(wf1);
75  return ig.Integral(BSTD.wmin(), BSTD.wmax(mtau, Dhel));
76  }
77 
78 // gamma integrated for costau and w
80  double mtau, int tauhel, int Dhel)
81  {
82  m_BSTD = &BSTD;
84  BSTD.wmin(), BSTD.wmax(mtau, Dhel), -1, 1, 3,
85  "EvtBSemiTauonicDecayRateCalculator", "EvaluateBy2D");
86  f1.SetParameter(0, mtau);
87  f1.SetParameter(1, tauhel);
88  f1.SetParameter(2, Dhel);
89  ROOT::Math::WrappedMultiTF1 wf1(f1);
90 
91  // Create the Integrator
92  ROOT::Math::AdaptiveIntegratorMultiDim ig;
93  ig.SetFunction(wf1);
94  double xmin[] = {BSTD.wmin(), -1};
95  double xmax[] = {BSTD.wmax(mtau, Dhel), 1};
96  return ig.Integral(xmin, xmax);
97  }
98 
100  double EvtBSemiTauonicDecayRateCalculator::GammaD(const EvtBSemiTauonicHelicityAmplitudeCalculator& BSTD, double mtau)
101  {
102  double sum(0);
103  sum += Gamma(BSTD, mtau, -1, 2);
104  sum += Gamma(BSTD, mtau, +1, 2);
105  return sum;
106  }
107 
109  {
110  double sum(0);
111  for (int Dhel = -1; Dhel <= 1; Dhel++) {
112  sum += Gamma(BSTD, mtau, -1, Dhel);
113  sum += Gamma(BSTD, mtau, +1, Dhel);
114  }
115  return sum;
116  }
117 
118 // SM
120  {
121 
123  SM.setCV1(0);
124  SM.setCV2(0);
125  SM.setCS1(0);
126  SM.setCS2(0);
127  SM.setCT(0);
128  double sum(0);
129  sum += Gamma(SM, mlep, -1, 2);
130  sum += Gamma(SM, mlep, +1, 2);
131  return sum;
132  }
133 
135  {
137  SM.setCV1(0);
138  SM.setCV2(0);
139  SM.setCS1(0);
140  SM.setCS2(0);
141  SM.setCT(0);
142  double sum(0);
143  for (int Dhel = -1; Dhel <= 1; Dhel++) {
144  sum += Gamma(SM, mlep, -1, Dhel);
145  sum += Gamma(SM, mlep, +1, Dhel);
146  }
147  return sum;
148  }
149 
150 // R(D) and R(Dstar)
151  double EvtBSemiTauonicDecayRateCalculator::RGammaD(const EvtBSemiTauonicHelicityAmplitudeCalculator& BSTD, const double mtau,
152  const double mlep)
153  {
154  double sum(0);
155  sum += Gamma(BSTD, mtau, -1, 2);
156  sum += Gamma(BSTD, mtau, +1, 2);
157  return sum / GammaSMD(BSTD, mlep);
158  }
159 
161  const double mlep)
162  {
163  double sum(0);
164  for (int Dhel = -1; Dhel <= 1; Dhel++) {
165  sum += Gamma(BSTD, mtau, -1, Dhel);
166  sum += Gamma(BSTD, mtau, +1, Dhel);
167  }
168  return sum / GammaSMDstar(BSTD, mlep);
169  }
170 
171 // Polarizations
173  {
174  double left(0), right(0);
175  left += Gamma(BSTD, mtau, -1, 2);
176  right += Gamma(BSTD, mtau, +1, 2);
177  return (right - left) / (right + left);
178  }
179  double EvtBSemiTauonicDecayRateCalculator::PtauDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator& BSTD, const double mtau)
180  {
181  double left(0), right(0);
182  for (int Dhel = -1; Dhel <= 1; Dhel++) {
183  left += Gamma(BSTD, mtau, -1, Dhel);
184  right += Gamma(BSTD, mtau, +1, Dhel);
185  }
186  return (right - left) / (right + left);
187  }
188 
190  {
191  double transverse(0), longitudinal(0);
192  transverse += Gamma(BSTD, mtau, -1, -1);
193  transverse += Gamma(BSTD, mtau, +1, -1);
194  transverse += Gamma(BSTD, mtau, -1, +1);
195  transverse += Gamma(BSTD, mtau, +1, +1);
196  longitudinal += Gamma(BSTD, mtau, -1, 0);
197  longitudinal += Gamma(BSTD, mtau, +1, 0);
198  return longitudinal / (longitudinal + transverse);
199  }
200 
202  double w)
203  {
204  return 1. / (2 * BSTD.getMB()) * BSTD.getMB() * BSTD.getMB() * BSTD.r(Dhel) * BSTD.r(Dhel)
205  * BSTD.v(mtau, BSTD.q2(Dhel, w)) * BSTD.v(mtau, BSTD.q2(Dhel, w))
206  * sqrt(w * w - 1) / (64 * M_PI * M_PI * M_PI);
207  }
208 
209  double EvtBSemiTauonicDecayRateCalculator::EvaluateByW(double* x, double* param)
210  {
211  // x=w
212  return dGammadwdcostau(*m_BSTD, param[0], (int)param[1], (int)param[2], x[0], param[3]);
213  }
214 
215  double EvtBSemiTauonicDecayRateCalculator::EvaluateByCostau(double* x, double* param)
216  {
217  // x=costau
218  return dGammadwdcostau(*m_BSTD, param[0], (int)param[1], (int)param[2], param[3], x[0]);
219  }
220 
221  double EvtBSemiTauonicDecayRateCalculator::EvaluateBy2D(double* x, double* param)
222  {
223  // x={w,costau}
224  return dGammadwdcostau(*m_BSTD, param[0], (int)param[1], (int)param[2], x[0], x[1]);
225  }
226 
228 } // namespace Belle2
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::setCT
void setCT(const EvtComplex &v)
Sets the Wilson coeffcient CT.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:542
Belle2::EvtBSemiTauonicDecayRateCalculator::PtauD
double PtauD(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mtau)
Function calculates the polarization of tau, (RH - LH)/(LH + RH), in B->Dtaunu decay.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:180
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::setCV2
void setCV2(const EvtComplex &v)
Sets the Wilson coeffcient CV2.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:533
Belle2::EvtBSemiTauonicDecayRateCalculator::RGammaD
double RGammaD(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mtau, const double mlep=0.0005110)
Function calculates the ratio of Br(B->Dtaunu)/Br(B->Dlnu), R(D).
Definition: EvtBSemiTauonicDecayRateCalculator.cc:159
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::q2
double q2(int Dhel, double w) const
Function to calculate the q^2 of the decay (square of l+nu invariant mass).
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.cc:532
Belle2::EvtBSemiTauonicDecayRateCalculator::GammaDstar
double GammaDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau)
Function calculates the differential decay rate Gamma for D*taunu decay, integrated for w and costau ...
Definition: EvtBSemiTauonicDecayRateCalculator.cc:116
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::v
double v(double mtau, double q2) const
Function to calculate the tau velocity.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.cc:520
Belle2::EvtBSemiTauonicDecayRateCalculator::GammaSMD
double GammaSMD(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mlep=0.0005110)
Function calculates the SM decay rate Gamma for Dlnu decay, integrated for w and costau and summed fo...
Definition: EvtBSemiTauonicDecayRateCalculator.cc:127
Belle2::EvtBSemiTauonicDecayRateCalculator::dGammadw
double dGammadw(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau, int tauhel, int Dhel, double w)
Function calculates the differential decay rate dGamma/dw, integrated for costau.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:51
Belle2::EvtBSemiTauonicDecayRateCalculator::PtauDstar
double PtauDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mtau)
Function calculates the polarization of tau, (RH - LH)/(LH + RH), in B->D*taunu decay.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:187
Belle2::EvtBSemiTauonicDecayRateCalculator::dGammadwdcostau
double dGammadwdcostau(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau, int tauhel, int Dhel, double w, double costau)
Function calculates the differential decay rate dGamma/dw/dcostau.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:41
Belle2::EvtBSemiTauonicDecayRateCalculator::m_BSTD
const EvtBSemiTauonicHelicityAmplitudeCalculator * m_BSTD
temporal pointer to the helicity amplitude calculator for EvaluateBy* functions
Definition: EvtBSemiTauonicDecayRateCalculator.h:162
Belle2::EvtBSemiTauonicDecayRateCalculator::RGammaDstar
double RGammaDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mtau, const double mlep=0.0005110)
Function calculates the ratio of Br(B->Dtaunu)/Br(B->Dlnu), R(D*).
Definition: EvtBSemiTauonicDecayRateCalculator.cc:168
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::setCV1
void setCV1(const EvtComplex &v)
Sets the Wilson coeffcient CV1.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:530
Belle2::EvtBSemiTauonicDecayRateCalculator::EvaluateBy2D
double EvaluateBy2D(double *x, double *param)
Function used internally for numerical integration.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:229
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::r
double r(int Dhel) const
Ratio of the daughter meson mass to the parent meson.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:385
Belle2::EvtBSemiTauonicDecayRateCalculator::EvaluateByW
double EvaluateByW(double *x, double *param)
Function used internally for numerical integration.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:217
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::wmax
double wmax(double mtau, int Dhel) const
Maximum value of the velocity transfer variable w.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:444
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::getMB
double getMB() const
Returns the parent (B) meson mass.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:467
Belle2::EvtBSemiTauonicDecayRateCalculator::GammaD
double GammaD(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau)
Function calculates the decay rate Gamma for Dtaunu decay, integrated for w and costau and summed for...
Definition: EvtBSemiTauonicDecayRateCalculator.cc:108
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EvtBSemiTauonicDecayRateCalculator::PDstar
double PDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mtau)
Function calculates the polarization of D*, longitudinal/(longitudinal + transverse),...
Definition: EvtBSemiTauonicDecayRateCalculator.cc:197
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::wmin
double wmin() const
Minimum value of the velocity transfer variable w.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:437
Belle2::EvtBSemiTauonicDecayRateCalculator::dGammadcostau
double dGammadcostau(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau, int tauhel, int Dhel, double costau)
Function calculates the differential decay rate dGamma/dcostau, integrated for w.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:69
Belle2::EvtBSemiTauonicDecayRateCalculator::pf
double pf(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau, int Dhel, double w)
Phase space factor, which is multiplied to the helicity amplitude to calculate the decay rate.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:209
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::setCS1
void setCS1(const EvtComplex &v)
Sets the Wilson coeffcient CS1.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:536
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::setCS2
void setCS2(const EvtComplex &v)
Sets the Wilson coeffcient CS2.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:539
Belle2::EvtBSemiTauonicDecayRateCalculator::Gamma
double Gamma(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, double mtau, int tauhel, int Dhel)
Function calculates the helicity dependent decay rate Gamma, integrated for w and costau.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:87
Belle2::EvtBSemiTauonicDecayRateCalculator::EvaluateByCostau
double EvaluateByCostau(double *x, double *param)
Function used internally for numerical integration.
Definition: EvtBSemiTauonicDecayRateCalculator.cc:223
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator::helAmp
EvtComplex helAmp(double mtau, int tauhel, int Dhel, double w, double costau) const
The function calculates the helicity amplitude.
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.cc:111
Belle2::EvtBSemiTauonicDecayRateCalculator::GammaSMDstar
double GammaSMDstar(const EvtBSemiTauonicHelicityAmplitudeCalculator &BSTD, const double mlep=0.0005110)
Function calculates the SM decay rate Gamma for D*lnu decay, integrated for w and costau and summed f...
Definition: EvtBSemiTauonicDecayRateCalculator.cc:142
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator
The class calculates the helicity amplitude of semi-tauonic B decays including new physics effects ba...
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:38