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
it might help you, too.

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

          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 visad.*;
import visad.java2d.DisplayImplJ2D;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* very, very simple display example.  Define a function that maps
 * (line,element) to a brightness value.  Create a FlatField that
 * realizes this mapping for a domain of (300,300).  Fill the
 * 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

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

    // 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);

    di.addMap(new ScalarMap(element, Display.XAxis));
    di.addMap(new ScalarMap(brightness, Display.RGB));

    // 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");

      frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}

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



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

Hope it helps...


Tom Whittaker (tomw@xxxxxxxxxxxxx)
University of Wisconsin-Madison
Space Science and Engineering Center
Phone/VoiceMail: 608/262-2759
Fax: 608/263-6738