[med-svn] [python-mne] 195/353: ENH : add tmin = tmax to compute_covariance
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:24:57 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 9e079fb58771bcdf43b6e9329d7617ccf06f7b99
Author: Alexandre Gramfort <alexandre.gramfort at inria.fr>
Date: Sun Jun 17 17:37:44 2012 +0300
ENH : add tmin = tmax to compute_covariance
---
doc/source/whats_new.rst | 2 +
.../plot_estimate_covariance_matrix_baseline.py | 51 ++++++++++++++++++++++
...x.py => plot_estimate_covariance_matrix_raw.py} | 0
mne/cov.py | 16 ++++++-
mne/tests/test_cov.py | 30 ++++++++-----
5 files changed, 85 insertions(+), 14 deletions(-)
diff --git a/doc/source/whats_new.rst b/doc/source/whats_new.rst
index 4372f4b..0beaf5f 100644
--- a/doc/source/whats_new.rst
+++ b/doc/source/whats_new.rst
@@ -9,6 +9,8 @@ Current
Changelog
~~~~~~~~~
+ - Add tmin + tmax parameters in mne.compute_covariance to estimate noise covariance in epochs baseline without creating new epochs by `Alex Gramfort`_.
+
- Add method to regularize a noise covariance by `Alex Gramfort`_.
- Read and write measurement info in forward and inverse operators for interactive visualization in mne_analyze by `Alex Gramfort`_.
diff --git a/examples/plot_estimate_covariance_matrix_baseline.py b/examples/plot_estimate_covariance_matrix_baseline.py
new file mode 100644
index 0000000..43cb625
--- /dev/null
+++ b/examples/plot_estimate_covariance_matrix_baseline.py
@@ -0,0 +1,51 @@
+"""
+========================================
+Estimate covariance matrix from baseline
+========================================
+
+"""
+# Author: Alexandre Gramfort <gramfort at nmr.mgh.harvard.edu>
+#
+# License: BSD (3-clause)
+
+print __doc__
+
+import mne
+from mne import fiff
+from mne.datasets import sample
+
+data_path = sample.data_path('.')
+fname = data_path + '/MEG/sample/sample_audvis_raw.fif'
+event_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw-eve.fif'
+event_id, tmin, tmax = 1, -0.2, 0.5
+
+raw = fiff.Raw(fname)
+
+###############################################################################
+# Set parameters
+raw_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw.fif'
+
+# Setup for reading the raw data
+raw = fiff.Raw(raw_fname)
+events = mne.read_events(event_fname)
+
+# Set up pick list: EEG + STI 014 - bad channels (modify to your needs)
+include = [] # or stim channels ['STI 014']
+exclude = raw.info['bads'] + ['EEG 053'] # bads + 1 more
+
+# pick EEG channels
+picks = fiff.pick_types(raw.info, meg=True, eeg=True, stim=False, eog=True,
+ include=include, exclude=exclude)
+# Read epochs
+reject = dict(grad=4000e-13, mag=4e-12, eeg=80e-6, eog=150e-6)
+epochs = mne.Epochs(raw, events, event_id, tmin, tmax, picks=picks,
+ baseline=(None, 0), reject=reject)
+
+# Compute the covariance on baseline
+cov = mne.compute_covariance(epochs, tmin=None, tmax=0)
+print cov
+
+###############################################################################
+# Show covariance
+mne.viz.plot_cov(cov, raw.info, exclude=raw.info['bads'], colorbar=True,
+ proj=True) # try setting proj to False to see the effect
diff --git a/examples/plot_estimate_covariance_matrix.py b/examples/plot_estimate_covariance_matrix_raw.py
similarity index 100%
rename from examples/plot_estimate_covariance_matrix.py
rename to examples/plot_estimate_covariance_matrix_raw.py
diff --git a/mne/cov.py b/mne/cov.py
index 79ae554..d740240 100644
--- a/mne/cov.py
+++ b/mne/cov.py
@@ -230,7 +230,7 @@ def compute_raw_data_covariance(raw, tmin=None, tmax=None, tstep=0.2,
return cov
-def compute_covariance(epochs, keep_sample_mean=True):
+def compute_covariance(epochs, keep_sample_mean=True, tmin=None, tmax=None):
"""Estimate noise covariance matrix from epochs
The noise covariance is typically estimated on pre-stim periods
@@ -257,6 +257,10 @@ def compute_covariance(epochs, keep_sample_mean=True):
each event type and subtracted during the covariance
computation. This is useful if the evoked response from a
previous stimulus extends into the baseline period of the next.
+ tmin : float | None
+ Start time for baseline. If None start at first sample.
+ tmax : float | None
+ End time for baseline. If None end at last sample.
Returns
-------
@@ -295,8 +299,16 @@ def compute_covariance(epochs, keep_sample_mean=True):
picks_meeg = pick_types(epochs[0].info, meg=True, eeg=True, eog=False)
ch_names = [epochs[0].ch_names[k] for k in picks_meeg]
for i, epochs_t in enumerate(epochs):
+
+ tstart, tend = None, None
+ if tmin is not None:
+ tstart = np.where(epochs_t.times >= tmin)[0][0]
+ if tmax is not None:
+ tend = np.where(epochs_t.times <= tmax)[0][-1] + 1
+ tslice = slice(tstart, tend, None)
+
for e in epochs_t:
- e = e[picks_meeg]
+ e = e[picks_meeg][:, tslice]
if not keep_sample_mean:
data_mean[i] += e
data += np.dot(e, e.T)
diff --git a/mne/tests/test_cov.py b/mne/tests/test_cov.py
index 95c1ac7..9341330 100644
--- a/mne/tests/test_cov.py
+++ b/mne/tests/test_cov.py
@@ -6,7 +6,7 @@ import numpy as np
from scipy import linalg
from ..cov import regularize
-from .. import Covariance, Epochs, merge_events, \
+from .. import read_cov, Epochs, merge_events, \
find_events, compute_raw_data_covariance, \
compute_covariance
from ..fiff import Raw, pick_channels_cov
@@ -24,9 +24,9 @@ erm_cov_fname = op.join('mne', 'fiff', 'tests', 'data',
def test_io_cov():
"""Test IO for noise covariance matrices
"""
- cov = Covariance(cov_fname)
+ cov = read_cov(cov_fname)
cov.save('cov.fif')
- cov2 = Covariance('cov.fif')
+ cov2 = read_cov('cov.fif')
assert_array_almost_equal(cov.data, cov2.data)
cov['bads'] = ['EEG 039']
@@ -41,7 +41,7 @@ def test_cov_estimation_on_raw_segment():
"""
raw = Raw(raw_fname)
cov = compute_raw_data_covariance(raw)
- cov_mne = Covariance(erm_cov_fname)
+ cov_mne = read_cov(erm_cov_fname)
assert_true(cov_mne.ch_names == cov.ch_names)
print (linalg.norm(cov.data - cov_mne.data, ord='fro')
/ linalg.norm(cov.data, ord='fro'))
@@ -50,7 +50,7 @@ def test_cov_estimation_on_raw_segment():
# test IO when computation done in Python
cov.save('test-cov.fif') # test saving
- cov_read = Covariance('test-cov.fif')
+ cov_read = read_cov('test-cov.fif')
assert_true(cov_read.ch_names == cov.ch_names)
assert_true(cov_read.nfree == cov.nfree)
assert_true((linalg.norm(cov.data - cov_read.data, ord='fro')
@@ -68,15 +68,21 @@ def test_cov_estimation_with_triggers():
# cov with merged events and keep_sample_mean=True
events_merged = merge_events(events, event_ids, 1234)
epochs = Epochs(raw, events_merged, 1234, tmin=-0.2, tmax=0,
- baseline=(-0.2, -0.1), proj=True,
- reject=reject)
+ baseline=(-0.2, -0.1), proj=True,
+ reject=reject, preload=True)
cov = compute_covariance(epochs, keep_sample_mean=True)
- cov_mne = Covariance(cov_km_fname)
+ cov_mne = read_cov(cov_km_fname)
assert_true(cov_mne.ch_names == cov.ch_names)
assert_true((linalg.norm(cov.data - cov_mne.data, ord='fro')
/ linalg.norm(cov.data, ord='fro')) < 0.005)
+ # Test with tmin and tmax (different but not too much)
+ cov_tmin_tmax = compute_covariance(epochs, tmin=-0.19, tmax=-0.01)
+ assert_true(np.all(cov.data != cov_tmin_tmax.data))
+ assert_true((linalg.norm(cov.data - cov_tmin_tmax.data, ord='fro')
+ / linalg.norm(cov_tmin_tmax.data, ord='fro')) < 0.05)
+
# cov using a list of epochs and keep_sample_mean=True
epochs = [Epochs(raw, events, ev_id, tmin=-0.2, tmax=0,
baseline=(-0.2, -0.1), proj=True, reject=reject)
@@ -88,14 +94,14 @@ def test_cov_estimation_with_triggers():
# cov with keep_sample_mean=False using a list of epochs
cov = compute_covariance(epochs, keep_sample_mean=False)
- cov_mne = Covariance(cov_fname)
+ cov_mne = read_cov(cov_fname)
assert_true(cov_mne.ch_names == cov.ch_names)
assert_true((linalg.norm(cov.data - cov_mne.data, ord='fro')
/ linalg.norm(cov.data, ord='fro')) < 0.005)
# test IO when computation done in Python
cov.save('test-cov.fif') # test saving
- cov_read = Covariance('test-cov.fif')
+ cov_read = read_cov('test-cov.fif')
assert_true(cov_read.ch_names == cov.ch_names)
assert_true(cov_read.nfree == cov.nfree)
assert_true((linalg.norm(cov.data - cov_read.data, ord='fro')
@@ -105,7 +111,7 @@ def test_cov_estimation_with_triggers():
def test_arithmetic_cov():
"""Test arithmetic with noise covariance matrices
"""
- cov = Covariance(cov_fname)
+ cov = read_cov(cov_fname)
cov_sum = cov + cov
assert_array_almost_equal(2 * cov.nfree, cov_sum.nfree)
assert_array_almost_equal(2 * cov.data, cov_sum.data)
@@ -120,7 +126,7 @@ def test_arithmetic_cov():
def test_regularize_cov():
"""Test cov regularization
"""
- noise_cov = Covariance(cov_fname)
+ noise_cov = read_cov(cov_fname)
raw = Raw(raw_fname)
# Regularize noise cov
reg_noise_cov = regularize(noise_cov, raw.info,
--
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