Changes Since Igor Pro 4.0

This file describes significant changes made to Igor or any supporting files since Igor 4.0 first shipped. Here, in reverse chronological order, are the updates:

Nov 7, 2003: Update 4.09A
Oct 20, 2003: Update 4.09
Jun 23, 2003: Update 4.08
Dec 3, 2002: Update 4.07
Jul 12, 2002: Update 4.06A
Jun 7, 2002: Update 4.06
Feb 12, 2002: Update 4.05A
Jan 31, 2002: Update 4.05
Sep 14, 2001: Update 4.04
Jun 29, 2001: Update 4.03
Apr 11, 2001: Update 4.02A
Mar 27, 2001: Update 4.02
Nov 27, 2000: Update 4.01A
Oct 31, 2000: Update 4.01
Oct 9, 2000: Update 4.0A
Sep 15, 2000: Release 4.00 CD. See Igor Pro 4.0 New Feature Details about changes since Igor 3.1. 

How to Update Igor Pro 4

You can download standalone updaters to Igor 4.09A from our FTP site. For more details, click here

NOTE: The "universal updater programs", Update Igor To Latest Version, Igor4WebInstall.exe, or Install Igor 4 from the Web are no longer supported: the web site that hosted the files they download has been retired.


Update 4.09A

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

WINDOWS: Restored compatibility with Windows 95 and NT.

Fixed numerical error in ImageLineProfile standard deviation calculation.

Fixed bug in Sort where negative values very close together would sort backwards.

Fixed areaXY bug introduced in Igor 4.09, where reversing the x range no longer negated the area (which it should, and now does again). FaverageXY correctly doesn't do this.

Fixed bug in Curve Fit dialog: In a user-defined fit function, entirely blank lines containing space or tab characters (and nothing else) could cause errors in parsing the function, in turn causing incorrect information about number/names of fit coefficients.


Minor correction to GizmoRotation.ipf.


Update 4.09

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

Fixed crash in Modify Traces dialog when zwave is NULL. Also added test for NULL zwave in compiled ModifyGraph for zColor, zmrkNum and zmrkSize.

Fixed possible crash in the Date Format dialog that could occur if you chose a date format with four elements.

areaXY and faverageXY no longer return negative values when the x range is reversed.

SavePICT can specify the window to be saved with the new /N flag.

Drawing objects in layouts no longer draw outside the layout window during Export Graphics.

The mask wave now works properly with Poly2D curve fit function.

Fixed bug in IntegrateODE/M=1 (Bulirsch-Stoer method). Previously, the answers were correct, but the bug fix gives an increase in speed of one or two orders of magnitude on suitable systems.

Fixed bug: FindRoots failed to mark certain waves as modified so tables and graphs failed to update properly.

MACINTOSH OS X: Made some changes to dialogs to fix disappearing dialog items under OS X 10.3 (Panther).

MACINTOSH OS X: reduced CPU hog behavior of the Curve Fit progress window after a fit was finished.

WINDOWS: Fixed a rare crash that occurred if you called ExecuteScriptText and the OS returned unknown error codes.

WINDOWS: Fixed a problem where graphs were created really small and mostly out of sight if Igor was minimized.

WINDOWS: Fixed a problem where tables were created too small on two-monitor computers.

WINDOWS: Fixed bad abbreviated Japanese date (month symbol was missing).

WINDOWS: Fixed the Common Format popup menu in the Date Format dialog. The third and fourth items from the bottom did not work correctly.


MACINTOSH Carbon: XLLoadWave 3.62, which shipped with Igor Pro 4.08 Carbon, was missing support for the /J flag. This has been fixed by XLLoadWave 3.63.

WINDOWS: Fixed HDFLoader XOP so that it accepts Macintosh-style paths as well as Windows-style paths.


Added Transpose Waves In Table procedure. If you have 3 waves with 10 rows in the top table, choosing "Transpose Waves In Top Table" from the "Table" menu creates 10 waves with 3 rows in the current data folder.

Added /Z flag to Wave statement in SaveTable.ipf.

Added the PixelFromLinearAxisVal() function to Axis Utilities.ipf.


Update 4.08

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

Igor no longer crashes if a fit function uses the Override keyword.

The LayoutInfo function previously returned a string containing a "NUMOJBECTS" keywords. This misspelling has been corrected so the returned string now contains "NUMOBJECTS".

ImageRotate/O scramble of rows and cols has been fixed.

Igor no longer crashes when trying to modify an image or contour plot named 'something#other'.

PopupMenu mode limit raised from 1000 to 0x7FFFFFFF.

ListBox max number of columns raised from 20 to 100.

ControlInfo returns the horizontal and vertical scrolling distances for a ListBox.

A panel whose size is locked with ModifyPanel fixedSize=1 is temporarily unlocked in any drawing tools mode, or in the temporary selector mode (command+option keys on Mac or Ctrl+Alt keys on Windows).

Fixed a crash that occurred if you used LoadWave/F/B and the number of columns specified by /F was less than the number of columns specified by /B.

Fixed a crash that occurred if the history grew beyond about 30 MB without saving.

When exporting RTF files, Igor now includes the \fcharset RTF control. This optional control appears to be necessary for some RTF readers to recognize Japanese text.

Fixed a problem in importing some RTF files that used decimal, center or right-justified tabs.

Fixed a bug which caused the front layout to be used instead of the specified layout in a Notebook picture={$layoutName} operation.

Changed the Write Row Positions and Write Column Positions feature of the Save operation to write up to 15 decimal digits instead of 6.

Fixed memory leak when copying text wave cells in a table.

Fixed the ModifyGraph dateFormat command. It was ignoring the language parameter.

Window hooks (see SetWindow) can now intercept command-clicks (Macintosh) or right-clicks (Windows) and prevent Igor from displaying the usual contextual menus. The window hook can provide it's own contextual menu by using the new PopupContextualMenu operation.

WINDOWS: Fixed bug in random number generator initialization that caused the same sequence to be generated every time Igor started up. See SetRandomSeed. This was fixed previously, but the fix made it into Macintosh code only.

WINDOWS: Fixed a problem that caused procedure windows and notebooks to print blank pages on some non-PostScript printers under Windows 98.

WINDOWS: Improved mouse wheel behavior in text windows. Implemented mouse wheel support for tables and page layouts.

MACINTOSH Carbon: Fixed potential crash involving rotated text.

MACINTOSH Carbon: If you tried to resize a panel with the tools showing to be narrower when it's size had been locked with ModifyPanel fixedSize=1, the panel would become wider by the width of the tool palette.

MACINTOSH Carbon: ModifyPanel fixedSize=1 keeps the panel the same size instead of growing by 1 pixel when the user attempts to make it bigger.

MACINTOSH Carbon: If you double-clicked a column name in a table, sometimes the digits popup menu was disabled. This is fixed.

MACINTOSH Carbon: Fixed problem whereby the list of numeric formats in the Modify Columns dialog did not update correctly when you moved from one column to another.

MACINTOSH Carbon: Copy/paste of a single blank cell in a table did not work. This is now fixed.

MACINTOSH Carbon: Fixed a problem that caused page setups to not be loaded from an experiment sent as an attachment using Microsoft Outlook Express on OS X.

MACINTOSH Carbon: Fixed the batch file mechanism. It did not find the "Igor Batch Init File" or the "Igor Batch File" in the Igor Pro Folder.

MACINTOSH Carbon: Fixed event-handling to avoid hogging CPU in certain cases, notably when the Curve Fit progress window is displayed.

MACINTOSH OS X: Put in a workaround for a problem apparently caused by Norton Antivirus that causes Igor to leave temporary files (Filename.pxpT0, Filename.pxpT1, . . .) after a save.

MACINTOSH OS X: Put in a workaround to prevent user from activating the wrong window when a modal dialog is displayed. This occurred if the user put Igor in the background and then activated Igor by clicking on a target window while a modal dialog was displayed.


Added code to allow the XLLoadWave XOP to recognize built-in date format codes added in Excel 2000.

MACINTOSH Carbon: The GWLoadWave XOP has been ported to Carbon and is not part of the Carbon distribution.

XLLoadWave now sets the S_worksheetName variable even if the /S=worksheetName flag is omitted from the command.

Fixed crash in Interpolate operation if using Dest X Coords From Dest Wave and destination wave has fewer than 2 points.

Windows: The VDT XOP can now support more than for COM ports.


The Transform Axis package has a bug fix: the Tick Editor was using incorrect values for the axis ends, causing a tick to be misplaced in certain cases

The Transform Axis package now puts up an alert when a graph window is closed asking if you want to keep the tranform axis information. If you click Yes, you can use the recreation macro that you may have saved in a previous alert to recreate the graph with the transform axes.

Added FolderFromPath(filePath) function to File Name Utilities procedure file.

Added WMImageLogColorTable.ipf, which implements log color table for images by creating a logarithmic lookup wave for the image.

In WMImageInfo.ipf, fixed bug in WM_ImageColorLookupWave(), added WM_ColorScaleForImage() and WM_MakeImageLogLookupWave().

Axis Utilities.ipf has new AxisLabelText() function.


Added SearchProceduresInFolder.pxp, an experiment that searches procedure files for Igor commands that don't take advantage of features that explictly set the window name; namely control statements like Button and Checkbox and window-related statements like ModifyGraph and DrawText. Also includes a general stringmatch-like searching method. An Igor programmer can add other search methods.


Update 4.07

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

MACINTOSH Classic: Improved detection of symbol-style fonts when exporting eps files.

MACINTOSH Carbon and Windows: Added ability for the user to specify that a font is to be treated as a symbol-style font when exporting EPS files. A new text wave named PSSymbolNames is used to hold the PostScript font names of such fonts. If you are adding a symbol-style font (MathematicalPi-One for example), to the font translation and naming tables (TTtoPS and TTPSFNames), also add the name to PSSymbolNames. See the "PostScript Font Names" section in the "Exporting Graphics (Windows)" chapter for information about TTtoPS and TTPSFNames.

MACINTOSH Carbon: Added code to automatically detect PostScript font names when exporting eps files so the user does not have to edit the above mentioned font translation and naming tables. However: this only works if the screen font is a TrueType font and will not work for legacy bitmap fonts. If, when exporting an EPS file, you see a message in the history that the PostScript font name could not be found, then you will need to set up the TTtoPS and TTPSFNames waves.

Added new flag, /G=g, to AppendImage and NewImage. g=1 supresses the autodetection of 3 plane images as direct (rgb) color. When used with NewImage, it also supresses detection of explicit mode. g= 0 is the default and the same as no /G flag.

Increased by a factor of 10 the size of the stack that limits function recursion. Also provided a mechanism for the user to change the stack size. Use

SetIgorOption memory,rStackSize=s

where s is the number of bytes for the new stack. The minimum size is 16000 (which was the previous fixed size). You can read the current size using

SetIgorOption memory,rStackSize=?

and then reading the V_Flag variable. Because the stack can only be changed while nothing is executing, you must either set the size manually on the command line before executing code that needs the new size or you must start your code using Execute/P after setting the size. This mechanism is currently considered experimental and is not documented except in these notes.

Changed the behavor of the histogram bar display mode when a zero height bar is encountered. They now allign with the base of the preceeding bar and are not quite so thin (this change is visible only on a high resolution output device.) If you prefer the old behavor, let us know.

Fixed rare crash involving string SetVariable controls, dependency objects and the use of the Abort command.

Added documentation for fStyle and fColor keywords as used in the GroupBox control. These keywords have long been available but the the following documentation was missing:

fColor=(r,g,b) sets color of the title text. r, g and b can range from 0 to 65535.
fstyle=fs Sets the font style of the title text. fs is a binary coded number with each bit controlling one aspect of the font style for the tick mark labels as follows:
bit 0: bold.
bit 1: italic.
bit 2: underline.
bit 3: outline (Macintosh only).
bit 4: shadow (Macintosh only).
bit 5: condensed (Macintosh only).
bit 6: extended (Macintosh only).

Fixed bug in RemoveFromGraph that (rarely) caused a bogus "can't remove same wave twice" error.

Fixed a bug that could cause a crash if more than one trace is removed from a graph and more than one of the removed traces use the same X wave.

Pressing the "stop" button in the debugger while debugging a background task now stops the background task.

Stepping the debugger to the end of a string function when called as the value of a PopupMenu control no longer crashes Igor.

Changed the warning that is issued if Igor can not initialize the printer to be displayed in the splash screen on Macintosh (non-Carbon only) or in the status bar on Windows instead of using a dialog.

Fixed a bug that could cause DoIgorMenu "Load Waves", "Load Waves" to crash when a second dialog was displayed.

WINDOWS: Fixed problem when exporting large emfs where fill patterns would be missing if they were outside the bounds defined by the default printer.

MACINTOSH: Fixed a problem in image plots when axes are reversed from the default and the image size on the screen exactly matches the data size.

MACINTOSH: On OS X, fixed a crash that occurred in the Open or Save File dialog. If you hover the mouse over a file or folder name that did not fit in its column, the OS displays a help tag showing the full name. This caused Igor to crash.

MACINTOSH: Fixed a problem that caused layouts to display strange colors under Mac OS X 10.2 in millions of colors mode.

MACINTOSH: On OS X, if you did a Save Experiment As to an unpacked experiment, overwriting an older experiment folder of the same name, Igor saved the wave and miscellaneous files to the wrong place.

Fixed off-by-one bug in FuncFit that caused incorrect X scaling for the Y wave in an all-at-once fit function.

ImageRotate no longer adds 0.5 to round the result when the source wave is single or double-precision floating point. Also, when performing rotations that are multiples of 90 degrees the data is now copied precisely rather than going through interpolation code. A new flag, /S, when used with 90 degree multiple rotations only, causes the coordinate system (i.e., x and y wave scaling) to be rotated with the data.

Previously, pictures in notebooks and help files were drawn transparent. Now they are drawn opaque. This change makes a difference only if the notebook background is other than white. It was done because the transparent drawing was slow and was often not appropriate.

Fixed bug where error bars were the wrong size when used on shrunken axes and when ModifyGraph axisClip=1 was in effect.

Allowed more room in the Error Bars dialog for the wave popup menus.

Fixed a crash triggered by clicking the Go Back button in a help file that you arrived at by clicking a link in the Help Browser.

Fixed endless updating problem with DrawPoly when used with waves when the polygon was in a graph that was displayed in a page layout. This problem was discovered when using the Polar Graph "fill to origin" option.

MACINTOSH: On OS X, added a workaround for what appears to be a Mac OS X 10.2.x bug. The bug causes Igor to crash when you save certain experiments on certain machines. There is no obvious pattern as to which machines are affected but most are not. Igor crashes when it calls the OS X PMSessionMakeOldPrintRecord routine to make a pre-Carbon-compatible page setup record. Igor stores both Carbon and pre-Carbon page setup records in experiments so that they can be opened when running on a pre-Carbon system.

Also, the pre-Carbon page setup record is used when you open a Macintosh experiment on Windows to determine the orientation of the page. If you have a crash when saving and if the "Igor Pro Carbon.crash.log" file contains the word "PMSessionMakeOldPrintRecord", you are probably a victim of this bug. The workaround is to execute the following:

SetIgorOption printing, SavePreCarbonPageSetups=0

You must do this each time you start Igor Pro Carbon. It tells Igor to NOT save the pre-Carbon page setup record, thus avoiding the crash. However, if you take the experiment to a pre-Carbon Macintosh or to Windows, you will get default page setups, so that your paper size and page orientation will be lost.


MACINTOSH (Carbon only): The XLLoadWave XOP now works on Mac OS X.

The XLLoadWave operation now has a /J flag which allows a programmer to determine what worksheets exist in a workbook and what cells are defined in each worksheet.

MACINTOSH (Carbon only): The VDT XOP, used for serial port control, has been removed from the Carbon distribution. It never worked under Carbon and was included by mistake. If you need to use VDT, you will have to use the pre-Carbon Igor.

MACINTOSH (Carbon only): Removed some code that made the Surface Plotter print warning statements to the history under some obscure conditions.

MACINTOSH (Carbon only): Fixed a crash in the Data Browser that occurred when a user tried to rename a data folder with a name that was already in use. The crash took place on dismissing the error dialog.

New GISLoadWave XOP- loads USGS Digital Elevation Model and Digital Line Graph files. Digital Elevation Model files contain matrix data of topography; Digital Line Graph files contain information on things like rivers and lakes, roads, geopolitical boundaries, and more. For more info, see new example experiment, HalfDomeDemo.pxp, in Examples:Feature Demos. A procedure file, GISLoadWaveProcs.ipf, helps handle DLG files.


The Global Fit package has been enhanced to create a separate coefficient wave for each input Y data set. The waves are named "Coef_yname" where "yname" is replaced with the name of each Y data set wave.

Modified Axis Utilities to compile with experiments still in Igor 3.1-mode (Silent 100).

Power Spectral Density.ipf's NormalizedPSD macro was replaced with PowerSpectralDensity, which corrects the PSD scaling. The DC-removal feature of NormalizedPSD is part of PowerSpectralDensity and the new fPowerSpectralDensity function. An exhaustive explanation of how the PSD is computed is in the new PSD Demo experiment.

Added Image Saver.ipf and SaveFloatingPointTIFF.ipf to the Image Processing procedures.Image Saver.ipf adds a "Save Image..." menu item to the Data:Save Waves submenu. The menu item invokes a panel-based Save Image "dialog". SaveFloatingPointTIFF.ipf adds the WMSaveFloatingOr16BitTIFF procedure to save single-precision floating point TIFFs. The obsolete TIFF Saver and TIFF Loader procedures have been removed.

New GISLoadWaveProcs.ipf contains procedures that aid in handling Digital Elevation Model files loaded by the new GISLoadWave XOP. For more info, see new example experiment, HalfDomeDemo.pxp, in Examples:Feature Demos.


The Trace Graph demo experiment (in the Examples:Techniques folder) was modified to work on Windows by the conversion of its sample graphic to PNG.

The new PSD Demo experiment (in the Examples:Analysis folder) contains an exhaustive explanation of how the Power Spectral Density (PSD) is computed, and sample data with which to test the algorithm.

The new HalfDomeDemo (in the Examples:Feature Demos folder) demonstrates the GISLoadWave XOP by loading elevation and hydrography data for a portion of Yosemite National Park and making a map in a graph window.


Update 4.06A

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

Fixed bug in random number generator initialization that caused the same sequence to be generated every time Igor started up. See SetRandomSeed.

All-at-once fitting functions now work properly with a data mask wave and with a weighting wave containing zero values.

FindRoots/P (which finds roots of a polynomial) no longer creates the unneeded W_Roots wave.

MACINTOSH (Carbon only): Fixed problems with text submenus in the Drawing Environment Pop-Up Menu and Graph Pop-up Menus not displaying promptly.

MACINTOSH (Carbon only): Choosing Select All in a table caused a crash. This bug was introduced in version 4.06 and fixed in 4.06A.


Modified the WMMenus procedure file to check our web site for updates to only the currently running version of Igor. Also added the "Delete XY Points" package to the Data menu.

Modified the New Polar Graphs procedure files to add a programmatic interface, fix a bug with Left radius axes orientation, added an angle multiplier for angle axes labels (to print a value proportional to the angle instead of printing the angle).

Modified Axis Utilities to no longer require obsolete "Strings as Lists" include file, added AxisForTrace() and AxisUnitsInGraph().


MACINTOSH: An XOP named NIGPIB_OSX.xop is now shipping in the Carbon Extensions and Support:More Extensions:Data Acquisition folder. This is for use on Mac OS X only. As of this writing, National Instruments supports only the GPIB-ENET/100 hardware on Mac OS X.


Update 4.06

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

Prevented polygon tool from drawing into wrong window and fixed a crash if SetDrawLayer/K is issued while a polygon was active.

Improved action of balloon help when user controls overlap (mainly to fix TabControl).

Changed ListBox when in edit on single click mode to also select the cell.

Changed KillWaves/Z in a user function to not zap a wave reference if the wave it holds was not actually killed. Also changed WaveExists to better detect killed waves.

Creating movies now uses 32 bit color rather than 16 bits (but screen depth may still limit quality).

On Windows only, improved movie error reporting.

Added new immediate play feature to PlaySound using a modification of the existing /A flag. The flag can now take an optional argument:

/A=0 same as no /A
/A=1 same as /A
/A=2 stop playing any current sound before starting this one

In a curve fit with constraints, if the initial guesses were better than the first attempted iteration, the bad iteration was accepted as a good iteration. See Fitting with Constraints.

If the special curve fit variable V_tol is created and set to a value other than the default, and then V_tol is removed, polynomial curve fits now revert to the default value of V_tol.

If an XY wave pair was removed from a graph, CheckDisplayed indicated that the X wave was still displayed in the graph.

A date-time axis now ignores the autoscale from zero setting.

Fixed a crash if Confidence Bands were selected for an all-at-once fit function. It now returns an error message.

Fixed crash when calling SoundInStatus from a function invoked at experiment load time.

Fixed crash that occured when removing more than one residual trace with a single RemoveFromGraph command. The crash was observed with Carbon Igor on Mac OS X; the bug was asymptomatic with Classic Igor on Mac OS 9, and on Windows.

CtrlFIFO operation does sanity checks on FIFO size to prevent crashes in certain cases.

In the Modify Axis dialog, if Multiple Selection dialog is cancelled, the previous axis selection is now restored in the Select Axis menu.

The recreation command for a ColorScale in a graph failed to restore the position properly if the ColorScale was created with /A=RT. This affected the dialog, too.

MACINTOSH (Carbon only): Fixed bug that prevented sprintf with refnum of zero from working with AppleEvents.

MACINTOSH: Fixed potential crash (especially on OS X) when user hook functions kill windows. Related topic: Functions (User-Defined Hook Functions).

MACINTOSH: Fixed potential crash on OS X when editing a procedure file that added a submenu which defined keyboard equivalents. Related topic: User-Defined Menus.

MACINTOSH: Fixed a problem with SaveNotebook/S=1 in the Carbon version only. If the notebook was never saved, it was displaying a dialog even if a path and file name was specified.

In the dialog that the LoadWave operation presents for you to enter wave names, if you press the shift key while clicking the Skip Column button, it will skip all columns other than the selected column.

Fixed a problem relating to display of fractional seconds in tables with a small number of digits.

Fixed crash that occurred when calling GetMacroList just after a procedure window is killed.

MACINTOSH: Fixed fairly rare crash involving graph drawing. If you have been told to use SetIgorOption ImageDraw,allowFastEraseRect=0, you should no longer need this work-around now.

MACINTOSH: Fixed a problem in the Carbon version only having to do with saving unpacked experiments containing data folders containing waves. If, after the first save of the experiment, you did another save without closing and opening the experiment, Igor sometimes wrote the experiment recreation file using erroneous wave file names, resulting in errors when you next opened the experiment. Related topic: Saving Experiments.

If you rename a data folder and then saved as an unpacked experiment, Igor did not write the waves in the renamed data folder to the new corresponding disk folder. This has been corrected. Note however that renaming a data folder in an unpacked experiment creates an orphan disk folder which Igor will not delete. You can delete it manually if you wish.

Renaming a data folder will now mark the experiment as modified.

MACINTOSH: Fixed copy and cut in SetVariable controls on OS X.

Fixed the scaling of center Latitude in the Project operation from radians to degrees.

MACINTOSH: Fixed bug in the Carbon version that prevented cmd-option-M (display next procedure window) and shift-cmd-option-M (hide current and display next procedure window) from working.

WINDOWS: Fixed a bug in ImageSave that affected saving TIFF files in depth other than 16 bits/pixel.

MACINTOSH: Igor Pro Carbon will now detect old experiment files (saved with Igor Pro 3.02 or earlier) that contain multiple pictures and will report an error rather than opening them. These files can not be opened with Igor Pro Carbon. You must first open them with pre-Carbon Igor Pro to fix a problem in the way the file was written. For details, see This experiment can not be loaded in Carbon Igor because of duplicate resources.


Modified the Waves Average procedure file to handle waves of different lengths and waves containing NaNs.

Enhanced the Global Fit procedure to allow the selection of a mask wave for each data set. This allows fitting a subset of points in each data set.

Fixed a bug in Global Fit that caused the wrong X wave to be selected if two different waves with the same name were displayed in a graph and the All From Target button is clicked.

Fixed bug in Data Mask for Fit procedure file that prevented it from working properly with liberally-named graph traces.

Fixed bugs in Percentile and Box Plot procedure file: outliers can now be displayed on a category box plot; a column in the raw data for a box plot will no longer cause an infinite loop; if the Modify Box Plot panel is already in existence, selecting Modify Box Plot in the Graph menu will bring the panel to the front.

ControlBarManagerProcs now makes the divider line extend the full width of a graph's control bar on Windows OS, too.

ProcedureBrowser uses a Source checkbox rather than a button. The result is that the source code notebook auto-updates when a procedure is selected in the list.

SaveRestoreWindowCoords auto-compensates for a panel-positioning problem on Windows.

AxisSlider now makes the added slider extend the full width of a graph's control bar on Windows OS, too.

Drag Spline and Make Sample Data procedure files have been updated to use the ControlBarManagerProcs procedures to handle conflicts in a graph's control bar.

Image Particle Panel.ipf has been changed to remove the cross-cursor when the overlay is removed and now correctly identify the last particle using the cross-cursor.

Power Spectral Density.ipf has a new NormalizedPSD macro which replaces the old PSD macro (now demoted to a Proc which you can still call it from your existing code). The output of NormalizedPSD is normalized so that an input signal of A*cos(2*pi*f*t) results in an output value of A*A in the bin associated with frequency f. NormalizedPSD can optionally remove the DC component. Also, a bug in handling the Nyquist frequency was fixed: the highest frequency (Nyquist) component was twice as big as it should have been. Since it is usually nearly zero anyway, the effect of the bug was minimal.


Modified "Global Fit Demo.pxp" to add notes about the new data set masking capability (see Procedures, above).

Added "Audio Snarfer.pxp" experiment (Movies & Audio:Sound Input) which may be useful for long term recording of audio.

Added "Cursors Move Together" demo experiment in the Techniques folder. This modification of the Cross Hair Demo preserves an X or X and Y offset between the two cursors, even when one is manually dragged to a new location.

Added Extensible Tab Panel Demo in the Examples:Programming folder. This shows a technique for dynamically adding tabs to a tabbed control panel.


The neural net XOP "NeuralNetworker" has been updated. New features added to the training and running operations. See the new help file for more details. Help topic: NeuralNetworker XOP.

Updated the HDF Loader XOP and ported it to Carbon. Fixed bugs involving loading of images and palettes. Revised HDF Loader Help file. The Macintosh HDF Loader is still based on HDF version 3.3 libraries, not 4.0. If you try to load 4.0 files, (especially SDS), it may crash. The Windows version is based on HDF 4 libraries.

Fixed Macintosh-only Find Peak XOP bugs that occasionally crash Igor on Mac OS X.

Updated the Gizmo help files.

Technical Notes

Updated Igor Pro Tech Notes:TN020 Peak Measurement:TN020 Procedures.ipf to fix problems with manual peak identification using cursors.


Update 4.05A

Igor Application

To install the "Carbon" version of Igor, you will need your serial number and activation key.

Fixed a bug in Curve Fit dialog that prevented XFUNC all-at-once fitting functions from appearing in the Function menu.

Fixed a bug in the Curve Fit dialog that could cause a crash if you try to edit a fit function using the Edit Fit Function dialog at a time when procedures cannot be compiled. You still can't edit them, but at least it doesn't crash!

(Windows only) Fixed a bug (introduced in 4.05) with NewPanel when /W is used (which is almost always): the panel size was being limited to too small a value and the panel was not displayed in the right location if it was close to the right or bottom of the MDI frame. The problem was worse if Large Fonts were used.

(Windows only) Fixed a bug that could cause Igor to close Igor Procedures files by mistake if you opened an experiment that used an XOP that added a window to Igor (e.g., VDT).


Remove Tags, when removing only offscreen tags, now also removes tags whose y attachment value is above or below the vertical (usually left) axis range.

Revised GraphMagnifier.ipf to avoid controls already present in a graph's control bar.

Revised AxisSlider.ipf to more intelligently restore the control bar in a graph when the axis slider is removed.

Added ControlBarManagerProcs.ipf to WaveMetrics Procedures:Utilities. Provides some functions to help a procedure that adds controls to a graph be a good controlbar citizen.


Update 4.05

Igor 4.05 was the first version of Igor that runs "natively" on Mac OS X. Owners of Igor 4.0 or later can update for free to this "Carbon" version of Igor by using the universal or standalone updaters. You will need your serial number and activation key to install Igor Pro Carbon.

Igor Application

Added a new operation, MarkPerfTestTime. This is an aid for programmers who wish find out where their programs are spending the most time. This operation is used in conjunction with SetIgorOption debugTimer. Instructions for use can be found in a new example experiment, PerformanceTesting.pxp.

Added code to suppress the wait cursor when a graph is updating until the update has taken a half second or more. This is to prevent cursor filcker when graphs are updating due to live data. User can change the delay using SetIgorOption supressWaitCursor=val where val is the delay in ticks (60 ticks to the second). This lasts only for the life of the Igor session.

Sleep/C=-1 will not change the cursor in any way; all other incantations will.

Changed Sort's sorting method to treat all NaN patterns the same. Previously, negative NaNs would sort to the opposite end as positive NaNs.

Changed Igor's parser to treat names starting with a single quote but not ending that way as just the single quote char itself. This causes such situations to be properly treated as an error.

Fixed problem using user tick labels on waterfall plot. See NewWaterfall.

New feature: ModifyGraph can now change arrow markers to display as standard meterological wind barbs by adding a column to the arrow marker wave and giving it a column label of windBarb. Values are integers from 0 to 40 representing wind speeds up to 4 flags. Use positive integers for clockwise barbs and negative for the reverse. Use NaN to suppress the drawing. Example:

make/O/N=50 jack= floor(x/10),jackx= mod(x,10)
display jack vs jackx
make/O/N=(50,3) jackbarb
jackbarb[][0]= 40 // length of stem
jackbarb[][1]= 45*pi/180 // angle (45deg)
jackbarb[][2]= p // wind speed code
SetDimLabel 1,2,windBarb,jackbarb
ModifyGraph mode=3,arrowMarker(jack)={jackbarb,1,10,0.5,0}
ModifyGraph margin(top)=62,margin(right)=84

Fixed potential crashing bug when KillVariables/A is called twice.

Fixed recreation macro involving mirror axes and image plots and another involving colors in SetVariable controls.

Fixed problem in SetVariable where height did not autoscale if bodyWidth was in use.

Fixed another SetVariable problem that crashed Igor (usually on Windows) if the SetVariable had no value assigned, KillStrings is called for a string in the current data folder, and the SetVariable control is updated.

Fixed recreation macro involving mirror axes and image plots and another involving colors in SetVariable controls.

Fixed bugs in ListBox introduced when zero rows changed to not be an error.

Double-clicking axes, annotations, table columns, layout objects now honors the corresponding SetIgorMenuMode setting. For example, if Modify Annotations... is disabled with SetIgorMenuMode, double-clicking an annotation won't open the dialog either.

FindPeak's /Q flag now allows FindPeak to proceed without generating an error for a bad or too-small input range. V_Flag now returns an Igor error code if something went wrong rather than just setting V_Flag to 1.

FindLevel with /R set to search backwards while smoothing with /B was smoothing the wrong values using the new (Igor 4.02+) code. This also affected FindLevels, EdgeStats, and PulseStats.

Made XWaveName work with category plots.

Fixed rare and hard-to-explain problem involving stale WAVE reference variables.

Removed an old limit on the size of the history file in unpacked experiments. It was limited to 1,000,000 characters.

Fixed a problem whereby, if you opened an experiment other than through the File->Open Experiment menu item (e.g., by double-clicking or via Execute/P LOADFILE), and if you said you did not want to save the current experiment, and if you had modified an auxiliary procedure file, Igor would fail to ask if you wanted to save the auxiliary file.

Execute/P now accepts the /Q (quiet) and /Z (no error dialog) flags.

Fixed a bug in LoadWave/B. Specifying an explicit field width over multiple columns (e.g., /B="C=3,W=5;") did not work.

WaveStats wasn't setting V_maxloc and V_minloc properly for unsigned integer types when the first wave value was the min or max.

Fixed some problems with the debugger: clicking the debugger stop button during a curve fit without the progress dialog no longer crashes, the debugger stack list no longer omits the function that called the function that has the FuncFit call in it, attempting to edit a string longer than 253 characters no longer crashes on Windows, and breakpoints stranded beyond the last line can now be clicked off.

A graph with a tag containing one of the other dynamic escape codes such as \{pcsr(A,''Graph0'')} would fail in window recreation macros because the cursors weren't added to the graph until a later statement. Cursor statements have been moved to before the annotation statement(s).

Attempting a Tag command while a layout is the top window no longer crashes Igor.

A window hook function (see SetWindow) that doesn't explicitly return a value is presumed to return 0 instead of NaN. The hook function also receives a new modified event.

Also fixed a crash that happened if you kill the window and then create another window like it during the kill event for the window you killed.

Fixed a crash in FuncFit that occurred if the procedure window containing your fit function is altered between the time FuncFit starts and when it finishes. This can happen if you use Ctrl-Enter to execute a FuncFit command in a procedure window.

Fixed crash in Modify Axis dialog brought on by the following sequence: select Live Update mode; Select Multiple Axes and select all or some subset; de-select Live Update Mode; crash.

Fixed some minor cosmetic bugs in the Modify Axis dialog.

Fixed a bug that could cause a crash if you cut or copied and pasted an annotation in a page layout.

Fixed a crash when using wfprintf from a function and you supply a reference to a non-existent wave.

Igor no longer stops responding when a menu-invoked macro uses ExecuteScriptText to send an AppleEvent or DDE event back to Igor.

SetIgorMenuMode can now enable or disable items in the Graph menu even if the Graph menu is not displayed in the menu bar at the time.

ImageAnalyzeParticles now creates boundary waves for one-pixel-wide particles that are parallel to the y-axis.

ImageLineProfile now supports wave scaling.

ImageGenerateROIMask supports wave scaling with a new keyword scalingWave.

IgorInfo(3) returns a collection of more detailed information about the operating system, localization information, and the actual file version of the Igor executable. The keywords are "OS", "OSVERSION", "LOCALE", and "IgorFILEVERSION":


Information following keyword


Description of operating system.

On Macintosh the OS value is "Macintosh Classic", "Macintosh Carbon", or "Macintosh OS X".

On Windows, it is something like "Windows 95 OSR2", "Windows 98 SE", "Windows Me", "Windows NT Personal (Build 1234)", "Windows 2000 (Build 1234)", "Windows XP (Build 1234)". Of course, the actual build number and format of the text will vary with the operating system.


Operating system number.

On Macintosh, this is something like "9.1.0" or "10.1.2".

On Windows, this is something like "4.10.1998".


Country for which this version of Igor is localized. "US" for most versions of Igor, "Japan" for the Japanese versions of Igor.


The actual version number of the Igor application file expressed as a floating point number. Igor 4.05, for example, returns "4.05". Igor 4.05A will return "4.051" on Windows but "4.06" on Macintosh (because the actual Macintosh file version will be 4.06b1 and the beta part is trimmed off).

New (preliminary) feature: GetRTStackInfo(0) returns a semicolon-separated list of the names of the macros and functions currently in execution, with the name of currently running macro or function last in the list. Absolutely useless on the command line.

MACINTOSH: FindPeak, Smooth, UnWrap (and some other analysis routines I don't remember) were made faster by not always moving the entire wave to the best part of the memory partition. The speed improvement can be startling for large waves.

WINDOWS: Fixed hang with minimized windows.

WINDOWS: Using MoveWindow to position a panel at the top of Igor's frame resulted in the panel being positioned many pixels lower than requested. The error was larger when window title bars were made larger in the Display Properties control panel's Appearance tab. Fixed a similar bug in AutoPositionWindow.

WINDOWS: added ability to specify a literal file name extension in the /T flag of the Open operation. That is, Open/T=".dat" myref will cause the resulting Open File dialog to show all files with file name extension ".dat". NOTE that the extension MUST have three characters.

WINDOWS: Put in a workaround for problem of ugly text with Windows 2000/XP ClearType feature.

WINDOWS: The limit of 31 items in user-defined menus is handled a tiny bit better: rather than setting the menu item to a non-functional "More..." it is set to "_too many items_" and is disabled.

WINDOWS: Fixed a bug that caused text areas in dialogs to be invisible if the Igor frame window was not maximized.

Fixed a bug in ImageLoad which could cause errors when reading a packedbits compressed TIFF file.

WINDOWS: Fixed memory leak if a minimized window was the active window.


Added a beta version of Gizmo, an OpenGL visualization tool. This is available under Windows and the Carbon version of Macintosh Igor but is not available for classic Macintosh Igor. Example experiments were also added.

The JCAMPLoadWave XOP has been revised to properly handle files with multiple data sets.

Fixed a bug in the Igor Graphical Slicer that affected the reading of values using the eyedrop tool.

Fixed a minor problem in the Data Browser XOP's Browse Experiment feature. If you clicked a wave which had a dependency formula while the info or plot panes was displayed, a harmless error message was displayed in the history area.

Fixed a bug in the Data Browser's Browse Expt feature which caused it to fail if you tried to browse a folder that contained an alias/shortcut to a data file.

Fixed a bug in the Igor Surface Plotter cloud mode that under some rotations flipped x and y axes.

MACINTOSH: the SndLoadWave XOP now displays files with types WAVE, MPEG, and MPG3 in the open file dialog.

WINDOWS: Fixed a bug in the Data Browser that would crash on Windows on using the Find dialog. Also fixed a bug on Windows where a line in a wave note (after a CR) was displayed in bold face.

WINDOWS: the LoadWAVFile XOP no longer crashes when using /R to load a subset of a stereo sound file.

MACINTOSH: Fixed a Macintosh-only bug in MLLoadWave that caused an error if you tried to skip variables or strings when loading a Matlab 4 file without having the Mathworks libraries installed.


A new WaveMetrics procedure file, AxisSlider.ipf, makes it easy to scroll through long records. This procedure can be easily accessed via the Packages item in the Graph menu.

A new WaveMetrics procedure file, PerformanceTestReport.ipf, provides support for the new performance testing operation, MarkPerfTestTime. For details, see comments in the procedure file and the new example experiment, PerformanceTesting.pxp.

Sonogram.ipf implements the Gabor spectrogram (aka the "Gaussian Weighted Wigner Transform").

TransformAxis.ipf has been revised again to improve the handling of transforms with high curvature at the ends (specifically aimed at the probability transform). Also significant changes were made to the control panels to improve the ease of use.

A new WaveMetrics procedure file, SaveTable.ipf, allows you to save a table, including its data and formatting, to an Igor Text file. You can then load the table and its data into another experiment. For details, see comments in the procedure file.

Modified ImageLineProfile.ipf to account for a factor of 2 in the width of the calculated profile when using the Line Profile panel.


A folder of example experiments for the new Gizmo XOP was added in the Visualization folder.

New example experiment, PerformanceTesting.pxp, provides documentation for MarkPerfTestTime and the PerformanceTestReport.ipf procedure file.

The Sonogram Demo implements the Gabor spectrogram.


Update 4.04

Igor Application

The SetVariable operation can now attach to a point in a wave as an alternative to a variable. The syntax is the same but with a wave name in place of a variable name and with the point number specified using standard bracket notation with either a numeric point number or a row label, e.g., value=awave[4] or value=awave[%alabel]

Fixed crash when an image with number of rows between 8192 and 32768 was displayed in a graph.

Secs2Date has new -1 format code which results in a string that is independent of the operating system and the Date & Time control panel.

Added new activate keyword to the SetVariable operation.

Adjusted position of ListBox's title divider line by 1 pixel and, for Windows only, fixed incorrect coloring of same.

The GroupBox's interior is correctly updated when drawn outside of the graph's control bar area.

The ControlInfo operation accepts a new kwSelectedControl keyword that sets S_Value to the name of the selected (active) control.

Added new SetMarquee operation.

GetMarquee's V_marquee global has a new bit flag that causes S_marqueeWin to be updated when the marquee is created or killed.

Fixed a bug in the Macintosh version of the JPEGQ method of ImageTransform. If the version of QuickTime on your machine did not support this feature, it could cause a crash.

(Windows-only) Fixed a problem that caused Igor to take a very long time to open help and procedure files that were already open for writing. This was evident only if you launched more than one copy of Igor or if you shared help or procedure files over a network. The problem was introduced in 4.03 which included a workaround for another problem. The other problem was that some users got the error message "File Already Open" when saving an experiment to a network volume. We suspect that this is caused by Norton anti-virus software. The workaround added in 4.03 is still in 4.04, but it is smarter so as not to interfere with normal operations.

(Windows-only) Added a workaround for the problem of Symbol font not rotating.

(Windows-only) A marqueed graphic copied from a layout is now drawn only within its bounds when it is pasted into a drawing layer.

Fixed bug in Curve Fit dialog: Duplicate commands failed to properly quote liberal source wave names. See Liberal Object Names.

Fixed mouseup, mousedown, mousemoved events in hook function for PageLayouts, and replaced the copy event with a more general menu event (see SetWindow).

Fixed a bug that caused Igor to report an error when opening an experiment containing a hidden notebook to which a hook function had been attached using the SetWindow operation. In some cases, Igor would attach the function to a window other than the hidden notebook. The bug fix is in the code that saves the experiment, so existing experiments with this rare problem will have to be fixed manually by opening the experiment, reassigning the hook to the notebook(s), and saving the experiment.

Fixed a bug (or missing feature): SetIgorMenuMode and DoIgorMenu would not compile string expressions or string constants for the various parameters.

Fixed a bug in ImageLoad where the operation printed information about unsupported TIFF tags in the history despite the /Q flag.

Added to ImageLoad support for uncompressed 48-bit TIFF images.

Fixed AppendLayoutObject. It was incorrectly accepting a null object ($"") which could lead to a crash.

Added keyword scalingWave to ImageBoundaryToMask in order to support wave scaling.

Fixed a potential crash in LoadWave/F if the number of columns specified in the /B flag exceeded the number of columns specified in the /F flag.

Added additional bits to V_FitError to report out of memory and fit function returned NaN or INF error conditions from a curve fit.

Fixed bug in Curve Fit dialog that could prevent using the Graph Now button with a built-in fit function.

ImageRemoveBackground/O now retains original wave scaling.

Fixed a bug that affected the ImageLoad operation on the PC.


(Macintosh only) the SndLoadWave XOP has can load WAVE, MP3, and movie audio tracks.


Added the new MD Root Finder Demo experiment, promised in the Using Igor manual in the Analysis chapter, Finding Function Roots section, subsection Roots of a System of Multidimensional Nonlinear Functions (in the Examples:Analysis folder).

Added new Sonogram Demo example experiment (in the Movies & Audio folder). It displays a sonogram of already-acquired (non-realtime) data.

Changed Web Page Demo to use a new user account when doing FTP upload.


ProcedureBrowser.ipf now has a Copy Template button. Including <ProcedureBrowser> will create a Procedure Browser menu item in the Misc menu.

New procedure file: DrawEllipseOnGraph.ipf. Allows you to draw and edit ellipses with axes that are other than horizontal or vertical.

New procedure file: Sonogram.ipf. It provides a panel to select a time-series wave to compute the sonogram of. See the new Sonogram Demo experiment for documenation.

Revised WMMenus.ipf to add the Sonogram package to the Windows:New:Packages menu.

Fixed a bug in Image Line Profile procedure that created multiple nested data folders when dragging the profile line across the image.

Revised Transform Axis package to fix bugs and improve the ticking algorithm.

Revised Decimation.ipf to correctly X-scale the decimated result wave.

Technical Notes

Added a guest technical note PTN006 "Using Igor's Particle Analysis Feature for turning scanned data into Igor Waves" by Clemens Kühn.


Update 4.03

Igor Application

Fixed a one pixel offset bug in ImageGenerateROIMask.

Fixed a bug in AppendXYZContour. Now any triplets with X and Y infinite values are ignored.

Fixed a bug in BinarySearch where it returned the wrong index when the data was in decreasing order.

Added new features to the stopMSTimer(timer) function. If timer is -2, return microseconds since system startup. If timer is -1, returns frequency of timebase clock (which determines the resolution). Note: On Macintosh, the first call to stopMSTimer after Igor is started will take an extra long time (0.1sec) in order to calibrate the clock. This can also be done by calling stopMSTimer with a value of -1. Also, these changes to the microsecond timer allow it to work when running in emulation under MacOS X.

Increased maximum size of a wave from 134 million points to as much as 2147 million depending on data type. Data size is limited to 2.147GBytes rather than a strict limit on the number of points.

Increased limits for marker size and thickness by a factor of 10.

Fixed bug where opaque markers would not appear correctly in legends.

Added new /R flag to IFFT to force real result when power-of-2 size would automatically give complex result.

SavePICT has new /Z flag (proceed on error) and V_Flag output variable (0 or error code).

SetWindow updated to describe new copy event and hookevent bit flags.

Added the GetScrapText function and PutScrapText operation.

New DoIgorMenu operation invokes Igor's menu items. Use wisely.

(Windows only) Fixed problem with colorscales in layouts when using EPSF export.

Fixed readout of free cursors when using log axes.

Fixed crash on Windows reloading with minimized waterfall plot.

Fixed rare crash involving AppendToGraph/Q and image plot.

Fixed a problem with Histogram/B=1. When the data being histogrammed wasn't floating point, the automatic bin calculation failed to include values equal to the maximum in the last bin.

Eliminated New Fit Function dialog insistence on having a space before and after the equals sign in the "f(x) =" in the fit expression.

Fixed a bug in Curve Fit dialog: if an XFUNC was selected as the fitting function, the X wave wasn't included in the generated command.

Fixed a bug in IntegrateODE that could result in the message "UpdtDisplay: recursion attempted" being printed in the history many times if IntegrateODE was used in a curve fitting function.

Added tests to all matrix operations that would reject input waves that contain either NaNs or INFs.

Fixed a problem in the Japanese version of Igor only which prevented the user from changing the current drawing layer by using the drawing layer popup menu.

Fixed a bug in the sscanf operation that resulted in incorrect output if you used a maximum field width with the e, f, or g conversion types (e.g., "%5f").

The documentation for sscanf said that it does not tolerate an 'l' after the '%' character, but in reality, it did tolerate "%le", "%lf", and "%lg". It no longer tolerates the 'l'.

Fixed a rare bug in the Curve Fitting dialog in which an empty assignment to the T_Constraint wave could be generated under certain circumstances.

Fixed AxisInfo so that the font(x) keyword in the RECREATION string quotes the name of the font. This is required to pass a font name with spaces to the Execute command as documented in the Igor Reference for the AxisInfo function. NOTE: if your procedures parse this string, they will now have to look for quotes!

Fixed crash in New Fit Function dialog if the fit expression was longer than 400 characters.

It is now impossible to enter illegal dimension labels in a table.

FindLevel, FindLevels, EdgeStats, and PulseStats now ignore any (possibly smoothed) NaN value.


CmplxToMagPhase.ipf's FFTCmplxToMagPhase correctly scales FFT results, has a non-FFT version named CmplxToMagPhase.

Fixed a problem in New Polar Graphs.ipf that occurred after a user renamed a polar graph window and then clicked "New Polar Graph".

Added the new Bivariate Histogram 2.ipf procedure file. It calculates a bivariate histogram with equally-space bins in X and Y, log-spaced bins, or bins with arbitrary spacing specified by a wave.


Bug fix for Wavelet XOP (PC version only) where dialog would generate garbage for the number of coefficients of Coifman wavelets.

Technical Notes

PTN001 has been updated to note that the technique described is obsolete, since it can be done much more easily using all-at-once fit functions.


Update 4.02A

Igor Application

Fixed a problem that caused large PNG graphics in notebooks to be corrupted in certain circumstances. The corruption occurred if you opened a notebook on a platform (Macintosh or Windows) other than the platform on which it was created and if the notebook contained PNG graphics larger than 51200 bytes and you saved the notebook on the new platform.

Differentiate and Integrate could crash on either Mac or PC if fewer than two points were in the wave. Igor is now protects itself against this by returning an error for waves with no points and by handling waves with one point correctly.

ControlInfo wasn't computing V_Top correctly: it was returning the (negative) offset from the bottom of the control bar rather than the positive offset from the top of the control area.

(Windows-only) Fixed a bug that was introduced in 4.02. It caused an error if you tried to create symbolic paths that point to the root directory (e.g., "C:").

Igor Help Files

Fixed the Windows version of the Image Processing help file. It contained corrupted PNG graphics.


Append Calibrator.ipf displays a panel that creates calibrators (scale bars), instead of the outdated missing parameter dialog.

Update 4.02

Igor Application

Point-scaled traces on log axes with an x offset applied were, on rare occasions, offset by the wrong amount.

Fixed bugs in several image processing routines (ImageLineProfile, ImageAnalyzeParticles, SphericalTriangulate, and ImageRotate) which could result in wrong outputs or even a crash.

(Windows only) Fixed bug where the cursor info box in a graph that also had a control panel area would not function properly until the graph was resized.

FindLevel, FindLevels, and PulseStats no longer use cumulative sliding averages, which makes them more accurate, but a bit slower. To use the algorithm used in earlier versions of Igor, assign Variable/G root:V_UseOldFindLevel=1.

(Windows only) Fixed bug where markers would be displaced in EPS export of a page layout containing a legend.

Fixed bug where printf "%08X\r", 0xffff0000 would give wrong results in a function.

Smooth/B inf waveName crashed Igor, now num is limited to about 67 million and doesn't crash.

FindPeak has new /I flag useful for finding impulse peaks.

ImageStats/R now returns correct values for V_sdev, V_adev, and V_rms.

FunctionList("*",";","KIND:1") now returns all built-in function names again, not just the first 25.

(Windows only) Fixed bug: 10^NaN returned 1.0; cmplx(1,0)^NaN returned (1,0).

After SetRandomSeed, gnoise() was returning one of two cached values. Igor now clears the cached value when SetRandomSeed is called so that you get the same value every time after SetRandomSeed is called with a particular value.

Fixed memory leak that occurred when doing curve fits with constraints.

Increased the number of digits printed in graph recreation macros for the crossing position of a free axis attached to another axis. This was done to accommodate the case where an axis is attached to a date/time axis.

Added an option for curve fitting: set bit 3 (value of 8) in V_fitOptions to get a matrix wave M_iterates. This matrix contains the values of the fit coefficients at each iteration. The matrix has a row for each iteration and a column for each fit coefficient. The last column contains the value of chi square for each iteration.

Added new /E flag to Redimension:

/E=e            e=0 for no special action (default),
                e=1 to force reshape without converting
                or moving data,
                e=2 to also perform endian swap.

(See FBinRead for a discussion of endian byte ordering.)

Added new keywords for PlayMovie Action:

gotoBeginning   moves movie to beginning
gotoEnd         moves movie to end
step=s          moves movie by s frames (0 is same as 1, neg
                goes backwards)
getTime         reads current movie time into variable V_Value
                (in seconds)
extract=e       with optional e parameter, extracts e frames
                in to a single mult-frame wave named M_MovieChunk.
                This will have 3 planes for R, G & B and will
                have e chunks.

Operations are performed in the following order:

kill, stop, gotoBeginning, gotoEnd, frame, step, getTime, extract, start.
kill overrides all others

Example, determine number of frames in a simple movie:

PlayMovieAction stop,gotoEnd,getTime
Variable tend= V_Value
PlayMovieAction step=-1,getTime
Print "frames= ",tend/(tend-V_value)
PlayMovieAction kill

Fixed bug in image display for multi-plane RGB images.

The FTPDownload operation sets S_FileName to the full path of the downloaded file. This is especially useful when the /I (interactive) flag is used.

(Windows-only) Fixed a problem that caused Igor to fail to recognize when you changed a page layout to landscape orientation when using the HP DeskJet 840 printer driver.

Fixed bug in New Fit Function dialog: if an independent variable was named "w", incorrect function code was generated and a hang resulted when the dialog tried to parse the incorrect code.

(Windows-only) Fixed bug that caused curve fitting on Windows to ignore NaN's in the weighting wave. That behavior is not correct- NaN's in the weighting wave probably result from a bad calculation, and you should investigate the cause. A case in point is weighting proportional to the square root of the data values- a NaN will result if the data are negative. Square root weighting is only appropriate if the values are always positive.

Multiple Submenu definitions can now add items to a single submenu. Previously, each Submenu definition created a new submenu, even if this resulted in two submenus with the same name in the same parent menu. See User-defined Menus.

Fixed bug in Page Layout menu. It allowed you to move the front object to the front or the back object to the back, both of which should not have been allowed. If you tried this, it usually crashed.

(Windows-only) the most recently defined ruler was being omitted from the Notebook Ruler popup menu.

(Windows-only) the Object Status dialog would crash after displaying an object whose name was longer than 28 characters.

(Windows-only) ImageTransform cmap2rgb now correctly maps grayscale values that exceed the color index wave's X scaling range to the correct color.

The Debugger no longer prints "string too long" over and over into the history window.

Boy, is it a good thing no one tried to use an XFUNC with FindRoots, Optimize, or IntegrateODE! It is now possible...


Global Fit package now supports all-at-once fitting functions, has a checkbox to request a covariance matrix, and lists XFUNCs in the fit function menu.

New FITS Loader.ipf file. Now supports multi-row BINTABLE format. Not compatible with previous versions of the Igor application.

New WaitForFileProcs.ipf procedure file. These procedures are useful for synchronizing with another application. If the other application writes a file as part of its processing, you can make sure that Igor waits for the other application using these procedures.

See the procedure file for details on usage.

The WMMenus.ipf procedure file now adds a "Check Latest Igor Version" menu item to the Help menu. It contacts the WaveMetrics web site where information about Igor versions is published.

Scatter Plot Matrix enhanced:

  1. Marker selector panel selects a marker, doesn't just show you the marker numbers.
  2. Options to plot with no ticks or tick labels.
  3. Option to make colored boxes behind each little plot.
  4. Fixed bug- the current data folder was not restored after making a scatter plot matrix.

New procedure file Rational.ipf. The function calculates two integers whose ratio approximates the input parameter within the specified error range.

Revised Global Fit.ipf procedure file. Global fits now support weighting and constraints. See the Global Fit Demo experiment for details.

Revised New Polar Graphs.ipf procedure file. Previously it would quietly fail if the wave names were too long or if the data folder of the input data was too deeply nested. The new procedure works with longer names and warns if they are too long.


Bug fix for the Macintosh Igor Surface Plotter XOP: the bug would cause a crash on some computers when specifying constant rotation from the rotation dialog.

Changed a random number generator for the gammanoise() function in StatFuncs XOP.

(Macintosh-only) Changed the default wave type created by the SndLoadWave XOP from single-precision floating point to 8-bit or 16-bit, appropriate to the sound format.


Update 4.01A

Igor Application

The 4.01A update contains version Igor Pro 4.02b1 on the Macintosh or Igor Pro version on Windows. The About Igor Pro dialog shows "4.01A".

Fixed crash in New Fit Function dialog if code is entered before the function name is assigned.

Fixed debugger crash that happened when stepping very rapidly out of a macro.

(Windows-only) Fixed cause of Igor crashing when closing a window that has a hook function.

(Macintosh-only) The Annotation dialog no longer sets the focus to the Name or Rename field all the time.

Fixed bug that caused inaccurate display of axis range in the Modify Axis dialog, Range tab when manual range was set for a date/time axis.

Fixed New Fit Function dialog crash if code was entered before the function name.

Changed error message returned when you forget the parentheses when using a flag like /N=(expression) in functions. It is now more explanatory, and the Explain Error button in the error alert is available.

Fixed assorted problems in ImageSave on Windows having to do with how it dealt with symbolic paths and file names.

ImageSave can save 16-bit TIFFs without having QuickTime installed.

Added /I (interactive) flag to ImageSave for consistency with the Save operation.

Allowed "as <filename>" syntax in ImageSave for consistency with the Save operation

(Windows-only) The MoveWindow operation takes a new /F flag which has no effect on Macintosh, but on Windows moves the Igor window Äúframe‚Äù (the entire application‚Äôs window). Also, when the left, top, right, bottom coordinates are 2,2,2,2 (points), the designated window is maximized. On the Macintosh maximizing a window has no effect.

Fixed possible crash in a function when ModifyGraph height={perUnit, hh, axisname} is used and axisname does not exist on the graph.

The ^ (exponentiation) operator now works with complex numbers.

Added /B flag to ImageAnalyzeParticles. The flag erases a frame (1-pixel wide) around the image before processing. It does not affect the source wave.

Fixed a memory leak in Curve Fit that affected only polynomial fits. Especially on Macintosh, caused a severe slow-down if you do hundreds of fits in a row.

A tag dragged far away from an off-screen attachment point now stays where it was dragged when the experiment is reopened. Consequently, Tag /X and /Y ranges have been extended to +/- 32000 (%).

Igor Help Files

Change Igor Reference help file entry for the FindRoots operation to reflect the actual syntax of the operation.


Update 4.01

Igor Application

The ModifyGraph mantick keyword for a date/time axis now honors the digitsrt setting. See ModifyGraph for Axes for details.

Date/Time axes now support fractional seconds in both automatic and computed manual modes.

Modify Axis Dialog: handling of the input format menus in the Auto/Man Ticks tab, Computed Manual Ticks area for date/time axes, and in the Axis Range tab, Manual Scaling area has been improved and bug-fixed.

The Modify Axis dialog, Auto/Man Ticks tab, Computed Manual Ticks for a date/time axis now allows entry of a fractional number for the tick increment.

Fixed bug in the Optimize operation. When finding a maximum of a multidimensional function, V_max was the negative of the appropriate value.

(Windows-only) The ImageLoad operation no longer passes off loading of TIFFs to QuickTime if the file is readonly.


Data Browser XOP now allows setting real and complex variables to NaN.


New cubicQuartic.ipf procedure file for solving cubic and quartic equations.


Update 4.0A

Igor Installer

(Windows-only). The .pxt extension is now registered. The CD now locates an installed Igor 4 and won't try to install again. The registry entries under the key <HKEY_LOCAL_MACHINE> \Software\Microsoft\Windows\CurrentVersion\App Paths\Igor.exe are no longer missing.

Igor Application

The 4.0A update contains version Igor Pro 4.01b1 on the Macintosh or Igor Pro version on Windows.

MatrixMultiply now has a new /F flag to force the calculation to use floating point instead of double precision values. This flag was added to reduce memory requirements for large matrix multiplication.

Fixed crash when a user checkbox kills its host window.

Fixed crash in compiled Igor code if curve fit constraint wave was not a text wave.

Fixed rare crash involving confidence bands in error bar mode.

Made SetIgorMenuMode re-enable all menu items when a new experiment is opened. Added some new version 4 menu items that had been forgotten.

The Example Experiments menu item was moved to before the Quit (Mac) or Exit (Windows) menu item.

IntegrateODE/Q wasn't parsed correctly; required /Q=1, now /Q alone is accepted.

Fixed CurveFit bug: if first X value in a data set was NaN, the autodestination wave X scaling was set to NaN.

Use of \Znn in a ColorScale's user tick label or axis label no longer prints too small.

Tick marks no longer draw beyond the ends of the color box.

The debugger no longer stops at breakpoints if the stop button has been pushed.

The debugger remembers its position even if Igor was opened and closed without using the debugger.

(Windows-only) The debugger no longer scrolls the source text back to the currently executing line when the mouse is released after dragging a selection in the source pane to scroll up or down.

(Windows-only) Fixed crash due to improper de-allocation of memory in Poly2D fit function.

(Windows-only) Igor registers the .pxt extension that the 4.0 installer forgot, and also updates the registry so that the Igor 4.0 CD installer won't try to reinstall Igor when the CD is inserted.

(Macintosh-only). Clicking on the menu after BuildMenu has been called no longer leaves the beach ball cursor operative when selecting menu items.

(Macintosh-only). The Debugger, the Procedure Browser, and the DisplayProcedure operation no longer scramble the window order when showing a procedure.


(Macintosh-only) SndLoadWave XOP 2.1 has been updated to correctly load only the left or right channel of stereo sounds, and the dialog's To Clip and To Cmd buttons now work.

(Windows-only) Data Browser fixed a problem on Window 2000/NT when sometimes the font specification got trashed.


Global Fit procedure file updated to remove obsolete /D flags on the template fitting function, which could cause the fit to use the wrong function. Made the template function put up an alert if the wrong function is being used.

TransformAxis.ipf updated to fix a problem with graphs with very long names. Took the opportunity to tweak the ticking algorithm to make it work better.

Changed ProcessProbabilityData.ipf to correctly ignore NaN's in the input data.

Updated SetIgorMenuModeProc.ipf to reflect new menu items in Igor Pro 4.

Example Experiments

Examples:Analysis:Differential Equation Demo.pxp. Demonstrates the IntegrateODE operation and fitting using an all-at-once fit function.