#ifndef NBETA_MODEL_H_ #define NBETA_MODEL_H_ #include #include #include namespace opt_utilities { template class nbeta1d :public model ,std::string> { private: model >* do_clone()const { return new nbeta1d(*this); } public: nbeta1d() { 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./2.*beta); } private: std::string do_to_string()const { return "density beta model\n" "n=n0*(1+(r/rc)^2)^(-1.5*beta)\n"; } }; }; #endif //EOF