BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
cache.h
Go to the documentation of this file.
1/*
2 * cache.h - cache classes header
3 *
4 * this file is part of PJFry library
5 * Copyright 2011 Valery Yundin
6 */
7
8#ifndef QUL_CACHE_H
9#define QUL_CACHE_H
10
11#include "common.h"
12#include "kinem.h"
13#include "minor.h"
14#ifdef USE_GOLEM_MODE
15# include "golem.h"
16#endif
17
18template <typename TK, typename TV> class MEntry {
19public:
20 MEntry() : key(), val() {}
21 MEntry( const TK& k, TV& v ) : key( k ), val( v ) {}
22
23 MEntry& operator=( const MEntry& entry ) {
24 key = entry.key;
25 val = entry.val;
26 return *this;
27 }
28
29 TK key;
30 mutable TV val; // TODO: remove auto_ptr in the future
31
32 MEntry( const MEntry& entry );
33};
34
35class Cache {
36protected:
37 static const int size6 = 2;
38
39 static const int size5 = size6 * 6;
40 static const int size4 = size6 * 15;
41 static const int size3 = size6 * 20;
42 static const int size2 = size6 * 15;
43 static const int size1 = size6 * 6;
44};
45
46class ICache : public Cache {
47#ifdef USE_GOLEM_MODE
48 friend class Golem;
49#endif
50public:
51 typedef struct {
53 } Ival;
54
55 enum Ecoefs {
56 ee0 = 1,
223 };
224
274
291
292 enum Bcoefs { bb0 = 1, bb1, bb00, bb11, bb001, bb111, bbLAST };
293
294 // Scalars
295 static ncomplex getI4( int ep, const Kinem4& k );
296 static ncomplex getI3( int ep, const Kinem3& k );
297 static ncomplex getI2( int ep, const Kinem2& k );
298 static ncomplex getI1( int ep, const Kinem1& k );
299
300 // Tensor PENTAGON
301 static ncomplex getE( int ep, const Kinem5& kin );
302 static ncomplex getE( int ep, int i, const Kinem5& kin );
303 static ncomplex getE( int ep, int i, int j, const Kinem5& kin );
304 static ncomplex getE( int ep, int i, int j, int k, const Kinem5& kin );
305 static ncomplex getE( int ep, int i, int j, int k, int l, const Kinem5& kin );
306 static ncomplex getE( int ep, int i, int j, int k, int l, int m, const Kinem5& kin );
307
308 // Tensor BOX
309 static ncomplex getD( int ep, const Kinem4& kin ) { return getI4( ep, kin ); }
310 static ncomplex getD( int ep, int i, const Kinem4& kin );
311 static ncomplex getD( int ep, int i, int j, const Kinem4& kin );
312 static ncomplex getD( int ep, int i, int j, int k, const Kinem4& kin );
313 static ncomplex getD( int ep, int i, int j, int k, int l, const Kinem4& kin );
314
315 // Tensor TRIANGLE
316 static ncomplex getC( int ep, const Kinem3& kin ) { return getI3( ep, kin ); }
317 static ncomplex getC( int ep, int i, const Kinem3& kin );
318 static ncomplex getC( int ep, int i, int j, const Kinem3& kin );
319 static ncomplex getC( int ep, int i, int j, int k, const Kinem3& kin );
320
321 // Tensor BUBBLE
322 static ncomplex getB( int ep, const Kinem2& kin ) { return getI2( ep, kin ); }
323 static ncomplex getB( int ep, int i, const Kinem2& kin );
324 static ncomplex getB( int ep, int i, int j, const Kinem2& kin );
325
326 // Tadpole
327 static ncomplex getA( int ep, const Kinem1& kin ) { return getI1( ep, kin ); }
328
329 static void Clear();
330 static void ClearCC();
331 static void ClearIC();
332
333 static double getMu2();
334 static double setMu2( const double newmu2 );
335
336private:
337 static double mu2;
338 typedef union {
339 int64_t i64;
340 double d64;
341 } ID64;
342 typedef union {
343 double d64;
344 int64_t i64;
345 } DI64;
346 static const ID64 sNAN;
347 friend bool operator==( const double& x, const ICache::ID64& y );
348
349 // ------------------------------
350 // Tensor integral coefficients
351 // ------------------------------
352 // TODO: rethink and optimize layout later
353 typedef CArray<ncomplex, eeLAST> Save5;
354 typedef MEntry<Kinem5, Save5::Ptr> Entry5;
355 typedef DArray<Entry5, size5> Array5;
356 static Array5 ic5[3];
357 static Save5* getS5( int ep, const Kinem5& kin, int coefn );
358
359 typedef CArray<ncomplex, ddLAST> Save4;
360 typedef MEntry<Kinem4, Save4::Ptr> Entry4;
361 typedef DArray<Entry4, size4> Array4;
362 static Array4 ic4[3];
363 static Save4* getS4( int ep, const Kinem4& kin, int coefn );
364
365 typedef CArray<ncomplex, ccLAST> Save3;
366 typedef MEntry<Kinem3, Save3::Ptr> Entry3;
367 typedef DArray<Entry3, size3> Array3;
368 static Array3 ic3[3];
369 static Save3* getS3( int ep, const Kinem3& kin, int coefn );
370
371 typedef CArray<ncomplex, bbLAST> Save2;
372 typedef MEntry<Kinem2, Save2::Ptr> Entry2;
373 typedef DArray<Entry2, size2> Array2;
374 static Array2 ic2[3];
375 static Save2* getS2( int ep, const Kinem2& kin, int coefn );
376
377 // ------------------------------
378 // Scalar integrals
379 // ------------------------------
380 typedef MEntry<Kinem4, Ival> EntryS4;
381 typedef DArray<EntryS4, size4> ArrayS4;
382 static ArrayS4 ics4;
383
384 typedef MEntry<Kinem3, Ival> EntryS3;
385 typedef DArray<EntryS3, size3> ArrayS3;
386 static ArrayS3 ics3;
387
388 typedef MEntry<Kinem2, Ival> EntryS2;
389 typedef DArray<EntryS2, size2> ArrayS2;
390 static ArrayS2 ics2;
391
392 typedef MEntry<Kinem1, Ival> EntryS1;
393 typedef DArray<EntryS1, size1> ArrayS1;
394 static ArrayS1 ics1;
395};
396
397inline bool operator==( const double& x, const ICache::ID64& y ) {
398 const ICache::DI64 ix = { x };
399 return ix.i64 == y.i64;
400}
401
402class MCache : public Cache {
403#ifdef USE_GOLEM_MODE
404 friend class Golem;
405#endif
406public:
407 // TODO: may be return by reference here?
408 static Minor5::Ptr getMinor5( const Kinem5& k );
409 static Minor4::Ptr getMinor4( const Kinem4& k );
410 static Minor3::Ptr getMinor3( const Kinem3& k );
411 static Minor2::Ptr getMinor2( const Kinem2& k );
412
413 static void insertMinor5( const Kinem5& k, Minor5::Ptr& m );
414 static void insertMinor4( const Kinem4& k, Minor4::Ptr& m );
415 static void insertMinor3( const Kinem3& k, Minor3::Ptr& m );
416 static void insertMinor2( const Kinem2& k, Minor2::Ptr& m );
417
418#ifdef USE_SMART_INSERT
419# define INSERTMINOR3 smartinsertMinor3
420# define INSERTMINOR2 smartinsertMinor2
421 static void smartinsertMinor3( const Kinem3& k, Minor3::Ptr& m );
422 static void smartinsertMinor2( const Kinem2& k, Minor2::Ptr& m );
423#else
424# define INSERTMINOR3 insertMinor3
425# define INSERTMINOR2 insertMinor2
426#endif
427
428 static void Clear();
429
430private:
431 typedef MEntry<Kinem5, Minor5::Ptr> Entry5;
432 typedef DArray<Entry5, size5> Array5;
433 static Array5 cm5;
434
435 typedef MEntry<Kinem4, Minor4::Ptr> Entry4;
436 typedef DArray<Entry4, size4> Array4;
437 static Array4 cm4;
438
439 typedef MEntry<Kinem3, Minor3::Ptr> Entry3;
440 typedef DArray<Entry3, size3> Array3;
441 static Array3 cm3;
442
443 typedef MEntry<Kinem2, Minor2::Ptr> Entry2;
444 typedef DArray<Entry2, size2> Array2;
445 static Array2 cm2;
446};
447
448/* =============================================
449 *
450 * inline functions
451 *
452 * =============================================
453 */
454
455#define insertMinorN( n ) \
456 inline void MCache::insertMinor##n( const Kinem##n& k, Minor##n::Ptr& m ) { \
457 cm##n.insert( Entry##n( k, m ) ); \
458 }
459
461
462#undef insertMinorN
463
464#endif /* _QUL_CACHE_H */
std::complex< double > ncomplex
Double_t x[10]
**********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
Definition KarLud.h:35
#define insertMinorN(n)
Definition cache.h:455
bool operator==(const double &x, const ICache::ID64 &y)
Definition cache.h:397
Definition cache.h:35
static const int size4
Definition cache.h:40
static const int size2
Definition cache.h:42
static const int size1
Definition cache.h:43
static const int size6
Definition cache.h:37
static const int size5
Definition cache.h:39
static const int size3
Definition cache.h:41
Definition cache.h:46
static void ClearIC()
Definition cache.cpp:55
static double setMu2(const double newmu2)
Definition cache.cpp:22
static ncomplex getI2(int ep, const Kinem2 &k)
Dcoefs
Definition cache.h:225
@ dd33
Definition cache.h:236
@ dd222
Definition cache.h:246
@ dd1112
Definition cache.h:258
@ dd1233
Definition cache.h:265
@ dd2
Definition cache.h:228
@ dd1
Definition cache.h:227
@ dd2223
Definition cache.h:268
@ dd0022
Definition cache.h:254
@ dd3333
Definition cache.h:271
@ dd00
Definition cache.h:230
@ dd1223
Definition cache.h:264
@ dd333
Definition cache.h:249
@ dd0000
Definition cache.h:250
@ dd1122
Definition cache.h:260
@ dd003
Definition cache.h:239
@ dd133
Definition cache.h:245
@ dd2222
Definition cache.h:267
@ dd123
Definition cache.h:244
@ dd0012
Definition cache.h:252
@ dd122
Definition cache.h:243
@ dd3
Definition cache.h:229
@ dd1333
Definition cache.h:266
@ dd0013
Definition cache.h:253
@ dd0023
Definition cache.h:255
@ dd22
Definition cache.h:234
@ dd111
Definition cache.h:240
@ dd1111
Definition cache.h:257
@ dd0033
Definition cache.h:256
@ dd1123
Definition cache.h:261
@ dd233
Definition cache.h:248
@ ddLAST
Definition cache.h:272
@ dd001
Definition cache.h:237
@ dd23
Definition cache.h:235
@ dd002
Definition cache.h:238
@ dd1113
Definition cache.h:259
@ dd0
Definition cache.h:226
@ dd2333
Definition cache.h:270
@ dd2233
Definition cache.h:269
@ dd112
Definition cache.h:241
@ dd113
Definition cache.h:242
@ dd223
Definition cache.h:247
@ dd12
Definition cache.h:232
@ dd1222
Definition cache.h:263
@ dd13
Definition cache.h:233
@ dd11
Definition cache.h:231
@ dd0011
Definition cache.h:251
@ dd1133
Definition cache.h:262
static double getMu2()
Definition cache.cpp:20
static ncomplex getI4(int ep, const Kinem4 &k)
static ncomplex getD(int ep, const Kinem4 &kin)
Definition cache.h:309
static void Clear()
Definition cache.cpp:37
static ncomplex getI3(int ep, const Kinem3 &k)
static ncomplex getA(int ep, const Kinem1 &kin)
Definition cache.h:327
Ecoefs
Definition cache.h:55
@ ee4
Definition cache.h:60
@ ee33334
Definition cache.h:217
@ ee003
Definition cache.h:74
@ ee22244
Definition cache.h:206
@ ee11114
Definition cache.h:169
@ ee2334
Definition cache.h:134
@ ee224
Definition cache.h:88
@ ee00004
Definition cache.h:145
@ ee1122
Definition cache.h:111
@ ee4444
Definition cache.h:141
@ ee12233
Definition cache.h:189
@ ee11123
Definition cache.h:171
@ ee22224
Definition cache.h:203
@ ee44
Definition cache.h:71
@ ee24
Definition cache.h:68
@ ee144
Definition cache.h:85
@ ee33
Definition cache.h:69
@ ee1134
Definition cache.h:115
@ ee2
Definition cache.h:58
@ ee13444
Definition cache.h:199
@ ee3344
Definition cache.h:139
@ ee11234
Definition cache.h:180
@ ee11224
Definition cache.h:178
@ ee223
Definition cache.h:87
@ ee2223
Definition cache.h:128
@ ee22444
Definition cache.h:210
@ ee14
Definition cache.h:65
@ ee0023
Definition cache.h:102
@ ee1233
Definition cache.h:120
@ ee34
Definition cache.h:70
@ ee002
Definition cache.h:73
@ ee0014
Definition cache.h:100
@ ee11
Definition cache.h:62
@ eeLAST
Definition cache.h:222
@ ee00224
Definition cache.h:158
@ ee2344
Definition cache.h:135
@ ee00113
Definition cache.h:148
@ ee1123
Definition cache.h:112
@ ee1224
Definition cache.h:119
@ ee22233
Definition cache.h:204
@ ee0024
Definition cache.h:103
@ ee1112
Definition cache.h:108
@ ee1234
Definition cache.h:121
@ ee33344
Definition cache.h:218
@ ee12224
Definition cache.h:188
@ ee11122
Definition cache.h:170
@ ee1124
Definition cache.h:113
@ ee13333
Definition cache.h:196
@ ee222
Definition cache.h:86
@ ee11344
Definition cache.h:184
@ ee24444
Definition cache.h:215
@ ee00112
Definition cache.h:147
@ ee11144
Definition cache.h:175
@ ee1444
Definition cache.h:126
@ ee22222
Definition cache.h:201
@ ee2233
Definition cache.h:130
@ ee23334
Definition cache.h:212
@ ee12223
Definition cache.h:187
@ ee00223
Definition cache.h:157
@ ee1114
Definition cache.h:110
@ ee344
Definition cache.h:94
@ ee00001
Definition cache.h:142
@ ee334
Definition cache.h:93
@ ee11333
Definition cache.h:182
@ ee22333
Definition cache.h:207
@ ee2444
Definition cache.h:136
@ ee3333
Definition cache.h:137
@ ee11134
Definition cache.h:174
@ ee00222
Definition cache.h:156
@ ee22344
Definition cache.h:209
@ ee11124
Definition cache.h:172
@ ee1144
Definition cache.h:116
@ ee00123
Definition cache.h:151
@ ee12222
Definition cache.h:186
@ ee13344
Definition cache.h:198
@ ee0
Definition cache.h:56
@ ee2224
Definition cache.h:129
@ ee00134
Definition cache.h:154
@ ee0044
Definition cache.h:106
@ ee12234
Definition cache.h:190
@ ee11113
Definition cache.h:168
@ ee0022
Definition cache.h:101
@ ee001
Definition cache.h:72
@ ee1113
Definition cache.h:109
@ ee11444
Definition cache.h:185
@ ee13
Definition cache.h:64
@ ee1222
Definition cache.h:117
@ ee244
Definition cache.h:91
@ ee113
Definition cache.h:78
@ ee00002
Definition cache.h:143
@ ee12244
Definition cache.h:191
@ ee11233
Definition cache.h:179
@ ee112
Definition cache.h:77
@ ee22223
Definition cache.h:202
@ ee3
Definition cache.h:59
@ ee23
Definition cache.h:67
@ ee111
Definition cache.h:76
@ ee12444
Definition cache.h:195
@ ee00122
Definition cache.h:150
@ ee12344
Definition cache.h:194
@ ee2234
Definition cache.h:131
@ ee2244
Definition cache.h:132
@ ee22
Definition cache.h:66
@ ee44444
Definition cache.h:221
@ ee1244
Definition cache.h:122
@ ee122
Definition cache.h:80
@ ee22234
Definition cache.h:205
@ ee004
Definition cache.h:75
@ ee124
Definition cache.h:82
@ ee3444
Definition cache.h:140
@ ee33333
Definition cache.h:216
@ ee1
Definition cache.h:57
@ ee11222
Definition cache.h:176
@ ee00114
Definition cache.h:149
@ ee00344
Definition cache.h:164
@ ee12
Definition cache.h:63
@ ee133
Definition cache.h:83
@ ee0011
Definition cache.h:97
@ ee13334
Definition cache.h:197
@ ee1334
Definition cache.h:124
@ ee123
Definition cache.h:81
@ ee00444
Definition cache.h:165
@ ee444
Definition cache.h:95
@ ee1133
Definition cache.h:114
@ ee1344
Definition cache.h:125
@ ee1111
Definition cache.h:107
@ ee34444
Definition cache.h:220
@ ee0000
Definition cache.h:96
@ ee22334
Definition cache.h:208
@ ee0034
Definition cache.h:105
@ ee00133
Definition cache.h:153
@ ee3334
Definition cache.h:138
@ ee23333
Definition cache.h:211
@ ee11223
Definition cache.h:177
@ ee1333
Definition cache.h:123
@ ee00124
Definition cache.h:152
@ ee00111
Definition cache.h:146
@ ee23344
Definition cache.h:213
@ ee23444
Definition cache.h:214
@ ee12333
Definition cache.h:192
@ ee0012
Definition cache.h:98
@ ee00333
Definition cache.h:162
@ ee00003
Definition cache.h:144
@ ee11112
Definition cache.h:167
@ ee11334
Definition cache.h:183
@ ee2222
Definition cache.h:127
@ ee14444
Definition cache.h:200
@ ee134
Definition cache.h:84
@ ee00233
Definition cache.h:159
@ ee333
Definition cache.h:92
@ ee233
Definition cache.h:89
@ ee00144
Definition cache.h:155
@ ee11111
Definition cache.h:166
@ ee33444
Definition cache.h:219
@ ee12334
Definition cache.h:193
@ ee1223
Definition cache.h:118
@ ee00244
Definition cache.h:161
@ ee0013
Definition cache.h:99
@ ee00
Definition cache.h:61
@ ee00234
Definition cache.h:160
@ ee234
Definition cache.h:90
@ ee11133
Definition cache.h:173
@ ee11244
Definition cache.h:181
@ ee114
Definition cache.h:79
@ ee0033
Definition cache.h:104
@ ee2333
Definition cache.h:133
@ ee00334
Definition cache.h:163
static ncomplex getB(int ep, const Kinem2 &kin)
Definition cache.h:322
friend bool operator==(const double &x, const ICache::ID64 &y)
Definition cache.h:397
Ccoefs
Definition cache.h:275
@ cc00
Definition cache.h:279
@ cc112
Definition cache.h:286
@ cc111
Definition cache.h:285
@ cc002
Definition cache.h:284
@ cc12
Definition cache.h:281
@ cc1
Definition cache.h:277
@ cc2
Definition cache.h:278
@ cc0
Definition cache.h:276
@ ccLAST
Definition cache.h:289
@ cc11
Definition cache.h:280
@ cc222
Definition cache.h:288
@ cc001
Definition cache.h:283
@ cc22
Definition cache.h:282
@ cc122
Definition cache.h:287
static ncomplex getC(int ep, const Kinem3 &kin)
Definition cache.h:316
Bcoefs
Definition cache.h:292
@ bb0
Definition cache.h:292
@ bb001
Definition cache.h:292
@ bb111
Definition cache.h:292
@ bb1
Definition cache.h:292
@ bb00
Definition cache.h:292
@ bbLAST
Definition cache.h:292
@ bb11
Definition cache.h:292
static ncomplex getE(int ep, const Kinem5 &kin)
Definition cache.cpp:223
static ncomplex getI1(int ep, const Kinem1 &k)
static void ClearCC()
Definition cache.cpp:43
Definition kinem.h:93
static void Clear()
Definition cache.cpp:63
static void insertMinor5(const Kinem5 &k, Minor5::Ptr &m)
static void insertMinor4(const Kinem4 &k, Minor4::Ptr &m)
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)
Definition cache.cpp:690
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)
Definition cache.cpp:656
static void smartinsertMinor3(const Kinem3 &k, Minor3::Ptr &m)
Definition cache.cpp:678
Definition cache.h:18
MEntry(const MEntry &entry)
MEntry(const TK &k, TV &v)
Definition cache.h:21
MEntry & operator=(const MEntry &entry)
Definition cache.h:23
MEntry()
Definition cache.h:20
SPtr< Minor2 > Ptr
Definition minor.h:565
SPtr< Minor3 > Ptr
Definition minor.h:533
SPtr< Minor4 > Ptr
Definition minor.h:498
SPtr< Minor5 > Ptr
Definition minor.h:192
#define ix(i)
double int * ep
Definition qcdloop1.h:82
double * mu2
Definition qcdloop1.h:82
ncomplex val[3]
Definition cache.h:52