/usr/lib/python3/dist-packages/photutils/psf/tests/test_sandbox.py is in python3-photutils 0.3-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | # Licensed under a 3-clause BSD style license - see LICENSE.rst
from __future__ import division
import numpy as np
from numpy.testing import assert_allclose
from astropy.utils.exceptions import AstropyUserWarning
from astropy.modeling.models import Gaussian2D
from astropy.convolution.utils import discretize_model
from astropy.table import Table
from astropy.tests.helper import pytest
from ..sandbox import DiscretePRF
PSF_SIZE = 11
GAUSSIAN_WIDTH = 1.
IMAGE_SIZE = 101
# Position and FLUXES of test sources
INTAB = Table([[50., 23, 12, 86], [50., 83, 80, 84],
[np.pi * 10, 3.654, 20., 80 / np.sqrt(3)]],
names=['x_0', 'y_0', 'flux_0'])
# Create test psf
psf_model = Gaussian2D(1. / (2 * np.pi * GAUSSIAN_WIDTH ** 2), PSF_SIZE // 2,
PSF_SIZE // 2, GAUSSIAN_WIDTH, GAUSSIAN_WIDTH)
test_psf = discretize_model(psf_model, (0, PSF_SIZE), (0, PSF_SIZE),
mode='oversample')
# Set up grid for test image
image = np.zeros((IMAGE_SIZE, IMAGE_SIZE))
# Add sources to test image
for x, y, flux in INTAB:
model = Gaussian2D(flux / (2 * np.pi * GAUSSIAN_WIDTH ** 2),
x, y, GAUSSIAN_WIDTH, GAUSSIAN_WIDTH)
image += discretize_model(model, (0, IMAGE_SIZE), (0, IMAGE_SIZE),
mode='oversample')
# Some tests require an image with wider sources.
WIDE_GAUSSIAN_WIDTH = 3.
WIDE_INTAB = Table([[50, 23.2], [50.5, 1], [10, 20]],
names=['x_0', 'y_0', 'flux_0'])
wide_image = np.zeros((IMAGE_SIZE, IMAGE_SIZE))
# Add sources to test image
for x, y, flux in WIDE_INTAB:
model = Gaussian2D(flux / (2 * np.pi * WIDE_GAUSSIAN_WIDTH ** 2),
x, y, WIDE_GAUSSIAN_WIDTH, WIDE_GAUSSIAN_WIDTH)
wide_image += discretize_model(model, (0, IMAGE_SIZE), (0, IMAGE_SIZE),
mode='oversample')
def test_create_prf_mean():
"""
Check if create_prf works correctly on simulated data.
Position input format: list
"""
prf = DiscretePRF.create_from_image(image,
list(INTAB['x_0', 'y_0'].as_array()),
PSF_SIZE, subsampling=1, mode='mean')
assert_allclose(prf._prf_array[0, 0], test_psf, atol=1E-8)
def test_create_prf_median():
"""
Check if create_prf works correctly on simulated data.
Position input format: astropy.table.Table
"""
prf = DiscretePRF.create_from_image(image, np.array(INTAB['x_0', 'y_0']),
PSF_SIZE, subsampling=1,
mode='median')
assert_allclose(prf._prf_array[0, 0], test_psf, atol=1E-8)
def test_create_prf_nan():
"""
Check if create_prf deals correctly with nan values.
"""
image_nan = image.copy()
image_nan[52, 52] = np.nan
image_nan[52, 48] = np.nan
prf = DiscretePRF.create_from_image(image, np.array(INTAB['x_0', 'y_0']),
PSF_SIZE, subsampling=1, fix_nan=True)
assert not np.isnan(prf._prf_array[0, 0]).any()
def test_create_prf_flux():
"""
Check if create_prf works correctly when FLUXES are specified.
"""
prf = DiscretePRF.create_from_image(image, np.array(INTAB['x_0', 'y_0']),
PSF_SIZE, subsampling=1,
mode='median', fluxes=INTAB['flux_0'])
assert_allclose(prf._prf_array[0, 0].sum(), 1)
assert_allclose(prf._prf_array[0, 0], test_psf, atol=1E-8)
def test_create_prf_excessive_subsampling():
"""
Check if a helpful error is raised if the subsampling parameter is too high.
"""
with pytest.raises(ValueError) as exc:
prf = DiscretePRF.create_from_image(image,
list(INTAB['x_0', 'y_0'].as_array()),
PSF_SIZE,
subsampling=999)
assert('subsampling' in exc.value.args[0])
|