Igor Pro 6 New Feature Details

Below are the details of Igor Pro 6 relative to Igor Pro 5.

System Requirements

On Macintosh, Igor Pro 6 runs on Mac OS X 10.3.9 or later. Igor Pro 6 runs natively on both PowerPC and Intel-based Macintoshes. Igor Pro 6 does not run on Mac OS 9.

On Windows, Igor Pro 6 runs under Windows 2000, Windows XP, and Windows Vista. Igor Pro 6 does not run on Windows NT, Windows 95, Windows 98 or Windows ME.

Igor License Activation

The installers for previous versions of Igor required your serial number and activation key before the installation would succeed. Now these are requested by the Igor application itself.

When Igor Pro 6 is first launched, it prompts you for your serial number and activation key.

These are printed on a card you received with your copy of Igor Pro (look for a card with "IMPORTANT!" written on it) or in an email you received from WaveMetrics.

NOTE: The activation key for Igor 6 is different than for previous versions of Igor.

If you do not enter the serial number and activation key, Igor runs in fully-functional 30-day evaluation mode. After 30 days it becomes a limited functionality demo and Igor will no longer save experiments, procedures, data, or graphics until you enter a valid serial number and activation key.

You can enter a license activation key at a later time by selecting "About Igor Pro..." from the "Igor Pro" menu and clicking the "License..." button.

Igor Registration

When you activate your license, Igor asks if you want to register it. If you say yes, Igor opens the Igor Pro Registration web page in your web browser.

If you initially skip registration and later want to register or if you want to change your registration information, choose About Igor Pro from the Igor Pro menu (Macintosh) or from the Help menu (Windows), click the License button, and click the Register button in the resulting dialog.

WaveMetrics uses registration information only to contact you regarding support issues and to inform you of major upgrades. We do not share your information with other companies.

If you are upgrading and have previously registered, you do not need to register again.

Version Compatibility

Igor Pro 6 can read files created by all earlier versions of Igor.

If you don't use features new in Igor Pro 6, then experiment files that it writes are readable by earlier versions.

Once you use features added in Igor Pro 6 and save an experiment file, that file may cause errors if you try to read it in an earlier version of Igor. Just in case you need to go back to an earlier version of Igor, it is a good idea to make backup copies of all your Igor files now.

Some obsolete features of earlier versions of Igor Pro are no longer supported. See Features Removed From Igor Pro 6 .

Some behaviors have changed slightly in Igor Pro 6. These changes may affect some existing Igor experiments. See Behavior Changes In Igor Pro 6 for details.

Updating Your Igor Preferences

Igor will automatically create a new "Igor Pro 6" preferences directory and will import older preferences if possible.

On Macintosh PowerPC, if you are upgrading from a previous version of Igor, Igor will copy your old preferences into the new preferences directory.

On Macintosh Intel, Igor will not copy old preferences because of byte-order issues. You will start with factory-default preferences.

On Windows, Igor Pro 5 preferences will be copied into the new preferences file but older preferences will not be copied.

User-Interface Changes

Graphs, tables and layouts as well as subwindows within graphs and panels may now be hidden. This, in combination with the new Graph Browser package, should greatly ease the difficulty of working with large numbers of graph windows. Programmers should be aware of the new /HIDE flag for Display, Edit, Layout, NewLayout, NewWaterfall, NewImage, NewPanel and DoWindow along with the hide keyword for SetWIndow and GetWindow.

Prior to Igor Pro 6, when viewing a 3D or 4D wave in a table, command-arrow-key (Macintosh ) or Ctrl+Arrow-Key (Windows ) changed the currently viewed layer. This is changed to option-arrow-key or Alt+Arrow-Key.

You can hide a graph, table, layout or panel by shift-clicking the close icon. You can also specify that clicking on the minimize icon hides instead of minimizing via a checkbox in the Miscellaneous Settings dialog (Misc menu.) When this is turned on, option clicking the minimize icon hides all windows of whatever type you clicked.

The command window can now be hidden, although for normal use it is recommended that you not hide it.

The Windows menu now includes a Hide submenu for hiding multiple windows at once and a Show menu for showing multiple windows at once. Pressing the shift key while clicking the Windows menu changes the sense of the show or hide, for example, changing "Hide->All Graphs" to "Hide->All Except Graphs".

The Windows menu now includes a Procedure Windows submenu to group procedure windows. Previously procedure windows appeared in the Other Windows submenu.

The Windows menu now includes a Recent Windows submenu to make it easier to re-activate windows that you were recently working on. The contents of the Recent Windows submenu is saved when you save an experiment and restored when you re-open the experiment.

If you press the Cmd key (Macintosh ) or Ctrl key (Windows ) while clicking the menu bar, a temporary Recent Windows menu will be accessible from the main menu bar. This shortcut is intended to save you the trouble of navigating through the Windows menu to the permanent Recent Windows submenu.

The Windows->Graphs, Windows->Tables, Windows->Layouts and Windows->Other Windows submenus now show both the window name and the window title for windows that have both.

The Send Behind menu item in the Windows->Control submenu was moved to the Windows menu and renamed Send To Back. A new Bring To Front item was added.

You can now magnify text in any text document using either the new magnifying glass icon in the bottom/left corner of the window or the Magnification submenu in the contextual menu. To display the contextual menu, control-click (Macintosh) or right-click (Windows) in the body of the window.

If you control-click (Macintosh) or right-click (Windows) in a text window, and if the text you clicked was not already selected, Igor now moves the caret to the point at which you clicked before displaying the contextual menu. This allows you to get help for an operation or function in a procedure window by just control-clicking or right-clicking the name of the routine. Previously you had to first select the name of the routine and then control-click or right-click.

New per-window marquee: Now, each window or subwindow can have its own marquee. Marquees are no longer killed when a different window is made active. Only the marquee in the topmost window's active subwindow is animated. The GetMarquee and SetMarquee operations now take the standard /W=hcSpec flag. Also, GetMarquee stores the full hcSpec in S_marqueeWin (previously just the base window name.)

External tool palette: The tool palette for graphs and panels is now created external to the host window. This ensures all the tools are available even when the host window is small. For compatibilty, ShowTools with no flags (as used in recreation macros) will produce the old style tools while ShowTools/A will create the new external style. You can force the old style using:

SetIgorOption useNewToolPalette=0

External info panel: The info panel for graphs is now created external to the host window. This ensures all the cursor information is visible even when the host window is small. You can force the old style using:

SetIgorOption useNewInfoPanel=0

Note about external info panel and tools: When a window is zoomed to full screen, external tools and info panels are killed and made internal. The reverse happens when the window is restored. On Windows, can get a state where external windows are not brought to front if exit zoom mode by some means other than clicking the restore icon. If this happens, zoom and then restore a window using the icons.

Info panel change: Now, to get popup menus in the info panel, you need to right click.

Windows: Igor Pro now uses updated Open File and Save File dialogs which include a navigation bar.

Fling mode for graphs: You can now fling a graph using the hand tool. Press option (alt) and drag in the interior of a graph releasing the mouse button while still moving. Click to stop, use shift to force horizontal or vertical motion. While in fling mode (hand cursor showing,) you don't need to press option to adjust the motion.

Macintosh: Added support for horizontal scrolling using the mouse wheel for tables, page layouts, procedure windows and notebooks.

Previously, holding shift would disable entering trace offset mode when clicking and holding on a trace. Now, to disable, use caps lock.

Guide To Igor Pro 6 Improvements

Here are the Igor Pro 6 improvements discussed on this page.

Mac OS X Support

Intel Macintosh

Behavior Changes In Igor Pro 6

Dialog Improvements

Graphing Improvements

Table Improvements

Page Layout Improvements

Notebook Improvements

Help Improvements

Graphics Export Improvements

Procedure Window Improvements

Gizmo Improvements

Drawing Improvements

Annotation Improvements

Control Improvements

Control Panel Improvements

Analysis Improvements

Statistics Improvements

Matrix Improvements

Curve Fitting Improvements

Color Table Improvements

Image Plot Improvements

Image Processing Improvements

3D Analysis Improvements

Data Import And Export Improvements

File Command Improvements

Programming Improvements

New and Improved XOPs

Miscellaneous Improvements

New And Improved Example Experiments

New And Improved WaveMetrics Procedure Files

Updated Technical Notes

XOP Toolkit Improvements

New Operations And Functions

Changed Operations And Functions

Features Removed From Igor Pro 6

This section discusses features removed from Igor Pro 6 because they are obsolete or have been superseded by newer features.

The Graphical Slicer XOP is now obsolete. It is completely replaced by Gizmo. If you are not familiar with Gizmo try the VolumeSlicerDemo experiment in Examples:Visualization:Gizmo Examples. Also see the Gizmo Overview.

The Surface Plotter XOP is now obsolete (though not removed). It is completely replaced by Gizmo. Old experiments containing surface plots should function as usual but as of Igor Pro 6 there is no menu item to open a Surface Plotter window. You can still open a new Surface Plotter window using the command CreateSurfer.

The Wavelet XOP is obsolete. It is replaced by the built-in operation DWT.

NeuralNetworker XOP is obsolete. It is replaced by the built-in operations NeuralNetworkTrain and NeuralNetworkRun. Both operations have almost identical syntax to the one used in the old XOP.

Speak XOP is obsolete.

MDInterpolator is obsolete. It is replaced by the built-in Interp3D() and Interp3DPath.

StatsFuncs and SpecialFuncs XOPs have been replaced by built-in functions. See Statistics Improvements.

The ANOVA package (Analysis->Packages->ANOVA) is now obsolete. It is still being shipped, but you should move to the built-in statistics functionality (see Statistics). The old ANOVA package depended on the ANOVASupport XOP to work; if you really want to continue using this package you must install the XOP in the Igor Extensions folder. You will find the ANOVASupport xop in your Igor Pro folder, in More Extensions:Data Analysis:Obsolete.

Windows Support

Our early testing of Igor 6 on Windows Vista has not turned up any problems (so far).

Mac OS X Support

When you create and save a new plain text file (notebook or procedure file) on Mac OS X, Igor now uses linefeed as the line terminator. Previously it used carriage-return on Macintosh and carriage-return/linefeed on Windows. Now it uses linefeed on Mac OS X and carriage-return/linefeed on Windows.

Intel Macintosh

With the release of Intel-based Macintoshes in January of 2006, Mac OS X now runs on two processor "architectures": PowerPC and Intel. The Igor Pro 6 application is a "universal" Mac OS X package containing both PowerPC and Intel code and thus runs native on both processors.

The Igor Pro package is inside the Igor Pro Folder. If you have enabled the Show All File Extensions setting in the Finder preferences then the Igor Pro package will appear as "Igor Pro.app".

When you run Igor Pro 6 on a PowerPC Macintosh, the PowerPC code in the Igor Pro package executes. When you run Igor Pro 6 on an Intel Macintosh, the Intel code executes.

Older versions of Macintosh Igor Pro are PowerPC-only. They can run on Intel Macintosh under Apple's "Rosetta" emulation system. Execution speed is roughly one-third of the speed running on a similar PowerPC Macintosh.


In order to use an XOP with the Intel Macintosh version of Igor, the XOP must be recompiled as an Intel executable or as a "universal" executable which contains both PowerPC and Intel code. The Igor XOP Toolkit includes instructions for converting PowerPC XOPs to universal XOPs.

The following WaveMetrics XOPs have not yet been ported because third-party libraries are not yet available. Consequently these XOPs can not run with the Intel version of Igor:

HDF Loader


NetCDF Loader


If you run the Intel Macintosh version of Igor while a PowerPC-only XOP is installed, Igor will not display an error message but will simply ignore the PowerPC-only XOP. This allows you to easily switch to the PowerPC version of Igor to run PowerPC-only XOPs, as explained in the next section. Similarly, if you run the PowerPC version of Igor while an Intel-only XOP is installed, Igor will not display an error message but will simply ignore the Intel-only XOP.

The KillWindow operation now works with XOP target windows.

Executing PowerPC XOPs on Intel Macintosh

If you need to run an XOP that has not been ported to Intel Macintosh, you must run the PowerPC version of Igor. You can do this on an Intel Macintosh by checking the Open Using Rosetta checkbox in the Finder's Info window for the Igor Pro application package.

With the Open Using Rosetta checkbox checked, the PowerPC code in the Igor Pro 6 application package will run and will call the PowerPC code in any XOPs that you invoke.

Backward Compatibility

If you save any kind of Igor file that contains "high-ASCII" characters (characters other than the standard digits, letters and punctuation) from the Intel Macintosh version of Igor and then load that experiment into an older version of Igor (Igor Pro 5 or earlier), the high-ASCII characters will be garbled.

Behavior Changes In Igor Pro 6

Windows: When resolving shortcuts, Igor now instructs the operating system to refrain from doing an exhaustive search if the target of the shortcut has been moved or renamed. This should prevent the very long delays that some users experienced when starting Igor. However, it also means that shortcuts will not work if the target file has been moved or renamed.

As of Igor Pro 6, it is an error to apply table the date or date&time formats to a wave displayed in a table unless the wave is double-precision. Date and date/time values can not be accurately stored in waves of lesser precision. If you get an error relating to this issue, use the Redimension operation to change the wave to double-precision.

The behavior of LoadWave/J (Load Delimited Text) and LoadWave/F (Load Fixed Field Text) operations are slightly changed in the presence of columns that are all blank. If you tell LoadWave to ignore blanks at the end of the column (via the /V flag) and if a column is all blank, previously LoadWave would not create a wave for that column. Now it will create a zero point wave. If you want to completely skip a column, use the /B flag.

Relaxed type checking for WAVE variables: Most operations that create WAVE variables and that required a preexisting WAVE to have the exact same type as would be created if there were no preexisting WAVE now allow less exacting compatibiltiy requirements. Most now just check for numeric vs text and real vs complex. Make, however, is still strict.

Igor Pro 6 is more strict with regard to #"" syntax used in programming certain controls. Previously, the quotes were optional and now they are required.

The way Igor maps false-color image values to colors is subtly different.

When saving an unpacked experiment, Igor would create file names for waves that included the .ibw extension. If a wave name exceeded 27 character in length, Igor would truncate the wave name to add the file name extension. This caused a problem if you had two waves whose names matched in the first 27 characters. The same file name would be used for both waves. Now Igor will omit the file name extension in this case.

When using the /R flag with the Duplicate operation, the action with just a single value in brackets was not specified. The actual action was such that [a] acted like [a,*]. Now, as of Igor Pro 6, [a] acts like [a,a]. I.e., a single row, column etc is specified.

Tick labels that include a prefix and units now have a space between the number and the prefix.

Dialog Improvements

Added support for matrix results in the Operation Result Displayer. Now for operations that can produce a matrix result, such as FFT or Convolve, you can choose to display the result as an image or contour plot.

Dialog Wave Browsers now support "type selection". When the wave browser list has keyboard focus, if you quickly type a few characters the first item that starts with those characters is found. If you type nothing for some short waiting period (currently one second), it starts over again accumulating the characters.

New dialogs: Resample, Filter Design and Application.

Some dialogs have been modified to support new features. Some highlights:

Curve Fit Dialog supports more cursors, a textbox of curve fit results and multi-threaded fitting.

Histogram dialog supports new binning modes (Histogram/B=3 and 4) and options (/X and /P); added Operation Result Displayer.

Modify Axis dialog, Range tab supports the ability to set one end of an axis to manual range and the other end to auto range.

New Annotation and Modify Annotation dialogs support relative font size settings.

Smooth dialog now supports Loess and Median smoothing.

Trace Offset dialog (from the Modify Trace Appearance dialog) supports new trace multiplier feature.

Graphing Improvements

Graphs can now have up to 10 cursors (ABCDEFGHIJ). To view and select cursors, in info panel, right click and select desired pair from menu.

Now, in addition to crosshair cursors, you can choose vertical only and horizontal only hairlines. The Cursor operation's /H flag now takes values of 2 for vertical and 3 for horizontal.

You can now cause a y axis to be autoscaled to the subset of data defined by the current x axis range. Use SetAxis/A=2.

You can now autoscale just one end of an axis by providing to SetAxis a '*' as a range value to denote that that value be autoscaled.

You can now scale a trace using the new muloffset keyword with ModifyGraph. See ModifyGraph for Traces. See Trace Multipliers for information on interactively scaling a trace.

TagVal now has two additional selector codes: TagVal(6) returns the x muloffset (with the not set value of zero translated to 1) while TagVal(7) returns the y muloffset.

You can now mask individual points for display using the new mask keyword with ModifyGraph. See the example in the ModifyGraph for Traces documentation.

New styles are now available for arrowMarker mode and you can now draw arrows between points. See ModifyGraph's arrowMarker keyword and the example in the ModifyGraph for Traces documentation. These styles are also available for draw tools. See Drawing Improvements .

ModifyGraph zColor now works with color index waves.

ModifyGraph zColorMax and zColorMin keywords set the color (or invisibility) of the trace when the z value exceeds the zMin, zMax range.

ModifyGraph useLongMinus= 1 causes the normal minus sign (hypen) to be replaced with a longer dash.

Table Improvements

To avoid moire patterns, grid lines are now drawn using a gray color instead of a dotted pattern.

You can now choose the decimal symbol (dot or comma) used when entering data in tables. Choose Table->Table Misc Settings. The selected decimal symbol is used for entering data and copying and pasting. See Decimal Symbol and Thousands Separator in Tables for details.

The target cell ID area in the top-left corner of the table now identifies wave element corresponding to the target cell. For example, if a table displays a 2D wave, the ID area might show "R13 C22", meaning that the target cell is on row 13, column 22 of the 2D wave. For 3D waves the target cell ID includes the layer ("L") and for a 4D wave it includes the chunk ("Ch").

File->Save Table Copy to a text file now includes the horizontal row of dimension labels if they are displayed.

The SaveTableCopy /N flag has been redefined to support saving horizontal row of dimension labels if they are displayed.

The ModifyTable operation allows you to specify a range of column numbers when using column number syntax. This is useful in style macros and not much else:

ModifyTable rgb[0,3] = (0, 0, 65535) // Set columns 0 through 3 to blue

Prior to Igor Pro 6, if you created a table displaying a wave with a very large number of columns (roughly 10,000 or more) it took a long time to display the table. It took essentially forever with a huge number of columns (100,000 or more). Igor Pro 6 can handle virtually any number of columns quickly.

A side-effect of the improvement in handling very large numbers of columns is the loss of the ability to set properties independently for the real and imaginary columns of a complex wave. The following ModifyTable command which used to set the real columns to red and the imaginary columns to blue now sets both to blue:

ModifyTable rgb(wave0.real)=(50000,0,0), rgb(wave0.imag)=(0,0,50000)

When adjusting the width of a column for a multidimensional wave, by default Igor sets all columns to the new width. You can set the width of one specific column by pressing the command key (Macintosh) or Ctrl key (Windows) before you start dragging the edge of the column.

Normally Igor sets the properties of all data columns from a given wave the same. You can override this behavior to set the properties of specific columns only by selecting the columns to be set, pressing the command key (Macintosh) or Ctrl key (Windows), and then making a selection from the Table menu or the table popup menu.

You can autosize the columns of a wave by double-clicking the vertical boundary to the right of the wave name or using the Autosize Columns menu item in the Table menu. See Autosizing Columns By Double-Clicking for details. You can also use the autosize keyword of the ModifyTable operation.

You can now use the arrow keys to move the selection in the entry area instead of finalizing the edit and changing the selected cell. To enable use of arrow keys in the entry area, choose Misc-Miscellaneous Settings, select the Table category, and click the Apply Arrow Keys To Entry Area checkbox.

Shift-clicking the close box of a table now hides the table. Clicking the minimize button of a table now hides the table if you check the Minimize Icon Is Hide checkbox in the Misc Settings dialog. Option-shift-clicking the minimize icon hides all tables if you check the Minimize Icon Is Hide checkbox in the Misc Settings dialog.

You can show and hide various parts of a table using the Show submenu in the Table menu or using ModifyTable showParts.

Changed default for the Point column to integer format instead of general format.

Page Layout Improvements

Shift-clicking the close box of a layout now hides the layout. Clicking the minimize button of a layout now hides the layout if you check the Minimize Icon Is Hide checkbox in the Misc Settings dialog. Option-shift-clicking the minimize icon hides all layouts if you check the Minimize Icon Is Hide checkbox in the Misc Settings dialog.

You can show or hide the windows corresponding to layout graph or table objects by right-clicking the object or by selecting one or more objects and right-clicking in an empty area of the page.

Notebook Improvements

Special characters (e.g., pictures, date, time) now have names. See Special Character Names for details. The names are of use only to advanced programmers.

Added functions SpecialCharacterList and SpecialCharacterInfo.

The Notebook operation has a findSpecialCharacter keyword.

Added a new kind of special character called an "action". An action is a special character which, when clicked, executes Igor commands. See Notebook Special Action Characters for details. A new operation, NotebookAction, can create and modify actions.

You can now magnify text in any text document using either the new magnifying glass icon in the bottom/left corner of the window or the Magnification submenu in the contextual menu. To display the contextual menu, control-click (Macintosh) or right-click (Windows) in the body of the window.

Help Improvements

You can now magnify text in any text document using either the new magnifying glass icon in the bottom/left corner of the window or the Magnification submenu in the contextual menu. To display the contextual menu, control-click (Macintosh) or right-click (Windows) in the body of the window.

Graphics Export Improvements

SavePict can now save to a string variable rather than to a file. This is for use with a new feature of ListBoxes.

SavePict now accepts a /SNAP flag to save a snapshot of a window including controls.

Procedure Window Improvements

New #if style compiler directives as well as existing #include and #pragma keywords are colorized. >Also, the default colors for some keywords were changed to make them more distinctive.

Igor Procedures now are reloaded after an Adopt All.

Gizmo Improvements

ModifyObject commands can now handle constants in the form GL_SRC_ALPHA.

ColorScales can now be defined by a color wave with an arbitrary number of entries. ColorScales now also have an optional depth to obtain a 3D appearance.

You can now provide a numerical wave for tickmark positions and a text wave for tickmark labels for each one of the 12 box axes.

There are now built-in box-axes labels.

Added support for Quaternary plots using scatter or path objects.

Isosurfaces can now be saved as triangle waves.

Data objects scaling is now extended to group objects.

You can now duplicate objects in the object list.

Drawing Improvements

New arrow styles for Draw tools using SetDrawEnv with keywords arrowSharp, arrowFrame and astyle.

New coordinate transformations for Draw tools using SetDrawEnv with keywords translate, rotate, scale, origin, push, pop and rsabout. An example is provided.

New named groups for Draw tools using SetDrawEnv with keywords gname and gedit.

New operation DrawAction provides support for deleting, inserting and reading back a named group or entire draw layer. An example is provided. The extractOutline keyword is useful for region of interest (ROI) readback for image processing.

New snap grid for draw and control layout. When the tool bar is in draw or control layout mode, you can display a grid and can cause object coordinates to snap to the grid (visible or not.) The mover icon (bulldozer) now has a new Grid item which gives a menu for control of the grid. Also see the new ToolsGrid operation.

Can now rotate draw objects by clicking just outside a selection's handles. When the arrow tool is selected, the cursor changes shape when over the handles and when over the invisible rotation handles. Note: at the present time, rotation of text and pictures is not supported.

When dragging, resizing or rotating, a live outline of the object(s) is presented.

You can now resize multiple selected objects. Previously, resize worked only when a single object was selected.

Rectangles, Rounded Rectangles and ovals now use polygons and/or Bezier curves. Consequently, the outline is centered on the coordinates rather than being inside the enclosing rectangle. Also, line dash and arrow properties are supported.

Annotation Improvements

ColorScales can frame up to 98 individual colors, the frame color can be different than the annotation's foreground color, the axis range can be manually set, and date axis tick labels are supported.

New flag: TextBox/LS= l

Provides a line spacing tweak. Value is points of extra (plus or minus) line spacing. With negative values, you may need to add an extra blank line to avoid clipping the bottom of the last line.

Control Improvements

New snap grid for draw and control layout. When the tool bar is in draw or control layout mode, you can display a grid and can cause object coordinates to snap to the grid (visible or not.) The mover icon (bulldozer) now has a new Grid item which gives a menu for control of the grid.

The Control Procedure dialog generates structure-based procedures if you select the relevant checkbox.

ListBoxes now support graph and picture images. See ListBox's new keyword, special.

New features for ListBox: autoscroll. Can now use a value of -1 with the row keyword to cause the listbox to scroll to the first selected cell (if any.) Can combine with selRow to both select a row and to ensure it is visible (modes 1 and 2.)

ListBoxes and other controls now support mousewheel. On Mac, both vertical and horizontal work. On Windows, horizontal should work when Vista is released.

You can now use ListBox modes 5 & 6 without a selWave. Use new keyword selCol to set the column along with existing keyword selRow. You can read back the selection using ControlInfo with the row going in V_Value and the column going in a new varible named V_selCol.

Extended syntax for PopupMenu and ValDisplay value keyword: Previously, using the # prefix meant that the following text needed to be a literal quoted string. Now, the following text can be a string expression that will be evaluated at run time to obtain the actual string expression that needs to be executed each time the popup menu is used. In other words, there is a level of indirection.

SetVariable now supports a matrix wave and accepts a wave column spec: wave[row][col]

The action function's structure now includes:

Int32 colIndex	Column index for a wave, unless colLabel is not null.
char colLabel[MAX_OBJ_NAME+1]	Wave column label.

Listboxes and Buttons now honor text justification escape codes (\JL, \JC, and \JR) embedded in the text for a listbox cell or the text for the button title.

Control Panel Improvements

New noEdit keyword for ModifyPanel. Use to prevent users from modifying a control panel.

New no-activate mode for panels: NewPanel/NA.

You can now create panels that act like subwindows but live in their own windows attached to a host graph window. The host graph and its exterior subwindows move together and, in general, act as single window. Exterior subwindows have the advantage of not disturbing the host graph and, unlike normal subwindows, are not limited in size by the host graph.

You can now create panels that float above all other windows (except dialogs.) Because floaters cover up other windows, you should use them sparingly if at all. To create a floating panel, use NewPanel with the new /FLT flag.

You can now right click in a base panel window or external subwindow to get a popup menu that includes Show or Hide tools. This menu is not provided if ModifyPanel noEdit=1 is in effect. However, programmers can temporarily turn the menu back on by executing

SetIgorOption IndependentModuleDev=1

Alternatively, you can temporarily turn noEdit off to get tools.

Analysis Improvements

The Analysis menu was reorganized. The Hanning item was removed (but you can still invoke the Hanning operation from the command line). The Misc Operations submenu was removed with its items (Rotate and Unwrap) moved to the Data menu. The Filter and Resample items were added. A new Statistics submenu was added.

Histogram now supports two new modes (Strugers and Scott) for automatic determination of the number of bins. New centered-X option (/C flag) creates output wave with X values centered on the bins. New sqrt(N) wave option (/N flag) creates a wave containing values that are square root of the bin counts. These options are useful when curve fitting to a histogram. New (/P) flag can be used for normalizing the histogram as a probability density centered on the bins.

Added new operation FPClustering which implements the farthest-point clustering algorithm.

Added two new flags to the PCA operation.

The FindLevel, PulseStats, and EdgeStats now work with any data type of wave, not just single and double precision floating point. FindLevel and FindLevels now have an /EDGE flag.

Added the Loess operation, which smooths srcWaveName using locally-weighted regression smoothing. Loess can be used to interpolate over and replace NaNs. See the Loess Demo.pxp example experiment.

Added the FilterFIR operation (which replaces the now-obsolete-but-still-supported SmoothCustom operation). FilterFIR can filter along any wave dimension, and can also generate simple digital filters, including a very steep notch filter.

Added the FilterIIR operation, which can filter along any wave dimension and generate simple IIR filters. The automatically-designed filter coefficients are bilinear transforms of the Butterworth analog prototype with an optional variable-width notch filter, using Direct Form 1 or Direct Form II cascade implementations.

Added median smoothing (/M) to the Smooth operation. The median and boxcar (/B) smoothing modes now detects NaNs in the input data and adjusts the averaging appropriately. The Savitzky-Golay (/S) smoothing coefficients limit has been raised from 25 to 32767.

Added the WindowFunction operation, a generalization of the now-obsolete (though still supported) Hanning operation.

CWT: changed the FFT method so that it now accounts for wave scaling in the transform scales.

Statistics Improvements

Added an extensive collection of operations and functions for statistical analysis. They include 32 new statistical test operations, 38 new cumulative distribution functions, 30 new probability distribution functions, 34 new inverse cumulative distribution functions, 10 random noise distributions and 17 general statistical utility functions. You can find more information in the Statistics help file.

Matrix Improvements

Added new functions to MatrixOP: diagRC(wave,rows,cols), Rec(wave), Sum(wave), MagSqr(wave), SumSqr(wave), TriDiag(w1,w2,w3), Convolve(w1,w2,flag), Correlate(w1,w2,flag), SubtractMean(w,opt), SyncCorrelation(), AsyncCorrelation(), ChirpZ(src,A,W,M), ChirpZf(src,startF,endF,df), beam(w,x,y), WaveMap(w1,w2) and Frobenius norm. MatrixOp now supports a /C flag to create a complex wave reference for the output wave. For 3D operations you can use the /NTHR flag to run the operation in multiple threads.

New operation: MatrixLinearSolveTD for linear solutions to tridiagonal matrices.

Curve Fitting Improvements

Added Quick Fit menu item to the Analysis menu and the Graph trace contextual menu. This provides quick access to simple fits using the built-in fitting functions. See Curve Fitting Using the Quick Fit Menu.

It is now possible to use wave subrange notation like that used with the Display operation for almost any wave that is used by the CurveFit, FuncFit or FuncFitMD operations.

Curve Fitting now offers Orthogonal Distance Regression in addition to ordinary least squares. This is useful for situations in which there are measurement errors in the independent variables as well as in the dependent variable. This goes under the name Errors in Variables, Measurement Error Models, or Random Regressor Models. See the CurveFit operation.

Curve Fitting now supports fitting to implicit functions.

You can now specify a list of fitting functions to FuncFit. The result will be a fit to the sum of the functions. See the section Fitting Sums of Fit Functions in the FuncFit reference.

All-at-once fit functions can now implement multivariate fit functions.

A new user-defined fit function format has been added that takes a single structure parameter. This allows you to transmit arbitrary data to a user-defined fit function. See User-Defined Fitting Function: Detailed Description for a discussion of all formats for user-defined fitting functions.

Gauss1D(wave, x) and Gauss2D(wave, x, y) functions to complement the built-in fit functions gauss and Gauss2D.

Curve fits now add the information previously found only in the history report to the wave note of the auto-destination wave (the one requested by /D with no wave).

Curve fits can now add a textbox to the graph displaying the Y data. This textbox contains information similar to what is printed in the history report. The textbox is controled by the /TBOX flag.

The Curve Fit Textbox Preferences dialog allows you to select what information is included in the textbox. This dialog is accessible from the Quick Fit menu (Analysis menu) or from the Output Options tab of the Curve Fit dialog.

The Curve Fit dialog supports all graph cursors A-J.

Color Table Improvements

Added 14 new color tables: RainbowCycle, Rainbow4Cycles, GreenMagenta16, EOSOrangeBlue11, EOSSpectral11, dBZ14, dBZ21, Web216, BlueGreenOrange, BrownViolet, ColdWarm, Mocha, VioletOrangeYellow, and SeaLandAndFire.

See Igor Pro 6-Compatible Color Tables or the ColorsMarkersLinesPatterns.pxp example experiment.

Image Plot Improvements

Earlier Igors mapped the image value by rounding to the nearest color table index:

index= round((z-zmin)/(zmax-zmin)*(numColors-1))

which meant only half of the first and last colors were used.

Igor 6 maps the image value by truncating to the nearest color table index:

index= floor((z-zmin)/(zmax-zmin)*numColors)

which uses the first and last colors for as many values as the other colors.

You can revert to the old way of scaling image colors by executing this command each time the experiment starts up:

SetIgorOption preIgor6ColorScaling=1

(You can put the command at the top of the main procedure window to have it executed when the experiment is opened.)

Image Processing Improvements

New operation ImageFocus for processing stacks of multi-focal images.

ImageAnalyzeParticles can now provide minimum, maximum and average intensity level for each particle.

Added /U flag to ImageAnalyzeParticles to save the marker wave as unsigned byte.

ImageSave with the flag /WT now saves tag information even if the image is 8 bits. The operation is more restrictive now; it actually tests that none of the tags you are adding conflicts with any of the primary tags.

Implemented the Zhang and Suen thining algorithm in MatrixFilter (see /T flag).

ImageSeedFill has three new keywords for specifying the seed pixel/voxel in terms of rows, columns and layers. This solves some roundoff difficulties when the source wave had wave scaling.

ImageTransform has new keywords: rgb2cmap,fuzzyClassify,roiTo1D and pad3d.

3D Analysis Improvements

ImageStats now supports operations on 3D ROI specification.

Data Import And Export Improvements

Substantially revised the SndLoadSaveWave XOP and ported it to Windows.

Previous versions of the SndLoadWave XOP worked only on Macintosh and loaded System 7 resource sound files; this version works on both Macintosh and Windows, but no longer loads resource sound files. Consequently, the resource-related flags to SndLoadWave command are no longer supported.

This version was revamped for Igor Pro 5 or later to permit calling SndLoadWave directly from a user function. This required changing the /S flag part of SndLoadWave.

SndLoadWave XOP implements mostly-backwards-compatible LoadWAVfile and SaveWAVfile commands that were provided only on Windows through the LoadWAVfile XOP. See LoadWAVfile and SaveWAVfile as documented in this help file about the compatibility.

You can now specify comma as the decimal symbol when saving waves in text files using the Save operation or the Save Waves dialog.

File Command Improvements

The Grep operation can find key words (regular expressions, actually) in files.

File operations are "thread-safe". See ThreadSafe Functions for more info.

Programming Improvements

Added support for conditional compile using #if and #ifdef style compiler directives.

To provide support for computers with multiple processors and to allow creation of preemptive multitasking background tasks, a new class of user functions called ThreadSafe has been created. See ThreadSafe Functions for more info.

You can now create multiple background tasks. See CtrlNamedBackground.

Windows (and subwindows) may now be hidden. See the new /HIDE flag for Display, Edit, Layout, NewLayout, NewWaterfall, NewImage, NewPanel and DoWindow along with the hide keyword for SetWIndow and GetWindow.

New options for DoWindow:

Can use /B=bname to send window behind window bname.

Can use /W=targWin for explicit designation of target.

The HideIgorMenus and ShowIgorMenus operations hide or show most of the built-in main menus. The trace popup contextual menu can be extended by User-Defined Menus. See Built-in Menus That Can Be Extended.

User-Defined Menus can now specify Multiple Menu Items on one line, and Specialized Menu Item Definitions provide user-defined color, line style, marker, pattern, character and font menus. A dynamic user-defined menu item disappears from the menu if the menu item string expression evaluates to ""; the remainder of the menu definition line is then ignored; see Optional Menu Items. The new GetLastUserMenuInfo operation sets variables in the local scope to indicate the value of the last selected user-defined menu item.

New Independent Modules feature: You can now designate groups of one or more procedure files to be compiled and linked separately. Once compiled and linked, the code remains in place and is useable even though other procedures fail to compile. This allows control panels and menus to continue to function regardless of user programming errors. See The IndependentModule Pragma.

WinList, FunctionInfo, FunctionList, ProcedureText, and DisplayProcedure have additional features to work with independent modules.

The DebuggerOptions operation can programatically enable or disable the debugger's settings.

The internal method Igor uses to deallocate memory when waves are killed has been improved. The new method uses reference counting to determine when a wave is no longer referenced anywhere and can be safely deallocated. The old method never fully killed waves but kept a list for reuse when making new waves. The new method should reduce the likelihood of out of memory errors, especially on Mac. See Wave Reference Counting and WAVEClear.

The #include statement can now include a procedure file relative to the procedure file containing the #include statement. Previously syntax like this:

#include ":procfile"

caused Igor to look for a file named "procfile" relative to the Igor Pro Folder. This is still the case. However now, if no file is found relative to the Igor Pro Folder, Igor looks again, but this time relative to the procedure file containing the #include statement. This allows you to distribute a master procedure file that includes helper procedure files stored next to the master.

This second step occurs only if the procedure file containing the #include statement is stored as a standalone file, not if it is a packed file stored in an experiment file.

The name of the file being included must end with the standard ".ipf" extension but the extension is not used in the include statement.

New and Improved XOPs

Added VISA XOP to "More Extensions\Data Acquisition". Supports instrument control using the VISA protocol. See VISA XOP for details.

Miscellaneous Improvements

Added "regular expression" commands.

A regular expression is a pattern that is matched against a subject string from left to right. Most characters stand for themselves in a pattern, and match the corresponding characters in the "subject". See Regular Expressions in Igor.

In the case of Grep, the "subject" is each line of the input file, or for a text wave input, one or more columns of each row, considered one line or row at a time.

For GrepList the subject is each string list item, considered one item at a time.

For GrepString and SplitString, the "subject" is the (only) input string.

The regular expression syntax supported in Igor is based on the PCRE -- Perl-Compatible Regular Expression Library. This syntax is similar to regular expressions supported by various UNIX and POSIX egrep(1) commands. Igor's implementation does not support the Unicode (UTF-8) portion of PCRE. See Regular Expressions References.

New flags for Print: /C causes all numeric expressions to be treated as complex and /SR enables wave subrange printing.

Igor Pro 6 attempts to detect and repair corrupted page setup records that can result when pre-Carbon Macintosh experiments are loaded on Mac OS X. See Pre-Carbon Page Setup Records for details.

Windows: When sending a print job, the document name which appears in the print queue is now taken from the window title. Previously it was "Igor Document" for all print jobs.

New And Improved Example Experiments







Clustering.pxp is replacing KMeans.

Loess Demo.pxp





Spectral ConfidenceInterval.pxp

33 new example experiments in Statistics folder

New And Improved WaveMetrics Procedure Files

New Graph Browser.ipf is located in the Igor Procedures folder and is therefore always available via the Misc menu. The graph browser in combination with the new ability to hide graphs makes it much easier to deal with large numbers of graph windows.

The #include <New Polar Graphs> procedures have been revised to be compatible with Independent Modules. Indeed, they are used to implement the new Filter... dialog. See The IndependentModule Pragma.


Added command printing option to IP (Image Processing) procedures: Image Line Profile.ipf, Image Histogram Panel.ipf, Image Grayscale Filters.ipf, Image Rotate.ipf.

New IP Procedure: zeroPencil.ipf for drawing zero values in grayscale images.

New IP Procedure: ImageCurvature.ipf

New IP Procedure: LoadFolderImages.ipf

Updated ImageSlider.ipf changing layer display to a setVariable.

Updated AppendImageToContour to provide GUI to sliced (simulated filled) contours.

Changed Image Line Profile procedure to use Gizmo instead of Surface Plotter.

Decimate.ipf includes options to generate standard deviation and standard error waves. The Decimate menu item is now in the Analysis menu.

New Statistics procedures: StatsPlots.ipf, Ancilla1D.ipf, AllStatsProcedures.ipf, ANOVA1PowerCalc.ipf, and StatsProcs.ipf

New procedure file: PopupWaveSelector.ipf uses WaveSelectorWidget.ipf to provide a popup control panel containing a WaveSelectorWidget. See the procedure file comments for documentation.

Updated Technical Notes

TN003, which explains how to read and write an Igor binary wave file, and PTN003, which explains how to read and write an Igor packed experiment file, have been modified to include information about the platform (Macintosh or Windows) that wrote the file. Currently the only significance of this information is that Igor uses it to translate from the Macintosh character set to the Windows character set or vice versa if the file contains "high-ASCII" characters (characters other than digits, letters or common punctuation symbols). If you have written software based on TN003 or PTN003 and you care about high-ASCII characters, see the updated versions of those tech notes.

XOP Toolkit Improvements

The XOP Toolkit now supports development of "universal" XOPs for Mac OS X - that is, XOPs that run on Intel Macintosh as well as PowerPC Macintosh.

When looking for help for an external operation or function, Igor looks for the XOP help file in the same directory as the XOP. Now, if the XOP help file is not found there, Igor will also check open help files to see if there is help for the external operation or function.

New Operations And Functions

New Programming Operations And Functions
















New File-related Operations and Functions


New Analysis Operations And Functions






erf and erfc now support complex arguments.

New Notebook Operations And Functions




New Miscellaneous Operations And Functions

ChebyshevU returning the chebyshev polynomial of the second kind.

beta returns the beta function.

cequal compares two complex numbers.

Gauss1D(wave, x) and Gauss2D(wave, x, y) functions to complement the built-in fit functions gauss and Gauss2D.

LinearFeedbackShiftRegister generates bit streams with custom feedback taps. Provides defaults that generate maximal-length sequences. The bit patterns are (bad) random bit patterns with useful spectral properties.

Hypergeometric function implemented in HyperG0F1, HyperG1F1, HyperG2F1 and HyperGPFQ.

SphericalHarmonics are now implemented as a built-in function.



Changed Operations and Functions

The AnnotationInfo function returns the text of the annotation as escaped text. That is, backslashes are returned as \\ and quotes were returned as \". This is useful if you subsequently use the text in an Execute statement or print the output to the history. However if you programmatically use the returned text in a subsequent Textbox command, it does the wrong thing. AnnotationInfo now has a third parameter that allows you to turn the escaping of the text off.

Added a /E flag to the Save operation. Using /E=0 when saving as general or delimited text suppresses the use of escape codes when writing text containing carriage return, linefeed, tab or backslash characters.

The CsrInfo string function now includes a RECREATION key containing the Cursor command to regenerate the current settings. The command includes the /W flag.

StringByKey and related string functions can be made case-sensitive through an optional matchCase parameter.

The ReplaceString function now works much faster when doing a large number of replacements.

New keyword in AxisInfo: SETAXISCMD provides the full SetAxis command.

The DisplayProcedure command's function or macro name is optional, allowing one to simply display (show and bring to front) the named procedure window.

Added LOCK keyword to WaveInfo to read back the wave's SetWaveLock value.