#ifndef WABOR_T_ARRAY_FUNCTIONS_H
#define WABOR_T_ARRAY_FUNCTIONS_H

#include "wabor_t_definitions.h"
#include "wabor_t_window_functions.h"

void wabor_t_maketestarray_pac_array(pac_type **ppcIn);

void wabor_t_simplefft_array(pac_type **ppcIn, pac_type **ppcOut, t_int FFTW_FLAG);

t_int wabor_t_get_first_zero_array(pac_type ** const ppcIn);
t_int wabor_t_get_window_length_array(pac_type ** const ppcIn);
pac_type wabor_t_last_value_array(pac_type ** const ppcIn);
pac_type wabor_t_first_value_array(pac_type ** const ppcIn);



void wabor_t_badfilter_array(pac_type ** const ppcIn, t_int iBin0, t_int iBin1);
void wabor_t_abs_array(pac_type ** const ppcIn);
void wabor_t_componentabs_array(pac_type ** const ppcIn);
void wabor_t_ln_array(pac_type ** const ppcIn);
void wabor_t_mult_array(pac_type ** const ppcIn, enum _eMultType eType, pac_type cVal);
void wabor_t_cut_array(pac_type ** const ppcIn, pac_type_real ldCutLow, pac_type_real ldCutHigh, pac_type cSetValueLow, pac_type cSetValueHigh);
void wabor_t_set_nan_to_zero_array(pac_type ** const ppcIn);
void wabor_t_set_inf_to_zero_array(pac_type ** const ppcIn);
void wabor_t_make_negative_frequency_order(pac_type ** const ppcIn, pac_type ** const ppcOut);
void wabor_t_normalize_array(pac_type ** const ppcIn);
void wabor_t_cycle_array(pac_type ** const ppcIn, t_int iBins);
void wabor_t_fft_array(pac_type ** const ppcIn);
void wabor_t_floating_average_array(pac_type ** const ppcIn, t_int iWL);
void wabor_t_differentiate_array(pac_type ** const ppcIn);
void wabor_t_integrate_array(pac_type ** const ppcIn);
void wabor_t_imag_plus_real_array(pac_type ** const ppcIn);
pac_type wabor_t_make_dc_offset_array(pac_type ** const ppcIn, t_int iChangeOffset, pac_type cNewMean);
pac_type wabor_t_inner_product_array(pac_type  ** const ppcIn1, pac_type  ** const ppcIn2);
pac_type_real wabor_t_length_of_vector_array(pac_type  ** const ppcIn);
void wabor_t_prolong_array(pac_type  ** const ppcIn, t_int _iN, t_int iWhere, t_int iRandom);
pac_type wabor_t_abs_sum_coarse_array(pac_type ** const ppcIn);
pac_type wabor_t_abs_mu_coarse_array(pac_type  ** const ppcIn);
pac_type wabor_t_abs_sigma_coarse_array(pac_type  ** const ppcIn);
pac_type wabor_t_abs_sum_fine_array(pac_type ** const ppcIn);
pac_type wabor_t_abs_mu_fine_array(pac_type  ** const ppcIn);
pac_type wabor_t_abs_sigma_fine_array(pac_type  ** const ppcIn);

void wabor_t_array_synopsis_array(pac_type  ** const ppcIn);
pac_type wabor_t_maximum_array(pac_type  ** const ppcIn);
t_int wabor_t_get_first_small_value_array(pac_type  ** const ppcIn, pac_type_real ldSmallVal);
t_int wabor_t_get_last_small_value_array( pac_type  ** const ppcIn, pac_type_real ldSmallVal);


#endif //TABOR_T_ARRAY_FUNCTIONS_H