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 20e60b81d4469c675985ff9457247933cd53e54d Author: Alexandre Gramfort <[email protected]> Date: Tue Mar 8 21:45:38 2011 -0500 ENH : Epochs.average returns an Evoked object --- examples/plot_from_raw_to_epochs_to_evoked.py | 58 +++++++++++++++++++++++++++ mne/epochs.py | 34 ++++++++++++++-- mne/fiff/evoked.py | 12 +++--- mne/tests/test_forward.py | 1 + 4 files changed, 95 insertions(+), 10 deletions(-) diff --git a/examples/plot_from_raw_to_epochs_to_evoked.py b/examples/plot_from_raw_to_epochs_to_evoked.py new file mode 100644 index 0000000..6582ed7 --- /dev/null +++ b/examples/plot_from_raw_to_epochs_to_evoked.py @@ -0,0 +1,58 @@ +""" +======================================================== +Extract epochs, average and save evoked response to disk +======================================================== + +This script shows how to read the epochs from a raw file given +a list of events. The epochs are averaged to produce evoked +data and then saved to disk. + +""" +# Authors: Alexandre Gramfort <[email protected]> +# +# License: BSD (3-clause) + +print __doc__ + +import mne +from mne import fiff +from mne.datasets import sample +data_path = sample.data_path('.') + +############################################################################### +# Set parameters +raw_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw.fif' +event_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw-eve.fif' +event_id = 1 +tmin = -0.2 +tmax = 0.5 + +# 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=False, eeg=True, stim=False, + include=include, exclude=exclude) +# Read epochs +epochs = mne.Epochs(raw, events, event_id, + tmin, tmax, picks=picks, baseline=(None, 0)) +evoked = epochs.average() # average epochs and get an Evoked dataset. + +evoked.save('sample_audvis_eeg-ave.fif') # save evoked data to disk + +############################################################################### +# View evoked response +times = 1e3 * epochs.times # time in miliseconds +import pylab as pl +pl.clf() +pl.plot(times, 1e6*evoked.data.T) +pl.xlim([times[0], times[-1]]) +pl.xlabel('time (ms)') +pl.ylabel('Potential (uV)') +pl.title('EEG evoked potential') +pl.show() diff --git a/mne/epochs.py b/mne/epochs.py index 364ad8c..3d4bd80 100644 --- a/mne/epochs.py +++ b/mne/epochs.py @@ -3,8 +3,10 @@ # # License: BSD (3-clause) +import copy import numpy as np import fiff +from .fiff import Evoked class Epochs(object): @@ -30,6 +32,9 @@ class Epochs(object): keep_comp : boolean Apply CTF gradient compensation + info : dict + Measurement info + baseline: None (default) or tuple of length 2 The time interval to apply baseline correction. If None do not apply it. If baseline is (a, b) @@ -53,7 +58,8 @@ class Epochs(object): Return all epochs as a 3D array [n_epochs x n_channels x n_times]. average() : self - Return averaged epochs as a 2D array [n_channels x n_times]. + Return Evoked object containing averaged epochs as a + 2D array [n_channels x n_times]. """ @@ -71,6 +77,13 @@ class Epochs(object): self.baseline = baseline self.preload = preload + # Handle measurement info + self.info = copy.copy(raw.info) + if picks is not None: + self.info['chs'] = [self.info['chs'][k] for k in picks] + self.info['ch_names'] = [self.info['ch_names'][k] for k in picks] + self.info['nchan'] = len(picks) + if picks is None: picks = range(len(raw.info['ch_names'])) self.ch_names = raw.info['ch_names'] @@ -205,19 +218,32 @@ class Epochs(object): self._current += 1 return epoch - def average(self): + def average(self, comment="Epoked data"): """Compute average of epochs + Parameters + ---------- + comment : string + Comment that describes the Evoked data created. + Returns ------- data : array of shape [n_channels, n_times] The averaged epochs """ + evoked = Evoked(None) + evoked.info = copy.copy(self.info) n_channels = len(self.ch_names) n_times = len(self.times) n_events = len(self.events) data = np.zeros((n_channels, n_times)) for e in self: data += e - return data / n_events - + evoked.data = data / n_events + evoked.times = self.times.copy() + evoked.comment = comment + evoked.aspect_kind = np.array([100]) # XXX + evoked.nave = n_events + evoked.first = - np.sum(self.times < 0) + evoked.last = np.sum(self.times > 0) + return evoked diff --git a/mne/fiff/evoked.py b/mne/fiff/evoked.py index abb6f2b..716c444 100644 --- a/mne/fiff/evoked.py +++ b/mne/fiff/evoked.py @@ -25,8 +25,6 @@ class Evoked(object): Attributes ---------- - fname : - nave : int Number of averaged epochs @@ -48,18 +46,21 @@ class Evoked(object): data : 2D array of shape [n_channels x n_times] Evoked response. """ + def __init__(self, fname, setno=0, baseline=None): """ Parameters ---------- fname : string - Name of evoked/average FIF file + Name of evoked/average FIF file to load. + If None no data is loaded. setno : int Dataset ID number """ - self.fname = fname - self.fname = setno + + if fname is None: + return if setno < 0: raise ValueError, 'Data set selector must be positive' @@ -390,7 +391,6 @@ class Evoked(object): end_file(fid) - def read_evoked(fname, setno=0, baseline=None): """Read an evoked dataset diff --git a/mne/tests/test_forward.py b/mne/tests/test_forward.py index 15e3006..6c074b6 100644 --- a/mne/tests/test_forward.py +++ b/mne/tests/test_forward.py @@ -9,6 +9,7 @@ examples_folder = op.join(op.dirname(__file__), '..', '..', 'examples') data_path = sample.data_path(examples_folder) fname = op.join(data_path, 'MEG', 'sample', 'sample_audvis-meg-oct-6-fwd.fif') + def test_io_forward(): """Test IO for forward solutions """ -- 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
