Ganglion cell spike train data recorded from marmoset retina. Focus on stimulation with random-walk-like motion of a spatial texture.

ycanerol b7ef366208 gin commit from retina-05-17 3 years ago
20180710_YE_60MEA_Marmoset_eye1_42 fbbab4987e git-annex in ycanerol@retina-05-17 3 years ago
20180712_YE_60MEA_Marmoset_eye1_42 fbbab4987e git-annex in ycanerol@retina-05-17 3 years ago
20180719_YE_252MEA_Marmoset_eye1_33 d4eaba410f gin commit from retina-05-17 3 years ago
20180802_YE_252MEA_Marmoset_eye1_421 298992a944 gin commit from retina-05-17 3 years ago
20180815_YE_252MEA_Marmoset_eye1_221 74557e0fae gin commit from retina-05-17 3 years ago
.gitignore bbbe0ef7cb gin commit from retina-05-17 3 years ago
LICENSE 407a8da854 Initial commit 3 years ago
README.md d573dbb3ec gin commit from retina-05-17 3 years ago
marmoset_experiment_notes.pdf b7ef366208 gin commit from retina-05-17 3 years ago
pymer_omb_examples.ipynb d573dbb3ec gin commit from retina-05-17 3 years ago

README.md

RGC_spiketrains_texture_motion_marmoset

Ganglion unit spike train data recorded from marmoset retina. Focus on stimulation with random-walk-like motion of a spatial texture.

Folder structure

20180710_YE_60MEA_Marmoset_eye1_42/
├── frametimes/
├── ks_sorted/
│   ├── spikes/
├── stimuli/
├── spike_sorting.ods
└── spike_sorting_ks.ods

spike_sorting.ods contains the metadata and the sorting information obtained with IGOR, which is irrelevant here.

spike_sorting_ks.ods contains only the metadata and is there for backward compatibility purposes.

frametimes

Synchronization of stimulus and recorded data.

There is a delay between a pulse being recorded and the screen actually updating. This is the monitor_delay cell in the spike_sorting_ks.ods file.

This value is already added when saving .npz files. They already contain the correction, in contrast to the .mat files that most people use in the lab, which do not have it.

The npz files contain two arrays, f_on and f_off, respectively for the onsets and the offsets of the square-wave pulse. For more information, check the code pymer/modules/analysis_scripts.py:extractframetimes

ks_sorted

spike_times.npz: Spike times of all units for all stimuli.

spike_clusters.npy: Identities of the spiking units, corresponding to spike_times.npz

cluster_info.tsv: Contains all information about the units like channel number, assigned quality and group (good, noise)

Since all stimuli are concatenated for sorting, the individual stimuli are not separated in these files. In order to make it easier to analyze each stimulus, the spikes folder contains npz files for each stimulus; in the npz files each unit's spike times for that stimulus are stored.

Units that were classified as noise are not included when saving to the spikes folder.

import numpy as np

x = np.load("1.npz", allow_pickle=True)
spikes = x['spikes']  # Note that this is an object array, since length of each "line" is different.
                      # Each "line" of this element corresponds to the spike times of a single unit.
>>> spikes[0] # Spike times of the first unit
array([  2.19272,   3.62512,   3.67528, ..., 314.62344, 314.96828,
       314.99288]) 

Spikes folder also contains clusters.tsv, which is a simplified version of the cluster_info.tsv file, with the noise units and unneeded columns removed. It also contains channel numbers and cluster numbers, for backwards compatibility with IGOR-style analyses.

stimuli

Contains the parameters that were used in the experiment, one file per stimulus.

Loading and working with the texture stimulus

The texture stimulus is referred to as OMB (objects moving background) since this was the original name of the stimulus.

To use the functions already present in the pymer package, it needs to be first set up. Follow the instructions here.

In order to start working with the OMB stimulus, an instance of the OMB object needs to be instantiated.

from omb import OMB

st = OMB('20180710', 8)

This object contains the basic information that might be needed to analyze the texture stimulus.


>>> spikes = st.allspikes()  # Load binned spikes for all units into the variable spikes
>>> spikes.shape
(96, 54000)  # 96 units, 54000 time bins

>>> st.texturebasic.shape # The texture that is moved around to generate the stimulus
(200, 200)

Documentation

You can see how all the attributes and functions are defined in classes/omb.py and classes/stimulus.py in pymer.

OMB is child class of the more general Stimulus, so it contains everything in Stimulus plus those that are defined in omb.py

Interactive demo

To explore the functionality of the pymer OMB class, you can run the pymer_omb_examples.ipynb notebook.

For this jupyter notebook should be installed, you can do so by running

conda install jupyter

Note: jupyter can be installed to your base environment (as opposed to pymer environment), this would make it easier to access jupyter with other environments you might have.

Start a notebook server by running

jupyter notebook