1 #ifndef PURIFY_UTILITIES_H
2 #define PURIFY_UTILITIES_H
4 #include "purify/config.h"
14 t_int
sub2ind(
const t_int &row,
const t_int &col,
const t_int &rows,
const t_int &cols);
16 std::tuple<t_int, t_int>
ind2sub(
const t_int &sub,
const t_int &cols,
const t_int &rows);
18 t_real
mod(
const t_real &x,
const t_real &y);
21 typename K::Scalar
mean(
const K x) {
23 return x.array().mean();
29 const Matrix<typename K::Scalar> q = (x.array() - x.array().mean()).matrix();
30 return std::real((q.adjoint() * q)(0) /
static_cast<t_real
>(q.size() - 1));
41 t_real
calculate_l2_radius(
const t_uint y_size,
const t_real &sigma = 0,
const t_real &n_sigma = 2.,
42 const std::string distirbution =
"chi");
46 Vector<t_complex>
add_noise(
const Vector<t_complex> &y,
const t_complex &
mean,
51 std::tuple<t_real, t_real, t_real>
fit_fwhm(
const Image<t_real> &psf,
const t_int &size = 3);
53 t_real
median(
const Vector<t_real> &input);
55 t_real
dynamic_range(
const Image<t_complex> &model,
const Image<t_complex> &residuals,
56 const t_real &operator_norm = 1);
58 Array<t_complex>
init_weights(
const Vector<t_real> &
u,
const Vector<t_real> &
v,
59 const Vector<t_complex> &weights,
const t_real &oversample_factor,
60 const std::string &weighting_type,
const t_real &R,
61 const t_int &ftsizeu,
const t_int &ftsizev);
63 template <
class T0,
class T1>
64 typename std::enable_if<std::is_same<typename T0::Scalar, typename T1::Scalar>::value and
66 Vector<typename T0::Scalar>>::type
68 assert(M.cols() == x.size());
69 Vector<typename T0::Scalar> y = Vector<typename T0::Scalar>::Zero(M.rows());
70 auto const &derived = M.derived();
72 #pragma omp parallel for
74 for (t_int k = 0; k < M.outerSize(); ++k)
76 y(k) += it.value() * x(it.index());
80 std::tuple<t_int, t_real>
checkpoint_log(
const std::string &diagnostic);
82 template <
class K,
class L>
84 const t_int rows = A.rows();
85 const t_int cols = A.cols();
86 Image<t_complex> C = Matrix<t_complex>::Zero(rows, cols);
88 #pragma omp simd collapse(2)
89 for (t_int i = 0; i < cols; ++i)
90 for (t_int j = 0; j < rows; ++j) C(j, i) = A(j, i) * B(j, i);
94 Matrix<t_complex>
re_sample_ft_grid(
const Matrix<t_complex> &input,
const t_real &re_sample_factor);
96 Matrix<t_complex>
re_sample_image(
const Matrix<t_complex> &input,
const t_real &re_sample_ratio);
const std::vector< t_real > u
data for u coordinate
const std::vector< t_real > v
data for v coordinate
Array< t_complex > init_weights(const Vector< t_real > &u, const Vector< t_real > &v, const Vector< t_complex > &weights, const t_real &oversample_factor, const std::string &weighting_type, const t_real &R, const t_int &ftsizeu, const t_int &ftsizev)
Calculate weightings.
std::enable_if< std::is_same< typename T0::Scalar, typename T1::Scalar >::value and T0::IsRowMajor, Vector< typename T0::Scalar > >::type sparse_multiply_matrix(const Eigen::SparseMatrixBase< T0 > &M, const Eigen::MatrixBase< T1 > &x)
Parallel multiplication with a sparse matrix and vector.
t_real median(const Vector< t_real > &input)
Return median of real vector.
std::tuple< t_real, t_real, t_real > fit_fwhm(const Image< t_real > &psf, const t_int &size)
Method to fit Gaussian to PSF.
t_real variance(const K x)
Calculate variance of vector.
t_real SNR_to_standard_deviation(const Vector< t_complex > &y0, const t_real &SNR)
Converts SNR to RMS noise.
K::Scalar mean(const K x)
Calculate mean of vector.
Vector< t_complex > add_noise(const Vector< t_complex > &y0, const t_complex &mean, const t_real &standard_deviation)
Add guassian noise to vector.
t_int sub2ind(const t_int &row, const t_int &col, const t_int &rows, const t_int &cols)
Converts from subscript to index for matrix.
std::tuple< t_int, t_real > checkpoint_log(const std::string &diagnostic)
Reads a diagnostic file and updates parameters.
Matrix< t_complex > re_sample_ft_grid(const Matrix< t_complex > &input, const t_real &re_sample_ratio)
zero pads ft grid for image up sampling and downsampling
Matrix< t_complex > re_sample_image(const Matrix< t_complex > &input, const t_real &re_sample_ratio)
resamples image size
bool file_exists(const std::string &name)
Test to see if file exists.
t_real dynamic_range(const Image< t_complex > &model, const Image< t_complex > &residuals, const t_real &operator_norm)
Calculate the dynamic range between the model and residuals.
t_real mod(const t_real &x, const t_real &y)
Mod function modified to wrap circularly for negative numbers.
t_real standard_deviation(const K x)
Calculates the standard deviation of a vector.
Image< t_complex > convolution_operator(const Image< t_complex > &a, const Image< t_complex > &b)
Calculates the convolution between two images.
t_real calculate_l2_radius(const t_uint y_size, const t_real &sigma, const t_real &n_sigma, const std::string distirbution)
A function that calculates the l2 ball radius for sopt.
std::tuple< t_int, t_int > ind2sub(const t_int &sub, const t_int &cols, const t_int &rows)
Converts from index to subscript for matrix.
Image< t_complex > parallel_multiply_image(const K &A, const L &B)
Multiply images coefficient-wise using openmp.
Eigen::SparseMatrix< T, Eigen::RowMajor, I > Sparse
A matrix of a given type.