Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
looptools_interface.h
1 #pragma once
2 
3 #include "looptools_patch.h"
4 
5 namespace mty::lt {
6 
7 inline bool rescaleIntegral = false;
8 inline lti_real_t minScale = 1e-3;
9 inline lti_real_t regScale = 1e+0;
10 
11 inline lti_complex_t A0iC(
12  int id,
13  lti_complex_t const &m1,
14  [[maybe_unused]] lti_real_t const &eps = 0.
15  )
16 {
17  const std::complex<lti_real_t> res = ::A0iC(
18  id,
19  ensure_std_complex(m1)
20  );
21  return lti_complex_t{res.real(), res.imag()};
22 }
23 
24 inline lti_complex_t B0iC(
25  int id,
26  lti_complex_t p1,
27  lti_complex_t m1,
28  lti_complex_t m2,
29  [[maybe_unused]] lti_real_t const &eps = 0.
30  )
31 {
32  const std::complex<lti_real_t> res = ::B0iC(
33  id,
34  ensure_std_complex(p1),
35  ensure_std_complex(m1),
36  ensure_std_complex(m2)
37  );
38  return lti_complex_t{res.real(), res.imag()};
39 }
40 
41 inline lti_complex_t C0iC(
42  int id,
43  lti_complex_t p1,
44  lti_complex_t p2,
45  lti_complex_t p3,
46  lti_complex_t m1,
47  lti_complex_t m2,
48  lti_complex_t m3,
49  lti_real_t const &eps = 0.
50  )
51 {
52  if (rescaleIntegral) {
53  auto min = 10*minScale; // Ensure initial value higher than minscale
54  for (const auto &value: {p1, p2, p3, m1, m2, m3}) {
55  const auto re = abs_re(value);
56  if (re != 0 && re < min)
57  min = re;
58  }
59  if (min < minScale) {
60  const auto scale = regScale / min;
61  return rescaled(
62  scale, scaleFactorC(id, scale), lt::C0iC,
63  id, eps, p1, p2, p3, m1, m2, m3);
64  }
65  }
66  regulateC(p1, p2, p3, m1, m2, m3, eps);
67  const std::complex<lti_real_t> res = ::C0iC(
68  id,
69  ensure_std_complex(p1),
70  ensure_std_complex(p2),
71  ensure_std_complex(p3),
72  ensure_std_complex(m1),
73  ensure_std_complex(m2),
74  ensure_std_complex(m3)
75  );
76  return lti_complex_t{res.real(), res.imag()};
77 }
78 
79 inline lti_complex_t D0iC(
80  int id,
81  lti_complex_t p1,
82  lti_complex_t p2,
83  lti_complex_t p3,
84  lti_complex_t p4,
85  lti_complex_t p5,
86  lti_complex_t p6,
87  lti_complex_t m1,
88  lti_complex_t m2,
89  lti_complex_t m3,
90  lti_complex_t m4,
91  [[maybe_unused]] lti_real_t const &eps = 0.
92  )
93 {
94  const std::complex<lti_real_t> res = ::D0iC(
95  id,
96  ensure_std_complex(p1),
97  ensure_std_complex(p2),
98  ensure_std_complex(p3),
99  ensure_std_complex(p4),
100  ensure_std_complex(p5),
101  ensure_std_complex(p6),
102  ensure_std_complex(m1),
103  ensure_std_complex(m2),
104  ensure_std_complex(m3),
105  ensure_std_complex(m4)
106  );
107  return lti_complex_t{res.real(), res.imag()};
108 }
109 
110 inline lti_complex_t E0iC(
111  int id,
112  lti_complex_t p1,
113  lti_complex_t p2,
114  lti_complex_t p3,
115  lti_complex_t p4,
116  lti_complex_t p5,
117  lti_complex_t p6,
118  lti_complex_t p7,
119  lti_complex_t p8,
120  lti_complex_t p9,
121  lti_complex_t p10,
122  lti_complex_t m1,
123  lti_complex_t m2,
124  lti_complex_t m3,
125  lti_complex_t m4,
126  lti_complex_t m5,
127  [[maybe_unused]] lti_real_t const &eps = 0.
128  )
129 {
130  const std::complex<lti_real_t> res = ::E0iC(
131  id,
132  ensure_std_complex(p1),
133  ensure_std_complex(p2),
134  ensure_std_complex(p3),
135  ensure_std_complex(p4),
136  ensure_std_complex(p5),
137  ensure_std_complex(p6),
138  ensure_std_complex(p7),
139  ensure_std_complex(p8),
140  ensure_std_complex(p9),
141  ensure_std_complex(p10),
142  ensure_std_complex(m1),
143  ensure_std_complex(m2),
144  ensure_std_complex(m3),
145  ensure_std_complex(m4),
146  ensure_std_complex(m5)
147  );
148 
149  return lti_complex_t{res.real(), res.imag()};
150 }
151 
152 }
Definition: looptools_interface.h:5