Sector decomposition
integrand.h
Go to the documentation of this file.
1
8/*
9 * Copyright (C) 2007 Stefan Weinzierl
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */
25
26#ifndef __SECTOR_DECOMPOSITION_INTEGRAND_H__
27#define __SECTOR_DECOMPOSITION_INTEGRAND_H__
28
29#include <vector>
30#include <cstddef>
31#include <iostream>
32
33#include <ginac/ginac.h>
34
35#include "multi_index.h"
36
37namespace sector_decomposition {
38
52 {
53 // ctors
54 public:
55 integration_data(const std::vector<GiNaC::ex> & list_feynman_parameter, GiNaC::ex epsilon, int order);
56
57 // member functions
58 public:
59
60 // I/O operators
61 friend std::ostream & operator<< (std::ostream & os, const integration_data & arg);
62
63 // member variables
64 public:
66 size_t n;
68 std::vector<GiNaC::ex> list_feynman_parameter;
69
71 GiNaC::ex epsilon;
73 int order;
74 };
75
90 {
91 // ctors
92 public:
93 exponent();
94 exponent(int order_0, int order_1);
95 exponent(GiNaC::ex order_0, GiNaC::ex order_1);
96
97 // member functions
98 public:
99 GiNaC::ex operator[](size_t i) const;
100 exponent & sum_up(const exponent & other);
101 exponent & subtract_off(const exponent & other);
102 exponent & sum_up(const exponent & other, int lambda);
103 exponent & subtract_off(const exponent & other, int lambda);
104
105 int get_integer_part() const;
106
107 GiNaC::ex get_exponent(const integration_data & global_data) const;
108
109 bool is_not_zero() const;
110
111 // I/O operators
112 friend std::ostream & operator<< (std::ostream & os, const exponent & arg);
113
114 // member variables
115 public:
117 GiNaC::ex order_0;
119 GiNaC::ex order_1;
120 };
121
140 {
141 // ctors
142 public:
143 integrand();
144 integrand(const std::vector<size_t> & index, const std::vector<exponent> & nu,
145 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c);
146 integrand(const std::vector<exponent> & nu,
147 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c);
148 integrand(size_t n,
149 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c);
150 integrand(const std::vector<size_t> & index, const std::vector<exponent> & nu,
151 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c,
152 GiNaC::ex extra_factor);
153 integrand(const std::vector<size_t> & index, const std::vector<exponent> & nu,
154 GiNaC::ex extra_factor);
155 integrand(const std::vector<exponent> & nu,
156 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c,
157 GiNaC::ex extra_factor);
158 integrand(size_t n,
159 const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c,
160 GiNaC::ex extra_factor);
161
162 // member functions
163 public:
164 GiNaC::ex get_integrand(const integration_data & global_data) const;
165 GiNaC::ex get_weight_factor(const integration_data & global_data) const;
166 GiNaC::ex get_polynomials(const integration_data & global_data) const;
167 GiNaC::ex get_polynomials_without_exponent(const integration_data & global_data) const;
168 GiNaC::ex get_extra_factor() const;
169
170 bool check_homogeneous_polynomial(size_t k, const integration_data & global_data) const;
171 int get_homogeneous_degree(size_t k, const integration_data & global_data) const;
172 int get_degree(GiNaC::ex poly, const integration_data & global_data) const;
173 void make_homogeneous(size_t k, const integration_data & global_data);
174 void make_homogeneous(const integration_data & global_data);
175
176 void restrict_to_primary_sector(size_t k, const integration_data & global_data);
177 void restrict_to_primary_sector_cube(const multi_index_counter & index_set, const integration_data & global_data);
178
179 bool check_zero(size_t k, const multi_index_ordered & index_set, const integration_data & global_data) const;
180 bool check_zero(const multi_index_ordered & index_set, const integration_data & global_data) const;
181
182 int get_ldegree(size_t k, const multi_index_ordered & index_set, const integration_data & global_data) const;
183 int get_ldegree(const multi_index_ordered & index_set, const integration_data & global_data) const;
184
185 GiNaC::ex get_polyhedra_polynomial(const integration_data & global_data) const;
186 bool find_min_max(std::vector<size_t> & k_min_max_set, const integration_data & global_data);
187 bool get_S_strategy_B(std::vector<size_t> & index_set, const integration_data & global_data);
188 bool get_S_strategy_C(std::vector<size_t> & index_set, const integration_data & global_data);
189
190
191 void create_subsector(size_t k, const std::vector<size_t> & index_set, const integration_data & global_data);
192 void create_subsector(size_t k, const multi_index_ordered & index_set, const integration_data & global_data);
193
194 int get_subtraction_vector(std::vector<size_t> & subtr_vec, std::vector<size_t> & index_set) const;
195
196 GiNaC::ex taylor_term(GiNaC::ex polynomials, const multi_index_counter_indv & counter, const std::vector<size_t> & index_set, const integration_data & global_data) const;
197
198 void integrated_taylor_term(const multi_index_counter_indv & counter, const std::vector<size_t> & index_set, const integration_data & global_data);
199
200 // I/O operators
201 friend std::ostream & operator<< (std::ostream & os, const integrand & arg);
202
203 // member variables
204 public:
206 std::vector<size_t> index;
207
209 std::vector<exponent> weight;
210
212 std::vector<GiNaC::ex> polynomial_list;
214 std::vector<exponent> poly_exponent;
215
217 GiNaC::ex extra_factor;
218 };
219
220} // namespace sector_decomposition
221
222#endif // ndef __SECTOR_DECOMPOSITION_INTEGRAND_H__
223
Definition: integrand.h:90
GiNaC::ex order_1
term of order 1
Definition: integrand.h:119
friend std::ostream & operator<<(std::ostream &os, const exponent &arg)
Definition: integrand.cc:220
bool is_not_zero() const
Definition: integrand.cc:208
int get_integer_part() const
Definition: integrand.cc:179
exponent & subtract_off(const exponent &other)
Definition: integrand.cc:140
exponent()
Definition: integrand.cc:79
exponent & sum_up(const exponent &other)
Definition: integrand.cc:127
GiNaC::ex operator[](size_t i) const
Definition: integrand.cc:115
GiNaC::ex order_0
term of order 0
Definition: integrand.h:117
GiNaC::ex get_exponent(const integration_data &global_data) const
Definition: integrand.cc:198
Definition: integrand.h:140
int get_homogeneous_degree(size_t k, const integration_data &global_data) const
Definition: integrand.cc:485
void restrict_to_primary_sector(size_t k, const integration_data &global_data)
Definition: integrand.cc:568
void create_subsector(size_t k, const std::vector< size_t > &index_set, const integration_data &global_data)
Definition: integrand.cc:1157
bool get_S_strategy_B(std::vector< size_t > &index_set, const integration_data &global_data)
Definition: integrand.cc:902
bool find_min_max(std::vector< size_t > &k_min_max_set, const integration_data &global_data)
Definition: integrand.cc:803
void restrict_to_primary_sector_cube(const multi_index_counter &index_set, const integration_data &global_data)
Definition: integrand.cc:612
GiNaC::ex get_polyhedra_polynomial(const integration_data &global_data) const
Definition: integrand.cc:733
bool check_zero(size_t k, const multi_index_ordered &index_set, const integration_data &global_data) const
Definition: integrand.cc:658
void integrated_taylor_term(const multi_index_counter_indv &counter, const std::vector< size_t > &index_set, const integration_data &global_data)
Definition: integrand.cc:1280
GiNaC::ex get_polynomials(const integration_data &global_data) const
Definition: integrand.cc:413
GiNaC::ex get_weight_factor(const integration_data &global_data) const
Definition: integrand.cc:395
std::vector< size_t > index
a vector, serving as an index for integration_data::list_feynman_parameter
Definition: integrand.h:206
integrand()
Definition: integrand.cc:234
std::vector< exponent > weight
a vector holding the exponents of the single factors
Definition: integrand.h:209
GiNaC::ex get_integrand(const integration_data &global_data) const
Definition: integrand.cc:371
GiNaC::ex get_extra_factor() const
Definition: integrand.cc:451
GiNaC::ex taylor_term(GiNaC::ex polynomials, const multi_index_counter_indv &counter, const std::vector< size_t > &index_set, const integration_data &global_data) const
Definition: integrand.cc:1257
int get_ldegree(size_t k, const multi_index_ordered &index_set, const integration_data &global_data) const
Definition: integrand.cc:695
int get_degree(GiNaC::ex poly, const integration_data &global_data) const
Definition: integrand.cc:508
bool check_homogeneous_polynomial(size_t k, const integration_data &global_data) const
Definition: integrand.cc:461
std::vector< GiNaC::ex > polynomial_list
a vector holding the polynomials
Definition: integrand.h:212
std::vector< exponent > poly_exponent
a vector holding the exponents of the polynomials
Definition: integrand.h:214
friend std::ostream & operator<<(std::ostream &os, const integrand &arg)
Definition: integrand.cc:1310
void make_homogeneous(size_t k, const integration_data &global_data)
Definition: integrand.cc:526
GiNaC::ex get_polynomials_without_exponent(const integration_data &global_data) const
Definition: integrand.cc:433
bool get_S_strategy_C(std::vector< size_t > &index_set, const integration_data &global_data)
Definition: integrand.cc:1019
int get_subtraction_vector(std::vector< size_t > &subtr_vec, std::vector< size_t > &index_set) const
Definition: integrand.cc:1234
GiNaC::ex extra_factor
an extra prefactor
Definition: integrand.h:217
Definition: integrand.h:52
size_t n
the number of Feynman parameters
Definition: integrand.h:66
std::vector< GiNaC::ex > list_feynman_parameter
a vector holding the Feynman parameters as GiNaC::symbol
Definition: integrand.h:68
GiNaC::ex epsilon
the symbol of the expansion parameter
Definition: integrand.h:71
friend std::ostream & operator<<(std::ostream &os, const integration_data &arg)
Definition: integrand.cc:57
int order
order of the term in the Laurent series, which should be calculated
Definition: integrand.h:73
Definition: multi_index.h:125
Definition: multi_index.h:96
Definition: basic_sector_decomposition.cc:36