13 #include <boost/algorithm/string.hpp> 14 #include <boost/lexical_cast.hpp> 20 void remove_newlines( std::string& str );
22 template <
typename T >
23 T mean(
const std::vector<T>& vect ) {
24 uint size_T =
static_cast<T
>( vect.size() );
25 T sum =
static_cast<T
>( 0 );
27 std::for_each( vect.begin(), vect.end(), [&] (T x) {
34 template <
typename T >
50 void operator()(
const std::vector< T >& time_series, T f_res, T time_int ) {
52 uint sig_size = time_series.size();
53 T delta_f =
static_cast<T
>( 1 )/( time_int );
55 T f_axion = f_res*1e6 / (
static_cast<T
>( 1e6 ) * static_cast<T>( 2 ) );
57 overbin_size =
static_cast< uint
>( std::floor( f_axion / delta_f ) );
59 if( overbin_size == 0 ) {
61 "Frequency seperation between signal elements is larger than 1/2 expected Axion signal width\n";
62 err_str +=
"Axion signal is ";
63 err_str += boost::lexical_cast< std::string >( f_axion / delta_f );
64 err_str +=
" times larger than frequency seperation.";
65 throw std::invalid_argument( err_str );
68 uint tail = sig_size % overbin_size;
70 uint rebin_size = ( tail == 0 )?( sig_size / overbin_size ):( ( sig_size - tail ) / overbin_size );
72 rebinned_signal.reserve( rebin_size );
74 for( uint i = 0 ; i < sig_size - tail ; i += overbin_size ) {
76 std::vector<T> sub_vector( time_series.begin() + i, time_series.begin() + ( i + 1 ) );
77 rebinned_signal.push_back( mean( sub_vector ) );
80 std::vector<T> remainder( time_series.end() - tail, time_series.end() );
81 rebinned_signal.push_back( mean( remainder ) );
93 void operator()(
const std::vector< T >& time_series, uint overbin_size ) {
95 uint sig_size = time_series.size();
97 if( overbin_size == 0 ) {
99 "Requested rebin size is greater than signal size.\n";
100 err_str +=
"Signal contains ";
101 err_str += boost::lexical_cast< std::string >( sig_size );
102 err_str +=
" rebin size was ";
103 err_str += boost::lexical_cast< std::string >( overbin_size );
104 throw std::invalid_argument( err_str );
107 uint tail = sig_size % overbin_size;
108 uint rebin_size = ( tail == 0 )?( sig_size / overbin_size ):( ( sig_size - tail ) / overbin_size );
110 rebinned_signal.reserve( rebin_size );
112 for( uint i = 0 ; i < sig_size - tail ; i += overbin_size ) {
114 std::vector<T> sub_vector( time_series.begin() + i, time_series.begin() + ( i + 1 ) );
115 rebinned_signal.push_back( mean( sub_vector ) );
118 std::vector<T> remainder( time_series.end() - tail, time_series.end() );
119 rebinned_signal.push_back( mean( remainder ) );
123 std::vector< T > RebinnedSignal() {
124 return rebinned_signal;
132 std::vector<T> rebinned_signal;
Definition: algorithm.h:35
void operator()(const std::vector< T > &time_series, T f_res, T time_int)
operator ()
Definition: algorithm.h:50
void operator()(const std::vector< T > &time_series, uint overbin_size)
operator ()
Definition: algorithm.h:93
Definition: algorithm.cpp:16