#ifndef BETA_MODEL_H_ #define BETA_MODEL_H_ #include #include #include namespace opt_utilities { template class beta1d :public model,std::string> { private: model >* do_clone()const { return new beta1d(*this); } 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=get_element(param,0); T r_c=get_element(param,1); T beta=get_element(param,2); T bkg=get_element(param,3); return bkg+S0*pow(1+(x*x)/(r_c*r_c),-3*beta+static_cast(.5)); } std::string do_to_string()const { return "Beta model\n" "S=S0*(1+(r/rc)^2)^(-3*beta+0.5)\n"; } }; } #endif //EOF