Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F19244164
EvtBtoXsllUtil.cpp
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
23 KB
Referenced Files
None
Subscribers
None
EvtBtoXsllUtil.cpp
View Options
/***********************************************************************
* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
* *
* This file is part of EvtGen. *
* *
* EvtGen is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* EvtGen is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
***********************************************************************/
#include
"EvtGenModels/EvtBtoXsllUtil.hh"
#include
"EvtGenBase/EvtComplex.hh"
#include
"EvtGenBase/EvtConst.hh"
#include
"EvtGenBase/EvtDiLog.hh"
#include
"EvtGenBase/EvtGenKine.hh"
#include
"EvtGenBase/EvtPDL.hh"
#include
"EvtGenBase/EvtParticle.hh"
#include
"EvtGenBase/EvtPatches.hh"
#include
"EvtGenBase/EvtRandom.hh"
#include
"EvtGenBase/EvtReport.hh"
#include
<stdlib.h>
EvtComplex
EvtBtoXsllUtil
::
GetC7Eff0
(
double
sh
,
bool
nnlo
)
{
// This function returns the zeroth-order alpha_s part of C7
if
(
!
nnlo
)
return
-
0.313
;
double
A7
;
// use energy scale of 2.5 GeV as a computational trick (G.Hiller)
// at least for shat > 0.25
A7
=
-
0.353
+
0.023
;
EvtComplex
c7eff
;
if
(
sh
>
0.25
)
{
c7eff
=
A7
;
return
c7eff
;
}
// change energy scale to 5.0 for full NNLO calculation below shat = 0.25
A7
=
-
0.312
+
0.008
;
c7eff
=
A7
;
return
c7eff
;
}
EvtComplex
EvtBtoXsllUtil
::
GetC7Eff1
(
double
sh
,
double
mbeff
,
bool
nnlo
)
{
// This function returns the first-order alpha_s part of C7
if
(
!
nnlo
)
return
0.0
;
double
logsh
;
logsh
=
log
(
sh
);
EvtComplex
uniti
(
0.0
,
1.0
);
EvtComplex
c7eff
=
0.0
;
if
(
sh
>
0.25
)
{
return
c7eff
;
}
// change energy scale to 5.0 for full NNLO calculation below shat = 0.25
double
muscale
=
5.0
;
double
alphas
=
0.215
;
//double A7 = -0.312 + 0.008;
double
A8
=
-
0.148
;
//double A9 = 4.174 + (-0.035);
//double A10 = -4.592 + 0.379;
double
C1
=
-
0.487
;
double
C2
=
1.024
;
//double T9 = 0.374 + 0.252;
//double U9 = 0.033 + 0.015;
//double W9 = 0.032 + 0.012;
double
Lmu
=
log
(
muscale
/
mbeff
);
EvtComplex
F71
;
EvtComplex
f71
;
EvtComplex
k7100
(
-
0.68192
,
-
0.074998
);
EvtComplex
k7101
(
0.0
,
0.0
);
EvtComplex
k7110
(
-
0.23935
,
-
0.12289
);
EvtComplex
k7111
(
0.0027424
,
0.019676
);
EvtComplex
k7120
(
-
0.0018555
,
-
0.175
);
EvtComplex
k7121
(
0.022864
,
0.011456
);
EvtComplex
k7130
(
0.28248
,
-
0.12783
);
EvtComplex
k7131
(
0.029027
,
-
0.0082265
);
f71
=
k7100
+
k7101
*
logsh
+
sh
*
(
k7110
+
k7111
*
logsh
)
+
sh
*
sh
*
(
k7120
+
k7121
*
logsh
)
+
sh
*
sh
*
sh
*
(
k7130
+
k7131
*
logsh
);
F71
=
(
-
208.0
/
243.0
)
*
Lmu
+
f71
;
EvtComplex
F72
;
EvtComplex
f72
;
EvtComplex
k7200
(
4.0915
,
0.44999
);
EvtComplex
k7201
(
0.0
,
0.0
);
EvtComplex
k7210
(
1.4361
,
0.73732
);
EvtComplex
k7211
(
-
0.016454
,
-
0.11806
);
EvtComplex
k7220
(
0.011133
,
1.05
);
EvtComplex
k7221
(
-
0.13718
,
-
0.068733
);
EvtComplex
k7230
(
-
1.6949
,
0.76698
);
EvtComplex
k7231
(
-
0.17416
,
0.049359
);
f72
=
k7200
+
k7201
*
logsh
+
sh
*
(
k7210
+
k7211
*
logsh
)
+
sh
*
sh
*
(
k7220
+
k7221
*
logsh
)
+
sh
*
sh
*
sh
*
(
k7230
+
k7231
*
logsh
);
F72
=
(
416.0
/
81.0
)
*
Lmu
+
f72
;
EvtComplex
F78
;
F78
=
(
-
32.0
/
9.0
)
*
Lmu
+
8.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
27.0
+
(
-
44.0
/
9.0
)
+
(
-
8.0
*
EvtConst
::
pi
/
9.0
)
*
uniti
+
(
4.0
/
3.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
40.0
/
3.0
)
*
sh
+
(
32.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
9.0
-
316.0
/
9.0
)
*
sh
*
sh
+
(
200.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
27.0
-
658.0
/
9.0
)
*
sh
*
sh
*
sh
+
(
-
8.0
*
logsh
/
9.0
)
*
(
sh
+
sh
*
sh
+
sh
*
sh
*
sh
);
c7eff
=
-
alphas
/
(
4.0
*
EvtConst
::
pi
)
*
(
C1
*
F71
+
C2
*
F72
+
A8
*
F78
);
return
c7eff
;
}
EvtComplex
EvtBtoXsllUtil
::
GetC9Eff0
(
double
sh
,
double
/* mbeff */
,
bool
nnlo
,
bool
btod
)
{
// This function returns the zeroth-order alpha_s part of C9
if
(
!
nnlo
)
return
4.344
;
double
mch
=
0.29
;
double
A9
;
A9
=
4.287
+
(
-
0.218
);
double
C1
;
C1
=
-
0.697
;
double
C2
;
C2
=
1.046
;
double
T9
;
T9
=
0.114
+
0.280
;
double
U9
;
U9
=
0.045
+
0.023
;
double
W9
;
W9
=
0.044
+
0.016
;
EvtComplex
uniti
(
0.0
,
1.0
);
EvtComplex
hc
;
double
xarg
;
xarg
=
4.0
*
mch
/
sh
;
hc
=
-
4.0
/
9.0
*
log
(
mch
*
mch
)
+
8.0
/
27.0
+
4.0
*
xarg
/
9.0
;
if
(
xarg
<
1.0
)
{
hc
=
hc
-
2.0
/
9.0
*
(
2.0
+
xarg
)
*
sqrt
(
fabs
(
1.0
-
xarg
)
)
*
(
log
(
(
sqrt
(
1.0
-
xarg
)
+
1.0
)
/
(
sqrt
(
1.0
-
xarg
)
-
1.0
)
)
-
uniti
*
EvtConst
::
pi
);
}
else
{
hc
=
hc
-
2.0
/
9.0
*
(
2.0
+
xarg
)
*
sqrt
(
fabs
(
1.0
-
xarg
)
)
*
2.0
*
atan
(
1.0
/
sqrt
(
xarg
-
1.0
)
);
}
EvtComplex
h1
;
xarg
=
4.0
/
sh
;
h1
=
8.0
/
27.0
+
4.0
*
xarg
/
9.0
;
if
(
xarg
<
1.0
)
{
h1
=
h1
-
2.0
/
9.0
*
(
2.0
+
xarg
)
*
sqrt
(
fabs
(
1.0
-
xarg
)
)
*
(
log
(
(
sqrt
(
1.0
-
xarg
)
+
1.0
)
/
(
sqrt
(
1.0
-
xarg
)
-
1.0
)
)
-
uniti
*
EvtConst
::
pi
);
}
else
{
h1
=
h1
-
2.0
/
9.0
*
(
2.0
+
xarg
)
*
sqrt
(
fabs
(
1.0
-
xarg
)
)
*
2.0
*
atan
(
1.0
/
sqrt
(
xarg
-
1.0
)
);
}
EvtComplex
h0
;
h0
=
8.0
/
27.0
-
4.0
*
log
(
2.0
)
/
9.0
+
4.0
*
uniti
*
EvtConst
::
pi
/
9.0
;
// X=V_{ud}^* V_ub / V_{td}^* V_tb * (4/3 C_1 +C_2) * (h(\hat m_c^2, hat s)-
// h(\hat m_u^2, hat s))
EvtComplex
Vudstar
(
1.0
-
0.2279
*
0.2279
/
2.0
,
0.0
);
EvtComplex
Vub
(
(
0.118
+
0.273
)
/
2.0
,
-
1.0
*
(
0.305
+
0.393
)
/
2.0
);
EvtComplex
Vtdstar
(
1.0
-
(
0.118
+
0.273
)
/
2.0
,
(
0.305
+
0.393
)
/
2.0
);
EvtComplex
Vtb
(
1.0
,
0.0
);
EvtComplex
Xd
;
Xd
=
(
Vudstar
*
Vub
/
Vtdstar
*
Vtb
)
*
(
4.0
/
3.0
*
C1
+
C2
)
*
(
hc
-
h0
);
EvtComplex
c9eff
=
4.344
;
if
(
sh
>
0.25
)
{
c9eff
=
A9
+
T9
*
hc
+
U9
*
h1
+
W9
*
h0
;
if
(
btod
)
{
c9eff
+=
Xd
;
}
return
c9eff
;
}
// change energy scale to 5.0 for full NNLO calculation below shat = 0.25
A9
=
4.174
+
(
-
0.035
);
C1
=
-
0.487
;
C2
=
1.024
;
T9
=
0.374
+
0.252
;
U9
=
0.033
+
0.015
;
W9
=
0.032
+
0.012
;
Xd
=
(
Vudstar
*
Vub
/
Vtdstar
*
Vtb
)
*
(
4.0
/
3.0
*
C1
+
C2
)
*
(
hc
-
h0
);
c9eff
=
A9
+
T9
*
hc
+
U9
*
h1
+
W9
*
h0
;
if
(
btod
)
{
c9eff
+=
Xd
;
}
return
c9eff
;
}
EvtComplex
EvtBtoXsllUtil
::
GetC9Eff1
(
double
sh
,
double
mbeff
,
bool
nnlo
,
bool
/*btod*/
)
{
// This function returns the first-order alpha_s part of C9
if
(
!
nnlo
)
return
0.0
;
double
logsh
;
logsh
=
log
(
sh
);
double
mch
=
0.29
;
EvtComplex
uniti
(
0.0
,
1.0
);
EvtComplex
c9eff
=
0.0
;
if
(
sh
>
0.25
)
{
return
c9eff
;
}
// change energy scale to 5.0 for full NNLO calculation below shat = 0.25
double
muscale
=
5.0
;
double
alphas
=
0.215
;
double
C1
=
-
0.487
;
double
C2
=
1.024
;
double
A8
=
-
0.148
;
double
Lmu
=
log
(
muscale
/
mbeff
);
EvtComplex
F91
;
EvtComplex
f91
;
EvtComplex
k9100
(
-
11.973
,
0.16371
);
EvtComplex
k9101
(
-
0.081271
,
-
0.059691
);
EvtComplex
k9110
(
-
28.432
,
-
0.25044
);
EvtComplex
k9111
(
-
0.040243
,
0.016442
);
EvtComplex
k9120
(
-
57.114
,
-
0.86486
);
EvtComplex
k9121
(
-
0.035191
,
0.027909
);
EvtComplex
k9130
(
-
128.8
,
-
2.5243
);
EvtComplex
k9131
(
-
0.017587
,
0.050639
);
f91
=
k9100
+
k9101
*
logsh
+
sh
*
(
k9110
+
k9111
*
logsh
)
+
sh
*
sh
*
(
k9120
+
k9121
*
logsh
)
+
sh
*
sh
*
sh
*
(
k9130
+
k9131
*
logsh
);
F91
=
(
-
1424.0
/
729.0
+
16.0
*
uniti
*
EvtConst
::
pi
/
243.0
+
64.0
/
27.0
*
log
(
mch
)
)
*
Lmu
-
16.0
*
Lmu
*
logsh
/
243.0
+
(
16.0
/
1215.0
-
32.0
/
135.0
/
mch
/
mch
)
*
Lmu
*
sh
+
(
4.0
/
2835.0
-
8.0
/
315.0
/
mch
/
mch
/
mch
/
mch
)
*
Lmu
*
sh
*
sh
+
(
16.0
/
76545.0
-
32.0
/
8505.0
/
mch
/
mch
/
mch
/
mch
/
mch
/
mch
)
*
Lmu
*
sh
*
sh
*
sh
-
256.0
*
Lmu
*
Lmu
/
243.0
+
f91
;
EvtComplex
F92
;
EvtComplex
f92
;
EvtComplex
k9200
(
6.6338
,
-
0.98225
);
EvtComplex
k9201
(
0.48763
,
0.35815
);
EvtComplex
k9210
(
3.3585
,
1.5026
);
EvtComplex
k9211
(
0.24146
,
-
0.098649
);
EvtComplex
k9220
(
-
1.1906
,
5.1892
);
EvtComplex
k9221
(
0.21115
,
-
0.16745
);
EvtComplex
k9230
(
-
17.12
,
15.146
);
EvtComplex
k9231
(
0.10552
,
-
0.30383
);
f92
=
k9200
+
k9201
*
logsh
+
sh
*
(
k9210
+
k9211
*
logsh
)
+
sh
*
sh
*
(
k9220
+
k9221
*
logsh
)
+
sh
*
sh
*
sh
*
(
k9230
+
k9231
*
logsh
);
F92
=
(
256.0
/
243.0
-
32.0
*
uniti
*
EvtConst
::
pi
/
81.0
-
128.0
/
9.0
*
log
(
mch
)
)
*
Lmu
+
32.0
*
Lmu
*
logsh
/
81.0
+
(
-
32.0
/
405.0
+
64.0
/
45.0
/
mch
/
mch
)
*
Lmu
*
sh
+
(
-
8.0
/
945.0
+
16.0
/
105.0
/
mch
/
mch
/
mch
/
mch
)
*
Lmu
*
sh
*
sh
+
(
-
32.0
/
25515.0
+
64.0
/
2835.0
/
mch
/
mch
/
mch
/
mch
/
mch
/
mch
)
*
Lmu
*
sh
*
sh
*
sh
+
512.0
*
Lmu
*
Lmu
/
81.0
+
f92
;
EvtComplex
F98
;
F98
=
104.0
/
9.0
-
32.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
27.0
+
(
1184.0
/
27.0
-
40.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
9.0
)
*
sh
+
(
14212.0
/
135.0
-
32.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
3.0
)
*
sh
*
sh
+
(
193444.0
/
945.0
-
560.0
*
EvtConst
::
pi
*
EvtConst
::
pi
/
27.0
)
*
sh
*
sh
*
sh
+
16.0
*
logsh
/
9.0
*
(
1.0
+
sh
+
sh
*
sh
+
sh
*
sh
*
sh
);
c9eff
=
-
alphas
/
(
4.0
*
EvtConst
::
pi
)
*
(
C1
*
F91
+
C2
*
F92
+
A8
*
F98
);
return
c9eff
;
}
EvtComplex
EvtBtoXsllUtil
::
GetC10Eff
(
double
/*sh*/
,
bool
nnlo
)
{
if
(
!
nnlo
)
return
-
4.669
;
double
A10
;
A10
=
-
4.592
+
0.379
;
EvtComplex
c10eff
;
c10eff
=
A10
;
return
c10eff
;
}
double
EvtBtoXsllUtil
::
dGdsProb
(
double
mb
,
double
ms
,
double
ml
,
double
s
)
{
// Compute the decay probability density function given a value of s
// according to Ali-Lunghi-Greub-Hiller's 2002 paper
// Note that the form given below is taken from
// F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996)
// but the differential rate as a function of dilepton mass
// in this latter paper reduces to Eq.(12) in ALGH's 2002 paper
// for ml = 0 and ms = 0.
bool
btod
=
false
;
bool
nnlo
=
true
;
double
delta
,
lambda
,
prob
;
double
f1
,
f2
,
f3
,
f4
;
double
msh
,
mlh
,
sh
;
double
mbeff
=
4.8
;
mlh
=
ml
/
mb
;
msh
=
ms
/
mb
;
// set lepton and strange-quark masses to 0 if need to
// be in strict agreement with ALGH 2002 paper
// mlh = 0.0; msh = 0.0;
// sh = s / (mb*mb);
sh
=
s
/
(
mbeff
*
mbeff
);
// if sh >1.0 code will return a nan. so just skip it
if
(
sh
>
1.0
)
return
0.0
;
EvtComplex
c7eff0
=
EvtBtoXsllUtil
::
GetC7Eff0
(
sh
,
nnlo
);
EvtComplex
c7eff1
=
EvtBtoXsllUtil
::
GetC7Eff1
(
sh
,
mbeff
,
nnlo
);
EvtComplex
c9eff0
=
EvtBtoXsllUtil
::
GetC9Eff0
(
sh
,
mbeff
,
nnlo
,
btod
);
EvtComplex
c9eff1
=
EvtBtoXsllUtil
::
GetC9Eff1
(
sh
,
mbeff
,
nnlo
,
btod
);
EvtComplex
c10eff
=
EvtBtoXsllUtil
::
GetC10Eff
(
sh
,
nnlo
);
double
alphas
=
0.119
/
(
1
+
0.119
*
log
(
pow
(
4.8
,
2
)
/
pow
(
91.1867
,
2
)
)
*
23.0
/
12.0
/
EvtConst
::
pi
);
double
omega7
=
-
8.0
/
3.0
*
log
(
4.8
/
mb
)
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
log
(
1
-
sh
)
*
(
8.0
+
sh
)
/
(
2.0
+
sh
)
/
3.0
-
2.0
/
3.0
*
sh
*
(
2.0
-
2.0
*
sh
-
sh
*
sh
)
*
log
(
sh
)
/
pow
(
(
1.0
-
sh
),
2
)
/
(
2.0
+
sh
)
-
(
16.0
-
11.0
*
sh
-
17.0
*
sh
*
sh
)
/
18.0
/
(
2.0
+
sh
)
/
(
1.0
-
sh
);
double
eta7
=
1.0
+
alphas
*
omega7
/
EvtConst
::
pi
;
double
omega79
=
-
4.0
/
3.0
*
log
(
4.8
/
mb
)
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
1.0
/
9.0
*
(
2.0
+
7.0
*
sh
)
*
log
(
1.0
-
sh
)
/
sh
-
2.0
/
9.0
*
sh
*
(
3.0
-
2.0
*
sh
)
*
log
(
sh
)
/
pow
(
(
1.0
-
sh
),
2
)
+
1.0
/
18.0
*
(
5.0
-
9.0
*
sh
)
/
(
1.0
-
sh
);
double
eta79
=
1.0
+
alphas
*
omega79
/
EvtConst
::
pi
;
double
omega9
=
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
(
5.0
+
4.0
*
sh
)
/
(
3.0
*
(
1.0
+
2.0
*
sh
)
)
*
log
(
1.0
-
sh
)
-
2.0
*
sh
*
(
1.0
+
sh
)
*
(
1.0
-
2.0
*
sh
)
/
(
3.0
*
pow
(
1.0
-
sh
,
2
)
*
(
1.0
+
2.0
*
sh
)
)
*
log
(
sh
)
+
(
5.0
+
9.0
*
sh
-
6.0
*
sh
*
sh
)
/
(
6.0
*
(
1.0
-
sh
)
*
(
1.0
+
2.0
*
sh
)
);
double
eta9
=
1.0
+
alphas
*
omega9
/
EvtConst
::
pi
;
EvtComplex
c7eff
=
eta7
*
c7eff0
+
c7eff1
;
EvtComplex
c9eff
=
eta9
*
c9eff0
+
c9eff1
;
c10eff
*=
eta9
;
double
c7c7
=
abs2
(
c7eff
);
double
c7c9
=
real
(
(
eta79
*
c7eff0
+
c7eff1
)
*
conj
(
eta79
*
c9eff0
+
c9eff1
)
);
double
c9c9plusc10c10
=
abs2
(
c9eff
)
+
abs2
(
c10eff
);
double
c9c9minusc10c10
=
abs2
(
c9eff
)
-
abs2
(
c10eff
);
// Power corrections according to ALGH 2002
double
lambda_1
=
-
0.2
;
double
lambda_2
=
0.12
;
double
C1
=
-
0.487
;
double
C2
=
1.024
;
double
mc
=
0.29
*
mb
;
EvtComplex
F
;
double
r
=
s
/
(
4.0
*
mc
*
mc
);
EvtComplex
uniti
(
0.0
,
1.0
);
F
=
3.0
/
(
2.0
*
r
);
if
(
r
<
1
)
{
F
*=
1.0
/
sqrt
(
r
*
(
1.0
-
r
)
)
*
atan
(
sqrt
(
r
/
(
1.0
-
r
)
)
)
-
1.0
;
}
else
{
F
*=
0.5
/
sqrt
(
r
*
(
r
-
1.0
)
)
*
(
log
(
(
1.0
-
sqrt
(
1.0
-
1.0
/
r
)
)
/
(
1.0
+
sqrt
(
1.0
-
1.0
/
r
)
)
)
+
uniti
*
EvtConst
::
pi
)
-
1.0
;
}
double
G1
=
1.0
+
lambda_1
/
(
2.0
*
mb
*
mb
)
+
3.0
*
(
1.0
-
15.0
*
sh
*
sh
+
10.0
*
sh
*
sh
*
sh
)
/
(
(
1.0
-
sh
)
*
(
1.0
-
sh
)
*
(
1.0
+
2.0
*
sh
)
)
*
lambda_2
/
(
2.0
*
mb
*
mb
);
double
G2
=
1.0
+
lambda_1
/
(
2.0
*
mb
*
mb
)
-
3.0
*
(
6.0
+
3.0
*
sh
-
5.0
*
sh
*
sh
*
sh
)
/
(
(
1.0
-
sh
)
*
(
1.0
-
sh
)
*
(
2.0
+
sh
)
)
*
lambda_2
/
(
2.0
*
mb
*
mb
);
double
G3
=
1.0
+
lambda_1
/
(
2.0
*
mb
*
mb
)
-
(
5.0
+
6.0
*
sh
-
7.0
*
sh
*
sh
)
/
(
(
1.0
-
sh
)
*
(
1.0
-
sh
)
)
*
lambda_2
/
(
2.0
*
mb
*
mb
);
double
Gc
=
-
8.0
/
9.0
*
(
C2
-
C1
/
6.0
)
*
lambda_2
/
(
mc
*
mc
)
*
real
(
F
*
(
conj
(
c9eff
)
*
(
2.0
+
sh
)
+
conj
(
c7eff
)
*
(
1.0
+
6.0
*
sh
-
sh
*
sh
)
/
sh
)
);
// end of power corrections section
// now back to Kruger & Sehgal expressions
double
msh2
=
msh
*
msh
;
lambda
=
1.0
+
sh
*
sh
+
msh2
*
msh2
-
2.0
*
(
sh
+
sh
*
msh2
+
msh2
);
// negative lambda screw up sqrt below!
if
(
lambda
<
0.0
)
return
0.0
;
f1
=
pow
(
1.0
-
msh2
,
2
)
-
sh
*
(
1.0
+
msh2
);
f2
=
2.0
*
(
1.0
+
msh2
)
*
pow
(
1.0
-
msh2
,
2
)
-
sh
*
(
1.0
+
14.0
*
msh2
+
pow
(
msh
,
4
)
)
-
sh
*
sh
*
(
1.0
+
msh2
);
f3
=
pow
(
1.0
-
msh2
,
2
)
+
sh
*
(
1.0
+
msh2
)
-
2.0
*
sh
*
sh
+
lambda
*
2.0
*
mlh
*
mlh
/
sh
;
f4
=
1.0
-
sh
+
msh2
;
delta
=
(
12.0
*
c7c9
*
f1
*
G3
+
4.0
*
c7c7
*
f2
*
G2
/
sh
)
*
(
1.0
+
2.0
*
mlh
*
mlh
/
sh
)
+
c9c9plusc10c10
*
f3
*
G1
+
6.0
*
mlh
*
mlh
*
c9c9minusc10c10
*
f4
+
Gc
;
// avoid negative probs
if
(
delta
<
0.0
)
delta
=
0.
;
// negative when sh < 4*mlh*mlh
// s < 4*ml*ml
/// prob = sqrt(lambda*(1.0 - 4.0*mlh*mlh/sh)) * delta;
prob
=
sqrt
(
lambda
*
(
1.0
-
4.0
*
ml
*
ml
/
s
)
)
*
delta
;
// if ( !(prob>=0.0) && !(prob<=0.0) ) {
//nan
// std::cout << lambda << " " << mlh << " " << sh << " " << delta << " " << mb << " " << mbeff << std::endl;
// std::cout << 4.0*mlh*mlh/sh << " " << 4.0*ml*ml/s << " " << s-4.0*ml*ml << " " << ml << std::endl;
// std::cout << sh << " " << sh*sh << " " << msh2*msh2 << " " << msh << std::endl;
//std::cout << ( 12.0*c7c9*f1*G3 + 4.0*c7c7*f2*G2/sh ) * (1.0 + 2.0*mlh*mlh/sh)
// <<" " << c9c9plusc10c10*f3*G1
// << " "<< 6.0*mlh*mlh*c9c9minusc10c10*f4
// << " "<< Gc << std::endl;
//std::cout << C2 << " " << C1 << " "<< lambda_2 << " " << mc << " " << real(F*(conj(c9eff)*(2.0+sh)+conj(c7eff)*(1.0 + 6.0*sh - sh*sh)/sh)) << " " << sh << " " << r << std::endl;
//std::cout << c9eff << " " << eta9 << " " <<c9eff0 << " " << c9eff1 << " " << alphas << " " << omega9 << " " << sh << std::endl;
//}
// else{
// if ( sh > 1.0) std::cout << "not a nan \n";
// }
return
prob
;
}
double
EvtBtoXsllUtil
::
dGdsdupProb
(
double
mb
,
double
ms
,
double
ml
,
double
s
,
double
u
)
{
// Compute the decay probability density function given a value of s and u
// according to Ali-Hiller-Handoko-Morozumi's 1997 paper
// see Appendix E
bool
btod
=
false
;
bool
nnlo
=
true
;
double
prob
;
double
f1sp
,
f2sp
,
f3sp
;
double
mbeff
=
4.8
;
// double sh = s / (mb*mb);
double
sh
=
s
/
(
mbeff
*
mbeff
);
// if sh >1.0 code will return a nan. so just skip it
if
(
sh
>
1.0
)
return
0.0
;
EvtComplex
c7eff0
=
EvtBtoXsllUtil
::
GetC7Eff0
(
sh
,
nnlo
);
EvtComplex
c7eff1
=
EvtBtoXsllUtil
::
GetC7Eff1
(
sh
,
mbeff
,
nnlo
);
EvtComplex
c9eff0
=
EvtBtoXsllUtil
::
GetC9Eff0
(
sh
,
mbeff
,
nnlo
,
btod
);
EvtComplex
c9eff1
=
EvtBtoXsllUtil
::
GetC9Eff1
(
sh
,
mbeff
,
nnlo
,
btod
);
EvtComplex
c10eff
=
EvtBtoXsllUtil
::
GetC10Eff
(
sh
,
nnlo
);
double
alphas
=
0.119
/
(
1
+
0.119
*
log
(
pow
(
4.8
,
2
)
/
pow
(
91.1867
,
2
)
)
*
23.0
/
12.0
/
EvtConst
::
pi
);
double
omega7
=
-
8.0
/
3.0
*
log
(
4.8
/
mb
)
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
log
(
1
-
sh
)
*
(
8.0
+
sh
)
/
(
2.0
+
sh
)
/
3.0
-
2.0
/
3.0
*
sh
*
(
2.0
-
2.0
*
sh
-
sh
*
sh
)
*
log
(
sh
)
/
pow
(
(
1.0
-
sh
),
2
)
/
(
2.0
+
sh
)
-
(
16.0
-
11.0
*
sh
-
17.0
*
sh
*
sh
)
/
18.0
/
(
2.0
+
sh
)
/
(
1.0
-
sh
);
double
eta7
=
1.0
+
alphas
*
omega7
/
EvtConst
::
pi
;
double
omega79
=
-
4.0
/
3.0
*
log
(
4.8
/
mb
)
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
1.0
/
9.0
*
(
2.0
+
7.0
*
sh
)
*
log
(
1.0
-
sh
)
/
sh
-
2.0
/
9.0
*
sh
*
(
3.0
-
2.0
*
sh
)
*
log
(
sh
)
/
pow
(
(
1.0
-
sh
),
2
)
+
1.0
/
18.0
*
(
5.0
-
9.0
*
sh
)
/
(
1.0
-
sh
);
double
eta79
=
1.0
+
alphas
*
omega79
/
EvtConst
::
pi
;
double
omega9
=
-
2.0
/
9.0
*
EvtConst
::
pi
*
EvtConst
::
pi
-
4.0
/
3.0
*
EvtDiLog
::
DiLog
(
sh
)
-
2.0
/
3.0
*
log
(
sh
)
*
log
(
1.0
-
sh
)
-
(
5.0
+
4.0
*
sh
)
/
(
3.0
*
(
1.0
+
2.0
*
sh
)
)
*
log
(
1.0
-
sh
)
-
2.0
*
sh
*
(
1.0
+
sh
)
*
(
1.0
-
2.0
*
sh
)
/
(
3.0
*
pow
(
1.0
-
sh
,
2
)
*
(
1.0
+
2.0
*
sh
)
)
*
log
(
sh
)
+
(
5.0
+
9.0
*
sh
-
6.0
*
sh
*
sh
)
/
(
6.0
*
(
1.0
-
sh
)
*
(
1.0
+
2.0
*
sh
)
);
double
eta9
=
1.0
+
alphas
*
omega9
/
EvtConst
::
pi
;
EvtComplex
c7eff
=
eta7
*
c7eff0
+
c7eff1
;
EvtComplex
c9eff
=
eta9
*
c9eff0
+
c9eff1
;
c10eff
*=
eta9
;
double
c7c7
=
abs2
(
c7eff
);
double
c7c9
=
real
(
(
eta79
*
c7eff0
+
c7eff1
)
*
conj
(
eta79
*
c9eff0
+
c9eff1
)
);
double
c7c10
=
real
(
(
eta79
*
c7eff0
+
c7eff1
)
*
conj
(
eta9
*
c10eff
)
);
double
c9c10
=
real
(
(
eta9
*
c9eff0
+
c9eff1
)
*
conj
(
eta9
*
c10eff
)
);
double
c9c9plusc10c10
=
abs2
(
c9eff
)
+
abs2
(
c10eff
);
f1sp
=
(
pow
(
mb
*
mb
-
ms
*
ms
,
2
)
-
s
*
s
)
*
c9c9plusc10c10
+
4.0
*
(
pow
(
mb
,
4
)
-
ms
*
ms
*
mb
*
mb
-
pow
(
ms
,
4
)
*
(
1.0
-
ms
*
ms
/
(
mb
*
mb
)
)
-
8.0
*
s
*
ms
*
ms
-
s
*
s
*
(
1.0
+
ms
*
ms
/
(
mb
*
mb
)
)
)
*
mb
*
mb
*
c7c7
/
s
// kludged mass term
*
(
1.0
+
2.0
*
ml
*
ml
/
s
)
-
8.0
*
(
s
*
(
mb
*
mb
+
ms
*
ms
)
-
pow
(
mb
*
mb
-
ms
*
ms
,
2
)
)
*
c7c9
// kludged mass term
*
(
1.0
+
2.0
*
ml
*
ml
/
s
);
f2sp
=
4.0
*
s
*
c9c10
+
8.0
*
(
mb
*
mb
+
ms
*
ms
)
*
c7c10
;
f3sp
=
-
(
c9c9plusc10c10
)
+
4.0
*
(
1.0
+
pow
(
ms
/
mb
,
4
)
)
*
mb
*
mb
*
c7c7
/
s
// kludged mass term
*
(
1.0
+
2.0
*
ml
*
ml
/
s
);
prob
=
(
f1sp
+
f2sp
*
u
+
f3sp
*
u
*
u
)
/
pow
(
mb
,
3
);
if
(
prob
<
0.0
)
prob
=
0.
;
return
prob
;
}
double
EvtBtoXsllUtil
::
FermiMomentum
(
double
pf
)
{
// Pick a value for the b-quark Fermi motion momentum
// according to Ali's Gaussian model
double
pb
,
pbmax
,
xbox
,
ybox
;
pb
=
0.0
;
pbmax
=
5.0
*
pf
;
while
(
pb
==
0.0
)
{
xbox
=
EvtRandom
::
Flat
(
pbmax
);
ybox
=
EvtRandom
::
Flat
();
if
(
ybox
<
FermiMomentumProb
(
xbox
,
pf
)
)
{
pb
=
xbox
;
}
}
return
pb
;
}
double
EvtBtoXsllUtil
::
FermiMomentumProb
(
double
pb
,
double
pf
)
{
// Compute probability according to Ali's Gaussian model
// the function chosen has a convenient maximum value of 1 for pb = pf
double
prsq
=
(
pb
*
pb
)
/
(
pf
*
pf
);
double
prob
=
prsq
*
exp
(
1.0
-
prsq
);
return
prob
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Sep 30, 4:39 AM (4 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6516071
Default Alt Text
EvtBtoXsllUtil.cpp (23 KB)
Attached To
Mode
rEVTGEN evtgen
Attached
Detach File
Event Timeline
Log In to Comment