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

mv class MinimizerCatalog -> MinimizerFactory

parent 65ccc013
No related branches found
No related tags found
1 merge request!2675simplification and renaming of catalog classes
......@@ -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)
......
// ************************************************************************************************
//
// 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));
}
// ************************************************************************************************
//
// 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
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