def plot_slices(original_npz, boot_npz, data_dir, points1, points2, ylabel=r"RM, $[rad/m^2]$", beam_size_pxl=None, n_boot=100): import matplotlib label_size = 10 matplotlib.rcParams['xtick.labelsize'] = label_size matplotlib.rcParams['ytick.labelsize'] = label_size matplotlib.rcParams['axes.titlesize'] = label_size matplotlib.rcParams['axes.labelsize'] = label_size matplotlib.rcParams['font.size'] = label_size matplotlib.rcParams['legend.fontsize'] = label_size ccimage = create_clean_image_from_fits_file( os.path.join(data_dir, "cc_x_I.fits")) if beam_size_pxl is None: beam = ccimage.beam beam_size_pxl = np.sqrt(beam[0] * beam[1]) / 0.1 loaded = np.load(os.path.join(data_dir, original_npz)) loaded_boot = np.load(os.path.join(data_dir, boot_npz)) conv_value = loaded["value"] conv_sigma = loaded["sigma"] im = Image() im._construct(imsize=ccimage.imsize, pixsize=ccimage.pixsize, pixref=ccimage.pixref, stokes='MF', freq=tuple(freqs), pixrefval=ccimage.pixrefval) im.image = conv_value sigma_im = copy.deepcopy(im) sigma_im.image = conv_sigma fig, axes = plt.subplots(3, 3, sharex=True, sharey=True) ii = 0 jj = 0 original_image = conv_value boot_images = [loaded_boot[str(i)] for i in range(n_boot)] # low_ci, high_ci = boot_ci(boot_images, original_image, alpha=0.95) for point1, point2 in zip(points1, points2): # Values from conventional methods original_slice = im.slice(point1=point1, point2=point2) original_slice_sigma = sigma_im.slice(point1=point1, point2=point2) # ci_low_im = copy.deepcopy(im) # ci_low_im.image = low_ci # ci_high_im = copy.deepcopy(im) # ci_high_im.image = high_ci boot_slices = list() for i in range(n_boot): im = Image() im._construct(imsize=ccimage.imsize, pixsize=ccimage.pixsize, pixref=ccimage.pixref, stokes='MF', freq=tuple(freqs), pixrefval=ccimage.pixrefval) im.image = loaded_boot[str(i)] aslice = im.slice(point1=point1, point2=point2) boot_slices.append(aslice) x = np.arange(len(original_slice)) / beam_size_pxl axes[ii, jj].errorbar(x[::2], original_slice[::2], yerr=original_slice_sigma[::2], fmt=".k") if jj == 0: axes[ii, jj].set_ylabel(ylabel) if ii == 2: axes[ii, jj].set_xlabel("Distance, [beam]") low_scb, up_scb = create_scb(boot_slices, original_slice, conf_band_alpha=0.95) axes[ii, jj].fill_between(x, low_scb, up_scb, alpha=0.35) axes[ii, jj].axhline(0, color="r") # axes[ii, jj].fill_between(x, ci_low_slice, ci_high_slice, alpha=0.5) # axes.legend(loc="upper left") jj += 1 if jj == 3: ii += 1 jj = 0 return fig
def plot_slice(original_npz, boot_npz, data_dir, point1=(0, 1), point2=(0, -10), ylabel=r"RM, $[rad/m^2]$", beam_size_pxl=None, n_boot=100): import matplotlib label_size = 14 matplotlib.rcParams['xtick.labelsize'] = label_size matplotlib.rcParams['ytick.labelsize'] = label_size matplotlib.rcParams['axes.titlesize'] = label_size matplotlib.rcParams['axes.labelsize'] = label_size matplotlib.rcParams['font.size'] = label_size matplotlib.rcParams['legend.fontsize'] = label_size ccimage = create_clean_image_from_fits_file( os.path.join(data_dir, "cc_x_I.fits")) if beam_size_pxl is None: beam = ccimage.beam beam_size_pxl = np.sqrt(beam[0] * beam[1]) / 0.1 loaded = np.load(os.path.join(data_dir, original_npz)) loaded_boot = np.load(os.path.join(data_dir, boot_npz)) conv_value = loaded["value"] conv_sigma = loaded["sigma"] im = Image() im._construct(imsize=ccimage.imsize, pixsize=ccimage.pixsize, pixref=ccimage.pixref, stokes='MF', freq=tuple(freqs), pixrefval=ccimage.pixrefval) im.image = conv_value sigma_im = copy.deepcopy(im) sigma_im.image = conv_sigma # Values from conventional methods original_slice = im.slice(point1=point1, point2=point2) original_slice_sigma = sigma_im.slice(point1=point1, point2=point2) # aslice = rotm_im.slice(point1=(2.5, -2), point2=(-2.5, -2)) original_image = conv_value boot_images = [loaded_boot[str(i)] for i in range(n_boot)] low_ci, high_ci = boot_ci(boot_images, original_image) ci_low_im = copy.deepcopy(im) ci_low_im.image = low_ci ci_high_im = copy.deepcopy(im) ci_high_im.image = high_ci ci_low_slice = ci_low_im.slice(point1=point1, point2=point2) ci_high_slice = ci_high_im.slice(point1=point1, point2=point2) boot_slices = list() for i in range(n_boot): im = Image() im._construct(imsize=ccimage.imsize, pixsize=ccimage.pixsize, pixref=ccimage.pixref, stokes='MF', freq=tuple(freqs), pixrefval=ccimage.pixrefval) im.image = loaded_boot[str(i)] aslice = im.slice(point1=point1, point2=point2) boot_slices.append(aslice) x = np.arange(len(original_slice)) / beam_size_pxl fig, axes = plt.subplots(1, 1) axes.errorbar(x[::2], original_slice[::2], yerr=original_slice_sigma[::2], fmt=".k") axes.set_ylabel(ylabel) axes.set_xlabel("Distance along jet, [beam]") low_scb, up_scb = create_scb(boot_slices, original_slice) axes.fill_between(x, low_scb, up_scb, alpha=0.35) axes.fill_between(x, ci_low_slice, ci_high_slice, alpha=0.5) axes.legend(loc="upper left") return fig