Beispiel #1
0
def render_chem(yth2co321=yth2co321, yth2co303=yth2co303, ytsio=ytsio,
                outdir='yt_renders_chem3', size=512, scale=1100.,
                nframes=60,
                north_vector=[1,0,0],
                rot_vector=[1,0,0],
                movie=True, camera_angle=[-0.6, 0.4, 0.6]):

    if not os.path.exists(paths.mpath(outdir)):
        os.makedirs(paths.mpath(outdir))

    tf1 = yt.ColorTransferFunction([0.1,2], grey_opacity=True)
    #tf1.add_gaussian(0.1,0.05, [1,0,0,1])
    #tf1.map_to_colormap(0, 0.5, scale=1, colormap='Reds')
    tf1.add_gaussian(0.25, 0.01, [1,0,0,1])
    tf1.add_step(0.25,0.5,[1,0,0,1])
    #tf1.add_step(1,2,[1,1,1,1])
    tf1.map_to_colormap(0.5,2,scale=1,colormap=red)
    tf2 = yt.ColorTransferFunction([0.1,2], grey_opacity=True)
    #tf2.add_gaussian(0.1,0.05, [0,1,0,1])
    #tf2.map_to_colormap(0, 0.5, scale=1, colormap='Greens')
    tf2.add_gaussian(0.25, 0.01, [0,1,0,1])
    tf2.add_step(0.25,0.5,[0,1,0,1])
    tf2.map_to_colormap(0.5,2,scale=1,colormap=green)
    tf3 = yt.ColorTransferFunction([0.1,2], grey_opacity=True)
    #tf3.add_gaussian(0.1,0.05, [0,0,1,1])
    #tf3.map_to_colormap(0, 0.5, scale=1, colormap='Blues')
    tf3.add_gaussian(0.25, 0.01, [0,0,1,1])
    tf3.add_step(0.25,0.5,[0,0,1,1])
    tf3.map_to_colormap(0.5,2,scale=1,colormap=blue)

    center = yth2co303.dataset.domain_dimensions /2.
    camh2co303 = yth2co303.dataset.h.camera(center, camera_angle, scale, size, tf3,
                                    north_vector=north_vector, fields='flux')
    camh2co321 = yth2co321.dataset.h.camera(center, camera_angle, scale, size, tf2,
                                    north_vector=north_vector, fields='flux')
    camsio = ytsio.dataset.h.camera(center, camera_angle, scale, size, tf1,
                            north_vector=north_vector, fields='flux')

    imh2co303  = camh2co303.snapshot()
    imh2co321  = camh2co321.snapshot()
    imsio  = camsio.snapshot()
    
    pl.figure(1)
    pl.clf()
    pl.imshow(imh2co303+imh2co321+imsio)
    pl.figure(2)
    pl.clf()
    pl.imshow(imh2co303[:,:,:3]+imh2co321[:,:,:3]+imsio[:,:,:3])

    if movie:
        images_h2co303 = [imh2co303]
        images_h2co321 = [imh2co321]
        images_sio = [imsio]

        r1 = camh2co303.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        r2 = camh2co321.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        r3 = camsio.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        pb = ProgressBar(nframes * 3)
        for (ii,(imh2co303,imh2co321,imsio)) in enumerate(izip(r1, r2, r3)):
            images_h2co303.append(imh2co303)
            images_h2co321.append(imh2co321)
            images_sio.append(imsio)

            imh2co303=imh2co303.swapaxes(0,1)
            imh2co303.write_png(paths.mpath(os.path.join(outdir,"h2co303_%04i.png" % (ii))),
                                        rescale=False)
            pb.update(ii*3)
            imsio=imsio.swapaxes(0,1)
            imsio.write_png(paths.mpath(os.path.join(outdir,"sio_%04i.png" % (ii))),
                                        rescale=False)
            pb.update(ii*3+1)
            imh2co321=imh2co321.swapaxes(0,1)
            imh2co321.write_png(paths.mpath(os.path.join(outdir,"h2co321_%04i.png" % (ii))),
                                        rescale=False)
            pb.update(ii*3+2)

        pb.next()


        save_images([i1+i2+i3
                     for i1,i2,i3 in izip(images_h2co303, images_h2co321, images_sio)],
                     paths.mpath(outdir))

        make_movie(paths.mpath(outdir))

        return images_h2co303,images_h2co321,images_sio
    else:
        return imh2co303,imh2co321,imsio
Beispiel #2
0
import os

red = pl.mpl.colors.LinearSegmentedColormap('red',
                                            {'red':[(0,1,1),(1,1,1)],
                                             'green':[(0,0,0),(1,1,1)],
                                             'blue':[(0,0,0),(1,1,1)]})
green = pl.mpl.colors.LinearSegmentedColormap('green',
                                              {'red':[(0,0,0),(1,1,1)],
                                               'green':[(0,1,1),(1,1,1)],
                                               'blue':[(0,0,0),(1,1,1)]})
blue = pl.mpl.colors.LinearSegmentedColormap('blue', {'red':[(0,0,0),(1,1,1)],
                                                      'green':[(0,0,0),(1,1,1)],
                                                      'blue':[(0,1,1),(1,1,1)]})

if 'yt13co' not in locals():
    cube13co = spectral_cube.SpectralCube.read(paths.mpath('APEX_13CO_2014_merge.fits'))
    yt13co = cube13co.with_mask(cube13co>0.1).to_yt()

mask = cube13co>0.2

if 'cube_h2co303' not in locals():
    cube_sio = SpectralCube.read(paths.molpath('APEX_SiO_54_bl.fits'))
    # HACK:
    mask._wcs = cube_sio.wcs
    ytsio = cube_sio.with_mask(mask).to_yt()
    cube_h2co303 = SpectralCube.read(paths.molpath('APEX_H2CO_303_202_bl.fits'))
    mask._wcs = cube_h2co303.wcs
    yth2co303 = cube_h2co303.with_mask(mask).to_yt()
    cube_h2co321 = SpectralCube.read(paths.molpath('APEX_H2CO_321_220_bl.fits'))
    mask._wcs = cube_h2co321.wcs
    yth2co321 = cube_h2co321.with_mask(mask).to_yt()
Beispiel #3
0
def render_13co(ytcube=yt13co, outdir='yt_renders_13CO',
                size=512, scale=1200., nframes=180,
                movie=True,
                camera_angle=[0, 0, 1],
                north_vector = [1, 0, 0],
                rot_vector1=[1,0,0],
                rot_vector2=[0.5,0.5,0.0],
                rot_vector3=[0.0,0.5,0.5],
               ):

    if not os.path.exists(paths.mpath(outdir)):
        os.makedirs(paths.mpath(outdir))

    tf = yt.ColorTransferFunction([0,30], grey_opacity=True)
    #tf.map_to_colormap(0.1,5,colormap='Reds')
    tf.add_gaussian(2, 1, [1.0, 0.8, 0.0, 1.0])
    tf.add_gaussian(3, 2, [1.0, 0.5, 0.0, 1.0])
    tf.add_gaussian(5, 3, [1.0, 0.0, 0.0, 1.0])
    tf.add_gaussian(10, 5, [1.0, 0.0, 0.0, 0.5])
    tf.map_to_colormap(10, 30, colormap=red, scale=1)


    center = ytcube.dataset.domain_dimensions /2.
    cam = ytcube.dataset.h.camera(center, camera_angle, scale, size, tf,
                      north_vector=north_vector, fields='flux')

    im  = cam.snapshot()

    #images = [im]

    if movie:
        pb = ProgressBar(nframes*2+30)
        for ii,im in enumerate(cam.rotation(2 * np.pi, nframes/3, rot_vector=rot_vector1)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" % (ii))),
                         rescale=False)
            pb.update(ii)
        for jj,im in enumerate(cam.rotation(2 * np.pi, nframes/3, rot_vector=rot_vector2)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" %
                                                  (ii+jj))), rescale=False)
            pb.update(ii+jj)
        for kk,im in enumerate(cam.rotation(2 * np.pi, nframes/3, rot_vector=rot_vector3)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" %
                                                  (ii+jj+kk))), rescale=False)
            pb.update(ii+jj+kk)

        TheBrick = ytcube.world2yt([0.253, 0.016, 35])
        for LL, snapshot in enumerate(cam.move_to(TheBrick, 15)):
            #images.append(snapshot)
            snapshot.write_png(paths.mpath(os.path.join(outdir,'%04i.png' %
                                                        (ii+jj+kk+LL))),
                               rescale=False)
            pb.update(ii+jj+kk+LL)
        for mm, snapshot in enumerate(cam.zoomin(5, 15)):
            #images.append(snapshot)
            snapshot.write_png(paths.mpath(os.path.join(outdir,'%04i.png' %
                                                        (ii+jj+kk+LL+mm))),
                               rescale=False)
            pb.update(ii+jj+kk+LL+mm)
        for nn,im in enumerate(cam.rotation(2*np.pi, nframes/3, rot_vector=rot_vector1)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" % (ii+jj+kk+LL+mm+nn))),
                         rescale=False)
            pb.update(ii+jj+kk+LL+mm+nn)
        for oo,im in enumerate(cam.rotation(2 * np.pi, nframes/3, rot_vector=rot_vector2)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" %
                                                  (ii+jj+kk+LL+mm+nn+oo))), rescale=False)
            pb.update(ii+jj+kk+LL+mm+nn+oo)
        for pp,im in enumerate(cam.rotation(2 * np.pi, nframes/3, rot_vector=rot_vector3)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir,"%04i.png" %
                                                  (ii+jj+kk+LL+mm+nn+oo+pp))), rescale=False)
            pb.update(ii+jj+kk+LL+mm+nn+oo+pp)

        #save_images(images, paths.mpath(outdir))

        pipe = make_movie(paths.mpath(outdir))
        
        return images
    else:
        return im
Beispiel #4
0
from astropy.io import fits
from matplotlib import cm
import aplpy
import paths

# create "coverage" mask map
covgf = fits.open(paths.mpath('APEX_H2CO_merge_high_nhits.fits'))
covgf[0].data = (covgf[0].data > 0.05).astype('int')
covgf.writeto(paths.mpath('coverage_bool.fits'),clobber=True)

F = aplpy.FITSFigure('/Users/adam/Dropbox/SMA_CMZ_FITS_files/gcmosaic_column_conv25.fits',convention='calabretta')
F.show_colorscale(cmap=cm.hot_r,vmax=100,vmin=0, vmid=-2.5, stretch='log')
F.recenter(0.6,-0.1,height=0.5,width=2.6)
F.show_contour(paths.mpath('coverage_bool.fits'),levels=[0.5], colors=['b'], convention='calabretta')
F.set_tick_labels_xformat('d.dd')
F.set_tick_labels_yformat('d.dd')
F.save(paths.fpath('coverage_on_herschel.png'),dpi=150)
F.save(paths.fpath('coverage_on_herschel.pdf'),dpi=150)
F.remove_layer('contour_set_1')
F.show_contour(paths.molpath('APEX_H2CO_303_202_smooth_bl_mask_integ.fits'),
               levels=[5,10,20,50], colors=['b'], convention='calabretta')
F.save(paths.fpath('H2CO_on_herschel.png'),dpi=150)
F.save(paths.fpath('H2CO_on_herschel.pdf'),dpi=150)
F.remove_layer('contour_set_2')
F.show_contour(paths.molpath('APEX_SiO_54_smooth_mask_integ.fits'),
               levels=[2,5,10], colors=['g'], convention='calabretta')
F.save(paths.fpath('SiO_on_herschel.png'),dpi=150)
F.save(paths.fpath('SiO_on_herschel.pdf'),dpi=150)

F.remove_layer('contour_set_3')
F.show_contour(paths.molpath('APEX_13CO_smooth_mask_integ.fits'),
Beispiel #5
0
from astropy.io import fits
from matplotlib import cm
import aplpy
import paths

# create "coverage" mask map
covgf = fits.open(paths.mpath('APEX_H2CO_merge_high_nhits.fits'))
covgf[0].data = (covgf[0].data > 0.05).astype('int')
covgf.writeto(paths.mpath('coverage_bool.fits'), clobber=True)

F = aplpy.FITSFigure(
    '/Users/adam/Dropbox/SMA_CMZ_FITS_files/gcmosaic_column_conv25.fits',
    convention='calabretta')
F.show_colorscale(cmap=cm.hot_r, vmax=100, vmin=0, vmid=-2.5, stretch='log')
F.recenter(0.6, -0.1, height=0.5, width=2.6)
F.show_contour(paths.mpath('coverage_bool.fits'),
               levels=[0.5],
               colors=['b'],
               convention='calabretta')
F.set_tick_labels_xformat('d.dd')
F.set_tick_labels_yformat('d.dd')
F.save(paths.fpath('coverage_on_herschel.png'), dpi=150)
F.save(paths.fpath('coverage_on_herschel.pdf'), dpi=150)
F.remove_layer('contour_set_1')
F.show_contour(paths.molpath('APEX_H2CO_303_202_smooth_bl_mask_integ.fits'),
               levels=[5, 10, 20, 50],
               colors=['b'],
               convention='calabretta')
F.save(paths.fpath('H2CO_on_herschel.png'), dpi=150)
F.save(paths.fpath('H2CO_on_herschel.pdf'), dpi=150)
F.remove_layer('contour_set_2')
Beispiel #6
0
def render_chem(yth2co321=yth2co321,
                yth2co303=yth2co303,
                ytsio=ytsio,
                outdir='yt_renders_chem3',
                size=512,
                scale=1100.,
                nframes=60,
                north_vector=[1, 0, 0],
                rot_vector=[1, 0, 0],
                movie=True,
                camera_angle=[-0.6, 0.4, 0.6]):

    if not os.path.exists(paths.mpath(outdir)):
        os.makedirs(paths.mpath(outdir))

    tf1 = yt.ColorTransferFunction([0.1, 2], grey_opacity=True)
    #tf1.add_gaussian(0.1,0.05, [1,0,0,1])
    #tf1.map_to_colormap(0, 0.5, scale=1, colormap='Reds')
    tf1.add_gaussian(0.25, 0.01, [1, 0, 0, 1])
    tf1.add_step(0.25, 0.5, [1, 0, 0, 1])
    #tf1.add_step(1,2,[1,1,1,1])
    tf1.map_to_colormap(0.5, 2, scale=1, colormap=red)
    tf2 = yt.ColorTransferFunction([0.1, 2], grey_opacity=True)
    #tf2.add_gaussian(0.1,0.05, [0,1,0,1])
    #tf2.map_to_colormap(0, 0.5, scale=1, colormap='Greens')
    tf2.add_gaussian(0.25, 0.01, [0, 1, 0, 1])
    tf2.add_step(0.25, 0.5, [0, 1, 0, 1])
    tf2.map_to_colormap(0.5, 2, scale=1, colormap=green)
    tf3 = yt.ColorTransferFunction([0.1, 2], grey_opacity=True)
    #tf3.add_gaussian(0.1,0.05, [0,0,1,1])
    #tf3.map_to_colormap(0, 0.5, scale=1, colormap='Blues')
    tf3.add_gaussian(0.25, 0.01, [0, 0, 1, 1])
    tf3.add_step(0.25, 0.5, [0, 0, 1, 1])
    tf3.map_to_colormap(0.5, 2, scale=1, colormap=blue)

    center = yth2co303.dataset.domain_dimensions / 2.
    camh2co303 = yth2co303.dataset.h.camera(center,
                                            camera_angle,
                                            scale,
                                            size,
                                            tf3,
                                            north_vector=north_vector,
                                            fields='flux')
    camh2co321 = yth2co321.dataset.h.camera(center,
                                            camera_angle,
                                            scale,
                                            size,
                                            tf2,
                                            north_vector=north_vector,
                                            fields='flux')
    camsio = ytsio.dataset.h.camera(center,
                                    camera_angle,
                                    scale,
                                    size,
                                    tf1,
                                    north_vector=north_vector,
                                    fields='flux')

    imh2co303 = camh2co303.snapshot()
    imh2co321 = camh2co321.snapshot()
    imsio = camsio.snapshot()

    pl.figure(1)
    pl.clf()
    pl.imshow(imh2co303 + imh2co321 + imsio)
    pl.figure(2)
    pl.clf()
    pl.imshow(imh2co303[:, :, :3] + imh2co321[:, :, :3] + imsio[:, :, :3])

    if movie:
        images_h2co303 = [imh2co303]
        images_h2co321 = [imh2co321]
        images_sio = [imsio]

        r1 = camh2co303.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        r2 = camh2co321.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        r3 = camsio.rotation(2 * np.pi, nframes, rot_vector=rot_vector)
        pb = ProgressBar(nframes * 3)
        for (ii, (imh2co303, imh2co321, imsio)) in enumerate(izip(r1, r2, r3)):
            images_h2co303.append(imh2co303)
            images_h2co321.append(imh2co321)
            images_sio.append(imsio)

            imh2co303 = imh2co303.swapaxes(0, 1)
            imh2co303.write_png(paths.mpath(
                os.path.join(outdir, "h2co303_%04i.png" % (ii))),
                                rescale=False)
            pb.update(ii * 3)
            imsio = imsio.swapaxes(0, 1)
            imsio.write_png(paths.mpath(
                os.path.join(outdir, "sio_%04i.png" % (ii))),
                            rescale=False)
            pb.update(ii * 3 + 1)
            imh2co321 = imh2co321.swapaxes(0, 1)
            imh2co321.write_png(paths.mpath(
                os.path.join(outdir, "h2co321_%04i.png" % (ii))),
                                rescale=False)
            pb.update(ii * 3 + 2)

        pb.next()

        save_images([
            i1 + i2 + i3
            for i1, i2, i3 in izip(images_h2co303, images_h2co321, images_sio)
        ], paths.mpath(outdir))

        make_movie(paths.mpath(outdir))

        return images_h2co303, images_h2co321, images_sio
    else:
        return imh2co303, imh2co321, imsio
Beispiel #7
0
from make_apex_cubes import all_lines
from spectral_cube import SpectralCube,BooleanArrayMask
import pyspeckit
from astropy.io import fits
from numpy.lib.stride_tricks import as_strided
from paths import mpath
import numpy as np
import time
from astropy import log
from astropy import constants
from astropy import units as u

cube_merge_high = SpectralCube.read(mpath('APEX_H2CO_merge_high_plait_all.fits'))
noise = fits.getdata(mpath('APEX_H2CO_merge_high_plait_all_noise.fits'))
nhits = fits.getdata(mpath('APEX_H2CO_merge_high_nhits.fits'))
noise[nhits<5] = np.nan
noise_cube = as_strided(noise, shape=cube_merge_high.shape,
                        strides=(0,)+noise.strides)
noise_spcube = SpectralCube(data=noise_cube, wcs=cube_merge_high.wcs)

cube_merge_high_sm = SpectralCube.read(mpath('APEX_H2CO_merge_high_plait_all_smooth.fits'))
noise_sm = fits.getdata(mpath('APEX_H2CO_merge_high_plait_all_smooth_noise.fits'))
noise_cube_sm = as_strided(noise_sm, shape=cube_merge_high_sm.shape,
                           strides=(0,)+noise_sm.strides)
noise_spcube_sm = SpectralCube(data=noise_cube_sm, wcs=cube_merge_high_sm.wcs)

# Create a cutout of the cube covering the H2CO lines
# it's barely worth it; cuts off 10% of pixels
f1 = all_lines['H2CO_303_202']*u.GHz
f2 = all_lines['H2CO_321_220']*u.GHz
h2co_cube_merge_high = cube_merge_high.spectral_slab(f1*(1-(150*u.km/u.s/constants.c)),
             and all_lines[line]*u.GHz < fullcube.spectral_axis.max()/1.0005
            }

    spectra = {line: pyspeckit.Spectrum(data=cube.apply_numpy_function(np.nanmean, axis=(1,2)),
                                        xarr=pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_units='Hz'),
                                        header=cube.wcs.to_header())
               for line,cube in cubes.iteritems()}

    return cubes,spectra

for lh in ('low','high'):
    # reject < 217 GHz
    cube = SpectralCube.read(mpath(ftemplate.format(lh))).spectral_slab(217*u.GHz, 250*u.GHz)
    noisehdu = cube.std(axis=0).hdu
    noisehdr = noisehdu.header
    noise = noisehdu.data
    noiseokmask = np.isfinite(noise)

    xarr = pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_units='Hz')

    spectra = {}
    for region_number,reg in enumerate(regs):
        name = reg.attr[1]['text']
        print name
        if name not in spectra:
import numpy as np
from astropy import units as u
from astropy import constants
from astropy.table import Table
import paths
import pyspeckit
import glob
import matplotlib
matplotlib.use('Qt4Agg')
import os
import pylab as pl

tbl = Table.read(paths.mpath('diffuse_lines_mainonly.ipac'),
                 format='ascii.ipac')
rfreq = tbl['FreqGHz']
rfreq[rfreq.mask] = tbl['MeasFreqGHz'][rfreq.mask]

freq = rfreq * (1-65*u.km/u.s/constants.c)

for fn in glob.glob(paths.spath("*.fits")):
    sp = pyspeckit.Spectrum(fn)
    sp.xarr.convert_to_unit('GHz')
    sp.plotter(figure=pl.figure(1), clear=True)
    sp.plotter.line_ids(tbl['Species'], freq*u.GHz, unit='GHz')
    outname = os.path.splitext(os.path.split(fn)[1])[0]
    sp.plotter.savefig(paths.sppath("{0}.png".format(outname)))


"""
import paths
import pyspeckit
with open(regpath + 'spectral_ncomp.txt') as f:
    pars = eval(f.read())

ftemplate = 'APEX_H2CO_2014_merge_{0}.fits'

# Nice idea, but Splatalogue doesn't know what lines are really there
#line_table = Splatalogue.query_lines(216.9*u.GHz,
#                                     221*u.GHz, top20='top20',
#                                     energy_max=150, energy_type='eu_k',
#                                     line_lists=['SLAIM'])
#names = np.array(['{0}_{1}'.format(a,b) for a,b in zip(line_table['Species'],
#                                                       line_table['Resolved QNs'])])
#lfreq = line_table['Freq-GHz']

for lh in ('low', 'high'):
    cube = SpectralCube.read(mpath(ftemplate.format(lh)))
    noisehdu = cube.std(axis=0).hdu
    noisehdr = noisehdu.header
    noise = noisehdu.data
    noiseokmask = np.isfinite(noise)

    xarr = pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_unit='Hz')

    spectra = {}
    for region_number, reg in enumerate(regs):
        name = reg.attr[1]['text']
        print name
        if name not in spectra:
Beispiel #11
0
from paths import rpath,mpath,opath,fpath
from astropy.io import fits
import pyregion
import numpy as np
from astropy import table
import paths
import matplotlib
matplotlib.rc_file(paths.pcpath('pubfiguresrc'))

noise_img = fits.open(mpath('APEX_H2CO_merge_high_plait_all_noise.fits'))[0]
nhits_img = fits.open(mpath('APEX_H2CO_merge_high_plait_all_nhits.fits'))[0]

map_regions = pyregion.open(rpath('target_fields_8x8.reg'))

nhits = {}
noise = {}

for reg in map_regions:
    regs = pyregion.ShapeList([reg])
    mask = (regs.get_mask(hdu=noise_img) & np.isfinite(noise_img.data) &
            np.isfinite(nhits_img.data))

    name = reg.attr[1]['text'].split()[0]

    noise[name] = {'mean':noise_img.data[mask].mean(),
                   'median':np.median(noise_img.data[mask]),
                   'std':noise_img.data[mask].std()}

    nhits[name] = {'mean':nhits_img.data[mask].mean(),
                   'median':np.median(nhits_img.data[mask]),
                   'std':nhits_img.data[mask].std()}
             and all_lines[line]*u.GHz < fullcube.spectral_axis.max()/1.0005
            }

    spectra = {line: pyspeckit.Spectrum(data=cube.apply_numpy_function(np.nanmean, axis=(1,2)),
                                        xarr=pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_unit='Hz'),
                                        header=cube.wcs.to_header())
               for line,cube in cubes.items()}

    return cubes,spectra

for lh in ('low','high'):
    # reject < 217 GHz
    cube = SpectralCube.read(mpath(ftemplate.format(lh))).spectral_slab(217*u.GHz, 250*u.GHz)
    noisehdu = cube.std(axis=0).hdu
    noisehdr = noisehdu.header
    noise = noisehdu.data
    noiseokmask = np.isfinite(noise)

    xarr = pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_unit='Hz')

    spectra = {}
    for region_number,reg in enumerate(regs):
        name = reg.attr[1]['text']
        print name
        if name not in spectra:
Beispiel #13
0
def fit_a_spectrum(sp,
                   radexfit=False,
                   write=True,
                   vlimits=(-105, 125),
                   pars=pars):
    sp.plotter.autorefresh = False
    sp.plotter(figure=1)
    ncomp = pars[sp.specname]['ncomp']
    if ncomp == 0:
        log.info(
            "Skipping {0} - no velocity components detected.".format(ncomp))
        return
    returns = [ncomp]
    velos = pars[sp.specname]['velo']
    spname = sp.specname.replace(" ", "_")

    width_min = 1

    if 'width_max' in pars[sp.specname]:
        width_max = pars[sp.specname]['width_max']
    elif 'Map' in sp.specname or 'box' in sp.specname:
        width_max = 40
    else:
        width_max = 15

    sp.specfit.Registry.add_fitter('h2co_simple',
                                   simple_fitter2,
                                   6,
                                   multisingle='multi')
    guesses_simple = [
        x for ii in range(ncomp)
        for x in (sp.data.max(), velos[ii], 5, 0.5, 1.0, sp.data.max())
    ]

    if not (min(velos) > vlimits[0] and max(velos) < vlimits[1]):
        log.warn("A velocity guess {0} is outside limits {1}.".format(
            velos, vlimits))
        vlimits = (min(velos) - 25, max(velos) + 25)
        log.warn("Changing limits to {0}".format(vlimits))

    sp.specfit(
        fittype='h2co_simple',
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 20), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1),
                (0, 1e5)],
    )
    sp.baseline(excludefit=True,
                subtract=True,
                highlight_fitregion=True,
                order=1)

    sp.plotter(clear=True)
    sp.specfit(
        fittype='h2co_simple',
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 20), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1),
                (0, 1e5)],
    )

    returns.append(copy.copy(sp.specfit.parinfo))

    err = sp.error.mean()

    sp.plotter()
    sp.specfit.plot_fit(show_components=True)
    sp.specfit.annotate(fontsize=font_sizes[ncomp])
    sp.specfit.plotresiduals(axis=sp.plotter.axis,
                             yoffset=-err * 5,
                             clear=False,
                             color='#444444',
                             label=False)
    sp.plotter.axis.set_ylim(sp.plotter.ymin - err * 5, sp.plotter.ymax)
    sp.plotter.savefig(
        os.path.join(figurepath,
                     "simple/{0}_fit_4_lines_simple.pdf".format(spname)))
    if write:
        sp.write(mpath("spectra/{0}_spectrum.fits".format(spname)))

    # This will mess things up for the radexfit (maybe in a good way) but *cannot*
    # be done after the radexfit
    # Set the spectrum to be the fit residuals.  The linear baseline has
    # already been subtracted from both the data and the residuals
    linear_baseline = sp.baseline.basespec
    sp.baseline.unsubtract()
    fitted_residuals = sp.baseline.spectofit = sp.specfit.residuals
    sp.baseline.includemask[:] = True  # Select ALL residuals
    sp.baseline.fit(spline=True, order=3, spline_sampling=50)
    spline_baseline = sp.baseline.basespec
    sp.data -= spline_baseline + linear_baseline
    sp.baseline.subtracted = True
    sp.error[:] = sp.stats((218.5e9, 218.65e9))['std']
    sp.specfit(
        fittype='h2co_simple',
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 1e5), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1),
                (0, 1e5)],
    )
    sp.plotter()
    sp.plotter.axis.plot(sp.xarr,
                         spline_baseline - err * 5,
                         color='orange',
                         alpha=0.75,
                         zorder=-1,
                         linewidth=2)
    sp.specfit.plot_fit(show_components=True)
    sp.specfit.annotate(fontsize=font_sizes[ncomp])
    sp.plotter.axis.plot(sp.xarr,
                         fitted_residuals - err * 5,
                         color="#444444",
                         linewidth=0.5,
                         drawstyle='steps-mid')
    #sp.specfit.plotresiduals(axis=sp.plotter.axis, yoffset=-err*5, clear=False,
    #                         color='#444444', label=False)
    sp.plotter.axis.set_ylim(sp.plotter.ymin - err * 5, sp.plotter.ymax)
    sp.plotter.savefig(
        os.path.join(
            figurepath,
            "simple/{0}_fit_4_lines_simple_splinebaselined.pdf".format(
                spname)))

    returns.append(copy.copy(sp.specfit.parinfo))

    if write:
        sp.write(mpath("spectra/{0}_spectrum_basesplined.fits".format(spname)))

    if radexfit:
        guesses = [
            x for ii in range(ncomp) for x in
            (100, 14, 4.5, sp.specfit.parinfo['VELOCITY{0}'.format(ii)].value,
             (sp.specfit.parinfo['WIDTH{0}'.format(ii)].value if
              (sp.specfit.parinfo['WIDTH{0}'.format(ii)].value < width_max
               and sp.specfit.parinfo['WIDTH{0}'.format(ii)].value > width_min
               ) else 5))
        ]

        sp.specfit.Registry.add_fitter('h2co_mm_radex',
                                       h2co_radex_fitter,
                                       5,
                                       multisingle='multi')
        sp.specfit(
            fittype='h2co_mm_radex',
            multifit=True,
            guesses=guesses,
            limits=[(10, 300), (11, 15), (3, 5.5), (-105, 125),
                    (width_min, width_max)] * ncomp,
            limited=[(True, True)] * 5 * ncomp,
            fixed=[False, False, False, True, True] * ncomp,
            quiet=False,
        )
        sp.plotter.savefig(
            os.path.join(figurepath,
                         "radex/{0}_fit_h2co_mm_radex.pdf".format(spname)))

        returns.append(copy.copy(sp.specfit.parinfo))

    return returns
def fit_a_spectrum(sp, radexfit=False, write=True, vlimits=(-105, 125), pars=pars):
    sp.plotter.autorefresh = False
    sp.plotter(figure=1)
    ncomp = pars[sp.specname]["ncomp"]
    if ncomp == 0:
        log.info("Skipping {0} - no velocity components detected.".format(ncomp))
        return
    returns = [ncomp]
    velos = pars[sp.specname]["velo"]
    spname = sp.specname.replace(" ", "_")

    width_min = 1

    if "width_max" in pars[sp.specname]:
        width_max = pars[sp.specname]["width_max"]
    elif "Map" in sp.specname or "box" in sp.specname:
        width_max = 40
    else:
        width_max = 15

    sp.specfit.Registry.add_fitter("h2co_simple", simple_fitter2, 6, multisingle="multi")
    guesses_simple = [x for ii in range(ncomp) for x in (sp.data.max(), velos[ii], 5, 0.5, 1.0, sp.data.max())]

    if not (min(velos) > vlimits[0] and max(velos) < vlimits[1]):
        log.warn("A velocity guess {0} is outside limits {1}.".format(velos, vlimits))
        vlimits = (min(velos) - 25, max(velos) + 25)
        log.warn("Changing limits to {0}".format(vlimits))

    sp.specfit(
        fittype="h2co_simple",
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 20), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1), (0, 1e5)],
    )
    sp.baseline(excludefit=True, subtract=True, highlight_fitregion=True, order=1)

    sp.plotter(clear=True)
    sp.specfit(
        fittype="h2co_simple",
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 20), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1), (0, 1e5)],
    )

    returns.append(copy.copy(sp.specfit.parinfo))

    err = sp.error.mean()

    sp.plotter()
    sp.specfit.plot_fit(show_components=True)
    sp.specfit.annotate(fontsize=font_sizes[ncomp])
    sp.specfit.plotresiduals(axis=sp.plotter.axis, yoffset=-err * 5, clear=False, color="#444444", label=False)
    sp.plotter.axis.set_ylim(sp.plotter.ymin - err * 5, sp.plotter.ymax)
    sp.plotter.savefig(os.path.join(figurepath, "simple/{0}_fit_4_lines_simple.pdf".format(spname)))
    if write:
        sp.write(mpath("spectra/{0}_spectrum.fits".format(spname)))

    # This will mess things up for the radexfit (maybe in a good way) but *cannot*
    # be done after the radexfit
    # Set the spectrum to be the fit residuals.  The linear baseline has
    # already been subtracted from both the data and the residuals
    linear_baseline = sp.baseline.basespec
    sp.baseline.unsubtract()
    fitted_residuals = sp.baseline.spectofit = sp.specfit.residuals
    sp.baseline.includemask[:] = True  # Select ALL residuals
    sp.baseline.fit(spline=True, order=3, spline_sampling=50)
    spline_baseline = sp.baseline.basespec
    sp.data -= spline_baseline + linear_baseline
    sp.baseline.subtracted = True
    sp.error[:] = sp.stats((218.5e9, 218.65e9))["std"]
    sp.specfit(
        fittype="h2co_simple",
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * 6,
        limits=[(0, 1e5), vlimits, (width_min, width_max), (0, 1), (0.3, 1.1), (0, 1e5)],
    )
    sp.plotter()
    sp.plotter.axis.plot(sp.xarr, spline_baseline - err * 5, color="orange", alpha=0.75, zorder=-1, linewidth=2)
    sp.specfit.plot_fit(show_components=True)
    sp.specfit.annotate(fontsize=font_sizes[ncomp])
    sp.plotter.axis.plot(sp.xarr, fitted_residuals - err * 5, color="#444444", linewidth=0.5, drawstyle="steps-mid")
    # sp.specfit.plotresiduals(axis=sp.plotter.axis, yoffset=-err*5, clear=False,
    #                         color='#444444', label=False)
    sp.plotter.axis.set_ylim(sp.plotter.ymin - err * 5, sp.plotter.ymax)
    sp.plotter.savefig(os.path.join(figurepath, "simple/{0}_fit_4_lines_simple_splinebaselined.pdf".format(spname)))

    returns.append(copy.copy(sp.specfit.parinfo))

    if write:
        sp.write(mpath("spectra/{0}_spectrum_basesplined.fits".format(spname)))

    if radexfit:
        guesses = [
            x
            for ii in range(ncomp)
            for x in (
                100,
                14,
                4.5,
                sp.specfit.parinfo["VELOCITY{0}".format(ii)].value,
                (
                    sp.specfit.parinfo["WIDTH{0}".format(ii)].value
                    if (
                        sp.specfit.parinfo["WIDTH{0}".format(ii)].value < width_max
                        and sp.specfit.parinfo["WIDTH{0}".format(ii)].value > width_min
                    )
                    else 5
                ),
            )
        ]

        sp.specfit.Registry.add_fitter("h2co_mm_radex", h2co_radex_fitter, 5, multisingle="multi")
        sp.specfit(
            fittype="h2co_mm_radex",
            multifit=True,
            guesses=guesses,
            limits=[(10, 300), (11, 15), (3, 5.5), (-105, 125), (width_min, width_max)] * ncomp,
            limited=[(True, True)] * 5 * ncomp,
            fixed=[False, False, False, True, True] * ncomp,
            quiet=False,
        )
        sp.plotter.savefig(os.path.join(figurepath, "radex/{0}_fit_h2co_mm_radex.pdf".format(spname)))

        returns.append(copy.copy(sp.specfit.parinfo))

    return returns
Beispiel #15
0
green = pl.mpl.colors.LinearSegmentedColormap(
    'green', {
        'red': [(0, 0, 0), (1, 1, 1)],
        'green': [(0, 1, 1), (1, 1, 1)],
        'blue': [(0, 0, 0), (1, 1, 1)]
    })
blue = pl.mpl.colors.LinearSegmentedColormap(
    'blue', {
        'red': [(0, 0, 0), (1, 1, 1)],
        'green': [(0, 0, 0), (1, 1, 1)],
        'blue': [(0, 1, 1), (1, 1, 1)]
    })

if 'yt13co' not in locals():
    cube13co = spectral_cube.SpectralCube.read(
        paths.mpath('APEX_13CO_2014_merge.fits'))
    yt13co = cube13co.with_mask(cube13co > 0.1).to_yt()

mask = cube13co > 0.2

if 'cube_h2co303' not in locals():
    cube_sio = SpectralCube.read(paths.molpath('APEX_SiO_54_bl.fits'))
    # HACK:
    mask._wcs = cube_sio.wcs
    ytsio = cube_sio.with_mask(mask).to_yt()
    cube_h2co303 = SpectralCube.read(
        paths.molpath('APEX_H2CO_303_202_bl.fits'))
    mask._wcs = cube_h2co303.wcs
    yth2co303 = cube_h2co303.with_mask(mask).to_yt()
    cube_h2co321 = SpectralCube.read(
        paths.molpath('APEX_H2CO_321_220_bl.fits'))
                                       "pv_H2CO_321220_to_303202_bl_integ_masked_weighted_temperature_dens3e4.fits",
                                       "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e4.fits",
                                       "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e4_abund1e-10.fits",
                                       "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e4_abund1e-8.fits",
                                       "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e5.fits",
                                       "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens3e4.fits",
                                      )
                   ]
cubes = [hpath(x)
         for x in ("H2CO_321220_to_303202_cube_bl.fits",
                   "H2CO_321220_to_303202_cube_smooth_bl.fits",
                   "APEX_H2CO_303_202_bl.fits",
                   "APEX_H2CO_321_220_bl.fits",
                   "APEX_H2CO_322_221_bl.fits",
                  )
        ] + [mpath(x)
             for x in ("APEX_13CO_2014_merge.fits",
                       "APEX_C18O_2014_merge.fits",
                       "APEX_H2CO_merge_high_plait_all.fits",
                      )
        ] + [molpath(x)
             for x in
             ("APEX_SiO_54_bl.fits",)
        ]


dendrograms = [hpath(x) for x in
               ("DendroMask_H2CO303202.hdf5",)
              ] + [tpath(x) for x in
                   ("fitted_line_parameters_Chi2Constraints.ipac",
                    "PPV_H2CO_Temperature.ipac",
Beispiel #17
0
def render_13co(
    ytcube=yt13co,
    outdir='yt_renders_13CO',
    size=512,
    scale=1200.,
    nframes=180,
    movie=True,
    camera_angle=[0, 0, 1],
    north_vector=[1, 0, 0],
    rot_vector1=[1, 0, 0],
    rot_vector2=[0.5, 0.5, 0.0],
    rot_vector3=[0.0, 0.5, 0.5],
):

    if not os.path.exists(paths.mpath(outdir)):
        os.makedirs(paths.mpath(outdir))

    tf = yt.ColorTransferFunction([0, 30], grey_opacity=True)
    #tf.map_to_colormap(0.1,5,colormap='Reds')
    tf.add_gaussian(2, 1, [1.0, 0.8, 0.0, 1.0])
    tf.add_gaussian(3, 2, [1.0, 0.5, 0.0, 1.0])
    tf.add_gaussian(5, 3, [1.0, 0.0, 0.0, 1.0])
    tf.add_gaussian(10, 5, [1.0, 0.0, 0.0, 0.5])
    tf.map_to_colormap(10, 30, colormap=red, scale=1)

    center = ytcube.dataset.domain_dimensions / 2.
    cam = ytcube.dataset.h.camera(center,
                                  camera_angle,
                                  scale,
                                  size,
                                  tf,
                                  north_vector=north_vector,
                                  fields='flux')

    im = cam.snapshot()

    #images = [im]

    if movie:
        pb = ProgressBar(nframes * 2 + 30)
        for ii, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector1)):
            #images.append(im)
            im.write_png(paths.mpath(os.path.join(outdir, "%04i.png" % (ii))),
                         rescale=False)
            pb.update(ii)
        for jj, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector2)):
            #images.append(im)
            im.write_png(paths.mpath(
                os.path.join(outdir, "%04i.png" % (ii + jj))),
                         rescale=False)
            pb.update(ii + jj)
        for kk, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector3)):
            #images.append(im)
            im.write_png(paths.mpath(
                os.path.join(outdir, "%04i.png" % (ii + jj + kk))),
                         rescale=False)
            pb.update(ii + jj + kk)

        TheBrick = ytcube.world2yt([0.253, 0.016, 35])
        for LL, snapshot in enumerate(cam.move_to(TheBrick, 15)):
            #images.append(snapshot)
            snapshot.write_png(paths.mpath(
                os.path.join(outdir, '%04i.png' % (ii + jj + kk + LL))),
                               rescale=False)
            pb.update(ii + jj + kk + LL)
        for mm, snapshot in enumerate(cam.zoomin(5, 15)):
            #images.append(snapshot)
            snapshot.write_png(paths.mpath(
                os.path.join(outdir, '%04i.png' % (ii + jj + kk + LL + mm))),
                               rescale=False)
            pb.update(ii + jj + kk + LL + mm)
        for nn, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector1)):
            #images.append(im)
            im.write_png(paths.mpath(
                os.path.join(outdir,
                             "%04i.png" % (ii + jj + kk + LL + mm + nn))),
                         rescale=False)
            pb.update(ii + jj + kk + LL + mm + nn)
        for oo, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector2)):
            #images.append(im)
            im.write_png(paths.mpath(
                os.path.join(outdir,
                             "%04i.png" % (ii + jj + kk + LL + mm + nn + oo))),
                         rescale=False)
            pb.update(ii + jj + kk + LL + mm + nn + oo)
        for pp, im in enumerate(
                cam.rotation(2 * np.pi, nframes / 3, rot_vector=rot_vector3)):
            #images.append(im)
            im.write_png(paths.mpath(
                os.path.join(
                    outdir,
                    "%04i.png" % (ii + jj + kk + LL + mm + nn + oo + pp))),
                         rescale=False)
            pb.update(ii + jj + kk + LL + mm + nn + oo + pp)

        #save_images(images, paths.mpath(outdir))

        pipe = make_movie(paths.mpath(outdir))

        return images
    else:
        return im
Beispiel #18
0
from masked_cubes import (cube303, cube303sm, cube303m, cube321m, cube303msm,
                          cube321msm, cube321, cube321sm)
from spectral_cube import SpectralCube, BooleanArrayMask
from astropy.io import fits
from numpy.lib.stride_tricks import as_strided
from paths import mpath
import numpy as np
import time
from astropy import log

t0 = time.time()

noise_fn = mpath('APEX_H2CO_merge_high_plait_all_noise.fits')

noise = fits.getdata(noise_fn)
nhits = fits.getdata(mpath('APEX_H2CO_merge_high_nhits.fits'))
noise[nhits < 20] = np.nan
noise_cube = as_strided(noise,
                        shape=cube303m.shape,
                        strides=(0, ) + noise.strides)
noisehdr = fits.getheader(noise_fn)

sm_noise = fits.getdata(
    mpath('APEX_H2CO_merge_high_plait_all_smooth_noise.fits'))
sm_noise[nhits < 20] = np.nan
sm_noise_cube = as_strided(sm_noise,
                           shape=cube303msm.shape,
                           strides=(0, ) + sm_noise.strides)

# Cubes masked with noise cube == OK
# (can I make this lazier?)
with open(regpath+'spectral_ncomp.txt') as f:
    pars = eval(f.read())

ftemplate =  'APEX_H2CO_2014_merge_{0}.fits'

# Nice idea, but Splatalogue doesn't know what lines are really there
#line_table = Splatalogue.query_lines(216.9*u.GHz,
#                                     221*u.GHz, top20='top20',
#                                     energy_max=150, energy_type='eu_k',
#                                     line_lists=['SLAIM'])
#names = np.array(['{0}_{1}'.format(a,b) for a,b in zip(line_table['Species'],
#                                                       line_table['Resolved QNs'])])
#lfreq = line_table['Freq-GHz']

for lh in ('low','high'):
    cube = SpectralCube.read(mpath(ftemplate.format(lh)))
    noisehdu = cube.std(axis=0).hdu
    noisehdr = noisehdu.header
    noise = noisehdu.data
    noiseokmask = np.isfinite(noise)

    xarr = pyspeckit.units.SpectroscopicAxis(cube.spectral_axis.value,
                                             unit=str(cube.spectral_axis.unit),
                                             refX=cube.wcs.wcs.restfrq,
                                             refX_units='Hz')

    spectra = {}
    for region_number,reg in enumerate(regs):
        name = reg.attr[1]['text']
        print name
        if name not in spectra:
Beispiel #20
0
from masked_cubes import (cube303, cube303sm, cube303m, cube321m, cube303msm,
                          cube321msm, cube321, cube321sm)
from spectral_cube import SpectralCube,BooleanArrayMask
from astropy.io import fits
from numpy.lib.stride_tricks import as_strided
from paths import mpath
import numpy as np
import time
from astropy import log

t0 = time.time()

noise_fn = mpath('APEX_H2CO_merge_high_plait_all_noise.fits')

noise = fits.getdata(noise_fn)
nhits = fits.getdata(mpath('APEX_H2CO_merge_high_nhits.fits'))
noise[nhits<20] = np.nan
noise_cube = as_strided(noise, shape=cube303m.shape, strides=(0,)+noise.strides)
noisehdr = fits.getheader(noise_fn)

sm_noise = fits.getdata(mpath('APEX_H2CO_merge_high_plait_all_smooth_noise.fits'))
sm_noise[nhits<20] = np.nan
sm_noise_cube = as_strided(sm_noise, shape=cube303msm.shape,
                           strides=(0,)+sm_noise.strides)

# Cubes masked with noise cube == OK
# (can I make this lazier?)
noisefinite = np.isfinite(noise) # stride length changes for bools?
sm_noisefinite = np.isfinite(sm_noise)
cube303nm = cube303.with_mask(BooleanArrayMask(as_strided(noisefinite,
                                                          shape=cube303.shape,
Beispiel #21
0
        "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e4_abund1e-10.fits",
        "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e4_abund1e-8.fits",
        "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens1e5.fits",
        "pv_H2CO_321220_to_303202_bl_integ_weighted_temperature_dens3e4.fits",
    )
]
cubes = [
    hpath(x) for x in (
        "H2CO_321220_to_303202_cube_bl.fits",
        "H2CO_321220_to_303202_cube_smooth_bl.fits",
        "APEX_H2CO_303_202_bl.fits",
        "APEX_H2CO_321_220_bl.fits",
        "APEX_H2CO_322_221_bl.fits",
    )
] + [
    mpath(x) for x in (
        "APEX_13CO_2014_merge.fits",
        "APEX_C18O_2014_merge.fits",
        "APEX_H2CO_merge_high_plait_all.fits",
    )
] + [molpath(x) for x in ("APEX_SiO_54_bl.fits", )]

dendrograms = [hpath(x) for x in ("DendroMask_H2CO303202.hdf5", )] + [
    tpath(x) for x in (
        "fitted_line_parameters_Chi2Constraints.ipac",
        "PPV_H2CO_Temperature.ipac",
    )
]

if not os.path.isdir('cds'):
    os.mkdir('cds')
import numpy as np
from astropy import units as u
from astropy import constants
from astropy.table import Table
import paths
import pyspeckit
import glob
import matplotlib
matplotlib.use('Qt4Agg')
import os
import pylab as pl

tbl = Table.read(paths.mpath('diffuse_lines_mainonly.ipac'),
                 format='ascii.ipac')
rfreq = tbl['FreqGHz']
rfreq[rfreq.mask] = tbl['MeasFreqGHz'][rfreq.mask]

freq = rfreq * (1 - 65 * u.km / u.s / constants.c)

for fn in glob.glob(paths.spath("*.fits")):
    sp = pyspeckit.Spectrum(fn)
    sp.xarr.convert_to_unit('GHz')
    sp.plotter(figure=pl.figure(1), clear=True)
    sp.plotter.line_ids(tbl['Species'], freq * u.GHz, unit='GHz')
    outname = os.path.splitext(os.path.split(fn)[1])[0]
    sp.plotter.savefig(paths.sppath("{0}.png".format(outname)))
"""
import paths
import pyspeckit
import numpy as np
import glob