Coverage for python/lsst/ip/isr/vignette.py: 55%
23 statements
« prev ^ index » next coverage.py v7.2.1, created at 2023-03-12 03:09 -0700
« prev ^ index » next coverage.py v7.2.1, created at 2023-03-12 03:09 -0700
1# This file is part of ip_isr.
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/>.
21import numpy
23import lsst.geom
24import lsst.afw.geom as afwGeom
26from lsst.pex.config import Config, Field
27from lsst.pipe.base import Task
30class VignetteConfig(Config):
31 """
32 Settings to define vignetteing pattern
33 """
34 xCenter = Field(
35 dtype=float,
36 doc="Center of vignetting pattern, in focal plane x coordinates.",
37 default=0.0,
38 )
39 yCenter = Field(
40 dtype=float,
41 doc="Center of vignetting pattern, in focal plane y coordinates.",
42 default=0.0,
43 )
44 radius = Field( 44 ↛ exitline 44 didn't jump to the function exit
45 dtype=float,
46 doc="Radius of vignetting pattern, in focal plane coordinates.",
47 default=100.0,
48 check=lambda x: x >= 0
49 )
50 numPolygonPoints = Field(
51 dtype=int,
52 doc="Number of points used to define the vignette polygon.",
53 default=100,
54 )
55 doWriteVignettePolygon = Field(
56 dtype=bool,
57 doc="Persist polygon used to define vignetted region?",
58 default=False,
59 )
62class VignetteTask(Task):
63 """Define a simple circular vignette pattern.
64 """
65 ConfigClass = VignetteConfig
66 _DefaultName = "isrVignette"
68 def run(self, exposure):
69 """Generate circular vignette pattern.
71 Parameters
72 ----------
73 exposure : `lsst.afw.image.Exposure`
74 Exposure to construct vignette for.
76 Returns
77 -------
78 polygon : `lsst.afw.Geom.Polygon`
79 Polygon defining the boundary of the vignetted region.
80 """
82 if self.config.doWriteVignettePolygon:
83 theta = numpy.linspace(0, 2*numpy.pi, num=self.config.numPolygonPoints, endpoint=False)
84 x = self.config.radius*numpy.cos(theta) + self.config.xCenter
85 y = self.config.radius*numpy.sin(theta) + self.config.yCenter
86 points = numpy.array([x, y]).transpose()
87 polygon = afwGeom.Polygon([lsst.geom.Point2D(x1, y1) for x1, y1 in reversed(points)])
88 return polygon
89 else:
90 return None