Source code for stcal.tweakreg.utils
from astropy.modeling.rotations import RotationSequence3D
__all__ = ["_wcsinfo_from_wcs_transform"]
[docs]
def _wcsinfo_from_wcs_transform(wcs):
frames = wcs.available_frames
if "v2v3" not in frames or "world" not in frames or frames[-1] != "world":
msg = "Unsupported WCS structure."
raise ValueError(msg)
# Initially get v2_ref, v3_ref, and roll_ref from
# the v2v3 to world transform. Also get ra_ref, dec_ref
t = wcs.get_transform(frames[-2], "world")
for m in t:
if isinstance(m, RotationSequence3D) and m.parameters.size == 5:
v2_ref, nv3_ref, roll_ref, dec_ref, nra_ref = m.angles.value
break
else:
msg = "Unsupported WCS structure."
raise ValueError(msg)
# overwrite v2_ref, v3_ref, and roll_ref with
# values from the tangent plane when available:
if "v2v3corr" in frames:
# get v2_ref, v3_ref, and roll_ref from
# the v2v3 to v2v3corr transform:
frm1 = "v2v3vacorr" if "v2v3vacorr" in frames else "v2v3"
tpcorr = wcs.get_transform(frm1, "v2v3corr")
v2_ref, nv3_ref, roll_ref = tpcorr["det_to_optic_axis"].angles.value
return {
"v2_ref": 3600 * v2_ref,
"v3_ref": -3600 * nv3_ref,
"roll_ref": roll_ref,
"ra_ref": -nra_ref,
"dec_ref": dec_ref
}