From 1f4a944064bc42284c33e6b755353d191cf288e8 Mon Sep 17 00:00:00 2001 From: astrojhgu Date: Mon, 15 Dec 2008 07:26:12 +0000 Subject: git-svn-id: file:///home/svn/opt_utilities@1 ed2142bd-67ad-457f-ba7c-d818d4011675 --- interface/makefile | 13 ++++ interface/opt.cc | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++ interface/opt.h | 29 +++++++++ 3 files changed, 223 insertions(+) create mode 100644 interface/makefile create mode 100644 interface/opt.cc create mode 100644 interface/opt.h (limited to 'interface') diff --git a/interface/makefile b/interface/makefile new file mode 100644 index 0000000..5cf7a99 --- /dev/null +++ b/interface/makefile @@ -0,0 +1,13 @@ +INC=-I../ + + +libopt.a:opt.o + $(AR) $@ opt.o + +opt.o:opt.cc opt.h + $(CPP) $< -o $@ $(INC) $(CPPFLAGS) + + +clean: + $(RM) *.o + $(RM) *~ diff --git a/interface/opt.cc b/interface/opt.cc new file mode 100644 index 0000000..51762f5 --- /dev/null +++ b/interface/opt.cc @@ -0,0 +1,181 @@ +#include "opt.h" +#include +#include +#include +#include +#include +//#include + +using namespace std; +using namespace opt_utilities; +const static int max_fit_space_num=100; +struct fit_space; +static map fit_space_map; +struct fit_space +{ + dopt::fitter fit; + /// dopt::model model; + fit_space() + { + fit.set_method(dopt::powell_method()); + dopt::chisq cq; + // cq.verbose(true); + fit.set_statistic(cq); + } + +}; + + +extern "C" +{ + +void alloc_fit_(int& n) +{ + n=0; + for(int i=1;i::iterator iter=fit_space_map.find(n); + if(iter==fit_space_map.end()) + { + return; + } + fit_space_map.erase(iter); +} + +void load_data_(const int& nfit,const int& ndatas,double* x,double* y,double* yl,double* yu,double* xl,double* xu) +{ + map::iterator iter=fit_space_map.find(nfit); + if(iter==fit_space_map.end()) + { + return; + } + // cout< ds; + for(int i=0;i d(x[i],y[i],yl[i],(yu==0?yl[i]:yu[i]),(xl==0?0:xl[i]),(xu==0?0:xu[i])); + // cout<second.fit.load_data(ds); +} + + +void set_model_(const int& nfit,const char* model_name) +{ + map::iterator iter=fit_space_map.find(nfit); + + if(iter==fit_space_map.end()) + { + cerr<<"fit not found"<second.fit.set_model(opt_utilities::get_1dmodel_by_name(model_name)); + } + catch(opt_exception& e) + { + //cout<::iterator iter=fit_space_map.find(nfit); + cerr<<"pname="<second.fit.set_param_value(pname,value); +} + + +void freeze_param_(const int& nfit,const char* pname) +{ + map::iterator iter=fit_space_map.find(nfit); + if(iter==fit_space_map.end()) + { + return; + } + opt_utilities::freeze_param > fp(pname); + try + { + dynamic_cast >& >(iter->second.fit.get_param_modifier())+=fp; + } + catch(opt_exception& e) + { + iter->second.fit.set_param_modifier(fp); + } +} + + +void thaw_param_(const int& nfit,const char* pname) +{ + map::iterator iter=fit_space_map.find(nfit); + if(iter==fit_space_map.end()) + { + return; + } + opt_utilities::freeze_param > fp(pname); + try + { + dynamic_cast >& >(iter->second.fit.get_param_modifier())-=fp; + } + catch(opt_exception& e) + { + //iter->second.fit.set_param_modifier(fp); + } +} + +void perform_fit_(const int& nfit) +{ + map::iterator iter=fit_space_map.find(nfit); + if(iter==fit_space_map.end()) + { + return; + } + iter->second.fit.fit(); +} + + +void get_param_(const int& nfit,double& r,const char* pname) +{ + map::iterator iter=fit_space_map.find(nfit); + if(iter==fit_space_map.end()) + { + //return 0; + cerr<<"fit not found"<second.fit.get_param_value(pname); + +} + + + +} + diff --git a/interface/opt.h b/interface/opt.h new file mode 100644 index 0000000..e9c3221 --- /dev/null +++ b/interface/opt.h @@ -0,0 +1,29 @@ +#ifndef OPT_H +#define OPT_H +#define F77 +#ifdef F77 +#define alloc_fit_ alloc_fit__ +#define free_fit_ free_fit__ +#define load_data_ load_data__ +#define set_model_ set_model__ +#define set_param_ set_param__ +#define freeze_param_ freeze_param__ +#define thaw_param_ thaw_param__ +#define perform_fit_ perform_fit__ +#define get_param_ get_param__ +#endif + +extern "C" +{ + void alloc_fit_(int&); + void free_fit_(const int& nxc); + void load_data_(const int& nfit,const int& ndatas,double* x,double* y,double* yl,double* yu=0,double* xl=0,double* xu=0); + void set_model_(const int& nfit,const char* model_name); + void set_param_(const int& nfit,const char* param_name,const double& value); + void freeze_param_(const int& nfit,const char* param_name); + void thraw_param_(const int& nfit,const char* param_name); + void perform_fit_(const int& nfit); + void get_param_(const int& nfit,double& r,const char* param_name); +} + +#endif -- cgit v1.2.2