Interfaces & Standards

add discussion of and links to all the standardized interfaces

Electrodes <-> Headstage: Omnetics Nanostrip
We're using industry standard 36pin omnetics nano strip connectors.
GND and REF are positioned at the corner pins, so that the connector can be reversed.


Headstage <-> Acquisition board: Twisted pair LVDS serial peripheral interface

We're using 12-pin Omnetics PZN-12 polarized nano connectors.
The cables can be daisy-chained.
Maximum cable length is  over 5 meters.
LVDS allows for very light unshielded tethers.
The current standard uses 2 MISO (headstage->computer) data lines, so it's possible to connect 2 headstages to one of the 4 inputs on the acquisition board via one cable by using a Y-adapter, or even 2x64 channel headstages for 128 channels over 12 wires.
For future expansions, it's possible to simply add more omnetics connector rows on the end of the connector.

TTL/event I/O & Analog I/O
We're using standard HDMI cables (see here for pin mapping)

Acquisition board <-> Computer: Intan Rhythm API
The Intan Rhythm interface consists of Verilog HDL code written for the Opal Kelly XEM6010 USB/FPGA interface module and a C++ API.
The modular hardware of the system allows easy expansion to include PCIE and USB3.0 interfaces with minimal changes to the software and no hardware changes other than replacing the FPGA module.

Raw File formats
Continuous data files (.continuous) -  Each continuous channel within each processor has its own file, titled "XXX_CHY.continuous," where XXX = the processor ID #, and Y = the channel number. For each record, it saves a timestamp and a number of samples.
Event files (.events) -  Non-spike events are saved into the file "" as timestamps and ids.
Spike files (.spikes) -  Data from each electrode is saved in a separate file. The filename is based on the name of the electrode itself, but without spaces (e.g., "Tetrode1.spikes"). Each record contains a timestamp, waveform and meta-information such as channel gain etc.


Open Ephys Plugin architecture 
In order to perform computations based on incoming data in real-time, just write your own  process(buffer,  events,  nSamples) function.

Open Ephys interface to Matlab (in development)
You can process the current data buffer in matlab from the Open Ephys GUI via the MATLAB engine. MATLAB Engine invokes an instance of Matlab owned by the GUI, and places the buffer as a variable in the workspace. This will allow the use of any MATLAB program to process data from the GUI in real time.

Spike sorting formats? 
 Should we get into this here?