flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
ffv_loop_functions.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of FlexibleSUSY.
3//
4// FlexibleSUSY is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// FlexibleSUSY is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with FlexibleSUSY. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
20#include "numerics2.hpp"
21#include "wrappers.hpp"
22#include <cmath>
23
24namespace flexiblesusy {
25namespace ffv_loop_functions {
26namespace one_loop {
27
35// function from eq. 15 of hep-ph/9510309
36double FA(double r)
37{
38 if (is_zero(1.0 - r)) {
39 return 1.5;
40 } else if (is_zero(r)) {
41 return 2.0;
42 } else {
43 return (2.0 - 9.0 * r + 18.0 * r * r - 11.0 * r * r * r +
44 6.0 * r * r * r * std::log(r)) /
45 Power4(1.0 - r);
46 }
47}
48
49// function from eq. 16 of hep-ph/9510309
50double FB(double r)
51{
52 const double y = r - 1.0;
53 if (is_zero(r)) {
54 return 2.0;
55 } else if (std::abs(y) < 0.23) {
56 // error around x=1 is <= 10^-12 on an intel i7
57 return (1.0000000000000000000 -
58 0.4000000000000000000 * y +
59 0.2000000000000000000 * y * y -
60 0.11428571428571428571 * y * y * y +
61 0.07142857142857142857 * y * y * y * y -
62 0.04761904761904761905 * y * y * y * y * y +
63 0.03333333333333333333 * y * y * y * y * y * y -
64 0.02424242424242424242 * y * y * y * y * y * y * y +
65 0.0181818181818181818 * y * y * y * y * y * y * y * y -
66 0.01398601398601398601 * y * y * y * y * y * y * y * y * y +
67 0.01098901098901098901 * y * y * y * y * y * y * y * y * y * y -
68 0.0087912087912087912 * y * y * y * y * y * y * y * y * y * y * y +
69 0.00714285714285714286 * y * y * y * y * y * y * y * y * y * y * y * y -
70 0.0058823529411764706 * y * y * y * y * y * y * y * y * y * y * y * y * y +
71 0.0049019607843137255 * y * y * y * y * y * y * y * y * y * y * y * y * y * y -
72 0.0041279669762641899 * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y);
73 } else {
74 return 2. *
75 (1.0 - 6.0 * r + 3.0 * r * r + 2.0 * r * r * r -
76 6.0 * r * r * std::log(r)) /
77 Power4(1.0 - r);
78 }
79}
80
81// function from eq. 16 of hep-ph/9510309
82double FC(double r)
83{
84 const double y = r - 1.0;
85 if (is_zero(r)) {
86 return 3.0;
87 } else if (std::isinf(r)) {
88 return 0.0;
89 } else if (std::abs(y) < 0.185) {
90 // error around x=1 is <= 10^-13 on an intel i7
91 return (1.0000000000000000000 -
92 0.50000000000000000000 * y +
93 0.30000000000000000000 * y * y -
94 0.2000000000000000000 * y * y * y +
95 0.14285714285714285714 * y * y * y * y -
96 0.10714285714285714286 * y * y * y * y * y +
97 0.08333333333333333333 * y * y * y * y * y * y -
98 0.06666666666666666667 * y * y * y * y * y * y * y +
99 0.05454545454545454545 * y * y * y * y * y * y * y * y -
100 0.0454545454545454545 * y * y * y * y * y * y * y * y * y +
101 0.0384615384615384615 * y * y * y * y * y * y * y * y * y * y -
102 0.03296703296703296703 * y * y * y * y * y * y * y * y * y * y * y +
103 0.0285714285714285714 * y * y * y * y * y * y * y * y * y * y * y * y -
104 0.02500000000000000000 * y * y * y * y * y * y * y * y * y * y * y * y * y +
105 0.0220588235294117647 * y * y * y * y * y * y * y * y * y * y * y * y * y * y -
106 0.0196078431372549020 * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y);
107 } else {
108 return 3. * (1.0 - r * r + 2.0 * r * std::log(r)) / Power3(1.0 - r);
109 }
110}
111
112// function from eq. 17 of hep-ph/9510309
113double FD(double r)
114{
115 if (std::isinf(r)) {
116 return 0.0;
117 } else if (is_zero(1.0 - r)) {
118 return -4.5;
119 } else {
120 return (16.0 - 45.0 * r + 36.0 * r * r - 7.0 * r * r * r +
121 6.0 * (2.0 - 3.0 * r) * std::log(r)) /
122 Power4(1.0 - r);
123 }
124}
125
126// function from eq. 18 of hep-ph/9510309
127double FE(double r)
128{
129 const double y = r - 1.0;
130 if (is_zero(r)) {
131 return 4.0;
132 } else if (std::abs(y) < 0.21) {
133 // error around x=1 is <= 10^-12 on an intel i7
134 return (1.0000000000000000000 -
135 0.60000000000000000000 * y +
136 0.40000000000000000000 * y * y -
137 0.28571428571428571429 * y * y * y +
138 0.21428571428571428571 * y * y * y * y -
139 0.16666666666666666667 * y * y * y * y * y +
140 0.13333333333333333333 * y * y * y * y * y * y -
141 0.10909090909090909091 * y * y * y * y * y * y * y +
142 0.090909090909090909091 * y * y * y * y * y * y * y * y -
143 0.076923076923076923077 * y * y * y * y * y * y * y * y * y +
144 0.065934065934065934066 * y * y * y * y * y * y * y * y * y * y -
145 0.057142857142857142857 * y * y * y * y * y * y * y * y * y * y * y +
146 0.050000000000000000000 * y * y * y * y * y * y * y * y * y * y * y * y -
147 0.044117647058823529412 * y * y * y * y * y * y * y * y * y * y * y * y * y +
148 0.039215686274509803922 * y * y * y * y * y * y * y * y * y * y * y * y * y * y -
149 0.035087719298245614035 * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y);
150 } else {
151 return 2. *
152 (2.0 + 3.0 * r - 6.0 * r * r + r * r * r + 6.0 * r * std::log(r)) /
153 Power4(1.0 - r);
154 }
155}
156
157// function from eq. 18 of hep-ph/9510309
158double FF(double r)
159{
160 const double y = r - 1.0;
161 if (std::abs(y) < 0.155) {
162 // error around x=1 is <= 10^-13 on an intel i7
163 return (1.0 -
164 0.75 * y +
165 0.6 * y * y -
166 0.50000000000000000000 * y * y * y +
167 0.4285714285714285714 * y * y * y * y -
168 0.37500000000000000000 * y * y * y * y * y +
169 0.33333333333333333333 * y * y * y * y * y * y -
170 0.3000000000000000000 * y * y * y * y * y * y * y +
171 0.2727272727272727273 * y * y * y * y * y * y * y * y -
172 0.2500000000000000000 * y * y * y * y * y * y * y * y * y +
173 0.23076923076923076923 * y * y * y * y * y * y * y * y * y * y -
174 0.21428571428571428571 * y * y * y * y * y * y * y * y * y * y * y +
175 0.2000000000000000000 * y * y * y * y * y * y * y * y * y * y * y * y -
176 0.1875000000000000000 * y * y * y * y * y * y * y * y * y * y * y * y * y +
177 0.1764705882352941176 * y * y * y * y * y * y * y * y * y * y * y * y * y * y -
178 0.16666666666666666667 * y * y * y * y * y * y * y * y * y * y * y * y * y * y * y);
179 } else {
180 return 3. / 2. * (-3.0 + 4.0 * r - r * r - 2.0 * std::log(r)) /
181 Power3(1.0 - r);
182 }
183}
184
185// One loop function for the form factor F1 which is the coefficient
186// of ubar(pp,mj) \gamma^\mu u(p,mi), for the FFV_VVF contribution.
187double FH(double r)
188{
189 if (is_zero(r)) {
190 return 41.0;
191 } else if (is_zero(1.0 - r)){
192 return 27.0;
193 } else {
194 return (41.0 - 207.0 * r + 279.0 * r * r - 113.0 * r * r * r + 6.0 * r * r * (-15.0 + 13.0 * r)
195 * std::log(r)) / Power4(1.0 - r);
196 //return (5.0 - 27.0 * r + 27.0 * r * r - 5.0 * r * r * r + 6.0 * (r - 3.0) * r * r * std::log(r)) /
197 // Power4(1.0 - r);
198 }
199}
200
201// One loop function for the form factor F1 which is the coefficient
202// of ubar(pp,mj) \gamma^\mu u(p,mi), for the FFV_VVF contribution.
203double FI(double r)
204{
205 if (is_zero(r)) {
206 return 1.0;
207 } else if (is_zero(1.0 - r)){
208 return 0.5;
209 } else {
210 return (1.0 - r + r * std::log(r)) / Power2(1.0 - r);
211 }
212}
213
214// function from eq. 78 of hep-ph/2104.03691
215double FJ(double r)
216{
217 if (is_zero(r)) {
218 return 7.0;
219 } else if (is_zero(1.0 - r)){
220 return 5.0;
221 } else {
222 return (7.0 - 33.0 * r + 57.0 * r * r - 31.0 * r * r * r + 6.0 * r * r * (3.0 * r - 1.0)
223 * std::log(r)) / Power4(1.0 - r);
224 }
225}
226
227// function from eq. 79 of hep-ph/2104.03691
228double FK(double r)
229{
230 if (is_zero(r)) {
231 return 1.0;
232 } else if (is_zero(1.0 - r)){
233 return 2.0 / 3.0;
234 } else {
235 return (1.0 - 4.0 * r + 3.0 * r * r - 2 * r * r * std::log(r)) / Power3(1.0 - r);
236 }
237}
238
239// One loop function for the form factor F1 which is the coefficient
240// of ubar(pp,mj) \gamma^\mu u(p,mi), for the FFV_FFV contribution.
241double FL(double r)
242{
243 if (is_zero(1.0 - r)){
244 return 10.5;
245 } else if (std::isinf(r)) {
246 return 0.0;
247 } else {
248 return (2.0 + 27.0 * r - 54.0 * r * r + 25.0 * r * r * r - 6.0 * (2.0 - 9.0 * r + 6.0 * r * r)
249 * std::log(r)) / Power4(1.0 - r);
250 }
251}
252
253// function from eq. 80 of hep-ph/2104.03691
254double FM(double r)
255{
256 if (is_zero(r)) {
257 return 4.0;
258 } else if (is_zero(1.0 - r)){
259 return 1.5;
260 } else if (std::isinf(r)) {
261 return 0.0;
262 } else {
263 return (4.0 - 9.0 * r + 5.0 * r * r * r + 6.0 * (1.0 - 2.0 * r) * r * std::log(r)) /
264 Power4(1.0 - r);
265 }
266}
267
268// function from eq. 81 of hep-ph/2104.03691
269double FN(double r, double s)
270{
271 if (is_zero(r - s)) {
272 if (is_zero(r)) {
273 return 1.0 / 2.0;
274 } else if (is_zero(1.0 - r)){
275 return 1.0 / 3.0;
276 } else {
277 return (1.0 - 4.0 * r + 3 * r * r - 2 * r * r * std::log(r)) / 2.0 / Power3(1.0 - r);
278 }
279 } else {
280 return s * (r * Power2(r - s) * std::log(r) + (r - 1.0) * ((r - s) * (s - 1.0) - (r - 1.0)
281 * r * std::log(r/s))) / Power2(1.0 - r) / Power2(r - s) / (s - 1.0);
282 }
283}
284
285} // namespace one_loop
286} // namespace ffv_loop_functions
287} // namespace flexiblesusy
constexpr Base Power3(Base b) noexcept
Definition: wrappers.hpp:487
std::enable_if_t< std::is_unsigned< T >::value, bool > is_zero(T a, T prec=std::numeric_limits< T >::epsilon()) noexcept
compares a number for being close to zero
Definition: numerics2.hpp:46
constexpr Base Power4(Base b) noexcept
Definition: wrappers.hpp:493
Complex< T > log(const Complex< T > &z) noexcept
Definition: complex.hpp:54
constexpr Base Power2(Base b) noexcept
Definition: wrappers.hpp:481