# Handling data cubes in VO

Arnold Rots arots at head.cfa.harvard.edu
Mon Dec 26 13:11:41 PST 2005

```Part of this, especially item 5, is really a DM discussion.
David Berry proposed that the relation between physical coordinate
axes and pixel coordinates is really a transformation between two
separate coordinate systems (and provided an implementation).
As such it has been incorporated in STC.

- Arnold

Roy Williams wrote:
> 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
--------------------------------------------------------------------------
Arnold H. Rots                                Chandra X-ray Science Center
Smithsonian Astrophysical Observatory                tel:  +1 617 496 7701
60 Garden Street, MS 67                              fax:  +1 617 495 7356
Cambridge, MA 02138                             arots at head.cfa.harvard.edu
USA                                     http://hea-www.harvard.edu/~arots/
--------------------------------------------------------------------------

```

More information about the dm mailing list