Example #1
0
def get_explained(subject_no, n_comp, n_bads):
    subject = subjects[subject_no]
    raw_fname = root_dir + '%s/passive_raw.fif' % subject
    room_fname = root_dir + '%s/emptyroom_%s.fif' % (subject, subject)
    raw = mne.io.read_raw_fif(raw_fname, preload=True)
    raw_room = mne.io.read_raw_fif(room_fname, preload=True)
    raw.filter(0.5, 70)
    raw_room.filter(1, 70)
    mne.channels.fix_mag_coil_types(raw.info)
    mne.channels.fix_mag_coil_types(raw_room.info)
    picks = mne.pick_types(raw.info, meg='mag', eeg=False, eog=False,
                           stim=False, exclude='bads')
    events = mne.find_events(raw)
    tmin, tmax = -0.1, 0.3

    expes = list(event_id.keys())
    expe = expes[2]
    # reject = dict(grad=4000e-13, mag=1e-12, eog=150e-6)
    reject = None

    # Fit smica
    freqs = np.linspace(1, 70, 41)
    smica = ICA(n_components=n_comp,
                freqs=freqs, rng=0).fit(raw, picks, tol=1e-9,
                                        verbose=100,
                                        n_it_min=3000, em_it=3000,
                                        n_it_lbfgs=3000)
    ica = ICA_mne(n_comp).fit(raw, picks)

    X_room = raw_room.get_data(picks=picks)
    X_room /= np.linalg.norm(X_room)
    Ss = smica.compute_sources(X_room)
    As = smica.A
    del smica
    Ai = ica.get_components()
    Si = np.linalg.pinv(Ai).dot(X_room)

    def greedy_comp(X_room, A, S, n_comp=5):
        bads = []
        vals = []
        Xc = X_room.copy()
        idxs = np.arange(S.shape[0])
        for i in range(n_comp):
            print(i)
            diffs = [np.linalg.norm(Xc - a[:, None] * s)
                     for a, s in zip(A.T[idxs], S[idxs])]
            j = idxs[np.argmin(diffs)]
            bads.append(j)
            Xc -= A[:, j][:, None] * S[j]
            vals.append(np.linalg.norm(Xc))
            idxs = np.delete(idxs, np.where(idxs == j))
        return bads, vals

    bads, vals = greedy_comp(X_room, As, Ss, n_bads)
    badi, vali = greedy_comp(X_room, Ai, Si, n_bads)
    np.save('results/expl_%d_%d_%d.npy' % (subject_no, n_comp, n_bads),
            np.array((vals, vali)))
    return vals, vali
Example #2
0
def process_one(dipole_no, amp, n_components, crop_idx, crop_len=None):
    raw_fname = "%sAmp%d_Dip%d_IASoff.fif" % (get_root_dir(), amp, dipole_no)
    raw = read_raw_fif(raw_fname)
    raw.load_data()
    raw.crop(5, None)
    if crop_len is not None:
        raw.crop(crop_idx * crop_len, (crop_idx + 1) * crop_len)
    raw.fix_mag_coil_types()
    events = find_events(raw, "SYS201")
    picks = mne.pick_types(raw.info,
                           meg="mag",
                           eeg=False,
                           eog=False,
                           stim=False,
                           exclude="bads")
    n_bins = 40

    freqs = np.linspace(1, 70, n_bins + 1)
    smica = ICA(n_components, freqs, rng=0).fit(
        raw,
        picks=picks,
        em_it=50000,
        n_it_lbfgs=200,
        tol=1e-8,
        verbose=100,
        n_it_min=10000,
    )

    ica = ICA_mne(n_components, method="picard").fit(raw.copy().filter(1, 70),
                                                     picks=picks)
    jdiag = JDIAG_mne(n_components, freqs, rng=0).fit(raw, picks=picks)

    tmin, tmax = -0.1, 0.1
    event_id = [dipole_no]
    # pows = np.linalg.norm(smica.A, axis=0) *
    #                       np.linalg.norm(smica.powers, axis=0) ** .5
    raw_max = raw.copy().filter(1, 40)
    raw_max = maxwell_filter(raw_max, origin=(0.0, 0.0, 0.0))
    epochs = mne.Epochs(
        raw_max,
        events,
        event_id,
        tmin,
        tmax,
        baseline=(None, -0.01),
        preload=True,
        picks=picks,
    )
    cov = mne.compute_covariance(epochs, tmax=0)
    e1 = get_error(epochs, cov)
    e_2 = get_error_A(smica.A, cov, epochs.info)
    good = np.argmin(e_2[0])
    e2 = [e_2[0][good], e_2[1][good]]

    e_3 = get_error_A(jdiag.A, cov, epochs.info)
    good = np.argmin(e_3[0])
    e3 = [e_3[0][good], e_3[1][good]]

    e_4 = get_error_A(ica.get_components(), cov, epochs.info)
    good = np.argmin(e_4[0])
    e4 = [e_4[0][good], e_4[1][good]]
    crop_str = crop_len if crop_len is not None else 0
    np.save(
        "results/phantom_%d_%d_%d_%d_%d.npy" %
        (dipole_no, amp, n_components, crop_idx, crop_str),
        np.array([e1, e2, e3, e4]),
    )
    print(e1, e2, e3, e4)
    return e1, e2, e3, e4
Example #3
0
colors = ["k", "darkred", "forestgreen", "royalblue", "orange"]

# Plot the clusters

# smica.plot_extended(sort=False)

bad_sources = [17, 18, 19]

X_filtered = smica.filter(
    raw._data[picks], bad_sources=bad_sources, method="wiener"
)
raw_filtered = raw.copy()
raw_filtered._data[picks] = X_filtered

raw.filter(1, 70)
ica = ICA_mne(n_components=20, method="fastica", random_state=0)
ica.fit(raw, picks=picks)

sources = ica.get_sources(raw).get_data()
ica_mne = transfer_to_ica(
    raw, picks, freqs, ica.get_sources(raw).get_data(), ica.get_components()
)

# ica_mne.plot_extended(sources, sort=False)
bads_infomax = [0, 1, 2]
X_ifmx = ica_mne.filter(
    raw._data[picks], bad_sources=bads_infomax, method="pinv"
)
raw_ifmx = raw.copy()
raw_ifmx._data[picks] = X_ifmx
# We identify that clusters 6, 7, 8, 9 correspond to noise
smica = ICA(n_components=n_components, freqs=freqs, rng=0)
smica.fit(raw, picks=picks, verbose=100, tol=1e-10, em_it=100000)

# Plot powers

# noise_sources = [6, 8, 9]
# muscle_source = [7]
# f, ax = plt.subplots(figsize=(4, 2))
# plot_powers(smica.powers, noise_sources, muscle_source, ax, 'smica')
# plt.show()
# #
# #
# sobi = SOBI_mne(100, n_components, freqs, rng=0)
# sobi.fit(raw, picks=picks)
raw.filter(2, 70)
ica = ICA_mne(n_components=n_components, method='fastica', random_state=0)
ica.fit(raw, picks=picks)

ica_mne = transfer_to_ica(raw, picks, freqs,
                          ica.get_sources(raw).get_data(),
                          ica.get_components())

brain_sources = smica.compute_sources()
K, W, _ = picard(brain_sources,
                 ortho=False,
                 verbose=True,
                 random_state=0,
                 max_iter=1000)
picard_mix = np.linalg.pinv(W @ K)
A_wiener = smica.A.dot(picard_mix)
gof_wiener = dipolarity(A_wiener, raw, picks, fname_bem, n_jobs=3)[0]
Example #5
0
    return order


n_bins = 40
freqs = np.linspace(1, 70, n_bins + 1)
n_comp = 40
smica_room = ICA(10, freqs=freqs, rng=0).fit(raw_room, picks)
jdiag_room = JDIAG_mne(10, freqs=freqs, rng=0).fit(raw_room, picks=picks)
smica = ICA(n_comp, freqs=freqs, rng=0).fit(raw, picks=picks)
to_plot_smica = [37, 38, 39, 20, 4, 3, 19, 8, 12, 2]
raw.filter(1, 70)
jdiag = JDIAG_mne(n_comp, freqs=freqs, rng=0).fit(raw, picks=picks)
to_plot_jdiag = [2, 1, 0, 13, 34, 3, 20, 30, 5, 10]
sobi = SOBI_mne(100, n_comp, freqs).fit(raw, picks=picks)
to_plot_sobi = [2, 0, 8, 12, 20, 31, 3, 17, 9, 10]
ifmx_ = ICA_mne(n_comp, random_state=0).fit(raw, picks=picks)
ifmx = transfer_to_ica(raw, picks, freqs,
                       ifmx_.get_sources(raw).get_data(),
                       ifmx_.get_components())
to_plot_ifmx = [1, 2, 0, 35, 33, 19, 3, 32, 25, 9]
plot_args = dict(number=True, t_min=2, t_max=4)

pow_lims = [(np.min(algo.powers), np.max(algo.powers))
            for algo in [smica, jdiag, sobi, ifmx]]
y_lim = 0.0001, 0.21

for algo, sort, method, name in zip(
    [smica, jdiag, sobi, ifmx],
    [to_plot_smica, to_plot_jdiag, to_plot_sobi, to_plot_ifmx],
    ['wiener', 'pinv', 'pinv', 'pinv'], ['smica', 'jdiag', 'sobi', 'ifmx']):
Example #6
0
plt.show()


smica = ICA(n_components=n_components, freqs=freqs, rng=0)
smica.fit(raw, picks=picks, verbose=100, tol=1e-10, em_it=100000)

# Plot powers

noise_sources = [6, 8, 9]
muscle_source = [7]
f, ax = plt.subplots(figsize=(4, 2))
plot_powers(smica.powers, noise_sources, muscle_source, ax, 'smica')
plt.show()


ica = ICA_mne(n_components=n_components, method='picard', random_state=0)
ica.fit(raw, picks=picks)

ica_mne = transfer_to_ica(raw, picks, freqs,
                          ica.get_sources(raw).get_data(),
                          ica.mixing_matrix_)

noise_sources = [1, 2]
muscle_source = [4]
f, ax = plt.subplots(figsize=(4, 2))
plot_powers(ica_mne.powers, noise_sources, muscle_source, ax, 'infomax')
plt.show()


sobi = SOBI_mne(p=2000, n_components=n_components, freqs=freqs, rng=0)
sobi.fit(raw, picks=picks, verbose=True, tol=1e-7, max_iter=10000)