Igor Pro® 8 Changed and New Features

Igor Pro 8 contains hundreds of improvements, including 20 new operations, 5 new functions, a new NetCDF XOP, and the Igor Filter Design Laboratory (a separate product in Igor 7 and earlier).

Some highlights of Igor Pro 8 improvements include:

  • Long object names, increased from 31 bytes to 256 bytes.
  • Greatly improved the speed of creating and looking up waves by name when there are many similarly-named waves in a data folder.
  • Drawing speed of graph traces on High-DPI displays under some specific circumstances is dramatically improved.
  • Improved speed of displaying notebooks, help windows, and procedure windows.
  • New Window Browser shows all your windows in one place.
    Filter by type, name, and/or wave to find that one special graph among a sea of great data.
  • The new toolbar provides easier access to frequently used features.
  • The redesigned Procedure Browser allows you to quickly find and filter symbols (functions, macros, etc.).
  • New Box Plot and Violin Plot graph types make it easy to show the distribution of values within a data set.
  • Procedure windows and the command line now suggest options to complete the current command.
  • New Back and Forward buttons in procedure and notebook windows allow you to quickly navigate in these window types.
  • New Short-Time Fourier Transform (STFT) operation.
  • Added seven new dialogs for transformation operations.
  • New built-in Voigt and dblexp_peak curve fitting functions.
  • ODR fitting is now thread safe and has built-in parallelization.
  • Igor Filter Design Laboratory (IFDL), which was previously a separate paid product, is now built into Igor Pro 8. IFDL is a sophisticated and flexible environment for interactive design, evaluation, and application of Finite Impulse Response (FIR) and Infinite Impulse Response (IIR) digital filters.

For more information see our showcase page for an overview of these important new features or the comprehensive new features list below.

Notable Technology Changes

Igor Pro 8 is based on a newer version of the Qt cross-platform application framework.

32-bit version no longer available on Macintosh

Starting with Igor Pro 8, the 32-bit version of Igor is no longer available on Macintosh because 32-bit support is being phased out by Apple and most Igor Pro 7 users on Macintosh are already using the 64-bit application. If you need to run with a 32-bit XOP (plug-in) on Macintosh then you must run Igor Pro 7.

The 32-bit version is still shipped on Windows. The 64-bit version runs by default. You should run the 32-bit version only if you depend on an XOP that has not been ported to 64 bits.

Long Name Support

Igor Pro 8 increases the maximum length of names for most object types from 31 to 255.

If you use long object names, your wave and experiment files will require Igor Pro 8 or later.

XOPs written before Igor 8 are limited to using names that fit in 31 bytes. To use long names, existing XOPs must be recompiled.

Command Line Length

Igor Pro 8 increases the maximum number of bytes in a command from 1000 to 2500.

File Path Length

Igor Pro 8 increases the length of a file path from 511 (Macintosh) or 259 (Windows) to 2000 but operating-systems may have smaller limits.

Igor Version Compatibility

Igor Pro 8 can read files created by all earlier versions of Igor.

If you don’t use features new in Igor Pro 8, then experiment files that it writes are readable by earlier versions.

Once you use features added in Igor Pro 8 and save an experiment file, that file may cause errors if you try to read it in an earlier version of Igor. Just in case you need to go back to an earlier version of Igor, it is a good idea to make backup copies of all your Igor files now.

In particular, if you use long object names, your wave and experiment files will require Igor Pro 8 or later.

Some behaviors have changed slightly in Igor Pro 8. These changes may affect some existing Igor experiments. See Behavior Changes in Igor Pro 8 for details.

Macintosh 64-bit XOPs must be modified and recompiled using XOP Toolkit 7.01 or later in order to run with Igor 8. See Macintosh 64-bit XOPs and Igor Pro 8 for details.

Previously, the MultiThread keyword could be used with variables although it did nothing. Now, this results in a compile error.

XOP Changes in Igor Pro 8

XOPs Added To Igor Pro 8

Added NetCDF XOP for reading data from NetCDF Classic and NetCDF 64-bit offset files. It also provides ways to browse NetCDF data files.

XOPs Removed From Igor Pro 8

The FindPeaks XOP has been removed because the operations it implemented have been built into Igor 8. The operations (BoxSmooth, EstimatePeakSizes, and FindAPeak) are useful primarily for only the procedures used by the TN020 Peak Measurement and Fitting technical Notes.

MultiClamp700xCommander XOP is now considered obsolete because we have been unable to test the XOP using Windows 10 due to crashes in the AxMultiClampMsg.dll file the XOP calls. WaveMetrics will provide the source code of the XOP upon request.

The MultiPeakFit, ANOVA, and SndLoadSaveWave XOPs have been removed on both platforms. The Windows only DSXOP and VFW XOPs have also been removed. These XOPs were already considered obsolete in Igor Pro 7 and most or all of the functionality provided by these XOPs is either built in or provided by a newer XOP. NOTE: The removed MultiPeakFit XOP is NOT the same as the Multi-peak Fitting package, which is still available and supported.

XOP Compatibility

Macintosh 64-bit XOPs must be modified and recompiled using XOP Toolkit 7.01 or later in order to run with Igor 8. See Macintosh 64-bit XOPs and Igor Pro 8 for details.

XOPs written before Igor 8 are limited to using names that fit in 31 bytes. To use long names, existing XOPs must be recompiled.

The IFDL XOP is not compatible with Igor 8 because the operations it implements (FMaxFlat and Remez) are built into Igor 8. The Igor Filter Design Laboratory procedures and manual have been included into Igor 8. See the Analysis→Packages→Igor Filter Design Laboratory menu.

Macintosh 64-bit XOPs and Igor Pro 8

Because of a change in Igor 8 memory management, Macintosh 64-bit XOPs compiled using XOP Toolkit 7.00 need to be modified and recompiled with XOP Toolkit 7.01 or later to run with the 64-bit version of Igor Pro 8 on Macintosh. Windows 32-bit and 64-bit XOPs will run in Igor 8 without modification.

If you are an XOP programmer who created a 64-bit Macintosh XOP using XOP Toolkit 7.00, download the latest XOP Toolkit. See the XOP Toolkit manual appendices for general information about updating existing XOPs. Then see "WM Memory XOPSupport Routines" in Chapter 12 of the XOP Toolkit manual for details about memory management.

Although this change is critical only for Macintosh 64-bit XOPs, we recommend that all actively-developed XOPs be modified as described under "WM Memory XOPSupport Routines" in Chapter 12.

XOPs and Long Names and Paths

Prior to Igor 8, Igor object names, such as wave, variable and window names, were limited to 31 bytes. File paths were limited to 511 bytes on Macintosh and 259 bytes on Windows. Names and paths used by XOPs with Igor 8 have these same limitations unless the XOP is modified to support long names and paths.

If you are an XOP programmer and you want to support long names and paths, download the latest XOP Toolkit. See the XOP Toolkit manual appendices for general information about updating existing XOPs. Then see "Supporting Long Names and Paths" in Chapter 12 of the XOP Toolkit manual for details about long names and paths.

An XOP that has been modified to support long names and paths cannot run with Igor 7 or Igor 6. Consequently, you should modify your XOP to support long names and paths only if you are prepared to require Igor 8 or later.

The following XOPs have been updated to support long names and paths:

NIGPIB2, VDT2, VISA, HDF5, HDF Loader (HDF4), NetCDF, NILoadWave, TDM, SQL, FindPeaks, AxonTelegraph

The following XOPs have not yet been updated to support long names and paths:


Guide To Igor Pro 8 Improvements

Performance Improvements

User-Interface Changes

Behavior Changes

Programming Changes

Programming Improvements

Data Browser Changes

Data Browser Improvements

Dialog Improvements

Graphing Improvements

Graphs and High-Resolution Displays

Table Improvements

Page Layout Improvements

Notebook Improvements

Help Improvements

Command Window Improvements

Graphics Export Improvements

Procedure Window Improvements

Gizmo Improvements

Annotation Improvements

Control and Control Panel Improvements

Analysis Improvements

Statistics Improvements

Matrix Improvements

Curve Fitting Improvements

Image Processing Improvements

Data Import And Export Improvements

Data Acquisition Improvements

Miscellaneous Improvements

Camera Window Improvements

New And Improved Example Experiments

Performance Improvements

Wave Name Performance Improvements

Greatly increased the speed of looking up waves by name. This affects the time required to resolve a WAVE statement at run-time, and the time required to make a new wave because the new wave’s name must be looked up to avoid name conflicts. This particularly affects the time to process or make many waves with sequential names (wave0, wave1, ...).

Time to look up 200 to 10,000 waves (note the log-log axes):


This graph shows the time to run a loop that does nothing but execute a WAVE statement with each of N names of waves. Naturally, the improvement in performance in real applications will be diluted by whatever action is taken on each wave.


Time to make 200 to 10,000 waves:

Igor must look up your proposed name before making a new wave, so making a large number of waves each with a non-conflicting name incurs the maximum time to look up a name, since it must examine every name in the current list of waves.

In Igor 7, waves with names composed of random characters look up faster than sequential names because on average only a few characters need to be compared to discover a mismatch. Igor 8 uses a hash table and the complete hash for the name must be computed to look it up, and that means there is no difference between random and sequential names. Most applications will use names that are more like sequential names than random, so the penalty paid for sequential names in Igor 7 is important. With longer wave names possible in Igor 8, the penalty for longer names would be more important.

The improved performance comes with no user-visible changes except speed. Wave lists are still generated in the order in which waves are added to a data folder, and the old technique of moving a wave out of a data folder and back in will still move the wave to the end of the list.


Other Performance Improvements

Windows: Optimized opening of help and procedure windows. In some situations this can decrease startup and/or compile times by an appreciable amount. This optimization is not necessary on Macintosh.

Decreased the time it takes to load XOPs during startup. As a consequence, it is now difficult to see which XOPs are loaded by watching the splash screen. You can use IgorInfo(10) to print a list of loaded XOPs if you need to know whether an XOP was loaded.

Improved speed of displaying notebooks, help windows, and procedure windows.

User-Interface Changes

New built-in Window Browser (Windows→Window Browser menu item) makes it easy to find and view windows of any type, and largely replaces the functionality of the procedure-based Graph Browser, which is still available. See The Window Browser for more information.

Added a main toolbar to provide easier access to frequently used features. See The Igor Toolbar for more information.

Procedure windows and the command line now suggest options to complete the current command. See Command Completion for more information.

When Igor asks you if you want to save external text files that have been modified, it now includes a list of all files that have been modified.

Added Hide Trace(s) to Modify Trace and Show All Traces to Modify Graph contextual menus.

Fixed Undo for Modify Trace contextual menu: now Undo undoes the changes made to all the modified trace(s) instead of one at a time.

Added support for display of user-defined characters in the character picker. The character picker is displayed when you select the Special→Character submenu in dialogs that contain a styled text entry area, such as the Add Annotation and Modify Axis dialogs. The picker is also displayed from the Edit→Character menu and user-defined "*CHARACTER*" submenu items. You can edit the user-defined characters from the Character Picker category of the Misc→Miscellaneous Settings dialog. User-defined characters must be a single Unicode code point, which means that combining characters are not allowed.

Redesigned the Procedure Browser (Windows→Procedure Browser menu item). New features include display of symbols (functions, macros, etc.) along with procedure files and filtering files and symbols by name.

The Where Is Object Used dialog now allows you to close a window from within the dialog.

Add undo for draw mode contextual menu frame style, frame inset and control background items in control panels. Also added undo for those items to the ModifyPanel operation. The Graph contextual menu (the one you get by right-clicking in a graph margin) color options for background colors can now be undone and redone.

The search text in The Find Bar now turns red to indicate that there is no instance of the search text in the document.

Tweak to The Find Text in Multiple Windows Dialog: if you have edited the search text, it won’t be synced with the global search term, allowing you to go to another window, copy a replacement text and return to the search window without having your edited search text replaced.

Behavior Changes

For compatibility with Igor 6, in Igor 7 on New Experiment the built-in procedure window and history area text encodings were set based on the user-specified default text encoding, as determined by the Misc→Text Encoding→Default Text Encoding menu. The user-specified default text encoding defaults to a non-Unicode text encoding - MacRoman, Windows-1252, or Shift JIS. Because non-Unicode text encodings are limited and antiquated, and since Igor 8 users probably have burned their bridge to Igor 6 already, we changed this to UTF-8.

In Igor 8, new formatted notebooks are always saved as UTF-8 as are formatted notebooks files that were previously saved as UTF-8. Non-ASCII characters in files written using UTF-8 appear as garbage when the file is opened in Igor 6. Existing Igor 6-compatible MBCS formatted notebook files are still saved as MBCS if possible.

Igor 8 provides better handling of quoted strings in delimited text files, such as comma-separated values files. A side-effect of this change is that, in rare cases, Igor 8 may produce different results for a given file than Igor 7.

Quoted strings are also supported when pasting in tables. If you paste "Hello" (with the quotes) into a text wave or into a new column, you get Hello, not "Hello" in the text wave. In Igor 7, you would get "Hello", not Hello in the text wave. This change was made for consistency with the change in loaded delimited text files.

The PauseForUser operation is no longer allowed in macros or on the command line.

Programming Changes

The documentation of a window hook function states that if you return non-zero from the function, that tells Igor not to do anything with the event. The mouse click and mouse move event code has been rearranged so that a hook function can more reliably prevent a marquee drag by returning 1 in response to mouse click and mouse move events. See Window Hook Functions.

Accuracy of the Sleep operation has been improved. If timings are requested as ticks or seconds (Sleep/T or Sleep/S) internally the timings are in milliseconds. Other improvements have also added to the accuracy of Sleep.

When using Sleep/C=6, which displays a progress dialog instead of a busy mouse cursor, the /B and /Q flags now affect the appearance of the dialog. The dialog may display Cancel, Abort or Continue buttons, or both Abort and Continue depending on the combination of /B and /Q.

Macintosh: The current directory and path of commands executed using ExecuteScriptText may be different than in previous versions of Igor. See the ExecuteScriptText command help entry for more information.

Macintosh: The quoting of the ExecuteScriptText S_value output variable may be different than in previous Igor versions. See the command help entry for more information.

Programming Improvements

Procedure windows and the command line now suggest options to complete the current command. See Command Completion for more information.

The CleanupName, ListToTextWave, SplitString, and ParseFilePath functions are now threadsafe.

The CheckName function is now threadsafe for waves, numeric and string variables, data folders, and symbolic paths.

The UniqueName function is now threadsafe for waves, numeric and string variables, data folders, and symbolic paths.

The ShowTools and HideTools /W flag now allows a subwindow path if that path leads to an exterior control panel.

The fprintf operation can now write to the standard output (stdout) and standard error (stderr) streams.

The StartMSTimer function is now threadsafe.

The StopMSTimer function, which was already marked as being threadsafe, is now threadsafe for all allowed values of the timerRefNum parameter. In previous versions, StopMSTimer was only threadsafe if the timerRefNum parameter was -1 or -2.

Prior to Igor 8, when running in a preemptive thread, it was not allowed to use /P=<symbolic path name> in a file loader command or to use the PathInfo function. In Igor 8 or later, these are allowed. The PathInfo /S and /SHOW flags are ignored when running in a preemptive thread.

Concatenate can now take the /FREE flag to create a free destination wave and can take a list of source waves in a single wave reference wave.

MoveDataFolder and DuplicateDataFolder can now take flags /O=overwriteMode and /Z (no error report.) An error code is now stored in V_Flag.

When using InsertPoints with numeric waves, you can specify the value to be inserted using /V= value.

The Sleep operation has a new flag, /PROG, to control the appearance and behavior of the optional progress dialog.

RemoveEnding now returns its input string with the last grapheme removed. Previously it removed the last byte.

Added new selector values to IgorInfo:

  1. Returns the group of the current user on Macintosh or an empty string on Windows
  2. Returns "admin" if Igor’s process is being run as an administrator (Windows) or if the user that started Igor’s process is an administrator (Macintosh).
  3. Returns a semicolon-separated list containing the names of enabled XOPs.

Added new Operation Queue command LOADFILEINNEWINSTANCE which works like the LOADFILE command except that the file is loaded in a new instance of Igor Pro, not the current instance.

Added new Operation Queue command LOADHELPEXAMPLE. This is currently identical to LOADFILEINNEWINSTANCE but might become user-configurable in the future. This command is recommended for Notebook Action Special Characters that load example experiments, such as those used throughout Igor’s help files.

Added CopyDimLabels operation to copy dimension labels from one wave to another wave.

Added new built-in Base64Decode and Base64Encode functions for decoding and encoding base64-encoded data.

Added new operation TickWavesFromAxis that generates user tick waves that duplicate the automatic ticks for the axis.

You can now use inf to stand in as last item in a dimension. For example:

Make/N=(5,6) jack=x+y; print jack[2][inf]

When using Variable/G or String/G in a user function, you can now create NVAR and SVAR variables even when using $ or path specifications by appending /N=name. For example:

Variable/G $"gvar"/N=mygvar
String/G "gstr"/N=mysvar

Wave assignment statements can now use an index wave on the left-hand side and optionally a value wave on the right using this syntax:

destwave[ indexwave ] = value expression
destwave[ indexwave ] = { valuewave }

WAVE reference variables can now be passed by reference.

Added limited support for complex integer wave expressions.

Functions can now be defined to return multiple values. Example:

Function [ Variable v, String s ] foo( Variable a )
	return [1+a, "hello"]
Function bar()
	Variable v1; String s1
	[v1, s1]= foo(10)

The new StructFill operation is a programmer convenience that reduces the need to add lines of code that initialize NVAR, SVAR and WAVE fields in a structure. At run time, it scans through the fields in the specified structure and attempts to set all empty NVAR, SVAR and WAVE fields by looking up corresponding (same named) globals in the current or specified data folder. In addition, StructPut and StructGet can now be used with structures containing NVAR, SVAR and WAVE fields as long as there is numeric data at the end. See the example in Limitations of Structures.

The MultiThread keyword now takes a flag, /NT= nthreads. The main use is to turn off threading when the destination wave is too small. Use nthreads= 1 for this. Like all flags, the value needs to be enclosed in parentheses for calculated values.

The Debugger’s expressions evaluator (Expressions pane and highlighted code) works with the names of free waves.

The Debugger’s Stack, Variables, and Expression lists all support copying multiple rows of values.

Data Browser Changes

The color of the Plot pane’s histogram graph is controlled by the color picker in the contextual menu. Previously this only controlled the color of the plot of the data, not the histogram.

Data Browser Improvements

The Info pane can now display whether or not a selected wave has dimension labels and, if so, in which dimensions. This display is disabled by default. You can enable display of this field by choosing Misc→Miscellaneous Settings and clicking Data Browser in the left-hand list. Then select the Info Pane tab and check the “Dimension Labels” checkbox.

The bin mode used for the Plot pane’s histogram mode is now user-selectable. To change the mode, enable histogram mode and then right click on the plot and select a mode from the Bin Mode menu item.

The Data Browser now supports sorting objects by the order in which they were added to the parent data folder. This better approximates the behavior of the Igor Pro 6 Data Browser when sorting objects by creation date was selected. Click the options (gear) icon below the Data Browser’s list of objects and select Sort by Order Added to Parent Folder to enable this sorting mode.

When browsing an experiment in the Data Browser, the icons used for waves now indicate the number of dimensions in the wave and the wave’s type.

Dialog Improvements

Added “New From Auto Ticks” button to the User Tick Waves section of the Auto/Man Ticks tab of the Modify Axis dialog. This new button generates user tick waves that duplicate the ticks automatically generated by Igor. See also TickWavesFromAxis.

Added axis and cursor controls to Image Line Profile dialog.

Added a “Goto current data folder” button above the list of global objects used in the Data Browser and other dialogs.

The list of traces in the Modify Trace Appearance and Remove from Graph dialogs now allows filtering the list of traces by name.

The list of traces in the Modify Trace Appearance dialog and several other dialogs display icons that indicate the type of the trace (e.g. standard, box plot, violin plot, etc.).

The list of layout objects in the Arrange Objects and Modify Objects dialogs now displays icons for each object that indicate the object’s type.

Added a dialog for the SoundLoadWave command.

Graphing Improvements

It is now possible to specify a color for error bars that overrides the default, which is the same as the trace color. Thus, you can have black error bars on a colored trace. It is now possible to fill error bars in BOX mode with a color. See ErrorBars for more information.

The labels for the X axis categories in a category plot can now be taken from the row dimensions labels associated with the first Y wave on the category axis. See Category Plot Using Dimension Labels.

You can create graphs with alternating bars replacing axis lines and tick marks by specifying ModifyGraph tick= 4. This is commonly used in cartographic plots. Example:

Make w0=sin(x/8);Display w0;ModifyGraph mirror=1, tick=4, standoff=0, grid=1


You can now move traces to a new or existing vertical axis using the new “Move to Opposite Axis” menu item in the trace contextual menu (right click on a trace.)

You can now use the new ModifyGraph mstandoff keyword to prevent lines in lines and markers mode from touching markers. Example:

Make/O/N=20 w0=sin(x);Display w0;ModifyGraph  mode=4,marker=8,msize=3,mstandoff=3


Graphs and High-Resolution Displays

Macintosh Retina and Windows high-resolution displays bring a more pleasing visual experience but also present performance challenges. Previously, one point lines were one pixel wide. Now, on high-resolution displays, such lines are two pixels wide and, depending on the operating system, graphics technology and the actual data, drawing can be thousands of times slower.

As of Igor Pro 8, we now use fast custom code when drawing two or more pixel wide lines. However, because the custom code lines are not as pleasing as the system code, it is used only under conditions where the system code is slow, particularly when very long traces are used.

When you need the fastest update speed, you can specify that a trace should use the fast line draw code by using the ModifyGraph live keyword with a value of 2. This will cause even one pixel thick lines to be drawn with the new code. The speed improvement is on the order of a factor of two.

You can use the Live Mode demo experiment to see how different settings affect the speed of graph updates.

New Display Modes

In Igor 8 it is now possible to make box and whisker plots and violin plots. To learn more, see Box Plots and Violin Plots. For example:


These new display modes required addition of several new operations:

  • AppendBoxPlot
  • AppendViolinPlot
  • AddWavesToBoxPlot
  • AddWavesToViolinPlot
  • ModifyBoxPlot
  • ModifyViolinPlot

Some operations have been modified to accommodate the requirements of box and violin plots:

  • TraceInfo now contains a TYPE keyword that tells you if a trace is a contour, box plot, or violin plot trace.
  • TraceNameList now includes bits in the last input (optionsFlag) to select box plot or violin plot traces.
  • WaveRefIndexed has been updated to return waves from box plot and violin plot traces.

Table Improvements

In tables in Igor 7, the full precision of 64-bit integer values that exceeded 2^53 in magnitude was not preserved during entry and display. This is fixed for Igor 8.

Added a new Edit→Character menu item that makes it easier to enter one of the commonly used special characters (e.g. Greek symbols) into table windows.

Page Layout Improvements

The New Layout and Append to Layout dialogs now display thumbnails of available graph, table, and Gizmo objects rather than simple lists of window names. This can be changed by selecting the settings menu (gear icon at the lower left corner of the object list) and unchecking “Show Window Thumbnails” in the menu.

In the same dialogs, the settings menu allows you to sort windows by name or stacking order and also allows you to enable or disable grouping of windows by window type.

The list of layout objects in the Arrange Objects and Modify Objects dialogs now displays icons for each object that indicate the object’s type.

Notebook Improvements

Added Go Back and Go Forward feature for notebooks, procedure windows and help windows. See Text Window Go Back and Go Forward.

Clicking text in a notebook that is formatted as a help link now goes to the specified help topic. This allows you to easily link to help topics from a documentation notebook. Previously you had to create a special action to link to help from a notebook.

Added a new notebook Special Character (see Special Characters), “Experiment File Name”. Select Experiment File Name from the Insert menu in the formatted notebook ruler area, and the name is inserted as dynamic text. This can be useful in the header document of a Procedure window, so that when you print out the Procedure window the experiment file in which is resides is identified. Saving the Document Settings by capturing Procedure preferences will make this happen automatically in any experiment file.

Improved speed of displaying notebooks.

Added a new Edit→Character menu item that makes it easier to enter one of the commonly used special characters (e.g. Greek symbols) into notebook windows.

Help Improvements

Added Go Back and Go Forward feature for notebooks, procedure windows and help windows. See Text Window Go Back and Go Forward. Removed the Help Go Back button which is no longer needed.

Added a navigation bar to help windows, which displays help topics and subtopics within the help file. The navigation bar can be turned on or off from the Miscellaneous Settings dialog. See the Text Editing category, Editor Behavior tab, Show navigation bar setting.

In the Help Browser’s Command Help tab, the help for the selected topic is now loaded after a short delay. This prevents the loading of the help for the topic, which can be slow in some situations, from interfering with the “search while you type” feature within the list of commands.

The Command Help tab of the Help Browser now has a button that, when clicked, opens the help window containing the help for the currently selected command.

Improved speed of displaying help windows.

Command Window Improvements

Holding the shift key while pressing Enter or Return in the command line enters a line break instead of executing the command line.

Added a new Edit→Character menu item that makes it easier to enter one of the commonly used special characters (e.g. Greek symbols) into the command line.

Graphics Export Improvements

Movie creation and extraction now use the latest system APIs on both Macintosh and Windows. Previous APIs have been marked as deprecated but are, for the time being, still available by specifying the /A flag with the NewMovie and PlayMovieAction operations.

Procedure Window Improvements

Added Go Back and Go Forward feature for notebooks, procedure windows and help windows.

Added a new Edit→Character menu item that makes it easier to enter one of the commonly used special characters (e.g. Greek symbols) into procedure windows.

Procedure windows and the command line now suggest options to complete the current command.

Improved speed of displaying procedure windows.

Gizmo Improvements

Gizmo windows can now host exterior control panels.

Added new SaveGizmoCopy operation.

Annotation Improvements

You can now include mathematical formulas in annotations using a subset of LaTeX.

Control and Control Panel Improvements

Slider controls can now call the action procedure repeatedly via a timer using the new repeat keyword.

A cell of a ListBox control can be disabled by setting bit 7 in the selWave.

A control’s action procedure receives an event on gaining and losing keyboard focus. Only new-style action procedures that use a structure as input will receive these events. See, for instance, WMButtonAction.

You can now provide help (tool tip) strings for individual cells of a ListBox using the new helpWave keyword.

The ModifyPanel operation has a new keyword, drawInOrder. Prior to Igor Pro 8, all tab controls were drawn first. The drawInOrder keyword allows you to override that behavior.

SetVariable controls report a new eventCode for mouse down. To make this more useful, a new member, mousePart, has been added to the WMSetVariableAction structure.

Added align keyword for all controls to aid in aligning the right ends of controls. This keyword is especially useful for controls like SetVariable that one usually wants to align to the right end.

Analysis Improvements

Improved Analysis Operations and Functions

Dawson function uses a new implementation with much improved accuracy outside the -5,5 range, and it now accepts complex input.

VoigtFunc function uses a new more accurate implementation.

PrimeFactors has been extended to inputs as large as 2^53.

Added new flag /DP to the Histogram operation to allow creating a histogram from large waves.

Added /UN flag to FindDuplicates that generates a wave containing the unique numerical values in the input wave.

Added /UNC flag to FindDuplicates that generates a wave containing the count of occurrences in the input wave of each unique numerical value.

FindDuplicates now has limited support for 64-bit integer waves.

Added /UOFV flag to FindValue which uses automatic multithreading to find an un-ordered specified numerical value in the input wave.

Added to FindValue support for multidimensional range specification (/RMD), output V_row, V_col, V_layer and V_chunk. Added support for finding values in complex waves and 64-bit integer waves.

Added /DTRD flag to DSPPeriodogram that provides detrending of segments prior to windowing and FFT.

Added to WindowFunction 18 flat-top functions.

Added to APMath arbitrary precision functions that compute the sum, mean, variance, skewness and kurtosis of a wave.

Added /DSO flag to FPClustering to compute the N-dimensional cartesian distances between rows of the source wave.

New Analysis Operations and Functions

Added the VoigtPeak function that computes values from a Voigt peak using a coefficient wave and X value as inputs. VoigtPeak uses the same algorithm as the new built-in Voigt fit function.

Added the Faddeeva function: Voigt(X,Y) = real(Faddeeva(cmplx(X,Y))

Added the WaveHash function for calculating cryptographic hashes of a wave’s data.

Added new operation STFT to compute the short-time Fourier transform.

The BoxSmooth, EstimatePeakSizes, and FindAPeak operations (previously implemented by the FindPeak XOP) are now built into Igor Pro 8. These operations are used by the TN020 Peak Measurement and Fitting Technical Note procedures.

The Remez and FMaxFlat operations (previously implemented by the IFDL XOP) are now built into Igor Pro 8. Choose the Analysis→Packages→Igor Filter Design Laboratory to design FIR filters using Remez, FMaxFlat and advanced IIR filters with Bessel and Chebyshev responses.

Analysis Dialog Changes

Added new Analysis→Transforms submenu. The Fourier Transforms (FFT) menu item has been moved to this submenu. In addition, new dialogs for the following are also available from this submenu:

  • Periodogram (DSPPeriodogram)
  • Lomb Periodogram (LombPeriodogram)
  • MultiTaperPSD
  • Discrete Wavelet Transform (DWT)
  • Continuous Wavelet Transform (CWT)
  • Wigner Transform (WignerTransform)
  • Short-Time Fourier Transform (STFT)

Statistics Improvements

Updated StatsWilcoxonRankTest to handle longer waves.

Added new /CCL flag to WaveStats to copy column labels when using /PCST.

Added /CMPL flag to StatsSample to save a wave containing the complement of the sampled data.

The StatsKDE operation ignores NaNs.

Matrix Improvements

Added to MatrixOP: the flag /P=printMode and the functions quat(), quatToMatrix(), quatToAxis(),quatToEuler(), axisToQuat(), matrixToQuat(), slerp(), minCols(), cbrt(), outerProduct(), covariance(), indexRows() and indexCols().

Added the trigonometric transforms fst, fct, fsst, fsct, fsct2.

MatrixOP functions maxVal() and minVal() have been changed to return the same number type as their input token, except when the input is complex in which case the return type is real SP or DP.

Curve Fitting Improvements

Added new Voigt built-in fit function. Fits a Voigt peak shape using peak area and Gaussian FWHM as two of its coefficients.

Added new dblexp_peak fit function. Fits a sum of two exponential terms having different decay constants and opposite signs. These new functions are like the old dblexp_XOffset fit function but use a different algorithm for the auto-guess that understands a double exponential peak.

ODR fitting is now thread safe. That means that you can do multiple ODR fits simultaneously using Igor’s preemptive threading techniques.

ODR fitting now has built-in parallelization. If you use a built-in fit function, or a thread-safe user-defined fit function, parts of the computation are done in parallel. The gain in performance may be modest or nonexistent. The biggest performance gains will come with user-defined fit functions that are expensive to compute and require relatively large numbers of coefficients.

The Curve Fit dialog now understands fit functions that have the Threadsafe keyword and fit functions that use inline declaration of the input parameters. It is also able to parse all-at-once fit functions in order to extract the number of fit coefficients and mnemonic coefficient names.

Image Processing Improvements

Increased capacity of 3D particle analysis in ImageAnalyzeParticles and added progress window.

Added a new output wave to ImageLineProfile that contains the computed scaled distance along the path.

Added new operation ImageComposite, which combines two images using one of 12 Porter-Duff compositing modes.

Data Import And Export Improvements

Igor 8 provides better handling of quoted strings in delimited text files, such as comma-separated values files.

You can now use a regular expression to control which objects are loaded by the LoadData operation

Added support for saving large TIFF files.

Added support for reading image metadata from BigTIFF files.

Added support for saving (LZW, Adobe) compressed TIFF files.

Writing 64-bit integer waves to Igor Text files and loading them from Igor Text files now works.

The Load Matlab MAT File interactive dialog now has a Done button. Clicking Done skips all remaining Matlab matrices.

The Load popup menus in the Load Matlab MAT File interactive dialog sometimes failed to produce the selected behavior. This is now fixed.

Starting with Igor Pro 8.00, after loading a matrix that results in an Mx1 2D wave, MLLoadWave automatically redimensions the wave as an M-row 1D wave.

The HDF5 file loader can be called from an Igor preemptive thread.

Data Acquisition Improvements

Added the ability to handle the addition of serial ports without restarting Igor to VDT2.

The VISA XOP is now threadsafe.

Miscellaneous Improvements

On Windows, Igor 8 works as an ActiveX Automation server in 64 bits as well as in 32 bits.

Macintosh: The Open File, Choose Folder, Create Folder, and Save File dialogs now display a message if the /M flag is used. This functionality was broken in Igor Pro 7 on Mac OSX 10.11 and greater due to an OS change, but has now been restored.

New operation SetIdlePeriod allows changing the period of Igor’s idle loop. This will be of interest primarily to programmers of background tasks.

Added /NOTE flag to SplitWave to copy the wave note from the source to all the newly generated waves.

For the sake of completeness, the new ExperimentInfo operation provides programmatic access to some of the information presented by File→Experiment Info. The need to call ExperimentInfo should be very rare.

Changed the way Igor checks for abort keys (Cmd-period on Macintosh, Ctrl-Break on Windows, Shift-esc on both). There is a two-second delay before the beach ball cursor appears and the Abort button appears in the status bar. In Igor 7, you can’t abort anything until that happens. In Igor 8, you can use the abort keys before the beach ball cursor appears.

Camera Window Improvements

Windows: Camera windows now display correctly when overlapped by another window.

New And Improved Example Experiments

Modified Example Experiments

  • Live mode Demo
  • Colorscale Demo
  • Map Projections Demo
  • FM Modulation Movie Demo
  • ImageSpeedTest Demo
  • GizmoEarth Demo
  • Mobius Demo
  • FlightPath Demo

New Example Experiments

  • Open Slicer Repeat Demo
  • Igor TeX Demo
  • FM Modulation Movie Old Demo
  • GizmoScatterCursors Demo
  • Venn Demo




Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More