BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RealLimits.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Param/RealLimits.h
6 //! @brief Defines class RealLimits.
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 #ifndef BORNAGAIN_FIT_PARAM_REALLIMITS_H
16 #define BORNAGAIN_FIT_PARAM_REALLIMITS_H
17 
18 #include <ostream>
19 #include <string>
20 
21 //! Limits for a real fit parameter.
22 //! @ingroup fitting
23 
24 class RealLimits {
25 public:
26  RealLimits();
27 
28  //! if has lower limit
29  bool hasLowerLimit() const;
30 
31  //! Returns lower limit
32  double lowerLimit() const;
33 
34  //! Sets lower limit
35  void setLowerLimit(double value);
36 
37  //! remove lower limit
38  void removeLowerLimit();
39 
40  //! if has upper limit
41  bool hasUpperLimit() const;
42 
43  //! Returns upper limit
44  double upperLimit() const;
45 
46  //! Sets upper limit
47  void setUpperLimit(double value);
48 
49  //! remove upper limit
50  void removeUpperLimit();
51 
52  //! if has lower and upper limit
53  bool hasLowerAndUpperLimits() const;
54 
55  //! Sets lower and upper limits
56  void setLimits(double xmin, double xmax);
57 
58  //! remove limits
59  void removeLimits();
60 
61  //! returns true if proposed value is in limits range
62  bool isInRange(double value) const;
63 
64  //! Creates an object bounded from the left
65  static RealLimits lowerLimited(double bound_value);
66 
67  //! Creates an object which can have only positive values (>0., zero is not included)
68  static RealLimits positive();
69 
70  //! Creates an object which can have only positive values with 0. included
71  static RealLimits nonnegative();
72 
73  //! Creates an object bounded from the right
74  static RealLimits upperLimited(double bound_value);
75 
76  //! Creates an object bounded from the left and right
77  static RealLimits limited(double left_bound_value, double right_bound_value);
78 
79  //! Creates an object withoud bounds (default)
80  static RealLimits limitless();
81 
82  std::string toString() const;
83 
84  //! Prints class
85  friend std::ostream& operator<<(std::ostream& ostr, const RealLimits& m)
86  {
87  ostr << m.toString();
88  return ostr;
89  }
90 
91  bool operator==(const RealLimits& other) const;
92  bool operator!=(const RealLimits& other) const;
93 
94  bool isLimitless() const;
95  bool isPositive() const;
96  bool isNonnegative() const;
97  bool isLowerLimited() const;
98  bool isUpperLimited() const;
99  bool isLimited() const;
100 
101 protected:
102  RealLimits(bool has_lower_limit, bool has_upper_limit, double lower_limit, double upper_limit);
103 
104  bool m_has_lower_limit; //! parameter has lower bound
105  bool m_has_upper_limit; //! parameter has upper bound
106  double m_lower_limit; //! minimum allowed value
107  double m_upper_limit; //! maximum allowed value
108 };
109 
110 #endif // BORNAGAIN_FIT_PARAM_REALLIMITS_H
Limits for a real fit parameter.
Definition: RealLimits.h:24
bool isLimited() const
Definition: RealLimits.cpp:199
static RealLimits limitless()
Creates an object withoud bounds (default)
Definition: RealLimits.cpp:130
std::string toString() const
Definition: RealLimits.cpp:135
bool m_has_lower_limit
Definition: RealLimits.h:104
void removeLowerLimit()
remove lower limit
Definition: RealLimits.cpp:51
static RealLimits upperLimited(double bound_value)
Creates an object bounded from the right.
Definition: RealLimits.cpp:120
bool isLowerLimited() const
Definition: RealLimits.cpp:189
bool isPositive() const
Definition: RealLimits.cpp:178
bool operator==(const RealLimits &other) const
Definition: RealLimits.cpp:161
bool hasUpperLimit() const
if has upper limit
Definition: RealLimits.cpp:57
static RealLimits lowerLimited(double bound_value)
Creates an object bounded from the left.
Definition: RealLimits.cpp:105
bool hasLowerAndUpperLimits() const
if has lower and upper limit
Definition: RealLimits.cpp:79
static RealLimits positive()
Creates an object which can have only positive values (>0., zero is not included)
Definition: RealLimits.cpp:110
friend std::ostream & operator<<(std::ostream &ostr, const RealLimits &m)
Prints class.
Definition: RealLimits.h:85
bool isInRange(double value) const
returns true if proposed value is in limits range
Definition: RealLimits.cpp:96
double m_lower_limit
parameter has upper bound
Definition: RealLimits.h:106
bool m_has_upper_limit
parameter has lower bound
Definition: RealLimits.h:105
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:62
void setLowerLimit(double value)
Sets lower limit.
Definition: RealLimits.cpp:45
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:40
void removeUpperLimit()
remove upper limit
Definition: RealLimits.cpp:73
bool isNonnegative() const
Definition: RealLimits.cpp:184
bool operator!=(const RealLimits &other) const
Definition: RealLimits.cpp:168
void setLimits(double xmin, double xmax)
Sets lower and upper limits.
Definition: RealLimits.cpp:84
bool isLimitless() const
Definition: RealLimits.cpp:173
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
Definition: RealLimits.cpp:115
double m_upper_limit
minimum allowed value
Definition: RealLimits.h:107
void removeLimits()
remove limits
Definition: RealLimits.cpp:90
bool isUpperLimited() const
Definition: RealLimits.cpp:194
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:125
bool hasLowerLimit() const
if has lower limit
Definition: RealLimits.cpp:35
void setUpperLimit(double value)
Sets upper limit.
Definition: RealLimits.cpp:67