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 d17d730e4964270688b3e529b880888175f4d532 Author: [email protected] <[email protected]> Date: Tue Jun 19 10:13:04 2012 -0400 ENH: pick using named selection --- mne/fiff/__init__.py | 2 +- mne/fiff/pick.py | 73 +++++++++++++++++++++++++++++++++++++++++++++ mne/fiff/tests/test_pick.py | 16 +++++++++- setup.py | 1 + 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/mne/fiff/__init__.py b/mne/fiff/__init__.py index 3418624..1afb60c 100644 --- a/mne/fiff/__init__.py +++ b/mne/fiff/__init__.py @@ -12,7 +12,7 @@ from .raw import Raw, read_raw_segment, read_raw_segment_times, \ start_writing_raw, write_raw_buffer, finish_writing_raw from .pick import pick_types, pick_channels, pick_types_evoked, \ pick_channels_regexp, pick_channels_forward, \ - pick_types_forward, pick_channels_cov + pick_types_forward, pick_channels_cov, pick_selection from .compensator import get_current_comp from .proj import compute_spatial_vectors, proj_equal, \ diff --git a/mne/fiff/pick.py b/mne/fiff/pick.py index 51ec6c0..503bacc 100644 --- a/mne/fiff/pick.py +++ b/mne/fiff/pick.py @@ -3,6 +3,7 @@ # # License: BSD (3-clause) +from os import path from copy import deepcopy import re @@ -109,6 +110,78 @@ def pick_channels_regexp(ch_names, regexp): return [k for k, name in enumerate(ch_names) if r.match(name)] +def _load_selections_file(fname): + """Load selections from file""" + fid = open(fname, 'r') + + selections = {} + + for line in fid: + line = line.strip() + + # skip blank lines and comments + if len(line) == 0 or line[0] == '#': + continue + + # read the channel names into a list + pos = line.find(':') + if pos < 0: + print '":" delimiter not found in selections file, '\ + 'skipping line' + continue + selections[line[:pos]] = line[pos + 1:].split('|') + + fid.close() + + return selections + + +def pick_selection(ch_names, sel_name, sel_fname=None): + """Pick channels using a named selection + + By default, the selections used in mne_browse_raw are supported*. + Additional selections can be added by specifying a selection file (e.g. + produced using mne_browse_raw) using the sel_fname parameter. + + * The included selections are: "Vertex", "Left-temporal", "Right-temporal", + "Left-parietal", "Right-parietal", "Left-occipital", "Right-occipital", + "Left-frontal", and "Right-frontal" + + Parameters + ---------- + ch_names : list of string + List of channels + + sel_name : string + Name of the selection + + self_fname : string + Filename of the selection file (if None, built-in selections are used) + + Returns + ------- + sel : array of int + Indices of channels in selection. + """ + + if sel_fname is None: + sel_fname = path.join(path.dirname(__file__), '..', 'data', + 'mne_analyze.sel') + + if not path.exists(sel_fname): + raise ValueError('The file %s does not exist.' % sel_fname) + + selections = _load_selections_file(sel_fname) + + if sel_name not in selections: + raise ValueError('Selection "%s" not in %s' % (sel_name, sel_fname)) + + # get the channel indices of the selection + sel = pick_channels(ch_names, selections[sel_name]) + + return sel + + def pick_types(info, meg=True, eeg=False, stim=False, eog=False, ecg=False, emg=False, misc=False, include=[], exclude=[]): """Pick channels by type and names diff --git a/mne/fiff/tests/test_pick.py b/mne/fiff/tests/test_pick.py index d3ddb5d..71442a8 100644 --- a/mne/fiff/tests/test_pick.py +++ b/mne/fiff/tests/test_pick.py @@ -1,5 +1,5 @@ from numpy.testing import assert_array_equal -from ..pick import pick_channels_regexp +from ..pick import pick_channels_regexp, pick_selection def test_pick_channels_regexp(): @@ -8,3 +8,17 @@ def test_pick_channels_regexp(): assert_array_equal(pick_channels_regexp(ch_names, 'MEG ...1'), [0]) assert_array_equal(pick_channels_regexp(ch_names, 'MEG ...[2-3]'), [1, 2]) assert_array_equal(pick_channels_regexp(ch_names, 'MEG *'), [0, 1, 2]) + + +def test_pick_selection(): + """Test pick using named selection""" + # test one channel for each selection + ch_names = ['MEG 2211', 'MEG 0223', 'MEG 1312', 'MEG 0412', 'MEG 1043', + 'MEG 2042', 'MEG 2032', 'MEG 0522', 'MEG 1031'] + sel_names = ['Vertex', 'Left-temporal', 'Right-temporal', 'Left-parietal', + 'Right-parietal', 'Left-occipital', 'Right-occipital', + 'Left-frontal', 'Right-frontal'] + + for i, sel in enumerate(sel_names): + picks = pick_selection(ch_names, sel) + assert(i in picks) diff --git a/setup.py b/setup.py index d22bf16..3c4e497 100755 --- a/setup.py +++ b/setup.py @@ -60,6 +60,7 @@ if __name__ == "__main__": 'mne.layouts', 'mne.time_frequency', 'mne.time_frequency.tests', 'mne.preprocessing', 'mne.preprocessing.tests'], + package_data={'mne': ['data/mne_analyze.sel']}, scripts=['bin/mne_clean_eog_ecg.py', 'bin/mne_flash_bem_model.py', 'bin/mne_surf2bem.py', 'bin/mne_compute_proj_ecg.py', 'bin/mne_compute_proj_eog.py', 'bin/mne_maxfilter.py']) -- 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
