BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
minorex.cpp
Go to the documentation of this file.
1/*
2 * minorex.cpp - extra integrals for asymptotic expansion
3 *
4 * this file is part of PJFry library
5 * Copyright 2011 Valery Yundin
6 */
7
8#include "cache.h"
9#include "minor.h"
10#include <stdio.h>
11
12/* ========================================================
13 * IR triangles
14 * ========================================================
15 */
16
17/* --------------------------------------------------------
18 * I2mDstu bubble in D-2 dim
19 * --------------------------------------------------------
20 */
21ncomplex Minor5::I2mDstu( int ep, int s, int t, int u, int m, int n ) {
22 ncomplex sum1 = 0;
23 const double dstustu = M3( s, t, u, s, t, u );
24 const double msq1 = kinem.mass( m );
25 const double msq2 = kinem.mass( n );
26 if ( ep == 0 )
27 {
28 const double s_cutoff = seps1 * pmaxM2[im2( m, n ) - 5];
29
30 if ( fabs( dstustu ) <= s_cutoff )
31 {
32 const double mm12 = msq1 - msq2;
33 if ( fabs( mm12 ) < meps )
34 {
35 if ( msq1 > meps ) { sum1 = 1 / msq1; }
36 else { sum1 = 0; }
37 }
38 else
39 {
40 sum1 = ( -( msq1 > meps ? ICache::getI1( ep, Kinem1( msq1 ) ) / msq1 : 1. ) +
41 ( msq2 > meps ? ICache::getI1( ep, Kinem1( msq2 ) ) / msq2 : 1. ) ) /
42 ( mm12 );
43 }
44 }
45 else
46 {
47 ncomplex sumX = I2stu( ep, s, t, u ) - 2. * I2stu( ep + 1, s, t, u );
48 ncomplex sumY = msq2 > meps ? 1. - ICache::getI1( ep, Kinem1( msq2 ) ) / msq2 : 0;
49 ncomplex sumZ = msq1 > meps ? 1. - ICache::getI1( ep, Kinem1( msq1 ) ) / msq1 : 0;
50
51 const double ds0tu =
52 ( Cay[nss( m, m )] * Cay[nss( n, n )] - Cay[ns( m, n )] * Cay[ns( m, n )] );
53 sum1 += sumX * dstustu;
54
55 const double dsvtuY =
56 -( Cay[nss( n, n )] - Cay[ns( m, n )] ); /* minus sign of minor v=m */
57 sum1 += sumY * dsvtuY;
58
59 const double dsvtuZ =
60 +( Cay[ns( m, n )] - Cay[nss( m, m )] ); /* plus sign of minor v=n */
61 sum1 += sumZ * dsvtuZ;
62
63 sum1 /= ds0tu;
64 }
65 }
66 else if ( ep == 1 )
67 {
68 if ( fabs( msq1 ) < meps )
69 {
70 if ( fabs( msq2 ) < meps )
71 {
72 if ( fabs( dstustu ) > meps )
73 {
74 sum1 = 2. / ( -0.5 * dstustu ); // I(s,0,0)
75 }
76 else
77 {
78 sum1 = 0; // I(0,0,0)
79 }
80 }
81 else
82 {
83 sum1 = 1. / ( ( -0.5 * dstustu ) - msq2 ); // I(s,0,m2)
84 }
85 }
86 else if ( fabs( msq2 ) < meps )
87 {
88 sum1 = 1. / ( ( -0.5 * dstustu ) - msq1 ); // I(s,m1,0)
89 }
90 }
91 return sum1;
92}
93
94/* --------------------------------------------------------
95 * I2stui bubble in D dim with a dot
96 * --------------------------------------------------------
97 */
98ncomplex Minor5::I2stui( int ep, int s, int t, int u, int i, int ip ) {
99 ncomplex sum1 = 0;
100 const double dstustu = M3( s, t, u, s, t, u );
101 const double msq1 = kinem.mass( i );
102 const double msq2 = kinem.mass( ip );
103 if ( ep == 0 )
104 {
105 const double s_cutoff = seps1 * pmaxM2[im2( i, ip ) - 5];
106
107 if ( fabs( dstustu ) <= s_cutoff )
108 {
109 const double mm12 = msq1 - msq2;
110 if ( fabs( mm12 ) < meps )
111 {
112 if ( msq1 > meps ) { sum1 = -1 / ( 2 * msq1 ); }
113 else { sum1 = 0; }
114 }
115 else
116 {
117 if ( msq1 > meps )
118 {
119 sum1 = -1 / ( msq1 - msq2 ) - ( +msq2 * ICache::getI1( ep, Kinem1( msq1 ) ) -
120 msq1 * ICache::getI1( ep, Kinem1( msq2 ) ) ) /
121 ( msq1 * mm12 * mm12 );
122 }
123 else { sum1 = ICache::getI1( ep, Kinem1( msq2 ) ) / ( msq2 * msq2 ); }
124 }
125 }
126 else
127 {
128 sum1 += +( Cay[nss( ip, ip )] - Cay[ns( i, ip )] ) * I2mDstu( ep, s, t, u, i, ip );
129 sum1 += msq1 > meps ? 1. - ICache::getI1( ep, Kinem1( msq1 ) ) / msq1 : 0;
130 sum1 -= msq2 > meps ? 1. - ICache::getI1( ep, Kinem1( msq2 ) ) / msq2 : 0;
131 sum1 /= dstustu;
132 }
133 }
134 else if ( ep == 1 )
135 {
136 if ( fabs( msq1 ) < meps )
137 {
138 if ( fabs( dstustu ) > meps )
139 {
140 if ( fabs( msq2 ) < meps )
141 {
142 sum1 = -1. / ( -0.5 * dstustu ); // I(s,0,0)
143 }
144 else
145 {
146 sum1 = -1. / ( ( -0.5 * dstustu ) - msq2 ); // I(s,0,m2)
147 }
148 }
149 else
150 {
151 sum1 = 1. / msq2; // I(0,0,m2)
152 }
153 }
154 }
155 return sum1;
156}
157
158/* ========================================================
159 * SMALL Gram4 expansion
160 * ========================================================
161 */
162
163/* --------------------------------------------------------
164 * I2D3stu bubble in D+6 dim
165 * --------------------------------------------------------
166 */
167ncomplex Minor5::I2D3stu( int ep, int s, int t, int u ) {
168 assert( t != u && u != s && s != t ); // if (t==u || u==s || s==t) return 0;
169 if ( ep == 2 ) return 0;
170 if ( not fEval[E_I2D3stu + ep] )
171 {
172 I2D3stuEval( 0, ep, 1, 2, 3, 4, 5, kinem.p5() );
173 I2D3stuEval( 1, ep, 1, 2, 4, 3, 5, kinem.s45() );
174 I2D3stuEval( 2, ep, 1, 2, 5, 3, 4, kinem.p4() );
175
176 I2D3stuEval( 3, ep, 1, 3, 4, 2, 5, kinem.s12() );
177 I2D3stuEval( 4, ep, 1, 3, 5, 2, 4, kinem.s34() );
178
179 I2D3stuEval( 5, ep, 1, 4, 5, 2, 3, kinem.p3() );
180
181 if ( smax == 5 )
182 {
183 I2D3stuEval( 6, ep, 2, 3, 4, 1, 5, kinem.p1() );
184 I2D3stuEval( 7, ep, 2, 3, 5, 1, 4, kinem.s15() );
185
186 I2D3stuEval( 8, ep, 2, 4, 5, 1, 3, kinem.s23() );
187
188 I2D3stuEval( 9, ep, 3, 4, 5, 1, 2, kinem.p2() );
189 }
190
191 fEval[E_I2D3stu + ep] = true;
192 }
193 int idx = im3( s, t, u ) - 10;
194 return pI2D3stu[ep][idx];
195}
196
197void Minor5::I2D3stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq ) {
198 ncomplex sum1 = 0;
199 if ( ep == 0 )
200 {
201 const double dstustu = -2 * qsq; /*M3(s,t,u,s,t,u);*/
202 const double msq1 = kinem.mass( m );
203 const double msq2 = kinem.mass( n );
204 const double s_cutoff = seps1 * pmaxM2[im2( m, n ) - 5];
205
206 if ( fabs( dstustu ) <= s_cutoff )
207 {
208 const double mm12 = msq1 - msq2;
209 if ( fabs( mm12 ) < meps )
210 { sum1 = -( 5 * msq1 + 6. * ICache::getI1( ep, Kinem1( msq1 ) ) ) * msq1 * msq1 / 36.; }
211 else
212 {
213 sum1 = -13 * ( ( msq1 + msq2 ) * ( msq1 * msq1 + msq2 * msq2 ) ) / 288 +
214 ( -msq1 * msq1 * msq1 * ICache::getI1( ep, Kinem1( msq1 ) ) +
215 msq2 * msq2 * msq2 * ICache::getI1( ep, Kinem1( msq2 ) ) ) /
216 ( 24 * mm12 );
217 }
218 }
219 else
220 {
221 ncomplex sumX = 7. * I2D2stu( ep, s, t, u ) + 2. * I2D2stu( ep + 1, s, t, u );
222 ncomplex sumY =
223 ( 42. * ICache::getI1( ep, Kinem1( msq2 ) ) + 47 * msq2 ) * msq2 * msq2 / 36.;
224 ncomplex sumZ =
225 ( 42. * ICache::getI1( ep, Kinem1( msq1 ) ) + 47 * msq1 ) * msq1 * msq1 / 36.;
226
227 const double ds0tu =
228 ( Cay[nss( m, m )] * Cay[nss( n, n )] - Cay[nss( m, n )] * Cay[nss( m, n )] );
229 sum1 += sumX * ds0tu;
230
231 const double dsvtuY =
232 -( Cay[nss( n, n )] - Cay[nss( m, n )] ); /* minus sign of minor v=m */
233 sum1 -= sumY * dsvtuY;
234
235 const double dsvtuZ =
236 +( Cay[nss( m, n )] - Cay[nss( m, m )] ); /* plus sign of minor v=n */
237 sum1 -= sumZ * dsvtuZ;
238
239 sum1 /= 49 * dstustu;
240 }
241 }
242 else
243 {
244 assert( ep == 1 );
245 const double y11 = Cay[nss( m, m )];
246 const double y12 = Cay[nss( m, n )];
247 const double y22 = Cay[nss( n, n )];
248 sum1 =
249 -( +y11 * y11 * ( y22 + 5 * ( y11 + y12 ) ) + y22 * y22 * ( y11 + 5 * ( y22 + y12 ) ) +
250 2 * y12 * y12 * ( y12 + 2 * ( y11 + y22 ) ) + 3 * y11 * y22 * y12 ) /
251 1680;
252 }
253 pI2D3stu[ep][idx] = sum1;
254}
255
256/* --------------------------------------------------------
257 * I3D4st triangle in D+8 dim
258 * --------------------------------------------------------
259 */
260ncomplex Minor5::I3D4st( int ep, int s, int t ) {
261 assert( s != t ); // if (s==t) return 0;
262 if ( ep == 2 ) return 0;
263 if ( not fEval[E_I3D4st + ep] ) { I3D4stEval( ep ); }
264 int idx = im2( s, t ) - 5;
265 return pI3D4st[ep][idx];
266}
267
268void Minor5::I3D4stEval( int ep ) {
269 for ( int s = 1; s <= smax; s++ )
270 {
271 for ( int t = s + 1; t <= 5; t++ )
272 {
273 int idx = im2( s, t ) - 5;
274
275 const double dstst = M2( s, t, s, t );
276 ncomplex ivalue = 0;
277
278 if ( pmaxS3[idx] <= deps )
279 {
280 printf( "I3D4 - M2({%d,%d}) <= eps\n", s, t );
281 ivalue = std::numeric_limits<double>::quiet_NaN();
282 }
283 else
284 {
285 double cf = 1. / 8.;
286 for ( int ei = ep; ei <= 1; ei++ )
287 {
288 ncomplex sum1 = M3( 0, s, t, 0, s, t ) * I3D3st( ei, s, t );
289 for ( int u = 1; u <= 5; u++ )
290 {
291 if ( t == u || s == u ) continue;
292 sum1 -= M3( u, s, t, 0, s, t ) * I2D3stu( ei, s, t, u );
293 }
294 ivalue += cf * sum1;
295 cf *= 1. / 4.;
296 }
297 ivalue /= dstst;
298 }
299 pI3D4st[ep][idx] = ivalue;
300 }
301 }
302 fEval[E_I3D4st + ep] = true;
303}
304
305/* --------------------------------------------------------
306 * I2D4stu bubble in D+8 dim
307 * --------------------------------------------------------
308 */
309ncomplex Minor5::I2D4stu( int ep, int s, int t, int u ) {
310 assert( t != u && u != s && s != t ); // if (t==u || u==s || s==t) return 0;
311 if ( ep == 2 ) return 0;
312 if ( not fEval[E_I2D4stu + ep] )
313 {
314 I2D4stuEval( 0, ep, 1, 2, 3, 4, 5, kinem.p5() );
315 I2D4stuEval( 1, ep, 1, 2, 4, 3, 5, kinem.s45() );
316 I2D4stuEval( 2, ep, 1, 2, 5, 3, 4, kinem.p4() );
317
318 I2D4stuEval( 3, ep, 1, 3, 4, 2, 5, kinem.s12() );
319 I2D4stuEval( 4, ep, 1, 3, 5, 2, 4, kinem.s34() );
320
321 I2D4stuEval( 5, ep, 1, 4, 5, 2, 3, kinem.p3() );
322
323 if ( smax == 5 )
324 {
325 I2D4stuEval( 6, ep, 2, 3, 4, 1, 5, kinem.p1() );
326 I2D4stuEval( 7, ep, 2, 3, 5, 1, 4, kinem.s15() );
327
328 I2D4stuEval( 8, ep, 2, 4, 5, 1, 3, kinem.s23() );
329
330 I2D4stuEval( 9, ep, 3, 4, 5, 1, 2, kinem.p2() );
331 }
332
333 fEval[E_I2D4stu + ep] = true;
334 }
335 int idx = im3( s, t, u ) - 10;
336 return pI2D4stu[ep][idx];
337}
338
339void Minor5::I2D4stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq ) {
340 ncomplex sum1 = 0;
341 if ( ep == 0 )
342 {
343 const double dstustu = -2 * qsq; /*M3(s,t,u,s,t,u);*/
344 const double msq1 = kinem.mass( m );
345 const double msq2 = kinem.mass( n );
346 const double s_cutoff = seps1 * pmaxM2[im2( m, n ) - 5];
347
348 if ( fabs( dstustu ) <= s_cutoff )
349 {
350 const double mm12 = msq1 - msq2;
351 if ( fabs( mm12 ) < meps )
352 {
353 sum1 = ( 13 * msq1 + 12. * ICache::getI1( ep, Kinem1( msq1 ) ) ) * msq1 * msq1 * msq1 /
354 288.;
355 }
356 else
357 {
358 const double msq1p4 = ( msq1 * msq1 ) * ( msq1 * msq1 );
359 const double msq2p4 = ( msq2 * msq2 ) * ( msq2 * msq2 );
360 sum1 = ( 77 * ( msq1 * msq1p4 - msq2 * msq2p4 ) / 7200 +
361 ( +msq1p4 * ICache::getI1( ep, Kinem1( msq1 ) ) -
362 msq2p4 * ICache::getI1( ep, Kinem1( msq2 ) ) ) /
363 120. ) /
364 mm12;
365 }
366 }
367 else
368 {
369 ncomplex sumX = 9. * I2D3stu( ep, s, t, u ) + 2. * I2D3stu( ep + 1, s, t, u );
370 ncomplex sumY = -( 36. * ICache::getI1( ep, Kinem1( msq2 ) ) + 47 * msq2 ) * msq2 *
371 msq2 * msq2 / 96.;
372 ncomplex sumZ = -( 36. * ICache::getI1( ep, Kinem1( msq1 ) ) + 47 * msq1 ) * msq1 *
373 msq1 * msq1 / 96.;
374
375 const double ds0tu =
376 ( Cay[nss( m, m )] * Cay[nss( n, n )] - Cay[nss( m, n )] * Cay[nss( m, n )] );
377 sum1 += sumX * ds0tu;
378
379 const double dsvtuY =
380 -( Cay[nss( n, n )] - Cay[nss( m, n )] ); /* minus sign of minor v=m */
381 sum1 -= sumY * dsvtuY;
382
383 const double dsvtuZ =
384 +( Cay[nss( m, n )] - Cay[nss( m, m )] ); /* plus sign of minor v=n */
385 sum1 -= sumZ * dsvtuZ;
386
387 sum1 /= 81 * dstustu;
388 }
389 /* printf("I2D4stu(%e,%e,%e)^%d =
390 * %e,%e\n",-0.5*dstustu,msq1,msq2,ep,sum1.real(),sum1.imag());
391 */
392 }
393 else
394 {
395 assert( ep == 1 );
396 const double y11 = Cay[nss( m, m )];
397 const double y12 = Cay[nss( m, n )];
398 const double y22 = Cay[nss( n, n )];
399 sum1 = ( +y11 * y11 *
400 ( y11 * ( 35 * ( y11 + y12 ) + 5 * y22 ) + 15 * y12 * ( 2 * y12 + y22 ) ) +
401 y22 * y22 *
402 ( y22 * ( 35 * ( y22 + y12 ) + 5 * y11 ) + 15 * y12 * ( 2 * y12 + y11 ) ) +
403 y12 * y12 * ( y12 * ( 8 * y12 + 20 * y11 + 20 * y22 ) + 24 * y11 * y22 ) +
404 3 * y11 * y11 * y22 * y22 ) /
405 120960;
406 }
407 pI2D4stu[ep][idx] = sum1;
408}
409
410/* --------------------------------------------------------
411 * I3D5st triangle in D+10 dim
412 * --------------------------------------------------------
413 */
414ncomplex Minor5::I3D5st( int ep, int s, int t ) {
415 assert( s != t ); // if (s==t) return 0;
416 if ( ep == 2 ) return 0;
417 if ( not fEval[E_I3D5st + ep] ) { I3D5stEval( ep ); }
418 int idx = im2( s, t ) - 5;
419 return pI3D5st[ep][idx];
420}
421
422void Minor5::I3D5stEval( int ep ) {
423 for ( int s = 1; s <= smax; s++ )
424 {
425 for ( int t = s + 1; t <= 5; t++ )
426 {
427 int idx = im2( s, t ) - 5;
428
429 const double dstst = M2( s, t, s, t );
430 ncomplex ivalue = 0;
431
432 if ( pmaxS3[idx] <= deps )
433 {
434 printf( "I3D5 - M2({%d,%d}) <= eps\n", s, t );
435 ivalue = std::numeric_limits<double>::quiet_NaN();
436 }
437 else
438 {
439 double cf = 1. / 10.;
440 for ( int ei = ep; ei <= 1; ei++ )
441 {
442 ncomplex sum1 = M3( 0, s, t, 0, s, t ) * I3D4st( ei, s, t );
443 for ( int u = 1; u <= 5; u++ )
444 {
445 if ( t == u || s == u ) continue;
446 sum1 -= M3( u, s, t, 0, s, t ) * I2D4stu( ei, s, t, u );
447 }
448 ivalue += cf * sum1;
449 cf *= 1. / 5.;
450 }
451 ivalue /= dstst;
452 }
453 pI3D5st[ep][idx] = ivalue;
454 }
455 }
456 fEval[E_I3D5st + ep] = true;
457}
458
459/* --------------------------------------------------------
460 * I2D5stu bubble in D+10 dim
461 * --------------------------------------------------------
462 */
463ncomplex Minor5::I2D5stu( int ep, int s, int t, int u ) {
464 assert( t != u && u != s && s != t ); // if (t==u || u==s || s==t) return 0;
465 if ( ep == 2 ) return 0;
466 if ( not fEval[E_I2D5stu + ep] )
467 {
468 I2D5stuEval( 0, ep, 1, 2, 3, 4, 5, kinem.p5() );
469 I2D5stuEval( 1, ep, 1, 2, 4, 3, 5, kinem.s45() );
470 I2D5stuEval( 2, ep, 1, 2, 5, 3, 4, kinem.p4() );
471
472 I2D5stuEval( 3, ep, 1, 3, 4, 2, 5, kinem.s12() );
473 I2D5stuEval( 4, ep, 1, 3, 5, 2, 4, kinem.s34() );
474
475 I2D5stuEval( 5, ep, 1, 4, 5, 2, 3, kinem.p3() );
476
477 if ( smax == 5 )
478 {
479 I2D5stuEval( 6, ep, 2, 3, 4, 1, 5, kinem.p1() );
480 I2D5stuEval( 7, ep, 2, 3, 5, 1, 4, kinem.s15() );
481
482 I2D5stuEval( 8, ep, 2, 4, 5, 1, 3, kinem.s23() );
483
484 I2D5stuEval( 9, ep, 3, 4, 5, 1, 2, kinem.p2() );
485 }
486
487 fEval[E_I2D5stu + ep] = true;
488 }
489 int idx = im3( s, t, u ) - 10;
490 return pI2D5stu[ep][idx];
491}
492
493void Minor5::I2D5stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq ) {
494 ncomplex sum1 = 0;
495 if ( ep == 0 )
496 {
497 const double dstustu = -2 * qsq; /*M3(s,t,u,s,t,u);*/
498 const double msq1 = kinem.mass( m );
499 const double msq2 = kinem.mass( n );
500 const double s_cutoff = seps1 * pmaxM2[im2( m, n ) - 5];
501
502 if ( fabs( dstustu ) <= s_cutoff )
503 {
504 const double mm12 = msq1 - msq2;
505 if ( fabs( mm12 ) < meps )
506 {
507 sum1 = -( 77 * msq1 + 60. * ICache::getI1( ep, Kinem1( msq1 ) ) ) * ( msq1 * msq1 ) *
508 ( msq1 * msq1 ) / 7200.;
509 }
510 else
511 {
512 const double msq1p5 = ( msq1 * msq1 ) * ( msq1 * msq1 ) * msq1;
513 const double msq2p5 = ( msq2 * msq2 ) * ( msq2 * msq2 ) * msq2;
514 sum1 = -( 29 * ( msq1 * msq1p5 - msq2 * msq2p5 ) / 14400 +
515 ( +msq1p5 * ICache::getI1( ep, Kinem1( msq1 ) ) -
516 msq2p5 * ICache::getI1( ep, Kinem1( msq2 ) ) ) /
517 720. ) /
518 mm12;
519 }
520 }
521 else
522 {
523 ncomplex sumX = 11. * I2D4stu( ep, s, t, u ) + 2. * I2D4stu( ep + 1, s, t, u );
524 ncomplex sumY = ( 660. * ICache::getI1( ep, Kinem1( msq2 ) ) + 967 * msq2 ) *
525 ( msq2 * msq2 ) * ( msq2 * msq2 ) / 7200.;
526 ncomplex sumZ = ( 660. * ICache::getI1( ep, Kinem1( msq1 ) ) + 967 * msq1 ) *
527 ( msq1 * msq1 ) * ( msq1 * msq1 ) / 7200.;
528
529 const double ds0tu =
530 ( Cay[nss( m, m )] * Cay[nss( n, n )] - Cay[nss( m, n )] * Cay[nss( m, n )] );
531 sum1 += sumX * ds0tu;
532
533 const double dsvtuY =
534 -( Cay[nss( n, n )] - Cay[nss( m, n )] ); /* minus sign of minor v=m */
535 sum1 -= sumY * dsvtuY;
536
537 const double dsvtuZ =
538 +( Cay[nss( m, n )] - Cay[nss( m, m )] ); /* plus sign of minor v=n */
539 sum1 -= sumZ * dsvtuZ;
540
541 sum1 /= 121 * dstustu;
542 }
543 }
544 else
545 {
546 assert( ep == 1 );
547 const double y11 = Cay[nss( m, m )];
548 const double y12 = Cay[nss( m, n )];
549 const double y22 = Cay[nss( n, n )];
550 sum1 =
551 -( y11 * y11 * y11 *
552 ( y11 * ( 63 * ( y11 + y12 ) + 7 * y22 ) + 7 * y12 * ( 8 * y12 + 3 * y22 ) +
553 3 * y22 * y22 ) +
554 y22 * y22 * y22 *
555 ( y22 * ( 63 * ( y22 + y12 ) + 7 * y11 ) + 7 * y12 * ( 8 * y12 + 3 * y11 ) +
556 3 * y11 * y11 ) +
557 y12 * y12 * y12 *
558 ( 8 * y12 * ( y12 + 3 * y11 + 3 * y22 ) +
559 6 * ( 7 * y11 * y11 + 4 * y11 * y22 + 7 * y22 * y22 ) ) +
560 y11 * y22 * y12 * ( 4 * y12 * ( 9 * ( y11 + y22 ) + 4 * y12 ) + 15 * y11 * y22 ) ) /
561 2661120;
562 }
563 pI2D5stu[ep][idx] = sum1;
564}
565
566/* --------------------------------------------------------
567 * I3D6st triangle in D+12 dim
568 * --------------------------------------------------------
569 */
570ncomplex Minor5::I3D6st( int ep, int s, int t ) {
571 assert( s != t ); // if (s==t) return 0;
572 if ( ep == 2 ) return 0;
573 if ( not fEval[E_I3D6st + ep] ) { I3D6stEval( ep ); }
574 int idx = im2( s, t ) - 5;
575 return pI3D6st[ep][idx];
576}
577
578void Minor5::I3D6stEval( int ep ) {
579 for ( int s = 1; s <= smax; s++ )
580 {
581 for ( int t = s + 1; t <= 5; t++ )
582 {
583 int idx = im2( s, t ) - 5;
584
585 const double dstst = M2( s, t, s, t );
586 ncomplex ivalue = 0;
587
588 if ( pmaxS3[idx] <= deps )
589 {
590 printf( "I3D6 - M2({%d,%d}) <= eps\n", s, t );
591 ivalue = std::numeric_limits<double>::quiet_NaN();
592 }
593 else
594 {
595 double cf = 1. / 12.;
596 for ( int ei = ep; ei <= 1; ei++ )
597 {
598 ncomplex sum1 = M3( 0, s, t, 0, s, t ) * I3D5st( ei, s, t );
599 for ( int u = 1; u <= 5; u++ )
600 {
601 if ( t == u || s == u ) continue;
602 sum1 -= M3( u, s, t, 0, s, t ) * I2D5stu( ei, s, t, u );
603 }
604 ivalue += cf * sum1;
605 cf *= 1. / 6.;
606 }
607 ivalue /= dstst;
608 }
609 pI3D6st[ep][idx] = ivalue;
610 }
611 }
612 fEval[E_I3D6st + ep] = true;
613}
614
615/* --------------------------------------------------------
616 * I2D6stu bubble in D+12 dim
617 * --------------------------------------------------------
618 */
619ncomplex Minor5::I2D6stu( int ep, int s, int t, int u ) {
620 assert( t != u && u != s && s != t ); // if (t==u || u==s || s==t) return 0;
621 if ( ep == 2 ) return 0;
622 if ( not fEval[E_I2D6stu + ep] )
623 {
624 I2D6stuEval( 0, ep, 1, 2, 3, 4, 5, kinem.p5() );
625 I2D6stuEval( 1, ep, 1, 2, 4, 3, 5, kinem.s45() );
626 I2D6stuEval( 2, ep, 1, 2, 5, 3, 4, kinem.p4() );
627
628 I2D6stuEval( 3, ep, 1, 3, 4, 2, 5, kinem.s12() );
629 I2D6stuEval( 4, ep, 1, 3, 5, 2, 4, kinem.s34() );
630
631 I2D6stuEval( 5, ep, 1, 4, 5, 2, 3, kinem.p3() );
632
633 if ( smax == 5 )
634 {
635 I2D6stuEval( 6, ep, 2, 3, 4, 1, 5, kinem.p1() );
636 I2D6stuEval( 7, ep, 2, 3, 5, 1, 4, kinem.s15() );
637
638 I2D6stuEval( 8, ep, 2, 4, 5, 1, 3, kinem.s23() );
639
640 I2D6stuEval( 9, ep, 3, 4, 5, 1, 2, kinem.p2() );
641 }
642
643 fEval[E_I2D6stu + ep] = true;
644 }
645 int idx = im3( s, t, u ) - 10;
646 return pI2D6stu[ep][idx];
647}
648
649void Minor5::I2D6stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq ) {
650 ncomplex sum1 = 0;
651 if ( ep == 0 )
652 {
653 const double dstustu = -2 * qsq; /*M3(s,t,u,s,t,u);*/
654 const double msq1 = kinem.mass( m );
655 const double msq2 = kinem.mass( n );
656 const double s_cutoff = seps1 * pmaxM2[im2( m, n ) - 5];
657
658 if ( fabs( dstustu ) <= s_cutoff )
659 {
660 const double mm12 = msq1 - msq2;
661 if ( fabs( mm12 ) < meps )
662 {
663 sum1 = ( 29 * msq1 + 20. * ICache::getI1( ep, Kinem1( msq1 ) ) ) * ( msq1 * msq1 ) *
664 ( msq1 * msq1 ) * msq1 / 14400.;
665 }
666 else
667 {
668 const double msq1p6 = ( msq1 * msq1 ) * ( msq1 * msq1 ) * ( msq1 * msq1 );
669 const double msq2p6 = ( msq2 * msq2 ) * ( msq2 * msq2 ) * ( msq2 * msq2 );
670 sum1 = ( 223 * ( msq1 * msq1p6 - msq2 * msq2p6 ) / 705600 +
671 ( +msq1p6 * ICache::getI1( ep, Kinem1( msq1 ) ) -
672 msq2p6 * ICache::getI1( ep, Kinem1( msq2 ) ) ) /
673 5040. ) /
674 mm12;
675 }
676 }
677 else
678 {
679 ncomplex sumX = 13. * I2D5stu( ep, s, t, u ) + 2. * I2D5stu( ep + 1, s, t, u );
680 ncomplex sumY = -( 260. * ICache::getI1( ep, Kinem1( msq2 ) ) + 417 * msq2 ) *
681 ( msq2 * msq2 ) * ( msq2 * msq2 ) * msq2 / 14400.;
682 ncomplex sumZ = -( 260. * ICache::getI1( ep, Kinem1( msq1 ) ) + 417 * msq1 ) *
683 ( msq1 * msq1 ) * ( msq1 * msq1 ) * msq1 / 14400.;
684
685 const double ds0tu =
686 ( Cay[nss( m, m )] * Cay[nss( n, n )] - Cay[nss( m, n )] * Cay[nss( m, n )] );
687 sum1 += sumX * ds0tu;
688
689 const double dsvtuY =
690 -( Cay[nss( n, n )] - Cay[nss( m, n )] ); /* minus sign of minor v=m */
691 sum1 -= sumY * dsvtuY;
692
693 const double dsvtuZ =
694 +( Cay[nss( m, n )] - Cay[nss( m, m )] ); /* plus sign of minor v=n */
695 sum1 -= sumZ * dsvtuZ;
696
697 sum1 /= 169 * dstustu;
698 }
699 }
700 else
701 {
702 assert( ep == 1 );
703 const double y11 = Cay[nss( m, m )];
704 const double y12 = Cay[nss( m, n )];
705 const double y22 = Cay[nss( n, n )];
706 sum1 = ( y11 * y11 * y11 *
707 ( y11 * ( 21 * y11 * ( 11 * ( y11 + y12 ) + y22 ) + 210 * y12 * y12 +
708 7 * y22 * y22 + 63 * y22 * y12 ) +
709 y12 * y12 * ( 168 * y12 + 112 * y22 ) ) +
710 y22 * y22 * y22 *
711 ( y22 * ( 21 * y22 * ( 11 * ( y22 + y12 ) + y11 ) + 210 * y12 * y12 +
712 7 * y11 * y11 + 63 * y11 * y12 ) +
713 y12 * y12 * ( 168 * y12 + 112 * y11 ) ) +
714 y12 * y12 *
715 ( y12 * y12 *
716 ( 16 * y12 * y12 + 112 * ( y11 * y11 + y22 * y22 ) +
717 56 * y12 * ( y11 + y22 ) + 120 * y11 * y22 ) +
718 y11 * y22 * ( 90 * y11 * y22 + 140 * y12 * ( y22 + y11 ) ) ) +
719 y11 * y11 * y22 * y22 * ( 35 * ( y11 + y22 ) * y12 + 5 * y11 * y22 ) ) /
720 138378240;
721 }
722 pI2D6stu[ep][idx] = sum1;
723}
724
725/* --------------------------------------------------------
726 * I3D7st triangle in D+14 dim
727 * --------------------------------------------------------
728 */
729ncomplex Minor5::I3D7st( int ep, int s, int t ) {
730 assert( s != t ); // if (s==t) return 0;
731 if ( ep == 2 ) return 0;
732 if ( not fEval[E_I3D7st + ep] ) { I3D7stEval( ep ); }
733 int idx = im2( s, t ) - 5;
734 return pI3D7st[ep][idx];
735}
736
737void Minor5::I3D7stEval( int ep ) {
738 for ( int s = 1; s <= smax; s++ )
739 {
740 for ( int t = s + 1; t <= 5; t++ )
741 {
742 int idx = im2( s, t ) - 5;
743
744 const double dstst = M2( s, t, s, t );
745 ncomplex ivalue = 0;
746
747 if ( pmaxS3[idx] <= deps )
748 {
749 printf( "I3D7 - M2({%d,%d}) <= eps\n", s, t );
750 ivalue = std::numeric_limits<double>::quiet_NaN();
751 }
752 else
753 {
754 double cf = 1. / 14.;
755 for ( int ei = ep; ei <= 1; ei++ )
756 {
757 ncomplex sum1 = M3( 0, s, t, 0, s, t ) * I3D6st( ei, s, t );
758 for ( int u = 1; u <= 5; u++ )
759 {
760 if ( t == u || s == u ) continue;
761 sum1 -= M3( u, s, t, 0, s, t ) * I2D6stu( ei, s, t, u );
762 }
763 ivalue += cf * sum1;
764 cf *= 1. / 7.;
765 }
766 ivalue /= dstst;
767 }
768 pI3D7st[ep][idx] = ivalue;
769 }
770 }
771 fEval[E_I3D7st + ep] = true;
772}
std::complex< double > ncomplex
const Int_t n
XmlRpcServer s
static ncomplex getI1(int ep, const Kinem1 &k)
Definition kinem.h:93
double mass(int i) const
Definition kinem.h:19
ncomplex I2stu(int ep, int s, int t, int u)
Definition minor.cpp:919
double M2(int i, int j, int l, int m) PURE
Definition minor.cpp:480
ncomplex I2D6stu(int ep, int s, int t, int u)
Definition minorex.cpp:619
ncomplex I2D3stu(int ep, int s, int t, int u)
Definition minorex.cpp:167
ncomplex I3D6st(int ep, int s, int t)
Definition minorex.cpp:570
ncomplex I3D3st(int ep, int s, int t)
Definition minor.cpp:2430
ncomplex I2D5stu(int ep, int s, int t, int u)
Definition minorex.cpp:463
ncomplex I2D2stu(int ep, int s, int t, int u)
Definition minor.cpp:2341
ncomplex I3D7st(int ep, int s, int t)
Definition minorex.cpp:729
ncomplex I2D4stu(int ep, int s, int t, int u)
Definition minorex.cpp:309
ncomplex I3D5st(int ep, int s, int t)
Definition minorex.cpp:414
double M3(int i, int j, int k, int l, int m, int n) PURE
Definition minor.cpp:494
ncomplex I3D4st(int ep, int s, int t)
Definition minorex.cpp:260
static const double seps1
Definition minor.h:163
static double deps
Definition minor.h:169
static int nss(int i, int j) CONST
Definition minor.h:77
static int im2(int i, int j) CONST
Definition minor.h:604
static double meps
Definition minor.h:170
static int im3(int i, int j, int k) CONST
Definition minor.h:599
double Cay[(DCay - 1) *(DCay)/2]
Definition minor.h:186
double int * ep
Definition qcdloop1.h:82
int t()
Definition t.c:1
#define ns(x)
Definition xmltok.c:1355