LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
_exposureContinued.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__ = ["Exposure"]
23
24import numpy as np
25
26from lsst.utils import TemplateMeta
27
28from ..image._slicing import supportSlicing
29from ..image._disableArithmetic import disableImageArithmetic
30from ..image._fitsIoWithOptions import imageReadFitsWithOptions, exposureWriteFitsWithOptions
31from ._exposure import ExposureI, ExposureF, ExposureD, ExposureU, ExposureL
32from .exposureUtils import bbox_to_convex_polygon, bbox_contains_sky_coords
33
34
35class Exposure(metaclass=TemplateMeta):
36
37 def _set(self, index, value, origin):
38 """Set the pixel at the given index to a triple (value, mask, variance).
39
40 Parameters
41 ----------
42 index : `geom.Point2I`
43 Position of the pixel to assign to.
44 value : `tuple`
45 A tuple of (value, mask, variance) scalars.
46 origin : `ImageOrigin`
47 Coordinate system of ``index`` (`PARENT` or `LOCAL`).
48 """
49 self.maskedImage._set(index, value=value, origin=origin)
50
51 def _get(self, index, origin):
52 """Return a triple (value, mask, variance) at the given index.
53
54 Parameters
55 ----------
56 index : `geom.Point2I`
57 Position of the pixel to assign to.
58 origin : `ImageOrigin`
59 Coordinate system of ``index`` (`PARENT` or `LOCAL`).
60 """
61 return self.maskedImage._get(index, origin=origin)
62
63 def __reduce__(self):
64 from lsst.afw.fits import reduceToFits
65 return reduceToFits(self)
66
67 def convertF(self):
68 return ExposureF(self, deep=True)
69
70 def convertD(self):
71 return ExposureD(self, deep=True)
72
73 def getImage(self):
74 return self.maskedImage.image
75
76 def setImage(self, image):
77 self.maskedImage.image = image
78
79 image = property(getImage, setImage)
80
81 def getMask(self):
82 return self.maskedImage.mask
83
84 def setMask(self, mask):
85 self.maskedImage.mask = mask
86
87 mask = property(getMask, setMask)
88
89 def getVariance(self):
90 return self.maskedImage.variance
91
92 def setVariance(self, variance):
93 self.maskedImage.variance = variance
94
95 variance = property(getVariance, setVariance)
96
97 def getConvexPolygon(self, padding=10):
98 """Get the convex polygon associated with the bounding box corners.
99
100 The returned polygon has additional padding to ensure that the
101 bounding box is entirely contained within it. To ensure a set
102 of coordinates are entirely contained within an exposure, run
103 ``exposure.containsSkyCoords()``. The default padding
104 size was chosen to be sufficient for the most warped detectors at
105 the edges of the HyperSuprimeCam focal plane.
106
107 Parameters
108 ----------
109 padding : `int`
110 Pixel padding to ensure that bounding box is entirely contained
111 within the resulting polygon.
112
113 Returns
114 -------
115 convexPolygon : `lsst.sphgeom.ConvexPolygon`
116 Returns `None` if exposure does not have a valid WCS.
117 """
118 if self.wcs is None:
119 return None
120
121 return bbox_to_convex_polygon(self.getBBox(), self.wcs, padding=padding)
122
123 convex_polygon = property(getConvexPolygon)
124
125 def containsSkyCoords(self, ra, dec, padding=10):
126 """Check if a set of sky positions is in the pixel bounding box.
127
128 The default padding size was chosen to be sufficient for the
129 most warped detectors at the edges of the HyperSuprimeCam focal plane.
130
131 Parameters
132 ----------
133 ra : `astropy.Quantity`, (N,)
134 Array of Right Ascension, angular units.
135 dec : `astropy.Quantity`, (N,)
136 Array of Declination, angular units.
137 padding : `int`, optional
138 Pixel padding to ensure that bounding box is entirely contained
139 within the sky polygon (see ``getConvexPolygon()``).
140
141 Returns
142 -------
143 contained : `np.ndarray`, (N,)
144 Boolean array indicating which points are contained in the
145 bounding box.
146
147 Raises
148 ------
149 ValueError if exposure does not have a valid wcs.
150 """
151 if self.wcs is None:
152 raise ValueError("Exposure does not have a valid WCS.")
153
154 return bbox_contains_sky_coords(
155 self.getBBox(),
156 self.wcs,
157 ra,
158 dec,
159 padding=padding)
160
161 readFitsWithOptions = classmethod(imageReadFitsWithOptions)
162
163 writeFitsWithOptions = exposureWriteFitsWithOptions
164
165
166Exposure.register(np.int32, ExposureI)
167Exposure.register(np.float32, ExposureF)
168Exposure.register(np.float64, ExposureD)
169Exposure.register(np.uint16, ExposureU)
170Exposure.register(np.uint64, ExposureL)
171Exposure.alias("I", ExposureI)
172Exposure.alias("F", ExposureF)
173Exposure.alias("D", ExposureD)
174Exposure.alias("U", ExposureU)
175Exposure.alias("L", ExposureL)
176
177for cls in set(Exposure.values()):
178 supportSlicing(cls)
179 disableImageArithmetic(cls)
ConvexPolygon is a closed convex polygon on the unit sphere.
Definition: ConvexPolygon.h:57
daf::base::PropertySet * set
Definition: fits.cc:927