def test_center_of_image(): img = np.zeros((5, 5)) assert center_of_image(img) == (2, 2) img = np.zeros((5, 7)) xcenter, ycenter = center_of_image(img) assert xcenter == 3 assert ycenter == 2
def test_centroid_sym(): y, x = centered_grid_quadratic(51) img = Gaussian2D()(x, y) assert np.all(np.isclose(centroid(img), center_of_image(img))) y, x = centered_grid((51, 71)) img = Gaussian2D()(x, y) assert np.all(np.isclose(centroid(img), center_of_image(img)))
def test_centroid_asym(xy): y_grid, x_grid = centered_grid_quadratic(101) xy = np.array(xy) xy_expected = xy + center_of_image(x_grid) img = Gaussian2D(x_mean=xy[0], y_mean=xy[1])(x_grid, y_grid) assert np.all(np.isclose(centroid(img), xy_expected))
def test_anisocado_model_centered(anisocado_model): data = anisocado_model.render() actual = centroid_quadratic(data) expected = center_of_image(data) assert np.all(np.abs(np.array(actual) - np.array(expected)) < 1e-8)
def test_anisocado_psf_even(psf_effect_even): data = psf_effect_even.data actual = centroid_quadratic(data, fit_boxsize=6) expected = center_of_image(data) # TODO ideally this should be a lot tighter, but honestly even arrays are probably bad anyway # TODO does this work wih <0.001 on different computer? assert np.all(np.abs(np.array(actual) - np.array(expected)) < 0.05)
def test_single_star_image_scopesim_shift(single_star): """This test should not fail after scopesim fixes the coordinate transformation""" img, table = single_star xcenter, ycenter = center_of_image(img) xref, yref = table[INPUT_TABLE_NAMES[X]][0], table[INPUT_TABLE_NAMES[Y]][0] assert np.abs(xcenter-xref) < 0.01 assert np.abs(ycenter-yref) < 0.01
def test_single_star_image(single_star): img, table = single_star xcenter, ycenter = center_of_image(img) xcentroid, ycentroid = centroid_quadratic(img, fit_boxsize=5) xref, yref = table[INPUT_TABLE_NAMES[X]][0], table[INPUT_TABLE_NAMES[Y]][0] assert np.abs(xref-xcentroid) < 0.005 assert np.abs(yref-ycentroid) < 0.005
grid_result_baseline['flux_fit']) grid_result_epsf_plot['flux_fit'] /= offset plot_dev_vs_mag(grid_result_baseline, create_figure=False, label='known PSF', alpha=0.4) plot_dev_vs_mag(grid_result_epsf_plot, create_figure=False, label='with epsf', alpha=0.4) plt.tight_layout() save_plot(out_dir, 'synthetic_grid_magdevepsf') # %% center_of_image(epsf.data), centroid_quadratic(epsf.data, fit_boxsize=5) # %% plt.figure() plt.imshow(pre_epsf.data, norm=LogNorm()) plt.colorbar() save_plot(out_dir, 'failed_epsf_example') # %% img_grid, tab_grid = read_or_generate_image( 'scopesim_grid_16_perturb2_mag18_24_subpixel') guess_table = prepare_table(tab_grid) photometry = grid_photometry_epsf() photometry.psf_model = epsf
def make_delta_model(): from photutils import FittableImageModel data = np.zeros((401, 401)) ycenter, xcenter = center_of_image(data) data[int(ycenter),int(xcenter)] = 1 return FittableImageModel(data, oversampling=2, degree=5)
def test_lowpass(xsize, ysize): img = np.ones((ysize, xsize)) transform = lowpass(5) assert np.all(np.isclose(centroid(transform(img)), center_of_image(img)))
def test_anisocado_psf_odd(psf_effect_odd): data = psf_effect_odd.data actual = centroid_quadratic(data) expected = center_of_image(data) assert np.all(np.abs(np.array(actual) - np.array(expected)) < 1e-8)