| Image Tools | Text Tools | General | license | .
. . . .

These packages are components of my JEG Tools, which you can download for Mac OS MacOS or Windoze Windoze.

This package, a subset of JEG Tools, is a collection of tools for image and graph manipulations, consisting of

JEG Color Legend

Color Legend

Appends a scale bar for the data dimension of image waves. Controls at the top of the graph allow live adjustment of data range and color table

As of version 2.0, uses a particular interpretation of data dimension scaling. Specifically, if the wave is of integral type, then the data dimension max and min are taken to correspond to the full range of the appropriate integer size, e.g., an 8 bit unsigned integer wave with data dimension full scale of 0-16 nm would scale each data unit to 0.0625 nm and a value of 256 would correspond to 16 nm.

As of version 3.0, allows offsetting upper or lower threshold to zero.
Preferences panel allows user customization of layout.
No longer assumes the image is displayed left vs. bottom.
Supports traces which are displayed with a color as f(z) of another wave.
Renamed from "JEG Z-Legend".
Properly determines bounds of complex waves.

More extensive documentation is available in HTML format.

JEG FFT Between Cursors

Based loosely on WaveMetrics' <DFTMagPhase>

Creates an automatically updating FFT magnitude (and phase) display of a given trace. The FFT is calculated from the portion of the trace between the cursors.

Linear vs. dB scaling and Hann windowing can be applied dynamically, as can the display of the phase wave.



8/5/2003 JEG 1.1 Window hooks must return 0 unless they do something.
11/17/1999 JEG 1.0 Radical brain surgery. Everything live now.
12/17/1998 JEG 0.1 original (never released)

JEG Image Statistics

These routines add a "Roughness…" item to the Analysis menu. Selection of this item, allows the user to select an image from the topmost graph [this needs to be more robust]. A panel is then displayed which shows several commonly cited (and virtually meaningless) statistics for surface morphologies, such as calculated by the NanoScope™ software. If a Marquee is drawn out in the image, the statistics panel will be automatically updated to reflect the values for the region within the marquee. Removing the Marquee does not trigger an update (I have no control over this), but you can click the "Full Image" button, in this event. If the Marquee lies outside the image, the statistics calculated will be for the nearest edge.

The statistical values are displayed with the data dimension units of the image wave, if available. Moreover, if the wave is of integer type, these routines will attempt to apply the integer scaling described in JEG Color Legend.

Because Igor's string formatting routines rigorously apply SI prefixes (I guess, now that I work for NIST, I should praise them for this), rather than "1.000 Å" or "0.100 nm", the panel will display "100.0 pm". Igor has no way of knowing that most humans don't use picometers.

Note: If the data dimension units are changed after the statistics panel is displayed, the change will not be reflected in the panel. Simply create a new statistics panel.

I'd be happy to add other statistical measures, if requested. For instance, it should be trivial to add NanoScope®'s Rmax if anybody can explain to me what on earth “This is the difference in height between the highest and lowest points on the surface relative to the Mean Plane” means. How can a difference be relative to anything?


  • #include <Strings as Lists>
  • #include <Keyword-Value>


8/1/98 JEG 1.0 original

JEG NanoLoader

This package for loading Digital Instruments NanoScope® data files has its own page.

JEG NaN MarqueePoints

Uses marquee to set selected points in graph to NaN. This is useful for excluding noise and other extraneous data from fits or plots (I take no responsibility for the future of your immortal soul if you use these routines excessively).

To use, select a set of points in a graph with the marquee tool. Click within the marquee and select the popup menu item JEG_NaNMarqueeData. All data points from all traces within the marquee will be set to NaN, after ensuring that the original trace is backed up. To customize the NaNing operation, hold down the <command> key while releasing the menu item (CAUTION: do not release the <command> key until the dialog appears, or the default behavior will occur); this functionality requires that the GetInputState XOP (or an alias to it) be placed in :Igor Extensions:.

This package is similar to WaveMetrics' <Delete Marquee Points>, from which it borrows liberally. The primary differences are:

Points are set to NaN, not deleted:
In the case of multiple XY pairs, deleting points can lead to serious synchronization issues.
Points need not be sorted:
This results in somewhat slower processing than <Delete Marquee Points>, but is more flexible.
Data may be plotted against any set of axes:
"Delete Marquee Points" is hard-wired to bottom-left.
Wave is backed up before NaN applied:
The wave is stored in the package's private directory before being changed. Restore with Macros->Restore Wave from Backup. Multiple levels of undo are _not_ supported; only the original incarnation of the wave is saved.



???? JEG 1.0 original

JEG Profiler


Based loosely on WaveMetrics' "Path Profile" procedures.


Macros->Live Perpendicular Profile

to append a pair of crosshair cursors to the specified image. Graphs are automatically created alongside the image window to show the profiles as sections of the image.

The profile scaling is taken from the image. This includes automatic use of any X/Y waves the image has been plotted against.

A dialog will prompt for the image/contour to profile and will ask for wavename bases for the profiles ("_A" or "_B" gets appended to these names). Return an empty name to prevent profiling in that direction.

These procs use the cursor tools, rather than WM's cross-hair technique. This allows easy use of the keyboard to move the profiles.

If you're uninterested in comparative profiles, simply drag one of the cursors off the image.



8/5/2003 JEG 1.1 Window hooks must return 0 unless they do something.
4/11/1999 JEG 1.0 original

JEG Scale-Bar Scale Bar

Appends a scale bar to an image in the current graph (works for traces, too). Scale bar configuration is entirely configurable with the "Misc->Scale-bar preferences..." panel.



3/13/97 JEG 1.0 original

JEG Spectral Filter

Routines for graphically performing spectral image filtering. Based on WaveMetrics' ImageMagPhase package

To activate, select Graph->"Apply Spectral Filter..."

Options are given to work on a copy of the image and to retain an "undo" matrix to allow backing up one step. Opting not to do either saves a tremendous amount of memory, but you're obviously climbing without a rope.

Drag a marquee in the "Spectral Filter" window and then select "JEG_PassFilter" or "JEG_StopFilter" from the marquee menu. The Spectral Filter's magnitude and the working image will be automatically updated to reflect the change. Select "JEG_UndoLastFilter" from the marquee menu (drag a new marquee, if necessary) to return to the last step (assuming you opted to keep an "undo" matrix).

JEG Zoom Graph may prove useful in conjunction with this package



3/13/97 JEG 1.0 original

JEG Zoom Graph

When multiple image frames are present (multiple pairs of axes), the Expand and Shrink marquee routines don't work properly; they scale all waves that fall between any bounds, not just the ones that fall within the marquee. These routines correct this discrepancy.


3/8/97 JEG 1.0 original


WaveMetrics is not responsible for the content of this site.
Please contact me with any questions.

You are the 20726th visitor to this page.

Last modified August 5, 2003 2:31 PM
by Jonathan Guyer

[Assembled by Alpha] [Hosted by HIS.COM]
[Made With Macintosh]