def test_rebin_coord_transform(): x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = util.make_grid_with_coordtransform(numPix=3, deltapix=0.03, subgrid_res=1) x_grid, y_grid, ra_at_xy_0_re, dec_at_xy_0_re, x_at_radec_0_re, y_at_radec_0_re, Mpix2coord_re, Mcoord2pix_re = util.make_grid_with_coordtransform(numPix=1, deltapix=0.09, subgrid_res=1) ra_at_xy_0_resized, dec_at_xy_0_resized, x_at_radec_0_resized, y_at_radec_0_resized, Mpix2coord_resized, Mcoord2pix_resized = image_util.rebin_coord_transform(3, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix) assert ra_at_xy_0_resized == ra_at_xy_0_re assert dec_at_xy_0_resized == dec_at_xy_0_re assert x_at_radec_0_resized == x_at_radec_0_re assert y_at_radec_0_resized == y_at_radec_0_re npt.assert_almost_equal(Mcoord2pix_resized[0][0], Mcoord2pix_re[0][0], decimal=8) npt.assert_almost_equal(Mpix2coord_re[0][0], Mpix2coord_resized[0][0], decimal=8) x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = util.make_grid_with_coordtransform(numPix=100, deltapix=0.05, subgrid_res=1) x_grid, y_grid, ra_at_xy_0_re, dec_at_xy_0_re, x_at_radec_0_re, y_at_radec_0_re, Mpix2coord_re, Mcoord2pix_re = util.make_grid_with_coordtransform(numPix=50, deltapix=0.1, subgrid_res=1) ra_at_xy_0_resized, dec_at_xy_0_resized, x_at_radec_0_resized, y_at_radec_0_resized, Mpix2coord_resized, Mcoord2pix_resized = image_util.rebin_coord_transform(2, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix) assert ra_at_xy_0_resized == ra_at_xy_0_re assert dec_at_xy_0_resized == dec_at_xy_0_re assert x_at_radec_0_resized == x_at_radec_0_re assert y_at_radec_0_resized == y_at_radec_0_re npt.assert_almost_equal(Mcoord2pix_resized[0][0], Mcoord2pix_re[0][0], decimal=8) npt.assert_almost_equal(Mpix2coord_re[0][0], Mpix2coord_resized[0][0], decimal=8) x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = util.make_grid_with_coordtransform(numPix=99, deltapix=0.1, subgrid_res=1) x_grid, y_grid, ra_at_xy_0_re, dec_at_xy_0_re, x_at_radec_0_re, y_at_radec_0_re, Mpix2coord_re, Mcoord2pix_re = util.make_grid_with_coordtransform(numPix=33, deltapix=0.3, subgrid_res=1) assert x_at_radec_0 == 49 ra_at_xy_0_resized, dec_at_xy_0_resized, x_at_radec_0_resized, y_at_radec_0_resized, Mpix2coord_resized, Mcoord2pix_resized = image_util.rebin_coord_transform(3, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix) assert x_at_radec_0_resized == 16 npt.assert_almost_equal(ra_at_xy_0_resized, ra_at_xy_0_re, decimal=8) npt.assert_almost_equal(dec_at_xy_0_resized, dec_at_xy_0_re, decimal=8) npt.assert_almost_equal(x_at_radec_0_resized, x_at_radec_0_re, decimal=8) npt.assert_almost_equal(y_at_radec_0_resized, y_at_radec_0_re, decimal=8) npt.assert_almost_equal(Mcoord2pix_resized[0][0], Mcoord2pix_re[0][0], decimal=8) npt.assert_almost_equal(Mpix2coord_re[0][0], Mpix2coord_resized[0][0], decimal=8) x_in, y_in = 10., 10. ra, dec = util.map_coord2pix(x_in, y_in, ra_at_xy_0, dec_at_xy_0, Mpix2coord) x_out, y_out = util.map_coord2pix(ra, dec, x_at_radec_0, y_at_radec_0, Mcoord2pix) assert x_in == x_out assert y_in == y_out x_in, y_in = 10., 10. ra, dec = util.map_coord2pix(x_in, y_in, ra_at_xy_0_resized, dec_at_xy_0_resized, Mpix2coord_resized) x_out, y_out = util.map_coord2pix(ra, dec, x_at_radec_0_resized, y_at_radec_0_resized, Mcoord2pix_resized) assert x_in == x_out assert y_in == y_out
def map_pix2coord(self, x_pos, y_pos): """ :param x_pos: pixel position :param y_pos: pixel position :return: (ra, dec) coordinates of pixel position (x_pos, y_pos) """ return util.map_coord2pix(x_pos, y_pos, self._ra_at_xy_0, self._dec_at_xy_0, self._Mpix2a)
def map_pix2coord(self, x, y): """ maps the (x,y) pixel coordinates of the image into the system coordinates :param x: pixel coordinate (can be 1d numpy array), defined in the center of the pixel :param y: pixel coordinate (can be 1d numpy array), defined in the center of the pixel :return: relative (RA, DEC) coordinates of the system """ return util.map_coord2pix(x, y, self._ra_at_xy_0, self._dec_at_xy_0, self._Mpix2a)
def map_coord2pix(self, ra, dec): """ :param ra: ra coordinates, relative :param dec: dec coordinates, relative :return: (x, y) pixel position of coordinate (ra, dec) """ return util.map_coord2pix(ra, dec, self._x_at_radec_0, self._y_at_radec_0, self._Ma2pix)
def map_coord2pix(self, ra, dec): """ maps the (ra,dec) coordinates of the system into the pixel coordinate of the image :param ra: relative RA coordinate as defined by the coordinate frame :param dec: relative DEC coordinate as defined by the coordinate frame :return: (x, y) pixel coordinates """ return util.map_coord2pix(ra, dec, self._x_at_radec_0, self._y_at_radec_0, self._Ma2pix)
def test_grid_with_coords(): numPix = 11 deltaPix = 1. x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = Util.make_grid_with_coordtransform( numPix, deltaPix, subgrid_res=1, left_lower=False) ra = 0 dec = 0 x, y = Util.map_coord2pix(ra, dec, x_at_radec_0, y_at_radec_0, Mcoord2pix) assert x == 5 assert y == 5 numPix = 11 deltaPix = .1 x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = Util.make_grid_with_coordtransform( numPix, deltaPix, subgrid_res=1, left_lower=False) ra = 0 dec = 0 x, y = Util.map_coord2pix(ra, dec, x_at_radec_0, y_at_radec_0, Mcoord2pix) assert x == 5 assert y == 5 numPix = 11 deltaPix = 1. x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = Util.make_grid_with_coordtransform( numPix, deltaPix, subgrid_res=1, left_lower=False) x_, y_ = 0, 0 ra, dec = Util.map_coord2pix(x_, y_, ra_at_xy_0, dec_at_xy_0, Mpix2coord) assert ra == -5 assert dec == -5 numPix = 11 deltaPix = .1 x_grid, y_grid, ra_at_xy_0, dec_at_xy_0, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix = Util.make_grid_with_coordtransform( numPix, deltaPix, subgrid_res=1, left_lower=False) x_, y_ = 0, 0 ra, dec = Util.map_coord2pix(x_, y_, ra_at_xy_0, dec_at_xy_0, Mpix2coord) assert ra == -.5 assert dec == -.5 x__, y__ = Util.map_coord2pix(ra, dec, x_at_radec_0, y_at_radec_0, Mcoord2pix) assert x__ == x_ assert y__ == y_
def test_map_coord2pix(): ra = 0 dec = 0 x_0 = 1 y_0 = -1 M = np.array([[1, 0], [0, 1]]) x, y = util.map_coord2pix(ra, dec, x_0, y_0, M) assert x == 1 assert y == -1 ra = [0, 1, 2] dec = [0, 2, 1] x, y = util.map_coord2pix(ra, dec, x_0, y_0, M) assert x[0] == 1 assert y[0] == -1 assert x[1] == 2 M = np.array([[0, 1], [1, 0]]) x, y = util.map_coord2pix(ra, dec, x_0, y_0, M) assert x[1] == 3 assert y[1] == 0
def __init__(self, transform_pix2angle, ra_at_xy_0, dec_at_xy_0): """ initialize the coordinate-to-pixel transform and their inverse :param transform_pix2angle: 2x2 matrix, mapping of pixel to coordinate :param ra_at_xy_0: ra coordinate at pixel (0,0) :param dec_at_xy_0: dec coordinate at pixel (0,0) """ self._Mpix2a = transform_pix2angle self._Ma2pix = linalg.inv(self._Mpix2a) self._ra_at_xy_0 = ra_at_xy_0 self._dec_at_xy_0 = dec_at_xy_0 self._x_at_radec_0, self._y_at_radec_0 = util.map_coord2pix(-self._ra_at_xy_0, -self._dec_at_xy_0, 0, 0, self._Ma2pix)
def shift_coordinate_grid(self, x_shift, y_shift, pixel_unit=False): """ shifts the coordinate system :param x_shif: shift in x (or RA) :param y_shift: shift in y (or DEC) :param pixel_unit: bool, if True, units of pixels in input, otherwise RA/DEC :return: updated data class with change in coordinate system """ if pixel_unit is True: ra_shift, dec_shift = self.map_pix2coord(x_shift, y_shift) else: ra_shift, dec_shift = x_shift, y_shift self._ra_at_xy_0 += ra_shift self._dec_at_xy_0 += dec_shift self._x_at_radec_0, self._y_at_radec_0 = util.map_coord2pix( -self._ra_at_xy_0, -self._dec_at_xy_0, 0, 0, self._Ma2pix)
def rebin_coord_transform(factor, x_at_radec_0, y_at_radec_0, Mpix2coord, Mcoord2pix): """ adopt coordinate system and transformation between angular and pixel coordinates of a re-binned image :param bin_size: :param ra_0: :param dec_0: :param x_0: :param y_0: :param Matrix: :param Matrix_inv: :return: """ factor = int(factor) Mcoord2pix_resized = Mcoord2pix / factor Mpix2coord_resized = Mpix2coord * factor x_at_radec_0_resized = (x_at_radec_0 + 0.5) / factor - 0.5 y_at_radec_0_resized = (y_at_radec_0 + 0.5) / factor - 0.5 ra_at_xy_0_resized, dec_at_xy_0_resized = util.map_coord2pix(-x_at_radec_0_resized, -y_at_radec_0_resized, 0, 0, Mpix2coord_resized) return ra_at_xy_0_resized, dec_at_xy_0_resized, x_at_radec_0_resized, y_at_radec_0_resized, Mpix2coord_resized, Mcoord2pix_resized