BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
IRangedDistribution Class Referenceabstract

Interface for one-dimensional ranged distributions. More...

Inheritance diagram for IRangedDistribution:
[legend]
Collaboration diagram for IRangedDistribution:
[legend]

Public Member Functions

 IRangedDistribution ()
 
 IRangedDistribution (size_t n_samples, double sigma_factor, const RealLimits &limits=RealLimits::limitless())
 
 IRangedDistribution (size_t n_samples, double sigma_factor, double min, double max)
 Initializes Ranged distribution with given number of samples, sigma factor (range in standard deviations to take into account during sample generation) and limits (either RealLimits object or just min and max limits). More...
 
 ~IRangedDistribution () override
 
IRangedDistributionclone () const override=0
 
std::unique_ptr< IDistribution1Ddistribution (double mean, double stddev) const
 Public interface function to underlying IDistribution1D object. More...
 
std::vector< std::vector< ParameterSample > > generateSamples (const std::vector< double > &mean, const std::vector< double > &stddev) const
 Generates list of sampled values with their weights from given means and standard deviations. More...
 
std::vector< ParameterSamplegenerateSamples (double mean, double stddev) const
 
RealLimits limits () const
 Returns current limits of the distribution. More...
 
virtual std::string name () const =0
 Returns distribution name for python-formatted text. More...
 
size_t nSamples () const
 Returns number of samples to generate. More...
 
void setLimits (const RealLimits &limits)
 
double sigmaFactor () const
 Returns sigma factor to use during sampling. More...
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

virtual std::unique_ptr< IDistribution1Ddistribution_impl (double mean, double stddev) const =0
 Returns underlying IDistribution1D object. More...
 

Private Member Functions

void checkInitialization ()
 

Private Attributes

RealLimits m_limits
 
size_t m_n_samples
 
double m_sigma_factor
 

Detailed Description

Interface for one-dimensional ranged distributions.

All derived distributions allow for generating samples in-place for known mean and standard deviation (except for RangedDistributionLorentz which uses median and hwhm).

Definition at line 38 of file RangedDistributions.h.

Constructor & Destructor Documentation

◆ IRangedDistribution() [1/3]

IRangedDistribution::IRangedDistribution ( )

Definition at line 35 of file RangedDistributions.cpp.

37 {
39 }
static RealLimits limitless()
Creates an object withoud bounds (default)
Definition: RealLimits.cpp:130

References checkInitialization().

Here is the call graph for this function:

◆ IRangedDistribution() [2/3]

IRangedDistribution::IRangedDistribution ( size_t  n_samples,
double  sigma_factor,
const RealLimits limits = RealLimits::limitless() 
)

Definition at line 41 of file RangedDistributions.cpp.

43  : m_n_samples(n_samples), m_sigma_factor(sigma_factor), m_limits(limits)
44 {
46 }
RealLimits limits() const
Returns current limits of the distribution.

References checkInitialization().

Here is the call graph for this function:

◆ IRangedDistribution() [3/3]

IRangedDistribution::IRangedDistribution ( size_t  n_samples,
double  sigma_factor,
double  min,
double  max 
)

Initializes Ranged distribution with given number of samples, sigma factor (range in standard deviations to take into account during sample generation) and limits (either RealLimits object or just min and max limits).

By default n_samples = 5, sigma_factor = 2.0, while the limits are (-inf, +inf).

Definition at line 48 of file RangedDistributions.cpp.

50  : m_n_samples(n_samples), m_sigma_factor(sigma_factor), m_limits(RealLimits::limited(min, max))
51 {
53 }
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:125

References checkInitialization().

Here is the call graph for this function:

◆ ~IRangedDistribution()

IRangedDistribution::~IRangedDistribution ( )
overridedefault

Member Function Documentation

◆ checkInitialization()

void IRangedDistribution::checkInitialization ( )
private

Definition at line 95 of file RangedDistributions.cpp.

96 {
97  if (m_n_samples < 1u)
98  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: number of "
99  "samples shall be positive");
100 
101  if (m_sigma_factor < 0.0)
102  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: sigma factor "
103  "shall be non-negative.");
104 
106  return;
107 
109  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: lower limit "
110  "shall not exceed the upper one.");
111 }
bool hasLowerAndUpperLimits() const
if has lower and upper limit
Definition: RealLimits.cpp:79
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:62
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:40

References RealLimits::hasLowerAndUpperLimits(), RealLimits::lowerLimit(), m_limits, m_n_samples, m_sigma_factor, and RealLimits::upperLimit().

Referenced by IRangedDistribution().

Here is the call graph for this function:

◆ clone()

IRangedDistribution* IRangedDistribution::clone ( ) const
overridepure virtual

◆ distribution()

std::unique_ptr< IDistribution1D > IRangedDistribution::distribution ( double  mean,
double  stddev 
) const

Public interface function to underlying IDistribution1D object.

Definition at line 87 of file RangedDistributions.cpp.

88 {
89  if (stddev < 0.0)
90  throw std::runtime_error(
91  "Error in IRangedDistribution::distribution: standard deviation is less than zero");
92  return distribution_impl(mean, stddev);
93 }
virtual std::unique_ptr< IDistribution1D > distribution_impl(double mean, double stddev) const =0
Returns underlying IDistribution1D object.

References distribution_impl().

Referenced by generateSamples().

Here is the call graph for this function:

◆ distribution_impl()

virtual std::unique_ptr<IDistribution1D> IRangedDistribution::distribution_impl ( double  mean,
double  stddev 
) const
protectedpure virtual

◆ generateSamples() [1/2]

std::vector< std::vector< ParameterSample > > IRangedDistribution::generateSamples ( const std::vector< double > &  mean,
const std::vector< double > &  stddev 
) const

Generates list of sampled values with their weights from given means and standard deviations.

Definition at line 71 of file RangedDistributions.cpp.

73 {
74  if (mean.size() != stddev.size())
75  throw std::runtime_error("Error in IRangedDistribution::generateSamples: mean and variance "
76  "vectors shall be of the same size");
77 
78  const size_t size = mean.size();
79 
80  std::vector<std::vector<ParameterSample>> result;
81  result.resize(size);
82  for (size_t i = 0; i < size; ++i)
83  result[i] = generateSamples(mean[i], stddev[i]);
84  return result;
85 }
std::vector< ParameterSample > generateSamples(double mean, double stddev) const

References generateSamples().

Here is the call graph for this function:

◆ generateSamples() [2/2]

std::vector< ParameterSample > IRangedDistribution::generateSamples ( double  mean,
double  stddev 
) const

Definition at line 57 of file RangedDistributions.cpp.

58 {
59  auto generator = distribution(mean, stddev);
60  if (!generator->isDelta())
61  return generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits);
62 
63  // handling the case of delta distributions
64  auto samples = generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits);
65  ParameterSample& sample = samples[0]; // there is only one element in the vector
66  sample.weight = 1.0 / m_n_samples;
67  return std::vector<ParameterSample>(m_n_samples, sample);
68 }
std::unique_ptr< IDistribution1D > distribution(double mean, double stddev) const
Public interface function to underlying IDistribution1D object.
A parameter value with a weight, as obtained when sampling from a distribution.

References distribution(), m_limits, m_n_samples, m_sigma_factor, and ParameterSample::weight.

Referenced by generateSamples().

Here is the call graph for this function:

◆ limits()

RealLimits IRangedDistribution::limits ( ) const
inline

Returns current limits of the distribution.

Definition at line 64 of file RangedDistributions.h.

64 { return m_limits; }

References m_limits.

Referenced by pyfmt2::printRangedDistribution(), and setLimits().

◆ name()

virtual std::string IRangedDistribution::name ( ) const
pure virtual

◆ nSamples()

size_t IRangedDistribution::nSamples ( ) const
inline

Returns number of samples to generate.

Definition at line 68 of file RangedDistributions.h.

68 { return m_n_samples; }

References m_n_samples.

Referenced by pyfmt2::printRangedDistribution().

◆ setLimits()

void IRangedDistribution::setLimits ( const RealLimits limits)
inline

Definition at line 72 of file RangedDistributions.h.

72 { m_limits = limits; }

References limits(), and m_limits.

Here is the call graph for this function:

◆ sigmaFactor()

double IRangedDistribution::sigmaFactor ( ) const
inline

Returns sigma factor to use during sampling.

Definition at line 66 of file RangedDistributions.h.

66 { return m_sigma_factor; }

References m_sigma_factor.

Referenced by pyfmt2::printRangedDistribution().

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 34 of file ICloneable.h.

Member Data Documentation

◆ m_limits

RealLimits IRangedDistribution::m_limits
private

Definition at line 87 of file RangedDistributions.h.

Referenced by checkInitialization(), generateSamples(), limits(), and setLimits().

◆ m_n_samples

size_t IRangedDistribution::m_n_samples
private

Definition at line 85 of file RangedDistributions.h.

Referenced by checkInitialization(), generateSamples(), and nSamples().

◆ m_sigma_factor

double IRangedDistribution::m_sigma_factor
private

Definition at line 86 of file RangedDistributions.h.

Referenced by checkInitialization(), generateSamples(), and sigmaFactor().


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