if subcube.shape[0] < 5: log.warn( "Skipping line {0} in {1} because it's empty". format(linename, fn)) continue log.info( "Beginning extraction of path with width {0} for {1}" .format(extraction_path.width, outfn)) extracted = pvextractor.extract_pv_slice( subcube, extraction_path) log.info("Writing to {0}".format(outfn)) extracted.writeto(outfn, overwrite=True) origin = offset_to_point(source.ra.deg, source.dec.deg, extraction_path) * u.deg ww = wcs.WCS(extracted.header) ww.wcs.cdelt[1] /= 1000.0 ww.wcs.crval[1] /= 1000.0 ww.wcs.cunit[1] = u.km / u.s ww.wcs.cdelt[0] *= 3600 ww.wcs.cunit[0] = u.arcsec ww.wcs.crval[0] = -origin.to(u.arcsec).value # #!@#$!@#$@!%@#${^(@#$)%#$( ww.wcs.set() if ww.wcs.cunit[1] == 'm/s': scalefactor = 1000.0 else:
0)[0]*u.arcsec trans = ax.get_transform('world') length = (1000*u.au / (5400*u.pc)).to(u.deg, u.dimensionless_angles()) endpoints_x = u.Quantity([0.5*u.arcsec, 0.5*u.arcsec+length]) + leftmost_position ax.plot(endpoints_x.to(u.arcsec), [vrange[0]+5]*2*u.km/u.s, 'w', transform=trans, zorder=100, linewidth=2) ax.text(endpoints_x.mean().value, (vrange[0]+6), "1000 au", color='w', transform=trans, ha='center') origin = offset_to_point(source.ra.deg, source.dec.deg, extraction_path)*u.deg ax.vlines(origin.to(u.arcsec).value, vrange[0]-5, vrange[1]+5, color='w', linestyle='--', linewidth=2.0, alpha=0.6, transform=trans) ax.set_ylim(ww.wcs_world2pix(0,vrange[0],0)[1], ww.wcs_world2pix(0,vrange[1],0)[1]) ax.set_xlim(good_limits) fig.savefig(paths.fpath('lbpv/{0}/{0}_{1}_{2}_lbpv.png' .format(name, basename, direction)), bbox_inches='tight')
length = (1000 * u.au / (5400 * u.pc)).to(u.deg, u.dimensionless_angles()) endpoints_x = u.Quantity([0.5 * u.arcsec, 0.5 * u.arcsec + length ]) + leftmost_position ax.plot(endpoints_x.to(u.arcsec), [vrange[0] + 5] * 2 * u.km / u.s, 'w', transform=trans, zorder=100, linewidth=2) ax.text(endpoints_x.mean().value, (vrange[0] + 6), "1000 au", color='w', transform=trans, ha='center') origin = offset_to_point(source.ra.deg, source.dec.deg, extraction_path) * u.deg ax.vlines(origin.to(u.arcsec).value, vrange[0] - 5, vrange[1] + 5, color='w', linestyle='--', linewidth=2.0, alpha=0.6, transform=trans) ax.set_ylim( ww.wcs_world2pix(0, vrange[0], 0)[1], ww.wcs_world2pix(0, vrange[1], 0)[1]) ax.set_xlim(good_limits)
cube = SpectralCube.read(paths.dpath(fn)) cube = cube.with_spectral_unit(u.km / u.s, velocity_convention='radio') cube = cube.spectral_slab(-200 * u.km / u.s, 200 * u.km / u.s) outname = os.path.split('{0}_{1}.{{extension}}'.format(fn[:-5], source))[-1] outpath_pv = paths.dpath('pv/' + outname.format(extension='fits')) if not os.path.exists(outpath_pv): pv = extract_pv_slice(cube.hdu, pars['path']) #pv.data -= np.nanmin(pv.data) - 1e-3 pv.writeto(outpath_pv, clobber=True) else: pv = fits.open(outpath_pv)[0] origin = offset_to_point(pars['origin'].ra.deg, pars['origin'].dec.deg, pars['path']) fig = pl.figure(ii) fig.clf() FF = aplpy.FITSFigure(pv, figure=fig) FF.show_grayscale(aspect='auto', invert=True, stretch=stretch, vmin=vmin, vmax=vmax) FF.show_lines([ np.array([[origin, origin], [ pars['cv'] - pars['wv'] / 2., pars['cv'] + pars['wv'] / 2., ]])