diff --git a/Fit/Kernel/MinimizerFactory.cpp b/Fit/Kernel/MinimizerFactory.cpp index c58df62a951a23e7427979d3861475e775aa1be2..d4257d9ec6a8c09557d49bf351b902dbdd0e113a 100644 --- a/Fit/Kernel/MinimizerFactory.cpp +++ b/Fit/Kernel/MinimizerFactory.cpp @@ -13,18 +13,108 @@ // ************************************************************************************************ #include "Fit/Kernel/MinimizerFactory.h" -#include "Fit/Minimizer/MinimizerCatalog.h" #include "Fit/Suite/GSLLevenbergMarquardtMinimizer.h" #include "Fit/Suite/GSLMultiMinimizer.h" #include "Fit/Suite/GeneticMinimizer.h" #include "Fit/Suite/Minuit2Minimizer.h" #include "Fit/Suite/SimAnMinimizer.h" +#include "Fit/Tool/MinimizerUtil.h" #include <boost/format.hpp> #include <iomanip> #include <iostream> #include <memory> #include <sstream> +namespace { + +class MinimizerCatalog { +public: + MinimizerCatalog(); + + std::string toString() const; + + std::vector<std::string> minimizerNames() const; + + std::vector<std::string> algorithmNames(const std::string& minimizerName) const; + + std::vector<std::string> algorithmDescriptions(const std::string& minimizerName) const; + + const MinimizerInfo& minimizerInfo(const std::string& minimizerName) const; + +private: + void addMinimizerInfo(MinimizerInfo&& info); + std::vector<MinimizerInfo> m_minimizers; +}; + +MinimizerCatalog::MinimizerCatalog() +{ + addMinimizerInfo(MinimizerInfo::buildMinuit2Info()); + addMinimizerInfo(MinimizerInfo::buildGSLMultiMinInfo()); + addMinimizerInfo(MinimizerInfo::buildGSLLMAInfo()); + addMinimizerInfo(MinimizerInfo::buildGSLSimAnInfo()); + addMinimizerInfo(MinimizerInfo::buildGeneticInfo()); +} + +//! Returns multiline string representing catalog content. +std::string MinimizerCatalog::toString() const +{ + const int text_width = 80; + std::ostringstream result; + + result << std::string(text_width, '-') << "\n"; + result << boost::format("%-15s|%-65s\n") % "Minimizer" % " Algorithms"; + result << std::string(text_width, '-') << "\n"; + + for (const auto& info : m_minimizers) { + result << boost::format("%-15s| %-64s\n") % info.name() + % mumufit::utils::toString(info.algorithmNames(), " "); + } + return result.str(); +} + +std::vector<std::string> MinimizerCatalog::minimizerNames() const +{ + std::vector<std::string> result; + for (const auto& info : m_minimizers) + result.push_back(info.name()); + + return result; +} + +//! Returns list of algorithms defined for the minimizer with a given name. +std::vector<std::string> MinimizerCatalog::algorithmNames(const std::string& minimizerName) const +{ + return minimizerInfo(minimizerName).algorithmNames(); +} + +//! Returns list of algorithm's descriptions for the minimizer with a given name . +std::vector<std::string> +MinimizerCatalog::algorithmDescriptions(const std::string& minimizerName) const +{ + return minimizerInfo(minimizerName).algorithmDescriptions(); +} + +//! Returns info for minimizer with given name. +const MinimizerInfo& MinimizerCatalog::minimizerInfo(const std::string& minimizerName) const +{ + for (const auto& info : m_minimizers) + if (info.name() == minimizerName) + return info; + + throw std::runtime_error("MinimizerCatalog::minimizerInfo -> Error. " + "No minimizer with the name '" + + minimizerName + "'"); +} + +//! Adds minimizer info to the catalog. +void MinimizerCatalog::addMinimizerInfo(MinimizerInfo&& info) +{ + m_minimizers.emplace_back(std::move(info)); +} + +} // namespace + + IMinimizer* MinimizerFactory::createMinimizer(const std::string& minimizerName, const std::string& algorithmType, const std::string& optionString) diff --git a/Fit/Minimizer/MinimizerCatalog.cpp b/Fit/Minimizer/MinimizerCatalog.cpp deleted file mode 100644 index 53060a59aca754de1114485a460bd0f10e67c53e..0000000000000000000000000000000000000000 --- a/Fit/Minimizer/MinimizerCatalog.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file Fit/Minimizer/MinimizerCatalog.cpp -//! @brief Implements class MinimizerCatalog. -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#include "Fit/Minimizer/MinimizerCatalog.h" -#include "Fit/Tool/MinimizerUtil.h" -#include <boost/format.hpp> -#include <sstream> - -MinimizerCatalog::MinimizerCatalog() -{ - addMinimizerInfo(MinimizerInfo::buildMinuit2Info()); - addMinimizerInfo(MinimizerInfo::buildGSLMultiMinInfo()); - addMinimizerInfo(MinimizerInfo::buildGSLLMAInfo()); - addMinimizerInfo(MinimizerInfo::buildGSLSimAnInfo()); - addMinimizerInfo(MinimizerInfo::buildGeneticInfo()); -} - -//! Returns multiline string representing catalog content. - -std::string MinimizerCatalog::toString() const -{ - const int text_width = 80; - std::ostringstream result; - - result << std::string(text_width, '-') << "\n"; - result << boost::format("%-15s|%-65s\n") % "Minimizer" % " Algorithms"; - result << std::string(text_width, '-') << "\n"; - - for (const auto& info : m_minimizers) { - result << boost::format("%-15s| %-64s\n") % info.name() - % mumufit::utils::toString(info.algorithmNames(), " "); - } - return result.str(); -} - -std::vector<std::string> MinimizerCatalog::minimizerNames() const -{ - std::vector<std::string> result; - for (const auto& info : m_minimizers) - result.push_back(info.name()); - - return result; -} - -//! Returns list of algorithms defined for the minimizer with a given name. - -std::vector<std::string> MinimizerCatalog::algorithmNames(const std::string& minimizerName) const -{ - return minimizerInfo(minimizerName).algorithmNames(); -} - -//! Returns list of algorithm's descriptions for the minimizer with a given name . - -std::vector<std::string> -MinimizerCatalog::algorithmDescriptions(const std::string& minimizerName) const -{ - return minimizerInfo(minimizerName).algorithmDescriptions(); -} - -//! Returns info for minimizer with given name. - -const MinimizerInfo& MinimizerCatalog::minimizerInfo(const std::string& minimizerName) const -{ - for (const auto& info : m_minimizers) - if (info.name() == minimizerName) - return info; - - throw std::runtime_error("MinimizerCatalog::minimizerInfo -> Error. " - "No minimizer with the name '" - + minimizerName + "'"); -} - -//! Adds minimizer info to the catalog. - -void MinimizerCatalog::addMinimizerInfo(MinimizerInfo&& info) -{ - m_minimizers.emplace_back(std::move(info)); -} diff --git a/Fit/Minimizer/MinimizerCatalog.h b/Fit/Minimizer/MinimizerCatalog.h deleted file mode 100644 index f346ccfba4e10054c06993900eff5fb2df9bf1f7..0000000000000000000000000000000000000000 --- a/Fit/Minimizer/MinimizerCatalog.h +++ /dev/null @@ -1,41 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file Fit/Minimizer/MinimizerCatalog.h -//! @brief Defines class MinimizerCatalog. -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_FIT_MINIMIZER_MINIMIZERCATALOG_H -#define BORNAGAIN_FIT_MINIMIZER_MINIMIZERCATALOG_H - -#include "Fit/Minimizer/MinimizerInfo.h" - -//! Hard-coded information about all minimizers available. - -class MinimizerCatalog { -public: - MinimizerCatalog(); - - std::string toString() const; - - std::vector<std::string> minimizerNames() const; - - std::vector<std::string> algorithmNames(const std::string& minimizerName) const; - - std::vector<std::string> algorithmDescriptions(const std::string& minimizerName) const; - - const MinimizerInfo& minimizerInfo(const std::string& minimizerName) const; - -private: - void addMinimizerInfo(MinimizerInfo&& info); - std::vector<MinimizerInfo> m_minimizers; -}; - -#endif // BORNAGAIN_FIT_MINIMIZER_MINIMIZERCATALOG_H