00001 #ifndef _theplu_yat_normalizer_gauss_
00002 #define _theplu_yat_normalizer_gauss_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "Spearman.h"
00027 #include "yat/utility/iterator_traits.h"
00028
00029 #include <boost/concept_check.hpp>
00030
00031 #include <gsl/gsl_cdf.h>
00032
00033 #include <iterator>
00034
00035 namespace theplu {
00036 namespace yat {
00037 namespace normalizer {
00038
00051 class Gauss
00052 {
00053 public:
00067 template<typename RandomAccessIter1, typename RandomAccessIter2>
00068 void operator()(RandomAccessIter1 first, RandomAccessIter1 last,
00069 RandomAccessIter2 result) const
00070 {
00071 BOOST_CONCEPT_ASSERT((boost::RandomAccessIterator<RandomAccessIter1>));
00072 BOOST_CONCEPT_ASSERT((boost::Mutable_RandomAccessIterator<RandomAccessIter2>));
00073 Spearman spearman;
00074 spearman(first, last, result);
00075 RandomAccessIter2 end = result + std::distance(first, last);
00076 utility::iterator_traits<RandomAccessIter2> trait;
00077 while (result != end) {
00078 trait.data(result) = gsl_cdf_ugaussian_Pinv(trait.data(result));
00079 ++result;
00080 }
00081 }
00082
00083
00084 private:
00085 };
00086
00087 }}}
00088 #endif