def test_meg_field_interpolation_helmet():
    """Test interpolation of MEG field onto helmet
    """
    evoked = read_evoked(evoked_fname, setno='Left Auditory')
    info = evoked.info
    surf = get_meg_helmet_surf(info)
    # let's reduce the number of channels by a bunch to speed it up
    info['bads'] = info['ch_names'][:200]
    # bad ch_type
    assert_raises(ValueError, make_surface_mapping, info, surf, 'foo')
    # bad mode
    assert_raises(ValueError, make_surface_mapping, info, surf, 'meg',
                  mode='foo')
    # no picks
    evoked_eeg = pick_types_evoked(evoked, meg=False, eeg=True)
    assert_raises(RuntimeError, make_surface_mapping, evoked_eeg.info,
                  surf, 'meg')
    # bad surface def
    nn = surf['nn']
    del surf['nn']
    assert_raises(KeyError, make_surface_mapping, info, surf, 'meg')
    surf['nn'] = nn
    cf = surf['coord_frame']
    del surf['coord_frame']
    assert_raises(KeyError, make_surface_mapping, info, surf, 'meg')
    surf['coord_frame'] = cf
    # now do it
    data = make_surface_mapping(info, surf, 'meg', mode='fast')
    assert_array_equal(data.shape, (304, 106))  # data onto surf
def test_eeg_field_interpolation():
    """Test interpolation of EEG field onto head
    """
    trans = read_trans(trans_fname)
    info = read_info(evoked_fname)
    surf = get_head_surface('sample', subjects_dir=subjects_dir)
    # we must have trans if surface is in MRI coords
    assert_raises(ValueError, make_surface_mapping, info, surf, 'eeg')
    data = make_surface_mapping(info, surf, 'eeg', trans, mode='accurate')
    assert_array_equal(data.shape, (2562, 60))  # maps data onto surf
import mne

data_path = mne.datasets.sample.data_path()
subjects_dir = data_path + '/subjects'
evoked_fname = data_path + '/MEG/sample/sample_audvis-ave.fif'
trans_fname = data_path + '/MEG/sample/sample_audvis_raw-trans.fif'
setno = 'Left Auditory'

trans = mne.read_trans(trans_fname)
evoked = mne.fiff.read_evoked(evoked_fname, setno=setno,
                              baseline=(-0.2, 0.0))
# let's do this in MRI coordinates so they're easy to plot
helmet_surf = mne.get_meg_helmet_surf(evoked.info, trans)
head_surf = mne.get_head_surface('sample', subjects_dir=subjects_dir)

helmet_map = mne.make_surface_mapping(evoked.info, helmet_surf, 'meg', trans,
                                      n_jobs=-1)
head_map = mne.make_surface_mapping(evoked.info, head_surf, 'eeg', trans,
                                    n_jobs=-1)

# let's look at the N100
evoked.crop(0.09, 0.10)
evoked_eeg = mne.fiff.pick_types_evoked(evoked, meg=False, eeg=True)
evoked_meg = mne.fiff.pick_types_evoked(evoked, meg=True, eeg=False)
helmet_data = np.dot(helmet_map, evoked_meg.data[:, 0])
head_data = np.dot(head_map, evoked_eeg.data[:, 0])

# Plot them
from mayavi import mlab
alphas = [1.0, 0.5]
colors = [(0.6, 0.6, 0.6), (1.0, 1.0, 1.0)]
colormap = mne.viz.mne_analyze_colormap(format='mayavi')