TiledCellStMan.h
Classes
- TiledCellStMan -- Tiled Cell Storage Manager. (full description)
Interface
- Public Members
- TiledCellStMan (const String& hypercolumnName, const IPosition& defaultTileShape, uInt maximumCacheSize = 0)
- TiledCellStMan (const String& hypercolumnName, const Record& spec)
- ~TiledCellStMan()
- DataManager* clone() const
- String dataManagerType() const
- Bool canChangeShape() const
- virtual void setShape (uInt rownr, TSMCube* hypercube, const IPosition& shape, const IPosition& tileShape)
- static DataManager* makeObject (const String& dataManagerType, const Record& spec)
- Private Members
- TiledCellStMan()
- virtual IPosition defaultTileShape() const
- void addRow (uInt nrrow)
- virtual TSMCube* getHypercube (uInt rownr)
- virtual TSMCube* getHypercube (uInt rownr, IPosition& position)
- virtual void setupCheck (const TableDesc& tableDesc, const Vector<String>& dataNames) const
- virtual Bool flush (AipsIO&, Bool fsync)
- virtual void create (uInt nrrow)
- virtual void readHeader (uInt nrrow, Bool firstTime)
Prerequisite
Etymology
TiledCellStMan is the Tiled Storage Manager storing
each cell as a separate hypercube.
Synopsis
TiledCellStMan is a derivation from TiledStMan, the abstract
tiled storage manager class. A description of the basics
of tiled storage managers is given in the
Tables module description.
TiledCellStMan allows the user to create a tiled hypercube for
each data cell in an automatic way. It is meant to be used for
storing regularly shaped data like images (where the table contains
a possibly differently shaped image in each row).
The TiledCellStMan has the following (extra) properties:
- Addition of a row results in the addition of a hypercube in
which the data cells in that row will be stored. Thus each row
of the hypercolumn is stored in its own hypercube.
Note that a hypercolumn has a given dimensionality, so each
data cell in the hypercolumn has to match that dimensionality.
- Although there are multiple hypercubes, an id value is not needed.
The row number serves as the id value.
- Coordinates for the hypercubes can be defined and (of course)
their shapes have to match the hypercube shape.
Their values have to be put explicitly (so it is not possible
to define them via an addHypercube call like in
TiledDataStMan).
- It is possible to define a (default) tile shape in the
TiledCellStMan constructor. When setting the shape of the
array in a row (using
ArrayColumn::setShape), it is possible to override
that default for the hypercube in this particular row.
Motivation
This tiled storage manager does not require any special action
(like calling add/extendHypercube) when used with a column
containing variable shaped arrays.
Example
// Define the table description and the columns in it.
TableDesc td ("", "1", TableDesc::Scratch);
td.addColumn (ArrayColumnDesc<float> ("RA", 1));
td.addColumn (ArrayColumnDesc<float> ("Dec", 1));
td.addColumn (ArrayColumnDesc<float> ("Velocity", 1));
td.addColumn (ArrayColumnDesc<float> ("Image", 3));
// Define the 3-dim hypercolumn with its data and coordinate columns.
// Note that its dimensionality must match the dimensionality
// of the data cells.
td.defineHypercolumn ("TSMExample",
3,
stringToVector ("Image"),
stringToVector ("RA,Dec,Velocity"));
// Now create a new table from the description.
SetupNewTable newtab("tTiledCellStMan_tmp.data", td, Table::New);
// Create a TiledCellStMan storage manager for the hypercolumn
// and bind the columns to it.
TiledCellStMan sm1 ("TSMExample");
newtab.bindAll (sm1);
// Create the table.
Table table(newtab);
// Define the values for the coordinates of the hypercube.
Vector<float> raValues(512);
Vector<float> DecValues(512);
Vector<float> VelocityValues(64);
indgen (raValues);
indgen (decValues, float(100));
indgen (velocityValues, float(200));
ArrayColumn<float> ra (table, "RA");
ArrayColumn<float> dec (table, "Dec");
ArrayColumn<float> velocity (table, "Velocity");
ArrayColumn<float> image (table, "Image");
Cube<float> imageValues(IPosition(3,512,512,64));
indgen (imageValues);
// Write some data into the data columns.
uInt i;
for (i=0; i<4; i++) {
table.addRow();
image.put (i, imageValues);
ra.put (i, raValues);
dec.put (i, decValues);
velocity.put (i, velocityValues);
}
Member Description
TiledCellStMan (const String& hypercolumnName, const IPosition& defaultTileShape, uInt maximumCacheSize = 0)
TiledCellStMan (const String& hypercolumnName, const Record& spec)
Create a TiledDataStMan storage manager for the hypercolumn
with the given name. The columns used should have the FixedShape
attribute set.
The hypercolumn name is also the name of the storage manager.
The given tile shape will be used as the default for the hypercube
in each cell. Per cell it can be redefined via ArrayColumn::setShape.
The given maximum cache size (default is unlimited) is persistent,
thus will be reused when the table is read back. Note that the class
ROTiledStManAccessor
allows one to overwrite the maximum cache size temporarily.
Its description contains a discussion about the effects of
setting a maximum cache.
The constructor taking a Record expects fields in the record with
the name of the arguments in uppercase. If not defined, their
default value is used.
Clone this object.
It does not clone TSMColumn objects possibly used.
Get the type name of the data manager (i.e. TiledCellStMan).
This tiled storage manager can handle changing array shapes.
virtual void setShape (uInt rownr, TSMCube* hypercube, const IPosition& shape, const IPosition& tileShape)
Set the shape and tile shape of the hypercube.
Make the object from the type name string.
This function gets registered in the DataManager "constructor" map.
Create a TiledCellStMan.
This constructor is private, because it should only be used
by makeObject.
Get the default tile shape.
void addRow (uInt nrrow)
Add rows to the storage manager.
Get the hypercube in which the given row is stored.
Get the hypercube in which the given row is stored.
It also returns the position of the row in that hypercube.
Check if the hypercolumn definition fits this storage manager.
virtual Bool flush (AipsIO&, Bool fsync)
Flush and optionally fsync the data.
It returns a True status if it had to flush (i.e. if data have changed).
virtual void create (uInt nrrow)
Let the storage manager create files as needed for a new table.
This allows a column with an indirect array to create its file.
virtual void readHeader (uInt nrrow, Bool firstTime)
Read the header info.