BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
integral.cpp
Go to the documentation of this file.
1/*
2 * integral.h - scalar integrals wrappers
3 *
4 * this file is part of PJFry library
5 * Copyright 2011 Valery Yundin
6 */
7
8#include "integral.h"
9#include "cache.h"
10#include "minor.h"
11#include <stdio.h>
12
13static Initialize pjinit = Initialize();
14
15#ifdef USE_QCDLOOP
17 printf( "PJFRY init\n" );
18 const double dbl_min = std::numeric_limits<double>::min();
19
20 F77_FUNC( qlinit, QLINIT )();
21
22 if ( qlprec.xalogm < dbl_min )
23 {
24 qlprec.xalogm = dbl_min;
25 qlprec.xalog2 = sqrt( dbl_min );
26# ifndef NDEBUG
27 printf( "Set xalogm to normalized value %e\n", qlprec.xalogm );
28 printf( "Set xalog2 to normalized value %e\n", qlprec.xalog2 );
29# endif
30 }
31 if ( qlprec.xclogm < dbl_min )
32 {
33 qlprec.xclogm = dbl_min;
34 qlprec.xclog2 = sqrt( dbl_min );
35# ifndef NDEBUG
36 printf( "Set xclogm to normalized value %e\n", qlprec.xclogm );
37 printf( "Set xclog2 to normalized value %e\n", qlprec.xclog2 );
38# endif
39 }
40 if ( qlflag.lwarn )
41 {
42 qlflag.lwarn = 0;
43# ifndef NDEBUG
44 printf( "Disable FF warnings %d\n", qlflag.lwarn );
45# endif
46 }
47}
48
49Initialize::~Initialize() { F77_FUNC( ffexi, FFEXI )(); }
50
51ICache::Ival qlI1( const Kinem1& k ) {
52 int ep;
53 ICache::Ival ivalue;
54
55 double m1 = k.m1();
56 double mu2 = ICache::getMu2();
57
58# ifdef USE_F2C
59 std::complex<double> rslt;
60 ep = 0;
61 F77_FUNC( qli1, QLI1 )( &rslt, &m1, &mu2, &ep );
62 ivalue.val[0] = rslt;
63 ep = -1;
64 F77_FUNC( qli1, QLI1 )( &rslt, &m1, &mu2, &ep );
65 ivalue.val[1] = rslt;
66 ep = -2;
67 F77_FUNC( qli1, QLI1 )( &rslt, &m1, &mu2, &ep );
68 ivalue.val[2] = rslt;
69# else
70 ep = 0;
71 ivalue.val[0] = F77_FUNC( qli1, QLI1 )( &m1, &mu2, &ep );
72 ep = -1;
73 ivalue.val[1] = F77_FUNC( qli1, QLI1 )( &m1, &mu2, &ep );
74 ep = -2;
75 ivalue.val[2] = F77_FUNC( qli1, QLI1 )( &m1, &mu2, &ep );
76# endif
77
78 return ivalue;
79}
80
81ICache::Ival qlI2( const Kinem2& k ) {
82 int ep;
83 ICache::Ival ivalue;
84
85 double p1 = k.p1();
86 double m1 = k.m1();
87 double m2 = k.m2();
88 double mu2 = ICache::getMu2();
89
90# ifdef USE_F2C
91 std::complex<double> rslt;
92 ep = 0;
93 F77_FUNC( qli2, QLI2 )( &rslt, &p1, &m1, &m2, &mu2, &ep );
94 ivalue.val[0] = rslt;
95 ep = -1;
96 F77_FUNC( qli2, QLI2 )( &rslt, &p1, &m1, &m2, &mu2, &ep );
97 ivalue.val[1] = rslt;
98 ep = -2;
99 F77_FUNC( qli2, QLI2 )( &rslt, &p1, &m1, &m2, &mu2, &ep );
100 ivalue.val[2] = rslt;
101# else
102 ep = 0;
103 ivalue.val[0] = F77_FUNC( qli2, QLI2 )( &p1, &m1, &m2, &mu2, &ep );
104 ep = -1;
105 ivalue.val[1] = F77_FUNC( qli2, QLI2 )( &p1, &m1, &m2, &mu2, &ep );
106 ep = -2;
107 ivalue.val[2] = F77_FUNC( qli2, QLI2 )( &p1, &m1, &m2, &mu2, &ep );
108# endif
109
110 return ivalue;
111}
112
113ICache::Ival qlI3( const Kinem3& k ) {
114 int ep;
115 ICache::Ival ivalue;
116
117 double p1 = k.p1();
118 double p2 = k.p2();
119 double p3 = k.p3();
120 double m1 = k.m1();
121 double m2 = k.m2();
122 double m3 = k.m3();
123 double mu2 = ICache::getMu2();
124
125# ifdef USE_F2C
126 std::complex<double> rslt;
127 ep = 0;
128 F77_FUNC( qli3, QLI3 )( &rslt, &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
129 ivalue.val[0] = rslt;
130 ep = -1;
131 F77_FUNC( qli3, QLI3 )( &rslt, &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
132 ivalue.val[1] = rslt;
133 ep = -2;
134 F77_FUNC( qli3, QLI3 )( &rslt, &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
135 ivalue.val[2] = rslt;
136# else
137 ep = 0;
138 ivalue.val[0] = F77_FUNC( qli3, QLI3 )( &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
139 ep = -1;
140 ivalue.val[1] = F77_FUNC( qli3, QLI3 )( &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
141 ep = -2;
142 ivalue.val[2] = F77_FUNC( qli3, QLI3 )( &p1, &p2, &p3, &m1, &m2, &m3, &mu2, &ep );
143# endif
144
145 return ivalue;
146}
147
148ICache::Ival qlI4( const Kinem4& k ) {
149 int ep;
150 ICache::Ival ivalue;
151
152 double p1 = k.p1();
153 double p2 = k.p2();
154 double p3 = k.p3();
155 double p4 = k.p4();
156 double s12 = k.s12();
157 double s23 = k.s23();
158 double m1 = k.m1();
159 double m2 = k.m2();
160 double m3 = k.m3();
161 double m4 = k.m4();
162 double mu2 = ICache::getMu2();
163
164 if ( s12 == 0. || s23 == 0. )
165 {
166 if ( p1 != 0. && p3 != 0. )
167 {
168# ifdef USE_F2C
169 std::complex<double> rslt;
170 ep = 0;
171 F77_FUNC( qli4, QLI4 )
172 ( &rslt, &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2, &m4, &mu2, &ep );
173 ivalue.val[0] = rslt;
174 ep = -1;
175 F77_FUNC( qli4, QLI4 )
176 ( &rslt, &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2, &m4, &mu2, &ep );
177 ivalue.val[1] = rslt;
178 ep = -2;
179 F77_FUNC( qli4, QLI4 )
180 ( &rslt, &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2, &m4, &mu2, &ep );
181 ivalue.val[2] = rslt;
182# else
183 ep = 0;
184 ivalue.val[0] = F77_FUNC( qli4, QLI4 )( &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2,
185 &m4, &mu2, &ep );
186 ep = -1;
187 ivalue.val[1] = F77_FUNC( qli4, QLI4 )( &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2,
188 &m4, &mu2, &ep );
189 ep = -2;
190 ivalue.val[2] = F77_FUNC( qli4, QLI4 )( &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2,
191 &m4, &mu2, &ep );
192# endif
193 }
194 else if ( p2 != 0. && p4 != 0. )
195 {
196# ifdef USE_F2C
197 std::complex<double> rslt;
198 ep = 0;
199 F77_FUNC( qli4, QLI4 )
200 ( &rslt, &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3, &m1, &mu2, &ep );
201 ivalue.val[0] = rslt;
202 ep = -1;
203 F77_FUNC( qli4, QLI4 )
204 ( &rslt, &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3, &m1, &mu2, &ep );
205 ivalue.val[1] = rslt;
206 ep = -2;
207 F77_FUNC( qli4, QLI4 )
208 ( &rslt, &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3, &m1, &mu2, &ep );
209 ivalue.val[2] = rslt;
210# else
211 ep = 0;
212 ivalue.val[0] = F77_FUNC( qli4, QLI4 )( &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3,
213 &m1, &mu2, &ep );
214 ep = -1;
215 ivalue.val[1] = F77_FUNC( qli4, QLI4 )( &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3,
216 &m1, &mu2, &ep );
217 ep = -2;
218 ivalue.val[2] = F77_FUNC( qli4, QLI4 )( &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3,
219 &m1, &mu2, &ep );
220# endif
221 }
222 else { assert( 0 ); }
223 }
224 else
225 {
226# ifdef USE_F2C
227 std::complex<double> rslt;
228 ep = 0;
229 F77_FUNC( qli4, QLI4 )
230 ( &rslt, &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4, &mu2, &ep );
231 ivalue.val[0] = rslt;
232 ep = -1;
233 F77_FUNC( qli4, QLI4 )
234 ( &rslt, &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4, &mu2, &ep );
235 ivalue.val[1] = rslt;
236 ep = -2;
237 F77_FUNC( qli4, QLI4 )
238 ( &rslt, &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4, &mu2, &ep );
239 ivalue.val[2] = rslt;
240# else
241 ep = 0;
242 ivalue.val[0] = F77_FUNC( qli4, QLI4 )( &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4,
243 &mu2, &ep );
244 ep = -1;
245 ivalue.val[1] = F77_FUNC( qli4, QLI4 )( &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4,
246 &mu2, &ep );
247 ep = -2;
248 ivalue.val[2] = F77_FUNC( qli4, QLI4 )( &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4,
249 &mu2, &ep );
250# endif
251 }
252 return ivalue;
253}
254
255#endif /* USE_QCDLOOP */
256
257#ifdef USE_ONELOOP
259 printf( "PJFRY init\n" );
260
261 double mu = sqrt( ICache::getMu2() );
262 F77_FUNC_( avh_olo_mu_set, AVH_OLO_MU_SET )( &mu );
263
264 double thrs = Minor5::getmeps();
265 F77_FUNC_( avh_olo_onshell, AVH_OLO_ONSHELL )( &thrs );
266}
267
268ICache::Ival qlI1( const Kinem1& k ) {
269 ICache::Ival ivalue;
270
271 double m1 = k.m1();
272 std::complex<double> rslt[3];
273 F77_FUNC_( avh_olo_a0m, AVH_OLO_A0M )( rslt, &m1 );
274
275 ivalue.val[0] = rslt[0];
276 ivalue.val[1] = rslt[1];
277 ivalue.val[2] = rslt[2];
278 return ivalue;
279}
280
281ICache::Ival qlI2( const Kinem2& k ) {
282 ICache::Ival ivalue;
283
284 double p1 = k.p1();
285 double m1 = k.m1();
286 double m2 = k.m2();
287 std::complex<double> rslt[3];
288 F77_FUNC_( avh_olo_b0m, AVH_OLO_B0M )( rslt, &p1, &m1, &m2 );
289
290 ivalue.val[0] = rslt[0];
291 ivalue.val[1] = rslt[1];
292 ivalue.val[2] = rslt[2];
293 return ivalue;
294}
295
296ICache::Ival qlI3( const Kinem3& k ) {
297 ICache::Ival ivalue;
298
299 double p1 = k.p1();
300 double p2 = k.p2();
301 double p3 = k.p3();
302 double m1 = k.m1();
303 double m2 = k.m2();
304 double m3 = k.m3();
305 std::complex<double> rslt[3];
306 F77_FUNC_( avh_olo_c0m, AVH_OLO_C0M )( rslt, &p1, &p2, &p3, &m1, &m2, &m3 );
307
308 ivalue.val[0] = rslt[0];
309 ivalue.val[1] = rslt[1];
310 ivalue.val[2] = rslt[2];
311 return ivalue;
312}
313
314ICache::Ival qlI4( const Kinem4& k ) {
315 ICache::Ival ivalue;
316
317 double p1 = k.p1();
318 double p2 = k.p2();
319 double p3 = k.p3();
320 double p4 = k.p4();
321 double s12 = k.s12();
322 double s23 = k.s23();
323 double m1 = k.m1();
324 double m2 = k.m2();
325 double m3 = k.m3();
326 double m4 = k.m4();
327 std::complex<double> rslt[3];
328 if ( s12 == 0. || s23 == 0. )
329 {
330 if ( p1 != 0. && p3 != 0. )
331 {
332 F77_FUNC_( avh_olo_d0m, AVH_OLO_D0M )
333 ( rslt, &s12, &p2, &s23, &p4, &p1, &p3, &m1, &m3, &m2, &m4 );
334 }
335 else if ( p2 != 0. && p4 != 0. )
336 {
337 F77_FUNC_( avh_olo_d0m, AVH_OLO_D0M )
338 ( rslt, &s23, &p3, &s12, &p1, &p2, &p4, &m2, &m4, &m3, &m1 );
339 }
340 else { assert( 0 ); }
341 }
342 else
343 {
344 F77_FUNC_( avh_olo_d0m, AVH_OLO_D0M )
345 ( rslt, &p1, &p2, &p3, &p4, &s12, &s23, &m1, &m2, &m3, &m4 );
346 }
347
348 ivalue.val[0] = rslt[0];
349 ivalue.val[1] = rslt[1];
350 ivalue.val[2] = rslt[2];
351 return ivalue;
352}
353
354#endif /* USE_QCDLOOP1 */
double p2[4]
double p1[4]
static double getMu2()
Definition cache.cpp:20
Definition kinem.h:93
double m1() const
Definition kinem.h:98
double m2() const
Definition kinem.h:113
double m1() const
Definition kinem.h:112
double p1() const
Definition kinem.h:111
double m1() const
Definition kinem.h:132
double p1() const
Definition kinem.h:129
double p3() const
Definition kinem.h:131
double p2() const
Definition kinem.h:130
double m2() const
Definition kinem.h:133
double m3() const
Definition kinem.h:134
double m1() const
Definition kinem.h:159
double m3() const
Definition kinem.h:161
double s12() const
Definition kinem.h:163
double p1() const
Definition kinem.h:155
double s23() const
Definition kinem.h:164
double m2() const
Definition kinem.h:160
double p3() const
Definition kinem.h:157
double p2() const
Definition kinem.h:156
double p4() const
Definition kinem.h:158
double m4() const
Definition kinem.h:162
static double getmeps()
Definition minor.h:131
ICache::Ival qlI1(const Kinem1 &k)
ICache::Ival qlI2(const Kinem2 &k)
ICache::Ival qlI4(const Kinem4 &k)
ICache::Ival qlI3(const Kinem3 &k)
double double * m2
Definition qcdloop1.h:83
double int * ep
Definition qcdloop1.h:82
double * mu2
Definition qcdloop1.h:82
double * m1
Definition qcdloop1.h:83
ncomplex val[3]
Definition cache.h:52