# Summary of Image and Plotting Software (IPS) packages collected 

# for possible use with GLAST Science Analysis Tools

For the Science Analysis Tools, we will need the capability to make
plots, and display images on the screen. It would not be an efficient
use of our manpower to write a custom set of plotting tools if we can
find a package available that satisfies our needs. To this end the User
Interface committee has settled on a list of basic requirements for
science analysis graphics and have begun to look at some packages. The
packages and their characteristics are contained in table 1 below.

It seems quite clear that the choice of package is intimately related to
the scope of what we want to do. For example if our tools only have to
put up plots and images with minimal interactive analysis, then the
plotting packages (the first group in table 1) are desirable. If we want
to have more complicated interactions with the user and more extensive
image manipulation (rotatable images, e.g.), then something more like a
graphic toolkit would be desirable. If we decide to go the latter route
and use a tool like Qt, then we need programmers to start working
immediately to create the basic plotting classes and methods to ensure
this does not hold up development of the science tools.

The basic requirements have already reduced the number of packages to \<
20, but we need to better define the requirements in greater detail to
narrow it down to two or three packages.

Basic requirements (IPS= Image and Plotting Software):

1\) The IPS must be freely available for use, modification, and
re-distribution.

2\) Any external libraries used by the IPS must be well-supported,
tested, and free.

3\) The IPS must be available on all supported platforms.

4\) The IPS must provide an API for C++, and optionally, for JAVA or for
a high-level scripting language.

5\) The IPS must be extensible, allowing the creation of custom widgets.

6\) The IPS must be simple to install, preferably through a binary
distribution for end-users.

7\) IPS must be able to generate publication quality images, including
PostScript.

8\) The IPS must allow export of images into standard browser supported
formats (e.g., GIF, JPEG, TIFF, etc.)

9\) The IPS must provide facilities to create line, scatter, and contour
plots.

10\) Support for 3D and surface plots is desirable.

11\) Plots shall be modifiable, rather than forcing regeneration of
plots from scratch.

12\) Users shall have control over plot details such as axis range, bin
size, linear vs. logarithmic scaling, etc.

13\) The IPS must display and possibly rotate images.

14\) The IPS must support overlaying of images and contours and images
and plotted points.

15\) The IPS must provide for returning interactive graphical inputs
such as cursor position.

16\) Multiple color tables must be available, including a facility for
specifying user-defined color tables.

17\) Color tables must be scalable, preferably via mouse or cursor
inputs.

18\) The display rate should be less than about 2 seconds for tasks that
are not data intensive.

19\) Interactive sessions should provide logging capabilities.

The columns on the table are answers to questions listed below. The
tools are broken up into 3 groups: first - plotting tools, last - image
manipulation/ graphics tools, and the middle group is somewhere between.
All packages listed on this page are freeware.

Widgets -- Is the package capable of making custom widgets?

Plottype - Plots all of the following: histograms, scatter, countour,
3D?

Image Man - Does Image manipulation: overlays, rotation, rescaling of
images?

Pkg Type -- Is The package a library (L), an analysis environment (E),
i.e., need to enter commands

in its own defined macros, or both (B)

API -- What is a program interface for our macros? What language
(F=fortran, C=C or C++, L=command line

O=other)

Platforms - runs on Linux, Windows, Solaris?

Life - Is it supported? Is it likely to still be supported after 2006?

Dep. - Does it NOT depend in a complicated way on other software
pckgs/libs?

Qual - Does it produce publication quality graphs?

Out - Does it produce output that can be easily displayed in a browser?

**TABLE 1**

<table>
<colgroup>
<col style="width: 13%" />
<col style="width: 9%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 8%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 6%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 10%" />
</colgroup>
<tbody>
<tr class="odd">
<td>Package</td>
<td>Widgets</td>
<td><p>Plot</p>
<p>Type</p></td>
<td><p>Image</p>
<p>Man</p></td>
<td><p>Pkg</p>
<p>Type</p></td>
<td>API</td>
<td><p>Plat</p>
<p>forms</p></td>
<td>Life</td>
<td>Dep.</td>
<td>Qual</td>
<td>Out</td>
</tr>
<tr class="even">
<td>Plotting tools</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td>Dataplot</td>
<td>N?</td>
<td>Y</td>
<td>N</td>
<td>E</td>
<td>F</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Grace</td>
<td>N</td>
<td>Y/no 3-d</td>
<td>N</td>
<td>B</td>
<td>C/F</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>Gnuplot</td>
<td>Y?</td>
<td>Y</td>
<td>N</td>
<td>B</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>Y?</td>
<td>Y</td>
</tr>
<tr class="even">
<td>HIPPODRAW</td>
<td>Y?</td>
<td>Y</td>
<td>N?</td>
<td>B??</td>
<td>J</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>JAS</td>
<td>Y?</td>
<td>Y/no 3-D</td>
<td>N</td>
<td>B</td>
<td>J</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>PAW</td>
<td>?</td>
<td>Y</td>
<td>N</td>
<td>B</td>
<td>F</td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td></td>
</tr>
<tr class="odd">
<td>QDP</td>
<td>N</td>
<td>Y</td>
<td>Y?</td>
<td>E</td>
<td>F</td>
<td>Y-Win?</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>ROOT</td>
<td>Y</td>
<td>Y</td>
<td>N?</td>
<td>B</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>Plotting and Image</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="even">
<td>Chaco</td>
<td>Y?</td>
<td>N</td>
<td>?</td>
<td>B</td>
<td>O =Py</td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>ChIPs</td>
<td>N</td>
<td>Y</td>
<td>Y</td>
<td>E</td>
<td>O=s-lang</td>
<td>N</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>ESO-MIDAS</td>
<td>N?</td>
<td>Y</td>
<td>Y</td>
<td>E</td>
<td>L,F,C</td>
<td>N</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>NCAR_graohics</td>
<td>N?</td>
<td>Y</td>
<td>Y</td>
<td>B</td>
<td>C,F</td>
<td>CygWin?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Pdl</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>B</td>
<td><p>O=</p>
<p>Perl</p></td>
<td>Y?</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>Pgplot</td>
<td></td>
<td>Y</td>
<td>Y?</td>
<td>L</td>
<td>C,F</td>
<td><p>N</p>
<p>Win?</p></td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Plplot</td>
<td></td>
<td>Y</td>
<td>Y?</td>
<td>L</td>
<td>C,F,O= Tcl</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>Plt/wxPython</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>B</td>
<td>O =Py</td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Image/graphic tools</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td>AstroMD</td>
<td>Y</td>
<td>N</td>
<td>Y</td>
<td>B</td>
<td>C</td>
<td>Y</td>
<td>N?</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Ds9</td>
<td>N - Tcl</td>
<td>N</td>
<td>Y</td>
<td>E</td>
<td><p>O=</p>
<p>XPA</p></td>
<td>N-Sol</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>FOX</td>
<td>Y</td>
<td>N</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>?</td>
<td>?</td>
</tr>
<tr class="even">
<td><p>Fv/</p>
<p>POW</p></td>
<td>?</td>
<td>Y/no 3-D</td>
<td>Y</td>
<td>B</td>
<td><p>O=</p>
<p>Tcl</p></td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>Qt</td>
<td>Y</td>
<td>N</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>?</td>
</tr>
<tr class="even">
<td>VisAD</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>?</td>
</tr>
<tr class="odd">
<td>VTK</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>?</td>
</tr>
<tr class="even">
<td>Xforms</td>
<td>Y</td>
<td>No 3d or cont</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>N</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>ximage</td>
<td></td>
<td>N</td>
<td>Y</td>
<td>E</td>
<td>L</td>
<td><p>N</p>
<p>(Win)</p></td>
<td>Y</td>
<td>Y</td>
<td>Y?</td>
<td>?</td>
</tr>
<tr class="even">
<td>key</td>
<td>Good</td>
<td>Bad</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

Package Information:

Line Plot based

Dataplot

<http://www.itl.nist.gov/div898/software/dataplot/>

gnuplot

<http://www.gnuplot.info/>

Note there is a Qt front end for GNUplot:
<http://www.flash.net/~dmishee/xgfe/xgfe.html>

<http://sourceforge.net/projects/gnuplot/>

Grace

<http://plasma-gate.weizmann.ac.il/Grace/>

hippodraw

<http://www.slac.stanford.edu/grp/ek/hippo/>

JAS - Java Analysis Studio

<http://www-sldnt.slac.stanford.edu/jas>

PAW - Physics Analysis Workstation? -

<http://wwwinfo.cern.ch/asd/paw/>

QDP
<http://heasarc.gsfc.nasa.gov/docs/software/ftools/others/qdp/node3.html>
(front end for PGPLOT

ROOT - ROOT Analysis package -

[http://root.cern.ch](http://root.cern.ch/)

Both Line Plot and Image manipulation

Chaco

<http://www.scipy.org/site_content/chaco>

Requires wxPython and Numeric (Python)

ChiPS Chandra Plotting and Image Manipulation Tool

<http://cxc.harvard.edu/ciao/download/doc/chips_html_manual/index.html>

ESO-MIDAS

<http://www.eso.org/projects/esomidas/>

NCAR_Graphics - <http://ngwww.ucar.edu/ng4.2/>

PDL - The PERL data Language

<http://pdl.perl.org/>

PGPLOT

<http://www.astro.caltech.edu/~tjp/pgplot/>

Plplot

<http://plplot.sourceforge.net/>

wxPython/SciPy/plt

<http://www.wxpython.org/>

[http://www.scipy.org](http://www.scipy.org/)

<http://www.scipy.org/site_content/tutorials/plot_tutorial>

Image Manipulation programs

AstroMD - Multi Dimensional visualization and analysis toolkit for
astrophysics

<http://www.cineca.it/astromd/>

ds9 - Astronomical Data Visualization Application

<http://hea-www.harvard.edu/RD/ds9/>

FOX

[http://www.fox-toolkit.org](http://www.fox-toolkit.org/)

fv/POW - FITS viewer

<http://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/>

Qt -- [http://www.trolltech.com](http://www.trolltech.com/)

VISAD

<http://www.ssec.wisc.edu/~billh/visad.html>

VTK

<http://public.kitware.com/VTK>

Xforms

<http://world.std.com/~xforms/>

ximage

<http://heasarc.gsfc.nasa.gov/docs/xanadu/ximage/ximage.html>

Not listed:

SAL - Scientific Data Processing & Visualization - Software Packages

<http://sal.kachinatech.com/D/1/index.shtml>

(contains links to many packages)

Starlink -- OpenDX

<http://www.starlink.rl.ac.uk/star/docs/sun203.htx/sun203.html#xref>

IRAF

[http://iraf.noao.edu](http://iraf.noao.edu/)

**TABLE 2**

Pros and Cons

+------------+----------------------------+----------------------------+
| Package    | Pros                       | Cons                       |
+------------+----------------------------+----------------------------+
|            |                            |                            |
+------------+----------------------------+----------------------------+
| Dataplot   |                            |                            |
+------------+----------------------------+----------------------------+
| Gnuplot    | Iightweight, supported     | Barely publication         |
|            |                            | quality,                   |
|            | Front ends many add-ons    |                            |
|            | available.                 | Main Dataplot is an        |
|            |                            | environment,               |
|            |                            |                            |
|            |                            | A separate module handles  |
|            |                            | C interface. And GUI front |
|            |                            | end.                       |
|            |                            |                            |
|            |                            | C interface not supported  |
|            |                            | on Windows. Documentation  |
|            |                            | is scattered. Big plans    |
|            |                            | for gnuplot on sourceforge |
|            |                            | -- not there yet           |
+------------+----------------------------+----------------------------+
| HIPPODRAW  | Supported on all           | Documentation??            |
|            | platforms, Java            |                            |
+------------+----------------------------+----------------------------+
| JAS        | JAS written in Java so all | Histogramming supported -- |
|            | java library is available. | how hard to adding contour |
|            | Servelet capability built  | plots, overlays, etc?      |
|            | in.                        |                            |
+------------+----------------------------+----------------------------+
| PAW        |                            | Was the precursor to ROOT, |
|            |                            | written in FORTRAN         |
+------------+----------------------------+----------------------------+
| QDP        |                            | Uses PGPLOT for graphics   |
|            |                            | -- why not just use        |
|            |                            | PGPLOT?                    |
+------------+----------------------------+----------------------------+
| ROOT       | Already being used for     | BIG package to ask people  |
|            | GLAST. May add image       | to install.                |
|            | display capability and     |                            |
|            | FITS IO for INTEGRAL       |                            |
+------------+----------------------------+----------------------------+
|            |                            |                            |
+------------+----------------------------+----------------------------+
| Chaco      | Under development with HST | Limited capability now --  |
|            | we have a chance to        | based on wxPython. No      |
|            | influence directions. Plan | contour plots or           |
|            | is to include image        | histograms. Need to        |
|            | manipulation and plotting. | understand better why we   |
|            |                            | would want to use Chaco    |
|            |                            | and not wxPython/SciPy,    |
|            |                            | which already works.       |
+------------+----------------------------+----------------------------+
| ESO-MIDAS  |                            |                            |
+------------+----------------------------+----------------------------+
| NCA        |                            |                            |
| R_graohics |                            |                            |
+------------+----------------------------+----------------------------+
| Pdl        | Written in PERL            | Complicated dependency for |
|            |                            | windows? Maybe this is     |
|            |                            | automatically handled by   |
|            |                            | the install package?       |
+------------+----------------------------+----------------------------+
| Pgplot     | Provides all basic         | Graphs are not as pretty   |
|            | functionality              | as we would like           |
|            |                            |                            |
|            | Long history               | Not native C or C++        |
|            |                            |                            |
|            |                            | No support for Windows.    |
+------------+----------------------------+----------------------------+
| Plplot     | Looks like PGPLOT with     | Quality in demo plots      |
|            | windows suppot. Source     | about the same as PGPLOT   |
|            | Forge asserts publication  |                            |
|            | quality plots -- Are other | Not sure it can really     |
|            | fonts available now?       | display images.            |
|            | Source Forge actively      |                            |
|            | improving the package.     |                            |
+------------+----------------------------+----------------------------+
| Plt/wxPy   | Handles image              | Does not do contour plots  |
| thon/SciPy | manipulation, 2D graphics  | or histograms. Do we       |
|            | and widgets.               | really want our whole      |
|            |                            | plotting package API in    |
|            |                            | Python? Full 3D graphics   |
|            |                            | possible with VTK -- why   |
|            |                            | not skip the middleman and |
|            |                            | use VTK?                   |
+------------+----------------------------+----------------------------+
|            |                            |                            |
+------------+----------------------------+----------------------------+
| AstroMD    | No built in line plots     | Needs VTK based on OpenGL  |
|            |                            | toolkit                    |
+------------+----------------------------+----------------------------+
| Ds9        |                            |                            |
+------------+----------------------------+----------------------------+
| FOX        | Great GUI toolkit, meant   | Plotting part must be      |
|            | to perform                 | written                    |
+------------+----------------------------+----------------------------+
| Fv/        | Tcl/Tk-based, and          | POW lifetime unknown, will |
|            | therefore supported on all | need XPA to interface to   |
| POW        | platforms,                 | C, C++, Fortran            |
+------------+----------------------------+----------------------------+
| Qt         | Great GUI Toolkit          | No Plotting, Free Qt for   |
|            |                            | Windows not up to most     |
|            |                            | recent version             |
+------------+----------------------------+----------------------------+
| VISAD      | Can do 3D manipulations,   | More than we really need?  |
|            |                            |                            |
|            | Communication interface    |                            |
|            | built in                   |                            |
+------------+----------------------------+----------------------------+
| VTK        | Complete toolkit           | More than we really need?  |
+------------+----------------------------+----------------------------+
| Xforms     | Simple lightweight GUI     | Does not run on Windows... |
|            | builder                    |                            |
+------------+----------------------------+----------------------------+
| ximage     |                            |                            |
+------------+----------------------------+----------------------------+

Criteria

1)  want widgets

2)  want C,J programming interface

3)  want full platform support

<table>
<colgroup>
<col style="width: 13%" />
<col style="width: 9%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 8%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 6%" />
<col style="width: 8%" />
<col style="width: 9%" />
<col style="width: 10%" />
</colgroup>
<tbody>
<tr class="odd">
<td>Package</td>
<td>Widgets</td>
<td><p>Plot</p>
<p>Type</p></td>
<td><p>Image</p>
<p>Man</p></td>
<td><p>Pkg</p>
<p>Type</p></td>
<td>API</td>
<td><p>Plat</p>
<p>forms</p></td>
<td>Life</td>
<td>Dep.</td>
<td>Qual</td>
<td>Out</td>
</tr>
<tr class="even">
<td>Plotting tools</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td>HIPPODRAW</td>
<td>Y?</td>
<td>Y-3D?</td>
<td>N?</td>
<td>E??</td>
<td>J</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>JAS</td>
<td>Y?</td>
<td>Y/no 3-D</td>
<td>N</td>
<td>B</td>
<td>J</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="odd">
<td>ROOT</td>
<td>Y</td>
<td>Y</td>
<td>N?</td>
<td>B</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Plotting and Image</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td>Plplot</td>
<td>Y?</td>
<td>Y</td>
<td>Y?</td>
<td>L</td>
<td>C,F</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
<tr class="even">
<td>Image/graphic tools</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td>VisAD</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>?</td>
</tr>
<tr class="even">
<td>VTK</td>
<td>Y</td>
<td>Y?</td>
<td>Y</td>
<td>L</td>
<td>C</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>?</td>
</tr>
<tr class="odd">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="even">
<td>key</td>
<td>Good</td>
<td>Bad</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>