#ifndef NBETA_MODEL_H_ #define NBETA_MODEL_H_ #define OPT_HEADER #include #include #include namespace opt_utilities { template class nbeta1d :public model ,std::string> { private: model >* do_clone()const { return new nbeta1d(*this); } const char* do_get_type_name()const { return "1d density beta model"; } public: nbeta1d() { this->push_param_info(param_info >("n0",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 n0=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+n0*pow(1+(x*x)/(r_c*r_c),-3./2.*beta); } private: std::string do_to_string()const { return "f(x;n0,β,rc,bkg) = n0 1 + rrc 2 32β+12 + bkg"; } }; } #endif //EOF