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