From 3b45c1d9f7e37133549def4005fd2281d3650eb9 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Sun, 22 Jan 2023 14:15:43 +0100 Subject: [PATCH] fully remove limits from IRangedDistribution --- GUI/Model/FromCore/ItemizeSimulation.cpp | 2 +- Param/Distrib/RangedDistributions.cpp | 21 ++------------------- Param/Distrib/RangedDistributions.h | 12 ------------ Sim/Export/PyFmt2.cpp | 8 ++------ Tests/Unit/Sim/PythonFormattingTest.cpp | 21 --------------------- 5 files changed, 5 insertions(+), 59 deletions(-) diff --git a/GUI/Model/FromCore/ItemizeSimulation.cpp b/GUI/Model/FromCore/ItemizeSimulation.cpp index 20ebf344f46..2063d46aa2d 100644 --- a/GUI/Model/FromCore/ItemizeSimulation.cpp +++ b/GUI/Model/FromCore/ItemizeSimulation.cpp @@ -229,7 +229,7 @@ void addRangedDistributionToItem(BeamDistributionItem* distributionItem, return; ParameterDistribution par_distr(ParameterDistribution::None, *ranged.distribution(mean, std_dev), ranged.nSamples(), - ranged.sigmaFactor(), ranged.limits()); + ranged.sigmaFactor()); setItemFromSample(distributionItem, par_distr); } diff --git a/Param/Distrib/RangedDistributions.cpp b/Param/Distrib/RangedDistributions.cpp index 06d48def61a..0bf888be0c2 100644 --- a/Param/Distrib/RangedDistributions.cpp +++ b/Param/Distrib/RangedDistributions.cpp @@ -35,20 +35,13 @@ const double gate_stddev_factor = 2.0 * std::sqrt(3.0); // interface IRangedDistribution // ************************************************************************************************ -IRangedDistribution::IRangedDistribution(size_t n_samples, double sigma_factor, - const RealLimits& limits) +IRangedDistribution::IRangedDistribution(size_t n_samples, double sigma_factor) : m_n_samples(n_samples) , m_sigma_factor(sigma_factor) - , m_limits(limits) { checkInitialization(); } -IRangedDistribution::IRangedDistribution(size_t n_samples, double sigma_factor) - : IRangedDistribution(n_samples, sigma_factor, RealLimits::limitless()) -{ -} - IRangedDistribution::~IRangedDistribution() = default; std::vector<ParameterSample> IRangedDistribution::generateSamples(double mean, double stddev) const @@ -58,7 +51,7 @@ std::vector<ParameterSample> IRangedDistribution::generateSamples(double mean, d ASSERT(stddev > 0); auto generator = distribution(mean, stddev); - return generator->equidistantSamples(m_n_samples, m_sigma_factor, m_limits); + return generator->equidistantSamples(m_n_samples, m_sigma_factor); } IDistribution1D* IRangedDistribution::distribution(double mean, double stddev) const @@ -76,13 +69,6 @@ void IRangedDistribution::checkInitialization() if (m_sigma_factor < 0.0) throw std::runtime_error("Error in IRangedDistribution::checkInitialization: sigma factor " "shall be non-negative."); - - if (!m_limits.hasLowerAndUpperLimits()) - return; - - if (m_limits.lowerLimit() >= m_limits.upperLimit()) - throw std::runtime_error("Error in IRangedDistribution::checkInitialization: lower limit " - "shall not exceed the upper one."); } // ************************************************************************************************ @@ -181,9 +167,6 @@ std::string RangedDistributionLogNormal::name() const IDistribution1D* RangedDistributionLogNormal::distribution_impl(double mean, double stddev) const { const double mean_2 = mean * mean; - if (mean_2 <= std::numeric_limits<double>::min()) - throw std::runtime_error("Error in DistributionLogNormal::distribution: mean square value " - "is less or indistinguishable from zero."); const double scale = std::sqrt(std::log(stddev * stddev / mean_2 + 1.0)); const double median = mean * std::exp(-scale * scale / 2.0); diff --git a/Param/Distrib/RangedDistributions.h b/Param/Distrib/RangedDistributions.h index a9245ac64d9..e47de972d5a 100644 --- a/Param/Distrib/RangedDistributions.h +++ b/Param/Distrib/RangedDistributions.h @@ -48,11 +48,6 @@ public: // getters - //! Returns current limits of the distribution - RealLimits limits() const - { - return m_limits; - } //! Returns sigma factor to use during sampling double sigmaFactor() const { @@ -66,16 +61,10 @@ public: // setters - void setLimits(const RealLimits& limits) - { - m_limits = limits; - } - //! Returns distribution name for python-formatted text. virtual std::string name() const = 0; protected: - IRangedDistribution(size_t n_samples, double sigma_factor, const RealLimits& limits); //! Returns underlying IDistribution1D object virtual IDistribution1D* distribution_impl(double mean, double stddev) const = 0; @@ -84,7 +73,6 @@ private: size_t m_n_samples; double m_sigma_factor; - RealLimits m_limits; #endif // SWIG }; diff --git a/Sim/Export/PyFmt2.cpp b/Sim/Export/PyFmt2.cpp index 6e213c82aab..7d6c44cffd7 100644 --- a/Sim/Export/PyFmt2.cpp +++ b/Sim/Export/PyFmt2.cpp @@ -116,8 +116,7 @@ std::string printParameterDistribution(const ParameterDistribution& par_distr, result << "ba.ParameterDistribution(ba." << par_distr.whichParameterAsPyEnum() << ", " << distVarName << ", " << par_distr.nDraws() << ", " - << Py::Fmt::printDouble(par_distr.sigmaFactor()) - << Py::Fmt::printRealLimitsArg(par_distr.getLimits(), units) << ")"; + << Py::Fmt::printDouble(par_distr.sigmaFactor()) << ")"; return result.str(); } @@ -127,10 +126,7 @@ std::string printRangedDistribution(const IRangedDistribution& distr) std::ostringstream result; result << Py::Fmt::indent() << "distribution = ba."; result << distr.name(); - result << "(" << distr.nSamples() << ", " << Py::Fmt::printDouble(distr.sigmaFactor()); - if (!distr.limits().isLimitless()) - result << Py::Fmt::printRealLimitsArg(distr.limits()); - result << ")"; + result << "(" << distr.nSamples() << ", " << Py::Fmt::printDouble(distr.sigmaFactor()) << ")"; return result.str(); } diff --git a/Tests/Unit/Sim/PythonFormattingTest.cpp b/Tests/Unit/Sim/PythonFormattingTest.cpp index 2c73849deac..28279565f2e 100644 --- a/Tests/Unit/Sim/PythonFormattingTest.cpp +++ b/Tests/Unit/Sim/PythonFormattingTest.cpp @@ -120,27 +120,6 @@ TEST(PythonFormattingTest, printParameterDistribution) // No RealLimits defined EXPECT_EQ(Py::Fmt2::printParameterDistribution(dist, "distr_1"), "ba.ParameterDistribution(ba.ParameterDistribution.BeamWavelength, distr_1, 5, 2.0)"); - - // RealLimits defined, units unknown - ParameterDistribution dist2(ParameterDistribution::BeamWavelength, gate, 5, 2.0, - RealLimits::limited(1.0, 2.0)); - EXPECT_EQ(Py::Fmt2::printParameterDistribution(dist2, "distr_1"), - "ba.ParameterDistribution(ba.ParameterDistribution.BeamWavelength, distr_1, " - "5, 2.0, ba.RealLimits.limited(1.0, 2.0))"); - - // RealLimits defined, units explicitly set - ParameterDistribution dist3(ParameterDistribution::BeamWavelength, gate, 5, 2.0, - RealLimits::limited(1.0, 2.0)); - EXPECT_EQ(Py::Fmt2::printParameterDistribution(dist3, "distr_1", "nm"), - "ba.ParameterDistribution(ba.ParameterDistribution.BeamWavelength, distr_1, " - "5, 2.0, ba.RealLimits.limited(1*nm, 2*nm))"); - - // RealLimits defined, checking that method guess radians units correctly - ParameterDistribution dist4(ParameterDistribution::BeamAzimuthalAngle, gate, 5, 2.0, - RealLimits::limited(1.0 * Units::deg, 2.0 * Units::deg)); - EXPECT_EQ(Py::Fmt2::printParameterDistribution(dist4, "distr_1", "rad"), - "ba.ParameterDistribution(ba.ParameterDistribution.BeamAzimuthalAngle, " - "distr_1, 5, 2.0, ba.RealLimits.limited(1*deg, 2*deg))"); } TEST(PythonFormattingTest, printLayerRoughness) -- GitLab