ProteoWizard
Public Member Functions | Public Attributes | List of all members
ralab::base::ms::SimplePicker< TReal > Struct Template Reference

#include <simplepicker.hpp>

Public Member Functions

 SimplePicker (TReal epsilon=1e-3)
 
template<typename Tit , typename Outit >
size_t operator() (Tit beg, Tit end, Outit zerocrossings, size_t nzercross, std::ptrdiff_t lag=2)
 
bool getProblem () const
 

Public Attributes

std::vector< TReal > worker_
 
double epsilon_
 
bool problem_
 

Detailed Description

template<class TReal>
struct ralab::base::ms::SimplePicker< TReal >

computes first derivative of a sequence, looks for zero crossings

Definition at line 39 of file simplepicker.hpp.

Constructor & Destructor Documentation

§ SimplePicker()

template<class TReal>
ralab::base::ms::SimplePicker< TReal >::SimplePicker ( TReal  epsilon = 1e-3)
inline

Definition at line 44 of file simplepicker.hpp.

Member Function Documentation

§ operator()()

template<class TReal>
template<typename Tit , typename Outit >
size_t ralab::base::ms::SimplePicker< TReal >::operator() ( Tit  beg,
Tit  end,
Outit  zerocrossings,
size_t  nzercross,
std::ptrdiff_t  lag = 2 
)
inline

returns number of zero crossings found

Parameters
nzercrosspicked peaks

Definition at line 49 of file simplepicker.hpp.

References boost::lexical_cast(), and x.

54  {
55  if((lag % 2 ) == 1){
56  return -1;
57  }
58  worker_.resize(std::distance(beg,end) - lag);
59  TReal * pworkerBeg = &worker_[0];
60  TReal * pworkerEnd = &worker_[0] + worker_.size();
61 
62  Tit tbegin = beg;
63  Tit tbeginm1 = tbegin + ( lag);
64  for(;tbeginm1 != end ; ++tbeginm1, ++tbegin, ++pworkerBeg )
65  {
66  *pworkerBeg = (*tbeginm1 - *tbegin);
67  }
68 
69  //reset worker
70  pworkerBeg = &worker_[0];
71  std::size_t crosscount = 0;
72  for( int i = 0 ; (pworkerBeg != pworkerEnd-1) ; ++pworkerBeg , ++i )
73  {
74  if(crosscount >= nzercross){
75  problem_ = true;
76  return crosscount; // protect against memmory violations
77  std::string x = "nzerocross:";
78  x+=boost::lexical_cast<std::string>(nzercross);
79  x+=" crosscount:";
80  x+=boost::lexical_cast<std::string>(crosscount);
81  x+=" i: ";
82  x+= boost::lexical_cast<std::string>(i);
83  x+=" worker size ";
84  x+= boost::lexical_cast<std::string>( worker_.size() );
85  x+=" : ";
86  x+=boost::lexical_cast<std::string>(__LINE__);
87  x+=" : ";
88  x+= __FILE__;
89  throw std::length_error(x.c_str());
90  }
91  TReal v1 = (*pworkerBeg);
92  TReal v2 = *(pworkerBeg + 1);
93  //peak detected ... detect a zero crossing
94  if((v1 > 0 && v2 < 0) && ((v1 - v2) > epsilon_))
95  {
96  //determine zero crossing....
97  double frac = v1 / ( v1 - v2 );
98  double idx = static_cast<float>(i + lag/2) + frac;
99  *zerocrossings = ( idx );
100  ++zerocrossings;
101  ++crosscount;
102  }else if( v1 > 0 && v2 == 0 ){
103  TReal v3 = *(pworkerBeg + 2);
104  if((v3 < 0) && ((v1 - v3) > epsilon_)){
105  *zerocrossings = (i + lag/2 + 1.);
106  }
107  }else{
108  //just continue, nothing to handle...
109  }
110  }
111  return crosscount;
112  }
std::vector< TReal > worker_
float lexical_cast(const std::string &str)
KernelTraitsBase< Kernel >::space_type::abscissa_type x

§ getProblem()

template<class TReal>
bool ralab::base::ms::SimplePicker< TReal >::getProblem ( ) const
inline

Definition at line 114 of file simplepicker.hpp.

References ralab::base::ms::SimplePicker< TReal >::problem_.

114  {
115  return problem_;
116  }

Member Data Documentation

§ worker_

template<class TReal>
std::vector<TReal> ralab::base::ms::SimplePicker< TReal >::worker_

Definition at line 40 of file simplepicker.hpp.

§ epsilon_

template<class TReal>
double ralab::base::ms::SimplePicker< TReal >::epsilon_

Definition at line 41 of file simplepicker.hpp.

§ problem_

template<class TReal>
bool ralab::base::ms::SimplePicker< TReal >::problem_

Definition at line 42 of file simplepicker.hpp.

Referenced by ralab::base::ms::SimplePicker< TReal >::getProblem().


The documentation for this struct was generated from the following file: