Beta What's Changed Since IGOR Pro 6.22A

(IGOR Pro 6.30 Public Beta Releases)

This file describes significant changes made to IGOR Pro and supporting files starting with IGOR Pro 6.30B01, a beta version of the in-development IGOR 6.30. Here are the updates in reverse chronological order:

IGOR 6.30B03

IGOR Application

New Features

Added the Batch Curve Fitting package.

Added the Scatter Dot Plot Panel.

Improved the detection of bugs in user-written code in functions. See Changed Behavior.

The escape code used in TextBox and Tag commands to display a specific marker, \Wtdd, can now also be \Wtddd and supports custom markers. Custom marker numbers start at 100 and can go up to 999. For more on custom markers, see "Custom Marker Hook Functions".

Added a new flag to the Cursor operation:

Set No Kill mode. Suppresses the normal removal of a cursor when it is dragged and released outside the graph plot area.

Added the GetMouse operation.

The FilterFIR notch filter length had been limited to 4001 points. Now the limit is 2147483647 points, which makes the minimum notch width 0.000107% of the sampling frequency.

Added WaveRefIndexedDFR. Use this instead of WaveRefIndexed when you want to interate over the waves in a data folder without needing to use GetDataFolder and SetDataFolder.

Added the Scatter Dot Plot Panel. Scatter Dot Plots are one part category plot, one part scatter plot, and one part histogram. Like category plots they show total counts for multiple data sets, each labeled on the X axis. Like scatter plots they provide a sense of the data's distribution. Like histograms they sort data into bins of points in which all values fall into a range.

Windows: GetWindow kwFrameOuter wsizeRM returns the pixel coordinates of the MDI frame even when the frame is maximized (wsizeDC returns 2,2,2,2 in this case) or minimized (in which case it returns coordinates very far offscreen).

Windows: the AfterMDIFrameSizedHook(param) user-defined function that IGOR calls when the "MDI frame" (the "application window" that IGOR has only under Windows) is resized is now also called when the MDI frame is moved, in which case param = 3. Resizing the frame by the top left corner calls AfterMDIFrameSizedHook twice; first for the move (param = 3) and then for the normal resize (param = 0).

Changed Behavior

Improved error checking when the wrong type of wave is used in a compiled wave assignment. For example, a complex destination wave but used in a real-only assignment expression.

New procedures files are now created with an initial line of text which turns on runtime lookup of globals, strict wave reference mode and wave index bounds checking:

#pragma rtGlobals=3

NOTE: #pragma rtGlobals=3 requires IGOR 6.13 or later. Edit this line to rtGlobals=1 if the procedure will be opened by IGOR versions earlier than that. Also see Update 6.20B01 for another suggestion on compatibility with earlier versions of IGOR.

Also improved error checking of single-point Waveform Arithmetic and Assignment expressions in user-defined functions:

Since 2004, user-written function code that assigned an expression to a single point of a wave similar to this:

wave[index] = expression

compiled faster code than that used to implement a full wave assignment loop. In this case the usually varying p and x incrementers are not set and expressions that use them give unexpected results. So:

Variable idx= 3
wOutput[idx]= wInput[p]

would likely assign wInput[0] to wOutput[3].

IGOR 6.30 now posts a warning message:

WARNING: P or X used outside of a wave assignment loop. For details execute: DisplayHelpTopic "P or X used outside of a wave assignment loop"

or, if #pragma rtGlobals=3 is in effect, an error is generated. If you encounter this, you should fix the problem However, if you are unable to do so, you can control the behavior:

SetIgorOption FuncOptimize, CatchIllegalPandX= 0, 1, 2 or 3

Use 0 to turn off, 1 to turn on warning, 2 to turn on error but only if compiling #pragma rtGlobals=3, 3 to turn on error always.

SetScale with no wave list now reports an error. Previously it would beep, emit a warning message and change the default scaling for new waves or Make/O. This was for compatibility with IGOR 1.2.

IGOR emits a "To invoke a built-in function you must print or assign the result" error for built-in string functions as well as numeric functions.

The functions mean(), area() and areaXY() now return a NaN when the input is a zero-point wave.

Legend text isn't rewritten if ReplaceWave's /X flag is specified.

If you used ImageTransform compress in IGOR64 on waves larger than 2 GB, such waves can not be decompressed in IGOR Pro 6.30B02 or later. You will need to decompress them in IGOR Pro 6.30B01.

#pragma hide previously took effect only if the procedure window containing it was write-protected or read/only. Now it takes effect regardless of the file's write-protect and read/only states. It is overridden only if SetIgorOption IndependentModuleDev=1.

This change allows you to hide packed and standalone procedure files, something previously not supported, in addition to #included procedure files which previously were hideable.

The underlying change also affects packed and standalone procedure files that are part of independent modules. They will now be hidden from the Windows->Procedure Windows menu. Previously this worked reliably only for #included procedure files.

Windows: Retrieve Window and Retrieve All Windows no longer attempt to retrieve minimized windows. There is no good way for IGOR to determine the size and position of a minimized window, so Retrieve Window can not do the right thing. When you resize the IGOR frame window, the system automatically shifts minimized windows appropriately so there is no need to retrieve them.

Bug Fixes

UniqueName("button",15,0,"host#subwindow") returns a unique control name for the subwindow instead of giving up and always returning "button0".

Fixed problem of leaving internally-used gWMSetNextTextFilesTextEncoding global around after loading an experiment written by IP630B01.

EdgeStats /L no longer causes /R=(x1,x2) to be treated as /R=[x1,x2].

FindRoots operation: FindRoots would report some errors, causing an error dialog to appear, in spite of the use of the /Q flag.

The Modify Trace Appearance dialog handles "Customize-at-Point" mode better when the trace's mode is text or arrow markers.

The Append Category Plot dialog did not offer vertical user-created axes in the axis list.

Fixed crash on merging experiments if the merged experiment's name exceeded 31 characters after removing the file name extension.

A Colorscale with no ticks still draws the axis label.

Resample handles very long integer waves without generating spurious errors.

RatioFromNumber no longer returns large numerator and denominator values for an input very close to a whole number.

Fixed failure of Sort /DIML to preserve the overall dimension label.

Fixed a problem in ImageTransform compress in IGOR64. Wave extended units, dimension labels and note were not correctly preserved.

Fixed a problem in ImageTransform compress if wave had data units.

The IGOR64 #define was incorrectly defined in IGOR32. See "Conditional Compilation" for background information.

LoadData and the Data Browser's Browse Expt feature can now load large waves (>=100E6 bytes) saved from IGOR64.

Fixed the Select Control submenus.

Fixed a bug in the Curve Fitting dialog: if you chose a 4-D multivariate fit function, you couldn't choose a 4-D data wave.

Fixed a long-standing bug in the New or Edit Fit Function dialog: if you edited an existing fit function, made a mistake resulting in a compile error, and then cancelled the dialog, you ended up with two copies of the fit function in your Procedure window: the original plus the broken version.

Windows: The graph trace contextual menu's Text and Arrow Markers buttons now work.

Windows: IGOR Command Line registration no longer crashes.

Windows: When running IgorE (English version of IGOR) on a western Windows OS with the system locale set to Japanese, IGOR used a western font for the entry line in tables. This caused the OS to improperly draw the table entry line characters with the result that nothing appeared in the table entry line. This is fixed. A side effect is that a Japanese font will be used in various places where an English font was previously used under these circumstances.

Macintosh: Fixed failure of scroll wheel and trackpad to scroll in page layout dialogs.

Macintosh: native appearance GroupBox controls that were very narrow or very short (and should draw a separator line) drew nothing.

Macintosh 6.30B01: Added a workaround for an Apple bug that caused a file whose name contained an accented character to disappear upon resaving. This bug was present in only IGOR Pro 6.30B01.


Fixed a bug in the GSHHS loader, ReadGSHHS_7.ipf, which caused the load to be truncated - not all data in the file was loaded into IGOR. Thanks to Francis Dalaudier for finding and fixing this.

AppendContourToGizmo.ipf enables the Update Contour button if the surface data is newer than the contours.

SetIgorMenuModeProc.ipf was updated to reflect IGOR 6 menus.

Added new TableOfGraphsTraces.ipf, which contains a "Graph" menu definition for creating a table containing the waves displayed in the graph. There are options for selecting hidden traces and traces in subwindows.

Global Fit now puts up the alert about running the template function only once per attempted fit.

The Multipeak Fitting 2 package now supports constraints on peak coefficients.

Added the ability to apply constraints to Batch Curve Fit, and to apply initial guesses as a 2D wave for per-fit initial guesses.


Added the Open Color Table Control Demo experiment to demonstrate viewing data using a subset of a color table.

Added the Open Scatter Dot Plot Panel Demo experiment.


In XLLoadWave, fixed a bug that caused erroneous reading of text from .xls files when the text had certain Excel formatting. This did not affect .xlsx files.

The SndLoadSaveWave XOP supports a wider range of frequencies.


There is an issue using ActiveX Automation in recent versions of Windows (newer than Windows XP). This is explained under "Running ActiveX Automation in Newer Windows Versions".

Vector outlines of continents, borders and rivers are now available in packed IGOR Pro experiment files. See "GHSSH".

IGOR 6.30B01

IGOR Application

New Features

New operation: ImageFromXYZ/AS xyzWave, dataMatrix, countMatrix. Places z values into a destination matrix as defined by the x and y values and the matrix x and y scaling. Z values will be added to the destination matrix while the countMatrix matrix will contain counts of the number of z values a given location (a 2D histogram).

Changed ImageGenerateROIMask. Added /L=layerNum to allow layer other than progFront. layerNum starts from 1, a value of zero results in the default progFront (layer 5).

Added features to support performance profiling of user code: string function GetRTLocation(sleepMs) and corresponding numeric function GetRTLocInfo(code). These are used in a new procedure file:#include <FunctionProfiling>

This provides an easy way to find the bottlenecks in your user function code. See the comments at the top of the file for instructions.

NewMovie sets S_filename to the path of the created movie file.

Added /F flag to SaveExperiment operation. It permits control of the saved experiment file format.

New operation:

AdoptFiles [/I /A /NB /UP /WP /DF[=dataFolderOrWavePathStr]/WV=wavePathStr]

Added "WAVE" and "DF" options to the WaveList function to identify waves containing wave references or data folder references.

Added an option to the Integrate Dialog and Differentiate Dialog to display the output as an image or contour.

FunctionInfo returns "THREADSAFE:yes" for threadsafe functions.

Windows: Added the AfterMDIFrameSizedHook(param) user-defined function that IGOR calls when the "MDI frame" or "application window" that IGOR has only under Windows has been resized. AfterMDIFrameSizedHook can be used to resize windows to fit the new frame size.

Changed Behavior

LoadPackagePreferences and SavePackagePreferences check for unsupported field types. String, Variable, WAVE, NVAR and SVAR field types have never been supported by these operations. Now an error is reported at compile time if they are used in structures passed to these operations.

If you try to invoke a built-in function without printing or assigning or otherwise using its result, IGOR will now tell you To invoke a built-in function you must print or assign the result.

In some operations, using the same flag twice is now a compile-time error. Previously it was a runtime error. This affects all XOP operations and some built-in operations.

Changed the Add Annotation dialog to auto-fill new legends from the currently active subwindow. Also adds textboxes to embedded graphs in layouts at a reasonable location.

The New Image Plot dialog now recognizes that a 4-layer wave will be treated as direct color (now that NewImage supports alpha direct color), and shows the NewImage/G=1 checkbox.

ThreadGroupWait now tests for and finishes any threads that are ready to stop. Previously, it quit as soon as it found a still running thread. Also, using a wait time of -2 causes the first non-running thread to be returned rather than the first running.

If Debugging on Error is enabled, IGOR will bring up the procedure window and highlight the offending line after the error dialog is dismissed.

IGOR now accepts a colon character before the fractional seconds part of time formatted data (hh:mm:ss:fff) as well as dot (hh:mm:ss.fff) or comma if comma is selected as the radix character.

MoveFolder and CopyFolder now allow a trailing colon in destination folder path.

Added "SetIgorOption ScrollingMode=mode" to allow you to disable the use of ScrollRect (Macintosh) or BitBlt (Windows) when scrolling text or tables. This is rarely necessary but can be used if your video hardware causes garbled scrolling. mode=0 is the default and enables ScrollRect/BitBlt. mode=1 disables ScrollRect/BitBlt.

The /T option to Grep was documented but not implemented until IGOR 6.23.

ValDisplay controls whose value expressions previously caused runtime errors now simply print "<no value>"; no runtime error is raised.

WinList's INDEPENDENTMODULE:1 option no longer requires SetIgorOption independentModuleDev to list procedure windows in independent modules.

ProcedureText(functionNameStr, numContextualLines) with numContextualLines = -n retains at most n lines of context before the named function, and blank lines are not omitted.

Folders whose names begin with "." (such as .svn folders) are ignored when loading IGOR Procedures, User Procedures, IGOR Help Files, etc.

ThreadGroupWait now updates the internal state of each thread. Previously it stopped when it hit the first running thread. This has little or no impact on most procedures.

ThreadGroupWait can now return the index of the first free thread in a group. This may be useful in some multithreading projects. A demo is available in Open Thread-at-a-Time Demo.

FunctionInfo("doesntExist#doesntExist") now properly returns "" instead of generating a runtime error.

The IndependentModuleList function no longer lists disposed independent modules.

Macintosh: Added a workaround for NTFS-3G. IGOR tries to use the Mac OS FSExchangeObjects call when overwriting a file. If that fails, IGOR now falls back to an older method for overwriting files instead of returning an error. This is necessary because some file systems say they support FSExchangeObjects but in fact do not.

Macintosh: Changed display of PDF pictures to honor cropping. If this causes problems, you can revert by executing SetIgorOption PDFClipping= 1. (The default is 0.)

Bugs Fixed

SavePICT/O/P=_PictGallery_/PICT=sourcePictName as "destPictName" now works as documented.

So does SavePICT/O/P=_PictGallery_/PICT=sourcePictName as "_string_".

PICTList error messages are more appropriate.

Fixed crash when SavePICT/SNAP is attempted on a subwindow.

Fixed Save Graphics dialog pict size when a subwindow is active.

Fixed the legend symbol for bars when a frame color is specified.

Fixed problems involving cursors in an external subwindow.

Make junk:jack now throws an error.

Fixed fill to next mode when next has a multiplier offset.

Fixed Concatenate when running in thread and using string list source mode.

Fixed memory leak in CustomControl involving user data.

Prevent killing waves used in draw poly in panels.

Made compile of AppendToGraph yy vs xx /TN=something illegal (bug allowed it but would crash). See User-defined Trace Names for more information.

IGOR now checks trace names set via /TN in AppendToGraph or Display for illegal chars.

Fixed Graph Browser panel when loading an experiment with minimized graphs.

Fixed show of hidden notebook subwindow.

Prevent hang on CtrlBackground period=0.

Prevent MultiThread from attempting to do threading when running in a preemptive thread.

Fixed func({1,2,3}) when func uses WAVE/Z.

Fixed waterfall plot in a layout, supports added normal traces in recreation macro.

Added more info for AVI open fail in verbose mode (SetIgorOption VerboseMode=2) during PlayMovieAction.

Fixed mask wave used with bars on category plots.

Fixed crash when free data folders obtained from a thread are moved into the main thread and then used again to send to a thread.

IGOR no longer crashes after right-clicking a trace, choosing Duplicate Trace, and then later removing the duplicate or original trace, whether by Remove Trace or by closing the graph.

Fixed crashes in the Replace Wave dialog when there was no replacement wave selected for images or contours.

In a Dialog Wave Browser, sorting by creation or modification date no longer fails when waves have equal dates or when reverse sorting is selected.

Fixed a crash in the Histogram dialog when there was no source wave selected.

Fixed thread-safety of Save operation.

Fixed some un-threadsafe behavior in LoadWave /D.

Annotations dragged into a subwindow no longer become undraggable.

The Debugger prints more useful stuff for wave waves and data folder reference waves and prevents them from being edited.

ModifyControlList no longer sets only the first control's userData.

ListBox titleWave=$"" now works in a macro or on the command line, and Listbox special={0,0,1} properly auto-sizes the columns to fit the contents.

MoveFolder and CopyFolder no longer fail to cancel when you click Cancel in the Choose Folder dialog.

Fixed bugs in curve fitting error detection, making it more likely that fit functions that return bad values (NaN or Inf) will result in the correct error message. It is more likely that a fit resulting in a singular matrix error will correctly report the coefficient responsible (if possible), and more likely that a singular matrix error that results from wandering into bad parts of coefficient space will resolve themselves.

The fixes to curve fitting also mean that the MatrixInverse operation will give a singular matrix error rather than return a garbage inverse matrix. We still don't recommend using MatrixInverse for the most obvious uses.

Fixed crash using FuncFit/ODR=<non-zero> with an all-at-once fitting function.

Fixed crash in the Curve Fit dialog if you use the Graph Now button on a graph with linear X axis, and a pre-existing fit trace has an X wave.

Fixed a crash in sum-of-fit-functions feature of FuncFit: if a built-in fit function that requires a constant was used (such as exp_XOffset) but the CONST keyword was missing, a crash resulted. See also: Fitting Sums of Fit Functions.

Fixed a bug that caused a failure to do a line break before a special character (e.g., picture) at the end of a formatted text notebook paragraph containing Asian text when the special character extended beyond the right margin.

Fixed a crash if an XOP file name exceeded 31 characters.

Fixed a rare problem whereby, if you opened a Macintosh experiment on Windows or vice versa, and if the experiment contained annotations using Symbol font characters in the range 0x80 to 0xFF, IGOR would replace the characters with incorrect characters. For this fix to work you must introduce Symbol font using \F'Symbol' and restore the font to the original font at the end of the symbol characters. For example:

Textbox "\\F'Symbol'X\\F]0"

In this example, X represents some character in the range 0x80 to 0xFF. We switch to Symbol font for one character and then reinstate the annotation's default font.

ImageInterpolate with /U flag now forces the upper limit in each dimension to be the last data point of the corresponding dimension in the original image.

TableInfo now allows subwindow paths longer than 31 characters.

When interpreting a time value with fractional seconds, if the fractional part of the time exceeded 9 digits the resulting fractional seconds component was incorrect. No longer.

ColorScale/C/N=colorScale image=''#0, log=1 is now recreated properly.

Fixed the Open file dialog (Open/D/R/MULT=1) from command line or macro. It gave a spurious error. It worked OK from a user-defined function though.

The built-in #defines, MACINTOSH, WINDOWS and IGOR64, are now re-initialized on New Experiment. This will affect almost no one.

Fixed mode and fill pattern bug when displaying category plot traces when Repeat Wave Style Prefs is unchecked.

When loading packed experiments, data folder names containing non-ASCII characters are now translated between Macintosh and Windows text encodings when running as Roman/Western (not when running as Japanese).

Fixed two bugs that could cause a crash when running a curve fit in an IGOR preemptive thread. The code that generates a wave note in the destination wave with curve fit results is not threadsafe, so threaded curve fits cannot use that feature. The other bug affects running polynomial fits in an IGOR preemptive thread.

Added a check in curve fitting to prevent the use of internal threads if the curve fit is running in an IGOR preemptive thread. Running too many threads can have a negative impact on performance.

Windows: Fixed a problem that caused character overhangs (e.g., the right tip of a lowercase f) to be erased in procedure windows and notebooks in some cases.

Windows: Using ActiveX Automation, the IgorApp.OpenFile, IgorApp.LoadExperiment, and IgorApp.SaveExperiment were broken in IGOR Pro 6.1. This is fixed. Also, they now accept Windows paths as well as Macintosh paths (using colons) whereas previously they required Macintosh paths. See Path Separators for details.

Windows: Choosing Creation Order from the Sort option of a Dialog Wave Browser had no effect.

Windows: Using HideIgorMenus no longer permits a shortcut like Ctrl+J to work in spite of the corresponding menu item being disabled using SetIgorMenuMode.

Windows: Fixed crash that occurred in dialogs with a Display Output Wave option if a 2D wave was selected.

Windows: Added a workaround for a rare problem that causes copying to the clipboard to fail.

Windows: Floating panels (NewPanel/FLT=1 or =2) now work properly with MoveWindow and AutopositionWindow operations, even when IGOR's MDI frame isn't on the main monitor.

Windows: IgorInfo(3) properly reports Windows Vista, Windows 7 and Windows 8, and Windows 2008 R2 Server.

Macintosh: It is no longer possible to activate graph or panel windows while a dialog is active. (It is possible to activate a help window while a dialog is active, and previously it was possible to then click in a graph or control panel window. At that point, you could double-click and bring up a second dialog. Subsequently dismissing these dialogs would cause a crash. We believe this was the cause of many mysterious crashes on Macintosh over recent years.)

Macintosh: We have had some reports of errors saving files on Mac OS X 10.7. We added a workaround which consists of calling the Macintosh FSReplaceObject routine instead of FSExchangeObjects.


In Multipeak Fit 2, changed the way graph curves are updated after editing coefficients in the list to make it more robust.

In PeakAutoFind.ipf, added a menu item giving access to peak finder parameters when using Automatically Find Peaks menu item.

Added FillBetweenContours.ipf, which replaces the still-present AppendImageToContour.ipf. FillBetweenContours.ipf implements a panel-based GUI to create an image which fills the regions between contour lines. You can also use this to create an image from non-uniform x,y,z values.

Added Color Table Control Panel.ipf, which adds a Color Table Control item to the Graph→Packages submenu, and implements a slider-based GUI for interactively setting the colors displayed in images, contours, and f(z) traces, whether based on a color table or a color index wave.

Added a Batch Curve Fitting package: allows you to fit batches of data to the built-in or user-defined fitting function of your choice. A "batch" is a collection of similar data sets stored in waves to which a common fitting function, initial conditions, and weighting and masking waves have been applied. Each data set may be stored in a waveform, an XY pair, or in the columns of a 2D wave.

Fixed bug in Ternary Diagram package: when initializing the Modify Ternary Labels panel, Side Labels tab, the right and bottom labels were swapped.

Added a feature to the Polar Graphs package where the angle and radius axis labels can be computed by a user-defined string function.

Fixed a bug in Transform Axis that could cause a tick on a transform mirror axis that was right at the end of the axis to disappear if you edited any ticks.

In the GIS Utilities package (Data→Load Waves→Packages→Install GIS Utilities), the vector file loader (GIS Utilities→Load GIS Data→Load Vector) now supports "GMT ASCII" format. This is the default format for the NOAA Coastline Extractor at

Changed CallMicrosoftWord.ipf to use Igor Pro User Files instead of Igor Pro folder for script file. This should make it work on Windows Vista, Windows 7 and Windows 8.


Added the Multithreaded LoadWave programming example experiment.

Added the Thread-at-a-Time Demo multithreading programming example experiment.

Added the Fake Waterfall Demo example experiment.

Added the Batch Curve Fitting example experiment.


Added the /WRIT flag to the HDF5SaveData operation. This is of use if you need to create very large datasets but you want to write to them later a piece-at-a-time.

NIGPIB2-64, the 64-bit version of the NIGPIB2 XOP, is now shipping for use with IGOR64.

Fixed crash in XLLoadWave when loading a .xlsx file containing an empty shared string.

The HDF5 XOP now supports loading a subset of a variable-length dataset.

The SetTextWaveData XOPSupport routine now returns an error if the wave is locked or if the wave was passed to a thread as a parameter to the thread worker function.

For XOP programmers: IGOR's Operation Handler now supports "qualified keywords" such as:

ModifyGraph mode(wave0) = 3

This will be documented in the upcoming XOP Toolkit 6.03 release.