From BCI2000 Wiki
Jump to: navigation, search


ctfneurod is a relay program that reads data from the CTF Acq program's RealTime interface, and provides them to client software over a TCP socket. On the client side, ctfneurod implements the Neuroscan Acquire protocol, allowing to use the BCI2000 Neuroscan Source Module for MEG data acquisition.



ctfneurod was written by When using it in your research, please give credit by citing the following reference:

J. Mellinger, G. Schalk, C. Braun, H. Preissl, W. Rosenstiel, N. Birbaumer, A. Kübler: An MEG-based brain-computer interface (BCI), NeuroImage 2007 Mar;36(3):581-93.

Compiling and Linking

ctfneurod requires CTF's development SDK. It links against the ctfds and ctfutil libraries, and requires the associated header files to compile. If the CTF development SDK is not yet installed on your CTF acquisition system, you can find it on a CDROM labeled "C++ Dataset Library". You should copy "/mnt/cdrom/develop.linux" to your home directory, resulting in the following files and directories


The ctfneurod directory from BCI2000 should be copied into /home/meg/develop.linux/code/ctfneurod and the Makefile should be edited to list ctfneurod as one of the "PROGS" to be compiled. Subsequently you can type "make" on the linux command line and all programs, including ctfneurod will be compiled.


ctfneurod runs on the data acquisition machine connected to the MEG system, and must be started before CTF's Acq program. When started up, ctfneurod waits for the Acq software to begin streaming data, and acts like a Neuroscan Acquire server once data is available. Its command line syntax is

 ctfneurod <listening address> <options>

There, the server's listening address is specified in the form <ip>:<port>, and defaults to localhost:4000.


--pattern <regular expression>

Restricts transmission to a subset of all the channels available from the Acq RealTime interface. The subset is defined by matching an extended regular expression against channel names, e.g. ctfneurod --pattern "^MLC.*" will only transfer channels whose names begin with "MLC". The default is to transfer all channels that are present on the Acq side.

--freqCorrection <factor>

Normally, the sampling rate on the Neuroscan side is reported to be identical to the one on the Acq side. When a correction factor is specified, this is multiplied onto the Acq sampling rate prior to reporting the sampling rate on the Neuroscan side.

--outputFormat <nbits>

Defines the bit depth of data transmission, which is either 16 or 32, and defaults to 16. When 16 bit data transmission is selected, the two least significant bits of data are ignored to avoid numeric overflow.


By default, ctfneurod applies a first-order HP filter with a corner frequency of 0.1Hz to Acq data prior to transmission. If this is undesired, use the --disableHP option to disable HP filtering.

See also