Skip to content

Commit

Permalink
ENH load.fiff: fall-back to automatic connectivity
Browse files Browse the repository at this point in the history
  • Loading branch information
christianbrodbeck committed Sep 3, 2021
1 parent 8f9d7ab commit 3023993
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
4 changes: 3 additions & 1 deletion eelbrain/_data_obj.py
Original file line number Diff line number Diff line change
Expand Up @@ -7745,10 +7745,12 @@ def __init__(
self._connectivity_type, self._connectivity = self._connectivity_arg(connectivity)

def _connectivity_arg(self, connectivity: Union[str, Sequence]):
if isinstance(connectivity, str) or len(connectivity) == 0:
if isinstance(connectivity, str):
if connectivity not in self._CONNECTIVITY_TYPES and connectivity != 'custom':
raise ValueError(f"{connectivity=}")
return connectivity, None
elif len(connectivity) == 0:
return 'none', None
elif isinstance(connectivity, np.ndarray) and connectivity.dtype == np.uint32:
# assume that connectivity is inherited, skip checks
return 'custom', connectivity
Expand Down
29 changes: 20 additions & 9 deletions eelbrain/_io/fiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -752,23 +752,34 @@ def sensor_dim(
raise ValueError(f"Unknown channel unit for sysname={sysname!r}: {ch_unit!r}")

if connectivity is None:
connectivity = sysname # or 'auto'
connectivity = sysname or 'auto'

ch_type = None
if connectivity == 'auto':
ch_types = find_mne_channel_types({'chs': chs})
if len(ch_types) == 1:
ch_type = ch_types[0]
if ch_type == 'eog':
connectivity = 'none'
else:
# TODO: connectivity for vector data
connectivity = 'none'

if connectivity in ('grid', 'none'):
pass
elif isinstance(connectivity, str):
if connectivity == 'auto':
ch_type = _guess_ndvar_data_type({'chs': chs})
c_matrix, names = mne.channels.find_ch_adjacency(info, ch_type)
fix_ch_names = any(ch not in names for ch in ch_names)
else:
c_matrix, names = mne.channels.read_ch_adjacency(connectivity)
if connectivity.startswith('neuromag'):
vec_ids = {name[-1] for name in ch_names}
if len(vec_ids) > 1:
raise NotImplementedError("Connectivity for Neuromag vector data")
vec_id = vec_ids.pop()
# fix channel names
names = [f'MEG {n[3:-1]}{vec_id}' for n in names]
fix_ch_names = connectivity.startswith('neuromag')

if fix_ch_names:
vec_ids = {name[-1] for name in ch_names}
if len(vec_ids) > 1:
raise NotImplementedError("Connectivity for Neuromag vector data")
names = [f'{n[:3]} {n[3:]}' for n in names]

# fix channel order
if names != ch_names:
Expand Down

0 comments on commit 3023993

Please sign in to comment.