import numpy as np
from astropy import units as u
from spectral_cube import SpectralCube
from lines import lines


for spwnum in (0,1,2,3):
    cube = SpectralCube.read('Orion_NW_12m_spw{0}_lines.fits'.format(spwnum))

    for line,frq in lines.items():
        if frq > cube.spectral_extrema[0] and frq < cube.spectral_extrema[1]:
            print("Extracting {0}".format(line))
            vcube = cube.with_spectral_unit(u.km/u.s, rest_value=frq,
                                            velocity_convention='radio')
            subcube = vcube.spectral_slab(2*u.km/u.s, 15*u.km/u.s)
            frqint = int(np.round(frq.to(u.GHz).value))
            subcube.write("Orion_NW_12m_spw{0}_{1}_{2}.fits".format(spwnum,
                                                                    line,
                                                                    frqint),
                          overwrite=True)
Exemple #2
0
from astropy.io import fits
from astropy import units as u
import numpy as np
import spectral_cube
import pyspeckit
from spectral_cube.spectral_axis import vac_to_air
from lines import lines

cube = spectral_cube.SpectralCube.read('DATACUBEFINALuser_20140216T010259_78380e1d.fits', hdu=1)
cont = cube.spectral_slab(6380*u.AA, 6500*u.AA).apply_numpy_function(np.mean, axis=0)

airlines = {line: vac_to_air(wl*u.AA) for line,wl in lines.items()}
#wavelengths = spectral_cube.spectral_axis.vac_to_air(np.array(lines.values())*u.AA)
# 5877.25, 7064.21, 7137.8,  7320.94, 7331.68

wlslabs = {line:
           cube.spectral_slab(wl-5*u.AA, wl+6*u.AA)
           for line,wl in airlines.items()}

for line,slab in wlslabs.items():
    print "AA",line
    mom1 = slab.moment1(axis=0)
    mom1.write('moments/moment1_085_{0}_angstroms.fits'.format(line), overwrite=True)
mean_moment = np.mean([fits.getdata('moments/moment1_085_{0}_angstroms.fits'.format(line))-airlines[line].value
                       for line in wlslabs], axis=0)
fits.PrimaryHDU(data=mean_moment, header=fits.getheader('moments/moment1_085_{0}_angstroms.fits'.format(line))).writeto('moments/moment1_085_mean_deltaangstroms.fits', clobber=True)

# Cube velocity conversion should use vacuum wavelengths
slabs = {line:
         cube.with_spectral_unit(u.km/u.s, velocity_convention='optical',
                                 rest_value=wl*u.AA)