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.