SpOd short for Space Odyssey, is a simple to use 3D visualisation tool. If you need to access effective graphical capabilities especially for time series data, but perhaps for surfaces, or other visualisation areas but don’t have the time or desire to do some serious programming, then SpOd may be your answer.

SpOd operates as an interpreter. It accepts lists and/or arrays of floating format numbers as text (or as raw binary) to render surfaces, graphs, animated traces and so on. The form of the display may be tailored using simple specifier & qualifier statements together with the graphical prescriptions.

New features support real-time data streaming displays. For this a number of gui tools let you set up and control aspects of the display interactively.

SpOd is a UNIX command line tool, that accepts standard input, or optionally precomputed data files.

Simply download the appropriate executable file to a suitable directory (for example in UNIX use the /usr/bin directory), The tool is then accessed from the terminal command line. A command SpOd might look like

`some unix command` | spod

or alternatively

spod filename

spod -f filename

spod -l graph -f filename | spod

2008 Space Odyssey - new features include real-time streaming

As with any UNIX process more than one instance of SpOd may be initiated at a time, allowing multiple and simultaneous displays of graphical objects in separate windows.

These pages provide help to you get started.

New Features SpOd (2008) now supports real-time streaming, This means that spod may be used to display data much as one might on a scope.

New Features SpOd (2007) offers features, graphics aside. Spod may be used to filter, select individual graphs or to translate input formats to obtain alternative output formats. This is useful for translating legacy syntax to a new amended syntax. Files may also be saved in a raw data format that speed up input/output loading and display initialisation. The features are illustrated by way of examples below.

Getting started SpOd simultaneously supports a basic range of graphing formats, that include surfaces, static graphs, animated traces, and animated graph sequences. It currently accepts up to 10 surfaces and 400,000 graphs/traces. I have successfully loaded over a Gbyte of input data corresponding to polygraph traces with a total of 150,000,000 data points.... and surfaces with 2,000,000 vertices. Surfaces and graphs may be displayed individually or in combination or as animated graph sequences. By selecting appropriate combinations of surfaces, static, dynamic or animated graphs and traces and effects one may creative powerful interactive visualisation environments. The real power of spod derives from the modern graphical power of OpenGL and the support hardware that is standard in modern PC’s. All SpOd does is simply translate lists of data into a form required by OpenGL, to give you the power of the graphical environment.

Basic help is available by typing ?, when an active SpOd session is running. The help menu is returned via std-error to the terminal window.

The graphical object types supported and respective prescriptive formats are illustrated by example. Graphical objects fall in to basic categories, including, i) simple 2D graphs, ii) partially specified 3D graphs, iii) fully specified 3D graphs, iv) simple 3D surfaces, and v) fully specified 3D surfaces) The graphs of i), ii), and iii) may be prescribed as static displays or dynamic traces (very useful for looking at long data series).

What is meant here by static and dynamic is clarified in the examples. A static graph is a plot of points y_i versus x_i say, but displayed within a 3D viewing space. The space may be rotated/swung dynamically about the origin for viewing convenience. A dynamic animated trace or a set of points y_i versus x_i say, displayed within a viewing window that can be moved flexibly across the x-domain (letting x represent time for example). Whereas plotting a series of 500 points fits comfortably into a single display frame, a 1,000,000 point trace will not. In these situations it is useful to allow the graph to extend beyond the viewing space and then flexibly move the viewing window to the left or right along the trace. This may be done either manually, under mouse control or flexibly as a timed animation or replay, or both. Different animation modes are available depending on the kind of object being used and the desired effect.

Example 1.1 Simple 2D static graphs specify the y- (or alternatively z-) coordinate points only, the x-coordinates are implicit.

For many graphs, a simple list of data points is all that one needs. The points are plotted at uniform increments along the x-axis, for example where the x-coordinate represents time. The list of data points forms a time series [y_i].

Simple graphs are plotted either in the y-x or z-x plane. The x-coordinate is generated from the array index for the time series.

A Graph’s header has a generic form. The first letter 'y' (or 'z') of the header indicates that this is a simple static graph. ‘y” indicates the graph is to be plotted in the yx plane, whereas ‘z’ indicates the zx plane s to be used. A further single letter indicates the graph’s colour; r=red, g=green, b=blue, m=magenta, c=cyan, y=yellow, w = white, <sp>= black, (‘.’=invisible). The last entry on the first line of the header gives the graph label. A graph label can not include white space. For example "my_graph" or "mygraph" are acceptable labels, but "my graph" is not. These prescriptive items are each separated by a colon.

With a simple 2D graph most of the hard work of arranging the graph for view is taken care of for you. The header values must be set to place the graph in the viewing space

The header further indicates the size of the data list (e.g. 1000 1 indicates the list is a 1000 x 1 points array). Next the x- y-, z- scale parameters are given. Since the x-coordinates are implicit, an x-scale factor of 9 indicates the domain of the graph will be scaled to fit symmetrically in the interval [-9, +9]. Similarly the y-scale parameter

takes the values in the range [-1,1] and scales these to the range [-4,+4].

The header further indicates the size of the data list (e.g. 1000 1 indicates the list is a 1000 x 1 points array). Next the x- y-, z- scale parameters are given. Since the x-coordinates are implicit, an x-scale factor of 9 indicates the domain of the graph will be scaled to fit symmetrically in the interval [-9, +9]. Similarly the y-scale parameter

takes the values in the range [-1,1] and scales these to the range [-4,+4].

A Comment line is ignored by SpOd, begins with the # character..

For a simple graph in the y-x plane

#example graph in y-x plane, colour green, note that a comment line begins with the # character.

y:g:mygraph: 10000:1: 9:4:0: 0:0:0

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 etc

Lets generate an example directly with a shell script. Here I am using awk to run short interpreted bits of C-code. (Regrettably you may not be able to simply cut and paste the following to your terminal window, for it seems that the characters, in particular the single and double quotes, are translated by the web page environment. in principle you can copy the following into a file and execute as a UNIX shell script.)

#!/bin/sh

#example graph in y-x plane, generated by shell script

echo “y:g:mygraph: 1000:1: 9:4:0: 0:0:0” | awk ‘{

printf “%s\n”, $0;

split($0,an,”:“);

for (i=1; i <=an[4]; i++) { printf “%f “,rand();}

}’ | spod

Example 1-2 Partially specified 3D graphs lists y- and z-coordinate points, the x-coordinates are implicit.

#example graph in y-x plane, colour green

y:g:mygraph: 100:1: 9:4:0: 0:0:0

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 ...

0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 0.109778 0.119712 0.129634 ...

Example 1-3 Fully specified 3D graph list all x-, y-, z- coordinate points.

#example graph in y-x plane, colour green

y:g:mygraph: 100:1: 9:4:0: 0:0:0

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 ...

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 ...

0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 0.109778 0.119712 0.129634 ...

Example 2-1. Simple surfaces, assumes a regular mesh

#example graph in y-x plane, colour green

y:g:mygraph: 100:200: 9:4:0: 0:0:0

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 ...

0.010000 0.019999 0.029996 0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 ...

0.039989 0.049979 0.059964 0.069943 0.079915 0.089879 0.099833 0.109778 0.119712 0.129634 ...

.

.

.

Example 2-2. fully specified surfaces

#try this script

echo "" | awk '{printf "S:surface: 41:21: 4:4:4: 0:0:0\n"

for (i=-10; i <=10; i++) {

for (x=-20; x <=20; x++) printf "%f ", sin(x/20 * 3.14159/2);

printf "\n";

}

for (i=-10; i <=10; i++) {

for (x=-20; x <=20; x++) { radius = sqrt(1 - sin(x/20 * 3.14159/2)*sin(x/20 * 3.14159/2)); printf "%f ",radius * sin(i/10 * 3.14159);}

printf "\n";

}

for (i=-10; i <=10; i++) {

for (x=-20; x <=20; x++) {

radius = sqrt(1 - sin(x/20 * 3.14159/2)*sin(x/20 * 3.14159/2));

y= radius * sin(i/10 * 3.14159);

printf "%f ",sqrt (radius*radius - y*y);

}

printf "\n";

}

}' | spod

The following illustrations have been generated using Spod. The first represents the entropy surfaces produced from EEG and EOG signals in a polysomnography session.

The next are a mixture of graphical results illustrating some of the possible visualisation effects that can be produced using spod.

Page yet to be completed...

What is SpOd?

download:

help pages:

more examples: