Igor Pro 10 Changed and New Features

Igor Pro® 10 contains many improvements over Igor Pro 9.

For a shorter and more visual guide to Igor Pro 10's new features than is detailed below, see our Igor Pro 10 Highlights page.

Major Igor Pro 10 improvements include:

  • Python integration, allowing you to directly execute Python code and exchange data between Igor and Python.
  • MMI XOP, which uses the popular Micro-Manager project, allows you to control a wide range of hardware such as scientific cameras, light-sources, shutters, filter-wheels, XY- and Z-axis stages, etc.
  • Procedure window code folding, improved line continuation, syntax highlighting and "jump to routine" via Ctrl+click.
  • Improved Multipeak Fitting improves automatic peak finding and error handling.
  • Added a second layer for displaying image plots. The new layer displays an image above traces and axes.
  • New ProgTop and UserTop drawing layers draw above annotations.
  • Added new builtin Page layout margin guides, user guides can be snapped to a fraction of the printable page dimensions.
  • Controls can be attached to guides for easier layout of resized panels.
  • Multi-language support in one Igor Pro application.
  • New operations and functions for MMI instrument control and acquisition, for Python, text-to-speech, and interpolation.
  • 20 new MatrixOP functions: binMean(), binVar(), , enoise(), imit(), indexMatch(), median(), not(), quatFromSpherical(), quatInverse(), removeCol(), removeCols(), replaceInfs(), rowDiff(), scaleChunks(), scaleLayers(), setType(), subtractCols(), subtractMin(), subtractRows(), and zapZeros().

Notable Technology Changes

Igor Pro 10 does not run on macOS except under Windows virtual environments.

See the announcement of discontinuing Igor development for macOS here.

Igor Pro 10 on Windows 10 and Later

Igor Pro 10 is based on the Qt 6 cross-platform application framework, which handles high resolution screen scaling differently (better) than Qt 5 did.

Unlike Igor Pro versions 7-9, which shipped as both 32-bit and 64-bit applications, Igor Pro 10 is 64-bit only. This means that any XOPs you use with Igor Pro 10 must also be 64-bit.

Igor Pro 10 is a native x64 application and WaveMetrics only supports running Igor Pro 10 on machines with Intel/AMD CPUs.

However, the Igor Pro 10 installer should also allow Igor to be installed on Windows ARM64 machines (both virtual and non-virtual). In order to run Igor 10, your machine/OS will need to support x64 emulation (we recommend Windows 11 24H2 or later for best results). Note that WaveMetrics does not explicitly support running Igor Pro 10 under ARM emulation, but we may do so in the future. Please report bugs to us if you are using such a configuration, but realize that our ability to fix them may be limited.

Igor Version Compatibility

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

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

Once you use features added in Igor Pro 10 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.

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

Igor Pro 10 Language Support

Igor Pro 10 automatically uses the language of your operating system to determine the language that is used for the user interface and documentation. In earlier versions, WaveMetrics provided separate English and Japanese applications which required separate licenses.

This means that if you run Igor and your OS language is Japanese, Igor will also use Japanese. You can change this behavior if you want.

Currently almost all documentation is in English only. This might change in the future.

Features Removed From Igor Pro 10

The PDF manual has been removed.

The operations NewCamera, ModifyCamera and GetCamera are no longer supported. Camera support is provided using the MMI XOP.

XOP Changes in Igor Pro 10

The new MMI XOP, which uses the popular Micro-Manager project, allows you to control a wide range of hardware such as scientific cameras, light-sources, shutters, filter-wheels, XY- and Z-axis stages, etc..

XOPs Removed From Igor Pro 10

The MultiClamp700xCommander XOP has been removed. It was considered obsolete in Igor Pro 9 and was 32-bit only. A 64-bit fork of the XOP, maintained by a third-party, is available at <https://github.com/AllenInstitute/mcc-xop>. WaveMetrics has not used this third-party XOP and cannot provide support.

The IgorGIS XOP has been removed. It was marked as obsolete in Igor Pro 9 because we no longer have the expertise to maintain the XOP, update third-party libraries it uses when security fixes are available, and answer support questions. If you have the 64-bit IgorGIS64.xop that shipped with Igor Pro 9 you can likely still use that XOP with Igor Pro 10.

Packages Removed From Igor Pro 10

The usual reason for making a package obsolete is that a newer, better way to accomplish it is available. Since you may have old experiment files that depend on such packages, we never actually remove them.

The Percentile and Box Plot package is obsolete and has been moved to the WaveMetrics Procedures\Obsolete folder. References to the package have been removed from the Packages menus. You can still use it, but the built-in box plots are superior (see Box Plots and Violin Plots). If you really want to use the procedure package:

#include <Percentile and Box Plot>

Guide To Igor Pro 10 Improvements

Python Integration

Performance Improvements

Display Improvements

User-Interface Improvements

Behavior Changes

Programming Changes

Programming Improvements

Function and Operation Improvements

Data Browser Improvements

Window Browser Improvements

Dialog Improvements

Graphing Improvements

Box and Violin Plot Improvements

Table Improvements

Page Layout Improvements

Notebook Improvements

Help Improvements

Graphics Export Improvements

Procedure Window Improvements

Gizmo Improvements

Drawing Improvements

Annotation Improvements

Control and Control Panel Improvements

Analysis Improvements

Statistics Improvements

MatrixOp Improvements

Multipeak Fitting Improvements

Image Processing Improvements

Data Import And Export Improvements

Miscellaneous Improvements

New And Improved Packages

New And Improved Example Experiments

Python Integration

Igor Pro is now capable of direct, bi-directional communication with the Python programming language (see Python Overview).

Call your favorite Python libraries from Igor procedure code using the Python and PythonFile operations, or execute Python code line-by-line using our dedicated Python Console at Python🠖Open Console.

python console in Igor Pro 10

The igorpro Python module that is shipped with Igor Pro 10 provides an intuitive API for passing data back and forth between Python and Igor (see Python Module Reference). It has built-in conversions with the NumPy library (https://numpy.org), so that passing waves into analysis functions that expect a NumPy array is relatively simple:

import igorpro
import numpy as np
 
# Get a list of Igor waves inside a data folder
dataset = igorpro.folder(’root:analysis’).waves()
for wave in dataset:
    # Convert each wave into a numpy array and run the analysis
    results = runCalculations(wave.asarray())

Pass Python objects back to Igor, which are automatically converted into the appropriate Igor types:

// Run a Python function that returns a numpy array, and return it to an existing Igor wave
Make/FREE arrayFromPython
Python execute = “arr : ndarray = waveAnalysis()", array = {"arr", arrayFromPython}

Performance Improvements

Improved performance of NewPath and IndexedFile, particularly in code similar to the PrintFoldersAndFiles example function in the IndexedDir help topic.

• When running on Windows 11, MultiThread and ThreadGroupCreate can now use as many logical processors (threads) as the hardware supports. Previously Igor only used up to 100 logical processors even if more were available. Due to operating system limitations, when running on Windows 10 only 64 logical processors can be used.

Display Improvements

Qt and WaveMetrics have improved the handling of screens having various Windows Display Settings scaling factors:

  • Improved quality of graphics for a variety of applications when displaying on a monitor with a fractional scaling factor (that is, Display Scaling Factor of percentages not an integer multiple of 100%). This work is happening incrementally-please tell us if you use such a monitor and find something ugly at 125%, 150%, 175%.
  • Improved handling of mixed monitor resolution. If you move Igor’s MDI window (the big window containing all graphs, tables, etc.) from a one monitor to another with different Display Scaling Factor, you will see graphs redraw, etc. to adjust to the new resolution.

With that said, there are still some known problems that sometimes happen when using a scaling factor that is not a multiple of 100%:

  • Graphics glitches around window frames:
  • graphical glitches at non integer scaling factors
  • You can temporarily clear these glitches by resizing Igor’s main window slightly or by minimizing and then restoring the main window.
  • Text glitches (seen here on the rotated 0 characters on the left axis):
  • rotated tick label tiny glitch on zeros
  • These glitches are not known to occur when exporting graphics or copying to the clipboard.
  • Sizing/positioning glitches
  • We see issues in which the size or position of some part of a window changes by a small amount (usually 1 or 2 pixels) when moved or resized. The example below shows title bar buttons that are slightly different sizes but the same thing can be seen with drawing of objects in windows such as axes, tick labels, etc.
  • Window title bar buttons sometimes do not work
  • window title bar style bug workaround
  • In some cases clicking on the minimize, maximize, and/or normalize buttons in a window's toolbar has no effect. Other than changing the display's scaling factor, a workaround for this is to use a different style. Select the Misc🠖Miscellaneous Settings menu item to open the Miscellaneous Settings dialog, then select the Miscellaneous category, then check the Use Fusion Style checkbox.
  •  
  • A temporary workaround is to right-click on the title bar and use the contextual menu to control the window instead of clicking the buttons.

Setting your display scaling factor to 100% or 200% in Windows Settings typically eliminates all of these issues. We will continue to work to address these kind of problems, but we think some of them are problems in Qt, so our ability to fix or workaround the problems may be limited.

Since it is difficult to test multiple configurations and situations, if you encounter apparent scaling problems other than those above, please report the problems to support@wavemetrics.com. Make sure that you include the information in the Help🠖System Information dialog.

User-Interface Improvements

  • Control Panel Expansion can be disabled in the Misc🠖Miscellaneous Settings dialog.
  • Experiment startup commands and recreation macros can be viewed in the File🠖Experiment Info dialog.
  • The Graph🠖Select Control submenu previews which control will be selected by drawing a red rectangle around it.
  • Added a grid submenu to the draw tools contextual menu. Right-click in a control or graph while in Draw mode and select Grid to use (see Modes of Operation).

Behavior Changes

  • The default behavior of scrolling the mouse wheel in a Gizmo window has been changed from rotate to zoom. You can change this setting in the Gizmo category of the Misc🠖Miscellaneous Settings dialog.
  • Listbox controls using special mode 1 and 2 (see the Listbox special keyword) now honor the control’s font settings when drawing the title on the picture in each listbox cell. Because previously the text was drawn using some poorly defined default font, this will cause a slight change in Listbox controls that don’t set font, font size or font style. In our testing the font size before this fix was 10, the default is 12. If you have set font, font size or font style, you will see a potentially large change in appearance because those settings will now be honored.
  • Menu item text sent to PopupMenu action procedures has (the rarely used) menu accelerator ‘&’ character(s) removed so that the text looks like what you see in the menu item. This applies in other cases where the menu item text is returned to, say, ControlInfo, GetLastUserMenuInfo, and DoIgorMenu via S_value or PopupContextualMenu via S_selection. PopupMenu popMatch accepts strings with or without the accelerator ‘&’ characters for backwards compatibility. This mostly applies to menu items with “&&” in them that are intended to display a single “&", but that didn’t display properly in PopupMenus before Igor 10.
  • Printing from threads: In Igor Pro 10, limits on the number of history lines that could be printed from an Igor pre-emptive thread (see ThreadSafe Functions and Multitasking) have been removed. Igor 10 also improves ordering of output lines between the main thread and preemptive threads. These changes affect anything that puts text into the history window. That includes the Print and printf operations and any operation that prints results in the history, such as CurveFit. We presume that use of the Print and printf operations in threaded code is primarily for debugging, and that you will want to see all of your printed output. Removing the limit, however, has the potential to print huge amounts of text to the history, with extreme effects on performance.
  • Because of the possibility of harmful effects of runaway printing from threads, we have added a new SetIgorOption keyword that allows you to reestablish limits. For more information, see the Printing from Threads subsection in the documentation for the Print operation.
  • When dragging drawing objects to resize, reposition, or rotate, the drag is now live. That is, the objects are changed as you drag. Previously, an outline showed the result you would get and the objects weren’t changed until you released the mouse.
  • Graph🠖Show Trace Info Tags and Table🠖Show Column Info Tags no longer affect the display of tooltips which are controlled by a tooltip hook function. Programmers are encouraged to add an easy way to their UI for users to turn on and off any tooltips that are controlled by tooltip hook functions.
  • CleanupName no longer ignores the maxBytes parameter when called from a threadsafe user-defined function.

Programming Changes

  • In Igor 10, graph window hook functions are now called for mouse move, mouse down, and mouse up when the mouse is over an annotation. In Igor 9 and earlier this event was claimed by Igor and never arrived at the window hook function.
  • Igor 10 no longer marks an experiment as needing to be saved when a global variable or string is assigned to the same value it already had. If this change causes a problem in your code, call the ExperimentModified command to mark the experiment as needing to be saved.
  • As of Igor 10, the main Procedure window may now have a regular module name defined for it with:
  • #pragma moduleName = name
  • Igor 10's compiler will refuse to compile "unreachable" code in switch and strswitch statements, such as the two print statements in this code:
  • switch(val)
        print "001" // Igor 10 will stop compiling here because this code will never be executed
        case 1:
        ...
        break
        print "002" // same thing: a compile error because of unreachable code
        break
        default:
        ...
        break
    endswitch
  • Debug on User Abort no longer invokes the debugger if a programmatic Abort, AbortOnRTE or AbortOnRTE operation is called; the debugger is invoked only when the user aborts execution by clicking the Abort button in the status bar when it is relabeled to “Debug". See Debugging on Error.
  • The AnnotationInfo function now returns "" if the window has no annotations or if the named annotation does not exist. Before Igor 10 these conditions would cause a runtime error.
  • The PauseForUser operation now issues an error if your main window or target window are missing or of the wrong type.

Programming Improvements

  • Constants in other independent modules or regular modules can be referenced just like functions can using double or triple names.
  • Static constants in regular modules can be accessed by double names.
  • For example:
  • switch(val)
        case OtherIM#regularModuleInOtherIM#staticConstantName:
        ...
        break
        case OtherRegularModule#staticConstantName:
        ...
        break
    endswitch
  • Errors in preemptive threads now return nearly as much information as those in the main thread.
  • The Debugger Objects List and structure contents can be sorted by name or type.
  • The Debugger’s tooltip and expression inspectors show the value of a symbolic path when given the literal symbolic name of the path. A new Symbolic Paths inspector has also been added.
  • When calling a function through Waveform Arithmetic and Assignment auto indexing The Debugger now shows in the caller function the current values of p, q, r, s in use by the called function.
  • The Debugger can step into/through Threadsafe Functions called from the main thread.
  • Graph style macros that take a string and a variable as the first two parameters can be used as append style macros:
    • The graph name and number of already-existing traces in that graph are passed in, and any remaining parameters are not filled in (which might invoke a Missing Parameter Dialog).
    • See Dialog Improvements for how these graph style macros with parameters can be used in the append dialogs.
  • Line Continuation is now supported nearly everywhere in both functions and macros, as long as the escaped line ending does not split a simple name over two lines. Compound name components can be on successive lines, though.
  • // Compound name components can be on successive lines:
    Macro CallStaticFunction()
        Variable v1= MyModule#functionInMyModule() // usual syntax to call Static Functions
        // demonstrate a compound name with line continuation
        Variable v2 = MyModule \
                    #        \
                    functionInMyModule()
        Print v1,v2
    EndMacro
     
    // Line continuation can also be applied to a line-ending comment:
    Function [WAVE w] // output wave \
        Example4(String name,       // input: created wave’s name \
                Variable length,    // input: # of points \
                Variable avg,       // input: mean value  \
                Variable noise)     // input: gnoise value
        Make/O/N=(length) $name \
                            = avg + gnoise(noise)
        WAVE w= $name
    End
  • A DFREF can now be used with the Multiple Return Syntax in the output list:
  • [DFREF dfr] = MRSFunctionReturningDFREF()
     
    Function [DFREF df] MRSFunctionReturningDFREF()
        DFREF currentDF = GetDataFolderDFR()
        NewDataFolder/O currentDF:subfolder     // create a subfolder
        DFREF df = currentDF:subfolder          // and return a reference to it
    End
  • WaveHash and Hash now support four SHA3 variants as well as the four xxHash algorithms. The xxHash algorithms are non-cryptographic hash algorithms that are substantially faster than most other supported algorithms and have other desirable behavior. See for more information on these algorithms.

Function and Operation Improvements

  • GetFileFolderInfo now returns Windows-only file version information in S_languageAndCharsetList and S_versionInfo and accepts the /LANG=languageCode /CSET=charSetCode flags.
  • ListToTextWave operation: if new optional keySepStr is specified (and isn’t “"), returns 2-column text wave with keys in column 0 and values in column 1 with Column dimension labels of “key” and “value".
  • IgorInfo(0) returns SCALE=1 or 2 and RESOLUTION=dpi for each screen. SCALE is the display’s magnification value as an integer; it will be 2 when you choose 200% for “Scale and layout” in the Display Settings control panel. dpi is the logical screen resolution, aka DPI, typically 96 on Windows.
  • IgorInfo(17) returns the current experiment’s startup commands and recreation macros.
  • IgorInfo(18) returns the truth that the existing experiment is closing.
  • FunctionInfo("") now returns information for the running function.
  • Added color support in DoAlert and Abort by allowing HTML. For example:
  • Function foo()
        String url = "https://www.wavemetrics.com"
        String msg = "<p style=\"color:red;\">This is red text.</p>" + \
                     "<p>Click <a href=\""+url+"\">here to buy Igor</a>.</p>"
        DoAlert 0, msg
    End
  • Printf, sprintf, etc. have new %W2P and %W3P options that interpret the precision parameter as the total number of significant digits instead of the number of fractional digits as for %W0P and %W1P.
  • Flag-digits 0 and 1 interpret the precision value in “%.<precision>W...” as the number of digits in the fractional part of the printed number. Flag-digits 0 and 1 precede Igor 10.
  • Flag-digits 2 and 3 interpret the precision value in “%.<precision>W...” as the total number of digits used to print the integer and fractional parts of the printed number. The printed value is rounded to that number of digits, similar to how %g interprets <precision>. Flag-digits 2 and 3 were added for Igor 10.
  • %W Examples
  • printf "%.2W0PHz", 12.342E6     // prints 12.34MHz
    printf "%.2W1PHz", 12.342E6     // prints 12.34 MHz
    printf "%.0W0Ps", 12.342E-6     // prints 12µs
    printf "%.0W1Ps", 12.342E-9     // prints 12 ns
    printf "%.2W2PHz", 12.342E3     // prints 12KHz
    printf "%.4W3PHz", 12.342E3     // prints 12.34 KHz
    printf "%.2W2PV", -12.342E-3    // prints -12mV
    printf "%.4W3Ps", -12.342E-12   // prints 12.34 ps
  • Added the Say text-to-speech operation.
  • SplitWave now accepts /SCL=1 to copy the scaling and dimension labels from the source wave to the destination waves.
  • ImageTransform now supports the use of the /DEST flag so users can specify the output wave for the operation. /FREE is also supported to create free output waves in user functions.
  • ModifyImage includes the hide keyword to hide or show an image.
  • Display, Edit, NewPanel, NewGizmo, NewLayout, NewNotebook, NewWaterfall, NewImage, and OpenNotebook operations support a new /K=4 option which kills those windows with no dialog and is not saved with the experiment.
  • NewImage and AppendImage support 10 new packing modes for direct color images via the /PACK flag.
  • SpecialDirPath can return the location of the folder containing crash minidumps and other diagnostics by using the new “Igor Diagnostics” dirIDStr string.
  • SoundLoadWave can load more kinds of audio files, including μ-law, A-Law, AIFF and AIFC, WAVE, .mp3 and .mpeg4.
  • PlaySound plays unsigned 8-bit sound waves properly.
  • ImageLoad is now capable of loading TIFF files that use JPEG compression. This requires that the LibTIFF library be used to load the file. See the ImageLoad documentation for the /BIGT flag and the Loading TIFF Files section for more information.
  • PauseForUser has improved error messages for cases in which the names of the main or target windows are incorrect. They now tell you which window is incorrect or missing.
  • TraceInfo now returns the full path a trace’s contour Z wave as the value of the CONTOURZWAVE keyword. This path is empty if the trace is not associated with a contour plot.

Data Browser Improvements

  • When browsing an experiment, it is now possible to add the Points and Dimensionality columns to the object list. It is also possible to sort by these fields even if they are not displayed in the object list.
  • Resizing columns by dragging the divider in the object list now gives better results.

Window Browser Improvements

  • The Window Browser now shows a window’s unnamed and named window hooks and tooltip hooks, if any of those are set.

Dialog Improvements

  • Added graph style macro support to the Append Traces and Append Category Traces dialogs (before Igor 10 only the Display and New Category Plot dialogs had graph style macro support.)
  • Added separate memories of user’s selection of style macro that persist between Igor invocations. This allows a user to set up their preferred Display style macros and their preferred Append style macros only once and use them always.
  • If the selected style macro (which normally has no parameters) does have two or more parameters, then the graph name and number of already-existing traces in that graph are passed in, and any remaining parameters are not filled in (which might invoke a Missing Parameter Dialog).
  • Reorder Images dialog (Image🠖Reorder Images) now supports multiple image layers.

Graphing Improvements

  • Added a second layer for displaying image plots. The new layer displays an image above traces and axes.
  • Added support for 10 new image color packing modes in NewImage, AppendImage and ModifyImage operations.
  • Added two color tables: RedYellowGreen (256 colors) and RedYellowGreen10 (10 colors).
  • Improved marker standoff (ModifyGraph mstandoff) for text markers. Previously, the standoff was computed for whatever non-text marker happened to be specified. Now standoff is computed from the text bounding box.
  • Marker standoff now takes marker stroke thickness into account. Previously, a large value of marker stroke thickness (ModifyGraph mrkThick) would eat into the space reserved for marker standoff. This can cause small changes in the appearance of existing graphs.
  • Marker standoff can now be applied on a point-by-point basis.
  • Graph preferences useComma, useDotForX, and useLongMinus can now be captured in the Capture Prefs dialog for graph windows.
  • RemoveContour has a new /Z (ignore errors) flag.

Box and Violin Plot Improvements

  • Box Plots and Violin Plots can now be plotted on a log Y axis.

Table Improvements

  • The table contextual menu now has Cut, Copy, Paste, Insert Paste, and Clear menu items. Right-click in a table to use them.

Page Layout Improvements

  • Dragging a guide in a page layout indicates its position in the status readout at the bottom of the window. Fractions of the printable page width or height are displayed. Holding the Shift key down constrains dragged guides to some rational fraction of the printable page width or height.
  • Using the scroll wheel while holding down the Ctrl key changes the magnification level of the layout.
  • Holding down the Shift key while using the arrow keys to move a layout object accelerates the movement by a factor of ten.

Notebook Improvements

  • Using the scroll wheel while holding down the Ctrl key changes the magnification level of the notebook.
  • Special characters for Note, Warning, and Caution symbols can now be used in formatted notebooks. Use the Notebook🠖Special menu item or the Insert popup in the ruler toolbar.

Help Improvements

  • Using the scroll wheel while holding down the Ctrl key changes the magnification level of the help document.
  • Starting with Igor Pro 9, Igor sometimes left help files for XOPs open after startup. This was of little consequence, but meant that there was an extra help window open and an extra entry in the Help🠖Help Windows list. This has been fixed for Igor Pro 10. Note that if you intentionally open an XOP’s help file, the window will stay open as you expect.
  • The list of help topics in the Topics list of the Help Browser’s “Help Topics” tab is now properly ordered when “Sort topics” is unchecked. This was broken since Igor Pro 7.

Graphics Export Improvements

  • Error bars are now exported to SVG correctly. Previously, the clipping of error bars when exporting to SVG format was incorrect. Error bars and error boxes that should have been outside the plot area were drawn in the resulting SVG image. Clipping is now correctly handled during SVG export and error bars that are outside of the plot area in Igor Pro will not appear in an exported SVG image. Error shading also exports correctly to SVG and was never an issue.
  • Note
  • Error ellipses will still not properly clip when exporting to SVG. Please zoom the plot area in or out to achieve the necessary result.

Procedure Window Improvements

Code Folding

Procedure windows now support code folding. Clicking the code folding arrows in the left margin toggles whether a code block is hidden or visible. Hovering the mouse over the ellipsis indicator to the right of a folded code block temporarily reveals the hidden code:

code folding reveal by clicking on ellipsis

There is a right-click menu item that allows users to fold/unfold multiple code blocks at once. Code folding can be turned on and off in Misc🠖Miscellaneous Settings under the Text Editing section.

Statement Completion

Completion suggestions are now offered for operation keywords and special functions (i.e. MatrixOP and APMath). General improvements to code completion in various contexts have been made.

Improved code completion in Igor Pro 10

Syntax Highlighting

Operation keywords now have syntax highlighting, which is configurable in Misc🠖Miscellaneous Settings under the Text Editing section.

Go to User Function

Clicking on a user-defined function while holding down the Ctrl key will navigate to the top of the function definition. 

Scroll Magnification

Using the scroll wheel while holding down the Ctrl key changes the magnification level of the procedure window.

Persistent Function Hints

Function hints that appear in the status bar at the bottom of the procedure window no longer disappear while typing out the arguments of a function or operation call. 

External Editors

A new Tools icon in the procedure window status bar makes it easy to open the file associated with the procedure file in an external text editor. This only works for procedure windows that represent stand-alone files.

Gizmo Improvements

  • Rotating and panning a Gizmo scene with the mouse now supports holding down the Shift key to fix the axis of rotation/pan. Holding Control temporarily switches between rotation and pan mode.
  • 3D scatter plots now support ‘projection’ of the 3D data onto one or more 2D planes, which are controlled in the Gizmo scatter plot dialog. This feature adds the projection, projectRGBA, and projectMarkerSize properties to the ModifyGizmo operation.
  • Marker quality in 3D scatter plots can now be directly customized by the user using the quadricFacets property in the ModifyGizmo operation. The number of facets used for drawing the markers is accessed through the Gizmo scatter plot dialog in the ‘Shape and Size’ tab.
  • Gizmo box object now supports a color property (faceColor) for each face of the cube.
  • Improved drawing of annotations in Gizmos on displays with Windows Display Settings scale factor of non-integer multiples of 100%.

Drawing Improvements

  • The DrawArc command has a new /ORIG flag which completes the arc by drawing lines to the origin. (If the arc has arrows, they still point to the first or last point of the arc’s curve, not to the origin.)
  • Graphs have two new drawing layers that draw above (in front of) annotations. The two layers are ProgTop and UserTop. See Drawing Layers.
  • The various drawing commands, DrawLine, DrawRect, etc. will not create draw objects with coordinates that are Inf or NaN. Previously that wasn’t checked, and a copy of such an object caused a crash.
  • Editing DrawPoly and DrawBezier objects displays editing hints on where to click and modifier keys to hold down for anchor or control point constraints and shape completion.
  • It is easier to drag a DrawBezier object’s control handle independent of the corresponding control handle by holding down the Alt key when clicking or dragging the control handle. In this mode the mouse cursor now changes to a distinctive “convert control point” cursor.
  • It is easier to “close” (join the ends) of DrawPoly and DrawBezier objects; the mouse cursor now changes to a “close” cursor which has a small circle added to the crosshair cursor.
  • Added more contextual menus for editing DrawPoly and DrawBezier objects, including new “Complete Polygon” and “Complete Bezier” items. In edit mode you can right-click an anchor, control point, or segment to display these contextual menus.
  • DrawAction with the commands keyword now initializes the S_recreation string to an empty string instead of a null string when there are no drawing objects. It also sets V_flag to the number of drawing objects in the list in S_recreation.
  • The recreation macros for DrawPoly and DrawBezier objects now start a new line when a NaN coordinate is encountered. This makes it easier to identify segments of a polygon or Bezier.
  • For the same reason DrawBezier object recreation macros put the initial segment’s 4 xy points (starting anchor, control point 1, control point 2, ending anchor for the first segment and starting anchor for the next segment) on the first line, and each following segment’s 3 xy points (control point 1, control point 2, ending anchor) on successive lines.

Annotation Improvements

  • Added additional error checking during parsing of Annotation Text Escape Codes in annotations, labels, and controls.

Control and Control Panel Improvements

  • Control recreation macros use integers instead of coordinate.00 whenever possible; non-integer coordinates still use %.2f format.
  • It is now possible to lay out controls in a control panel using layout guides. Previously, we called these guide lines “subwindow guides” but since we have expanded the scope of these guide lines, we now call them “layout guides.” Each control has six anchors that can be attached to layout guides. Those anchors are Left, Horizontal Center, Right, Top, Vertical Center, and Bottom. Attaching one anchor will cause a control to move, following the layout guide to which it is attached. Attaching two anchors will cause a control to resize, if that is allowed.
  • The drawing tool palette has a new button for “Guides Mode” which allows you to edit layout guides and use the layout guides to control subwindow and control layouts. For basic information on layout guides, Guides Mode, and subwindows, see Subwindow User-Interface Concepts.
  • For information on using layout guides with subwindows, see the Guides Mode for Laying Out Subwindows help topic. That help topic existed previously, with the name “Subwindow Layout Mode and Guides". Along with a change in the topic title, we have substantially rewritten the section for clarity and to reflect the new features.
  • Using layout guides to lay out controls makes it much easier to create control panels in which the controls move and resize in useful ways. For instance, it is very easy to create a ListBox control that occupies a constant fraction of a control panel window as the window is resized.
  • Dragging a guide while holding the Shift key down constrains dragged guides to the nearest rational fraction of the panel width or height. The fraction chosen is indicated by an overlaid graphic.
  • It is now possible to create and edit layout guides without requiring the creation of an active subwindow. This is necessary to allow editing layout guides for controls.
  • To support attachment of controls to layout guides, the various control operations now have a “guides” keyword to specify the attachment of layout anchors on the controls to the layout guides. See, for instance, Button.
  • Checkboxes and disclosure controls in ListBox control cells now respond correctly to control panel expansion.
  • Fixed a bug that existed in Igor Pro 9: A ListBox control with disabled cells do not respond to mouse clicks, and therefor are not selectable via a mouse click. However, if you dragged the mouse across a disabled cell, it could be selected. That loophole has now been closed.

Analysis Improvements

  • It is now possible to use static functions for the derivative function with the IntegrateODE operation. It requires that the procedure window has a ModuleName specification, and you must name the function using the full ModuleName#FunctionName.
  • Changed binomial(n,k) to return 0 when k>n.
  • Added Interp4D and Interp4DPath functions.

Statistics Improvements

  • Added to WaveStats optional parameters for the /W flag that support complete bypass of the creation and initialization of the various V_ variables.

MatrixOp Improvements

  • Added to MatrixOP the following functions: subtractMin(), indexMatch(), removeCol(), removeCols(), scaleLayers(), scaleChunks(), subtractRows(), subtractCols(), quatFromSpherical(), quatInverse(), median(), zapZeros(), replaceInfs(), enoise(), setType(), rowDiff(), binMean(), binVar(), limit(), not().
  • Changed MatrixOP integer conversion functions: uint8(), int8(), uint16(), int16(), uint32() and int32() to return 0 for NaN input and return the largest/smallest value for +-INF.
  • MatrixOP compile is now testing for errors previously reported only at runtime.

Multipeak Fitting Improvements

  • Thanks to the hard work and generosity of Igor power user Stephan Thürmer (AKA “chozo” in the Igor Forums), the Multipeak Fitting package continues to be updated and improved.
  • Increased robustness in many areas by improved error handling, especially in regards to out-of-bounds data, empty waves, and NaNs.
  • Added support for hold-strings waves.
  • 100% and 200% display scaling now both supported.
  • Copy/paste shortcuts now work directly in the table UI.
  • Auto-locate no longer returns any zero-width peaks.
  • Multiple alert and error message improvements.

Image Processing Improvements

  • Fixed ImageSeedFill which ignored ROI wave when working on 2D source image.
  • Changed ImageLoad with the /LTMD flag so that the tag text wave consists of single tags per row starting with the formal name of the tag. To the extent possible the tags are now listed in increasing order.

Data Import And Export Improvements

  • HDF5SaveData Now supports /TRAN=2 and /TRAN=3 for better control over transposing of multi-dimensional data. In particular, /TRAN=3 uses automatic multithreading to accelerate execution.
  • The HDF5 library was updated to 1.14.6. Also new are the BLOSC2 and ZSTD dynamic filter plugins, see HDF5 Dynamically Loaded Filters.
  • XLLoadWave now loads non-ASCII worksheet names from Excel files that use the Excel 97-2003 file format (BIFF8).

Miscellaneous Improvements

  • Added new graphemeLength and UTF8CharLength functions to aid in parsing and manipulating Strings containing UTF-8 text. See also Characters Versus Bytes.

New And Improved Packages

Heat Map and Dendrogram package

  • Dendrogram plots can now be created in a subwindow.
  • Accessor functions have been added to help programmers who want to use the dendrogram plots from their own code. This includes a setting that preserves the dendrogram structures so that a new dendrogram can be made reusing those structures.

New And Improved Example Experiments

Modified Example Experiments

  • File🠖Example Experiments🠖Analysis🠖Spherical Triangulation Demo

New Example Experiments

  • File🠖Example Experiments🠖Tutorials🠖Wave Scaling Tutorial
  • File🠖Example Experiments🠖Python🠖Machine Learning
    Demonstrates a simple machine learning task using the TensorFlow Python library.

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More