[med-svn] [python-mne] 306/353: ENH : add refs + cleanup in MxNE
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:25:21 UTC 2015
This is an automated email from the git hooks/post-receive script.
yoh pushed a commit to tag 0.4
in repository python-mne.
commit 822a8ebcd55ffe26e87e8e209032d2bee9275270
Author: Alexandre Gramfort <alexandre.gramfort at inria.fr>
Date: Thu Jul 19 09:21:38 2012 +0200
ENH : add refs + cleanup in MxNE
---
examples/inverse/plot_mixed_norm_L21_inverse.py | 10 ++++++----
mne/forward.py | 10 +++-------
mne/minimum_norm/inverse.py | 6 +++---
mne/mixed_norm/debiasing.py | 10 ++++++++++
mne/mixed_norm/inverse.py | 25 ++++++++++++++-----------
mne/mixed_norm/optim.py | 12 ++++++++++++
6 files changed, 48 insertions(+), 25 deletions(-)
diff --git a/examples/inverse/plot_mixed_norm_L21_inverse.py b/examples/inverse/plot_mixed_norm_L21_inverse.py
index c60668d..b2b2458 100644
--- a/examples/inverse/plot_mixed_norm_L21_inverse.py
+++ b/examples/inverse/plot_mixed_norm_L21_inverse.py
@@ -1,12 +1,13 @@
"""
-===============================================
-Compute sparse solver based on L1/L2 mixed norm
-===============================================
+================================================================
+Compute sparse inverse solution based on L1/L2 mixed norm (MxNE)
+================================================================
See
Gramfort A., Kowalski M. and Hamalainen, M,
Mixed-norm estimates for the M/EEG inverse problem using accelerated
gradient methods, Physics in Medicine and Biology, 2012
+http://dx.doi.org/10.1088/0031-9155/57/7/1937
"""
# Author: Alexandre Gramfort <gramfort at nmr.mgh.harvard.edu>
#
@@ -51,7 +52,8 @@ loose, depth = 0.2, 0.9 # loose orientation & depth weighting
# Compute dSPM solution to be used as weights in MxNE
inverse_operator = make_inverse_operator(evoked.info, forward, cov,
loose=loose, depth=depth)
-stc_dspm = apply_inverse(evoked, inverse_operator, lambda2=1. / 9., dSPM=True)
+stc_dspm = apply_inverse(evoked, inverse_operator, lambda2=1. / 9.,
+ method='dSPM')
# Compute MxNE inverse solution
stc, residual = mixed_norm(evoked, forward, cov, alpha, loose=loose,
diff --git a/mne/forward.py b/mne/forward.py
index b66686c..ba562b1 100644
--- a/mne/forward.py
+++ b/mne/forward.py
@@ -544,15 +544,11 @@ def compute_orient_prior(forward, loose=0.2):
if is_fixed_ori:
orient_prior = np.ones(n_sources, dtype=np.float)
else:
- n_dip_per_pos = 1 if is_fixed_ori else 3
- n_positions = n_sources / 3
- n_dipoles = n_positions * n_dip_per_pos
- orient_prior = np.ones(n_dipoles, dtype=np.float)
-
+ orient_prior = np.ones(n_sources, dtype=np.float)
if loose is not None:
print ('Applying loose dipole orientations. Loose value of %s.'
% loose)
- orient_prior[np.mod(np.arange(n_dipoles), 3) != 2] *= loose
+ orient_prior[np.mod(np.arange(n_sources), 3) != 2] *= loose
return orient_prior
@@ -625,7 +621,7 @@ def _fill_measurement_info(info, fwd, sfreq):
def _apply_forward(fwd, stc, start=None, stop=None):
""" Apply forward model and return data, times, ch_names
"""
- if not is_fixed_orient(fwd['source_ori']):
+ if not is_fixed_orient(fwd):
raise ValueError('Only fixed-orientation forward operators are '
'supported.')
diff --git a/mne/minimum_norm/inverse.py b/mne/minimum_norm/inverse.py
index 88d5bf0..c810a5c 100644
--- a/mne/minimum_norm/inverse.py
+++ b/mne/minimum_norm/inverse.py
@@ -961,8 +961,8 @@ def _xyz2lf(Lf_xyz, normals):
###############################################################################
# Assemble the inverse operator
-def _prepare_inverse(forward, info, noise_cov, pca=False):
- """Util function for inverse solvers
+def _prepare_forward(forward, info, noise_cov, pca=False):
+ """Util function to prepare forward solution for inverse solvers
"""
fwd_ch_names = [c['ch_name'] for c in forward['info']['chs']]
ch_names = [c['ch_name'] for c in info['chs']
@@ -1044,7 +1044,7 @@ def make_inverse_operator(info, forward, noise_cov, loose=0.2, depth=0.8):
raise ValueError('depth should be a scalar between 0 and 1')
ch_names, gain, noise_cov, whitener, n_nzero = \
- _prepare_inverse(forward, info, noise_cov)
+ _prepare_forward(forward, info, noise_cov)
n_dipoles = gain.shape[1]
diff --git a/mne/mixed_norm/debiasing.py b/mne/mixed_norm/debiasing.py
index e962a4e..95d7f47 100755
--- a/mne/mixed_norm/debiasing.py
+++ b/mne/mixed_norm/debiasing.py
@@ -30,6 +30,10 @@ def power_iteration_kron(A, C, max_iter=1000, tol=1e-3, random_state=0):
-------
L : float
largest singular value
+
+ Notes
+ -----
+ http://en.wikipedia.org/wiki/Power_iteration
"""
AS_size = C.shape[0]
rng = check_random_state(random_state)
@@ -58,6 +62,12 @@ def compute_bias(M, G, X, max_iter=1000, tol=1e-4, n_orient=1):
min 1/2 * (|| M - GDX ||fro)^2
s.t. D >= 0 and D is a diagonal matrix
+ Reference for the FISTA algorithm:
+ Amir Beck and Marc Teboulle
+ A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse
+ Problems, SIAM J. Imaging Sci., 2(1), 183-202. (20 pages)
+ http://epubs.siam.org/doi/abs/10.1137/080716542
+
Parameters
----------
M : array
diff --git a/mne/mixed_norm/inverse.py b/mne/mixed_norm/inverse.py
index 19c49a5..ba15138 100644
--- a/mne/mixed_norm/inverse.py
+++ b/mne/mixed_norm/inverse.py
@@ -7,7 +7,7 @@ import numpy as np
from scipy import linalg
from ..source_estimate import SourceEstimate
-from ..minimum_norm.inverse import combine_xyz, _make_stc, _prepare_inverse
+from ..minimum_norm.inverse import combine_xyz, _make_stc, _prepare_forward
from ..forward import compute_orient_prior, is_fixed_orient
from ..fiff.pick import pick_channels_evoked
from .optim import mixed_norm_solver, norm_l2inf
@@ -84,9 +84,15 @@ def mixed_norm(evoked, forward, noise_cov, alpha, loose=0.2, depth=0.8,
Compute L1/L2 mixed-norm solution on evoked data.
+ Reference:
+ Gramfort A., Kowalski M. and Hamalainen, M,
+ Mixed-norm estimates for the M/EEG inverse problem using accelerated
+ gradient methods, Physics in Medicine and Biology, 2012
+ http://dx.doi.org/10.1088/0031-9155/57/7/1937
+
Parameters
----------
- evoked : instance of Evoked or list of instance of Evoked
+ evoked : instance of Evoked or list of instances of Evoked
Evoked data to invert
forward : dict
Forward operator
@@ -123,14 +129,11 @@ def mixed_norm(evoked, forward, noise_cov, alpha, loose=0.2, depth=0.8,
Returns
-------
- stc : dict
- Source time courses
-
- References
- ----------
- Gramfort A., Kowalski M. and Hamalainen, M,
- Mixed-norm estimates for the M/EEG inverse problem using accelerated
- gradient methods, Physics in Medicine and Biology, 2012
+ stc : SourceEstimate | list of SourceEstimate
+ Source time courses for each evoked data passed as input.
+ residual : instance of Evoked
+ The residual a.k.a. data not explained by the sources.
+ Only returned if return_residual is True.
"""
if not isinstance(evoked, list):
evoked = [evoked]
@@ -141,7 +144,7 @@ def mixed_norm(evoked, forward, noise_cov, alpha, loose=0.2, depth=0.8,
raise Exception('All the datasets must have the same good channels.')
info = evoked[0].info
- ch_names, gain, _, whitener, _ = _prepare_inverse(forward,
+ ch_names, gain, _, whitener, _ = _prepare_forward(forward,
info, noise_cov, pca)
# Whiten lead field.
diff --git a/mne/mixed_norm/optim.py b/mne/mixed_norm/optim.py
index 147c114..44942d8 100644
--- a/mne/mixed_norm/optim.py
+++ b/mne/mixed_norm/optim.py
@@ -108,6 +108,12 @@ def prox_l1(Y, alpha, n_orient):
def dgap_l21(M, G, X, active_set, alpha, n_orient):
"""Duality gaps for the mixed norm inverse problem
+ For details see:
+ Gramfort A., Kowalski M. and Hamalainen, M,
+ Mixed-norm estimates for the M/EEG inverse problem using accelerated
+ gradient methods, Physics in Medicine and Biology, 2012
+ http://dx.doi.org/10.1088/0031-9155/57/7/1937
+
Parameters
----------
M : array of shape [n_sensors, n_times]
@@ -215,6 +221,12 @@ def mixed_norm_solver(M, G, alpha, maxit=200, tol=1e-8, verbose=True,
active_set_size=50, debias=True, n_orient=1):
"""Solves L21 inverse solver with active set strategy
+ Algorithm is detailed in:
+ Gramfort A., Kowalski M. and Hamalainen, M,
+ Mixed-norm estimates for the M/EEG inverse problem using accelerated
+ gradient methods, Physics in Medicine and Biology, 2012
+ http://dx.doi.org/10.1088/0031-9155/57/7/1937
+
Parameters
----------
M : array
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git
More information about the debian-med-commit
mailing list