Skip to content
Snippets Groups Projects
Commit 03dfa400 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

even simpler handling of delta distribution

parent 116fcf61
No related branches found
No related tags found
1 merge request!1299decisive simplification of scan resolution evaluation
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
// ************************************************************************************************ // ************************************************************************************************
#include "Param/Distrib/RangedDistributions.h" #include "Param/Distrib/RangedDistributions.h"
#include "Base/Util/Assert.h"
#include "Param/Distrib/Distributions.h" #include "Param/Distrib/Distributions.h"
#include "Param/Distrib/ParameterSample.h" #include "Param/Distrib/ParameterSample.h"
#include <cmath> #include <cmath>
...@@ -64,22 +65,16 @@ IRangedDistribution::~IRangedDistribution() = default; ...@@ -64,22 +65,16 @@ IRangedDistribution::~IRangedDistribution() = default;
std::vector<ParameterSample> IRangedDistribution::generateSamples(double mean, double stddev) const std::vector<ParameterSample> IRangedDistribution::generateSamples(double mean, double stddev) const
{ {
auto generator = distribution(mean, stddev); if (stddev == 0) // it's a delta distribution
if (!generator->isDelta()) return {{mean, 1.0}};
return generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits); ASSERT(stddev > 0);
// handling the case of delta distributions auto generator = distribution(mean, stddev);
auto samples = generator->equidistantSamples(1, m_sigma_factor, m_limits); return generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits);
ParameterSample& sample = samples[0]; // there is only one element in the vector
sample.weight = 1.0;
return std::vector<ParameterSample>(1, sample);
} }
IDistribution1D* IRangedDistribution::distribution(double mean, double stddev) const IDistribution1D* IRangedDistribution::distribution(double mean, double stddev) const
{ {
if (stddev < 0.0)
throw std::runtime_error(
"Error in IRangedDistribution::distribution: standard deviation is less than zero");
return distribution_impl(mean, stddev); return distribution_impl(mean, stddev);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment