#ifndef WABOR_T_THETA_FUNCTIONS_H
#define	WABOR_T_THETA_FUNCTIONS_H

#include "wabor_t_definitions.h"

//Theta_inf kann wie der jetzige Programmablauf ist, leider nicht fqsup, fqsupminus1 und fnyquist beachten, auch wenn es wichtig waere.

pac_type_real wabor_t_Theta_bspline(    pac_type_real f, pac_type_real* data_f0_k_ax);
pac_type_real wabor_t_Theta_inv_bspline(    pac_type_real f, pac_type_real* data_f0_k_ax);
pac_type_real wabor_t_d_Theta_inf_bspline(    pac_type_real f, pac_type_real* data_f0_k_ax);

pac_type_real wabor_t_Theta_exp_c1_nyqu(	pac_type_real f, pac_type_real* data_fo_k_fny_wny);
pac_type_real wabor_t_Theta_inv_exp_c1_nyqu(	pac_type_real f, pac_type_real* data_fo_k_fny_wny);
pac_type_real wabor_t_d_Theta_inf_exp_c1_nyqu(	pac_type_real f, pac_type_real* data_fo_k_fny_wny);

pac_type_real wabor_t_Theta_id(			pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_Theta_inv_id(		pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_d_Theta_inf_id(		pac_type_real f, pac_type_real* data_f0_k);

pac_type_real wabor_t_Theta_lin(		pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_Theta_inv_lin(		pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_d_Theta_inf_lin(		pac_type_real f, pac_type_real* data_f0_k);

pac_type_real wabor_t_Theta_square(		pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_Theta_inv_square(		pac_type_real f, pac_type_real* data_f0_k);
pac_type_real wabor_t_d_Theta_inf_square(	pac_type_real f, pac_type_real* data_f0_k);

pac_type_real wabor_t_Theta_inv( pac_type_real (*f)(pac_type_real x, pac_type_real* _data), pac_type_real val, pac_type_real* data, pac_type_real left, pac_type_real right, pac_type_real accuracy );
pac_type_real wabor_t_bspline_basis(int n, pac_type_real x);
pac_type bspline_inter2(pac_type_real t, pac_type_real *px, pac_type_real *py, int length, int n );
pac_type_real bspline_inter2_first(pac_type_real t, pac_type_real *px, pac_type_real *py, int length, int n );
pac_type_real bspline_inter2_second(pac_type_real t, pac_type_real *px, pac_type_real *py, int length, int n );

pac_type_real bspline_inter(pac_type_real t,  pac_type_real *py, int length, int n );

pac_type_real bspline_inter_inv( pac_type_real (*f)(pac_type_real t, pac_type_real *px, pac_type_real *py, int length, int n), 
	pac_type_real val,  pac_type_real *px, pac_type_real *py, int length, int n,
	pac_type_real left, pac_type_real right, pac_type_real accuracy );

double LambertW1(const pac_type_real z);

//const int dbgW=0;


#endif	/* WABOR_T_THETA_FUNCTIONS_H */

