MRBase.h

Classes

MRBase -- Base for Reference frame for physical measures (full description)
Global Functions -- Global functions (full description)

class MRBase

Interface

Public Members
friend ostream &operator<<(ostream &os, const MRBase &meas)
virtual ~MRBase()
virtual Bool empty() const = 0
virtual uInt getType() const = 0
virtual MeasFrame &getFrame() = 0
virtual const Measure *const offset() const = 0
virtual void setType(uInt tp) = 0
virtual void set(uInt tp) = 0
virtual void set(const MeasFrame &mf) = 0
virtual void print(ostream &os) const = 0

Description

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Programs:
Tests:

Prerequisite

Etymology

From Measure and Reference and Base

Synopsis

MRBase is the abstract base class for reference frames. Reference frames are specified (see Measure) as Measure::Ref (e.g. MEpoch::Ref).

A Measure::Ref is a container for type indicators, (e.g. MDirection::J2000), an optional offset (e.g. beginning of year), and, if necessary, a MeasFrame.
A MeasFrame consists of one or more Measures specifying the reference frame (e.g. an MPosition for a sidereal time definition). A time (MEpoch) could e.g. have a type MEpoch::TAI, and an MEpoch as offset:

    MEpoch off(Quantity(40745,"d"), MEpoch::Ref(MEpoch::UTC));
    MEpoch::Ref myref(MEpoch::TAI, off);
    

It is obvious that a circular reference between Measure and Measure::Ref is possible. Therefore, each Measure has a default reference (necessary anyway to be able to start a Measure chain). For MEpoch the default is e.g. an MJD in UTC; and the default Measure for an MEpoch reference is 0.
References are copied by reference; i.e. a reference can be used in many places without overhead.
Some Measure::Ref could need additional conversion information ( example: type of Nutation calculations). They are provided by Aipsrc keywords.
All constructors are related to a specific Measure, to be able to check relations at compile time.

Example

See Measure for an example

Motivation

To gather all reference frame information in the one class.

To Do

Member Description

friend ostream &operator<<(ostream &os, const MRBase &meas)

virtual ~MRBase()

virtual Bool empty() const = 0

Check if empty reference

virtual uInt getType() const = 0

Check the type of Measure the reference can be used for:
static const String &showMe() = 0; .
Return the type of the reference
Caution the following should really be (and should be interpreted as), but compiler does not accept it:
Ms::Types getType();

virtual MeasFrame &getFrame() = 0

Return the frame of the reference

virtual const Measure *const offset() const = 0

Return the first frame which has specified information. Checking is done in argument order.

Thrown Exceptions

  static const MeasFrame &framePosition(const MRBase &ref1,
						const MRBase &ref2) = 0;
  static const MeasFrame &frameEpoch(const MRBase &ref1,
					 const MRBase &ref2) = 0;
  static const MeasFrame &frameDirection(const MRBase &ref1,
					     const MRBase &ref2) = 0;
  static const MeasFrame &frameRadialVelocity(const MRBase &ref1,
						  const MRBase &ref2) = 0;
Return the offset (or 0)

virtual void setType(uInt tp) = 0
virtual void set(uInt tp) = 0

Set the type

Thrown Exceptions

Caution the following should really be (and should be called as), but compiler does not accept it:
void set(Ms::Types tp);

virtual void set(const MeasFrame &mf) = 0

Set a new offset:
void set(const Measure &ep); Set a new frame

virtual void print(ostream &os) const = 0

Print a Measure


Global functions (source)

Interface

Private Members
ostream &operator<<(ostream &os, const MRBase &meas)

Description

Member Description

ostream &operator<<(ostream &os, const MRBase &meas)

Output declaration