|
from mne import Epochs, pick_types, events_from_annotations, create_info, EpochsArray
|
|
from mne.channels import make_standard_montage
|
|
from mne.io import concatenate_raws, read_raw_edf, RawArray
|
|
from mne.datasets import eegbci
|
|
import scipy.io
|
|
import numpy as np
|
|
import os
|
|
import mne
|
|
|
|
|
|
|
|
def eegbci_data(tmin, tmax, subject, filter_range = None, run_list = None):
|
|
|
|
event_id = dict(ev=0)
|
|
runs = run_list
|
|
|
|
|
|
raw_fnames = eegbci.load_data(subject, runs, update_path=True, path='../mne_data')
|
|
raw = concatenate_raws([read_raw_edf(f, preload=True) for f in raw_fnames])
|
|
eegbci.standardize(raw)
|
|
montage = make_standard_montage('standard_1005')
|
|
raw.set_montage(montage)
|
|
|
|
|
|
raw.rename_channels(lambda x: x.strip('.'))
|
|
raw.set_eeg_reference(projection=True)
|
|
raw.apply_proj()
|
|
|
|
if filter_range != None:
|
|
raw.filter(filter_range[0], filter_range[1], fir_design='firwin', skip_by_annotation='edge')
|
|
|
|
events, _ = events_from_annotations(raw, event_id=dict(T0=0))
|
|
|
|
picks = pick_types(raw.info, meg=False, eeg=True, stim=False, eog=False,
|
|
exclude='bads')
|
|
|
|
epochs = Epochs(raw, events, event_id, tmin, tmax, proj=True, picks=picks,
|
|
baseline=None, preload=True)
|
|
|
|
return epochs, raw
|
|
|
|
|
|
|
|
|
|
def eegMCI_data(stim_type, subject, run_type, path_to_data_folder):
|
|
"""
|
|
eegMCI_data does read 3d data from .mat file structured as ( n epochs, n channels, n samples ).
|
|
|
|
:param stim_type: 'AV','A','V'
|
|
:param subject: select a subject from dataset
|
|
:param run_type: chose run type of selected subject, possible types ( button.dat, test.dat_1, test.dat_2, train.dat )
|
|
:param path_to_data_folder: root path to data folder
|
|
|
|
:return: epochs, raw mne objects
|
|
"""
|
|
|
|
stim_type_long = ['audiovisual','audio','visual']
|
|
|
|
if stim_type == 'AV':
|
|
stim_typeL = stim_type_long[0]
|
|
elif stim_type == 'A':
|
|
stim_typeL = stim_type_long[1]
|
|
else:
|
|
stim_typeL = stim_type_long[2]
|
|
|
|
targets = ['allNTARGETS','allTARGETS']
|
|
path = os.path.join(path_to_data_folder,stim_typeL,'s'+str(subject)+'_'+stim_type+'_'+run_type+'.mat')
|
|
|
|
mat = scipy.io.loadmat(path)
|
|
|
|
raw_no_targets = mat[targets[0]].transpose((0, 2, 1))
|
|
raw_targets = mat[targets[1]].transpose((0, 2, 1))
|
|
|
|
electrodes_l = np.concatenate(mat['electrodes'])
|
|
electrodes_l = [str(x).replace('[','').replace(']','').replace("'",'') for x in electrodes_l]
|
|
ch_types = ['eeg'] * 16
|
|
info = create_info(electrodes_l, ch_types=ch_types, sfreq=512)
|
|
info.set_montage('standard_1020')
|
|
|
|
epochs_no_target = EpochsArray(raw_no_targets, info, tmin=-0.2)
|
|
epochs_target = EpochsArray(raw_targets, info, tmin=-0.2)
|
|
|
|
erp_no_target = epochs_no_target.average()
|
|
erp_target = epochs_target.average()
|
|
|
|
epochs = np.array([erp_no_target.get_data(),erp_target.get_data()],dtype=np.object)
|
|
raw = [raw_no_targets,raw_targets]
|
|
print(electrodes_l)
|
|
return EpochsArray(epochs,info,tmin=-0.2), np.array(raw)
|
|
|
|
|
|
|
|
|
|
def eegMCI_data_epochs(stim_type1,stim_type2, subject, run_type, path_to_data_folder):
|
|
"""
|
|
eegMCI_data does read 3d data from .mat file structured as ( n epochs, n channels, n samples ).
|
|
|
|
:param stim_type1: 'AV','A','V'
|
|
:param stim_type2: 'AV','A','V'
|
|
:param subject: select a subject from dataset
|
|
:param run_type: chose run type of selected subject, possible types ( button.dat, test.dat_1, test.dat_2, train.dat )
|
|
:param path_to_data_folder: root path to data folder
|
|
|
|
:return: epochs, raw mne objects
|
|
"""
|
|
|
|
stim_type_long = ['audiovisual','audio','visual']
|
|
|
|
if stim_type1 == 'AV':
|
|
stim_typeL1 = stim_type_long[0]
|
|
elif stim_type1 == 'A':
|
|
stim_typeL1 = stim_type_long[1]
|
|
else:
|
|
stim_typeL1 = stim_type_long[2]
|
|
|
|
if stim_type2 == 'AV':
|
|
stim_typeL2 = stim_type_long[0]
|
|
elif stim_type2 == 'A':
|
|
stim_typeL2 = stim_type_long[1]
|
|
else:
|
|
stim_typeL2 = stim_type_long[2]
|
|
|
|
targets = ['allNTARGETS','allTARGETS']
|
|
path1 = os.path.join(path_to_data_folder,stim_typeL1,'s'+str(subject)+'_'+stim_type1+'_'+run_type+'.mat')
|
|
path2 = os.path.join(path_to_data_folder,stim_typeL2,'s'+str(subject)+'_'+stim_type2+'_'+run_type+'.mat')
|
|
|
|
mat1 = scipy.io.loadmat(path1)
|
|
mat2 = scipy.io.loadmat(path2)
|
|
|
|
raw_no_targets1 = mat1[targets[0]].transpose((0, 2, 1))
|
|
raw_targets1 = mat1[targets[1]].transpose((0, 2, 1))
|
|
|
|
raw_no_targets2 = mat2[targets[0]].transpose((0, 2, 1))
|
|
raw_targets2 = mat2[targets[1]].transpose((0, 2, 1))
|
|
|
|
electrodes_l = np.concatenate(mat1['electrodes'])
|
|
electrodes_l = [str(x).replace('[','').replace(']','').replace("'",'') for x in electrodes_l]
|
|
ch_types = ['eeg'] * 16
|
|
info = create_info(electrodes_l, ch_types=ch_types, sfreq=512)
|
|
info.set_montage('standard_1020')
|
|
|
|
|
|
epochs_target1 = EpochsArray(raw_targets1, info, tmin=-0.2, baseline=(-0.2,0))
|
|
epochs_target2 = EpochsArray(raw_targets2, info, tmin=-0.2, baseline=(-0.2,0))
|
|
|
|
|
|
erp_target1 = epochs_target1.average()
|
|
erp_target2 = epochs_target2.average()
|
|
|
|
evoked = np.array([erp_target1.get_data(),erp_target2.get_data()],dtype=np.object)
|
|
epochs = [epochs_target1,epochs_target2]
|
|
print(electrodes_l)
|
|
return EpochsArray(evoked,info,tmin=-0.2), epochs |