15 #ifndef BORNAGAIN_PARAM_DISTRIB_DISTRIBUTIONS_H
16 #define BORNAGAIN_PARAM_DISTRIB_DISTRIBUTIONS_H
43 virtual double mean()
const = 0;
46 std::vector<ParameterSample>
equidistantSamples(
size_t nbr_samples,
double sigma_factor = 0.,
55 virtual std::vector<double>
77 std::vector<ParameterSample>
97 std::string
className() const final {
return "DistributionGate"; }
99 std::vector<ParaMeta>
parDefs() const final
101 return {{
"Min",
"",
"para_tooltip", -
INF, +
INF, 0},
102 {
"Max",
"",
"para_tooltip", -
INF, +
INF, 0}};
139 std::string
className() const final {
return "DistributionLorentz"; }
143 return {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
144 {
"HWHM",
"",
"para_tooltip", -
INF, +
INF, 0}};
183 std::string
className() const final {
return "DistributionGaussian"; }
187 return {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
188 {
"StdDev",
"",
"para_tooltip", -
INF, +
INF, 0}};
226 std::string
className() const final {
return "DistributionLogNormal"; }
230 return {{
"Median",
"",
"para_tooltip", -
INF, +
INF, 0},
231 {
"ScaleParameter",
"",
"para_tooltip", -
INF, +
INF, 0}};
235 double mean()
const override;
270 std::string
className() const final {
return "DistributionCosine"; }
274 return {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
275 {
"Sigma",
"",
"para_tooltip", -
INF, +
INF, 0}};
314 std::string
className() const final {
return "DistributionTrapezoid"; }
318 return {{
"Center",
"",
"para_tooltip", -
INF, +
INF, 0},
319 {
"LeftWidth",
"",
"para_tooltip", -
INF, +
INF, 0},
320 {
"MiddleWidth",
"",
"para_tooltip", -
INF, +
INF, 0},
321 {
"RightWidth",
"",
"para_tooltip", -
INF, +
INF, 0}};
Defines and implements the standard mix-in ICloneable.
Defines class RealLimits.
DistributionCosine * clone() const override
double mean() const override
Returns the distribution-specific mean.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
generate list of sample values
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
Uniform distribution function with half width hwhm.
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
DistributionGate * clone() const override
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
Returns list of sample values.
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
double mean() const override
Returns the distribution-specific mean.
Gaussian distribution with standard deviation std_dev.
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
generate list of sample values
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
double mean() const override
Returns the distribution-specific mean.
DistributionGaussian * clone() const override
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
double mean() const override
Returns the distribution-specific mean.
friend class DistributionsTest_DistributionLogNormalParameters_Test
const double & m_scale_param
double getScalePar() const
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
DistributionLogNormal(std::vector< double > P)
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
generate list of sample values
DistributionLogNormal * clone() const override
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
Lorentz distribution with half width hwhm.
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
generate list of sample values
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
double mean() const override
Returns the distribution-specific mean.
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
DistributionLorentz * clone() const override
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
Trapezoidal distribution.
std::vector< double > equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
generate list of sample values
double mean() const override
Returns the distribution-specific mean.
double probabilityDensity(double x) const override
Returns the distribution-specific probability density for value x.
std::string pythonConstructor(const std::string &units) const override
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
double getRightWidth() const
double getLeftWidth() const
double getMiddleWidth() const
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
DistributionTrapezoid * clone() const override
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
void adjustLimitsToNonZeroSamples(double &min, double &max, size_t nbr_samples) const
bool isDelta() const override
Returns true if the distribution is in the limit case of a Dirac delta distribution.
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.
std::vector< ParameterSample > equidistantSamplesInRange(size_t nbr_samples, double xmin, double xmax) const
Returns equidistant samples from xmin to xmax, weighted with probabilityDensity().
virtual double mean() const =0
Returns the distribution-specific mean.
void adjustMinMaxForLimits(double &xmin, double &xmax, const RealLimits &limits) const
modifies xmin and xmax if they are outside of limits
virtual std::string pythonConstructor(const std::string &units) const =0
Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2....
virtual std::vector< double > equidistantPointsInRange(size_t nbr_samples, double xmin, double xmax) const
Returns equidistant interpolation points from xmin to xmax.
IDistribution1D(const std::vector< double > &PValues)
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 ...
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().
IDistribution1D * clone() const override=0
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.