BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RangedDistributionCosine Class Reference

Cosine distribution. More...

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). More...
 
 ~RangedDistributionCosine () override=default
 
RangedDistributionCosineclone () const override
 
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...
 
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

std::unique_ptr< 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
 

Detailed Description

Cosine distribution.

Definition at line 199 of file RangedDistributions.h.

Constructor & Destructor Documentation

◆ RangedDistributionCosine() [1/3]

RangedDistributionCosine::RangedDistributionCosine ( )

Definition at line 262 of file RangedDistributions.cpp.

◆ RangedDistributionCosine() [2/3]

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

Definition at line 264 of file RangedDistributions.cpp.

266  : IRangedDistribution(n_samples, sigma_factor, limits)
267 {
268 }
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 270 of file RangedDistributions.cpp.

272  : IRangedDistribution(n_samples, sigma_factor, min, max)
273 {
274 }

◆ ~RangedDistributionCosine()

RangedDistributionCosine::~RangedDistributionCosine ( )
overridedefault

Member Function Documentation

◆ checkInitialization()

void IRangedDistribution::checkInitialization ( )
privateinherited

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(), 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 276 of file RangedDistributions.cpp.

277 {
278  return makeCopy(*this).release();
279 }

◆ distribution()

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

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 IRangedDistribution::distribution_impl().

Referenced by IRangedDistribution::generateSamples().

Here is the call graph for this function:

◆ distribution_impl()

std::unique_ptr< IDistribution1D > RangedDistributionCosine::distribution_impl ( double  mean,
double  stddev 
) const
overrideprotectedvirtual

Returns underlying IDistribution1D object.

Implements IRangedDistribution.

Definition at line 286 of file RangedDistributions.cpp.

288 {
289  return std::make_unique<DistributionCosine>(mean, stddev);
290 }

◆ 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 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 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 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 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 64 of file RangedDistributions.h.

64 { return m_limits; }

References IRangedDistribution::m_limits.

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

◆ name()

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

Returns distribution name for python-formatted text.

Implements IRangedDistribution.

Definition at line 281 of file RangedDistributions.cpp.

282 {
283  return "RangedDistributionCosine";
284 }

◆ nSamples()

size_t IRangedDistribution::nSamples ( ) const
inlineinherited

Returns number of samples to generate.

Definition at line 68 of file RangedDistributions.h.

68 { return m_n_samples; }

References IRangedDistribution::m_n_samples.

Referenced by pyfmt2::printRangedDistribution().

◆ setLimits()

void IRangedDistribution::setLimits ( const RealLimits limits)
inlineinherited

Definition at line 72 of file RangedDistributions.h.

72 { 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 66 of file RangedDistributions.h.

66 { return m_sigma_factor; }

References IRangedDistribution::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

◆ 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: