Precession.h

Classes

Precession -- Precession class and calculations (full description)

class Precession

Types

enum PrecessionTypes

NONE
IAU1976
B1950
IAU2000
IAU2000A = IAU2000,IAU2000B=IAU2000,

Interface

Public Members
Precession()
Precession(const Precession &other)
explicit Precession(PrecessionTypes type, Double catepoch=0)
Precession &operator=(const Precession &other)
~Precession()
const Euler &operator()(Double epoch)
const Euler &derivative(Double epoch)
void init()
void init(PrecessionTypes type, Double catepoch=0)
void refresh()
Private Members
void copy(const Precession &other)
void fillEpoch()
void calcPrec(Double t)

Description

Prerequisite

Etymology

Precession

Synopsis

Precession forms the class for precession 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.precession.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::MJD1950 or the actual MJD), leading to the following constructors: Actual precession for a certain Epoch (TT for IAU2000) is calculated by the () operator as Precession(epoch), with epoch Double MJD. Values returned as an Euler. The derivative (d-1) can be obtained as well by derivative(epoch).
A Precession 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
	Precession mine(Precession::IAU1976);	// define precession type
	RotMatrix rotat(mine(45837.0));		// rotation matrix for 84/05/17
	MVDirection new = rotat*pos;		// apply precession
	rotat = RotMatrix(mine(45839.0));       // interpolate new precession
						// assuming d_interval set large

Motivation

To calculate the precession 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 PrecessionTypes

Types of known precession calculations (at 1995/09/04 STANDARD == IAU1976), from 2004/01/01 will be IAU2000)

Precession()

Default constructor, generates default J2000 precession identification

Precession(const Precession &other)

Copy constructor (deep copy)

explicit Precession(PrecessionTypes type, Double catepoch=0)

Constructor with epoch in Julian days

Precession &operator=(const Precession &other)

Copy assignment (deep copy)

~Precession()

const Euler &operator()(Double epoch)

Return the precession angles (for IAU2000 including the IAU 2000 corrections) at the specified epoch (in MJD; TT for IAU2000).

const Euler &derivative(Double epoch)

Return derivative of precession (d-1)

void init()
void init(PrecessionTypes type, Double catepoch=0)

Re-initialise Precession object

void refresh()

Refresh calculations

void copy(const Precession &other)

Make a copy

void fillEpoch()

Create correct default fixedEpoch and catalogue epoch data

void calcPrec(Double t)

Calculate precession angles for time t