Belle II Software  release-08-01-10
EvtBGL2FF.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include "EvtGenBase/EvtReport.hh"
10 #include "EvtGenBase/EvtId.hh"
11 #include "EvtGenBase/EvtPDL.hh"
12 #include <math.h>
13 #include <stdlib.h>
14 #include <boost/math/constants/constants.hpp>
15 #include <cmath>
16 #include <iostream>
17 #include <vector>
18 
19 #include "generators/evtgen/models/EvtBGL2FF.h"
20 
21 // BGL (N=3) for scalar meson i.e. B->Dlv (l=e,mu,tau)
22 EvtBGL2FF::EvtBGL2FF(double bglap_0, double bglap_1, double bglap_2, double bglap_3, double bgla0_0, double bgla0_1, double bgla0_2,
23  double bgla0_3)
24 {
25 
26  ap_0 = bglap_0;
27  ap_1 = bglap_1;
28  ap_2 = bglap_2;
29  ap_3 = bglap_3; // set to 0 for N = 2 expansion
30 
31  a0_0 = bgla0_0;
32  a0_1 = bgla0_1;
33  a0_2 = bgla0_2;
34  a0_3 = bgla0_3; // set to 0 for N = 2 expansion
35 
36  return;
37 }
38 
39 // Use dispersion relation parametrization from
40 // C.G.Boyd, B.Grinstein, R.F.Lebed, Phys. Rev. Lett. 74,4603 (1995)
41 // and
42 // Bigi, Dante and Gambino, Paolo, Phys. Rev. D. 94.094008 (2016)
43 // a+0, a+1, a+2, a+3 : 0.01565, -0.0353, -0.043, 0.194
44 // a00, a01, a02, a03 : 0.07932, -0.214, 0.17, -0.958
45 
46 // NOTE : This is an alternative BGL model. Use it if you understand the difference with the
47 // default one called 'EvtBGLFF' in basf2.
48 
49 void EvtBGL2FF::getscalarff(EvtId parent, EvtId,
50  double t, double mass, double* fp, double* f0)
51 {
52 
53  static constexpr double pi = boost::math::constants::pi<double>();
54  double mb = EvtPDL::getMeanMass(parent);
55  double r = mass / mb; // mass = mass of the D meson
56  double w = ((mb * mb) + (mass * mass) - t) / (2.0 * mb * mass);
57  const double z = (sqrt(w + 1) - sqrt(2.)) / (sqrt(w + 1) + sqrt(2.));
58  const double chiT = 5.131e-4;
59  const double chiL = 6.332e-3;
60  const double tp = (mass + mb) * (mass + mb);
61  const double tm = (mass - mb) * (mass - mb);
62  const double sqrttpt0 = sqrt(tp - tm); // t0 = tm (see Bigi, Gambino paper)
63  std::vector<double> BcStatesp = {6.329, 6.920, 7.020}; //GeV
64  std::vector<double> BcStates0 = {6.716, 7.121}; //GeV
65 
66  double Pp = 1.;
67  for (size_t n = 0; n < BcStatesp.size(); ++n) {
68  double sqrttpmp = sqrt(tp - pow(BcStatesp[n], 2));
69  double zPp = (sqrttpmp - sqrttpt0) / (sqrttpmp + sqrttpt0);
70  Pp *= (z - zPp) / (1 - z * zPp);
71  }
72 
73  double P0 = 1.;
74  for (size_t n = 0; n < BcStates0.size(); ++n) {
75  double sqrttpmp = sqrt(tp - pow(BcStates0[n], 2));
76  double zP0 = (sqrttpmp - sqrttpt0) / (sqrttpmp + sqrttpt0);
77  P0 *= (z - zP0) / (1 - z * zP0);
78  }
79 
80  double ni = 2.6;
81  double kp = (8 * pow(r, 2) / mb) * sqrt(8 * ni / (3 * pi * chiT));
82  double k0 = r * (1 - pow(r, 2)) * sqrt(8 * ni / (pi * chiL));
83 
84  double phi_sub = (1 + r) * (1 - z) + 2.0 * sqrt(r) * (1 + z);
85 
86  double phi_p = kp * pow(1 + z, 2.) * sqrt(1 - z) * pow(phi_sub, -5);
87 
88  double phi_0 = k0 * (1 - z * z) * sqrt(1 - z) * pow(phi_sub, -4);
89 
90 
91  *fp = (ap_0 + ap_1 * z + ap_2 * z * z + ap_3 * z * z * z) / (Pp * phi_p);
92 
93  *f0 = (a0_0 + a0_1 * z + a0_2 * z * z + a0_3 * z * z * z) / (P0 * phi_0);
94 
95  return;
96 }
97 
98 // NOTE : This class should not be used for vector mesons (D*). Use the EvtBGL class instead.
99 
100 void EvtBGL2FF::getvectorff(EvtId, EvtId, double, double, double*, double*, double*, double*)
101 
102 {
103 
104  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getvectorff in EvtBGL2FF. Use EvtBGLFF instead.\n";
105  ::abort();
106 
107 }
108 
109 void EvtBGL2FF::gettensorff(EvtId, EvtId, double, double, double*,
110  double*, double*, double*)
111 {
112 
113  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :gettensorff in EvtBGL2FF.\n";
114  ::abort();
115 
116 }
117 
118 
119 
120 void EvtBGL2FF::getbaryonff(EvtId, EvtId, double, double, double*,
121  double*, double*, double*)
122 {
123 
124  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getbaryonff in EvtBGL2FF.\n";
125  ::abort();
126 
127 }
128 
129 void EvtBGL2FF::getdiracff(EvtId, EvtId, double, double, double*, double*,
130  double*, double*, double*, double*)
131 {
132 
133  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getdiracff in EvtBGL2FF.\n";
134  ::abort();
135 
136 }
137 
138 void EvtBGL2FF::getraritaff(EvtId, EvtId, double, double, double*, double*,
139  double*, double*, double*, double*, double*, double*)
140 {
141 
142  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getraritaff in EvtBGL2FF.\n";
143  ::abort();
144 
145 }
double a0_2
2nd-order z expansion coefficient for scalar form factor f_0
Definition: EvtBGL2FF.h:100
double ap_0
B -> Dlnu: ai_n (i = p —vector, 0 —scalar; n = 0,1,2,3) are free coefficients of z expansion in dispe...
Definition: EvtBGL2FF.h:80
double a0_3
3rd-order z expansion coefficient for scalar form factor f_0
Definition: EvtBGL2FF.h:103
double ap_2
2nd-order z expansion coefficient for vector form factor: f_+
Definition: EvtBGL2FF.h:86
EvtBGL2FF(double bglap_0, double bglap_1, double bglap_2, double bglap_3, double bgla0_0, double bgla0_1, double bgla0_2, double bgla0_3)
Default constructor.
Definition: EvtBGL2FF.cc:22
double ap_1
1st-order z expansion coefficient for vector form factor: f_+
Definition: EvtBGL2FF.h:83
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *)
Returns dirac form factors.
Definition: EvtBGL2FF.cc:129
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Returns tensor form factors.
Definition: EvtBGL2FF.cc:109
double a0_1
1st-order z expansion coefficient for scalar form factor f_0
Definition: EvtBGL2FF.h:97
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *)
Returns tarita form factors.
Definition: EvtBGL2FF.cc:138
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fp, double *f0)
Returns scalar form factors.
Definition: EvtBGL2FF.cc:49
void getvectorff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Returns vector form factors.
Definition: EvtBGL2FF.cc:100
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Returns baryon form factors.
Definition: EvtBGL2FF.cc:120
double a0_0
0th-order z expansion coefficient for scalar form factor f_0
Definition: EvtBGL2FF.h:94
double ap_3
3rd-order z expansion coefficient for vector form factor: f_+
Definition: EvtBGL2FF.h:89
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28