diff --git a/demo.py b/demo.py index 656f7a38b9182d614854d8fed0ac3636cd734fef..d236e69fa24404f636d773b0eed374016b8fc847 100644 --- a/demo.py +++ b/demo.py @@ -27,8 +27,8 @@ import nifty_gridder as ng # dirty: float(nxdirty, nydirty): the dirty image f0 = 1e9 # rough observation frequency -fov = np.pi/180/60 # assume 1 arcmin FOV npixdirty = 1024 +pixsize = np.pi/180/60/npixdirty # assume 1 arcmin FOV speedoflight = 3e8 # number of rows in the measurement set @@ -38,23 +38,24 @@ nrow = 10000 nchan = 100 +# Frequency for all channels in the measurement set [Hz]. +freq = f0 + np.arange(nchan)*(f0/nchan) # just use silly values for this example + + # Invent mock UVW data. For every row, there is one UVW triple # NOTE: I don't know how to set the w values properly, so I use zeros. -uvw = (np.random.rand(nrow,3)-0.5) / (fov/npixdirty*f0/speedoflight) +uvmax = pixsize*np.max(freq)/sp +uvw = (np.random.rand(nrow,3)-0.5) / (pixsize*f0/speedoflight) uvw[:,2] = 0. -# Frequency for all channels in the measurement set [Hz]. -freq = f0 + np.arange(nchan)*(f0/nchan) # just use silly values for this example - - # Build Baselines object from the geometrical information baselines = ng.Baselines(coord=uvw, freq=freq) # Build GridderConfig object describing how gridding should be done -# fov_x and fov_y are given in radians -gconf = ng.GridderConfig(nxdirty=npixdirty, nydirty=npixdirty, epsilon=1e-7, fov_x=fov, fov_y=fov) +# pixsize_x and pixsize_y are given in radians +gconf = ng.GridderConfig(nxdirty=npixdirty, nydirty=npixdirty, epsilon=1e-7, pixsize_x=pixsize, pixsize_y=pixsize) # At this point everything about the experimental setup is known and explained diff --git a/nifty_gridder.cc b/nifty_gridder.cc index 2c63a6f6c34f37eb141d638baafb18d29587d175..6a5130b6dacd821cbd08d574672aae8c0084a1ba 100644 --- a/nifty_gridder.cc +++ b/nifty_gridder.cc @@ -393,9 +393,9 @@ template<typename T> class GridderConfig public: GridderConfig(size_t nxdirty, size_t nydirty, double epsilon, - double fov_x, double fov_y) + double pixsize_x, double pixsize_y) : nx_dirty(nxdirty), ny_dirty(nydirty), - ucorr(fov_x/nx_dirty), vcorr(fov_y/ny_dirty), + ucorr(pixsize_x), vcorr(pixsize_y), w(get_w(epsilon)), nsafe((w+1)/2), nu(max(2*nsafe,2*nx_dirty)), nv(max(2*nsafe,2*ny_dirty)), beta(2.3*w), @@ -406,8 +406,8 @@ template<typename T> class GridderConfig myassert((nx_dirty&1)==0, "nx_dirty must be even"); myassert((ny_dirty&1)==0, "ny_dirty must be even"); myassert(epsilon>0, "epsilon must be positive"); - myassert(fov_x>0, "fov_x must be positive"); - myassert(fov_y>0, "fov_y must be positive"); + myassert(pixsize_x>0, "pixsize_x must be positive"); + myassert(pixsize_y>0, "pixsize_y must be positive"); auto tmp = correction_factors(nu, nx_dirty/2+1, w); cfu[nx_dirty/2]=tmp[0]; @@ -948,10 +948,10 @@ nydirty: int epsilon: float required accuracy for the gridding/degridding step Must be >= 2e-13. -fov_x: float - Field of view in x direction (radians) -fov_y: float - Field of view in y direction (radians) +pixsize_x: float + Pixel size in x direction (radians) +pixsize_y: float + Pixel size in y direction (radians) )"""; const char *grid2dirty_DS = R"""( @@ -1068,7 +1068,7 @@ PYBIND11_MODULE(nifty_gridder, m) .def ("vis2ms",&Baselines<double>::vis2ms<complex<double>>, BL_vis2ms_DS, "vis"_a, "idx"_a, "ms_in"_a=py::none()); py::class_<GridderConfig<double>> (m, "GridderConfig", GridderConfig_DS) .def(py::init<size_t, size_t, double, double, double>(),"nxdirty"_a, - "nydirty"_a, "epsilon"_a, "fov_x"_a, "fov_y"_a) + "nydirty"_a, "epsilon"_a, "pixsize_x"_a, "pixsize_y"_a) .def("Nu", &GridderConfig<double>::Nu) .def("Nv", &GridderConfig<double>::Nv) .def("grid2dirty", &GridderConfig<double>::grid2dirty, grid2dirty_DS, "grid"_a)