/*************************************************************************** * GModelPar.hpp - Model parameter class * * ----------------------------------------------------------------------- * * copyright (C) 2009-2013 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /** * @file GModelPar.hpp * @brief Model parameter class interface definition * @author Juergen Knoedlseder */ #ifndef GMODELPAR_HPP #define GMODELPAR_HPP /* __ Includes ___________________________________________________________ */ #include #include "GOptimizerPar.hpp" #include "GXmlElement.hpp" /***********************************************************************//** * @class GModelPar * * @brief Model parameter class * * This class implements a model parameter. A model parameter is a numerical * value that is used to describe a model. A model parameter has the * following attributes: * - @p value gives the numerical value of the parameter * - @p error gives the statistical uncertainty in the parameter value * - @p gradient gives the gradient of a the model with respect to the * parameter * - @p min gives the minimum value that the parameter value can take * - @p max gives the maximum value that the parameter value can take * * The parameter attributes are set and retrieved using the value(), * error(), gradient(), min() and max() methods, respectively. Furthermore, * the range() method is used to simultaneously set the minimum and maximum * value of a parameter. * * The minimum and maximum values are optional, and existence of these * attributes is tested using the has_min() and has_max() methods, * respectively. The minimum value, maximum value are removed using the * remove_min() and remove_max() methods. Simultaneous removal of minimum * and maximum values is done using the remove_range() method. * * Each parameter has furthermore the following properties: * - @p free specifies whether the parameter should be fitted * - @p grad specifies whether the parameter gradient is computed * analytically (true) or numerically (false) * * The parameter property @p free is set using the free() and fix() * methods and it is retrieved using the is_free() and is_fixed() methods. * The attribute @p grad is set and retrieved using the has has_grad() * methods. * * Each model parameter is factorized into a @p factor and a @p scale * term. The GModelPar class stores the factors and the scale factor has * data members, and the true values are computed using the following * relations: * * value = m_factor_value * m_scale * error = m_factor_error * m_scale * gradient = m_factor_gradient * m_scale * min = m_factor_min * m_scale * max = m_factor_max * m_scale * * The @p factor and @p scale terms can be set and retrieved using the * factor_value(), factor_error(), factor_gradient(), factor_min(), * factor_max() and scale() methods. ***************************************************************************/ class GModelPar : public GOptimizerPar { public: // Constructors and destructors GModelPar(void); GModelPar(const std::string& name, const double& value); GModelPar(const std::string& name, const double& factor, const double& scale); GModelPar(const GModelPar& par); virtual ~GModelPar(void); // Operators GModelPar& operator=(const GModelPar& par); // Methods GModelPar* clone(void) const; void read(const GXmlElement& xml); void write(GXmlElement& xml) const; protected: // Protected methods void init_members(void); void copy_members(const GModelPar& par); void free_members(void); }; #endif /* GMODELPAR_HPP */