What's Changed Since Igor Pro 6.3

This file will describe significant changes made to Igor Pro and supporting files since the initial public beta of Igor Pro 6.3. Here are the updates in reverse chronological order:

Release Igor 6.37

Igor Application

The Igor application's file version is

Changed Behavior



ModifyGraph grid(left)=1
ModifyGraph zero(left)=1,gridEnab(left)={0.25,0.75} // command uses fractions, dialog %
ModifyGraph grid(left)=0
Graph showing zero line drawn from 25 to 75 percent of plot area

See ModifyAxis zero and gridEnab keywords.

The areaXY and BinarySearch functions now tolerate leading and trailing NaNs in the input waves.

Bug Fixes

Changed code for complex division to correct cases where the divisor contains INF.

Corrected labels in StatsAnova2Test when the input data used dimension labels for the rows and the columns.

SetIgorHook's hook functions are no longer forgotten when re-opening an experiment that set them, fixing a bug introduced in Igor 6.35.

A relative include statement like #include ":folder:file" works even within a procedure file that has been included into an independent module.

Fixed possible crash if you did a polynomial fit in a preemptive thread.

The Display and AppendToGraph dialogs now avoid generating commands with more than 100 waves, which had provoked a "too many waves" error message.

The hash string function no longer produces incorrect results when the input data contains one or more zero bytes.

Fixed AppendImage/G=1 causing non-RGB image with cindex set presetting the Modify Image dialog to use color tables instead of color index waves.

Macintosh: when a second instance of Igor is started, that second instance no longer automatically opens a copy of the first Igor's open experiment file.

Macintosh: added SetIgorOption IgnoreMouseClicksWhileRunning = 1 to avoid rare crashes due to users bringing up dialogs while a function is running. It is off (0) by default, giving the same behavior as Igor 6.36 and earlier.

Windows: The maximum number of user-defined submenus allowed (220) is now properly observed, preventing experiments from creating non-working user-defined submenu items. Note: the maximum number of user-defined submenus on Macintosh remains at 300.

Windows: SetFileFolderInfo works with directories.

Windows (64-bit): Improved the accuracy of the computations in Convolve and Correlate for very long single-precision float waves.

Windows Igor J: Fixed a bug that caused the File Type popup menu to malfunction when invoked from the ImageLoad operation only.


WMImageInfo's WM_GetColorTableMinMax returns correct values for complex image waves.


Windows 32-bit only: Added an XOP for controlling settings of Axon (now Molecular Devices) MultiClamp 700B patch clamp amplifiers. See MultiClamp700xCommander XOP for details.

Added the IgorGIS XOP, part of the IgorGIS Package that, among other things, loads data and attributes from geographic information system (GIS) vector and raster files into waves and variables. See IgorGIS Operations for the operations added by the IgorGIS XOP.

Release Igor 6.36

Igor Application

The Igor application's file version is

Bug Fixes

Macintosh: Added a workaround for Apple breaking FSResolveAliasFile for Finder aliases in OS X 10.10 (Yosemite). This prevented Finder aliases used to activate XOPs from working as well as preventing other uses of Finder aliases.

Macintosh: IgorInfo(3) now returns the correct operating system version for OS X 10.10 (Yosemite).

Windows: double-clicking the title bar of an external subwindow no longer improperly maximizes.

Windows: Fixed Listbox in external subwindow from drawing into the wrong window during scrolling, fixed Listbox drawing improperly when moved while in drawing mode.

Windows Igor 6.34J only: if you opened the Object Status dialog, there was no way to close it. This is now fixed.

Corrected V_Value normalization result for Cos3 and Cos4 methods of the WindowFunction. operation.

The Data Browser's Browse Experiment feature works again, fixing a bug introduced in version 6.35.

SetAxis axisName, NaN,NaN no longer crashes.

Fixed CurveFit bug: if a matrix data wave had a subrange on it, the compiled version didn't properly set the subrange for X waves that had no subrange (and therefore should have gotten the appropriate subrange from the Y matrix).

Fixed crash when doing ODR fit to data with NaNs and an explicit destination wave.

Fixed multithreading problem in ImageBoundaryToMask.

Fixed thread-safeness of StructPut and StructGet with wave[pointNum].

If you wrote an Igor text file for a wave that contained a wave note longer than about 400 characters, you got an error when you tried to load the Igor Text file back into Igor. (This bug was introduced in Igor 6.35 and fixed in 6.36.)

AreaXY no longer computes slightly incorrect results when the X values are decreasing, fixing a bug introduced in Igor 6.35.


Added IgorGIS Help.ihf for the IgorGIS XOP (which is currently in beta testing). The help file explains what the IgorGIS XOP is, and how to download and install the XOP:

IgorGIS adds the ability to read many GIS ("Geographic Information System") file formats, including ESRI Shapefile and GeoTiff. It also adds the ability to transform between spatial coordinates using widely used GIS spatial reference specification formats.

Release Igor 6.35A5

Igor Application

The Igor application's file version is

On Windows, only the file version of Igor.exe is changed.

Bug Fixes

Macintosh: Igor Pro no longer locks up when quitting after using any LAPACK routines such as those used by MatrixEigenV.


Fixed bugs in WMImageInfo.ipf and WMImageLogColorTable.ipf.

Release Igor 6.35A

Igor Application

(The Igor application's file version is

Bug Fixes

Fixed ListBox bug introduced in Igor 6.35 where a panel with a listbox in it would go blank if you moved any other control while in drawing mode.

Fixed Checkbox side positioning bug introduced in Igor 6.35: the Igor 6.34 behavior has been restored.

AreaXY and faverageXY now properly return NaN if x1 and x2 are both before or both after the range of X values.

Release Igor 6.35

Igor Application

(The Igor application's file version is

Changed Behavior

The SeaLandAndFire color table's transition points have been corrected to match the documentation: sea->land at 25% and land->fire at 75% (formerly 26% and 76%).

The bug fix for trace f(z) colorindexRGB will slightly shift colors for the usual large color index waves. Small custom color index waves will see proportionally larger shifts (to the correct colors).

Executing the selection in a procedure window no longer prints output from the executed command into the procedure window.

Macintosh: To improve compatibility with some programs, when you paste plain text into an Igor text window, Igor now replaces linefeeds with carriage returns which Igor uses internally to mean end-of-line.

Macintosh: Upgraded the code signing to version 2 for compatibility with Mavericks 10.9.5+ as well as older versions of Mac OS X.

Bug Fixes

An experiment saved with active SetIgorHook functions is now recreated properly even when the hook function is not in the main procedure window.

Integrate and Differentiate operations: Specifying an existing complex wave as the /D destination for Integrate/C and Differentiate/C no longer fails to compile. (This is useful only when the wave being integrated or differentiated is also complex.)

The areaXY function does a better job of dealing with X waves with repeated values and with ignoring NaNs outside of the selected range.

Legend symbols for one point in bar charts show the right fill color instead of the bar stroke color. For example Legend "\\s(wave0[4]) style of 5th bar" shows that bar's color when ModifyGraph barStrokeRGB=(0,0,0) // black.

Trace colors: fixed incorrect f(z) ModifyGraph zColor cindexRGB colors. (Two off-by-one errors in calculations were difficult to perceive when using larger color index waves, but were obviously wrong with tiny color index waves.)

Image Plots: fixed lack of beforeFirstColor and afterLastColor in image plots using color index waves where DimDelta = 1 and DimOffset= 0.

The ReplaceString user function works with case-insensitive comparisons even when the searched-for and replacement text is identical (which is useful in converting to or from lower or upper case).

coth() with very large num parameter now returns 1 instead of NaN.

Windows: NewMovie accepts file names of up to 255 characters. On Macintosh it is still limited to 31 characters because of a limitation in the Apple CreateMovieFile routine.

Macintosh: the window title icons/represented file for unpacked experiments and temporary files are more appropriate than before, no longer appear to be disabled. The window title icon for the command window no longer vanishes after Save Experiment As.

Macintosh OS X 10 (&Yosemite&) pre-release: the dialog command text and the Debugger's info readout no longer get blacked out as the text is repeatedly updated.


The ImageTransformPanel.ipf (part of the Image Processing procedures) no longer limits the getPlane values to 0-2. Added a GetPlaneByDimLabel feature.

PieChart.ipf's ModifyPieChart function now works correctly when specifying custom colors.

RosePlot.ipf's help file describes how the default colors can be overridden.

Waves Average.ipf bugfix: averaging waveforms with reversed x range uses interpolation instead of averaging the wrong points with the point-to-point averaging algorithm.

WMImageInfo.ipf: added WM_ImageColorIndexWave().


In XLLoadWave, fixed a possible crash when loading an Excel column label as a wave name if the label contained more than 30 characters and started with a non-standard wave name character.

In XLLoadWave, fixed a bogus "The row specified by the /C flag does not exist in the worksheet" error when loading an Excel .xlsx file containing fewer than 3 rows.

Fixed a HDF5XOP crash that occured on attempting to load a "scalar" dataset. "Scalar" means that there is just one element and the HDF5 library reports its dimensionality as zero.

In AxonTelegraph XOP, fixed a bug that prevented command line arguments from being handled properly when one Igor instance was already running and Igor.exe was called from the system command line without the /I flag.

Windows: We have occasionally seen XOPs that enable floating point exceptions. This causes Igor to crash on operations that should return a NaN such as 0/0. As a workaround, Igor now disables floating point exceptions after the first call to each XOP on Windows. If an XOP repeatedly enables floating point exceptions, the XOP programmer will have to deal with it.

Macintosh: Fixed parity setting in VDT2. You could set the parity to even or odd but if you ever set it to odd you could not set it to even without restarting Igor.

Release Igor 6.34A

Igor Application

(The Igor application's file version is

Changed Behavior

The Annotation and Axis dialogs won't offer to insert static Proc Pictures that are defined in a procedure window which lacks the needed #pragma moduleName=module statement.



Windows: Restored availability of fonts whose names start with "@" when running the Japanese version of Igor.

Bug Fixes

The Modify Trace Appearance dialog no longer hides marker stroke color when text markers are in use. Also fixed an obscure bug involving making changes to multiple fill modes when then first trace already used that fill mode.


A TextBox with 101 lines or more resulted in Igor drawing the 101st line above the top of the ornament. (The current limit is 100 lines.)

Macintosh OS X 10.7+: Fixed a Resume bug which immediately closed the experiment file dragged onto the Igor icon when Igor wasn't running and re-opened the most recent experiment.

Windows: Open/F="*.dat" (which is an invalid /F specification) no longer opens a dialog with corrupted text in the Files of Type popup menu.



Release Igor 6.34

Igor Application

(The Igor application's file version is

New Features

Macintosh: Added a "Use alternate cursors" checkbox to the Miscellaneous Settings dialog's Compatibility tab. Enable this if the crosshair, box with x, circle with plus, or question cursors are hard to see or disappear. The alternate cursors do not rely on inverting colors, which apparently isn't implemented correctly for some computers using Mac OS X 10.8 and later.

Added DoIgorMenu "Help", item, where item is one of: "Getting Started", "Igor Help Browser", "Help Topics", "Shortcuts", "Command Help", "Manual", "Support", "Show Igor Pro Folder", "Show Igor Pro User Files", "License", "WaveMetrics Home Page", "Support Web Page", "IgorExchange", "About Igor", or "Updates". On Macintosh, item can also be "Igor Tips" to toggle the state of Igor Tips.

Windows: The License dialog has a new "Install License for All Users" button to escalate Igor to run as Administrator to install the license activation for all users, whether on the computer or logged in over a network (a "server license"). This is effective only if the current user is also a member of the Administrator group. See Igor License Activation.

Macintosh: The title bars of the command window and file-based windows can be command-clicked to reveal their location on disk.

Changed Behavior

PrintGraphs can now take /PD as first flag to get print dialog so user can print to file or preview.

PopupMenu popvalue and popmatch accept up to 255 character strings (previously the limit was 100 chars).

The cursor info panel 2D mover now responds to mouse wheel or pad action in the same direction as dragging the 2D mover.

Macintosh: Changed file type checking for experiment files and Igor binary files to give precedence to the file name extension over the Macintosh file type after getting an experiment from a user that had the right extension (.pxp) but the wrong file type (TEXT).

Macintosh: There is now a simpler way to make the Matlab libraries available to Igor so that the MLLoadWave XOP can work. If you use MLLoadWave, see Using MLLoadWave on Mac OS X and follow the instructions labeled "Macintosh Method 1".

Macintosh - for techies only: To make it easier to use MLLoadWave on Macintosh, Igor now defines the DYLD_LIBRARY_PATH environment variable in its Info.plist file. In the unlikely event that you depend on the DYLD_LIBRARY_PATH environment variable, contact WaveMetrics support for further information.

Windows: Added a workaround for the problem some Windows users experienced of a long delay at startup with the message "Checking default printer" in the title bar. During this time Igor is asking Windows for default printer settings. This information is mostly used to determine the size, orientation and margins of the page in a new page layout. Some printer drivers attempt to access the printer when asked for default settings. If the printer is inaccessible (e.g., turned off or not reachable through the network), the system spends a long time searching for it. The workaround is that Igor notices that it has taken a long time and sets a preference which makes Igor use a cached version of the printer settings the next time it launches. To implement this, a new preferences file named "Igor Printing Prefs.txt" is created on Windows only. Once this problem is encountered, Igor will continue to used the cached settings until you change the default printer or tinker with the preference file.

Bug Fixes


The trace contextual menu's Send To Back, etc now properly adjusts the text of legends to maintain the correct trace style just like ReorderTraces did.

Tags on images now respect the "hide-if-off-scale" setting.

Fixed detection of two-byte characters in text labels.

Fixed possible memory corruption when Extract is used on text waves with overwrite.

Fixed size when exporting a subgraph, fixed overlapping tick labels when 3 or fewer will fit.

When fitting with the built-in poly_XOffset fit function, Igor failed to record the X0 constant in the W_fitConstants wave.

Applying Optimize to a univariate function that returns NaN no longer prints the BUG message, "fminbr got a bad tolerance value".

If you had a user-defined function called "line" that was not in the format of a user-defined fit function, Igor would hang the first time you tried to open the Curve Fit dialog.

SpecialDirPath("Igor Application", 0, 1,0) no longer returns a Macintosh OS-9 formatted path; it now correctly returns a native-formatted path as documented for the flags parameter.

Fixed failure to revert captured swapXY preference for Image and Contour plots when reverting Image or Contour preferences in the Capture Graph Prefs dialog.

Fixed problem of DoWindow/T not working with hidden window if there were no visible target windows.

Fixed problem of WinType("Procedure") returning 8. WinType is supposed to ignore procedure windows and work on target windows only.

Fixed failure to handle Windows paths in Execute/P LOADFILE and Execute/P MERGEEXPERIMENT.

Fixed rare crash during Merge Experiment if user hook functions are present.

Fixed Independent Module bug involving #including procedures that are already opened directly (not via #include) and have the same IndependentModule name as the file #including them.

Windows: The Object Status dialog can now correctly distinguish between identically named objects in the drop-down list, and no longer closes when the return key is pressed, allowing one to type in an object name as on Macintosh.


The Delete XY Points procedure detects problematic XY Pairs with differing numbers of points.

The Split Axis package now works correctly if you are splitting a category axis.

Fixed a bug in HierarchicalListWidget: if you removed the last row, it forgot that the ListWave and SelWave were multi-column waves.

The Power Spectral Density procedure sets Variable/G V_ENBW to the "Effective noise bandwidth", and presents longer segment lengths in the PowerSpectralDensity() popup parameter.

The Gaussian Filter procedure explicitly labels the frequency graphs with "Hz".

The Polar Graphs procedures implement simple radius error bars, and have more programming APIs for modifying basic properties of polar graphs including: WMPolarSetManualRadiusRange, WMPolarGetRadiusRange, WMPolarSetAutoRadiusRange, WMPolarSetZeroAngleWhere, and WMPolarSetAngleDirection.


Fixed garbling of 64-bit integer data in compound HDF5 datasets.

Fixed a bug in the GetString callback that was asymptomatic with XOP Toolkit 5 but symptomatic with XOP Toolkit 6. The GetString callback is used only by ancient non-Operation Handler XOPs.

Release Igor 6.33J

Igor Application

(Japanese version only. The IgorJ application's file version is These changes are incorporated into the English version of Igor 6.34.)

Changed Behavior

Igor now allows loading experiment files and Igor binary wave files whose type is unknown because both the extension and, on Macintosh, the file type, are unknown. This loosens the restriction added in 6.30. In other words, 6.33 permits loading files whose type is unknown because the file name extension is unknown and, on Macintosh, the file also has no file type.

Additionally, Igor 6.33 recognizes file names that have an extra extension added to them, like data.ibw.something, as long as the penultimate extension is recognized (like ".ibw").

Clicking in a Slider control (but not the thumb) advances the thumb to the clicked value.

New Features

SetWindow's markerHook feature passes two new WMMarkerHookStruct members to the custom marker hook function: WAVE ywave and double ywaveIndex.

Bug Fixes

Fixed a bug in the License dialog where the "Install License for All Users" checkbox was improperly missing, preventing the installation of a Server License.

User controls with text containing \Wtdd marker escape codes no longer display incorrect text when using os9 (old-style) appearance.

Fixed intermittent "RunXOP called from a thread" bug message.

SetFileFolderInfo no longer reverses the creator code and file type byte orders in the Intel versions of Igor.

LoadWave can once again load Igor binary waves from files with names like "myData.ibw.somethingeElse", which Igor 6.32 prevented.

Windows: Fixed error when loading .bwav files. This bug was introduced in 6.32.

Windows: worked around problem of Windows 7 and Windows 8 thinking Igor is hung if you drag-scrolled a notebook, procedure or help window.

Fixed failure to open recent file if it was a Macintosh file with a file type but no extension. This bug was introduced in Igor Pro 6.32.

In the Japanese Igor, fixed a problem with escape sequences that occurred if the character before a backslash was a western character controlled by a western font but was also a legal first byte of a two-byte Japanese character. Example:

Display; DefaultFont/U "Helvetica"; TextBox/C/N=text0/A=MC "[Å\\S2\\M]"

In IgorJ on Macintosh, fixed failure of text to appear in debugger info pane (top line) when you hovered the mouse over a variable or when an error occurred.


Added the HighLowCloseOpen.ipf procedure to the WM Procedures/Graphing folder, which adds an "Append High Low close Open Trace" item to Igor's Graph menu to provide a simple stock price plot.

Added radius error bars to the Polar Graphs package. See Polar Graphs[Error Bars Dialog].

In Multipeak Fit 2, relaxed the requirement that X values be monotonic. Now repeated X values are allowed. The X values still must be increasing or decreasing.


Added the Custom Markers Demos experiment to Examples→Feature Demos 2 menu, which contains three examples of using SetWindow's markerHook feature. See Custom Marker Hook Functions for programming details. Open Custom Markers Demo.

Release Igor 6.32A

Igor Application

(The Igor application's file version is

Bug Fixes

Fixed a crashing bug in Igor 6.32 related to #undef and #define in the main procedure window.

Release Igor 6.32

Igor Application

(The Igor application's file version is

Changed Behavior

Size of textboxes in Layouts is now more accurate when exporting at high resolution.

Changed PlaySound on Mac to support changing chans or rate even if /A is in effect.

Multiline DrawText no longer truncated at first \r character by the dialog.

Missing recent files or experiments aren't removed from their lists unless the user approves.

Tech Note TN003 was updated to explain that, as of Igor Pro 6.30, Igor no longer writes binary wave files using the version 2 format. It now uses the version 5 format as explained in that tech note.

Bug Fixes

Fixed bug where passing a wave to a function with a WAVE/DF input parameter would damage the wave.

Prevented bogus P or X used outside of a wave assignment loop warning message when a := expression is defined in a user function. For details, see Wave Dependencies.

Fixed draw object resizing when the x axis coordinate is used and the axis is reversed.

Fixed very rare phantom line in graphs with magic combination of data and NaN.

Prevented crash in the Font Substitution dialog when an installed font's name is longer than 39 characters on Macintosh or 31 characters on Windows. Currently fonts with such long names can't be used in Igor. This will be corrected in a future release.

Fixed a potential crash of FuncFit if you use a threadsafe user fit function from the main thread (for instance, from the command line).

Removing #pragma hide=1 from a procedure file now properly reverts to (effectively) #pragma hide=0.

Fixed a bug in DrawBezier that caused the bezier to not draw correctly.

Fixed a crash that occurred if the search expression in the Search Igor Files tab of the Help Browser was longer than about 200 characters.

Fixed endless loop that occurred if Histogram /B=4 was passed a wave that contained only NaNs, or that contained just a single non-NaN value.

FTPDownload no longer fails when /O is not used or /O=0, the destination file or directory is fully specified, and the destination file or directory does not already exist.

ProcedureText no longer limits the length of the macroOrFunctionNameStr parameter to only 31 characters.

In the Modify Axis dialog's Range tab, the Expand 5 Percent button now works correctly with a log axis.

Fixed a bug that prevented /W flag in NotebookAction, MeasureStyledText and GetMouse from working in independent modules.

Fixed normalization in StatsNPMCTest for the case where the input groups do not have the same number of samples.

Fixed bug in Optimize: If you called Optimize in a function, the arguments to the /R flag were read in backwards.

Fixed a crash in MatrixOp when dividing a matrix by complex number where the imaginary part is zero.

Windows: Igor no longer becomes inactive and disabled after using the Debugger during a FuncFit with the fit results dialog.

Windows: fixed crash that occurred when user clicked a color popup menu, chose Other..., and clicked outside of the ChooseColor dialog, deactivating it. To avoid this crash the ChooseColor dialog is now closed if it is deactivated.

Windows 64-bit: printf "%d\r", NaN prints a plausible number instead of garbage.

Macintosh OS X 10.4 and 10.5: Highlighted marker and line style menu items are now drawn correctly.

Windows: Fixed a bug in ActiveX Automation that caused an error if you used the IDataFolder interface Variable method to create a reference to an Igor global variable and you specified a simple variable name for the varNameOrPath parameter rather than a partial or full path.


PeakAreasUnipolar.ipf (the procedure file that implements TN020-C UniPolar Peak Areas) works better with negative-going peaks.

Scatter Dot Plot.ipf: Fixed a bug which involved creating a graph as a Scatter Dot Plot, deleting it, then creating a new graph that gets the previous SDP graph's name but is not a scatter dot plot. If the Scatter Dot Plot package is still open you run the risk of a Scatter Dot Plot being superimposed on the other graph. Also added a button to remove a Scatter Dot Plot from an existing graph without killing the graph.

PieChart.ipf: Added PieChartForProgrammers() and ModifyPieChart() for programmatic creation and modification of simple 2D pie charts. Also made previously static (private) structures and constants public so current pie chart values can be read out.


Interpolate2 now correctly handles free waves passed as X dest wave in "X from dest" mode (/I=3 flag). Also handles free waves passed as stdDevWave (/SWAV flag).

In the VISA XOP, added support for reading the VI_ATTR_USB_RECV_INTR_DATA attribute using the viGetAttributeString function. This permits reading USB interrupt data.

Release Igor 6.31

Igor Application

(The Igor application's file version is

Bug Fixes

BinarySearchInterp and Unwrap no longer truncate to integer (this was an Igor 6.30-only bug).

BinarySearchInterp is used in 3 WM Procedure files: New Polar Graphs Draw, Image Contrast, and Cross Hair Cursors.

Unwrap is used in 5: FilterDialog, Pole and Zero Filter Design, and CmplxToMagPhase, FTMagPhase, and FTMagPhaseThreshold.

DrawAction and SetDrawEnv now properly enforce non-liberal group names.


Batch Curve Fitting package: added the ability to limit fits to a specified point range. The limit applies to all fits in the batch. Per-fit limits continue to use Mask waves.


Data Browser XOP: on Macintosh and in the IGOR64 version on Windows, the Save Copy button saved unselected as well as selected objects instead of just the selected objects if anything other than a single data folder was selected.

Windows: Fixed a bug in Gizmo that affected the recreation of sphere objects.

Release Igor 6.30

Igor Application

(The Igor application's file version is

New Features

TraceInfo returns the ErrorBars command for the trace in the to-be-documented ERRORBARS group.

Bug Fixes

Finally tracked down and fixed a long-standing bug in the New or Edit Fit Function dialog: certain sorts of errors resulted in the dialog failing to revert properly when the Cancel button was clicked. That made it difficult to recover from the error, especially for non-programmers.

Fixed a bug in the Histogram dialog: if you choose a multidimensional wave as the source, the dialog thought the result would be multidimensional and the Display Result section of the dialog would offer inappropriate choices.

Fixed data swapping in MatrixOP correlate for 2D waves with opt=0.

Igor 6.30B03

Igor Application

(The Igor application's file version is

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 iterate 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.3 now posts a run-time 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 execute
  SetIgorOption FuncOptimize, CatchIllegalPandX= 3
and recompile to find and fix the error.

or, if #pragma rtGlobals=3 is in effect, a compile-time 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 (this is the default for Igor 6.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

(The Igor application's file version is

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 at the NOAA Coastline Extractor at https://shoreline.noaa.gov.

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 and Windows 7.


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 is documented in XOP Toolkit 6.03 or later.