LSST Applications g04c3c9f7ca+2075667efa,g1e125bf412+5f448d5fcf,g2079a07aa2+3e9fd84d81,g2305ad1205+b635cf1488,g2bbee38e9b+6c6beb4891,g337abbeb29+6c6beb4891,g33d1c0ed96+6c6beb4891,g3a166c0a6a+6c6beb4891,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+42f171e1e6,g5c3423f6d4+d536b04327,g607f77f49a+d536b04327,g6f43f06aed+ca1339dc19,g858d7b2824+d536b04327,g8ee334c5b4+d7f9608c2f,g9963eaa53e+b3dc1655d3,g998f4353bf+d536b04327,g99cad8db69+8ef2408349,g9ddcbc5298+9a081db1e4,ga1e77700b3+2cbb763275,gadfd92a7e4+aec2f3b930,gae0086650b+585e252eca,gb0e22166c9+0e73c8378f,gb3b7280ab2+cb5fdb229e,gbb8dafda3b+a327199e22,gc120e1dc64+88074880ea,gc28159a63d+6c6beb4891,gcdd4ae20e8+bd241b2308,gcde1bda545+903e937d91,gcf0d15dbbd+bd241b2308,gdaeeff99f8+f9a426f77a,gddc38dedce+585e252eca,ge79ae78c31+6c6beb4891,gfbcc870c63+b310236976,w.2024.23
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | List of all members
lsst.afw.cameraGeom.pupil.PupilFactory Class Reference

Public Member Functions

 __init__ (self, visitInfo, pupilSize, npix)
 
 getPupil (self, point)
 

Public Attributes

 visitInfo
 
 pupilSize
 
 npix
 
 pupilScale
 
 u
 
 v
 

Protected Member Functions

 _fullPupil (self)
 
 _cutCircleInterior (self, pupil, p0, r)
 
 _cutCircleExterior (self, pupil, p0, r)
 
 _cutRay (self, pupil, p0, angle, thickness)
 
 _centerPupil (self, pupil)
 

Static Protected Member Functions

 _pointLineDistance (p0, p1, p2)
 

Detailed Description

Pupil obscuration function factory for use with Fourier optics.

Parameters
----------
visitInfo : `lsst.afw.image.VisitInfo`
    Visit information for a particular exposure.
pupilSize : `float`
    Size in meters of constructed Pupil array.
    Note that this may be larger than the actual diameter of the
    illuminated pupil to accommodate zero-padding.
npix : `int`
    Constructed Pupils will be npix x npix.

Definition at line 49 of file pupil.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.afw.cameraGeom.pupil.PupilFactory.__init__ ( self,
visitInfo,
pupilSize,
npix )

Definition at line 64 of file pupil.py.

64 def __init__(self, visitInfo, pupilSize, npix):
65 self.visitInfo = visitInfo
66 self.pupilSize = pupilSize
67 self.npix = npix
68 self.pupilScale = pupilSize/npix
69 u = (np.arange(npix, dtype=np.float64) - (npix - 1)/2) * self.pupilScale
70 self.u, self.v = np.meshgrid(u, u)
71

Member Function Documentation

◆ _centerPupil()

lsst.afw.cameraGeom.pupil.PupilFactory._centerPupil ( self,
pupil )
protected
Center the illuminated portion of the pupil in array.

Parameters
----------
pupil : `Pupil`
    Pupil to modify in place

Definition at line 178 of file pupil.py.

178 def _centerPupil(self, pupil):
179 """Center the illuminated portion of the pupil in array.
180
181 Parameters
182 ----------
183 pupil : `Pupil`
184 Pupil to modify in place
185 """
186 def center(arr, axis):
187 smash = np.sum(arr, axis=axis)
188 w = np.where(smash)[0]
189 return int(0.5*(np.min(w)+np.max(w)))
190 ycenter = center(pupil.illuminated, 0)
191 xcenter = center(pupil.illuminated, 1)
192 ytarget = pupil.illuminated.shape[0]//2
193 xtarget = pupil.illuminated.shape[1]//2
194 pupil.illuminated = np.roll(np.roll(pupil.illuminated,
195 xtarget-xcenter,
196 axis=0),
197 ytarget-ycenter,
198 axis=1)

◆ _cutCircleExterior()

lsst.afw.cameraGeom.pupil.PupilFactory._cutCircleExterior ( self,
pupil,
p0,
r )
protected
Cut out the exterior of a circular region from a Pupil.

Parameters
----------
pupil : `Pupil`
    Pupil to modify in place
p0 : `pair`` of `float`
    2-tuple indicating region center.
r : `float`
    Circular region radius.

Definition at line 140 of file pupil.py.

140 def _cutCircleExterior(self, pupil, p0, r):
141 """Cut out the exterior of a circular region from a Pupil.
142
143 Parameters
144 ----------
145 pupil : `Pupil`
146 Pupil to modify in place
147 p0 : `pair`` of `float`
148 2-tuple indicating region center.
149 r : `float`
150 Circular region radius.
151 """
152 r2 = (self.u - p0[0])**2 + (self.v - p0[1])**2
153 pupil.illuminated[r2 > r**2] = False
154

◆ _cutCircleInterior()

lsst.afw.cameraGeom.pupil.PupilFactory._cutCircleInterior ( self,
pupil,
p0,
r )
protected
Cut out the interior of a circular region from a Pupil.

Parameters
----------
pupil : `Pupil`
    Pupil to modify in place.
p0 : `pair`` of `float`
    2-tuple indicating region center.
r : `float`
    Circular region radius.

Definition at line 125 of file pupil.py.

125 def _cutCircleInterior(self, pupil, p0, r):
126 """Cut out the interior of a circular region from a Pupil.
127
128 Parameters
129 ----------
130 pupil : `Pupil`
131 Pupil to modify in place.
132 p0 : `pair`` of `float`
133 2-tuple indicating region center.
134 r : `float`
135 Circular region radius.
136 """
137 r2 = (self.u - p0[0])**2 + (self.v - p0[1])**2
138 pupil.illuminated[r2 < r**2] = False
139

◆ _cutRay()

lsst.afw.cameraGeom.pupil.PupilFactory._cutRay ( self,
pupil,
p0,
angle,
thickness )
protected
Cut out a ray from a Pupil.

Parameters
----------
pupil : `Pupil`
    Pupil to modify in place.
p0 : `pair`` of `float`
    2-tuple indicating ray starting point.
angle : `pair` of `float`
    Ray angle measured CCW from +x.
thickness : `float`
    Thickness of cutout.

Definition at line 155 of file pupil.py.

155 def _cutRay(self, pupil, p0, angle, thickness):
156 """Cut out a ray from a Pupil.
157
158 Parameters
159 ----------
160 pupil : `Pupil`
161 Pupil to modify in place.
162 p0 : `pair`` of `float`
163 2-tuple indicating ray starting point.
164 angle : `pair` of `float`
165 Ray angle measured CCW from +x.
166 thickness : `float`
167 Thickness of cutout.
168 """
169 angleRad = angle.asRadians()
170 # the 1 is arbitrary, just need something to define another point on
171 # the line
172 p1 = (p0[0] + 1, p0[1] + np.tan(angleRad))
173 d = PupilFactory._pointLineDistance((self.u, self.v), p0, p1)
174 pupil.illuminated[(d < 0.5*thickness)
175 & ((self.u - p0[0])*np.cos(angleRad)
176 + (self.v - p0[1])*np.sin(angleRad) >= 0)] = False
177

◆ _fullPupil()

lsst.afw.cameraGeom.pupil.PupilFactory._fullPupil ( self)
protected
Make a fully-illuminated Pupil.

Returns
-------
pupil : `Pupil`
    The illuminated pupil.

Definition at line 114 of file pupil.py.

114 def _fullPupil(self):
115 """Make a fully-illuminated Pupil.
116
117 Returns
118 -------
119 pupil : `Pupil`
120 The illuminated pupil.
121 """
122 illuminated = np.ones(self.u.shape, dtype=bool)
123 return Pupil(illuminated, self.pupilSize, self.pupilScale)
124

◆ _pointLineDistance()

lsst.afw.cameraGeom.pupil.PupilFactory._pointLineDistance ( p0,
p1,
p2 )
staticprotected
Compute the right-angle distance between the points given by `p0`
and the line that passes through `p1` and `p2`.

Parameters
----------
p0 : `tuple` of `numpy.ndarray`
    2-tuple of numpy arrays (x, y focal plane coordinates)
p1 : ``pair`` of `float`
    x,y focal plane coordinates
p2 : ``pair`` of `float`
    x,y focal plane coordinates

Returns
-------
distances : `numpy.ndarray`
    Numpy array of distances; shape congruent to p0[0].

Definition at line 89 of file pupil.py.

89 def _pointLineDistance(p0, p1, p2):
90 """Compute the right-angle distance between the points given by `p0`
91 and the line that passes through `p1` and `p2`.
92
93 Parameters
94 ----------
95 p0 : `tuple` of `numpy.ndarray`
96 2-tuple of numpy arrays (x, y focal plane coordinates)
97 p1 : ``pair`` of `float`
98 x,y focal plane coordinates
99 p2 : ``pair`` of `float`
100 x,y focal plane coordinates
101
102 Returns
103 -------
104 distances : `numpy.ndarray`
105 Numpy array of distances; shape congruent to p0[0].
106 """
107 x0, y0 = p0
108 x1, y1 = p1
109 x2, y2 = p2
110 dy21 = y2 - y1
111 dx21 = x2 - x1
112 return np.abs(dy21*x0 - dx21*y0 + x2*y1 - y2*x1)/np.hypot(dy21, dx21)
113

◆ getPupil()

lsst.afw.cameraGeom.pupil.PupilFactory.getPupil ( self,
point )
Calculate a Pupil at a given point in the focal plane.

Parameters
----------
point : `lsst.geom.Point2D`
  The focal plane coordinates.

Returns
-------
pupil : `Pupil`
    The Pupil at ``point``.

Definition at line 72 of file pupil.py.

72 def getPupil(self, point):
73 """Calculate a Pupil at a given point in the focal plane.
74
75 Parameters
76 ----------
77 point : `lsst.geom.Point2D`
78 The focal plane coordinates.
79
80 Returns
81 -------
82 pupil : `Pupil`
83 The Pupil at ``point``.
84 """
85 raise NotImplementedError(
86 "PupilFactory not implemented for this camera")
87

Member Data Documentation

◆ npix

lsst.afw.cameraGeom.pupil.PupilFactory.npix

Definition at line 67 of file pupil.py.

◆ pupilScale

lsst.afw.cameraGeom.pupil.PupilFactory.pupilScale

Definition at line 68 of file pupil.py.

◆ pupilSize

lsst.afw.cameraGeom.pupil.PupilFactory.pupilSize

Definition at line 66 of file pupil.py.

◆ u

lsst.afw.cameraGeom.pupil.PupilFactory.u

Definition at line 70 of file pupil.py.

◆ v

lsst.afw.cameraGeom.pupil.PupilFactory.v

Definition at line 70 of file pupil.py.

◆ visitInfo

lsst.afw.cameraGeom.pupil.PupilFactory.visitInfo

Definition at line 65 of file pupil.py.


The documentation for this class was generated from the following file: