Exemple #1
0
def make_polmap(filename, title=None, figure=None, subplot=(1, 1, 1)):
    hawc = fits.open(filename)
    p = hawc['DEBIASED PERCENT POL']  # %
    theta = hawc['ROTATED POL ANGLE']  # deg
    stokes_i = hawc['STOKES I']  # I
    error_i = hawc['ERROR I']  # error I

    # 1. plot Stokes I
    #  convert from Jy/pix to Jy/sq. arcsec
    pxscale = stokes_i.header['CDELT2'] * 3600  # map scale in arcsec/pix
    stokes_i.data /= pxscale**2
    error_i.data /= pxscale**2

    fig = FITSFigure(stokes_i, figure=figure, subplot=subplot)

    # 2. perform S/N cut on I/\sigma_I
    err_lim = 100
    mask = np.where(stokes_i.data / error_i.data < err_lim)

    # 3. mask out low S/N vectors by setting masked indices to NaN
    p.data[mask] = np.nan

    # 4. plot vectors
    scalevec = 0.4  # 1pix = scalevec * 1% pol          # scale vectors to make it easier to see
    fig.show_vectors(p, theta, scale=scalevec,
                     step=2)  # step size = display every 'step' vectors
    #   step size of 2 is effectively Nyquist sampling
    #   --close to the beam size

    # 5. plot contours
    ncontours = 30
    fig.show_contour(stokes_i,
                     cmap=cmap,
                     levels=ncontours,
                     filled=True,
                     smooth=1,
                     kernel='box')
    fig.show_contour(stokes_i,
                     colors='gray',
                     levels=ncontours,
                     smooth=1,
                     kernel='box',
                     linewidths=0.3)

    # Show image
    fig.show_colorscale(cmap=cmap)

    # If title, set it
    if title:
        fig.set_title(title)

    # Add colorbar
    fig.add_colorbar()
    fig.colorbar.set_axis_label_text('Flux (Jy/arcsec$^2$)')

    # Add beam indicator
    fig.add_beam(facecolor='red',
                 edgecolor='black',
                 linewidth=2,
                 pad=1,
                 corner='bottom left')
    fig.add_label(0.02,
                  0.02,
                  'Beam FWHM',
                  horizontalalignment='left',
                  weight='bold',
                  relative=True,
                  size='small')

    # Add vector scale
    #   polarization vectors are displayed such that 'scalevec' * 1% pol is 1 pix long
    #   must translate pixel size to angular degrees since the 'add_scalebar' function assumes a physical scale
    vectscale = scalevec * pxscale / 3600
    fig.add_scalebar(5 * vectscale, "p = 5%", corner='top right', frame=True)

    return stokes_i, p, mask, fig
Exemple #2
0
#gc.show_contour(levels=levelsI,\
#				filled=True,smooth=1,kernel='box',cmap='viridis')
#beam
gc.add_beam(color='red')
#title
gc.set_title(title, fontsize=title_size)

##Pol map
p = quality_cuts(stkI, stkIerr, p, perr, SNRp_cut, p_cut, SNRi_cut)

#2. polmap
gc.show_vectors(p,pa,scale=scalevec,\
    step=2,color='black',linewidth=4.0)
gc.show_vectors(p,pa,scale=scalevec,\
    step=2,color='grey',linewidth=2.0)

#show label
gc.add_label(0.1,0.95,'Total Flux',fontsize=label_fontsize,\
 color='white',weight='bold',relative=True)

#legend vector
vecscale = scalevec * pxscale / 3600
gc.add_scalebar(vec_legend*vecscale,'P ='+np.str(vec_legend)+'%',\
    corner='bottom right',frame=True,color='black',facecolor='blue')
#Figure parameters
gc.tick_labels.set_font(size=tick_labels)
gc.axis_labels.set_font(size=label_plot)

fig.savefig(figname, dpi=300)
os.system('open ' + figname)