Source code for hipscat.pixel_math.cone_filter
from typing import List
import healpy as hp
import numpy as np
from hipscat.pixel_math import HealpixPixel
from hipscat.pixel_math.filter import get_filtered_pixel_list
from hipscat.pixel_tree.pixel_tree import PixelTree
[docs]
def filter_pixels_by_cone(
pixel_tree: PixelTree, ra: float, dec: float, radius_arcsec: float
) -> List[HealpixPixel]:
"""Filter the leaf pixels in a pixel tree to return a partition_info dataframe with the pixels
that overlap with a cone.
Args:
ra (float): Right Ascension of the center of the cone in degrees
dec (float): Declination of the center of the cone in degrees
radius_arcsec (float): Radius of the cone in arcseconds
Returns:
List of HealpixPixels representing only the pixels that overlap with the specified cone.
"""
max_order = pixel_tree.get_max_depth()
cone_tree = _generate_cone_pixel_tree(ra, dec, radius_arcsec, max_order)
return get_filtered_pixel_list(pixel_tree, cone_tree)
[docs]
def _generate_cone_pixel_tree(ra: float, dec: float, radius_arcsec: float, order: int):
"""Generates a pixel_tree filled with leaf nodes at a given order that overlap with a cone"""
n_side = hp.order2nside(order)
center_vec = hp.ang2vec(ra, dec, lonlat=True)
radius_radians = np.radians(radius_arcsec / 3600.0)
cone_pixels = hp.query_disc(n_side, center_vec, radius_radians, inclusive=True, nest=True)
pixel_list = [HealpixPixel(order, cone_pixel) for cone_pixel in cone_pixels]
return PixelTree.from_healpix(pixel_list)