CORTEX Overview
|
CORTEX, Laboratory of Neuropsychology, NIMH, NIH, 1989 - 1997 |
|
|
A suite of programs for designing, performing, and analyzing real-time neurophysiology experiments. |
|
| How it is used |
|
| My role |
|
|
Applicability to Medical Informatics |
|
| Overview | Created an integrated system for studying the neural correlates of vision and behavior in macaques. Individual experiments typically consist of hundreds of conditions, each with their own complex flow control, images, and color palettes. Subjects watch visual stimuli on a touch screen, while researchers view experimental parameters and real-time graphs of neuronal and eye-position data on a separate screen. While the subjects perform complex neurobehavioral tasks, CORTEX collects data from multiple neurons, records their eye position, monitors their responses via levers and touch screens, and delivers rewards of juice as per the experimental design. A separate set of programs (Procortx, Stats100, Grast) perform off-line data analysis and presentation. This suite of programs, which contains nearly 250,000 lines of C code and more than 200 pages of technical documentation, is used by hundreds of researchers in dozens of labs around the world. |
| Real-time Data I/O | DMA and interrupt driven data acquisition from DAS-16 and PIO-96 boards collecting 10 kHz multi-electrode neuronal spike activity (pre-filtered by Brainwave hardware), 1 kHz eye movement and EKG activity, millisecond resolution subject responses (levers, touch screen). These same boards were used to trigger automated rewarding systems. |
| Real-time Operating System | In order to access the 10kHz data being delivered by the data acquisition boards, created a multi-threaded, pre-emptive and cooperative multi-tasking OS atop DOS with fixes for DOS's and floating point reentrancy violations. |
| Real-time Graphics | Needed to have one computer simultaneously drive two different graphics displays. Also needed flicker-free double buffering of full-screen images at greater than 80 Hz; plus millisecond accurate knowledge of when an object was displayed. Initially programmed specialty graphics cards from NNIOS (Sgt. Pepper card with hardware windowing; #9Gxi with TIGA language). For two-computer version, used Scitech's MGL graphics language for VESA compatibility. |
| Integrated Networking | Since new graphics cards only support one monitor per computer, created a client-server system with a control computer connected to a graphics computer via serial ports. This entailed writing a streamlined graphics kernel for millisecond event timing, error-correcting serial handshaking protocols, and a 10kHz interrupt driven client-server architecture. |
| Experimental Design | Support was created for multiple levels of experimental randomization, counterbalancing, and branching among conditions keyed to response speed and accuracy. Languages were designed to facilitate the creation of these image, condition, and timing files. |
| Integrated Compiler | Needed to quickly parse, store, and debug the flow control files for each of the hundreds of rapidly changing conditions. Created a speed and size optimized, stack-based C compiler (CSS) with access to CORTEX's thousands of internal variables and functions. Included the ability to easily add millisecond-accurate CSS timing threads which run in protected mode from within the real-time OS. Also created a speed and size-optimized C/C++ preprocessor. |
| GUI interface | Speed optimized GUI with cascading and popup-menus, accelerator-keys, input-constrained data entry, and use of 3 button mouse for dynamic object shape, size, position, and color manipulation |
| Data Mining | Procortx (1989): Tool for extracting state and time dependent behavioral and electrophysiological data and reaction times from CORTEX data files. Its output was piped into Stats100. |
| Data Analysis | Stats100 (1989): Front-end for statistical packages to batch process the analysis of data from multiple experiments. Two interpreted languages were created and incorporated. The first used flow control, conditionally expanded macros, and multi-dimensional arrays to specify the loading and analysis of the data. Tags could be inserted for facilitating parsing by the second language, which was designed to find and extract the desired data from the statistical package's output, and re-format it in a fashion akin to Excel's cross-tab queries. Analyses commonly consisted of MANOVAs, cross-correlations, multiple linear and non-linear regressions, and feature extraction from time-series. |
| Data Visualization | Grast (1989): Off-line display of neurological spike and eye-tracking data with sorting by behavioral parameters. Included behavioral charts, electrophysiological histograms, and auto- and cross-correlational graphs for assessing neuronal interactions. Output generated in publishable format. |

