23 #ifndef FEYNMANINTEGRAL_H_INCLUDED 24 #define FEYNMANINTEGRAL_H_INCLUDED 30 enum class IntegralType {
47 void printLooptoolsId(IntegralType type,
51 void printLooptoolsId_A(
int id,
54 void printLooptoolsId_B(
int id,
57 void printLooptoolsId_C(
int id,
60 void printLooptoolsId_D(
int id,
63 void printLooptoolsId_E(
int id,
66 inline constexpr
int loopToolsStep = 3;
68 int loopToolsBegin(IntegralType type,
73 std::vector<size_t>
const &indices
77 std::vector<size_t>
const &indices
81 std::vector<size_t>
const &indices
85 std::vector<size_t>
const &indices
89 std::vector<size_t>
const &indices
92 size_t nPropagatorForIntegral(IntegralType type);
94 size_t nIndicesForIntegral(IntegralType type);
96 size_t nArgumentsForIntegral(IntegralType type);
98 csl::Expr getDivergentFactor(IntegralType type,
100 std::vector<csl::Expr>
const& arguments);
110 inline static bool evaluateIntegrals =
false;
122 std::vector<csl::Expr>
const &factor,
123 std::vector<csl::Expr>
const &momentum,
124 std::vector<csl::Expr>
const &mass,
125 std::vector<csl::Index>
const &indices,
129 static void applyIndices(std::vector<csl::Expr>& momentum);
133 std::vector<csl::Expr>
const& momentum,
134 std::vector<csl::Index>
const& indices,
135 std::vector<size_t> tensorPos);
137 static csl::Expr computeFinalIntegralDecomposition(
139 std::vector<csl::Expr>
const& momentum,
140 std::vector<csl::Index>
const& indices,
141 std::vector<csl::Expr>
const& arguments);
144 std::vector<csl::Expr>
const& factors,
145 std::vector<csl::Expr>
const& momentums,
146 std::vector<csl::Expr>
const& masses,
147 std::vector<csl::Index>
const& indices);
150 std::vector<csl::Expr>
const& factors,
151 std::vector<csl::Expr>
const& momentums,
152 std::vector<csl::Expr>
const& masses,
153 std::vector<csl::Index>
const& indices);
156 std::vector<csl::Expr>
const& factors,
157 std::vector<csl::Expr>
const& momentums,
158 std::vector<csl::Expr>
const& masses,
159 std::vector<csl::Index>
const& indices);
162 std::vector<csl::Expr>
const& factors,
163 std::vector<csl::Expr>
const& momentums,
164 std::vector<csl::Expr>
const& masses,
165 std::vector<csl::Index>
const& indices);
168 std::vector<csl::Expr>
const& factors,
169 std::vector<csl::Expr>
const& momentums,
170 std::vector<csl::Expr>
const& masses,
171 std::vector<csl::Index>
const& indices);
174 std::vector<csl::Expr>
const& factors,
175 std::vector<csl::Expr>
const& momentums,
176 std::vector<csl::Expr>
const& masses,
177 std::vector<csl::Index>
const& indices);
179 static void removeExternalMomenta(
186 std::vector<csl::Expr>
const& t_argument);
190 std::vector<csl::Expr>
const &t_argument,
191 std::vector<size_t>
const &t_indices);
195 int getLoopToolsID()
const {
199 IntegralType getIntegralType()
const {
203 std::vector<size_t>
const &getIntegralIndices()
const {
204 return integralIndices;
207 bool isIndexed()
const override {
return false; }
209 void print(
int mode = 0,
210 std::ostream& out = std::cout,
211 bool lib =
false)
const override;
213 std::string printLaTeX(
int mode = 0)
const override;
215 void printLib(
int mode,
216 std::ostream& out)
const;
220 std::optional<csl::Expr> evaluate(csl::eval::mode user_mode
221 = csl::eval::base)
const override;
223 csl::unique_Expr copy_unique()
const override;
229 bool operator==(csl::Expr_info other)
const override;
231 bool operator<(csl::Expr_info other)
const override;
235 std::vector<csl::Expr> getMomenta()
const;
237 std::vector<csl::Expr> getMasses()
const;
241 std::pair<csl::Expr, csl::Expr> getPair(
size_t i)
const;
243 bool compare(
size_t i,
size_t j)
const;
249 std::vector<csl::Index>
const &indices
252 std::complex<double> evaluateIntegral()
const;
260 std::vector<size_t> integralIndices;
263 csl::Expr feynmanintegral_s(IntegralType t_type,
265 std::vector<csl::Expr>
const& t_argument);
267 csl::Expr feynmanintegral_s(IntegralType t_type,
269 std::vector<csl::Expr>
const &t_argument,
270 std::vector<size_t>
const &indices);
272 template<
class IntegralID>
273 csl::Expr feynmanintegral_s(IntegralType t_type,
274 IntegralID t_looptoolsId,
275 std::vector<csl::Expr>
const& t_argument)
277 return feynmanintegral_s(t_type,
278 static_cast<int>(t_looptoolsId),
282 enum class IntegralID_E {
456 enum class IntegralID_D {
544 enum class IntegralID_C {
573 enum class IntegralID_B{
585 enum class IntegralID_A {
std::ostream & operator<<(std::ostream &fout, csl::Type type)
Namespace of MARTY.
Definition: 2HDM.h:31
Definition: feynmanIntegral.h:106
bool operator==(const Expr &a, const Expr &b)
bool operator<(const Expr &a, const Expr &b)