def test_io_set_raw(fname): """Test importing EEGLAB .set files.""" montage = _read_eeglab_montage(montage_path) montage.ch_names = [ 'EEG {0:03d}'.format(ii) for ii in range(len(montage.ch_names)) ] kws = dict(reader=read_raw_eeglab, input_fname=fname) if fname.endswith('test_raw_chanloc.set'): with pytest.warns(RuntimeWarning, match="The data contains 'boundary' events"): raw0 = _test_raw_reader(**kws) elif '_h5' in fname: # should be safe enough, and much faster raw0 = read_raw_eeglab(fname, preload=True) else: raw0 = _test_raw_reader(**kws) # test that preloading works if fname.endswith('test_raw_chanloc.set'): raw0.set_montage(montage, on_missing='ignore') # crop to check if the data has been properly preloaded; we cannot # filter as the snippet of raw data is very short raw0.crop(0, 1) else: raw0.set_montage(montage) raw0.filter(1, None, l_trans_bandwidth='auto', filter_length='auto', phase='zero') # test that using uint16_codec does not break stuff read_raw_kws = dict(input_fname=fname, preload=False, uint16_codec='ascii') if fname.endswith('test_raw_chanloc.set'): with pytest.warns(RuntimeWarning, match="The data contains 'boundary' events"): raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage, on_missing='ignore') else: raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage) # Annotations if fname != raw_fname_chanloc: assert len(raw0.annotations) == 154 assert set(raw0.annotations.description) == {'rt', 'square'} assert_array_equal(raw0.annotations.duration, 0.)
def test_io_set_raw(fname): """Test importing EEGLAB .set files.""" montage = _read_eeglab_montage(montage_path) montage.ch_names = [ 'EEG {0:03d}'.format(ii) for ii in range(len(montage.ch_names)) ] _test_raw_reader(read_raw_eeglab, input_fname=fname) # test that preloading works raw0 = read_raw_eeglab(input_fname=fname, preload=True) raw0.set_montage(montage) raw0.filter(1, None, l_trans_bandwidth='auto', filter_length='auto', phase='zero') # test that using uint16_codec does not break stuff raw0 = read_raw_eeglab(input_fname=fname, preload=False, uint16_codec='ascii') raw0.set_montage(montage)
def test_io_set_raw(fname): """Test importing EEGLAB .set files.""" montage = _read_eeglab_montage(montage_path) montage.ch_names = [ 'EEG {0:03d}'.format(ii) for ii in range(len(montage.ch_names)) ] kws = dict(reader=read_raw_eeglab, input_fname=fname) if fname.endswith('test_raw_chanloc.set'): with pytest.warns(RuntimeWarning, match="The data contains 'boundary' events"): _test_raw_reader(**kws) else: _test_raw_reader(**kws) # test that preloading works read_raw_kws = dict(input_fname=fname, preload=True) if fname.endswith('test_raw_chanloc.set'): with pytest.warns(RuntimeWarning, match="The data contains 'boundary' events"): raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage, on_missing='ignore') # crop to check if the data has been properly preloaded; we cannot # filter as the snippet of raw data is very short raw0.crop(0, 1) else: raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage) raw0.filter(1, None, l_trans_bandwidth='auto', filter_length='auto', phase='zero') # test that using uint16_codec does not break stuff read_raw_kws = dict(input_fname=fname, preload=False, uint16_codec='ascii') if fname.endswith('test_raw_chanloc.set'): with pytest.warns(RuntimeWarning, match="The data contains 'boundary' events"): raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage, on_missing='ignore') else: raw0 = read_raw_eeglab(**read_raw_kws) raw0.set_montage(montage)
def test_position_information(one_chanpos_fname): """Test reading file with 3 channels - one without position information.""" nan = np.nan EXPECTED_LOCATIONS_FROM_FILE = np.array([ [-4., 1., 7., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [-5., 2., 8., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ]) EXPECTED_LOCATIONS_FROM_MONTAGE = np.array([ [-0.56705965, 0.67706631, 0.46906776, 0, 0, 0, 0, 0, 0, 0, 0, 0], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [0, 0.99977915, -0.02101571, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]) montage = _read_eeglab_montage(montage_path) raw = read_raw_eeglab(input_fname=one_chanpos_fname, preload=True) assert_array_equal(np.array([ch['loc'] for ch in raw.info['chs']]), EXPECTED_LOCATIONS_FROM_FILE) # To acomodate the new behavior so that: # read_raw_eeglab(.. montage=montage) and raw.set_montage(montage) # behaves the same we need to flush the montage. otherwise we get # a mix of what is in montage and in the file raw = read_raw_eeglab( input_fname=one_chanpos_fname, preload=True, ).set_montage(None) # Flush the montage builtin within input_fname with pytest.raises(ValueError): raw.set_montage(montage, update_ch_names=False) _msg = ( 'DigMontage is a only a subset of info. ' 'Did not set 1 channel positions:\nunknown' ) with pytest.warns(RuntimeWarning, match=_msg): raw.set_montage(montage, update_ch_names=False, raise_if_subset=False) _assert_array_allclose_nan(np.array([ch['loc'] for ch in raw.info['chs']]), EXPECTED_LOCATIONS_FROM_MONTAGE)
def test_position_information(one_chanpos_fname): """Test reading file with 3 channels - one without position information.""" nan = np.nan EXPECTED_LOCATIONS_FROM_FILE = np.array([ [-4., 1., 7., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [-5., 2., 8., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ]) EXPECTED_LOCATIONS_FROM_MONTAGE = np.array([ [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ]) montage = _read_eeglab_montage(montage_path) raw = read_raw_eeglab(input_fname=one_chanpos_fname, preload=True) assert_array_equal(np.array([ch['loc'] for ch in raw.info['chs']]), EXPECTED_LOCATIONS_FROM_FILE) # To acomodate the new behavior so that: # read_raw_eeglab(.. montage=montage) and raw.set_montage(montage) # behaves the same we need to flush the montage. otherwise we get # a mix of what is in montage and in the file raw = read_raw_eeglab( input_fname=one_chanpos_fname, preload=True, ).set_montage(None) # Flush the montage builtin within input_fname _assert_array_allclose_nan(np.array([ch['loc'] for ch in raw.info['chs']]), EXPECTED_LOCATIONS_FROM_MONTAGE) with pytest.raises(ValueError): raw.set_montage(montage, update_ch_names=False) _assert_array_allclose_nan(np.array([ch['loc'] for ch in raw.info['chs']]), EXPECTED_LOCATIONS_FROM_MONTAGE)