def test_all_three_mm_tables_are_inside_header_wcs(self, input_table_mm): tbl1 = deepcopy(input_table_mm) tbl2 = deepcopy(input_table_mm) tbl3 = deepcopy(input_table_mm) tbl2["x_mm"] += 50 tbl3["y_mm"] += 25 hdr = imp_utils._make_bounding_header_for_tables([tbl1, tbl2, tbl3], 100 * u.um) for tbl in [tbl1, tbl2, tbl3]: x, y = imp_utils.val2pix(hdr, tbl["x_mm"], tbl["y_mm"], "D") for xi, yi in zip(x, y): assert 0 <= xi < hdr["NAXIS1"] assert 0 <= yi < hdr["NAXIS2"] if PLOTS: x, y = imp_utils.calc_footprint(hdr, "D") x, y = imp_utils.val2pix(hdr, x, y, "D") x0, y0 = imp_utils.val2pix(hdr, 0, 0, "D") plt.plot(x, y, "b") plt.plot(x0, y0, "ro") for tbl in [tbl1, tbl2, tbl3]: x, y = imp_utils.val2pix(hdr, tbl["x_mm"], tbl["y_mm"], "D") plt.plot(x, y, "k.") plt.show()
def test_all_three_tables_are_inside_header_wcs(self, input_table): tbl1 = deepcopy(input_table) tbl2 = deepcopy(input_table) tbl3 = deepcopy(input_table) tbl2["x"] -= 25 tbl3["y"] -= 60 hdr = imp_utils._make_bounding_header_for_tables([tbl1, tbl2, tbl3]) as2deg = u.arcsec.to(u.deg) for tbl in [tbl1, tbl2, tbl3]: x, y = imp_utils.val2pix(hdr, tbl["x"] * as2deg, tbl["y"] * as2deg) for xi, yi in zip(x, y): assert 0 <= xi < hdr["NAXIS1"] assert 0 <= yi < hdr["NAXIS2"] if PLOTS: x, y = imp_utils.calc_footprint(hdr) x, y = imp_utils.val2pix(hdr, x, y) x0, y0 = imp_utils.val2pix(hdr, 0, 0) plt.plot(x, y, "b") plt.plot(x0, y0, "ro") for tbl in [tbl1, tbl2, tbl3]: x, y = imp_utils.val2pix(hdr, tbl["x"] / 3600., tbl["y"] / 3600.) plt.plot(x, y, "k.") plt.show()
def is_field_in_fov(fov_header, table_or_imagehdu, wcs_suffix=""): s = wcs_suffix pixel_scale = utils.quantify(fov_header["CDELT1" + s], u.deg) if isinstance(table_or_imagehdu, Table): ext_hdr = imp_utils._make_bounding_header_for_tables( [table_or_imagehdu], pixel_scale) elif isinstance(table_or_imagehdu, fits.ImageHDU): ext_hdr = imp_utils._make_bounding_header_from_imagehdus( [table_or_imagehdu], pixel_scale) else: warnings.warn("Input was neither Table nor ImageHDU: {}" "".format(table_or_imagehdu)) return False ext_xsky, ext_ysky = imp_utils.calc_footprint(ext_hdr, wcs_suffix) fov_xsky, fov_ysky = imp_utils.calc_footprint(fov_header, wcs_suffix) is_inside_fov = min(ext_xsky) < max(fov_xsky) and \ max(ext_xsky) > min(fov_xsky) and \ min(ext_ysky) < max(fov_ysky) and \ max(ext_ysky) > min(fov_ysky) return is_inside_fov
def test_add_many_mm_tables_and_imagehdus(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"] -= 50 tbl2["x_mm"] += 50 tbl2["y_mm"] += 50 im_hdu = image_hdu_rect im_hdu.header["CRVAL1D"] -= 150 # mm im_hdu.header["CRVAL2D"] += 20 fields = [im_hdu, tbl1, tbl2, image_hdu_square] hdr = imp_utils.get_canvas_header(fields, pixel_scale=1 * u.mm) implane = opt_imp.ImagePlane(hdr) implane.add(fields, 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(implane.data) == approx(total_flux) if PLOTS: for im in [im_hdu, image_hdu_square]: x, y = imp_utils.calc_footprint(im.header, "D") x, y = imp_utils.val2pix(implane.header, x, y, "D") plt.plot(x, y, "r-") for tbl in [tbl1, tbl2]: hdr = imp_utils._make_bounding_header_for_tables( [tbl], pixel_scale=1 * u.mm) x, y = imp_utils.calc_footprint(hdr, "D") x, y = imp_utils.val2pix(implane.header, x, y, "D") plt.plot(x, y, "r-") x0, y0 = imp_utils.val2pix(implane.header, 0, 0, "D") plt.plot(x0, y0, "ro") plt.gca().set_aspect(1) plt.imshow(implane.data, origin="lower", norm=LogNorm()) plt.show()
def test_add_many_tables_and_imagehdus(self, input_table, image_hdu_rect, image_hdu_square): tbl1 = deepcopy(input_table) tbl2 = deepcopy(input_table) tbl1["y"] -= 50 tbl2["x"] += 50 tbl2["y"] += 50 im_hdu = image_hdu_rect im_hdu.header["CRVAL1"] -= 150 * u.arcsec.to(u.deg) im_hdu.header["CRVAL2"] += 20 * u.arcsec.to(u.deg) fields = [im_hdu, tbl1, tbl2, image_hdu_square] hdr = imp_utils.get_canvas_header(fields, pixel_scale=1 * u.arcsec) implane = opt_imp.ImagePlane(hdr) implane.add(fields) total_flux = np.sum(tbl1["flux"]) + np.sum(tbl2["flux"]) + \ np.sum(im_hdu.data) + np.sum(image_hdu_square.data) assert np.sum(implane.data) == approx(total_flux) if PLOTS: for im in [im_hdu, image_hdu_square]: x, y = imp_utils.calc_footprint(im.header) x, y = imp_utils.val2pix(implane.header, x, y) plt.plot(x, y, "r-") for tbl in [tbl1, tbl2]: hdr = imp_utils._make_bounding_header_for_tables([tbl]) x, y = imp_utils.calc_footprint(hdr) x, y = imp_utils.val2pix(implane.header, x, y) plt.plot(x, y, "r-") x0, y0 = imp_utils.val2pix(implane.header, 0, 0) plt.plot(x0, y0, "ro") plt.gca().set_aspect(1) plt.imshow(implane.data, origin="lower", norm=LogNorm()) plt.show()