Skip to main content
`Ctrl`+`K`

# Note about SIP and WCS

`astropy.wcs` supports the Simple Imaging Polynomial (SIP) convention. The SIP distortion is defined in FITS headers by the presence of the SIP specific keywords and a `-SIP` suffix in `CTYPE`, for example `RA---TAN-SIP`, `DEC--TAN-SIP`.

This has not been a strict convention in the past and the default in `astropy.wcs` is to always include the SIP distortion if the SIP coefficients are present, even if `-SIP` is not included in CTYPE. The presence of a `-SIP` suffix in CTYPE is not used as a trigger to initialize the SIP distortion.

It is important that headers implement correctly the SIP convention. If the intention is to use the SIP distortion, a header should have the SIP coefficients and the `-SIP` suffix in CTYPE.

`astropy.wcs` prints INFO messages when inconsistent headers are detected, for example when SIP coefficients are present but CTYPE is missing a `-SIP` suffix, see examples below. `astropy.wcs` will print a message about the inconsistent header but will create and use the SIP distortion and it will be used in calls to `all_pix2world`. If this was not the intended use (e.g. it’s a drizzled image and has no distortions) it is best to remove the SIP coefficients from the header. They can be removed temporarily from a WCS object by

    >>> wcsobj.sip = None

In addition, if SIP is the only distortion in the header, the two methods, `wcs_pix2world` and `wcs_world2pix`, may be used to transform from pixels to world coordinate system while omitting distortions.

Another consequence of the inconsistent header is that if `to_header()` is called with `relax=True` it will return a header with SIP coefficients and a `-SIP` suffix in CTYPE and will not reproduce the original header.

In conclusion, when astropy.wcs detects inconsistent headers, the recommendation is that the header is inspected and corrected to match the data.

Below is an example of a header with SIP coefficients when `-SIP` is missing from CTYPE. The data is drizzled, i.e. distortion free, so the intention is not to include the SIP distortion.

    >>> wcsobj = wcs.WCS(header)
    INFO:

            Inconsistent SIP distortion information is present in the FITS header and the WCS object:
            SIP coefficients were detected, but CTYPE is missing a "-SIP" suffix.
            astropy.wcs is using the SIP distortion coefficients,
            therefore the coordinates calculated here might be incorrect.

            If you do not want to apply the SIP distortion coefficients,
            please remove the SIP coefficients from the FITS header or the
            WCS object.  As an example, if the image is already distortion-corrected
            (e.g., drizzled) then distortion components should not apply and the SIP
            coefficients should be removed.

            While the SIP distortion coefficients are being applied here, if that was indeed the intent,
            for consistency please append "-SIP" to the CTYPE in the FITS header or the WCS object.

    >>> hdr = wcsobj.to_header(relax=True)
    INFO:

            Inconsistent SIP distortion information is present in the current WCS:
            SIP coefficients were detected, but CTYPE is missing "-SIP" suffix,
            therefore the current WCS is internally inconsistent.

            Because relax has been set to True, the resulting output WCS will have
            "-SIP" appended to CTYPE in order to make the header internally consistent.

            However, this may produce incorrect astrometry in the output WCS, if
            in fact the current WCS is already distortion-corrected.

            Therefore, if current WCS is already distortion-corrected (eg, drizzled)
            then SIP distortion components should not apply. In that case, for a WCS
            that is already distortion-corrected, please remove the SIP coefficients
            from the header.