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 d1c4e60967452a9a86e39d230c0a6f9cc28d78b2 Author: Alexandre Gramfort <[email protected]> Date: Mon Mar 28 10:25:42 2011 -0400 mne WIP --- examples/plot_compute_mne_inverse.py | 2 +- mne/__init__.py | 2 +- mne/inverse.py | 70 +++++++++++++++++++----------------- mne/tests/test_inverse.py | 2 +- 4 files changed, 41 insertions(+), 35 deletions(-) diff --git a/examples/plot_compute_mne_inverse.py b/examples/plot_compute_mne_inverse.py index 76f9115..431f06e 100644 --- a/examples/plot_compute_mne_inverse.py +++ b/examples/plot_compute_mne_inverse.py @@ -34,7 +34,7 @@ evoked = Evoked(fname_evoked, setno=setno, baseline=(None, 0)) inverse_operator = mne.read_inverse_operator(fname_inv) # Compute inverse solution -res = mne.compute_inverse(evoked, inverse_operator, lambda2, dSPM) +res = mne.apply_inverse(evoked, inverse_operator, lambda2, dSPM) # Save result in stc files lh_vertices = res['inv']['src'][0]['vertno'] diff --git a/mne/__init__.py b/mne/__init__.py index c78f117..124f0d8 100644 --- a/mne/__init__.py +++ b/mne/__init__.py @@ -6,7 +6,7 @@ from .forward import read_forward_solution from .stc import read_stc, write_stc from .bem_surfaces import read_bem_surfaces from .source_space import read_source_spaces -from .inverse import read_inverse_operator, compute_inverse, minimum_norm +from .inverse import read_inverse_operator, apply_inverse, minimum_norm from .epochs import Epochs from .label import label_time_courses, read_label import fiff diff --git a/mne/inverse.py b/mne/inverse.py index a6681d6..02e017f 100644 --- a/mne/inverse.py +++ b/mne/inverse.py @@ -230,10 +230,10 @@ def read_inverse_operator(fname): # Some empty fields to be filled in later # inv['proj'] = [] # This is the projector to apply to the data - inv['whitener'] = [] # This whitens the data - inv['reginv'] = [] # This the diagonal matrix implementing - # regularization and the inverse - inv['noisenorm'] = [] # These are the noise-normalization factors + inv['whitener'] = [] # This whitens the data + inv['reginv'] = [] # This the diagonal matrix implementing + # regularization and the inverse + inv['noisenorm'] = [] # These are the noise-normalization factors # nuse = 0 for k in range(len(inv['src'])): @@ -259,38 +259,42 @@ def read_inverse_operator(fname): # Compute inverse solution def combine_xyz(vec): - """ - % - % function [comb] = mne_combine_xyz(vec) - % - % Compute the three Cartesian components of a vector together - % - % - % vec - Input row or column vector [ x1 y1 z1 ... x_n y_n z_n ] - % comb - Output vector [x1^2+y1^2+z1^2 ... x_n^2+y_n^2+z_n^2 ] - % + """Compute the three Cartesian components of a vector together + + Parameters + ---------- + vec : array + Input row or column vector [ x1 y1 z1 ... x_n y_n z_n ] + + Returns + ------- + comb : array + Output vector [x1^2+y1^2+z1^2 ... x_n^2+y_n^2+z_n^2] """ if vec.ndim != 1 or (vec.size % 3) != 0: raise ValueError, ('Input must be a 1D vector with ' '3N entries') - - s = _block_diag(vec[None, :], 3) - comb = (s * s.T).diagonal() - return comb + return np.sqrt((noise_norm.ravel()**2).reshape(-1, 3).sum(axis=1)) def prepare_inverse_operator(orig, nave, lambda2, dSPM): - """ - % - % [inv] = mne_prepare_inverse_operator(orig,nave,lambda2,dSPM) - % - % Prepare for actually computing the inverse - % - % orig - The inverse operator structure read from a file - % nave - Number of averages (scales the noise covariance) - % lambda2 - The regularization factor - % dSPM - Compute the noise-normalization factors for dSPM? - % + """Prepare an inverse operator for actually computing the inverse + + Parameters + ---------- + orig : dict + The inverse operator structure read from a file + nave : int + Number of averages (scales the noise covariance) + lambda2 : float + The regularization factor. Recommended to be 1 / SNR**2 + dSPM : bool + If True, compute the noise-normalization factors for dSPM. + + Returns + ------- + inv : dict + Prepared inverse operator """ if nave <= 0: @@ -380,13 +384,15 @@ def prepare_inverse_operator(orig, nave, lambda2, dSPM): if inv['source_ori'] == FIFF.FIFFV_MNE_FREE_ORI: # # The three-component case is a little bit more involved - # The variances at three consequtive entries must be squeared and + # The variances at three consequtive entries must be squared and # added together # # Even in this case return only one noise-normalization factor # per source location # + 1/0 noise_norm = np.sqrt(combine_xyz(noise_norm)) + # # This would replicate the same value on three consequtive # entries @@ -401,8 +407,8 @@ def prepare_inverse_operator(orig, nave, lambda2, dSPM): return inv -def compute_inverse(evoked, inverse_operator, lambda2, dSPM=True): - """Compute inverse solution +def apply_inverse(evoked, inverse_operator, lambda2, dSPM=True): + """Apply inverse operator to evoked data Computes a L2-norm inverse solution Actual code using these principles might be different because diff --git a/mne/tests/test_inverse.py b/mne/tests/test_inverse.py index a4a8325..8589fde 100644 --- a/mne/tests/test_inverse.py +++ b/mne/tests/test_inverse.py @@ -26,7 +26,7 @@ def test_compute_mne_inverse(): evoked = mne.fiff.Evoked(fname_data, setno=setno, baseline=(None, 0)) inverse_operator = mne.read_inverse_operator(fname_inv) - res = mne.compute_inverse(evoked, inverse_operator, lambda2, dSPM) + res = mne.apply_inverse(evoked, inverse_operator, lambda2, dSPM) assert np.all(res['sol'] > 0) assert np.all(res['sol'] < 35) -- 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
