#### Description:

This attribute is used to qualify the coordinate systems described by a Frame, by giving the moment in time when the coordinates are known to be correct. Often, this will be the date of observation, and is important in cases where coordinates systems move with respect to each other over the course of time.

The Epoch attribute is stored as a Modified Julian Date, but when setting its value it may be given in a variety of formats. See the `"` Input Formats`"` section (below) for details. Strictly, the Epoch value should be supplied in the TDB timescale, but for some purposes (for instance, for converting sky positions between different types of equatorial system) the timescale is not significant, and UTC may be used.

Type:

  Floating point.

#### Applicability

##### Frame

All Frames have this attribute. The basic Frame class provides a default of J2000.0 (Julian) but makes no use of the Epoch value. This is because the Frame class does not distinguish between different Cartesian coordinate systems (see the System attribute).

##### CmpFrame

The default Epoch value for a CmpFrame is selected as follows; if the Epoch attribute has been set in the first component Frame then the Epoch value from the first component Frame is used as the default for the CmpFrame. Otherwise, if the Epoch attribute has been set in the second component Frame then the Epoch value from the second component Frame is used as the default for the CmpFrame. Otherwise, the default Epoch value from the first component Frame is used as the default for the CmpFrame. When the Epoch attribute of a CmpFrame is set or cleared, it is also set or cleared in the two component Frames.

##### FrameSet

The Epoch attribute of a FrameSet is the same as that of its current Frame (as specified by the Current attribute).

##### SkyFrame

The coordinates of sources within a SkyFrame can change with time for various reasons, including: (i) changing aberration of light caused by the observer`’` s velocity (e.g. due to the Earth`’` s motion around the Sun), (ii) changing gravitational deflection by the Sun due to changes in the observer`’` s position with time, (iii) fictitious motion due to rotation of non-inertial coordinate systems (e.g. the old FK4 system), and (iv) proper motion of the source itself (although this last effect is not handled by the SkyFrame class because it affects individual sources rather than the coordinate system as a whole).

The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the old FK4-based coordinate systems (see the System attribute) and J2000.0 (Julian) for all others.

Care must be taken to distinguish the Epoch value, which relates to motion (or apparent motion) of the source, from the superficially similar Equinox value. The latter is used to qualify a coordinate system which is itself in motion in a (notionally) predictable way as a result of being referred to a slowly moving reference plane (e.g. the equator).

See the description of the System attribute for details of which qualifying attributes apply to each celestial coordinate system.

##### TimeFrame

A TimeFrame describes a general time axis and so cannot be completely characterised by a single Epoch value. For this reason the TimeFrame class makes no use of the Epoch attribute. However, user code can still make use of the attribute if necessary to represent a `"` typical`"` time spanned by the TimeFrame. The default Epoch value for a TimeFrame will be the TDB equivalent of the current value of the TimeFrame`’` s TimeOrigin attribute. If no value has been set for TimeOrigin, then the default Epoch value is J2000.0.

#### Input Formats

The formats accepted when setting an Epoch value are listed below. They are all case-insensitive and are generally tolerant of extra white space and alternative field delimiters:

- Besselian Epoch: Expressed in decimal years, with or without decimal places (`"` B1950`"` or `"` B1976.13`"` for example).

- Julian Epoch: Expressed in decimal years, with or without decimal places (`"` J2000`"` or `"` J2100.9`"` for example).

- Year: Decimal years, with or without decimal places (`"` 1996.8`"` for example). Such values are interpreted as a Besselian epoch (see above) if less than 1984.0 and as a Julian epoch otherwise.

- Julian Date: With or without decimal places (`"` JD 2454321.9`"` for example).

- Modified Julian Date: With or without decimal places (`"` MJD 54321.4`"` for example).

- Gregorian Calendar Date: With the month expressed either as an integer or a 3-character abbreviation, and with optional decimal places to represent a fraction of a day (`"` 1996-10-2`"` or `"` 1996-Oct-2.6`"` for example). If no fractional part of a day is given, the time refers to the start of the day (zero hours).

- Gregorian Date and Time: Any calendar date (as above) but with a fraction of a day expressed as hours, minutes and seconds (`"` 1996-Oct-2 12:13:56.985`"` for example). The date and time can be separated by a space or by a `"` T`"` (as used by ISO8601 format).

#### Output Format

When enquiring Epoch values, the format used is the `"` Year`"` format described under `"` Input Formats`"` . This is a value in decimal years which will be a Besselian epoch if less than 1984.0 and a Julian epoch otherwise. By omitting any character prefix, this format allows the Epoch value to be obtained as either a character string or a floating point value.
Copyright (C) 2021 East Asian Observatory