BOSS 7.0.5
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 "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
Definition: HelloServer.cpp:11
TTree * t
Definition: binning.cxx:23
static ncomplex getI1(int ep, const Kinem1 &k)
Definition: kinem.h:93
double p4() const
Definition: kinem.h:207
double p3() const
Definition: kinem.h:206
double p1() const
Definition: kinem.h:204
double s15() const
Definition: kinem.h:218
double s45() const
Definition: kinem.h:217
double p2() const
Definition: kinem.h:205
double p5() const
Definition: kinem.h:208
double s34() const
Definition: kinem.h:216
double s12() const
Definition: kinem.h:214
double s23() const
Definition: kinem.h:215
double mass(int i) const
Definition: kinem.h:22
ncomplex I2stu(int ep, int s, int t, int u)
Definition: minor.cpp:898
double M2(int i, int j, int l, int m) PURE
Definition: minor.cpp:471
ncomplex I2D6stu(int ep, int s, int t, int u)
Definition: minorex.cpp:547
ncomplex I2D3stu(int ep, int s, int t, int u)
Definition: minorex.cpp:142
ncomplex I3D6st(int ep, int s, int t)
Definition: minorex.cpp:500
ncomplex I3D3st(int ep, int s, int t)
Definition: minor.cpp:2323
ncomplex I2D5stu(int ep, int s, int t, int u)
Definition: minorex.cpp:412
ncomplex I2D2stu(int ep, int s, int t, int u)
Definition: minor.cpp:2242
ncomplex I3D7st(int ep, int s, int t)
Definition: minorex.cpp:636
ncomplex I2D4stu(int ep, int s, int t, int u)
Definition: minorex.cpp:275
ncomplex I3D5st(int ep, int s, int t)
Definition: minorex.cpp:365
double M3(int i, int j, int k, int l, int m, int n) PURE
Definition: minor.cpp:486
ncomplex I3D4st(int ep, int s, int t)
Definition: minorex.cpp:227
static const double seps1
Definition: minor.h:182
static double deps
Definition: minor.h:188
static int nss(int i, int j) CONST
Definition: minor.h:79
static int im2(int i, int j) CONST
Definition: minor.h:620
static double meps
Definition: minor.h:189
static int im3(int i, int j, int k) CONST
Definition: minor.h:613
double Cay[(DCay-1) *(DCay)/2]
Definition: minor.h:211
std::complex< double > ncomplex
Definition: common.h:25
#define ns(x)
Definition: xmltok.c:1504