Source code for mne_nirs.channels._channels

# Authors: Robert Luke <mail@robertluke.net>
#
# License: BSD (3-clause)

import re

import numpy as np
from mne import pick_types
from mne.io import BaseRaw
from mne.utils import _validate_type


[docs] def list_sources(raw): """ List all the sources in the fNIRS montage. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. Returns ------- sources : list Unique list of all sources in ascending order. """ _validate_type(raw, BaseRaw, "raw") picks = pick_types(raw.info, meg=False, eeg=False, fnirs=True, exclude=[]) if not len(picks): raise RuntimeError("Listing source is for fNIRS signals only.") sources = list() ch_names = raw.ch_names for pick in picks: x = re.search(r"S(\d+)_D(\d+)", ch_names[pick]) sources.append(int(x.group(1))) sources = np.unique(sources) return sources
[docs] def list_detectors(raw): """ List all the detectors in the fNIRS montage. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. Returns ------- sources : list Unique list of all detectors in ascending order. """ _validate_type(raw, BaseRaw, "raw") picks = pick_types(raw.info, meg=False, eeg=False, fnirs=True, exclude=[]) if not len(picks): raise RuntimeError("Listing source is for fNIRS signals only.") detectors = list() ch_names = raw.ch_names for pick in picks: x = re.search(r"S(\d+)_D(\d+)", ch_names[pick]) detectors.append(int(x.group(2))) detectors = np.unique(detectors) return detectors
[docs] def drop_sources(raw, sources): """ Drop sources. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. sources : iterable or str Iterable (e.g. list) of source(s) or source to remove. Returns ------- inst : instance of Raw The modified instance. """ if isinstance(sources, int): sources = [sources] try: all_str = all([isinstance(src, int) for src in sources]) except TypeError: raise ValueError( "'ch_names' must be iterable, got " f"type {type(sources)} ({sources})." ) if not all_str: raise ValueError( "Each element in 'ch_names' must be int, got " f"{[type(ch) for ch in sources]}." ) keeps = np.ones(len(raw.ch_names)) for src in sources: template = f"S{src}_" for idx in range(len(raw.ch_names)): if template in raw.ch_names[idx]: keeps[idx] = 0 keeps = np.where(keeps)[0] return raw.pick(keeps)
[docs] def drop_detectors(raw, detectors): """ Drop detectors. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. detectors : iterable or str Iterable (e.g. list) of detector(s) or detector to remove. Returns ------- inst : instance of Raw The modified instance. """ if isinstance(detectors, int): detectors = [detectors] try: all_str = all([isinstance(det, int) for det in detectors]) except TypeError: raise ValueError( "'ch_names' must be iterable, got " f"type {type(detectors)} ({detectors})." ) if not all_str: raise ValueError( "Each element in 'ch_names' must be int, got " f"{[type(det) for det in detectors]}." ) keeps = np.ones(len(raw.ch_names)) for det in detectors: template = f"_D{det} " for idx in range(len(raw.ch_names)): if template in raw.ch_names[idx]: keeps[idx] = 0 keeps = np.where(keeps)[0] return raw.pick(keeps)
[docs] def pick_sources(raw, sources): """ Pick sources. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. sources : iterable or str Iterable (e.g. list) of source(s) or source to keep. Returns ------- inst : instance of Raw The modified instance. """ if isinstance(sources, int): sources = [sources] try: all_str = all([isinstance(src, int) for src in sources]) except TypeError: raise ValueError( "'ch_names' must be iterable, got " f"type {type(sources)} ({sources})." ) if not all_str: raise ValueError( "Each element in 'ch_names' must be int, got " f"{[type(ch) for ch in sources]}." ) keeps = np.zeros(len(raw.ch_names)) for src in sources: template = f"S{src}_" for idx in range(len(raw.ch_names)): if template in raw.ch_names[idx]: keeps[idx] = 1 keeps = np.where(keeps)[0] return raw.pick(keeps)
[docs] def pick_detectors(raw, detectors): """ Pick detectors. Parameters ---------- raw : instance of Raw Raw instance containing fNIRS data. detectors : iterable or str Iterable (e.g. list) of detector(s) or detector to keep. Returns ------- inst : instance of Raw The modified instance. """ if isinstance(detectors, int): detectors = [detectors] try: all_str = all([isinstance(det, int) for det in detectors]) except TypeError: raise ValueError( "'ch_names' must be iterable, got " f"type {type(detectors)} ({detectors})." ) if not all_str: raise ValueError( "Each element in 'ch_names' must be int, got " f"{[type(det) for det in detectors]}." ) keeps = np.zeros(len(raw.ch_names)) for det in detectors: template = f"_D{det} " for idx in range(len(raw.ch_names)): if template in raw.ch_names[idx]: keeps[idx] = 1 keeps = np.where(keeps)[0] return raw.pick(keeps)