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.

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 }
KernelTraitsBase< Kernel >::space_type::abscissa_type x
std::vector< TReal > worker_

References ralab::base::ms::SimplePicker< TReal >::epsilon_, ralab::base::ms::SimplePicker< TReal >::problem_, ralab::base::ms::SimplePicker< TReal >::worker_, and x.

◆ getProblem()

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

Definition at line 114 of file simplepicker.hpp.

114 {
115 return problem_;
116 }

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

Member Data Documentation

◆ worker_

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

Definition at line 40 of file simplepicker.hpp.

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

◆ epsilon_

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

Definition at line 41 of file simplepicker.hpp.

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

◆ problem_

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

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