- Added support for the Digitimer D360R Programmable Signal Conditioner.
- MemSetItem() script command allows an integer data array for WaveMark channels.
- The FocusHandle(-1) script command prevents the keyboard focus being restored after using a Toolbar button.
- Now attempts to open pre-revision 9 32-bit .smr files that exceed the 2 GB size limit (this allows access to some incorrectly-written files that previously would not open).
- The File menu Export As Data file command no longer aborts if any error is found. It now does the best it can and lists problems in the Log view.
- The Waveform Average and Waveform Correlation Process setup dialog now display the number of channels in the list and the sample rate of the first channel.
- In a user-defined dialog it is now possible to include a vertical bar "|" in a prompt by inserting "||". A single vertical bar introduces a tooltip.
- The ArrFilt() script command runs faster for the most common case of contiguous data.
- The Help menu About Spike2 dialog Copy command now includes information about installed export filters and Talkers. It also has a new Log button to copy the same information to the Log view.
- The Script Bar List and Sample Bar List dialogs give more control over the displayed columns; you can sort the buttons by clicking on the column headers and open the script or sample configuration by double-clicking them. The associated Script and Sample Bars no longer flicker when you close the dialogs.
- The data import system has been re-engineered to make the importers much smaller (typically reducing them from 2 MB to 1-200 kB). This make the first use of the File menu Import command much faster.
- The Text importer is much better at guessing what the column separator is when it is not comma, Tab or spaces. There is a new option to set the column separator in the configuration dialog.
- The Text importer has been reworked to make it cope with a wider range of files and is much less likely to detect a waveform channel as a TextMark due to a small number of non-numeric entries.
- In the Sampling configuration dialog, you can now set the Triggered sampling mode From and To fields to microsecond resolution. It was previously limited to millisecond resolution.
- The File menu Import dialog now remembers the last used importer between Spike2 sessions (previously it was remembered only within a session).
- The Plexon importer has several improvements so it reads a wider range of input files and copes better with files with multiple sections.
- The TDT importer only appends _1, _2, and so on to the channel titles when there are duplicates.
- The TMS importer now supports the Poly5 file extension in addition to S00.
- The XDF (LabStreamingLayer) importer now imports RealMark and TextMark signals and handles waveforms with gaps correctly.
- There is a new Importer for Allego (NeuroNexus) data files.
- You can now use Vertical and Horizontal cursor positions as part of a Virtual channel expression with live tracking of the cursor positions. For example, WSin(1, C1) generates a 1 Hz sinusoid that is aligned to the vertical cursor 1 position and updates as cursor 1 moves.
- The Memory buffer Import channel dialog no longer remembers bad Minimum Interval field values.
- Saving a memory buffer to a .smr file that had reached its size limit was not flagged as an error. When next opened the channel was present, but empty or truncated.
- Video frame stepping with the Cursor 0 link could step to the same place twice, which wasted time.
- Spike2 could crash if a Toolbar button was linked to a function that closed the window with the keyboard input focus.
- On-line Gated processing with overlapping gate periods processed the overlapped periods once per gate, so overlapped periods were over-represented in the result and more processing was done than necessary.
- It was possible to cause the Power3 and 3A to crash when replaying arbitrary waveform data with particular combinations of sample rate and channels.
- Spike2 would not open .smrx data files in which all strings (channel title, units, comment, file comments) were less than 3 characters long and where a string had been edited.
- In a script view, a user-defined Func or Proc with a space between the function name and the opening brace, for example func fred (), was omitted from the function list and did not get a pop-up call tip.
- Resizing the Script Bar List and Sample Bar List dialogs did not move the Help button.
- The ADI importer could crash when reading files with a large number of sections.
- Corrected the Talker documentation that stated you have to be in Administrator mode to add a Talker licence; this is not the case.
- The documentation now describes how to associate specific Talkers with multiple copies of Spike2 using the command line.
- Recording of the commands to lock a vertical cursor to another or a horizontal cursor to the crossing of a vertical cursor with a channel recorded the wrong cursor number.
- When importing data in Sweeps mode, the file offset of each sweep from the last could increase through the imported file.
- The error messages generated in the output sequencer message bar were badly formatted when an online sequence update failed due to size issues.
- The TMS importer rejected valid input files.
- The Igor importer could crash if it was used to import a PXP file holding complex numbers.
- The File menu, Load configuration command can now select one of up to 10 recently-used configuration files.
- Triggered sampling mode can now turn data saving off on a specific marker code. The SampleTrigger() script command is extended to match.
- There is a new online Derived channel process to detect waveform activity, peaks and troughs as Marker data. The SampleProcess() script command is extended to match. This allows you to trigger analysis and data saving during sampling and can simplify on-line scripts.
- The Rectify real-time process now supports half-wave rectification.
- There is a new Median measurement that can be used with Measurements to XY views and to a data channel, the Cursor regions dialog and the ChanMeasure() script command.
- There is a new ArrMedian() script command to find the median of a numeric array.
- The Sampling configuration, Channels tab now lists the estimated data rate written to the data file.
- Commands that format values as text for output (Message(), Print(), Print$() and PrintLog()) will now accept zero length arrays.
- You can now use the System$(-2) script command to get the Spike2 version, build date and time as text.
- The File menu Import Options dialog has been extended so you can set configuration options. Previously, configurations could only be set from a script.
- The WindowTitle$() command has an additional flag to remove [32-bit] from the title of .smr files.
- The ViewFind() command is extended with flags to allow more control over the matched name.
- Importers that read data as RealWave (e.g. Ponemah) used to scan the data before import to find the data range. This could take a lot of time with large files. We now find the range of the data while transferring it to the output file, which can greatly reduce the time to import huge files. We have also increased the size of the data buffers in an attempt to speed up data import. As an example, the time to import an 80 GB Ponemah 6 file has reduced from 5 hours to under 2.
- The Ponemah file importer has been extended to allow data to be filtered by Subject, Channel and time range. For example, you can set it to import all channels that contain ECG in the channel title from 10 hours to 11 hours. With huge files with many channels this can reduce import times from hours to seconds when only sub-sets of the data are required. It may still take a while to locate the wanted data.
- There is a new example Talker program, SoundCard.exe, included if you select Talker support. This allows you to source waveform data from a Windows sound source, for example a microphone for comments.
- The SampleProcess(chan%, -2, index%, args) script command did not return the down-sample process ratio% value.
- Import of Ponemah files with multiple sections or with the first section of a channel not at time 0 placed the data at the wrong time.
- The online Down-sample process worked for a Derived channel but not for a sampled channel.
- The text output sequencer DIGPBR command in the Micro3 did not work.
- The text output sequencer DIGPS command in the Micro3 and Micro2 had a potential failure (never observed) when both outputs were generating pulse trains.
- Editing a RealWave data channel, for example with the Linear Predict command or the ChanWriteWave() script command, could crash Spike2.
- ArrHist() did not allow integer data array.
- Using Evaluate when there was an unsaved script caused break points in the unsaved script to be ignored.
- The PlayWaveCopy() script command did not work in single channel case with a one dimensional array argument.
- When inspecting script values in the script debugger, you could change the value of items marked const.
- When inspecting arrays of strings in the script debugger, multi-line strings are now displayed correctly in a resizeable dialog.
- The Sampling Configuration, Automation tab does not let you exit with a Name template set and an invalid Directory path. Unfortunately, editing the path did not cause the path to be rechecked, making it difficult to clear any error.
- The Active Cursor settings dialog displayed an incorrect field description in Repolarisation and Data points modes.
- In Triggered sampling mode, sampling using the keyboard as a trigger with no code set did not work.
- When editing a script, the Edit menu Replace command could place the replacement text in the wrong place.
- The Copy Cluster Values command writes extra measures of clustering quality (Lratio and Isolation distance).
- You can double-click any channel in a time view to zoom it (maximize). Previously only channels with a Y axis could zoom.
- If an output sequence fails to load, the error message box now includes the source line that caused the failure.
- The Cursor menu Display all command now displays a little data before the first and after the last cursor to make them easier to see and to make space for any cursor label. If you hold down the Ctrl key, the command considers only active cursors when calculating the new x range.
- There are new options in the Measurements to XY views and to Data channels dialogs to allow cursor adjustment if a cursor seek operation fails or if the Ignore Cursor 0 step option is triggered.
- The Cursor adjustment dialog that can appear during Measurements to XY views and to Data channels has new options to fetch vertical cursors that failed to step and to display all the active vertical cursors.
- Improvements to Copy as Text and Export as Text for time view channels: Level event channels output the level at each transition, WaveMark channels include the number of traces and list multiple traces in columns, the SUMMARY output section now lists more information for the channels and uses the same format for every channel.
- The Copy for Spreadsheet and Export As Spreadsheet command for Level event channels has been changed to show high levels as 1 and low levels as 0. Previously it displayed the number of edges in each time range, which was not very useful.
- There is a new Edit menu Preferences option in the Compatibility tab to revert the Copy/Export as Text and Copy/Export As Spreadsheet changes to the old format.
- The LastTime(), NextTime(), MarkEdit(), MemSetItem() and MemGetItem() script commands allow the codes% array argument to have size 1-4 for codes and 5 to access the codes and the extra 32-bit integer value associated with each marker in a 64-bit smrx file.
- The MemSetItem() script command can now report the index of the first item at or after a time.
- The ArrSort() script command now accepts zero length arrays (which does nothing) to save the user testing for zero length to avoid a script error before calling.
- The ChanList() script command now allows a zero length array.
- The ArrFilt() script command runs significantly faster (takes around half the time with large arrays).
- Unmodified array arguments of the ArrStats(), ArrSum(), EditCopy(), PlayWaveCopy(), SampleWaveMark() script commands are now const.
- The Yield() script command can return the current allow% state and preserves it if allow% is negative.
- The ArrStats() and ArrSum() script commands can set alternative (slower) algorithms for more accurate summation.
- The Len() script command can report the number of elements in a multi-dimensional array.
- The MarkEdit() script command can modify the codes of Level event channels stored in 64-bit smrx files (as they are stored as Marker data).
- Level event channels sampled by a Micro1401-4 inverted the input data. You can use the InvertLev.s2s script in the Documents/Spike10/Scripts folder to invert them. Backup your files before running the script as it modifies the data.
- When using the Measurements to XY views and to Data channels commands with a curve fit and the User check positions option set, the displayed fit line was for the previous step.
- The Cursor Regions and Cursor Values dialog boxes did not record changes to check boxes, radio buttons or mode.
- The Sampling Configuration dialog Automation tab warned you if you browsed to a non-writeable folder, but still set it.
- In the Output sequencer text editor, the DIGPS, DIGPC and DIGPBR sequencer instructions did not highlight.
- In the Output sequencer, a label without white space after the colon was treated as an error, for example "Label:DAC 0,1".
- The script compiler did not flag an error if you used resize on a const array.
- The script compiler gave an error if a resize statement was not terminated by a semicolon, so var y; if 1 then resize y endif was not allowed.
- The ArrConv(), ArrCWT(), ArrDot(), ArrFilt(), ArrHist(), ArrSpline() and SerialWrite() script commands did not accept const arrays.
- The documentation of the following script commands did not list unmodified array arguments as const: ArrRange(), ChanWriteWave(), FileTimeDateSet(), FIRResponse(), GrdSet(), MarkSet(), MatLabPut(), PolyEval(), PolyRoot(), SSTempSet(), ToolbarEnable().
- The View menu Multimedia files command failed to open .mp4 files if they held audio only (no video).
- In the Spike shape dialogs the zoom effect when you clicked in the data area to start dragging the current spike to a template was too fast to be visible.
- Using the HCursor() script command to set a Spike shape dialog cursor value beyond the y axis range could set a negated version of the position.
- The text importer did not save individual channel configurations in a valid format.
- Stepping backwards by a data point in a virtual channel (for example with the LastTime() script command or an active cursor search in Data points mode) stepped by two data points.
- The Grid view default column titles skipped over the AA-AZ series when more than 26 columns were set. The sequence was A-Z, BA-BZ, CA-CZ and so on and should have been A-Z, AA-AZ, BA-BZ...
- Copy as Text of WaveMark channels included an extra separator between the Units and the Rate.
- If you wrote data to a non-waveform channel (for example with the ChanSave() script command), then overwrote it (allowed with wave-based channels but not event-based channels), Spike2 attempted to write the data, resulting in a corrupted data channel.
- In a Time view, the Copy as Text output format did not match the documentation. We have revised it to make the output more regular (and useful) and rewritten the documentation. If you exported data as text you may need to revise your import method or use the new Edit menu Preferences->Compatibility option to output the old format.
A WaveMark data event created by the New WaveMark dialog could have
up to half the waveform replaced by zeros.
- The SerialOpen() script command can now get a list of available COM ports.
- There are new script functions PolyEval() to evaluate polynomials and PolyRoot() to factor (find the roots) of polynomials.
- The FIR and IIR filter dialogs now use m1, v1 as the channel number for memory and virtual channels rather than 2001, 4001.
- The Process() and ProcessAll() script commands now accept a negative start time, which allows measurement commands to find the first item regardless of the minimum step size.
- The new EditImageLoad() script command loads an image file to the clipboard.
- You can append tod to a time in a dialog expression to set a time in Time of Day axis mode, (see Fixes 8, below).
- The RasterSet() script command now accepts a zero sized data array to set a raster line with no data.
- The default (what happens when you press the Enter key) when querying if OK to delete a newly-sampled file or lose memory channels on file close, has been changed from Yes to No to prevent accidental loss of data.
- The context (right click) menu item to set a vertical cursor position did not trigger an active cursor search.
- It was possible for graphical sequencer local labels to cause code generation errors when operations fell on consecutive instructions.
- The BinomialC(n%, k%) script command did not allow n% or k% to be 0.
- The ChanKey(chan%, get%) script command generated an error if get% was not zero.
- In the non-PCA Clustering dialogs (for example, Cluster on Measurements), the command to set the Z axis to time could clear all filter codes (so coloured dots became black).
- The ChanSave() script command changed the mouse pointer to the Wait (hourglass) cursor. This caused unpleasant cursor flashing if the command was used in a loop. Spike2 no longer does this. You can use the flags% argument to display a progress dialog for slow operations.
- If the EditImageSave() script function failed, it stopped the script; it should have returned an error code.
- In Time of Day axis mode, the Cursor Position dialog always treated the entered value as time of day, so expressions such as MaxTime() generated nonsensical results. You can now use the tod suffix to force a time to be interpreted as a time of day.
- In a script, passing a zero length sub-array to a function as array[1:0] was allowed, but using array[0:0] was not.
- The Cursor fixed flag (F after the cursor number) displays only if the cursor is fixed. The other flags set by CursorFlags() to disable context menu options do not show the F.
- There was an unnecessary 'Are you sure?' query when closing a newly-sampled file longer than 5 seconds that had already been saved.
- The text editor can now highlight the line containing the text caret and ‘words’ that match the current selection.
- The ChanKey() script command has a new flags% option to position the key so it overhangs the visible view area.
- Sampling supports Talker specification version 5, which has potentially more efficient data transfers.
- The context (right-click) menu for an overdrawn channel can be obtained by right-clicking on the channel number.
- S2Video has a new Configuration option to include the ffdshow Raw Video filter that allows some cameras to connect.
- You can prevent interactive positioning of vertical cursors from the right-click cursor context menu with the Fix position command.
- The new CursorFlags() script command gives you more control over interactive use of vertical cursors.
- There is a new file importer for xdf files (LabRecorder, LabStreamingLayer).
- The IIR and FIR filter dialogs cope better with NaN values in RealWave channels.
- The online Measure to channel command can send output to the Keyboard marker channel that can trigger writing to disk, the output sequencer and arbitrary waveform output. The MeasureToChan() and MeasureX() script commands are modified to allow this.
- Command recording now attempts to record online processes when you open a file for sampling.
- Spike2 no longer queries attempts to abort sampling or close a newly-sampled data file without saving it if the file is less than 5 seconds long.
- Changing between text Find and Replace dialogs preserves the search text. The Find what field of these dialogs updates in a less surprising way when the dialog activates.
- We no longer allow path separator characters (for example ‘/’ and ‘\’) in the File name template field of the Automation dialog as they cause unexpected file names and extra file folders.
- The Graphical sequence editor has been updated for smoother dragging of pulses and reduced flicker.
- It was possible for user-defined cursor labels that displayed differences of cursor positions to display the wrong value when cursors moved.
- In a Time view with a WaveMark channel drawn in Overdraw WM mode and a lot of data, such that the display took more than 2 seconds to update, a screen redraw could repeat many times before it finished.
- Recording file import generated a FileConvert$(...) script command with a missing comma.
- Several built-in script commands did not have tooltip text set.
- Recording the IIRApply() script command always set the eTime argument to 0 or 1.
- In the Graphical sequence editor, Arbitrary waveform items could vanish from the display when double-clicking or when selecting them in the control track.
- Export of XY data to MATLAB exported multiple copies of the first XY data point.
- NaN and Infinity values in a RealWave channel (from a Talker or an Imported file) caused problems throughout Spike2 that manifested as drawing glitches, strange axis ranges in filtering dialogs and peculiar results from digital filters. To avoid this, Spike2 now scans all data read from RealWave channels and replaces NaN values with 0.0 and infinities with half the maximum allowed value (to allow headroom for arithmetic). You can remove these values (leaving gaps in the data) by adding the Skip NaN channel process. You can fill the resulting gaps with the Fill Gaps channel process.
- Previously, recording opening a data file for sampling wrote a script that relied on the current sampling configuration to provide any processes associated with sampling. We now disable the use of the current configuration and instead attempt to generate the same processes with script commands. If you prefer the previous state, change the second argument to the recorded FileNew(0,1) command from 1 to 3 and delete the commands that set up processing that follow.
- If an installation of Spike2 had no LAST.s2cx or DEFAULT.s2cx configuration file, and the Tip of the Day was turned off, Spike2 started up with the main window hidden.
- The Channel Image dialog for a time view warns you if you set Fill background mode when sampling or Rerunning that the bitmap will not display.
- Script debug windows (Local, Global, Watch and Call stack) are moved to visible positions when activated; previously if you moved them off the screen they were difficult to find.
- You can change the background and foreground colours of the Graphical sequencer editor.
- If you selected All Channels when exporting to a MatLab file, the export failed.
- Event channel searches (as in Active cursors, Measurements to XY or to Measurements to a data channel) in other than Data points or Expression mode could hang up.
- A Measurements to a data channel process with more than one measurement per iteration generated a spurious error when read from a .s2cx configuration file.
- When restoring the Rate and Mean frequency drawing mode from a resource file, the Time width could be increased by 1 clock tick and very small (nonsensical) values were not rejected.
- The Edit menu Preferences option, Fill cursor labels, was not remembered between Spike2 sessions.
- Some Font selection dialogs did not set the Font Style field to match the initial font style (Bold, Italic, Regular...).
- There is a new virtual channel function TEvt() to generate the time since the last event on a channel.
- The Virtual channel Copy waveform or Level event dialog has an extra field to allow trace selection with multi-trace WaveMark channels.
- The FileName$() command has a new option to use a text string as the file name source.
- When drawing Result view rasters, the symbols are drawn scaled by the dot size setting (they were very small on high resolution displays).
- The SampleCalibrate() script command returned double the scale factor that it set when the 1401 was set for 10 Volt input range.
- Active cursor Peak search with Amplitude set to 0 could detect two consecutive points with the same data value as a peak.
- Drawing a zoomed in Waveform channel could result in data off the bottom of the screen appearing on screen.
- Adding and deleting Memory channel Level event items did not cause the display to redraw to the end.
- If the Windows menu Close All command generated a dialog to warn that closing would lose data, the Cancel option caused the dialog to reappear. It now cancels the operation.
- In version 10.09 with Active cursors, the Expression cursor mode did not iterate in the Measure to XY and Measure to Channel commands.
- In a Result view, the Raster Draw mode settings Sweeps, Sort and Symbols were not saved and restored when the view was saved to a file.
- In the Sampling Configuration, you can apply a real-time channel Process (for example filter or rectify) to a Talker-based Waveform or RealWave channel.
- In the Sampling Configuration, you can Derive a channel from a Talker-based Waveform or RealWave channel.
- The Sampling Configuration Channel dialog for 1401-based channels now checks changes to numeric fields as you type.
- You can use place holders (for example %c for the channel number) in the channel Title and channel Comment fields in the sampling configuration dialog and script commands.
- Sampled TextMark channels that use a COM port can use any port on the computer, not just those in the range COM1 to COM19.
- The Sampling Configuration has a new Script tab to set a script that runs at preset times during sampling. There is a new SampleScript() script command.
- The Sampling Configuration Mode tab can now set scripts that are run when a trigger event occurs or at the start and end of each cycle of Timed sampling.
- The SampleTrigger() and SampleMode() script commands are extended to support scripts that run in response to sampling events.
- The SampleHandle() script command can now report the last sampled (and not yet closed) file.
- The SampleRepeats() script command can now report the repeats completed and the current file number.
- The File Export dialog for data files has been modified so the As Set check box also applies to the list of ranges.
- WindowTitle$() script command now has a flags% argument.
- The Create New Buffer dialog allowed you to create a WaveMark channel with fewer than the minimum (6) data points.
- The MinMax() script command used to search a WaveMark channel with n traces could start the search (n-1) times the spike duration too soon.
- The SampleWaveMark() script command did not allow you to set multi-trace channels with an odd number of data points.
- If there was a disk problem when updating Talker licence information, Spike2 could crash.
- The Sampling Configuration Mode tab in Triggered mode allowed you to select Talker waveforms as the trigger channel.
- The File Export dialog progress indicator failed when multiple output ranges were set.
- The script FileOpen(name$, 6) command to load a configuration file could return 0 instead of an error code if there was a problem with the file or the file contents.
- When editing text in a grid view cell, the Del key did not delete characters to the right of the text caret.
- The Analysis menu Linear Predict... command in a Time view had no effect.
- Arbitrary waveform output to a Micro1401-4 with the 4 DACs option could not use more than 2 DACs at the same time.
- Active cursor Peak search with Amplitude set to 0 could detect two consecutive points with the same data value as a peak.
- Drawing a highly magnified Waveform channel could result in data off the bottom of the screen appearing on screen.
- Adding and deleting Memory channel Level event items did not cause the display to redraw to the end.
- The new Analysis menu Linear Predict... command will replace short artifacts in Time view waveform data and Result view channels with estimations based on the previous and following data. The script language equivalent is ChanLinPred().
- The vertical and horizontal cursors in Time, Result and XY views have a new option to display the position as the difference with another cursor.
- The About Spike2 dialog displays Sync after the 1401 monitor revision if the connected 1401 is time synchronized to a different 1401.
- In the script editor, the Functions list box displays the name of the user-defined Func or Proc that contains the text caret.
- There is a new ChanZoom() script command to control and report the zoomed state of a Time or Result view.
- The SampleSeqStep() script command now has access to the keys, comments and display strings associated with text and graphical output sequencer steps.
- In the Sampling Configuration, you can apply a channel Process to a RealWave source channel in addition to a Waveform channel.
- The Edit toolbar was not added to the list of script-controllable windows in Spike2 version 10; App(4) always returned 0.
- If you ran a script using the script editor Run button and the script created views but never set a front view, it was possible that the Run button needed to be clicked twice to run the script again.
- Using the BReadSize(8,...) or BWriteSize(8,...) script commands with an integer array argument could cause Spike2 to crash.
- Using the SampleTrigger() script command variant (added at version 10.06) to set a trigger code as a string stopped the script with an error.
- When used with a Micro3, Micro4, Power2 or Power3, the PlayWaveStatus$() script command pos% argument reported the position in bytes, not points. This error was introduced in Spike2 version 7. The Micro2 and Power1 were not affected.
- Recording ProcessGate() in fixed duration mode from the Gate Settings dialog reversed the pre and len arguments.
- In a script, -1 >> 64 evaluated to 0; it should evaluate to -1.
- When sampling or rerunning with a visible Level event channel in Line drawing mode could cause the mouse pointer to flicker.
- When sampling or rerunning, it was possible to cause Spike2 to hang up in Measure to Chan processing in Automatic mode with Update window every set to 0.0 when searching a Waveform channel with a slow sample rate.
- In version 10.07, when Interact() was used in a script loop that did not change the active view, every second button click on the Interact bar was ignored.
- If you have both a CED1902 and a Micro1401-4, the Conditioner setup reported a spurious "illegal arguments" error after setting up the 1902.
- The EDF importer now supports asymmetrically-scaled integer data; previously such channels had incorrect offsets.
- The S2Video program has a new option to set frame time stamps.
- Reviewing MP4 video files now supports frame accurate stepping.
- You can now include channels without a y axis in a group (but they cannot be the group head). This allows the use of a channel drawn in State mode to colour the background of other channels.
- There is a new script command ArrRev() that reverses the elements of an array.
- The XY Draw mode dialog now allows changes to the channel sort mode.
- You can display axes in the data area of Time, Result and XY views. This is expected to be used in XY views mainly for publication purposes.
- You can change the track labels in the Graphical Sequence Editor.
- The Sampling Configuration dialog, Channels Tab supports Ctrl+Copy As Text to copy Tab-separated columns of data.
- The Sampling Configuration dialog title is no longer cleared by sampling (to preserve the name of the configuration file).
- The Memory buffer Import channel dialog has improved error reporting.
- The clickable area that clears selected channels in Time and Result views now has a tooltip.
- The Cluster on Measurements setup dialog can copy and log the measurement configuration as text.
- The Sampling Configuration now tracks the last .s2cx file that is not LAST.s2cx or DEFAULT.s2cx. The SampleConfig$() script command has a new option to access it.
- In a script, you can use DlgValue$() to set X Value fields as text, for example "Cursor(1)". Previously this displayed the position of cursor 1 as a number.
- The Export As dialog for data files now updates the dialog fields when you click on a defined range and detects errors in the channel list and time range.
- The Help includes information on configuring the Xvid video codec.
- The XY view y axis title was not restored when an XY file opened.
- The SampleConfig$(3) script command put the TextMark channel comment in the wrong column.
- The Special channels field of the Sampling Configuration Set maximum channels dialog was always set to 0 when the dialog opened.
- A sampling configuration with a missing output sequencer file generated 3 message boxes, now it generates one.
- The Mean in X and SD in X measurements in a Result view gave results in pixels, not x axis units.
- The documentation incorrectly listed the dialog expressions CXn as CnX (n = 0-9).
- Recording dialogs with X axis positions did not translate CXn to CursorX(n).
- Recording Ctrl+A (or a click below the channel numbers) in Time and Result views generated code that did not work.
- In an XY view, the Y Axis Range dialog now treats All channels as all visible channels to match Time and Result views.
- The FileList() script command did not work for type% set to 12 (XY files) and 17 (Grid files).
- In a script, a user-defined function with a non-array argument could accept an array in some circumstances.
- If the Line thickness of axes was set to 1 pixel in the Edit menu Preferences Display tab, it was possible for axis scrolling to leave pixel dust behind.
- Overdrawn channels drew the background too often resulting in a corrupted display during sideways scroll when a grid was turned on or the top overdrawn channel had the background colour set to override the view colour.
- Using FiltApply(-1,...) before creating the temporary filter would crash Spike2.
- Changing options in the S2Video Configuration could cause the video display to vanish.
- Print screen supports Cursor Regions and Cursor Values dialogs and uses a proportional font for window titles.
- The Sampling configuration dialog Mode tab has a new option to control the s2video application Slow frame rate when not writing data to disk. The script language equivalent is the new SampleFPS() script command.
- The output sequencer can now play trains of digital pulses at the same time as other sequencer operations.
- In the Sampling configuration dialog Mode tab, Triggered mode allows you to specify a complete marker filter. Previously you could choose to match a single code. The SampleTrigger() script command is extended to match.
- The Sampling configuration dialog Mode tab now checks the fields as you type and lists problems at the bottom of the page.
- The Marker Filter dialog now supports specifying the marker filter as text, which can be a lot quicker than selecting check boxes when a range of values is required. You can also Copy and Paste filter specifications using the clipboard.
- The MarkMask() script command is extended to set and get marker filters as text.
- The Draw Mode dialog now reports errors in editable fields and disables the OK and Draw buttons on bad values.
- The Grid view has extra context menu options: Grid size, Fit to Grid, Cut, Copy and Paste.
- The Cursor Regions and Cursor Values dialogs record settings, selections and edit copy operations.
- The Cursor Regions and Cursor Values dialogs have improved interactive cell selection and support the script commands: Selection(), Selection$(), MoveTo(), MoveBy().
- Modeless dialogs opened from right-click context menus, for example the Draw Mode dialog, now open next to the mouse pointer.
- The GrdColourGet() script command now reports the displayed cell colour, even if not overridden.
- In a script, the Toolbar() and Interact() bars no longer grab the input focus when you click on one of the bar buttons. This is useful during sampling when you want keyboard input to go to the keyboard Marker channel.
- We have increased the maximum length of a script language string variable from 1,000,000 to 100,000,000 characters.
- In the Clustering dialogs, the INTH dialog now remembers its position.
- If Spike2 loads a sampling configuration file during startup (...\DEFAULT.s2cx or ...\LAST.s2cx), it writes the name to the Log view.
- There are new High DPI settings in the Edit menu Display Preferences.
- The EDF importer now recognises more types of BDF file. Previously, some specifications were unrecognised and the importer would revert to importing the data as though it were 16 bits long not 24, leading to garbage data.
- The MMFrame() script command is now supported for MP4 files with additional Key frame options.
- In the Output sequencer with a Micro4, the DELAY 0 instruction caused a very long delay (more than 4 billion steps); it should have caused no delay.
- Recording of actions that involve changes of the current view did not always select the new view (for example when opening the Cursor dialogs).
- An open and modified Grid view could grab the input focus once every 5 minutes.
- Named Grid views were always saved on close, even when the user asked for them not to be saved.
- When a Grid was loaded from a .s2gx file, the current View and Application colours were not applied and the font used to edit grid cells was not updated.
- When the current view was a Grid or an Info window, the Global Debug window displayed the window type as "Unknown".
- Using the Grid view Fit to Grid command on a maximized Grid view changed the view size, but left it maximized.
- In the Graphical output sequencer, simultaneous digital outputs and digital Marker inputs were not sequenced correctly.
- In the Graphical output sequencer, in the Section settings, changing the section comment did not enable the OK button to apply the change.
- In the Cursor Values and Cursor Regions dialogs, the first radio button (for C0 and C0-C1) had no effect.
- The documentation of the ToolbarMouse() script command was incorrect for the Move%() call-back vh% and ch% arguments.
- The Sample Bar dialog Add... button did not read the label and comment stored in the added file and would accept old-format .s2c files that cannot be used in modern versions of Spike2.
- In Spike2 version 10.05, in a user-defined dialog, the default button (activated by the Enter key) was Cancel, not OK.
- In a Grid view, the F1 key did not open the on-line Help.
- In Spike2 version 10.05, the DrawMode dialog Data Index field for RealMark data had no effect.
- Time views ended one pixel before the time of the very last item.
- Arbitrary waveform output to the Power3A did not work except at very slow rates.
- There is a new Time view drawing mode, Interval, that displays the intervals between events.
- You can set cursor labels to draw with a non-transparent background, which makes them easier to read against a 'busy' waveform background.
- Grid views now have colours that can be be set by view or by cell. There are new script commands: GrdColourSet() and GrdColourGet() and extensions to ViewColourSet() and ViewColourGet().
- Recording of colour changes now includes the name of the changed item.
- Grid views can be resized interactively and you can set the grid column headings interactively.
- Running the Principal Component Analysis dialog out of memory with a huge number of spikes now gives a specific reason rather than a generic error.
- In the Help menu About Spike2 dialog, the Copy command now includes the Spike2 installation folder in the information copied to the clipboard.
- In the script language, anywhere a channel specifier can be used, you can now use -6 to mean unselected channels.
- The horizontal cursor and vertical cursor active cursor mode dialogs now have buttons to swap to the other active cursor mode dialog.
- The first time you use the Set Marker Codes dialog it reminds you about the Ctrl+Alt+Drag operation to select spikes.
- You can now save data to Matlab files with names that include non-ASCII characters.
- The PlayWavePoints() script command can now report the maximum points in an area.
- The new FileStatus() script command can report file system object properties, such as read-only, directory, hidden.
- The new DrawModeCopy() script command applies the drawing mode of one channel in a time or result view to a list of other channels.
- The new Replace$() script command generates a string replacing all occurrences of a sub-string.
- The TDT importer now reports missing .sev files and does the best it can with the ones it finds; previously it gave up if files were missing.
- You can use the ToolbarEnable() script command to detect if an Idle function is set for the toolbar and to count the number of enabled buttons.
- User-defined dialog slider controls behave better when set to integer mode and arrow keys are used.
- The DlgValue() script command can now change the allowed range of real and integer fields in a user-defined dialog.
- The script Locals and Objects debug windows have a new View menu option to show only the name of variables, omitting the Proc/Func or Object name, to reduce screen clutter.
- You could crash Spike2 with a script that used an Object type name where an Object variable name was expected.
- The Channel Colours dialog could get confused when the new options to show only Visible or Selected channels were used.
- Recording actions that included user-defined text did not detect embedded " and \ characters in all cases.
- Setting time view channel units for a waveform drawn as a Sonogram or a RealMark channel drawn as frequency no longer changes the displayed units away from 'Hz'.
- Sampling and Rerun of an Event channel drawn in Mean Frequency mode filled the 'not yet reached' time area with a line at zero. This area is now left empty to match all other drawing modes.
- When cursors were more than 1 pixel wide, it was possible for them to leave 'pixel dust' when dragging items such as the sonogram key.
- Every time you started Spike2 it displayed the Help page for a program update.
- The channel number of grouped channels is drawn in the primary colour of the channel; changing the channel primary colour did not redraw the channel number.
- Using the New Horizontal cursor button added a cursor to lowest displayed channel with a y axis, even when it was a group member (when the cursor should have been hidden), resulting in an inconsistent visible state. Now, we add the cursor to the head channel of the group.
- You could not open the Active Horizontal cursor mode dialog if horizontal cursor 1 did not exist.
- The Calibration dialog and the Set Marker Codes dialogs did not display error messages.
- The Sampling configuration dialog did not display the Scale and Offset values for RealWave and Derived channels.
- It was possible for Derived channels to display the wrong sample rate in the Sampling configuration dialog. They now display the down-sample ratio.
- The Derived channels setup dialog did not save changes to the channel Units, Scale or Offset fields.
- The script command SampleProcess(chan%,-1) reported 'Bad argument count'.
- If you set a WaveMark with multiple traces and inputs that did not exist in the Sampling configuration, this caused an unhelpful generic '1401 command error'.
- Recording sampling using derived channels or waveform channels with online processes did not work.
- Recording sampling to a new 32-bit .smr file recorded as sampling to a 64-bit .smrx file unless more than 32 channels were set.
- Recording sampling to a new data file did not record negative de-bounce periods.
- Recording sampling a multi-trace WaveMark channel with non-sequential ports recorded as sequential ports.
- Recording sampling with Triggering set to Not triggered did not record; Use previous trigger mode was used.
- When recording the Marker filter dialog, the MarkTrace() script command set the wrong channel and appeared for non-WaveMark channels.
- The MousePointer() script command did not return 0 when used to load a .cur or .ani cursor image file that did not exist.
- InfoRun(2) reset the Info window timer, but set it running when it should have stopped.
- When the LastTime() and NextTime() script commands were used with multi-trace WaveMark data and the fourth argument was a vector, the returned data was always the first trace, not the trace set by MarkTrace().
- The return value of the ToolbarEnable(n%) script command when button n% did not exist was 0, not -1 as documented.
- In a grid view, the XHigh() script command returned 0 if there was unused space at the right-hand side of the grid view, it now returns the number of columns.
- Recording creation of a grid view did not set the grid size.
- The ViewColourSet() and ViewColourGet() script commands generated 'View is wrong type' errors when an Info window was the current view.
- The DrawMode(), MinMax() and ChanValue() script commands ignored the edge% argument in Time view drawing modes 11 and 12 (the BPM modes).
- Spike2 could crash when attempting to update a corrupt resource file.
- Spike2 took a long time to read resource files holding very large (many MB) PlayWave memory areas.
- When debugging a script that uses Objects, there were several problems displaying objects and their members.
- If you scrolled a Time view that contained a WaveMark channel drawn in OverdrawWM mode and a Sonogram with a Key, the Key was scrolled and then redrawn, resulting in a mess.
- In Gated processing mode, with User check positions set, the Yes to All and Cancel buttons now apply to the entire process request, not to each gate condition.
- Binsize() added as a Dialog expression.
- The Process dialog tracks changes to start and end time fields and reports errors.
- New Reverse$() script command to reverse a string.
- Recording of Measurements to a data channel was incorrect if you returned to the Process Settings... dialog and processed the data again.
- Recording of the Process Gate dialog reversed two arguments in variable gate mode.
- The Process Gate dialog and ProcessGate() script command were missing Help links.
- A sampling configuration file or a Resource file with a Process that used variable length gating would not read. There is a script (Fixs2cs.s2s) to fix the file.
- The ChanFit() script command variant used with a single argument generated a "Wrong number of arguments" error.
- Saving the sampling configuration did not delete existing Processes before saving the current Processes. This could cause the number of sampling Processes to double on each save.
- Most file importers set the imported file time resolution to the closest value to 1 microsecond that is compatible with the imported data. The ADInstruments data importer set the file time resolution to the maximum value that matched the data, which was often inconveniently large.
- Measurements to a RealMark channel can now be of more than one item per channel, both interactively and when using the script language.
- Play wave output links from the keyboard and playwave toolbar can be disabled from the Sampling configuration Play waveform Tab and by the new PlayWaveCtrl() script command.
- The SampleKey() script command has a new optional argument to prevent triggering of the output sequencer and play waveform system.
- User input errors in the X Axis Range dialog now have an explanatory message in addition to disabling the Draw button. Errors in all fields are detected.
- The Change Colours dialog for data channels allows you to work with All, Visible or Selected channels.
- The FiltApply() script command can now request a display of a progress bar for a filter process that takes more than a second or so. Filter operations now display the ‘wait’ cursor to indicate that the operation could take a while.
- The ChanSave() script command can now display a progress bar if the operation take more than a second or so.
- The new Listener() script command counts the number of listener devices (copies of s2video) that are running.
- You could not pass a func or a proc name as an argument to a member function of an object.
- ChanTitle$() did not use the index% argument when reading back titles from a RealMark channel.
- Setting the Data field of the memory buffer Add Items dialog to - (minus sign) generated an unhelpful message box and marker code input was not checked. The items in this dialog are now checked as you type; illegal input disables the Add button.
- The Window menu drop down list of file names removed '&' characters from the list of file names.
- Recording the cursor 0 link button in the multimedia review window placed the comment marker in the wrong position.
- Measurement to XY and Measurement to channel could not use the User entered value measurement mode as it always generated a "X/Y Time is invalid" error.
- Progress dialogs displayed for time-consuming operations sometimes required more than one click on the Cancel button to interrupt them.
- The start of sampling is more robust, especially when using a script that did not release 'idle' time after SampleStart().
- Spike2 attempts to create any missing special folders on start up. This may help avoid privilege-related errors on systems used with multiple accounts. Warnings are sent to the log view on start up if missing folders could not be created.
- FilePath$(-6) added to report the Program Data file path.
- The Help menu About Spike2 dialog Copy button copies file path information for diagnostic purposes.
- You are now warned if the graphical sequencer output could not be saved as the S2PSEQ$.PLS file for sampling.
- Vertical and horizontal Cursor Label dialogs now have an Apply button to apply changes and leave the dialog open.
- ExportChanList() has a new flag% value (4) to display a progress bar during file export.
- Hovering the mouse pointer over a channel number displays the channel tool tip, which is useful with overdrawn channels.
- The BIOPAC importer was modified to cope with old format files with missing data at the end.
- The s2video program simplifies use of the xvid codec by presetting a required Registry setting.
- U1401Open() can now report which 1401 was opened when unit 0 (first available) was requested.
- FileList() supports a type% value of 17 for grid views.
- FileName$() can now report multi-media window file names.
- The PlayWaveCopy() and PlayWaveLink$() script commands can now be used when a 1401 is waiting for a trigger to start sampling.
- The ChanProcessAdd() documentation now includes Debounce (PType%=12) and also describes the default argument values for all processes.
- The ChanColourSet() script command can now set multiple channels with one call.
- MMPosition() is extended to report the cursor 0 link state and if a commanded seek or run to operation has completed.
- If sampling channels used for 1401 input were not consecutive from 1, the Edit WaveMark on-line spike shape dialogs did not adjust any values or display non-triggered data.
- The display of background data in on-line spike shape dialogs could vanish if you changed channel.
- In the output sequencer, the Format command converted the "-" character in "WAVEGO code,-,OptLab" to a space, which did not compile.
- In the Draw mode dialog, recording RealMark data drawn as a waveform in Dots mode recorded the dot size incorrectly.
- If you used the PlayWaveCopy(), PlayWaveKey2$() or PlayWavePoints() script commands when no 1401 was open for sampling, the script stopped with "Interpreter error (call CED): -581". These now generate the correct error message.
- When two or more Spike sorting windows were open and resized differently, changing channels could lead to a muddled display.
- When multiple waveform channels were grouped with locked axes and offsets, the channel spacing could become inaccurate.
- In an XY view, the ChanColourGet() script command did not get the background override (item% = 0) correctly.
- We have disabled the Alt+numeric keypad Up/Down keys that moved the current selection up and down one line; it moved the selected lines but when you released Alt it replaced the moved lines with whatever character the Alt+keypad presses had composed. Use Alt+Up/Down (non-keypad) keys to move the selected lines.
- The multi-media review dialog would close if it had the input focus and you pressed the Enter key.
- Deleting a channel in the sampling configuration that was the source of a derived channel did not delete the derived channel; this generated an invalid sampling configuration.
- The ChanDecorate() script command state read back has been changed in an incompatible way; previously you could not read back the mode without setting it.
- If you created a sampling configuration from a script that included WaveMark data (spike shapes), and did not use the spike shape setup dialogs to generate templates and set trigger levels, the spike shape detection trigger levels were set to 0. This could result in unexpected capture of very small spikes, triggered by noise. The trigger levels are now set to half full scale in this situation.
- The keyboard short cut to format an output sequence has changed from Ctrl+F4 to Shift+F4. This leaves Ctrl+F4 free for the standard Windows function of Close window.
- When multiple channels are grouped with locked axes and offsets, display Optimise no longer adds 5% extra space at the top and bottom of the display as this looks wrong when there are many grouped channels.
- Offline waveform output driving cursor 0 now cancels other drivers of cursor 0.
- Sampling configurations with gaps in the channel numbers sampled by the
1401 did not work and could crash. For example, sampling waveforms on channels 1,2,3 was OK, but sampling waveforms on channels 2,3,4 (omitting channel 1) was not.
- You can apply one or more processes to waveforms sampled by a 1401 as the data is acquired to both generate new channels or to replace the sampled data. The initial processes are: IIR filters, rectification, differences and down sample. You can apply these processes to the sampling configuration interactively or from a script.
- There are new script commands SampleDerived() and SampleProcess() to support derived channels and real-time channel processing.
- In the Spike shape sorting component, the Load and Save templates dialog scales templates (where possible) if the template scaling does not match the target channel scaling. You can disable this change in the Edit menu Preferences, Compatibility Tab.
- There is a new data file importer for ADInstrument Labchart files.
- The Spike shape sorting Template settings dialog has a new option to disable independent triggers when using the New WaveMark dialog with multiple traces. The SSParam() script command flg% argument is extended to support this.
- You can now rerun a Multimedia window when linked to cursor 0 of the associated time view, causing both cursor 0 to move to indicate the current replay position and the view to scroll to keep the cursor visible. The MMPosition() script command has new options to control replay and cursor 0 links.
- Cursor 0 can be driven by Spike shape dialogs, Measurement processing and Multimedia replay. Previously, all drivers could be active simultaneously, which was confusing. Now, each new driver cancels any active driver.
- In a time view, you are now allowed to delete sampled data channels once sampling has ended. Previously you had to close the file and reopen it to do this.
- Short reads of WaveMark data (Spike shapes) as a Waveform could fail to get data when the spike was the last item in an internal buffer; typically once every few hundred items.
- The setup for sampling spike shapes in version 10.00 was using the Spike2 version 9 command, so failed if this command was not accessible.
- The ColourSet(0,-1) and ColourSet(0,-2) script commands to reset the colour palette to light and dark modes did not invalidate the affected views.
- Spike shape templates read from resources are now scaled to match the target channel. This should be desirable, but let us know if it causes you any problems.
- The MMPosition() script command now uses a sPlay% value of 4 to move by frame (was 3 prior to versions 8.19a, 9.09a and 10.01).
- When you drag cursor 0 with a Spike shape dialog active, causing the dialog to search for a new spike, cursor 0 is not driven to the found spike position until you release the mouse button.
- The new Info windows display user-defined data view information (timers, time of day, data values, measurements) with optional speech output. These are configured interactively or from a script.
- The Micro1401-4 is supported.
- The script language now supports user-defined objects.
- The script language const statement now accepts initialization from values calculated at run time in addition to constant expressions.
- Automatic data processing can now use variable length gates (e.g. process while a signal is high). We have modified the Process dialogs to support this and there is a new ProcessGate() script command.
- Resource and configuration files save and load faster than in previous versions of Spike2 and use less system memory.
- The Edit menu Clear command can now be used in an XY view to delete the data points. It now records as EditClear() in both result and XY views.
- Recording of the Rerun dialog now works when the target time view is not the current view.
- The WAVEGO sequencer command now supports a no flag option ('-') to allow the use of the optional label with no flags set.
- The Set colours dialog is extended to support information window text and background colours. It also has tool tip support and a Help button.
- DlgGetPos() script command can return the dialog width and height.
- The FileList() script command now allows users to select files interactively.
- The FileConvert$() script command allows users to set the list of file filters to use or the initial file name template.
- The Time$(), FileTime$(), TimeDate(), FileTimeDate() and FileTimeDateSet() script commands have been extended to support times in milliseconds.
- Arbitrary waveform output takes advantage of the Power3A and Micro4 200 MHz clock to achieve better frequency resolution.
- The Str$(x,-1) script command generates the minimum number of significant figures that would allow x to be read without loss of accuracy.
- When searching in the text editor, a found search target that is off the screen is now centred vertically rather than being at the top or the bottom of the screen.