LSST Applications g02d81e74bb+86cf3d8bc9,g180d380827+7a4e862ed4,g2079a07aa2+86d27d4dc4,g2305ad1205+e1ca1c66fa,g29320951ab+012e1474a1,g295015adf3+341ea1ce94,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+c429d67c83,g48712c4677+f88676dd22,g487adcacf7+27e1e21933,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+b41db86c35,g5a732f18d5+53520f316c,g64a986408d+86cf3d8bc9,g858d7b2824+86cf3d8bc9,g8a8a8dda67+585e252eca,g99cad8db69+84912a7fdc,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+a2b54eae19,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6681f309db,gc120e1dc64+f0fcc2f6d8,gc28159a63d+0e5473021a,gcf0d15dbbd+c429d67c83,gdaeeff99f8+f9a426f77a,ge6526c86ff+0433e6603d,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+86cf3d8bc9,w.2024.17
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