Spectral Cube documentation

The spectral-cube package provides an easy way to read, manipulate, analyze, and write data cubes with two positional dimensions and one spectral dimension, optionally with Stokes parameters. It provides the following main features:

  • A uniform interface to spectral cubes, robust to the wide range of conventions of axis order, spatial projections, and spectral units that exist in the wild.

  • Easy extraction of cube sub-regions using physical coordinates.

  • Ability to easily create, combine, and apply masks to datasets.

  • Basic summary statistic methods like moments and array aggregates.

  • Designed to work with datasets too large to load into memory.

Quick start

Here’s a simple script demonstrating the spectral-cube package:

>>> import astropy.units as u
>>> from astropy.utils import data
>>> from spectral_cube import SpectralCube
>>> fn = data.get_pkg_data_filename('tests/data/adv.fits', 'spectral_cube')
>>> cube = SpectralCube.read(fn)
>>> print(cube)
SpectralCube with shape=(4, 3, 2) and unit=K:
 n_x:      2  type_x: RA---SIN  unit_x: deg    range:    24.062698 deg:   24.063349 deg
 n_y:      3  type_y: DEC--SIN  unit_y: deg    range:    29.934094 deg:   29.935209 deg
 n_s:      4  type_s: VOPT      unit_s: km / s  range:     -321.215 km / s:    -317.350 km / s

# extract the subcube between 98 and 100 GHz
>>> slab = cube.spectral_slab(98 * u.GHz, 100 * u.GHz)  

# Ignore elements fainter than 1K
>>> masked_slab = slab.with_mask(slab > 1)  

# Compute the first moment and write to file
>>> m1 = masked_slab.moment(order=1)  
>>> m1.write('moment_1.fits')  

Using spectral-cube

The package centers around the SpectralCube class. In the following sections, we look at how to read data into this class, manipulate spectral cubes, extract moment maps or subsets of spectral cubes, and write spectral cubes to files.