Nutation.h

Classes

Nutation -- Nutation class and calculations (full description)

class Nutation

Types

enum NutationTypes

NONE
IAU1980
B1950
IAU2000A
IAU2000B
IAU2000 = IAU2000A,

Interface

Public Members
Nutation()
Nutation(const Nutation &other)
explicit Nutation(NutationTypes type)
Nutation &operator=(const Nutation &other)
~Nutation()
const Euler &operator()(Double epoch)
const Euler &derivative(Double epoch)
void init()
void init(NutationTypes type)
void refresh()
Double eqox(Double epoch)
Quantity getEqoxAngle(Double epoch)
Quantity getEqoxAngle(Double epoch, const Unit &unit)
Double derivativeEqox(Double epoch)
Double eqoxCT(Double epoch)
Double derivativeEqoxCT(Double epoch)
Private Members
void copy(const Nutation &other)
void fill()
void calcNut(Double t, Bool calcDer = False)

Description

Prerequisite

Etymology

Nutation

Synopsis

Nutation forms the class for Nutation calculations. It is a simple container with the selected method, and the mean epoch. It acts as a cache for values and their derivatives, to enable fast calculations for time epochs close together (see the aipsrc variable measures.nutation.d_interval).

The calculation method is selected from one of the following:

Epochs can be specified as the MJD (with defined constants MeasData::MJD2000 and MeasData::MJDB1950 or the actual MJD), leading to the following constructors: Actual Nutation for a certain Epoch is calculated by the () operator as Nutation(epoch), with epoch Double MJD. Values are returned as an Euler. The derivative (d-1) can be obtained as well by derivative(epoch).
A Nutation can be re-initialed with a different method and/or zero epoch with the init() functions (same format as constructors). To bypass the full calculation actual returned values are calculated using the derivative if within about 2 hours (error less than about 10-5 mas). A call to refresh() will re-initiate calculations from scratch.
The following details can be set with the Aipsrc mechanism:

Example

 #include <measures/Measures.h>
	MVDirection pos(Quantity(10,"degree"),Quantity(-10.5,"degree"));
						// direction RA=10; DEC=-10.5
	Nutation mine(Nutation::IAU1980);	// define nutation type
	RotMatrix rotat(mine(45837.0));		// rotation matrix for 84/05/17
	MVDirection new = rotat*pos;		// apply nutation
The normal way to use Nutation is by using the MeasConvert class.

Motivation

To calculate the Nutation angles. An alternate route could have been a global function, but having a simple container allows caching of some calculations for speed.
Using MJD (JD-2400000.5) rather than JD is for precision reasons.

To Do

Member Description

enum NutationTypes

Types of known Nutation calculations (at 1995/09/04 STANDARD == IAU1980, after 2004/01/01 it will be IAU2000B))

Nutation()

Default constructor, generates default J2000 Nutation identification

Nutation(const Nutation &other)

Copy constructor

explicit Nutation(NutationTypes type)

Constructor with type

Nutation &operator=(const Nutation &other)

Copy assignment

~Nutation()

const Euler &operator()(Double epoch)

Return the Nutation angles

const Euler &derivative(Double epoch)

Return derivative of Nutation (d-1)

void init()
void init(NutationTypes type)

Re-initialise Nutation object

void refresh()

Refresh calculations

Double eqox(Double epoch)
Quantity getEqoxAngle(Double epoch)
Quantity getEqoxAngle(Double epoch, const Unit &unit)

Get the equation of equinox

Double derivativeEqox(Double epoch)

Get the derivative of the equation of equinoxes in d-1

Double eqoxCT(Double epoch)

Get the complimentary terms of the equation of equinoxes

Double derivativeEqoxCT(Double epoch)

Get the derivative of the complimentary terms of the equation of equinoxes

void copy(const Nutation &other)

Make a copy

void fill()

Fill an empty copy

void calcNut(Double t, Bool calcDer = False)

Calculate Nutation angles for time t; also derivatives if True given