def generate_report(raw, ica, report_savepath): logger.info("Generatingg report") report = Report(verbose=False) fig_topo = ica.plot_components(picks=range(ica.n_components_), show=False) report.add_figs_to_section(fig_topo, section="ICA", captions="Timeseries") report.save(report_savepath, overwrite=True, open_browser=False)
def detect_bad_components(*, cfg, which: Literal['eog', 'ecg'], epochs: mne.BaseEpochs, ica: mne.preprocessing.ICA, subject: str, session: str, report: mne.Report) -> List[int]: evoked = epochs.average() artifact = which.upper() msg = f'Performing automated {artifact} artifact detection …' logger.info( **gen_log_kwargs(message=msg, subject=subject, session=session)) if which == 'eog': inds, scores = ica.find_bads_eog(epochs, threshold=cfg.ica_eog_threshold) else: inds, scores = ica.find_bads_ecg(epochs, method='ctps', threshold=cfg.ica_ctps_ecg_threshold) if not inds: adjust_setting = ('ica_eog_threshold' if which == 'eog' else 'ica_ctps_ecg_threshold') warn = (f'No {artifact}-related ICs detected, this is highly ' f'suspicious. A manual check is suggested. You may wish to ' f'lower "{adjust_setting}".') logger.warning( **gen_log_kwargs(message=warn, subject=subject, session=session)) else: msg = (f'Detected {len(inds)} {artifact}-related ICs in ' f'{len(epochs)} {artifact} epochs.') logger.info( **gen_log_kwargs(message=msg, subject=subject, session=session)) # Mark the artifact-related components for removal ica.exclude = inds # Plot scores fig = ica.plot_scores(scores, labels=which, show=cfg.interactive) report.add_figs_to_section(figs=fig, captions=f'Scores - {artifact}', section=f'sub-{subject}') # Plot source time course fig = ica.plot_sources(evoked, show=cfg.interactive) report.add_figs_to_section(figs=fig, captions=f'Source time course - {artifact}', section=f'sub-{subject}') # Plot original & corrected data fig = ica.plot_overlay(evoked, show=cfg.interactive) report.add_figs_to_section(figs=fig, captions=f'Corrections - {artifact}', section=f'sub-{subject}') return inds
raw = mne.io.read_raw_fif(raw_fif_file, preload=True) # Load the Epochs epoch_fif_file = deriv_path / \ f'{sub_string}_task-{task}_ref-mastoids_desc-cleaned_epo.fif.gz' epochs = mne.read_epochs(epoch_fif_file, preload=True) # Load Epochs json json_file = deriv_path / \ f'{sub_string}_task-{task}_ref-mastoids_desc-cleaned_epo.json' with open(json_file, 'r') as f: json_info = json.load(f) # Plot Sensors fig = bv_montage.plot(show=False) report.add_figs_to_section(fig, captions='EEG: Montage Layout', section='EEG') # Get events events_file = deriv_path / f'{sub_string}_task-{task}_desc-resamp_eve.txt' events = mne.read_events(events_file) fig = mne.viz.plot_events(events, sfreq=raw.info['sfreq'], event_id=event_id, show=False) report.add_figs_to_section(fig, captions='EEG: Events', section='EEG', scale=1.5) # Add PSD plot from raw and epochsepochs fig = plt.figure() fig.set_size_inches(12, 7) ax1 = plt.subplot(221) raw.plot_psd(picks=['eeg'], xscale='linear', ax=ax1, show=False) ax1.set_title('Raw: Linear Scale')
def make_report(subject_id): subject = "sub%03d" % subject_id print("processing %s" % subject) meg_path = op.join(meg_dir, subject) ave_fname = op.join(meg_path, "%s-ave.fif" % subject) rep = Report(info_fname=ave_fname, subject=subject, subjects_dir=subjects_dir) rep.parse_folder(meg_path) evokeds = mne.read_evokeds(op.join(meg_path, '%s-ave.fif' % subject)) fam = evokeds[0] scramb = evokeds[1] unfam = evokeds[2] figs = list() captions = list() fig = fam.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Famous faces') fig = unfam.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Unfamiliar faces') fig = scramb.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Scrambled faces') if 'EEG070' in fam.ch_names: idx = fam.ch_names.index('EEG070') fig = mne.viz.plot_compare_evokeds({'Famous': fam, 'Unfamiliar': unfam, 'Scrambled': scramb}, idx, show=False) figs.append(fig) captions.append('Famous, unfamliliar and scrambled faces on EEG070') fname_trans = op.join(study_path, 'ds117', subject, 'MEG', '%s-trans.fif' % subject) mne.viz.plot_trans(fam.info, fname_trans, subject=subject, subjects_dir=subjects_dir, meg_sensors=True, eeg_sensors=True) fig = mlab.gcf() figs.append(fig) captions.append('Coregistration') rep.add_figs_to_section(figs, captions) for cond in ['faces', 'famous', 'unfamiliar', 'scrambled', 'contrast']: fname = op.join(meg_path, 'mne_dSPM_inverse-%s' % cond) stc = mne.read_source_estimate(fname, subject) brain = stc.plot(views=['ven'], hemi='both') brain.set_data_time_index(112) fig = mlab.gcf() rep._add_figs_to_section(fig, cond) rep.save(fname=op.join(meg_dir, 'report%s.html' % subject), open_browser=False, overwrite=True)
brain.set_data_time_index(112) fig = mlab.gcf() rep._add_figs_to_section(fig, cond) rep.save(fname=op.join(meg_dir, 'report%s.html' % subject), open_browser=False, overwrite=True) # Group report faces_fname = op.join(meg_dir, 'eeg_faces-ave.fif') rep = Report(info_fname=faces_fname, subject='fsaverage', subjects_dir=subjects_dir) faces = mne.read_evokeds(faces_fname)[0] rep.add_figs_to_section(faces.plot(spatial_colors=True, gfp=True, show=False), 'Average faces') scrambled = mne.read_evokeds(op.join(meg_dir, 'eeg_scrambled-ave.fif'))[0] rep.add_figs_to_section(scrambled.plot(spatial_colors=True, gfp=True, show=False), 'Average scrambled') fname = op.join(meg_dir, 'contrast-average') stc = mne.read_source_estimate(fname, subject='fsaverage') brain = stc.plot(views=['ven'], hemi='both', subject='fsaverage', subjects_dir=subjects_dir) brain.set_data_time_index(165) fig = mlab.gcf() rep.add_figs_to_section(fig, 'Average faces - scrambled') rep.save(fname=op.join(meg_dir, 'report_average.html'),
def make_report(subject_id): subject = "sub%03d" % subject_id print("processing %s" % subject) meg_path = op.join(meg_dir, subject) ave_fname = op.join(meg_path, "%s_highpass-%sHz-ave.fif" % (subject, l_freq)) rep = Report(info_fname=ave_fname, subject=subject, subjects_dir=subjects_dir) rep.parse_folder(meg_path) evokeds = mne.read_evokeds(ave_fname) fam = evokeds[0] scramb = evokeds[1] unfam = evokeds[2] figs = list() captions = list() fig = fam.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Famous faces') fig = unfam.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Unfamiliar faces') fig = scramb.plot(spatial_colors=True, show=False, gfp=True) figs.append(fig) captions.append('Scrambled faces') if 'EEG070' in fam.ch_names: idx = fam.ch_names.index('EEG070') fig = mne.viz.plot_compare_evokeds( { 'Famous': fam, 'Unfamiliar': unfam, 'Scrambled': scramb }, idx, show=False) figs.append(fig) captions.append('Famous, unfamliliar and scrambled faces on EEG070') fname_trans = op.join(study_path, 'ds117', subject, 'MEG', '%s-trans.fif' % subject) mne.viz.plot_trans(fam.info, fname_trans, subject=subject, subjects_dir=subjects_dir, meg_sensors=True, eeg_sensors=True) fig = mlab.gcf() figs.append(fig) captions.append('Coregistration') rep.add_figs_to_section(figs, captions) for cond in ['faces', 'famous', 'unfamiliar', 'scrambled', 'contrast']: fname = op.join(meg_path, 'mne_dSPM_inverse_highpass-%sHz-%s' % (l_freq, cond)) stc = mne.read_source_estimate(fname, subject) brain = stc.plot(views=['ven'], hemi='both') brain.set_data_time_index(112) fig = mlab.gcf() rep._add_figs_to_section(fig, cond) rep.save(fname=op.join(meg_dir, 'report%s.html' % subject), open_browser=False, overwrite=True)
fig = mlab.gcf() rep._add_figs_to_section(fig, cond) rep.save(fname=op.join(meg_dir, 'report%s.html' % subject), open_browser=False, overwrite=True) # Group report faces_fname = op.join(meg_dir, 'eeg_faces_highpass-%sHz-ave.fif' % l_freq) rep = Report(info_fname=faces_fname, subject='fsaverage', subjects_dir=subjects_dir) faces = mne.read_evokeds(faces_fname)[0] rep.add_figs_to_section(faces.plot(spatial_colors=True, gfp=True, show=False), 'Average faces') scrambled = mne.read_evokeds(op.join(meg_dir, 'eeg_scrambled-ave.fif'))[0] rep.add_figs_to_section( scrambled.plot(spatial_colors=True, gfp=True, show=False), 'Average scrambled') fname = op.join(meg_dir, 'contrast-average_highpass-%sHz' % l_freq) stc = mne.read_source_estimate(fname, subject='fsaverage') brain = stc.plot(views=['ven'], hemi='both', subject='fsaverage', subjects_dir=subjects_dir) brain.set_data_time_index(165) fig = mlab.gcf()