ProteoWizard
Classes | Functions
ralab::base::filter::utilities Namespace Reference

Classes

struct  Gauss
 Gauss function. More...
 
struct  Gauss_1deriv
 First derivative of Gaussian. More...
 
struct  Mexican_Hat
 Mexican hat wavelet. More...
 
struct  Mexican_Hat2
 Mexican hat wavelet Version 2. More...
 

Functions

template<typename TReal >
TReal getGaussWorker (TReal sigma, std::vector< TReal > &gauss, std::vector< TReal > &x)
 
template<typename TReal >
void scaleDerivative (std::vector< TReal > &mh)
 
template<typename TReal >
TReal getGaussian1DerWorker (TReal sigma, std::vector< TReal > &gauss1d, std::vector< TReal > &x)
 
template<typename TReal >
TReal scaleWavelet (std::vector< TReal > &mh, std::vector< TReal > &x)
 Scales a mother wavelet so that the conditions hold:

\[ sum(mh) = 0 \]

\[ sum(mh^2) = 1 \]

. More...

 
template<typename TReal >
TReal getMaxHatWorker (TReal sigma, std::vector< TReal > &mh, std::vector< TReal > &x)
 
template<typename TContainer , typename TIterator >
TContainer::iterator prepareData (TIterator dataBeg, TIterator dataEnd, size_t fsize, TContainer &res, bool mirror=false)
 Example Sequence : 1 2 3 4 5; width 5 and mirror false: 4 5 1 2 3 4 5 1 2, if mirror true than: 2 1 1 2 3 4 5 5 4. More...
 

Function Documentation

§ getGaussWorker()

template<typename TReal >
TReal ralab::base::filter::utilities::getGaussWorker ( TReal  sigma,
std::vector< TReal > &  gauss,
std::vector< TReal > &  x 
)

Definition at line 94 of file gauss.hpp.

Referenced by ralab::base::filter::getGaussianFilter(), and ralab::base::filter::getGaussianFilterQuantile().

97  {
98  //generate response
99  Gauss<TReal> g(0.,sigma);
100  gauss.resize(x.size());
101  std::transform(x.begin(),x.end(),gauss.begin(),g);
102 
103  //ensure that are of gaussian is one...
104  TReal sum = std::accumulate(gauss.begin() , gauss.end() , 0.);
105  std::transform(gauss.begin(),gauss.end(),gauss.begin(),std::bind2nd(std::divides<TReal>(),sum )) ;
106  TReal sumfilter = std::accumulate(gauss.begin(),gauss.end(),0.);
107  return sumfilter;
108  }

§ scaleDerivative()

template<typename TReal >
void ralab::base::filter::utilities::scaleDerivative ( std::vector< TReal > &  mh)

Definition at line 112 of file gauss.hpp.

Referenced by getGaussian1DerWorker().

115  {
116  //do this so that the sum of wavelet equals zero
117  TReal sum = std::accumulate(mh.begin() , mh.end() , 0.);
118  sum /= mh.size();
119  std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::minus<TReal>(), sum )) ;
120  //compute sum of square...
121  TReal sumAbs = 0;
122  for(typename std::vector<TReal>::iterator it = mh.begin() ;it != mh.end(); ++it)
123  {
124  sumAbs += fabs(*it);
125  }
126  std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::divides<TReal>(), sumAbs )) ;
127  }

§ getGaussian1DerWorker()

template<typename TReal >
TReal ralab::base::filter::utilities::getGaussian1DerWorker ( TReal  sigma,
std::vector< TReal > &  gauss1d,
std::vector< TReal > &  x 
)

Definition at line 130 of file gauss.hpp.

References scaleDerivative().

Referenced by ralab::base::filter::getGaussian1DerFilter(), and ralab::base::filter::getGaussian1DerFilterQuantile().

131  {
132  Gauss_1deriv<TReal> g(0.,sigma);
133  gauss1d.resize(x.size());
134  std::transform(x.begin(),x.end(),gauss1d.begin(),g);
135  scaleDerivative(gauss1d);
136  TReal sum = std::accumulate(gauss1d.begin(),gauss1d.end(),0.);
137  return sum;
138  }
void scaleDerivative(std::vector< TReal > &mh)
Definition: gauss.hpp:112

§ scaleWavelet()

template<typename TReal >
TReal ralab::base::filter::utilities::scaleWavelet ( std::vector< TReal > &  mh,
std::vector< TReal > &  x 
)

Scales a mother wavelet so that the conditions hold:

\[ sum(mh) = 0 \]

\[ sum(mh^2) = 1 \]

.

Definition at line 111 of file mexhat.hpp.

Referenced by getMaxHatWorker().

115  {
116  //do this so that the sum of wavelet equals zero
117  TReal sum = std::accumulate(mh.begin() , mh.end() , 0.);
118  sum /= mh.size();
119  std::transform(mh.begin(),mh.end(),mh.begin(),std::bind2nd(std::minus<TReal>(), sum )) ;
120 
121  //compute sum of square...
122  std::transform( mh.begin(), mh.end(), x.begin(), ralab::base::stats::NthPower<2,TReal>() ); //first sqaure all elements
123  TReal sumsq = sqrt(std::accumulate(x.begin(), x.end() , TReal(0.)));
124  std::transform(mh.begin() , mh.end() , mh.begin() , std::bind2nd(std::divides<TReal>(), sumsq ) ) ;
125 
126  //this is just to verify the result
127  std::transform( mh.begin(), mh.end(), x.begin(), ralab::base::stats::NthPower<2,TReal>() ); //first sqaure all elements
128  sumsq = std::accumulate(x.begin(), x.end() , TReal(0.));
129  return sumsq;
130 
131  }

§ getMaxHatWorker()

template<typename TReal >
TReal ralab::base::filter::utilities::getMaxHatWorker ( TReal  sigma,
std::vector< TReal > &  mh,
std::vector< TReal > &  x 
)

Definition at line 134 of file mexhat.hpp.

References scaleWavelet().

135  {
136  ralab::base::filter::utilities::Mexican_Hat<TReal> mexHatGenerator(0.,sigma);
137  mh.resize( x.size() );
138  std::transform( x.begin() ,x.end(),mh.begin(),mexHatGenerator);
139  scaleWavelet(mh, x);
140  TReal sum = std::accumulate(mh.begin(),mh.end(),0.);
141  return sum;
142  }
TReal scaleWavelet(std::vector< TReal > &mh, std::vector< TReal > &x)
Scales a mother wavelet so that the conditions hold: .
Definition: mexhat.hpp:111

§ prepareData()

template<typename TContainer , typename TIterator >
TContainer::iterator ralab::base::filter::utilities::prepareData ( TIterator  dataBeg,
TIterator  dataEnd,
size_t  fsize,
TContainer &  res,
bool  mirror = false 
)

Example Sequence : 1 2 3 4 5; width 5 and mirror false: 4 5 1 2 3 4 5 1 2, if mirror true than: 2 1 1 2 3 4 5 5 4.

Parameters
[out]res
mirrorshould it be circular or mirrored.

Definition at line 40 of file preparedata.hpp.

Referenced by ralab::base::filter::filter_sequence().

47  {
48  if(mirror)
49  {
50  typename TContainer::iterator it;
51  size_t fsize2 = (fsize-1)/2;
52  res.resize(std::distance(dataBeg,dataEnd)+fsize);
53  boost::reverse_iterator<TIterator> reverse_begin(dataEnd);
54  boost::reverse_iterator<TIterator> reverse_end(dataBeg);
55 
56  it = std::copy(reverse_end - fsize2,reverse_end, res.begin() );
57  it = std::copy(dataBeg,dataEnd, it );
58  it = std::copy( reverse_begin, reverse_begin + fsize2, it);
59  return it;
60  }
61  else
62  {
63  typename TContainer::iterator it;
64  size_t fsize2 = (fsize-1)/2;
65  res.resize(std::distance(dataBeg,dataEnd)+fsize);
66  it = std::copy(dataEnd - fsize2,dataEnd, res.begin() );
67  it = std::copy(dataBeg,dataEnd, it );
68  it = std::copy( dataBeg, dataBeg + fsize2, it);
69  return it;
70  }
71  }