/usr/lib/python3/dist-packages/photutils/utils/cutouts.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 | # Licensed under a 3-clause BSD style license - see LICENSE.rst
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import collections
import numpy as np
from astropy.nddata.utils import overlap_slices
__all__ = ['cutout_footprint']
def cutout_footprint(data, position, box_size=3, footprint=None, mask=None,
error=None):
"""
Cut out a region from data (and optional mask and error) centered at
specified (x, y) position.
The size of the region is specified via the ``box_size`` or
``footprint`` keywords. The output mask for the cutout region
represents the combination of the input mask and footprint mask.
Parameters
----------
data : array_like
The 2D array of the image.
position : 2 tuple
The ``(x, y)`` pixel coordinate of the center of the region.
box_size : scalar or tuple, optional
The size of the region to cutout from ``data``. If ``box_size``
is a scalar, then the region shape will be ``(box_size,
box_size)``. Either ``box_size`` or ``footprint`` must be
defined. If they are both defined, then ``footprint`` overrides
``box_size``.
footprint : `~numpy.ndarray` of bools, optional
A boolean array where `True` values describe the local footprint
region. ``box_size=(n, m)`` is equivalent to
``footprint=np.ones((n, m))``. Either ``box_size`` or
``footprint`` must be defined. If they are both defined, then
``footprint`` overrides ``box_size``.
mask : array_like, bool, optional
A boolean mask with the same shape as ``data``, where a `True`
value indicates the corresponding element of ``data`` is masked.
error : array_like, optional
The 2D array of the 1-sigma errors of the input ``data``.
Returns
-------
region_data : `~numpy.ndarray`
The ``data`` cutout.
region_mask : `~numpy.ndarray`
The ``mask`` cutout.
region_error : `~numpy.ndarray`
The ``error`` cutout.
slices : tuple of slices
Slices in each dimension of the ``data`` array used to define
the cutout region.
"""
if len(position) != 2:
raise ValueError('position must have a length of 2')
if footprint is None:
if box_size is None:
raise ValueError('box_size or footprint must be defined.')
if not isinstance(box_size, collections.Iterable):
shape = (box_size, box_size)
else:
if len(box_size) != 2:
raise ValueError('box_size must have a length of 2')
shape = box_size
footprint = np.ones(shape, dtype=bool)
else:
footprint = np.asanyarray(footprint, dtype=bool)
slices_large, slices_small = overlap_slices(data.shape, footprint.shape,
position[::-1])
region_data = data[slices_large]
if error is not None:
region_error = error[slices_large]
else:
region_error = None
if mask is not None:
region_mask = mask[slices_large]
else:
region_mask = np.zeros_like(region_data, dtype=bool)
footprint_mask = ~footprint
footprint_mask = footprint_mask[slices_small] # trim if necessary
region_mask = np.logical_or(region_mask, footprint_mask)
return region_data, region_mask, region_error, slices_large
|