This is an automated email from the git hooks/post-receive script. yoh pushed a commit to annotated tag v0.1 in repository python-mne.
commit 9f006784ab3e6bec45f31a0efa42a466a96ae08a Author: Alexandre Gramfort <[email protected]> Date: Sat Mar 12 18:36:19 2011 -0500 increase coverage in cov.py + bug fix in read_forward_solution when surf_ori=True --- examples/plot_read_forward.py | 2 +- mne/fiff/evoked.py | 1 - mne/fiff/write.py | 31 ++++---- mne/forward.py | 18 +++-- mne/tests/test_cov.py | 24 +++++- mne/tests/test_forward.py | 1 + mne/time_frequency/tests/test_tfr.py | 9 ++- mne/transforms.py | 146 +++++++++++++++++------------------ 8 files changed, 133 insertions(+), 99 deletions(-) diff --git a/examples/plot_read_forward.py b/examples/plot_read_forward.py index 24c2144..308f3b9 100644 --- a/examples/plot_read_forward.py +++ b/examples/plot_read_forward.py @@ -15,7 +15,7 @@ data_path = sample.data_path('.') fname = data_path + '/MEG/sample/sample_audvis-meg-oct-6-fwd.fif' -fwd = mne.read_forward_solution(fname) +fwd = mne.read_forward_solution(fname, surf_ori=True) leadfield = fwd['sol']['data'] print "Leadfield size : %d x %d" % leadfield.shape diff --git a/mne/fiff/evoked.py b/mne/fiff/evoked.py index 0652b91..46ce122 100644 --- a/mne/fiff/evoked.py +++ b/mne/fiff/evoked.py @@ -116,7 +116,6 @@ class Evoked(object): raise ValueError, 'Data set selector out of range' # Next locate the evoked data set - # p = 0 goon = True for k in range(len(evoked_node)): diff --git a/mne/fiff/write.py b/mne/fiff/write.py index 645a603..254a8a3 100644 --- a/mne/fiff/write.py +++ b/mne/fiff/write.py @@ -424,19 +424,20 @@ def write_named_matrix(fid, kind, mat): % mat The data matrix % """ - - start_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX) - write_int(fid, FIFF.FIFF_MNE_NROW, mat['nrow']) - write_int(fid, FIFF.FIFF_MNE_NCOL, mat['ncol']) - - if len(mat['row_names']) > 0: - write_name_list(fid, FIFF.FIFF_MNE_ROW_NAMES, mat['row_names']) - - if len(mat['col_names']) > 0: - write_name_list(fid, FIFF.FIFF_MNE_COL_NAMES, mat['col_names']) - - write_float_matrix(fid,kind, mat.data) - end_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX) - - return; + raise NotImplementedError, "CTF data processing is not supported yet" + + # start_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX) + # write_int(fid, FIFF.FIFF_MNE_NROW, mat['nrow']) + # write_int(fid, FIFF.FIFF_MNE_NCOL, mat['ncol']) + # + # if len(mat['row_names']) > 0: + # write_name_list(fid, FIFF.FIFF_MNE_ROW_NAMES, mat['row_names']) + # + # if len(mat['col_names']) > 0: + # write_name_list(fid, FIFF.FIFF_MNE_COL_NAMES, mat['col_names']) + # + # write_float_matrix(fid,kind, mat.data) + # end_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX) + # + # return; diff --git a/mne/forward.py b/mne/forward.py index 2389fc4..d5ba2ce 100644 --- a/mne/forward.py +++ b/mne/forward.py @@ -360,10 +360,12 @@ def read_forward_solution(fname, force_fixed=False, surf_ori=False, # Rotate the local source coordinate systems print '\tConverting to surface-based source orientations...' nuse = 0 - pp = 1 - fwd['source_rr'] = np.zeros(fwd['nsource'], 3) + pp = 0 + nuse_total = sum([s['nuse'] for s in src]) + fwd['source_rr'] = np.zeros((fwd['nsource'], 3)) + fwd['source_nn'] = np.empty((3*nuse_total, 3), dtype=np.float) for s in src: - fwd['source_rr'][nuse+1:nuse + s['nuse'],:] = \ + fwd['source_rr'][nuse:nuse + s['nuse'],:] = \ s['rr'][s['vertno'],:] for p in range(s['nuse']): # Project out the surface normal and compute SVD @@ -373,12 +375,14 @@ def read_forward_solution(fname, force_fixed=False, surf_ori=False, # Make sure that ez is in the direction of nn if np.sum(nn*U[:,2]) < 0: U *= -1 - fwd['source_nn'][pp:pp+2,:] = U.T - pp += 3 - nuse += s['nuse'] + + fwd['source_nn'][pp:pp+3,:] = U.T + pp += 3 + + nuse += s['nuse'] surf_rot = _block_diag(fwd['source_nn'].T, 3) - fwd['sol']['data'] = np.dot(fwd['sol']['data'], surf_rot) + fwd['sol']['data'] = fwd['sol']['data'] * surf_rot if fwd['sol_grad'] is not None: fwd['sol_grad']['data'] = np.dot(fwd['sol_grad']['data'] * \ np.kron(surf_rot, np.eye(3))) diff --git a/mne/tests/test_cov.py b/mne/tests/test_cov.py index c9e4436..b25ab50 100644 --- a/mne/tests/test_cov.py +++ b/mne/tests/test_cov.py @@ -3,11 +3,13 @@ import os.path as op from numpy.testing import assert_array_almost_equal import mne -from ..fiff import fiff_open, read_evoked +from ..fiff import fiff_open, read_evoked, pick_types from ..datasets import sample fname = op.join(op.dirname(__file__), '..', 'fiff', 'tests', 'data', 'test-cov.fif') +raw_fname = op.join(op.dirname(__file__), '..', 'fiff', 'tests', 'data', + 'test_raw.fif') def test_io_cov(): @@ -27,6 +29,26 @@ def test_io_cov(): assert_array_almost_equal(cov['data'], cov2['data']) +def test_cov_estimation(): + """Test estimation of noise covariance from raw data + """ + raw = mne.fiff.Raw(raw_fname) + # Set up pick list: MEG + STI 014 - bad channels + want_meg = True + want_eeg = False + want_stim = False + + picks = pick_types(raw.info, meg=want_meg, eeg=want_eeg, + stim=want_stim, exclude=raw.info['bads']) + + full_cov = mne.Covariance(kind='full') + full_cov.estimate_from_raw(raw, picks=picks) + + diagonal_cov = mne.Covariance(kind='diagonal') + diagonal_cov.estimate_from_raw(raw, picks=picks) + # XXX : test something + + def test_whitening_cov(): """Whitening of evoked data and leadfields """ diff --git a/mne/tests/test_forward.py b/mne/tests/test_forward.py index 6c074b6..4fc6bda 100644 --- a/mne/tests/test_forward.py +++ b/mne/tests/test_forward.py @@ -15,5 +15,6 @@ def test_io_forward(): """ fwd = mne.read_forward_solution(fname) fwd = mne.read_forward_solution(fname, force_fixed=True) + fwd = mne.read_forward_solution(fname, surf_ori=True) leadfield = fwd['sol']['data'] # XXX : test something diff --git a/mne/time_frequency/tests/test_tfr.py b/mne/time_frequency/tests/test_tfr.py index 5df188d..145d8fb 100644 --- a/mne/time_frequency/tests/test_tfr.py +++ b/mne/time_frequency/tests/test_tfr.py @@ -1,9 +1,10 @@ import numpy as np import os.path as op +from numpy.testing import assert_array_almost_equal import mne from mne import fiff -from mne.time_frequency import induced_power +from mne.time_frequency import induced_power, single_trial_power from mne.time_frequency.tfr import cwt_morlet raw_fname = op.join(op.dirname(__file__), '..', '..', 'fiff', 'tests', 'data', @@ -56,3 +57,9 @@ def test_time_frequency(): tfr = cwt_morlet(data[0], Fs, frequencies, use_fft=True, n_cycles=2) assert tfr.shape == (len(picks), len(frequencies), len(times)) + + single_power = single_trial_power(data, Fs, frequencies, use_fft=False, + n_cycles=2) + + assert_array_almost_equal(np.mean(single_power), power) + diff --git a/mne/transforms.py b/mne/transforms.py index ba6323c..80912aa 100644 --- a/mne/transforms.py +++ b/mne/transforms.py @@ -50,76 +50,76 @@ def transform_source_space_to(src, dest, trans): return res -def transform_meg_chs(chs, trans): - """ - % - % [res, count] = fiff_transform_meg_chs(chs,trans) - % - % Move to another coordinate system in MEG channel channel info - % Count gives the number of channels transformed - % - % NOTE: Only the coil_trans field is modified by this routine, not - % loc which remains to reflect the original data read from the fif file - % - % - - XXX - """ - - res = copy.copy(chs) - - count = 0 - t = trans['trans'] - for ch in res: - if (ch['kind'] == FIFF.FIFFV_MEG_CH - or ch['kind'] == FIFF.FIFFV_REF_MEG_CH): - if (ch['coord_frame'] == trans['from_'] - and ch['coil_trans'] is not None): - ch['coil_trans'] = np.dot(t, ch['coil_trans']) - ch['coord_frame'] = trans['to'] - count += 1 - - if count > 0: - print '\t%d MEG channel locations transformed' % count - - return res, count - - -def transform_eeg_chs(chs, trans): - """ - % - % [res, count] = fiff_transform_eeg_chs(chs,trans) - % - % Move to another coordinate system in EEG channel channel info - % Count gives the number of channels transformed - % - % NOTE: Only the eeg_loc field is modified by this routine, not - % loc which remains to reflect the original data read from the fif file - % - - XXX - """ - res = copy.copy(chs) - - count = 0 - # - # Output unaugmented vectors from the transformation - # - t = trans['trans'][:3,:] - for ch in res: - if ch['kind'] == FIFF.FIFFV_EEG_CH: - if (ch['coord_frame'] == trans['from_'] - and ch['eeg_loc'] is not None): - # - # Transform the augmented EEG location vectors - # - for p in range(ch['eeg_loc'].shape[1]): - ch['eeg_loc'][:, p] = np.dot(t, - np.r_[ch['eeg_loc'][:,p], 1]) - count += 1 - ch['coord_frame'] = trans['to'] - - if count > 0: - print '\t%d EEG electrode locations transformed\n' % count - - return res, count +# def transform_meg_chs(chs, trans): +# """ +# % +# % [res, count] = fiff_transform_meg_chs(chs,trans) +# % +# % Move to another coordinate system in MEG channel channel info +# % Count gives the number of channels transformed +# % +# % NOTE: Only the coil_trans field is modified by this routine, not +# % loc which remains to reflect the original data read from the fif file +# % +# % +# +# XXX +# """ +# +# res = copy.copy(chs) +# +# count = 0 +# t = trans['trans'] +# for ch in res: +# if (ch['kind'] == FIFF.FIFFV_MEG_CH +# or ch['kind'] == FIFF.FIFFV_REF_MEG_CH): +# if (ch['coord_frame'] == trans['from_'] +# and ch['coil_trans'] is not None): +# ch['coil_trans'] = np.dot(t, ch['coil_trans']) +# ch['coord_frame'] = trans['to'] +# count += 1 +# +# if count > 0: +# print '\t%d MEG channel locations transformed' % count +# +# return res, count + + +# def transform_eeg_chs(chs, trans): +# """ +# % +# % [res, count] = fiff_transform_eeg_chs(chs,trans) +# % +# % Move to another coordinate system in EEG channel channel info +# % Count gives the number of channels transformed +# % +# % NOTE: Only the eeg_loc field is modified by this routine, not +# % loc which remains to reflect the original data read from the fif file +# % +# +# XXX +# """ +# res = copy.copy(chs) +# +# count = 0 +# # +# # Output unaugmented vectors from the transformation +# # +# t = trans['trans'][:3,:] +# for ch in res: +# if ch['kind'] == FIFF.FIFFV_EEG_CH: +# if (ch['coord_frame'] == trans['from_'] +# and ch['eeg_loc'] is not None): +# # +# # Transform the augmented EEG location vectors +# # +# for p in range(ch['eeg_loc'].shape[1]): +# ch['eeg_loc'][:, p] = np.dot(t, +# np.r_[ch['eeg_loc'][:,p], 1]) +# count += 1 +# ch['coord_frame'] = trans['to'] +# +# if count > 0: +# print '\t%d EEG electrode locations transformed\n' % count +# +# return res, count -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
