diff options
-rw-r--r-- | vmodels/exp_bkg.hpp | 62 | ||||
-rw-r--r-- | vmodels/pl_bkg.hpp | 61 |
2 files changed, 123 insertions, 0 deletions
diff --git a/vmodels/exp_bkg.hpp b/vmodels/exp_bkg.hpp new file mode 100644 index 0000000..d2c7c7e --- /dev/null +++ b/vmodels/exp_bkg.hpp @@ -0,0 +1,62 @@ +/** + \file exp_bkg.hpp + \brief power law model + \author Junhua Gu + */ + + +#ifndef EXP_BKG_MODEL_H_ +#define EXP_BKG_MODEL_H_ +#define OPT_HEADER +#include <core/fitter.hpp> +#include <cmath> +#include <misc/optvec.hpp> + +namespace opt_utilities +{ + template <typename T> + class exp_bkg + :public model<optvec<T>,optvec<T>,optvec<T>,std::string> + { + private: + exp_bkg* do_clone()const + { + return new exp_bkg<T>(*this); + } + + const char* do_get_type_name()const + { + return "exp with bkg"; + } + public: + exp_bkg() + { + this->push_param_info(param_info<optvec<T> >("Ampl",1)); + this->push_param_info(param_info<optvec<T> >("scale",1)); + this->push_param_info(param_info<optvec<T> >("bkg",1)); + + } + + optvec<T> do_eval(const optvec<T>& x,const optvec<T>& param) + { + T A=get_element(param,0); + T scale=get_element(param,1); + T bkg=get_element(param,2); + return A*exp(-x/abs(scale))+bkg; + } + + private: + std::string do_get_information()const + { +#ifdef WITH_OPT_DOC +#include <model_doc/exp_bkg.info> +#endif + return ""; + } + }; +} + + + +#endif +//EOF diff --git a/vmodels/pl_bkg.hpp b/vmodels/pl_bkg.hpp new file mode 100644 index 0000000..3b787b9 --- /dev/null +++ b/vmodels/pl_bkg.hpp @@ -0,0 +1,61 @@ +/** + \file pl_bkg.hpp + \brief power law model + \author Junhua Gu + */ + + +#ifndef POWER_LAW_BKG_MODEL_H_ +#define POWER_LAW_BKG_MODEL_H_ +#define OPT_HEADER +#include <core/fitter.hpp> +#include <cmath> +#include <misc/optvec.hpp> + +namespace opt_utilities +{ + template <typename T> + class pl_bkg + :public model<optvec<T>,optvec<T>,optvec<T>,std::string> + { + private: + pl_bkg* do_clone()const + { + return new pl_bkg<T>(*this); + } + + const char* do_get_type_name()const + { + return "power law with bkg"; + } + public: + pl_bkg() + { + this->push_param_info(param_info<optvec<T> >("Ampl",1)); + this->push_param_info(param_info<optvec<T> >("gamma",1)); + this->push_param_info(param_info<optvec<T> >("bkg",1)); + } + + optvec<T> do_eval(const optvec<T>& x,const optvec<T>& param) + { + T A=get_element(param,0); + T gamma=get_element(param,1); + T bkg=get_element(param,2); + return A*pow(x,gamma)+bkg; + } + + private: + std::string do_get_information()const + { +#ifdef WITH_OPT_DOC +#include <model_doc/pl_bkg.info> +#endif + return ""; + } + }; +} + + + +#endif +//EOF |