def _find_analogue_trigger_limit_sd(raw, events, anapick, tmin=-0.2, tmax=0.0): epochs = Epochs(raw, events, tmin=tmin, tmax=tmax, picks=anapick, baseline=(None, 0), preload=True) epochs._data = np.sqrt(epochs._data**2) # RECTIFY! ave = epochs.average(picks=[0]) sde = epochs.standard_error(picks=[0]) return (ave.data.mean(), 5.0 * sde.data[0, np.where(sde.times < 0)].mean() * np.sqrt(epochs.events.shape[0]))
def _get_epochs(subject): # if already computed, lets load it from disk epo_fname = paths('epochs_vhp', subject=subject) if op.exists(epo_fname): return load('epochs_vhp', subject=subject, preload=True) # high pass filter and epoch for block in range(1, 6): raw = load('sss', subject=subject, block=block, preload=True) # Explicit picking of channel to ensure same channels across subjects picks = [ 'STI101', 'EEG060', 'EOG061', 'EOG062', 'ECG063', 'EEG064', 'MISC004' ] # Potentially add forgotten channels ch_type = dict(STI='stim', EEG='eeg', EOG='eog', ECG='ecg', MIS='misc') missing_chans = list() for channel in picks: if channel not in raw.ch_names: missing_chans.append(channel) if missing_chans: info = create_info(missing_chans, raw.info['sfreq'], [ch_type[ch[:3]] for ch in missing_chans]) raw.add_channels([ RawArray(np.zeros( (len(missing_chans), raw.n_times)), info, raw.first_samp) ], force_update_info=True) # Select same channels order across subjects picks = [np.where(np.array(raw.ch_names) == ch)[0][0] for ch in picks] picks = np.r_[np.arange(306), picks] # Filtered raw.filter(2, 30, l_trans_bandwidth=.5, filter_length='30s', n_jobs=1) # Ensure same sampling rate if raw.info['sfreq'] != 1000.0: raw.resample(1000.0) # Select events events = find_events(raw, stim_channel='STI101', shortest_event=1) sel = np.where(events[:, 2] <= 255)[0] events = events[sel, :] # Compensate for delay (as measured manually with photodiod events[1, :] += int(.050 * raw.info['sfreq']) # Epoch continuous data this_epochs = Epochs(raw, events, reject=None, tmin=-.200, tmax=1.6, picks=picks, baseline=None, decim=10) save(this_epochs, 'epo_block', subject=subject, block=block) this_epochs._data = None raw.data = None del this_epochs, raw epochs = list() for block in range(1, 6): this_epochs = load('epo_block', subject=subject, block=block) epochs.append(this_epochs) epochs = concatenate_epochs(epochs) # save for faster retest save(epochs, 'epochs_vhp', subject=subject, overwrite=True, upload=False) return epochs
data= dataset.get_data() df = pd.DataFrame() l_freq = 0.; h_freq = 38. #get Epochs datasets = [] for subj_id, subj_data in data.items(): epochs_list = [] for sess_id, sess_data in subj_data.items(): for run_id, raw in sess_data.items(): events = find_events(raw) onset,offset = dataset.interval events[:,0] += onset*250 raw2 = raw.pick_types(eeg=True, meg=False, stim=False) raw2 = raw2.filter(l_freq,h_freq) epoch = Epochs(raw2, events, event_id=dataset.event_id, tmin=-0.5, tmax=4) epoch._data = epoch.get_data() #epoch.load_data() epochs_list.append(epoch) epochs = mne.concatenate_epochs(epochs_list) #epoch to torch.Dataset datasets.append(BcicDataset(epochs,subj_id)) with open('bcic_datasets_[0,38].pkl', 'wb', ) as f: dill.dump(datasets, f)
def _get_epochs(subject): # if already computed, lets load it from disk epo_fname = paths('epochs_vhp', subject=subject) if op.exists(epo_fname): return load('epochs_vhp', subject=subject, preload=True) # high pass filter and epoch for block in range(1, 6): raw = load('sss', subject=subject, block=block, preload=True) # Explicit picking of channel to ensure same channels across subjects picks = ['STI101', 'EEG060', 'EOG061', 'EOG062', 'ECG063', 'EEG064', 'MISC004'] # Potentially add forgotten channels ch_type = dict(STI='stim', EEG='eeg', EOG='eog', ECG='ecg', MIS='misc') missing_chans = list() for channel in picks: if channel not in raw.ch_names: missing_chans.append(channel) if missing_chans: info = create_info(missing_chans, raw.info['sfreq'], [ch_type[ch[:3]] for ch in missing_chans]) raw.add_channels([RawArray( np.zeros((len(missing_chans), raw.n_times)), info, raw.first_samp)], force_update_info=True) # Select same channels order across subjects picks = [np.where(np.array(raw.ch_names) == ch)[0][0] for ch in picks] picks = np.r_[np.arange(306), picks] # Filtered raw.filter(2, 30, l_trans_bandwidth=.5, filter_length='30s', n_jobs=1) # Ensure same sampling rate if raw.info['sfreq'] != 1000.0: raw.resample(1000.0) # Select events events = find_events(raw, stim_channel='STI101', shortest_event=1) sel = np.where(events[:, 2] <= 255)[0] events = events[sel, :] # Compensate for delay (as measured manually with photodiod events[1, :] += int(.050 * raw.info['sfreq']) # Epoch continuous data this_epochs = Epochs(raw, events, reject=None, tmin=-.200, tmax=1.6, picks=picks, baseline=None, decim=10) save(this_epochs, 'epo_block', subject=subject, block=block) this_epochs._data = None raw.data = None del this_epochs, raw epochs = list() for block in range(1, 6): this_epochs = load('epo_block', subject=subject, block=block) epochs.append(this_epochs) epochs = concatenate_epochs(epochs) # save for faster retest save(epochs, 'epochs_vhp', subject=subject, overwrite=True, upload=False) return epochs