MRBase.h
Classes
- MRBase -- Base for Reference frame for physical measures (full description)
- Global Functions -- Global functions (full description)
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
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 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
the following should really be
(and should be interpreted as), but
compiler does not accept it:
Ms::Types getType();
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
- AipsError if neither reference has a frame or the proper type
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
- AipsError if wrong Measure
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
Interface
Private Members
- ostream &operator<<(ostream &os, const MRBase &meas)
Member Description
ostream &operator<<(ostream &os, const MRBase &meas)
Output declaration