• UK
  • US
  • Français
  • Deutsch
  • Español (precios €)
  • Portugal
  • Polski
  • 日本人
  • 中國傳統
  • 简化中国

Technical history of Spike2 version 8

Freely downloadable for version 8 users.

Date Version Summary
06/2024 8.26 New
  1. There is a new importer for BrainVision format files.
  2. The Heka importer can use use regular expressions to select items for import and can import floating point data.
  3. The Bionic and Ripple file importers have been updated to work with version 3.0 files with 64-bit timestamps.
  1. If a Talker stopped suddenly, Spike2 did not respond to it disconnecting, making it difficult to restore the connection.
  2. Talkers (for example gTalk) that used long 'unique names' to identify channels could not be used in Spike2 version 8.
  3. In the Talker Info... dialog, the drift rate and standard deviation were displayed 1000 times too small.
  4. The fourth comment line in an imported file no longer starts with a new line.
  5. The Signal Conditioner dialog no longer vanishes if you use the Sample menu during sampling.
  6. The ViewTrigger(0,...) script command did not set paged display mode.
  7. The ChanValue() script command with a drawing mode of 6, 7, 11 or 12 used the BPM setting from the channel, not the one set by the command.
  8. Very long .mp4 video files could not be replayed past a few hours into the video. We have fixed the third party component that caused the problem and have demonstrated playback of a 30+ hour long video.
  9. A backwards active cursor search of a waveform channel stored in a 32-bit .smr file could report a position one point before the start of the search range, which would fail the search.
  10. During sampling to a 64-bit .smr file, a backwards active cursor search of a waveform channel could report the wrong position.
  11. The VirtualChan(chan%, 0{, expr$}) script command always returned 0, even when the expression was invalid.
  12. The graphical sequencer could report spurious timing errors when the time resolution changed.
05/2023 8.25 New
  1. The Talker Info... dialog can lock and clear the saved Talker drift rate and you can copy the dialog data to the clipboard or the Log file.
  1. A long stream of NaN (Not a Number) values in a RealWave channel caused the Skip NaN Channel process to stop reading data.
  2. In a grid with c columns (data columns indexed 0 to c-1), if the GrdSet() and GrdGet() script commands attempted to access column c (which does not exist) they would access column 0.
  3. If you right-clicked on a channel and selected Hide Channel, this did not record when Script recording was enabled.
  4. The XY Draw mode dialog recorded All Channels as 0, not -1.
  1. Using the command HCursorExists(0) (or any impossible cursor number) no longer generates a fatal script error and returns 0.
  2. When processing a Channel specification if the first character was an illegal single channel, for example, "0,2..4", the error was not reported. Now the error is reported, but parsing continues and reports channels 2, 3 and 4, as previously.
09/2022 8.24 New
  1. There are improvements to the Talker time drift compensation.
  2. The Micro4 maximum output sequencer step rate has been increased from 100 to 250 kHz.
  3. The arbitrary wave output for a Micro4 can now use a 10 MHz clock for more precise rate matching (was 4 MHz).
  4. File import support has been updated to match Spike2 version 10; copes better with files with out of order events and can import files that previously failed.
  5. 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).
  1. With a Micro4, when sampling both WaveMark (spike shape) data and Waveform channels, it was possible for Waveform channels to sample from the wrong channel.
  2. In the Sampling configuration, changing the channel used for a WaveMark (Spike shape) away from one also used as a Waveform channel could cause subsequent sampling to fail.
  3. The Micro4 burst mode sample rate was limited to 500 kHz, now 1 MHz.
  4. Setting a very narrow colour band in a colour scale (used for sonograms and cluster density plots) could cause a crash when the scale was used.
  5. Recording literal strings (such as a channel comment) that included a double quote mark (") omitted the " character.
  6. Video frame stepping with the Cursor 0 link could step to the same place twice, which wasted time.
  7. 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.
  8. The Spline2D(const p[][]); script command variant to set positions generated a fatal script error if the positions were not distinct. It now returns -1, as documented.
  9. The Binary file importer could crash if the imported file was an unexpected length for the contained data, did not save individual channel units, did not process FileConvert$() cmd$ options and did not open the associated Help file.
  10. The MC_Rack (*.mcd) data file importer could crash when opening a data file.
  11. Data file importers that have options to save and load configurations (such as the Text and Binary importers) could crash when reading a previously saved configuration.
  12. The Channel Process option to fill gaps in a waveform channel shifted the data by one point when filling a gap of a single point.
  13. The Neuralynx importer imported only the first channel in each folder.
10/2021 8.23 New
  1. The RasterSet() script command now accepts a zero sized data array to set a raster with no data.
  2. 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.
  3. The Len() script command can now report the number of elements in a multi-dimensional array.
  1. Level event channels sampled by a Micro1401-4 inverted the input data. There is a script in the Documents/Spike9/Scripts folder called InvertLev.s2s that you can use to invert Level event traces. Backup your files before running the script as it modifies the data.
  2. You could not set burst mode when sampling with a Micro1401-4.
  3. Passing a zero length sub-array to a function as array[1:0] was allowed, but using array[0:0] was not.
  4. The virtual channel expression Ec() that converts event counts to a waveform could misplace events that fell exactly on the boundary between two waveform points.
  5. EventToWaveform() accuracy improved to more closely match virtual channel event kernel functions.
  6. The script: var spk[4][2]; Len(spk); failed. It now returns the length of the first dimension.
  7. In the Output sequencer, a label without white space after the colon was treated as an error, for example "Label:DAC 0,1".
  8. The ArrFilt() script command did not accept const coefficient arrays.
  9. The View menu Multimedia files command failed to open .mp4 files if they held audio only (no video).
  10. In the Spike shape dialogs the visual effect when you clicked in the data area to start dragging the current spike to a template was too fast to be visible.
  11. 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.
  12. 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...
  13. If you wrote data to a non-waveform channel (for example with the ChanSave() script command), then overwrote it (which is allowed with wave-based channels but not event based channels), Spike2 attempted to write the data, resulting in a corrupted data channel.
  14. The script MLPut(500); Proc MLPut(real) MatlabPut("RealVal", real) end; set the Matlab variable RealVal as an integer, not as a floating point value. This was due to over-enthusiastic optimization by the script compiler.
09/2021 8.22a Fixes
  1. The text importer did not save individual channel configurations in a valid format.
06/2021 8.22 New
  1. Sampling supports Talker specification version 5, which has potentially more efficient data transfers.
  1. Some Font selection dialogs did not set the Font Style field to match the initial font style (Bold, Italic, Regular...).
  2. Event channel searches (as in Active cursors, Measurements to an XY view or Measurements to a data channel) in other than Data points or Expression mode could hang up.
  3. When restoring the Rate and Mean frequency drawing modes from a resource file, ridiculously small Time width values are rejected.
  4. The check box in the Tip of the Day dialog works reliably.
  5. The Add to online dialog marked all arbitrary waveforms except the one added as disabled.
  6. If when sampling data you set a Measurement to an XY view or Measurements to a data channel with a User entered value, this could cause Spike2 to crash.
  7. The context menu item to set a vertical cursor position did not trigger an active cursor search.
  8. The BinomialC(n%, k%) script command did not allow n% or k% to be 0.
  9. In the non-PCA Clustering dialogs (for example, Cluster on Measurements), the command to set the Z axis to be time could clear all filter codes (so coloured dots became black).
02/2021 8.21 Fixes
  1. Using the BReadSize(8,...) or BWriteSize(8,...) script commands with an integer array argument could cause Spike2 to crash.
  2. 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.
  3. When sampling data or rerunning with a visible Level event channel in Line drawing mode could cause the mouse pointer to flicker.
  4. 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.
  5. A Text dump of the Sampling configuration did not separate digital and DAC channels.
  6. If you have both a CED 1902 and a Micro1401-4, the Conditioner setup dialog reported a spurious "illegal arguments" error after setting up the 1902.
  7. The SampleWaveMark() script command did not allow you to set multi-trace channels with an odd number of data points.
  8. If there was a disk problem when updating Talker licence information, Spike2 could crash.
  9. The EDF importer now supports asymmetrically-scaled integer data; previously some channels would have incorrect offsets.
  10. When editing text in a grid view cell, the Del key did not delete characters to the right of the text caret.
  11. The SampleCalibrate() script command returned double the scale factor that it set when the 1401 was set for 10V input range.
  12. In the output sequencer, a digital output change at the same time as a DAC output change was delayed by 2 sequencer step times.
  13. Arbitrary waveform output to a Micro1401-4 with the 4 DACs option could not use more than 2 DACs at the same time.
  14. Active cursor Peak search with Amplitude set to 0 could detect two consecutive points with the same data value as a peak.
  15. Adding and deleting Memory channel Level event items did not cause the display to redraw to the end.
  16. 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.
09/2020 8.20 New
  1. The BIOPAC importer was modified to cope with old format files with missing data at the end.
  2. 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.
  3. The S2Video program has a new option to set frame time stamps.
  1. In the output sequencer, WAVEGO code,-,OptLab became WAVEGO code, ,OptLab when formatted, which does not compile.
  2. In the Draw mode dialog, recording RealMark data drawn as a waveform in Dots mode did not record the dot size.
  3. In the Edit menu Preferences Compatibility tab, changes to some of the fields did not enable the Apply button.
  4. When sampling, if a WaveMark channel did not use the template setup dialog, the channel trigger levels were set to 0.
  5. When sampling, untriggered WaveMark data did not always display, making it difficult to set the trigger levels.
  6. In the Sampling Configuration dialog Channels tab when using a file with more than 32 channels, the New... Talker channel command failed when channels 1-29 were all in use and the 'special' channels had not been moved.
  7. The SampleConfig$(3) script command to generate the sampling configuration as text with Tab separators put the TextMark channel comment in the wrong column.
  8. The script compiler did not generate an error if you passed an array to a user-defined function where a non-array, non-reference argument was expected.
  9. The XY view y axis title was not restored when an XY file opened.
  10. The Mean in X and SD in X measurements in a Result view gave results in pixels, not x axis units.
  11. The FileList() script command did not work for type% set to 12 (XY files).
  12. 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.
  13. Using FiltApply(-1,...) before creating the temporary filter would crash Spike2.
  14. Changing some options in the S2Video Configuration could cause the video display to vanish.
  1. 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.
11/2019 8.19a New
  1. We eliminated the 'stickyness' when dragging cursor 0 when linked to a video window.
  1. Removed spurious warning about driver signing during installation on 64-bit Windows 10 version 1909 (19H2).
  1. The MMPosition() script command has changed the step by frame code from 3 to 4.
11/2019 8.19 New
  1. There is a new data file importer for ADInstrument Labchart files.
  2. The Selection$() script command now works in a grid view.
  1. 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.
  2. The graphical sequence editor allowed you to edit the DAC settings values when no DACs were enabled.
  1. When the multimedia window position is linked to Cursor 0, it now waits for screen updates when the user drags the cursor. With the MP4 file format, a multimedia seek operation appears to cancels any ongoing request so repeated video position requests (such as when dragging the cursor) have no effect until the last request. This change may make cursor dragging feel 'sticky' as it is waiting for the video to catch up. The 'stickyness' was fixed in 8.19a.
10/2019 8.18a New
  1. The Micro1401-4 is supported.
09/2019 8.18 New
  1. The WAVEGO sequencer command now supports a no flag option ('-') to allow the use of the optional label with no flags set.
  2. The TDT file importer can now import data from .sev files referenced by the .tsq file.
  3. The FileConvert$() script command for the Neuralynx file importer will now accept relative paths. Previously it required a full path.
  1. Changes to the Digital marker Record data checkbox in the graphical sequence editor were not detected during sampling, so could not be applied.
  2. Recording changes to the y axis Title or Units of an XY view generated incorrect code.
  3. The LastTime() script command failed on a waveform channel with the Interpolate channel process applied.
  4. The MemSetItem() script command generated incorrect results for a WaveMark channel with multiple traces when the code% argument was not an array.
08/2019 8.17a Fixes
  1. It was possible to crash the Power3 or 3A with a specific sampling configuration (16 waveform channels sampled at ~32 kHz in burst mode). Typical symptoms of this problem are: sampling not starting and the 1401 flashing the DAC 0 and 1 LEDs.
07/2019 8.17 New
  1. We improved the speed of MMImage() and MMPosition() for AVI files.
  2. The MMImage() no longer causes the video window to flicker.
  3. The S64Fix button labels and text modified to make it clearer what a user must do to fix a file.
  4. We attempt to survive reading a resource file with a valid header but corrupted contents.
  1. The X Axis Dialog in Time of Day mode treated the Maxtime(), XLow(), XHigh() and Cursor(n) keywords as time offsets from the start of the file without adding on the start time of day. This could result in unexpected displays or the Draw button being disabled due to an impossible time range.
  2. The X Axis Dialog in Time of Day mode rounds the displayed Left and Right times to one more decimal place than the current x axis display uses. This could result in start and end times that exceeded the available time range, resulting in the Draw button being disabled.
  3. Waveforms did not display on some monitors if you repeatedly zoomed in until the gap between waveform samples was many million screen pixels.
  4. If you display many more waveform points than there are pixels on your screen, we draw the data in 'compressed' form to save time. If the pen width was set to be more than 1 pixel, horizontal sections of data displayed as 1 pixel wide rather than the requested pen width.
  5. In the binary importer, channel sample rates set on a channel by channel basis were ignored.
  6. In the binary importer, modifying individual channel information could cause other aspects of channel information to become corrupted.
  7. The WAVEGO output sequencer instruction has always allowed an optional label, but it was not documented.
  8. The EditCopy() script command to copy an array as a bitmap had a resource leak, causing Spike2 to slow down and eventually stop.
  9. (17/8/19) It was possible to crash the Power3 or 3A with a specific sampling configuration (16 waveform channels sampled at ~32 kHz in burst mode). Typical symptoms of this problem are: sampling not starting and the 1401 flashing the DAC 0 and 1 LEDs.
04/2019 8.16 New
  1. The s2video application is revised to use .mp4 files with improved frame timing and connects to a wider range of video sources. Spike2 multimedia support will read both .mp4 and .avi files.
  2. Added mp4comp application for off-line compression of .mp4 video files.
  3. The Spline2D() script command has a new variant to generate a rectangular grid of result values in addition to the current bitmap-format output.
  4. Extended the EditCopy() script command to copy real and integer arrays to the clipboard as bitmaps, matching Spike2 version 9.06.
  5. The ColourGet() and ColourSet() script commands are extended to support colour maps to match Spike2 version 9.
  6. We now defend against corrupted resource files that previously could crash Spike2 when they were opened.
  1. The Spline2D() script command could generate incorrect output when the 2D image array was a sub-set of a larger array.
  2. The help for ChanKey() inverted the flag% values for orientation and background colour.
  3. Backwards searches during sampling for recent sampled events could find events at times before the start of the search range.
  4. Setting the Y range of a channel by mouse click and drag made a visual difference, but did not change the y axis scaling.
02/2019 8.15 New
  1. The Sampling menu has new options to handle Talker Licencing.
  2. Channel selection changes in a Result view are passed on to dialog channel lists.
  3. The script FileName$() command is extended to make the most common file name manipulations easier.
  4. The ChanProcessClear() script command can now clear selected and visible channels to match Spike2 version 9.04.
  5. The time used for text markers that are logged from a serial line is now more accurately related to the arrival time of the first character of the serial string.
  6. The Bionic and Ripple importers were revised to cope with importing huge (more than 500 GB) files. The importers now run at about the same speed as copying the files (15 minutes for 500 GB rather than a day).
  7. Metafile waveform output of large numbers of points with a wide pen no longer uses filled rectangles as this caused several commonly-used programs to collapse when importing the images.
  1. The MemImport() script command and interactive dialog did not include the end time of an imported range, contrary to the documentation.
  2. The ChanProcessCopy() script command allows you to clear the list of channels, as documented.
  3. Using the Set Current command in the sequence editor when sampling was ready, but not started, caused the list of sequencer buttons in the control panel to clear.
  4. In the script editor, Toggle Comment works better (it excludes the last character of a selection); previously it was easy to comment out one extra line.
  5. The FileConvert$() script command no longer ignores the nMinCh% argument.
  6. The channel order of Result view Raster channels was not restored from sampling configurations.
  7. Drawing a histogram that hugely exceeds the y range of the display window could crash Spike2 in Windows 10.
06/2018 8.14 New
  1. The Talker interface now does a better job of cancelling out drift during the initial measurement phase.
  1. The FIRQuick() script command could crash Spike2 if nonsensical frequencies were set.
  2. It was possible for Print Screen view titles to end up with a bad font.
  3. Empty graphical sequencer sections that are used as the target of a branch are now properly generated with initial values and a length.
  4. The Sample Write enable checkbox now works for Talker channels as well as for 1401 data channels.
  5. If you set a data folder that does not exist for the Edit->Preferences->Sampling temporary data files, you are now warned.
  6. The ArrAdd(), ArrDiv(), ArrDivR(), ArrMul(), ArrSub() and ArrSubR() script commands did not allow a const second argument.
  7. If you aborted sampling before it started, this could leave the 1401 open, which could prevent you from sampling without closing down Spike2.
  8. If a virtual channel failed to load from a resource file, it was potentially left in a strange state, which could cause future problems with virtual channels.
  9. We no longer attempt to update read-only resource files.
  10. Various robustness changes for the Talker system including reloading Talker information as part of loading a Sampling Configuration. This eliminates the need for otherwise unnecessary Yield() commands in a script after loading a configuration file.
  11. The Play Wave bar now updates after a change to reflect the new state.
  12. The Measure to XY views dialog Points field could not be set to any value other than 0.
01/2018 8.13a New
  1. The BIOPAC importer can now import older format big-endian files. To import modern ACQ files, users also need the BIOPAC ACKAPI package.
  1. The Support folder programs did not run on some systems due to missing DLLs.
10/2017 8.13 New
  1. Exported MATLAB data now includes the source file name and the date.
  2. Attempts to read incompatible sampling configurations from Spike2 version 9.01 and later are detected and rejected.
  3. The DlgEnable() script command can be used to control the visibility of a bitmap in a dialog.
  4. The SampleText() script command now returns the time at which the text marker was added.
  5. There are improvements to the script compiler error messages to help identify the cause of a script syntax error.
  1. Importing or exporting a data file with a lot of channels (>300) and many different channel titles, Units or Comments, could result in a .smrx data file that cannot be opened. Such a file can be repaired by the S64Fix program.
  2. The script compiler system could get confused if you compiled (and ran) one script, compiled a second script which generated a compiler error and finally ran the first script.
  3. The Graphical sequence editor gave an error if a marker item was added with a code of 00 (which is the default code).
  4. In a script, Debug() followed by Interact(), caused the stepping state initiated by Debug() to be lost. That is, if you stepped over the Interact() command, when the user stopped interacting, the script ran rather than stepping.
  5. The code that adds messages to the Sampling Notes about channels that are sampled significantly slower or faster than requested always reported such channels as sampling slower, even if they sampled faster.
  6. Attempting to open a corrupted sampling configuration file could crash Spike2.
  7. The File menu Import command was adding channel titles to the start of all channel comments. It now only does this if a channel title is so long that it is truncated by the import system.
  8. Paste of non-ASCII UNICODE characters into a grid did not work.
  9. If you sampled data in 32-bit format, then used the FileSaveAs("", -1) script command to save the file, the default file extension offered was .smrx (though the file was 32-bit and should have the .smr file extension). Spike2 can read 64-bit files with either extension, but rejects 32-bit files with the .smrx extension.
  10. In the Sample Bar, the Write to Disk state for Immediate Start mode now works. If Immediate Start is not enabled, Write to Disk changes are disabled.
  11. If you Reset sampling (to restart it), the Cursor Regions and Cursor Values dialogs were not reset.
  12. Recording XAxisMode() in a time view could generate strange mode% values if the x axis units were not seconds.
  13. The SampleWaveMark() script command failed if you used an array of ports as the second argument.
  14. The SampleClear() script command did not clear the name of the last read sampling configuration returned by SampleConfig$().
  15. The Ec() and Et() virtual channel functions extended their search for events one data file clock tick forward more that they should. This could (in somewhat contrived circumstances) cause the Ec() function to generate a count that was 1 too large. The change to the Et() command output was usually too small to matter.
  16. The WSqu() virtual channel function could make the low phase one sample too long.
  17. If you double-clicked and edited an item in a TextMark channel, duplicates of the channel did not update.
  18. Several script commands would not accept const items as arguments when they should. For example, SampleTrigger(), YAxisAttrib() and YAxisStyle() would not accept a cSpc% argument that was declared const cSpc%[3]:={2,1,2}.
  19. The MemImport() command to create a WaveMark channel from a waveform and an event channel could miss the last waveform point if the event times were not aligned to the waveform samples.
  20. In a view with a logarithmic y axis, if you zoomed in by dragging a rectangle, the result displayed the wrong y axis range.
  21. In a sampling or rerunning time view, if you changed the channel organisation (e.g. by resizing the view) before the view started to scroll, the x axis range could change to an old value.
  22. When a script hit a break point or when Interacting with Spike2 in a script idle routine, if you opened the Cursor Values or Regions dialog, or any Spike-shape or Multimedia windows, this set the script current view, which could cause the running script to fail with a "Wrong View type" error.
  23. The online TextMark dialog did not save/restore marker codes in the drop-down list. Only codes 0-15 in the first marker code worked correctly.
  24. The ChanMeasure() script command and the Cursor Regions dialog could include an extra data point in measurements such as Mean value when a waveform channel had a channel process applied such as Smooth, and the end of the time range for the measurement exactly matched the time of a waveform data point.
  1. The Sampling Configuration dialog now responds to Talker configuration changes rather than reporting the last used talker state, which could be out of date.
  2. The MatLabOpen() script command no longer stops a script with a fatal error if MatLab cannot be opened and now reports a negative error code.
  3. The example Talkers are always installed unless excluded in a Custom installation.
  4. The value returned by the SampleText() command has changed; previously it always returned 0.
06/2017 8.12 New
  1. The Channel Settings dialog now truncates the Title, Units and Comment strings to the maximum allowed length so that they can be edited. Previously, long strings were flagged as errors but could not be edited.
  2. You can use the Duplicate button for Talker channels in the Sampling Configuration dialog when the next free Talker channel is of the same type. This can save a lot of typing.
  3. The maximum space you can set for horizontal channel labels has been increased from 17 to 33 characters.
  4. Talker channels that are currently unavailable are marked in red in the Sampling Configuration. The tooltip for that channel gives additional information.
  5. When the Configure... button is used in a Talker channel setup dialog, the local dialog is now disabled while the remote dialog runs.
  6. The SampleClear() script command is extended to enable the equivalent of the Sample menu Clear Configuration command to be generated from a script.
  7. Importer changes: Heka experiment name can be up to 80 characters.
  1. It was possible to crash Spike2 by zooming in a result view histogram in the x direction until the entire histogram spanned more than 2 billion screen pixels.
  2. The Set Cursor Position dialog now copes with the x axis being in time of day mode.
  3. The X Axis Range dialog now copes with time of day axis mode.
  4. When setting up for sampling, duplicate channels of channels created by processing, channel processes that acted on channels created by processing and marker filters on these channels were not created correctly.
  5. Virtual channels that depended on a duplicate of changed channel did not redraw.
  6. Duplicates of virtual channels did not extend invalid time ranges, which could result in a variety of display and processing problems.
  7. The YAxisMode() script command ignored all arguments if the first was negative.
  8. Drawing Waveform and RealWave data in SkyLine mode when there are several points per pixel could cause banded drawing in unexpected colours.
  9. The file importer could fail if the imported file created a channel 31, and the channel was not a Marker, and the file was imported in 'sweeps' mode.
  10. Result and XY views created by a script for sampling and deleted by the script before sampling stopped were being saved as part of the sampling configuration. This could result in spurious error messages and extra views when the procedure was repeated.
  11. In the Channel Process dialog, the Copy option copied the process, but the last process argument was set to the default value.
  12. It was possible to crash Spike2 by deleting data points from a sorted XY view channel.
  13. You now may not edit the configuration of a Talker channel when the Talker is not available.
  14. Importers: Motion Lab Systems now has limits on channel units length.
  1. The Xltek Neuroworks importer now inverts the sign of the scaling factor of imported data files to match a change in a display program for the data source.
02/2017 8.11b Fixes
  1. Version 8.11a generated a "Could not assign to object" error if you used the debugger to step over a DlgShow() command.
  2. Using the DlgEnable() script command on a DlgImage() item could cause the image to vanish.
  1. The size of a user-defined dialog was limited to the size of the Spike2 main window. This could cause unexpected results if the main window was small. The size is now limited to the size of the Desktop window.
02/2017 8.11a Fixes
  1. Version 8.11 saved the resources for duplicate channels incorrectly. The most visible effect of this was to restore channels in the wrong order.
  2. It was possible to crash Spike2 if a script call-back function (for example, an Idle or Change function in a user-defined dialog) called a built-in script function with a bad argument.
01/2017 8.11 New
  1. When copying data views as text to the clipboard, if the text (for example channel titles and comments) holds non-ASCII characters, the data is saved as Unicode (wide) characters.
  2. There is a new Chan() command to convert a string (for example "m1", "v1" or "2a") to a channel number.
  3. DupChan() can now report the first channel number that will be used for duplicates.
  1. It was possible for Spike2 to hang or crash when an extension DLL (for example a data importer or signal conditioner) used a third party DLL that had a problem, such as a missing DLL. Such problems should now cause the extension to be ignored.
  2. If you sample data with a duplicated time view, the view titles get :1 and :2 appended (indicating the duplicate number). Unfortunately, each time you sampled, the view title got the duplicate numbers appended to the previous title, which already had duplicate numbers.
  3. When a data file stopped sampling and had not yet been saved with a file name, a script read of a WaveMark channel at the end of the file could be truncated.
  4. When a foreground colour is similar in brightness to a background colour (so could be difficult to see), we adjust the foreground colour. In some cases, it was possible for the contrast to be reduced rather than increased.
  5. Active cursor searches in expression mode did not work if there was no channel 1 in the file.
  6. The Active horizontal cursor dialog could pick up values from the previous cursor when changing cursor.
  7. If you hold down Ctrl+Shift, then mouse click and drag in a time view, the channel resizing grid appears. The grid could leave pixel dust behind when resizing during sampling or when using the View menu ReRun command.
  8. The SerialRead(port%, &in$, term$, max%) script command allowed a non-variable as the in$ argument.
  9. The Channel Process Skip NaN (Not a Number) command could cause no data to be read if the first value read from a RealWave channel was a NaN.
  10. The graphical sequencer Random delay instruction could crash Spike2 with a divide by zero error when used with delays that were similar to the sequencer step time.
  11. The graphical sequencer Ramp DAC instruction could generate an out of range DAC increment when the ramp time period was similar or less than the sequencer step time.
  12. When you open a data file for sampling with an output sequence in the sampling configuration that does not compile, an error message describes the problem and identifies the output sequence file and line number. However, the line number was incorrect; it was 1 less than the correct line number.
  13. The EditCut() and EditCopy() script commands did not return the formats copied to the clipboard, as documented.
  14. If the script debugger opened a script file to display the current step, the script file was made the current view, which could cause the script to fail. This usually happened when stepping into an included file.
  1. For text-based views, using Save As... from the file menu now sets the initial file name based on the current document title. Previously the name was blank.
  2. We have made data view axes use the same contrast mechanism as the rest of the program (previously it set an axis to black or white if it was too similar to the background). We have also increased the minimum contrast when drawing a fitted curve to a data view channel.
  3. If no file path is set, the File menu Save As... dialog starts in the same folder that the file was read from rather than the last folder used for a file dialog operation.
  4. In an XY view, the '+' symbol is drawn to look more symmetrical.
  5. You are now warned if you adjust the graphical sequencer time resolution to a value less that the shortest interval implied by the sequence.
11/2016 8.10a New
  1. The installer has been improved; there is no change to Spike2 itself.
  2. Update of try1401 for the Power-3A.
09/2016 8.10 New
  1. The new StrToViewX() and StrToChanY() script functions evaluate dialog expressions
  2. The Print Screen command can now print Grid views.
  3. The Print Screen command now scales data view fonts to make the printed output a much closer match to the screen display.
  4. The XY view autoscale option has been enhanced and the interactive control of it moved to a new dialog. The XYDrawMode() command is extended to handle the new features.
  5. The XY view autoscale option now preserves inverted axes.
  6. The GrdAlign(n, -2) script command allows you to set the alignment of all columns in a Grid view.
  7. The new ChanUndelete() script command can recover deleted channels in .smrx files.
  1. Improvements to the Talker code associated with interpolation of waveform data to ensure that the last few points are saved when sampling stops and to improve the handling of time drift between a Talker device and the 1401.
  2. If the first channel of an overdrawn group overrode the channel background colour and there were more than 3 overdrawn channels, only the first two channels were visible.
  3. In the script language and the text sequencer, you could not have white space before a #include.
  4. In the Show/Hide channel dialog, if you typed 0 into the Label space field you could get into an error message loop that was difficult to exit.
  1. The default format for exporting a Metafile is now EMF, not WMF.
07/2016 8.09b New
  1. In the Clustering dialog, all changes cause a status line update if 0.2 seconds passes without any further change.
  2. In the Text importer initial scan, when there is a choice of similar blocks it chooses the start block as the one with the most numeric items rather than the one with the most lines.
  1. FileClose(-1) did not close Grid views.
  2. If a Sonogram key was displayed and positioned relative to the view (not the channel), and the channel was hidden, Spike2 clipped cursors so they did not cross the (hidden) key area.
  3. When sampling was Reset, Spike2 did not check that all Talkers were ready to start sampling again.
  4. If the halt script command was used in a callback function linked to a Toolbar button or to a Dialog, the script did not stop.
  5. The changes to enable access to old cursor positions in 8.09 stopped HCursor(n), HCursorX(n) and HXn working in dialog expressions.
06/2016 8.09a New
  1. The Conditioner tab in the Edit Preferences now includes the First and Last channel search range used to find conditioners.
  2. Some of the Clustering dialog changes introduced in 8.09 have been refined based on user feedback, for example zoom using the mouse wheel is now centred on the mouse pointer.
  1. The Clustering dialog did not always draw the 'short event' arrows correctly.
  2. If you dragged a line to select WaveMark items the dialog appeared to allow you to set the codes, but the Set button in the dialog had no effect.
  3. The Tucker-Davis (.TSQ) file importer had a problem importing WaveMark channels
  4. In a Grid view, changing the font did not cause the top heading height or side heading width to change.
06/2016 8.09 New
  1. You can now find the previous position of vertical and horizontal cursors; this is useful with Active Cursors. There are new script commands CursorX() and HCursorX(); the same commands are available in Dialog Expressions and as CnX and HnX.
  2. Level event channels drawn as lines are now treated as waveforms when measuring values, mean and area (ChanValue(), ChanMeasure() and in the cursor values and regions dialogs).
  3. We now save physical font sizes in resource files in addition to pixel sizes and prefer the physical size. This fixes a problem where moving a resource file from a standard resolution screen to a 4K display resulted in tiny fonts.
  4. The Clustering dialog can display the number of short intervals as a count or a percentage.
  5. In the Clustering dialog, you can zoom in and out using the mouse wheel.
  6. The user-defined shape in the Clustering dialog now scales with the data.
  7. The Clustering dialog Copy as Text option allows just the summary to be copied (previously you always got all the event times).
  8. The EDF/BDF file importer is now faster and has new features including: detecting standard annotations, grouping user annotations and reading 24-bit BDF data as RealWave. The time resolution is set as close to 1 microsecond as possible rather than to the waveform sample rate.
  9. The AlphaOmega file importer is now faster and reports progress during file scanning. It also sets the time resolution as close to 1 microsecond as possible rather than to fastest waveform sample rate.
  10. The Xltek Neurowork file importer collects more user comments and annotations.
  11. The online TextMark dialog now remembers marker codes with the saved text items.
  12. The online and offline TextMark dialogs now have spinners on the marker codes.
  13. You can now save much larger file and channel comments in a 64-bit smrx data file (2000 characters rather than 100). The interactive dialogs that set and display these values are unchanged as we expect this feature to be used from scripts; we will review this if the larger limits are popular and useful.
  1. Printed output from Grid views was scaled differently from Print Preview if the screen resolution was different from 96 dpi.
  2. Import of old (*.s2c) sampling configurations did not handle sonogram drawing mode correctly.
  3. Using different combinations of / and \ and using . and .. in include file paths could confuse the #include system. This could prevent Spike2 detecting that an included file had changed.
  4. Virtual channels using the RMc() command could have gaps at the start of a file.
  5. The AlphaOmega file importer: fixed a channel alignment problem and a crash with a particular data file.
  6. It was possible to hang Spike2 if a running script created a dialog in an idle function while the user was interacting with a Spike2 menu.
  7. Importing a Motion Lab Systems C3D file written by a VICON/Nexus system could cause Spike2 to become unresponsive.
  8. The CondType() script command returned 0 for Digitimer D360 and D440 amplifiers.
  1. If you set sampling to start on an external trigger and have routed the trigger signal to the 1401 rear panel, the Sample Control bar message changes from 'Trigger' to 'E3 Trig' and the flashing message (to alert the user to supply a trigger) is now 'Trigger' or 'E3 Trig' in place of 'Waiting'.
  2. If you run more than one copy of Spike2, the second and subsequent copies do not check that the last sampling session ended correctly. This prevents spurious warnings when the first copy is sampling data and a second copy starts.
  3. The IIRBp(), IIRBs(), IIRHp(), IIRLp(), IIRNotch() and IIRReson() script commands no longer stop the script with an 'Operating system error' if they fail to generate a filter. Instead, they return ‑1, so you should check the return value if you use these functions.
04/2016 8.08 New
  1. You can now select and change the Signal Conditioner within Spike2; it is no longer an installation option.
  2. Talker version 3 is implemented. This includes changes to make Spike2 work better when Talkers deliver erratic data.
  3. The U14Open() script command can now open a 1401 that is being used to sample data. This is an experimental feature for CED test and diagnostic use only.
  4. The TextMark dialog now copies selected items, not all items. There are new context menu options when the list of TextMark data is open.
  5. The Len() script command is extended to get the size of the nth dimension of an array.
  6. When setting up arbitrary waveform output, we no longer force you to convert waveforms that are derived from Virtual, Duplicated or Memory channels to memory images. However, these channels can only work if the source file is open in Spike2 when the data is transferred to the 1401 for sampling.
  7. When you load a sampling configuration, if a stored window position would place the title bar of the application or a dialog above the top of the screen area (which makes it very difficult to position), the stored position is ignored.
  8. The SampleOptimise() script command has new options to report the largest proportional difference between the requested and achieved sample rate for any channel.
  9. If the sample rate of any waveform channel is outside the range 10% less than to 30% more than the requested rate, a note is added to the Sampling Notes.
  10. There is a new importer to read waveform data from Ponemah 6 files.
  1. The commands to print Time, Result and XY views could scale the text size incorrectly on high-resolution displays.
  2. The ChanList() script command using text matching with field separators did not work. Using any combination of T, U and C, for example "TC=..." was OK, but "T_C=..." would fail.
  3. The script recorder can record changes made to the media file offset in a multi-media window.
  4. The Copy command for the Results page of the Fitting dialog did not work.
  5. The script compiler accepted a forward reference to a user-defined proc or func in some places where a number was required. For example: if test% then halt endif; func test%() return 1 end; would compile and run. This now generates a syntax error.
  6. Deleting a channel in the Sampling Configuration dialog could cause an unexpected channel to be selected if the list was not sorted by channel number.
  7. If a sampling configuration was set to use burst mode, it was possible to find combinations of channels and sampling rates that failed to optimise, leading to much slower sampling rates than requested.
  8. It was possible for the background of overdrawn channels to update incorrectly if the channels were partially covered by another view.
  9. On a high-resolution display, the clustering dialog buttons that select different class codes all drew as the User Ellipse button.
  10. When printing the screen, RealMark channels were truncated on the right.
  11. If you dragged a dockable bar (for example the sequencer control panel) while a script was running, and the script displayed a dialog, the dialog did not display properly and Spike2 would hang up and could crash.
  1. We have adjusted many dialogs for use on high-resolution displays so that text is not truncated. Please tell us if you find a dialog where text is missing.
  2. The point at which waveform drawing changes from drawing every point to drawing vertical lines has been changed from 3 points per x pixel to 2.1 points.
  3. Scripts no longer are allowed to run while the user drags a dockable bar. This might affect you if you rely on a script to track data sampling activities using idle functions.
12/2015 8.07 New
  1. Spike2 works better on displays with high dots per inch. All toolbars and all buttons with images should now be usable on 4k displays and the script language Toolbar() and Interact()bars increase in size.
  2. There is a new Edit menu Preferences option to work around any problems you may have with high DPI displays.
  3. The Sample Bar and Script Bar list editor is now resizeable to make it easier to view long lists.
  4. There is a new file importer for the Xltek Neuroworks file format.
  5. Improvements to the Graphical Sequence editor including: OK/Apply is disabled unless you make a change. The Copy section dialog disables OK if nothing is selected; missing local branch labels and duplicated pulse labels are detected; hold down Shift while dragging for non-quantized times.
  6. The SSClassify() script command is extended to provide an Online Update feature.
  7. The Text importer now scans for multiple tabular sections; it no longer assumes that the first numeric table is the start of the data.
  8. The Microsoft .WAV file importer can handle PCM data in WAVE_FORMAT_EXTENSIBLE files.
  9. There is a new compatibility option in Edit Preferences to make the Count() script command include the end position.
  1. Threshold crossing searches with 0 hysteresis now set a small hysteresis value to prevent searches getting stuck.
  2. Repeated threshold crossing searches now always set the correct search direction (rising/falling).
  3. Repeated searches enforce a minimum step of 1 clock tick to avoid infinite loops.
  4. In the Graphical sequence editor, double-clicking an overlong arbitrary waveform limits it to the available time, not to half the section length.
  5. The Graphical sequence editor displays timing errors if items are too close to the end of a section.
  6. In the Graphical sequence editor, empty sections used as a branch target are always generated.
  7. The Unicode build of Spike2 did not read Font information from old-style resource files.
  8. If you used the Help menu About Spike2 command on a computer that had lost its internet connection, there could be a noticeable delay before you could close the About window while the system timed out when trying to read the latest program revision from our web site.
  1. We have adjusted many dialogs for use with high DPI displays, usually to fix text truncation. Buttons are spaced a little differently and some button images have changed.
09/2015 8.06a New
  1. You can now modify graphical sequences during sampling. There is a new command in the Sampling menu and a new button in the main Toolbar to open the editor.
  2. The Plexon file importer can now read .PL2 files.
  1. When using the File menu Save command, the suggested file name no longer stops at the first space character in the window title. For example, a result view holding an interval histogram from the file "Bill and Ben.smrx" with the window title "INTH1(Bill and Ben)" had the suggested file name: "INTH1(Bill.srf". It is now "INTH1(Bill and Ben).srf".
  2. During sampling, temporary data files and the last used sampling configuration could be saved to your "My Documents" folder rather than the directory set in the Edit menu Preferences.
  3. Editing a Channel Process dialog value was difficult as every change reformatted the displayed value.
  4. Changing the file time base with the FileTimeBase() script command did not cause the x axis to repaint.
  5. In the Measure to XY view and Measure to a data channel dialogs, it was possible to set illegal Cursor 0 stepping values.
  6. The Cancel button in the Progress bar that appears when Measurements to XY views or to a data channel take a long time sometimes did not work.
  1. Graphical sequences for sampling are written as text to the current user Application data folder, not the all-users Application data folder. Some users on a corporate network were denied write access to the Application data folder.
  2. We have changed how we search for the sampling configuration files last.s2cx and default.s2cx. We now use the old .s2c format files only if no modern .s2cx files are found.
08/2015 8.06 New
  1. The maximum number of buttons allowed in the Script bar has been increased from 20 to 40.
  2. The Channel Process dialog now has spinners on data values and updates immediately on a change unless recording is enabled. With recording enabled, in addition to recording changes incrementally, the new Rec button records the channel process state in the most compact form.
  3. Individual traces of multi-trace WaveMark data can now be treated as waveforms without any scripting. The Ch(n, trace) virtual channel command supports this and there are new controls in the Marker Filter dialog and in the Draw Mode dialog. The script language has a new MarkTrace() command and changes to DrawMode().
  4. There is a new Edit menu Preferences option to control the decimal places when exporting Result and XY view data as text.
  5. There is a new XY Title dialog to edit the titles and units of XY view channels and axes.
  6. There is a new Window Title dialog that allows you to set the title of time, result, XY, grid and text-based views. Titles set for time, result, XY and grid views are now saved in the file resources.
  7. The System() and System$() script commands now know about Windows 10.
  8. The mouse pointer changes when you move it over channel numbers and over the region below the channel numbers where a click clears selected channels.
  9. The Read() and ReadStr() script commands have been extended to read times formatted as {days:}{hours:}minutes:seconds.
  10. There is a new script command, GrdSize(), to change and report the rows and columns in a grid view.
  11. The Edit menu Undo command descriptions now use more user-friendly channel identifiers (m1, v2) rather than channel numbers (401, 802).
  12. Grid view .s2gx files are smaller as redundant information is not saved.
  13. As an experimental feature, the Graphical sequence editor shows sections that do not have a key defined or any pulses in brackets in the Current Section drop down list.
  14. You can now use DlgValue$(item%, new$) to select drop down list text in DlgList() and DlgString() items.
  15. There are now file icons for the Grid view and associated files.
  16. The Plexon NEX file importer can now cope with discontinuous waveform data.
  1. In a Grid view, using the Del key with an empty cell selected caused Spike2 to hang up.
  2. SampleAutoName$() did not get recorded if automatic file naming was enabled.
  3. In a text-based view, Draw(line%) did not set line% as the top line.
  4. We have eliminated the mouse pointer flicker that occurred on some systems when moving the pointer over the axis and channel number area.
  5. In Grid view printer output, the data could print over the header text and multi-page output generated huge headers and footers.
  6. In the graphical sequencer, the code to set a variable to the current sampling ticks generated a sequence file that did not compile.
  7. The graphical sequence editor did not save the variable numbers selected for all waits and branches on a comparison between variables.
  8. The EDF file importer had a problem importing TextMark data with long text strings.
  9. The MC_Rack file importer had a problem with the times of WaveMark data items.
  1. You can reset the title of a time, result, XY, grid or text-based view to the default with WindowTitle$(""). Previously this set the title to be blank.
  2. The Spike2 startup dialog is now suppressed if Spike2 is started with command line file names in a similar manner to the /Q (quiet startup) option.
06/2015 8.05 New
  1. You can now create a Grid view. This makes it easier to display, print and save tables of data. This is mainly of use from scripts (there are several new GrdXxxx() script commands).
  2. The Rectify and RMS Amplitude channel process functions applied to Waveform channels no longer limit the output range unless the channel offset is very large compared to the range of values.
  3. If you use a Power3, you can run the output sequencer at 4 us per step. The minimum interval for other 1401 types remains at 10 us per step.
  4. App(-7) reports the number of User handles in use for diagnostic purposes.
  1. Triggered display mode in 32-bit .smr files could display false triggers if trigger events were further apart than the display width. 64-bit .smrx files were OK.
  2. The script code: Message(Error$); was incorrectly accepted by the compiler, resulting in a crash when you ran the script.
  3. There are several script compiler fixes associated with passing const arrays into functions.
  4. Channel process functions Rectify and RMS Amplitude did not cope with Waveform channels with negative scale factors.
  5. If you declared a script variable inside a loop and assigned it a constant value (known at compile time), the value was not assigned each time around the loop.
  6. Deleting multiple channels in XY views in one operation could cause unexpected channels to be deleted as the channels were deleted in ascending order of channel number, but each delete caused the channels to be renumbered. Channels are now deleted in descending order.
  7. If you opened the View Rerun dialog and duplicated the time view, Spike2 would crash.
  8. Changing the offset in the 1902 control panel could cause a crash.
  9. Time strings typed into dialog boxes with more than 2 colons (for example 1:00:00:00, meaning 1 day) did not get converted correctly.
  10. ASCII/text importer: in the configuration dialog, you could change the Label line number using the spin buttons. However, editing the line number did not work.
  11. Alpha Omega importer: the start time of data blocks in discontinuous waveform channels now have the correct times.
  1. The script language no longer allows you to pass a real variable to a function that expects a reference to an integer. There is a new Compatibility option to allow a script that breaks this rule to compile, but we urge you to change the script as we will remove the workaround in the future.
04/2015 8.04a New
  1. If the output sequencer cannot keep up with the requested rate when sampling with a Power2, Power3 or Micro3, we now log this by adding a keyboard marker and give a warning when sampling ends. If you sample with a Power1 or Micro2, sampling will terminate, as previously.
  1. Script positioning of XY and Sonogram Keys was incorrect if the key was larger than the view it related to. If the key window width or height exactly matched the width or height of the view it was attached to, the key position was reported incorrectly.
  2. Import of version 6 or older: Time view resource files ignored any Pen width or RealMark channel Data index set for a data channel.
  3. If you dragged a rectangle with the mouse to rescale a data display and dragged past the right or left edge of the window, the start point of the drag operation was lost.
  4. The initial display of vertical scroll bars in script debugging windows was not always correct.
  5. In version 8.04, the S64Fix program would not run.
03/2015 8.04 New
  1. Spike2 now saves text-based documents periodically and in the event of a program crash, will attempt to recover the last saved state.
  2. The Sampling configuration Channel parameters dialog has a new Quick calibration option to allow you to set the channel scaling when you know the amplifier gain and you want the channel units to be some scaled form of Volts (usually, mV or uV).
  3. The ChanData() script command has several new variants to read Marker and extended Marker data. This is faster and sometimes more convenient that calling NextTime() and LastTime().
  4. The ChanPixel() script command is extended to return the pixel co-ordinates of various screen rectangles.
  5. FileConvert$() can now request a progress dialog and can set the minimum number of channels in the output file.
  6. The new DlgImage() script command adds a bitmap image to a user-defined dialog.
  7. The Windows dialog now enables and disables items depending on the available actions. You can also choose to see a list of all script-controllable windows (with the associated window handles).
  8. The text importer can now import columns as Marker and RealMark channels using another column for the item time. RealMark and TextMark columns can now select another column to supply the marker codes.
  9. When debugging a script, we now remember which debug windows were active at the end of a debug session and restore them for the next session.
  10. When debugging a script, the built-in constants _pi, _e, _Version, _VerMinor are no longer displayed in the Globals window.
  11. Cancelling a script in debug now clears any chained script set by ScriptRun().
  12. The script compiler can now optimise the ternary operator when the expression that the decision is based on is known at compile time. This allows code like: const v := _Version >= 804 ? 100 : 33; to compile.
  13. The XY Key can now be drawn with the example channel data hidden, allowing you to use channel titles as XY view annotations. The XY Options dialog has been expanded to include this option and now supports Undo.
  14. Spreadsheet export and copy can now choose to display or omit titles and units. ExportRectFormat() has been extended to match.
  1. Resizing the Cursor values or Regions dialog no longer resets the first displayed column and row to the top left.
  2. Exporting a virtual channel or a memory buffer channel to a 64-bit smrx file failed.
  3. The Count(chan%, from, upto) script command in a result view included the upto bin, which was different from version 7 which ran up to but not including this bin. Also, if upto was set to the number of bins or more, the result was 0.
  4. Script changes to result view bins now cause screen updates in Yield() and when stepping in debug.
  5. The text importer could fail to import a single channel of events.
  6. The file import system did not assign Y axis units to imported RealMark channels.
  7. The script text editor broke word searches at the _ (underline) character, which is now allowed as part of an identifier.
  8. The ColourSet() script command with a size% argument of 0 or -1 now behaves as documented. Previously it set the minimum size of 3.
  9. MATLAB export could generate a spurious error 1.
  10. FilePath$(-3) returned a path ending \CED\Spike2 instead of \CED\Spike8.
  11. SerialRead() could crash Spike2 if you specified a read with a terminator and the connected device transmitted more than 1024 characters without a terminator.
  1. If you chained scripts together using ScriptRun(), then broke into the debugger using the Esc key at the point where a chained script was compiling, compiling was aborted and the script halted (which was probably not what was intended). An Esc during compile now only aborts if the compiler has been running for a few seconds.
  2. The Count() command upto time is not included in the time range in a time view (to match the result view behaviour). This makes a difference if there is a data item at exactly the upto time.
01/2015 8.03b Fixes
  1. Sequential reads of large .smrx data files could fail due to an error in the internal index tree. A symptom of the fault is missing areas of data that reappear when you zoom in to the blank region. This version can read files with the problem. If the file is not opened read-only we will fix the index tree when the file is opened for the first time.
  2. The MinMax() script command did not return the correct positions of the minimum and maximum for WaveMark data drawn as a waveform when the channel had multiple traces. The minimum and maximum values were correct.
  3. MarkEdit() script command did not edit multi-trace WaveMark waveforms correctly when a vector was passed as the array data.
  4. The Set Marker Codes dialog could display a message for the wrong channel when opened from a marker channel context (right-click) menu.
  5. The Channel Information dialog reported an error if the length of titles, units or comment was the allowed maximum length.
  6. Talker channel information was not saved correctly in the sampling configuration if a talker generated more than 1 channel.
  7. If you exported a 64-bit .smrx file to a 32-bit .smr file with a time range that exceeded the 32-bit limit of the .smr file, the export process could hang up.
  8. The PlayWavePoints() script command did not change the number of points to be played.
01/2015 8.03a Fixes
  1. If you saved a graphical sequence as text, it was saved as UTF-16LE and not as UTF-8. This prevented the graphical sequences being used in version 8.03.
  2. If you opened a text, sequencer, or script file that was in UTF-16LE format, but that only held characters with codes less than 128, it was not converted into the correct format.
  3. With a Micro1401-3, arbitrary waveform output at slow rates (less than 10 kHz) did not generate any output.
  4. If a script #included multiple files, the debugger could get confused and show the step marker in the wrong file.
  5. If you deleted a hidden channel that was also used as the source of vertical markers, the display did not update to remove the markers.
  6. The fitting code for non-linear fits when all points were assumed to have the same variance (least squares error) could calculate the r² value as "Not a number".
  7. The first time you set an event channel to display in Rate histogram mode, the y axis range could be set to 0 to 0.
12/2014 8.03 New
  1. Spike2 is now built in Unicode mode where all text uses the Unicode character set. If you take advantage of this to use extended characters in scripts and resource files, older version of Spike2 will be able to read the scripts and resources, but will not interpret the extended characters correctly.
  2. There are new dialog expressions you can use to get the value of data in a channel. These include value at a position, mean and standard deviation.
  3. You can now have horizontal active cursors that automatically move to new positions when vertical cursors move; the new HCursorActive() and HCursorValid() script command provides script control of this feature.
  4. There are new cursor context menu commands to lock vertical cursors together and to set a horizontal cursor to track the intersection of a vertical cursor with a channel.
  5. The ChanMeasure() script command and the Cursor Regions dialogs have a new measurement, Standard Error of the Mean (SEM).
  6. There is a new Decoration mode dialog for drawing RealMark data with error and range bars and new ChanDecorate() script command.
  7. The script language is extended to allow arrays to be initialised and even declared as const: for example: const colour$[]:={"Red","Green","Blue"};
  8. You can declare an array passed into a user-defined func or proc as const. Built-in script functions that accept array arguments, but do not change them also declare these array arguments as const.
  9. The new ArrConv() script command performs discrete convolutions.
  10. The new Spline2D() script command performs 2D interpolation and can generate "heat maps" efficiently.
  11. You can now fit curves to WaveMark channels drawn as waveforms.
  12. The Show/Hide Channel dialog has been revised to let you filter the channel list based on the channel Title and type. This makes it easier to work with very large number of channels.
  13. The new InStrRE() script command searches text string for regular expressions.
  14. In places where you could type a range of channels, such as "1,3,4-7", you can now select channels by matching the channel Title, Units or Comment with a regular expression. This also applies to script commands that accept a channel specification string.
  15. The Sampling Configuration dialog Channels tab now has a tooltip that displays extra information for channels in the channel list (for example ideal sample rates).
  16. The Sampling Configuration dialog has a new option to duplicate a channel N times, saving you multiple clicks of the Duplicate button.
  1. In the Cursor Y Values and Cursor Regions dialogs, when the vertical scroll bar was visible, clicking the down arrow could display the last line multiple times.
  2. In a result view, when converting a channel identifier as text (for example "2A") to a channel number, upper case duplicate letters were treated the same as lower case. Thus "2A" was treated as the first duplicate, not as the 27th duplicate.
  3. The PlayWaveCopy() script command gave an error if you did not supply the optional read% argument.
  4. The FileConvert$() script command inverted the sense of the "ignore file extension" bit in the flags% argument. This could lead to strange file conversions.
  5. If you used the MemSave() script command to save a memory wave channel with gaps to a new channel and changed the channel type from Adc to RealWave or RealWave to Adc, the second and subsequent blocks were saved with the wrong data.
  6. Read-only .smrx files would not open.
  7. The Ascii (text) importer could fail if hh:mm:ss format was used for times.
  8. The script debugger did not step to the correct line after the else of a docase statement. This was a cosmetic effect; the script ran correctly.
  9. In a user-defined dialog, selecting an item in a DlgReal() or DlgInteger() drop-down list did not work. Typing a value worked correctly.
  10. In a time view, raster displays of channels with marker codes did not use the marker colours.
  11. It was possible to crash Spike2 during sampling from a script that used ChanWriteWave() to overwrite recently written waveform data.
  1. MeasureToXY() and MeasureToChan() no longer support using the hw argument as the slope width. Ancient scripts (written for Spike2 version 3 may need adjustment.
  2. The MMImage() command has swapped the meaning of horizontal and vertical.
09/2014 8.02e This is the last version of Spike2 before the change to Unicode mode. You can download this version if you don't want the Unicode character set, but you will not benefit from the Fixes in 8.03.
  1. Gated processing using a gate marker code did not work correctly as almost all markers were accepted, not just the specified code.
  2. It was possible to crash Spike2 with a script in which the main program ended with a conditional statement with the last instruction being halt if the condition was not true (for example: if x then DoSomething();halt endif; with x set to 0).
08/2014 8.02d Fixes
  1. With a 64-bit .smrx file, using ChanSave() to add data to the end of an existing channel that contained more than 16 MB of data could fail.
  2. The cursor regions and cursor values dialogs could duplicate the bottom line if you clicked the down button in the vertical scroll bar.
  3. You could not open read-only 64-bit .smrx files.
  4. Time view window titles did not work correctly if a file name contained square brackets.
  5. If your computer was set to a locale that used commas to indicate the decimal point (1,5 for 3/2), exporting data to MATLAB caused resource data to be misread.
  6. While sampling to a 32-bit .smr data file, reads of event data that crossed the last commit time were truncated at the commit time.
07/2014 8.02c Fixes
  1. Active cursor information was not restored correctly from a resource file if the cursors were not consecutive. For example, if you were using cursors 0, 1, 2, 3, 5 and 7 (with cursor 4 off), cursors 5 and 7 were not restored.
  2. In the Active cursor dialog, some of the fields (for example Amplitude) were not restored when the dialog opened.
  3. Changing from forward to backward active cursor searches of waveform channels in 64-bit smrx files did not always find the correct position on the first backward search.
  4. In a Result view, Copy As Text of a view where the x axis started at a negative position did not copy all the visible data.
07/2014 8.02b Fixes
  1. With a 64-bit smrx data file, changes to the scale and offset of a channel did not force the channel header to be rewritten, resulting in the changes not being saved when the file closed. Reuse of a deleted channel could result in a channel that did not read correctly.
  2. The ASCII importer is more tolerant of a time column which starts with sufficient significant digits to allow the file sample rate to be deduced, but has insufficient digits later, such that consecutive times appear to be the same. It now always allows a configuration file to set channel names, rather than allowing names read from the source text to remain.
07/2014 8.02a Fixes
  1. With a 64-bit .smrx data file, using the Sample control toolbar Reset command to restart sampling (which throws away the data captured up to that point) could cause the file to get into a confused state. This would occur if you sampled for sufficient time before using Reset to fill the circular buffering system (around 8 MB of data) or to reach a Flush to disk time set in the Automation tab of the Sampling configuration.
06/2014 8.02 New
  1. You can now choose to be warned if closing a data file would lose data from a memory buffer channel. We have set the initial warning level to warn you when you close a file interactively, but not when closed from a script; you can change this in the Preferences.
  2. When debugging a script, the text caret moves to the start of each statement rather than the start of the line containing the statement; this is helpful when a script has multiple statements on one line.
  3. Right-click on the title bar of a view to get the option to copy the full path to the associated file to the clipboard.
  4. In the clustering window, the INTH display window now holds a vertical cursor set to the minimum interval. You can modify the minimum interval by dragging the cursor.
  5. The Plexon importer now recognises off-line modified PLX data files.
  6. The Alpha Omega importer now identifies all types of Event and marker data in the MPX file format.
  7. The Version 5 DSI importer is now very much faster for large datasets (we have reports of 100 times faster). You must install the 32-bit version of Spike2 to use this importer as the interface library supplied by DSI is 32-bit only.
  8. The Axon Instruments importer is no longer limited to files with less than 65536 data blocks. You must install the 32-bit version of Spike2 to use this importer as the interface library supplied by Axon is 32-bit only.
  9. The ASCII importer now stores configuration information in XML files only. It has been recoded for this release to make it more robust. See the interactive help supplied with the importer for more details.
  1. Script errors in a function linked to a toolbar, dialog or a dialog button did not indicate the script line that caused them.
  2. Script errors from built-in commands that were not related to a specific argument, for example calling DlgShow() with too few arguments, reported an error number rather than a more helpful message.
  3. During File Export from a script, a progress bar appeared, but the script was not notified if the user cancelled the export. When run interactively, no progress bar appeared. You now get a progress bar for interactive export and none for script export. In the future we may allow script-driven export to request a progress bar.
  4. When recording your actions, clicking on a text-based view did not always record a FrontView() command or add ViewFind("view title..."); to the start of the script.
  5. Marker filter OR mode was testing marker code n against mask n instead of testing them all against the first marker mask.
  6. The documentation incorrectly indicated the direction of the NDR and NDRL digital output pulses on modern 1401s.
  7. In a 64-bit smrx file, if you deleted a channel and reused it, subsequent reads from the channel could fail, usually resulting in gaps in the display. The data was written correctly, but the index table could have incorrect lookup information. Files in this state are repairable in S64Fix.
  8. File names for 32-bit data files generated through the Sampling Configuration dialog Automation page always had .smrx file extensions, which prevented Spike2 from opening them. You can open such files by changing the extension to .smr.
  9. Renumbering cursors or using CursorRenumber() with multiple cursors on the same pixel could leave a ghost cursor behind.
  10. The Graphical sequence editor can now set random and Poisson delays that are very long compared to the sequencer step period. Previously, the longest delay that could be set with a 0.01 ms step period was a second or so; it is now many minutes.
  11. If you saved a result view with a Raster display to a data file, it was possible to get an incorrectly scaled Y axis the next time you opened it.
  12. Slow arbitrary waveform output with a Power1401 mk II with monitor version 9 did not generate any output.
  13. Changing the number of channels in a result view channel process when Raster data was displayed could cause Spike2 to crash.
  14. Overdraw 3D mode did not work during sampling.
03/2014 8.01c Fixes
  1. Backwards searches through WaveMark channels treated as waveforms did not work in 64-bit files. In 32-bit files it was possible to get a result that was after the start time.
  2. Trough amplitude measurements for events drawn in instantaneous and mean frequency and rate mode and for RealMark data were incorrect.
  3. In the FIR filter dialog, if you selected the All Pass or All Stop filters, the displayed waveform did not always update.
  4. It was possible for multiple sets of filters to appear in the FIR filter dialog.
  1. Peak and trough measurements now take into account the sloping baseline when detecting the maximum and minimum values. Previously, the absolute maximum or minimum was used and then adjusted for the baseline.
02/2014 8.01b Fixes
  1. Changing the output sequence interactively or from a script during sampling did not work.
  2. In a user-defined dialog with a change call-back function, if you changed the active field by clicking, the change function was called for DlgReal() and DlgInteger() fields even if they had not changed.
  1. When Y axis labels are set horizontal, the y axis units display, unless the axis is less than 2 characters high (was 4 characters).
02/2014 8.01a Fixes
  1. If you created an XY data view, then used XYKey(1,0) to hide any key, the key would appear and adding data to the view could cause Spike2 to crash.
  2. The time range of the MarkSet() script command ran from the start time up to, but not including the end time. This did not match version 7, which included the end time.
  3. If the Sample control toolbar was hidden when Spike2 started, the toolbar buttons could be displayed too high in the bar.
02/2014 8.01 New
  1. Multi-trace WaveMark data (Stereotrode and Tetrode) can now have non-sequential ports in the 1401. The SampleWaveMark() and SampleChanInfo() script commands are extended to support this.
  2. The Sample bar and the Script bar now have a context menu (right-click) command to remove a button.
  3. The Talker interface specification is now version 2 and script language users can now communicate with talkers that support this with the new TalkerSendStr() and TalkerReadStr() commands.
  4. Version 2 Talkers can request sampling to start and stop and can request that a named script runs. This can allow remote control of Spike2 data capture.
  5. In the script editor, you can navigate to a user-defined Func or Proc (even if the code for it is in an included file) by right-clicking on the name.
  6. In the script editor, if you right-click on a built-in function or script keyword, the context menu includes the command Help for... and selecting it will open the best match in the help file to that item. This is equivalent to using the F1 key with the text caret on an item.
  7. In the script editor, the auto-completion list now contains user-defined Func and Proc items from included files. For this to work you must check the Included files box in the auto-completion dialog.
  8. In the script editor, you can hover the mouse over a user-defined or built-in Proc or Func name to show a tool tip for that item. You can set your own tool tips for user-defined functions.
  9. In the script editor, call tips (tips that appear when you type the ’(’ after a function name) now track your typing and offer additional tips if you type names known to the tip system as function arguments.
  10. The MarkMask() script command is extended to report if a marker filter is active.
  11. The PlayWaveCopy() script command can now read data back from a 1401 in addition to writing it.
  12. The Modified() script command is extended in a Time view to force data through to the disk, equivalent to the Automation tab timed Flush to disk in the Sampling Configuration dialog.
  13. MATLAB data export in a time view is faster in most cases. Waveform export has new options to ignore gaps and to force the same point count per channel when exporting multiple channels sampled at the same rate.
  14. The Active Cursor dialog now tracks user edits and disables OK if a field is incorrect rather than opening a message box. Error messages now appear as part of the dialog.
  15. Importers: The Axon, MC_Rack and Biopac importers use the latest libraries (but are still available only in 32-bit builds of Spike2). You can select the recording session in the NewBehavior (Neurologger) importer.
  1. It was possible to drag the Y axis of a Spike shape dialog (except in online setup) to values beyond the range of the data. The data was correctly limited, but the axis was not.
  2. When sampling tetrode data (4 traces), the on-line display of non-triggered data in the Spike shape dialog displayed traces 0,2,2,3. This did not affect recorded data.
  3. Recording of MeasureToChan() and MeasureToXY() omitted the width argument in threshold iteration modes.
  4. Level events channels written to a 32-bit smr file were inverted.
  5. If level event data recorded to a 64-bit smrx file contained events at duplicated times, the mechanism to remove these events could fail, and it was possible for two events at the same time to be scheduled for writing to disk; this was detected as an error and sampling would stop.
  6. Using Modified(0,0) during sampling with a Level event channel could cause sampling to stop with Error -23.
  7. Exporting more than 20000 event times to a MATLAB file could crash Spike2.
  8. It was possible to get the Active Cursor dialog confused by setting illegal values, then changing the cursor number. You are now not allowed to change the cursor number if the dialog is in an illegal state.
  9. The script compiler did not flag a comparison between a number and a string as an error. For example: if 3 = "three" then halt endif;
  10. Importers: The y scaling has been corrected in both the Alpha Omega and Neuralynx importers. The ASCII (text) importer could get the times of TextMark data confused. The CFS importer now gets the times from Marker channels correctly.
  1. In the Graphical sequence editor we now refer to sections as Section A to Section Z, not Key A to Key Z.
12/2013 8.00a New
  1. The ArrHist() script command to bin array values into a histogram is added.
  1. Backward searches of waveform channels with a slope channel process could cause Spike2 to hang.
  2. Reusing a deleted channel with a different channel type in a .smrx (64-bit) file could cause a data lookup failure.
  3. Calling the ChanList() script command when the current view was not a time, result or XY view reported an error rather than returning 0.
12/2013 8.00 New
  1. Data is now stored in a new 64-bit filing system that allows files of pretty much unlimited size and duration; the old 32-bit system is still supported so old files will read and can be modified.
  2. You can choose which format to sample to (32-bit or 64-bit) in the Sampling Configuration dialog.
  3. With the new filing system, sampling times are no longer limited to 2 billion clock ticks; at a clock tick of 1 microsecond you can sample continuously for many years.
  4. With 64-bit files, triggered and timed waveforms save exactly the required data; 32-bit files always save complete disk blocks, which usually saves more data than required.
  5. New S64Fix utility program to recover data from damaged 64-bit data files (similar to the SonFix program for 32-bit files).
  6. If you run on a 64-bit operating system we now install a 64-bit version of the program. This runs faster than the 32-bit version and allows the program access to more memory.
  7. There are improvements to the data import system to allow longer time ranges and larger files and to give more information and control during interactive file importation.
  8. The sonogram display copes better with gaps in the data and now has an optional key to indicate intensity.
  9. In the script bar and sample bar, right-clicking a button opens a context menu from which you can open the script or sampling configuration.
  10. In the sample bar, the context menu allows you to sample immediately and to control the write enable state.
  11. You can now set horizontal spike amplitude limit cursors when sampling with a Micro1401 mk II (to match the other supported 1401 types). These set the upper and lower limits for acceptable spikes.
  12. If you import waveform data into a RealMark memory buffer, the peak/trough/level value associated with the import is saved in the first value associated with each marker. You can also choose to import both Peak and Trough times or both Rising and Falling times in one operation. The MemImport() script command has been extended to match.
  13. The script language allows you to define default values for proc and func arguments.
  14. Script integer values are now 64 bits (they were 32 bits in previous versions) to allow ChanData() on an event-based channel to return 64-bit times as integers.
  15. The output sequencer has a new instruction TICK0 and TICKS has been extended to cope better with sample times that are too large to fit in the sequencer 32-bit variables. There is a new script command, SampleSeqTick0().
  16. The FileSaveAs() script command now adds a file extension if none is supplied. When used with a multimedia window to save the current frame as a bitmap you can now set a blank name or a name with wildcards to prompt the user for a file name (as for other window types).
  17. The output sequencer has new sequencer expression functions sTk64h() and sTk64l() to convert times in seconds to 64-bit tick counts.
  18. The BReadSize() script command now accepts -n when reading a string. This stops reading at a null (ASCII code zero) character or after n characters.
  19. The output sequencer text editor has Keys and Labels controls that allow you to navigate to any key press or label in the sequence.
  20. The maximum size of a user-defined dialog is now limited to the size of the primary monitor screen. Previously it was set to a smaller, arbitrary limit. The previous arbitrary limit is used if the primary screen size is less than that limit, for backwards compatibility.
  21. DlgCreate() lets you set negative wide and high values to limit the dialog size if it exceeds the set size.
  22. The Y Axis Range dialog has a spinner on the channel selector.
  23. The BWriteSize() and BReadSize() script commands now accept 8 as a size for integers (for 64-bit data). The size used by BRead() and BWrite() for integers is 4 (32-bit) for backwards compatibility.
  24. The BSeek() script command can now seek to positions with a 64-bit offset into the file. Spike2 version 7 was limited to 32-bit offsets.
  25. There are improvements to the data import system to allow longer time ranges and larger files and to give more information and control during interactive file importation.
  26. You can define Alt key combinations to activate buttons in the Script bar and Sample bar.
  27. The new DlgFont() script command gives you more control over the font used in user-defined dialogs.
  28. The SampleWrite() script command is extended to mark time ranges for saving.
  29. The MATLAB file export system can write files larger than 4 GB if you select the version 7.3 format. Beware that 32-bit versions of MATLAB cannot cope with huge data files.
  30. You can now generate stereotrode or tetrode data from waveform channels with different channel units. All channels use the units and scaling of the first selected channel.
  31. The ArrStats() script command calculates the mean, variance, skewness and kurtosis of an array.
  32. The MATTrace() script command calculates the trace of a matrix.
  1. The 1401plus and the original micro1401 are no longer supported for sampling. If you need to sample with these, use Spike2 version 7 (also included on the distribution CD).
  2. To sample data, your 1401 must have up to date firmware. If the firmware is out of date you will be prompted to update it when you try to sample data. You can check if you are up to date in the Help menu About Spike2 command. Starting version 8 with modern firmware allows us to streamline data capture, avoiding supporting old and inefficient data transfer protocols.
  3. The Script menu Convert DOS script command to convert scripts from the MS-DOS version of Spike2 has been removed. This is still present in Spike2 version 7, if needed.
  4. The yes% argument of the FileSaveAs() script command is now a set of flags. If a version 7 script uses an argument value that is not 1 or 0 you may not get identical results in version 8. Replace the argument with (argument) != 0 and it should work exactly as the old version did.
  5. The ScriptBar() and SampleBar() commands remove trailing "|" characters when returning the string associated with a button. This is unlikely to cause problems in existing scripts.
  6. The default Working Set size has been increased.
  7. We no longer provide printed, hand-crafted manuals (most users did not make use of them and the on-line help had live links and held more information, further, it took us considerable effort to maintain the manual in addition to the help file). Instead, we include a PDF of a printable manual that is generated from the on-line help.
  8. We no longer install the SonCols or SonInfo shell extensions; this is because of changes Microsoft have made to shell extensions.
  9. The file importers now create 64-bit .smrx files, not 32-bit .smr files. Scripts that import files, then further process them may need modification to open a .smrx file rather than a .smr file.
  10. The FileSaveAs() script command old flags% argument is renamed to expt% and the yes% argument is renamed to flags%.
  11. Both FileSaveAs() and FileNew() have modified the meaning of the big% argument to cope with 64-bit data files. If you used this argument in a script and want to create a 64-bit file you should change the argument to 2.
  12. The SampleBigFile() script command has modified the meaning of its optional argument. If you used this argument in a script and want to sample to 64-bit files you will need to change it to 2.
Cambridge Electronic Design Limited

Registered in England: 00972132

Registered office:

  • Cambridge Electronic Design Limited,
  • Technical Centre,
  • 139 Cambridge Road,
  • Milton,
  • Cambridge CB24 6AZ

VAT: GB 214 2617 96

Producer registration number: WEE/BD0050TZ

Terms and Conditions of Sale

For our US customers, we can provide tax form W-8BEN, that identifies us as a UK company.

DUNS: 219151016
NAICS: 423490
Commodity codes
Hardware: 84716070
Software: 85235190

By email:


By post:
  • Cambridge Electronic Design Limited,
  • Technical Centre,
  • 139 Cambridge Road,
  • Milton,
  • Cambridge CB24 6AZ
By telephone:

(Int.+44) (0)1223 420186

From North America (Toll Free):

1 800 345 7794