Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In 2013, Antoine Ducorps noticed, and discussed with GEORGE Nathalie George , about raw data containing step-like artifacts after applying tSSS.

...

This is why we are typically using st 2000 in Maxfilter command lines, and st_duration=raw.times[-1] when calling mne.maxwell_filter.

Related discussion on MNE forum: https://mne.discourse.group/t/maxfilter-broadband-artifact/6717/6

I try to recap for the record what I've been looking at here:

  • I start with very large artifacts on the raw data at some channels. These are due to metallic parts present in the face of rare patients whose data we would like to keep as much as possible.

The raw file looks like this (with only ssp projectors on):

Image Added

mne.preprocessing.maxwell_filter(raw, st_duration=10)

...

mne.preprocessing.maxwell_filter(raw, st_duration=raw.times[-1])

...

Now looking at spectra and topos shows the following (HFO = 250-500Hz):

...

My impression is that the strong low freq artifacts in the raw data are "spread" through all bands, even where they are not present originally: Orange lines (right temporal) rise across the spectrum in tsss files compared to orig. The artifact is present with st_duration=10 as well as with st_duration=times[-1].

I recall observing similar behavior with ICA "spreading" strong artifacts when removing components.

Trying to set st_correlation=0.95 to reject more components --> worse if anything.

...

st_correlation=0.99

...

Now only SSS:

...


To me discarding components with tsss injects this noise across frequencies. I don't know the "mechanics" of that, but it is something not unheard of in linear source separation methods when unmixing, discarding, remixing signals.

Code to generate those panels:

Code Block
fig, axes = plt.subplot_mosaic('''''''''
AABCD
AAEFG
HHIJK
HHLMN
OOPQR
OOSTU
''''''''',figsize=(14, 10))

sp = {}
sp['orig'] = raws['orig'].compute_psd(picks = 'mag')
sp['orig'].plot(axes = axes['A'],xscale='log')
axes['A'].set_title('orig')
sp['orig'].plot_topomap(axes = [axes['B'],axes['C'],axes['D'],axes['E'],axes['F'], axes['G']],
                        show=False,
                        bands={'delta':[1,4], 'theta':[4,8], 'alpha':[8,12], 'beta':[12,30], 'gamma':[30,80], 'HFO':[250,500]})

sp['tsss_10'] = raws['tsss_10'].compute_psd(picks = 'mag')
sp['tsss_10'].plot(axes=axes['H'],xscale='log')
axes['H'].set_title('tsss_10')
sp['tsss_10'].plot_topomap(axes=[axes['I'],axes['J'],axes['K'],axes['L'], axes['M'], axes['N']],
                           show=False,
                           bands={'delta':[1,4], 'theta':[4,8], 'alpha':[8,12], 'beta':[12,30], 'gamma':[30,80], 'HFO':[250,500]})

sp['tsss_full'] = raws['tsss_full'].compute_psd(picks = 'mag')
sp['tsss_full'].plot(axes=axes['O'],xscale='log')
axes['O'].set_title('tsss_full')
sp['tsss_full'].plot_topomap(axes=[axes['P'],axes['Q'],axes['R'],axes['S'], axes['T'], axes['U']],
                             show=False,
                             bands={'delta':[1,4], 'theta':[4,8], 'alpha':[8,12], 'beta':[12,30], 'gamma':[30,80], 'HFO':[250,500]})