1 #include "purify/config.h"
3 #include "catch2/catch_all.hpp"
9 #include "purify/directories.h"
18 const t_uint imsizex = 128;
19 const t_uint imsizey = 128;
20 const t_real oversample_ratio = 2;
24 Vector<t_real>::Ones(5), Vector<t_complex>::Ones(5),
25 Vector<t_complex>::Ones(5));
27 auto const uv_pixels =
utilities::uv_scale(uv_radians, std::floor(oversample_ratio * imsizex),
28 std::floor(oversample_ratio * imsizey));
36 CAPTURE(uv_pixels.u.transpose());
37 CHECK(uv_lambda.
u.isApprox(uv_pixels.u * scale, 1e-6));
43 const t_real cell = 3;
45 Vector<t_real>::Ones(5), Vector<t_complex>::Ones(5),
46 Vector<t_complex>::Ones(5));
48 auto const uv_pixels =
utilities::uv_scale(uv_radians, std::floor(oversample_ratio * imsizex),
49 std::floor(oversample_ratio * imsizey));
57 CAPTURE(uv_pixels.u.transpose());
58 CHECK(uv_lambda.
u.isApprox(uv_pixels.u * scale, 1e-6));
65 const t_real oversample_ratio = 2;
66 const t_int imsize = 8192;
67 for (t_real FoV : {0.1, 0.2, 0.3, 0.4, 0.5, 1., 5., 10., 15., 20., 25., 30., 40., 50., 60., 70.,
69 const t_real cell = FoV / imsize * 60 * 60;
70 const t_real miriad_cell =
75 CAPTURE(miriad_cell * imsize / 60. / 60.);
76 CAPTURE((1 - miriad_cell * imsize / 60. / 60. / FoV) * FoV);
78 CHECK(cell == Approx(miriad_cell).margin(1e-12));
80 CHECK(cell > miriad_cell);
85 const t_int imsizex = 128;
86 const t_int imsizey = 128;
87 SECTION(
"w is zero") {
88 const t_real w_rate = 0;
89 const Image<t_complex> chirp_image =
91 REQUIRE(chirp_image.cols() == imsizex);
92 REQUIRE(chirp_image.rows() == imsizey);
93 REQUIRE(chirp_image.isApprox(Image<t_complex>::Constant(imsizey, imsizex, 1)));
98 const t_int imsizex = 1024;
99 const t_int imsizey = 1024;
100 const t_real cellx = 10;
101 const t_real celly = 10;
102 const t_real oversample_ratio = 2;
104 const Vector<t_real>
u = Vector<t_real>::Random(M) * 1000;
105 const Vector<t_real>
v = Vector<t_real>::Random(M) * 1000;
107 const Vector<t_complex> weights =
109 REQUIRE(weights.size() == M);
110 CHECK(weights.isApprox(Vector<t_complex>::Ones(weights.size())));
#define CHECK(CONDITION, ERROR)
const std::vector< t_real > u
data for u coordinate
const std::vector< t_real > v
data for v coordinate
utilities::vis_params uv_scale(const utilities::vis_params &uv_vis, const t_int &sizex, const t_int &sizey)
scales the visibilities to units of pixels
utilities::vis_params set_cell_size(const sopt::mpi::Communicator &comm, utilities::vis_params const &uv_vis, const t_real &cell_x, const t_real &cell_y)
Matrix< t_complex > generate_dde(const DDE &dde, const t_real cell_x, const t_real cell_y, const t_uint x_size, const t_uint y_size, const t_real stop_gap)
Generate image of DDE for aw-stacking.
t_real equivalent_miriad_cell_size(const t_real cell, const t_uint imsize, const t_real oversample_ratio)
for a given purify cell size in arcsec provide the equivalent miriad cell size in arcsec
Vector< t_complex > sample_density_weights(const Vector< t_real > &u, const Vector< t_real > &v, const t_real cellx, const t_real celly, const t_uint imsizex, const t_uint imsizey, const t_real oversample_ratio, const t_real scale)
create sample density weights for a given field of view, uniform weighting
t_real pixel_to_lambda(const t_real cell, const t_uint imsize, const t_real oversample_ratio)
return factors to convert between arcsecond pixel size image space and lambda for uv space