[med-svn] [python-mne] 289/353: FIX: data order, whats_new, test
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:25:17 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 47ab928ead2653d350f200d1bbeec5525d04c948
Author: Martin Luessi <mluessi at nmr.mgh.harvard.edu>
Date: Tue Jul 17 16:00:26 2012 -0400
FIX: data order, whats_new, test
---
doc/source/whats_new.rst | 1 +
mne/simulation/source.py | 39 ++++++++++++++++---------------------
mne/simulation/tests/test_source.py | 26 +++++++++++++++++++++++--
3 files changed, 42 insertions(+), 24 deletions(-)
diff --git a/doc/source/whats_new.rst b/doc/source/whats_new.rst
index 1a6d0aa..8749667 100644
--- a/doc/source/whats_new.rst
+++ b/doc/source/whats_new.rst
@@ -6,6 +6,7 @@ Current
Changelog
~~~~~~~~~
+ - Generation of simulated evoked responses by `Alex Gramfort`_, `Daniel Strohmeier`_, and `Martin Luessi`_
- Fit AR models to raw data for temporal whitening by `Alex Gramfort`_.
diff --git a/mne/simulation/source.py b/mne/simulation/source.py
index bddb5ed..8fec4be 100644
--- a/mne/simulation/source.py
+++ b/mne/simulation/source.py
@@ -45,7 +45,7 @@ def select_source_in_label(src, label, random_state=None):
return lh_vertno, rh_vertno
-def generate_sparse_stc(src, labels, stc_data, tmin, tstep, random_state=0):
+def generate_sparse_stc(src, labels, stc_data, tmin, tstep, random_state=None):
"""Generate sparse sources time courses from waveforms and labels
This function randomly selects a single vertex in each label and assigns
@@ -83,14 +83,20 @@ def generate_sparse_stc(src, labels, stc_data, tmin, tstep, random_state=0):
vertno[0] += lh_vertno
vertno[1] += rh_vertno
if len(lh_vertno) != 0:
- lh_data.append(label_data)
+ lh_data.append(np.atleast_2d(label_data))
elif len(rh_vertno) != 0:
- rh_data.append(label_data)
+ rh_data.append(np.atleast_2d(label_data))
else:
raise ValueError('No vertno found.')
+
vertno = map(np.array, vertno)
- data = np.r_[lh_data, rh_data]
+
+ # the data is in the order left, right
+ lh_data.extend(rh_data)
+ data = np.concatenate(lh_data)
+
stc = _make_stc(data, tmin, tstep, vertno)
+
return stc
@@ -137,8 +143,7 @@ def generate_stc(src, labels, stc_data, tmin, tstep, value_fun=None):
vertno = [[], []]
stc_data_extended = [[], []]
- hemi_to_ind = {}
- hemi_to_ind['lh'], hemi_to_ind['rh'] = 0, 1
+ hemi_to_ind = {'lh': 0, 'rh': 1}
for i, label in enumerate(labels):
hemi_ind = hemi_to_ind[label['hemi']]
src_sel = np.intersect1d(src[hemi_ind]['vertno'],
@@ -153,7 +158,7 @@ def generate_stc(src, labels, stc_data, tmin, tstep, value_fun=None):
data = np.tile(stc_data[i], (len(src_sel), 1))
vertno[hemi_ind].append(src_sel)
- stc_data_extended[hemi_ind].append(data)
+ stc_data_extended[hemi_ind].append(np.atleast_2d(data))
# format the vertno list
for idx in (0, 1):
@@ -163,21 +168,11 @@ def generate_stc(src, labels, stc_data, tmin, tstep, value_fun=None):
vertno[idx] = vertno[idx][0]
vertno = map(np.array, vertno)
- # the data is in the same order as the vertices in vertno
- n_vert_tot = len(vertno[0]) + len(vertno[1])
- stc_data = np.zeros((n_vert_tot, stc_data.shape[1]))
- for idx in (0, 1):
- if len(stc_data_extended[idx]) == 0:
- continue
- if len(stc_data_extended[idx]) == 1:
- data = stc_data_extended[idx][0]
- else:
- data = np.concatenate(stc_data_extended[idx])
-
- if idx == 0:
- stc_data[:len(vertno[0]), :] = data
- else:
- stc_data[len(vertno[0]):, :] = data
+ # the data is in the order left, right
+ lh_data = stc_data_extended[0]
+ rh_data = stc_data_extended[1]
+ lh_data.extend(rh_data)
+ stc_data = np.concatenate(lh_data)
stc = _make_stc(stc_data, tmin, tstep, vertno)
return stc
diff --git a/mne/simulation/tests/test_source.py b/mne/simulation/tests/test_source.py
index bae2dd4..f61dfa4 100644
--- a/mne/simulation/tests/test_source.py
+++ b/mne/simulation/tests/test_source.py
@@ -2,14 +2,14 @@ import os.path as op
import copy
import numpy as np
-from numpy.testing import assert_array_almost_equal
+from numpy.testing import assert_array_almost_equal, assert_array_equal
from nose.tools import assert_true
from ...datasets import sample
from ... import read_label
from ... import read_forward_solution
-from ..source import generate_stc
+from ..source import generate_stc, generate_sparse_stc
examples_folder = op.join(op.dirname(__file__), '..', '..', '..' '/examples')
data_path = sample.data_path(examples_folder)
@@ -46,3 +46,25 @@ def test_generate_stc():
# the first label has value 0, the second value 2
assert_array_almost_equal(stc.data[0], np.zeros(n_times))
assert_array_almost_equal(stc.data[-1], 4 * np.ones(n_times))
+
+
+def test_generate_sparse_stc():
+ """ Test generation of sparse source estimate """
+
+ n_times = 10
+ tmin = 0
+ tstep = 1e-3
+
+ stc_data = np.ones((len(labels), n_times))
+ stc_1 = generate_sparse_stc(fwd['src'], labels, stc_data, tmin, tstep, 0)
+
+ assert_true(np.all(stc_1.data == 1.0))
+ assert_true(stc_1.data.shape[0] == len(labels))
+ assert_true(stc_1.data.shape[1] == n_times)
+
+ # make sure we get the same result when using the same seed
+ stc_2 = generate_sparse_stc(fwd['src'], labels, stc_data, tmin, tstep, 0)
+
+ assert_array_equal(stc_1.lh_vertno, stc_2.lh_vertno)
+ assert_array_equal(stc_1.rh_vertno, stc_2.rh_vertno)
+
--
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