HepLib
Loading...
Searching...
No Matches
HEP.h
Go to the documentation of this file.
1
6#pragma once
7
8#include "BASIC.h"
9#include "IBP.h"
10
11namespace HepLib {
12
13 using namespace std;
14 using namespace GiNaC;
15 using namespace HepLib;
16
17 extern exmap SP_map;
18
19 extern int form_trace_mode;
20 extern const int form_trace_auto;
21 extern const int form_trace_all;
22 extern const int form_trace_each_all;
23 extern const int form_trace_each_each;
24
25 extern int form_expand_mode;
26 extern const int form_expand_none;
27 extern const int form_expand_tr;
28 extern const int form_expand_ci;
29 extern const int form_expand_li;
30 extern const int form_expand_all;
31
32 extern bool Apart_using_fermat;
33 extern bool form_using_su3;
34 extern bool form_using_dim4;
35 extern bool form_using_gamma5;
36
37 class Index;
38 class Vector;
39 class Pair;
40
44 class FormFormat : public print_dflt {
45 GINAC_DECLARE_PRINT_CONTEXT(FormFormat, print_dflt)
46 public:
47 FormFormat(ostream &os, unsigned opt=0);
48 static void power_print(const power & p, const FormFormat & c, unsigned level=0);
49
50 template<class T> const FormFormat & operator << (const T & v) const {
51 s << v;
52 return *this;
53 };
54 const FormFormat & operator << (const basic & v) const;
55 const FormFormat & operator << (const ex & v) const;
56 const FormFormat & operator << (const lst & v) const;
57 const FormFormat & operator<<(std::ostream& (*v)(std::ostream&)) const;
58
59 #ifndef DOXYGEN_SKIP
60 class _init {
61 public: _init();
62 };
63 private:
64 static _init FormFormat_init;
65 #endif
66 };
67
71 class FCFormat : public print_dflt {
72 GINAC_DECLARE_PRINT_CONTEXT(FCFormat, print_dflt)
73 public:
74 FCFormat(ostream &os, unsigned opt=0);
75 static void ncmul_print(const ncmul & p, const FCFormat & c, unsigned level=0);
76
77 template<class T> const FCFormat & operator << (const T & v) const {
78 s << v;
79 return *this;
80 };
81 const FCFormat & operator << (const basic & v) const;
82 const FCFormat & operator << (const ex & v) const;
83 const FCFormat & operator << (const lst & v) const;
84 const FCFormat & operator<<(std::ostream& (*v)(std::ostream&)) const;
85
86 const FCFormat & operator << (const matrix & v) const;
87 const FCFormat & operator << (const exvector & v) const;
88 const FCFormat & operator << (const exmap & v) const;
89 const FCFormat & operator << (const exset & v) const;
90
91 #ifndef DOXYGEN_SKIP
92 class _init {
93 public: _init();
94 };
95 private:
96 static _init FCFormat_init;
97 #endif
98 };
99 extern FCFormat fcout;
100
104 class Index : public basic {
105 //GINAC_DECLARE_REGISTERED_CLASS(Index, basic)
106 private:
107 static GiNaC::registered_class_info reg_info;
108 public:
109 static GiNaC::exmap Dimension;
110 static GiNaC::registered_class_info &get_class_info_static();
111 class visitor {
112 public:
113 virtual void visit(const Index &) = 0; // classname
114 virtual ~visitor();
115 };
116 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
117 typedef basic inherited; // supername
118 Index(); // classname
119 Index * duplicate() const override; // classname
120 void accept(GiNaC::visitor & v) const override;
121 const GiNaC::registered_class_info &get_class_info() const override;
122 GiNaC::registered_class_info &get_class_info() override;
123 const char *class_name() const override;
124 protected:
125 int compare_same_type(const GiNaC::basic & other) const override;
126 // GINAC_DECLARE_REGISTERED_CLASS END
127
128 public:
129 Index(const string &s, const ex &dim=d);
130 Pair operator() (const Index & i);
131 Pair operator() (const Vector & p);
133 ex dim;
134 void print(const print_context &c, unsigned level = 0) const;
135 void archive(archive_node & n) const override;
136 void read_archive(const archive_node& n) override;
137 static bool has(const ex &e);
138 static bool hasc(const ex &e);
139 static bool hasv(const ex &e);
140 static bool has(const ex &e, const ex &DIM);
141 static lst all(const ex &e);
142 ex derivative(const symbol & s) const override;
143 bool is_equal_same_type(const basic & other) const override;
144 };
145
149 class Vector : public basic {
150 //GINAC_DECLARE_REGISTERED_CLASS(Vector, basic)
151 private:
152 static GiNaC::registered_class_info reg_info;
153 public:
154 static GiNaC::registered_class_info &get_class_info_static();
155 class visitor {
156 public:
157 virtual void visit(const Vector &) = 0; // classname
158 virtual ~visitor();
159 };
160 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
161 typedef basic inherited; // supername
162 Vector(); // classname
163 Vector * duplicate() const override; // classname
164 void accept(GiNaC::visitor & v) const override;
165 const GiNaC::registered_class_info &get_class_info() const override;
166 GiNaC::registered_class_info &get_class_info() override;
167 const char *class_name() const override;
168 protected:
169 int compare_same_type(const GiNaC::basic & other) const override;
170 // GINAC_DECLARE_REGISTERED_CLASS END
171
172 public:
173 Vector(const string &s);
174 Pair operator() (const Vector & p);
175 Pair operator() (const Index & mu);
177 void print(const print_context &c, unsigned level = 0) const;
178 void archive(archive_node & n) const override;
179 void read_archive(const archive_node& n) override;
180 static bool has(const ex &e);
181 static lst all(const ex &e);
182 ex derivative(const symbol & s) const override;
183 bool is_equal_same_type(const basic & other) const override;
184 };
185
189 class SUNT : public basic {
190 //GINAC_DECLARE_REGISTERED_CLASS(SUNT, basic)
191 private:
192 static GiNaC::registered_class_info reg_info;
193 public:
194 static GiNaC::registered_class_info &get_class_info_static();
195 class visitor {
196 public:
197 virtual void visit(const SUNT &) = 0; // classname
198 virtual ~visitor();
199 };
200 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
201 typedef basic inherited; // supername
202 SUNT(); // classname
203 SUNT * duplicate() const override; // classname
204 void accept(GiNaC::visitor & v) const override;
205 const GiNaC::registered_class_info &get_class_info() const override;
206 GiNaC::registered_class_info &get_class_info() override;
207 const char *class_name() const override;
208 protected:
209 int compare_same_type(const GiNaC::basic & other) const override;
210 // GINAC_DECLARE_REGISTERED_CLASS END
211
212 public:
213 SUNT(ex a, ex i, ex j);
214 ex aij[3]; // Index
215 size_t nops() const override;
216 ex op(size_t i) const override;
217 ex& let_op(size_t i) override;
218 void form_print(const FormFormat &c, unsigned level = 0) const;
219 void fc_print(const FCFormat &c, unsigned level = 0) const;
220 void print(const print_dflt &c, unsigned level = 0) const;
221 void archive(archive_node & n) const override;
222 void read_archive(const archive_node& n) override;
223 static bool has(const ex &e);
224 static lst all(const ex &e);
225 ex derivative(const symbol & s) const override;
226 ex conjugate() const override;
227 bool is_equal_same_type(const basic & other) const override;
228 };
229
233 class SUNF : public basic {
234 //GINAC_DECLARE_REGISTERED_CLASS(SUNF, basic)
235 private:
236 static GiNaC::registered_class_info reg_info;
237 public:
238 static GiNaC::registered_class_info &get_class_info_static();
239 class visitor {
240 public:
241 virtual void visit(const SUNF &) = 0; // classname
242 virtual ~visitor();
243 };
244 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
245 typedef basic inherited; // supername
246 SUNF(); // classname
247 SUNF * duplicate() const override; // classname
248 void accept(GiNaC::visitor & v) const override;
249 const GiNaC::registered_class_info &get_class_info() const override;
250 GiNaC::registered_class_info &get_class_info() override;
251 const char *class_name() const override;
252 protected:
253 int compare_same_type(const GiNaC::basic & other) const override;
254 // GINAC_DECLARE_REGISTERED_CLASS END
255
256 public:
257 SUNF(ex i, ex j, ex k);
258 ex ijk[3]; // Index
259 size_t nops() const override;
260 ex op(size_t i) const override;
261 ex& let_op(size_t i) override;
262 ex eval() const override;
263 void print(const print_dflt &c, unsigned level = 0) const;
264 void form_print(const FormFormat &c, unsigned level = 0) const;
265 void fc_print(const FCFormat &c, unsigned level = 0) const;
266 void archive(archive_node & n) const override;
267 void read_archive(const archive_node& n) override;
268 static bool has(const ex &e);
269 static lst all(const ex &e);
270 ex derivative(const symbol & s) const override;
271 bool is_equal_same_type(const basic & other) const override;
272 };
273
274
278 class SUNF4 : public basic {
279 //GINAC_DECLARE_REGISTERED_CLASS(SUNF4, basic)
280 private:
281 static GiNaC::registered_class_info reg_info;
282 public:
283 static GiNaC::registered_class_info &get_class_info_static();
284 class visitor {
285 public:
286 virtual void visit(const SUNF4 &) = 0; // classname
287 virtual ~visitor();
288 };
289 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
290 typedef basic inherited; // supername
291 SUNF4(); // classname
292 SUNF4 * duplicate() const override; // classname
293 void accept(GiNaC::visitor & v) const override;
294 const GiNaC::registered_class_info &get_class_info() const override;
295 GiNaC::registered_class_info &get_class_info() override;
296 const char *class_name() const override;
297 protected:
298 int compare_same_type(const GiNaC::basic & other) const override;
299 // GINAC_DECLARE_REGISTERED_CLASS END
300
301 public:
302 SUNF4(ex i, ex j, ex k, ex l);
303 ex ijkl[4]; // Index
304 size_t nops() const override;
305 ex op(size_t i) const override;
306 ex& let_op(size_t i) override;
307 ex eval() const override;
308 void print(const print_dflt &c, unsigned level = 0) const;
309 void form_print(const FormFormat &c, unsigned level = 0) const;
310 void fc_print(const FCFormat &c, unsigned level = 0) const;
311 void archive(archive_node & n) const override;
312 void read_archive(const archive_node& n) override;
313 static bool has(const ex &e);
314 static lst all(const ex &e);
315 ex derivative(const symbol & s) const override;
316 bool is_equal_same_type(const basic & other) const override;
317 };
318
322 class Pair : public basic {
323 //GINAC_DECLARE_REGISTERED_CLASS(Pair, basic)
324 private:
325 static GiNaC::registered_class_info reg_info;
326 public:
327 static GiNaC::registered_class_info &get_class_info_static();
328 class visitor {
329 public:
330 virtual void visit(const Pair &) = 0; // classname
331 virtual ~visitor();
332 };
333 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
334 typedef basic inherited; // supername
335 Pair(); // classname
336 Pair * duplicate() const override; // classname
337 void accept(GiNaC::visitor & v) const override;
338 const GiNaC::registered_class_info &get_class_info() const override;
339 GiNaC::registered_class_info &get_class_info() override;
340 const char *class_name() const override;
341 protected:
342 int compare_same_type(const GiNaC::basic & other) const override;
343 // GINAC_DECLARE_REGISTERED_CLASS END
344
345 public:
346 Pair(const Vector &p1, const Vector &p2);
347 Pair(const Index &i1, const Index &i2);
348 Pair(const Vector &p, const Index &i);
349 Pair(const Index &i, const Vector &p);
350 size_t nops() const override;
351 ex op(size_t i) const override;
352 ex& let_op(size_t i) override;
353 ex eval() const override;
354 void print(const print_dflt &c, unsigned level = 0) const;
355 void form_print(const FormFormat &c, unsigned level = 0) const;
356 void fc_print(const FCFormat &c, unsigned level = 0) const;
357 void archive(archive_node & n) const override;
358 void read_archive(const archive_node& n) override;
359 static bool has(const ex &e);
360 static lst all(const ex &e);
361 ex derivative(const symbol & s) const override;
362 bool is_equal_same_type(const basic & other) const override;
363 private:
364 ex lr[2];
365 };
366
367 ex SP(const ex &a, bool use_map=false);
368 ex SP(const ex &a, const ex &b, bool use_map=false);
369 ex sp(const ex & a, const ex & b);
370 ex sp(const ex & a);
371 ex& letSP(const ex &p1, const ex &p2);
372 ex& letSP(const ex &p);
373 void clearSP(const ex &p1, const ex &p2);
374 void clearSP(const ex &p);
375 void clearSP();
376 ex SP2sp(const ex & exin);
377 exmap sp_map();
378
386 class Eps : public basic {
387 //GINAC_DECLARE_REGISTERED_CLASS(Eps, basic)
388 private:
389 static GiNaC::registered_class_info reg_info;
390 public:
391 static GiNaC::registered_class_info &get_class_info_static();
392 class visitor {
393 public:
394 virtual void visit(const Eps &) = 0; // classname
395 virtual ~visitor();
396 };
397 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
398 typedef basic inherited; // supername
399 Eps(); // classname
400 Eps * duplicate() const override; // classname
401 void accept(GiNaC::visitor & v) const override;
402 const GiNaC::registered_class_info &get_class_info() const override;
403 GiNaC::registered_class_info &get_class_info() override;
404 const char *class_name() const override;
405 protected:
406 int compare_same_type(const GiNaC::basic & other) const override;
407 // GINAC_DECLARE_REGISTERED_CLASS END
408
409 public:
410 exvector pis;
411 Eps(const Vector &p1, const Vector &p2, const Vector &p3, const Vector &p4);
412 Eps(const Vector &p1, const Vector &p2, const Vector &p3, const Index &i1);
413 Eps(const Vector &p1, const Vector &p2, const Index &i1, const Index &i2);
414 Eps(const Vector &p1, const Index &i1, const Index &i2, const Index &i3);
415 Eps(const Index &i1, const Index &i2, const Index &i3, const Index &i4);
416 Eps(vector<Vector> vs, vector<Index> is);
417 Eps(const exvector & pis0);
418 size_t nops() const override;
419 ex op(size_t i) const override;
420 ex & let_op(size_t i) override;
421 ex eval() const override;
422 void print(const print_dflt &c, unsigned level = 0) const;
423 void form_print(const FormFormat &c, unsigned level = 0) const;
424 void fc_print(const FCFormat &c, unsigned level = 0) const;
425 void archive(archive_node & n) const override;
426 void read_archive(const archive_node& n) override;
427 static bool has(const ex &e);
428 static lst all(const ex &e);
429 ex derivative(const symbol & s) const override;
430 bool is_equal_same_type(const basic & other) const override;
431 };
432 ex LC(ex pi1, ex pi2, ex pi3, ex pi4);
433
437 class DGamma : public basic {
438 //GINAC_DECLARE_REGISTERED_CLASS(DGamma, basic)
439 private:
440 static GiNaC::registered_class_info reg_info;
441 public:
442 static GiNaC::registered_class_info &get_class_info_static();
443 class visitor {
444 public:
445 virtual void visit(const DGamma &) = 0; // classname
446 virtual ~visitor();
447 };
448 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
449 typedef basic inherited; // supername
450 DGamma(); // classname
451 DGamma * duplicate() const override; // classname
452 void accept(GiNaC::visitor & v) const override;
453 const GiNaC::registered_class_info &get_class_info() const override;
454 GiNaC::registered_class_info &get_class_info() override;
455 const char *class_name() const override;
456 protected:
457 int compare_same_type(const GiNaC::basic & other) const override;
458 // GINAC_DECLARE_REGISTERED_CLASS END
459
460 public:
461 ex pi;
462 unsigned rl = 0;
463 bool isTr = false; // is transposed or not
464 DGamma(const Vector &p, unsigned rl=0);
465 DGamma(const Index &i, unsigned rl=0);
466 DGamma(int int_1567, unsigned _rl=0);
467 DGamma(const DGamma &g, unsigned _rl);
468 void print(const print_dflt &c, unsigned level = 0) const;
469 void form_print(const FormFormat &c, unsigned level = 0) const;
470 void fc_print(const FCFormat &c, unsigned level = 0) const;
471 return_type_t return_type_tinfo() const override;
472 unsigned return_type() const override { return return_types::noncommutative; }
473 bool match_same_type(const basic & other) const override;
474 unsigned get_rl();
475 size_t nops() const override;
476 ex op(size_t i) const override;
477 ex& let_op(size_t i) override;
478 ex eval() const override;
479 void archive(archive_node & n) const override;
480 void read_archive(const archive_node& n) override;
481 static bool has(const ex &e);
482 static lst all(const ex &e);
483 static ex sigma(const ex & mu, const ex & nu);
484 static ex G5Eps(int i=0, int rl=0);
485 static ex gi; // identity matrix rl = 0
486 static ex g5; // gamma^5
487 static ex C; // Charge conjugation matrix
488 ex derivative(const symbol & s) const override;
489 ex conjugate() const override;
490 bool is_equal_same_type(const basic & other) const override;
491 };
492
496 class AsGamma : public basic {
497 //GINAC_DECLARE_REGISTERED_CLASS(AsGamma, basic)
498 private:
499 static GiNaC::registered_class_info reg_info;
500 public:
501 static GiNaC::registered_class_info &get_class_info_static();
502 class visitor {
503 public:
504 virtual void visit(const AsGamma &) = 0; // classname
505 virtual ~visitor();
506 };
507 template<class B, typename... Args> friend B & dynallocate(Args &&... args);
508 typedef basic inherited; // supername
509 AsGamma(); // classname
510 AsGamma * duplicate() const override; // classname
511 void accept(GiNaC::visitor & v) const override;
512 const GiNaC::registered_class_info &get_class_info() const override;
513 GiNaC::registered_class_info &get_class_info() override;
514 const char *class_name() const override;
515 protected:
516 int compare_same_type(const GiNaC::basic & other) const override;
517 // GINAC_DECLARE_REGISTERED_CLASS END
518
519 private:
520 AsGamma(const exvector & _pis, unsigned _rl=0);
521
522 public:
523 exvector pis; // momentum and index lst
524 unsigned rl = 0;
525 AsGamma(const lst & _pis, int _rl=0);
526 static ex from(const lst & pis_lst, unsigned rl=0);
527 static ex from(const exvector & pis_vec, unsigned rl=0) { return from(vec2lst(pis_vec), rl); }
528 ex to() const;
529 AsGamma(const AsGamma &g, unsigned _rl);
530 void print(const print_dflt &c, unsigned level = 0) const;
531 void form_print(const FormFormat &c, unsigned level = 0) const;
532 void fc_print(const FCFormat &c, unsigned level = 0) const;
533 return_type_t return_type_tinfo() const override;
534 unsigned return_type() const override { return return_types::noncommutative; }
535 bool match_same_type(const basic & other) const override;
536 unsigned get_rl();
537 size_t nops() const override;
538 ex op(size_t i) const override;
539 ex& let_op(size_t i) override;
540 ex eval() const override;
541 void archive(archive_node & n) const override;
542 void read_archive(const archive_node& n) override;
543 static bool has(const ex &e);
544 static lst all(const ex &e);
545 ex derivative(const symbol & s) const override;
546 ex conjugate() const override;
547 bool is_equal_same_type(const basic & other) const override;
548
549 ex mul_right(const ex & pi) const;
550 ex mul_left(const ex & pi) const;
551 };
552
553 ex AsGamma_mul_right(const ex & expr, const ex & pi_in);
554 ex AsGamma_mul_left(const ex & expr, const ex & pi_in);
555 ex AsGamma_to(const ex & expr);
556
557 //-----------------------------------------------------------
558 // TR/GAS functions
559 //-----------------------------------------------------------
560 DECLARE_FUNCTION_3P(GMat)
561 DECLARE_FUNCTION_1P(TR)
562 DECLARE_FUNCTION_1P(TTR)
563 DECLARE_FUNCTION_1P(HF)
564
565 inline ex GAS(const Vector &p, unsigned rl=0) { return DGamma(p,rl); }
566 inline ex GAS(const Index &i, unsigned rl=0) { return DGamma(i,rl); }
567 ex GAS(const ex &expr, unsigned rl=0);
568 ex GAS(const initializer_list<ex> & expr_lst, unsigned rl=0);
569
570 // Form, TIR, Apart
571 extern bool GMat_using_cache;
572 ex charge_conjugate(const ex &);
573 ex gamma_transpose(const ex &);
574 ex form(const ex &expr, int verb=0);
575 ex UnContract(const ex expr, const lst &loop_ps, const lst &ext_ps=lst{}); // Eps/DGamma always uncontract
576 ex Contract(const ex & expr);
577 ex TIR(const ex &expr_in, const lst &loop_ps, const lst &ext_ps);
578 ex ncmul_expand(const ex & expr);
579 ex GMatOut(const ex & expr_in);
580 ex GMatContract(const ex & expr_in, bool auto_tr=false); // auto_tr: auto tranpose
581 ex GMatExpand(const ex & expr_in);
582 ex GMatShift(const ex & expr, const ex & g, bool to_right=true);
583 ex GMatShift(const ex & expr);
584 ex GMatSimplify(const ex & expr);
585 ex GMatECC(const ex & expr, int sign = -1); // eliminate C*...*C in GMat, C^{-1} = sign * C
586 ex GMatT(const ex & expr); // GMat Transpose
587 ex Apart(const matrix & mat);
588 ex Apart(const ex &expr_in, const lst &vars, exmap sgnmap={});
589 ex Apart(const ex &expr_in, const lst &loops, const lst & extmoms, exmap sgnmap={});
590 ex ApartIR2ex(const ex & expr_in);
591 ex ApartIR2F(const ex & expr_in);
592 ex F2ex(const ex & expr_in);
593 ex ApartIRC(const ex & expr_in);
594 void ApartIBP(exvector &io_vec, int IBPmethod, const lst & loops, const lst & exts,
595 const lst & cut_props=lst{}, std::function<lst(const IBP &, const ex &)> uf=LoopUF);
596 inline void ApartIBP(int IBPmethod, exvector &io_vec, const lst & loops, const lst & exts,
597 const lst & cut_props=lst{}, std::function<lst(const IBP &, const ex &)> uf=LoopUF) {
598 return ApartIBP(io_vec, IBPmethod, loops, exts, cut_props, uf);
599 }
600 exmap ApartRules(const exvector &airs, bool irc=true);
601
602 struct AIOption {
603 int pn_sector = 0; // treat each sector as a spearate problem when total denominators > pn_sector, set 0 to disable this feature
604 bool ap_rules = true; // minimize the total number of ibp problems
605 int IBPmethod = 1; // 0
606 lst Internal; // Internal for Apart/IBP
607 lst External; // External for Apart/IBP
608 lst DSP; // DSP for IBP
609 exmap smap; // Sign Map for Apart
610 lst Cut; // Cut Propagator. optional
611 lst CSP; // SP in Cut, to be cleared. optional
612 lst ISP; // SP for IBP. optional
613 bool CutFirst = true;
614 bool keep0F = false; // keep 0 exponent in F
615 int NIBP = 0;
616 ex apart1 = 0; // set Apart(1,{x,y,...}) to apart1
617 lst pat = { F(w1,w2), gs, nL, nH };
618 std::function<ex(const ex &, const ex &)> cv = nullptr;
619 string SaveDir = ""; // save temporary result, and restart from it
620 std::function<lst(const IBP &, const ex &)> UF = LoopUF;
621 void init_smap() { for(auto li : Internal) smap[SP(li)] = 1; }
622 };
623 void ApartIBP(exvector &io_vec, AIOption aip);
624
625 bool IsZero(const ex & e);
626
627 #ifndef DOXYGEN_SKIP
628
629 class ApartIR1_SERIAL { public: static unsigned serial; };
630 template<typename T1>
631 inline GiNaC::function ApartIR(const T1 & p1) {
632 return GiNaC::function(ApartIR1_SERIAL::serial, ex(p1));
633 }
634
635 class ApartIR2_SERIAL { public: static unsigned serial; };
636 template<typename T1, typename T2>
637 inline GiNaC::function ApartIR(const T1 & p1, const T2 & p2) {
638 return GiNaC::function(ApartIR2_SERIAL::serial, ex(p1), ex(p2));
639 }
640
641 #endif
642
643 ex ToCF(const ex & e);
644 ex ToCACF(const ex & e);
645 ex HomCACF(const ex & e);
646 ex DoColor(const ex & e, const ex & pref=1, int method=0);
647 ex A0(const ex m2, int n=1, const ex d=4-2*ep);
648
649 class Exp2AMF {
650 public:
653 lst Replacement = lst{ };
654 lst Numeric = lst{ };
655 lst M2M2 = lst{ };
656 int NThread = 32;
657 int Precision = 35;
658 int Order = 0;
659 void Export(const ex & expr, const string & dir);
660 private:
661 exmap sp2x;
662 bool is_loop(const ex & e);
663 };
664
665}
666
int * a
Basic header file.
IBP header file.
virtual void visit(const AsGamma &)=0
class for AntiSymmetric Gamma object
Definition HEP.h:496
bool match_same_type(const basic &other) const override
Definition AsGamma.cpp:41
static lst all(const ex &e)
void archive(archive_node &n) const override
Definition AsGamma.cpp:158
AsGamma * duplicate() const override
Definition AsGamma.cpp:25
int compare_same_type(const GiNaC::basic &other) const override
Definition AsGamma.cpp:50
ex mul_right(const ex &pi) const
Definition AsGamma.cpp:226
ex conjugate() const override
Definition AsGamma.cpp:182
ex to() const
Definition AsGamma.cpp:210
basic inherited
Definition HEP.h:508
const char * class_name() const override
Definition AsGamma.cpp:29
ex eval() const override
Definition AsGamma.cpp:108
static ex from(const exvector &pis_vec, unsigned rl=0)
Definition HEP.h:527
ex op(size_t i) const override
Definition AsGamma.cpp:100
void read_archive(const archive_node &n) override
Definition AsGamma.cpp:166
ex derivative(const symbol &s) const override
Definition AsGamma.cpp:178
const GiNaC::registered_class_info & get_class_info() const override
Definition AsGamma.cpp:27
exvector pis
Definition HEP.h:523
void form_print(const FormFormat &c, unsigned level=0) const
Definition AsGamma.cpp:150
return_type_t return_type_tinfo() const override
Definition AsGamma.cpp:36
void accept(GiNaC::visitor &v) const override
Definition AsGamma.cpp:26
static ex from(const lst &pis_lst, unsigned rl=0)
Definition AsGamma.cpp:186
void fc_print(const FCFormat &c, unsigned level=0) const
Definition AsGamma.cpp:154
size_t nops() const override
Definition AsGamma.cpp:99
unsigned get_rl()
Definition AsGamma.cpp:46
static GiNaC::registered_class_info & get_class_info_static()
Definition AsGamma.cpp:23
unsigned rl
Definition HEP.h:524
friend B & dynallocate(Args &&... args)
ex mul_left(const ex &pi) const
Definition AsGamma.cpp:245
unsigned return_type() const override
Definition HEP.h:534
void print(const print_dflt &c, unsigned level=0) const
Definition AsGamma.cpp:135
bool is_equal_same_type(const basic &other) const override
Definition AsGamma.cpp:64
ex & let_op(size_t i) override
Definition AsGamma.cpp:103
static bool has(const ex &e)
virtual void visit(const DGamma &)=0
class for Dirac Gamma object
Definition HEP.h:437
ex eval() const override
Definition DGamma.cpp:109
unsigned return_type() const override
Definition HEP.h:472
static lst all(const ex &e)
bool match_same_type(const basic &other) const override
Definition DGamma.cpp:64
static ex C
Definition HEP.h:487
return_type_t return_type_tinfo() const override
Definition DGamma.cpp:59
basic inherited
Definition HEP.h:449
ex derivative(const symbol &s) const override
Definition DGamma.cpp:182
void archive(archive_node &n) const override
Definition DGamma.cpp:165
void form_print(const FormFormat &c, unsigned level=0) const
Definition DGamma.cpp:139
void accept(GiNaC::visitor &v) const override
Definition DGamma.cpp:49
ex conjugate() const override
Definition DGamma.cpp:186
static GiNaC::registered_class_info & get_class_info_static()
Definition DGamma.cpp:46
void read_archive(const archive_node &n) override
Definition DGamma.cpp:172
static ex sigma(const ex &mu, const ex &nu)
Definition DGamma.cpp:196
size_t nops() const override
Definition DGamma.cpp:95
ex op(size_t i) const override
Definition DGamma.cpp:96
int compare_same_type(const GiNaC::basic &other) const override
Definition DGamma.cpp:73
void print(const print_dflt &c, unsigned level=0) const
Definition DGamma.cpp:117
static ex G5Eps(int i=0, int rl=0)
Definition DGamma.cpp:200
static bool has(const ex &e)
void fc_print(const FCFormat &c, unsigned level=0) const
Definition DGamma.cpp:150
friend B & dynallocate(Args &&... args)
static ex g5
Definition HEP.h:486
const GiNaC::registered_class_info & get_class_info() const override
Definition DGamma.cpp:50
bool is_equal_same_type(const basic &other) const override
Definition DGamma.cpp:80
bool isTr
Definition HEP.h:463
static ex gi
Definition HEP.h:485
DGamma * duplicate() const override
Definition DGamma.cpp:48
ex & let_op(size_t i) override
Definition DGamma.cpp:102
unsigned rl
Definition HEP.h:462
unsigned get_rl()
Definition DGamma.cpp:69
const char * class_name() const override
Definition DGamma.cpp:52
virtual void visit(const Eps &)=0
virtual ~visitor()
Definition Eps.cpp:15
class for Levi-Civita object https://onlinelibrary.wiley.com/doi/pdf/10.1002/9783527630097....
Definition HEP.h:386
const char * class_name() const override
Definition Eps.cpp:20
ex eval() const override
Definition Eps.cpp:69
int compare_same_type(const GiNaC::basic &other) const override
Definition Eps.cpp:44
static bool has(const ex &e)
void fc_print(const FCFormat &c, unsigned level=0) const
Definition Eps.cpp:121
bool is_equal_same_type(const basic &other) const override
Definition Eps.cpp:57
ex op(size_t i) const override
Definition Eps.cpp:141
void form_print(const FormFormat &c, unsigned level=0) const
Eps in FORM format https://onlinelibrary.wiley.com/doi/pdf/10.1002/9783527630097.app3 to make Tr(g5,...
Definition Eps.cpp:112
Eps * duplicate() const override
Definition Eps.cpp:16
ex derivative(const symbol &s) const override
Definition Eps.cpp:167
void accept(GiNaC::visitor &v) const override
Definition Eps.cpp:17
void print(const print_dflt &c, unsigned level=0) const
Definition Eps.cpp:96
ex & let_op(size_t i) override
Definition Eps.cpp:144
void archive(archive_node &n) const override
Definition Eps.cpp:149
static lst all(const ex &e)
size_t nops() const override
Definition Eps.cpp:140
static GiNaC::registered_class_info & get_class_info_static()
Definition Eps.cpp:14
friend B & dynallocate(Args &&... args)
basic inherited
Definition HEP.h:398
void read_archive(const archive_node &n) override
Definition Eps.cpp:156
exvector pis
Definition HEP.h:410
const GiNaC::registered_class_info & get_class_info() const override
Definition Eps.cpp:18
int NThread
Definition HEP.h:656
lst Replacement
Definition HEP.h:653
lst Internal
Definition HEP.h:651
int Precision
Definition HEP.h:657
void Export(const ex &expr, const string &dir)
Definition Others.cpp:84
lst External
Definition HEP.h:652
lst Numeric
Definition HEP.h:654
class for FCFormat Output
Definition HEP.h:71
static void ncmul_print(const ncmul &p, const FCFormat &c, unsigned level=0)
Definition Basic.cpp:163
const FCFormat & operator<<(const T &v) const
Definition HEP.h:77
class for FormFormat Output
Definition HEP.h:44
static void power_print(const power &p, const FormFormat &c, unsigned level=0)
Definition Basic.cpp:55
const FormFormat & operator<<(const T &v) const
Definition HEP.h:50
IBP base class for IBP reduction.
Definition IBP.h:24
virtual void visit(const Index &)=0
class for index object
Definition HEP.h:104
int compare_same_type(const GiNaC::basic &other) const override
Definition Basic.cpp:181
const char * class_name() const override
Definition Basic.cpp:177
static bool hasv(const ex &e)
Definition Basic.cpp:240
void archive(archive_node &n) const override
Definition Basic.cpp:210
bool is_equal_same_type(const basic &other) const override
Definition Basic.cpp:190
static GiNaC::registered_class_info & get_class_info_static()
Definition Basic.cpp:171
Symbol name
Definition HEP.h:132
void print(const print_context &c, unsigned level=0) const
Definition Basic.cpp:198
void read_archive(const archive_node &n) override
Definition Basic.cpp:216
basic inherited
Definition HEP.h:117
static bool hasc(const ex &e)
Definition Basic.cpp:234
ex derivative(const symbol &s) const override
Definition Basic.cpp:224
const GiNaC::registered_class_info & get_class_info() const override
Definition Basic.cpp:175
Pair operator()(const Index &i)
Definition Basic.cpp:202
static GiNaC::exmap Dimension
Definition HEP.h:109
static lst all(const ex &e)
friend B & dynallocate(Args &&... args)
void accept(GiNaC::visitor &v) const override
Definition Basic.cpp:174
Index * duplicate() const override
Definition Basic.cpp:173
static bool has(const ex &e)
virtual ~visitor()
Definition Pair.cpp:16
virtual void visit(const Pair &)=0
class for Pair object
Definition HEP.h:322
void read_archive(const archive_node &n) override
Definition Pair.cpp:152
int compare_same_type(const GiNaC::basic &other) const override
Definition Pair.cpp:72
const GiNaC::registered_class_info & get_class_info() const override
Definition Pair.cpp:19
ex & let_op(size_t i) override
Definition Pair.cpp:129
static GiNaC::registered_class_info & get_class_info_static()
Definition Pair.cpp:15
ex eval() const override
Definition Pair.cpp:134
ex op(size_t i) const override
Definition Pair.cpp:126
void archive(archive_node &n) const override
Definition Pair.cpp:147
basic inherited
Definition HEP.h:334
size_t nops() const override
Definition Pair.cpp:125
static lst all(const ex &e)
void accept(GiNaC::visitor &v) const override
Definition Pair.cpp:18
ex derivative(const symbol &s) const override
Definition Pair.cpp:159
bool is_equal_same_type(const basic &other) const override
Definition Pair.cpp:81
void form_print(const FormFormat &c, unsigned level=0) const
FormFormat print function.
Definition Pair.cpp:102
void print(const print_dflt &c, unsigned level=0) const
default print function
Definition Pair.cpp:93
friend B & dynallocate(Args &&... args)
const char * class_name() const override
Definition Pair.cpp:21
void fc_print(const FCFormat &c, unsigned level=0) const
FCFormat print function.
Definition Pair.cpp:113
Pair * duplicate() const override
Definition Pair.cpp:17
static bool has(const ex &e)
virtual void visit(const SUNF4 &)=0
class for SUNF4 object
Definition HEP.h:278
void archive(archive_node &n) const override
save to archvie
Definition Basic.cpp:566
static GiNaC::registered_class_info & get_class_info_static()
Definition Basic.cpp:486
void form_print(const FormFormat &c, unsigned level=0) const
print the Form Format
Definition Basic.cpp:549
void accept(GiNaC::visitor &v) const override
Definition Basic.cpp:489
const GiNaC::registered_class_info & get_class_info() const override
Definition Basic.cpp:490
size_t nops() const override
Definition Basic.cpp:553
void fc_print(const FCFormat &c, unsigned level=0) const
Definition Basic.cpp:540
void print(const print_dflt &c, unsigned level=0) const
normal priint
Definition Basic.cpp:536
ex op(size_t i) const override
Definition Basic.cpp:554
ex & let_op(size_t i) override
Definition Basic.cpp:557
static lst all(const ex &e)
basic inherited
Definition HEP.h:290
SUNF4 * duplicate() const override
Definition Basic.cpp:488
ex ijkl[4]
Definition HEP.h:303
ex eval() const override
automatical evaluation of SUNF4
Definition Basic.cpp:519
ex derivative(const symbol &s) const override
set derivative of SUNF4 to 0
Definition Basic.cpp:596
static bool has(const ex &e)
bool is_equal_same_type(const basic &other) const override
Definition Basic.cpp:506
friend B & dynallocate(Args &&... args)
const char * class_name() const override
Definition Basic.cpp:492
void read_archive(const archive_node &n) override
read from archive
Definition Basic.cpp:578
int compare_same_type(const GiNaC::basic &other) const override
Definition Basic.cpp:496
virtual void visit(const SUNF &)=0
class for SUNF object
Definition HEP.h:233
void archive(archive_node &n) const override
Definition Basic.cpp:458
void print(const print_dflt &c, unsigned level=0) const
Definition Basic.cpp:437
static bool has(const ex &e)
const char * class_name() const override
Definition Basic.cpp:399
int compare_same_type(const GiNaC::basic &other) const override
Definition Basic.cpp:403
ex derivative(const symbol &s) const override
set derivative of SUNF to 0
Definition Basic.cpp:481
static lst all(const ex &e)
bool is_equal_same_type(const basic &other) const override
Definition Basic.cpp:413
void form_print(const FormFormat &c, unsigned level=0) const
Definition Basic.cpp:441
static GiNaC::registered_class_info & get_class_info_static()
Definition Basic.cpp:393
ex & let_op(size_t i) override
Definition Basic.cpp:453
SUNF * duplicate() const override
Definition Basic.cpp:395
ex eval() const override
Definition Basic.cpp:422
const GiNaC::registered_class_info & get_class_info() const override
Definition Basic.cpp:397
void read_archive(const archive_node &n) override
Definition Basic.cpp:465
size_t nops() const override
Definition Basic.cpp:449
void accept(GiNaC::visitor &v) const override
Definition Basic.cpp:396
basic inherited
Definition HEP.h:245
friend B & dynallocate(Args &&... args)
void fc_print(const FCFormat &c, unsigned level=0) const
Definition Basic.cpp:445
ex op(size_t i) const override
Definition Basic.cpp:450
ex ijk[3]
Definition HEP.h:258
virtual void visit(const SUNT &)=0
class for SUNT object
Definition HEP.h:189
static GiNaC::registered_class_info & get_class_info_static()
Definition Basic.cpp:305
bool is_equal_same_type(const basic &other) const override
Definition Basic.cpp:325
ex & let_op(size_t i) override
Definition Basic.cpp:357
void archive(archive_node &n) const override
Definition Basic.cpp:362
size_t nops() const override
Definition Basic.cpp:353
void form_print(const FormFormat &c, unsigned level=0) const
Definition Basic.cpp:334
ex op(size_t i) const override
Definition Basic.cpp:354
const GiNaC::registered_class_info & get_class_info() const override
Definition Basic.cpp:309
void fc_print(const FCFormat &c, unsigned level=0) const
Definition Basic.cpp:345
static bool has(const ex &e)
void print(const print_dflt &c, unsigned level=0) const
Definition Basic.cpp:349
static lst all(const ex &e)
int compare_same_type(const GiNaC::basic &other) const override
Definition Basic.cpp:315
void read_archive(const archive_node &n) override
Definition Basic.cpp:369
SUNT * duplicate() const override
Definition Basic.cpp:307
const char * class_name() const override
Definition Basic.cpp:311
void accept(GiNaC::visitor &v) const override
Definition Basic.cpp:308
friend B & dynallocate(Args &&... args)
ex derivative(const symbol &s) const override
Definition Basic.cpp:380
basic inherited
Definition HEP.h:201
ex aij[3]
Definition HEP.h:214
ex conjugate() const override
Definition Basic.cpp:384
class extended to GiNaC symbol class, represent a positive symbol
Definition BASIC.h:113
virtual void visit(const Vector &)=0
class for vector object
Definition HEP.h:149
Vector * duplicate() const override
Definition Basic.cpp:252
static lst all(const ex &e)
basic inherited
Definition HEP.h:161
bool is_equal_same_type(const basic &other) const override
Definition Basic.cpp:269
static bool has(const ex &e)
Pair operator()(const Vector &p)
Definition Basic.cpp:279
const char * class_name() const override
Definition Basic.cpp:256
ex derivative(const symbol &s) const override
Definition Basic.cpp:300
void print(const print_context &c, unsigned level=0) const
Definition Basic.cpp:275
static GiNaC::registered_class_info & get_class_info_static()
Definition Basic.cpp:250
int compare_same_type(const GiNaC::basic &other) const override
Definition Basic.cpp:260
friend B & dynallocate(Args &&... args)
void read_archive(const archive_node &n) override
Definition Basic.cpp:292
void accept(GiNaC::visitor &v) const override
Definition Basic.cpp:253
void archive(archive_node &n) const override
Definition Basic.cpp:287
const GiNaC::registered_class_info & get_class_info() const override
Definition Basic.cpp:254
Symbol name
Definition HEP.h:176
HepLib namespace.
Definition BASIC.cpp:17
ex SP2sp(const ex &exin)
convert SP(a,b) to sp(a,b)
Definition Pair.cpp:302
bool form_using_dim4
Definition Init.cpp:214
const int form_expand_tr
Definition Init.cpp:207
ex DoColor(const ex &expr, const ex &pref, int method)
Definition Basic.cpp:1289
ex sp(const ex &a, const ex &b)
translated the vector dot a.b to a*b, useful in SecDec
Definition Pair.cpp:237
exmap sp_map()
the SP_map with SP(a,b) replaced to sp(a,b)
Definition Pair.cpp:318
ex HomCACF(const ex &e)
Definition Basic.cpp:1247
const Symbol gs
ex AsGamma_mul_right(const ex &expr, const ex &pi_in)
Definition AsGamma.cpp:264
const int form_expand_none
Definition Init.cpp:206
ex AsGamma_mul_left(const ex &expr, const ex &pi_in)
Definition AsGamma.cpp:277
ex GMatShift(const ex &expr, const ex &g, bool to_right)
Definition Basic.cpp:925
exmap SP_map
Definition Init.cpp:184
ex ApartIR2F(const ex &expr_in)
convert ApartIR to F(ps, ns), ns is like FIRE convention
Definition Apart.cpp:61
ex ApartIRC(const ex &expr_in)
complete the ApartIR elements
Definition Apart.cpp:914
const Symbol ep
ex AsGamma_to(const ex &expr)
Definition AsGamma.cpp:290
void ApartIBP(exvector &air_vec, AIOption aio)
perform IBP reduction on the Aparted input
Definition ApartIBP.cpp:109
ex GMatSimplify(const ex &expr)
Definition Basic.cpp:987
int form_expand_mode
Definition Init.cpp:211
bool Apart_using_fermat
Definition Init.cpp:212
const int form_trace_all
Definition Init.cpp:201
ex GAS(const ex &expr, unsigned rl)
function similar to GAD/GSD in FeynClac
Definition DGamma.cpp:280
const int form_expand_ci
Definition Init.cpp:208
ex GMatExpand(const ex &expr_in)
Definition Basic.cpp:823
lst LoopUF(const IBP &ibp, const ex &idx)
UF function.
Definition IBP.cpp:318
ex GMatContract(const ex &expr_in, bool auto_tr)
make contract on matrix, i.e., GMat(a,i1,i2)*GMat(b,i2,i3) -> GMat(a*b,i1,i3)
Definition Basic.cpp:629
ex ApartIR2ex(const ex &expr_in)
convert ApartIR to ex
Definition Apart.cpp:35
int form_trace_mode
Definition Init.cpp:204
bool form_using_su3
Definition Init.cpp:213
ex Contract(const ex &ei)
Definition Basic.cpp:757
ex F2ex(const ex &expr_in)
convert F(ps, ns) to normal ex, ns is like FIRE convention
Definition ApartIBP.cpp:87
const int form_trace_each_all
Definition Init.cpp:202
const Symbol vs
const Symbol d
void clearSP()
delete all assignment in SP_map
Definition Pair.cpp:293
const int form_expand_all
Definition Init.cpp:210
ex ToCACF(const ex &e)
Definition Basic.cpp:1220
ex GMatECC(const ex &expr, int sign)
Definition Basic.cpp:1080
const Symbol mu
ex GMatOut(const ex &expr_in)
Definition Basic.cpp:799
ex & letSP(const ex &p1, const ex &p2)
return the reference of p1.p2
Definition Pair.cpp:252
ex gamma_transpose(const ex &expr)
make the transpose operaton M --> M^T
Definition Form.cpp:685
FCFormat fcout
ex A0(const ex m2, int n, ex d)
scalar integral A0, devided by (2pi)^(4-2ep)
Definition ABCD.cpp:17
ex charge_conjugate(const ex &expr)
make the charge conjugate operaton, M -> C^{-1} . M^T . C w.r.t. a GMat object
Definition Form.cpp:639
bool form_using_gamma5
Definition Init.cpp:215
exmap ApartRules(const exvector &airs, bool irc)
Definition Apart.cpp:156
const int form_trace_each_each
Definition Init.cpp:203
ex ToCF(const ex &e)
Definition Basic.cpp:1185
lst vec2lst(const exvector &ev)
convert exvector to lst
Definition BASIC.cpp:902
const int form_trace_auto
Definition Init.cpp:200
bool IsZero(const ex &e)
ex Apart(const matrix &mat)
Apart on matrix.
Definition Apart.cpp:280
const Symbol nL
const Symbol nH
ex w1
Definition BASIC.h:499
ex ncmul_expand(const ex &expr)
Definition Basic.cpp:600
ex UnContract(const ex expr, const lst &loop_ps, const lst &ext_ps=lst{})
Definition TIR.cpp:43
const int form_expand_li
Definition Init.cpp:209
ex LC(ex pi1, ex pi2, ex pi3, ex pi4)
function similar to LCD in FeynCalc
Definition Eps.cpp:179
ex w2
Definition BASIC.h:499
bool GMat_using_cache
Definition Init.cpp:160
ex GMatT(const ex &expr)
Definition Basic.cpp:1140
ex form(const ex &iexpr, int verb)
evalulate expr in form program, see also the form_trace_mode and form_expand_mode
Definition Form.cpp:565
ex TIR(const ex &expr_in, const lst &loop_ps, const lst &ext_ps)
Tensor Index Reduction, note that we only handle numerator.
Definition TIR.cpp:119
ex SP(const ex &a, bool use_map=false)
Definition Pair.cpp:166
std::function< lst(const IBP &, const ex &)> UF
Definition HEP.h:620
exmap smap
Definition HEP.h:609
bool CutFirst
Definition HEP.h:613
std::function< ex(const ex &, const ex &)> cv
Definition HEP.h:618
string SaveDir
Definition HEP.h:619
int IBPmethod
Definition HEP.h:605
bool ap_rules
Definition HEP.h:604
void init_smap()
Definition HEP.h:621
int pn_sector
Definition HEP.h:603
bool keep0F
Definition HEP.h:614