invert

  • Base Class
  • Solvers
  • Adapters
  • Gallery
  • Tutorial
On this page
  • Ground Truth
  • Minimum Norm/Current Estimates
  • LORETA
  • Bayes
  • Matching Pursuit
  • Smooth Matching Pursuit
  • Artificial Neural Networks
  • MUSIC
  • Beamformers
  • MISC

Gallery#

The Gallery showcases all solvers with an example inverse solution for a small source patch projected to 64 EEG channels with high signal-to-noise ratio. The code that generated the data, the inverse solutions and saved the results is given as follows:

Import functions and create a generic Forward Model:

%matplotlib inline
%load_ext autoreload
%autoreload 2
import sys; sys.path.insert(0, '../')
import numpy as np
from matplotlib import pyplot as plt
from scipy.stats import pearsonr
import mne

from invert.forward import get_info, create_forward_model
from invert.util import pos_from_forward
pp = dict(surface='inflated', hemi='both', clim=dict(kind="percent", pos_lims=(0, 99, 100)), colorbar=False, verbose=0)

info = get_info(kind='biosemi64')
fwd = create_forward_model(info=info, sampling='ico3')

pos = pos_from_forward(fwd)
leadfield = fwd["sol"]["data"]
n_chans, n_dipoles = leadfield.shape
source_model = fwd['src']
vertices = [source_model[0]['vertno'], source_model[1]['vertno']]

Next we simulate a sample using the invert data generator:

from invert.solvers.esinet import generator

sim_params = dict(
    use_cov=False,
    return_mask=False,
    batch_repetitions=1,
    batch_size=1,
    n_sources=1,
    n_orders=(2, 3),
    snr_range=(100, 101),
    n_timecourses=1,
    scale_data=False)


gen = generator(fwd, **sim_params)
x, y = gen.__next__()

tmin = 0
tstep = 1/info["sfreq"]
subject = "fsaverage"
evoked = mne.EvokedArray(x[0].T, info, tmin=tmin)
stc = mne.SourceEstimate(y[0].T, vertices, tmin=tmin, tstep=tstep,
                        subject=subject, verbose=0)

Here we calculate all inverse solutions and plot them:

%matplotlib inline
from invert import Solver
from invert.config import all_solvers

# Plot Ground Truth
stc.data /= abs(stc.data[:, 0]).max()
clim = dict(kind="values", pos_lims=(0., 0.5, 1))
pp["clim"] = clim
brain = stc.plot(**pp, brain_kwargs=dict(title="Ground Truth"))
brain.add_text(0.1, 0.9, "Ground Truth", 'title', font_size=16)
img = brain.screenshot()
brain.close()

plt.figure()
plt.imshow(img)
plt.axis("off")
fname = f"../figures/solver_gallery/GroundTruth"
plt.savefig(fname, dpi=150)
plt.close()

# Plot Source Estimates
for solver_name in all_solvers[15:][::-1]:
    solver = Solver(solver_name)
    solver.make_inverse_operator(fwd, evoked)
    stc_ = solver.apply_inverse_operator(evoked)
    stc_.data /= abs(stc_.data[:, 0]).max()
    clim = dict(kind="values", pos_lims=(0., 0.5, 1))
    pp["clim"] = clim
    brain = stc_.plot(**pp, brain_kwargs=dict(title=solver.name))
    brain.add_text(0.1, 0.9, solver.name, 'title', font_size=16)
    img = brain.screenshot()
    brain.close()

    fig = plt.figure()
    plt.imshow(img)
    plt.axis("off")

    fname = f"../figures/solver_gallery/{solver.name}"
    plt.savefig(fname, dpi=150)
    plt.close()

Ground Truth#

../_images/GroundTruth.png

Minimum Norm/Current Estimates#

solver = Solver("MNE")
../_images/MinimumNormEstimate.png
solver = Solver("wMNE")
../_images/WeightedMinimumNormEstimate.png
solver = Solver("dSPM")
../_images/DynamicStatisticalParametricMapping.png
solver = Solver("FISTA")
../_images/MinimumCurrentEstimate.png
solver = Solver("L1L2")
../_images/MinimumL1-L2Norm.png

LORETA#

solver = Solver("LORETA")
../_images/LowResolutionTomography.png
solver = Solver("sLORETA")
../_images/StandardizedLowResolutionTomography.png
solver = Solver("eLORETA")
../_images/ExactLowResolutionTomography.png

Bayes#

solver = Solver("Source-MAP")
../_images/Source-MAP.png
solver = Solver("Gamma-MAP")
../_images/Gamma-MAP.png
solver = Solver("Source-MAP-MSP")
../_images/Source-MAP-MSP.png
solver = Solver("Gamma-MAP-MSP")
../_images/GAMMA-MAP-MSP.png
solver = Solver("Champagne")
../_images/Champagne.png
solver = Solver("MM Champagne")
../_images/MM-Champagne.png
solver = Solver("LowSNR Champagne")
../_images/LowSNR-Champagne.png
solver = Solver("MacKay Champagne")
../_images/MacKay-Champagne.png
solver = Solver("Convexity Champagne")
../_images/Convexity-Champagne.png
solver = Solver("Homoscedasticity Champagne")
../_images/HS-Champagne.png
solver = Solver("FUN")
../_images/FUN.png
solver = Solver("BCS")
../_images/BayesianCompressedSensing.png

Matching Pursuit#

solver = Solver("OMP")
../_images/OrthogonalMatchingPursuit.png
solver = Solver("SOMP")
../_images/SimultaneousOrthogonalMatchingPursuit.png
solver = Solver("CoSaMP")
../_images/CompressedSamplingMatchingPursuit.png
solver = Solver("SSP")
../_images/SimultaneousSubspacePursuit.png
solver = Solver("SP")
../_images/SubspacePursuit.png

Smooth Matching Pursuit#

solver = Solver("SOMP")
../_images/SmoothMatchingPursuit.png
solver = Solver("SSMP")
../_images/SmoothSimultaneousMatchingPursuit.png
solver = Solver("SubSMP")
../_images/SubspaceSmoothMatchingPursuit.png

Artificial Neural Networks#

solver = Solver("FC")
../_images/Fully-Connected.png
solver = Solver("CNN")
../_images/CNN.png
solver = Solver("Cov-CNN")
../_images/Cov-CNN.png
solver = Solver("LSTM")
../_images/LSTM.png

MUSIC#

solver = Solver("MUSIC")
../_images/MUSIC.png
solver = Solver("RAP-MUSIC")
../_images/RAP-MUSIC.png
solver = Solver("TRAP-MUSIC")
../_images/TRAP-MUSIC.png
solver = Solver("FLEX-MUSIC")
../_images/FLEX-MUSIC.png

Beamformers#

solver = Solver("MVAB")
../_images/MinimumVarianceAdaptiveBeamformer.png
solver = Solver("LCMV")
../_images/LCMVBeamformer.png
solver = Solver("SMV")
../_images/SMVBeamformer.png
solver = Solver("WNMV")
../_images/WNMVBeamformer.png
solver = Solver("HOCMV")
../_images/HOCMVBeamformer.png
solver = Solver("ESMV")
../_images/ESMVBeamformer.png
solver = Solver("MCMV")
../_images/MCMVBeamformer.png
solver = Solver("HOCMCMV")
../_images/HOCMCMVBeamformer.png
solver = Solver("ReciPSIICOS")
../_images/ReciPSIICOS.png
solver = Solver("SAM")
../_images/SAMBeamformer.png

MISC#

solver = Solver("Backus-Gilbert")
../_images/Backus-Gilbert.png
solver = Solver("GPT")
../_images/GPTSolver.png
solver = Solver("EPIFOCUS")
../_images/EPIFOCUS.png
solver = Solver("LAURA")
../_images/LocalAuto-RegressiveAverage.png
solver = Solver("S-MAP")
../_images/S-MAP.png

previous

Spatio-Temporal Matching Pursuit Contextualizer (STAMP-C)

next

Tutorial

© Copyright 2022, Lukas Hecker.

Created using Sphinx 4.5.0.