def plot_contours(proportions, samples): r''' Plot containment contour around desired level. E.g 90% containment of a PDF on a healpix map Parameters: ----------- proportions: list list of containment level to make contours for. E.g [0.68,0.9] samples: array array of values read in from healpix map E.g samples = hp.read_map(file) Returns: -------- theta_list: list List of arrays containing theta values for desired contours phi_list: list List of arrays containing phi values for desired contours ''' levels = [] t0 = time() sorted_samples = list(reversed(list(sorted(samples)))) t1 = time() nside = hp.pixelfunc.get_nside(samples) sample_points = np.array(hp.pix2ang(nside, np.arange(len(samples)))).T for proportion in proportions: level_index = (np.cumsum(sorted_samples) > proportion).tolist().index(True) level = (sorted_samples[level_index] + (sorted_samples[level_index + 1] if level_index + 1 < len(samples) else 0)) / 2.0 levels.append(level) msk = samples != 0 samples = samples[msk] sample_points = sample_points[msk] contours_by_level = meander.spherical_contours(sample_points, samples, levels) theta_list = [] phi_list = [] for contours in contours_by_level: for contour in contours: theta, phi = contour.T phi[phi < 0] += 2.0 * np.pi theta_list.append(theta) phi_list.append(phi) return theta_list, phi_list
def compute_contours(proportions, samples): """Plot containment contour around desired level. E.g 90% containment of a PDF on a healpix map. Parameters: ----------- proportions: list list of containment level to make contours for. E.g [0.68,0.9] samples: array array of values read in from healpix map E.g samples = hp.read_map(file) Returns: -------- ra_list: list List of arrays containing RA values for desired contours [deg]. dec_list: list List of arrays containing Dec values for desired contours [deg]. """ levels = [] sorted_samples = list(reversed(list(sorted(samples)))) nside = hp.pixelfunc.get_nside(samples) sample_points = np.array(hp.pix2ang(nside, np.arange(len(samples)))).T for proportion in proportions: level_index = (np.cumsum(sorted_samples) > proportion).tolist().index(True) level = (sorted_samples[level_index] + (sorted_samples[level_index + 1] if level_index + 1 < len(samples) else 0)) / 2.0 levels.append(level) contours_by_level = meander.spherical_contours(sample_points, samples, levels) ra_list = [] dec_list = [] for contours in contours_by_level: for contour in contours: theta, phi = contour.T phi[phi < 0] += 2.0 * np.pi dec_list.append(90 - np.degrees(theta)) ra_list.append(np.degrees(phi)) return ra_list, dec_list
def compute_contours(proportions, samples, nside=64): ''' Compute containment contour around desired level. ''' try: import meander except: return # binnned map to lower resolution in order to save time samples = hp.pixelfunc.ud_grade(samples, nside) samples = samples / np.sum(samples) levels = [] sorted_samples = list(reversed(list(sorted(samples)))) nside = hp.pixelfunc.get_nside(samples) sample_points = np.array(hp.pix2ang(nside, np.arange(len(samples)))).T for proportion in proportions: level_index = (np.cumsum(sorted_samples) > \ proportion).tolist().index(True) level = (sorted_samples[level_index] + \ (sorted_samples[level_index+1] \ if level_index+1 < len(samples) else 0)) / 2.0 levels.append(level) contours_by_level = meander.spherical_contours(sample_points, samples, levels) theta_list = {} phi_list = {} for cc, contours in enumerate(contours_by_level): _cnt = proportions[cc] try: theta_list[_cnt] phi_list[_cnt] except: theta_list[_cnt] = [] phi_list[_cnt] = [] for contour in contours: theta, phi = contour.T phi[phi < 0] += 2.0 * np.pi theta_list[_cnt].append(theta) phi_list[_cnt].append(phi) return theta_list, phi_list