5#include <boost/math/special_functions/bessel.hpp>
8#include <unsupported/Eigen/CXX11/Tensor>
9#include <unsupported/Eigen/Splines>
11#include <tula/algorithm/mlinterp/mlinterp.hpp>
12#include <tula/logging.h>
23 std::shared_ptr<spdlog::logger>
logger = spdlog::get(
"citlali_logger");
35 template <
typename config_t>
36 void get_config(config_t &, std::vector<std::vector<std::string>> &, std::vector<std::vector<std::string>> &);
47template <
typename config_t>
49 std::vector<std::vector<std::string>> &invalid_keys) {
55 for (
auto const& [arr_index, arr_name] : toltec_io.
array_name_map) {
57 std::tuple{
"wiener_filter",
"template_fwhm_arcsec",arr_name});
71 for (Eigen::Index i=0; i<
n_rows; ++i) {
72 for (Eigen::Index j=0; j<
n_cols; ++j) {
73 dist(i,j) = sqrt(pow(mb.rows_tan_vec(i)+0.5*mb.pixel_size_rad,2) + pow(mb.cols_tan_vec(j)+0.5*mb.pixel_size_rad,2));
78 Eigen::Index row_index, col_index;
81 double min_dist = dist.minCoeff(&row_index,&col_index);
86 std::vector<Eigen::Index> shift_indices = {-row_index, -col_index};
95void WienerFilter::run_gaussian_filter(MB &mb,
const int map_index) {
102 a = (fftw_complex*) fftw_malloc(
sizeof(fftw_complex)*n_rows*n_cols);
103 b = (fftw_complex*) fftw_malloc(
sizeof(fftw_complex)*n_rows*n_cols);
106 pf = fftw_plan_dft_2d(n_rows, n_cols, a, b, FFTW_FORWARD, FFTW_ESTIMATE);
107 pr = fftw_plan_dft_2d(n_rows, n_cols, a, b, FFTW_BACKWARD, FFTW_ESTIMATE);
110 Eigen::MatrixXcd in(n_rows,n_cols), out(n_rows,n_cols);
112 in.real() = filter_template;
116 out = engine_utils::fft2<engine_utils::forward>(in, pf, a, b);
118 Eigen::MatrixXcd fft_filter = out;
120 in.real() = filtered_map;
123 out = engine_utils::fft2<engine_utils::forward>(in, pf, a, b);
126 in.real() = out.real().array() * fft_filter.real().array() + out.imag().array() * fft_filter.imag().array();
127 in.imag() = -out.imag().array() * fft_filter.real().array() + out.real().array() * fft_filter.imag().array();
129 out = engine_utils::fft2<engine_utils::inverse>(in, pr, a, b);
138 fftw_destroy_plan(pf);
139 fftw_destroy_plan(pr);
Definition gaussian_filter.h:21
void get_config(config_t &, std::vector< std::vector< std::string > > &, std::vector< std::vector< std::string > > &)
Definition gaussian_filter.h:48
Eigen::MatrixXd filter_template
Definition gaussian_filter.h:32
void filter(MB &, const int)
int n_rows
Definition gaussian_filter.h:29
std::shared_ptr< spdlog::logger > logger
Definition gaussian_filter.h:23
void make_gaussian_template(MB &mb, const double)
Definition gaussian_filter.h:66
int n_cols
Definition gaussian_filter.h:29
std::map< std::string, double > template_fwhm_rad
Definition gaussian_filter.h:26
Definition toltec_io.h:10
std::map< Eigen::Index, std::string > array_name_map
Definition toltec_io.h:54
void get_config_value(config_t config, param_t ¶m, key_vec_t &missing_keys, key_vec_t &invalid_keys, option_t option, std::vector< param_t > allowed={}, std::vector< param_t > min_val={}, std::vector< param_t > max_val={})
Definition config.h:58
#define FWHM_TO_STD
Definition constants.h:48
#define ASEC_TO_RAD
Definition constants.h:33
auto shift_2D(Eigen::DenseBase< Derived > &in, std::vector< Eigen::Index > shift_indices)
Definition utils.h:882