15 #ifndef BORNAGAIN_CORE_PARAMETRIZATION_DISTRIBUTIONS_H
16 #define BORNAGAIN_CORE_PARAMETRIZATION_DISTRIBUTIONS_H
46 std::vector<ParameterSample>
equidistantSamples(
size_t nbr_samples,
double sigma_factor = 0.,
55 virtual std::vector<double>
67 virtual void setUnits(
const std::string& units);
74 std::vector<ParameterSample>
95 double getMean() const final {
return (m_min + m_max) / 2.0; }
96 double getMin()
const {
return m_min; }
97 double getMax()
const {
return m_max; }
100 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
129 double getMean() const final {
return m_mean; }
130 double getHWHM()
const {
return m_hwhm; }
133 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
141 const double& m_mean;
142 const double& m_hwhm;
165 double getMean() const final {
return m_mean; }
166 double getStdDev()
const {
return m_std_dev; }
169 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
177 const double& m_mean;
178 const double& m_std_dev;
202 double getMedian()
const {
return m_median; }
203 double getScalePar()
const {
return m_scale_param; }
206 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
213 virtual void setUnits(
const std::string& units);
216 const double& m_median;
217 const double& m_scale_param;
237 double getMean() const final {
return m_mean; }
238 double getSigma()
const {
return m_sigma; }
241 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
249 const double& m_mean;
250 const double& m_sigma;
273 double getMean() const final {
return m_center; }
274 double getLeftWidth()
const {
return m_left; }
275 double getMiddleWidth()
const {
return m_middle; }
276 double getRightWidth()
const {
return m_right; }
279 virtual std::vector<double>
equidistantPoints(
size_t nbr_samples,
double sigma_factor,
287 void adjustLimitsToNonZeroSamples(
double& min,
double& max,
size_t nbr_samples)
const;
288 const double& m_center;
289 const double& m_left;
290 const double& m_middle;
291 const double& m_right;
Defines and implements the standard mix-in ICloneable.
Defines class RealLimits.
double getMean() const final
Returns the distribution-specific mean.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
generate list of sample values
Uniform distribution function with half width hwhm.
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
Returns list of sample values.
double getMean() const final
Returns the distribution-specific mean.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
Gaussian distribution with standard deviation std_dev.
double getMean() const final
Returns the distribution-specific mean.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
generate list of sample values
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
double getMean() const final
Returns the distribution-specific mean.
virtual void setUnits(const std::string &units)
Sets distribution units.
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
generate list of sample values
Lorentz distribution with half width hwhm.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
generate list of sample values
double getMean() const final
Returns the distribution-specific mean.
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
Trapezoidal distribution.
bool isDelta() const final
Returns true if the distribution is in the limit case of a Dirac delta distribution.
double getMean() const final
Returns the distribution-specific mean.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
generate list of sample values
void accept(INodeVisitor *visitor) const final
Calls the INodeVisitor's visit method.
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Interface for one-dimensional distributions.
std::vector< ParameterSample > generateSamplesFromValues(const std::vector< double > &sample_values) const
Returns weighted samples from given interpolation points and probabilityDensity().
virtual double probabilityDensity(double x) const =0
Returns the distribution-specific probability density for value x.
virtual double getMean() const =0
Returns the distribution-specific mean.
std::vector< ParameterSample > equidistantSamplesInRange(size_t nbr_samples, double xmin, double xmax) const
Returns equidistant samples from xmin to xmax, weighted with probabilityDensity().
void adjustMinMaxForLimits(double &xmin, double &xmax, const RealLimits &limits) const
modifies xmin and xmax if they are outside of limits
virtual std::vector< double > equidistantPointsInRange(size_t nbr_samples, double xmin, double xmax) const
Returns equidistant interpolation points from xmin to xmax.
virtual bool isDelta() const =0
Returns true if the distribution is in the limit case of a Dirac delta distribution.
virtual std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const =0
Returns equidistant interpolation points, with range computed in distribution-specific way from mean ...
virtual void setUnits(const std::string &units)
Sets distribution units.
std::vector< ParameterSample > equidistantSamples(size_t nbr_samples, double sigma_factor=0., const RealLimits &limits=RealLimits()) const
Returns equidistant samples, using intrinsic parameters, weighted with probabilityDensity().
Visitor interface to visit ISample objects.
Base class for tree-like structures containing parameterized objects.
A parameter value with a weight, as obtained when sampling from a distribution.
Limits for a real fit parameter.