Source code for astropy.coordinates.builtin_frames.cirs
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from astropy.coordinates.attributes import EarthLocationAttribute, TimeAttribute
from astropy.coordinates.baseframe import base_doc
from astropy.utils.decorators import format_doc
from .baseradec import BaseRADecFrame, doc_components
from .utils import DEFAULT_OBSTIME, EARTH_CENTER
__all__ = ["CIRS"]
doc_footer = """
Other parameters
----------------
obstime : `~astropy.time.Time`
The time at which the observation is taken. Used for determining the
position of the Earth and its precession.
location : `~astropy.coordinates.EarthLocation`
The location on the Earth. This can be specified either as an
`~astropy.coordinates.EarthLocation` object or as anything that can be
transformed to an `~astropy.coordinates.ITRS` frame. The default is the
centre of the Earth.
"""
[docs]
@format_doc(base_doc, components=doc_components, footer=doc_footer)
class CIRS(BaseRADecFrame):
"""
A coordinate or frame in the Celestial Intermediate Reference System (CIRS).
CIRS is a geocentric reference system that serves as the *intermediate*
step between the quasi-inertial `~astropy.coordinates.ICRS` (fixed to
distant quasars) and the Earth-fixed `~astropy.coordinates.ITRS`. It was
introduced by the International Astronomical Union (IAU) 2000 and 2006
resolutions to replace the older equinox-based "apparent place" systems
with a cleaner, higher-precision framework.
**Definition**
CIRS is defined by two fundamental concepts:
* **Celestial Intermediate Pole (CIP)** — the pole of the system. Its
motion in the `~astropy.coordinates.GCRS` is described by the IAU 2006
precession model combined with the IAU 2000A nutation model, giving
micro-arcsecond accuracy.
* **Celestial Intermediate Origin (CIO)** — the origin of right ascension
in CIRS. Unlike the classical vernal equinox (which is defined by the
intersection of the Earth's equator and the ecliptic and therefore
"swings" with precession and nutation), the CIO is a *non-rotating
origin*: it is defined so that it has no rotation component around the
CIP. This cleanly separates the Earth's spin (described by the
**Earth Rotation Angle**, ERA) from its wobble (precession and nutation).
**Relation to other frames**
* **ICRS → CIRS**: applying the IAU precession-nutation model rotates the
ICRS axes to the intermediate (CIP/CIO) axes. Astropy performs this
via the ERFA ``apco``/``atciqz`` routines.
* **CIRS → ITRS**: a single rotation by the Earth Rotation Angle (ERA)
around the CIP axis. ERA is a linear function of UT1 and replaces the
more complex "equation of the equinoxes" needed in the older
equinox-based systems.
* **CIRS vs. GCRS**: both share the same pole (CIP) and the same
geocentric origin, but they differ in their right-ascension origin.
GCRS uses the equinox; CIRS uses the CIO. The angular offset between
the two origins along the intermediate equator is called the
*equation of the origins* (EO).
**Astropy implementation**
Astropy implements CIRS using the `ERFA
<https://github.com/liberfa/erfa>`_ library (the open-source version of
IAU SOFA), which provides the IAU 2006/2000A precession-nutation model.
The default ``location`` is the geocentre; supply an
`~astropy.coordinates.EarthLocation` to get the topocentric variant
(which additionally accounts for diurnal aberration).
For more background see Section 2.6 of `USNO Circular 179
<https://arxiv.org/abs/astro-ph/0602086>`_ and the references in the
:ref:`astropy:astropy-coordinates-seealso` section of the documentation.
The frame attributes are listed under **Other Parameters**.
"""
obstime = TimeAttribute(
default=DEFAULT_OBSTIME, doc="The reference time (e.g., time of observation"
)
location = EarthLocationAttribute(
default=EARTH_CENTER, doc="The location on Earth of the observer"
)
# The "self-transform" is defined in icrs_cirs_transformations.py, because in
# the current implementation it goes through ICRS (like GCRS)