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 ffdce874fc76f02f61017b7f20161e779f13826a Author: Alexandre Gramfort <[email protected]> Date: Wed Mar 16 12:11:19 2011 -0400 new plot_evoked function + nicer examples --- examples/plot_read_epochs.py | 65 ++++++++------------------------------------ examples/plot_read_evoked.py | 31 ++++----------------- mne/fiff/pick.py | 27 ++++++++++++++++++ mne/viz.py | 40 +++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 79 deletions(-) diff --git a/examples/plot_read_epochs.py b/examples/plot_read_epochs.py index 856dc7d..884eadf 100644 --- a/examples/plot_read_epochs.py +++ b/examples/plot_read_epochs.py @@ -17,6 +17,7 @@ print __doc__ import mne from mne import fiff +from mne.viz import plot_evoked from mne.datasets import sample data_path = sample.data_path('.') @@ -24,66 +25,22 @@ 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 +event_id, tmin, tmax = 1, -0.2, 0.5 # Setup for reading the raw data raw = fiff.Raw(raw_fname) events = mne.read_events(event_fname) -# Set up pick list: MEG + STI 014 - bad channels (modify to your needs) -include = [] # or stim channels ['STI 014'] +# Set up pick list: EEG + MEG - bad channels (modify to your needs) exclude = raw.info['bads'] + ['MEG 2443', 'EEG 053'] # bads + 2 more +picks = fiff.pick_types(raw.info, meg=True, eeg=True, stim=False, + exclude=exclude) -# EEG -eeg_picks = fiff.pick_types(raw.info, meg=False, eeg=True, stim=False, - include=include, exclude=exclude) -eeg_epochs = mne.Epochs(raw, events, event_id, tmin, tmax, - picks=eeg_picks, baseline=(None, 0), preload=False) -eeg_evoked = eeg_epochs.average() -eeg_evoked_data = eeg_evoked.data - -# MEG Magnetometers -meg_mag_picks = fiff.pick_types(raw.info, meg='mag', eeg=False, stim=False, - include=include, exclude=exclude) -meg_mag_epochs = mne.Epochs(raw, events, event_id, tmin, tmax, - picks=meg_mag_picks, baseline=(None, 0), preload=False) -meg_mag_evoked = meg_mag_epochs.average() -meg_mag_evoked_data = meg_mag_evoked.data - -# MEG -meg_grad_picks = fiff.pick_types(raw.info, meg='grad', eeg=False, - stim=False, include=include, exclude=exclude) -meg_grad_epochs = mne.Epochs(raw, events, event_id, tmin, tmax, - picks=meg_grad_picks, baseline=(None, 0), preload=False) -meg_grad_evoked = meg_grad_epochs.average() -meg_grad_evoked_data = meg_grad_evoked.data +# Read epochs +epochs = mne.Epochs(raw, events, event_id, tmin, tmax, + picks=picks, baseline=(None, 0), preload=False) +evoked = epochs.average() # average epochs to get the evoked response ############################################################################### -# View evoked response -times = 1e3 * eeg_epochs.times # time in ms -import pylab as pl -pl.clf() -pl.subplot(3, 1, 1) -pl.plot(times, 1e13*meg_grad_evoked_data.T) -pl.ylim([-200, 200]) -pl.xlim([times[0], times[-1]]) -pl.xlabel('time (ms)') -pl.ylabel('Magnetic Field (fT/cm)') -pl.title('MEG (Gradiometers) evoked field') -pl.subplot(3, 1, 2) -pl.plot(times, 1e15*meg_mag_evoked_data.T) -pl.ylim([-600, 600]) -pl.xlim([times[0], times[-1]]) -pl.xlabel('time (ms)') -pl.ylabel('Magnetic Field (fT)') -pl.title('MEG (Magnetometers) evoked field') -pl.subplot(3, 1, 3) -pl.plot(times, 1e6*eeg_evoked_data.T) -pl.xlim([times[0], times[-1]]) -pl.xlabel('time (ms)') -pl.ylabel('Potential (uV)') -pl.title('EEG evoked potential') -pl.subplots_adjust(0.175, 0.07, 0.94, 0.94, 0.2, 0.53) -pl.show() +# Show result +plot_evoked(evoked) diff --git a/examples/plot_read_evoked.py b/examples/plot_read_evoked.py index 7227732..0680186 100644 --- a/examples/plot_read_evoked.py +++ b/examples/plot_read_evoked.py @@ -12,38 +12,19 @@ print __doc__ from mne import fiff from mne.datasets import sample +from mne.viz import plot_evoked + data_path = sample.data_path('.') fname = data_path + '/MEG/sample/sample_audvis-ave.fif' # Reading evoked = fiff.Evoked(fname, setno=0, baseline=(None, 0)) -times = 1e3*evoked.times # times in ms -data = evoked.data -evoked.save('test-ave.fif') +evoked.save('test-ave.fif') # save file to disk ############################################################################### # Show result -import pylab as pl -pl.clf() -pl.subplot(3, 1, 1) -pl.plot(times, 1e13*data[0:306:3,:].T) -pl.ylim([-200, 200]) -pl.title('Planar Gradiometers 1') -pl.xlabel('time (ms)') -pl.ylabel('MEG data (fT/cm)') -pl.subplot(3, 1, 2) -pl.plot(times, 1e13*data[1:306:3,:].T) -pl.ylim([-200, 200]) -pl.title('Planar Gradiometers 2') -pl.xlabel('time (ms)') -pl.ylabel('MEG data (fT/cm)') -pl.subplot(3, 1, 3) -pl.plot(times, 1e15*data[2:306:3,:].T) -pl.ylim([-600, 600]) -pl.title('Magnetometers') -pl.xlabel('time (ms)') -pl.ylabel('MEG data (fT)') -pl.subplots_adjust(0.175, 0.08, 0.94, 0.94, 0.2, 0.63) -pl.show() +picks = fiff.pick_types(evoked.info, meg=True, eeg=True, + exclude=evoked.info['bads']) # Pick channels to view +plot_evoked(evoked, picks=picks) diff --git a/mne/fiff/pick.py b/mne/fiff/pick.py index 894762a..c7df02e 100644 --- a/mne/fiff/pick.py +++ b/mne/fiff/pick.py @@ -8,6 +8,33 @@ from copy import copy import numpy as np from .constants import FIFF +def channel_type(info, idx): + """Get channel type + + Parameters + ---------- + info : dict + Measurement info + idx : int + Index of channel + + Returns + ------- + type : 'grad' | 'mag' | 'eeg' | 'stim' + Type of channel + """ + + kind = info['chs'][idx].kind + if (kind == FIFF.FIFFV_MEG_CH or kind == FIFF.FIFFV_REF_MEG_CH): + if info['chs'][idx]['unit'] == FIFF.FIFF_UNIT_T_M: + return 'grad' + elif info['chs'][idx]['unit'] == FIFF.FIFF_UNIT_T: + return 'mag' + elif kind == FIFF.FIFFV_EEG_CH: + return 'eeg' + elif kind == FIFF.FIFFV_STIM_CH: + return 'stim' + def pick_channels(ch_names, include, exclude): """Pick channels by names diff --git a/mne/viz.py b/mne/viz.py index 6fbf190..ea5c231 100644 --- a/mne/viz.py +++ b/mne/viz.py @@ -6,6 +6,7 @@ # License: Simplified BSD import pylab as pl +from .fiff.pick import channel_type def plot_topo(evoked, layout): @@ -27,3 +28,42 @@ def plot_topo(evoked, layout): pl.rcParams['axes.edgecolor'] = 'k' +def plot_evoked(evoked, picks=None): + """Plot evoked data + + Parameters + ---------- + evoked : instance of Evoked + The evoked data + picks : None | array-like of int + The indices of channels to plot. If None show all. + """ + pl.clf() + if picks is None: + picks = range(evoked.info['nchan']) + types = [channel_type(evoked.info, idx) for idx in picks] + n_channel_types = 0 + channel_types = [] + for t in ['eeg', 'grad', 'mag']: + if t in types: + n_channel_types += 1 + channel_types.append(t) + + counter = 1 + times = 1e3 * evoked.times # time in miliseconds + for t, scaling, name, unit in zip(['eeg', 'grad', 'mag'], + [1e6, 1e13, 1e15], + ['EEG', 'Gradiometers', 'Magnetometers'], + ['uV', 'fT/cm', 'fT']): + idx = [picks[i] for i in range(len(picks)) if types[i] is t] + if len(idx) > 0: + pl.subplot(n_channel_types, 1, counter) + pl.plot(times, scaling*evoked.data[idx,:].T) + pl.title(name) + pl.xlabel('time (ms)') + counter += 1 + pl.ylabel('data (%s)' % unit) + + pl.subplots_adjust(0.175, 0.08, 0.94, 0.94, 0.2, 0.63) + pl.show() + -- 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
