herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
clooptools.h
1/* -*- C++ -*-
2 clooptools.h
3 the C/C++ header file with all definitions for LoopTools
4 this file is part of LoopTools
5 last modified 2 Sep 14 th
6 dgrell 2011-01-21 for Herwig: moved definitions and extern declarations to our clooptools.cc
7 dgrell 2016-09-08 for Herwig: update to Looptols-2.13
8*/
9
10
11#ifndef HERWIG_clooptools_h_
12#define HERWIG_clooptools_h_
13
14#include <complex>
15
16/****************************************************************/
17
18// Adapted version of ftypes.h
19
20
21typedef double RealType;
22typedef double REAL;
23
24typedef int INTEGER;
25typedef const REAL CREAL;
26
27struct COMPLEX { REAL re, im; };
28typedef const COMPLEX CCOMPLEX;
29
30typedef std::complex<RealType> ComplexType;
31
32typedef const RealType cRealType;
33typedef const ComplexType cComplexType;
34
35//#define cachelookup_ ljcachelookup_
36
37// typedef const COMPLEX CCOMPLEX;
38
39typedef long long int memindex;
40
41/****************************************************************/
42
43#define AARGS(t) t(m)
44
45#define BARGS(t) t(p), t(m1), t(m2)
46
47#define CARGS(t) t(p1), t(p2), t(p1p2), t(m1), t(m2), t(m3)
48
49#define DARGS(t) t(p1), t(p2), t(p3), t(p4), t(p1p2), t(p2p3), \
50 t(m1), t(m2), t(m3), t(m4)
51
52#define EARGS(t) t(p1), t(p2), t(p3), t(p4), t(p5), \
53 t(p1p2), t(p2p3), t(p3p4), t(p4p5), t(p5p1), \
54 t(m1), t(m2), t(m3), t(m4), t(m5)
55
56/****************************************************************/
57
58#define _lt_Cr_(v) cRealType v
59#define _lt_Cc_(v) cComplexType v
60#define _lt_Fr_(v) CREAL *v
61#define _lt_Fc_(v) CCOMPLEX *v
62#define _lt_Id_(v) v
63#define _lt_Frp_(v) &v
64#define _lt_Fcp_(v) (CCOMPLEX *)&v
65#define _lt_Fap_(v) (COMPLEX *)v
66
67// #define _lt_Frd_(f)
68// #define _lt_Fcd_(f)
69// #define _lt_Fad_(v,n)
70// #define _lt_Fax_(v,n)
71
72/****************************************************************/
73
74namespace Herwig {
75 namespace Looptools {
76
77 enum {
78 aa0 = 0,
79 aa00 = 3,
80 Naa = 6
81 };
82
83 enum {
84 bb0 = 0,
85 bb1 = 3,
86 bb00 = 6,
87 bb11 = 9,
88 bb001 = 12,
89 bb111 = 15,
90 dbb0 = 18,
91 dbb1 = 21,
92 dbb00 = 24,
93 dbb11 = 27,
94 dbb001 = 30,
95 Nbb = 33
96 };
97
98 enum {
99 cc0 = 0,
100 cc1 = 3,
101 cc2 = 6,
102 cc00 = 9,
103 cc11 = 12,
104 cc12 = 15,
105 cc22 = 18,
106 cc001 = 21,
107 cc002 = 24,
108 cc111 = 27,
109 cc112 = 30,
110 cc122 = 33,
111 cc222 = 36,
112 cc0000 = 39,
113 cc0011 = 42,
114 cc0012 = 45,
115 cc0022 = 48,
116 cc1111 = 51,
117 cc1112 = 54,
118 cc1122 = 57,
119 cc1222 = 60,
120 cc2222 = 63,
121 Ncc = 66
122 };
123
124 enum {
125 dd0 = 0,
126 dd1 = 3,
127 dd2 = 6,
128 dd3 = 9,
129 dd00 = 12,
130 dd11 = 15,
131 dd12 = 18,
132 dd13 = 21,
133 dd22 = 24,
134 dd23 = 27,
135 dd33 = 30,
136 dd001 = 33,
137 dd002 = 36,
138 dd003 = 39,
139 dd111 = 42,
140 dd112 = 45,
141 dd113 = 48,
142 dd122 = 51,
143 dd123 = 54,
144 dd133 = 57,
145 dd222 = 60,
146 dd223 = 63,
147 dd233 = 66,
148 dd333 = 69,
149 dd0000 = 72,
150 dd0011 = 75,
151 dd0012 = 78,
152 dd0013 = 81,
153 dd0022 = 84,
154 dd0023 = 87,
155 dd0033 = 90,
156 dd1111 = 93,
157 dd1112 = 96,
158 dd1113 = 99,
159 dd1122 = 102,
160 dd1123 = 105,
161 dd1133 = 108,
162 dd1222 = 111,
163 dd1223 = 114,
164 dd1233 = 117,
165 dd1333 = 120,
166 dd2222 = 123,
167 dd2223 = 126,
168 dd2233 = 129,
169 dd2333 = 132,
170 dd3333 = 135,
171 dd00001 = 138,
172 dd00002 = 141,
173 dd00003 = 144,
174 dd00111 = 147,
175 dd00112 = 150,
176 dd00113 = 153,
177 dd00122 = 156,
178 dd00123 = 159,
179 dd00133 = 162,
180 dd00222 = 165,
181 dd00223 = 168,
182 dd00233 = 171,
183 dd00333 = 174,
184 dd11111 = 177,
185 dd11112 = 180,
186 dd11113 = 183,
187 dd11122 = 186,
188 dd11123 = 189,
189 dd11133 = 192,
190 dd11222 = 195,
191 dd11223 = 198,
192 dd11233 = 201,
193 dd11333 = 204,
194 dd12222 = 207,
195 dd12223 = 210,
196 dd12233 = 213,
197 dd12333 = 216,
198 dd13333 = 219,
199 dd22222 = 222,
200 dd22223 = 225,
201 dd22233 = 228,
202 dd22333 = 231,
203 dd23333 = 234,
204 dd33333 = 237,
205 Ndd = 240
206 };
207
208 enum {
209 ee0 = 0,
210 ee1 = 3,
211 ee2 = 6,
212 ee3 = 9,
213 ee4 = 12,
214 ee00 = 15,
215 ee11 = 18,
216 ee12 = 21,
217 ee13 = 24,
218 ee14 = 27,
219 ee22 = 30,
220 ee23 = 33,
221 ee24 = 36,
222 ee33 = 39,
223 ee34 = 42,
224 ee44 = 45,
225 ee001 = 48,
226 ee002 = 51,
227 ee003 = 54,
228 ee004 = 57,
229 ee111 = 60,
230 ee112 = 63,
231 ee113 = 66,
232 ee114 = 69,
233 ee122 = 72,
234 ee123 = 75,
235 ee124 = 78,
236 ee133 = 81,
237 ee134 = 84,
238 ee144 = 87,
239 ee222 = 90,
240 ee223 = 93,
241 ee224 = 96,
242 ee233 = 99,
243 ee234 = 102,
244 ee244 = 105,
245 ee333 = 108,
246 ee334 = 111,
247 ee344 = 114,
248 ee444 = 117,
249 ee0000 = 120,
250 ee0011 = 123,
251 ee0012 = 126,
252 ee0013 = 129,
253 ee0014 = 132,
254 ee0022 = 135,
255 ee0023 = 138,
256 ee0024 = 141,
257 ee0033 = 144,
258 ee0034 = 147,
259 ee0044 = 150,
260 ee1111 = 153,
261 ee1112 = 156,
262 ee1113 = 159,
263 ee1114 = 162,
264 ee1122 = 165,
265 ee1123 = 168,
266 ee1124 = 171,
267 ee1133 = 174,
268 ee1134 = 177,
269 ee1144 = 180,
270 ee1222 = 183,
271 ee1223 = 186,
272 ee1224 = 189,
273 ee1233 = 192,
274 ee1234 = 195,
275 ee1244 = 198,
276 ee1333 = 201,
277 ee1334 = 204,
278 ee1344 = 207,
279 ee1444 = 210,
280 ee2222 = 213,
281 ee2223 = 216,
282 ee2224 = 219,
283 ee2233 = 222,
284 ee2234 = 225,
285 ee2244 = 228,
286 ee2333 = 231,
287 ee2334 = 234,
288 ee2344 = 237,
289 ee2444 = 240,
290 ee3333 = 243,
291 ee3334 = 246,
292 ee3344 = 249,
293 ee3444 = 252,
294 ee4444 = 255,
295 Nee = 258
296 };
297
298 enum {
299 KeyA0 = 1,
300 KeyBget = 1<<2,
301 KeyC0 = 1<<4,
302 KeyD0 = 1<<6,
303 KeyE0 = 1<<8,
304 KeyEget = 1<<10,
305 KeyEgetC = 1<<12,
306 KeyAll = KeyA0 + KeyBget + KeyC0 + KeyD0 + KeyE0 + KeyEget + KeyEgetC
307 };
308
309 enum {
310 DebugA = 1,
311 DebugB = 1<<1,
312 DebugC = 1<<2,
313 DebugD = 1<<3,
314 DebugE = 1<<4,
315 DebugAll = DebugA + DebugB + DebugC + DebugD + DebugE
316 };
317
318 ComplexType ToComplex(COMPLEX c);
319
323 void ltini(std::string logfilename = std::string("Looptools.log"));
324
328 void ltexi(std::string logfilename = std::string("Looptools.log"));
329
330 /****************************************************************/
331
332 memindex Aget(AARGS(_lt_Cr_));
333 memindex AgetC(AARGS(_lt_Cc_));
334
335 void Aput(ComplexType *res, AARGS(_lt_Cr_));
336 void AputC(ComplexType *res, AARGS(_lt_Cc_));
337
338 void Aputnocache(ComplexType *res, AARGS(_lt_Cr_));
339 void AputnocacheC(ComplexType *res, AARGS(_lt_Cc_));
340
341 COMPLEX *Acache(const memindex integral);
342 COMPLEX *AcacheC(const memindex integral);
343
344 ComplexType Aval(const int i, const memindex integral);
345 ComplexType AvalC(const int i, const memindex integral);
346
347 ComplexType A0i(const int i, AARGS(_lt_Cr_));
348 ComplexType A0iC(const int i, AARGS(_lt_Cc_));
349
350 ComplexType A0(AARGS(_lt_Cr_));
351 ComplexType A00(AARGS(_lt_Cr_));
352
353 ComplexType A0C(AARGS(_lt_Cc_));
354 ComplexType A00C(AARGS(_lt_Cc_));
355
356 /****************************************************************/
357
358 memindex Bget(BARGS(_lt_Cr_));
359 memindex BgetC(BARGS(_lt_Cc_));
360
361 void Bput(ComplexType *res, BARGS(_lt_Cr_));
362 void BputC(ComplexType *res, BARGS(_lt_Cc_));
363
364 void Bputnocache(ComplexType *res, BARGS(_lt_Cr_));
365 void BputnocacheC(ComplexType *res, BARGS(_lt_Cc_));
366
367 COMPLEX *Bcache(const memindex integral);
368 COMPLEX *BcacheC(const memindex integral);
369
370 ComplexType Bval(const int i, const memindex integral);
371 ComplexType BvalC(const int i, const memindex integral);
372
373 ComplexType B0i(const int i, BARGS(_lt_Cr_));
374 ComplexType B0iC(const int i, BARGS(_lt_Cc_));
375
376 ComplexType B0(BARGS(_lt_Cr_));
377 ComplexType B1(BARGS(_lt_Cr_));
378 ComplexType B00(BARGS(_lt_Cr_));
379 ComplexType B11(BARGS(_lt_Cr_));
380 ComplexType B001(BARGS(_lt_Cr_));
381 ComplexType B111(BARGS(_lt_Cr_));
382 ComplexType DB0(BARGS(_lt_Cr_));
383 ComplexType DB1(BARGS(_lt_Cr_));
384 ComplexType DB00(BARGS(_lt_Cr_));
385 ComplexType DB11(BARGS(_lt_Cr_));
386
387 ComplexType B0C(BARGS(_lt_Cc_));
388 ComplexType B1C(BARGS(_lt_Cc_));
389 ComplexType B00C(BARGS(_lt_Cc_));
390 ComplexType B11C(BARGS(_lt_Cc_));
391 ComplexType B001C(BARGS(_lt_Cc_));
392 ComplexType B111C(BARGS(_lt_Cc_));
393 ComplexType DB0C(BARGS(_lt_Cc_));
394 ComplexType DB1C(BARGS(_lt_Cc_));
395 ComplexType DB00C(BARGS(_lt_Cc_));
396 ComplexType DB11C(BARGS(_lt_Cc_));
397
398 /****************************************************************/
399
400 memindex Cget(CARGS(_lt_Cr_));
401 memindex CgetC(CARGS(_lt_Cc_));
402
403 void Cput(ComplexType *res, CARGS(_lt_Cr_));
404 void CputC(ComplexType *res, CARGS(_lt_Cc_));
405
406 void C0nocache(ComplexType *res, CARGS(_lt_Cr_));
407 void C0nocacheC(ComplexType *res, CARGS(_lt_Cc_));
408
409 COMPLEX *Ccache(const memindex integral);
410 COMPLEX *CcacheC(const memindex integral);
411
412 ComplexType Cval(const int i, const memindex integral);
413 ComplexType CvalC(const int i, const memindex integral);
414
415 ComplexType C0i(const int i, CARGS(_lt_Cr_));
416 ComplexType C0iC(const int i, CARGS(_lt_Cc_));
417
418 ComplexType C0(CARGS(_lt_Cr_));
419 ComplexType C0C(CARGS(_lt_Cc_));
420
421 /****************************************************************/
422
423 memindex Dget(DARGS(_lt_Cr_));
424 memindex DgetC(DARGS(_lt_Cc_));
425
426 void Dput(ComplexType *res, DARGS(_lt_Cr_));
427 void DputC(ComplexType *res, DARGS(_lt_Cc_));
428
429 void D0nocache(ComplexType *res, DARGS(_lt_Cr_));
430 void D0nocacheC(ComplexType *res, DARGS(_lt_Cc_));
431
432 COMPLEX *Dcache(const memindex integral);
433 COMPLEX *DcacheC(const memindex integral);
434
435 ComplexType Dval(const int i, const memindex integral);
436 ComplexType DvalC(const int i, const memindex integral);
437
438 ComplexType D0i(const int i, DARGS(_lt_Cr_));
439 ComplexType D0iC(const int i, DARGS(_lt_Cc_));
440
441 ComplexType D0(DARGS(_lt_Cr_));
442 ComplexType D0C(DARGS(_lt_Cc_));
443
444 /****************************************************************/
445
446 memindex Eget(EARGS(_lt_Cr_));
447 memindex EgetC(EARGS(_lt_Cc_));
448
449 void Eput(ComplexType *res, EARGS(_lt_Cr_));
450 void EputC(ComplexType *res, EARGS(_lt_Cc_));
451
452 void E0nocache(ComplexType *res, EARGS(_lt_Cr_));
453 void E0nocacheC(ComplexType *res, EARGS(_lt_Cc_));
454
455 COMPLEX *Ecache(const memindex integral);
456 COMPLEX *EcacheC(const memindex integral);
457
458 ComplexType Eval(const int i, const memindex integral);
459 ComplexType EvalC(const int i, const memindex integral);
460
461 ComplexType E0i(const int i, EARGS(_lt_Cr_));
462 ComplexType E0iC(const int i, EARGS(_lt_Cc_));
463
464 ComplexType E0(EARGS(_lt_Cr_));
465 ComplexType E0C(EARGS(_lt_Cc_));
466
467 /****************************************************************/
468
469 ComplexType Li2(_lt_Cr_(x));
470 ComplexType Li2C(_lt_Cc_(x));
471 ComplexType Li2omx(_lt_Cr_(x));
472 ComplexType Li2omxC(_lt_Cc_(x));
473
474 /****************************************************************/
475
476 void clearcache();
477 void markcache();
478 void restorecache();
479
480 void setmudim(cRealType mudim);
481 RealType getmudim();
482
483 void setdelta(cRealType delta);
484 RealType getdelta();
485
486 void setuvdiv(cRealType uvdiv);
487 RealType getuvdiv();
488
489 void setlambda(cRealType lambda);
490 RealType getlambda();
491
492 void setminmass(cRealType minmass);
493 RealType getminmass();
494
495 void setmaxdev(cRealType maxdev);
496 RealType getmaxdev();
497
498 void setwarndigits(const int warndigits);
499 int getwarndigits();
500
501 void seterrdigits(const int errdigits);
502 int geterrdigits();
503
504 void setversionkey(const int versionkey);
505 int getversionkey();
506
507 void setdebugkey(const int debugkey);
508 int getdebugkey();
509
510 void setdebugrange(const int debugfrom, const int debugto);
511
512 void setcmpbits(const int cmpbits);
513 int getcmpbits();
514
515 void setdiffeps(cRealType diffeps);
516 RealType getdiffeps();
517
518 void setzeroeps(cRealType zeroeps);
519 RealType getzeroeps();
520
521 } // namespace Looptools
522} // namespace Herwig
523
524#endif
525
-*- C++ -*-