Exemplo n.º 1
0
def plot_frb_localization(ifrb, wcs, scale=1.):
    # FRB localization
    theta = ifrb.eellipse['theta']
    aper = SkyEllipticalAperture(positions=ifrb.coord,
                                 a=scale * ifrb.sig_a * units.arcsecond,
                                 b=scale * ifrb.sig_b * units.arcsecond,
                                 theta=theta * units.deg)
    apermap = aper.to_pixel(wcs)
    return apermap
Exemplo n.º 2
0
def plot_ellipse_spetial_points(dic_bb,
                                angle,
                                box,
                                wcs,
                                bb,
                                chan,
                                ax=None,
                                **kwargs):
    """
    Plot the ellipse from the fit results and draws the position of x_phi180
    and x_phi0, which intersects the ellipse with the PV line
    """
    for kwarg in mf.default_params:
        kwargs[kwarg] = kwargs[kwarg] if kwarg in kwargs \
           else mf.default_params[kwarg]

    vla4b_sky = SkyCoord(*mf.default_params['vla4b_deg'], unit='deg')
    #    vla4b_pixel = skycoord_to_pixel(vla4b_sky, wcs)

    xys_sky = generate_pv_line_coordinates(angle, box, wcs,
                                           kwargs['n_points_PV'])

    if ax is None:
        plt.figure(figsize=(8, 8))
        ax = plt.subplot(projection=wcs)
    else:
        pass

    ax.plot(vla4b_sky.ra.deg,
            vla4b_sky.dec.deg,
            '*',
            transform=ax.get_transform('world'))

    #   Plots the PV diagram
    xs_sky = np.array([xy.ra.deg for xy in xys_sky])
    ys_sky = np.array([xy.dec.deg for xy in xys_sky])
    ax.plot(
        xs_sky,
        ys_sky,
        transform=ax.get_transform('world'),
    )

    #   Plots the special points
    for p in [
            dic_bb[bb]['data']['p180_sky'][chan],
            dic_bb[bb]['data']['p0_sky'][chan]
    ]:
        ax.plot(p.ra.value,
                p.dec.value,
                '+g',
                zorder=3,
                transform=ax.get_transform('world'))

#   Plots the point of the ellipse
    for point in dic_bb[bb]['ellipse_sky'][chan]:
        ax.plot(point.ra.value,
                point.dec.value,
                '.w',
                transform=ax.get_transform('world'))


#   Plots a line of the elliptical fit
    positions_deg = SkyCoord(ra=dic_bb[bb]['data']['x0_RA'][chan] * u.deg,
                             dec=dic_bb[bb]['data']['y0_DEC'][chan] * u.deg)
    a_deg = dic_bb[bb]['data']['sma_deg'][chan] * u.deg

    b_deg = dic_bb[bb]['data']['sma_deg'][chan] \
        * (1. - dic_bb[bb]['data']['eps'][chan]) * u.deg
    pa_deg = (dic_bb[bb]['data']['pa'][chan] -
              np.pi / 2.) * 180 / np.pi * u.deg
    aper = SkyEllipticalAperture(positions_deg, a_deg, b_deg, pa_deg)
    aper2plot = aper.to_pixel(wcs)
    aper2plot.plot(ax, color='b', alpha=0.5)

    ax.set_aspect("equal")
Exemplo n.º 3
0
mask2 = np.isnan(data_mom0)
mask = np.ma.mask_or(mask1, mask2)
data_masked = np.ma.masked_where(mask, y)

a = 1.5
incl = 0.45
b = 1.5 * incl
PA = 110
ra = 204.97066052
dec = 50.406569999999995
position = SkyCoord(dec=dec * u.arcmin, ra=ra * u.degree, frame='icrs')
core_sky = SkyEllipticalAperture(position,
                                 a=a * u.arcsec,
                                 b=b * u.arcsec,
                                 theta=PA * u.degree)
core_pix = core_sky.to_pixel(wcs=wcs)
core_mask = Apmask_convert(core_pix, data_masked)
core_masked = np.ma.masked_where(core_mask, y)
disk_masked = np.ma.masked_where(~core_mask, y)

# ## plot the scattering plot
# x=sd
# fig=plt.figure()
# ax=plt.axes(xscale='log',yscale='log')
# plt.plot(x.flatten(),y.flatten(),'.',color='red',label='disk')
# plt.plot(x.flatten(),core_masked.flatten(),'.',color='blue',label='core')
# # plt.ylim(top=300,bottom=8)
# # plt.xlim(left=40)
# plt.ylabel('velocity dispersion (km/s)')
# plt.xlabel('surface density (solar mass/pc**2)')
# plt.title('conversion factor 4.3')
Exemplo n.º 4
0
def plot_friends(friendid, friend_cat, cutout, k=3.5, ax=None, label=True):
    """
    Plot a friends group from the fof_kdtree clustering output.
    Adapted from Niv Drory's original code
    
    Parameters
    ----------
    friends: int
        unique group identifier
    friend_cat:
        the combined group+detections catalog
    ax
        optional axis object to project coords onto
    
    """
    im = cutout["cutout"].data
    wcs = cutout["cutout"].wcs

    if ax is None:
        ax = fig.add_subplot(111, project=wcs)

    im_zscale = ZScaleInterval(contrast=0.5, krej=2.5)
    im_vmin, im_vmax = im_zscale.get_limits(values=cutout["cutout"].data)

    plt.imshow(
        cutout["cutout"].data,
        vmin=im_vmin,
        vmax=im_vmax,
        origin="lower",
        cmap=plt.get_cmap("gray"),
        interpolation="none",
    )

    sel = friend_cat["friendid"] == friendid
    group = friend_cat[sel]

    coords = SkyCoord(ra=group["icx"][0] * u.deg, dec=group["icy"][0] * u.deg)

    # get ellipse parameters in degrees
    a, b, pa, a2, b2, pa2 = (
        group["a"][0],
        group["b"][0],
        group["pa"][0],
        group["a2"][0],
        group["b2"][0],
        group["pa2"][0],
    )

    # plot detections for group
    plt.scatter(
        group["ra"],
        group["dec"],
        transform=ax.get_transform("fk5"),
        marker="x",
        color="orange",
        linewidth=1,
        s=group["flux"],
    )

    # plot and elliptical kron-like aperture representing the group
    # theta is measured
    aper_group = SkyEllipticalAperture(
        coords, a * u.deg, b * u.deg, theta=(90 - pa) * u.deg
    )
    aper_group_k = SkyEllipticalAperture(
        coords, k * a * u.deg, k * b * u.deg, theta=(90 - pa) * u.deg
    )
    aper_group.to_pixel(wcs).plot(color="blue")
    aper_group_k.to_pixel(wcs).plot(color="red")

    if label:
        # plot detecid labels
        for row in group:
            plt.text(
                row["ra"],
                row["dec"],
                str(row["detectid"]),
                transform=ax.get_transform("world"),
                fontsize=9,
                color="red",
            )
Exemplo n.º 5
0
center_sky = SkyCircularAperture(position, r=3 * u.arcsec)
center_pix = center_sky.to_pixel(wcs=wcs)
apertures['center'] = center_pix

ring_sky = SkyCircularAnnulus(position, r_in=3 * u.arcsec, r_out=7 * u.arcsec)
ring_pix = ring_sky.to_pixel(wcs=wcs)
apertures['ring'] = ring_pix

position = SkyCoord(dec=0.8340 * u.degree,
                    ra=204.9935 * u.degree,
                    frame='icrs')
northarm_sky = SkyEllipticalAperture(position,
                                     a=13 * u.arcsec,
                                     b=4 * u.arcsec,
                                     theta=185 * u.degree)
northarm_pix = northarm_sky.to_pixel(wcs=wcs)
apertures['northarm'] = northarm_pix

position = SkyCoord(dec=0.8283 * u.degree,
                    ra=204.9882 * u.degree,
                    frame='icrs')
southarm_sky = SkyEllipticalAperture(position,
                                     a=9 * u.arcsec,
                                     b=4 * u.arcsec,
                                     theta=360 * u.degree)
southarm_pix = southarm_sky.to_pixel(wcs=wcs)
apertures['southarm'] = southarm_pix

# measure the flux
rms_12CO10 = 0.00158
chan_width = 10
Exemplo n.º 6
0
############################################################
# main program

Image=imageDir+'NGC5258_12CO10_combine_contsub_mom0.fits'
wcs_cut=fits_import(Image)[0]
data_cut=fits_import(Image)[1]
shape=data_cut.shape
flux=np.empty(shape=(0,0))
counts=np.empty(shape=(0,0))
uncertainties=np.empty(shape=(0,0))

# draw the center of the image
a=radius_arcsec[0]
b=radius_arcsec[0]*incl
center_sky=SkyEllipticalAperture(position,a=a*u.arcsec,b=b*u.arcsec,theta=PA*u.degree)
center_pix=center_sky.to_pixel(wcs=wcs_cut)
center_mask=Apmask_convert(center_pix,data_cut)

# draw the ring of the image
for i in range(int(steps-1)):
    rings[i]=aperture_ring(radius_arcsec[i+1],wcs_cut)
    rings_mask[i]=Apmask_convert(rings[i],data_cut)

fig=plt.figure()
ax=plt.subplot(projection=wcs_cut)
ax.imshow(data_cut,origin='lower')
# center_pix.plot(color='red')
# for i in range(size):
#     rings[i].plot(color='red')
# plt.show() 
rings[3].plot(color='red')
Exemplo n.º 7
0
### moment 0 plot
fitsimage = mom0file
wcs = fits_import(fitsimage)[0]
mom0 = fits_import(fitsimage)[1]

size = u.Quantity((54, 42), u.arcsec)
wcs_cut = cut_2d(mom0, position, size, wcs)[0]
mom0_cut = cut_2d(mom0, position, size, wcs)[1]

# plot the beam size
beamellipse = SkyEllipticalAperture(positions=beamposition,
                                    a=beammajor,
                                    b=beamminor,
                                    theta=pa)
beamellipse_pix = beamellipse.to_pixel(wcs_cut)

try:
    gama
except:
    gama = 1.0

fig = plt.figure()
ax = plt.subplot('111', projection=wcs_cut)

x, y = wcs_cut.wcs_world2pix(testra, testdec, 1)
props = dict(facecolor='white', alpha=0.5, edgecolor='None')
plt.text(x, y, galaxy + ' ' + linelabel, fontsize=15, bbox=props)

ax.tick_params(labelsize=8, direction='in')
Exemplo n.º 8
0
imageDir = Dir + 'casa5.4/'
regionDir = Dir + 'region/'

fitsimage = imageDir + 'NGC5257_12CO10_combine_contsub_pbcor_mom0.fits'
wcs = fits_import(fitsimage)[0]
data_masked = fits_import(fitsimage)[1]
data = data_masked.data

major = 0.5 / 0.48 * u.arcsec
minor = major * incl

centersky = SkyEllipticalAperture(positions=position,
                                  a=major,
                                  b=minor,
                                  theta=PA)
centerpix = centersky.to_pixel(wcs)

masked = Apmask_convert(centerpix, data)
intensity_center = np.ma.mean(masked) * incl

regionfile = regionDir + 'detection.reg'
whole = read_ds9(regionfile)[0]
whole_pix = whole.to_pixel(wcs)


def Apmask_convert(aperture, data_cut):
    apmask = aperture.to_mask()
    shape = data_cut.shape
    mask = apmask.to_image(shape=((shape[0], shape[1])))
    ap_mask = mask == 0
    ap_masked = np.ma.masked_where(ap_mask, data_cut)
Exemplo n.º 9
0
def sub_image(fig, hdu, FRB, img_center=None,
              imsize=30*units.arcsec, vmnx = (None,None),
              xyaxis=(0.15, 0.15, 0.8, 0.8), fsz=15.,
              tick_spacing=None, invert=False,
              cmap='Blues', frb_clr='red'):
    """

    Args:
        fig:
        hdu:
        FRB:
        img_center:
        imsize:
        vmnx:
        xyaxis:
        fsz:
        tick_spacing:
        invert:
        cmap:
        cclr:

    Returns:

    """
    if isinstance(hdu, fits.HDUList):
        hdu = hdu[0]

    header = hdu.header
    hst_uvis = hdu.data

    size = units.Quantity((imsize, imsize), units.arcsec)
    if img_center is None:
        img_center = FRB.coord

    cutout = Cutout2D(hst_uvis, img_center, size, wcs=WCS(header))

    axIMG = fig.add_axes(xyaxis, projection=cutout.wcs)

    lon = axIMG.coords[0]
    lat = axIMG.coords[1]
    #lon.set_ticks(exclude_overlapping=True)
    lon.set_major_formatter('hh:mm:ss.s')
    if tick_spacing is not None:
        lon.set_ticks(spacing=tick_spacing)
        lat.set_ticks(spacing=tick_spacing)
    lon.display_minor_ticks(True)
    lat.display_minor_ticks(True)
    #
    blues = plt.get_cmap(cmap)
    d = axIMG.imshow(cutout.data, cmap=blues, vmin=vmnx[0], vmax=vmnx[1])
    plt.grid(color='gray', ls='dashed')
    axIMG.set_xlabel(r'\textbf{Right Ascension (J2000)}', fontsize=fsz)
    axIMG.set_ylabel(r'\textbf{Declination (J2000)}', fontsize=fsz, labelpad=-1.)
    if invert:
        axIMG.invert_xaxis()

    #c = SphericalCircle((FRB.coord.ra, FRB.coord.dec),
    #                    FRB.eellipse['a']*units.arcsec, transform=axIMG.get_transform('icrs'),
    #                    edgecolor=cclr, facecolor='none')
    aper = SkyEllipticalAperture(positions=FRB.coord,
                                 a=FRB.sig_a * units.arcsecond,
                                 b=FRB.sig_b * units.arcsecond,
                                 theta=FRB.eellipse['theta'] * units.deg)
    apermap = aper.to_pixel(cutout.wcs)
    apermap.plot(color=frb_clr, lw=2, ls='dashed')

    '''
    ylbl = 0.05
    axHST.text(0.05, ylbl, r'\textbf{HST/UVIS}', transform=axIMG.transAxes,
               fontsize=isz, ha='left', color='black')
    '''
    utils.set_fontsize(axIMG, 15.)

    return cutout, axIMG
Exemplo n.º 10
0
# #### compare with moment 2 map.
seperation = data3['RAD(arcs)'][1] - data3['RAD(arcs)'][0]
rings = dict.fromkeys(range(data3.shape[0]))
rings_mask = dict.fromkeys(range(data3.shape[0]))
size = data3.shape[0]

mom2 = Imcube.linewidth_sigma()
wcs = WCS(mom2.hdu.header)
radius_arc = data3['RAD(arcs)'] + seperation / 2

center_sky = SkyEllipticalAperture(positions=center,
                                   a=radius_arc[0] * u.arcsec,
                                   b=radius_arc[0] * cosi * u.arcsec,
                                   theta=pa * u.degree)
rings[0] = center_sky.to_pixel(wcs=wcs)
rings_mask[0] = Apmask_convert(rings[0], np.array(mom2))


def aperture_rings(a_in, a_out, wcs, cosi, pa):
    ring_sky = SkyEllipticalAnnulus(positions=center,
                                    a_in=a_in * u.arcsec,
                                    a_out=a_out * u.arcsec,
                                    b_out=a_out * cosi * u.arcsec,
                                    theta=pa * u.degree)
    ring_pix = ring_sky.to_pixel(wcs=wcs)
    return ring_pix


for i in range(1, size):
    rings[i] = aperture_rings(radius_arc[i - 1], radius_arc[i], wcs, cosi, pa)
Exemplo n.º 11
0
imageDir = Dir + 'image/'
picDir = Dir + 'picture/'

## comparision for 12CO10 data
fitsimage = imageDir + 'NGC5257_12CO10_combine_contsub_mom2.fits'
wcs = fits_import(fitsimage)[0]
data_masked = fits_import(fitsimage)[1]
data = data_masked.data

a = radius_arcsec[0]
b = radius_arcsec[0] * incl
center_sky = SkyEllipticalAperture(position,
                                   a=a * u.arcsec,
                                   b=b * u.arcsec,
                                   theta=PA * u.degree)
center_pix = center_sky.to_pixel(wcs=wcs)
center_mask = Apmask_convert(center_pix, data_masked)

for i in range(8):
    rings[i] = aperture_ring(radius_arcsec[i + 1], wcs)
    rings_mask[i] = Apmask_convert(rings[i], data_masked)

dispersions = np.empty((0, 0))
dispersions = np.append(dispersions, np.ma.median(center_mask))
for i in range(8):
    dispersion = np.ma.median(rings_mask[i])
    dispersions = np.append(dispersions, dispersion)

# fig=plt.figure()
# ax=plt.subplot(projection=wcs)
# im=ax.imshow(data,cmap='rainbow',origin='lower',vmax=150)
Exemplo n.º 12
0
south_syn = 6.64 * 10**(-29) * 33**0.7 * L_33
south_fre = 4.6 * 10**(-28) * 33**(0.1) * L_33

fitsimage = 'NGC5257_33GHz_smooth.fits'
wcs_33smo = fits_import('NGC5257_33GHz_smooth.fits')[0]
data_33smo = fits_import('NGC5257_33GHz_smooth.fits')[1]

# test the position of fitted beam for 33GHz data for smoothed beam
position = SkyCoord(dec=0.0146051786921 * u.rad,
                    ra=-2.7057736283 * u.rad,
                    frame='fk5')
south_sky = SkyEllipticalAperture(position,
                                  a=3 * ratio * u.arcsec,
                                  b=3 * ratio * u.arcsec,
                                  theta=0.0 * u.degree)
south_pix = south_sky.to_pixel(wcs=wcs_33smo)
# fig=plt.figure()
# ax=plt.subplot(projection=wcs_33smo)
# ax.imshow(data_33smo,origin='lower')
# south_pix.plot()
# # plt.savefig(picDir+'33GHz_south.png')
south_33 = south_pix

beamarea = 1.1331 * 5.76 * 5.46
beamarea_pix = beamarea / (0.12**2)

data_cut = data_33smo
aperture = south_33
flux = flux_aperture_get(data_33smo, aperture)
flux_33 = flux / beamarea_pix
df['flux']['33GHz'] = flux_33