Skip to content

Commit

Permalink
ENH: source reconstruction on EEG using fsaverage brain (#6146)
Browse files Browse the repository at this point in the history
  • Loading branch information
agramfort authored and massich committed Apr 23, 2019
1 parent 7b69980 commit 639b738
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
1 change: 1 addition & 0 deletions doc/documentation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@ this package. You can also find a gallery of these examples in the
auto_tutorials/plot_source_alignment.rst
auto_tutorials/plot_forward.rst
auto_tutorials/plot_compute_covariance.rst
auto_tutorials/plot_eeg_no_mri.rst
auto_tutorials/plot_mne_dspm_source_localization.rst
auto_tutorials/plot_mne_solutions.rst
auto_tutorials/plot_dipole_fit.rst
Expand Down
4 changes: 4 additions & 0 deletions doc/manual/datasets_index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ fsaverage
For convenience, we provide a function to separately download and extract the
(or update an existing) fsaverage subject.

.. topic:: Examples

:ref:`sphx_glr_auto_tutorials_plot_eeg_no_mri.py`

Brainstorm
==========
Dataset fetchers for three Brainstorm tutorials are available. Users must agree to the
Expand Down
2 changes: 2 additions & 0 deletions doc/whats_new.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ Current
Changelog
~~~~~~~~~

- Add new tutorial on :ref:`sphx_glr_auto_tutorials_plot_eeg_no_mri.py` by `Alex Gramfort`_, and `Joan Massich`_

- Add convenience ``fsaverage`` subject dataset fetcher / updater :func:`mne.datasets.fetch_fsaverage` by `Eric Larson`_

- Add ``fmin`` and ``fmax`` argument to :meth:`mne.time_frequency.AverageTFR.crop` and to :meth:`mne.time_frequency.EpochsTFR.crop` to crop TFR objects along frequency axis by `Dirk Gütlin`_
Expand Down
76 changes: 76 additions & 0 deletions tutorials/plot_eeg_no_mri.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
"""
EEG forward operator with a template MRI
========================================
This tutorial explains how to compute the forward operator from EEG data
using the standard template MRI subject ``fsaverage``.
.. important:: Source reconstruction without an individual T1 MRI from the
subject will be less accurate. Do not over interpret
activity locations which can be off by multiple centimeters.
.. contents:: This tutorial covers:
:local:
:depth: 2
"""

# Authors: Alexandre Gramfort <[email protected]>
# Joan Massich <[email protected]>
#
# License: BSD Style.

import os.path as op

import mne
from mne.datasets import eegbci
from mne.datasets import fetch_fsaverage

# Download fsaverage files
fs_dir = fetch_fsaverage(verbose=True)
subjects_dir = op.dirname(fs_dir)

# The files live in:
subject = 'fsaverage'
trans = op.join(fs_dir, 'bem', 'fsaverage-trans.fif')
src = op.join(fs_dir, 'bem', 'fsaverage-ico-5-src.fif')
bem = op.join(fs_dir, 'bem', 'fsaverage-5120-5120-5120-bem-sol.fif')

##############################################################################
# Load the data
# -------------
#
# We use here EEG data from the BCI dataset.

raw_fname, = eegbci.load_data(subject=1, runs=[6])
raw = mne.io.read_raw_edf(raw_fname, preload=True)


# Clean channel names to be able to use a standard 1005 montage
ch_names = [c.replace('.', '') for c in raw.ch_names]
raw.rename_channels({old: new for old, new in zip(raw.ch_names, ch_names)})

# Read and set the EEG electrode locations
montage = mne.channels.read_montage('standard_1005', ch_names=raw.ch_names,
transform=True)

raw.set_montage(montage)
raw.set_eeg_reference(projection=True) # needed for inverse modeling

# Check that the locations of EEG electrodes is correct with respect to MRI
mne.viz.plot_alignment(
raw.info, src=src, eeg=['original', 'projected'], trans=trans, dig=True)

##############################################################################
# Setup source space and compute forward
# --------------------------------------

fwd = mne.make_forward_solution(raw.info, trans=trans, src=src,
bem=bem, eeg=True, mindist=5.0, n_jobs=1)
print(fwd)

# for illustration purposes use fwd to compute the sensitivity map
eeg_map = mne.sensitivity_map(fwd, ch_type='eeg', mode='fixed')
eeg_map.plot(time_label='EEG sensitivity', subjects_dir=subjects_dir,
clim=dict(lims=[5, 50, 100]))

0 comments on commit 639b738

Please sign in to comment.