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