Description
|
Here we provide the dataset for our study "Slow insertion of silicon probes improves the quality of acute neuronal recordings". Abstract of the study: Neural probes designed for extracellular recording of brain electrical activity are traditionally implanted with an insertion speed between 1 µm/s and 1 mm/s into the brain tissue. Although the physical effects of insertion speed on the tissue are well studied, there is a lack of research investigating how the quality of the acquired electrophysiological signal depends on the speed of probe insertion. In this study, we used four different insertion speeds (0.002 mm/s, 0.02 mm/s, 0.1 mm/s, 1 mm/s) to implant high-density silicon probes into deep layers of the somatosensory cortex of ketamine/xylazine anesthetized rats. After implantation, various qualitative and quantitative properties of the recorded cortical activity were compared across different speeds in an acute manner. Our results demonstrate that after the slowest insertion both the signal-to-noise ratio and the number of separable single units were significantly higher compared with those measured after inserting probes at faster speeds. Furthermore, the amplitude of recorded spikes as well as the quality of single unit clusters showed similar speed-dependent differences. Post hoc quantification of the neuronal density around the probe track showed a significantly higher number of NeuN-labelled cells after the slowest insertion compared with the fastest insertion. Our findings suggest that advancing rigid probes slowly (~1 µm/s) into the brain tissue might result in less tissue damage, and thus in neuronal recordings of improved quality compared with measurements obtained after inserting probes with higher speeds.
|
Notes
| Repository structure
Each recording and corresponding metadata, single unit properties and quality metrics were packaged in the Neurodata Without Borders: Neurophysiology version 2.0 (NWB:N 2.0) data format using the MatNWB API. A single NWB file was created from each recording. NWB files were placed in folders based on the used silicon probe (32-channel or 128-channel probe), insertion speed (e.g, from IS1 to IS4) and the identifier of the animal (e.g., from Rat01 to Rat10). The filename of the NWB file (identifier) was constructed by concatenating the probe type, insertion speed and the animal ID (e.g., 128ch_IS1_Rat01). The insertion speeds are the followng:
32channel_silicon_probe_recordings: Insertion speed 1 (IS1): 2 μm/s (0.002 mm/s) Insertion speed 2 (IS2): 1 mm/s
128channel_silicon_probe_recordings: Insertion speed 1 (IS1): 2 μm/s (0.002 mm/s) Insertion speed 2 (IS2): 20 μm/s (0.02 mm/s) Insertion speed 3 (IS3): 100 μm/s (0.1 mm/s) Insertion speed 4 (IS4): 1 mm/s
128channel_silicon_probe_recordings_with_histology: Insertion speed 1 (IS1): 2 μm/s (0.002 mm/s) Insertion speed 2 (IS2): 1 mm/s
In the case of the 128-channel recordings located in the '128channel_silicon_probe_recordings' folder, spike sorting was carried out again using a newer version of the spike sorting software (Kilosort2). All other recordings contain the original spike sorting results done with Kilosort1 and published in the paper.
The CSV file named "Animal_characteristics_and_targeted_cortical_areas" contains information about the weight and sex of animals, as well as about the cortical area and stereotaxic coordinates corresponding to each probe insertion. The "Recording_characteristics" CSV file lists several useful properties for each NWB file including the file size, the duration of the recording, the cortical location, the single unit yield and the average signal-to-noise ratio of single units.
NWB file structure
Each NWB file contains several main groups which are similar to directories. The acquisition group contains the continuous wideband 32- and 128-channel data (‘wideband_multichannel_recording’) in a compressed form, as well as several parameters related to the raw data such as the measurement unit or the data conversion number. The general group contains metadata about the experiments and consists of several subgroups, related to the recording probe (‘general/devices’; ‘general/extracellular_ephys’) or the subjects of the experiments (‘general/subject’). Former subgroups carry information about the probe location (brain area and stereotaxic coordinates) and the relative positions of recordings sites, while the latter contains metadata about the animal (e.g., sex, species, subject ID, or weight). Information about spike sorting and single units and corresponding data are available in the units group. For each unit, we included here the mean and standard deviation of their spike waveform on all channels, calculated both from the filtered (‘mean_waveform_all_channels_filt’; ’waveform_sd_all_channels_filt’) and the wideband data (‘mean_waveform_all_channels_raw’; ’ waveform_sd_all_channels_raw’). Furthermore, the spike waveform recorded on the channel with the largest spike (i.e., peak waveform channel) was saved separately (‘mean_waveform_peak_channel_filt’, ‘mean_waveform_peak_channel_raw’). Several single unit properties and cluster quality metrics, as well as the spike times and spike count of each unit were saved in the units group. Furthermore, to aid users in selecting and analyzing a subset of this dataset appropriate for their research goals, we also created an NWB file (‘allSingleUnits.nwb’) which contains all single units collected for a particular insertion speed, with all the properties listed above, along with the identifier of the recording (‘units/session_id’) and the cortical area (‘units/cortical_area’) they originate from. The structure of NWB files can be explored using the HDFView software.
Interacting with the NWB files
Users can import data from NWB files using the PyNWB and MatNWB APIs, or using SpikeInterface. Loaded samples of the raw data have to be multiplied by a conversion number (0.195) to get the amplitudes in microvolts. Here we provide some examples how users can import data from NWB files using the MATLAB-based MatNWB API. Loading a short segment (20.000 samples corresponding to 1 second of data) of the raw wideband recording on all (128) channels: 1. nwb = nwbRead('128ch_IS1_Rat01.nwb'); 2. dataChunk=nwb.acquisition.get('wideband_multichannel_recording').data.load([1, 1], [128, 20000]); To load data from a 32-channel recording just use 32 instead of 128. The recording site-channel mapping can be found in the published paper (see above at the field "Related publication").
It is important to note that TimeSeries data types in NWB files are stored with time in the first dimension and channels in the second, but dimensions are reversed in MatNWB. Loading and plotting the mean spike waveform of a specific single unit on the peak waveform channel: 3. peakChannels = nwb.units.vectordata.get('peak_waveform_channel').data.load(); 4. meanWaveforms = nwb.units.vectordata.get('mean_waveform_all_channels_filt').data.load(); 5. mySingleUnit = 11; 6. singleUnitWaveform = meanWaveforms(peakChannels(mySingleUnit), :, mySingleUnit); 7. plot(singleUnitWaveform); Loading the isolation distance quality metric of all units found in a single NWB file: 8. IDvalues = nwb.units.vectordata.get('isolation_distance').data.load(); Spike times are stored in a special structure called ragged arrays consisting of two vectors. The spike_times vector contains all spike times of all single units concatenated one after the other, while the spike_times_index vector stores where the spike times of individual single units are located in the spike_index vector (see also https://neurodatawithoutborders.github.io/matnwb/tutorials/html/ecephys.html#H_97F533F8). We can load the spikes times of a specific single unit (in seconds) the following way: 9. allSpikeTimes = nwb.units.spike_times.data.load(); 10. spikeTimesIndex = nwb.units.spike_times_index.data.load(); 11. spikesOfSingleUnit2 = allSpikeTimes(spikeTimesIndex(1)+1 : spikeTimesIndex(2)); SpikeInterface can also be used to load the wideband data and single unit properties (in Python; works only with version 0.13): 1. import spikeextractors as se 2. nwbPath = '128ch_IS1_Rat01.nwb' 3. recording = se.NwbRecordingExtractor(nwbPath) 4. sorting = se.NwbSortingExtractor(nwbPath) 5. mySingleUnit = 2 6. sorting.get_unit_property(mySingleUnit,'isolation_distance') We also provide a Matlab script ("NWB_tutorial_script.m") which can be used to load, visualize and preprocess (e.g., filter) files in the dataset using MatNWB.
|