Changes Since Igor Pro 6.20

This file describes significant changes made to Igor Pro and supporting files since the initial public beta of Igor Pro 6.2. This includes all changes made to Igor after Igor 6.12A was released.

Here are the updates in reverse chronological order:

Release Igor 6.22A

Igor Application


The DoAlert dialogs are bigger to accomodate more of the allowed 253 characters of text.

Macintosh: Controls inside of TabControls update more quickly.


Fixed hang when a time/date axis used autoscale and round-to-nice-values.

Release Igor 6.22

Igor Application


Added log colors to trace f(z) color, image plots, and contour line colors:

ModifyGraph logZColor(traceInstanceName)=1
ModifyImage imageInstanceName log=1
ModifyContour contourInstanceName logLines=1

Date/time axes in graphs can now be reversed.

Added file keyword to GetWindow operation. This is used to find the file associated with a standalone notebook or procedure file.

Curve fits done with /ODR=1 or /ODR=2 can now generate confidence bands and prediction bands.

ModifyControl and control-specific commands like Button accept pos+={dx,dy} syntax to move the control horizontally by dx and vertically by dy (positive values are right or down).

Multipeak Fit 2 package: The ExpModGauss peak shape (exponentially modified Gaussian) has been modified to accept a negative shape factor (exponential tau fit coefficient) to indicate that the long tail extends to the left.

Multipeak Fit 2 package: Added Display Peaks Full X Width of Graph to the Options area of the main panel.


BuildMenu "All" rebuilds all the menu items and menu titles in Igor 6.22 or later; in earlier versions it just rebuilds menu items.

The number of allowed user-defined submenus has been increased by 100 to 300 total.

Now force graph style macros to run in root: to fix f(z) and the like.

For custom markers (SetWindow markerHook), added field to Structure WMMarkerHookStruct:

STRUCT Rect plotRect	// Local coordinates of the graph plot rectangle.

Made scroll wheel scrolling in tables work more smoothly, especially with Apple magic mouse.

The Rename dialog now allows changing just the case of a name.

MatrixOP correlate function now returns a wave that is 1 point shorter when using the linear correlation option. This change was made to match the output of the Correlate operation.

RatioFromNumber now creates and sets V_iterations to the actual number of iterations used, but also interprets the /MITS value differently (correctly).

WinRecreation on a notebook window now includes SetWindow userData commands.

On Windows, the Open File and Save File dialogs are preset to the Igor Pro User Files folder on launch instead of to the Igor Pro Folder. On Macintosh the operating system automatically sets remembers the Open File and Save File folders across invocations of Igor.


Fixed clipping of histogram bars.

Fixed compile of SetWindow markerHook.

Fixed rare exact diagonal trace clipping.

Fixed WaveExists to test for killed waves.

Fixed obscure crash when drawing in insert mode and ran past the end of existing objects.

Fixed crash when deleting a subwindow in an exterior subwindow.

Fixed crash when using constants in switch constructs in ThreadSafe functions.

Added error check when NewFreeAxis used with standard axis name.

Fixed right axis tick label alignment due to minus sign.

Fixed crash when ThreadSafe functions in Independent Modules use constants.

Fixed CountObjectsDFR when running in a thread.

FilterFIR no longer sometimes inverts the high-passed filtered signal, a bug which manifested depending on the filter length.

The Resample dialog no longer locks up when multiple waves are selected, and disallows a New Sample Rate of 0.

Besseli(-n, 0) no longer incorrectly returns -inf or inf for integer n.

The debugger now evaluates val^2 properly when val is negative.

Fixed hang if you tried to edit free waves in a table.

Fixed legend syntax "\s(#n)" meaning symbol for nth trace which was broken in 6.20B01.

Fixed threadsafe readout drawing on top of zoomed out help text area in Help Browser Command tab.

Improved accuracy of Sleep/T with small number of ticks.

Fixed failure of table subwindow to update after change of wave size or shape (e.g., Redimension, Duplicate/O).

Fixed faulty object name matching in SaveData/J.

Fixed a bug in MatrixOP correlate function.

Fixed crash if you accidentally pasted very long text into a field in the Redimension Dialog.

Fixed bug in FuncFit: sums of fit functions didn't check to make sure user provided coefficient wave had enough points.

Now Insert Points, Delete Points, Rotate dialogs don't accept Inf, -Inf, or out-of-range number of points, or NaN as number of points. Conversion of NaN and Inf to int caused screwy point numbers.

Fixed a bug in areaxy: if the first two X values were equal, the computed area was incorrect.

Fixed curve fit bugs: Confidence bands were not calculated correctly for threadsafe functions; Confidence bands were not calculated correctly when coefficients were held.

The changes required to fix these bugs made it possible to support confidence bands for all-at-once fit functions.

Fixed crash if the message entered for DoAlert was too long.

Besseli(-n, 0) for integer n gave incorrect result of -inf. Now for negative integer order, is simply returns the result for positive order n.

Error bars were previously not scaled by the trace multiplier offset. That results in inconsistent units- presumable the data and the error are in the same units and should be scaled in the same way.

The mouseLoc member of the WMWinHookStruct input to window hook functions was incorrect on either Windows or Macintosh (sometimes both) for events other than mouse events.

The Slider control no longer occasionally refuses to move the thumb in response to the mouse wheel when the increment is set to imprecise binary number values such as 0.1.

Fixed octal display of signed integer types in tables. Negative numbers were displayed wrong.

Fixed hex and octal entry of negative numbers into signed 32-bit waves in a table.

Changed Save operation number of digits of precision so that saving 32-bit integer wave data saves full precision. Also changed SP format from 7 to 8 digits and DP from 15 to 16 digits.

Fixed issues in Mac↔Win file path conversions having to do with "./" and "../" syntax which signify "current directory" and "one level up" respectively. These conversions are used both internally and by the ParseFilePath operation with mode=5. The following conversions work:

:Folder		↔	.\Folder
::Folder	↔	..\Folder
:::Folder	↔	..\..\Folder				// And so on
C:FolderA:FolderB:FolderC	↔	C:\FolderA\FolderB\FolderC
C:FolderA:FolderB::FolderC	↔	C:\FolderA\FolderB\..\FolderC
C:FolderA:FolderB:::FolderC	↔	C:\FolderA\FolderB\..\..\FolderC	// And so on

Previously multiple leading "../" occurrences and internal "../" occurrences were not correctly handled.

"./" is allowed only at the start of a relative path and only once.

Multiple "../" occurrences are now allowed at the start of a relative path or internally in a path.

Windows: Fixed GDI (Device Context) leak when repeatedly restoring a hidden minimized window.

Windows: Loess works better on images with many NaNs in them.

Windows: The Igor frame window can span multiple monitors at startup again. MoveWindow/F can also move the Igor frame window to span multiple monitors again. (Dialogs are still resized to fit on whichever monitor they want to be displayed on.)

Windows: Checkbox and PopupMenu titles no longer accumulate shadows during window updates.

Windows (64-bit version): Fixed resource leak in Igor64 when a graph was drawn in a layout, exported or printed. In a layout, this could cause a crash if you moved repeatedly (e.g., using the arrow keys).

Macintosh: Fixed flickering pictures in Help Browser Command tab.

Macintosh: Fixed a bug introduced in Igor Pro 6.20 that prevented an old CodeWarrior PowerPC XOP from running if its file name had a ".xop" extension.

Macintosh: The old PowerPC and files were corrupted in 6.20. However, these are ancient and should not be used in most cases, so they have been removed from the installation. If needed, they can be downloaded from our web site by clicking the links.

Macintosh: Fixed bug that caused failure to do character translation for Windows formatted text files governed by Arial font when opened on Macintosh. For example, if you edited a help file on Windows using Arial font (and probably some others) and then opened it on Macintosh, the bullet characters in topics would show up as some other strange character.


Fixed a bug in the Watch Folder example experiment.

Updated Windows Automation Visual Basic and Visual C++ projects and tweaked help file.


Fixed the /TRAN flag in HDF5SaveData. Previously it did nothing. Improved the /TRAN flag in HDF5LoadData - it now transposes dimension properties.

Macintosh: Deleted old CodeWarrior XOPs NIGPIB_OSX.xop and NIGPIB2_OSX.xop that were shipped in "More Extensions:Data Acquisition:PPC Extensions". Most users should use the newer NIGPIB2.xop instead. The old XOPs are still available via download - see "NIGPIB Mac ReadMe.txt".

The HDF5 XOP was updated to version 1.09 to add the HDF5CreateLink operation. The HDF5ListGroup operation was slightly modified. This is of interest only to advanced users. The "HDF5 Browser.ipf" procedure file was updated. If you use this updated procedure file you must also use HDF5 XOP 1.09 or later. In most cases this will happen automatically.

Fixed eating of keystrokes when XOPSilentCommand is called repeatedly.

Curve fits create a temporary wave "W_WMTemp_Coef" if the user's coefficient wave is a subrange of a larger wave. Previously, this temporary wave was not killed when the curve fit finished.

Fixed a bug introduced in GBLoadWave 1.63 that caused incorrect results when using /V=1 and /U=0 (or no /U flag).


Added 1 and 4 as zoom options in "AxisSlider.ipf".

Release Igor 6.21

Igor Application


Compound units now supported in log axis tick labels (i.e., when SI units are needed.)

Added Igor and IgorRecent keywords to ColorTab2Wave.

Windows: Added a rarely-needed option to change file caching behavior. This is almost never needed and should not be used except in very rare circumstances. See FlushFileBuffers.

The Histogram dialog Display Results now offers Top Graph as an option.

You can now suppress the Fit Progress window using /W=2 with CurveFit, FuncFit and FuncFitMD.


Changed NewMovie default to flatten as if the /L flag was provided. Must use new /L=0 syntax to not flatten.

Changed logic operand ~ to use 53 bits and fixed other logic operations to allow -1 or other negative numbers without overflowing 53 bits.

Windows: Speed up saving EPS and Igor PDF with large bitmaps.

FindValue/TEXT="" textWave can now find an empty element.

ColorScale is much smarter about reserving room for axis labels and tick labels offset from their normal positions. This will affect the position of elements in color scales with tick or axis labels that extend beyond the axes.

Changing a SetVariable control that is controlling an internal variable, internal string, or system variable (K0, etc) now marks the experiment as unsaved.

Macintosh: Added a partial workaround for some slow printer drivers (e.g., HP Photosmart C7100 Series) which take a long time (e.g., 0.5 seconds) to perform certain Print Manager calls (e.g., PMSessionValidatePageFormat).

Macintosh: Made scrolling help and notebook windows containing pictures a bit smoother.


Fixed annotation resize bug in layouts.

Fixed rare crash involving Duplicate and free wave.

Selecting more than one wave in various dialogs works again.

Fixed crash involving Draw to Next in graphs. Caused by bug introduced when allowing subranged data to work in this mode.

Fixed a crash when using Fill to Next mode in graphs.

Resample and the Resample dialog handle large waves without generating spurious errors.

XYZ contours properly default to using perturbation again (bug introduced in Igor 6.20B03).

Colorscales with only one of First Color at Z= and Last Color at Z= set to manual values now draw with the correct range of colors.

The ColorScale dialog popup menus no longer duplicate liberally-named trace names.

The debugger's expressions pane no longer substitutes local variables for components of a data folder path.

The debugger no longer clips traces in the debugger graph when axes are hidden.

Macintosh: Improved the appearance of custom menus such as the color picker menu.

Fixed incorrect equation for dblexp_XOffset. An extra set of braces crept in while we weren't looking.

The Display Results boxes in various dialogs would let you select Top Table or Top Graph when there were no tables or graphs, resulting in a command execution error when you clicked Do It.

The Quick Fit items in the graph contextual menus (right- or control-click on a trace, or in the graph margins) failed to handle the new Poly_XOffset fitting function.

Leading spaces are now ignored when pasting numeric text into a numeric wave's cell in a table.


ModifyContour's equalVoronoiDistances keyword is no longer misspelled in the documentation.


Added Polar Graph Legend item to the Graph menu. Polar graph menu items disappear if the graph is not a polar graph. See Polar Graphs.

The Sonogram.ipf algorithm now defaults to computing shorter FFTs at the start and end of data instead of zero-filling. Zero-filling is still an option; there's a new Zero-fill checkbox in the panel.

Fixed some issues with Resize Controls Panel.ipf and Rewrite Control Positions.ipf.

Changes to HierarchicalListWidget.ipf: Buggy line in WMHL_AddColorSupport() caused an index-out-of-range error when run under rtGlobals=3; Added foreColor and backColor optional inputs to WMHL_ExtraColumnData(); Changed WMHL_ExtraColumnData() such that unless you specify colors, it leaves the color set by WMHL_AddObject() alone. Fixed bad index to ListWave in WMHL_ExtraColumnData(). WMHL_SetUsersListboxProc() didn't actually work: procedure name was added to structure, but modified structure wasn't written back to the user data in the listbox.

Fixed Waves Average.ipf to use point-by-point averaging when all XY pairs use the same X wave.

Transform Axis package now has the option of scientific format tick labels. Use the Modify Transform Axis control panel to select the option.

Cleaned up some things in the Window Browser package (Misc->Packages->Window Browser). See comments in the file.

Release Igor 6.20

Igor Application


Added automatic checking for Updates to Igor. The automatic checks can be disabled.

Added FTPDelete and FTPCreateDirectory operations.

Added the ability to merge instead of completely overwriting when uploading or downloading a directory with FTPUpload and FTPDownload.

Added FetchURL function for fetching data from a web server.

Added URLDecode and URLEncode functions for percent-decoding and encoding URL strings.

Add pre-defined global symbols, #define MACINTOSH or #define WINDOWS, as appropriate for the kind of Igor application that's running. See Pre-defined Global Symbols.

Added the defined(symbolName) function. See Conditional Compilation.

LoadPackagePreferences and SavePackagePreferences now set an output variable named V_structSize to the size of the structure passed to those operations. This may be useful in handling structure version changes.

Added options to TraceFromPixel that control the region over which traces are searched for. See the DELTAX and DELTAY keywords.

Added the IndependentModuleList function which returns the list of independent module names.

Added AfterCompiledHook and BeforeDebuggerOpensHook to User-defined Hook Functions.

Added Mud and Classification color tables.

Added changeableByCommandOnly property to Notebook operation. This is for programmers only and has very limited use.

Line fits done with CurveFit now output the coefficient of determination r 2 statistic in a variable called V_r2.

Added poly_XOffset built-in fitting function. Just like the poly function, but has a constant X offset that can improve numerical stability when fitting with X values far from the origin.

Windows 64-bit OS users with Igor 6.2 installed may also install a 64-bit beta version of Igor. The 64-bit version of Igor is not faster : see this page for important details about the 64-bit version of Igor and for the installer download link.


Now support hex 0x style literals larger than 32 bits. But the value will be stored in a double which has only 53 bits of precision.

Changed logic ops (&, | and ^) to use up to the 53 bits available in a double.

Changed printf code to print integer formats using 64 bit ints. But since the data is in a double, only 53 bits are precise.

Tables can now display up to 53-bit hex and octal values. Previously only 32 bits worked.

sscanf operation can now handle up to 53-bit integer conversions. Previously only 32 bits worked.

During experiment load on Macintosh, user preferences are used for procedure files and plain text notebooks instead of factory default preferences, as has always been the case on Windows. The upshot is that if you load a Windows experiment on Macintosh, procedure files and plain text notebooks will now be formatted according to user preferences.

Intel Macintosh only: Igor now uses Intel's Math Kernel Library for its implementation of the LAPACK linear algebra library instead of the implementation in Apple's Accelerate Framework. We find fewer bugs and better performance with MKL. (Note: we have used the MKL library on Windows for some time).


FindLevels now handles incorrect parameters in a threadsafe fashion.

Inside an independent module, you can now call a static function in another procedure file using moduleName#staticFunctionName, as long as that other procedure file is in the same independent module. Note: this has always worked in the ProcGlobal "independent module". See The IndependentModule Pragma.

Redimension/E=2 now swaps byte order even if no type flags are specified. This was broken in 6.10. This fix also fixes the MDChangeWave2 XOPSupport routine when called solely to swap byte order.

Fixed crash in Redimension/E=2 when called to swap bytes in complex wave.

Fixed a bug in SavePackagePreferences that caused Igor to report corrupted preferences if you changed your preferences structure to be smaller than it was before.

Fixed a bug in the Curve Fit dialog, New/Edit Fit Function code editor: multiple-line fit functions appeared in the code editor as one long line.

The Notebook and NotebookAction operations now return an error if you try to change a document open for read only.

Fixed crash when a picture in a layout window was overwritten in the Picture Collection.

Fixed a bug in MatrixOp that affected the fft() function only when the options flag was set for swapping.


The Network Communication topic discusses the new HTTP features of Igor 6.2.


The Gizmo XOP's Append Annotation menu item now calls the new Append Gizmo Annotation panel.

The Interpolate2 XOP can now handle NaNs in the X destination wave when using "X From Dest" mode.


Added GizmoAnnotations.ipf, which provides a panel-based annotation creator for Gizmo windows. These Gizmo annotations are textured quads. The texture is created from a small graph which can contain anything, not just a normal graph annotation. Width and height of the annotations are limited to power of 2 pixels.

Fixed another Index Out of Range error in Transform Axis package.

In Split Axis package, fixed a bug: if you clicked the Unsplit button when the menu said None Available, it would put up an error alert and break into the debugger.

In Split Axis dialog, changed menu updating so that the most recent axis split is offered for unsplitting or marking. That will enhance that chances that a multiply-split axis will be unsplit in the right order (most recent first).

Enhanced the Scatter Plot Matrix package to plot either all pairs of waves from a list of 1D waves, or all possible pairs of columns from a matrix wave.

Update Igor 6.20B04

Igor Application


Dialogs with a Cursors button and edit boxes now support all cursor names (A-J), pcsr, qcsr (even with a specified graph name), and numeric expressions.

FTPDownload and FTPUpload can now be called in ThreadSafe Functions.


Evaluating GetRTError(1) in The Debugger no longer clears the error.

Runtime errors generated by the Debugger's Expressions Pane or text selection are cleared, and now the value of the expression is set to any error message.

Rewrote FTPDownload and FTPUpload operations. For both operations, the /B flag has been removed. The /N, /T, /S, and /V flags now work correctly on both platforms. For FTPUpload, you can now use the /D flag to upload a directory containing sub-directories. Previously this had been broken on the Macintosh.


Fixed dialog problem involving customization at point zero.

Fixed bug where dest= w[a](b) would not compile.

Fixed problem where graph window background color intrudes past axes if plot area not colored (pure white) and axis standoff is on.

Fixed xcsr when complex trace using cmplxMode.

In certain lists in dialogs, when an error frame is in place, editing the last, partially visible row could result in an infinite loop of scrolling the error cell into view, then scrolling the edit cell into view. Known case was in the Rename dialog.

The Optimize operation would crash if /R={} had the wrong number of values in the list. This could be the result of using /R={wave} by mistake.

FIxed some problems with Waterfall Plots and f(z) trace colors when the f(z) wave and waterfall data wave had same number of rows and columns.

Fixed bug in generation of custom date format command in Modify Axis dialog if all components were None except for one.


Documented the previously experimental History Archive feature.


In the Interpolate XOP, the /J=1 and /J=2 flags will not add end nodes if this would create duplicate or near-duplicate X values.

Bug fixes to the Gizmo XOP.


Rewrote Waves Average panel to work with unequal wave lengths and XY data.

Fixed bug in Multipeak Fit 2.ipf: If you re-used a previous set, it would wipe out all the baseline coefficients except the first.

Bug fixes to Gizmo Procedures.


Added "Slow Data Acq" demo experiment to Examples→Programming.

Update Igor 6.20B03

Igor Application


Added index out of bounds and missing dimension label checking for wave read and write in user functions. This runtime checking is performed for code compiled under #pragma rtGlobals=3. (By default, ThreadSafe functions do this checking regardless of rtGloabls. ) The checking can be turned off using

SetIgorOption DimensionChecking=0xF

and can be turned on for all code (not just that under rtGlobals=3) using

SetIgorOption DimensionChecking=0xF0

You can now preallocate storage for text waves using Make/T=size. Size is of each point so total allocation is size*numpnts. Data is not cleared and may contain garbage or old text if overwrite. Use

Make/T=size wname= PadString("",size,0) 

to ensure data is initialized if desired. Preallocation can dramatically speed up text wave assignment when the wave has a large number of points -- but only when the new strings are exactly the same size as the preallocation size.

New string function UnPadString(str, padValue). Undoes the action of PadString by removing any trailing bytes of padValue. Useful in speeding up access to very long text waves when using PadString in combination with the new /T=size flag for Make. Allows for the storage of variable length C-based strings (padValue of zero) in a text wave with preallocated string sizes.

Added a new string function that returns info about a FUNCREF variable: FuncRefinfo(fvar) returns

NAME:<name>ISPROTO:<1 or 0>ISXFUNC:<1 or 0>

<name> will be blank if fvar defaulted to the prototype.

GetRTError can now take a value of 2 to return state of abort flag. This is most useful in thread groups to know when a release has been done. (The abort flag is just read, not cleared.)

Added ReorderImages. Just like ReorderTraces but for images.

Added a new keyword to ModifyImage; interpolate= 1. Turns on smoothing of the boundaries between pixels. Since this is implemented via system graphics calls and not by Igor actually doing the interpolation, it will not affect EPS or EMF export on Windows and will not affect EPS export on Mac. Example: First execute

Make/O/N=(20,20) jack=enoise(1)
NewImage jack

then observe effect of

ModifyImage jack, interpolate=1

Image plots now support 4 plane RGBA image waves. The alpha channel is supported only for unsigned 8 and 16 bit integer data and is not supported when exporting Igor PDF or EPS on Mac and not for PDF, EPS, EMF or printing on Windows. Also, under certain circumstances, color table index images with holes due to NaN in the data now use an alpha-based technique rather than individual pixel drawing. It is used when interpolate is turned on and when exporting a Quartz PDF or when printing on Mac. The new alpha code can be turned off using

SetIgorOption imagedraw, UseAlpha=0

ImageTransform rgb2gray now supports converting a 4D RGB wave into a 3D grayscale stack.

ImageTransform rotateRows and rotateCols now supports layer specification using the /P flag.

Loess can now be called in ThreadSafe Functions.

ContourZ has new pointFindingTolerance parameter.

ModifyContour has new perturbation and now-documented equalVoroniDistances keywords.

Can now set the pair of cursors displayed in the cursor info panel using ShowInfo/CP=<num> where num is 0 to 4 for AB to IJ.

Added a new item to the trace contextual menu: Copy Display Command. Mainly to get full path to trace waves on the clipboard but can also be executed to create a new graph with just the one trace.

Save has a new /H flag to adopt a wave to home, as if /H was used with LoadWave in the first place.

Added Adopt button to the Browse Waves dialog. Now, if you loaded an Igor Binary Wave file (.ibw extension) and you didn't chose to Copy Wave to Home, you can now sever the connection to the wave's file by choosing Data→Browse Waves, choosing the wave from the list, and clicking the Adopt button.

The Adopt All dialog has more control of what's adopted. Now it can be used to adopt only waves, for example. (Hold the Shift key down when selecting the File menu to see the Adopt All dialog item).

New event for ListBox: 13 = Checkbox toggle, sent after checkbox wave is modifed.

Checkbox side=1 displays the checkbox on the right and the title on the left.

CustomControl drawing uses new graphics.

New CustomControl keyword usage: now the frame keyword (which has always defaulted to 1) can be set to 0 to prevent drawing the default button. Added other frame values that are eseentially the same as for TitleBox, support for native GUI appearance. This change means you can set varying sizes for a custom control (which is not possible with a proc picture) and does not impose a button on the control. Here's an example which makes a simple clickable TitleBox (TitleBoxes don't have an action procedure, but CustomControls do):

#pragma IgorVersion = 6.2
#include <CustomControl Definitions>

Window Panel0() : Panel
	PauseUpdate; Silent 1		// building window...
	NewPanel /W=(150,50,440,181) as "Web Link Example"
	CustomControl link,pos={58,51},size={165,19},proc=LinkCustomControlProc
	CustomControl link,title=""
	CustomControl link,frame=0,fStyle=4,valueColor=(0,0,65535)

Function LinkCustomControlProc(s)
	struct WMCustomControlAction &s
		case kCCE_mouseup:
			BrowseURL/Z ""

	return 0


Added several speed optimizations to compiled user function code especially in regard to reading and writing a wave value such as w[2] or w[var].

Can now hide exterior subwindows by clicking inthe close icon if the subwindow was created using /K=3; Hidden subwindows are now honored by recreation macros.

Keyboard is now usable for exterior subwindows in tools mode.

Slider mouseWheel event snaps to the slider increment just like dragging the thumb does.

If you manually try to open a notebook or procedure file that is already open in another application, Igor will display a "Do you want to open the file for read-only?" alert. When running in a procedure, Igor just opens the file for read-only.

A relative #include statement now works relative to the Igor Pro User Files folder as well as the Igor Pro folder. See The Include Statement for details.

Pressing the option key while clicking close box of a window now always kills the window even if the /K=2 (don't kill) or /K=3 (hide instead of kill) flags where used to create the window. This provides a way to kill the window during development.

The LoadData operation now allows loading experiment files with the wrong extension.

Windows: A second instance of Igor now launches faster. This required changing how Igor deals with an error when opening a file that is already open in another application.

Windows: Igor now loads XOPs such that the folder containing the XOP is searched for any DLLs that the XOP requires.

Macintosh: Igor emits a Can't load the executable file in the XOP package error if the package name, executable name and CFBundleExecutable keys of an XOP do not all agree. This is to help Macintosh XOP programmers find out why their XOP is not loading.


Fixed problems in the new ThreadGroupGetDFR.

Fixed clipping when exporting postscript (new graphics.)

Fixed crash in debugger when stepping out of wave function.

Fixed compiled AddMovieFrame/PICT.

Fixed a bug that could cause a crash when calling an exterior operation from a threadsafe user-defined function called from the main thread.

Fixed a bug that could cause a crash when an exterior operations was called from multiple threads more or less simultaneously.

SetVariable no longer clips the control height to a smaller title height; the larger of the title and value height is used.

The Optimize operation could crash using the multivariate function format having two waves as inputs, if the X wave had just one point. The crash is fixed, and you are also allowed to use the multivariate minimizer with just one independent variable.

Fixed crash when doing threaded ODR fit to user fit function.

Fixed an obscure bug that caused could cause a crash in GPIBRead and VDTRead operations. The crash could happen if you did a read of a number and there were no numeric characters available to read.

Fixed a bug in the Curve Fit dialog: when fitting to a matrix the dialog failed to remember qcsr(A), qcsr(B) sub-range settings for the second dimension.

Fixed a bug in the Curve Fit dialog: when fitting to a multidimensional wave, if you had a subrange entered for lower dimension but not higher dimensions, the command generated lacked trailing empty square brackets to indicate the full dimension was to be used.

Orthogonal Distance Regression (ODR) fitting failed to compute coefficient confidence intervals when asked. See Errors in Variables: Orthogonal Distance Regression.

Arrow keys now work to move selected objects in an exterior control panel in draw mode.

Undo now works in an exterior panel in draw mode.

WinRecreation with option=4 no longer destroys undo information when called for a graph or control panel in draw mode.

Copy Commands item in the control contextual menu in a control panel no longer truncates very long control names.

Graph trace info tags no longer interfere with updating the cursor info panel.

Windows: SetWindow's "menuenable" event now gets the correct keycode value.

Windows: Fixed SpecialDirPath("Igor Pro User Files", 0, 0,0) improperly using backslash separators on Windows when the user has changed from the default location.

Windows: Dialog Wave Browsers can now properly shift between multiple- and single-selection modes. This affects a few dialogs, notably the Smooth dialog when shifting between Loess and other smoothing options.

Windows: Modify Trace Appearance, Color as F(z) dialog, wave selection for color as f(z) was broken.

Windows: Fixed error from Windows FTPDownload/D caused by . and .. pseudo-directories.

Windows: Fixed GDI object leak related to dashed lines in legend and UseOldGrids mode.


The documentation for background tasks has been updated. See Background Tasks.

A new example experiment explains background tasks and provides code that is easily redeployed for another project. Choose File→Example Experiments→Programming→Background Task Demo.


Added to Gizmo a new hookEvent that responds for changes in the viewing transformation.

Added to ModifyGizmo a new keyword to control auto-scaling on a per-axis basis.

Added to ModifyGizmo and GetGizmo new keywords to store named "userstrings", similar to but different from userData in a panel or graph.

Added curGroup keyword to GetGizmo to return the path to the current group object.

Updated XLLoadWave XOP to version 6.00. This version can load Excel .xlsx files as well as Excel .xls files.

For GCC 4.3 compatibility, the main function of an XOP can now be named XOPMain instead of main. An XOP that uses XOPMain instead of main will require Igor Pro 6.20B03 or later.


Rewrote many of the Gizmo-related procedures to add a "Zoom and Pan" panel, a new "Append Image" panel, a new "Make Gizmo Texture from Graph" panel, and improved Axis Range, 3D Pie chart, and Append Contour to Gizmo panels.

The new XY Pair to Waveform Panel.ipf procedure file implements a panel-based interface, available in the Data→Packages menu.

Added CustomControl Definitions.ipf, which defines constants you can use when writing the action procedure for a CustomControl.

In MultipeakFit 2: Added Total Area printout on results window; fixed bug: Include Background Info checkbox in the Results window didn't move when the window was re-sized; in the call to FuncFit, the mask wave was specified using /W instead of /M; fixed out-of-bounds access to HoldStrings wave in MPF2_HoldStringForPeakListItem()

In Global Fit: rtGlobals=3 turned up possible out-of-range indexing in the linking and unlinking code.

Wave Loading.ipf's "Copy All Waves To Home" menu item now actually works with packed (and unpacked) experiments.

GIS Utilities (Data→Load Waves→Packages→Install GIS Utilities) GSHHS coastline database loader updated by Steven Howell at University of Hawaii to load version 2 GSHHS files.

Global Fit 2 has several "Index out of range" errors fixed, a Windows-only problem with restored panel size was fixed, and the control panel now remembers the setup from when it was last closed.


The Examples->Visualization→Advanced→Gizmo Earth experiment has been rewritten to use the new Make Gizmo Texture from Graph panel and to include some advanced details about using textures in Gizmo.

Update Igor 6.20B02

Igor Application


New function, ThreadGroupGetDFR, similar to ThreadGroupGetDF except it returns a data folder reference to a free data folder rather than a name of a data folder. This new function should be used in order to avoid a memory leak caused by the old function.

The Modify Axis dialog now has controls corresponding to ModifyGraph gridEnab. They are on the Ticks and Grids tab.

Modify Trace Appearance dialog, f(z) sub-dialog now accepts color as f(z) waves for waterfall plots that have the same number of rows as the waterfall has traces. This supports the new ModifyGraph zColor capability added in 6.20B01.

ControlInfo has a new flag, /G, to get a control's global coordinates.

The exists function's objNameStr can optionally include a module name or independent module name prefix such as "ProcGlobal#" to check for the existence of macros even from within a different independent module.


Can read the new 64 bit disk format used by the Windows Igor64 beta. For options on loading such data, see the discussion of SetIgorOption BigWaveLoadMode in the ReadMe (64-bit).ihf file installed with Igor64.

Windows: Launching Igor without a file or /X command line flag (see Igor Command Line) generates another running instance of Igor. This means that double-clicking Igor.exe will start another instance of Igor, but double-clicking an experiment file will still open that file in the frontmost instance of Igor (or start up Igor if it isn't running), as it always has.

Concatenate now supports wave waves and datafolder waves. (Previously it would crash.)

ThreadSafe functions can now use FUNCREF.

You can now kill all running threads using -2 input to ThreadGroupRelease.

Windows: tweaked appearance of markers at screen resolution (new graphics.)

For speed reasons, Load Igor Text no longer shows commands in the command line as they are executed. If an error occurs, the erroneous command is shown in the history area.

SavePICT with /P presets Save File directory for consistency.

When Igor is starting up, to make it start up faster, each opened help file and procedure file now uses a copy of the same page setup record copied from the preferences for plain text notebooks. This change was made to cope with recent Macintosh HP drivers that take a very long time to create a new page setup record.

The SetVariable dialog no longer suggests a new variable choice when the current one doesn't exist, so as to prevent accidental setting of a new variable.

The way Igor draws characters when you type was changed to avoid artifacts caused by font smoothing with certain fonts.


Fixed bar and fill erase modes with new graphics.

Fixed crash when Concatenate/KILL used with same wave present twice in the input list.

Macintosh: FTPDownload/D now works. Previously it returned a "file in use" error in some OS versions.

Fixed problem in Search Igor Files that could cause a crash if your search encompassed too many files. The crash was on Windows but the bug was present on Macintosh also.

Fixed mousewheel handling of Slider controls so that it works even when the slider limits were reversed.

Fixed incorrect handling of OpenNotebook/W coordinates when called from a user-defined function.


Gizmo has a new Ortho Zoom menu item, requires GizmoOrthoZoom.ipf and revised All Gizmo Procedures.ipf.

The Interpolate XOP's Interpolate2 operation now works with free waves.


XYZtoMatrix.ipf: Fixed XYGridandZtoMatrix routine for descending X and Y values.

Added GizmoOrthoZoom.ipf, which implements zooming and panning of Gizmo windows.

All Gizmo Procedures.ipf now requires Igor 6.1 or later, includes GizmoOrthoZoom.ipf.

WaveSelectorWidget.ipf and HierarchicalListWidget.ipf now check to see if there is a window recreation macro for the root of the window containing the widgets. If there is one, it does not destroy the data folder holding data for the widgets.

Multipeak Fit 2: added handling for the case where the data graph is renamed by the user.

Update Igor 6.20B01

Igor Application


You can now color each trace of waterfall plots by providing a f(z) wave to ModifyGraph zColor with a number of points that matches the number of columns of the waterfall matrix wave. This is not only simpler but is much much faster for large plots. This is not yet supported in the Modify Trace Appearance dialog. Example:

Make/n=(100,10) jack=x+10*y
NewWaterfall jack
Make/N=10 jackz=x
ModifyGraph zColor(jack)={jackz,*,*,Rainbow,0}

You can now customize the appearance of single points on a trace in a graph for bar, marker, dot and lines to zero modes. See Customize at Point and the section "Single Point Customization:" in the details area of ModifyGraph for Traces.

Legend symbols can now show the conditions at a specific point on a trace by appending the point number in brackets to the trace name. See Symbol Conditions at a Point. Legends are automatically updated when a ModifyGraph Customize at Point is done.

Here is an example of customize at point and the automatic legend creation:

Make/O/N=10 jack=sin(x); Display jack
ModifyGraph mode=5,hbFill=6,rgb=(0,0,0)
ModifyGraph hbFill(jack[2])=7,rgb(jack[2])=(0,65535,0)
ModifyGraph rgb(jack[3])=(65535,0,0)

After executing the above lines, try interactively customizing a point by right-clicking on a bar and choosing Customize at Point from the contexual menu.

You can provide a custom name for a trace by appending /TN=traceName to the waveName specification for Display and AppendToGraph. This may be useful when displaying waves with the same name but from different data folders. See Trace Name Parameters for more information.

Added /NCAT flag to AppendToGraph. Causes trace to be plotted normally on what otherwise is a category plot. x values are just category numbers but can be fractional. Category numbers start from zero. This can be used to overlay the original data points for a box plot. Here are examples:

Make/T/O catx={"cat0", "cat1", "cat2"}
Make/O caty= { 1, 3, 2}
Display caty vs catx
SetAxis/A/E=1 left

// Example 1: plot a function vertically overlaying a category
Make/O cat0over= 0.5*(sin(p/8)+1)
SetScale x, 0,3,cat0over
AppendToGraph/NCAT/VERT cat0over

// Example 2: simulate original data for a box plot
Make/N=10/O cat1over= gnoise(1)+1.5
SetScale/P x, 1.5, 1e-5, cat1over	// delta x can not be zero
AppendToGraph/NCAT cat1over
ModifyGraph mode(cat1over)=3,marker(cat1over)=19,rgb(cat1over)=(0,0,65535)

Added column=n keyword to ModifyGraph. Changes the displayed column from a matrix. Out of bounds values are clipped. In the following example, try different values for the column parameter:

Make/O/N=(100,10) jack2d= sin(x/(2+y))
Display jack2d[][0]
ModifyGraph column=1

Added new flag to WAVE, NVAR and SVAR:

/SDFR= sourceDataFolderRef	- looks up objects in specified data folder.

See The /SDFR Flag for details.

New ModifyGraph quickdrag=2 mode. Mouse cursor changes to 4 arrows when over trace.

New SetAxis/A/E=3 mode: Autoscale from zero if not bipolar.

Added the functions WaveRefsEqual(w1,w2) and DataFolderRefsEqual(dfr1,dfr2).

Added optional data folder ref parameter to DataFolderDir(mode [, dfr]).

Macintosh: ParseFilePath(5, path, "/",0,0) converts an HFS to a UNIX (Posix) path, provided the referred-to file or folder actually exists on disk.

Added "optional" keyword to #include. If the file doesn't exist or is the wrong version, it is ignored. See The Include Statement.

Added /T=titleStr flag to DoAlert.

Added /DEST=destWave/WAVE to FindLevels.

Added popup for Listbox titleWave to the Listbox Control dialog.

Added dialog support for TitleBox fixedSize=1.

Added exterior keyword and /Z flag to GetWindow operation.

Added FLT and VISIBLE options to WinList, and an optional floatKind parameter to WinName.


Igor now honors the wave lock for wave assignment in functions. Will now throw a runtime error. See SetWaveLock and Waveform Arithmetic and Assignment.

Changed action of Concatenate/NP=n; when n > max dim used in waves, this is the same as no /NP flag.

Changed the behavior in functions of many operations that create a destination wave. See Destination Wave Parameters for more information.

TabControl limit raised to 100 tabs.

New method for strict wave reference mode:

Previously, you could execute

SetIgorOption RequireWaveRef= 3

to turn on a mode that requires all bare wave names in user functions to be wave reference variables. Without this mode, a name that was not a wave reference variable would then be taken as the name of a wave to look up a runtime. This is often a programming error.

This SetIgorOption method, which for the time being is still available, affects all procedure files and lasts until you quit igor. Now you can turn on this mode on a file by file basis by using

#pragma rtGlobals= 3

Unfortunately, previous versions of Igor will interpret rtGlobals=3 incorrectly. If your procedure file might be used on such versions, you will need to do this:

#if IgorVersion() >= 6.13
#pragma rtGlobals=3	// Use strict wave reference mode
#pragma rtGlobals=1	// Use modern global access method.

Also, the new mode is now honored by KillWaves and, conversely, not by the WAVE statement. So,

#pragma rtGlobals= 3
Function foo()
//	KillWaves wave1		// Will not compile
	KillWaves :wave1	// OK, will lookup wave1 in current data folder at runtime
	WAVE wave1			// ditto
	WAVE w= wave1		// ditto

Previously, with SetIgorOption RequireWaveRef= 3, the first line would compile and the last would not. The SetIgorOption method is still useful to do a quick check of all the procedures in an experiment to see if any will cause problems in this mode.

Tip: you can execute Silent 101 for the side effect of causing all procedure files to be recompiled. So, use

SetIgorOption RequireWaveRef= 3; Silent 101

to test an experiment's procedures. You can revert to file by file mode using

SetIgorOption RequireWaveRef= 0x11; Silent 101

CloseProc now understands /NAME="FileName.ipf [IndependentModuleName]" syntax to close a procedure window in an independent module.

The SetIgorHook operation's S_Info result contains a list of the function names prepended with their independent module (from #pragma independentModuleName, if any otherwise "ProcGlobal") and optional module name (from #pragma moduleName), as in "ProcGlobal#AfterFileOpenHook;".

Undocumented function WinIsExterior has been removed.

WaveSelectorWidget.ipf now uses new exterior keyword with GetWindow instead of the undocumented WinIsExterior, which has been removed.

SetRandomSeed have a new flag, /BETR, to select a new method of initializing the Mersenne Twister random-number generator. The new method has much higher resolution in the seed input. The default behavior is to use the old method so that existing code will generate the same sequences of "random" numbers as before. We recommend adding the /BETR flag if the exact number sequence isn't crucial.

Previously, if you used SetDrawEnv pop more times than you used SetDrawEnv push, it would cause the push and pop mechanism to stop functioning until you restored the balance of pushes and pops. Now too many pops is benign- it doesn't do anything, but doesn't prevent future pushes or pops from working. Note that there is a limit of 10 pushes; if you excede this limit, nothing further happens, and extra pushes must be balanced by pops.

Added magnification (expand) setting to Modify Graph dialog.


Fixed bars display mode when fill is none (new graphics only.)

Fixed color of dashed lines in Legends on Windows due to bug introduced in 6.12.

Fixed autoscale visible data on log axis.

Windows only: fixed problem using old grid line code in new graphics when exporting layout as EMF.

Fixed crash when setting breakpoints in uncompiled independent modules.

Fixed a crash if you ran a user function that set the current data folder to a free data folder, forgot to restore the current data folder to a regular data folder, and then brought up a dialog containing a Wave Browser. Note that the cause of the crash is a user programmer error: see Free Data Folders.

Improved the TitleBox control dialog's handling of global string-based titles versus literal title text.

Macintosh: cosmetic improvements to dialog's popup menus showing the current color.

Macintosh: The Dashed Lines dialog's points-mode ruler has been restored.

Macintosh: The window hook function didn't get the moved event when the hooked window was moved using MoveWindow. See Window Hook Functions.

Macintosh: Fixed the Insert Character popup menu to show characters from the Symbol font more reliably.

Macintosh: Fixed a crash that occurred if the Trace list in the Modify Trace Appearance dialog overflowed. On Macintosh, this list is limited to 32000 characters total. The fix prevents the crash but the 32000 character limit remains.

Macintosh: Added another workaround for Spotlight interfering with saves. We now try FSUnlinkObject if FSDeleteObject returns fBsyErr. FSUnlinkObject requires OS X 10.5 or later.

Made a few changes to correct operations with user-defined structure elements in ImageMorphology. Modifications affect gray erosion, dilation and derived operations.

Bessel functions (Besseli, Bessely, Besseli, Besselk) now do a better job checking for bad inputs and are more correct in returning zero or inf for certain extreme inputs.

ShowIgorMenus and HideIgorMenus work better when called in a function.

Fixed Notebook->Generate Commands to not break long text runs between the bytes of a two-byte Asian character.

Windows: the changed positions of DoAlert and error dialogs are now remembered.

The debugger's graph now works with free waves.

In the Curve Fit dialog, activating the X Range Full Width of Graph checkbox or the Covariance Matrix checkbox or one of a few other checkboxes resulted in generating the TBOX flag even though the Add Textbox to Graph checkbox was not activated.

Windows: Fixed a problem that was most apparent in Windows 7 with Arial font. The caret was sometimes shifted horizontally and character selection was sometimes inaccurate.

Windows: Clicking on a popup menu control in a panel or graph with tool or info palette showing no longer results in the popup menu list closing immediately.

Random-number generators in threads were not properly initialized, resulting in the same sequence of "random" numbers in each thread.

After editing a procedure window which is in an independent module and also contains menu definitions, clicking the menu bar or using a menu shortcut key before successfully recompiling the procedures no longer prints bug messages into the history window.

Fixed a bug that caused a graph resized with MoveWindow to not update its contents. This also affects TileWindows and StackWindows.

Fixed crash if you tried to do a fit using the built-in Poly2D fit function and /ODR=2.

Fixed FuncFit when used in a thread.

Fixed possible crash related to preemptive threads running functions in independent modules. This affects FuncFit, FindRoots and Optimize.

Fixed crash caused by running Optimize to do a multivariate optimization in a preemptive thread.

Improved error messages for the HOLD keyword when using sums of fit functions with FuncFit.


The documentation for Regular Modules and Independent Modules was revamped.


Macintosh: Fixed crash in HDF Loader (HDF4) when reading 32-bit unsigned data. Improved error reporting in HDF Loader.

Added a workaround to HDFReadSDS ref=<ref> in HDF Loader (HDF4). If ref=<ref> is negative, it is the index of the SDS data set in the file (-1 means first SDS, -2 means seconds SDS, . . .). This is a workaround for an apparent bug in the HDF4 library SDreftoindex routine.

Fixed a problem in Gizmo that could cause a crash when saving an experiment that contained a path object.

Changed Data Browser to support DFR and WAVE waves.


In the obsolete ANOVA.ipf procedure file, changed a wave name from "variance" to avoid conflict with the new function of that name. PLEASE NOTE that this file is provided only for backward compatibility. You should be using the built-in operations StatsANOVA1Test, StatsANOVA2RMTest, and StatsANOVA2NRTest. See the example experiments: pull down the File menu and select Example Experiments->Statistics.

Revised the Resize Controls.ipf procedure for compatibility with future versions of Igor.

Fixed bug in Multi-peak Fit 2.0.ipf: Using the batch fit example function would result in "WAVE Reference to <wave name> failed".

Revised Wave Loading.ipf: CopyAllWavesToHome now copies all waves in all data folders to "home", not just those in the current data folder.

Revised Execute Cmd On List.ipf: Added WalkDataFoldersWithWaveCmd.

Revised New Polar Graphs.ipf to lessen the amount polar graphs change their size and margins.

Revised MultipeakFit 2 to add Fit Curve Points setvariable to the Options area of the control panel.

Revised Percentile and Box Plot package to modernize the code a bit, improve formatting a bit, and eliminate some menu and execute commands that printed to the History window.

Added Percentile and Box Plot and Waves Average packages to the Packages menus.