DOI: 10.5281/zenodo.11550255
title: Nonhuman Primate Center-Out and Random-Walk Reaching with Multichannel Motor Cortex Electrophysiology

description: General Description

A rhesus macaque was implanted with a 96-channel microelectrode array (Blackrock Neurotech, Inc.) in the arm area of primary motor cortex (M1). The monkey performed each reaching task with the arm contralateral to the array. We collected broadband data from each electrode at 30 kHz using a 128-channel acquisition system (Cerebus, Blackrock Neurotech, Inc.). To extract spikes, we high pass filtered the broadband data (1st order causal filter, 300 Hz cutoff) and thresholded it using a threshold manually set for each channel (average threshold = 5.2 standard deviations above mean waveform potential). To extract LFPs, we first bandpass filtered the broadband data from 0.3-500 Hz (1st order causal filter), then resampled the signal at 2 kHz, and finally notch filtered it at harmonics of 60 Hz for powerline noise removal. 

The first task we analyzed was an eight-target center-out reaching task. On each trial, the monkey began by holding at the center of a 10 cm-radius circle of targets for 0.5-0.6 s. Then, one of eight 2 cm square targets spaced at 45° intervals around the circle was illuminated. The monkey had to reach the outer target within 1.5 s and hold for a random time between 0.2-0.4s to obtain a liquid reward. The second task was a random target reaching task. On each trial, the monkey had to acquire a series of 6 randomly positioned targets appearing one-at-a-time, holding each for 0.1 s, to obtain the reward. The targets spanned the majority of the 20-by-20 pixel workspace. 

Possible Uses

These data may be used for testing new BCI decoders or otherwise investigating the motor cortical electrophysiological signals (spikes, local field potentials) during reaching.

Variable Names

Inside each .mat file is a structure, traditionally called ‘bdf’, or in some cases, ‘out_struct’.  We delineate important fields below: 





bdf.units contains spike timestamps 






bdf.units.id is a two-element vector [channel, unit]




bdf.units.ts is an array of spike timestamps for each unit 




A note on resorting:  The bdf.units structure has elements for every sorted unit, plus one element per channel for the unsorted waveforms. In the above example, that amounts to 198 elements. Generally, all these elements will have a unit ID array and some timestamps. However, the waveform data for all recorded spike waveforms in a channel will be found in only one element for that channel (the 255 unit).  To illustrate, here is the bdf.units information about channel 16 in the file used to make the above structure map.











id 



ts 



tsAll 



wv 





[16,0] 



38x1 double 



[] 



[] 





[16,1] 



3438x1 double 



[] 



[] 





[16,255] 



4199x1 double 



7675x1 double 



48x7675 double 










There are two sorted units 0 and 1, and a 255 element for unsorted waveforms.  Notes: 






tsAll and wv are only filled out for unit 255 of channel 16.  




The tsAll field, as its name implies, contains all timestamps recorded on that channel, including those for units 0 and 1, and the unsorted waveforms. A sanity check is that 38+3438+4199 = 7675.




The wv field contains the waveforms corresponding to tsAll. Here, there are 48 points per waveform.




In general, tsAll will accompany the highest numbered unit.








bdf.analog.data contains the local field potential (LFP) data




bdf.analog.ts contains the timestamps for the LFP data as well as the kinematic data 




bdf.pos contains manipulandum position 




bdf.vel contains manipulandum velocity 




bdf.acc contains manipulandum acceleration




bdf.words contains information about how the run occurred, such as times of trial onset, whether the trial was a success or failure, etc 






For center-out data 






The bdf.words field can be processed by running the function: tt = co_trial_table(bdf); 




The numeric array tt will then have Nx10 columns, where each row is a trial and each column gives the following information (this is replicated in the documentation of the function file): 






1: Start time 




2: Bump direction      -- -1 for none 




3: Bump phase           -- H (hold), D (delay), or M (movement) 




4: Bump time 




5: Target                      -- -1 for none (e.g., a neutral bump) 




6: OT on time 




7: Go cue 




8: Movement start time 




9: Trial End time 




10: Trial result             -- R (reward), A (aborted), I (incomplete), or N (no-result) 






For random-walk data 






In RW hand-control data, 1 trial consisted of N distinct movements, where N was usually 6 or 8.  In other words, N targets were presented successively, and all required to be hit, prior to delivery of a reward.  For each target presentation, there is a time-stamp in the field bdf.words.  There is also a time-stamp for the event of the cursor first entering the target.  This information is presented in two columns, where the first column is the timestamp and the second column is an event code, which indicates:






18: trial-start event flag 




49: target presentation 




160: cursor enters target 




32: success 




33/35: failure