30 double doublefact(
int n);
34 double fact_ratio(
int i,
int r);
37 double fgamma(
double x);
40 double sinc(
double x);
43 double bessel_jl(
int l,
double x);
46 double boysF(
int m,
double x);
48 void boysF_arr(
int mmax,
double x, arma::vec & bf);
51 double hyperg_1F1(
double a,
double b,
double x);
54 double choose(
int m,
int n);
57 int getind(
int l,
int m,
int n);
60 template <
class T> T max(
const std::vector<T> & x) {
63 throw std::runtime_error(
"Trying to get maximum value of empty array!\n");
67 for(
size_t i=1;i<x.size();i++)
74 template <
class T> T max4(
const T & a,
const T & b,
const T & c,
const T & d) {
75 return std::max(std::max(a,b),std::max(c,d));
79 template <
typename T>
size_t find(
const std::vector<T> & list,
const T & val) {
80 for(
size_t i=0;i<list.size();i++)
84 return std::string::npos;
88 double max_abs(
const arma::mat & R);
90 double max_cabs(
const arma::cx_mat & R);
92 double rms_norm(
const arma::mat & R);
94 double rms_cnorm(
const arma::cx_mat & R);
97 template <
class T>
void reverse(std::vector<T> & a) {
109 template <
class T> T sum(
const std::vector<T> & a) {
111 for(
size_t i=0;i<a.size();i++) {
118 template <
class T>
bool abscomp(
const std::complex<T> & a,
const std::complex<T> & b) {
119 return std::abs(a) < std::abs(b);
123 std::vector<double> spline_interpolation(
const std::vector<double> & xt,
const std::vector<double> & yt,
const std::vector<double> & x);
125 arma::vec spline_interpolation(
const arma::vec & xt,
const arma::vec & yt,
const arma::vec & x);
127 double spline_interpolation(
const std::vector<double> & xt,
const std::vector<double> & yt,
double x);
130 arma::mat randu_mat(
size_t M,
size_t N,
unsigned long int seed=0);
132 arma::mat randn_mat(
size_t M,
size_t N,
unsigned long int seed=0);
135 arma::mat real_orthogonal(
size_t N,
unsigned long int seed=0);
137 arma::cx_mat complex_unitary(
size_t N,
unsigned long int seed=0);
140 double round(
double x,
unsigned n);
149 arma::vec find_minima(
const arma::vec & x,
const arma::vec & y,
size_t runave=0,
double thr=DBL_MAX);
152 template<
typename T>
size_t sorted_insertion(std::vector<T> & v, T t) {
154 typename std::vector<T>::iterator high;
155 high=std::upper_bound(v.begin(),v.end(),t);
158 size_t ind=high-v.begin();
160 if(ind>0 && v[ind-1]==t) {
165 typename std::vector<T>::iterator pos=v.insert(high,t);
167 return pos-v.begin();
179 void stencil(
double z,
const arma::vec & x, arma::mat & w);