MeasTable.h

Classes

MeasTable -- MeasTable provides Measure computing database data (full description)

class MeasTable

Types

enum Types

MERCURY = 1
Planetary information
VENUS = 2
EARTH = 3
MARS = 4
JUPITER = 5
SATURN = 6
URANUS = 7
NEPTUNE = 8
PLUTO = 9
MOON = 10
SUN = 11
BARYSOLAR = 12
Solar system barycentre
BARYEARTH = 13
Earth-Moon system barycentre
NUTATION = 14
Nutations
LIBRATION = 15
Librations
N_Types
Number of types

enum JPLconst

CAU
Light velocity used in AU/d
GMS
Solar mass (GM0)/c2 in AU
AU
AU in km
RADS
Solar radius in AU
N_JPLconst
# of codes

Interface

Public Members
static Bool useIAU2000()
static Bool useIAU2000A()
static Double precRate00(const uInt which)
static RotMatrix frameBias00()
static void precessionCoef(Double T, Polynomial<Double> result[3])
static void precessionCoef2000(Polynomial<Double> result[3])
static void precessionCoef1950(Double T, Polynomial<Double> result[3])
static const Polynomial<Double> &fundArg(uInt which)
static const Polynomial<Double> &fundArg1950(uInt which)
static const Polynomial<Double> &fundArg2000(uInt which)
static const Polynomial<Double> &planetaryArg2000(uInt which)
static const Vector<Char> &mulArg(uInt which)
static const Vector<Char> &mulArg1950(uInt which)
static const Vector<Char> &mulArg2000A(uInt which)
static const Vector<Char> &mulArg2000B(uInt which)
static const Vector<Char> &mulPlanArg2000A(uInt which)
static const Vector<Char> &mulArgEqEqCT2000(uInt which)
static const Vector<Double> &mulSC(uInt which, Double T)
static const Vector<Double> &mulSC1950(uInt which, Double T)
static const Vector<Double> &mulSC2000A(uInt which, Double T)
static const Vector<Double> &mulSC2000B(uInt which, Double T)
static const Vector<Double> &mulPlanSC2000A(uInt which)
static const Vector<Double> &mulSCEqEqCT2000(uInt which)
static Double dPsiEps(uInt which, Double T)
static const Vector<Double> &Planetary(MeasTable::Types which, Double T)
static const Double &Planetary(MeasTable::JPLconst what)
static void initObservatories()
static const Vector<String> &Observatories()
static const Bool Observatory(MPosition &obs, const String &nam)
static void initSources()
static const Vector<String> &Sources()
static const Bool Source(MDirection &obs, const String &nam)
static void initLines()
static const Vector<String> &Lines()
static const Bool Line(MFrequency &obs, const String &nam)
static const Vector<Double> &IGRF(Double t)
static const Polynomial<Double> &aberArg(uInt which)
static const Polynomial<Double> &aber1950Arg(uInt which)
static const Vector<Char> &mulAberArg(uInt which)
static const Vector<Char> &mulAber1950Arg(uInt which)
static const Vector<Char> &mulAberSunArg(uInt which)
static const Vector<Char> &mulAberEarthArg(uInt which)
static const Vector<Double> &mulAber(uInt which, Double T)
static const Vector<Double> &mulAber1950(uInt which, Double T)
static const Vector<Double> &mulSunAber(uInt which)
static const Vector<Double> &mulEarthAber(uInt which)
static const Vector<Double> &AberETerm(uInt which)
static Double diurnalAber(Double radius, Double T)
static const Vector<Double> &velocityLSRK(uInt which)
static const Vector<Double> &velocityLSR(uInt which)
static const Vector<Double> &velocityLSRGal(uInt which)
static const Vector<Double> &velocityCMB(uInt which)
static const Vector<Double> &velocityLGROUP(uInt which)
static const Polynomial<Double> &posArg(uInt which)
static const Vector<Char> &mulPosEarthXYArg(uInt which)
static const Vector<Char> &mulPosEarthZArg(uInt which)
static const Vector<Char> &mulPosSunXYArg(uInt which)
static const Vector<Char> &mulPosSunZArg(uInt which)
static const Vector<Double> &mulPosEarthXY(uInt which, Double T)
static const Vector<Double> &mulPosEarthZ(uInt which, Double T)
static const Vector<Double> &mulPosSunXY(uInt which, Double T)
static const Vector<Double> &mulPosSunZ(uInt which, Double T)
static const RotMatrix &posToRect()
static const RotMatrix &rectToPos()
static const RotMatrix &galToSupergal()
static Double WGS84(uInt which)
static const Euler &polarMotion(Double ut)
static Double dUTC(Double utc)
static Double dUT1(Double utc)
static Double dTAI(Double tai=0.0)
static Double dTDT(Double ut1)
static Double dTDB(Double tai)
static Double dTCG(Double tai)
static Double GMST0(Double ut1)
static Double GMST00(Double ut1, Double tt)
static Double ERA00(Double ut1)
static Double sprime00(Double tt)
static Double GMUT0(Double gmst1)
static Double UTtoST(Double ut1)
Private Members
MeasTable()
MeasTable &operator=(const MeasTable &other)
static void calcPrecesCoef(Double T, Polynomial<Double> result[3], const Double coeff[3][6])
static void calcPrecesCoef2000(Polynomial<Double> result[3], const Double coeff[3][6])
static void calcFundArg(Bool &need, Polynomial<Double> result[6], const Double coeff[6][4])
static void calcFundArg00(Bool &need, Polynomial<Double> result[6], const Double coeff[6][5])
static void calcPlanArg00(Bool &need, Polynomial<Double> result[14], const Double coeff[8][2])
static void calcMulArg(Bool &need, Vector<Char> result[], const Char coeff[][5], Int row)
static void calcMulPlanArg(Bool &need, Vector<Char> result[], const Char coeff[][14], Int row)
static void calcMulSC(Bool &need, Double &check, Double T, Vector<Double> result[], Int resrow, Polynomial<Double> poly[], const Long coeffTD[][5], Int TDrow, const Short coeffSC[][2])
static void calcMulSC2000(Bool &need, Double &check, Double T, Vector<Double> result[], uInt resrow, Polynomial<Double> poly[], const Long coeffSC[][6])
static void calcMulSCPlan(Bool &need, Vector<Double> result[], uInt resrow, const Short coeffSC[][4])
static void calcMulSCPlan(Bool &need, Vector<Double> result[], uInt resrow, const Double coeffSC[][2])

Description

Review Status

Reviewed By:
tcornwel
Date Reviewed:
yyyy/mm/dd
Programs:
Tests:

Prerequisite

Etymology

MeasTable from Measure and Table

Synopsis

MeasTable contains the database interface for all data necessary for precession, nutation and other Measure related calculations.
All data are obtained by calls to a method. E.g. fundArg(1) will provide the first fundamental argument for nutation calculations, i.e. 'l'.
This class contains no constructors or destructors, only static methods and (static) constants.
References:
Explanatory supplements to the Astronomical Almanac
C. Ron and J. Vondrak, Bull. Astron. Inst. Czechosl. 37, p96, 1986
M. Soma, Th. Hirayama and H. Kinoshita, Celest. Mech. 41, p389, 1988
V.S. Gubanov, Astron. Zh. 49, p1112, 1992

Where strings are passed in as arguments (observatory names, sources), they will be case insensitive, and minimum match.

Example

Usage examples can be found in Precession

Motivation

To create a clean interface between the actual calculations and the methods to obtain the parameters for these calculations. Note that the tables are in general in the format and units found in the literature. This is to be able to easy check and change them. However, in the future re-arrangement could produce faster and more compact code.

To Do

Member Description

enum Types

Types to be used in different calls

enum JPLconst

Codes for JPL constants: order should be same as in MeasJPL, length less than or equal

static Bool useIAU2000()

Selection related data

Are the IAU2000 precession/nutation to be used or not (IAU1984)

static Bool useIAU2000A()

Selection related data

If IAU2000 model, do we use the high precision 2000A model?

static RotMatrix frameBias00()

Precession related data

Get the frame bias matrix for IAU2000 model.

static void precessionCoef(Double T, Polynomial<Double> result[3])

Precession related data

Generate the precession calculation polynomials for a fixed Epoch T in the result area specified. T is given in Julian centuries since J2000.0.

static void precessionCoef2000(Polynomial<Double> result[3])

Precession related data

Generate the precession polynomials for IAU2000 system.

static void precessionCoef1950(Double T, Polynomial<Double> result[3])

Precession related data

Generate the precession polynomials for 1950 system for a fixed Epoch T in the area specified. T is given in Tropical centuries since B1850.0

static Double precRate00(const uInt which)

Nutation related data

Precession related data

static const Polynomial<Double> &fundArg(uInt which)
static const Polynomial<Double> &fundArg1950(uInt which)
static const Polynomial<Double> &fundArg2000(uInt which)

Nutation related data

Generate the polynomial for the fundamental arguments (eps, l, l', F, D, omega) as a function of Julian centuries

static const Vector<Char> &mulArg(uInt which)
static const Vector<Char> &mulArg1950(uInt which)
static const Vector<Char> &mulArg2000A(uInt which)
static const Vector<Char> &mulArg2000B(uInt which)
static const Vector<Char> &mulPlanArg2000A(uInt which)

Nutation related data

Generate the which' vector of the nutation series arguments

static const Vector<Double> &mulSC(uInt which, Double T)
static const Vector<Double> &mulSC1950(uInt which, Double T)
static const Vector<Double> &mulSC2000A(uInt which, Double T)
static const Vector<Double> &mulSC2000B(uInt which, Double T)
static const Vector<Double> &mulPlanSC2000A(uInt which)

Nutation related data

Generate the which' vector of the nutation series multipliers at T, measured in Julian centuries since J2000.0, respectively B1900.0

static Double dPsiEps(uInt which, Double T)

Nutation related data

Get nutation angles corrections for UTC T in rad. which = 0 : dPsi as given by IERS for IAU nutation theory; = 1: dEps as same.

static const Polynomial<Double> &planetaryArg2000(uInt which)
static const Vector<Char> &mulArgEqEqCT2000(uInt which)
static const Vector<Double> &mulSCEqEqCT2000(uInt which)

Nutation related data

static const Double &Planetary(MeasTable::JPLconst what)

Planetary (JPL DE) related data

Get the JPL DE constant indicated

static const Vector<Double> &Planetary(MeasTable::Types which, Double T)

Planetary (JPL DE) related data

static const Vector<String> &Observatories()

Observatory positions

Get list of all observatories

static const Bool Observatory(MPosition &obs, const String &nam)

Observatory positions

Get position of observatory nam (False if not present)

static void initObservatories()

Observatory positions

static const Vector<String> &Sources()

Source list positions

Get list of all sources

static const Bool Source(MDirection &obs, const String &nam)

Source list positions

get position of source nam (False if not present)

static void initSources()

Source list positions

static const Vector<String> &Lines()

Rest frequencies

Get list of all frequencies

static const Bool Line(MFrequency &obs, const String &nam)

Rest frequencies

Get frequency of line name (False if not present)

static void initLines()

Rest frequencies

static const Vector<Double> &IGRF(Double t)

Aberration related data

Earth magnetic field (IGRF) data

static const Polynomial<Double> &aberArg(uInt which)
static const Polynomial<Double> &aber1950Arg(uInt which)

Aberration related data

Generate the polynomial for the fundamental arguments (l1-l8, w, D, l, l', F) for the Ron/Vondrak aberration calculations as a function of Julian centuries(J2000), or the comparable ones for the Gubanov expansion (B1950).

static const Vector<Char> &mulAberArg(uInt which)
static const Vector<Char> &mulAber1950Arg(uInt which)
static const Vector<Char> &mulAberSunArg(uInt which)
static const Vector<Char> &mulAberEarthArg(uInt which)

Aberration related data

Generate the which' vector of the aberration series arguments

static const Vector<Double> &mulAber(uInt which, Double T)
static const Vector<Double> &mulAber1950(uInt which, Double T)
static const Vector<Double> &mulSunAber(uInt which)
static const Vector<Double> &mulEarthAber(uInt which)

Aberration related data

Generate the which' vector of the aberration series multipliers at T, measured in Julian centuries since J2000.0 (or comparable for B1950).

static const Vector<Double> &AberETerm(uInt which)

Aberration related data

static Double diurnalAber(Double radius, Double T)

Diurnal aberration factor

static const Vector<Double> &velocityLSRK(uInt which)

LSR (kinematical) velocity conversion: 0 gives J2000; 1 gives B1950. In both cases a velocity of 20.0 km/s is assumed, and a B1900 RA/Dec direction of (270,30) degrees. This value has been defined between the groups doing HI radio work in the mid 1950s.

static const Vector<Double> &velocityLSR(uInt which)

LSR (dynamical, IAU definition). Velocity (9,12,7) km/s in galactic coordinates. Or 16.552945 towards l,b = 53.13, +25.02 deg. 0 gives J2000, 1 gives B1950 velocities.

static const Vector<Double> &velocityLSRGal(uInt which)

Velocity of LSR with respect to galactic centre. 220 km/s in direction l,b = 270, +0 deg. 0 returns J2000, 1 B1950

static const Vector<Double> &velocityCMB(uInt which)

Velocity of Local Group wrt bary center (F.Ghigo): 308km/s towards l,b = 105,-7. 0 for J2000, 1 for B1950

static const Vector<Double> &velocityLGROUP(uInt which)

Velocity of CMB wrt bary center (F.Ghigo): 369.5km/s towards l,b = 264.4,48.4. 0 for J2000, 1 for B1950

static const Polynomial<Double> &posArg(uInt which)

Earth and Sun position related data

Fundamental arguments for Soma et al. methods

static const Vector<Char> &mulPosEarthXYArg(uInt which)
static const Vector<Char> &mulPosEarthZArg(uInt which)
static const Vector<Char> &mulPosSunXYArg(uInt which)
static const Vector<Char> &mulPosSunZArg(uInt which)

Earth and Sun position related data

Generate the which' vector of the position series arguments

static const Vector<Double> &mulPosEarthXY(uInt which, Double T)
static const Vector<Double> &mulPosEarthZ(uInt which, Double T)
static const Vector<Double> &mulPosSunXY(uInt which, Double T)
static const Vector<Double> &mulPosSunZ(uInt which, Double T)

Earth and Sun position related data

Generate the which' vector of the position series multipliers at T, measured in Julian centuries since J2000.0

static const RotMatrix &rectToPos()

Earth and Sun position related data

Get the rotation matrix to change position from rectangular to ecliptic for Soma et al. analytical expression

static const RotMatrix &galToSupergal()

Earth and Sun position related data

Get the rotation matrix from galactic to supergalactic. Based on matrix as available in Miriad, leading to Euler Angles of 90, 83.68, 47.34 degrees

static const RotMatrix &posToRect()

Earth and Sun position related data

static Double WGS84(uInt which)

Position related routines

static const Euler &polarMotion(Double ut)

Polar motion related routines

static Double dUT1(Double utc)

Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    UT1-UTC (in s) for MJD tai TAI

    static Double dTAI(Double tai=0.0)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    TDT-TAI (in s) for MJD tai TAI. Note this is equal to TT2000-TAI

    static Double dTDT(Double ut1)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    TDB-TDT (in s) for MJD ut1 UT1

    static Double dTDB(Double tai)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    TCB-TDB (in s) for MJD tai TAI

    static Double dTCG(Double tai)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    TCG-TT (in s) for MJD tai TAI

    static Double GMST0(Double ut1)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    GMST1 at MJD ut1 UT1

    static Double GMST00(Double ut1, Double tt)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    GMST (IAU2000) including the ERA (IAU2000 Earth Rotation Angle) in rad

    static Double ERA00(Double ut1)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    Earth Rotation Angle (IAU2000) in rad

    static Double sprime00(Double tt)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    s' (IAU2000) in rad (approximate value)

    static Double GMUT0(Double gmst1)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    UT1 at GMSD gmst1 GMST1

    static Double UTtoST(Double ut1)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    Ratio UT1/MST at MJD ut1 UT1

    static Double dUTC(Double utc)

    Time related routines

  • HIGH, WARNING given if correction not obtainable

    Thrown Exceptions

    MeasTable()

    Default constructor, NOT defined

    MeasTable &operator=(const MeasTable &other)

    Copy assign, NOT defined

    static void calcPrecesCoef(Double T, Polynomial<Double> result[3], const Double coeff[3][6])
    static void calcPrecesCoef2000(Polynomial<Double> result[3], const Double coeff[3][6])

    Destructor, NOT defined and not declared to stop warning ~MeasTable();

    Calculate precessionCoef

    static void calcFundArg(Bool &need, Polynomial<Double> result[6], const Double coeff[6][4])
    static void calcFundArg00(Bool &need, Polynomial<Double> result[6], const Double coeff[6][5])
    static void calcPlanArg00(Bool &need, Polynomial<Double> result[14], const Double coeff[8][2])

    Calculate fundArg

    static void calcMulArg(Bool &need, Vector<Char> result[], const Char coeff[][5], Int row)
    static void calcMulPlanArg(Bool &need, Vector<Char> result[], const Char coeff[][14], Int row)

    Calculate mulArg

    static void calcMulSC(Bool &need, Double &check, Double T, Vector<Double> result[], Int resrow, Polynomial<Double> poly[], const Long coeffTD[][5], Int TDrow, const Short coeffSC[][2])
    static void calcMulSC2000(Bool &need, Double &check, Double T, Vector<Double> result[], uInt resrow, Polynomial<Double> poly[], const Long coeffSC[][6])
    static void calcMulSCPlan(Bool &need, Vector<Double> result[], uInt resrow, const Short coeffSC[][4])
    static void calcMulSCPlan(Bool &need, Vector<Double> result[], uInt resrow, const Double coeffSC[][2])

    Aipsrc registration (for speed) of use of iau2000 and if so the 2000a version