# Re: Domain, Range

```Hi Vikram:

I've been through this myself in the past year (since my math
background is not strong I've had to learn a bunch of terminology),
so I'd like to add a couple of things to Bill's reply in the hopes

First, the Developer's Guide Section 2 has a nice diagram that for
me help solidify some of these relationships within the VisAD
contexts:

FunctionType (image_sequence_type)
/                      \
function domain           function range
RealType (hour)         FunctionType (image_type)
/               \
function domain      function range
RealTupleType        RealType(brightness)
/           \
RealType (line)     RealType (element)

Secondly, I always like examples.  Just below is very short and
completely self-contained (well, except for using VisAD ;-)
application that might help illustrate two uses of domains and
ranges: one to define the function mapping ((line,element) - >
brightness) and the other to illustrate overriding the default range
on the Y axis.  I did this primarily to better understand the
relationships between the MathTypes and the Data.

import java.io.IOException;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* very, very simple display example.  Define a function that maps
from
* (line,element) to a brightness value.  Create a FlatField that
* realizes this mapping for a domain of (300,300).  Fill the
FlatField
* with values in the range (0-255).
*
* Create ScalaMappings of (line->YAxis), (element->XAxis) and
* (brightness -> RGB).
*
* Also, set a range on the ScalaMap for the YAxis to illustrate the
* effect/use of this.
*/

public class vt {

public static void main(String args[])
throws VisADException, IOException {

// define types
RealType line = new RealType("row");
RealType element = new RealType("col");
RealTupleType domain = new RealTupleType(line, element);

RealType brightness = new RealType("brightness");
RealTupleType range = new RealTupleType(brightness);

FunctionType image_func = new FunctionType(domain, range);

// now, define the Data objects
Set domain_set = new Integer2DSet(300,300);
FlatField image_data = new FlatField(image_func, domain_set);

// make up some data (line,element) => brightness values
double[][] values = new double[1][300*300];
for (int i=0; i<300; i++) {
for (int j=0; j<300; j++) {
values[0][i + 300*j] = ((16*i)/300.) * ((16*j)/300);
}
}

// put the data into the flatfield
image_data.setSamples(values);

// now make a reference for the data so it can be displayed
DataReference image_ref =new DataReferenceImpl("image");
image_ref.setData(image_data);

// define the mappings of the display
DisplayImpl di = new DisplayImplJ2D("display");

// override the default range on display's Y axis
ScalarMap line_map = new ScalarMap(line, Display.YAxis);
line_map.setRange(-100,400);

// add the data reference

// create JFrame (i.e., a window) for display and slider
// (cobbled from the DisplayTest examples)

JFrame frame = new JFrame("Simple VisAD Application");

public void windowClosing(WindowEvent e) {System.exit(0);}
});

// create JPanel in JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setAlignmentY(JPanel.TOP_ALIGNMENT);
panel.setAlignmentX(JPanel.LEFT_ALIGNMENT);

// set size of JFrame and make it visible
frame.setSize(500, 600);
frame.setVisible(true);
}
}

Hope it helps...

tom

--
Tom Whittaker (tomw@xxxxxxxxxxxxx)