Sector decomposition
|
Classes | |
class | basic_multi_index |
class | basic_sector_decomposition |
class | exponent |
class | integrand |
class | integration_data |
class | monte_carlo_parameters |
class | monte_carlo_result |
class | multi_index_counter |
class | multi_index_counter_indv |
class | multi_index_ordered |
class | polyhedra |
Functions | |
monte_carlo_result | do_sector_decomposition (const integration_data &global_data, const integrand &integrand_in, const monte_carlo_parameters &mc_parameters, int verbose_level) |
monte_carlo_result | do_sector_decomposition_simplex (const integration_data &global_data, const integrand &integrand_in, const monte_carlo_parameters &mc_parameters, int verbose_level) |
monte_carlo_result | do_sector_decomposition_cube (const integration_data &global_data, const integrand &integrand_in, const monte_carlo_parameters &mc_parameters, int verbose_level) |
monte_carlo_result | do_sector_decomposition_cube_coordinate_subspace (const integration_data &global_data, const integrand &integrand_in, const monte_carlo_parameters &mc_parameters, int verbose_level) |
std::ostream & | operator<< (std::ostream &os, const integration_data &arg) |
std::ostream & | operator<< (std::ostream &os, const exponent &arg) |
std::ostream & | operator<< (std::ostream &os, const integrand &arg) |
std::string | itos (int arg) |
monte_carlo_result | intnum (GiNaC::ex expr, const std::vector< GiNaC::ex > &x, const std::vector< double > &xmin, const std::vector< double > &xmax, const monte_carlo_parameters &mc_parameters, int verbose_level) |
monte_carlo_result | intnum (GiNaC::ex expr, const std::vector< GiNaC::ex > &x, const monte_carlo_parameters &mc_parameters, int verbose_level) |
monte_carlo_result | intnum_imp (GiNaC::ex expr, size_t dimension, double *xmin, double *xmax, const monte_carlo_parameters &mc_parameters, int verbose_level) |
std::ostream & | operator<< (std::ostream &os, const basic_multi_index &v) |
std::ostream & | operator<< (std::ostream &os, const multi_index_ordered &v) |
std::ostream & | operator<< (std::ostream &os, const multi_index_counter &v) |
std::ostream & | operator<< (std::ostream &os, const multi_index_counter_indv &v) |
std::ostream & | operator<< (std::ostream &os, const polyhedra &arg) |
Variables | |
unsigned | CHOICE_STRATEGY = STRATEGY_C |
global variable for the choice of the strategy | |
GiNaC::symbol | Infinity = GiNaC::symbol("Infinity") |
a symbol to denote infinity | |
All classes and functions of the "Sector Decomposition" package are defined in the sector_decomposition namespace.
monte_carlo_result do_sector_decomposition | ( | const integration_data & | global_data, |
const integrand & | integrand_in, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
The main routine to compute an integral of the form
The integration is over the standard simplex:
For integration over the standard hyper-cube, the function do_sector_decomposition_cube can be used.
The arguments are as follows:
monte_carlo_result do_sector_decomposition(const integration_data & global_data, const integrand & integrand_in, const monte_carlo_parameters & mc_parameters, int verbose_level = 0);
The input are three structures, integration_data, integrand, monte_carlo_parameters, which are described in detail below, and an optional parameter verbose_level. With the help of the optional parameter verbose_level one can choose the amount of information the program prints out during the run. The function returns a structure monte_carlo_result, which again is described below.
The class integration_data contains the data which will not be modified by the algorithm for the sector decomposition. It has a constructor of the form
integration_data(const std::vector<GiNaC::ex> & list_feynman_parameter, GiNaC::ex epsilon, int order);
where list_feynman_parameter is a vector holding the symbols of the Feynman parameters, epsilon is the symbol of the expansion parameter and order defines which term of the Laurent series in
The integrand
is encoded in the class integrand. This class has a constructor of the form
integrand(const std::vector<exponent> & nu, const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c);
where nu is a vector of size
exponent(int a, int b);
Here
exponent(GiNaC::ex order_0, GiNaC::ex order_1);
has to be used. In this case order_0 and order_1 have to be of type GiNaC::numeric.
In applications one encounters often integrands where the explicit powers of the Feynman parameters are missing. For integrands of the form
there is a simpler constructor of the form
integrand(size_t n, const std::vector<GiNaC::ex> & poly_list, const std::vector<exponent> & c);
Here,
Parameters associated to the Monte Carlo integration are specified with the help of the class monte_carlo_parameters. This class is constructed as follows:
monte_carlo_parameters(size_t iterations_low, size_t iterations_high, size_t calls_low, size_t calls_high);
The program uses the Vegas-algorithm based on an adaptive grid. The program does first a Monte Carlo integration with iterations_low iterations with calls_low function evaluations each. This phase is solely used to adapt the grid. The numerical result of the Monte Carlo integration is then obtained from the second stage with iterations_high iterations of calls_high function calls each.
The main function do_sector_decomposition returns the numerical results of the Monte Carlo integration in the class monte_carlo_result. This class has the methods
class monte_carlo_result { public : double get_mean(void) const; double get_error(void) const; double get_chi_squared(void) const; };
which return the mean value of the Monte Carlo integration, the error estimate and the associated
The strategy which is used for the iterated sector decomposition can be selected with the global variable sector_decomposition::CHOICE_STRATEGY. Available keywords are STRATEGY_A, STRATEGY_B, STRATEGY_C, STRATEGY_X and STRATEGY_Y. The strategies A, B and C are guaranteed to terminate. Strategies X and Y are heuristic strategies, for which there is no proof that they terminate. They are included, since in the cases where they terminate the number of generated sub-sectors tends to be smaller than the corresponding numbers for the other strategies. The default is strategy C.
The function do_sector_decomposition is just the entry point and calls the function do_sector_decomposition_simplex, which in turn delegates evaluation to a function object of type basic_sector_decomposition.
monte_carlo_result do_sector_decomposition_cube | ( | const integration_data & | global_data, |
const integrand & | integrand_in, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
Entry point for the integration over the standard hyper-cube.
This routine computes an integral of the form
The integration is over the standard hyper-cube:
The polynomials
If the polynomials vanish only, if one or more variables are zero, the funtion do_sector_decomposition_cube_coordinate_subspace can be used, which is more efficient for this case.
The arguments of the function are as for the function do_sector_decomposition.
monte_carlo_result do_sector_decomposition_cube_coordinate_subspace | ( | const integration_data & | global_data, |
const integrand & | integrand_in, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
Entry point for the integration over the standard hyper-cube, with singularities only on coordinate subspaces.
This routine computes an integral of the form
The integration is over the standard hyper-cube:
The polynomials
The arguments of the function are as for the function do_sector_decomposition.
monte_carlo_result do_sector_decomposition_simplex | ( | const integration_data & | global_data, |
const integrand & | integrand_in, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
Entry point for the integration over the standard simplex.
The function do_sector_decomposition calls do_sector_decomposition_simplex.
The arguments of the function are as for the function do_sector_decomposition.
monte_carlo_result intnum | ( | GiNaC::ex | expr, |
const std::vector< GiNaC::ex > & | x, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
A simplified entry point for the Monte Carlo integration, where the integration is over the hypercube.
A simplified entry point for the Monte Carlo integration, where the integration is over the hypercube.
monte_carlo_result intnum | ( | GiNaC::ex | expr, |
const std::vector< GiNaC::ex > & | x, | ||
const std::vector< double > & | xmin, | ||
const std::vector< double > & | xmax, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
This function is the entry point for the numerical Monte Carlo integration.
The entry point for the Monte Carlo integration.
monte_carlo_result intnum_imp | ( | GiNaC::ex | expr, |
size_t | dimension, | ||
double * | xmin, | ||
double * | xmax, | ||
const monte_carlo_parameters & | mc_parameters, | ||
int | verbose_level | ||
) |
The implementation of the Monte Carlo integration.
std::string itos | ( | int | arg | ) |
Convert an integer into a string
std::ostream & operator<< | ( | std::ostream & | os, |
const basic_multi_index & | v | ||
) |
Output operator. A multi_index prints out as basic_multi_index(
std::ostream & operator<< | ( | std::ostream & | os, |
const exponent & | arg | ||
) |
Output. Prints out the exponent in the form exponent(order_0, order_1).
std::ostream & operator<< | ( | std::ostream & | os, |
const integrand & | arg | ||
) |
Output. Prints out the data of the class integrand without reference to a class integration_data.
std::ostream & operator<< | ( | std::ostream & | os, |
const integration_data & | arg | ||
) |
Output. Prints out the Feynman parameters, the expansion parameter and the order.
std::ostream & operator<< | ( | std::ostream & | os, |
const multi_index_counter & | v | ||
) |
Output operator. A multi_index_counter prints out as multi_index_counter(
std::ostream & operator<< | ( | std::ostream & | os, |
const multi_index_counter_indv & | v | ||
) |
Output operator. A multi_index_counter_indv prints out as multi_index_counter_indv(
std::ostream & operator<< | ( | std::ostream & | os, |
const multi_index_ordered & | v | ||
) |
Output operator. A multi_index_ordered prints out as multi_index_ordered(
std::ostream & operator<< | ( | std::ostream & | os, |
const polyhedra & | arg | ||
) |
Output. Prints out the index vector and the coordinates.