Igor Pro 7 Changed and New Features

See www.igorpro.net for an executive summary of Igor Pro 7 features that are new relative to Igor 6.3.

See Guide to Igor Pro 7 Improvements for a more detailed list of new Igor Pro 7 features.

FAQ

We maintain a list of Frequently Asked Questions about new/changed features at: www.igorpro.net/igor-pro-7-beta-faq.

Notable Technology Changes

Igor Pro 7 is based on the Qt toolkit and can render graphics using either Qt or platform native graphics. See Graphics Technology for details.

Qt is a cross-platform application framework. For more on Qt, see www.qt.io.

Igor Pro 7 uses Unicode internally. Older versions of Igor used non-Unicode encodings such as MacRoman, Windows-1252 and Shift-JIS.

Igor Version Compatibility

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

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

Once you use features added in Igor Pro 7 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 your Igor files before opening them with Igor 7.

Some obsolete features of earlier versions of Igor Pro are no longer supported. See Features Removed From Igor Pro 7.

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

Programmers migrating Igor 6 procedure code to Igor 7 should read Text Encoding Programming Issues.

There is a compatibility issue related to the Symbol Font.

Use of Unicode in Igor Pro 7

Igor Pro 7 uses Unicode internally. Older versions of Igor used non-Unicode text encodings such as MacRoman, Windows-1252 and Shift-JIS. Igor Pro 7 must convert from the old encodings to Unicode when opening old files. It is not always possible to do this conversion right. You may get incorrect characters or errors when opening files containing non-ASCII text.

For a discussion of this issue, see Text Encodings.

There is a compatibility issue related to Symbol font. For details, see Symbol Font.

Programmers migrating Igor 6 code to Igor 7 should read Text Encoding Programming Issues.

Features Removed From Igor Pro 7

The Browse Waves dialog has been removed. The Data Browser now provides almost all functionality of the Browse Waves dialog with a few exceptions. You can relocate a wave to a file and save a wave or a copy of a wave to a file using the Save Waves Dialog. To adopt a shared wave, right click on the wave in the Data Browser and select Adopt Wave.

On Windows, QuickTime movie creation and play are no longer supported. Use Windows avi instead. When using PlayMovieAction, you must use the open and ref keywords.

On Macintosh, NewMovie does not support the /I flag. To use a codec other than the default 'rpza', you can use the new /CTYP flag. See the NewMovie documentation for details.

The Fit Width and Fit Page items were removed from the Magnification menu that appears in notebook and procedure windows. These modes work well only in situations where there is a well-defined page size such as in Adobe Acrobat.

The Notebook operation magnification keyword now treats values 2 (formerly Fit Width) and 3 (formerly Fit Page) the same as 1 (Default magnification).

The Notebook operation statusWidth keyword is now ignored since the status bar is always the same width as the notebook window.

A Window Hook function can no longer prevent the killing of a window by returning 2 from the kill event. You must use the killVote event instead.

Removed support for DDE (dynamic data exchange) functions. This change affects Windows only as DDE was never supported on Macintosh.

It is no longer possible to print the contents of the command history window. (However, the contents can be copied to the clipboard.)

XOP Changes in Igor Pro 7

A bug in byte-swapping in NIGPIB2 was documented and a workaround provided. If you use NIGPIB2 to read or write binary data, see NIGPIB2 Binary Operations Byte Order for important information.

XOP Compatibility

Existing Igor Pro 6 XOPs should work except for those that create windows or dialogs. Dialogs may not work correctly. If an XOP creates a window it is likely to crash.

To run an XOP with a 64-bit version of Igor, the XOP must be ported to 64 bits. For Igor Pro 7, almost all WaveMetrics XOPs are available in 32-bit and 64-bit versions on both Macintosh and Windows. Some third-party Windows XOPs have been ported to 64 bits but very few Macintosh XOPs have been ported.

If you are an XOP programmer you can continue to use XOP Toolkit 6 with the caveats listed above. XOP Toolkit 7 will address these caveats.

XOPs Removed From Igor Pro 7

The functionality previously provided by the following XOPs has been built into Igor and the XOPs have been removed, with no change in functionality:

The functionality previously provided by the following XOPs has been built into Igor and the XOPs have been removed, with some change in functionality:

The following XOPs are considered obsolete. They are no longer supported by WaveMetrics but may be useful to some customers and are therefore still shipped with Igor:

The following XOPs are not shipped with Igor 7. If you rely on any of these XOPs, you may be able to use the version of the XOP from Igor 6, however this will not work in 64 bits on Macintosh. Functionality of some XOPs has been partially or completely replaced by other XOPs, as indicated below:

XOP Alternatives
GetInputState
  • Use the built-in GetMouse operation to replace the MouseState function.
  • Use the built-in GetMouse operation to replace the MousePosition function.
  • Use the built-in GetKeyState function to replace the KeyboardState function.
GISLoadWave
  • Use the Igor 6 version of the XOP.
  • Switch to the newer IgorGIS XOP.
GWLoadWave
  • Use the Igor 6 version of the XOP.
HFSAndPosix
  • Use ParseFilePath(9) to replace the HFSToPosix function.
  • Use ParseFilePath(10) to replace the PosixToHFS function.
NIGPIB
  • Use the Igor 6 version of the XOP.
  • Switch to the newer NIGPIB2 XOP.
QT Grabber
  • Use NewCamera, ModifyCamera and GetCamera.
SensoGrabber
  • No longer supported; Sensoray stopped supporting drivers with Windows XP.
Surface Plotter
  • Use the Igor 6 version of the XOP.
  • Use Gizmo. See 3D Graphics help topic for details.
VDT
  • Use the Igor 6 version of the XOP.
  • Switch to the newer VDT2 XOP. See Changes in VDT2 Relative to VDT help topic for details.
Wildpoint
  • Use the Igor 6 version of the XOP.
  • Switch to the Smooth operation with running-median filtering.

Guide To Igor Pro 7 Improvements

Here are the Igor Pro 7 improvements discussed in this file.

User-Interface Changes

Behavior Changes

Programming Changes

Unpacked Experiment Changes

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

Drawing 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

Printing Improvements

Programming Improvements

Network Communication Improvements

Miscellaneous Improvements

New And Improved Example Experiments

User-Interface Changes

Igor now supports unlimited undo or redo states. In addition, many more actions are now undoable. However, to prevent an impact on performance undo/redo is only supported when making interactive changes. Making modifications from a running function or macro completely discards the undo/redo state.

Syntax coloring of procedure windows can now be controlled from the Text Editing category of the Miscellaneous Settings dialog. See Syntax Coloring for more information.

The Igor application now has a status bar on both Windows and Macintosh. In SDI mode (used on Macintosh), the status bar is at the bottom of the Command Window. In MDI mode (Windows) it is at the bottom of the MDI frame window. On Macintosh, this provides a place for the Abort button for those who have trouble remembering the Cmd-period abort key.

The object browser control has been completely rewritten. This is the control used to view the list of global objects (data folders, waves, variables, and strings) in the Data Browser as well as in built-in dialogs (e.g. WaveStats). For more information, see the Dialog Wave Browser help topic.

In Igor 6 on Windows, to nudge text or a picture up or down you had to press Ctrl-Alt-Up-Arrow or Ctrl-Alt-Down-Arrow. In Igor 7 this is changed to Alt-Up-Arrow or Alt-Down-Arrow because Ctrl-Alt-Down-Arrow is interpreted by Windows 8 to mean "flip display vertically."

Find and Replace in text windows (procedure windows, plain-text and formatted notebooks, and the command line and history) no longer use the modal Find and Replace dialog. The functionality has been improved and moved to a modeless Find Bar that appears at the top of the window.

Find in Multiple Windows is now implemented in a modeless dialog that produces a list of instances of windows and found text. In Igor 6 this was implemented via a menu option in the modal Find and Replace Text dialog.

Added a new File→Start Another Igor Pro Instance menu item to make it easier to start another instance of Igor Pro.

Behavior Changes

For EPS export, preview is no longer created, embedding is always on and the only option is to not embed standard fonts. The list of standard fonts can not be changed.

Curve fitting has become so fast that the feature to show changes in the fit as it progresses is mostly useless, and slows down fitting. Consequently, in Igor 7 the default has been changed to no update mode equivalent to CurveFit/N=0. You can still get the old behavior using CurveFit/N=1.

The name of the History Archive file is changed from "<Experiment Name> History Archive.txt" to "<Experiment Name> History Archive UTF-8.txt" to prevent mixing of text encodings in one file. If you use this feature you need to create a new history archive file whose name includes "UTF-8".

Because of conflicts with operating system features and with the Qt library, keyboard shortcuts for summoning help have changed. On Macintosh, Command-Shift-Help and Command-Shift-? no longer insert a template and Command-Shift-Option-Help and Command-Shift-Option-? no longer display help for an operation or function. On Windows, Ctrl+F1 no longer inserts a template and Ctrl+Alt+F1 no longer displays help for an operation or function. All of these features can be accessed by right-clicking. The Help key on Macintosh and the F1 key on Windows still display the Igor Help Browser. However Apple abandoned the Help key long ago so it is found on old keyboards only.

When printing graphs, it is no longer possible to set modes and sizes in the dialog. The default mode prints at the same size as the graph window, or if the size is too large, shrinks to fit while maintaining the aspect ratio. For special cases, you can use the PrintSettings command with the new graphMode and graphSize keywords prior to printing.

When entering a date into a table with Table Date Format set to "Use Format Set By System Regional Settings Control Panel" you used to have to use mm/dd/yy, mm.dd.yy, or mm-dd-yy regardless of your system regional settings. You now enter the date as specified in your system regional settings.

The Printf and wfprintf commands, when used with integer conversion characters, d, o, u, x and X, now round floating point values rather than truncating. Thus 1.9999 prints 2 rather than 1. Direct integers up to 64 bits are now supported.

Open File Dialog Changes

Because of Apple changes, the Open File dialog no longer respects Macintosh file types.

A Macintosh file type is a property of a file that specifies its type independent of its file name extension. Examples of Macintosh file types include TEXT (text files), TIFF (Tagged Image File Format) and IGsU (Igor packed experiment file). A common use of Macintosh file types is to determine which files can be selected in an Open File dialog. Macintosh file types have been deprecated in Mac OS X for many years and Apple programs long ago stopped supporting them.

With Igor Pro 7, Igor's Open File dialog no longer supports Macintosh file types. This means, for example, that a file that has the Macintosh file type TEXT but no file name extension is selectable in the Igor Pro 6 Open File dialog when "Text Files" is chosen in the Format popup menu but the same file is not selectable in the Igor Pro 7 Open File dialog. The solution is to choose "All Files" from the Format popup menu or to add a ".txt" extension to the file name.

The Read Only checkbox in the Open File dialog is not supported by Qt and therefore has been removed. On both Macintosh and Windows If you want to open a Notebook for read-only, you must execute,

OpenNotebook /R

In Igor 7 on Macintosh, if you you display an Open File dialog with just one file filter, no Files of Type popup menu appears in the Open File dialog.

Save File Dialog Changes

In Igor Pro 6 on Macintosh, the Save Experiment File and Save Notebook File dialogs include Save as Stationery checkboxes. These checkboxes were removed from Igor Pro 7.

You can save as a template (same as stationery) by choosing the appropriate entry in the Files of Type popup menu in the Save File dialog.

In Igor Pro 6 on Macintosh, the Save Experiment File and Save Notebook File dialogs include Add/Fix File Extension buttons. These buttons were removed from Igor Pro 7.

To add an extension to a file that does not have one, either rename the file in the Finder or choose File→Save Experiment As or File→Save Notebook As and enter the desired new file name or select a type from the Files of Type popup menu.

In Igor Pro 7 on both Macintosh and Windows, if you enter a file name without an extension or with the wrong extension, an appropriate extension is automatically added. In Igor Pro 6 this was done on Windows only.

In Igor 7 on Macintosh, if you you display a Save File dialog with just one file filter, no Files of Type popup menu appears in the Save File dialog.

Programming Changes

The action of Silent 100 is now gone.

Support for rtGlobals=0 is gone - acts like rtGlobals=1.

Extra text after flow control is a syntax error with no dialog offering to ignore it.

SetScale with no wave is now an error.

The compiler now flags the use of wave read with no point spec with the error "ambiguous wave point number".

WAVE/SFDR=x w= ww will now only lookup ww in the specified folder and will ignore a WAVE var named ww

In user functions, assignment statements of the type:

wave[var] += <expression>

is optimized for speed and does not calculate the x value.

Because of a change in the underlying format, you can not copy formatted text from an Igor 6 notebook and paste it into an Igor 7 notebook or vice-versa. The file format is still compatible, however.

If you use the history archive feature, Igor Pro 7 writes the archive to "<Experiment Name> History Archive UTF-8.txt" rather than "<Experiment Name> History Archive.txt". This is necessary to avoid mixing new UTF-8 text with old non-UTF-8 text.

Because Gizmo is now built into the application, Gizmo windows are no longer XOP windows. This means that the type returned by WinType will be different. Likewise, WinName and WinList specifically support Gizmo windows using a new window type constant.

When capturing table column preferences in Igor Pro 6 Igor attempted to capture the style of all columns in the prototype table and to apply those styles to columns in new manually-created tables and when manually appending columns to existing tables. For technical reasons this did not work reliably. Therefore in Igor Pro 7, Igor captures the styles of only the point column and the first column after the point column from the prototype table. When applying the styles to a new table, the style captured from the first column after the point column is applied to all new columns.

To check help links in a help file that you have written, right-click the body of the help file and choose Check Help Links. See Checking Help Links for details.

In Igor 6 the ModifyTable operation incorrectly interpreted 'Test.x' as "the X column of a wave named 'Test'". The correct interpretation is "a wave named 'Test.x'". This bug prevented ModifyTable from handling waves whose names ended with ".i", ".d", ".x" and ".y".

This is fixed in Igor 7. In the unlikely event that you used 'Test.x' to mean "the X column of a wave named 'Test'", you will need to change the reference to 'Test'.x.

Added the specialKeyCode field to WMCustomControlAction structure in order to convey more information about special keys such as navigation and function keys.

Added keyText field to WMCustomControlAction structure in order to convey UTF-8 key events to user window hook functions.

The kbMods field of the WMCustomControlAction structure no longer supports the alpha lock bit.

On Macintosh, the eventMod field of the WMWinHookStruct structure, used in Window Hook functions, no longer sets bit 0 when a window is activated by clicking with the mouse. In mose cases, that bit isn't needed. If you have a rare case that uses it, you should re-write your hook function to use the mousedown event.

In Igor 6, window hook functions received the mouse Y coordinates in pixels relative to vertical position of the control bar (if any) regardless of whether the mouse is over a subwindow in the control bar or the mouse is over the graph's control bar without any subwindow there. In Igor 7 the Y coordinate depends on whether the mouse is over the host graph or over a subwindow.

Practically speaking, that means mouse Y coordinates for a "bare-naked" control area in a graph are negative numbers in both Igor 6 and 7. AxisValFromPixel and PixelFromAxisVal expect and return coordinates from the host graph (they adjust the Y position according to the control bar height).

However, Y coordinates for a subwindow in/above the control area are negative (relative to the control bar bottom) in Igor 6, and positive (relative to the subwindow's top/left corner) in Igor 7.

In Igor 6, window hook functions receive activate and deactivate events for the main window, and also for any notebook subwindow. The window to which the event applies is given by the WMWinHookStruct structure in the winName member. Now activate and deactivate events are sent for table subwindows as well.

The timing of mouse down window hook messages in tables in Igor 7 is different from Igor 6. If you use mouse down events in table hook functions, see Mouse Events.

Originally, we assumed that the notebook subwindow behavior was simply an oversight, and the loophole was closed in Igor 7. But one of our own engineers had used the deactivate event for a notebook subwindow, which was being used essentially as big SetVariable controls. On this basis, we decided that subwindows used as data input controls should get these events, and so added table subwindows. We would be interested in your thoughts.

The Debugger has substantially improved support for displaying waves (in the new Table view), long Strings (in the new String Inspector) and structures (in the Variables tree).

The Image Processing package is obsolete as its functionality is now built-in (see image menu). The procedures are still shipping with Igor Pro 7 but they are slated for removal in future versions.

The Gizmo Procedures package is obsolete as its functionality is now built-in. The procedures are still shipping with Igor Pro 7 but they are slated for removal in future versions.

Added /Z flag to KillWindow operation to suppress the Expected Window Name error if the window doesn't exist.

Added /UNQ flag to ExecuteScriptText to remove any leading and trailing quote character from the S_value output variable. This is only useful on Macintosh and has no effect on Windows.

GuideInfo returns positions in points, not screen pixels. This is to allow user code that relocates controls to work properly when, on Windows, panels are using the actual system resolution.

Unpacked Experiment Changes

Most users do not need to know this information because they use Igor's packed experiment format, not the unpacked experiment format described under Saving as an Unpacked Experiment File.

In Igor Pro 6 when you save an experiment using the unpacked experiment format, Igor first displays a Save File dialog asking you for an experiment file name and then displays a Create Folder dialog that allows you to specify the associated experiment folder name. The Create Folder dialog proposes a name consisting of the experiment file name with the word "Folder" appended.

For technical reasons implementing the Create Folder dialog in Igor Pro 7 would be very difficult. Also, the Create Folder dialog in Igor Pro 6 is confusing. For these reasons Igor Pro 7 handles the creation of the unpacked experiment folder differently.

In Igor Pro 7 Igor displays the Save File dialog asking you for the unpacked experiment file name. It then automatically generates the experiment folder name by appending " Folder" or the Japanese equivalent, to the experiment file name. Igor Pro 7 then creates the unpacked experiment folder without further interaction.

For example, if you enter "Test.uxp" as the unpacked experiment file name, Igor automatically uses "Test Folder", or the Japanese equivalent, as the unpacked experiment folder name.

If a folder named "Test Folder" already exists then Igor displays an alert asking if you want to reuse the folder for the unpacked experiment.

If the automatic generation of the unpacked experiment folder name causes a problem for you then you can save an experiment with the names of your choice using the SaveExperiment /F operation.

Data Browser Changes

ModifyBrowser deleteUserButton=* is no longer allowed. Instead, use the deleteAllUserButtons keyword to delete all user buttons or use deleteUserButton and the name of a user button.

The following ModifyBrowser keywords are now ignored (they are allowed only for backwards compatibility):

	fullFrame

Previously, ModifyBrowser topLine=lineNum would position lineNum so that it is the top line in the browser regardless of how many lines came after lineNum. This behavior has been changed so that lineNum is made visible but it will not necessairly be at the top of the list if there are not enough lines below it to fill up the list.

Preferences for the Data Browser are now handled in the Data Browser category of the Miscellaneous Settings dialog, which is accessed from the Misc→Miscellaneous Settings menu item. See Data Browser Preferences.

It is no longer possible to edit an object's properties (e.g. name, wave dimensionality, etc.) directly from within the info panel. Instead, with a single object selected and the Data Browser info panel visible and in Show information mode, click the edit icon in the upper right of the Info panel to bring up a dialog from which you can edit the properties.

Added new compact mode option to Data Browser. Clicking in the collapse/expand button to the left of the object list will collapse or expand the controls to the left of the object list.

Added buttons above the object list that improve navigation between different data folders. Left and right arrow buttons navigate backwards and forwards through the history of data folders viewed. The up button moves the display to the parent of the currently displayed data folder.

Data Browser Improvements

The Data Browser has been completely rewritten for Igor7 and is now built into Igor (it is no longer an XOP).

The CreateBrowser and ModifyBrowser operations can be called directly from user-defined functions. In previous versions of Igor they needed to be called through Execute.

CreateBrowser V_Flag and S_BrowserList output variables are always created even if a modal browser was not used. Their values are meaningless unless CreateBrowser was used with the prompt keyword to show a modal dialog.

The infoFont and infoFontSize keywords of ModifyBrowser are now supported on Windows. Previously, they were only supported on Macintosh.

Using an invalid palette name with the ModifyBrowser palette keyword is now treated as an error. Previously the command was simply ignored.

When you double click on a wave or select the contextual menu Edit item and the wave has dimension labels, the wave is displayed in the table as well as the dimension labels.

The icons that control whether the info panel displays object information or (for waves only) wave statistics are now in the info panel, not next to the Info checkbox in the Display group box.

The info panel has a copy to clipboard button which copies the entire text contents of the info panel to the clipboard.

The info panel text display and Edit Object Properties dialog Wave Note and string value controls have options to turn on/off showing whitespace, parenthesis matching, syntax coloring, and word wrap. These options can be turned on/off by right clicking on the control and choosing the Settings submenu.

The Data Browser plot panel can now display complete RGB or RGBA images, instead of displaying only a layer at a time. You can also step through the layers and/or chunks of a 3D or 4D image.

The Data Browser plot panel can now optionally show the axes of a wave displayed in the panel. To control display of axes, right click on the plot panel and check Show Axes.

Selected wave(s) can be dragged from the Data Browser onto a graph or table window and those waves will be appended to the graph or table.

Selected objects can be dragged from the Data Browser onto the command line. Doing so inserts the full path to all selected objects on the command line.

You can right click on a wave, string, or variable object in the object list and select Show Where Object Is Used... to open a dialog that lists the dependencies in which the selected object is used and, for waves, the windows (eg. graphs) in which the wave is used.

Dialog Improvements

Added dialog for Concatenate operation.

Added dialog for ReorderImages operation.

Added dialog for ImageSave operation.

Added dialog for new SplitWave operation.

Added dialog for new LayoutPageAction operation.

Added dialog for new LayoutSlideShow operation.

Added support for new SortColumns operation to Sort dialog.

New Image Menu with interactive dialogs for image analysis operations.

New Statistics menu with interactive dialogs for statistical tests.

The Find Text dialog has been replaced with a Find Bar that appears at the top of notebook windows, procedure windows, and the Command Window.

Added the Find in Multiple Windows dialog. This dialog finds text in all open procedure, notebook or help windows. It presents all the instances of found text in a list; double-clicking an instance of found text in the list takes you to the text in the window in which it was found.The dialog is non-modal.

The Reorder Traces dialog now includes a graphical reminder of the order the traces will be drawn in.

Graphing Improvements

You can now use partially transparent colors. See Color Blending.

You can now specify gradient fills for draw objects, graph trace fills, and graph window and plot area fills. See Gradient Fills.

You can now use shading in place of error bars. See Error Shading.

You can now set contours to fill their levels including individual levels with individual fill patterns. See Fill Contours Checkbox and Contour Fills for more information.

You can now export and import cross-platform SVG (scaled vector graphics) pictures.

Graphs have an enhanced info panel (see Info Panel and Cursors). The new info panel can show all cursor pairs, making it easier to use more than two cursors on a graph. The display of point number is editable- editing the point number will move the cursor to a new location. A menu allows changing styles and options of all visible cursors at one time. The font used in the info panel can be changed from the Graphs category of the Miscellaneous Settings dialog (Misc→Miscellaneous Settings menu item).

Hair-style cursors can now have two or three parallel lines, and you can control the width of hair-style cursor lines. The new options are available via the contextual menus in the info panel, and via the Cursor /NUML and /T flags.

Graph cursor colors now support transparency via the Cursor /C flag.

You can now control user interactions with graphs via the new ModifyGraph UIControl keyword. See the documentation of ModifyGraph for details.

When capturing graph preferences, the complex mode of traces on the graph will be captured if the "XY Plots: Wave Styles (lines, markers, colors, ...)" item is checked.

ReorderTraces and ReorderImages can now use _front_ or _back_ as the anchorTrace or anchorImage.

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.

This situation is expected to be temporary. Currently (early 2016) it affects Qt graphics (Qt 5.6) and Macintosh native graphics on OS X prior to 10.10. Native Windows modes (GDI and GDI+) appear to work well with two-pixel thick lines (at least as of Windows 10.)

In general the slowdown affects graphs containing very long traces and is more of a concern in data acquisition where rapid live updates are desired. To see if this situation affects your high-resolution system, you can use the Live Mode Demo experiment.

If you are affected by the slowdown, there are several things you can do:

For details and to experiment with these techniques, see the Live Mode Demo experiment.

Table Improvements

In Igor Pro 7, Igor displays full precision in the entry area of a table. Previous versions of Igor used the selected column's formatting when displaying values in the entry area.

Igor Igor Pro 7, columns displayed in hexadecimal and octal formats ignore the digits setting and display a fixed number of digits that depends on the data type of the wave.

The text version of the copied data to the clipboard uses as many digits as needed to represent the data with full precision. Prior to Igor Pro 7 the copied text followed the table's display formatting and therefore did not necessarily represent full precision.

When saving as text, the SaveTableCopy /F flag allows you to force SaveTableCopy to save using full precision. The default behavior remains the same as before - it saves exactly what you see in the table, which generally does not represent full precision.

When editing a text wave, the data entry area includes a button that calls up a dialog that makes it more convenient to edit long strings. This dialog also has the option of editing Igor styled text codes.

When editing date waves in a table you can now enter dates in the format specified in your system regional settings. Use of system regional settings, common, or custom date formats in tables is set in the "Date Format For Tables" dialog, accessed via the Table menu (Table→Table Date Format...).

You can select all of the data columns of a wave, such as a 2D wave, by pressing Command (Macintosh) or Ctrl (Windows) and clicking the column title of any data column.

You can select the index or label column plus all of the data columns of a wave, such as a 2D wave, by pressing Command (Macintosh) or Ctrl (Windows) and clicking the column title of index or label column.

Page Layout Improvements

Page layouts can now contain multiple pages. The different pages in a layout are shown in a new page sorter that appears on the left side of the layout window. Pages can be added and removed using the LayoutPageAction operation, or the controls at the bottom of the page sorter. You can also reorder the pages in a layout by dragging and dropping them in the page sorter.

The ModifyLayout, AppendLayoutObject, and RemoveLayoutObjects operations have an additional /PAGE=pageNum flag to control the page to modify. Page numbering starts from 1, use pageNum=0 to refer to the currently active page.

You can export the pages in a layout to a single PDF document using the /PGR flag to the SavePICT operation. See Graphics Export Improvements for more details.

The size of a layout page is now set using the LayoutPageAction operation or the Layout Page Size dialog. Prior to Igor 7, the layout size was changed using the system page setup dialog. The page setup dialog now affects only the printing of layout pages, but not their appearance or export. Use the new Print Preview dialog to preview the printed output. It is possible to assign different sizes to different pages.

In theory, page layouts containing only a single page are compatible with previous versions of Igor, as long as they do not use any other new features. However, while Igor tries to preserve the page size, layouts may appear with a different size or orientation when loading an Igor 7 experiment in previous versions of Igor.

Page layouts can now be displayed in a full screen slide show using the LayoutSlideShow operation. This feature is intended for the convenient full-screen presentation of Igor graphics and results, or can be used to run Igor in a standalone kiosk mode. Various settings can be adjusted using the LayoutSlideShow operation or the Layout Slide Show dialog.

It is now possible to draw user shapes in Layouts using the DrawUserShape operation. See Drawing Improvements for more details.

You can now have a gradient background for page layouts. See Graphing Improvements for more details.

Notebook Improvements

The ruler area for formatted notebooks has changed in appearance, and offers new buttons to enhance accessibility of formatting options.

Text find in notebook windows has been moved to a Find Bar that appears at the top of the window, replacing the old modal Find Text dialog. It appears when you select Find, Find Again, Find Selection or Enter Selection for Find. In the future, we may change what find options cause the Find Bar to appear.

In the past, when opening notebook and procedure files, Igor always kept the file open. Now, when opening plain-text files (plain text notebooks and procedure files) Igor reads the text into memory and then closes the file. When saving changes, Igor opens the file, saves the changes and closes the file again.

This allows you to use an external editor for editing plain-text notebooks and procedure files and may simplify keeping procedure files in a source-code control system. If you modify a plain-text notebook or procedure file from outside of Igor while the file is open in Igor, Igor will notice that it has been modified and will notify you of that fact.

Dialogs have been created to give you control over what to do in case of conflict--for example if you modify a file inside Igor and it is also modified externally.

Similarly, a dialog gives you control over how to handle a case in which the file associated with a notebook or procedure window is missing. That would happen if you move or rename the file on your hard drive while it is open in Igor.

See Dialog Improvements for a description of the Find Bar.

The Notebook operation has new keywords frameStyle and frameInset to provide programmatic control over the frame of a notebook subwindow. In the past it was possible to change the frame of a notebook subwindow using a contextual menu, but the changes were not saved in window recreation macros because there was no command for it.

Because of a change in the underlying format, you can not copy formatted text from and Igor 6 notebook and paste it into an Igor 7 notebook or vice-versa. The file format is still compatible, however.

The notebook's status area is no longer on the same vertical level as the scroll bar, and therefore it extends the entire width of the notebook window. Consequentially, the statusWidth keyword of the Notebook operation is ignored, though the keyword is still allowed for backwards compatibility.

Added the startOfPrevChar and startOfNextChar keywords to the Notebook operation selection keyword. These keywords act like pressing the left or right arrow key.

Selected text in a formatted notebook can now be colored as if it were code in a procedure window by selecting the Notebook→Syntax Color Selection menu item.

When you paste a picture created from an Igor 7 Gizmo plot into a notebook, Igor includes Igor-object information that allows it to associate the picture with the original Gizmo plot so you can update it using Notebook→Special→Update. If you save the notebook in Igor 7 and open it in Igor 6 version 6.37 or earlier, you will get errors in Igor 6. If you open it in Igor 6 version 6.38 or later, it will display correctly.

Help Improvements

The Help Topics tab makes it easier select a particular help file of interest.

The Command Help tab of the Help Browser has a new Filter field that can be used to filter the commands displayed in the list by name. Additional filter options, such as by command type and category, are available by expanding the Advanced Filtering controls. New checkboxes in the Advanced Filtering controls make it possible to view only commands that are threadsafe and/or which use automatic multithreading.

Added a Help→Contact Support menu item to simplify creating an email that contains system and Igor information that may be needed by WaveMetrics to diagnose and/or reproduce a bug report. Please use this menu item instead of manually creating an email to support@wavemetrics.com.

Command Window Improvements

The command line and command history windows display text using the same Syntax Coloring used in procedure windows. Syntax coloring can be turned on or off for all procedure windows and the command window in theText Editing category of the Miscellaneous Settings dialog.

Display of whitespace characters (spaces, tabs, and line endings) in the command line and command history windows can be enabled from the Miscellaneous Settings dialog Command Window category.

The splitter between the command history window and the command line is now draggable, making it possible to view multiple lines of text in the command line at one time.

The command line can receive text dragged onto it.

Copying text from the command line and command history windows copies the selected text as both plain text and HTML text. Applications that can accept HTML text from the clipboard, such as word processors and many email applications, will be able to paste the HTML text, which maintains the syntax highlighting, instead of the plain text.

Graphics Export Improvements

You can now export and import cross-platform SVG (scaled vector graphics) pictures.

On Windows, EMF export will use the EMF+ format if the window is using the new graphics mode. EMF+ is needed when using transparency.

You can use the PDF format to export all pages in a layout using the new /PGR=(firstPage, lastPage) flag added to the SavePICT operation.

Panels can be exported as PNG.

Procedure Window Improvements

See Dialog Improvements for a description of the Find Bar.

See Notebook Improvements for a description of editing notebooks using an external editor.

Functions, macros, menus, structures, constants, and proc pictures defined in a procedure window are now displayed in an organized fashion in what we call the "Navigation Bar", at the top of a procedure window.

You can right click on the navigation bar to control how the items are grouped and sorted. You can also disable the Navigation Bar from the Miscellaneous Settings dialog in the Text Editing category. The Navigation Bar replaces the old "Procedures" button and it's associated menu at the bottom of procedure windows.

You can enable display of line numbers in procedure windows and the command history window. This setting is controlled from the Miscellaneous Settings dialog in the Text Editing category.

Copying text from procedure windows copies the selected text as both plain text and HTML text. Applications that can accept HTML text from the clipboard, such as word processors and many email applications, will be able to paste the HTML text, which maintains the syntax highlighting, instead of the plain text.

By default, to prevent inadvertent modifications, Igor opens #included user procedure files and global user procedure files as write-protected. If you are a programmer who frequently edits such files, you can disable this feature by unchecking the new "Write-protect Included and Global User Procedure Files" checkbox in the Text Editing section of the Miscellaneous Settings dialog.

Gizmo Improvements

In Igor Pro 7 Gizmo is built-in. This means that you can display a Gizmo in a stand-alone window or hosted in a graph or a layout.

Gizmo was rewritten with faster and better graphics memory management.

All Gizmo dialogs now generate commands.

Gizmo has a new Gizmo Image object, new 3D bar chart object, new volume grid-lines and a new Data Translation operation.

Gizmo supports regular Igor annotations.

Gizmo numerical labels have been improved.

Isosurface objects are now generated using automatic multithreading.

The All Gizmo Procedures package is no longer necessary. These procedures are now deprecated, though they have been made compatible with Igor 7.

The 3D Graphics help file contains more details on Gizmo's compatibility with previous versions.

Drawing Improvements

Added a new Overlay drawing layer. See the SetDrawLayer operation for details.

New DrawUserShape operation. The DrawUserShape is similar to other DrawXXX commands except the shape is defined by a user function which is executed when the shape is drawn. For example code, see the User Draw Shapes.pxp example experiment in the Examples→Programming submenu.

Annotation Improvements

Added new DeleteAnnotations operation to delete annotations in a window that match certain criteria, such as being invisible because they are hidden or their position is out of range of the window.

Added logTick and logLabel options to ColorScale's log axis. The values work the same as in graphs.

ColorScale logTicks=t, where t=0 is auto (default), else max num log cycles with minor ticks.

ColorScale logLabel=m, where m is max num log cycles with minor tick labels (default is 3).

Control and Control Panel Improvements

For SetVariable controls that reference a wave using the value keyword, a point in a 3D or 4D wave can be specified by providing row, column, layer, and chunk dimension labels or indices. Previously, only row and column dimension labels or indices were supported.

Windows only: Panels can now be drawn using the actual screen resolution rather than pixels. This prevents panels from appearing tiny on high-resolution displays. For the most part, this is automatic but will require some programmer attention for complex panels. See the "Control Panel Resolution on Windows" help topic for more information.

GuideInfo returns positions in points, not screen pixels. This is to allow user code that relocates controls to work properly when, on Windows, panels are using the actual system resolution.

Analysis Improvements

Some IGOR operations and functions have internal code that can execute the relevant calculations in multiple threads. These operations are marked as "Automatically Multithreaded" in the Help Browser. See MultiThreadingControl for more information.

Improved Analysis Operations and Functions

Integrate1D is now thread-safe and can now take an optional parameter wave.

The Interpolate2 operation, which was an external operation in Igor6, is now built-in. The old Interpolate XOP is no longer shipped. If you use the old Interpolate operation, which was superceded by Interpolate2 about a decade ago, you will need to change your Interpolate commands to Interpolate2 commands. The syntax is slightly different.

Added to Histogram operation:

Added to /A flag to DSPDetrend to remove the average before detrending.

Added /PAD to HilbertTransform to provide built in support for padding just like in FFT.

New standard flag /RMD provides new functionality in WaveStats and compatibility in other places e.g., Histogram and Duplicate.

DSPPeriodogram added automatic multithreading support and added support for combined /R and /SEGN.

ConvexHull is now threadsafe.

Smooth (binomial keyword) supports automatic multithreading.

FFT and IFFT now support /FREE.

WaveTransform: vectorized functions: abs, Acos, Asin, Atan, cos, inverse, sin, sqrt, tan, setZero, setConstant.

Added /LOC flag to Sort and MakeIndex operations to support locale aware sorting of text waves.

The min and max functions now accept up to 200 parameters.

New Analysis Operations and Functions

sinIntegral sine integral, cosIntegral cosine integral, expIntegralE1 exponential integral, sech and csch

gammaEuler returns the Euler-Masheroni const.

SumSeries

JointHistogram

SumDimension

SortColumns

LambertW

ICA independent component analysis

Integrate2D

Jacobi elliptic functions JacobiSn and JacobiCn

MultiThreadingControl to get/set automatic multithreading thresholds

SplitWave

ListToTextWave, ListToWaveRefWave and WaveRefWaveToList

FindContour

DPSS

MultiTaperPSD

zeta

Dilogarithm

FindDuplicates

FindValue: added /FNAN to find NaN values.

TrimString

Statistics Improvements

New Statistics menu with 14 interactive dialogs for statistical tests.

Added to StatsQuantiles /T=k to support standard stats results table. Added V_Mode.

Added Median absolute deviation (MAD) to StatsQuantiles.

Added /ACMB flag to StatsSample to create a wave containing all combinations.

Added StatsGEVPDF( x, mu, sigma, xi) and StatsGEVCDF( x, mu, sigma, xi)

Added median(wave,p1,p2) function.

WaveStats: added automatic multithreading support.

Added /PCST flag to compute per column statistics.

Added parameters to the output wave.

StatsResample added /WGHT flag that allows weighted sampling.

New operation StatsShapiroWilkTest.

Added text wave output to StatsNPMCTest with /DWH.

Added P value calculation in StatsSignTest when the number of sign changes is equal.

Matrix Improvements

MatrixSVD now computes condition number in the standard branch. Also has two new flags (/PART and /PDEL) to support partial SVD.

MatrixLUD was completely rewritten. Now supports complex and non-square matrices.

MatrixDet now supports complex input.

Added MatrixGLM to support general Gauss-Markov Linear Model.

Added solution to generalized eigenvalue (and generalized symmetric) problem in MatrixEigenV.

New Function: MatrixCondition

MatrixOP new features:

Curve Fitting Improvements

Curve fitting now offers better multithreading, including for built-in and all-at-once fitting functions which previously did not take advantage of multiple processors. Any user-defined fit function or XFUNC that is marked as threadsafe will use multiple processors if it is advantageous.

The built-in Hill Equation and Sigmoid fit functions use more robust computation methods that allow convergence even with very rapid transitions.

Image Processing Improvements

New Image Menu with 14 interactive dialogs for image analysis operations.

ImageTransform:

ImageAnalyzeParticles:

ImageInterpolate:

ImageLineProfile: added automatic multithreading support.

ImageThreshold: new automatic threshold methods

Added two new automatic thresholding methods:

Arifin & Asano algorithm and Otsu method.

Added automatic multithreading support.

ImageRegistration is now thread-safe and supports 2D refMask for stack operations.

ImageRemoveBackground is now thread-safe.

ImageEdgeDetection: improved results of Kirsch and Sobel edge detectors. All edge detectors run under automatic multithreading.

ImageRestore: added automatic multithreading support.

ImageFilter: added automatic multithreading support in hybridMedian.

ImageBlend: added automatic multithreading support.

ImageStats: added /C=chunk flag and added automatic multithreading support.

ImageRotate: added automatic multithreading support. Added /RGBA flag.

ImageGLCM new operation for texture analysis that calculates the gray-level co-occurrence matrix for an 8-bit grayscale image and optionally evaluates Haralick's texture parameters.

Fixed thinning filter problem in MatrixFilter.

ImageSkeleton3d new operation that computes the skeleton of a 3D binary object in the source wave using a layer-by-layer erosion until only the "skeleton" of an object remains.

Triangulate3D: Added /VOL flag to , which computes the volume of the full convex hull by summing the volumes of the tetrahedra generated in the triangulation. The result is stored in the variable V_value.

Data Import And Export Improvements

ImageLoad: added /AINF flag (load all in folder). Added support for bigTiff and for reading RGBA PNG files.

ImageSave: added support for RGBA PNG files.

Save: added /DLIM flag for adding an arbitrary delimiter in delimited and general text export.

FReadLine: automatically skips the BOM (Byte Order Mark) at the beginning of a UTF-8 encoded text file when it occurs.

GBLoadWave: The /I[={macFilterStr , winFilterStr }] flag, which brings up the open file dialog and includes optional filter strings, has been simplified to just /I. The macFilterStr and winFilterStr are still allowed but are now ignored. A new /FILT=fileFilterStr that works on both Mac and Windows has been added. /FILT works any time GBLoadWave triggers the open file dialog.

TDM XOP: This is a Windows-only file loader XOP that loads National Instruments TDMS files. This release adds a 64-bit version of the XOP. It also adds the /XSCL flag for TDMLoadData and TDMSaveData. This flag controls the reading and writing of the TDM waveform channel properties wf_start_time, wf_start_offset, wf_increment, and wf_xunit_string.

Printing Improvements

Added a Print Preview menu item to the File menu. This will be a new feature for Windows users. Mac users can also continue to use the print preview button in the Print dialog as before.

The new /PD flag for PrintGraphs can accept a value of 2 to get the new Print Prevew dialog:

PrintGraphs/PD=2 <graph list>	// Invokes the preview dialog (LH#2397)
PrintGraphs/PD <graph list>	// Invokes the print dialog
PrintGraphs <graph list>	// Immediately prints

If present, /PD must be the first flag.

Programming Improvements

Added speed-optimized wave get for w[a][b][c][d] where a, b, c and d can be any combination of pqrs, literal numbers or variables including ints.

C-like Syntax in Igor Pro 7

Added new C-like syntax support in user-defined functions that includes:

For more information see Igor Pro 7 Programming Extensions.

wave[Inf] no longer reports out of bounds and can be used as shortcut for the last point.

Integer Support

New integer support including 64 bits:

New Built-in Structures

PointF, RectF, RGBAColor and WMDrawUserShapeStruct

See the "Built-in Structure Reference" help topic.

Improved Strings

Much faster string operations. String waves now contain an array of individual strings rather than a monolithic block with an array of indices. In some instances, the monolithic block might be more efficient. In this case you can force monolithic mode by using Make/T=<size>

New Subwindow Syntax

New syntax for specifying a path to a subwindow in a layout that allows you to specify which page the embedded subwindow is in:

Subwindow Specification Location
LayoutName Base host window, current page
LayoutName[page] Base host window, identifying a particular page
LayoutName#sub1 Absolute path from current layout page
LayoutName[page]#sub1 Absolute path from specific layout page

NOTE: Page layout page numbers start at page 1.

This syntax would be used, for instance, to embed a graph in a page other than the current page:

NewLayout
LayoutPageAction appendPage	// make page 2
LayoutPageAction page= 1	// page 1 is now the current page
Display/HOST=Layout0[2] mywave	// make a graph subwindow on page 2
ModifyGraph/W=Layout0[2]#G0 mode=3	// set markers mode in the graph subwindow

Other Programming Improvements

Can now use text waves as destination with MultiThread. Monolithic types silently use one core.

Can now use RGBA in most if not all places where RGB is used.

New UnPadString function.

Added #pragma rtFunctionErrors to aid debugging errors in built-in functions. See The rtFunctionErrors Pragma help topic for details.

You can use additional escape codes in literal text:

\xdd Inserts arbitrary byte express in hex
\udddd Inserts UTF-16 code point expressed as 4-digit hex number
\Udddddddd Inserts UTF-32 code point expressed as 8-digit hex number

char2num and num2char now support Unicode.

num2char now takes an optional parameter with the following behavior:

In addition to using num2char to insert Unicode, you can use literal Unicode like so: U+1234 where 1234 is the hex value. For example

Print "plank= "+U+210F

IgorInfo(6) returns the version number (as a string) of the Qt library Igor uses. IgorInfo(0) has new PHYSMEM (installed physical memory) and USEDPHYSMEM (physical memory used by Igor) keywords. The existing FREEMEM keyword now returns the free virtual memory on both platforms (it previously returned 0 on Macintosh).

LayoutInfo additionally includes the current page number and total number of pages in the layout.

Added specialKeyCode field to WMWinHookStruct structure in order to convey more information about special keys such as navigation and function keys.

Added keyText field to WMWinHookStruct structure in order to convey UTF-8 key events to user window hook functions.

Added offset argument to StringFromList and RemoveListItem. Proper use of the offset argument greatly speeds sequential iterations through large string lists.

The GetKeyState function can now detect the pressing of arrow keys.

In compiled code where a font specification previously required a literal font name, you can now provide the name in a local string variable. At runtime, by default, if the font is not found, Arial is silently substituted. You can control this action with:

SetIgorOption ReportRuntimeFontErrors= val

Val is a bit field. Bit 0 means report errors, bit 1 means provide the font substitution dialog.

You can temporarily make the ThreadSafe and MultiThread keywords act like nothing in order use the debugger in such code:

SetIgorOption DisableThreadSafe= 1

Setting this to either 1 or 0 will cause all procedure files to be recompiled.

You can now create a complex constant:

Constant/C kName = (literalNumberReal, literalNumberImag)

Hash now supports additional hash methods: MD4, MD5, SHA-1,SHA-224, SHA-384, and SHA-512.

New ScaleToIndex and IndexToScale functions make it easier to convert between a point in a multidimensional wave and its corresponding scaled index value.

Added sizeLimit keyword to GetWindow and SetWindow to make it possible to set the minimum and maximum size of a window.

The PopupContextualMenu operation has a new /ASYN flag for asynchronous (deferred) handling of the menu selection, which allows background tasks to stay active while the menu is showing.

Network Communication Improvements

Added new URLRequest operation that supports the get, post, put, delete, and head methods. In addition, the operation has experimental support for using a proxy server by providing the /PROX flag.

FetchURL and the new URLRequest operation can now make secure connections to https:// URLs using SSL/TLS.

Miscellaneous Improvements

Added the IgorUserFiles built-in Igor symbolic path. It points to the Igor Pro User Files folder. See Special Folders for an explanation of Igor Pro User Files folder.

Added generic cross-platform camera support with a new camera window type and the operations NewCamera, GetCamera and ModifyCamera. Camera windows can be embedded in Graphs and Panels allowing you to combine graphics and controls with live video.

On Mac, you can now use PlayMovieAction to access a movie file without playing it using the same syntax as used on Windows for avi.

The Igor command line syntax described in Igor Command Line now applies to both Windows and Macintosh. On a Macintosh the described capability can be used when starting Igor from a terminal window.

Added GetEnvironmentVariable, SetEnvironmentVariable, and UnsetEnvironmentVariable which can be used to read and set the value of environment variables of Igor's process and child processes that are created with ExecuteScriptText.

Operations that set V_Red, V_Green, and V_Blue output variables now also set V_Alpha. This includes ChooseColor, ControlInfo, GetLastUserMenuInfo, GetWindow, and SetIgorOption used with the colorize keyword.

Added SIZEINBYTES key to string returned by WaveInfo. This gives the total size of the wave in bytes, including it's header, data, note, dimension labels, and unit strings.

The maximum length of the titleStr parameter of the Prompt operation has been increased from 80 bytes to 255 bytes. Strings longer than 255 bytes will be terminated.

The built-in VoigtFunc function has been made official and threadsafe.

Added "Igor Executable" selector to SpecialDirPath to return the path to the folder containing the Igor Pro executable.

Added /DEST flag (to specify the destination wave) to Cross opertion.

Added FGetPos operation for getting the current file position. This works like FStatus but is much faster. Use it instead of FStatus if you only want to get the current file position, not other information about the file.

New And Improved Example Experiments

Modified Example Experiments

New Example Experiments