Skip to content

Releases: open-ephys/plugin-GUI

v0.6.1

Choose a tag to compare

@anjaldoshi anjaldoshi released this 19 Aug 05:08

Binary release August 18, 2022

Release Notes

Bug Fixes:

  • Use viewport to display Spike Detector table (fixes #519)
  • Make sure correct Record Node is checked when requesting its synchronization status
  • Use original stream name when creating streams in File Reader

v0.6.0

Choose a tag to compare

@anjaldoshi anjaldoshi released this 22 Jul 22:24

Binary release July 22, 2022

Release Notes

Overview

Version 0.6.0 includes a large number of updates intended to improve the experience of both users and developers of the Open Ephys GUI. Many of the changes were prompted by the need to provide more robust support for data sources that send multiple asynchronous streams (such as Neuropixels). Perhaps the most important update is the introduction of the DataStream class, which represents a group of channels that are guaranteed to generate the same number of samples on each processing block. Every continuous channel, event channel, and spike channel must be associated with one and only one DataStream object, in order to ensure that its timestamps can be assigned accurately. Users will notice that the old "Channel Selector" on the right-hand side of each plugin editor has been replaced with a "Stream Selector," which allows you to view information about the various streams that are passing through a plugin. Plugin parameters are now typically applied on a per-stream basis, and any channel-specific parameters are configured via a popup window that's much easier to navigate than the previous Channel Selector UI.

060_release_notes-01

These updates would not have been possible without introducing breaking changes to the Open Ephys Plugin API (now at version 8). Any existing plugins will need to be refactored and recompiled in order to be loaded by the host application. We worked hard to make the API simpler and more consistent, and many convenience functions were added to simplify plugin development. Most importantly, we overhauled the Parameter class, in order to make it possible to generate user interfaces for new plugins with only a few lines of code. For example, see the FilterEditor.cpp file before and after implementing these changes. The Parameter class also keeps track of settings across data streams, and automatically handles saving and loading.

Almost every source code file has been cleaned up, with docstrings added to most header files and unused functions removed. We also streamlined the user interface, removing unnecessary buttons and menu items. We reduced the default plugins down to the essentials, and moved other plugins to their own repositories. This will allow users to upgrade these plugins independently from the main GUI, making it easier to roll out new features in the future.

Core GUI enhancements

Data streams as first-class citizens: Previously, sources that emitted data as multiple, asynchronous streams (such as Neuropixels) were represented as "subprocessors" with zero-based indexing. However, the channels associated with a given subprocessor were not readily visible to the user. Now, the subprocessor concept has been replaced by "Data Streams" that represent a block of continuous channels that are guaranteed to generate the same number of samples on each processing callback. When using data sources that only generate one stream (such as the File Reader), the behavior of the GUI will be largely unchanged. But when multiple streams are present (such as the AP band and LFP band of Neuropixels probes), independent settings can be applied to each stream. For example, it's now straightforward to have unique Bandpass Filter settings for different streams, or even to have the Bandpass Filter plugin bypass a given stream entirely to conserve CPU. Grouping channels by streams also prevents the user from, e.g., creating electrode groups for spike detection that span multiple streams, which would generate invalid spikes. Information about individual streams is now visible in the redesigned "Graph" tab, as well as the Stream Selector interface for each plugin (viewed by clicking the vertical lines on the right of the plugin editor). The visible settings for a given plugin will reflect the stream that's currently active in the Stream Selector. In addition, the Stream Selector displays the amount of time it takes for data to pass through a plugin (helpful for determining which plugins are introducing unwanted processing latency), as well as the state of the first 10 TTL lines for a given stream.

Overhauled Parameter class: The GUI previously had a class to represent different types of plugin parameters, but this was not being used by most plugins. We have now revived this class, and made it a central part of all of the built-in plugins. The Parameter class now serves three main functions: auto-generating user interfaces, keeping track of parameter values across data streams, and automatically saving and loading settings for each plugin. There are 7 types of Parameters (boolean, categorical, string, float, integer, selected channels, and mask channels) and 5 types of Parameter Editors (text box, check box, combo box, slider, selected channels, and mask channels). Parameters can be applied to plugins (global scope), data streams (stream scope), or individual channels (event channel scope, continuous channel scope, and spike channel scope). Parameters must be declared in the plugin's GenericProcessor constructor, and any ParameterEditors must be declared in the plugin's GenericEditor constructor. Parameter names must avoid spaces in order to allow saving/loading via XML. See the FilterNode for an example of how to use the Parameter class in practice.

Broadcast messages: Plugins can now communicate with one another via broadcast messages. A broadcast message sent while acquisition is active will be distributed to all other plugins in the signal chain via the MessageCenter. This allows messages to be passed "backwards" through the signal chain, for example to trigger the digital outputs of the Open Ephys acquisition board. To send a broadcast message, simply call GenericProcessor::broadcastMessage() while acquisition is active. To respond to broadcast messages, plugins should implement the GenericProcessor::handleBroadcastMessage() method. Broadcast messages are currently used by the Acquisition Board plugin (formerly Rhythm FPGA) to trigger digital outputs and the Audio Monitor plugin to select channels to listen to. Additional functionality based on broadcast messages will be added in the future.

Built-in HTTP server: The GUI no longer requires the Network Events plugin to be controlled remotely; instead, it now launches an HTTP server based on a class originally implemented by Paul Botros from the Carmena Lab at Berkeley. The HTTP server makes it possible to start/stop acquisition, configure plugins parameters, transmit broadcast messages through the signal chain, and even close the GUI remotely. When the GUI is open, browsing to http://localhost:37497/api/processors will display the current signal chain in JSON format. Changes to the GUI's status are done via HTTP "PUT" requests, and can be accomplished with a single line of code using Python's requests library.

Streamlined settings files: The XML files used for saving and loading signal chains are much more compact and easier to interpret. However, we still do not recommend attempting to manually edit settings files, as this can invalidate them.

Redesigned "Info" tab: The GUI's info tab now displays links to the documentation, citation information, a list of contributors, and the GPL 3.0 license.

info_tab

Audio Monitor: The "Audio" interface has been removed from individual plugins. Instead, Audio Monitors can be dropped into the signal chain as a separate plugin. Users can select up to 4 continuous channels to listen to, or select an incoming Spike Channel to monitor. The Audio Monitor includes a built-in high-pass filter so it can output decent-sounding signals at almost any point in the signal chain.

audio_monitor

Default configurations: When the GUI is launched for the first time, the user is prompted to select one of 3 default configurations: Acquisition Board, File Reader, or Neuropixels (Windows only). If a plugin required for one of these configurations is not available, it will be installed automatically (this only works in "Release" mode). On subsequent runs, the default configuration interface can be accessed via the File menu.

Default_configs

Recording: Added the ability to customize the name of recording directory via the control panel (i.e., you don't need to use the auto-generated date string if you don't want to).

Recording directory customization

Logging: Replaced all calls to std::cout with LOGA, LOGB, LOGC, etc. syntax. This makes it easier to track different kinds of messages and have more refined control over what gets printed to the console. All logging output is printed to a text file, which is copied and timestamped in the case of a crash.

Updated JUCE backend: The GUI now uses a more recent version of the JUCE library (v6).

Updates to Individual Plugins

File Reader: The File Re...

Read more

v0.5.5.4

Choose a tag to compare

@anjaldoshi anjaldoshi released this 02 May 21:54

Binary release May 2, 2022

Release Notes

Bug Fixes:

  • Fix dropped events on Linux for high TTL event rates by increasing event and spike buffer sizes in Record Node (fixes #506)
  • Fix processor graph connection sequence causing crashes (#504)
  • Fix hidden channel info when using 64-channel headstages with the Rhythm FPGA module.

v0.5.5.3

Choose a tag to compare

@anjaldoshi anjaldoshi released this 05 Nov 00:42

Binary release November 4, 2021

Release Notes

Bug Fixes:

  • Fix SpikeViewer unable to draw spikes when using tetrodes (closes #483)
  • Fix inconsistent file prefix when using openephys recording format (closes #477)

v0.5.5.2

Choose a tag to compare

@medengineer medengineer released this 14 Oct 23:21

Binary release October 14, 2021

Release Notes

Fixes:

  • Prevents crash in LFPViewer on re-load if there are no continuous channels in the signal chain.

v0.5.5.1

Choose a tag to compare

@anjaldoshi anjaldoshi released this 25 Sep 00:21

Binary release September 24, 2021

Release Notes

Fixes:

  • A splitter's initial state is always restored after starting acquisition; prevents future signal chain modifications from occurring on an unexpected branch
  • SpikeDisplayNode checks for out-of-bounds values before drawing spikes; prevents crashes at the start of acquisition
  • The states of visualizer editors (e.g. LFP Viewer) are now saved in cases where the visualizer was never opened
  • Prevent negative values in the disk space display when the Record Node is supplied with an invalid path

Updates:

  • Dragging a plugin out of the signal chain now deletes it. It can be restored by pressing Ctrl-Z or selecting "Undo"
  • Pressing the "C" key no longer clears the Spike Viewer display (instead, the "Clear plots" button should be used).

v0.5.5

Choose a tag to compare

@anjaldoshi anjaldoshi released this 02 Aug 21:04

Binary release August 2, 2021

Release Notes

Record Node:

  • Record Node no longer crashes (Binary Format) and saves the correct timestamps (Open Ephys Format) when using a software buffer >23 ms (See Issue #457 for more info)

Spike Detector

  • The spike extraction time window in the Spike Detector has been shifted to include the pre-peak samples (See Issue #454 for more info)

LFP Viewer:

  • Fix a bug that was causing the incorrect channel type (ADC vs. DATA) to be displayed when viewing multiple subprocessors
  • Automatically re-sort channels whenever depth information is changed (requires Neuropixels-PXI plugin version 0.3.3)

Pulse Pal:

  • Patch serial library in order to successfully detect devices on COM11 and higher (See Issue #371 for more info)

Compatibility Fixes:

  • The Xcode project has been updated to successfully build the GUI on M1 Macs (See Issue #420 for more info), thanks to @ANickerson
  • The GUI can now be built on Linux with GCC9+

v0.5.4

Choose a tag to compare

@anjaldoshi anjaldoshi released this 04 May 00:24

Binary release May 3, 2021

Release Notes

Completely overhauled LFP Viewer:

  • Up to 3 vertical or 3 horizontal split displays
  • New color schemes
  • Timebase is displayed in regular increments, rather than fractions of the overall width
  • Easier-to-navigate options interface
  • Scroll position is re-loaded on relaunch
  • Trial averaging in triggered display mode
  • Much smaller memory footprint

New signal chain operations:

  • Copy/paste processors
  • Undo/redo adding, deleting, and moving processors
  • Load/save settings for individual processors, without saving the complete signal chain (right click on the title bar)

Plugin Installer enhancements:

  • Uses a gateway site (open-ephys-plugin-gateway.herokuapp.com) to speed up loading
  • Displays an icon next to plugins that have an update available

Rhythm FPGA plugin changes:

  • Add the ability to use the acquisition board to control the HARP synchronization bus
  • Prevent crash when re-loading the Intan Recording Controller with ADC channels activated
  • Fix bug when renaming TTL channels

Recording bug fixes:

  • Restore ability to change the recording directory via the Network Events plugin
  • sync_messages.txt is now initialized correctly for all recordings
  • Fix indexing error that was causing incorrect record state when subprocessor channel count is increased (e.g. for ADC channels)

v0.5.3.1

Choose a tag to compare

@medengineer medengineer released this 05 Feb 00:22

Binary release February 4, 2021

Updates:

  • Refresh RecordNode channel selection view if the number of input channels has changed.
  • Display warning if RecordNode detects input channels re-mapped from different subprocessors.

Fixes:

  • Prevent crashes when re-loading signal chain with a disconnected Open Ephys acquisition board. Closes issue (#410)
  • Fix bug when inserting a source in the middle of a signal chain.
  • Fix re-loading interface parameters when interface is in a hidden state.

v0.5.3

Choose a tag to compare

@anjaldoshi anjaldoshi released this 23 Dec 22:49

Binary release December 23, 2020

New Features / Enhancements:

UI updates:

  • The GraphViewer now displays the total number of continuous, event, and spike channels for each processor.
  • The MessageCenter now stores a history of incoming and outgoing messages. Saving of outgoing messages has been restored.
  • The GUI version is displayed in the title bar (Windows and Linux only)
  • Prevent using the Open Ephys format with more than 300 channels.
  • Prevent changing the sample buffer size while acquisition is active.

Backend updates:

  • Simplified logic for building signal chains, resulting in much shorter delays when loading saved configurations.
  • The signal chain is now managed entirely by the ProcessorGraph class, which updates the views in the EditorViewport and GraphViewer as needed.
  • Processors only update their internal state whenever there’s a change in an upstream processor, rather than any processor.
  • Add a thread-safe debug logger that should be used in place of std::cout and printf statements (LOGD and LOGDD).
  • Fix a bug in the Record Node that caused the Open Ephys format to crash when there were no incoming event channels (e.g., with the File Reader).
  • Move the PluginGenerator source code to a separate repository: https://github.com/open-ephys-plugins/plugin-generator

Bug Fixes: