Source code for pytelpoint.transform
# Licensed under a 3-clause BSD style license - see LICENSE.rst
import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord
__all__ = ["azel_model"]
[docs]
def azel_model(
coo, ia=0.0, ie=0.0, an=0.0, aw=0.0, ca=0.0, npae=0.0, tf=0.0, tx=0.0, **kwargs
):
"""
Apply 8-term alt-az pointing model to set of raw alt-az coordinates and return corrected coordinates.
Parameter names match those used by TPOINT(tm): IA, IE, AN, AW, CA, NPAE, TF, and TX. See TPOINT(tm) documentation
for more details.
Parameters
----------
coo : `~astropy.coordinates.SkyCoord` instance
Raw Az-El coordinates to correct via pointing model model. Must be in an AltAz frame.
ia : float (default: 0)
Azimuth index value (i.e. zeropoint)
ie : float (default: 0)
Elevation index value
an : float (default: 0)
North-South misalignment of azimuth axis
aw : float (default: 0)
East-West misalignment of azimuth axis
ca : float (default: 0)
Left-Right collimation error. In an alt-az mount, this collimation error is the non-perpendicularity
between the nominated pointing direction and the elevation axis. It produces a left-right shift on the
sky that is constant for all elevations.
npae : float (default: 0)
Az/El non-perpendicularity. In an alt-az mount, if the azimuth and elevation axes are not exactly at
right angles, horizontal shifts occur that are proportional to sin(el).
tf : float (default: 0)
Tube flexure term proportional to cos(el).
tx : float (default: 0)
Tube flexure term proportional to cot(el).
Returns
-------
new_coo : `~astropy.coordinates.SkyCoord` instance
New coordinates with azel pointing model applied.
"""
if coo.frame.name != "altaz":
raise ValueError("azel_model can only be applied to AltAz coordinates.")
da = -1 * ia
da -= an * np.sin(coo.az) * np.tan(coo.alt)
da -= aw * np.cos(coo.az) * np.tan(coo.alt)
da -= ca / np.cos(coo.alt)
da -= npae * np.tan(coo.alt)
de = ie
de -= an * np.cos(coo.az)
de += aw * np.sin(coo.az)
de -= tf * np.cos(coo.alt)
de -= tx / np.tan(coo.alt)
new_az = coo.az + da * u.arcsec
new_alt = coo.alt + de * u.arcsec
new_coo = SkyCoord(new_az, new_alt, frame=coo.frame)
return new_coo