diff options
author | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2010-02-08 09:23:14 +0000 |
---|---|---|
committer | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2010-02-08 09:23:14 +0000 |
commit | db1d374b7a24b8f3f74e17d706704d93f1e66d90 (patch) | |
tree | f6043b9df2ebfca0b4fea721e14d861785e985a5 /misc/optvec.hpp | |
parent | 435b4484e00b1ac3b6ee5e87b81f5b8af4f1e653 (diff) | |
download | opt-utilities-db1d374b7a24b8f3f74e17d706704d93f1e66d90.tar.bz2 |
git-svn-id: file:///home/svn/opt_utilities@110 ed2142bd-67ad-457f-ba7c-d818d4011675
Diffstat (limited to 'misc/optvec.hpp')
-rw-r--r-- | misc/optvec.hpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/misc/optvec.hpp b/misc/optvec.hpp index cc85ccf..b259029 100644 --- a/misc/optvec.hpp +++ b/misc/optvec.hpp @@ -25,8 +25,8 @@ namespace opt_utilities optvec& operator=(const optvec& rhs) { - //dynamic_cast<std::vector<T>&>(*this).operator=(rhs); - std::vector<T>::operator=(rhs); + static_cast<std::vector<T>&>(*this).operator=(rhs); + //std::cerr<<"rhs.size="<<rhs.size()<<std::endl; return *this; } public: @@ -208,8 +208,8 @@ namespace opt_utilities optvec<T> operator/(const T& x1,const optvec<T>& x2) { - optvec<T> result(x1.size()); - for(size_t i=0;i!=x1.size();++i) + optvec<T> result(x2.size()); + for(size_t i=0;i!=x2.size();++i) { result[i]=x1/x2[i]; } @@ -260,6 +260,30 @@ namespace opt_utilities return false; } + template <typename Ty> + inline Ty randn(Ty y0,Ty y_err) + { + Ty y; + do + { + y=(rand()/(Ty)RAND_MAX-(Ty).5)*(10*y_err)+y0; + } + while(rand()/(Ty)RAND_MAX>exp(-(y-y0)*(y-y0)/(y_err*y_err))); + return y; + } + + + template <typename T> + optvec<T> rand_norm(const optvec<T>& y0, const optvec<T>& y_err) + { + optvec<T> result(y0.size()); + for(int i=0;i<y0.size();++i) + { + result[i]=randn(y0[i],y_err[i]); + } + return result; + } + } |