Source code for bmtk.analyzer.spikes_loader

# Copyright 2017. Allen Institute. All rights reserved
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
# following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
# disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
# products derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
import h5py
import numpy as np
import os
import datetime


[docs]def load_spikes(file_name,trial_name=None): """Loads spikes from multiple file formats :param file_name: name of spike file :param trian_name: name of a trial within a spike file :return spikes: dict with spikes """ filename, file_extension = os.path.splitext(file_name) if file_extension == ".nwb": spikes = load_spikes_from_nwb(file_name,trial_name) if file_extension == ".txt": spikes = load_spikes_from_txt(file_name) if file_extension == ".h5": spikes = load_spikes_from_h5(file_name) return spikes
[docs]def load_spikes_from_txt(file_name): """Load spikes from the txt file :param file_name: name of spike file :param trian_name: name of a trial within a spike file :return spikes: dict with spikes """ t = os.path.getmtime(file_name) spk_ts, spk_gids = np.loadtxt(file_name, dtype='float32,int', unpack=True) spikes = { "time": spk_ts, "gid": spk_gids } print('loaded spikes from txt') return spikes
[docs]def load_spikes_from_h5(file_name): """Load spikes from the hdf5 file :param file_name: name of spike file :param trian_name: name of a trial within a spike file :return spikes: dict with spikes """ t = os.path.getmtime(file_name) print("{} modified on: {}".format(file_name, datetime.datetime.fromtimestamp(t))) spikes ={} with h5py.File(file_name,'r') as h5: spikes["time"] = h5["time"][...] spikes["gid"] = h5["gid"][...] return spikes
[docs]def load_spikes_from_nwb(file_name,trial_name): """Load spikes from the nwb file :param file_name: name of spike file :param trian_name: name of a trial within a spike file :return spikes: dict with spikes """ f5 = h5py.File(file_name, 'r') spike_trains_handle = f5['processing/%s/spike_train' % trial_name] # nwb.SpikeTrain.get_processing(f5,'trial_0') spike_times = [] spike_gids = [] for gid in spike_trains_handle.keys(): times_gid = spike_trains_handle['%d/data' %int(gid)][:] spike_times.extend(times_gid) spike_gids.extend([int(gid)]*len(times_gid)) spikes = {} spikes["time"] = np.array(spike_times) spikes["gid"] = np.array(spike_gids) return spikes