- added the possibility to stop remaining iterations based on the reached level of precision
- WARNING: removed global callback functions; each integrator now takes an optional fourth argument
which must be the callback function. The default callback function is the verbose one. Also
the function names of the previously called
_default_callback
functions to_silent_callback
- WARNING: changed the interfaces of the integrators
hep::plain
,hep::vegas
, andhep::multi_channel
in order to support the new checkpointing system (see below) - added checkpointing system: It is now possible to seamlessly resume an integration starting from a
previously generated checkpoint. Checkpoints are the new return type of every integrator and can
be easily saved to and read from text files; see
examples/checkpoints.cpp
- removed Google Test and replaced it by Catch2; this dependency should be downloaded automatically in the meson configuration step if it isn't present already
- WARNING: changed the interface of
hep::plain
andhep::mpi_plain
to perform multiple iterations rather than a single big one. Between two iterations a callback function is invoked, like with any other algorithm as well - WARNING: at this point the autotools-based build system is longer supported. Use the meson build system instead
- added support for two-dimensional distributions
- WARNING: the member function
mid_points
is now removed and replaced by the two free-standing functionsmid_points_x
andmid_points_y
- WARNING: changed some member functions of the classes
hep::distribution_parameters
andhep::distribution_result
. The changes were neccesary to support two-dimensional distributions.
- WARNING: changed the multi channel
map
function interface. This function must now also accept a vector of enabled channels
- added functionality to accumulate the results of distributions together with the integrated results
- changed the interfaces of functions that return accumulated results
- WARNING: removed the
parameters()
function inhep::projector
- added the possibility to use Meson for building/installing hep-mc
- fixed a bug that caused NaNs to slip through to the integrated result if they were coming from the point's weight
- it is now possible to disable channels by setting their weight to zero
- the function
multi_channel_verbose_callback
now prints an overview of the smallest and largest a-priori weights - the functions
multi_channel
andmpi_multi_channel
now accept an optional parametermin_calls_per_channel
that limits the a-priori weights to a smallest weight determined by a minimum number of calls. If set to zero (the default), this corresponds to the old behavior - WARNING: this version introduces many interface changes; if you used previous version of this library you must update your code accordingly
- implemented lazy evaluation of the weight for the multi channel integrator. This required to
change the interface of the map function which now must accept an additional parameter
action
that determines whether thecoordinates
or thedensities
must be calculated. This in turn enables the algorithm to skip the evaluation ofdensities
when the integrand returns a zero value - changed name of
density_function()
inhep::multi_channel_point
tomap()
- when calling the integration algorithms the numeric type must no longer be explicitly specified. The type information is now infered from the integrand
- renamed the class
vegas_iteration_result
tovegas_result
- completely changed the interfaces of all integrators; the functions that are integrated must now
be specified by using an
hep::integrand
orhep::multi_channel_integrand
which are obtained by usinghep::make_integrand
orhep::make_multi_channel_integrand
. This allows the library to support the generation of differential distributions for all integrators. If distributions should be generated, the integrands must accept a second parameter, a reference tohep::projector
, that takes care of the binning. The results of the distributions are captured in ahep::distribution_result
for each distribution hep::plain
now returns ahep::plain_result
which contains the results for possibly generated distributions- all
_result
classes excepthep::mc_result
derive now fromhep::plain_result
- encapsulated all members of the class
mc_point
and classes deriving from it - WARNING: interface changes to the class
mc_point
and all deriving classes; the member function does no longer include the averaging factor 1/N where N is the number of calls. If you used this member variable before, you MUST CHANGE YOUR CODE accordingly
- added multi channel MC integrator with example
- added a new MC helper function
hep::multi_channel_max_difference
that calculates the maximum difference for adaptive optimization in multi channel MC - added callbacks for multi channel MC analogous to the case for VEGAS
- added MPI parallelized routines for multi channel MC
- added new internal class
hep::kahan_accumulator
. This class takes care of the kahan summation - changed interfaces
mc_result
andvegas_iteration_result
: Their member variables are now properly encapsulated and accessible via public member functions. Furthermore, themc_result
now allows to obtainsum()
,sum_of_squares()
, andvariance()
- fixed compilation error
- removal of the
hep::mpi_single_generator
function. This is now on by default - the integration results are independent of the number of processes - temporary fix for single-precision floating point numbers that are
1.0f
and therefore outside of the half-open interval [0,1) - changed
hep::vegas_pdf
interface to use more descriptive member function names and moved the member functionicdf
outside the class - revamped documentation
- changed function names of
hep::cumulative_result
andhep::chi_square_dof
to the same names with a0
and1
at the end of their names;0
uses the same algorithm as before,1
weighs all results equally. The functionhep::cumulative_result
remains but requires an additional argument - added new global configuration function
hep::vegas_cuba_refinement()
that can be used to modify pdf refinement to use CUBA's method - removed
--enable-tests
configure switch. All external dependecies are gone and runningmake check
is sufficient now to run tests - changed interfaces
hep::cumulative_result
andhep::chi_square_dof
which no longer need to be called with the numeric type; the type is automatically determined by the iterators - support for MPI can now be enabled with
--enable-mpi
independently from the examples. If MPI is enabled, the MPI examples are built if examples are activated and the MPI tests are checked if tests are activated. The MPI headers are installed in any case because MPI must be explicity requested by includinghep/mc-mpi.hpp
- renamed
hep::linear_grid
tohep::vegas_pdf
and moved code from VEGAS into this class - add more unit tests, use Google Test as testing framework
- improved the MPI VEGAS example
- added new
hep::mpi_single_generator
function that adds the possibility to use the same random numbers for MPI and non-MPI routines. This makeshep::mpi_vegas
return the same numerical result ashep::vegas
- fixed integer overflow bug on 32-bit architectures that caused VEGAS' grid adjustment to fail when the number of calls surpassed 2^16
- modified VEGAS callback functions to return a boolean variable signaling to stop all remaining iterations
- modified the verbose callback function to print the error in percentage
- added two examples showing the advanced use of the VEGAS integration routine
- added a callback mechanism for the VEGAS routines; this enables one to print intermediate results from completed iterations
- added VEGAS routines that reuse existing grids
- grids can now be easily saved to files with iostream shift operators, see the example
examples/read_linear_grid.cpp
which can be used with the grid file inexamples/grid_file
- added MPI-parallelized PLAIN integration algorithm
- lowered dependency on autotools features
- added new functions for combining several VEGAS results
- added MPI-based paralellized VEGAS integration algorithm
- improved documentation
- improved VEGAS performance
- added PLAIN integrator
- added VEGAS integrator