Source code for uranography.mollweide
"""Interactive sky map in a Mollweide projection."""
import healpy as hp
import numpy as np
from .spheremap import SphereMap
[docs]
class MollweideMap(SphereMap):
"""Mollweide projection of the sky.
Parameters
----------
plot : `bokeh.plotting.figure`, optional
Figure to which to add the map, by default None
mjd : `float`, optional
The Modified Julian Date
location: `EarthLocation` or `str`, optional
The location of the observatory, defaults to lsst.
"""
x_col = "x_moll"
y_col = "y_moll"
update_js_fnames = ("coord_utils.js", "mollweide.js")
update_js_command = "updateMollweideData()"
transform_js_fnames = ("coord_utils.js", "mollweide.js")
transform_js_call = "return mollweideTransform()"
default_title = "Mollweide"
def _add_projection_columns(self, hpix, nside, projector=None):
"""Adds pre-calculated projection columns for this projection."""
proj = hp.projector.MollweideProj()
proj.set_flip("astro")
hpix = super()._add_projection_columns(hpix, nside, proj)
resol = np.degrees(hp.nside2resol(nside))
num_pix = len(hpix.data["ra"])
for i in range(num_pix):
center_ra = hpix.data["center_ra"][i]
center_decl = hpix.data["center_decl"][i]
# Skip any healpixes not close to the discontinuity
ra_resol = resol / np.cos(np.radians(center_decl))
if np.abs((center_ra + 180) % 360 - 180) < 2 * ra_resol:
continue
# If there are any x points with a different sign than the center,
# set them to nan
for j, x in enumerate(hpix.data["x_moll"][i]): # pylint: disable=C0103
center_ra_sign = 1 if center_ra % 360 < 180 else -1
# Remember, we are looking out from the Earth, so
# positive RA is left, negative right
if np.sign(x) == center_ra_sign:
hpix.data["x_moll"][i][j] = np.nan
hpix.data["y_moll"][i][j] = np.nan
return hpix