Source code for rubin_sim.selfcal.star_tools
__all__ = ("stars_project", "assign_patches")
import numpy as np
from rubin_scheduler.utils import gnomonic_project_toxy
[docs]
def stars_project(stars, visit):
"""
Project the stars to x,y plane for a given visit.
"""
xtemp, ytemp = gnomonic_project_toxy(
np.radians(stars["ra"]),
np.radians(stars["decl"]),
np.radians(visit["ra"]),
np.radians(visit["dec"]),
)
# Rotate the field using the visit rotSkyPos.
# Hope I got that sign right...
sin_rot = np.sin(np.radians(visit["rotSkyPos"]))
cos_rot = np.cos(np.radians(visit["rotSkyPos"]))
stars["x"] = cos_rot * xtemp + sin_rot * ytemp
stars["y"] = -1.0 * sin_rot * xtemp + cos_rot * ytemp
stars["radius"] = (stars["x"] ** 2 + stars["y"] ** 2) ** 0.5
return stars
[docs]
def assign_patches(stars, visit, n_patches=16, radius_fov=1.8):
"""
Assign PatchIDs to everything.
Assume that stars have already been projected to x,y
"""
maxx, maxy = gnomonic_project_toxy(0.0, np.radians(radius_fov), 0.0, 0.0)
nsides = n_patches**0.5
# This should move all coords to 0 < x < nsides-1
px = np.floor((stars["x"] + maxy) / (2.0 * maxy) * nsides)
py = np.floor((stars["y"] + maxy) / (2.0 * maxy) * nsides)
stars["sub_patch"] = px + py * nsides
stars["patch_id"] = stars["sub_patch"] + visit["observationId"] * n_patches
return stars