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

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 

22 

23import lsst.geom 

24import lsst.afw.geom as afwGeom 

25 

26from lsst.pex.config import Config, Field 

27from lsst.pipe.base import Task 

28 

29 

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 ) 

60 

61 

62class VignetteTask(Task): 

63 """Define a simple circular vignette pattern. 

64 """ 

65 ConfigClass = VignetteConfig 

66 _DefaultName = "isrVignette" 

67 

68 def run(self, exposure): 

69 """Generate circular vignette pattern. 

70 

71 Parameters 

72 ---------- 

73 exposure : `lsst.afw.image.Exposure` 

74 Exposure to construct vignette for. 

75 

76 Returns 

77 ------- 

78 polygon : `lsst.afw.Geom.Polygon` 

79 Polygon defining the boundary of the vignetted region. 

80 """ 

81 

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