Ejemplo n.º 1
0
def test_plot_cov():
    """Test plotting of covariances
    """
    raw = _get_raw()
    cov = read_cov(cov_fname)
    plot_cov(cov, raw.info, proj=True)
    plt.close('all')
Ejemplo n.º 2
0
def test_plot_cov():
    """Test plotting of covariances
    """
    raw = _get_raw()
    cov = read_cov(cov_fname)
    plot_cov(cov, raw.info, proj=True)
    plt.close('all')
Ejemplo n.º 3
0
def test_plot_cov():
    """Test plotting of covariances
    """
    raw = _get_raw()
    cov = read_cov(cov_fname)
    fig1, fig2 = plot_cov(cov, raw.info, proj=True, exclude=raw.ch_names[6:])
    plt.close('all')
Ejemplo n.º 4
0
def test_plot_cov():
    """Test plotting of covariances
    """
    raw = _get_raw()
    cov = read_cov(cov_fname)
    fig1, fig2 = plot_cov(cov, raw.info, proj=True, exclude=raw.ch_names[6:])
    plt.close('all')
Ejemplo n.º 5
0
def test_plot_cov():
    """Test plotting of covariances
    """
    cov = read_cov(cov_fname)
    plot_cov(cov, raw.info, proj=True)
Ejemplo n.º 6
0
def gen_covariances(p, subjects, run_indices, decim):
    """Generate forward solutions

    Can only complete successfully once preprocessing is performed.

    Parameters
    ----------
    p : instance of Parameters
        Analysis parameters.
    subjects : list of str
        Subject names to analyze (e.g., ['Eric_SoP_001', ...]).
    run_indices : array-like | None
        Run indices to include.
    decim : list of int
        The subject decimations.
    """
    for si, subj in enumerate(subjects):
        print('  Subject %2d/%2d...' % (si + 1, len(subjects)), end='')
        cov_dir = op.join(p.work_dir, subj, p.cov_dir)
        if not op.isdir(cov_dir):
            os.mkdir(cov_dir)
        has_rank_arg = 'rank' in get_args(compute_covariance)
        kwargs = dict()
        kwargs_erm = dict()
        if p.cov_rank == 'full':  # backward compat
            if has_rank_arg:
                kwargs['rank'] = 'full'
        else:
            if not has_rank_arg:
                raise RuntimeError(
                    'There is no "rank" argument of compute_covariance, '
                    'you need to update MNE-Python')
            if p.cov_rank is None:
                assert p.compute_rank  # otherwise this is weird
                kwargs['rank'] = _compute_rank(p, subj, run_indices[si])
            else:
                kwargs['rank'] = p.cov_rank
        kwargs_erm['rank'] = kwargs['rank']
        if p.force_erm_cov_rank_full and has_rank_arg:
            kwargs_erm['rank'] = 'full'
        # Use the same thresholds we used for primary Epochs
        if p.autoreject_thresholds:
            reject = get_epochs_evokeds_fnames(p, subj, [])[0][1]
            reject = reject.replace('-epo.fif', '-reject.h5')
            reject = read_hdf5(reject)
        else:
            reject = _handle_dict(p.reject, subj)
        flat = _handle_dict(p.flat, subj)

        # Make empty room cov
        if p.runs_empty:
            if len(p.runs_empty) > 1:
                raise ValueError('Too many empty rooms; undefined output!')
            new_run = safe_inserter(p.runs_empty[0], subj)
            empty_cov_name = op.join(
                cov_dir, new_run + p.pca_extra + p.inv_tag + '-cov.fif')
            empty_fif = get_raw_fnames(p, subj, 'pca', 'only', False)[0]
            raw = read_raw_fif(empty_fif, preload=True)
            raw.pick_types(meg=True, eog=True, exclude='bads')
            use_reject, use_flat = _restrict_reject_flat(reject, flat, raw)
            if 'eeg' in use_reject:
                del use_reject['eeg']
            if 'eeg' in use_flat:
                del use_flat['eeg']
            cov = compute_raw_covariance(raw,
                                         reject=use_reject,
                                         flat=use_flat,
                                         method=p.cov_method,
                                         **kwargs_erm)
            write_cov(empty_cov_name, cov)

        # Make evoked covariances
        for ii, (inv_name, inv_run) in enumerate(zip(p.inv_names, p.inv_runs)):
            cov_name = op.join(
                cov_dir,
                safe_inserter(inv_name, subj) + ('-%d' % p.lp_cut) +
                p.inv_tag + '-cov.fif')
            if run_indices[si] is None:
                ridx = inv_run
            else:
                ridx = np.intersect1d(run_indices[si], inv_run)
            # read in raw files
            raw_fnames = get_raw_fnames(p, subj, 'pca', False, False, ridx)

            raws = []
            first_samps = []
            last_samps = []
            for raw_fname in raw_fnames:
                raws.append(read_raw_fif(raw_fname, preload=False))
                first_samps.append(raws[-1]._first_samps[0])
                last_samps.append(raws[-1]._last_samps[-1])
            _fix_raw_eog_cals(raws)  # safe b/c cov only needs MEEG
            raw = concatenate_raws(raws)
            # read in events
            events = _read_events(p, subj, ridx, raw)
            if p.pick_events_cov is not None:
                old_count = sum(len(e) for e in events)
                if callable(p.pick_events_cov):
                    picker = p.pick_events_cov
                else:
                    picker = p.pick_events_cov[ii]
                events = picker(events)
                new_count = len(events)
                print('  Using %s/%s events for %s' %
                      (new_count, old_count, op.basename(cov_name)))
            # create epochs
            use_reject, use_flat = _restrict_reject_flat(reject, flat, raw)
            baseline = _get_baseline(p)
            epochs = Epochs(
                raw,
                events,
                event_id=None,
                tmin=baseline[0],
                tmax=baseline[1],
                baseline=(None, None),
                proj=False,
                reject=use_reject,
                flat=use_flat,
                preload=True,
                decim=decim[si],
                verbose='error',  # ignore decim-related warnings
                on_missing=p.on_missing,
                reject_by_annotation=p.reject_epochs_by_annot)
            epochs.pick_types(meg=True, eeg=True, exclude=[])
            cov = compute_covariance(epochs, method=p.cov_method, **kwargs)
            if kwargs.get('rank', None) not in (None, 'full'):
                want_rank = sum(kwargs['rank'].values())
                out_rank = compute_whitener(cov,
                                            epochs.info,
                                            return_rank=True,
                                            verbose='error')[2]
                if want_rank != out_rank:
                    # Hopefully we never hit this code path, but let's keep
                    # some debugging stuff around just in case
                    plot_cov(cov, epochs.info)
                    epochs_fnames, _ = get_epochs_evokeds_fnames(
                        p, subj, p.analyses)
                    epochs2 = read_epochs(epochs_fnames[1], preload=True)
                    idx = np.searchsorted(epochs.events[:, 0],
                                          epochs2.events[:, 0])
                    assert len(np.unique(idx)) == len(idx)
                    epochs = epochs[idx]
                    assert np.array_equal(epochs.events[:, 0],
                                          epochs2.events[:, 0])
                    epochs2.pick_types(meg=True, eeg=True, exclude=[])
                    import matplotlib.pyplot as plt
                    plt.figure()
                    for eps in (epochs, epochs2):
                        eps = eps.get_data().transpose([1, 0, 2])
                        eps = eps.reshape(len(eps), -1)
                        plt.plot(
                            np.log10(np.maximum(linalg.svdvals(eps), 1e-50)))
                    epochs.plot()
                    baseline = _get_baseline(p)
                    epochs2.copy().crop(*baseline).plot()
                    raise RuntimeError('Error computing rank')

            write_cov(cov_name, cov)
        print()
Ejemplo n.º 7
0
def test_plot_cov():
    """Test plotting of covariances
    """
    cov = read_cov(cov_fname)
    plot_cov(cov, raw.info, proj=True)