- Memory channels created by a process read from a sampling configuration now remember any marker filter.
- We now test the version number of important resources to protect Spike2 version 7 from incompatible resources written by version 9 (which supports a much larger number of channels).
- 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.
- The Measurement settings dialog now rebuilds drop-down lists when a channel changes.
- Reading a sampling configuration could crash Spike2 if there was a problem reading the file.
- Resizing a sampling or rerunning window before it started to scroll could display the wrong x axis range.
- The Cursor Regions and ChanMeasure() slope measurement included the point at the end of the time range if it exactly matched the end of the time range, unlike the other measurements which are up to but not including the end time.
- Saving and restoring font sizes will attempt to preserve the physical size of the font on screen, rather than the pixel size so that a change from a low resolution to a high resolution screen does not result in tiny fonts.
- Several improvements to the configuration of Talker channels and in the corrections to waveform data from a Talker to account for timing drift and in handling Talkers after sampling is reset (restarted).
- Heka importer allows an experiment name to be 80 characters long.
- The #include system was confused if you mixed / and \ in paths.
- #include lines could not have white space before the # character.
- Overdrawn channels could over-paint the background if the first channel in the group changed the background colour.
- It was possible to hang Spike2 if a script idle routine put up a user dialog while the user was interacting with a Spike2 menu.
- A script language Proc or Func with very many local variables could fail to compile in a script with very few global variables.
- The Channel Process to skip NaN (not a number) did not cope with a channel that started with a NaN value.
- Active cursor searches in Expression mode now work when there is no channel 1.
- The Duplicate channel button now works for Talkers if the next available channel is free and of the same type.
- It was possible for a Talker to fail during the connection process.
- New Talker data was not always displayed until a screen update.
- Virtual channels that depended on a duplicate of a channel did not update when the original channel changed.
- Duplicates of virtual channels did not extend invalid time ranges in some circumstances, leading to drawing glitches.
- The Set Cursor Position dialog now copes with the x axis being in time of day mode.
- The X Axis Range dialog now copes with time of day axis mode.
- Motion Lab Systems import restricts the channel units length to avoid a crash.
- The Talker channel configuration dialog is now disabled when a talker displays its own settings dialog(s).
- You can now run on high-resolution (4K) displays without everything becoming very small. This is done by letting Windows scale the display bitmap, so the result is somewhat blurry. Spike2 Version 8.07 and later versions run at the full screen resolution.
- The Talker interface is upgraded to version 3. There are new script commands: TalkerSendStr() and TalkerReadStr().
- When you load a sampling configuration, if a stored window position would place the title bar of a window off the screen (making it very difficult to position), it is ignored.
- If you used FileTimeBase() to change the time base of a time view, the x axis did not redraw.
- Threshold crossing searches with 0 hysteresis now set a small hysteresis value to prevent searches getting stuck.
- Repeated time view searches impose a minimum step of 1 clock tick to avoid infinite loops.
- If you set burst mode sampling, it was possible for the sample rates to be very poorly optimised.
- 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.
- The folder where graphical sequences are stored has been changed from the all-users Application data folder to the current user Application data folder. This is to work around problems where users in a corporate network were not allowed write access to Application folders, resulting in no Graphical sequence when sampling.
- If the key of an XY View is larger than the view in width or height, you can drag it so that all of the key can be read.
- In a script, the ternary operator (a ? b : c) is now be reduced to b or c if a is a constant expression (known at compile time), saving evaluating a and branching at run time.
- The System() and System$() script commands now know about Windows 10.
- The DlgValue$(item%, new$) script command can now select drop down list items defined by DlgList() and DlgString().
- Declaring a local array with all dimensions of 0 size except the last caused a 'Cannot make array' error. Now, any combination of zeros in the declaration is accepted.
- In the Sampling configuration Channel Settings dialog, if you edit the channel number, the old channel is set to Off (previously you got both the old and the new channel).
- If you opened the View Rerun dialog and duplicated the time view, Spike2 would crash.
- If a result view had invalid areas (in need of repainting), and a script hit a break point or a Yield() statement, the view did not update.
- SerialRead() could fail if you specified a terminator character and the input stream supplied more than one buffer of data before a terminator was found.
- The FileSaveAs() script command let you use incorrect file extensions.
- Requesting burst sampling mode at slow sample rates when all channels end up as "Slow" could cause the 1401 to sample at the wrong rate.
- If you declared a script variable with var inside a loop and assigned it a constant value (known at compile time), the value was not assigned each time around the loop.
- Time strings in dialogs with 3 colons (for example 1:00:00:00, meaning 1 day) did not get converted correctly.
- The script code: Message(Error$); was incorrectly accepted by the compiler, resulting in a crash when you ran the script.
- If you saved and reopened an XY view, the Y axis units were set to empty.
- SampleAutoName$() did not get recorded if automatic file naming was enabled.
- In a text-based view, Draw(line%) did not make line% the top line.
- The graphical sequence editor was not saving the variable numbers for all waits and branches that depended on a comparison between variables.
- The Modified() script command on a text-based view now tests for unsaved changes, not undoable changes. Previously, if a text-based view was changed by a script, Modified() said it had not been changed.
- The script language allows you to use underscore as part of a symbol name.
- The script language has predefined constants for the Spike2 version and the mathematical constants π and e.
- The maximum number of pulses in a pulse train in the graphical editor has been increased from 400 to 1000.
- Channel searches for a maximum, minimum or absolute maximum over a zero-width time range now fail rather than returning success at time 0.
- There are fewer compiler error messages with '???' indicating the problematic symbol, making it easier to fix the problem.
- The Vertical Marker dialog now correctly records changes to the font.
- If a script was loaded by another script, compiled (so that the Compile command was disabled) and modified, the Compile command was not enabled.
- Selecting more than 256 items in the Change colours dialog could cause Spike2 to crash.
- The IIRInfo() script command always returned 0, not the filter type.
- The script ternary operator did not allow you to choose between two arrays.
- If you read multi-trace WaveMark data from a memory buffer as Waveform data, and the read started part-way through an event, the wrong data was returned (the offset into the buffer did not allow for the number of traces).
- The script debugger could display the wrong included file when stepping through code.
- With a Micro1401-3, arbitrary waveform output at slow rates (less than 10 kHz) did not generate any output.
- 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".
- The MinMax() script command did not get the positions of the minimum and maximum exactly correct when used with a WaveMark channel with multiple traces.
- The MarkEdit() script command did not edit the waveform of a multi-trace WaveMark channel correctly if a vector (1D array) was used rather than a matrix (2D array) to set the new values.
- If the Set Marker Codes dialog was opened from a channel context (right-click) menu, the initial message could be for the wrong channel.
- Talker channel information was not saved correctly in the sampling configuration if a talker generated more than 1 channel.
- The FiltAtten() and FiltInfo() script commands now both return the attenuation as a negative value to match the value set by FiltAtten().
- 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.
- 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 not in use), cursors 5 and 7 were not restored.
- A script that ended with a conditional statement that enclosed halt as the last statement, for example: if test% then DoSomething();halt;endif; could cause Spike2 to crash if the halt statement was not run.
- 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.
- If your computer is set to a locale where the number 3/2 is printed as 1,5 rather than 1.5 and you exported data to MATLAB, subsequent reads of XML resources could fail.
- During sampling, reads of event-based data were truncated if they crossed the last commit time. Reads that ended before or started after the commit time were unaffected.
- If you changed the marker folding style from the Script Editor Settings dialog, the change did not happen until the next time the text window opened.
- You could crash Spike2 by using the script command FiltCalc(-1,1) before a filter was defined.
- Backwards searches for waveform data with gaps did not always work correctly.
- Reads of waveform data from a WaveMark channel could be one point short when WaveMark items overlapped.
- Channel measurements in Trough mode were incorrect.
- In the Graphical sequencer, pulses in the first section were generated 1 sequencer tick late (the relative times were correct).
- 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, as intended.
- 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.
- Changing the number of channels in a result view channel process when Raster data was displayed could cause Spike2 to crash.
- Slow arbitrary waveform output with a Power1401 mk II with monitor version 9 did not generate any output.
- 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.
- 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.
- Export to Data (.smr) file now sets the ideal rate for all channels, not just waveform and WaveMark channels.
- You can now create WaveMark channels with multiple traces from waveform channels with different scale factors even if the first channel does not have the largest scale.
- The ChanFitShow() command can now set the drawing range for a fit before the fit is performed.
- The Talker system is updated to cope with version 1 specification talkers as used in Spike2 version 8.01 onwards.
- Channel selectors in WaveMark and Virtual channel dialogs now match the channel order in the associated time view.
- The Esc key no longer closes PCA and Cluster on Measurement dialogs.
- Importers: The Axon, MC_Rack and Biopac data importers now use the latest libraries. You can select the recording session in the NewBehavior (Neurologger) importer.
- Spike monitor dialog channel numbers were not visible against a dark background and did not use the correct font.
- Using DlgChan() with no data view could crash Spike2.
- On-line curve fitting could cause a crash if a curve fit attempted to use data that had not yet been sampled.
- If a user-defined dialog used a field defined with DlgChan() that included selected channels and the user changed the selection while the dialog was displayed, the list of selected channels did not update in the dialog.
- Reading the result view background colour with ColourGet() actually read the time view background.
- A corrupted resource file could cause the x axis of a time view to start from a negative time.
- The DebugHeap() script command to get heap entries swapped the rows and columns of the result.
- You could drag the y axis of a Spike shape dialog (but not the on-line setup dialog) beyond reasonable limits, leading to the displayed axis values being unrelated to the displayed data.
- When sampling tetrode data (Wavemark data with 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.
- 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;
- Recording of MeasureToChan() and MeasureToXY() omitted the width argument in threshold iteration modes.
- 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.
- Each time you exported data to a MATLAB file, the MATLAB libraries we were using leaked 1.3 MB of memory. We have now changed to the R2013b library version. These leak some 50 kB of data for each file import, which is not ideal, but allows most users to export several thousand files before hitting memory problems.
- In the Graphical sequence editor we now refer to sections as Section A to Section Z, not Key A to Key Z.
- From 7.12 to 7.12b, opening the About box could cause Spike2 to close with an error message.
- Since 7.11, the New WaveMark dialog set the number of pre-trigger points to 0.
- The script compiler incorrectly allowed global variables to have the same names as built-in functions.
- With a Power1401-3, restarting arbitrary waveform output while it was running could cause sampling to stop with an overrun error.
- Display optimize of multiple-trace WaveMark waveforms that overlapped the start or end of the x axis display range could set the wrong y axis range.
- Using DlgChan() in an XY view that was the target of Measure to XY could cause channels to be listed as (Off).
- If your computer has a web connection, the About dialog will tell you if there is a newer version of Spike2 available for download.
- Since version 7.11, if you duplicated channels and deleted some of the lower-numbered duplicates, creating more duplicates could break the duplicate numbering.
- In version 7.12 with a Power1401-3, playing an arbitrary waveform through a DAC stopped that DAC being updated by other methods.
- In version 7.12, if you used the binary importer from a script it did not use the default configuration files.
- The FileOpen() script command supports a mode% value of 8 to set the start folder for the File Open dialog.
- In 7.11, the drawing mode of a memory channel used as the destination of a Measurement to a data channel was not saved in the new XML resource format.
- In 7.11, the last positions of the Cursor Regions and Values dialogs were not saved.
- The duration of arbitrary waveform output was limited to 1 second when space was reserved using the size% argument of PlayWaveAdd().
- Using the FileSaveAs() script command on an XY view with type% set to -2 did not work correctly.
- In the graphical sequence editor, branch on variable+offset and compare with current time was incorrectly implemented.
- In the output sequencer, a VAR statement that declared an alias for a variable that started with a V could give a spurious error if the remainder of the alias (after the V) was the name of a constant or a label in the sequence. For example: VAR V1,VBASE when BASE was also a label or a constant.
- The Round() script command rounded negative numbers towards 0 and not towards the nearest integral value, as documented.
- In the Graphical sequence editor, a Ramp might not stop at the final value if the ramped DAC was set to a new value at precisely the end of the ramp.
- In version 7.11, it was possible to crash Spike2 by measuring to an XY view with more than one plot channel.
- In a result view, if the minimum y value was zero or negative and you switched the y axis to log mode or used the y axis Optimise command in log mode, the result was often not useful.
- Not all changes made in the X and Y axis range dialogs could be undone (log mode, for example).
- The avicomp program (to compress .avi files) could refuse to generate a temporary file due to path issues.
- Recording of ExportChanList() omitted a comma between the end of the time range and the channel list.
- Some badly-formed virtual channel expressions generated Unknown error type; they now give the correct error.
- The ChanValue() command gave an error if mode% was greater than 12.
- With script recording turned on, the Analysis menu->Memory Buffer->Create Channel Copy command only recorded the creation of an empty memory channel.
- Active cursor rising/falling through threshold searches on channels drawn in mean frequency mode could fail.
- If the sample interval or alignment of a virtual channel derived from a waveform did not match the source channel, and if a virtual channel point was at exactly the same time as the last point before a gap or the end of the source waveform channel, this point was calculated as NaN (not a number) and would display as zero.
- ChanShow() and ChanHide() did nothing if any channel in the argument list did not exist; now they show or hide any channels that do exist.
- FileList() with type%=6 now lists both *.s2c (old format) and *.s2cx (new format) configuration files.
- Sampling works better when you ask for TextMark data sampled at high rates.
- The TextMark dialog opens in a sensible time if your data file has a huge number of TextMark items.
- The maximum number of elements in a multi-dimensional array is now 100,000,000.
- As we now allow zero-length arrays in some places, the Len() script command now accepts a zero-length array and does not report a script error.
- The script compiler now gives the "array too large" error in the right place.
- There was a spurious warning message in version 7.11 if you added a channel to the sampling configuration and sampled.
- You can now choose to install Spike2 in the Program Files folder, as Microsoft would prefer, rather than in your own choice of folder. This also changes where we search for the last and default configuration files.
- There are new options to reset the DAC and digital output values to known levels before and after sampling data. These options can be set globally in the Edit menu Preferences or can be set for each sampling configuration. The new OutputReset() script command supports this feature.
- The Ctrl+Shift+A key combination in a data view now fetches all vertical cursors.
- Virtual space can now be disabled in the Editor settings.
- The XY view key size is now recalculated on a font change.
- The FilePath$() script command has been extended to return the current user's Spike7 directory (inside My Documents) and also the Spike7Shared directory (inside the Documents folder) for all users.
- There is a new importer for Neurologger .hex files from NewBehaviour GMBH.
- An option enabling use of the number-formatting settings in the operating system for text export has been added to the General page of the Spike2 preferences. This allows the use of a comma for the decimal point.
- As we now save resource data in XML files we can increase the length of active cursor expressions (now up to 240 characters) and user-defined cursor labels are now saved and restored without being truncated.
- The script compiler detects variables that are used in a user-defined func or proc before they are defined.
- The script compiler no longer incorrectly accepts halt() as valid code. The correct code is halt with no left and right parentheses.
- When exporting waveform data to MATLAB, if the data had gaps, it was possible to miss a gap, leading to the data after the gap being appended to the data before the gap as if the gap were not there.
- In the script FileOpen() script command in time and result views, resources were always read (regardless of 2 being added to mode%).
- When you dropped down the Auto units field of the Y Range dialog, the field always reset to Off. Now it preserves the current setting.
- XY documents created by processing are now added to the recently-used files list when they are first saved.
- The maximum limit of 52 duplicates of a result view channel is now applied, and channel number labels for duplicates above number 26 use upper-case letters (1A, 1B ...), as documented.
- Curve fitting on real marker channels drawn as rate histograms, mean frequency or instantaneous frequency now uses the data as drawn.
- Dialogs created using the script language are always destroyed when script execution ends. Previously, they could be left behind.
- Newly-created or re-opened documents derived from a time view by processing are always marked as unmodified.
- Reordering channels now causes the cursor regions and cursor values dialogs to update to match.
- FitValue() now works! It also has an extra argument to report success or failure.
- The Cursor menu Fetch and Position commands now update the cursor regions and values on a change.
- It was possible to crash Spike2 in the FIR filter dialog by repeatedly dragging the edges of multi-band filters to perverse positions or by manipulating filters with multiple pass or stop bands.
- The script compiler has been rewritten to allow us to expand the language. This has fixed a few anomalies that might cause some scripts that previously were incorrectly accepted to now (correctly) report errors. It has also made the script less insistent that semicolons separate all statements. It also allows you to declare global arrays with a size set by a variable.
- The resource file system has been completely rewritten to use XML rather than the previous use of a proprietary binary format. The intention is that this change should be transparent except that the files holding resources and configurations have an x at the end of the file extension. That is, .s2r becomes .s2rx and .s2c becomes .s2cx. FileSaveAs(name$,6,...) may now fail if you read old resources and have not created a file to sample (which triggers the conversion to the new format).
- In the Spike shape dialogs, the short-cut keys for play forwards and play backwards are changed from n and N to P and Q. This is to prevent accidental use of the keys when b and m are being used to step back and forwards by individual spikes.
- The default button in the Reclassify WaveMarks dialog has been changed to Cancel. This is done to make it harder to accidentally reclassify data, which is destructive.
- The default display mode for Raster displays generated as part of a result view has been changed from dots to lines, so they are easier to see.
- The dot size used when you have chosen hairline data width now scales in pixels for the screen and in units of 0.25 points for a printer; previously the printer size was often too small to be visible.
- When printing and copying spike shapes, the y axis range now matches that displayed in the spike shape dialog. Previously we attempted to scale the result so that the template limits spanned the display area.
- Support for the Power3 is included.
- Corrects a bug introduced in 7.08 that made it possible to crash Spike2 when the Spike Monitor window was in use.
- Version 7.10a fixes a bug introduced in 7.09 where you could not delete data file channel n if channel n+1 had duplicates.
- If you created a spike shape window with SSOpen() with mode% zero or omitted, the window appeared then was hidden, causing an annoying flash.
- MemSetItem() will accept the code% argument as an integer value for Marker-based channels.
- Using Ctrl+Alt with click and drag on WaveMark data to select items to change the marker codes now works in triggered display modes.
- If you export to a Spike2 data file and the original file holds the time of day and date at which sampling started, this is copied to the exported file. If the time shift option is used, it is taken into account.
- The FileTime$() and FileDate$() commands will now accept an optional time offset in seconds to make it easier to print the time of day or date at which something happened in a data file.
- The sampling configuration Resolution dialog now allows all Microseconds per time unit values to have 0.1 µs resolution. Previously, values of 20 µs or more were restricted to 1 µs resolution.
- Fitted curves did not display in an XY view for channels drawn as histograms.
- Fitted curves did not offset in an XY view to match the channel offset.
- After using ChanOrder(n,0,m) to overdraw channels n and m, ChanOrder(n,1,m) did not separate them.
- We write .smr (data) files in the oldest format that is compatible with the data so that older versions of Spike2 can read them. An inadvertent change in Spike2 version 7 prevented Spike2 version 3 reading data files that were otherwise compatible.
- You can now use the View(-n). prefix to resolve duplicate time views when specifying the level trigger in the Memory buffer Import dialog.
- All data importers revised to avoid "Error -100: Cannot open file" with Windows 7.
- The D360 conditioner is prevented from entering the Impedance test dialog during sampling. If this is allowed it can cause Spike2 to stop responding.
- Since version 7.07, setting Black and White display mode did not change the WaveMark data colours.
- When attempting to extract a sampling configuration from a data file we now set the created configuration to assume that the 1401 type is at least a Power1401 mk II. Previously the lowest-common-denominator 1401 type was assumed which caused problems when the data file had a basic time unit that was not an integral number of microseconds.
- When processing a power spectrum into a result view, we now overlap the analysed data blocks by half of the FFT size. Previously the blocks were not overlapped. The new way corresponds with Welch's method, the old way was Bartlett's method. There is an option in the Edit menu Preferences to use the old method. Overlapping the blocks minimises the signal loss due to the use of a window function at the expense of increasing the time required to calculate the power.
- Previously, when saving spike shape templates to a resource file associated with a data file, Spike2 would not make any change if there were no templates to save. This meant that if you deleted all the templates, the next time you used the resource file the previous templates would reappear. From version 7.10, if you delete all templates on a channel, the resource file is updated and the next time you use it, there will be no templates.
- 7.09 allowed lower-numbered virtual channels in the virtual channel expression, which also made mn and 1a possible, but we forced the expression to upper case, so 1a became 1A and did not work.
- Move Away button in Set Position dialog in SS dialog did not work for all cursors.
- It was possible for the principal components analysis within the spike shape sorting system to cause Spike2 to crash if it ran out of memory.
- The 19/04 upload of 7.09a had changes in the ASCII, Binary, Heka, DSI, MindWave & Alpha-Omega file importers to avoid source file path issues with Windows 7.
- The ASCII and Binary importers handle sampling rates better.
- The Alpha-Omega importer generates a text marker holding readable values rather than a simple marker.
- Serial line TextMark data allows all codes to be set (just set a larger number).
- Duplicate channels now are sorted next to their base channel, if possible.
- The spike shape dialogs now display cursor position and template size information when you drag the horizontal and vertical cursors and you can now set the horizontal cursor positions by typing values or copying cursor positions from the associated time view. You can now link the horizontal cursors to cursors in the time view.
- You can now create histograms in an XY view.
- In an XY view you can offset the position of a channel with the new XYOffset() script command. This allows you to generate a grid of histograms or to offset a stack of channels for comparison purposes.
- The IIR filter family get information commands now return a measure of the filter stability. The commands that generate IIR filters now return 1 if a generated filter is likely to be unstable.
- The s2video program has new configuration options that can improve video synchronisation.
- The interactive commands to save time, result and XY views as bitmap images can now save as JPEG, PNG and TIFF format files in addition to BMP formats. The FileSaveAs() script command has been extended to do the same.
- The Channel Image command now allows you to open JPEG, PNG and TIFF images in addition to bitmaps. You can also use a clipboard image as the background.
- FileSaveAs() can now save a video frame in a multimedia view as a bitmap on disk.
- The new MMFrame() command gives access to lists of frame times in multimedia windows.
- The new MMOffset() command lets you get and set the time offset between an AVI file in a multimedia file and the Spike2 data file.
- The MMPosition() command can now step to the next and previous frame time.
- You can now set COM port numbers in the range 1 to 19 in the conditioner and TextMark dialogs and in the range 1 to 256 in the SerialXxxx() family of commands.
- A virtual channel expression can now refer to a virtual channel with a lower channel number than the channel created by the expression.
- In the Active Cursors dialog, if a cursor has a user-defined format string, this is displayed to help identify the cursor. You can also open the Cursor Label dialog without leaving the Active Cursors dialog.
- In dialogs where you have a choice of cursors in a drop down list, if a cursors has a user-defined label, this label will appear as a tool tip to help you identify the cursor.
- The MATLAB export system now has a progress dialog with a Cancel button if the export takes more than a couple of seconds.
- Export to a SON (Spike2 data) file now has a progress dialog with a Cancel button if the export takes more than a couple of seconds.
- We can now import TDT .tev and .teq format data files.
- In the View Trigger dialog, setting the Cursor zero action to Move and iterate did not iterate the active cursors.
- When debugging a script, the Run to cursor command did not work.
- Using the File menu Close All command with open result views could cause a crash. Any attempt to open the same data file would then cause a crash until the associated .s2r file was deleted.
- In the Spike shape dialogs, the Lock template button image did not change when a template was locked.
- When sampling a large data file (several Gigabytes), scrolling back to look at earlier data could cause disk accesses to become very slow, which in turn could cause sampling to be abandoned.
- When saving a time, result or XY view as a bitmap image, an extra tick label could appear at the left-hand end of the axis.
- The virtual channel Power in Band result could be delayed by one output sample and could appear non-continuous when scrolled if the output sampling frequency was less than the frequency resolution.
- The Channel Process median filter could occasionally sort the data incorrectly, leading to an incorrect value being reported for the median.
- Active cursors in expression mode are now allowed to position cursors beyond the current end of the file when sampling or rerunning.
- In the Spike shape sorting dialogs, using Edit Copy to copy template information as text no longer outputs blank lines when there are no templates.
- The IIR filter is allowed to set frequency features down to one millionth of the sample frequency (100 times narrower than before). Setting such narrow features is likely to result in filter instability, particularly at higher filter orders. You MUST check the filter details, especially the stability, if you set a very narrow feature.
- The signal conditioner support now avoids using the CEDCOND.INI file and uses the registry to store persistent information. The change is intended to be backwards compatible; we migrate settings from the .INI file.
- This version of Spike2 has been built with newer development tools and as a result will not run on Windows 2000 or Windows XP prior to SP2.
- Added support for the Digitimer D360 amplifer.
- The interactive curve fitting dialogs now include the R-square statistic. The ChanFit() script command can return this value.
- MemChan(4,1) can now be used to create a Level event channel that starts in the high state. You can also do this when creating a Level event channel from a dialog.
- If you read in an old-format sampling configuration that does not contain ADC and DAC range information, you are warned to check the channel scaling. If the old configuration was used with a 1401 with ±10 Volt ADC and DACs and you are currently using a ±5 Volt system the scaling will need manual adjustment.
- Scripts run from the Script bar are no longer added to the recent files list.
- Recording of the Draw Mode dialog now handles Sonograms and adds a comment describing the drawing mode.
- When debugging a script you can step over a user-defined Proc or Func that contains a Yield() command. Previously the script would break on the statement after the Yield().
- The IIRxxx() family of commands now allow you to save the filter state. This allows the same filter to be used incrementally on multiple data streams.
- ChanList() now returns -1 if a channel specification string contains a syntax error.
- Output sequencer CHAN command now allows access to 8 DACs (was previously limited to 4).
- The measurement dialogs now allow access to fit coefficients by name rather than by number and sets the result units to the coefficient units.
- The colours dialog now starts up with the channel primary colour page; this was inadvertently changed in version 7.07.
- If you used MeasureToXY() or MeasureToChan() script commands, enabling user checks of cursor positions could prevent subsequent changes to a window.
- The virtual channel spectral functions added at version 7.07 did not allow for the FFT size when invalidating the display. If you used this feature during sampling, the display did not update correctly as new data arrived.
- The ProgRun() script command could cause Spike2 to crash when used multiple times if a program that was previously launched had terminated.
- In ChanFitShow(), setting opt% to -2 to return the range end did not work.
- When debugging a script, the arrow marking the next script statement was not hidden when you hit the run button in the Debug bar.
- It was possible to crash Spike2 by processing a Result view that contained raster data when sorting on an auxiliary variable value.
- If you use ArrFilt() with an even number of coefficients (for example for a full differentiator), the result is now delayed by half a sample, which matches what happens when applying FIR filters to a data channel.
- The MatLab exporter no longer skips over data channels with no data. It now exports the channel with zero length.
- Buttons with pictures in Spike2 now match the current desktop theme more closely; this is particularly evident in the WaveMark dialogs.
- You can now set the colours of all data view items as RBG colours independently of the colour palette. The palette is still available as a convenient set of colours, but you are not confined to it.
- We have separated the marker code colours (often used for spike shapes) from the colour table and you can increase the number of them.
- The new script commands to control colours using RBG values are: ColourGet(), ColourSet(), ChanColourGet(), ChanColourSet(), ViewColourGet() and ViewColourSet().
- There are new Virtual channel functions to calculate power, spectral edge, mean frequency and dominant frequency. These are particularly useful in EEG and EMG analysis.
- Y axis titles draw horizontally when the axis changes to compact mode due to lack of vertical space.
- You can set horizontal Y axis titles and units. The YAxisMode() script command controls this feature.
- There are new channel processes: Fill gaps and Skip NaN.
- The Virtual channel Ch(n) function can convert the first trace of a WaveMark channel to a waveform.
- You can now open user-defined dialogs within a change function of a user-defined dialog. Previously there was nothing to stop you doing this, but the result was not defined.
- The DlgSlider() script command adds a horizontal or vertical slider control to a user-defined dialog.
- In a user-defined dialog, when using dialog units to position items, you can now position relative to the right-hand side of the dialog with a negative x position.
- Sonogram draw mode has been recoded to be both faster and more accurate.
- Script recording of opening a new sampling document now creates variables to hold the handles of additional views that open due to the sampling configuration.
- We have improved script recording of new memory, virtual and duplicate channels where the generated channel number is not fixed.
- Script recording of the Add Items to Memory Buffer command now records any added data values and text strings.
- Previously, if a Windows Metafile was generated with non-circular dots, the dots were likely to vanish when the Metafile was manipulated by external programs due to an 'optimisation feature' in a Microsoft security fix. We now draw the dots using a different method.
- Background drawing of a grid is neater in 3D drawing mode.
- You can undo an interactive change to the font of a time, result or XY view.
- The BetaI() script command implements the incomplete beta function. This enables simple computation of the Student's t-test, the F-test and the binomial distribution.
- The ViewLink() script command can report processes attached to the current time view.
- The Measure to Channel and Measure to XY dialogs allow longer strings to be entered for the expression.
- If you abort sampling, or save or export a data file on top of an old file with the same name, we attempt to save the discarded file in the recycle bin. This should make it easier to recover from accident file loss. This is experimental; let us know if it causes you any problems.
- The Talker interface security system has been revised to make it easier for external systems to connect.
- The Result view Info... dialog now contains more information.
- The script debugging windows for local, global, watch and call stack can be positioned outside the Spike2 application window and are always on top of other windows.
- In a text-based view you can use Alt+Up and Alt+Down to move the selected text lines up and down.
- You could not undo the effect of Standard Display on a Channel Image and not all changes in the Show/Hide Channel dialog would undo.
- If a user dialog had a button function and the button function opened another dialog and then returned 0 to close the original dialog and update any DlgShow() arguments, the original dialog closed but the arguments did not update.
- In a user-defined dialog, the Cancel button was not activated by the Esc key.
- SampleAbort() did not record as a script action.
- Reading a sampling configuration from a data file ignored waveform channel titles and comments.
- In the X or Y Axis dialogs, if you set the tick subdivisions to the maximum value (25), it was ignored.
- In versions 7.05 and 7.06, if you set a user-defined label for a horizontal cursor that included %n for the cursor number, the displayed number was 1 too large.
- Using Maxtime() on a virtual channel derived from a RealMark channel could cause a crash.
- LastTime() when used on a virtual channel that used the RM, RMC, IF or IFC expressions assumed that the RealMark or instantaneous frequency data had no gaps.
- There were drawing glitches when sideways scrolling Level Event data drawn at high magnification.
- Graphical sequencer ramps did not output sufficient significant figures for the per-tick increment.
- If the ChanShow() and ChanHide() script commands were used with multiple arguments, some specification types (for example a channel list as a string) reset the list before adding their channels.
- If a script window was active while a script ran and the user typed Ctrl+Break to cancel a long drawing operation, it was possible for ETX (character 3) to appear in the script window.
- The documentation (both on-line and printed) did not include the FitSigmoid() script function.
- The display of a large channel background image was not always correct.
- Illegal characters in a script (for example, i% != 1) were detected by the compiler, but the offending character (! in this case) was incorrectly identified.
- The script compiler was not flagging a vertical bar as an illegal character in an expression.
- In the Process Settings dialog, if you changed only the number of channels in a result view, the first result view channel was left with the previous contents.
- In version 7.06, the New Result View menu listed the commands in a reversed order (compared to all previous versions). The original order is now restored.
- The File importer now switches to the large file format if the new data file is estimated to be 1 GB or larger. The previous limit was close to 2 GB, which caused problems if the size was under-estimated.
- The Spike2 colour model has changed from palette-based (all colours specified by an index into a palette) to a RGB colour model (all colours specified by red, green and blue colour combinations). The script commands: Colour(), ChanColour(), ViewColour(), XYColour(), PaletteGet() and PaletteSet() use the old model and are now deprecated, but there are no plans to remove them.
- The maximum length of an output sequencer input line has been increased from 100 to 256 characters. If you create lines with a long comment, the sequence will not be accepted by older versions of Spike2.
- The script debugging windows are now independent of the application window and no longer support printing from the main menu. To print a debug window, select all and copy to the clipboard, then paste to the log window and print.
- Time, Result and XY channels can now have a background bitmap image. This is mainly for use in XY views (for example, in tracking experiments). The images can be controlled interactively from the View menu Channel Image command or with the new ChanImage() script command.
- In a text file, the regular expression search now allows ? to mean 0 or 1 of the previous character.
- When the clustering window identifies the current event by flashing it on and off, it now flashes a circular dot if circular dots are selected. Previously it always used a square dot.
- You can now copy a horizontal cursor position without units from the right-click context menu. Copying with units now matches the unit scaling options set for the y axis.
- You can now run the x axis of an XY view from right to left. This can be blocked on an axis drag by setting an Edit menu Preferences option.
- Extra data is displayed in the fitting dialog results page for sigmoid (Range and Slope50 fields) and sinusoid (frequency field) fits. An estimate of the sigma for the new fields is given for the range and frequency fields.
- SampleSeqVar() now allows variable numbers up to 256 (the 1401plus is limited to 64).
- Virtual channels now allow Ch(n) where n is a level event channel. The generated waveform is 1 where the event is high and 0 where it is low.
- The script compiler and execution system has been revised and script operations run up to twice as fast as previously. This does not halve the time for a script to run as this is dominated by the time taken to execute the built-in commands.
- When you create a horizontal cursor interactively, the cursors now space themselves out across the first visible channel with a y axis. Previously they were all placed half-way up the y axis.
- You can use the keyboard shortcuts Alt+1 to Alt+9 to fetch or create horizontal cursor n.
- The ScriptRun() command has a new flag option that keeps loaded scripts in memory.
- The Heka file importer has been extended to support old format data files from Apple Macintosh computers. The Heka importer no transfers the time of file creation; this supports the Spike2 time of day display mode.
- The DSI importer now supports data files with 4 character file extensions.
- The Alpha Omega importer now imports WaveMark data from an old file format.
- If the clustering window was set to use colour fade and to show variable sized dots and the source data did not have a z dimension, then no dots were visible.
- Opening the PCA analysis dialog online could crash Spike2 depending on the previous use of the PCA dialog.
- Changing the channel title from the Talker Dialog now works.
- Disabled fields in some Process dialogs were being checked; this could cause correct setting to be rejected when processing measurements to a channel or an XY view.
- The ChanSearch() script command was searching backwards if sT and eT were set to the same value. Now it does nothing if the values are the same.
- It was possible to hang Spike2 when using a virtual channel to convert RealMark data to a waveform using the Rm or Rmc commands.
- If a time view only displayed channels in Overdraw WM mode, the data did not update correctly when the view was scrolled.
- The script commands ChanProcessClear() and ChanProcessClear(-1) to remove any channel processing from all channels did not clear the channel modified indicator from the channel numbers.
- It was possible to get Could not open Clipboard messages when a script loop repeatedly wrote to the clipboard. This can be due to the previous clipboard operation still running on a separate thread of execution. If the clipboard fails to open we now suspend our thread for a few milliseconds, then retry the operation up to 10 times before displaying an error message.
- In the graphical sequencer dialog, the Write as text sequence button did nothing if you had just switched to graphical mode.
- When debugging a script with a #include file, if you attempted to run to the text caret in an included file, it ran to the text caret in the original file.
- The EDF importer now handles dates correctly to allow time of day display mode.
- The Clear Graphical Editor option now clears the keys associated with all the sections.
- The Cursor menu command to Fetch a horizontal cursor now always places it on the first visible data channel with a y axis to match the new Alt+n keyboard commands. Previously, the horizontal cursor was moved to the vertical centre of the channel it was attached to, unless it was hidden, when it was moved to the first visible channel with a y axis.
- You can now output sinusoids and ramps on up to 8 DACs with a Power1401 mk I (to match the Power1401 mk II).
- The return value from the FileNew() script command has a new error code for "1401 not capable of sampling this configuration".
- Spinners in user-defined dialogs now blend with the associated field more neatly.
- The graphical output sequencer editor will generate code for a section if only a key is set; previously you had to also set some output.
- Overdrawn channels draw the channel number using the channel primary colour if one is set. This can help you to identify multiple overdrawn channels.
- New ZeroFind() script function to find a zero of a user-defined function.
- The Alpha Omega file importer can now read old format event data.
- Biopac version 4 files can now be imported.
- The Delsys importer can now read EMG version 4 files.
- The Heka importer now reads continuous gap free data.
- The Timing Fault markers in the output sequencer graphical editor were not always redrawn when text was changed in the dialog.
- When creating a result view, if you set a source channel list of 3,801,802 where 801 and 802 were channels 3a and 3b, this was internally translated to 3..3b, which was later expanded to all the channels between 3 and 802. This generated an unexpected list of channels in the result view.
- The Y axis auto-units option is now remembered when a data file closes.
- In Aero drawing mode (Vista and Windows 7), horizontal cursors used during sampling left pixel dust behind when dragged.
- Attempts to use the Position Horizontal Cursor command for cursors 4 and 5 opened the wrong dialog.
- The return value from the FileNew() script command gave the same return value for "user cancelled sampling" as for "no 1401 available".
- User-defined dialogs containing only buttons did not get sufficient height.
- Illegal debounce values for non-event channels could cause permanent "out of range" values in the sampling configuration dialog.
- The MinMax() script command could hang up if used on an event channel to find the minimum and maximum intervals when the selected time range held 8000 or more event times.
- The MemChan() command variant with two arguments to create a channel based on another channel did not copy the channel units for waveform, RealWave or WaveMark channels.
- When a channel list was passed in an array to SetAverage(), SetPower() or SetWaveCrl(), there was no check that all the channels had the same sample rate.
- In 3D overdraw mode when X axis space for 3D effect was not 0, the area to the right of the x axis was not filled.
- If you setup sampling for a Power1401 or a Micro1401 mk II or -3 in such a way that the sampling required the dummy channel optimisation, then sampled with the original micro1401, the sample rates for waveform channels would be incorrect. Now you are told to adjust the sampling configuration.
- In 7.04, we inadvertently changed the Edit WaveMark dialog so it always opened with Track Cursor 0 enabled.
- If a channel scale factor was set to a very large value (1e37, for example), Copy As Text could crash Spike2.
- The File Information dialog complained if a comment was more than 71 characters long; the limit should have been 79 characters.
- A failed Talker connection now generates a more useful log message if the Talker is already connected.
- You are not allowed to forget a Talker that is currently connected.
- Using the Sampling configuration Talker dialog to change the channel title now works.
- The context menu for horizontal cursors now has an option to copy the cursor position without units.
- Copy horizontal cursor position with units now takes account of any SI unit rescaling in the Y axis.
- In xy views, we have removed code that limited line co-ordinates to the maximum for Windows 9x systems (as Spike2 no longer supports these operating systems). This allows you to zoom in further before lines cease to be drawn; we do not think it causes any problems, but please let us know if it does.
- The ASCII and Binary file importers have changed the names of the files they use to store import settings.
- Spike2 can now sample data from Talkers. A Talker is a software module that interfaces between an arbitrary data capture device and Spike2.
- If you sample WaveMark data with a Power1401, Power1401 mk II or a Micro1401-3, you can now reject spikes that exceed an amplitude limit. An optional extra pair of horizontal cursors set the limits.
- The debounce option for Marker channels now takes the marker code into consideration. You can also set a negative debounce value for Event and marker channels to preserve simultaneous events by giving them times that differ by a single clock tick.
- There are new script commands PlayWavePoints() and PlayWaveKey2$() to make it easier to use an arbitrary waveform area for different waveforms of different lengths.
- There are new time (%T) and date (%D) specifiers in the Automation tab of the Sampling configuration dialog.
- The ChanOrder() script command can now return channel lists in screen order.
- The new CursorOpen() script command opens the Cursor Regions and Cursor Values dialogs.
- There is less Y axis flicker when resizing a time, result or XY view.
- The Clustering dialog is easier to use. There are more toolbar buttons and the events displayed in the associated interval histogram can be restricted to those in the selected user ellipse or user shape.
- Clustering dialog short-cuts Ctrl+A (Autoscale), Ctrl+Q (Equal scales) and, Ctrl+R (Rescale) also have A, Q and R as alternatives.
- The Clustering dialog allows you to use the event times as the Z axis value in all analysis modes.
- The Clustering display now allows a 0 dot size, meaning as small as possible (1 pixel).
- In the Clustering dialog, if short intervals are displayed, clicking close to an arrow will locate the event that starts the interval.
- Channels in an interval histogram linked to a Clustering dialog now hide when the corresponding code is hidden in the cluster dialog if the Track class and time range changes box is set. The interval histogram now displays the X axis in milliseconds.
- The Clustering dialog Copy As Text command can now include the cluster summary information.
- Warnings and error messages from the 1401 interface or from Talkers are now logged during sampling to help diagnose problems.
- There are new script commands Trim(), TrimLeft() and TrimRight() to remove white space and user-defined characters from the front and back of strings.
- The SSButton(), SSTempInfo() script commands now support spike collision analysis.
- The new SSColArea(), SSColApply() and SSColInfo() script commands support collision analysis.
- Both the script editor and the output sequence editor now highlight matching braces and mark unmatched braces when the text cursor is next to them.
- When debugging, the displays of global and local variables and the call stack are faster and support wrap-around text searches.
- When debugging, there is a new Watch window that displays the value of variables selected from the Globals and Locals windows.
- You can now copy Time, Result and XY views to the clipboard as bitmaps even if they are off screen or minimised. Previously, areas that were not visible on-screen were black in the bitmap.
- There are now keyboard short-cuts for Sample Start/Stop (Ctrl+Alt+S), Sample Reset (Ctrl+Alt+R), Sample Abort (Ctrl+Alt+A) and Toggle Writing to disk (Shift+Ctrl+W). This allows the use of a remote keyboard to control sampling, following a recent user request. The key combinations are deliberately awkward to prevent accidental activation.
- There is a new Edit menu Preferences option in the Sampling tab to prevent Sampling toolbars being made visible automatically when you open a file for sampling.
- The Neuralynx file importer now includes the codes of WaveMark data channels.
- The Binary file importer saves the last import configuration used as BinLast.bib in the import folder. If Bin_Def.bib exists it is always used, otherwise BinLast.bib is used.
- FilePath$() can now be used to get paths to some of the users system folders.
- When sampling, the last used configuration last.s2c, which is saved when sampling ends, is now saved before the view is resized to display available data. This preserves the displayed width for the case where sampling does not reach the end of the display window.
- MaxTime(chan%) where chan% is a virtual channel now returns the time of the last waveform point on the virtual channel; previously it always returned 0.
- With a script running, a user was allowed to use the Edit WaveMark, New WaveMark, New NTrode, Spike monitor, Cursor Regions, Cursor Values and Multimedia menu commands without regard to the current set of allowed actions. Now, the appropriate menu and the ability to change the current window must both be enabled to use these menu commands.
- Dialogs (for example the X Axis Range dialog) where times were accepted in hh:mm:ss formats did not accept exponential formats for numbers, for example 1e2 meaning 100 seconds.
- The X Axis Range dialog allowed you to set a logarithmic axis when the current display range was entirely negative. Likewise, setting logarithmic axes from the script with a negative axis range caused display problems. Now, if the x axis is entirely negative, logarithmic requests are ignored. If the current range is negative, changing to log mode changes the axis range so that the display makes sense.
- When using the output sequencer in all 1401 interfaces except the 1401plus, the front panel Clock output would generate one cycle of an incorrect time period (typically too short) each time the sequence was commanded to jump to a new location.
- The Time$() script command did not use the system settings for 12/24 hour clocks correctly.
- If you changed the axis pen width in the Edit menu Preferences, then opened a time, result or XY view that was last used with a different axis pen width, the first display of any cursors could use the wrong width, leading to 'ghost' cursors on the screen if the cursors were moved.
- The histogram fill colours set for an INTH created from the Clustering window did not match the clustering colours.
- When a virtual channel was converted to a Waveform, the real data was truncated to the underlying integer values. Now it is rounded to the nearest integer value, which is more accurate.
- If a clustering display was set to variable dot size, this was not restored on the next use of the dialog.
- The counts of events in the selected ellipse or user-defined shape in the cluster window now changes if the time range changes.
- If a sampling configuration caused a result view that was outside the screen area to be created, the application could behave very strangely as all idle time was being devoted to repeatedly not drawing the off-screen view.
- When exporting a virtual channel to a MatLab file, one point less than requested could be written at the start of the file or just after any gap in one of the channels used to create the virtual channel.
- If you used a maximum gap with the RM, RMC, IF or IFC Virtual channel commands, points after a gap were not always displayed.
- It was possible to crash Spike2 by attempting to open a result view using a file that was not a result view or was corrupted.
- In large data files, Event correlations, PSTH analysis and Phase analysis could take a long time when the events were sparse compared to the trigger times, especially when the events used a Marker Filter and a large proportion of the events were filtered out.
- The documentation for DrawMode() did not mention setting mode% to -16 to return the as% setting; this was added at version 7.01.
- If you created a duplicate label in an output sequencer file, the error message was not helpful in locating the problem. Now the offending line is highlighted with a useful error message.
- In version 7.03, it was possible for a WaveMark (spike shape) channel drawn in WaveMark mode to draw forever if sufficient data was displayed that the channel took a long time to draw.
- Running a Principal Component analysis with a single spike in the time range could crash Spike2.
- Result view raster displays now optimise to show all the rasters, even if they contain no data. Previously, the Y axis optimise only included rasters with visible events. Script commands that return the maximum and minimum y axis value for a channel in raster mode also include all rasters.
- When drawing, we now check in more places that items are visible against the background. The replacement colour used in low-contrast cases is now chosen to be closer to the original; previously it was always a shade of grey.
- The maximum number of horizontal cursors in a view has been increased from 4 to 9.
- You can now output sinusoids and ramps on up to 8 DACs with a Power1401 mk II.
- With a Power1401 or a Power1401 mk II arbitrary waveform output and offline waveform output can use up to 8 DACs with a maximum of 4 at a time.
- There is a new Modified() script command to get and set the modified and read only state of views.
- When positioning the application or dialogs we now try to avoid collisions with the system taskbar.
- The Cursor Regions dialog now opens with the measurement mode set to the last mode set in the current session.
- Screen updates of a region with a rounded edge are faster and drawing huge amounts of data is less likely to cause the program to be marked as "Not responding".
- EditPaste() can now get clipboard text into a variable.
- You can now override the default pen width used from drawing channel data in time and result view both from an interactive dialog and from the script language.
- X axes in all views that have units of seconds ("s" or "seconds") can now choose to display in milliseconds. This is purely for display purposes, all internal values are still in the original units (seconds). The XAxisStyle() script command is extended to match.
- X and Y axes can be set to scale the axis units automatically to make axes easier to read.
- The Y Axis Range dialog accepts a list of channels and can apply channel ranges based on the channel units.
- The Process setup dialogs allow you to set values for widths and offsets in milliseconds by appending ms to a number, for example 100ms. The dialogs now check field contents as you type and disable the New or Change button if a field is invalid.
- Result view raster displays did not optimize the Y axis correctly unless the entire X axis was displayed.
- Result view raster displays where the X axis included negative values did not display correctly when the X axis was changed to log mode.
- The Graphical Sequencer Editor timing error messages have been corrected for pulses very near the start of a segment.
- It was possible to write beyond the maximum allowed file size in some situations, resulting in data files that could not be opened by Spike2.
- The Error$() script command gives more useful results with error codes from the SON filing system.
- ChanSave() and MemSave() return negative error codes (as documented) for file system problems.
- The 1401 percentage busy value reported in the Sample Status bar was incorrect, especially when a WaveMark channel with a slow sample rate was used.
- After a Print Screen command, Time, Result and XY view contents lost track of where they were until the views were resized.
- Printed channels in Overdraw WM mode could show different events from those displayed on screen, especially when Print Screen was used.
- In printed data views, the background colour did not fill the entire background area.
- In triggered display mode with the Zero x axis at trigger option checked, vertical cursors that display a position now match the X axis.
- The script debugger displayed resized global arrays with their original dimensions.
- The FIR and IIR digital filters did not report an error if the system ran out of memory when filtering to a memory channel.
- If you clicked the [X] button at the top right of the application windows with a modified document open, then clicked Cancel when you were offered the opportunity to save the document, Spike2 would close down some features, but keep running, leading to strange effects, such as the Evaluate bar no longer being available.
- The binary importer now gets the correct scaling for double precision floating point data input.
- The ASCII (text) importer can now import a file with gaps.
- The DSI importer can now import files with 4 character file name extensions.
- The Codas file importer now detects input files with packed data.
- The Igor importer has been extended to import packed files stored as doubles.
- The Alpha-Omega importer now correctly detects the end of file when reading events (markers) with no attached data.
- The Heka importer has been extended to accept an old type of data file.
- The Channel Information dialog no longer has Close as the default button as this meant you could edit a value, then use the Enter key and the dialog would close and not save your change. OK is now the default.
- When vertical markers are drawn under the data, they are now placed on top of any drawn grid or channel background colour.
- The gray bar that separates Overdraw WM data from other channels has been replaced by a hatched bar. The height of this bar now scales with the font size and it also prints correctly. The bar no longer crosses the channel title area.
- Resizing a Time or Result view with a lot of channels is now significantly faster.
- We have speeded up scripts that manipulate large numbers of time or result view channels. If you work with large numbers of channels, the speed up can be dramatic.
- You can now create new folders in addition to selecting existing folders in the Edit menu Preferences and in the Sampling Configuration dialogs.
- The FilePathSet() script command lets you create new folders interactively.
- The text editor now allows the caret to be moved into virtual space (empty space beyond the last character in a line). This has no effect unless you type, when new text is added at the caret position (padded with spaces). The editor also allows multiple selections with the mouse (hold down Ctrl and click and drag).
- The DebugList() script command has new options to report usage statistics for built-in script commands as an aid to debugging and optimizing scripts..
- The time resolution of the Seconds() script command is now 1 millisecond on most systems (it was previously around 10 milliseconds at best). There is an optional high-resolution mode, with some caveats, with a resolution of better than 1 microsecond.
- In the graphical sequence editor, the maximum pulses in a pulse train has been increased from 100 to 400.
- The Ctrl+Alt+Mouse click used to select WaveMark items in Overdraw WM mode has been extended to WaveMark, Waveform and Cubic Spline drawing modes.
- The "Slow update" warning in a window title bar (to remind you to use Ctrl+Break to interrupt drawing) now appears if a screen update takes more than 1 second.
- The Power Spectrum analysis and the SetPower() script command now allow FFT block sizes up to 262144 points.
- There are four new measurements in the Cluster on Measurements dialog.
- You can now control the display of x and y grid lines independently through the Show Hide Channel dialog or with the Grid() script command.
- Arbitrary waveform output in the Power1401 mk II and Micro1401-3 will now take advantage of a DAC Silo firmware upgrade (if present). This reduces the load on the 1401 during arbitrary waveform output, especially when an output sequence is running and allows DAC output at higher rates than was previously possible.
- Result view channels now support channel comments. When a result view is created by a New Result view function, the channel comments are set to indicate the source channel in the associated time view.
- Result views now have a Channel Information dialog that allows interactive editing of the channel title, units and comment.
- The highest ADC channel number that can be set in a sampling configuration has been increased to 127 (to allow for a Micro1401-3 with two 64-channel expansions). There is still a limit of 64 waveform channels.
- The sampling configuration channel setup dialog for Event data and Digital Marker data now includes a Debounce field that can be used to filter out unwanted events caused by mechanical switch bounces. There is a new SampleDebounce() script command to support this new feature.
- You can fade the data colour to the secondary colour in an overdrawn time view.
- If the Edit WaveMark dialog is open and you are not sampling, unclaimed keypresses in the time view are sent to the dialog and activate it.
- In the output sequencer, you can now use constant expressions in more places, in particular you can use a constant for the channel in a CHAN command.
- ArrSpline() can now generate equal interval data from non-equal interval sources.
- You can use HCursor() in an Edit WaveMark view to read back the last set of cursor values used with the New WaveMark command. There are improvements in the Bionic, NeuroScan, Plexon, MED64 and Mc_Rack data file importers.
- A channel list that would accept v1 to mean the first virtual channel would not accept V1.
- In the Virtual channel pop-up menus, the Min() command displayed the text for the Max() command.
- When the sampling configuration is copied as text, TextMark channels no longer display serial line information when set to Manual mode.
- The ternary operator expr ? expr1 : expr2; caused a script error if expr was a constant expression.
- The script language DlgValue$() command can now access a checkbox prompt.
- In a script, the use of proc or func to describe a function argument caused incorrect indentation in the automatic formatting option.
- Labels on big ticks that overhung the end of a Y axis did not always repaint when an object was dragged over them.
- If you called SetPower() with a block size that was not a power of 2, the result view was created based on this number and the Power spectrum was incorrect. Now the block size is reduced to the next lower power of 2 (as documented).
- PlayWaveRate() limited the maximum allowed rate to 200 kHz, but 250 kHz is a legal value for a Power1401.
- The MeasureToChan() and MeasureToXY() script commands did not allow modes 19 and 20. Also, these two modes did not record correctly.
- The Cursor Regions dialog and curve fitting always used index 0 of a RealMark channel when it was drawn in a waveform mode. They now use the data index set in the drawing mode.
- The DrawMode() as% argument was not recorded correctly.
- A backwards cursor search on a waveform memory channel with gaps could cause Spike2 to stop responding.
- There was not enough space for the "Mean error:" text field in the Edit Wavemark dialog when the Spike collision mode was selected.
- Vertical and horizontal cursors were generating too much code when recording.
- If you clicked in the data area of a time, result or XY view that was partially covered by another view, the zoom lines did not draw correctly.
- In an XY view, the zoom lines that appear when you click the mouse in the drawing area could draw over the XY key when they should not.
- If you used the SetResult() script command then Alt+mouse click in the result view to measure, the wrong font was displayed.
- If you used DlgMouse() or ToolbarMouse() commands and did not supply all 3 mouse down, up and move functions, the dialog or toolbar could close unexpectedly
- The Igor file importer now works correctly when two input channels of different types have the same name.
- Clicking and dragging the y axis to scale the display while the data scrolls sideways during sampling no longer causes horizontal cursors to display multiple times.
- The text editor has changed to allow multiple selections and virtual space, so may behave differently.
- FilePathSet() now opens the user interaction dialog if a prompt is supplied, even if the path$ argument is not an empty string.
- In Offline waveform output, missing data before the start of a block is set to the first value rather than 0 (which could cause discontinuities when a block was looped).
- The MMRate() script command has been modified so you can use it to count the number of attached s2video or other listener devices without changing the video frame rate.
- A new option in s2video in Settings->Configuration may give access to more camera features in the Video Device Properties menu.
- There is a new application, avicomp, that can be used to compress .avi files generated by s2video.
- The Multimedia window can track the position of cursor 0 as an alternative to tracking the display window.
- The Offline waveform output dialog has more control over cursor 0. The PlayOffline() script command has been extended to match.
- The Marker Filter dialog now has the option to display codes as decimal numbers.
- The Channel Draw Mode dialog now lets you set the size of dots interactively. Previously, you had a choice of small dots (1 pixel) or large dots (2x2 pixels).
- You can now choose to draw instantaneous frequency as dots, lines or as a skyline. The DrawMode(), MinMax() and ChanValue() commands have been extended to match the new functionality.
- RealMark data can now be drawn as a waveform using dots for each data point.
- Dots drawn in time and result views can now be drawn as circles. Circle drawing is slower, and is enabled by a new Edit menu Preferences option in the Display tab.
- The Clustering dialog has been reworked to improve the drawing speed and include new drawing effects including colour fade, circular dots, variable dot size, and a quick method to locate events that are closer than the minimum interval. The axis drawing in Z Buffer mode has also been improved.
- The new ToolbarMouse() script command links mouse movement over data channels in Time, Result and XY views to script functions when a toolbar is active.
- The ToolbarSet() script command can now be used to get the number of the last toolbar button used.
- The DlgMouse() script command links mouse movement over data channels in Time, Result and XY views to script functions when a user-defined dialog is active.
- The DlgButton() script command returns the number of the last dialog button used.
- The new MousePointer() script command defines mouse pointers for use with the toolbar and user-defined dialogs.
- The tooltip displayed when the mouse hovers over a y axis in a time view now includes the channel number.
- The new XYInChan() script command detects which points in an XY view channel lie inside a polygon defined by another channel.
- The XYInCircle() and XYInRect() commands have been extended to return the indices of the data points that lie inside the circle or rectangle.
- The new ChanPixel() script function returns the x and y axis equivalents of a 1 pixel position change.
- The mouse pointer position displayed in the Status bar for a channel in WaveMark OD display mode now shows the offset from the start of the WaveMark rather than the unrelated x axis position.
- All dialogs have been set to use a font that should generate smooth outlines on systems that support it and have smooth outlines and ClearType enabled.
- The Offline waveform output was moving cursor 0 regardless of state of the Cursor 0 tracks the waveform output check-box.
- If you stored a sampling configuration that included view overdrawing, the list of trigger times was not cleared before sampling started, leading to unexpected overdrawing.
- The s2video program is more tolerant of data input devices that implement the DirectShow interface in unexpected ways.
- Some of the saved parameters of the Clustering dialog (for example the minimum interval), were truncated to integers when saved.
- If you did not supply the sep$ argument to the ExportTextFormat() script command, the delimiter was set to the Tab character.
- The SampleText() script command did not work if there was a TextMark channel in the sampling file and the TextMark channel had been removed from the sampling configuration.
- When you save a sampling configuration as text using Copy As Text or Log, the Units field is now empty for channel types that do not have units.
- The X Axis dialog did not allow you to enter a negative or zero value for the right-hand end of the axis (for example in an XY view).
- In the X Axis dialog, if you changed to a log axis, then changed back, you could no longer set a negative axis start time.
- XY views did not redraw correctly when data was changed if the y axis had larger values at the bottom than at the top.
- The X Axis dialog will now accept 1E-015 and similar floating point values as times.
- If a sampling configuration set for a Micro1401 or Power1401 was run on a 1401plus or a micro1401, and it used the copy channels optimisation, the waveform sample rates were wrong. This is now detected and you cannot sample until the configuration is corrected.
- Online measurements to a channel with Y axis optimise checked in the Process dialog redrew all the data for every measured point, even when the y axis range did not change.
- The OVR indicator in the Status bar was not linked to the Insert/Overtype state of the text editor.
- The Copy Cursor Value command in the Horizontal cursor context menu did not work.
- A script run by the ScriptRun() command that is not already open is closed when it ends. However, such scripts were closing even if there was an error. Now the script remains open with the error line highlighted. If you have set the flag in ScriptRun() to continue running even if an error occurs, the next script will run, as before.
- A non-zero edge% argument in the DrawMode() script command was applied to non-level event channels.
- In the Measurements to an XY view or Measurements to a channel dialogs, if you chose the User entered value measurement type, the Prompt field was flagged in error if it contained anything that could not be interpreted as a number.
- If you compiled a script, closed it and opened it, Spike2 assumed it matched the compiled version and did not recompile it when it was run. Now, unless the script is running when you reopen it, the previously compiled version is deleted, forcing a recompile. This does not apply to included files which are assumed to be unchanged when reopened.
- It was possible to crash Spike2 in the Sampling Configuration dialog by setting more than 53 waveform channels.
- The Sonogram Colours button has been removed from the Edit menu Preferences and can now be found in the View menu or by right-clicking on a time view sonogram and selecting Sonogram Colours from the context menu.
- The initial selection in the FIR digital filter dialog is now the third entry (usually Low Pass), which seems a better choice than the first entry (usually All Stop).
- If you open a .s2c file while Spike2 is running by double-clicking it or by dragging it to the Spike2 window and dropping it, this now opens the Sampling Configuration dialog as if you had used the File menu Load Configuration command.
- The maximum size of a data file has been increased from 2 GB to 1 TB if you choose to use the Big file format. Such files can be read (but not modified) by Spike2 version 6.11 or later and cannot be read by earlier versions of Spike2. There are check-boxes in the Sampling Configuration and File Export dialogs to enable big files plus script language extensions for Big file support. The SonFix application has been extended for the new file format.
- When drawing becomes slow due to displaying a lot of data, the title of the updating window changes to remind you that you can break out of drawing with the Ctrl+Break keyboard command.
- You can now apply Vertical Markers to time views. These can be thought of as extra fixed vertical cursors with positions set by event or marker channel items. If the source channel is a TextMark, the text can also be displayed. There is a new script language command, VerticalMark() to support this.
- The Sampling Configuration dialog is now resizable, displays the count of Waveform and Event channels and has options to render the sampling configuration as text or to the Log window (in a suitable format for a laboratory notebook).
- The SampleConfig$() script command can now return the sampling configuration as text.
- The Sampling Configuration dialog Play waveform tab no longer needs confirmations of updates; changes are applied immediately.
- The script command EditCopy() can now be used with a string argument to place a string on the clipboard.
- There is a new FileSize() script command to return the size of a data file.
- You can open a text sequence from the Sequencer tab of the Sampling Configuration dialog by double-clicking the displayed sequence.
- The Sample Status bar now includes the percentage of sample time and disk space remaining.
- The SampleClear() script command can now optionally clear a single channel.
- The File menu New File dialog has been made easier to use.
- The new ViewZoom() script command can be used to get and set the zoom factor, in points, for text views.
- The new LinPred() script command can be used to predict data and to generate power spectra using the Maximum Entropy method.
- The Output Sequencer has new DRange(), ASz() and VSz() expressions.
- You can load an Output Sequence while sampling. The SampleSequencer() script command has been extended to support this.
- The Output Sequencer can now set a minimum number of instructions and a minimum table size to allow loading a sequence during sampling. The SampleSeqCtrl() script command has been extended to support this.
- The maximum number of instructions in an Output Sequence has been increased from 1023 to 8191 for all 1401 types except the 1401plus and the original micro1401.
- The number of variables allowed by the Output Sequencer has been increased from 64 to 256 for all 1401 types except the 1401plus.
- The Output Sequencer has new instructions TABADD, TABSUB, ABS, AND, ANDI, OR, ORI, XOR, XORI. The JUMP instruction can now jump using a variable to make it easy to program a state machine.
- The Output Sequencer has a new = directive to define numerical constants; you can now use a label in constant expressions.
- The Output Sequencer can now use >" to display the same output as the previous line and >= for no display change.
- The Output Sequencer supports the use of #include.
- Virtual channels now support comparison operators and the new functions Min() and Max().
- The script language now allows you to resize arrays, both at the global level and inside user-defined procedures and functions.
- The script language supports the break and continue statements to jump out of loops.
- The script language now allows you to assign non-constant values to variables in a var statement.
- You can now display line numbers in text-based views with the View menu Show Line Numbers command. There is a new script command ViewLineNumbers().
- You can Show and Hide the gutter in text views using the View menu Show Gutter command.
- You can limit the number of displayed lines in the Log window with a new Edit menu Preferences option. You can limit the number of lines in any text-based view with the new ViewMaxLines() script command.
- The new ViewZoom() script command can be used to get and set the zoom factor, in points, for text views.
- The View menu Standard Display command and the script language ViewStandard() command can now be applied to text views to restore a standard state.