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