23 : m_P(std::move(PValues))
29 size_t nP =
m_P.size();
31 std::cerr <<
"BUG in class " <<
className() << std::endl;
32 std::cerr <<
"#m_P = " << nP << std::endl;
33 std::cerr <<
"#PDf = " <<
parDefs().size() << std::endl;
35 std::cerr <<
" PDf: " << pm.name << std::endl;
39 for (
size_t i = 0; i < nP; ++i) {
63 std::vector<const INode*> result;
64 result.push_back(
this);
66 for (
const auto* p : child->nodeOffspring())
Defines the macro ASSERT.
#define ASSERT(condition)
Defines class RealLimits.
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
std::vector< const INode * > nodeOffspring() const
Returns all descendants.
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
void checkNodeArgs() const
Raises exception if a parameter value is invalid.
std::vector< double > m_P
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Limits for a real fit parameter.
static RealLimits limitless()
Creates an object without bounds (default)
void check(const std::string &name, double value) const
Throws if value is outside limits. Parameter 'name' is for exception message.
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.