LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Classes | Functions
lsst.afw.geom.testUtils Namespace Reference

Classes

class  BoxGrid
 
class  FrameSetInfo
 
class  PermutedFrameSet
 
class  TransformTestBaseClass
 

Functions

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

Function Documentation

◆ makeSipIwcToPixel()

def 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.

196 def 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
def makeSipPolyMapCoeffs(metadata, name)
Definition: testUtils.py:141
def makeSipIwcToPixel(metadata)
Definition: testUtils.py:196
Eigen::Matrix2d getCdMatrixFromMetadata(daf::base::PropertySet &metadata)
Read a CD matrix from FITS WCS metadata.
Definition: wcsUtils.cc:75

◆ makeSipPixelToIwc()

def 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.

235 def 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 
def makeSipPixelToIwc(metadata)
Definition: testUtils.py:235

◆ makeSipPolyMapCoeffs()

def 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.

141 def 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