- Old = 1
- New
- NewNoReplace
- Scratch
- Update
- Delete
A table description consists of the following items:
A TableDesc object can be constructed with one of the following options:
More information is provided in the Tables module documentation.
// First build the new description of a subtable. // Define columns ra and dec (double). TableDesc subTableDesc("tTableDesc_sub", "1", TableDesc::New); subTableDesc.addColumn (ScalarColumnDesc<double>("ra")); subTableDesc.addColumn (ScalarColumnDesc<double>("dec")); // Now create a new table description // Define a comment for the table description. // Define a double keyword. ColumnDesc colDesc1, colDesc2; TableDesc td("tTableDesc", "1", TableDesc::New); td.comment() = "A test of class TableDesc"; td.rwKeywordSet().define ("equinox", 1950.0); // Define an integer column ab using the TableDesc::addColumn // function which creates a scalar column description. td.addColumn (ScalarColumnDesc<Int>("ab", "Comment for column ab")); // Add a scalar integer column ac, define keywords for it // and define a default value 0. // Overwrite the value of keyword unit. ScalarColumnDesc<Int> acColumn("ac"); acColumn.rwKeywordSet().define ("scale", Complex(0.0f)); acColumn.rwKeywordSet().define ("unit", ""); acColumn.setDefault (0); td.addColumn (acColumn); td["ac"].rwKeywordSet().define ("unit", "DEG"); // Add a scalar string column ad and define its comment string. td.addColumn (ScalarColumnDesc<String>("ad","comment for ad")); // Now define array columns. // This one is indirect and has no dimensionality mentioned yet. td.addColumn (ArrayColumnDesc<Complex>("Arr1","comment for Arr1")); // This one is indirect and has 3-dim arrays. td.addColumn (ArrayColumnDesc<Int>("A2r1","comment for Arr1",3)); // This one is direct and has 2-dim arrays with axes length 4 and 7. td.addColumn (ArrayColumnDesc<uInt>("Arr3","comment for Arr1", IPosition(2,4,7), ColumnDesc::Direct)); // Add a columns containing tables. td.addColumn (SubTableDesc("sub1", "subtable by name", "tTableDesc_sub")); // Define hypercolumn "dataCube". td.addColumn (ArrayColumnDesc<Complex>("data",2)); td.addColumn (ArrayColumnDesc<Int>("pol",1)); td.addColumn (ArrayColumnDesc<float>("freq",1)); td.addColumn (ScalarColumnDesc<float>("time")); td.addColumn (ScalarColumnDesc<float>("baseline")); td.defineHypercolumn ("dataCube", 4, stringToVector ("data"), stringToVector ("pol,freq,time,baseline")); }
Create a table description object with the given name. This name can be seen as the table type in the same way as a class name is the data type of an object. The name can only be blank when option=Scratch. The default table description path is used for the description file.
Create a table description object with the given name (i.e. table type) and version. The name can only be blank when option=Scratch. The default table description path is used for the description file.
Create a table description object. The given table description path is used for the description file. The name can only be blank with option=Scratch.
Create a table description object with the given name (i.e. table type) and version by copying the input table description. If the given name or version is blank, it will be copied from the input table description. The default table description path is used for the description file. The only options allowed are New, NewNoReplace and Scratch.
Create a table description object with the given name (i.e. table type) and version by copying the input table description. If the given name or version is blank, it will be copied from the input table description. The given table description path is used for the description file. The only options allowed are New, NewNoReplace and Scratch.
This copy constructor makes a copy of the table description
maintaining its name and version. By default a Scratch copy is made.
It serves as a shorthand for the constructor:
TableDesc (const TableDesc&, "", "", TDOption);
The destructor writes the table description if changed.
Test if a description file exists (i.e. isReadable).
Get access to the set of column descriptions. In this way const ColumnDescSet (e.g. isDisjoint) can be used.
Add another table description to this table description. It merges the column descriptions, the special keywordSet (containing hypercolumn definitions) and the user keywordSet (this last one is not added if the flag is False). The two table descriptions have to be disjoint, i.e. no column nor keyword should already exist. Otherwise an TableInvOper exception is thrown and nothing gets added.
Get access to the keyword set.
Get readonly access to the private set of keywords.
Add a column to the table description. An exception is thrown if a keyword or column with this name already exists. Although this function has a ColumnDesc as argument, it is usually needed to construct a more specialized object like ArrayColumnDesc<float>. A ColumnDesc constructor converts that automatically to a ColumnDesc object.
tableDesc.addColumn (ArrayColumnDesc<float> ("NAME"));On the other hand this function can also be used to add a column description from another table as in:
tableDesc.addColumn (otherTableDesc.columnDesc("NAME"));
Add a column to the table description and give it another name. This may be useful to use a description of another column.
Remove a column. An exception is thrown if the column does not exist.
Rename a column. An exception is thrown if the old name does not exist or if the name already exists.
Renaming a column should be done with care, because other columns may be referring this column. Also a hypercolumn definition might be using the old name.
Get number of columns.
Test if a column with this name exists.
Get a vector containing all column names.
Get the column description by name or by index. An exception is thrown if the column does not exist. Function isColumn should be used to test if a column exists.
Get comment string.
Get comment string (allowing it to be changed).
Show the table description on cout.
Show the table description.
Get the table type (i.e. name of table description).
Get the table description version.
Define a hypercolumn.
A hypercolumn is a group of one or more data columns of which
the data is treated as one or more (regular) hypercubes.
The hypercolumn has coordinate axes (e.g. time, frequency)
which are columns in the table.
When the entire hypercolumn consists of multiple hypercubes,
ID-columns can be defined, which uniquely determine the
hypercube to be used.
Note that only TiledDataStMan
requires the use of ID-columns.
A hypercolumn definition is needed to be able to use a Tiled
Storage Manager.
The following has to be specified:
For example:
void defineHypercolumn (const String& hypercolumnName, uInt ndim, const Vector<String>& dataColumnNames)
void defineHypercolumn (const String& hypercolumnName, uInt ndim, const Vector<String>& dataColumnNames, const Vector<String>& coordColumnNames)
void defineHypercolumn (const String& hypercolumnName, uInt ndim, const Vector<String>& dataColumnNames, const Vector<String>& coordColumnNames, const Vector<String>& idColumnNames)
It will be checked if the given columns exists and have
an appropriate type.
When the data column cells contain arrays, the first N coordinate
columns must contain vector values, where N is the dimensionality
of the data arrays.
The remaining coordinate columns must contain scalar values.
The default data manager type of the columns involved will be set
to TiledColumnStMan if all data columns have a fixed shape.
Otherwise they are set to TiledShapeStMan.
The storage manager group of all columns involved will be set to
the hypercolumn name. In that way binding columns to storage managers
during the table creation process is easier because a simple
bindGroup
can be used.
A table contains data matrices with axes pol and freq.
Those axes are defined in columns pol and freq containing
vectors with the same length as the corresponding axis.
The table also contains scalar columns time and baseline, which
superimpose dimensions upon the data. So the data will be stored
in a 4-d hypercube with axes pol,freq,time,baseline.
It would be defined as follows:
tableDesc.defineHypercolumn ("dataCube", 4,
stringToVector ("data"),
stringToVector ("pol,freq,time,baseline"));
Note that the function
stringToVector is very convenient for creating a vector
of Strings.
Test if the given hypercolumn exists.
Get the names of all hypercolumns.
Get the columns involved in a hypercolumn. It returns the dimensionality of the hypercolumn. An exception is thrown if the hypercolumn does not exist.
Adjust the hypercolumn definitions (for a RefTable). It removes and/or renames columns as necessary. Column names which are not part of the map are removed if keepUnknown==False. If all data columns of a hypercolumn are removed, the entire hypercolumn is removed.
Remove ID-columns from the given hypercolumn definitions and set their default data manager type to IncrementalStMan and group to ISM_TSM.
Remove given hypercolumn definition. An exception is thrown if it is not a hypercolumn.
Check recursively if the descriptions of all subtables are known.
Initialize the table description.
Initialize and copy a table description.
Throw an invalid hypercolumn exception.
Get the table description from the file.