예제 #1
0
                        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')

예제 #3
0
            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.,
                  ]])