76 def run(self, exposure=None, doUpdateMask=True, maskPlane="NO_DATA", vignetteValue=None, log=None):
77 """Generate circular vignette pattern.
78
79 Parameters
80 ----------
81 exposure : `lsst.afw.image.Exposure`, optional
82 Exposure to construct, apply, and optionally mask vignette for.
83 doUpdateMask : `bool`, optional
84 If true, the mask will be updated to mask the vignetted region.
85 maskPlane : `str`, optional
86 Mask plane to assign vignetted pixels to.
87 vignetteValue : `float` or `None`, optional
88 Value to assign to the image array pixels within the ``polygon``
89 region. If `None`, image pixel values are not replaced.
90 log : `logging.Logger`, optional
91 Log object to write to.
92
93 Returns
94 -------
95 polygon : `lsst.afw.geom.Polygon`
96 Polygon defining the boundary of the vignetted region.
97 """
98 theta = np.linspace(0, 2*np.pi, num=self.config.numPolygonPoints, endpoint=False)
99 x = self.config.radius*np.cos(theta) + self.config.xCenter
100 y = self.config.radius*np.sin(theta) + self.config.yCenter
101 points = np.array([x, y]).transpose()
103 if exposure is None:
104 return fpPolygon
105
106
107
108 setValidPolygonCcdIntersect(exposure, fpPolygon, log=log)
109
110 if doUpdateMask:
111 polygon = exposure.getInfo().getValidPolygon()
112 maskVignettedRegion(exposure, polygon, maskPlane="NO_DATA", vignetteValue=vignetteValue, log=log)
113 return fpPolygon
114
115