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
示例#2
0
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
示例#3
0
    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