MeasureHolder.h

Classes

MeasureHolder -- A holder for Measures to enable record conversions (full description)

class MeasureHolder : public RecordTransformable

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)

Description

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

MeasureHolder()

Creates an empty holder

MeasureHolder(const Measure &in)

Create from a Measure (copy made)

MeasureHolder(const MeasureHolder &other)

Copy a holder (copy semantics)

~MeasureHolder()

MeasureHolder &operator=(const MeasureHolder &other)

Assignment (copy semantics)

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

Check the the MeasureHolder holds the specified Measure type. Return True if if does and False otherwise.

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

Get a specific Measure from the holder (with lifetime as long as holder exists).

Thrown Exceptions

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): 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

Bool writeMV() const

Do we write MeasValues to record?

void makeMV(uInt n)

Make a block of n MeasValues

uInt nelements() const

Get number of MeasValue pointers in block

Bool setMV(uInt pos, const MeasValue &in)

Set a measvalue at position pos (False if illegal pos)

MeasValue *getMV(uInt pos) const

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

void createMV(uInt n)

Make a MeasValue block of pointers of length n