BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
DistributionHandler Class Reference

Description

Provides the functionality to average over parameter distributions with weights.

Definition at line 29 of file DistributionHandler.h.

Collaboration diagram for DistributionHandler:
[legend]

Public Member Functions

 DistributionHandler ()
 
virtual ~DistributionHandler ()
 
void addParameterDistribution (const ParameterDistribution &par_distr)
 
void addParameterDistribution (const std::string &param_name, const IDistribution1D &distribution, size_t nbr_samples, double sigma_factor=0.0, const RealLimits &limits=RealLimits())
 add a sampled parameter distribution More...
 
void defineCallbackForDistribution (const ParameterDistribution *distribution, std::function< void(double)> fn)
 
const std::vector< ParameterDistribution > & getDistributions () const
 
size_t getTotalNumberOfSamples () const
 get the total number of parameter value combinations (product of the individual sizes of each parameter distribution More...
 
double setParameterValues (size_t index)
 set the parameter values of the simulation object to a specific combination of values, determined by the index (which must be smaller than the total number of combinations) and returns the weight associated with this combination of parameter values. initParameterLinks() has to be called before this! More...
 

Private Attributes

std::vector< std::vector< ParameterSample > > m_cached_samples
 
std::vector< ParameterDistributionm_distributions
 
size_t m_nbr_combinations
 
std::map< const ParameterDistribution *, std::function< void(double)> > m_setValueFunctions
 

Constructor & Destructor Documentation

◆ DistributionHandler()

DistributionHandler::DistributionHandler ( )

Definition at line 19 of file DistributionHandler.cpp.

21 {
22 }

◆ ~DistributionHandler()

DistributionHandler::~DistributionHandler ( )
virtualdefault

Member Function Documentation

◆ addParameterDistribution() [1/2]

void DistributionHandler::addParameterDistribution ( const ParameterDistribution par_distr)

Definition at line 26 of file DistributionHandler.cpp.

27 {
28  if (par_distr.nDraws() > 0) {
29  m_distributions.push_back(par_distr);
30  m_nbr_combinations *= par_distr.nDraws();
31  m_cached_samples.push_back(par_distr.generateSamples());
32  }
33 }
std::vector< std::vector< ParameterSample > > m_cached_samples
std::vector< ParameterDistribution > m_distributions
std::vector< ParameterSample > generateSamples() const
generate list of sampled values with their weight
size_t nDraws() const
get number of samples for this distribution

References ParameterDistribution::generateSamples(), m_cached_samples, m_distributions, m_nbr_combinations, and ParameterDistribution::nDraws().

Here is the call graph for this function:

◆ addParameterDistribution() [2/2]

void DistributionHandler::addParameterDistribution ( const std::string &  param_name,
const IDistribution1D distribution,
size_t  nbr_samples,
double  sigma_factor = 0.0,
const RealLimits limits = RealLimits() 
)

add a sampled parameter distribution

Referenced by ISimulation::addParameterDistribution().

◆ defineCallbackForDistribution()

void DistributionHandler::defineCallbackForDistribution ( const ParameterDistribution distribution,
std::function< void(double)>  fn 
)

Definition at line 69 of file DistributionHandler.cpp.

71 {
72  m_setValueFunctions[distribution] = fn;
73 }
std::map< const ParameterDistribution *, std::function< void(double)> > m_setValueFunctions

References m_setValueFunctions.

Referenced by ISimulation2D::initDistributionHandler().

◆ getDistributions()

const std::vector< ParameterDistribution > & DistributionHandler::getDistributions ( ) const

Definition at line 64 of file DistributionHandler.cpp.

65 {
66  return m_distributions;
67 }

References m_distributions.

Referenced by ISimulation::getDistributions(), and ISimulation2D::initDistributionHandler().

◆ getTotalNumberOfSamples()

size_t DistributionHandler::getTotalNumberOfSamples ( ) const

get the total number of parameter value combinations (product of the individual sizes of each parameter distribution

Definition at line 35 of file DistributionHandler.cpp.

36 {
37  return m_nbr_combinations;
38 }

References m_nbr_combinations.

Referenced by ISimulation::simulate().

◆ setParameterValues()

double DistributionHandler::setParameterValues ( size_t  index)

set the parameter values of the simulation object to a specific combination of values, determined by the index (which must be smaller than the total number of combinations) and returns the weight associated with this combination of parameter values. initParameterLinks() has to be called before this!

Definition at line 40 of file DistributionHandler.cpp.

41 {
42  ASSERT(index < m_nbr_combinations);
43 
44  size_t n_distr = m_distributions.size();
45  double weight = 1.0;
46  if (n_distr == 0)
47  return weight;
48  for (size_t param_index = n_distr - 1;; --param_index) {
49  const auto& distribution = m_distributions[param_index];
50  size_t remainder = index % distribution.nDraws();
51  index /= distribution.nDraws();
52 
53  // set the value in the ISimulation instance (via callback)
54  ASSERT(m_setValueFunctions.count(&distribution) == 1);
55  m_setValueFunctions[&distribution](m_cached_samples[param_index][remainder].value);
56 
57  weight *= m_cached_samples[param_index][remainder].weight;
58  if (param_index == 0)
59  break;
60  }
61  return weight;
62 }
#define ASSERT(condition)
Definition: Assert.h:45

References ASSERT, m_cached_samples, m_distributions, m_nbr_combinations, and m_setValueFunctions.

Referenced by ISimulation::simulate().

Member Data Documentation

◆ m_cached_samples

std::vector<std::vector<ParameterSample> > DistributionHandler::m_cached_samples
private

Definition at line 62 of file DistributionHandler.h.

Referenced by addParameterDistribution(), and setParameterValues().

◆ m_distributions

std::vector<ParameterDistribution> DistributionHandler::m_distributions
private

◆ m_nbr_combinations

size_t DistributionHandler::m_nbr_combinations
private

◆ m_setValueFunctions

std::map<const ParameterDistribution*, std::function<void(double)> > DistributionHandler::m_setValueFunctions
private

Definition at line 61 of file DistributionHandler.h.

Referenced by defineCallbackForDistribution(), and setParameterValues().


The documentation for this class was generated from the following files: