Loading [MathJax]/extensions/tex2jax.js
LSST Applications g04a91732dc+cc8870d3f5,g07dc498a13+5aa0b8792f,g0fba68d861+488cddfaa9,g1409bbee79+5aa0b8792f,g1a7e361dbc+5aa0b8792f,g1fd858c14a+f64bc332a9,g35bb328faa+fcb1d3bbc8,g4d2262a081+b1c1982739,g4d39ba7253+9633a327c1,g4e0f332c67+5d362be553,g53246c7159+fcb1d3bbc8,g60b5630c4e+9633a327c1,g668ecb457e+25d63fd678,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g7b71ed6315+fcb1d3bbc8,g8852436030+8b64ca622a,g89139ef638+5aa0b8792f,g89e1512fd8+37f975783e,g8d6b6b353c+9633a327c1,g9125e01d80+fcb1d3bbc8,g989de1cb63+5aa0b8792f,g9f33ca652e+b196626af7,ga9baa6287d+9633a327c1,gaaedd4e678+5aa0b8792f,gabe3b4be73+1e0a283bba,gb1101e3267+71e32094df,gb58c049af0+f03b321e39,gb90eeb9370+2807b1ad02,gc741bbaa4f+1ae86710ed,gcf25f946ba+8b64ca622a,gd315a588df+a39986a76f,gd6cbbdb0b4+c8606af20c,gd9a9a58781+fcb1d3bbc8,gde0f65d7ad+94dfc458f4,ge278dab8ac+932305ba37,ge82c20c137+76d20ab76d,gfe73954cf8+a1301e4c20,w.2025.11
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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

◆ 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