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