def bv2fif(dataf, corf, ch_order=None, eogs=('VEOG', 'HEOG'), ecg='ECG', emg='EMG', preload='default', ref_ch='Fp1', dbs=False, new_sfreq=1000.0): montage = read_dig_montage(bvct=corf) if preload == 'default': preload = os.path.dirname(dataf) + '/workfile' raw = read_raw_brainvision(dataf, preload=preload) if dbs: event_ch = get_events(raw) # save downsampled raw for multitaper spectrogram raw_data = np.zeros( (raw._data.shape[0], int(raw._data.shape[1] / raw.info['sfreq'] * new_sfreq))) raw_info = raw.info.copy() raw_info['sfreq'] = new_sfreq for i in tqdm(range(len(raw._data))): ch = raw._data[i, ::int(raw.info['sfreq'] / new_sfreq)] raw_data[i] = ch del ch raw_resampled = RawArray(raw_data, raw_info) raw_resampled.annotations = raw.annotations if dbs: old_event_ch = [ch for ch in raw.info['ch_names'] if 'STI' in ch] if old_event_ch: raw_resampled.drop_channels([old_event_ch[0]]) event_ch._data = event_ch._data[:, ::int(raw.info['sfreq'] / new_sfreq)] event_ch.info['sfreq'] = new_sfreq event_ch.__len__ = len(event_ch._data[0]) event_ch.info['lowpass'] = raw_resampled.info['lowpass'] raw_resampled.add_channels([event_ch]) prepInst(raw_resampled, dataf, 'raw', montage, ref_ch, eogs, ecg, emg) events, event_ids = events_from_annotations(raw) if len(np.unique(events[:, 2])) > 1: events = events[np.where(events[:, 2] == events[1, 2])[0]] #skip new segment epochs = Epochs(raw, events, tmin=-2, tmax=2, proj=False, preload=op.dirname(dataf) + '/workfile-epo', baseline=(-0.5, -0.1), verbose=False, detrend=1) events = events[ epochs. selection] #in case any epochs don't have data and get thrown out (poorly placed at beginning or end) epo_data = np.zeros( (epochs._data.shape[0], epochs._data.shape[1], int(np.ceil(epochs._data.shape[2] / epochs.info['sfreq'] * new_sfreq)))) for i in tqdm(range(epochs._data.shape[0])): for j in range(epochs._data.shape[1]): epo_curr = epochs._data[i, j, ::int(epochs.info['sfreq'] / new_sfreq)] epo_data[i, j] = epo_curr del epo_curr events[:, 0] = np.array(events[:, 0] * new_sfreq / raw.info['sfreq'], dtype=int) epo_resampled = EpochsArray(epo_data, epochs.info.copy(), events, tmin=-2) epo_resampled.info['sfreq'] = new_sfreq epo_resampled.events[:, 2] = np.arange(len(events)) epo_resampled.event_id = {str(i): i for i in range(len(events))} prepInst(epo_resampled, dataf, 'epo', montage, ref_ch, eogs, ecg, emg)