lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
afw
image
exposure
exposureUtils.py
Go to the documentation of this file.
1
# This file is part of afw.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (https://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 3 of the License, or
12
# (at your option) any later version.
13
#
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with this program. If not, see <https://www.gnu.org/licenses/>.
21
22
__all__ = [
'bbox_to_convex_polygon'
,
'bbox_contains_sky_coords'
]
23
24
import
numpy
as
np
25
import
astropy.units
as
units
26
import
lsst.geom
27
28
29
def
bbox_to_convex_polygon
(bbox, wcs, padding=10):
30
"""Convert a bounding box and wcs to a convex polygon on the sky, with paddding.
31
32
The returned polygon has additional padding to ensure that the
33
bounding box is entirely contained within it. The default padding
34
size was chosen to be sufficient for the most warped detectors at
35
the edges of the HyperSuprimeCam focal plane.
36
37
Parameters
38
----------
39
bbox : `lsst.geom.Box2I`
40
Bounding box to convert.
41
wcs : `lsst.afw.image.SkyWcs`
42
WCS associated with the bounding box.
43
padding : `int`
44
Pixel padding to ensure that bounding box is entirely contained
45
within the resulting polygon.
46
47
Returns
48
-------
49
convex_polygon : `lsst.sphgeom.ConvexPolygon`
50
Will be None if wcs is not valid.
51
"""
52
# Convert Box2I to Box2D, without modifying original.
53
_bbox =
lsst.geom.Box2D
(bbox)
54
_bbox.grow(padding)
55
corners = [wcs.pixelToSky(corner).getVector()
56
for
corner
in
_bbox.getCorners()]
57
return
lsst.sphgeom.ConvexPolygon
(corners)
58
59
60
def
bbox_contains_sky_coords
(bbox, wcs, ra, dec, padding=10):
61
"""Check if a set of sky positions are in the bounding box.
62
63
This uses a two-step process: first check that the coordinates are
64
inside a padded version of the bbox projected on the sky, and then
65
project the remaining points onto the bbox, to avoid inverting
66
the WCS outside of the valid region. The default padding
67
size was chosen to be sufficient for the most warped detectors at
68
the edges of the HyperSuprimeCam focal plane.
69
70
Parameters
71
----------
72
bbox : `lsst.geom.Box2I`
73
Pixel bounding box to check sky positions in.
74
wcs : `lsst.afw.image.SkyWcs`
75
WCS associated with the bounding box.
76
ra : `astropy.Quantity`, (N,)
77
Array of Right Ascension, angular units.
78
dec : `astropy.Quantity`, (N,)
79
Array of Declination, angular units.
80
padding : `int`
81
Pixel padding to ensure that bounding box is entirely contained
82
within the resulting polygon.
83
84
Returns
85
-------
86
contained : `np.ndarray`, (N,)
87
Boolean array indicating which points are contained in the
88
bounding box.
89
"""
90
poly =
bbox_to_convex_polygon
(bbox, wcs, padding=padding)
91
92
_ra = np.atleast_1d(ra.to(units.radian).value).astype(np.float64)
93
_dec = np.atleast_1d(dec.to(units.radian).value).astype(np.float64)
94
95
radec_contained = poly.contains(_ra, _dec)
96
97
contained = np.zeros_like(radec_contained, dtype=bool)
98
99
x_in, y_in = wcs.skyToPixelArray(_ra[radec_contained], _dec[radec_contained], degrees=
False
)
100
xy_contained = bbox.contains(x_in, y_in)
101
102
# contained[not radec_contained] is already false
103
contained[radec_contained] = xy_contained
104
return
contained
lsst::geom::Box2D
lsst::sphgeom::ConvexPolygon
lsst::afw::image.exposure.exposureUtils.bbox_contains_sky_coords
bbox_contains_sky_coords(bbox, wcs, ra, dec, padding=10)
Definition
exposureUtils.py:60
lsst::afw::image.exposure.exposureUtils.bbox_to_convex_polygon
bbox_to_convex_polygon(bbox, wcs, padding=10)
Definition
exposureUtils.py:29
lsst::geom
Generated on
for lsst.afw by
1.17.0