lsst.afw g2603b601e3+b53bcbb7be
_fitsIoWithOptions.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__ = ["imageReadFitsWithOptions",
23 "imageWriteFitsWithOptions", "exposureWriteFitsWithOptions"]
24
25import lsst.geom
26from lsst.log import Log
27from lsst.afw.fits import ImageWriteOptions
28from ._imageLib import ImageOrigin
29
30
31# This must be added to a class as a *classmethod*, for example:
32#
33# @continueclass
34# class MaskX:
35# readFitsWithOptions = classmethod(imageReadFitsWithOptions)
36def imageReadFitsWithOptions(cls, source, options):
37 """Read an Image, Mask, MaskedImage or Exposure from a FITS file,
38 with options.
39
40 Parameters
41 ----------
42 source : `str`
43 Fits file path from which to read image, mask, masked image
44 or exposure.
45 options : `lsst.daf.base.PropertySet` or `dict`
46 Read options:
47
48 - llcX: bbox minimum x (int)
49 - llcY: bbox minimum y (int, must be present if llcX is present)
50 - width: bbox width (int, must be present if llcX is present)
51 - height: bbox height (int, must be present if llcX is present)
52 - imageOrigin: one of "LOCAL" or "PARENT" (has no effect unless
53 a bbox is specified by llcX, etc.)
54
55 Alternatively, a bounding box () can be passed on with the
56 ``"bbox"'' (`lsst.geom.Box2I`) key.
57
58 Raises
59 ------
60 RuntimeError
61 If options contains an unknown value for "imageOrigin"
63 If options contains "llcX" and is missing any of
64 "llcY", "width", or "height".
65 """
66 origin = ImageOrigin.PARENT
67 bbox = lsst.geom.Box2I()
68 if "bbox" in options:
69 bbox = options["bbox"]
70 elif "llcX" in options:
71 llcX = int(options["llcX"])
72 llcY = int(options["llcY"])
73 width = int(options["width"])
74 height = int(options["height"])
75 bbox = lsst.geom.Box2I(lsst.geom.Point2I(llcX, llcY), lsst.geom.Extent2I(width, height))
76 if "imageOrigin" in options:
77 originStr = str(options["imageOrigin"])
78 if (originStr == "LOCAL"):
79 origin = ImageOrigin.LOCAL
80 elif (originStr == "PARENT"):
81 origin = ImageOrigin.PARENT
82 else:
83 raise RuntimeError("Unknown ImageOrigin type {}".format(originStr))
84
85 return cls(source, bbox=bbox, origin=origin)
86
87
88def imageWriteFitsWithOptions(self, dest, options, item="image"):
89 """Write an Image or Mask to FITS, with options
90
91 Parameters
92 ----------
93 dest : `str`
94 Fits file path to which to write the image or mask.
96 Write options. The item ``item`` is read (which defaults to "image").
97 It must contain an `lsst.daf.base.PropertySet` with data for
99 item : `str`, optional
100 Item to read from the ``options`` parameter.
101 """
102 if options is not None:
103 try:
104 writeOptions = ImageWriteOptions(options.getPropertySet(item))
105 except Exception as e:
106 log = Log.getLogger("lsst.afw.image")
107 log.warning("Could not parse item %s from options; writing with defaults: %s", item, e)
108 else:
109 self.writeFits(dest, writeOptions)
110 return
111 self.writeFits(dest)
112
113
114def exposureWriteFitsWithOptions(self, dest, options):
115 """Write an Exposure or MaskedImage to FITS, with options
116
117 Parameters
118 ----------
119 dest : `str`
120 Fits file path to which to write the exposure or masked image.
121 options : `lsst.daf.base.PropertySet`
122 Write options. The items "image", "mask" and "variance" are read.
123 Each must be an `lsst.daf.base.PropertySet` with data for
125 """
126 if options is not None:
127 try:
128 writeOptionDict = {name + "Options": ImageWriteOptions(options.getPropertySet(name))
129 for name in ("image", "mask", "variance")}
130 except Exception as e:
131 log = Log.getLogger("lsst.afw.image")
132 log.warning("Could not parse options; writing with defaults: %s", e)
133 else:
134 self.writeFits(dest, **writeOptionDict)
135 return
136 self.writeFits(dest)
def imageWriteFitsWithOptions(self, dest, options, item="image")
def exposureWriteFitsWithOptions(self, dest, options)
def imageReadFitsWithOptions(cls, source, options)
Options for writing an image to FITS.
Definition: fits.h:219