Belle II Software  release-05-01-25
EvtBGLFF.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Lu Cao and Chaoyi Lyu *
7  * *
8  * *
9  * This software is provided "as is" without any warranty. *
10  **************************************************************************/
11 
12 #include "EvtGenBase/EvtReport.hh"
13 #include "EvtGenBase/EvtId.hh"
14 #include "EvtGenBase/EvtPDL.hh"
15 #include <math.h>
16 #include <stdlib.h>
17 
18 #include "generators/evtgen/models/EvtBGLFF.h"
19 
20 // BGL (N=3) for scalar meson i.e. B->Dlv (l=e,mu,tau)
21 EvtBGLFF::EvtBGLFF(double bglap_0, double bglap_1, double bglap_2, double bglap_3, double bgla0_0, double bgla0_1, double bgla0_2,
22  double bgla0_3)
23 {
24 
25  ap_0 = bglap_0;
26  ap_1 = bglap_1;
27  ap_2 = bglap_2;
28  ap_3 = bglap_3;
29 
30  a0_0 = bgla0_0;
31  a0_1 = bgla0_1;
32  a0_2 = bgla0_2;
33  a0_3 = bgla0_3;
34 
35  return;
36 }
37 
38 
39 // BGL for vector meson i.e. B->D*lv (l=e,mu), and should not be used to taus.
40 EvtBGLFF::EvtBGLFF(double bgla_0, double bgla_1, double bglb_0, double bglb_1, double bglc_1, double bglc_2)
41 {
42 
43  a_0 = bgla_0;
44  a_1 = bgla_1;
45 
46  b_0 = bglb_0;
47  b_1 = bglb_1;
48 
49  c_1 = bglc_1;
50  c_2 = bglc_2;
51 
52  return;
53 }
54 
55 
56 // Use dispersion relation parametrization from
57 // C.G.Boyd, B.Grinstein, R.F.Lebed, Phys. Rev. Lett. 74,4603(1995)
58 // and
59 // R.Glattauer, etc. (Belle) Phys. Rev. D 93,032006 (2016)
60 
61 void EvtBGLFF::getscalarff(EvtId parent, EvtId,
62  double t, double mass, double* fp, double* f0)
63 {
64 
65  double mb = EvtPDL::getMeanMass(parent);
66  double r = mass / mb;
67  double w = ((mb * mb) + (mass * mass) - t) / (2.0 * mb * mass);
68  const double z = (sqrt(w + 1) - sqrt(2.)) / (sqrt(w + 1) + sqrt(2.));
69  const double p_i = 1.0;
70 
71  double phi_sub = (1 + r) * (1 - z) + 2.0 * sqrt(r) * (1 + z);
72 
73  double g_sub = (4.0 * r) / pow(1 + r, 2);
74 
75  double phi_p = 1.1213 * pow(1 + z, 2.) * sqrt(1 - z) * pow(phi_sub, -5);
76 
77  double phi_0 = 0.5299 * (1 + z) * pow(1 - z, 1.5) * pow(phi_sub, -4);
78 
79 
80  *fp = g_sub * (ap_0 + ap_1 * z + ap_2 * z * z + ap_3 * z * z * z) / (p_i * phi_p);
81 
82  *f0 = g_sub * (a0_0 + a0_1 * z + a0_2 * z * z + a0_3 * z * z * z) / (p_i * phi_0);
83 
84  return;
85 }
86 
87 // Use z expansion parametrization from
88 // C.G.Boyd, B.Grinstein and R.F.Lebed, Phys. Rev. D 56,6895(1997)
89 // and
90 // B.Grinstein, A.Kobach, Phys. Lett. B 771(2017)359-364
91 
92 void EvtBGLFF::getvectorff(EvtId parent, EvtId, double t, double mass, double* a1f,
93  double* a2f, double* vf, double* a0f)
94 
95 {
96 
97  double mb = EvtPDL::getMeanMass(parent);
98  double w = ((mb * mb) + (mass * mass) - t) / (2. * mb * mass);
99 
100  // Form factors have a general form, with parameters passed in
101  // from the arguements.
102 
103  const double r = mass / mb;
104  double z = (sqrt(w + 1.) - sqrt(2.)) / (sqrt(w + 1) + sqrt(2.));
105  const double rstar = (2. * sqrt(mb * mass)) / (mb + mass);
106  const double chiT_plus33 = 5.28e-4;
107  const double chiT_minus33 = 3.07e-4;
108  const double n_i = 2.6;
109  const double axialvector_poles[4] = {6.730, 6.736, 7.135, 7.142};
110  const double vector_poles[4] = {6.337, 6.899, 7.012, 7.280};
111 
112  const double c_0 = (mb - mass) / mb * sqrt(0.5) / (1 + r + 2. * sqrt(r)) * b_0;
113 
114  double phi_g = sqrt(256. * n_i / (3. * M_PI * chiT_plus33)) * r * r * (1. + z) * (1. + z) / sqrt(1. - z) / pow((1. + r) *
115  (1. - z) + 2. * sqrt(r) * (1. + z), 4.);
116  double phi_f = 1. / (mb * mb) * sqrt(16. * n_i / (3. * M_PI * chiT_minus33)) * r * (1. + z) * pow(1. - z ,
117  1.5) / pow((1. + r) * (1. - z) + 2. * sqrt(r) * (1. + z), 4.);
118  double phi_F1 = 1. / (mb * mb * mb) * sqrt(8. * n_i / (3. * M_PI * chiT_minus33)) * r * (1. + z) * pow(1. - z ,
119  2.5) / pow((1. + r) * (1. - z) + 2 * sqrt(r) * (1. + z), 5.);
120 
121  double p_g = 1.;
122  double p_f = 1.;
123  const double term3 = sqrt((mb + mass) * (mb + mass) - (mb - mass) * (mb - mass));
124  for (int i = 0; i < 4; i++) {
125  double term1 = sqrt((mb + mass) * (mb + mass) - vector_poles[i] * vector_poles[i]);
126  double term2 = sqrt((mb + mass) * (mb + mass) - axialvector_poles[i] * axialvector_poles[i]);
127  double z_p1 = (term1 - term3) / (term1 + term3);
128  p_g = p_g * (z - z_p1) / (1 - z * z_p1);
129  double z_p2 = (term2 - term3) / (term2 + term3);
130  p_f = p_f * (z - z_p2) / (1 - z * z_p2);
131  }
132 
133  double g = 1. / p_g / phi_g * (a_0 + a_1 * z);
134  double f = 1. / p_f / phi_f * (b_0 + b_1 * z);
135  double F1 = 1. / p_f / phi_F1 * (c_0 + c_1 * z + c_2 * z * z);
136 
137  double ha1 = f / sqrt(mb * mass) / (1. + w);
138  double r1 = (w + 1.) * mb * mass * g / f;
139  double r2 = (w - r) / (w - 1) - F1 / mb / (w - 1) / f;
140 
141  *a1f = (w + 1.) / 2. * rstar * ha1;
142  *a2f = (r2 / rstar) * ha1;
143  *vf = (r1 / rstar) * ha1;
144  *a0f = 0; // a0f is related to B->D* tau nu decay.
145  // The class should not be used for taus, due to the lack of fitted parameters in a0f amplitude.
146 
147  return;
148 }
149 
150 void EvtBGLFF::gettensorff(EvtId, EvtId, double, double, double*,
151  double*, double*, double*)
152 {
153 
154  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :gettensorff in EvtBGLFF.\n";
155  ::abort();
156 
157 }
158 
159 
160 
161 void EvtBGLFF::getbaryonff(EvtId, EvtId, double, double, double*,
162  double*, double*, double*)
163 {
164 
165  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getbaryonff in EvtBGLFF.\n";
166  ::abort();
167 
168 }
169 
170 void EvtBGLFF::getdiracff(EvtId, EvtId, double, double, double*, double*,
171  double*, double*, double*, double*)
172 {
173 
174  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getdiracff in EvtBGLFF.\n";
175  ::abort();
176 
177 }
178 
179 void EvtBGLFF::getraritaff(EvtId, EvtId, double, double, double*, double*,
180  double*, double*, double*, double*, double*, double*)
181 {
182 
183  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Not implemented :getraritaff in EvtBGLFF.\n";
184  ::abort();
185 
186 }
EvtBGLFF::b_1
double b_1
1st-order z expansion coeffieient for form factor f
Definition: EvtBGLFF.h:126
EvtBGLFF::getvectorff
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f)
Returns vector ffs.
Definition: EvtBGLFF.cc:92
EvtBGLFF::getbaryonff
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Returns baryon ffs.
Definition: EvtBGLFF.cc:161
EvtBGLFF::ap_1
double ap_1
1st-order z expansion coeffieient for vector form factor: f_+
Definition: EvtBGLFF.h:91
EvtBGLFF::a0_3
double a0_3
3rd-order z expansion coeffieient for scalar form factor f_0
Definition: EvtBGLFF.h:111
EvtBGLFF::a_0
double a_0
B->D*lnu z expansion coeffieients
Definition: EvtBGLFF.h:117
EvtBGLFF::ap_0
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: EvtBGLFF.h:88
EvtBGLFF::getscalarff
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fp, double *f0)
Returns scalar ffs.
Definition: EvtBGLFF.cc:61
EvtBGLFF::c_2
double c_2
2nd-order z expansion coeffieient for form factor F1
Definition: EvtBGLFF.h:132
EvtBGLFF::getraritaff
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *)
Returns tarita ffs.
Definition: EvtBGLFF.cc:179
EvtBGLFF::a0_2
double a0_2
2nd-order z expansion coeffieient for scalar form factor f_0
Definition: EvtBGLFF.h:108
EvtBGLFF::EvtBGLFF
EvtBGLFF(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: EvtBGLFF.cc:21
EvtBGLFF::b_0
double b_0
0th-order z expansion coeffieient for form factor f
Definition: EvtBGLFF.h:123
EvtBGLFF::a_1
double a_1
1st-order z expansion coeffieient for form factor g
Definition: EvtBGLFF.h:120
EvtBGLFF::getdiracff
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *)
Returns dirac ffs.
Definition: EvtBGLFF.cc:170
EvtBGLFF::c_1
double c_1
1st-order z expansion coeffieient for form factor F1
Definition: EvtBGLFF.h:129
EvtBGLFF::a0_1
double a0_1
1st-order z expansion coeffieient for scalar form factor f_0
Definition: EvtBGLFF.h:105
EvtBGLFF::ap_3
double ap_3
3rd-order z expansion coeffieient for vector form factor: f_+
Definition: EvtBGLFF.h:97
EvtBGLFF::gettensorff
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Returns tensor ffs.
Definition: EvtBGLFF.cc:150
EvtBGLFF::a0_0
double a0_0
0th-order z expansion coeffieient for scalar form factor f_0
Definition: EvtBGLFF.h:102
EvtBGLFF::ap_2
double ap_2
2nd-order z expansion coeffieient for vector form factor: f_+
Definition: EvtBGLFF.h:94