/** \file beta1d.hpp \brief 1d beta model \author Junhua Gu */ #ifndef BETA_MODEL_H_ #define BETA_MODEL_H_ #define OPT_HEADER #include #include #include namespace opt_utilities { template class beta1d :public model,std::string> { private: model >* do_clone()const { return new beta1d(*this); } const char* do_get_type_name()const { return "1d beta model"; } public: beta1d() { this->push_param_info(param_info >("S0",1)); this->push_param_info(param_info >("rc",10)); this->push_param_info(param_info >("beta",2./3.)); this->push_param_info(param_info >("bkg",0)); } T do_eval(const T& x,const std::vector& param) { T S0=std::abs(get_element(param,0)); T r_c=get_element(param,1); T beta=std::abs(get_element(param,2)); T bkg=std::abs(get_element(param,3)); return bkg+S0*pow(1+(x*x)/(r_c*r_c),-3*beta+static_cast(.5)); } std::string do_get_information()const { return "f(x;S0,β,rc,bkg) = S0 1 + rrc 2 3β+12 + bkg"; } }; } #endif //EOF