def test_read_write_head_pos(tmpdir): """Test reading and writing head position quaternion parameters.""" temp_name = op.join(str(tmpdir), 'temp.pos') # This isn't a 100% valid quat matrix but it should be okay for tests head_pos_rand = np.random.RandomState(0).randn(20, 10) # This one is valid head_pos_read = read_head_pos(pos_fname) for head_pos_orig in (head_pos_rand, head_pos_read): write_head_pos(temp_name, head_pos_orig) head_pos = read_head_pos(temp_name) assert_allclose(head_pos_orig, head_pos, atol=1e-3) # Degenerate cases pytest.raises(TypeError, write_head_pos, 0, head_pos_read) # not filename pytest.raises(ValueError, write_head_pos, temp_name, 'foo') # not array pytest.raises(ValueError, write_head_pos, temp_name, head_pos_read[:, :9]) pytest.raises(TypeError, read_head_pos, 0) pytest.raises(IOError, read_head_pos, temp_name + 'foo')
from mne.io import read_raw_fif from metacog import bp from metacog.utils import setup_logging from metacog.dataset_specific_utils import parse_args logger = setup_logging(__file__) def compute_head_position(src: Path) -> np.ndarray: raw = read_raw_fif(src) chpi_ampl = compute_chpi_amplitudes(raw) chpi_locs = compute_chpi_locs(raw.info, chpi_ampl) return compute_head_pos(raw.info, chpi_locs) if __name__ == "__main__": args = parse_args(description=__doc__, args=sys.argv[1:], emptyroom=False) subj, task, run = args.subject, args.task, args.run # input raw = bp.root.fpath(subject=subj, task=task, run=run, session=None) # output headpos = bp.headpos.fpath(subject=subj, task=task, run=run) headpos.parent.mkdir(exist_ok=True) logger.info(f"Processing {raw.name} --> {headpos}") head_pos = compute_head_position(raw) write_head_pos(headpos, head_pos)