# Package org.jastronomy.jsofa

package org.jastronomy.jsofa
This software is a translation of the official C SOFA software package. http://www.iausofa.org/. The translation was done by hand with the intention of retaining the structure of the original software as far as possible. This means that the original JSOFA C functions are translated to static member functions of the main `JSOFA` class. The translation was originally made from the 2010-12-01 release of the JSOFA Library for ANSI C. Any updates to this software have been be made by incremental changes in the original source. The current software (version @value org.jastronomy.jsofa.JSOFA#JSOFA_RELEASE}) is based on SOFA version "2023-10-11" revision "19" This javadoc provides a detailed manual on how to use each function - there are also some cookbooks on the IAU SOFA site which can also be used to discover how to use the library bearing in mind the changes outlined below.

Notable API changes from the original include:

- function names begin with the prefix "jau" rather than "iau"
- many of the original SOFA routines return multiple values via pointers - the java translation achieves this by returning composite objects (e.g. `JSOFA.jauEpb2jd(double)` which uses `JSOFA.JulianDate` as the function return value), or a single array (e.g. `JSOFA.jauC2i06a(double, double)` ), however in some cases where the original was returning several arrays (that must be supplied in an empty form on calling), that pattern has been retained in the java version.
- introduced simple `JSOFAException` and children instead of the status return value.
- the test routines use the JUnit framework.

There are a number of features of the java translation

- The "functions" of the library are all static member functions of `JSOFA`
- Class data members are typically publicly visible and no accessors are used - This makes the library code more "C"-like

## List of Routines Grouped by functionality

### Calendars

`JSOFA.jauCal2jd(int, int, int)` Gregorian calendar to Julian Day number
`JSOFA.jauEpb(double, double)` Julian Date to Besselian Epoch
`JSOFA.jauEpb2jd(double)` Besselian Epoch to Julian Date
`JSOFA.jauEpj(double, double)` Julian Date to Julian Epoch
`JSOFA.jauEpj2jd(double)` Julian Epoch to Julian Date
`JSOFA.jauJd2cal(double, double)` Julian Date to Gregorian year, month, day, fraction
`JSOFA.jauJdcalf(int, double, double, int[])` Julian Date to Gregorian date for formatted output

### Astrometry

`JSOFA.jauAb(double[], double[], double, double)` Apply stellar aberration
`JSOFA.jauApcg(double, double, double[][], double[], JSOFA.Astrom)` prepare for ICRS <-> GCRS, geocentric, special
`JSOFA.jauApcg13(double, double, JSOFA.Astrom)` prepare for ICRS <-> GCRS, geocentric
`JSOFA.jauApci(double, double, double[][], double[], double, double, double, JSOFA.Astrom)` prepare for ICRS <-> CIRS, terrestrial, special
`JSOFA.jauApci13(double, double, JSOFA.Astrom)` prepare for ICRS <-> CIRS, terrestrial
`JSOFA.jauApco(double, double, double[][], double[], double, double, double, double, double, double, double, double, double, double, double, double, JSOFA.Astrom)` prepare for ICRS <-> observed, terrestrial, special
`JSOFA.jauApco13(double, double, double, double, double, double, double, double, double, double, double, double, JSOFA.Astrom)` prepare for ICRS <-> observed, terrestrial
`JSOFA.jauApcs(double, double, double[][], double[][], double[], JSOFA.Astrom)` prepare for ICRS <-> CIRS, space, special
`JSOFA.jauApcs13(double, double, double[][], JSOFA.Astrom)` prepare for ICRS <-> CIRS, space
`JSOFA.jauAper(double, JSOFA.Astrom)` insert ERA into context
`JSOFA.jauAper13(double, double, JSOFA.Astrom)` update context for Earth rotation
`JSOFA.jauApio(double, double, double, double, double, double, double, double, double, JSOFA.Astrom)` prepare for CIRS <-> observed, terrestrial, special
`JSOFA.jauApio13(double, double, double, double, double, double, double, double, double, double, double, double, JSOFA.Astrom)` prepare for CIRS <-> observed, terrestrial
`JSOFA.jauAtcc13(double, double, double, double, double, double, double, double)` catalog -> ICRS
`JSOFA.jauAtccq(double, double, double, double, double, double, JSOFA.Astrom)` quick catalog -> ICRS
`JSOFA.jauAtci13(double, double, double, double, double, double, double, double)` catalog -> CIRS
`JSOFA.jauAtciq(double, double, double, double, double, double, JSOFA.Astrom)` quick ICRS -> CIRS
`JSOFA.jauAtciqn(double, double, double, double, double, double, JSOFA.Astrom, int, JSOFA.Ldbody[])` quick ICRS -> CIRS, multiple deflections
`JSOFA.jauAtciqz(double, double, JSOFA.Astrom)` quick astrometric ICRS -> CIRS
`JSOFA.jauAtco13(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)` ICRS -> observed
`JSOFA.jauAtic13(double, double, double, double)` CIRS -> ICRS
`JSOFA.jauAticq(double, double, JSOFA.Astrom)` quick CIRS -> ICRS
`JSOFA.jauAtciqn(double, double, double, double, double, double, JSOFA.Astrom, int, JSOFA.Ldbody[])` quick CIRS -> ICRS, multiple deflections
`JSOFA.jauAtio13(double, double, double, double, double, double, double, double, double, double, double, double, double, double)` CIRS -> observed
`JSOFA.jauAtioq(double, double, JSOFA.Astrom)` quick CIRS -> observed
`JSOFA.jauAtoc13(String, double, double, double, double, double, double, double, double, double, double, double, double, double, double)` observed -> astrometric ICRS
`JSOFA.jauAtoi13(String, double, double, double, double, double, double, double, double, double, double, double, double, double, double)` observed -> CIRS
`JSOFA.jauAtoiq(String, double, double, JSOFA.Astrom)` quick observed -> CIRS
`JSOFA.jauLd(double, double[], double[], double[], double, double)` light deflection by a single solar-system body
`JSOFA.jauLdn(int, JSOFA.Ldbody[], double[], double[])` light deflection by multiple solar-system bodies
`JSOFA.jauLdsun(double[], double[], double)` light deflection by the Sun
`JSOFA.jauPmpx(double, double, double, double, double, double, double, double[])` apply proper motion and parallax
`JSOFA.jauPmsafe(double, double, double, double, double, double, double, double, double, double)` apply proper motion, with zero-parallax precautions
`JSOFA.jauPvtob(double, double, double, double, double, double, double)` observatory position and velocity
`JSOFA.jauPvstar(double[][])` space motion pv-vector to star catalog data
`JSOFA.jauRefco(double, double, double, double)` refraction constants
`JSOFA.jauStarpm(double, double, double, double, double, double, double, double, double, double)` apply proper motion
`JSOFA.jauStarpv(double, double, double, double, double, double, double[][])` star catalog data to space motion pv-vector

### Ecliptic coordinates

`JSOFA.jauEceq06(double, double, double, double)` ecliptic to ICRS, IAU 2006
`JSOFA.jauEcm06(double, double)` rotation matrix, ICRS to ecliptic, IAU 2006
`JSOFA.jauEqec06(double, double, double, double)` ICRS to ecliptic, IAU 2006
`JSOFA.jauLteceq(double, double, double)` ecliptic to ICRS, long term
`JSOFA.jauLtecm(double)` rotation matrix, ICRS to ecliptic, long-term
`JSOFA.jauLteqec(double, double, double)` ICRS to ecliptic, long term

### Galactic

`JSOFA.jauG2icrs(double, double)` Transformation from Galactic Coordinates to ICRS
`JSOFA.jauIcrs2g(double, double)` Transformation from ICRS to Galactic Coordinates

### Time scales

`JSOFA.jauD2dtf(String, int, double, double)` format 2-part JD for output
`JSOFA.jauDat(int, int, int, double)` Delta(AT) (=TAI-UTC) for a given UTC date
`JSOFA.jauDtdb(double, double, double, double, double, double)` TDB-TT
`JSOFA.jauDtf2d(String, int, int, int, int, int, double)` encode time and date fields into 2-part JD
`JSOFA.jauTaitt(double, double)` TAI to TT
`JSOFA.jauTaiut1(double, double, double)` TAI to UT1
`JSOFA.jauTaiutc(double, double)` TAI to UTC
`JSOFA.jauTcbtdb(double, double)` TCB to TDB
`JSOFA.jauTcgtt(double, double)` TCG to TT
`JSOFA.jauTdbtcb(double, double)` TDB to TCB
`JSOFA.jauTdbtt(double, double, double)` TDB to TT
`JSOFA.jauTttai(double, double)` TT to TAI
`JSOFA.jauTttcg(double, double)` TT to TCG
`JSOFA.jauTttdb(double, double, double)` TT to TDB
`JSOFA.jauTtut1(double, double, double)` TT to UT1
`JSOFA.jauUt1tai(double, double, double)` UT1 to TAI
`JSOFA.jauUt1tt(double, double, double)` UT1 to TT
`JSOFA.jauUt1utc(double, double, double)` UT1 to UTC
`JSOFA.jauUtctai(double, double)` UTC to TAI
`JSOFA.jauUtcut1(double, double, double)` UTC to UT1

### Earth rotation angle and sidereal time

`JSOFA.jauEe00(double, double, double, double)` equation of the equinoxes, IAU 2000
`JSOFA.jauEe00a(double, double)` equation of the equinoxes, IAU 2000A
`JSOFA.jauEe00b(double, double)` equation of the equinoxes, IAU 2000B
`JSOFA.jauEe06a(double, double)` equation of the equinoxes, IAU 2006/2000A
`JSOFA.jauEect00(double, double)` equation of the equinoxes complementary terms, IAU 2000
`JSOFA.jauEqeq94(double, double)` equation of the equinoxes, IAU 1994
`JSOFA.jauEra00(double, double)` Earth rotation angle, IAU 2000
`JSOFA.jauGmst00(double, double, double, double)` Greenwich mean sidereal time, IAU 2000
`JSOFA.jauGmst06(double, double, double, double)` Greenwich mean sidereal time, IAU 2006
`JSOFA.jauGmst82(double, double)` Greenwich mean sidereal time, IAU 1982
`JSOFA.jauGst00a(double, double, double, double)` Greenwich apparent sidereal time, IAU 2000A
`JSOFA.jauGst00b(double, double)` Greenwich apparent sidereal time, IAU 2000B
`JSOFA.jauGst06(double, double, double, double, double[][])` Greenwich apparent ST, IAU 2006, given NPB matrix
`JSOFA.jauGst06a(double, double, double, double)` Greenwich apparent sidereal time, IAU 2006/2000A
`JSOFA.jauGst94(double, double)` Greenwich apparent sidereal time, IAU 1994

### Ephemerides (limited precision)

`JSOFA.jauEpv00(double, double, double[][], double[][])` Earth position and velocity
`JSOFA.jauMoon98(double, double)` moon position and velocity
`JSOFA.jauPlan94(double, double, int)` major-planet position and velocity

### Precession, nutation, polar motion

`JSOFA.jauBi00()` frame bias components, IAU 2000
`JSOFA.jauBp00(double, double, double[][], double[][], double[][])` frame bias and precession matrices, IAU 2000
`JSOFA.jauBp06(double, double, double[][], double[][], double[][])` frame bias and precession matrices, IAU 2006
`JSOFA.jauBpn2xy(double[][])` extract CIP X,Y coordinates from NPB matrix
`JSOFA.jauC2i00a(double, double)` celestial-to-intermediate matrix, IAU 2000A
`JSOFA.jauC2i00b(double, double)` celestial-to-intermediate matrix, IAU 2000B
`JSOFA.jauC2i06a(double, double)` celestial-to-intermediate matrix, IAU 2006/2000A
`JSOFA.jauC2ibpn(double, double, double[][])` celestial-to-intermediate matrix, given NPB matrix, IAU 2000
`JSOFA.jauC2ixy(double, double, double, double)` celestial-to-intermediate matrix, given X,Y, IAU 2000
`JSOFA.jauC2ixys(double, double, double)` celestial-to-intermediate matrix, given X,Y and s
`JSOFA.jauC2t00a(double, double, double, double, double, double)` celestial-to-terrestrial matrix, IAU 2000A
`JSOFA.jauC2t00b(double, double, double, double, double, double)` celestial-to-terrestrial matrix, IAU 2000B
`JSOFA.jauC2t06a(double, double, double, double, double, double)` celestial-to-terrestrial matrix, IAU 2006/2000A
`JSOFA.jauC2tcio(double[][], double, double[][])` form CIO-based celestial-to-terrestrial matrix
`JSOFA.jauC2teqx(double[][], double, double[][])` form equinox-based celestial-to-terrestrial matrix
`JSOFA.jauC2tpe(double, double, double, double, double, double, double, double)` celestial-to-terrestrial matrix given nutation, IAU 2000
`JSOFA.jauC2txy(double, double, double, double, double, double, double, double)` celestial-to-terrestrial matrix given CIP, IAU 2000
`JSOFA.jauEo06a(double, double)` equation of the origins, IAU 2006/2000A
`JSOFA.jauEors(double[][], double)` equation of the origins, given NPB matrix and s
`JSOFA.jauFw2m(double, double, double, double)` Fukushima-Williams angles to r-matrix
`JSOFA.jauFw2xy(double, double, double, double)` Fukushima-Williams angles to X,Y
`JSOFA.jauLtp(double)` long-term precession matrix
`JSOFA.jauLtpb(double)` long-term precession matrix, including ICRS frame bias
`JSOFA.jauLtpecl(double)` long-term precession of the ecliptic
`JSOFA.jauLtpequ(double)` long-term precession of the equator
`JSOFA.jauNum00a(double, double)` nutation matrix, IAU 2000A
`JSOFA.jauNum00b(double, double)` nutation matrix, IAU 2000B
`JSOFA.jauNum06a(double, double)` nutation matrix, IAU 2006/2000A
`JSOFA.jauNumat(double, double, double)` form nutation matrix
`JSOFA.jauNut00a(double, double)` nutation, IAU 2000A
`JSOFA.jauNut00b(double, double)` nutation, IAU 2000B
`JSOFA.jauNut06a(double, double)` nutation, IAU 2006/2000A
`JSOFA.jauNut80(double, double)` nutation, IAU 1980
`JSOFA.jauNutm80(double, double)` nutation matrix, IAU 1980
`JSOFA.jauObl06(double, double)` mean obliquity, IAU 2006
`JSOFA.jauObl80(double, double)` mean obliquity, IAU 1980
`JSOFA.jauPb06(double, double)` zeta,z,theta precession angles, IAU 2006, including bias
`JSOFA.jauPfw06(double, double)` bias-precession Fukushima-Williams angles, IAU 2006
`JSOFA.jauPmat00(double, double)` precession matrix (including frame bias), IAU 2000
`JSOFA.jauPmat06(double, double)` PB matrix, IAU 2006
`JSOFA.jauPmat76(double, double)` precession matrix, IAU 1976
`JSOFA.jauPn00(double, double, double, double)` bias/precession/nutation results, IAU 2000
`JSOFA.jauPn00a(double, double)` bias/precession/nutation, IAU 2000A
`JSOFA.jauPn00b(double, double)` bias/precession/nutation, IAU 2000B
`JSOFA.jauPn06(double, double, double, double)` bias/precession/nutation results, IAU 2006
`JSOFA.jauPn06a(double, double)` bias/precession/nutation results, IAU 2006/2000A
`JSOFA.jauPnm00a(double, double)` classical NPB matrix, IAU 2000A
`JSOFA.jauPnm00b(double, double)` classical NPB matrix, IAU 2000B
`JSOFA.jauPnm06a(double, double)` classical NPB matrix, IAU 2006/2000A
`JSOFA.jauPnm80(double, double)` precession/nutation matrix, IAU 1976/1980
`JSOFA.jauP06e(double, double)` precession angles, IAU 2006, equinox based
`JSOFA.jauPom00(double, double, double)` polar motion matrix
`JSOFA.jauPr00(double, double)` IAU 2000 precession adjustments
`JSOFA.jauPrec76(double, double, double, double)` accumulated precession angles, IAU 1976
`JSOFA.jauS00(double, double, double, double)` the CIO locator s, given X,Y, IAU 2000A
`JSOFA.jauS00a(double, double)` the CIO locator s, IAU 2000A
`JSOFA.jauS00b(double, double)` the CIO locator s, IAU 2000B
`JSOFA.jauS06(double, double, double, double)` the CIO locator s, given X,Y, IAU 2006
`JSOFA.jauS06a(double, double)` the CIO locator s, IAU 2006/2000A
`JSOFA.jauSp00(double, double)` the TIO locator s', IERS 2003
`JSOFA.jauXy06(double, double)` CIP, IAU 2006/2000A, from series
`JSOFA.jauXys00a(double, double)` CIP and s, IAU 2000A
`JSOFA.jauXys00b(double, double)` CIP and s, IAU 2000B
`JSOFA.jauXys06a(double, double)` CIP and s, IAU 2006/2000A

### Fundamental arguments for nutation etc.

`JSOFA.jauFad03(double)` mean elongation of the Moon from the Sun
`JSOFA.jauFae03(double)` mean longitude of Earth
`JSOFA.jauFaf03(double)` mean argument of the latitude of the Moon
`JSOFA.jauFaju03(double)` mean longitude of Jupiter
`JSOFA.jauFal03(double)` mean anomaly of the Moon
`JSOFA.jauFalp03(double)` mean anomaly of the Sun
`JSOFA.jauFama03(double)` mean longitude of Mars
`JSOFA.jauFame03(double)` mean longitude of Mercury
`JSOFA.jauFane03(double)` mean longitude of Neptune
`JSOFA.jauFaom03(double)` mean longitude of the Moon's ascending node
`JSOFA.jauFapa03(double)` general accumulated precession in longitude
`JSOFA.jauFasa03(double)` mean longitude of Saturn
`JSOFA.jauFaur03(double)` mean longitude of Uranus
`JSOFA.jauFave03(double)` mean longitude of Venus

### Star catalog conversions

`JSOFA.jauFk52h(double, double, double, double, double, double)` transform FK5 star data into the Hipparcos system
`JSOFA.jauFk5hip(double[][], double[])` FK5 to Hipparcos rotation and spin
`JSOFA.jauFk5hz(double, double, double, double)` FK5 to Hipparcos assuming zero Hipparcos proper motion
`JSOFA.jauH2fk5(double, double, double, double, double, double)` transform Hipparcos star data into the FK5 system
`JSOFA.jauHfk5z(double, double, double, double)` Hipparcos to FK5 assuming zero Hipparcos proper motion
`JSOFA.jauFk425(double, double, double, double, double, double)` convert B1950.0 FK4 star catalog data to J2000.0 FK5
`JSOFA.jauFk45z(double, double, double)` convert a B1950.0 FK4 star position to J2000.0 FK5, assuming zero proper motion in the FK5 system
`JSOFA.jauFk524(double, double, double, double, double, double)` convert J2000.0 FK5 star catalog data to B1950.0 FK4
`JSOFA.jauFk54z(double, double, double)` convert a J2000.0 FK5 star position to B1950.0 FK4, assuming zero proper motion in FK5 system and zero parallax

### Geodetic/geocentric

`JSOFA.jauEform(int)` a,f for a nominated Earth reference ellipsoid
`JSOFA.jauGc2gd(int, double[])` geocentric to geodetic for a nominated ellipsoid
`JSOFA.jauGc2gde(double, double, double[])` geocentric to geodetic given ellipsoid a,f
`JSOFA.jauGd2gc(int, double, double, double)` geodetic to geocentric for a nominated ellipsoid
`JSOFA.jauGd2gce(double, double, double, double, double)` geodetic to geocentric given ellipsoid a,f

## OPERATIONS INVOLVING P-VECTORS AND R-MATRICES

### Initialize

`JSOFA.jauZp(double[])` zero p-vector
`JSOFA.jauZr(double[][])` initialize r-matrix to null
`JSOFA.jauIr(double[][])` initialize r-matrix to identity

### Copy/extend/extract

`JSOFA.jauCp(double[], double[])` copy p-vector
`JSOFA.jauCr(double[][], double[][])` copy r-matrix

### Build rotations

`JSOFA.jauRx(double, double[][])` rotate r-matrix about x
`JSOFA.jauRy(double, double[][])` rotate r-matrix about y
`JSOFA.jauRz(double, double[][])` rotate r-matrix about z

### Spherical/Cartesian conversions

`JSOFA.jauS2c(double, double)` spherical to unit vector
`JSOFA.jauC2s(double[])` unit vector to spherical
`JSOFA.jauS2p(double, double, double)` spherical to p-vector
`JSOFA.jauP2s(double[])` p-vector to spherical

### Operations on vectors

`JSOFA.jauPpp(double[], double[])` p-vector plus p-vector
`JSOFA.jauPmp(double[], double[])` p-vector minus p-vector
`JSOFA.jauPpsp(double[], double, double[])` p-vector plus scaled p-vector
`JSOFA.jauPdp(double[], double[])` inner (=scalar=dot) product of two p-vectors
`JSOFA.jauPxp(double[], double[])` outer (=vector=cross) product of two p-vectors
`JSOFA.jauPm(double[])` modulus of p-vector
`JSOFA.jauPn(double[])` normalize p-vector returning modulus
`JSOFA.jauSxp(double, double[])` multiply p-vector by scalar

### Operations on matrices

`JSOFA.jauRxr(double[][], double[][])` r-matrix multiply
`JSOFA.jauTr(double[][])` transpose r-matrix

### Matrix-vector products

`JSOFA.jauRxp(double[][], double[])` product of r-matrix and p-vector
`JSOFA.jauTrxp(double[][], double[])` product of transpose of r-matrix and p-vector

### Separation and position-angle

`JSOFA.jauSepp(double[], double[])` angular separation from p-vectors
`JSOFA.jauSeps(double, double, double, double)` angular separation from spherical coordinates
`JSOFA.jauPap(double[], double[])` position-angle from p-vectors
`JSOFA.jauPas(double, double, double, double)` position-angle from spherical coordinates

### Rotation vectors

`JSOFA.jauRv2m(double[])` r-vector to r-matrix
`JSOFA.jauRm2v(double[][])` r-matrix to r-vector

## OPERATIONS INVOLVING PV-VECTORS

### Initialize

`JSOFA.jauZpv(double[][])` zero pv-vector

### Copy/extend/extract

`JSOFA.jauCpv(double[][], double[][])` copy pv-vector
`JSOFA.jauP2pv(double[])` append zero velocity to p-vector
`JSOFA.jauPv2p(double[][])` discard velocity component of pv-vector

### Spherical/Cartesian conversions

`JSOFA.jauS2pv(double, double, double, double, double, double)` spherical to pv-vector
`JSOFA.jauPv2s(double[][])` pv-vector to spherical

### Operations on vectors

`JSOFA.jauPvppv(double[][], double[][])` pv-vector plus pv-vector
`JSOFA.jauPvmpv(double[][], double[][])` pv-vector minus pv-vector
`JSOFA.jauPvdpv(double[][], double[][])` inner (=scalar=dot) product of two pv-vectors
`JSOFA.jauPvxpv(double[][], double[][])` outer (=vector=cross) product of two pv-vectors
`JSOFA.jauPvm(double[][])` modulus of pv-vector
`JSOFA.jauSxpv(double, double[][])` multiply pv-vector by scalar
`JSOFA.jauS2xpv(double, double, double[][])` multiply pv-vector by two scalars
`JSOFA.jauPvu(double, double[][])` update pv-vector
`JSOFA.jauPvup(double, double[][])` update pv-vector discarding velocity

### Matrix-vector products

`JSOFA.jauRxpv(double[][], double[][])` product of r-matrix and pv-vector
`JSOFA.jauTrxpv(double[][], double[][])` product of transpose of r-matrix and pv-vector

### OPERATIONS ON ANGLES

`JSOFA.jauAnp(double)` normalize radians to range 0 to 2pi
`JSOFA.jauAnpm(double)` normalize radians to range -pi to +pi
`JSOFA.jauA2tf(int, double, int[])` decompose radians into hms
`JSOFA.jauA2af(int, double, int[])` decompose radians into d ' "
`JSOFA.jauD2tf(int, double, int[])` decompose days into hms

### Gnomonic projection

`JSOFA.jauTpors(double, double, double, double)` solve for tangent point, spherical
`JSOFA.jauTporv(double, double, double[])` solve for tangent point, vector
`JSOFA.jauTpsts(double, double, double, double)` deproject tangent plane to celestial, spherical
`JSOFA.jauTpstv(double, double, double[])` deproject tangent plane to celestial, vector
`JSOFA.jauTpxes(double, double, double, double)` project celestial to tangent plane, spherical
`JSOFA.jauTpxev(double[], double[])` project celestial to tangent plane, vector

### Horizon/equatorial

`JSOFA.jauAe2hd(double, double, double)` (azimuth, altitude) to (hour angle, declination)
`JSOFA.jauHd2ae(double, double, double)` (hour angle, declination) to (azimuth, altitude)
`JSOFA.jauHd2pa(double, double, double)` parallactic angle

Since:
  February 2010
Author:
  Paul Harrison (paul.harrison@manchester.ac.uk) 1 Feb 2010

       Copyright © 2019 Paul Harrison, University of Manchester.

       This JSOFA software is derived from the official C release of the "Standards Of Fundamental Astronomy" (SOFA) library
       of the International Astronomical Union. The intention is to reproduce the functionality and algorithms of
       the official SOFA library in a pure Java form.

       The responsibility for the maintenance and supply of the JSOFA library lies with the author (not the IAU SOFA Board).
       However, The JSOFA software is provided "as is" and the author makes no warranty as to its use or performance.
       The author does not and cannot warrant the performance or results which the user may obtain by using the JSOFA software.
       The author makes no warranties, express or implied, as to non-infringement of third party rights, merchantability,
       or fitness for any particular purpose. In no event will the author be liable to the user for any consequential,
       incidental, or special damages, including any lost profits or lost savings, even if the author has been advised
       of such damages, or for any claim by any third party.

       Other conditions of the original license (reproduced below) are carried over as applicable.

      +----------------------------------------------------------------------

        Copyright (C) 2019
        Standards Of Fundamental Astronomy Board
        of the International Astronomical Union.

        =====================
        SOFA Software License
        =====================

        NOTICE TO USER:

        BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
        CONDITIONS WHICH APPLY TO ITS USE.

        1. The Software is owned by the IAU SOFA Board ("SOFA").

        2. Permission is granted to anyone to use the SOFA software for any
           purpose, including commercial applications, free of charge and
           without payment of royalties, subject to the conditions and
           restrictions listed below.

        3. You (the user) may copy and distribute SOFA source code to others,
           and use and adapt its code and algorithms in your own software,
           on a world-wide, royalty-free basis.  That portion of your
           distribution that does not consist of intact and unchanged copies
           of SOFA source code files is a "derived work" that must comply
           with the following requirements:

           a) Your work shall be marked or carry a statement that it
              (i) uses routines and computations derived by you from
              software provided by SOFA under license to you; and
              (ii) does not itself constitute software provided by and/or
              endorsed by SOFA.

           b) The source code of your derived work must contain descriptions
              of how the derived work is based upon, contains and/or differs
              from the original SOFA software.

           c) The names of all routines in your derived work shall not
              include the prefix "iau" or "sofa" or trivial modifications
              thereof such as changes of case.

           d) The origin of the SOFA components of your derived work must
              not be misrepresented;  you must not claim that you wrote the
              original software, nor file a patent application for SOFA
              software or algorithms embedded in the SOFA software.

           e) These requirements must be reproduced intact in any source
              distribution and shall apply to anyone to whom you have
              granted a further right to modify the source code of your
              derived work.

           Note that, as originally distributed, the SOFA software is
           intended to be a definitive implementation of the IAU standards,
           and consequently third-party modifications are discouraged.  All
           variations, no matter how minor, must be explicitly marked as
           such, as explained above.

        4. You shall not cause the SOFA software to be brought into
           disrepute, either by misuse, or use for inappropriate tasks, or
           by inappropriate modification.

        5. The SOFA software is provided "as is" and SOFA makes no warranty
           as to its use or performance.   SOFA does not and cannot warrant
           the performance or results which the user may obtain by using the
           SOFA software.  SOFA makes no warranties, express or implied, as
           to non-infringement of third party rights, merchantability, or
           fitness for any particular purpose.  In no event will SOFA be
           liable to the user for any consequential, incidental, or special
           damages, including any lost profits or lost savings, even if a
           SOFA representative has been advised of such damages, or for any
           claim by any third party.

        6. The provision of any version of the SOFA software under the terms
           and conditions specified herein does not imply that future
           versions will also be made available under the same terms and
           conditions.

        In any published work or commercial product which uses the SOFA
        software directly, acknowledgement (see www.iausofa.org) is
        appreciated.

        Correspondence concerning SOFA software should be addressed as
        follows:

            By email:  sofa@ukho.gov.uk
            By post:   IAU SOFA Center
                       HM Nautical Almanac Office
                       UK Hydrographic Office
                       Admiralty Way, Taunton
                       Somerset, TA1 2DN
                       United Kingdom

      -----------------------------------------------------------------------

Class
Description
JSOFA
Java implementation of Standards of Fundamental Astronomy.
JSOFA.Astrom
Star-independent astrometry parameters.
JSOFA.Calendar
Representation of Gregorian Calendar with fractional day.
JSOFA.CalendarHMS
Representation of Gregorian Calendar with integer hours minutes and seconds.
JSOFA.CatalogCoords
Typical catalogue coordinates.
JSOFA.CelestialIntermediatePole
The components x,y are components of the Celestial Intermediate Pole unit vector in the Geocentric Celestial Reference System.
JSOFA.EquatorialCoordinate
Position consisting of (ha, declination) pairs in radians.
JSOFA.EulerAngles
Euler Angles.
JSOFA.FrameBias
Frame bias components of IAU 2000 precession-nutation models.
JSOFA.FWPrecessionAngles
Precession angles, IAU 2006 (Fukushima-Williams 4-angle formulation).
JSOFA.GeodeticCoord
Geodetic coordinates.
JSOFA.HorizonCoordinate
Position consisting of (az, el) pairs in radians.
JSOFA.ICRFrame
The Celestial Intermediate Pole coordinates are the x,y components of the unit vector in the Geocentric Celestial Reference System.
JSOFA.JulianDate
Julian Date representation.
JSOFA.Ldbody
Body parameters for light deflection.
JSOFA.NormalizedVector
A normalized vector with r being the modulus and u[3] being the unit vector.
JSOFA.NutationTerms
Nutation Terms.
JSOFA.ObservedPosition
Observed Position.
JSOFA.ObservedPositionEO
Observed position with the equation of the origins.
JSOFA.PrecessionAngles
equinox based precession angles.
JSOFA.PrecessionDeltaTerms
Precession correction terms.
JSOFA.PrecessionNutation
Precession-nutation model.
JSOFA.PVModulus
Modulus of pv-vector.
JSOFA.RefCos
constants A and B in the atmospheric refraction model dZ = A tan Z + B tan^3 Z.
JSOFA.ReferenceEllipsoid
Reference Ellipsoid of Earth.
JSOFA.SphericalCoordinate
Position consisting of (α, δ) pairs in radians.
JSOFA.SphericalCoordinateEO
Spherical coordinate with equation of origins .
JSOFA.SphericalPosition
A position expressed in spherical polar coordinates.
JSOFA.SphericalPositionVelocity
A position and velocity expressed in spherical polar coordinates.
JSOFA.TangentPlaneCoordinate
Tangent Plane Position consisting of (xi, eta) pairs in radians.
JSOFA.TangentPointDirectionCosines
Tangent point soutions as direction cosines.
JSOFA.TangentPointSolution
Tangent point soulutions.
JSOFAException
Base class for JSOFA exceptions.
JSOFAFailedConvergenceException
Exception reporting some form of convergence failure in an algorithm.
JSOFAIllegalParameter
Various forms of illegal parameters are reported with this execption.
JSOFAInternalError
Exception signalling a internal error.