# 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])
# 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,
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)