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

Lorentz distribution with median and hwhm. More...

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

Public Member Functions

 RangedDistributionLorentz ()
 
 RangedDistributionLorentz (size_t n_samples, double hwhm_factor, const RealLimits &limits=RealLimits::limitless())
 
 RangedDistributionLorentz (size_t n_samples, double hwhm_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...
 
 ~RangedDistributionLorentz () override=default
 
RangedDistributionLorentzclone () 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 median, double hwhm) 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

Lorentz distribution with median and hwhm.

Definition at line 124 of file RangedDistributions.h.

Constructor & Destructor Documentation

◆ RangedDistributionLorentz() [1/3]

RangedDistributionLorentz::RangedDistributionLorentz ( )

Definition at line 153 of file RangedDistributions.cpp.

◆ RangedDistributionLorentz() [2/3]

RangedDistributionLorentz::RangedDistributionLorentz ( size_t  n_samples,
double  hwhm_factor,
const RealLimits limits = RealLimits::limitless() 
)

Definition at line 155 of file RangedDistributions.cpp.

157  : IRangedDistribution(n_samples, hwhm_factor, limits)
158 {
159 }
RealLimits limits() const
Returns current limits of the distribution.

◆ RangedDistributionLorentz() [3/3]

RangedDistributionLorentz::RangedDistributionLorentz ( size_t  n_samples,
double  hwhm_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, hwhm_factor = 2.0, while the limits are (-inf, +inf).

Definition at line 161 of file RangedDistributions.cpp.

163  : IRangedDistribution(n_samples, hwhm_factor, min, max)
164 {
165 }

◆ ~RangedDistributionLorentz()

RangedDistributionLorentz::~RangedDistributionLorentz ( )
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()

RangedDistributionLorentz * RangedDistributionLorentz::clone ( ) const
overridevirtual

Implements IRangedDistribution.

Definition at line 167 of file RangedDistributions.cpp.

168 {
169  return makeCopy(*this).release();
170 }

◆ 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 > RangedDistributionLorentz::distribution_impl ( double  median,
double  hwhm 
) const
overrideprotectedvirtual

Returns underlying IDistribution1D object.

Implements IRangedDistribution.

Definition at line 177 of file RangedDistributions.cpp.

179 {
180  return std::make_unique<DistributionLorentz>(median, hwhm);
181 }

◆ 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 RangedDistributionLorentz::name ( ) const
overridevirtual

Returns distribution name for python-formatted text.

Implements IRangedDistribution.

Definition at line 172 of file RangedDistributions.cpp.

173 {
174  return "RangedDistributionLorentz";
175 }

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