def test_mm_image_and_tables_on_large_canvas(self, input_table_mm, image_hdu_rect_mm, image_hdu_square_mm): image_hdu_rect = image_hdu_rect_mm image_hdu_square = image_hdu_square_mm tbl1 = deepcopy(input_table_mm) tbl2 = deepcopy(input_table_mm) tbl1["y_mm"] -= 100 tbl2["x_mm"] += 100 tbl2["y_mm"] += 100 im_hdu = image_hdu_rect im_hdu.header["CRVAL1D"] -= 150 im_hdu.header["CRVAL2D"] += 20 hdr = imp_utils.get_canvas_header( [im_hdu, image_hdu_square, tbl1, tbl2], pixel_scale=3 * u.mm) im = np.zeros((hdr["NAXIS2"], hdr["NAXIS1"])) canvas_hdu = fits.ImageHDU(header=hdr, data=im) canvas_hdu = imp_utils.add_table_to_imagehdu(tbl1, canvas_hdu, wcs_suffix="D") canvas_hdu = imp_utils.add_table_to_imagehdu(tbl2, canvas_hdu, wcs_suffix="D") canvas_hdu = imp_utils.add_imagehdu_to_imagehdu(im_hdu, canvas_hdu, wcs_suffix="D") canvas_hdu = imp_utils.add_imagehdu_to_imagehdu(image_hdu_square, canvas_hdu, wcs_suffix="D") total_flux = np.sum(tbl1["flux"]) + np.sum(tbl2["flux"]) + \ np.sum(im_hdu.data) + np.sum(image_hdu_square.data) assert np.sum(canvas_hdu.data) == approx(total_flux) if PLOTS: for im in [im_hdu, image_hdu_square]: x, y = imp_utils.calc_footprint(im, "D") x, y = imp_utils.val2pix(canvas_hdu, x, y, "D") plt.plot(x, y, "r-") x0, y0 = imp_utils.val2pix(canvas_hdu, 0, 0, "D") plt.plot(x0, y0, "ro") plt.gca().set_aspect(1) plt.imshow(canvas_hdu.data, origin="lower") plt.show()
def test_mm_points_are_added_to_massive_canvas(self, input_table_mm): tbl1 = deepcopy(input_table_mm) tbl2 = deepcopy(input_table_mm) tbl3 = deepcopy(input_table_mm) tbl1["y_mm"] += 50 tbl2["x_mm"] += 20 tbl3["x_mm"] -= 25 tbl3["y_mm"] -= 25 hdr = imp_utils.get_canvas_header([tbl1, tbl2, tbl3], pixel_scale=1 * u.mm) im = np.zeros((hdr["NAXIS2"], hdr["NAXIS1"])) canvas_hdu = fits.ImageHDU(header=hdr, data=im) for tbl in [tbl1, tbl2, tbl3]: canvas_hdu = imp_utils.add_table_to_imagehdu(tbl, canvas_hdu, True, wcs_suffix="D") total_flux = np.sum([tbl1["flux"], tbl1["flux"], tbl1["flux"]]) assert np.sum(canvas_hdu.data) == total_flux if PLOTS: x, y = imp_utils.val2pix(hdr, 0, 0, "D") plt.plot(x, y, "ro") "top left is green, top right is yellow" plt.imshow(canvas_hdu.data, origin="lower") plt.show()
def test_source_outside_canvas_are_ignored(self, x, y, flux, image_hdu_square): # Given the weird behaviour on pixel boundaries tbl = Table(names=["x", "y", "flux"], data=[x * u.arcsec, y * u.arcsec, flux * u.Unit("ph s-1")]) hdu = imp_utils.add_table_to_imagehdu(tbl, image_hdu_square, sub_pixel=True) assert np.sum(hdu.data) == np.prod(hdu.data.shape)
def test_integer_pixel_fluxes_are_added_correctly(self, xpix, ypix, value, image_hdu_square): # Given the weird behaviour on pixel boundaries x, y = [1.5, -1.5, -1.5, 1.5] * u.arcsec, [1.5, 1.5, -1.5, -1.5 ] * u.arcsec flux = [1, 2, 3, 4] * u.Unit("ph s-1") tbl = Table(names=["x", "y", "flux"], data=[x, y, flux]) hdu = imp_utils.add_table_to_imagehdu(tbl, image_hdu_square, sub_pixel=False) assert hdu.data[ypix, xpix] == value
def test_points_are_added_to_small_canvas(self, input_table): tbl1 = deepcopy(input_table) hdr = imp_utils.get_canvas_header([tbl1]) im = np.zeros((hdr["NAXIS2"], hdr["NAXIS1"])) canvas_hdu = fits.ImageHDU(header=hdr, data=im) canvas_hdu = imp_utils.add_table_to_imagehdu(tbl1, canvas_hdu) assert np.sum(canvas_hdu.data) == np.sum(tbl1["flux"]) if PLOTS: "top left is green, top right is yellow" plt.imshow(canvas_hdu.data, origin="lower") plt.show()
def test_sub_pixel_fluxes_are_added_correctly(self, x, y, flux, xpix, ypix, value, image_hdu_square): # Given the weird behaviour on pixel boundaries tbl = Table(names=["x", "y", "flux"], data=[x * u.arcsec, y * u.arcsec, flux * u.Unit("ph s-1")]) hdu = imp_utils.add_table_to_imagehdu(tbl, image_hdu_square, sub_pixel=True) if PLOTS: plt.imshow(hdu.data[45:55, 45:55], origin="lower") plt.colorbar() plt.show() assert np.isclose(hdu.data[ypix, xpix], value + 1)