21ncomplex Minor5::I2mDstu(
int ep,
int s,
int t,
int u,
int m,
int n ) {
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 );
28 const double s_cutoff =
seps1 * pmaxM2[
im2( m,
n ) - 5];
30 if ( fabs( dstustu ) <= s_cutoff )
32 const double mm12 = msq1 - msq2;
33 if ( fabs( mm12 ) <
meps )
35 if ( msq1 >
meps ) { sum1 = 1 / msq1; }
53 sum1 += sumX * dstustu;
57 sum1 += sumY * dsvtuY;
61 sum1 += sumZ * dsvtuZ;
68 if ( fabs( msq1 ) <
meps )
70 if ( fabs( msq2 ) <
meps )
72 if ( fabs( dstustu ) >
meps )
74 sum1 = 2. / ( -0.5 * dstustu );
83 sum1 = 1. / ( ( -0.5 * dstustu ) - msq2 );
86 else if ( fabs( msq2 ) <
meps )
88 sum1 = 1. / ( ( -0.5 * dstustu ) - msq1 );
98ncomplex Minor5::I2stui(
int ep,
int s,
int t,
int u,
int i,
int ip ) {
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 );
105 const double s_cutoff =
seps1 * pmaxM2[
im2( i, ip ) - 5];
107 if ( fabs( dstustu ) <= s_cutoff )
109 const double mm12 = msq1 - msq2;
110 if ( fabs( mm12 ) <
meps )
112 if ( msq1 >
meps ) { sum1 = -1 / ( 2 * msq1 ); }
119 sum1 = -1 / ( msq1 - msq2 ) - ( +msq2 *
ICache::getI1(
ep, Kinem1( msq1 ) ) -
121 ( msq1 * mm12 * mm12 );
128 sum1 += +(
Cay[
nss( ip, ip )] -
Cay[
ns( i, ip )] ) * I2mDstu(
ep,
s,
t, u, i, ip );
136 if ( fabs( msq1 ) <
meps )
138 if ( fabs( dstustu ) >
meps )
140 if ( fabs( msq2 ) <
meps )
142 sum1 = -1. / ( -0.5 * dstustu );
146 sum1 = -1. / ( ( -0.5 * dstustu ) - msq2 );
168 assert(
t != u && u !=
s &&
s !=
t );
169 if (
ep == 2 )
return 0;
170 if ( not fEval[E_I2D3stu +
ep] )
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() );
176 I2D3stuEval( 3,
ep, 1, 3, 4, 2, 5, kinem.s12() );
177 I2D3stuEval( 4,
ep, 1, 3, 5, 2, 4, kinem.s34() );
179 I2D3stuEval( 5,
ep, 1, 4, 5, 2, 3, kinem.p3() );
183 I2D3stuEval( 6,
ep, 2, 3, 4, 1, 5, kinem.p1() );
184 I2D3stuEval( 7,
ep, 2, 3, 5, 1, 4, kinem.s15() );
186 I2D3stuEval( 8,
ep, 2, 4, 5, 1, 3, kinem.s23() );
188 I2D3stuEval( 9,
ep, 3, 4, 5, 1, 2, kinem.p2() );
191 fEval[E_I2D3stu +
ep] =
true;
193 int idx =
im3(
s,
t, u ) - 10;
194 return pI2D3stu[
ep][idx];
197void Minor5::I2D3stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq ) {
201 const double dstustu = -2 * qsq;
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];
206 if ( fabs( dstustu ) <= s_cutoff )
208 const double mm12 = msq1 - msq2;
209 if ( fabs( mm12 ) <
meps )
213 sum1 = -13 * ( ( msq1 + msq2 ) * ( msq1 * msq1 + msq2 * msq2 ) ) / 288 +
223 ( 42. *
ICache::getI1(
ep, Kinem1( msq2 ) ) + 47 * msq2 ) * msq2 * msq2 / 36.;
225 ( 42. *
ICache::getI1(
ep, Kinem1( msq1 ) ) + 47 * msq1 ) * msq1 * msq1 / 36.;
229 sum1 += sumX * ds0tu;
231 const double dsvtuY =
233 sum1 -= sumY * dsvtuY;
235 const double dsvtuZ =
237 sum1 -= sumZ * dsvtuZ;
239 sum1 /= 49 * dstustu;
245 const double y11 =
Cay[
nss( m, m )];
246 const double y12 =
Cay[
nss( m,
n )];
247 const double y22 =
Cay[
nss(
n,
n )];
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 ) /
253 pI2D3stu[
ep][idx] = sum1;
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];
268void Minor5::I3D4stEval(
int ep ) {
269 for (
int s = 1;
s <= smax;
s++ )
271 for (
int t =
s + 1;
t <= 5;
t++ )
273 int idx =
im2(
s,
t ) - 5;
275 const double dstst =
M2(
s,
t,
s,
t );
278 if ( pmaxS3[idx] <=
deps )
280 printf(
"I3D4 - M2({%d,%d}) <= eps\n",
s,
t );
281 ivalue = std::numeric_limits<double>::quiet_NaN();
286 for (
int ei =
ep; ei <= 1; ei++ )
289 for (
int u = 1; u <= 5; u++ )
291 if (
t == u ||
s == u )
continue;
299 pI3D4st[
ep][idx] = ivalue;
302 fEval[E_I3D4st +
ep] =
true;
310 assert(
t != u && u !=
s &&
s !=
t );
311 if (
ep == 2 )
return 0;
312 if ( not fEval[E_I2D4stu +
ep] )
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() );
318 I2D4stuEval( 3,
ep, 1, 3, 4, 2, 5, kinem.s12() );
319 I2D4stuEval( 4,
ep, 1, 3, 5, 2, 4, kinem.s34() );
321 I2D4stuEval( 5,
ep, 1, 4, 5, 2, 3, kinem.p3() );
325 I2D4stuEval( 6,
ep, 2, 3, 4, 1, 5, kinem.p1() );
326 I2D4stuEval( 7,
ep, 2, 3, 5, 1, 4, kinem.s15() );
328 I2D4stuEval( 8,
ep, 2, 4, 5, 1, 3, kinem.s23() );
330 I2D4stuEval( 9,
ep, 3, 4, 5, 1, 2, kinem.p2() );
333 fEval[E_I2D4stu +
ep] =
true;
335 int idx =
im3(
s,
t, u ) - 10;
336 return pI2D4stu[
ep][idx];
339void Minor5::I2D4stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq ) {
343 const double dstustu = -2 * qsq;
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];
348 if ( fabs( dstustu ) <= s_cutoff )
350 const double mm12 = msq1 - msq2;
351 if ( fabs( mm12 ) <
meps )
358 const double msq1p4 = ( msq1 * msq1 ) * ( msq1 * msq1 );
359 const double msq2p4 = ( msq2 * msq2 ) * ( msq2 * msq2 );
360 sum1 = ( 77 * ( msq1 * msq1p4 - msq2 * msq2p4 ) / 7200 +
377 sum1 += sumX * ds0tu;
379 const double dsvtuY =
381 sum1 -= sumY * dsvtuY;
383 const double dsvtuZ =
385 sum1 -= sumZ * dsvtuZ;
387 sum1 /= 81 * dstustu;
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 ) ) +
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 ) /
407 pI2D4stu[
ep][idx] = sum1;
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];
422void Minor5::I3D5stEval(
int ep ) {
423 for (
int s = 1;
s <= smax;
s++ )
425 for (
int t =
s + 1;
t <= 5;
t++ )
427 int idx =
im2(
s,
t ) - 5;
429 const double dstst =
M2(
s,
t,
s,
t );
432 if ( pmaxS3[idx] <=
deps )
434 printf(
"I3D5 - M2({%d,%d}) <= eps\n",
s,
t );
435 ivalue = std::numeric_limits<double>::quiet_NaN();
439 double cf = 1. / 10.;
440 for (
int ei =
ep; ei <= 1; ei++ )
443 for (
int u = 1; u <= 5; u++ )
445 if (
t == u ||
s == u )
continue;
453 pI3D5st[
ep][idx] = ivalue;
456 fEval[E_I3D5st +
ep] =
true;
464 assert(
t != u && u !=
s &&
s !=
t );
465 if (
ep == 2 )
return 0;
466 if ( not fEval[E_I2D5stu +
ep] )
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() );
472 I2D5stuEval( 3,
ep, 1, 3, 4, 2, 5, kinem.s12() );
473 I2D5stuEval( 4,
ep, 1, 3, 5, 2, 4, kinem.s34() );
475 I2D5stuEval( 5,
ep, 1, 4, 5, 2, 3, kinem.p3() );
479 I2D5stuEval( 6,
ep, 2, 3, 4, 1, 5, kinem.p1() );
480 I2D5stuEval( 7,
ep, 2, 3, 5, 1, 4, kinem.s15() );
482 I2D5stuEval( 8,
ep, 2, 4, 5, 1, 3, kinem.s23() );
484 I2D5stuEval( 9,
ep, 3, 4, 5, 1, 2, kinem.p2() );
487 fEval[E_I2D5stu +
ep] =
true;
489 int idx =
im3(
s,
t, u ) - 10;
490 return pI2D5stu[
ep][idx];
493void Minor5::I2D5stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq ) {
497 const double dstustu = -2 * qsq;
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];
502 if ( fabs( dstustu ) <= s_cutoff )
504 const double mm12 = msq1 - msq2;
505 if ( fabs( mm12 ) <
meps )
508 ( msq1 * msq1 ) / 7200.;
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 +
525 ( msq2 * msq2 ) * ( msq2 * msq2 ) / 7200.;
527 ( msq1 * msq1 ) * ( msq1 * msq1 ) / 7200.;
531 sum1 += sumX * ds0tu;
533 const double dsvtuY =
535 sum1 -= sumY * dsvtuY;
537 const double dsvtuZ =
539 sum1 -= sumZ * dsvtuZ;
541 sum1 /= 121 * dstustu;
547 const double y11 =
Cay[
nss( m, m )];
548 const double y12 =
Cay[
nss( m,
n )];
549 const double y22 =
Cay[
nss(
n,
n )];
552 ( y11 * ( 63 * ( y11 + y12 ) + 7 * y22 ) + 7 * y12 * ( 8 * y12 + 3 * y22 ) +
555 ( y22 * ( 63 * ( y22 + y12 ) + 7 * y11 ) + 7 * y12 * ( 8 * y12 + 3 * y11 ) +
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 ) ) /
563 pI2D5stu[
ep][idx] = sum1;
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];
578void Minor5::I3D6stEval(
int ep ) {
579 for (
int s = 1;
s <= smax;
s++ )
581 for (
int t =
s + 1;
t <= 5;
t++ )
583 int idx =
im2(
s,
t ) - 5;
585 const double dstst =
M2(
s,
t,
s,
t );
588 if ( pmaxS3[idx] <=
deps )
590 printf(
"I3D6 - M2({%d,%d}) <= eps\n",
s,
t );
591 ivalue = std::numeric_limits<double>::quiet_NaN();
595 double cf = 1. / 12.;
596 for (
int ei =
ep; ei <= 1; ei++ )
599 for (
int u = 1; u <= 5; u++ )
601 if (
t == u ||
s == u )
continue;
609 pI3D6st[
ep][idx] = ivalue;
612 fEval[E_I3D6st +
ep] =
true;
620 assert(
t != u && u !=
s &&
s !=
t );
621 if (
ep == 2 )
return 0;
622 if ( not fEval[E_I2D6stu +
ep] )
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() );
628 I2D6stuEval( 3,
ep, 1, 3, 4, 2, 5, kinem.s12() );
629 I2D6stuEval( 4,
ep, 1, 3, 5, 2, 4, kinem.s34() );
631 I2D6stuEval( 5,
ep, 1, 4, 5, 2, 3, kinem.p3() );
635 I2D6stuEval( 6,
ep, 2, 3, 4, 1, 5, kinem.p1() );
636 I2D6stuEval( 7,
ep, 2, 3, 5, 1, 4, kinem.s15() );
638 I2D6stuEval( 8,
ep, 2, 4, 5, 1, 3, kinem.s23() );
640 I2D6stuEval( 9,
ep, 3, 4, 5, 1, 2, kinem.p2() );
643 fEval[E_I2D6stu +
ep] =
true;
645 int idx =
im3(
s,
t, u ) - 10;
646 return pI2D6stu[
ep][idx];
649void Minor5::I2D6stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq ) {
653 const double dstustu = -2 * qsq;
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];
658 if ( fabs( dstustu ) <= s_cutoff )
660 const double mm12 = msq1 - msq2;
661 if ( fabs( mm12 ) <
meps )
664 ( msq1 * msq1 ) * msq1 / 14400.;
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 +
681 ( msq2 * msq2 ) * ( msq2 * msq2 ) * msq2 / 14400.;
683 ( msq1 * msq1 ) * ( msq1 * msq1 ) * msq1 / 14400.;
687 sum1 += sumX * ds0tu;
689 const double dsvtuY =
691 sum1 -= sumY * dsvtuY;
693 const double dsvtuZ =
695 sum1 -= sumZ * dsvtuZ;
697 sum1 /= 169 * dstustu;
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 ) ) +
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 ) ) +
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 ) ) /
722 pI2D6stu[
ep][idx] = sum1;
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];
737void Minor5::I3D7stEval(
int ep ) {
738 for (
int s = 1;
s <= smax;
s++ )
740 for (
int t =
s + 1;
t <= 5;
t++ )
742 int idx =
im2(
s,
t ) - 5;
744 const double dstst =
M2(
s,
t,
s,
t );
747 if ( pmaxS3[idx] <=
deps )
749 printf(
"I3D7 - M2({%d,%d}) <= eps\n",
s,
t );
750 ivalue = std::numeric_limits<double>::quiet_NaN();
754 double cf = 1. / 14.;
755 for (
int ei =
ep; ei <= 1; ei++ )
758 for (
int u = 1; u <= 5; u++ )
760 if (
t == u ||
s == u )
continue;
768 pI3D7st[
ep][idx] = ivalue;
771 fEval[E_I3D7st +
ep] =
true;
std::complex< double > ncomplex
static ncomplex getI1(int ep, const Kinem1 &k)
ncomplex I2stu(int ep, int s, int t, int u)
double M2(int i, int j, int l, int m) PURE
ncomplex I2D6stu(int ep, int s, int t, int u)
ncomplex I2D3stu(int ep, int s, int t, int u)
ncomplex I3D6st(int ep, int s, int t)
ncomplex I3D3st(int ep, int s, int t)
ncomplex I2D5stu(int ep, int s, int t, int u)
ncomplex I2D2stu(int ep, int s, int t, int u)
ncomplex I3D7st(int ep, int s, int t)
ncomplex I2D4stu(int ep, int s, int t, int u)
ncomplex I3D5st(int ep, int s, int t)
double M3(int i, int j, int k, int l, int m, int n) PURE
ncomplex I3D4st(int ep, int s, int t)
static const double seps1
static int nss(int i, int j) CONST
static int im2(int i, int j) CONST
static int im3(int i, int j, int k) CONST
double Cay[(DCay - 1) *(DCay)/2]