BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
PyFmtLimits.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Param/Varia/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 
16 #include "Base/Utils/PyFmt.h"
17 #include "Fit/Tools/RealLimits.h"
18 #include <iomanip>
19 
20 namespace pyfmt
21 {
22 
23 std::string printRealLimits(const RealLimits& limits, const std::string& units)
24 {
25  std::ostringstream result;
26 
27  if (limits.isLimitless()) {
28  result << "RealLimits()";
29  }
30 
31  else if (limits.isPositive()) {
32  result << "RealLimits.positive()";
33  }
34 
35  else if (limits.isNonnegative()) {
36  result << "RealLimits.nonnegative()";
37  }
38 
39  else if (limits.isLowerLimited()) {
40  result << "RealLimits.lowerLimited(" << pyfmt::printValue(limits.lowerLimit(), units)
41  << ")";
42  }
43 
44  else if (limits.isUpperLimited()) {
45  result << "RealLimits.upperLimited(" << pyfmt::printValue(limits.upperLimit(), units)
46  << ")";
47  }
48 
49  else if (limits.isLimited()) {
50  result << "RealLimits.limited(" << pyfmt::printValue(limits.lowerLimit(), units) << ", "
51  << pyfmt::printValue(limits.upperLimit(), units) << ")";
52  }
53 
54  return result.str();
55 }
56 
57 //! Prints RealLimits in the form of argument (in the context of ParameterDistribution and
58 //! similar). Default RealLimits will not be printed, any other will be printed as
59 //! ", ba.RealLimits.limited(1*deg, 2*deg)"
60 
61 std::string printRealLimitsArg(const RealLimits& limits, const std::string& units)
62 {
63  return limits.isLimitless() ? "" : ", ba." + printRealLimits(limits, units);
64 }
65 
66 } // namespace pyfmt
Defines functions in namespace pyfmt.
Defines functions in namespace pyfmt.
Defines class RealLimits.
Limits for a real fit parameter.
Definition: RealLimits.h:25
bool isLimited() const
Definition: RealLimits.cpp:197
bool isLowerLimited() const
Definition: RealLimits.cpp:187
bool isPositive() const
Definition: RealLimits.cpp:176
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:60
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:38
bool isNonnegative() const
Definition: RealLimits.cpp:182
bool isLimitless() const
Definition: RealLimits.cpp:171
bool isUpperLimited() const
Definition: RealLimits.cpp:192
Utility functions for writing Python code snippets.
Definition: PyFmt.cpp:22
std::string printRealLimits(const RealLimits &limits, const std::string &units)
Definition: PyFmtLimits.cpp:23
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:61
std::string printValue(double value, const std::string &units)
Definition: PyFmt.cpp:104