Handling data cubes in VO
Roy Williams
roy at cacr.caltech.edu
Mon Dec 26 10:35:46 PST 2005
Perhaps I can lay out a strawman for a cube access protocol? I believe
that the following five concepts will give us all the exposure and
access that have been mentioned so far, but still keeping it
parsimonious and easily understandable. Is it enough? Is it
implementable?
Your comments welcome.
Roy
(1) Array
First, let us define *subscriptRange*. It is a set of consecutive
integers, with the smallest being the lower subscript, and the largest
being one less than the upper subscript. An example of a subscriptRange
is {-2, -1, 0, 1, 2, 3}, which could be abbreviated (-2:4).
From an ordered finite set of subscriptRanges, we can build an *Array*
as a multi-dimensional block of voxels, labeled by integer subscripts.
I think it would be best at this point to restrict the nature of the
voxel to only standard primitive typess, such as int, float, double,
doubleComplex etc. I think it would be overly complex to allow voxels
to themselves be structures. I would suggest using the same types as
FITS and VOTable. Note that the character is a primitive, but the
string is not. Let us call these the *standard types*.
Precisely, the Array is a mapping from the Cartesian product of the
subscriptRanges to a standard type. An example of an Array would be
written in Fortran like this:
float Q(-2:4, 0:4, 2:6)
The subscriptRanges have 6, 4, and 4 elements, and thus the Array
itself has 6x4x4 = 96 floats. An example of an element of the Array
would be
Q(-2, 1, 5)
(2) subArray
We can define a *subArray* as an Array together with a new set of
subscriptRanges, each of which is a subset of the corresponding
original subscriptRange. For example, a subArray of the example above
could be:
float Q(0:2, 3:4, 2:3)
which has subscriptRanges with 2, 1, 1 elements, and thus the subArray
has 2x1x1 = 2 floats.
(3) permutation
We can define a permuted Array by exchanging the order of the
subscriptRanges, but keeping the same data. This is a useful operation
when there is an implied efficiency or ordering convention associated
with the order of the subscriptRanges (eg in Fortran "first subscript
varies fastest").
(4) Axis
We can now add metadata to this very abstract object by associating a
metadata object with each SubscriptRange, and calling the result an
*Axis*. Some attibutes of an Axis would include the mapping from
subscript to independent variable, such as lowerLimit, delta, unit,
UCD, and the name of the Axis (eg "velocity").
(5) Continuum model
The Array is defined as a mapping from a discrete space (product of
subscriptRanges), and we can extend this to a continuum mode by
interpolating. In other words, we are allowing real-valued subscripts.
This would only work for certain of the standard voxel types (float,
double, floatComplex, doubleComplex), where interpoation makes sense.
California Institute of Technology
626 395 3670
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 2978 bytes
Desc: not available
URL: <http://www.ivoa.net/pipermail/dal/attachments/20051226/20aa597e/attachment-0001.bin>
More information about the dal
mailing list