def match_kdtree_catalog(wcs, catfn): from astrometry.libkd.spherematch import ( tree_open, tree_close, tree_build_radec, tree_free, trees_match, tree_permute, ) from astrometry.libkd import spherematch_c from astrometry.util.starutil_numpy import deg2dist, xyztoradec import numpy as np import sys rc, dc = wcs.get_center() rr = wcs.get_radius() kd = tree_open(catfn) kd2 = tree_build_radec(np.array([rc]), np.array([dc])) r = deg2dist(rr) I, J, nil = trees_match(kd, kd2, r, permuted=False) # HACK # I2,J,d = trees_match(kd, kd2, r) xyz = spherematch_c.kdtree_get_positions(kd, I.astype(np.uint32)) # print 'I', I I2 = tree_permute(kd, I) # print 'I2', I2 tree_free(kd2) tree_close(kd) tra, tdec = xyztoradec(xyz) return tra, tdec, I2
def match_kdtree_catalog(wcs, catfn): from astrometry.libkd.spherematch import tree_open, tree_close, tree_build_radec, tree_free, trees_match, tree_permute from astrometry.libkd import spherematch_c from astrometry.util.starutil_numpy import deg2dist, xyztoradec import numpy as np import sys rc, dc = wcs.get_center() rr = wcs.get_radius() kd = tree_open(catfn) kd2 = tree_build_radec(np.array([rc]), np.array([dc])) r = deg2dist(rr) I, J, nil = trees_match(kd, kd2, r, permuted=False) # HACK #I2,J,d = trees_match(kd, kd2, r) xyz = spherematch_c.kdtree_get_positions(kd, I.astype(np.uint32)) #print 'I', I I2 = tree_permute(kd, I) #print 'I2', I2 tree_free(kd2) tree_close(kd) tra, tdec = xyztoradec(xyz) return tra, tdec, I2
kd2 = spherematch.tree_build(x2) I,J,d = spherematch.trees_match(kd, kd2, 1.) print('trees_match:', len(I), 'matches') I,J,d = spherematch.trees_match(kd, kd2, 1., nearest=True) print('trees_match:', len(I), 'matches (nearest)') print('Kd bounding-box:', spherematch.tree_bbox(kd)) print('Kd bounding-box:', kd.bbox) print('Kd data:', spherematch.tree_data(kd, np.array([0,3,5]).astype(np.uint32))) print('Kd data:', kd.get_data(np.array([0,3,5]).astype(np.uint32))) print('Permute:', spherematch.tree_permute(kd, np.array([3,5,7]).astype(np.int32))) print('Permute:', kd.permute(np.array([0,99,199]).astype(np.int32))) ra,dec = np.meshgrid(np.arange(0, 360), np.arange(-90, 91, 1)) ra1 = ra.ravel() dec1 = dec.ravel() rdkd1 = spherematch.tree_build_radec(ra1, dec1) print('RdKd:', rdkd1.n, rdkd1.bbox) ra2 = np.random.uniform(-10, 10, size=1000) dec2 = np.random.uniform(-10, 10, size=1000) rdkd2 = spherematch.tree_build_radec(ra2, dec2) I = spherematch.tree_search_radec(rdkd1, ra2[0], dec2[0], 2.) print('search_radec:', I)