aboutsummaryrefslogtreecommitdiffstats
path: root/models/beta2d.hpp
diff options
context:
space:
mode:
authorastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2008-12-15 07:26:12 +0000
committerastrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675>2008-12-15 07:26:12 +0000
commit1f4a944064bc42284c33e6b755353d191cf288e8 (patch)
treec8cb2253dea5f395e0f867aa6976433bd3eb00de /models/beta2d.hpp
downloadopt-utilities-1f4a944064bc42284c33e6b755353d191cf288e8.tar.bz2
git-svn-id: file:///home/svn/opt_utilities@1 ed2142bd-67ad-457f-ba7c-d818d4011675
Diffstat (limited to 'models/beta2d.hpp')
-rw-r--r--models/beta2d.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/models/beta2d.hpp b/models/beta2d.hpp
new file mode 100644
index 0000000..abb6da1
--- /dev/null
+++ b/models/beta2d.hpp
@@ -0,0 +1,60 @@
+#ifndef BETA_MODEL2d_H_
+#define BETA_MODEL2d_H_
+#include <core/fitter.hpp>
+#include <cmath>
+#include <cassert>
+#include "vecn.hpp"
+
+
+namespace opt_utilities
+{
+
+ template <typename T>
+ class beta2d
+ :public model<T,vecn<T,2>,std::vector<T>,std::string>
+ {
+ private:
+ model<T,vecn<T,2>,std::vector<T> >* do_clone()const
+ {
+ return new beta2d<T>(*this);
+ }
+ public:
+ beta2d()
+ {
+ this->push_param_info(param_info<std::vector<T> >("S0",1));
+ this->push_param_info(param_info<std::vector<T> >("rc1",100));
+ this->push_param_info(param_info<std::vector<T> >("rc2",100));
+ this->push_param_info(param_info<std::vector<T> >("rho",0));
+ this->push_param_info(param_info<std::vector<T> >("x0",100));
+ this->push_param_info(param_info<std::vector<T> >("y0",100));
+ this->push_param_info(param_info<std::vector<T> >("beta",2./3.));
+ this->push_param_info(param_info<std::vector<T> >("bkg",0));
+ }
+
+
+ T do_eval(const vecn<T,2>& xy,const std::vector<T>& param)
+ {
+ T S0=get_element(param,0);
+ T rc1=get_element(param,1);
+ T rc2=get_element(param,2);
+ T rho=get_element(param,3);
+ T x0=get_element(param,4);
+ T y0=get_element(param,5);
+ T beta=get_element(param,6);
+ T bkg=get_element(param,7);
+ T x=xy[0];
+ T y=xy[1];
+
+ T r=(x-x0)*(x-x0)/(rc1*rc1)+(y-y0)*(y-y0)/(rc2*rc2)
+ -2*rho*(x-x0)*(y-y0)/(rc1*rc2);
+ r=r<0?0:r;
+
+ return bkg+S0*pow(1+r,-3*beta+static_cast<T>(.5));
+ }
+ };
+};
+
+
+
+#endif
+//EOF