36 :
INode(meta, PValues)
48 "IDistribution1D::generateSamples: "
49 "number of generated samples must be bigger than zero");
57 std::vector<ParameterSample>
62 "IDistribution1D::generateSamples: "
63 "number of generated samples must be bigger than zero");
76 std::vector<double> result(nbr_samples);
77 for (
size_t i = 0; i < nbr_samples; ++i)
78 result[i] = xmin + i * (xmax - xmin) / (nbr_samples - 1.0);
96 std::ostringstream ostr;
97 ostr <<
"IDistribution1D::adjustMinMaxForLimits() -> Error. Can't' adjust ";
98 ostr <<
"xmin:" << xmin <<
" xmax:" << xmax <<
" for given limits " << limits << std::endl;
105 std::vector<ParameterSample>
108 std::vector<ParameterSample> result;
109 double norm_factor = 0.0;
110 for (
double value : sample_values) {
115 if (norm_factor <= 0.0)
117 "total probability must be bigger than zero");
119 sample.weight /= norm_factor;
131 {{
"Min",
"",
"para_tooltip", -
INF, +
INF, 0}, {
"Max",
"",
"para_tooltip", -
INF, +
INF, 0}}},
133 m_min(m_P[0]), m_max(m_P[1])
148 if (x < m_min || x >
m_max)
176 {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
177 {
"HWHM",
"",
"para_tooltip", -
INF, +
INF, 0}}},
179 m_mean(m_P[0]), m_hwhm(m_P[1])
202 if (sigma_factor <= 0.0)
222 {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
223 {
"StdDev",
"",
"para_tooltip", -
INF, +
INF, 0}}},
225 m_mean(m_P[0]), m_std_dev(m_P[1])
249 if (sigma_factor <= 0.0)
269 {{
"Median",
"",
"para_tooltip", -
INF, +
INF, 0},
270 {
"ScaleParameter",
"",
"para_tooltip", -
INF, +
INF, 0}}},
272 m_median(m_P[0]), m_scale_param(m_P[1])
274 if (m_scale_param < 0.0)
298 return m_median * std::exp(exponent);
305 if (nbr_samples < 2) {
306 std::vector<double> result;
310 if (sigma_factor <= 0.0)
336 {{
"Mean",
"",
"para_tooltip", -
INF, +
INF, 0},
337 {
"Sigma",
"",
"para_tooltip", -
INF, +
INF, 0}}},
339 m_mean(m_P[0]), m_sigma(m_P[1])
364 if (sigma_factor <= 0.0 || sigma_factor > 2.0)
384 {{
"Center",
"",
"para_tooltip", -
INF, +
INF, 0},
385 {
"LeftWidth",
"",
"para_tooltip", -
INF, +
INF, 0},
386 {
"MiddleWidth",
"",
"para_tooltip", -
INF, +
INF, 0},
387 {
"RightWidth",
"",
"para_tooltip", -
INF, +
INF, 0}}},
389 m_center(m_P[0]), m_left(m_P[1]), m_middle(m_P[2]), m_right(m_P[3])
437 size_t nbr_samples)
const
439 if (nbr_samples <= 1)
441 size_t N = nbr_samples;
446 if (N == nbr_samples)
448 double step = (max - min) / (N - 1);
460 * std::max(std::abs(a) * std::numeric_limits<double>::epsilon(),
461 std::numeric_limits<double>::min());
462 return std::abs(a - b) <
eps;
Defines classes representing one-dimensional distributions.
Defines many exception classes in namespace Exceptionss.
Defines M_PI and some more mathematical constants.
Defines class ParameterPool.
Defines class ParameterSample.
Defines class RealParameter.
double probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
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.
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 probabilityDensity(double x) const final
Returns the distribution-specific probability density for value x.
Gaussian distribution with standard deviation std_dev.
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.
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.
const double & m_scale_param
virtual void setUnits(const std::string &units)
Sets distribution units.
DistributionLogNormal()=delete
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 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 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 adjustLimitsToNonZeroSamples(double &min, double &max, size_t nbr_samples) const
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().
IDistribution1D(const NodeMeta &meta, const std::vector< double > &PValues)
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().
Base class for tree-like structures containing parameterized objects.
RealParameter * parameter(const std::string &name) const
Returns parameter with given 'name'.
ParameterPool * parameterPool() const
Returns pointer to the parameter pool.
A parameter value with a weight, as obtained when sampling from a distribution.
Limits for a real fit parameter.
bool hasUpperLimit() const
if has upper limit
double upperLimit() const
Returns upper limit.
double lowerLimit() const
Returns lower limit.
bool hasLowerLimit() const
if has lower limit
RealParameter & setUnit(const std::string &name)
bool DoubleEqual(double a, double b)