# Compute DICS beamformer to localize ERS
fwd = mne.read_forward_solution(fname.fwd(subject=subject))

info, fwd, csd = mne.channels.equalize_channels([epochs.info, fwd, csd])
inv = mne.beamformer.make_dics(info,
                               fwd,
                               csd,
                               reduce_rank=True,
                               pick_ori='max-power',
                               inversion='matrix',
                               reg=reg[subject]['dics'])

# Compute source power
stc_baseline, _ = mne.beamformer.apply_dics_csd(csd_baseline, inv)
stc_ers, _ = mne.beamformer.apply_dics_csd(csd_ers, inv)
stc_baseline.subject = fname.subject_id(subject=subject)
stc_ers.subject = fname.subject_id(subject=subject)

# Normalize with baseline power.
stc_ers /= stc_baseline
stc_ers.data = np.log(stc_ers.data)
stc_ers.save(fname.stc_dics(subject=subject))
stc_ers.save_as_volume(fname.nii_dics(subject=subject), src=fwd['src'])

fig = stc_ers.plot(subject=fname.subject_id(subject=subject),
                   subjects_dir=fname.subjects_dir,
                   src=fwd['src'])
with mne.open_report(fname.report(subject=subject)) as report:
    report.add_figs_to_section(fig,
                               'DICS Source estimate',
                               'Source level',
import numpy as np
from config import fname

# Handle command line arguments
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('subject', metavar='sub###', type=int, help='The subject to process')
args = parser.parse_args()
subject = args.subject
print('Processing subject:', subject)

epochs = mne.read_epochs(fname.epochs(subject=subject))
noise_cov = mne.compute_covariance(epochs, tmin=-0.2, tmax=0, method='shrunk')
fwd = mne.read_forward_solution(fname.fwd(subject=subject))
inv = mne.minimum_norm.make_inverse_operator(epochs.info, fwd, noise_cov, depth=None)
stc = mne.minimum_norm.apply_inverse(epochs.average(), inv)
stc.save(fname.stc_mne(subject=subject))

# Find the time point that corresponds to the best dipole fit
dip = mne.read_dipole(fname.ecd(subject=subject))
peak_time = dip[int(np.argmax(dip.gof))].times[0]

stc_peak = abs(stc.copy().crop(peak_time, peak_time).mean())
stc_peak.save(fname.stc_mne(subject=subject))
stc_peak.save_as_volume(fname.nii_mne(subject=subject), src=fwd['src'])

fig = stc.plot(initial_time=peak_time, subject=fname.subject_id(subject=subject), subjects_dir=fname.subjects_dir, src=fwd['src'],
               clim=dict(kind='percent', lims=[99.9, 99.95, 100]))
with mne.open_report(fname.report(subject=subject)) as report:
    report.add_figs_to_section(fig, f'MNE Source estimate at {peak_time}', 'Source level', replace=True)
    report.save(fname.report_html(subject=subject), overwrite=True, open_browser=False)
import mne
import argparse
from mayavi import mlab

from config import fname

# Handle command line arguments
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('subject', metavar='sub###', type=int, help='The subject to process')
args = parser.parse_args()
subject = args.subject
print('Processing subject:', subject)

info = mne.io.read_info(fname.raw(subject=subject, run=1))

bem = mne.make_bem_model(fname.subject_id(subject=subject), ico=4, subjects_dir=fname.subjects_dir,
                         conductivity=[0.3, 0.006, 0.3])
bem_sol = mne.make_bem_solution(bem)
mne.write_bem_solution(fname.bem(subject=subject), bem_sol)
src = mne.setup_volume_source_space(subject=fname.subject_id(subject=subject), bem=bem_sol, subjects_dir=fname.subjects_dir)
fwd = mne.make_forward_solution(info=info, trans=fname.trans(subject=subject), src=src, bem=bem_sol, eeg=True)

# Save things
src.save(fname.src(subject=subject), overwrite=True)
mne.write_forward_solution(fname.fwd(subject=subject), fwd, overwrite=True)

# Visualize source space and MEG sensors
fig = mne.viz.plot_alignment(info=info, trans=fname.trans(subject=subject), subject=fname.subject_id(subject=subject),
                             subjects_dir=fname.subjects_dir, meg='sensors',
                             src=src, bem=bem_sol)
mlab.view(138, 73, 0.6, [0.02, 0.01, 0.03])
Exemple #4
0
# Handle command line arguments
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('subject',
                    metavar='sub###',
                    type=int,
                    help='The subject to process')
args = parser.parse_args()
subject = args.subject
print('Processing subject:', subject)

info = mne.io.read_info(fname.raw(subject=subject, run=1))

# From T1-weighted MRI to forward solution
single_shell = subject in []
bem = mne.make_bem_model(
    fname.subject_id(subject=subject),
    ico=4,
    subjects_dir=fname.subjects_dir,
    conductivity=[0.3] if single_shell else [0.3, 0.006, 0.3])
bem_sol = mne.make_bem_solution(bem)
mne.write_bem_solution(fname.bem(subject=subject), bem_sol)
src = mne.setup_volume_source_space(subject=fname.subject_id(subject=subject),
                                    bem=bem_sol,
                                    subjects_dir=fname.subjects_dir)
fwd = mne.make_forward_solution(info=info,
                                trans=fname.trans(subject=subject),
                                src=src,
                                bem=bem_sol,
                                eeg=not single_shell)

# Save things
evoked = epochs.average().crop(peak_time - 0.005, peak_time + 0.005)
print(evoked)

dip, res = mne.fit_dipole(evoked,
                          noise_cov,
                          bem,
                          trans,
                          n_jobs=n_jobs,
                          verbose=True)
dip = dip[int(np.argmax(dip.gof))]
dip.save(fname.ecd(subject=subject), overwrite=True)

# Plot the result in 3D brain with the MRI image using Nilearn
mri_pos = mne.head_to_mri(dip.pos,
                          mri_head_t=trans,
                          subject=fname.subject_id(subject=subject),
                          subjects_dir=fname.subjects_dir)
t1_fname = op.join(fname.subjects_dir, fname.subject_id(subject=subject),
                   'mri', 'T1.mgz')
fig = plt.figure()
plot_anat(t1_fname,
          cut_coords=mri_pos[np.argmax(dip.gof)],
          title='Dipole loc.',
          figure=fig)
with mne.open_report(fname.report(subject=subject)) as report:
    report.add_figs_to_section(fig,
                               'ECD source location',
                               'Source level',
                               replace=True)
    report.save(fname.report_html(subject=subject),
                overwrite=True,
Exemple #6
0
                               data_cov,
                               reg=reg[subject]['lcmv'],
                               noise_cov=noise_cov,
                               weight_norm='unit-noise-gain',
                               pick_ori='max-power')
stc = mne.beamformer.apply_lcmv(epochs.average(), inv)
stc.save(fname.stc_lcmv(subject=subject))

# Find the time point that corresponds to the best dipole fit
dip = mne.read_dipole(fname.ecd(subject=subject))
peak_time = dip[int(np.argmax(dip.gof))].times[0]

stc_peak = abs(stc.copy().crop(peak_time, peak_time))
stc_peak.save(fname.stc_lcmv(subject=subject))
stc_peak.save_as_volume(fname.nii_lcmv(subject=subject), src=fwd['src'])

stc_power = (stc**2).sqrt()
fig = stc_power.plot(subject=fname.subject_id(subject=subject),
                     subjects_dir=fname.subjects_dir,
                     src=fwd['src'],
                     clim=dict(kind='percent', lims=[99.9, 99.95, 100]),
                     initial_time=peak_time)
with mne.open_report(fname.report(subject=subject)) as report:
    report.add_figs_to_section(fig,
                               f'LCMV Source estimate at {peak_time * 1000}ms',
                               'Source level',
                               replace=True)
    report.save(fname.report_html(subject=subject),
                overwrite=True,
                open_browser=False)