question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Leadfield normalization for LCMV beamformer

See original GitHub issue

The LCMV beamformer is still lacking the option of leadfield normalization, see #5365 and #4659. The DICS beamformer has two options of leadfield normalization implemented, column wise or Frobenius norm. Leadfield normalization is controlled by the parameter normalized_fwd, while the type of leadfield normalization is controlled by inversion, which also controls the inversion during the computation of the spatial filter itself. This issue is to serve as a discussion point for how we want to implement the leadfield normalization in LCMV and whether those options should remain like that in DICS.

ping @agramfort @wmvanvliet @sarangnemo

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:15 (15 by maintainers)

github_iconTop GitHub Comments

1reaction
britta-wstnrcommented, Jan 27, 2019

@agramfort is right, leadfield normalization is crucial with unit-gain LCMVs (if no condition contrast is done) since otherwise there is a strong bias to the head center in the output (the output is basically meaningless). So yes, we do need this option in case someone wants to run the unit-gain and not the unit-noise-gain variant of the LCMV.

I am personally not aware of publications on those inversion options for the LCMV, so I would be hesitant to implement them there without exhaustive testing.

0reactions
larsonercommented, Feb 21, 2019

I’ve started looking into using the new unified _prepare_forward for leadfield normalization (#5947) in LCMV and DICS. In theory it should reduce code duplication and put all our leadfield normalization code in one place.

One other thing I noticed, though, is that proj is applied with potentially more channels in the forward operator than it is to Cm:

proj, ncomp, _ = make_projector(info['projs'], fwd_ch_names)
if info['projs']:
     G = np.dot(proj, G)
G = G[picks_forward]
proj = proj[np.ix_(picks_forward, picks_forward)]

This reduced proj is returned by _prepare_beamformer_input, and then applied with Cm = np.dot(proj, np.dot(Cm, proj.T)) (at least for LCMV).

It seems a bit weird to apply one operator to G, then a subselected one to Cm. Simplifying it to the following, which is more consistent with what (implicitly) happens in the minimum norm and mixed norm code:

proj, ncomp, _ = make_projector(info['projs'], fwd_ch_names)
proj = proj[np.ix_(picks_forward, picks_forward)]
G = np.dot(proj, G[picks_forward])

At least does not break any tests. @britta-wstnr is this change okay for you?

Read more comments on GitHub >

github_iconTop Results From Across the Web

[FieldTrip] Normalization of beamformer leadfields
Hi Nicole, Lead field normalization is a different approach than Van ... which you can run with: cfg.method = 'lcmv'; cfg.lcmv.weightnorm ...
Read more >
Localizing sources using beamformer techniques
You will learn how to compute and select appropriate time windows, create an appropriate head model and lead field matrix, and various options ......
Read more >
Source Activity Correlation Effects on LCMV Beamformers in a ...
A linear constrained minimum variance (LCMV) beamformer is applied to the ... At each grid point (voxel), the full rank-3 leadfield is calculated, ......
Read more >
A unified view on beamformers for M/EEG source ...
In Section 2.2, we will look at different spatial normalization ... (2001) introduced a variant of the LCMV beamformer, the dynamic imaging ...
Read more >
mne.beamformer.make_lcmv
mne.beamformer.make_lcmv(info, forward, data_cov, reg=0.05, noise_cov=None, ... for weight-normalized beamformer output that is scaled by a noise estimate.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found