17#define stepWynn( n ) \
18 sum[( 2 + n ) % 3] = sum1; \
20 const ncomplex s2 = sum[( 2 + n ) % 3]; \
21 const ncomplex s1 = sum[( 1 + n ) % 3]; \
22 const ncomplex s10 = s21; \
24 if ( s21 == s10 || ( fabs( s2.real() * heps ) >= fabs( s21.real() ) && \
25 fabs( s2.imag() * heps ) >= fabs( s21.imag() ) ) ) \
28 sump = s1 + 1. / ( 1. / s21 - 1. / s10 ); \
30 if ( fabs( sump.real() * teps ) >= fabs( sump.real() - dv.real() ) && \
31 fabs( sump.imag() * teps ) >= fabs( sump.imag() - dv.imag() ) ) \
35#define tswap( x, y, t ) \
45# define CIDX ( DCay - 2 )
48# define CIDX ( DCay - 1 )
56# define EVALUNDEF return std::numeric_limits<double>::signaling_NaN();
59 virtual ncomplex A(
int ep,
int i,
int j ) { EVALUNDEF }
60 virtual ncomplex A(
int ep,
int i,
int j,
int k ) { EVALUNDEF }
61 virtual ncomplex A(
int ep,
int i,
int j,
int k,
int l ) { EVALUNDEF }
62 virtual ncomplex A(
int ep,
int i,
int j,
int k,
int l,
int m ) { EVALUNDEF }
65 virtual ncomplex B(
int ep,
int i,
int j ) { EVALUNDEF }
66 virtual ncomplex B(
int ep,
int i,
int j,
int k ) { EVALUNDEF }
73 inline static int ns(
int i,
int j )
CONST {
74 return ( i <= j ? ( i - 1 ) + ( ( j - 1 ) * j ) / 2 : ( j - 1 ) + ( ( i - 1 ) * i ) / 2 );
79 return ( i - 1 ) + ( ( j - 1 ) * j ) / 2;
83 inline static int is(
int i,
int j )
CONST {
84 return ( i <= j ? i + j * ( j + 1 ) / 2 : j + i * ( i + 1 ) / 2 );
87 inline static int is(
int i,
int j,
int k )
CONST {
88 if ( i <= j ) {
return ( j <= k ? i + ti2[j] + ti3[k] :
is( i, k ) + ti3[j] ); }
89 else {
return ( i > k ?
is( j, k ) + ti3[i] : j + ti2[i] + ti3[k] ); }
92 inline static int is(
int i,
int j,
int k,
int l )
CONST {
96 {
return ( k <= l ? i + ti2[j] + ti3[k] + ti4[l] :
is( i, j, l ) + ti4[k] ); }
97 else {
return ( j > l ?
is( i, k, l ) + ti4[j] :
is( i, k ) + ti3[j] + ti4[l] ); }
102 {
return ( i > l ?
is( j, k, l ) + ti4[i] :
is( j, k ) + ti3[i] + ti4[l] ); }
103 else {
return ( k <= l ? j + ti2[i] + ti3[k] + ti4[l] :
is( i, j, l ) + ti4[k] ); }
110 return i + j * ( j + 1 ) / 2;
115 assert( i <= j && j <= k );
116 return i + ti2[j] + ti3[k];
119 inline static int iss(
int i,
int j,
int k,
int l )
CONST
121 assert( i <= j && j <= k && k <= l );
122 return i + ti2[j] + ti3[k] + ti4[l];
125 inline static int iss(
int i,
int j,
int k,
int l,
int m )
CONST
127 assert( i <= j && j <= k && k <= l && l <= m );
128 return i + ti2[j] + ti3[k] + ti4[l] + ti5[m];
134 static int im3(
int i,
int j,
int k )
CONST;
135 static int im2(
int i,
int j )
CONST;
136 static int signM3ud(
int i,
int j,
int k,
int l,
int m,
141 static void freeidxM3(
int set[],
int free[] );
143 static void Rescale(
double factor );
146 static const unsigned char ti2[8];
147 static const unsigned char ti3[8];
148 static const unsigned char ti4[8];
149 static const unsigned char ti5[8];
152 static const unsigned char idxtbl[64];
179 if ( i == 0 ) {
return j == 0 ? 0 : 1; }
180 else {
return j == 0 ? 1 :
Cay[
ns( i, j )]; }
191 friend class SPtr<Minor5>;
204# ifdef USE_GOLEM_MODE_6
206# define ix( i ) i < psix ? i : i - 1
213 virtual ncomplex A(
int ep,
int i,
int j,
int k ) {
216 virtual ncomplex A(
int ep,
int i,
int j,
int k,
int l ) {
219 virtual ncomplex A(
int ep,
int i,
int j,
int k,
int l,
int m ) {
225 virtual ncomplex B(
int ep,
int i,
int j,
int k ) {
283 double M1(
int i,
int l )
PURE;
284 double M2(
int i,
int j,
int l,
int m )
PURE;
285 double M3(
int i,
int j,
int k,
int l,
int m,
int n )
PURE;
290 Minor5(
const Kinem5& k );
291 Minor5(
const Kinem4& k );
292 Minor5(
const Minor5& m ) =
delete;
293 Minor5& operator=(
const Minor5& m ) =
delete;
299 double pmaxS4[
DCay - 1];
315 E_I4D4sijk = E_I4D4sijkl + 3,
316 E_I3D3stij = E_I4D4sijk + 3,
317 E_I4D4sij = E_I3D3stij + 3,
318 E_I3D3sti = E_I4D4sij + 3,
319 E_I4D4si = E_I3D3sti + 3,
320 E_I4D4s = E_I4D4si + 3,
321 E_I2D6stu = E_I4D4s + 3,
322 E_I3D7st = E_I2D6stu + 3,
323 E_I2D5stu = E_I3D7st + 3,
324 E_I3D6st = E_I2D5stu + 3,
325 E_I2D4stu = E_I3D6st + 3,
326 E_I3D5st = E_I2D4stu + 3,
327 E_I2D3stu = E_I3D5st + 3,
328 E_I3D4st = E_I2D3stu + 3,
329 E_I3D3stijk = E_I3D4st + 3,
330 E_I2D2stui = E_I3D3stijk + 3,
331 E_I2D2stuij = E_I2D2stui + 3,
332 E_I2D2stu = E_I2D2stuij + 3,
333 E_I3D3st = E_I2D2stu + 3,
334 E_I4D3sijk = E_I3D3st + 3,
335 E_I3D2stij = E_I4D3sijk + 3,
336 E_I2Dstui = E_I3D2stij + 3,
337 E_I3D2st = E_I2Dstui + 2,
338 E_I4D3s = E_I3D2st + 3,
339 E_I4D3sij = E_I4D3s + 3,
340 E_I4D3si = E_I4D3sij + 3,
341 E_I3D2sti = E_I4D3si + 3,
342 E_I2Dstu = E_I3D2sti + 3,
343 E_I3Dsti = E_I2Dstu + 3,
344 E_I4D2sij = E_I3Dsti + 3,
345 E_I2stu = E_I4D2sij + 3,
346 E_I4D2s = E_I2stu + 3,
347 E_I4D2si = E_I4D2s + 3,
348 E_I3Dst = E_I4D2si + 3,
349 E_I4Dsi = E_I3Dst + 3,
350 E_I4Ds = E_I4Dsi + 3,
356 std::bitset<E_LEN> fEval;
359 static const int DM3 = 20;
360 double pM3[DM3 * ( DM3 + 1 ) / 2];
361 static const int DM2 = 15;
362 double pM2[DM2 * ( DM2 + 1 ) / 2];
363 static const int DM1 = 6;
364 double pM1[DM1 * ( DM1 + 1 ) / 2];
435 void I4sEval(
int ep );
437 void I3stEval(
int ep );
438 void I4DsEval(
int ep );
439 void I4DsiEval(
int ep );
441 void I2stuEval(
int ep );
442 void I3DstEval(
int ep );
443 void I4D2sEval(
int ep );
445 void I4D2siEval(
int ep );
446 void I3DstiEval(
int ep );
447 void I3D2stEval(
int ep );
448 void I4D3sEval(
int ep );
449 void I4D2sijEval(
int ep );
451 void I2DstuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
452 void I3D2stiEval(
int ep );
453 void I4D3siEval(
int ep );
454 void I4D3sijEval(
int ep );
456 void I2DstuiEval(
int ep,
int s,
int t,
int u,
int i,
int ip,
double qsq );
457 void I3D2stijEval(
int ep );
458 void I4D3sijkEval(
int ep );
460 void I4D4sEval(
int ep );
461 void I4D4siEval(
int ep );
462 void I3D3stiEval(
int ep );
463 void I4D4sijEval(
int ep );
464 void I2D2stuiEval(
int ep,
int s,
int t,
int u,
int i,
int ip,
double qsq );
465 void I3D3stijEval(
int ep );
466 void I4D4sijkEval(
int ep );
467 void I2D2stuijEval(
int ep,
int s,
int t,
int u,
int i,
int ip,
double qsq );
468 void I3D3stijkEval(
int ep );
469 void I4D4sijklEval(
int ep );
472 void I2D2stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
473 void I3D3stEval(
int ep );
474 void I2D3stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
475 void I3D4stEval(
int ep );
476 void I2D4stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
477 void I3D5stEval(
int ep );
478 void I2D5stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
479 void I3D6stEval(
int ep );
480 void I2D6stuEval(
int idx,
int ep,
int s,
int t,
int u,
int m,
int n,
double qsq );
481 void I3D7stEval(
int ep );
484 ncomplex I2mDstu(
int ep,
int s,
int t,
int u,
int m,
int n );
485 ncomplex I2stui(
int ep,
int s,
int t,
int u,
int i,
int ip );
487 double M4ii(
int u,
int v,
int i )
PURE;
488 double M4ui(
int u,
int v,
int i )
PURE;
489 double M4vi(
int u,
int v,
int i )
PURE;
490 double M4uu(
int u,
int v,
int i )
PURE;
491 double M4vu(
int u,
int v,
int i )
PURE;
492 double M4vv(
int u,
int v,
int i )
PURE;
497 friend class SPtr<Minor4>;
500 return Ptr(
new Minor4( k, mptr5,
s,
is ) );
513 virtual ncomplex A(
int ep,
int i,
int j,
int k );
514 virtual ncomplex A(
int ep,
int i,
int j,
int k,
int l );
532 friend class SPtr<Minor3>;
535 return Ptr(
new Minor3( k, mptr5,
s,
t,
is ) );
547 virtual ncomplex A(
int ep,
int i,
int j,
int k );
553 Minor3(
const Kinem3& k );
559 const int ps, pt, offs;
564 friend class SPtr<Minor2>;
567 return Ptr(
new Minor2( k, mptr5,
s,
t, u,
is ) );
582 Minor2(
const Kinem2& k );
588 const int ps, pt, pu, offs;
600 return idxtbl[( 1 << i ) | ( 1 << j ) | ( 1 << k )];
608 int t = ( j - i ) * ( k - j ) * ( k - i ) * ( m - l ) * (
n - m ) * (
n - l );
609 return t == 0 ? 0 : 2 * (
t >> (
sizeof( int ) * 8 - 1 ) ) + 1;
614 int t = ( j - i ) * ( m - l );
615 return t == 0 ? 0 : 2 * (
t >> (
sizeof( int ) * 8 - 1 ) ) + 1;
std::complex< double > ncomplex
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
static Ptr create(const Kinem2 &k, Minor5::Ptr mptr5, int s, int t, int u, int is)
static Ptr create(const Kinem3 &k, Minor5::Ptr mptr5, int s, int t, int is)
static Ptr create(const Kinem4 &k, Minor5::Ptr mptr5, int s, int is)
ncomplex I2stu(int ep, int s, int t, int u)
double M2(int i, int j, int l, int m) PURE
ncomplex I2D2stui(int ep, int s, int t, int u, int i)
ncomplex I4D3sijk(int ep, int s, int i, int j, int k)
ncomplex I4D3s(int ep, int s)
ncomplex I3st(int ep, int s, int t)
ncomplex I2D6stu(int ep, int s, int t, int u)
ncomplex I2D3stu(int ep, int s, int t, int u)
ncomplex I4D2si(int ep, int s, int i)
ncomplex I3D3stijk(int ep, int s, int t, int i, int j, int k)
ncomplex I4D3sij(int ep, int s, int i, int j)
ncomplex I3Dsti(int ep, int s, int t, int i)
ncomplex I3D3sti(int ep, int s, int t, int i)
static Ptr create(const Kinem5 &k)
ncomplex I3D2sti(int ep, int s, int t, int i)
ncomplex I3D2stij(int ep, int s, int t, int i, int j)
ncomplex I4D4sijk(int ep, int s, int i, int j, int k)
ncomplex I4s(int ep, int s)
double M1(int i, int l) PURE
double gram3(double p1, double p2, double p3) PURE
ncomplex I3D6st(int ep, int s, int t)
ncomplex I4D3si(int ep, int s, int i)
ncomplex I3D3st(int ep, int s, int t)
ncomplex I4D2sij(int ep, int s, int i, int j)
ncomplex I4D4sij(int ep, int s, int i, int j)
ncomplex I2D5stu(int ep, int s, int t, int u)
ncomplex I2D2stuij(int ep, int s, int t, int u, int i, int j)
ncomplex I4D4si(int ep, int s, int i)
ncomplex I4Ds(int ep, int s)
ncomplex I2D2stu(int ep, int s, int t, int u)
ncomplex I2Dstui(int ep, int s, int t, int u, int i)
ncomplex I4D4s(int ep, int s)
ncomplex I3D7st(int ep, int s, int t)
ncomplex I4D4sijkl(int ep, int s, int i, int j, int k, int l)
ncomplex I4Dsi(int ep, int s, int i)
ncomplex I2D4stu(int ep, int s, int t, int u)
ncomplex I2Dstu(int ep, int s, int t, int u)
static Ptr create(const Kinem4 &k)
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)
ncomplex I3D2st(int ep, int s, int t)
ncomplex I3D3stij(int ep, int s, int t, int i, int j)
ncomplex I4D2s(int ep, int s)
ncomplex I3Dst(int ep, int s, int t)
static const double epsir1
static int iss(int i, int j) CONST
static void Rescale(double factor)
static const double seps1
static const unsigned char idxtbl[64]
static int is(int i, int j, int k, int l) CONST
static void freeidxM3(int set[], int free[])
static int is(int i, int j, int k) CONST
static int ns(int i, int j) CONST
static int iss(int i, int j, int k, int l) CONST
static int signM3ud(int i, int j, int k, int l, int m, int n) CONST
static int iss(int i, int j, int k) CONST
static int nss(int i, int j) CONST
static const double deps2
static int im2(int i, int j) CONST
static const double epsir2
static const double seps2
static int is(int i, int j) CONST
static int iss(int i, int j, int k, int l, int m) CONST
static int signM2ud(int i, int j, int l, int m) CONST
static const double deps3
static const double deps1
static int im3(int i, int j, int k) CONST
double Kay(int i, int j) PURE
double Cay[(DCay - 1) *(DCay)/2]