/** * Parameters by name. * @param name :: The name of the parameter. * @return the value of the named parameter */ double ParamFunction::getParameter(const std::string &name) const { std::string ucName(name); // std::transform(name.begin(), name.end(), ucName.begin(), toupper); auto it = std::find(m_parameterNames.cbegin(), m_parameterNames.cend(), ucName); if (it == m_parameterNames.cend()) { std::ostringstream msg; msg << "ParamFunction tries to get value of non-existing parameter (" << ucName << ") " << "to function " << this->name(); msg << "\nAllowed parameters: "; for (const auto ¶meterName : m_parameterNames) msg << parameterName << ", "; throw std::invalid_argument(msg.str()); } double parvalue = m_parameters[it - m_parameterNames.cbegin()]; if (parvalue != parvalue || !(parvalue > -DBL_MAX && parvalue < DBL_MAX)) { g_log.warning() << "Parameter " << name << " has a NaN or infinity value " << std::endl; } return parvalue; }
/** * Returns the index of the parameter named name. * @param name :: The name of the parameter. * @return the index of the named parameter */ size_t ParamFunction::parameterIndex(const std::string &name) const { std::string ucName(name); // std::transform(name.begin(), name.end(), ucName.begin(), toupper); auto it = std::find(m_parameterNames.cbegin(), m_parameterNames.cend(), ucName); if (it == m_parameterNames.cend()) { std::ostringstream msg; msg << "ParamFunction " << this->name() << " does not have parameter (" << ucName << ")."; throw std::invalid_argument(msg.str()); } return std::distance(m_parameterNames.cbegin(), it); }
/** * Returns the index of the parameter named name. * @param name :: The name of the parameter. * @return the index of the named parameter */ size_t ParamFunction::parameterIndex(const std::string& name)const { std::string ucName(name); //std::transform(name.begin(), name.end(), ucName.begin(), toupper); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(),m_parameterNames.end(),ucName); if (it == m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction "<<this->name()<<" does not have parameter ("<<ucName<<")."; throw std::invalid_argument(msg.str()); } return int(it - m_parameterNames.begin()); }
/** * Parameters by name. * @param name :: The name of the parameter. * @return the value of the named parameter */ double ParamFunction::getParameter(const std::string& name)const { std::string ucName(name); //std::transform(name.begin(), name.end(), ucName.begin(), toupper); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(),m_parameterNames.end(),ucName); if (it == m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction parameter ("<<ucName<<") does not exist."; throw std::invalid_argument(msg.str()); } return m_parameters[it - m_parameterNames.begin()]; }
/** * Sets a new description to a parameter by name. * @param name :: The name of the parameter. * @param description :: New parameter description */ void ParamFunction::setParameterDescription(const std::string& name, const std::string& description) { std::string ucName(name); //std::transform(name.begin(), name.end(), ucName.begin(), toupper); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(),m_parameterNames.end(),ucName); if (it == m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction parameter ("<<ucName<<") does not exist."; throw std::invalid_argument(msg.str()); } setParameterDescription(static_cast<int>(it - m_parameterNames.begin()),description); }
/** * Sets a new description to a parameter by name. * @param name :: The name of the parameter. * @param description :: New parameter description */ void ParamFunction::setParameterDescription(const std::string &name, const std::string &description) { std::string ucName(name); // std::transform(name.begin(), name.end(), ucName.begin(), toupper); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(), m_parameterNames.end(), ucName); if (it == m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction tries to set description to non-exist parameter (" << ucName << "). "; msg << "\nAllowed parameters: "; for (auto ¶meterName : m_parameterNames) msg << parameterName << ", "; throw std::invalid_argument(msg.str()); } setParameterDescription(static_cast<int>(it - m_parameterNames.begin()), description); }
/** * Declare a new parameter. To used in the implementation'c constructor. * @param name :: The parameter name. * @param initValue :: The initial value for the parameter * @param description :: The description for the parameter */ void ParamFunction::declareParameter(const std::string& name,double initValue, const std::string& description) { std::string ucName(name); //std::transform(name.begin(), name.end(), ucName.begin(), toupper); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(),m_parameterNames.end(),ucName); if (it != m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction parameter ("<<ucName<<") already exists."; throw std::invalid_argument(msg.str()); } m_indexMap.push_back(nParams()); m_parameterNames.push_back(ucName); m_parameterDescriptions.push_back(description); m_parameters.push_back(initValue); m_explicitlySet.push_back(false); }
/** * Sets a new value to a parameter by name. * @param name :: The name of the parameter. * @param value :: The new value * @param explicitlySet :: A boolean flagging the parameter as explicitly set * (by user) */ void ParamFunction::setParameter(const std::string &name, const double &value, bool explicitlySet) { std::string ucName(name); std::vector<std::string>::const_iterator it = std::find(m_parameterNames.begin(), m_parameterNames.end(), ucName); if (it == m_parameterNames.end()) { std::ostringstream msg; msg << "ParamFunction tries to set value to non-exist parameter (" << ucName << ") " << "of function " << this->name(); msg << "\nAllowed parameters: "; for (auto ¶meterName : m_parameterNames) { msg << parameterName << ", "; } throw std::invalid_argument(msg.str()); } setParameter(static_cast<int>(it - m_parameterNames.begin()), value, explicitlySet); }