BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
PyFmtLimits.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sim/Export/PyFmtLimits.cpp
6 //! @brief Implements functions from namespace pyfmt.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #include "Sim/Export/PyFmtLimits.h"
16 #include "Base/Py/PyFmt.h"
17 #include "Fit/Param/RealLimits.h"
18 #include <iomanip>
19 
20 namespace Py::Fmt {
21 
22 std::string printRealLimits(const RealLimits& limits, const std::string& units)
23 {
24  std::ostringstream result;
25 
26  if (limits.isLimitless())
27  result << "RealLimits()";
28 
29  else if (limits.isPositive())
30  result << "RealLimits.positive()";
31 
32 
33  else if (limits.isNonnegative())
34  result << "RealLimits.nonnegative()";
35 
36 
37  else if (limits.isLowerLimited()) {
38  result << "RealLimits.lowerLimited(" << Py::Fmt::printValue(limits.lowerLimit(), units)
39  << ")";
40  }
41 
42  else if (limits.isUpperLimited()) {
43  result << "RealLimits.upperLimited(" << Py::Fmt::printValue(limits.upperLimit(), units)
44  << ")";
45  }
46 
47  else if (limits.isLimited()) {
48  result << "RealLimits.limited(" << Py::Fmt::printValue(limits.lowerLimit(), units) << ", "
49  << Py::Fmt::printValue(limits.upperLimit(), units) << ")";
50  }
51 
52  return result.str();
53 }
54 
55 //! Prints RealLimits in the form of argument (in the context of ParameterDistribution and
56 //! similar). Default RealLimits will not be printed, any other will be printed as
57 //! ", ba.RealLimits.limited(1*deg, 2*deg)"
58 
59 std::string printRealLimitsArg(const RealLimits& limits, const std::string& units)
60 {
61  return limits.isLimitless() ? "" : ", ba." + printRealLimits(limits, units);
62 }
63 
64 } // namespace Py::Fmt
Defines namespace pyfmt.
Defines namespace pyfmt.
Defines class RealLimits.
Limits for a real fit parameter.
Definition: RealLimits.h:24
bool isLimited() const
Definition: RealLimits.cpp:218
bool isLowerLimited() const
Definition: RealLimits.cpp:208
bool isPositive() const
Definition: RealLimits.cpp:197
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:71
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:49
bool isNonnegative() const
Definition: RealLimits.cpp:203
bool isLimitless() const
Definition: RealLimits.cpp:192
bool isUpperLimited() const
Definition: RealLimits.cpp:213
Utility functions for writing Python code snippets.
Definition: PyFmt.cpp:22
std::string printRealLimitsArg(const RealLimits &limits, const std::string &units)
Prints RealLimits in the form of argument (in the context of ParameterDistribution and similar)....
Definition: PyFmtLimits.cpp:59
std::string printRealLimits(const RealLimits &limits, const std::string &units)
Definition: PyFmtLimits.cpp:22
std::string printValue(double value, const std::string &units)
Definition: PyFmt.cpp:123