LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Functions
lsst.afw.geom.testUtils Namespace Reference

Classes

class  BoxGrid
 
class  FrameSetInfo
 
class  PermutedFrameSet
 
class  TransformTestBaseClass
 

Functions

 makeSipPolyMapCoeffs (metadata, name)
 
 makeSipIwcToPixel (metadata)
 
 makeSipPixelToIwc (metadata)
 

Function Documentation

◆ makeSipIwcToPixel()

lsst.afw.geom.testUtils.makeSipIwcToPixel ( metadata)
Make an IWC to pixel transform with SIP distortion from FITS-WCS metadata

This function is primarily intended for unit tests.
IWC is intermediate world coordinates, as described in the FITS papers.

Parameters
----------
metadata : lsst.daf.base.PropertySet
    FITS metadata describing a WCS with inverse SIP coefficients

Returns
-------
lsst.afw.geom.TransformPoint2ToPoint2
    Transform from IWC position to pixel position (zero-based)
    in the forward direction. The inverse direction is not defined.

Notes
-----

The inverse SIP terms APn_m, BPn_m are polynomial coefficients x^n y^m
for computing transformed x, y respectively. If we call the resulting
polynomial inverseSipPolynomial, the returned transformation is:

    pixelPosition = pixel origin + uv + inverseSipPolynomial(uv)
    where uv = inverseCdMatrix * iwcPosition

Definition at line 196 of file testUtils.py.

196def makeSipIwcToPixel(metadata):
197 """Make an IWC to pixel transform with SIP distortion from FITS-WCS metadata
198
199 This function is primarily intended for unit tests.
200 IWC is intermediate world coordinates, as described in the FITS papers.
201
202 Parameters
203 ----------
204 metadata : lsst.daf.base.PropertySet
205 FITS metadata describing a WCS with inverse SIP coefficients
206
207 Returns
208 -------
209 lsst.afw.geom.TransformPoint2ToPoint2
210 Transform from IWC position to pixel position (zero-based)
211 in the forward direction. The inverse direction is not defined.
212
213 Notes
214 -----
215
216 The inverse SIP terms APn_m, BPn_m are polynomial coefficients x^n y^m
217 for computing transformed x, y respectively. If we call the resulting
218 polynomial inverseSipPolynomial, the returned transformation is:
219
220 pixelPosition = pixel origin + uv + inverseSipPolynomial(uv)
221 where uv = inverseCdMatrix * iwcPosition
222 """
223 crpix = (metadata.getScalar("CRPIX1") - 1, metadata.getScalar("CRPIX2") - 1)
224 pixelRelativeToAbsoluteMap = ast.ShiftMap(crpix)
225 cdMatrix = getCdMatrixFromMetadata(metadata)
226 cdMatrixMap = ast.MatrixMap(cdMatrix.copy())
227 coeffList = makeSipPolyMapCoeffs(metadata, "AP") + makeSipPolyMapCoeffs(metadata, "BP")
228 coeffArr = np.array(coeffList, dtype=float)
229 sipPolyMap = ast.PolyMap(coeffArr, 2, "IterInverse=0")
230
231 iwcToPixelMap = cdMatrixMap.inverted().then(sipPolyMap).then(pixelRelativeToAbsoluteMap)
232 return afwGeom.TransformPoint2ToPoint2(iwcToPixelMap)
233
234
MatrixMap is a form of Mapping which performs a general linear transformation.
Definition MatrixMap.h:42
PolyMap is a Mapping which performs a general polynomial transformation.
Definition PolyMap.h:49
ShiftMap is a linear Mapping which shifts each axis by a specified constant value.
Definition ShiftMap.h:40
Transform LSST spatial data, such as lsst::geom::Point2D and lsst::geom::SpherePoint,...
Definition Transform.h:68

◆ makeSipPixelToIwc()

lsst.afw.geom.testUtils.makeSipPixelToIwc ( metadata)
Make a pixel to IWC transform with SIP distortion from FITS-WCS metadata

This function is primarily intended for unit tests.
IWC is intermediate world coordinates, as described in the FITS papers.

Parameters
----------
metadata : lsst.daf.base.PropertySet
    FITS metadata describing a WCS with forward SIP coefficients

Returns
-------
lsst.afw.geom.TransformPoint2ToPoint2
    Transform from pixel position (zero-based) to IWC position
    in the forward direction. The inverse direction is not defined.

Notes
-----

The forward SIP terms An_m, Bn_m are polynomial coefficients x^n y^m
for computing transformed x, y respectively. If we call the resulting
polynomial sipPolynomial, the returned transformation is:

    iwcPosition = cdMatrix * (dxy + sipPolynomial(dxy))
    where dxy = pixelPosition - pixelOrigin

Definition at line 235 of file testUtils.py.

235def makeSipPixelToIwc(metadata):
236 """Make a pixel to IWC transform with SIP distortion from FITS-WCS metadata
237
238 This function is primarily intended for unit tests.
239 IWC is intermediate world coordinates, as described in the FITS papers.
240
241 Parameters
242 ----------
243 metadata : lsst.daf.base.PropertySet
244 FITS metadata describing a WCS with forward SIP coefficients
245
246 Returns
247 -------
248 lsst.afw.geom.TransformPoint2ToPoint2
249 Transform from pixel position (zero-based) to IWC position
250 in the forward direction. The inverse direction is not defined.
251
252 Notes
253 -----
254
255 The forward SIP terms An_m, Bn_m are polynomial coefficients x^n y^m
256 for computing transformed x, y respectively. If we call the resulting
257 polynomial sipPolynomial, the returned transformation is:
258
259 iwcPosition = cdMatrix * (dxy + sipPolynomial(dxy))
260 where dxy = pixelPosition - pixelOrigin
261 """
262 crpix = (metadata.getScalar("CRPIX1") - 1, metadata.getScalar("CRPIX2") - 1)
263 pixelAbsoluteToRelativeMap = ast.ShiftMap(crpix).inverted()
264 cdMatrix = getCdMatrixFromMetadata(metadata)
265 cdMatrixMap = ast.MatrixMap(cdMatrix.copy())
266 coeffList = makeSipPolyMapCoeffs(metadata, "A") + makeSipPolyMapCoeffs(metadata, "B")
267 coeffArr = np.array(coeffList, dtype=float)
268 sipPolyMap = ast.PolyMap(coeffArr, 2, "IterInverse=0")
269 pixelToIwcMap = pixelAbsoluteToRelativeMap.then(sipPolyMap).then(cdMatrixMap)
270 return afwGeom.TransformPoint2ToPoint2(pixelToIwcMap)
271
272

◆ makeSipPolyMapCoeffs()

lsst.afw.geom.testUtils.makeSipPolyMapCoeffs ( metadata,
name )
Return a list of ast.PolyMap coefficients for the specified SIP matrix

The returned list of coefficients for an ast.PolyMap
that computes the following function:

    f(dxy) = dxy + sipPolynomial(dxy))
    where dxy = pixelPosition - pixelOrigin
    and sipPolynomial is a polynomial with terms `<name>n_m for x^n y^m`
        (e.g. A2_0 is the coefficient for x^2 y^0)

Parameters
----------
metadata : lsst.daf.base.PropertySet
    FITS metadata describing a WCS with the specified SIP coefficients
name : str
    The desired SIP terms: one of A, B, AP, BP

Returns
-------
list
    A list of coefficients for an ast.PolyMap that computes
    the specified SIP polynomial, including a term for out = in

Note
----
This is an internal function for use by makeSipIwcToPixel
and makeSipPixelToIwc

Definition at line 141 of file testUtils.py.

141def makeSipPolyMapCoeffs(metadata, name):
142 """Return a list of ast.PolyMap coefficients for the specified SIP matrix
143
144 The returned list of coefficients for an ast.PolyMap
145 that computes the following function:
146
147 f(dxy) = dxy + sipPolynomial(dxy))
148 where dxy = pixelPosition - pixelOrigin
149 and sipPolynomial is a polynomial with terms `<name>n_m for x^n y^m`
150 (e.g. A2_0 is the coefficient for x^2 y^0)
151
152 Parameters
153 ----------
154 metadata : lsst.daf.base.PropertySet
155 FITS metadata describing a WCS with the specified SIP coefficients
156 name : str
157 The desired SIP terms: one of A, B, AP, BP
158
159 Returns
160 -------
161 list
162 A list of coefficients for an ast.PolyMap that computes
163 the specified SIP polynomial, including a term for out = in
164
165 Note
166 ----
167 This is an internal function for use by makeSipIwcToPixel
168 and makeSipPixelToIwc
169 """
170 outAxisDict = dict(A=1, B=2, AP=1, BP=2)
171 outAxis = outAxisDict.get(name)
172 if outAxis is None:
173 raise RuntimeError(f"{name} not a supported SIP name")
174 width = metadata.getAsInt(f"{name}_ORDER") + 1
175 found = False
176 # start with a term for out = in
177 coeffs = []
178 if outAxis == 1:
179 coeffs.append([1.0, outAxis, 1, 0])
180 else:
181 coeffs.append([1.0, outAxis, 0, 1])
182 # add SIP distortion terms
183 for xPower in range(width):
184 for yPower in range(width):
185 coeffName = f"{name}_{xPower}_{yPower}"
186 if not metadata.exists(coeffName):
187 continue
188 found = True
189 coeff = metadata.getAsDouble(coeffName)
190 coeffs.append([coeff, outAxis, xPower, yPower])
191 if not found:
192 raise RuntimeError(f"No {name} coefficients found")
193 return coeffs
194
195