Git Product home page Git Product logo

spoke's Introduction

Spoke

Spoke is a MATLAB app for live selective display of neural data from high-channel-count recording systems. It offers multiple experimenter-optimized display modes based on data reduction of high-channel-count data streams. It currently supports the Neuropixels (Phase 3A and 3b) and Whisper extracellular recording systems steered by the Harris Lab at HHMI/Janelia Research Campus.

Spoke is developed & maintained by the Scientific Computing team at HHMI/Janelia, under the auspices of the Harris Lab.

Release Information

The active beta version can be accessed from the master branch. A v1.0 release is expected soon.

System Requirements

  • Windows 64-bit operating system (7, 8.1, 10)
  • SpikeGLX Software (Release 20190327 or later, accessed from here).
  • MATLAB (R2015b or later; R2019a recommended for fastest performance)
  • MATLAB Signal Processing Toolbox

Launching Spoke

  1. Launch SpikeGLX
  2. Establish connection between Spoke to SpikeGLX
    A. Open SpikeGLX dialog 'Options/Command Server Settings...'.
    B. Click 'Enable Remote Command Server' and then click 'My Address'.
    C. (If Spoke is on separate machine) Write down the IP address; you'll need to type that into the MATLAB client code.
  3. Launch MATLAB
    A. If not done already, add root folder and subfolders to MATLAB path
  4. Launch Spoke
    A. If Spoke is on same machine; enter spoke on the MATLAB command line
    B. If Spoke is on separate machine; enter spoke('XXX.XXX.X.XXX') on the MATLAB command line

Running Spoke

Spoke currently has three modes of selective data display:

  • Spike-triggered waveform: Display of signal waveforms near detected "spike" events
  • Stim-triggered waveform: Display of peristimulus waveforms
  • Raster: Display of peristimulus detected "spike" events

To run Spoke:

  • Configure the display mode:
    • Raster mode
      • Select the Raster radio button in Spoke control window
    • Spike-triggered waveform
      • Select Waveform in the Spoke control window
      • Ensure stimStartChannel is empty in the Spoke control window (enter [] if needed)
    • Stim-triggered waveform
      • Select Waveform in the Spoke control window
      • Specify stimulus channel number in stimStartChannel in the Spoke control window
  • Configure additional display settings as desired:
    • Available settings correspond to the public properties described in Spoke's class documentation (doc SpokeModel)
    • All of these settings are availalbe from the Spoke control window
  • Press Start to begin streaming selective display
    • Display continues until stopped and can be restarted at any time.

About the Implementation

Spoke is a consumer of the SpikeGLX data production software for Whisper neural recordings systems. Spoke retrieves data from SpikeGLX via its remote command interface over TCP/IP.

Spoke uses a MATLAB Timer object to process the SpikeGLX data stream one batch at a time, at a regular interval. It processes the data, reducing it and then displaying the reduced data.

See Processing Pipeline for an overview and description of the processing pipeline for each of the three modes of data reduction and display.

Spoke seeks to be as memoryless as possible. In other words, raw data is discarded as soon as it is no longer needed, i.e. not a part of the reduced data structure or needed for processing in a subsequent timer period.

Acknowledgements

We acknowledge the following important contributions beyond the GitHub records. Vijay Iyer developed the initial "alpha" version prior to GitHub tracking. Bill Karsh added an SDK to SpikeGLX to allow MATLAB applications like Spoke to access its data stream, and actively supported Spoke as a use case. Several Janelia researchers provided invaluable initial feedback and testing time for this software.

spoke's People

Contributors

davidackerman avatar vijayiyer05 avatar edkangdev avatar edwardkangdev avatar janeliaapig avatar jamesjun avatar billkarsh avatar

Stargazers

Rebecca Mease avatar

Watchers

James Cloos avatar Rob Svirskas avatar  avatar  avatar  avatar

Forkers

neugun

spoke's Issues

PSTH XLim is not set by default

PSTH XData is in scan numbers and also the XLim is autoscaled, rather than being set to the same lims as the raster plots

Physical channel grid layout

Currently the channel grid dimensions are set to near-square via heuristics in ziniCreateGrids().

Idea is to make this either flexible in Spoke or auto-configured to match the type of probe (Whisper or Neuropixels) and its physical channel layout.

Show last N trials in Raster mode

Note: this is an issue ported from prior repo

NOTE: This might already work. Should test/understand case where stimNumDisplayRange(2) is finite (as opposed to Inf).

User: "I would like to be able to fix the number of trials to be visualized in the raster window and that it updates online keeping  the total number of visualized trials the same (e.g. if I want to see 100 trials, when it gets to trial 101, I want to see from trial 2 to 101, then from 3 to 102 etc ). "

Cap spike rate via decimation, especially in raster mode

The current spike rate limiter (refreshPeriodMaxSpikeRate) is not useful for raster mode because the spikes are limited from the start of the refresh period which occurs at arbitrary phase relative to the stimulus

One possible implementation might be a settable spike refractory period

Baseline Imec support

Baseline support for handling data from imec probes. No increase in data throughput, so processing pipeline should be applied to a channel subset (128 or less), i.e. equivalent to Whisper data processing rates.

SpikeGLX MATLAB interface functions used by Spoke:

  • SpikeGL
  • Close
  • FetchNI
  • GetParams
  • GetSaveChansNI
  • GetScanCountNI
  • IsRunning

Support SpikeGLX Channel Maps

Currently channels are currently displayed in channel number order within a near-square grid determined by heuristics in ziniCreateGrids().

Some users want this displayed in alternative layout and/or ordering, e.g. to match the physical layout of pads on a probe.

Such flexible channel orders/layouts might be specified within Spoke itself; or it might "inherit" from the channel maps (probe location, display order) specified in SpikeGLX.

Plot most recent waveform in different color in Waveform mode

Note: This is a 2016 issue ported from prior repo

User: "When you plot the waveforms, it would be better if the last waveform is in a different color to distinguish it. That is first time it appears is in red then it turns black. Put as an option to select how many should be in different color."

Lag at Start of Raster Mode

Depending on the settings, the first trigger in raster mode can lead to a queued-up warning. This usually only happens the first time, and doesn't happen afterwards.
image

Simultaneous waveform & raster plot mode

Note: this is a 2016 issue ported from prior repo

User: "We would like to see waveform plot window at the same time of raster  plot window. At the moment it seems that you can visualize only one at the time. "

Support Imec3b & NI combination

A secondary NI board can be used with Imec3b for the auxiliary channel inputs, e.g. the stimulus trigger inputs. This enhancement woudl support this expected common configuration.

The current Phase3b support is limited to standalone mode (i.e. without a secondary NI board) using the signle digital auxiliary bit (7'th bit) available on the Sync input that's typically used for syncing with the NI card.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.