Adaptive Flexible-Extent ESMV¶
Solver ID: ADAPT_FLEX_ESMV
Usage¶
from invert import Solver
# fwd = ... (mne.Forward object)
# evoked = ... (mne.Evoked object)
solver = Solver("ADAPT_FLEX_ESMV")
solver.make_inverse_operator(fwd)
stc = solver.apply_inverse_operator(evoked)
stc.plot()
Overview¶
Adaptive multi-order diffusion-smoothed extension of an ESMV beamformer that selects the smoothing order per source location.
References¶
- Lukas Hecker (2025). Unpublished.
- Jonmohamadi, Y., Poudel, G., Innes, C., Weiss, D., Krueger, R., & Jones, R. (2014). Comparison of beamformers for EEG source signal reconstruction. Biomedical Signal Processing and Control, 14, 175-188.
API Reference¶
Bases: BaseSolver
Flexible-Extent Adaptive Eigenspace Minimum Variance Beamformer.
Extends AdaptiveESMV with diffusion-smoothed leadfield dictionaries (the FLEX approach from Hecker et al. 2023). For each source location, the beamformer is evaluated at multiple smoothness orders (point source, small patch, medium patch, ...) and the order yielding the highest beamformer output power is selected. The corresponding gradient matrix maps the smoothed source estimate back to the original source grid.
This allows the beamformer to adapt its spatial resolution per source: - Isolated point sources: order 0 (standard beamformer, no smoothing) - Extended patch sources: higher order (diffusion-smoothed leadfield)
The core beamformer at each order uses AdaptiveESMV's gap-adaptive Wiener eigenspace projection.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
n_orders
|
int
|
Number of smoothing orders (0 = point only, 3 = up to 3 diffusion steps). |
3
|
diffusion_parameter
|
float
|
Diffusion constant for the smoothing operator S = I - α·L_graph. |
0.1
|
adjacency_type
|
str
|
"spatial" (graph neighbors) or "distance" (Euclidean threshold). |
'spatial'
|
Source code in invert/solvers/beamformers/adapt_flex_esmv.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | |
__init__ ¶
__init__(
name="AdaptFlexESMV Beamformer",
reduce_rank=True,
rank="auto",
n_orders=3,
diffusion_parameter=0.1,
adjacency_type="spatial",
adjacency_distance=0.003,
**kwargs,
)
Source code in invert/solvers/beamformers/adapt_flex_esmv.py
make_inverse_operator ¶
Source code in invert/solvers/beamformers/adapt_flex_esmv.py
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | |