EOG: Please help distinguish blinks from saccades

Dear community, I have a few questions about the mne algorithms for identifying EOG events in case there is more than 1 EOG channel present.

  1. if there are 2 EOG channels in the MEG data set (Elekta Neuromag) is there a way to find out which of the 2 channels contains the recording of blinks (is vertical) and which saccades (is horizontal) based on the data from the .fif file? Currently, I am mostly interested in identifying the channel which has blinks recording.
    I will be working with multiple data sets, which usually do not have supplementary information about channel placement and were not recorded by me.
    MNE’s log messages when running find_eog_events contain “… help distinguish blinks from saccades”, which tells me that MNE has a way of detecting a channel responsible for blinks.

  2. Does find_eog_events() identify as events only blinks or both blinks and saccades? So far my understanding was that it only identifies blinks.

  3. To identify blink events, will the information be collected from both EOG channels (if 2 present) or will the algorithm first identify 1 vertical channel and only find events based on this channel?

  1. Internally if there are multiple EOG channels we choose the one that has the highest power (after bandpass filtering between 1 and 10 Hz) and assume that it must be blinks (because the voltage deflections caused by blinks are much larger than those of saccades, esp. in that frequency band). I suppose you could try running find_eog_events with both channels, then separately on each channel, and see which single-channel result best matches the two-channel result?

  2. only blinks

  3. only the channel that we think is VEOG (i.e., the one that has highest average power after filtering)

Is there maybe a way to output the name of that one channel that has the highest power?

it would be possible in theory but it’s not currently implemented that way. I’ve opened add logging message about which EOG channel used for blink detection by drammock · Pull Request #11757 · mne-tools/mne-python · GitHub to add this to the output log. Now it should say

Using EOG channels: VEOG, HEOG
EOG channel index for this subject is: [307 308]
Filtering the data to remove DC offset to help distinguish blinks from saccades
Selecting channel VEOG for blink detection  # <---- this is the new line
Setting up band-pass filter from 1 - 10 Hz
1 Like

Jumping in on this because I just read it in my email - shouldn’t the blinks look very different than saccades in the raw data? What do the time courses look like? Typically blink EOG would be vertical deflections in the data that have a kind of “V” shape, while saccades could look like square waves depending on if they actually move their eyes enough to the left or right.

1 Like

I am actually looking for a way to output the blinks channel automatically without extra visual inspection. This will need to be done for multiple data sets, and the channel name will be needed to further calculation.
It could probably be possible to write an algorithm that will look through both channels and try to identify the right shape, but if there is already some way implemented by mne, this would be easier.

Thank you! This is very useful. This update is not included in the last currently. When approximately could I expect it to be installable?

indeed! but the backstory here is "how do I know which channel MNE used to identify blinks if: (1) I have multiple EOG channels, (2) they don’t have informative names like HEOG vs VEOG, and (3) I have lots and lots of subjects to process so I don’t want to do it manually. I’ve added a new log message to MNE-Python so that now at least we tell the user which channel we ended up (automatically) choosing.

You can install it now if you use the development version: Updating MNE-Python — MNE 1.7.0.dev5+g44c787fd4 documentation The next stable release will probably be around mid-september, and will include this change.

1 Like