예제 #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
예제 #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")
예제 #3
0
# create mask with NAN data
mask1 = np.isnan(data_mom2)
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)')
예제 #4
0
# main program

### Draw different regions.

position = SkyCoord(dec=0.8309 * u.degree,
                    ra=204.9906 * u.degree,
                    frame='icrs')
apertures['center']['sky'] = SkyCircularAperture(position, r=3 * u.arcsec)
apertures['ring around center']['sky'] = SkyCircularAnnulus(position,
                                                            r_in=3 * u.arcsec,
                                                            r_out=7 * u.arcsec)
position = SkyCoord(dec=0.8349 * u.degree,
                    ra=204.9930 * u.degree,
                    frame='icrs')
apertures['northarm']['sky'] = SkyEllipticalAperture(position,
                                                     a=15 * u.arcsec,
                                                     b=7 * u.arcsec,
                                                     theta=340 * u.degree)
position = SkyCoord(dec=0.8275 * u.degree,
                    ra=204.9884 * u.degree,
                    frame='icrs')
apertures['southarm']['sky'] = SkyEllipticalAperture(position,
                                                     a=10 * u.arcsec,
                                                     b=5 * u.arcsec,
                                                     theta=340 * u.degree)

from regions import read_ds9
file = regionDir + 'south_SFR.reg'
southsfr_sky = read_ds9(file, errors='warn')[0]

fitsimage = image_ratio + '.fits'
예제 #5
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",
            )
예제 #6
0
position = SkyCoord(dec=0.8309 * u.degree,
                    ra=204.9906 * u.degree,
                    frame='icrs')
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
예제 #7
0
############################################################
# main program

### 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)
예제 #8
0
############################################################
# main program
Dir = '/1/home/heh15/workingspace/Arp240/NGC5257/12CO10/'
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])))
예제 #9
0
############################################################
# Draw the region

position = SkyCoord(dec=0.8309 * u.degree,
                    ra=204.9906 * u.degree,
                    frame='icrs')
apertures['center']['sky'] = SkyCircularAperture(position, r=3 * u.arcsec)
apertures['ring around center']['sky'] = SkyCircularAnnulus(position,
                                                            r_in=3 * u.arcsec,
                                                            r_out=7 * u.arcsec)
position = SkyCoord(dec=0.8340 * u.degree,
                    ra=204.9935 * u.degree,
                    frame='icrs')
apertures['northarm']['sky'] = SkyEllipticalAperture(position,
                                                     a=13 * u.arcsec,
                                                     b=4 * u.arcsec,
                                                     theta=185 * u.degree)
position = SkyCoord(dec=0.8283 * u.degree,
                    ra=204.9882 * u.degree,
                    frame='icrs')
apertures['southarm']['sky'] = SkyEllipticalAperture(position,
                                                     a=9 * u.arcsec,
                                                     b=4 * u.arcsec,
                                                     theta=360 * u.degree)

from regions import read_ds9
file = regionDir + 'south_SFR.reg'
southsfr_sky = read_ds9(file, errors='warn')[0]

fitsimage = image_ratio + '.fits'
예제 #10
0
# cut out the region with data
position=SkyCoord(dec=50.4167*u.arcmin,ra=204.9706*u.degree,frame='icrs')
size=u.Quantity((54,42),u.arcsec)
cut=Cutout2D(data=data,position=position,size=size,wcs=wcs)
data_cut=cut.data

# mask the data. 

data_masked=np.ma.masked_invalid(data_cut)
mask=data_masked.mask
co12_masked=data_masked

# draw the apertures in the image
position=SkyCoord(dec=50.415*u.arcmin,ra=204.9705*u.degree,frame='icrs')
apertures['center']['sky']=SkyEllipticalAperture(position,a=2*u.arcsec,b=3*u.arcsec,theta=0*u.degree)
apertures['center']['pix']=apertures['center']['sky'].to_pixel(wcs=cut.wcs)

apertures[regions[1]]['sky']=SkyEllipticalAnnulus(position,a_in=2*u.arcsec,a_out=4*u.arcsec,b_out=6*u.arcsec,theta=0*u.degree)
apertures[regions[1]]['pix']=apertures[regions[1]]['sky'].to_pixel(wcs=cut.wcs)

apertures[regions[2]]['sky']=SkyEllipticalAnnulus(position,a_in=4*u.arcsec,a_out=6*u.arcsec,b_out=9*u.arcsec,theta=0*u.degree)
apertures[regions[2]]['pix']=apertures[regions[2]]['sky'].to_pixel(wcs=cut.wcs)

apertures[regions[3]]['sky']=SkyEllipticalAnnulus(position,a_in=6*u.arcsec,a_out=9*u.arcsec,b_out=13.5*u.arcsec,theta=0*u.degree)
apertures[regions[3]]['pix']=apertures[regions[3]]['sky'].to_pixel(wcs=cut.wcs)

apertures[regions[4]]['sky']=SkyEllipticalAnnulus(position,a_in=9*u.arcsec,a_out=15*u.arcsec,b_out=22.5*u.arcsec,theta=0*u.degree)
apertures[regions[4]]['pix']=apertures[regions[4]]['sky'].to_pixel(wcs=cut.wcs)

fig=plt.figure()
예제 #11
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
예제 #12
0
imcube = SpectralCube.read(imageDir + 'NGC5257_12CO21_pbcor_cube_masked.fits')
Imcube = imcube.with_spectral_unit(u.km / u.s, velocity_convention='radio')

# #### 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

예제 #13
0
파일: Toomre_wcs.py 프로젝트: heh15/Arp240
R=np.sqrt(dists**2*(cosine**2+(1-cosine**2)/incl**2))
R_binned=reproj_binning(R, wcs, bin_number)[1]

R_std=R*1000*3.1*10**16

epsi_tmp=math.sqrt(2)*v_rot_std*(1+Gradln)**0.5

# store the epicycle into the fits file

# draw the mask
epsi_array_tmp=np.zeros((np.shape(mom0)[0],np.shape(mom0)[1]))
epsi_array_masked=np.ma.masked_where(np.ma.nomask,epsi_array_tmp)

a=R_arcsec[0]
b=R_arcsec[0]*incl
center_sky=SkyEllipticalAperture(center,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,epsi_array_masked)

rings=dict.fromkeys((range(len(R_arcsec)-1)))
rings_mask=dict.fromkeys((range(len(R_arcsec)-1)))

for i in range(len(rings)):
    rings[i]=aperture_ring(R_arcsec[i],R_arcsec[i+1],wcs)
    rings_mask[i]=Apmask_convert(rings[i],epsi_array_masked)

# Check the aperture 
# fig=plt.figure()
# plt.imshow(data_masked,origin='lower')
# center_pix.plot(color='blue')
# for i in range(len(data2[0])-1):
예제 #14
0
파일: SFR_map.py 프로젝트: heh15/Arp240
L_33 = (6.4 * 10**-4) * 4 * math.pi * (99 * 3.086 * 10**24)**2 * 10**(-23)
south_tot = 10**-27 * (2.18 * 33**(-0.1) + 15.1 * 33**(-0.7))**(-1) * L_33
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)