18double ICache::mu2 = 1;
23 if ( newmu2 > 0 && newmu2 != mu2 )
28 double mu = sqrt( mu2 );
29 F77_FUNC_( avh_olo_mu_set, AVH_OLO_MU_SET )( &mu );
75const ICache::ID64 ICache::sNAN = { 0x7ffc0000BA13BA13LL };
77ICache::Array5 ICache::ic5[3];
78ICache::Array4 ICache::ic4[3];
79ICache::Array3 ICache::ic3[3];
80ICache::Array2 ICache::ic2[3];
82ICache::ArrayS4 ICache::ics4;
83ICache::ArrayS3 ICache::ics3;
84ICache::ArrayS2 ICache::ics2;
85ICache::ArrayS1 ICache::ics1;
100 assert( ( i == 0 && j == 0 &&
101 ( ( k == 0 && l == 0 && m != 0 ) || ( k != 0 && l != 0 && m != 0 ) ) ) ||
102 ( i != 0 && j != 0 && k != 0 && l != 0 && m != 0 ) );
104 if ( i == 0 && j == 0 )
106 if ( k == 0 && l == 0 ) coefn = ( m - 1 ) +
ee00001;
110 Save5* s5 = getS5(
ep, kin, coefn );
113 if ( ivalue.real() == sNAN )
116 ( *s5 )[coefn] = ivalue;
130 assert( ( i == 0 && j == 0 && ( ( k == 0 && l == 0 ) || ( k != 0 && l != 0 ) ) ) ||
131 ( i != 0 && j != 0 && k != 0 && l != 0 ) );
133 if ( i == 0 && j == 0 )
135 if ( k == 0 && l == 0 ) coefn =
ee0000;
139 Save5* s5 = getS5(
ep, kin, coefn );
142 if ( ivalue.real() == sNAN )
145 ( *s5 )[coefn] = ivalue;
159 assert( ( i == 0 && j == 0 && k != 0 ) || ( i != 0 && j != 0 && k != 0 ) );
162 Save5* s5 = getS5(
ep, kin, coefn );
165 if ( ivalue.real() == sNAN )
168 ( *s5 )[coefn] = ivalue;
182 assert( ( i == 0 && j == 0 ) || ( i != 0 && j != 0 ) );
184 Save5* s5 = getS5(
ep, kin, coefn );
187 if ( ivalue.real() == sNAN )
190 ( *s5 )[coefn] = ivalue;
204 int coefn = ( i - 1 ) +
ee1;
205 Save5* s5 = getS5(
ep, kin, coefn );
208 if ( ivalue.real() == sNAN )
211 ( *s5 )[coefn] = ivalue;
226 Save5* s5 = getS5(
ep, kin, coefn );
229 if ( ivalue.real() == sNAN )
232 ( *s5 )[coefn] = ivalue;
253 assert( ( i == 0 && j == 0 && ( ( k == 0 && l == 0 ) || ( k != 0 && l != 0 ) ) ) ||
254 ( i != 0 && j != 0 && k != 0 && l != 0 ) );
256 if ( i == 0 && j == 0 )
258 if ( k == 0 && l == 0 ) coefn =
dd0000;
262 Save4* s4 = getS4(
ep, kin, coefn );
265 if ( ivalue.real() == sNAN )
268 ( *s4 )[coefn] = ivalue;
282 assert( ( i == 0 && j == 0 && k != 0 ) || ( i != 0 && j != 0 && k != 0 ) );
285 Save4* s4 = getS4(
ep, kin, coefn );
288 if ( ivalue.real() == sNAN )
291 ( *s4 )[coefn] = ivalue;
305 assert( ( i == 0 && j == 0 ) || ( i != 0 && j != 0 ) );
307 Save4* s4 = getS4(
ep, kin, coefn );
310 if ( ivalue.real() == sNAN )
313 ( *s4 )[coefn] = ivalue;
327 int coefn = ( i - 1 ) +
dd1;
328 Save4* s4 = getS4(
ep, kin, coefn );
331 if ( ivalue.real() == sNAN )
334 ( *s4 )[coefn] = ivalue;
355 assert( ( i == 0 && j == 0 && k != 0 ) || ( i != 0 && j != 0 && k != 0 ) );
358 Save3* s3 = getS3(
ep, kin, coefn );
364 ivalue = pm3->
evalC(
ep, i, j, k );
365 ( *s3 )[coefn] = ivalue;
373 printf(
"C%d%d%d(%.18e,%.18e,%.18e,%e,%e,%e)=%f\n", i, j, k, kin.
p1(), kin.
p2(), kin.
p3(),
374 kin.
m1(), kin.
m2(), kin.
m3(), ivalue.real() );
385 assert( ( i == 0 && j == 0 ) || ( i != 0 && j != 0 ) );
387 Save3* s3 = getS3(
ep, kin, coefn );
393 ivalue = pm3->
evalC(
ep, i, j );
394 ( *s3 )[coefn] = ivalue;
402 printf(
"C%d%d(%.18e,%.18e,%.18e,%e,%e,%e)=%f\n", i, j, kin.
p1(), kin.
p2(), kin.
p3(),
403 kin.
m1(), kin.
m2(), kin.
m3(), ivalue.real() );
414 int coefn = ( i - 1 ) +
cc1;
415 Save3* s3 = getS3(
ep, kin, coefn );
422 ( *s3 )[coefn] = ivalue;
430 printf(
"C%d(%.18e,%.18e,%.18e,%e,%e,%e)=%f\n", i, kin.
p1(), kin.
p2(), kin.
p3(), kin.
m1(),
431 kin.
m2(), kin.
m3(), ivalue.real() );
449 assert( ( i == 0 && j == 0 ) || ( i != 0 && j != 0 ) );
451 Save2* s2 = getS2(
ep, kin, coefn );
457 ivalue = pm2->
evalB(
ep, i, j );
458 ( *s2 )[coefn] = ivalue;
466 printf(
"B%d%d(%.18e,%.18e,%.18e)=%f\n", i, j, kin.
p1(), kin.
m1(), kin.
m2(),
478 int coefn = ( i - 1 ) +
bb1;
479 Save2* s2 = getS2(
ep, kin, coefn );
486 ( *s2 )[coefn] = ivalue;
494 printf(
"B%d(%.18e,%.18e,%.18e)=%f\n", i, kin.
p1(), kin.
m1(), kin.
m2(), ivalue.real() );
523#define getSave( n ) \
524 ICache::Save##n* ICache::getS##n( int ep, const Kinem##n& kin, int coefn ) { \
526 for ( Array##n::iterator it##n = ic##n[ep].begin(); it##n != ic##n[ep].end(); ++it##n ) \
528 if ( it##n->key == kin ) \
530 s##n = it##n->val.get(); \
536 Save##n::Ptr sptr( new Save##n( ncomplex( sNAN.d64, 0 ) ) ); \
538 ic##n[ep].insert( Entry##n( kin, sptr ) ); \
566 ncomplex ICache::getI##n( int ep, const Kinem##n& k ) { \
568 bool found = false; \
569 for ( ArrayS##n::iterator it##n = ics##n.begin(); it##n != ics##n.end(); ++it##n ) \
571 if ( it##n->key == k ) \
573 ivalue = it##n->val; \
580 ivalue = qlI##n( k ); \
581 ics##n.insert( EntryS##n( k, ivalue ) ); \
583 return ivalue.val[ep]; \
597 MCache::Array5 MCache::cm5;
598MCache::Array4 MCache::cm4;
599MCache::Array3 MCache::cm3;
600MCache::Array2 MCache::cm2;
618#define getMinorN( n ) \
619 Minor##n::Ptr MCache::getMinor##n( const Kinem##n& k ) { \
620 Minor##n::Ptr minor; \
621 for ( Array##n::iterator it##n = cm##n.begin(); it##n != cm##n.end(); ++it##n ) \
623 if ( it##n->key == k ) \
625 minor = it##n->val; \
654 cm5.
insert( Entry5( k, minor ) );
656 assert( minor != 0 );
673 minor = cm4.begin()->val;
674 cm4.insert( Entry4( k, minor ) );
676 assert( minor != 0 );
680#ifdef USE_SMART_INSERT
#define F77_FUNC_(name, NAME)
std::complex< double > ncomplex
NIter< Entry5, N > iterator
static double setMu2(const double newmu2)
static ncomplex getD(int ep, const Kinem4 &kin)
static ncomplex getB(int ep, const Kinem2 &kin)
static ncomplex getC(int ep, const Kinem3 &kin)
static ncomplex getE(int ep, const Kinem5 &kin)
static Minor5::Ptr getMinor5(const Kinem5 &k)
static Minor2::Ptr getMinor2(const Kinem2 &k)
static Minor3::Ptr getMinor3(const Kinem3 &k)
static void smartinsertMinor2(const Kinem2 &k, Minor2::Ptr &m)
static void insertMinor2(const Kinem2 &k, Minor2::Ptr &m)
static void insertMinor3(const Kinem3 &k, Minor3::Ptr &m)
static Minor4::Ptr getMinor4(const Kinem4 &k)
static void smartinsertMinor3(const Kinem3 &k, Minor3::Ptr &m)
static Ptr create(const Kinem5 &k)
static int iss(int i, int j) CONST
static void Rescale(double factor)
static int is(int i, int j) CONST