The TableMeasures system exists to provide a way of creating (defining) Measure and Quantum Table columns thus enabling the direct storage of Quanta and Measures in Aips++ Tables.
Defining Quantum and Measure columns is a once only operation (for each
column). It can be seen as an extension to the existing Column Descriptor
mechanism which adds a column of a specified type to a table. The
Once defined, Measure and Quantum column objects are used to access a
column for reading and writing of Measures and Quanta. For Quantum
column objects see the classes
The performance of the TableMeasures classes depends on how the
measures are stored; thus if a fixed or variable offset and reference
are used.
Of course, it also depends on whether the measures have to be
converted before they can be stored.
In a test putting an array of quanta using class
ArrayQuantColumn took
about 5 times as long as doing it directly using class
ArrayColumn. The quantum column
had variable units. so for each row the unit had to be written as well.
Reading it back took about 3 times as long.
Conversions
The classes accessing the data use the underlying
Quanta or
Measures classes to convert
the units or references of the measures or quanta.
The TableMeasures classes do not test if a conversion is possible.
In general one can say that about every unit conversion is possible.
The Unit class adjusts units as needed.
Conversions of Measures are only possible if enough information
is supplied for the measure's reference.
Take a look at the abovementioned modules to find out about conversions.
Performance
Using the TableMeasures classes makes it easier to deal with
measures in tables. However, there is a performance penalty
compared to handling the values directly in the table using
the Tables classes ScalarColumn
and ArrayColumn.
The TableMeasures classes are always slower than the Tables classes,
but they offer more convenience.
In general one can say that for large tables it is better to use
the Tables classes directly to put/get the data.
However, even when putting directly using the Tables classes, the
column itself should be defined as a TableMeasure. In that way there
is one standard way of defining columns as table measures.
For example, the TIME column in a MeasurementSet should be handled
directly uisng the Tables classes (because it is so large).
On the other hand, the FIELD table is very small and it may make life
easier to handle its columns through the TableMeasures classes.
When using a qunatum column with fixed units, putting took about
2.5 times as long as using ArrayColumn directly.
Each put involved a unit conversion.
Reading it back took only 10% more than when using ArrayColumn.
Motivation
The standard Aips++ Table system does not directly support Quantum and
Measure columns. These classes overcome this limitation.
Classes