MeasureHolder.h
Classes
- MeasureHolder -- A holder for Measures to enable record conversions (full description)
Interface
- Public Members
- MeasureHolder()
- MeasureHolder(const Measure &in)
- MeasureHolder(const MeasureHolder &other)
- ~MeasureHolder()
- MeasureHolder &operator=(const MeasureHolder &other)
- Bool isEmpty() const
- Bool isMeasure() const
- Bool isMDirection() const
- Bool isMDoppler() const
- Bool isMEpoch() const
- Bool isMFrequency() const
- Bool isMPosition() const
- Bool isMRadialVelocity() const
- Bool isMBaseline() const
- Bool isMuvw() const
- Bool isMEarthMagnetic() const
- const Measure &asMeasure() const
- const MDirection &asMDirection() const
- const MDoppler &asMDoppler() const
- const MEpoch &asMEpoch() const
- const MFrequency &asMFrequency() const
- const MPosition &asMPosition() const
- const MRadialVelocity &asMRadialVelocity() const
- const MBaseline &asMBaseline() const
- const Muvw &asMuvw() const
- const MEarthMagnetic &asMEarthMagnetic() const
- virtual Bool fromRecord(String &error, const RecordInterface &in)
- virtual Bool fromString(String &error, const String &in)
- virtual Bool toRecord(String &error, RecordInterface &out) const
- Bool toType(String &error, RecordInterface &out) const
- Bool fromType(String &error, const RecordInterface &in)
- virtual const String &ident() const
- Bool writeMV() const
- void makeMV(uInt n)
- uInt nelements() const
- Bool setMV(uInt pos, const MeasValue &in)
- MeasValue *getMV(uInt pos) const
- Private Members
- Bool putType(String &error, RecordInterface &out) const
- Bool getType(String &error, const RecordInterface &in)
- Bool getType(String &error, const String &in)
- void createMV(uInt n)
Review Status
- Date Reviewed:
- yyyy/mm/dd
- Programs:
- Tests:
Prerequisite
Etymology
A Holder of general Measures
Synopsis
This class can be used to handle heterogeneous collections of Measures, e.g.
as a Vector<MeasureHolder>. With the aid of the
toRecord() and fromRecord() functions it can be used
to convert a Measure object into or from a record.
A MeasureHolder is created from a Measure, or can be empty.
Checks on the contents can be made with functions like
isMDirection and the contents can be obtained with
functions like asMDirection. It is an error to try and
retrieve a measure of the wrong type and doing so will generate an
exception (AipsError).
The MeasureHolder can, in addition to the Measure it is holding, also hold
a block of MeasValues. This is especially useful for intertask
communication (e.g. with Glish), for reasons of speed. In general the
additional values will be created when the record used to create
a Holder contains a Quantity<Vector> rather than a quantity in
the m0, m1 and/or m2 fields. The getMV() method can be used to
access the nelements() additional information. They can be
(re-)set with the setMV() method (after a possible creation
of the extra block if not already there, or of the wrong length,
with makeMV(). If any value is set they will be used in
creating records, with the first value always overwriting the actual
Measure value.
Example
TableRecord rec;
MDirection dir(MVDirection(Quantity(12.5, 'deg'), Quantity(-2, 'deg')),
MDirection::J2000);
String error; // error message
if (!MeasureHolder(dir).toRecord(error, rec)) {
cout << error << endl;
};
Record grec; // a Record
if (!MeasureHolder(dir).toRecord(error, grec)) { // make record
cout << error << endl;
};
// Note that for GlishRecords use can be made of the
// GlishRecord::to/fromrecord() methods.
Motivation
To make general conversions between Measures and records, without knowing
the actual Measure being converted.
Member Description
Creates an empty holder
Create from a Measure (copy made)
MeasureHolder(const MeasureHolder &other)
Copy a holder (copy semantics)
MeasureHolder &operator=(const MeasureHolder &other)
Assignment (copy semantics)
Check the the MeasureHolder holds the specified Measure type. Return
True if if does and False otherwise.
Get a specific Measure from the holder (with lifetime as long
as holder exists).
Thrown Exceptions
- AipsError if holder empty
- AipsError if holder contains wrong Measure
virtual Bool fromRecord(String &error, const RecordInterface &in)
virtual Bool fromString(String &error, const String &in)
Create a Measure from a record. An error message is generated, and False
returned if an invalid record is given. A valid record will return True.
A valid record contains the following fields (any additional fields are
ignored):
- type = TpString: type of Measure (direction, epoch, etc; case
insensitive)
- refer = TpString: reference type of Measure (case insensitive;
enough characters to be unique (e.g. J20, j200, utc, b1950, J2000);
unknown reference type will log an error message and translate into
the default type for the Measure.
- m0, m1, ... = TpRecord(Quantity): one or more Quantities giving
the value(s) for this Measure (e.g. longitude and latitude for a
direction). Each quantity can either be a scalar quantity or a
Quantum >.
- offset = TpRecord(Measure)--optional: an optional offset as a
Measure of the same type as the main Measure (e.g. an MEpoch for an
MEpoch)
A Measure can be created from a string. In that case the string
will only indicate the type of measure (like direction), and will
create a default measure of that given type. In essence identical
to the fromType() method.
Error messages are postfixed to error.
virtual Bool toRecord(String &error, RecordInterface &out) const
Create a record from a Measure. The return will be False and an error
message generated only if the MeasureHolder does not contain a Measure.
Error messages are postfixed to error.
Bool toType(String &error, RecordInterface &out) const
Bool fromType(String &error, const RecordInterface &in)
Create a default Measure or a record with only a type from a Measure
virtual const String &ident() const
Get identification of record
Do we write MeasValues to record?
void makeMV(uInt n)
Make a block of n MeasValues
Get number of MeasValue pointers in block
Set a measvalue at position pos (False if illegal pos)
Get a pointer to a MeasValue (or 0)
Bool putType(String &error, RecordInterface &out) const
Bool getType(String &error, const RecordInterface &in)
Bool getType(String &error, const String &in)
Aid for to/from Record, String and Type
Make a MeasValue block of pointers of length n