Source code for pvextractor.utils.wcs_slicing
import numpy as np
from astropy import units as u
from astropy.wcs import WCS, WCSSUB_SPECTRAL
from .wcs_utils import get_spectral_scale
[docs]def slice_wcs(wcs, spatial_scale):
"""
Slice a WCS header for a spectral cube to a Position-Velocity WCS, with
ctype "OFFSET" for the spatial offset direction
Parameters
----------
wcs : :class:`~astropy.wcs.WCS`
The WCS of the spectral cube. This should already be sanitized and
have the spectral axis along the third dimension.
spatial_scale: :class:`~astropy.units.Quantity`
The spatial scale of the position axis
Returns
-------
wcs_slice :class:`~astropy.wcs.WCS`
The resulting WCS slice
"""
# Extract spectral slice
wcs_slice = wcs.sub([0, WCSSUB_SPECTRAL])
# Set spatial parameters
wcs_slice.wcs.crpix[0] = 1.
wcs_slice.wcs.cdelt[0] = spatial_scale.to(u.degree).value
wcs_slice.wcs.crval[0] = 0.
wcs_slice.wcs.ctype[0] = "OFFSET"
wcs_slice.wcs.cunit[0] = 'deg'
# Not clear why this is needed, but apparently sub with 0 sets pc[1,0] = 1,
# which is incorrect
wcs_slice.wcs.pc[1,0] = wcs_slice.wcs.pc[0,1] = 0
return wcs_slice