def test_saving_picked(): """Test saving picked CTF instances.""" temp_dir = _TempDir() out_fname = op.join(temp_dir, 'test_py_raw.fif') raw = read_raw_ctf(op.join(ctf_dir, ctf_fname_1_trial)) raw.crop(0, 1).load_data() assert raw.compensation_grade == get_current_comp(raw.info) == 0 assert len(raw.info['comps']) == 5 pick_kwargs = dict(meg=True, ref_meg=False, verbose=True) for comp_grade in [0, 1]: raw.apply_gradient_compensation(comp_grade) with catch_logging() as log: raw_pick = raw.copy().pick_types(**pick_kwargs) assert len(raw.info['comps']) == 5 assert len(raw_pick.info['comps']) == 0 log = log.getvalue() assert 'Removing 5 compensators' in log raw_pick.save(out_fname, overwrite=True) # should work raw2 = read_raw_fif(out_fname) assert (raw_pick.ch_names == raw2.ch_names) assert_array_equal(raw_pick.times, raw2.times) assert_allclose(raw2[0:20][0], raw_pick[0:20][0], rtol=1e-6, atol=1e-20) # atol is very small but > 0 raw2 = read_raw_fif(out_fname, preload=True) assert (raw_pick.ch_names == raw2.ch_names) assert_array_equal(raw_pick.times, raw2.times) assert_allclose(raw2[0:20][0], raw_pick[0:20][0], rtol=1e-6, atol=1e-20) # atol is very small but > 0
def test_compensation(): """Test compensation.""" tempdir = _TempDir() raw = read_raw_fif(ctf_comp_fname, compensation=None, add_eeg_ref=False) assert_equal(get_current_comp(raw.info), 3) comp1 = make_compensator(raw.info, 3, 1, exclude_comp_chs=False) assert_true(comp1.shape == (340, 340)) comp2 = make_compensator(raw.info, 3, 1, exclude_comp_chs=True) assert_true(comp2.shape == (311, 340)) # round-trip desired = np.eye(340) for from_ in range(3): for to in range(3): if from_ == to: continue comp1 = make_compensator(raw.info, from_, to) comp2 = make_compensator(raw.info, to, from_) # To get 1e-12 here (instead of 1e-6) we must use the linalg.inv # method mentioned in compensator.py assert_allclose(np.dot(comp1, comp2), desired, atol=1e-12) assert_allclose(np.dot(comp2, comp1), desired, atol=1e-12) # make sure that changing the comp doesn't modify the original data raw2 = read_raw_fif(ctf_comp_fname, add_eeg_ref=False) raw2.apply_gradient_compensation(2) assert_equal(get_current_comp(raw2.info), 2) fname = op.join(tempdir, 'ctf-raw.fif') raw2.save(fname) raw2 = read_raw_fif(fname, add_eeg_ref=False) assert_equal(raw2.compensation_grade, 2) raw2.apply_gradient_compensation(3) assert_equal(raw2.compensation_grade, 3) data, _ = raw[:, :] data2, _ = raw2[:, :] # channels have norm ~1e-12 assert_allclose(data, data2, rtol=1e-9, atol=1e-18) for ch1, ch2 in zip(raw.info['chs'], raw2.info['chs']): assert_true(ch1['coil_type'] == ch2['coil_type'])
def test_saving_picked(tmpdir, comp_grade): """Test saving picked CTF instances.""" temp_dir = str(tmpdir) out_fname = op.join(temp_dir, 'test_py_raw.fif') raw = read_raw_ctf(op.join(ctf_dir, ctf_fname_1_trial)) raw.crop(0, 1).load_data() assert raw.compensation_grade == get_current_comp(raw.info) == 0 assert len(raw.info['comps']) == 5 pick_kwargs = dict(meg=True, ref_meg=False, verbose=True) raw.apply_gradient_compensation(comp_grade) with catch_logging() as log: raw_pick = raw.copy().pick_types(**pick_kwargs) assert len(raw.info['comps']) == 5 assert len(raw_pick.info['comps']) == 0 log = log.getvalue() assert 'Removing 5 compensators' in log raw_pick.save(out_fname, overwrite=True) # should work raw2 = read_raw_fif(out_fname) assert (raw_pick.ch_names == raw2.ch_names) assert_array_equal(raw_pick.times, raw2.times) assert_allclose(raw2[0:20][0], raw_pick[0:20][0], rtol=1e-6, atol=1e-20) # atol is very small but > 0 raw2 = read_raw_fif(out_fname, preload=True) assert (raw_pick.ch_names == raw2.ch_names) assert_array_equal(raw_pick.times, raw2.times) assert_allclose(raw2[0:20][0], raw_pick[0:20][0], rtol=1e-6, atol=1e-20) # atol is very small but > 0
def test_compensation_apply(tmp_path, preload, pick): """Test applying compensation.""" # make sure that changing the comp doesn't modify the original data raw = read_raw_fif(ctf_comp_fname, preload=preload) assert raw._comp is None raw2 = raw.copy() raw2.apply_gradient_compensation(2) if pick: raw2.pick([0] + list(range(2, len(raw.ch_names)))) raw.pick([0] + list(range(2, len(raw.ch_names)))) assert get_current_comp(raw2.info) == 2 if preload: assert raw2._comp is None else: assert raw2._comp.shape == (len(raw2.ch_names), ) * 2 fname = op.join(tmp_path, 'ctf-raw.fif') raw2.save(fname) raw2 = read_raw_fif(fname) assert raw2.compensation_grade == 2 raw2.apply_gradient_compensation(3) assert raw2.compensation_grade == 3 data, _ = raw[:, :] data2, _ = raw2[:, :] # channels have norm ~1e-12 assert_allclose(data, data2, rtol=1e-9, atol=1e-18) for ch1, ch2 in zip(raw.info['chs'], raw2.info['chs']): assert ch1['coil_type'] == ch2['coil_type']
def test_ctf_plotting(): """Test CTF topomap plotting.""" raw = read_raw_fif(ctf_fname, preload=True) events = make_fixed_length_events(raw, duration=0.01) assert len(events) > 10 evoked = Epochs(raw, events, tmin=0, tmax=0.01, baseline=None).average() assert get_current_comp(evoked.info) == 3 evoked.plot_topomap() # smoke test that compensation does not matter
def test_ctf_plotting(): """Test CTF topomap plotting.""" raw = read_raw_fif(ctf_fname, preload=True) events = make_fixed_length_events(raw, duration=0.01) assert len(events) > 10 evoked = Epochs(raw, events, tmin=0, tmax=0.01, baseline=None).average() assert get_current_comp(evoked.info) == 3 # smoke test that compensation does not matter evoked.plot_topomap(time_unit='s')
def test_ctf_plotting(): """Test CTF topomap plotting.""" raw = read_raw_fif(ctf_fname, preload=True) assert raw.compensation_grade == 3 events = make_fixed_length_events(raw, duration=0.01) assert len(events) > 10 evoked = Epochs(raw, events, tmin=0, tmax=0.01, baseline=None).average() assert get_current_comp(evoked.info) == 3 # smoke test that compensation does not matter evoked.plot_topomap(time_unit='s') # better test that topomaps can still be used without plotting ref evoked.pick_types(meg=True, ref_meg=False) evoked.plot_topomap()
def test_saving_picked(): """Test saving picked CTF instances.""" temp_dir = _TempDir() out_fname = op.join(temp_dir, 'test_py_raw.fif') raw = read_raw_ctf(op.join(ctf_dir, ctf_fname_1_trial)) raw.crop(0, 1).load_data() assert raw.compensation_grade == get_current_comp(raw.info) == 0 assert len(raw.info['comps']) == 5 pick_kwargs = dict(meg=True, ref_meg=False, verbose=True) with catch_logging() as log: raw_pick = raw.copy().pick_types(**pick_kwargs) assert len(raw.info['comps']) == 5 assert len(raw_pick.info['comps']) == 0 log = log.getvalue() assert 'Removing 5 compensators' in log raw_pick.save(out_fname) # should work read_raw_fif(out_fname) read_raw_fif(out_fname, preload=True) # If comp is applied, picking should error raw.apply_gradient_compensation(1) assert raw.compensation_grade == get_current_comp(raw.info) == 1 with pytest.raises(RuntimeError, match='Compensation grade 1 has been'): raw.copy().pick_types(**pick_kwargs)
def test_compensation(): """Test compensation """ raw = Raw(ctf_comp_fname, compensation=None) comp1 = make_compensator(raw.info, 3, 1, exclude_comp_chs=False) assert_true(comp1.shape == (340, 340)) comp2 = make_compensator(raw.info, 3, 1, exclude_comp_chs=True) assert_true(comp2.shape == (311, 340)) # make sure that changing the comp doesn't modify the original data raw2 = Raw(ctf_comp_fname, compensation=2) assert_true(get_current_comp(raw2.info) == 2) fname = op.join(tempdir, 'ctf-raw.fif') raw2.save(fname) raw2 = Raw(fname, compensation=None) data, _ = raw[:, :] data2, _ = raw2[:, :] assert_allclose(data, data2, rtol=1e-9, atol=1e-20) for ch1, ch2 in zip(raw.info['chs'], raw2.info['chs']): assert_true(ch1['coil_type'] == ch2['coil_type'])
def test_compensation_identity(): """Test compensation identity.""" raw = read_raw_fif(ctf_comp_fname) assert get_current_comp(raw.info) == 3 comp1 = make_compensator(raw.info, 3, 1, exclude_comp_chs=False) assert comp1.shape == (340, 340) comp2 = make_compensator(raw.info, 3, 1, exclude_comp_chs=True) assert comp2.shape == (311, 340) # round-trip desired = np.eye(340) for from_ in range(3): for to in range(3): if from_ == to: continue comp1 = make_compensator(raw.info, from_, to) comp2 = make_compensator(raw.info, to, from_) # To get 1e-12 here (instead of 1e-6) we must use the linalg.inv # method mentioned in compensator.py assert_allclose(np.dot(comp1, comp2), desired, atol=1e-12) assert_allclose(np.dot(comp2, comp1), desired, atol=1e-12)