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

Description

A parametric distribution function, for use with any model parameter.

Definition at line 27 of file ParameterDistribution.h.

Collaboration diagram for ParameterDistribution:
[legend]

Public Types

enum  WhichParameter { None , BeamWavelength , BeamInclinationAngle , BeamAzimuthalAngle }
 

Public Member Functions

 ParameterDistribution (const ParameterDistribution &other)
 
 ParameterDistribution (WhichParameter whichParameter, const IDistribution1D &distribution, size_t nbr_samples, double sigma_factor=0.0, const RealLimits &limits=RealLimits())
 
 ParameterDistribution (WhichParameter whichParameter, const IDistribution1D &distribution, size_t nbr_samples, double xmin, double xmax)
 
virtual ~ParameterDistribution ()
 
std::vector< ParameterSamplegenerateSamples () const
 generate list of sampled values with their weight More...
 
IDistribution1DgetDistribution ()
 
const IDistribution1DgetDistribution () const
 
RealLimits getLimits () const
 
double getMaxValue () const
 
double getMinValue () const
 
size_t nDraws () const
 get number of samples for this distribution More...
 
ParameterDistributionoperator= (const ParameterDistribution &other)
 Overload assignment operator. More...
 
double sigmaFactor () const
 get the sigma factor More...
 
WhichParameter whichParameter () const
 
std::string whichParameterAsPyEnum () const
 

Private Attributes

std::unique_ptr< IDistribution1Dm_distribution
 
RealLimits m_limits
 
size_t m_nbr_samples
 
double m_sigma_factor
 
WhichParameter m_whichParameter
 
double m_xmax
 
double m_xmin
 

Member Enumeration Documentation

◆ WhichParameter

Enumerator
None 
BeamWavelength 
BeamInclinationAngle 
BeamAzimuthalAngle 

Definition at line 29 of file ParameterDistribution.h.

29  {
30  None, // #baPool ++ really necessary?? Try to refactor the relevant place
34  };

Constructor & Destructor Documentation

◆ ParameterDistribution() [1/3]

ParameterDistribution::ParameterDistribution ( WhichParameter  whichParameter,
const IDistribution1D distribution,
size_t  nbr_samples,
double  sigma_factor = 0.0,
const RealLimits limits = RealLimits() 
)

Definition at line 18 of file ParameterDistribution.cpp.

23  , m_nbr_samples(nbr_samples)
24  , m_sigma_factor(sigma_factor)
25  , m_limits(limits)
26  , m_xmin(1.0)
27  , m_xmax(-1.0)
28 {
29  m_distribution.reset(distribution.clone());
30  if (m_sigma_factor < 0.0)
31  throw std::runtime_error("ParameterDistribution::ParameterDistribution() -> Error."
32  "sigma factor cannot be negative");
33  if (nbr_samples == 0)
34  throw std::runtime_error("ParameterDistribution::ParameterDistribution() -> Error."
35  "Number of samples can't be zero.");
36 }
IDistribution1D * clone() const override=0
WhichParameter whichParameter() const
std::unique_ptr< IDistribution1D > m_distribution

References IDistribution1D::clone(), m_distribution, and m_sigma_factor.

Here is the call graph for this function:

◆ ParameterDistribution() [2/3]

ParameterDistribution::ParameterDistribution ( WhichParameter  whichParameter,
const IDistribution1D distribution,
size_t  nbr_samples,
double  xmin,
double  xmax 
)

Definition at line 38 of file ParameterDistribution.cpp.

42  , m_nbr_samples(nbr_samples)
43  , m_sigma_factor(0.0)
44  , m_xmin(xmin)
45  , m_xmax(xmax)
46 {
47  m_distribution.reset(distribution.clone());
48  if (m_sigma_factor < 0.0)
49  throw std::runtime_error("ParameterDistribution::ParameterDistribution() -> Error."
50  "sigma factor cannot be negative");
51  if (nbr_samples == 0)
52  throw std::runtime_error("ParameterDistribution::ParameterDistribution() -> Error."
53  "Number of samples can't be zero.");
54  if (xmin >= xmax)
55  throw std::runtime_error("ParameterDistribution::ParameterDistribution() -> Error."
56  "xmin>=xmax");
57 }

References IDistribution1D::clone(), m_distribution, and m_sigma_factor.

Here is the call graph for this function:

◆ ParameterDistribution() [3/3]

ParameterDistribution::ParameterDistribution ( const ParameterDistribution other)

Definition at line 59 of file ParameterDistribution.cpp.

63  , m_limits(other.m_limits)
64  , m_xmin(other.m_xmin)
65  , m_xmax(other.m_xmax)
66 {
67  m_distribution.reset(other.m_distribution->clone());
68 }

References m_distribution.

◆ ~ParameterDistribution()

ParameterDistribution::~ParameterDistribution ( )
virtualdefault

Member Function Documentation

◆ generateSamples()

std::vector< ParameterSample > ParameterDistribution::generateSamples ( ) const

generate list of sampled values with their weight

Definition at line 112 of file ParameterDistribution.cpp.

113 {
114  if (m_xmin < m_xmax)
115  return m_distribution->equidistantSamplesInRange(m_nbr_samples, m_xmin, m_xmax);
116  return m_distribution->equidistantSamples(m_nbr_samples, m_sigma_factor, m_limits);
117 }

References m_distribution, m_limits, m_nbr_samples, m_sigma_factor, m_xmax, and m_xmin.

Referenced by DistributionHandler::addParameterDistribution().

◆ getDistribution() [1/2]

IDistribution1D * ParameterDistribution::getDistribution ( )

Definition at line 124 of file ParameterDistribution.cpp.

125 {
126  return m_distribution.get();
127 }

References m_distribution.

◆ getDistribution() [2/2]

const IDistribution1D * ParameterDistribution::getDistribution ( ) const

◆ getLimits()

RealLimits ParameterDistribution::getLimits ( ) const
inline

Definition at line 65 of file ParameterDistribution.h.

65 { return m_limits; }

References m_limits.

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

◆ getMaxValue()

double ParameterDistribution::getMaxValue ( ) const
inline

Definition at line 68 of file ParameterDistribution.h.

68 { return m_xmax; }

References m_xmax.

◆ getMinValue()

double ParameterDistribution::getMinValue ( ) const
inline

Definition at line 67 of file ParameterDistribution.h.

67 { return m_xmin; }

References m_xmin.

◆ nDraws()

size_t ParameterDistribution::nDraws ( ) const

get number of samples for this distribution

Definition at line 105 of file ParameterDistribution.cpp.

106 {
107  if (m_distribution && m_distribution->isDelta())
108  return 1;
109  return m_nbr_samples;
110 }

References m_distribution, and m_nbr_samples.

Referenced by DistributionHandler::addParameterDistribution(), and Py::Fmt2::printParameterDistribution().

◆ operator=()

ParameterDistribution & ParameterDistribution::operator= ( const ParameterDistribution other)

Overload assignment operator.

Definition at line 72 of file ParameterDistribution.cpp.

73 {
74  if (this != &other) {
75  this->m_whichParameter = other.m_whichParameter;
78  m_distribution.reset(other.m_distribution->clone());
79  m_limits = other.m_limits;
80  m_xmin = other.m_xmin;
81  m_xmax = other.m_xmax;
82  }
83  return *this;
84 }

References m_distribution, m_limits, m_nbr_samples, m_sigma_factor, m_whichParameter, m_xmax, and m_xmin.

◆ sigmaFactor()

double ParameterDistribution::sigmaFactor ( ) const
inline

get the sigma factor

Definition at line 57 of file ParameterDistribution.h.

57 { return m_sigma_factor; }

References m_sigma_factor.

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

◆ whichParameter()

ParameterDistribution::WhichParameter ParameterDistribution::whichParameter ( ) const

Definition at line 86 of file ParameterDistribution.cpp.

87 {
88  return m_whichParameter;
89 }

References m_whichParameter.

Referenced by whichParameterAsPyEnum().

◆ whichParameterAsPyEnum()

std::string ParameterDistribution::whichParameterAsPyEnum ( ) const

Definition at line 91 of file ParameterDistribution.cpp.

92 {
93  switch (whichParameter()) {
95  return "ParameterDistribution.BeamWavelength";
97  return "ParameterDistribution.BeamInclinationAngle";
99  return "ParameterDistribution.BeamAzimuthalAngle";
100  default:
101  throw std::runtime_error("printParameterDistribution(): missing implementation");
102  }
103 }

References BeamAzimuthalAngle, BeamInclinationAngle, BeamWavelength, and whichParameter().

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

Here is the call graph for this function:

Member Data Documentation

◆ m_distribution

std::unique_ptr<IDistribution1D> ParameterDistribution::m_distribution
private

◆ m_limits

RealLimits ParameterDistribution::m_limits
private

Definition at line 75 of file ParameterDistribution.h.

Referenced by generateSamples(), getLimits(), and operator=().

◆ m_nbr_samples

size_t ParameterDistribution::m_nbr_samples
private

Definition at line 73 of file ParameterDistribution.h.

Referenced by generateSamples(), nDraws(), and operator=().

◆ m_sigma_factor

double ParameterDistribution::m_sigma_factor
private

◆ m_whichParameter

WhichParameter ParameterDistribution::m_whichParameter
private

Definition at line 71 of file ParameterDistribution.h.

Referenced by operator=(), and whichParameter().

◆ m_xmax

double ParameterDistribution::m_xmax
private

Definition at line 77 of file ParameterDistribution.h.

Referenced by generateSamples(), getMaxValue(), and operator=().

◆ m_xmin

double ParameterDistribution::m_xmin
private

Definition at line 76 of file ParameterDistribution.h.

Referenced by generateSamples(), getMinValue(), and operator=().


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