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