Igor Pro 9.02 Beta 1 Released

A new beta release of Igor Pro 9 is now available for all platforms. A list of notable changes for this release is included below. If you've reported an issue to us and we've told you it's been fixed, the fix will be included in this release, even if it's not mentioned below.

If you have enabled checking for beta releases (select the Misc→Miscellaneous Settings menu item to open the Miscellaneous Settings dialog, select the Updates category, then select the "Also Check for Beta Releases" checkbox) you can select the Help→Updates for Igor Pro menu item within Igor Pro 9 to get the latest beta release. Otherwise you can go to the Downloads page to download the installer manually.

Macintosh users: When you drag the Igor Pro 9 Folder from the new installer into your Applications folder, the OS may ask you whether you want to merge the folders or replace the existing folder. You should select "Replace".

See also: Igor Pro on macOS 10.15 (Catalina) and later

Notable Changes in Igor Pro 9.02 Beta 1

New Signing Certificate

This is the first official beta release of Igor Pro since Sutter Instrument purchased WaveMetrics in September 2022. Due to how the purchase was executed, WaveMetrics was required to get new code signing certificates for both platforms, and these new certificates are used starting with this release.

Windows users should notice no change in behavior.

Macintosh users may notice that the OS asks you to re-authorize Igor to view protected folders (e.g., Documents, Desktop, etc.) and to control other applications. Unfortunately, some of these prompts come the first time you use Igor to do something protected, not the first time you run Igor. You can get around the file and folder access prompts by granting this version of the "Igor64" application Full Disk Access in the Privacy tab of the Security & Privacy section of System Preferences. A similar workaround for automation access does not seem possible since there is a separate permission for automation control of each application.

To be clear, this version of Igor doesn't need any new permissions compared to older versions. The issue is that a different corporate entity is associated with Igor's code signing certificate, and this triggers the OS to ask for permissions again.

If you use Igor on macOS to do unattended tasks, we recommend that you try running those tasks while attended in case you need to click through any macOS security prompts.



  • The WaveTracking operation now has a /Q flag to suppress the history printout when you use the dump keyword. Also, if you use the dump keyword in tracker mode, a string variable "S_waveTracker" is created with a carriage-return separated list of keyword-value strings with information on the tracked waves.


  • When a dimension of a wave has units of "dat", the starting value of the wave's scaling is now displayed in the Data Browser info pane as a date, time, or date/time value instead of a simple numeric value.
  • Improved the performance of the code that marks a wave as having been modified. For most purposes, this won't be noticeable, but if you have code that does lots of single-point wave assignments mixed with calls to the Make operation, this change could improve performance by as much as 20 percent.
  • Optimized drawing of control panels to avoid drawing draw objects that don't fall within the panel's update region.
  • If a static fit function is in a module, it goes into the Curve Fitting dialog function menu with a double name. Previously, such functions weren't listed.
  • The menu selection to create a New Panel now also shows the tool palette.
  • Added Print Preview for panels.
  • Igor 9 once more obeys the longtime help text that says: "You can also switch to modify mode by choosing an item from the Select Control submenu of the Graph or Panel menu."
  • Improved appearance of colored Slider control thumbs.
  • Colored sliders use only the hue from the supplied fcolor, just like Igor 7 and 8.
  • Changed appearance of disabled Slider controls when using the Fusion style so that they actually look disabled.
  • The CtrlNamedBackground operation's dialogsOK keyword was previously documented as defaulting to 1. However, in Igor 9 the default was inadvertently changed to 0. No one has complained, and 0 is safer, so we are leaving the default as 0 and changing the documentation. This means that, by default, a named background task will not run when a dialog is active.
  • Annotations dragged to and over the edge of their subwindow rectangle no longer appear clipped to that rectangle.
  • FunctionList now returns the names of static functions in the main Procedure window.
  • The Draw Dialog now shows "Start Angle:" and "Stop Angle:" for arcs and shows "H Scale:" and "V Scale:" for polygons and Beziers instead of "X1:" and "Y1:".
  • The SetDrawEnv command now causes a currently-being-edited arc, polygon, or Bezier to be selected so that the SetDrawEnv settings also apply to the object being edited.
  • Right-click of an arc being edited now presents the contextual menu that any other selected drawing object has. When an arc is left in selected mode, clicking it re-enters arc edit mode. Shift-click of an editing arc stops editing that arc (remains in arc edit mode, though, allowing one to edit any arc).
  • Changed ScaleToIndex() to comply with documentation.


  • Fixed a crash caused by infinite recursion in the Execute operation.
  • Fixed a crash in Smooth when called from a preemptive thread. This crash was reported by several Tofware users. If you use Tofware and have been experiencing crashes using Igor 8 or Igor 9, we suggest you upgrade to get this fix.
  • Fixed a crash when recreating a NewWaterfall plot with a graph cursor.
  • Fixed a crash when selecting a DrawArc object drawn in a subwindow. Addressed many other issues with editing arc objects.
  • Fixed crash: If you made a graph with panel subwindow, enabled draw tools and selected any of the Draw Wave or Edit Wave tools, then clicked in the panel subwindow, Igor crashed.
  • On Windows, double-clicking an experiment file in Explorer while in PauseForUser no longer crashes Igor.
  • Prevent crash when ModifyGraph trace appearance command is issued while a graph is in GraphWaveEdit mode.
  • Fixed a Debugger crash that rarely happened when debugging PopupMenu control action procedures after the user clicked "Go".
  • Fixed a crash in ImageInterpolate Pixelate3d.
  • HDF5SaveData always saves empty strings using a variable-length datatype. This is necessary because the HDF5 library does not support saving empty strings using a fixed-length datatype.
  • Windows: PlayMovieAction no longer ignores the /A flag in compiled Igor procedure code. Previously, the flag was observed when executing the operation from a macro or on the command line but not from functions. In our testing, PlayMovieAction without /A is capable of loading many .AVI files as well as newer .MP4 files. If you get unexpected results when using the /A flag in functions, try removing the /A flag. That will give you the same behavior as before this fix.
  • Fixed bug in PlayMovieAction extract when the product of rows*cols*3*frame number was near to or greater than 2^31. The bug could cause a crash or memory corruption, including overwriting of data in memory (such as other waves).
  • Fixed a bug: If procedures were in an uncompiled state when the Curve Fitting dialog was displayed, first an alert was displayed with a message about unavailable user-defined fitting functions. Then the dialog was displayed, and when the dialog was closed Igor was in an unusable state, with window activation not working correctly.
  • Fixed a bug that could result in scroll bars from a table subwindow being visible when the table itself was hidden.
  • Fixed a bug in FastOP that resulted in incorrect calculations when the expression could be simplified to wd= wd + C*w or wd+= C*w and when (-1 < C < 1). wd also needs to be a floating-point wave for the bug to be symptomatic.
  • Fixed the tick timer to be more accurate. Once upon a time, ticks were provided by the Macintosh system, and were 60.15/second. WaveMetrics had to make their own ticks on Windows and used a millisecond timer as the base. Presumably to use faster integer arithmetic, ticks were computed as milliseconds/17, avoiding a floating-point divide by 16.6666.... But that makes 58.8 ticks/second. Now we use the floating-point computation; given that ticks are integers, a rounding to integer makes the ticks on average accurately 60 ticks per second.
  • DrawArc properly scales its radius in an expanded panel.
  • GetFileFolderInfo's output variable V_logEOF is no longer incorrect for very large files.
  • Several bugs in WaveTracking have been fixed that have to do with keeping the tracking correct as waves transition between global, free, and local states. Bugs were also fixed for the transitions that occur when waves are moved from the main thread to a preemptive thread and back using ThreadGroupPutDF and ThreadGroupGetDFR. The same transitions have not been tested using ThreadGroupGetDF as it is deprecated and should never be used.
  • Fixed SavePICT to prevent saving a picture to the gallery with a long name.
  • Fixed bug: a graph with panel subwindow allowed you to select the Draw Wave, Edit Wave, etc. tools when the panel was active. Conversely, a panel with a graph subwindow would NOT allow you to use those tools when the graph was active.
  • Fixed a memory leak when calling the poly2D function with a degree of 8, that is, 45 polynomial coefficients.
  • Fixed a compile error for the second call to CurveFit in a function under very obscure circumstances.
  • If a date-time axis has singular data (all values are the same) Igor now draws one tick and labels it with that single date/time value. Previously, it simply left the axis with no ticks, at odds with how a numeric axis behaves with singular data.
  • Fixed a bug that caused the default position of modal dialogs on Macintosh to be in the top left instead of the center of the screen.
  • Improved the reliability of WaveTracking when using preemptive threads or MultiThread.
  • Fixed Windows bug: If you have a panel active, and you press Ctrl-Alt-Del to lock the screen or to bring up the task manager, etc., as you press Ctrl-Alt the panel is put into temporary selector mode. Now when the Del key is pressed, Igor is deactivated so we miss the key release events that should take the window out of temp selector mode. The only way out was to show and hide the draw tools.
  • Work-around for some weird Qt bug that causes a show() to move a new window. This caused misplacement of the second new control panel window under certain circumstances.
  • Fixed bug in curve fitting: if you fit a 2D function to an image on a graph with swapXY turned on, the destination wave and residual wave contour plots used the wrong axes.
  • Fixed a bug in the Curve Fitting dialog: If you have contours and images on a graph, and the From Target checkbox was turned on, the dialog would list the image wave as the Y wave for a 2D fit function, but wouldn't let you select it.
  • Fixed a regression in the accuracy of the DateTime function.
  • When executing a macro from a menu selection, Igor deletes the command line when there is an error in the macro. Igor then tried to highlight the error symbol, but the command line containing that symbol was already gone. That could result in a BugMessage().
  • Fixed a problem when many instances of Igor were quickly launched and some instances loaded incorrect license registration information.
  • Fixed a problem with Igor TeX where a vector over a letter displayed in a fraction's numerator where the denominator also had a vector over a letter was improperly rendered.
  • Fixed the Debugger's ability to scroll very long procedure text lines so that all of the text could be viewed.
  • Fixed regression: Between Igor 6 and Igor 7, page layouts lost the ability to maintain the scroll position when the layout expansion was changed. That has now been restored.
  • Fixed bugs in KillWindow error reporting when the /Z flag was used. Now KillWindow/Z with a non-existent subwindow path no longer throws an error.
  • Corrected position of exterior panels when positioned at the top or bottom of the host window (NewPanel/EXT=2 or 3). The position now correctly accounts for the window frame and title bar.
  • CleanupName now returns a valid liberal name for an empty input string
  • Fixed crashing bug: If a graph has an embedded panel, selecting Edit Wave (or Draw Wave or...) then clicking in the sub-panel crashed because it doesn't have graph traces.
  • Also fixed the fact that a graph subwindow in a panel couldn't use the Edit Wave, etc., tools because those tools were created only if the host window was a graph.
  • Fixed a bug in CopyDimLabels /LAYR.
  • Fixed support for [][][] syntax in MatrixOp.
  • Fixed EqualWaves() comparison for I64 waves.
  • Added tests to eliminate the possibility of infinite loop in ImageHistModification Adaptive branch.
  • ImageTransform insertPlane now copies the wave's note and scaling.
  • Added missing factor of 2 in the approximation of P value in one branch of StatsKSTest.  Also added reporting of Marsaglia's P value calculation in the default branch.
  • Fixed 90-degree rotation in Integrate2d.


  • CIE Chromaticity.ipf:
    Added CIE Chromaticity package. See Windows->New->Packages->CIE Chromaticity Graph, which creates the graph and adds the CIE menu to the menu bar.
  • Global Fit 2.ipf:
    No longer sets the current data folder during the call to FuncFit, allowing user's fit functions to run in their expected data folder. That change results in having W_sigma and M_covar being saved into the user's data folder.

    Fixed a bug in the try-catch block around FuncFit that prevented the catch from actually catching FuncFit errors.

    Fixed two bugs with 'divider line' between the data and coefficient lists: Drag area was appearing outside the valid area and was not expansion aware.
  • HDF5 Browser.ipf:
    Variable/G root:Packages:HDF5Browser:disableMenus=1 disables the "New HDF5 Browser" item in the "Load Waves" submenu.
  • Image Processing Panel.ipf:
    Fixed minor bug in this obsolete procedure file.
  • KBColorize.ipf:
    Added a way to colorize traces using color table waves, supplementing the ability to colorize with built-in color tables.
  • Multipeak Fitting.ipf:
    Added Guess Options to the MPF starter panel. This sets global variables for use as initial values for the auto-peak guesser.

    Added update function for the MPF starter panel.

    Fixed bug: Resume Set gave an error if a different graph with the same name existed.
  • New Polar Graphs.ipf:
    Prevented "index out of range" error in WMPolarShadowFunction() and WMPolarShadowFunction().

    Added grid background color. Improved accuracy of grid circles. Grid background and fill-to-zero polygons are clipped to the polar graph plot area, which looks better on zoomed-in ("expanded") polar graphs. The recreation macros for polar graphs should be more compact when the grid is shown.

    Improved control positions in the Modify Polar Graphs panel.

    Added WMPolarMoveTraceToBottom(), fixed multi-line label opaque backgrounds.
  • Peak Autofind.ipf:
    Fixed an obscure bug where if a partial peak was found at the very end of the data set, it could try to access an X wave point less than zero or greater than the maximum point number.

    If there is a peak at the very edge of the data, it might happen that the smooth factor estimation gives out NaNs. This is caught now, and the maximum smooth factor is returned when everything fails.

    Now EstPeakNoiseAndSmfact() can take the new optional parameter widthGuess, which aids in finding peaks in low-S/N data.
  • Pie Chart.ipf:
    Now allows floating point stroke widths, most usefully widths less than 1.0. PieChartVersion is now 9.
  • Radar Chart.ipf:
    New Radar and Spider Chart package. See Radar Chart Procedure for help.
  • Select Points for Mask.ipf:
    Options list now is preserved if you flip back and forth between adding polygons and modifying the list in More Options.

    Fixed failure to find polygon waves and traces when you delete polygons.
  • TransformAxis1.2.ipf:
    TransformAxis should not copy the ModifyGraph grid setting to/from the transformed axis.

    Trimming trailing zeroes in tick labels optional and fixed a bug where scientific label 10^0 got trimmed.

    Added a few more ModifyGraph axis keywords to the list of keys that should not be copied. The complete list: grid(x); userticks(x); lblPos(x); lblPosMode(x); lblMargin(x); lblPos(x); freePos(x); lblMargin(x); lblLatPos(x); lblRot(x); tkLblRot(x); tlOffset(x);
  • WMColorPicker.ipf:
    Adjusted control positions and sizes to look better on Windows.
  • XY Pair To Waveform Panel.ipf and XY Pair to Waveform.ipf:
    Added linear interpolation to the XY Pair to Waveform Panel.ipf algorithms (previously only cubic interpolation was used).

Example Experiments

  • Mouse Cursor Control.pxp:
    Updated for Igor 9.01 and 9.02 cursors, added a macro to create a cursor constants procedure file.





Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More