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

Description

Cosine distribution.

Definition at line 197 of file RangedDistributions.h.

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

Public Member Functions

 RangedDistributionCosine ()
 
 RangedDistributionCosine (size_t n_samples, double sigma_factor, const RealLimits &limits=RealLimits::limitless())
 
 RangedDistributionCosine (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). More...
 
 ~RangedDistributionCosine () override=default
 
RangedDistributionCosineclone () const override
 
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...
 
std::string name () const override
 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

IDistribution1Ddistribution_impl (double mean, double stddev) const override
 Returns underlying IDistribution1D object. More...
 

Private Member Functions

void checkInitialization ()
 

Private Attributes

RealLimits m_limits
 
size_t m_n_samples
 
double m_sigma_factor
 

Constructor & Destructor Documentation

◆ RangedDistributionCosine() [1/3]

RangedDistributionCosine::RangedDistributionCosine ( )

Definition at line 278 of file RangedDistributions.cpp.

280 {
281 }

◆ RangedDistributionCosine() [2/3]

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

Definition at line 283 of file RangedDistributions.cpp.

285  : IRangedDistribution(n_samples, sigma_factor, limits)
286 {
287 }
RealLimits limits() const
Returns current limits of the distribution.

◆ RangedDistributionCosine() [3/3]

RangedDistributionCosine::RangedDistributionCosine ( 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 289 of file RangedDistributions.cpp.

291  : IRangedDistribution(n_samples, sigma_factor, min, max)
292 {
293 }

◆ ~RangedDistributionCosine()

RangedDistributionCosine::~RangedDistributionCosine ( )
overridedefault

Member Function Documentation

◆ checkInitialization()

void IRangedDistribution::checkInitialization ( )
privateinherited

Definition at line 103 of file RangedDistributions.cpp.

104 {
105  if (m_n_samples < 1u)
106  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: number of "
107  "samples shall be positive");
108 
109  if (m_sigma_factor < 0.0)
110  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: sigma factor "
111  "shall be non-negative.");
112 
114  return;
115 
117  throw std::runtime_error("Error in IRangedDistribution::checkInitialization: lower limit "
118  "shall not exceed the upper one.");
119 }
bool hasLowerAndUpperLimits() const
if has lower and upper limit
Definition: RealLimits.cpp:88
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:71
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:49

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

Referenced by IRangedDistribution::IRangedDistribution().

Here is the call graph for this function:

◆ clone()

RangedDistributionCosine * RangedDistributionCosine::clone ( ) const
overridevirtual

Implements IRangedDistribution.

Definition at line 295 of file RangedDistributions.cpp.

296 {
297  return makeCopy(*this).release();
298 }

◆ distribution()

IDistribution1D * IRangedDistribution::distribution ( double  mean,
double  stddev 
) const
inherited

Public interface function to underlying IDistribution1D object.

Definition at line 95 of file RangedDistributions.cpp.

96 {
97  if (stddev < 0.0)
98  throw std::runtime_error(
99  "Error in IRangedDistribution::distribution: standard deviation is less than zero");
100  return distribution_impl(mean, stddev);
101 }
virtual IDistribution1D * distribution_impl(double mean, double stddev) const =0
Returns underlying IDistribution1D object.

References IRangedDistribution::distribution_impl().

Referenced by IRangedDistribution::generateSamples().

Here is the call graph for this function:

◆ distribution_impl()

IDistribution1D * RangedDistributionCosine::distribution_impl ( double  mean,
double  stddev 
) const
overrideprotectedvirtual

Returns underlying IDistribution1D object.

Implements IRangedDistribution.

Definition at line 305 of file RangedDistributions.cpp.

306 {
307  return new DistributionCosine(mean, stddev);
308 }
Cosine distribution.

◆ generateSamples() [1/2]

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

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

Definition at line 79 of file RangedDistributions.cpp.

81 {
82  if (mean.size() != stddev.size())
83  throw std::runtime_error("Error in IRangedDistribution::generateSamples: mean and variance "
84  "vectors shall be of the same size");
85 
86  const size_t size = mean.size();
87 
88  std::vector<std::vector<ParameterSample>> result;
89  result.resize(size);
90  for (size_t i = 0; i < size; ++i)
91  result[i] = generateSamples(mean[i], stddev[i]);
92  return result;
93 }
std::vector< ParameterSample > generateSamples(double mean, double stddev) const

References IRangedDistribution::generateSamples().

Here is the call graph for this function:

◆ generateSamples() [2/2]

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

Definition at line 65 of file RangedDistributions.cpp.

66 {
67  auto generator = distribution(mean, stddev);
68  if (!generator->isDelta())
69  return generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits);
70 
71  // handling the case of delta distributions
72  auto samples = generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits);
73  ParameterSample& sample = samples[0]; // there is only one element in the vector
74  sample.weight = 1.0 / m_n_samples;
75  return std::vector<ParameterSample>(m_n_samples, sample);
76 }
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 IRangedDistribution::distribution(), IRangedDistribution::m_limits, IRangedDistribution::m_n_samples, IRangedDistribution::m_sigma_factor, and ParameterSample::weight.

Referenced by IRangedDistribution::generateSamples().

Here is the call graph for this function:

◆ limits()

RealLimits IRangedDistribution::limits ( ) const
inlineinherited

Returns current limits of the distribution.

Definition at line 63 of file RangedDistributions.h.

63 { return m_limits; }

References IRangedDistribution::m_limits.

Referenced by Py::Fmt2::printRangedDistribution(), and IRangedDistribution::setLimits().

◆ name()

std::string RangedDistributionCosine::name ( ) const
overridevirtual

Returns distribution name for python-formatted text.

Implements IRangedDistribution.

Definition at line 300 of file RangedDistributions.cpp.

301 {
302  return "RangedDistributionCosine";
303 }

◆ nSamples()

size_t IRangedDistribution::nSamples ( ) const
inlineinherited

Returns number of samples to generate.

Definition at line 67 of file RangedDistributions.h.

67 { return m_n_samples; }

References IRangedDistribution::m_n_samples.

Referenced by Py::Fmt2::printRangedDistribution().

◆ setLimits()

void IRangedDistribution::setLimits ( const RealLimits limits)
inlineinherited

Definition at line 71 of file RangedDistributions.h.

71 { m_limits = limits; }

References IRangedDistribution::limits(), and IRangedDistribution::m_limits.

Here is the call graph for this function:

◆ sigmaFactor()

double IRangedDistribution::sigmaFactor ( ) const
inlineinherited

Returns sigma factor to use during sampling.

Definition at line 65 of file RangedDistributions.h.

65 { return m_sigma_factor; }

References IRangedDistribution::m_sigma_factor.

Referenced by Py::Fmt2::printRangedDistribution().

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

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

Definition at line 32 of file ICloneable.h.

Member Data Documentation

◆ m_limits

◆ m_n_samples

size_t IRangedDistribution::m_n_samples
privateinherited

◆ m_sigma_factor

double IRangedDistribution::m_sigma_factor
privateinherited

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