ParAngleMachine.h

Classes

ParAngleMachine -- Converts a direction into parallactic angle (full description)

class ParAngleMachine

Interface

Public Members
ParAngleMachine()
ParAngleMachine(const MDirection &in)
ParAngleMachine(const ParAngleMachine &other)
ParAngleMachine &operator=(const ParAngleMachine &other)
~ParAngleMachine()
Quantum<Vector<Double> > operator()(const Quantum<Vector<Double> > &ep) const
Quantum<Vector<Double> > operator()(const Vector<MVEpoch> &ep) const
Quantum<Vector<Double> > operator()(const Vector<MEpoch> &ep) const
Quantum<Double> operator()(const Quantum<Double> &ep) const
Quantum<Double> operator()(const MVEpoch &ep) const
Quantum<Double> operator()(const MEpoch &ep) const
Double operator()(const Double &ep) const
Vector<Double> operator()(const Vector<Double> &ep) const
void set(const MDirection &in)
void set(const MeasFrame &frame)
void setInterval(const Double ttime)
Private Members
Double posAngle(const Quantum<Double> &ep) const
Vector<Double> posAngle(const Quantum<Vector<Double> > &ep) const
Double posAngle(const Double &ep) const
Vector<Double> posAngle(const Vector<Double> &ep) const
void init()
void initConv() const
Double calcAngle(const Double ep) const

Description

Review Status

Reviewed By:
Mark Wieringa
Date Reviewed:
2001/10/06
Programs:
Tests:

Prerequisite

Etymology

From Parallactic Angle and machinery

Synopsis

The construction of a ParAngleMachine class object creates a machine that can create parallactic angles from a series of time epochs given.

The machinery needs an input MDirection to specify the input coordinates reference direction and coordinate system. The parallactic (vertical) angle will be calculated as the angle between the vertical in the local coordinate system (Az, El) through the given direction and the pole of the J2000 coordinate system.

Tip To calculate the parallactic angle for another coordinate system pole, add the positionAngle between the J2000 system and the pole in the other coordinate system.

The machinery also needs a MeasFrame, with a position on Earth and a reference epoch. The reference time is necessary to have an epoch type.

The actual calculation of the parallactic angles is done by the operator() accepting a time or a list of times in various formats.

The machine calculates the paralaactic angle for the first time given to the machine. For subsequent times that are within a check interval, the angle is calculated assuming that only the hour angle changes within that interval. For moving objects the test interval is always forced to zero. Tests show that the machine with a zero interval is about 8 times faster than using brute force. Having an interval of an hour improves that by another factor of 4.

Tip If the parallactic angles for a series of directions have to be calculated, it is best to have separate machines for each such field.

Example


 

Motivation

To speed up parallactic angle calculations

To Do

Member Description

ParAngleMachine()

Create an empty machine. It can only be used after appropriate 'set' methods

ParAngleMachine(const MDirection &in)

Construct for the specified direction

ParAngleMachine(const ParAngleMachine &other)

Copy constructor (deep copy)

ParAngleMachine &operator=(const ParAngleMachine &other)

Copy assignments (deep copy)

~ParAngleMachine()

Quantum<Vector<Double> > operator()(const Quantum<Vector<Double> > &ep) const
Quantum<Vector<Double> > operator()(const Vector<MVEpoch> &ep) const
Quantum<Vector<Double> > operator()(const Vector<MEpoch> &ep) const
Quantum<Double> operator()(const Quantum<Double> &ep) const
Quantum<Double> operator()(const MVEpoch &ep) const
Quantum<Double> operator()(const MEpoch &ep) const
Double operator()(const Double &ep) const
Vector<Double> operator()(const Vector<Double> &ep) const

Return parallactic angles (epoch in days if given as Double)

Thrown Exceptions

void set(const MDirection &in)
void set(const MeasFrame &frame)

Will have a group of set methods (in direction; reference time; a frame; a reference time valid period

void setInterval(const Double ttime)

Set the test interval (in days) over which to use simple formula

Double posAngle(const Quantum<Double> &ep) const
Vector<Double> posAngle(const Quantum<Vector<Double> > &ep) const
Double posAngle(const Double &ep) const
Vector<Double> posAngle(const Vector<Double> &ep) const

Get position angle (Epoch is supposed to be in days if Double)

Thrown Exceptions

void init()

Initialise machinery

void initConv() const

Initialise conversion

Double calcAngle(const Double ep) const

Calculate position angle