initial commit
This commit is contained in:
36
mne/__init__.py
Normal file
36
mne/__init__.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
"""MNE software for MEG and EEG data analysis."""
|
||||
# PEP0440 compatible formatted version, see:
|
||||
# https://www.python.org/dev/peps/pep-0440/
|
||||
#
|
||||
# Generic release markers:
|
||||
# X.Y
|
||||
# X.Y.Z # For bugfix releases
|
||||
#
|
||||
# Admissible pre-release markers:
|
||||
# X.YaN # Alpha release
|
||||
# X.YbN # Beta release
|
||||
# X.YrcN # Release Candidate
|
||||
# X.Y # Final release
|
||||
#
|
||||
# Dev branch marker is: 'X.Y.devN' where N is an integer.
|
||||
#
|
||||
import lazy_loader as lazy
|
||||
|
||||
try:
|
||||
from importlib.metadata import version
|
||||
|
||||
__version__ = version("mne")
|
||||
except Exception:
|
||||
__version__ = "0.0.0"
|
||||
|
||||
(__getattr__, __dir__, __all__) = lazy.attach_stub(__name__, __file__)
|
||||
|
||||
# initialize logging
|
||||
from .utils import set_log_level, set_log_file
|
||||
|
||||
set_log_level(None, False)
|
||||
set_log_file()
|
||||
430
mne/__init__.pyi
Normal file
430
mne/__init__.pyi
Normal file
@@ -0,0 +1,430 @@
|
||||
__all__ = [
|
||||
"AcqParserFIF",
|
||||
"Annotations",
|
||||
"BaseEpochs",
|
||||
"BiHemiLabel",
|
||||
"Covariance",
|
||||
"Dipole",
|
||||
"DipoleFixed",
|
||||
"Epochs",
|
||||
"EpochsArray",
|
||||
"Evoked",
|
||||
"EvokedArray",
|
||||
"Forward",
|
||||
"Info",
|
||||
"Label",
|
||||
"MixedSourceEstimate",
|
||||
"MixedVectorSourceEstimate",
|
||||
"Projection",
|
||||
"Report",
|
||||
"SourceEstimate",
|
||||
"SourceMorph",
|
||||
"SourceSpaces",
|
||||
"Transform",
|
||||
"VectorSourceEstimate",
|
||||
"VolSourceEstimate",
|
||||
"VolVectorSourceEstimate",
|
||||
"add_reference_channels",
|
||||
"add_source_space_distances",
|
||||
"annotations_from_events",
|
||||
"apply_forward",
|
||||
"apply_forward_raw",
|
||||
"average_forward_solutions",
|
||||
"beamformer",
|
||||
"channel_indices_by_type",
|
||||
"channel_type",
|
||||
"channels",
|
||||
"chpi",
|
||||
"combine_evoked",
|
||||
"commands",
|
||||
"compute_covariance",
|
||||
"compute_proj_epochs",
|
||||
"compute_proj_evoked",
|
||||
"compute_proj_raw",
|
||||
"compute_rank",
|
||||
"compute_raw_covariance",
|
||||
"compute_source_morph",
|
||||
"concatenate_epochs",
|
||||
"concatenate_events",
|
||||
"concatenate_raws",
|
||||
"convert_forward_solution",
|
||||
"coreg",
|
||||
"count_annotations",
|
||||
"count_events",
|
||||
"create_default_subject",
|
||||
"create_info",
|
||||
"cuda",
|
||||
"datasets",
|
||||
"decimate_surface",
|
||||
"decoding",
|
||||
"defaults",
|
||||
"dig_mri_distances",
|
||||
"dipole",
|
||||
"epochs",
|
||||
"equalize_channels",
|
||||
"event",
|
||||
"events_from_annotations",
|
||||
"export",
|
||||
"extract_label_time_course",
|
||||
"filter",
|
||||
"find_events",
|
||||
"find_layout",
|
||||
"find_stim_steps",
|
||||
"fit_dipole",
|
||||
"forward",
|
||||
"get_config",
|
||||
"get_config_path",
|
||||
"get_head_surf",
|
||||
"get_meg_helmet_surf",
|
||||
"get_montage_volume_labels",
|
||||
"get_volume_labels_from_aseg",
|
||||
"get_volume_labels_from_src",
|
||||
"grade_to_tris",
|
||||
"grade_to_vertices",
|
||||
"grand_average",
|
||||
"grow_labels",
|
||||
"gui",
|
||||
"head_to_mni",
|
||||
"head_to_mri",
|
||||
"inverse_sparse",
|
||||
"io",
|
||||
"label_sign_flip",
|
||||
"labels_to_stc",
|
||||
"make_ad_hoc_cov",
|
||||
"make_bem_model",
|
||||
"make_bem_solution",
|
||||
"make_field_map",
|
||||
"make_fixed_length_epochs",
|
||||
"make_fixed_length_events",
|
||||
"make_forward_dipole",
|
||||
"make_forward_solution",
|
||||
"make_sphere_model",
|
||||
"match_channel_orders",
|
||||
"merge_events",
|
||||
"minimum_norm",
|
||||
"morph_labels",
|
||||
"morph_source_spaces",
|
||||
"open_docs",
|
||||
"open_report",
|
||||
"parse_config",
|
||||
"pick_channels",
|
||||
"pick_channels_cov",
|
||||
"pick_channels_forward",
|
||||
"pick_channels_regexp",
|
||||
"pick_events",
|
||||
"pick_info",
|
||||
"pick_types",
|
||||
"pick_types_forward",
|
||||
"preprocessing",
|
||||
"random_parcellation",
|
||||
"read_annotations",
|
||||
"read_bem_solution",
|
||||
"read_bem_surfaces",
|
||||
"read_cov",
|
||||
"read_dipole",
|
||||
"read_epochs",
|
||||
"read_epochs_eeglab",
|
||||
"read_epochs_fieldtrip",
|
||||
"read_epochs_kit",
|
||||
"read_events",
|
||||
"read_evoked_besa",
|
||||
"read_evoked_fieldtrip",
|
||||
"read_evokeds",
|
||||
"read_evokeds_mff",
|
||||
"read_forward_solution",
|
||||
"read_freesurfer_lut",
|
||||
"read_label",
|
||||
"read_labels_from_annot",
|
||||
"read_lta",
|
||||
"read_morph_map",
|
||||
"read_proj",
|
||||
"read_reject_parameters",
|
||||
"read_source_estimate",
|
||||
"read_source_morph",
|
||||
"read_source_spaces",
|
||||
"read_surface",
|
||||
"read_talxfm",
|
||||
"read_trans",
|
||||
"read_tri",
|
||||
"read_vectorview_selection",
|
||||
"rename_channels",
|
||||
"report",
|
||||
"scale_bem",
|
||||
"scale_labels",
|
||||
"scale_mri",
|
||||
"scale_source_space",
|
||||
"sensitivity_map",
|
||||
"set_bipolar_reference",
|
||||
"set_cache_dir",
|
||||
"set_config",
|
||||
"set_eeg_reference",
|
||||
"set_log_file",
|
||||
"set_log_level",
|
||||
"set_memmap_min_size",
|
||||
"setup_source_space",
|
||||
"setup_volume_source_space",
|
||||
"simulation",
|
||||
"source_space",
|
||||
"spatial_dist_adjacency",
|
||||
"spatial_inter_hemi_adjacency",
|
||||
"spatial_src_adjacency",
|
||||
"spatial_tris_adjacency",
|
||||
"spatio_temporal_dist_adjacency",
|
||||
"spatio_temporal_src_adjacency",
|
||||
"spatio_temporal_tris_adjacency",
|
||||
"split_label",
|
||||
"stats",
|
||||
"stc_near_sensors",
|
||||
"stc_to_label",
|
||||
"surface",
|
||||
"sys_info",
|
||||
"time_frequency",
|
||||
"transform_surface_to",
|
||||
"use_coil_def",
|
||||
"use_log_level",
|
||||
"verbose",
|
||||
"vertex_to_mni",
|
||||
"viz",
|
||||
"what",
|
||||
"whiten_evoked",
|
||||
"write_bem_solution",
|
||||
"write_bem_surfaces",
|
||||
"write_cov",
|
||||
"write_events",
|
||||
"write_evokeds",
|
||||
"write_forward_solution",
|
||||
"write_head_bem",
|
||||
"write_label",
|
||||
"write_labels_to_annot",
|
||||
"write_proj",
|
||||
"write_source_spaces",
|
||||
"write_surface",
|
||||
"write_trans",
|
||||
]
|
||||
from . import (
|
||||
beamformer,
|
||||
channels,
|
||||
chpi,
|
||||
commands,
|
||||
coreg,
|
||||
cuda,
|
||||
datasets,
|
||||
decoding,
|
||||
defaults,
|
||||
dipole,
|
||||
epochs,
|
||||
event,
|
||||
export,
|
||||
filter,
|
||||
forward,
|
||||
gui,
|
||||
inverse_sparse,
|
||||
io,
|
||||
minimum_norm,
|
||||
preprocessing,
|
||||
report,
|
||||
simulation,
|
||||
source_space,
|
||||
stats,
|
||||
surface,
|
||||
time_frequency,
|
||||
viz,
|
||||
)
|
||||
from ._fiff.meas_info import Info, create_info
|
||||
from ._fiff.pick import (
|
||||
channel_indices_by_type,
|
||||
channel_type,
|
||||
pick_channels,
|
||||
pick_channels_cov,
|
||||
pick_channels_forward,
|
||||
pick_channels_regexp,
|
||||
pick_info,
|
||||
pick_types,
|
||||
pick_types_forward,
|
||||
)
|
||||
from ._fiff.proj import Projection
|
||||
from ._fiff.reference import (
|
||||
add_reference_channels,
|
||||
set_bipolar_reference,
|
||||
set_eeg_reference,
|
||||
)
|
||||
from ._fiff.what import what
|
||||
from ._freesurfer import (
|
||||
get_volume_labels_from_aseg,
|
||||
head_to_mni,
|
||||
head_to_mri,
|
||||
read_freesurfer_lut,
|
||||
read_lta,
|
||||
read_talxfm,
|
||||
vertex_to_mni,
|
||||
)
|
||||
from .annotations import (
|
||||
Annotations,
|
||||
annotations_from_events,
|
||||
count_annotations,
|
||||
events_from_annotations,
|
||||
read_annotations,
|
||||
)
|
||||
from .bem import (
|
||||
make_bem_model,
|
||||
make_bem_solution,
|
||||
make_sphere_model,
|
||||
read_bem_solution,
|
||||
read_bem_surfaces,
|
||||
write_bem_solution,
|
||||
write_bem_surfaces,
|
||||
write_head_bem,
|
||||
)
|
||||
from .channels import (
|
||||
equalize_channels,
|
||||
find_layout,
|
||||
read_vectorview_selection,
|
||||
rename_channels,
|
||||
)
|
||||
from .coreg import (
|
||||
create_default_subject,
|
||||
scale_bem,
|
||||
scale_labels,
|
||||
scale_mri,
|
||||
scale_source_space,
|
||||
)
|
||||
from .cov import (
|
||||
Covariance,
|
||||
compute_covariance,
|
||||
compute_raw_covariance,
|
||||
make_ad_hoc_cov,
|
||||
read_cov,
|
||||
whiten_evoked,
|
||||
write_cov,
|
||||
)
|
||||
from .dipole import Dipole, DipoleFixed, fit_dipole, read_dipole
|
||||
from .epochs import (
|
||||
BaseEpochs,
|
||||
Epochs,
|
||||
EpochsArray,
|
||||
concatenate_epochs,
|
||||
make_fixed_length_epochs,
|
||||
read_epochs,
|
||||
)
|
||||
from .event import (
|
||||
AcqParserFIF,
|
||||
concatenate_events,
|
||||
count_events,
|
||||
find_events,
|
||||
find_stim_steps,
|
||||
make_fixed_length_events,
|
||||
merge_events,
|
||||
pick_events,
|
||||
read_events,
|
||||
write_events,
|
||||
)
|
||||
from .evoked import Evoked, EvokedArray, combine_evoked, read_evokeds, write_evokeds
|
||||
from .forward import (
|
||||
Forward,
|
||||
apply_forward,
|
||||
apply_forward_raw,
|
||||
average_forward_solutions,
|
||||
convert_forward_solution,
|
||||
make_field_map,
|
||||
make_forward_dipole,
|
||||
make_forward_solution,
|
||||
read_forward_solution,
|
||||
use_coil_def,
|
||||
write_forward_solution,
|
||||
)
|
||||
from .io import (
|
||||
read_epochs_fieldtrip,
|
||||
read_evoked_besa,
|
||||
read_evoked_fieldtrip,
|
||||
read_evokeds_mff,
|
||||
)
|
||||
from .io.base import concatenate_raws, match_channel_orders
|
||||
from .io.eeglab import read_epochs_eeglab
|
||||
from .io.kit import read_epochs_kit
|
||||
from .label import (
|
||||
BiHemiLabel,
|
||||
Label,
|
||||
grow_labels,
|
||||
label_sign_flip,
|
||||
labels_to_stc,
|
||||
morph_labels,
|
||||
random_parcellation,
|
||||
read_label,
|
||||
read_labels_from_annot,
|
||||
split_label,
|
||||
stc_to_label,
|
||||
write_label,
|
||||
write_labels_to_annot,
|
||||
)
|
||||
from .misc import parse_config, read_reject_parameters
|
||||
from .morph import (
|
||||
SourceMorph,
|
||||
compute_source_morph,
|
||||
grade_to_vertices,
|
||||
read_source_morph,
|
||||
)
|
||||
from .morph_map import read_morph_map
|
||||
from .proj import (
|
||||
compute_proj_epochs,
|
||||
compute_proj_evoked,
|
||||
compute_proj_raw,
|
||||
read_proj,
|
||||
sensitivity_map,
|
||||
write_proj,
|
||||
)
|
||||
from .rank import compute_rank
|
||||
from .report import Report, open_report
|
||||
from .source_estimate import (
|
||||
MixedSourceEstimate,
|
||||
MixedVectorSourceEstimate,
|
||||
SourceEstimate,
|
||||
VectorSourceEstimate,
|
||||
VolSourceEstimate,
|
||||
VolVectorSourceEstimate,
|
||||
extract_label_time_course,
|
||||
grade_to_tris,
|
||||
read_source_estimate,
|
||||
spatial_dist_adjacency,
|
||||
spatial_inter_hemi_adjacency,
|
||||
spatial_src_adjacency,
|
||||
spatial_tris_adjacency,
|
||||
spatio_temporal_dist_adjacency,
|
||||
spatio_temporal_src_adjacency,
|
||||
spatio_temporal_tris_adjacency,
|
||||
stc_near_sensors,
|
||||
)
|
||||
from .source_space._source_space import (
|
||||
SourceSpaces,
|
||||
add_source_space_distances,
|
||||
get_volume_labels_from_src,
|
||||
morph_source_spaces,
|
||||
read_source_spaces,
|
||||
setup_source_space,
|
||||
setup_volume_source_space,
|
||||
write_source_spaces,
|
||||
)
|
||||
from .surface import (
|
||||
decimate_surface,
|
||||
dig_mri_distances,
|
||||
get_head_surf,
|
||||
get_meg_helmet_surf,
|
||||
get_montage_volume_labels,
|
||||
read_surface,
|
||||
read_tri,
|
||||
write_surface,
|
||||
)
|
||||
from .transforms import Transform, read_trans, transform_surface_to, write_trans
|
||||
from .utils import (
|
||||
get_config,
|
||||
get_config_path,
|
||||
grand_average,
|
||||
open_docs,
|
||||
set_cache_dir,
|
||||
set_config,
|
||||
set_log_file,
|
||||
set_log_level,
|
||||
set_memmap_min_size,
|
||||
sys_info,
|
||||
use_log_level,
|
||||
verbose,
|
||||
)
|
||||
8
mne/__main__.py
Normal file
8
mne/__main__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from .commands.utils import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
8
mne/_fiff/__init__.py
Normal file
8
mne/_fiff/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
"""Private module for FIF basic I/O routines."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
# All imports should be done directly to submodules, so we don't import
|
||||
# anything here or use lazy_loader.
|
||||
605
mne/_fiff/_digitization.py
Normal file
605
mne/_fiff/_digitization.py
Normal file
@@ -0,0 +1,605 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import heapq
|
||||
from collections import Counter
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..utils import Bunch, _check_fname, _validate_type, logger, verbose, warn
|
||||
from .constants import FIFF, _coord_frame_named
|
||||
from .tag import read_tag
|
||||
from .tree import dir_tree_find
|
||||
from .write import _safe_name_list, start_and_end_file, write_dig_points
|
||||
|
||||
_dig_kind_dict = {
|
||||
"cardinal": FIFF.FIFFV_POINT_CARDINAL,
|
||||
"hpi": FIFF.FIFFV_POINT_HPI,
|
||||
"eeg": FIFF.FIFFV_POINT_EEG,
|
||||
"extra": FIFF.FIFFV_POINT_EXTRA,
|
||||
}
|
||||
_dig_kind_ints = tuple(sorted(_dig_kind_dict.values()))
|
||||
_dig_kind_proper = {
|
||||
"cardinal": "Cardinal",
|
||||
"hpi": "HPI",
|
||||
"eeg": "EEG",
|
||||
"extra": "Extra",
|
||||
"unknown": "Unknown",
|
||||
}
|
||||
_dig_kind_rev = {val: key for key, val in _dig_kind_dict.items()}
|
||||
_cardinal_kind_rev = {1: "LPA", 2: "Nasion", 3: "RPA", 4: "Inion"}
|
||||
|
||||
|
||||
def _format_dig_points(dig, enforce_order=False):
|
||||
"""Format the dig points nicely."""
|
||||
if enforce_order and dig is not None:
|
||||
# reorder points based on type:
|
||||
# Fiducials/HPI, EEG, extra (headshape)
|
||||
fids_digpoints = []
|
||||
hpi_digpoints = []
|
||||
eeg_digpoints = []
|
||||
extra_digpoints = []
|
||||
head_digpoints = []
|
||||
|
||||
# use a heap to enforce order on FIDS, EEG, Extra
|
||||
for idx, digpoint in enumerate(dig):
|
||||
ident = digpoint["ident"]
|
||||
kind = digpoint["kind"]
|
||||
|
||||
# push onto heap based on 'ident' (for the order) for
|
||||
# each of the possible DigPoint 'kind's
|
||||
# keep track of 'idx' in case of any clashes in
|
||||
# the 'ident' variable, which can occur when
|
||||
# user passes in DigMontage + DigMontage
|
||||
if kind == FIFF.FIFFV_POINT_CARDINAL:
|
||||
heapq.heappush(fids_digpoints, (ident, idx, digpoint))
|
||||
elif kind == FIFF.FIFFV_POINT_HPI:
|
||||
heapq.heappush(hpi_digpoints, (ident, idx, digpoint))
|
||||
elif kind == FIFF.FIFFV_POINT_EEG:
|
||||
heapq.heappush(eeg_digpoints, (ident, idx, digpoint))
|
||||
elif kind == FIFF.FIFFV_POINT_EXTRA:
|
||||
heapq.heappush(extra_digpoints, (ident, idx, digpoint))
|
||||
elif kind == FIFF.FIFFV_POINT_HEAD:
|
||||
heapq.heappush(head_digpoints, (ident, idx, digpoint))
|
||||
|
||||
# now recreate dig based on sorted order
|
||||
fids_digpoints.sort(), hpi_digpoints.sort()
|
||||
eeg_digpoints.sort()
|
||||
extra_digpoints.sort(), head_digpoints.sort()
|
||||
new_dig = []
|
||||
for idx, d in enumerate(
|
||||
fids_digpoints
|
||||
+ hpi_digpoints
|
||||
+ extra_digpoints
|
||||
+ eeg_digpoints
|
||||
+ head_digpoints
|
||||
):
|
||||
new_dig.append(d[-1])
|
||||
dig = new_dig
|
||||
|
||||
return [DigPoint(d) for d in dig] if dig is not None else dig
|
||||
|
||||
|
||||
def _get_dig_eeg(dig):
|
||||
return [d for d in dig if d["kind"] == FIFF.FIFFV_POINT_EEG]
|
||||
|
||||
|
||||
def _count_points_by_type(dig):
|
||||
"""Get the number of points of each type."""
|
||||
occurrences = Counter([d["kind"] for d in dig])
|
||||
return dict(
|
||||
fid=occurrences[FIFF.FIFFV_POINT_CARDINAL],
|
||||
hpi=occurrences[FIFF.FIFFV_POINT_HPI],
|
||||
eeg=occurrences[FIFF.FIFFV_POINT_EEG],
|
||||
extra=occurrences[FIFF.FIFFV_POINT_EXTRA],
|
||||
)
|
||||
|
||||
|
||||
_dig_keys = {"kind", "ident", "r", "coord_frame"}
|
||||
|
||||
|
||||
class DigPoint(dict):
|
||||
"""Container for a digitization point.
|
||||
|
||||
This is a simple subclass of the standard dict type designed to provide
|
||||
a readable string representation.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
kind : int
|
||||
The kind of channel,
|
||||
e.g. ``FIFFV_POINT_EEG``, ``FIFFV_POINT_CARDINAL``.
|
||||
r : array, shape (3,)
|
||||
3D position in m. and coord_frame.
|
||||
ident : int
|
||||
Number specifying the identity of the point.
|
||||
e.g. ``FIFFV_POINT_NASION`` if kind is ``FIFFV_POINT_CARDINAL``,
|
||||
or 42 if kind is ``FIFFV_POINT_EEG``.
|
||||
coord_frame : int
|
||||
The coordinate frame used, e.g. ``FIFFV_COORD_HEAD``.
|
||||
"""
|
||||
|
||||
def __repr__(self): # noqa: D105
|
||||
from ..transforms import _coord_frame_name
|
||||
|
||||
if self["kind"] == FIFF.FIFFV_POINT_CARDINAL:
|
||||
id_ = _cardinal_kind_rev.get(self["ident"], "Unknown cardinal")
|
||||
else:
|
||||
id_ = _dig_kind_proper[_dig_kind_rev.get(self["kind"], "unknown")]
|
||||
id_ = f"{id_} #{self['ident']}"
|
||||
id_ = id_.rjust(10)
|
||||
cf = _coord_frame_name(self["coord_frame"])
|
||||
x, y, z = self["r"]
|
||||
if "voxel" in cf:
|
||||
pos = (f"({x:0.1f}, {y:0.1f}, {z:0.1f})").ljust(25)
|
||||
else:
|
||||
pos = (f"({x * 1e3:0.1f}, {y * 1e3:0.1f}, {z * 1e3:0.1f}) mm").ljust(25)
|
||||
return f"<DigPoint | {id_} : {pos} : {cf} frame>"
|
||||
|
||||
# speed up info copy by only deep copying the mutable item
|
||||
def __deepcopy__(self, memodict):
|
||||
"""Make a deepcopy."""
|
||||
return DigPoint(
|
||||
kind=self["kind"],
|
||||
r=self["r"].copy(),
|
||||
ident=self["ident"],
|
||||
coord_frame=self["coord_frame"],
|
||||
)
|
||||
|
||||
def __eq__(self, other): # noqa: D105
|
||||
"""Compare two DigPoints.
|
||||
|
||||
Two digpoints are equal if they are the same kind, share the same
|
||||
coordinate frame and position.
|
||||
"""
|
||||
my_keys = ["kind", "ident", "coord_frame"]
|
||||
if set(self.keys()) != set(other.keys()):
|
||||
return False
|
||||
elif any(self[_] != other[_] for _ in my_keys):
|
||||
return False
|
||||
else:
|
||||
return np.allclose(self["r"], other["r"])
|
||||
|
||||
|
||||
def _read_dig_fif(fid, meas_info, *, return_ch_names=False):
|
||||
"""Read digitizer data from a FIFF file."""
|
||||
isotrak = dir_tree_find(meas_info, FIFF.FIFFB_ISOTRAK)
|
||||
dig = None
|
||||
ch_names = None
|
||||
if len(isotrak) == 0:
|
||||
logger.info("Isotrak not found")
|
||||
elif len(isotrak) > 1:
|
||||
warn("Multiple Isotrak found")
|
||||
else:
|
||||
isotrak = isotrak[0]
|
||||
coord_frame = FIFF.FIFFV_COORD_HEAD
|
||||
dig = []
|
||||
for k in range(isotrak["nent"]):
|
||||
kind = isotrak["directory"][k].kind
|
||||
pos = isotrak["directory"][k].pos
|
||||
if kind == FIFF.FIFF_DIG_POINT:
|
||||
tag = read_tag(fid, pos)
|
||||
dig.append(tag.data)
|
||||
elif kind == FIFF.FIFF_MNE_COORD_FRAME:
|
||||
tag = read_tag(fid, pos)
|
||||
coord_frame = _coord_frame_named.get(int(tag.data.item()))
|
||||
elif kind == FIFF.FIFF_MNE_CH_NAME_LIST:
|
||||
tag = read_tag(fid, pos)
|
||||
ch_names = _safe_name_list(tag.data, "read", "ch_names")
|
||||
for d in dig:
|
||||
d["coord_frame"] = coord_frame
|
||||
out = _format_dig_points(dig)
|
||||
if return_ch_names:
|
||||
out = (out, ch_names)
|
||||
return out
|
||||
|
||||
|
||||
@verbose
|
||||
def write_dig(
|
||||
fname, pts, coord_frame=None, *, ch_names=None, overwrite=False, verbose=None
|
||||
):
|
||||
"""Write digitization data to a FIF file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
Destination file name.
|
||||
pts : iterator of dict
|
||||
Iterator through digitizer points. Each point is a dictionary with
|
||||
the keys 'kind', 'ident' and 'r'.
|
||||
coord_frame : int | str | None
|
||||
If all the points have the same coordinate frame, specify the type
|
||||
here. Can be None (default) if the points could have varying
|
||||
coordinate frames.
|
||||
ch_names : list of str | None
|
||||
Channel names associated with the digitization points, if available.
|
||||
|
||||
.. versionadded:: 1.9
|
||||
%(overwrite)s
|
||||
|
||||
.. versionadded:: 1.0
|
||||
%(verbose)s
|
||||
|
||||
.. versionadded:: 1.0
|
||||
"""
|
||||
from ..transforms import _to_const
|
||||
|
||||
fname = _check_fname(fname, overwrite=overwrite)
|
||||
if coord_frame is not None:
|
||||
coord_frame = _to_const(coord_frame)
|
||||
pts_frames = {pt.get("coord_frame", coord_frame) for pt in pts}
|
||||
bad_frames = pts_frames - {coord_frame}
|
||||
if len(bad_frames) > 0:
|
||||
raise ValueError(
|
||||
"Points have coord_frame entries that are incompatible with "
|
||||
f"coord_frame={coord_frame}: {tuple(bad_frames)}."
|
||||
)
|
||||
_validate_type(ch_names, (None, list, tuple), "ch_names")
|
||||
if ch_names is not None:
|
||||
for ci, ch_name in enumerate(ch_names):
|
||||
_validate_type(ch_name, str, f"ch_names[{ci}]")
|
||||
|
||||
with start_and_end_file(fname) as fid:
|
||||
write_dig_points(
|
||||
fid, pts, block=True, coord_frame=coord_frame, ch_names=ch_names
|
||||
)
|
||||
|
||||
|
||||
_cardinal_ident_mapping = {
|
||||
FIFF.FIFFV_POINT_NASION: "nasion",
|
||||
FIFF.FIFFV_POINT_LPA: "lpa",
|
||||
FIFF.FIFFV_POINT_RPA: "rpa",
|
||||
}
|
||||
|
||||
|
||||
def _ensure_fiducials_head(dig):
|
||||
# Ensure that there are all three fiducials in the head coord frame
|
||||
fids = dict()
|
||||
for d in dig:
|
||||
if d["kind"] == FIFF.FIFFV_POINT_CARDINAL:
|
||||
name = _cardinal_ident_mapping.get(d["ident"], None)
|
||||
if name is not None:
|
||||
fids[name] = d
|
||||
radius = None
|
||||
mults = dict(
|
||||
lpa=[-1, 0, 0],
|
||||
rpa=[1, 0, 0],
|
||||
nasion=[0, 1, 0],
|
||||
)
|
||||
for ident, name in _cardinal_ident_mapping.items():
|
||||
if name not in fids:
|
||||
if radius is None:
|
||||
radius = [
|
||||
np.linalg.norm(d["r"])
|
||||
for d in dig
|
||||
if d["coord_frame"] == FIFF.FIFFV_COORD_HEAD
|
||||
and not np.isnan(d["r"]).any()
|
||||
]
|
||||
if not radius:
|
||||
return # can't complete, no head points
|
||||
radius = np.mean(radius)
|
||||
dig.append(
|
||||
DigPoint(
|
||||
kind=FIFF.FIFFV_POINT_CARDINAL,
|
||||
ident=ident,
|
||||
r=np.array(mults[name], float) * radius,
|
||||
coord_frame=FIFF.FIFFV_COORD_HEAD,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
# XXXX:
|
||||
# This does something really similar to _read_dig_montage_fif but:
|
||||
# - does not check coord_frame
|
||||
# - does not do any operation that implies assumptions with the names
|
||||
def _get_data_as_dict_from_dig(dig, exclude_ref_channel=True):
|
||||
"""Obtain coordinate data from a Dig.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
dig : list of dicts
|
||||
A container of DigPoints to be added to the info['dig'].
|
||||
|
||||
Returns
|
||||
-------
|
||||
ch_pos : dict
|
||||
The container of all relevant channel positions inside dig.
|
||||
"""
|
||||
# Split up the dig points by category
|
||||
hsp, hpi, elp = list(), list(), list()
|
||||
fids, dig_ch_pos_location = dict(), list()
|
||||
dig = [] if dig is None else dig
|
||||
|
||||
for d in dig:
|
||||
if d["kind"] == FIFF.FIFFV_POINT_CARDINAL:
|
||||
fids[_cardinal_ident_mapping[d["ident"]]] = d["r"]
|
||||
elif d["kind"] == FIFF.FIFFV_POINT_HPI:
|
||||
hpi.append(d["r"])
|
||||
elp.append(d["r"])
|
||||
elif d["kind"] == FIFF.FIFFV_POINT_EXTRA:
|
||||
hsp.append(d["r"])
|
||||
elif d["kind"] == FIFF.FIFFV_POINT_EEG:
|
||||
if d["ident"] != 0 or not exclude_ref_channel:
|
||||
dig_ch_pos_location.append(d["r"])
|
||||
|
||||
dig_coord_frames = set([d["coord_frame"] for d in dig])
|
||||
if len(dig_coord_frames) == 0:
|
||||
dig_coord_frames = set([FIFF.FIFFV_COORD_HEAD])
|
||||
if len(dig_coord_frames) != 1:
|
||||
raise RuntimeError(
|
||||
"Only single coordinate frame in dig is supported, "
|
||||
f"got {dig_coord_frames}"
|
||||
)
|
||||
dig_ch_pos_location = np.array(dig_ch_pos_location)
|
||||
dig_ch_pos_location.shape = (-1, 3) # empty will be (0, 3)
|
||||
return Bunch(
|
||||
nasion=fids.get("nasion", None),
|
||||
lpa=fids.get("lpa", None),
|
||||
rpa=fids.get("rpa", None),
|
||||
hsp=np.array(hsp) if len(hsp) else None,
|
||||
hpi=np.array(hpi) if len(hpi) else None,
|
||||
elp=np.array(elp) if len(elp) else None,
|
||||
dig_ch_pos_location=dig_ch_pos_location,
|
||||
coord_frame=dig_coord_frames.pop(),
|
||||
)
|
||||
|
||||
|
||||
def _get_fid_coords(dig, raise_error=True):
|
||||
fid_coords = Bunch(nasion=None, lpa=None, rpa=None)
|
||||
fid_coord_frames = dict()
|
||||
|
||||
for d in dig:
|
||||
if d["kind"] == FIFF.FIFFV_POINT_CARDINAL:
|
||||
key = _cardinal_ident_mapping[d["ident"]]
|
||||
fid_coords[key] = d["r"]
|
||||
fid_coord_frames[key] = d["coord_frame"]
|
||||
|
||||
if len(fid_coord_frames) > 0 and raise_error:
|
||||
if set(fid_coord_frames.keys()) != set(["nasion", "lpa", "rpa"]):
|
||||
raise ValueError(
|
||||
f"Some fiducial points are missing (got {fid_coord_frames.keys()})."
|
||||
)
|
||||
|
||||
if len(set(fid_coord_frames.values())) > 1:
|
||||
raise ValueError(
|
||||
"All fiducial points must be in the same coordinate system "
|
||||
f"(got {len(fid_coord_frames)})"
|
||||
)
|
||||
|
||||
coord_frame = fid_coord_frames.popitem()[1] if fid_coord_frames else None
|
||||
|
||||
return fid_coords, coord_frame
|
||||
|
||||
|
||||
def _coord_frame_const(coord_frame):
|
||||
from ..transforms import _str_to_frame
|
||||
|
||||
if not isinstance(coord_frame, str) or coord_frame not in _str_to_frame:
|
||||
raise ValueError(
|
||||
f"coord_frame must be one of {sorted(_str_to_frame.keys())}, got "
|
||||
f"{coord_frame}"
|
||||
)
|
||||
return _str_to_frame[coord_frame]
|
||||
|
||||
|
||||
def _make_dig_points(
|
||||
nasion=None,
|
||||
lpa=None,
|
||||
rpa=None,
|
||||
hpi=None,
|
||||
extra_points=None,
|
||||
dig_ch_pos=None,
|
||||
*,
|
||||
coord_frame="head",
|
||||
add_missing_fiducials=False,
|
||||
):
|
||||
"""Construct digitizer info for the info.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
nasion : array-like | numpy.ndarray, shape (3,) | None
|
||||
Point designated as the nasion point.
|
||||
lpa : array-like | numpy.ndarray, shape (3,) | None
|
||||
Point designated as the left auricular point.
|
||||
rpa : array-like | numpy.ndarray, shape (3,) | None
|
||||
Point designated as the right auricular point.
|
||||
hpi : array-like | numpy.ndarray, shape (n_points, 3) | None
|
||||
Points designated as head position indicator points.
|
||||
extra_points : array-like | numpy.ndarray, shape (n_points, 3)
|
||||
Points designed as the headshape points.
|
||||
dig_ch_pos : dict
|
||||
Dict of EEG channel positions.
|
||||
coord_frame : str
|
||||
The coordinate frame of the points. Usually this is "unknown"
|
||||
for native digitizer space. Defaults to "head".
|
||||
add_missing_fiducials : bool
|
||||
If True, add fiducials to the dig points if they are not present.
|
||||
Requires that coord_frame='head' and that lpa, nasion, and rpa are all
|
||||
None.
|
||||
|
||||
Returns
|
||||
-------
|
||||
dig : list of dicts
|
||||
A container of DigPoints to be added to the info['dig'].
|
||||
"""
|
||||
coord_frame = _coord_frame_const(coord_frame)
|
||||
|
||||
dig = []
|
||||
if lpa is not None:
|
||||
lpa = np.asarray(lpa)
|
||||
if lpa.shape != (3,):
|
||||
raise ValueError(f"LPA should have the shape (3,) instead of {lpa.shape}")
|
||||
dig.append(
|
||||
{
|
||||
"r": lpa,
|
||||
"ident": FIFF.FIFFV_POINT_LPA,
|
||||
"kind": FIFF.FIFFV_POINT_CARDINAL,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if nasion is not None:
|
||||
nasion = np.asarray(nasion)
|
||||
if nasion.shape != (3,):
|
||||
raise ValueError(
|
||||
f"Nasion should have the shape (3,) instead of {nasion.shape}"
|
||||
)
|
||||
dig.append(
|
||||
{
|
||||
"r": nasion,
|
||||
"ident": FIFF.FIFFV_POINT_NASION,
|
||||
"kind": FIFF.FIFFV_POINT_CARDINAL,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if rpa is not None:
|
||||
rpa = np.asarray(rpa)
|
||||
if rpa.shape != (3,):
|
||||
raise ValueError(f"RPA should have the shape (3,) instead of {rpa.shape}")
|
||||
dig.append(
|
||||
{
|
||||
"r": rpa,
|
||||
"ident": FIFF.FIFFV_POINT_RPA,
|
||||
"kind": FIFF.FIFFV_POINT_CARDINAL,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if hpi is not None:
|
||||
hpi = np.asarray(hpi)
|
||||
if hpi.ndim != 2 or hpi.shape[1] != 3:
|
||||
raise ValueError(
|
||||
f"HPI should have the shape (n_points, 3) instead of {hpi.shape}"
|
||||
)
|
||||
for idx, point in enumerate(hpi):
|
||||
dig.append(
|
||||
{
|
||||
"r": point,
|
||||
"ident": idx + 1,
|
||||
"kind": FIFF.FIFFV_POINT_HPI,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if extra_points is not None:
|
||||
extra_points = np.asarray(extra_points)
|
||||
if len(extra_points) and extra_points.shape[1] != 3:
|
||||
raise ValueError(
|
||||
"Points should have the shape (n_points, 3) instead of "
|
||||
f"{extra_points.shape}"
|
||||
)
|
||||
for idx, point in enumerate(extra_points):
|
||||
dig.append(
|
||||
{
|
||||
"r": point,
|
||||
"ident": idx + 1,
|
||||
"kind": FIFF.FIFFV_POINT_EXTRA,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if dig_ch_pos is not None:
|
||||
idents = []
|
||||
use_arange = False
|
||||
for key, value in dig_ch_pos.items():
|
||||
_validate_type(key, str, "dig_ch_pos")
|
||||
try:
|
||||
idents.append(int(key[-3:]))
|
||||
except ValueError:
|
||||
use_arange = True
|
||||
_validate_type(value, (np.ndarray, list, tuple), "dig_ch_pos")
|
||||
value = np.array(value, dtype=float)
|
||||
dig_ch_pos[key] = value
|
||||
if value.shape != (3,):
|
||||
raise RuntimeError(
|
||||
"The position should be a 1D array of 3 floats. "
|
||||
f"Provided shape {value.shape}."
|
||||
)
|
||||
if use_arange:
|
||||
idents = np.arange(1, len(dig_ch_pos) + 1)
|
||||
for key, ident in zip(dig_ch_pos, idents):
|
||||
dig.append(
|
||||
{
|
||||
"r": dig_ch_pos[key],
|
||||
"ident": int(ident),
|
||||
"kind": FIFF.FIFFV_POINT_EEG,
|
||||
"coord_frame": coord_frame,
|
||||
}
|
||||
)
|
||||
if add_missing_fiducials:
|
||||
assert coord_frame == FIFF.FIFFV_COORD_HEAD
|
||||
# These being none is really an assumption that if you have one you
|
||||
# should have all three. But we can relax this later if necessary.
|
||||
assert lpa is None
|
||||
assert rpa is None
|
||||
assert nasion is None
|
||||
_ensure_fiducials_head(dig)
|
||||
|
||||
return _format_dig_points(dig)
|
||||
|
||||
|
||||
def _call_make_dig_points(nasion, lpa, rpa, hpi, extra, convert=True):
|
||||
from ..transforms import (
|
||||
Transform,
|
||||
apply_trans,
|
||||
get_ras_to_neuromag_trans,
|
||||
)
|
||||
|
||||
if convert:
|
||||
neuromag_trans = get_ras_to_neuromag_trans(nasion, lpa, rpa)
|
||||
nasion = apply_trans(neuromag_trans, nasion)
|
||||
lpa = apply_trans(neuromag_trans, lpa)
|
||||
rpa = apply_trans(neuromag_trans, rpa)
|
||||
|
||||
if hpi is not None:
|
||||
hpi = apply_trans(neuromag_trans, hpi)
|
||||
|
||||
extra = apply_trans(neuromag_trans, extra).astype(np.float32)
|
||||
else:
|
||||
neuromag_trans = None
|
||||
|
||||
ctf_head_t = Transform(fro="ctf_head", to="head", trans=neuromag_trans)
|
||||
|
||||
info_dig = _make_dig_points(
|
||||
nasion=nasion, lpa=lpa, rpa=rpa, hpi=hpi, extra_points=extra
|
||||
)
|
||||
|
||||
return info_dig, ctf_head_t
|
||||
|
||||
|
||||
##############################################################################
|
||||
# From artemis123 (we have modified the function a bit)
|
||||
def _artemis123_read_pos(nas, lpa, rpa, hpi, extra):
|
||||
# move into MNE head coords
|
||||
dig_points, _ = _call_make_dig_points(nas, lpa, rpa, hpi, extra)
|
||||
return dig_points
|
||||
|
||||
|
||||
##############################################################################
|
||||
# From bti
|
||||
def _make_bti_dig_points(
|
||||
nasion,
|
||||
lpa,
|
||||
rpa,
|
||||
hpi,
|
||||
extra,
|
||||
convert=False,
|
||||
use_hpi=False,
|
||||
bti_dev_t=False,
|
||||
dev_ctf_t=False,
|
||||
):
|
||||
from ..transforms import (
|
||||
Transform,
|
||||
combine_transforms,
|
||||
invert_transform,
|
||||
)
|
||||
|
||||
_hpi = hpi if use_hpi else None
|
||||
info_dig, ctf_head_t = _call_make_dig_points(nasion, lpa, rpa, _hpi, extra, convert)
|
||||
|
||||
if convert:
|
||||
t = combine_transforms(
|
||||
invert_transform(bti_dev_t), dev_ctf_t, "meg", "ctf_head"
|
||||
)
|
||||
dev_head_t = combine_transforms(t, ctf_head_t, "meg", "head")
|
||||
else:
|
||||
dev_head_t = Transform("meg", "head", trans=None)
|
||||
|
||||
return info_dig, dev_head_t, ctf_head_t # ctf_head_t should not be needed
|
||||
168
mne/_fiff/compensator.py
Normal file
168
mne/_fiff/compensator.py
Normal file
@@ -0,0 +1,168 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..utils import fill_doc
|
||||
from .constants import FIFF
|
||||
|
||||
|
||||
def get_current_comp(info):
|
||||
"""Get the current compensation in effect in the data."""
|
||||
comp = None
|
||||
first_comp = -1
|
||||
for k, chan in enumerate(info["chs"]):
|
||||
if chan["kind"] == FIFF.FIFFV_MEG_CH:
|
||||
comp = int(chan["coil_type"]) >> 16
|
||||
if first_comp < 0:
|
||||
first_comp = comp
|
||||
elif comp != first_comp:
|
||||
raise ValueError("Compensation is not set equally on all MEG channels")
|
||||
return comp
|
||||
|
||||
|
||||
def set_current_comp(info, comp):
|
||||
"""Set the current compensation in effect in the data."""
|
||||
comp_now = get_current_comp(info)
|
||||
for k, chan in enumerate(info["chs"]):
|
||||
if chan["kind"] == FIFF.FIFFV_MEG_CH:
|
||||
rem = chan["coil_type"] - (comp_now << 16)
|
||||
chan["coil_type"] = int(rem + (comp << 16))
|
||||
|
||||
|
||||
def _make_compensator(info, grade):
|
||||
"""Auxiliary function for make_compensator."""
|
||||
for k in range(len(info["comps"])):
|
||||
if info["comps"][k]["kind"] == grade:
|
||||
this_data = info["comps"][k]["data"]
|
||||
|
||||
# Create the preselector
|
||||
presel = np.zeros((this_data["ncol"], info["nchan"]))
|
||||
for col, col_name in enumerate(this_data["col_names"]):
|
||||
ind = [k for k, ch in enumerate(info["ch_names"]) if ch == col_name]
|
||||
if len(ind) == 0:
|
||||
raise ValueError(f"Channel {col_name} is not available in data")
|
||||
elif len(ind) > 1:
|
||||
raise ValueError(f"Ambiguous channel {col_name}")
|
||||
presel[col, ind[0]] = 1.0
|
||||
|
||||
# Create the postselector (zero entries for channels not found)
|
||||
postsel = np.zeros((info["nchan"], this_data["nrow"]))
|
||||
for c, ch_name in enumerate(info["ch_names"]):
|
||||
ind = [
|
||||
k for k, ch in enumerate(this_data["row_names"]) if ch == ch_name
|
||||
]
|
||||
if len(ind) > 1:
|
||||
raise ValueError(f"Ambiguous channel {ch_name}")
|
||||
elif len(ind) == 1:
|
||||
postsel[c, ind[0]] = 1.0
|
||||
# else, don't use it at all (postsel[c, ?] = 0.0) by allocation
|
||||
this_comp = np.dot(postsel, np.dot(this_data["data"], presel))
|
||||
return this_comp
|
||||
|
||||
raise ValueError(f"Desired compensation matrix (grade = {grade:d}) not found")
|
||||
|
||||
|
||||
@fill_doc
|
||||
def make_compensator(info, from_, to, exclude_comp_chs=False):
|
||||
"""Return compensation matrix eg. for CTF system.
|
||||
|
||||
Create a compensation matrix to bring the data from one compensation
|
||||
state to another.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(info_not_none)s
|
||||
from_ : int
|
||||
Compensation in the input data.
|
||||
to : int
|
||||
Desired compensation in the output.
|
||||
exclude_comp_chs : bool
|
||||
Exclude compensation channels from the output.
|
||||
|
||||
Returns
|
||||
-------
|
||||
comp : array | None.
|
||||
The compensation matrix. Might be None if no compensation
|
||||
is needed (from == to).
|
||||
"""
|
||||
if from_ == to:
|
||||
return None
|
||||
|
||||
# s_orig = s_from + C1*s_from = (I + C1)*s_from
|
||||
# s_to = s_orig - C2*s_orig = (I - C2)*s_orig
|
||||
# s_to = (I - C2)*(I + C1)*s_from = (I + C1 - C2 - C2*C1)*s_from
|
||||
if from_ != 0:
|
||||
C1 = _make_compensator(info, from_)
|
||||
comp_from_0 = np.linalg.inv(np.eye(info["nchan"]) - C1)
|
||||
if to != 0:
|
||||
C2 = _make_compensator(info, to)
|
||||
comp_0_to = np.eye(info["nchan"]) - C2
|
||||
if from_ != 0:
|
||||
if to != 0:
|
||||
# This is mathematically equivalent, but has higher numerical
|
||||
# error than using the inverse to always go to zero and back
|
||||
# comp = np.eye(info['nchan']) + C1 - C2 - np.dot(C2, C1)
|
||||
comp = np.dot(comp_0_to, comp_from_0)
|
||||
else:
|
||||
comp = comp_from_0
|
||||
else:
|
||||
# from == 0, to != 0 guaranteed here
|
||||
comp = comp_0_to
|
||||
|
||||
if exclude_comp_chs:
|
||||
pick = [
|
||||
k for k, c in enumerate(info["chs"]) if c["kind"] != FIFF.FIFFV_REF_MEG_CH
|
||||
]
|
||||
|
||||
if len(pick) == 0:
|
||||
raise ValueError(
|
||||
"Nothing remains after excluding the compensation channels"
|
||||
)
|
||||
|
||||
comp = comp[pick, :]
|
||||
|
||||
return comp
|
||||
|
||||
|
||||
# @verbose
|
||||
# def compensate_to(data, to, verbose=None):
|
||||
# """
|
||||
# %
|
||||
# % [newdata] = mne_compensate_to(data,to)
|
||||
# %
|
||||
# % Apply compensation to the data as desired
|
||||
# %
|
||||
# """
|
||||
#
|
||||
# newdata = data.copy()
|
||||
# now = get_current_comp(newdata['info'])
|
||||
#
|
||||
# # Are we there already?
|
||||
# if now == to:
|
||||
# logger.info('Data are already compensated as desired')
|
||||
#
|
||||
# # Make the compensator and apply it to all data sets
|
||||
# comp = make_compensator(newdata['info'], now, to)
|
||||
# for k in range(len(newdata['evoked'])):
|
||||
# newdata['evoked'][k]['epochs'] = np.dot(comp,
|
||||
# newdata['evoked'][k]['epochs'])
|
||||
#
|
||||
# # Update the compensation info in the channel descriptors
|
||||
# newdata['info']['chs'] = set_current_comp(newdata['info']['chs'], to)
|
||||
# return newdata
|
||||
|
||||
|
||||
# def set_current_comp(chs, value):
|
||||
# """Set the current compensation value in the channel info structures
|
||||
# """
|
||||
# new_chs = chs
|
||||
#
|
||||
# lower_half = int('FFFF', 16) # hex2dec('FFFF')
|
||||
# for k in range(len(chs)):
|
||||
# if chs[k]['kind'] == FIFF.FIFFV_MEG_CH:
|
||||
# coil_type = float(chs[k]['coil_type']) & lower_half
|
||||
# new_chs[k]['coil_type'] = int(coil_type | (value << 16))
|
||||
#
|
||||
# return new_chs
|
||||
1218
mne/_fiff/constants.py
Normal file
1218
mne/_fiff/constants.py
Normal file
File diff suppressed because it is too large
Load Diff
189
mne/_fiff/ctf_comp.py
Normal file
189
mne/_fiff/ctf_comp.py
Normal file
@@ -0,0 +1,189 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..utils import _pl, logger, verbose
|
||||
from .constants import FIFF
|
||||
from .matrix import _read_named_matrix, write_named_matrix
|
||||
from .tag import read_tag
|
||||
from .tree import dir_tree_find
|
||||
from .write import end_block, start_block, write_int
|
||||
|
||||
|
||||
def _add_kind(one):
|
||||
"""Convert CTF kind to MNE kind."""
|
||||
if one["ctfkind"] == int("47314252", 16):
|
||||
one["kind"] = 1
|
||||
elif one["ctfkind"] == int("47324252", 16):
|
||||
one["kind"] = 2
|
||||
elif one["ctfkind"] == int("47334252", 16):
|
||||
one["kind"] = 3
|
||||
else:
|
||||
one["kind"] = int(one["ctfkind"])
|
||||
|
||||
|
||||
def _calibrate_comp(
|
||||
comp, chs, row_names, col_names, mult_keys=("range", "cal"), flip=False
|
||||
):
|
||||
"""Get row and column cals."""
|
||||
ch_names = [c["ch_name"] for c in chs]
|
||||
row_cals = np.zeros(len(row_names))
|
||||
col_cals = np.zeros(len(col_names))
|
||||
for names, cals, inv in zip(
|
||||
(row_names, col_names), (row_cals, col_cals), (False, True)
|
||||
):
|
||||
for ii in range(len(cals)):
|
||||
p = ch_names.count(names[ii])
|
||||
if p != 1:
|
||||
raise RuntimeError(
|
||||
f"Channel {names[ii]} does not appear exactly once "
|
||||
f"in data, found {p:d} instance{_pl(p)}"
|
||||
)
|
||||
idx = ch_names.index(names[ii])
|
||||
val = chs[idx][mult_keys[0]] * chs[idx][mult_keys[1]]
|
||||
val = float(1.0 / val) if inv else float(val)
|
||||
val = 1.0 / val if flip else val
|
||||
cals[ii] = val
|
||||
comp["rowcals"] = row_cals
|
||||
comp["colcals"] = col_cals
|
||||
comp["data"]["data"] = row_cals[:, None] * comp["data"]["data"] * col_cals[None, :]
|
||||
|
||||
|
||||
@verbose
|
||||
def read_ctf_comp(fid, node, chs, verbose=None):
|
||||
"""Read the CTF software compensation data from the given node.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The file descriptor.
|
||||
node : dict
|
||||
The node in the FIF tree.
|
||||
chs : list
|
||||
The list of channels from info['chs'] to match with
|
||||
compensators that are read.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
compdata : list
|
||||
The compensation data
|
||||
"""
|
||||
return _read_ctf_comp(fid, node, chs, None)
|
||||
|
||||
|
||||
def _read_ctf_comp(fid, node, chs, ch_names_mapping):
|
||||
"""Read the CTF software compensation data from the given node.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The file descriptor.
|
||||
node : dict
|
||||
The node in the FIF tree.
|
||||
chs : list
|
||||
The list of channels from info['chs'] to match with
|
||||
compensators that are read.
|
||||
ch_names_mapping : dict | None
|
||||
The channel renaming to use.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
compdata : list
|
||||
The compensation data
|
||||
"""
|
||||
from .meas_info import _rename_comps
|
||||
|
||||
ch_names_mapping = dict() if ch_names_mapping is None else ch_names_mapping
|
||||
compdata = []
|
||||
comps = dir_tree_find(node, FIFF.FIFFB_MNE_CTF_COMP_DATA)
|
||||
|
||||
for node in comps:
|
||||
# Read the data we need
|
||||
mat = _read_named_matrix(fid, node, FIFF.FIFF_MNE_CTF_COMP_DATA)
|
||||
for p in range(node["nent"]):
|
||||
kind = node["directory"][p].kind
|
||||
pos = node["directory"][p].pos
|
||||
if kind == FIFF.FIFF_MNE_CTF_COMP_KIND:
|
||||
tag = read_tag(fid, pos)
|
||||
break
|
||||
else:
|
||||
raise Exception("Compensation type not found")
|
||||
|
||||
# Get the compensation kind and map it to a simple number
|
||||
one = dict(ctfkind=tag.data.item())
|
||||
del tag
|
||||
_add_kind(one)
|
||||
for p in range(node["nent"]):
|
||||
kind = node["directory"][p].kind
|
||||
pos = node["directory"][p].pos
|
||||
if kind == FIFF.FIFF_MNE_CTF_COMP_CALIBRATED:
|
||||
tag = read_tag(fid, pos)
|
||||
calibrated = tag.data
|
||||
break
|
||||
else:
|
||||
calibrated = False
|
||||
|
||||
one["save_calibrated"] = bool(calibrated)
|
||||
one["data"] = mat
|
||||
_rename_comps([one], ch_names_mapping)
|
||||
if not calibrated:
|
||||
# Calibrate...
|
||||
_calibrate_comp(one, chs, mat["row_names"], mat["col_names"])
|
||||
else:
|
||||
one["rowcals"] = np.ones(mat["data"].shape[0], dtype=np.float64)
|
||||
one["colcals"] = np.ones(mat["data"].shape[1], dtype=np.float64)
|
||||
|
||||
compdata.append(one)
|
||||
|
||||
if len(compdata) > 0:
|
||||
logger.info(f" Read {len(compdata)} compensation matrices")
|
||||
|
||||
return compdata
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Writing
|
||||
|
||||
|
||||
def write_ctf_comp(fid, comps):
|
||||
"""Write the CTF compensation data into a fif file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The open FIF file descriptor
|
||||
|
||||
comps : list
|
||||
The compensation data to write
|
||||
"""
|
||||
if len(comps) <= 0:
|
||||
return
|
||||
|
||||
# This is very simple in fact
|
||||
start_block(fid, FIFF.FIFFB_MNE_CTF_COMP)
|
||||
for comp in comps:
|
||||
start_block(fid, FIFF.FIFFB_MNE_CTF_COMP_DATA)
|
||||
# Write the compensation kind
|
||||
write_int(fid, FIFF.FIFF_MNE_CTF_COMP_KIND, comp["ctfkind"])
|
||||
if comp.get("save_calibrated", False):
|
||||
write_int(fid, FIFF.FIFF_MNE_CTF_COMP_CALIBRATED, comp["save_calibrated"])
|
||||
|
||||
if not comp.get("save_calibrated", True):
|
||||
# Undo calibration
|
||||
comp = deepcopy(comp)
|
||||
data = (
|
||||
(1.0 / comp["rowcals"][:, None])
|
||||
* comp["data"]["data"]
|
||||
* (1.0 / comp["colcals"][None, :])
|
||||
)
|
||||
comp["data"]["data"] = data
|
||||
write_named_matrix(fid, FIFF.FIFF_MNE_CTF_COMP_DATA, comp["data"])
|
||||
end_block(fid, FIFF.FIFFB_MNE_CTF_COMP_DATA)
|
||||
|
||||
end_block(fid, FIFF.FIFFB_MNE_CTF_COMP)
|
||||
137
mne/_fiff/matrix.py
Normal file
137
mne/_fiff/matrix.py
Normal file
@@ -0,0 +1,137 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from ..utils import logger
|
||||
from .constants import FIFF
|
||||
from .tag import find_tag, has_tag
|
||||
from .write import (
|
||||
end_block,
|
||||
start_block,
|
||||
write_float_matrix,
|
||||
write_int,
|
||||
write_name_list,
|
||||
)
|
||||
|
||||
|
||||
def _transpose_named_matrix(mat):
|
||||
"""Transpose mat inplace (no copy)."""
|
||||
mat["nrow"], mat["ncol"] = mat["ncol"], mat["nrow"]
|
||||
mat["row_names"], mat["col_names"] = mat["col_names"], mat["row_names"]
|
||||
mat["data"] = mat["data"].T
|
||||
|
||||
|
||||
def _read_named_matrix(fid, node, matkind, indent=" ", transpose=False):
|
||||
"""Read named matrix from the given node.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The opened file descriptor.
|
||||
node : dict
|
||||
The node in the tree.
|
||||
matkind : int
|
||||
The type of matrix.
|
||||
transpose : bool
|
||||
If True, transpose the matrix. Default is False.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
mat: dict
|
||||
The matrix data
|
||||
"""
|
||||
# Descend one level if necessary
|
||||
if node["block"] != FIFF.FIFFB_MNE_NAMED_MATRIX:
|
||||
for k in range(node["nchild"]):
|
||||
if node["children"][k]["block"] == FIFF.FIFFB_MNE_NAMED_MATRIX:
|
||||
if has_tag(node["children"][k], matkind):
|
||||
node = node["children"][k]
|
||||
break
|
||||
else:
|
||||
logger.info(
|
||||
f"{indent}Desired named matrix (kind = {matkind}) not available"
|
||||
)
|
||||
return None
|
||||
else:
|
||||
if not has_tag(node, matkind):
|
||||
logger.info(
|
||||
f"{indent}Desired named matrix (kind = {matkind}) not available"
|
||||
)
|
||||
return None
|
||||
|
||||
# Read everything we need
|
||||
tag = find_tag(fid, node, matkind)
|
||||
if tag is None:
|
||||
raise ValueError("Matrix data missing")
|
||||
else:
|
||||
data = tag.data
|
||||
|
||||
nrow, ncol = data.shape
|
||||
tag = find_tag(fid, node, FIFF.FIFF_MNE_NROW)
|
||||
if tag is not None and tag.data != nrow:
|
||||
raise ValueError(
|
||||
"Number of rows in matrix data and FIFF_MNE_NROW tag do not match"
|
||||
)
|
||||
|
||||
tag = find_tag(fid, node, FIFF.FIFF_MNE_NCOL)
|
||||
if tag is not None and tag.data != ncol:
|
||||
raise ValueError(
|
||||
"Number of columns in matrix data and FIFF_MNE_NCOL tag do not match"
|
||||
)
|
||||
|
||||
tag = find_tag(fid, node, FIFF.FIFF_MNE_ROW_NAMES)
|
||||
row_names = tag.data.split(":") if tag is not None else []
|
||||
|
||||
tag = find_tag(fid, node, FIFF.FIFF_MNE_COL_NAMES)
|
||||
col_names = tag.data.split(":") if tag is not None else []
|
||||
|
||||
mat = dict(
|
||||
nrow=nrow, ncol=ncol, row_names=row_names, col_names=col_names, data=data
|
||||
)
|
||||
if transpose:
|
||||
_transpose_named_matrix(mat)
|
||||
return mat
|
||||
|
||||
|
||||
def write_named_matrix(fid, kind, mat):
|
||||
"""Write named matrix from the given node.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The opened file descriptor.
|
||||
kind : int
|
||||
The kind of the matrix.
|
||||
matkind : int
|
||||
The type of matrix.
|
||||
"""
|
||||
# let's save ourselves from disaster
|
||||
n_tot = mat["nrow"] * mat["ncol"]
|
||||
if mat["data"].size != n_tot:
|
||||
ratio = n_tot / float(mat["data"].size)
|
||||
if n_tot < mat["data"].size and ratio > 0:
|
||||
ratio = 1 / ratio
|
||||
raise ValueError(
|
||||
f"Cannot write matrix: row ({mat['nrow']}) and column ({mat['ncol']}) "
|
||||
f"total element ({n_tot}) mismatch with data size ({mat['data'].size}), "
|
||||
f"appears to be off by a factor of {ratio:g}x"
|
||||
)
|
||||
start_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX)
|
||||
write_int(fid, FIFF.FIFF_MNE_NROW, mat["nrow"])
|
||||
write_int(fid, FIFF.FIFF_MNE_NCOL, mat["ncol"])
|
||||
|
||||
if len(mat["row_names"]) > 0:
|
||||
# let's prevent unintentional stupidity
|
||||
if len(mat["row_names"]) != mat["nrow"]:
|
||||
raise ValueError('len(mat["row_names"]) != mat["nrow"]')
|
||||
write_name_list(fid, FIFF.FIFF_MNE_ROW_NAMES, mat["row_names"])
|
||||
|
||||
if len(mat["col_names"]) > 0:
|
||||
# let's prevent unintentional stupidity
|
||||
if len(mat["col_names"]) != mat["ncol"]:
|
||||
raise ValueError('len(mat["col_names"]) != mat["ncol"]')
|
||||
write_name_list(fid, FIFF.FIFF_MNE_COL_NAMES, mat["col_names"])
|
||||
|
||||
write_float_matrix(fid, kind, mat["data"])
|
||||
end_block(fid, FIFF.FIFFB_MNE_NAMED_MATRIX)
|
||||
3764
mne/_fiff/meas_info.py
Normal file
3764
mne/_fiff/meas_info.py
Normal file
File diff suppressed because it is too large
Load Diff
386
mne/_fiff/open.py
Normal file
386
mne/_fiff/open.py
Normal file
@@ -0,0 +1,386 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from gzip import GzipFile
|
||||
from io import SEEK_SET, BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
from scipy.sparse import issparse
|
||||
|
||||
from ..utils import _check_fname, _file_like, _validate_type, logger, verbose, warn
|
||||
from .constants import FIFF
|
||||
from .tag import Tag, _call_dict_names, _matrix_info, _read_tag_header, read_tag
|
||||
from .tree import dir_tree_find, make_dir_tree
|
||||
|
||||
|
||||
class _NoCloseRead:
|
||||
"""Create a wrapper that will not close when used as a context manager."""
|
||||
|
||||
def __init__(self, fid):
|
||||
self.fid = fid
|
||||
|
||||
def __enter__(self):
|
||||
return self.fid
|
||||
|
||||
def __exit__(self, type_, value, traceback):
|
||||
return
|
||||
|
||||
def close(self):
|
||||
return
|
||||
|
||||
def seek(self, offset, whence=SEEK_SET):
|
||||
return self.fid.seek(offset, whence)
|
||||
|
||||
def read(self, size=-1):
|
||||
return self.fid.read(size)
|
||||
|
||||
|
||||
def _fiff_get_fid(fname):
|
||||
"""Open a FIF file with no additional parsing."""
|
||||
if _file_like(fname):
|
||||
logger.debug("Using file-like I/O")
|
||||
fid = _NoCloseRead(fname)
|
||||
fid.seek(0)
|
||||
else:
|
||||
_validate_type(fname, Path, "fname", extra="or file-like")
|
||||
if fname.suffixes[-1] == ".gz":
|
||||
logger.debug("Using gzip I/O")
|
||||
fid = GzipFile(fname, "rb") # Open in binary mode
|
||||
else:
|
||||
logger.debug("Using normal I/O")
|
||||
fid = open(fname, "rb") # Open in binary mode
|
||||
return fid
|
||||
|
||||
|
||||
def _get_next_fname(fid, fname, tree):
|
||||
"""Get the next filename in split files."""
|
||||
_validate_type(fname, (Path, None), "fname")
|
||||
nodes_list = dir_tree_find(tree, FIFF.FIFFB_REF)
|
||||
next_fname = None
|
||||
for nodes in nodes_list:
|
||||
next_fname = None
|
||||
for ent in nodes["directory"]:
|
||||
if ent.kind == FIFF.FIFF_REF_ROLE:
|
||||
tag = read_tag(fid, ent.pos)
|
||||
role = int(tag.data.item())
|
||||
if role != FIFF.FIFFV_ROLE_NEXT_FILE:
|
||||
next_fname = None
|
||||
break
|
||||
if ent.kind not in (FIFF.FIFF_REF_FILE_NAME, FIFF.FIFF_REF_FILE_NUM):
|
||||
continue
|
||||
# If we can't resolve it, assume/hope it's in the current directory
|
||||
if fname is None:
|
||||
fname = Path().resolve()
|
||||
if ent.kind == FIFF.FIFF_REF_FILE_NAME:
|
||||
tag = read_tag(fid, ent.pos)
|
||||
next_fname = fname.parent / tag.data
|
||||
if ent.kind == FIFF.FIFF_REF_FILE_NUM:
|
||||
# Some files don't have the name, just the number. So
|
||||
# we construct the name from the current name.
|
||||
if next_fname is not None:
|
||||
continue
|
||||
next_num = read_tag(fid, ent.pos).data.item()
|
||||
base = fname.name
|
||||
idx = base.find(".")
|
||||
idx2 = base.rfind("-")
|
||||
num_str = base[idx2 + 1 : idx]
|
||||
if not num_str.isdigit():
|
||||
idx2 = -1
|
||||
|
||||
if idx2 < 0 and next_num == 1:
|
||||
# this is the first file, which may not be numbered
|
||||
next_fname = (
|
||||
fname.parent / f"{base[:idx]}-{next_num:d}.{base[idx + 1 :]}"
|
||||
)
|
||||
continue
|
||||
|
||||
next_fname = (
|
||||
fname.parent / f"{base[:idx2]}-{next_num:d}.{base[idx + 1 :]}"
|
||||
)
|
||||
if next_fname is not None:
|
||||
break
|
||||
return next_fname
|
||||
|
||||
|
||||
@verbose
|
||||
def fiff_open(fname, preload=False, verbose=None):
|
||||
"""Open a FIF file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like | fid
|
||||
Name of the fif file, or an opened file (will seek back to 0).
|
||||
preload : bool
|
||||
If True, all data from the file is read into a memory buffer. This
|
||||
requires more memory, but can be faster for I/O operations that require
|
||||
frequent seeks.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
fid : file
|
||||
The file descriptor of the open file.
|
||||
tree : fif tree
|
||||
The tree is a complex structure filled with dictionaries,
|
||||
lists and tags.
|
||||
directory : list
|
||||
A list of tags.
|
||||
"""
|
||||
fid = _fiff_get_fid(fname)
|
||||
try:
|
||||
return _fiff_open(fname, fid, preload)
|
||||
except Exception:
|
||||
fid.close()
|
||||
raise
|
||||
|
||||
|
||||
def _fiff_open(fname, fid, preload):
|
||||
# do preloading of entire file
|
||||
if preload:
|
||||
# note that StringIO objects instantiated this way are read-only,
|
||||
# but that's okay here since we are using mode "rb" anyway
|
||||
with fid as fid_old:
|
||||
fid = BytesIO(fid_old.read())
|
||||
|
||||
tag = _read_tag_header(fid, 0)
|
||||
|
||||
# Check that this looks like a fif file
|
||||
prefix = f"file {repr(fname)} does not"
|
||||
if tag.kind != FIFF.FIFF_FILE_ID:
|
||||
raise ValueError(f"{prefix} start with a file id tag")
|
||||
|
||||
if tag.type != FIFF.FIFFT_ID_STRUCT:
|
||||
raise ValueError(f"{prefix} start with a file id tag")
|
||||
|
||||
if tag.size != 20:
|
||||
raise ValueError(f"{prefix} start with a file id tag")
|
||||
|
||||
tag = read_tag(fid, tag.next_pos)
|
||||
|
||||
if tag.kind != FIFF.FIFF_DIR_POINTER:
|
||||
raise ValueError(f"{prefix} have a directory pointer")
|
||||
|
||||
# Read or create the directory tree
|
||||
logger.debug(f" Creating tag directory for {fname}...")
|
||||
|
||||
dirpos = int(tag.data.item())
|
||||
read_slow = True
|
||||
if dirpos > 0:
|
||||
dir_tag = read_tag(fid, dirpos)
|
||||
if dir_tag is None or dir_tag.data is None:
|
||||
fid.seek(0, 2) # move to end of file
|
||||
size = fid.tell()
|
||||
extra = "" if size > dirpos else f" > file size {size}"
|
||||
warn(
|
||||
"FIF tag directory missing at the end of the file "
|
||||
f"(at byte {dirpos}{extra}), possibly corrupted file: {fname}"
|
||||
)
|
||||
else:
|
||||
directory = dir_tag.data
|
||||
read_slow = False
|
||||
if read_slow:
|
||||
pos = 0
|
||||
fid.seek(pos, 0)
|
||||
directory = list()
|
||||
while pos is not None:
|
||||
tag = _read_tag_header(fid, pos)
|
||||
if tag is None:
|
||||
break # HACK : to fix file ending with empty tag...
|
||||
pos = tag.next_pos
|
||||
directory.append(tag)
|
||||
|
||||
tree, _ = make_dir_tree(fid, directory, indent=1)
|
||||
|
||||
logger.debug("[done]")
|
||||
|
||||
# Back to the beginning
|
||||
fid.seek(0)
|
||||
|
||||
return fid, tree, directory
|
||||
|
||||
|
||||
@verbose
|
||||
def show_fiff(
|
||||
fname,
|
||||
indent=" ",
|
||||
read_limit=np.inf,
|
||||
max_str=30,
|
||||
output=str,
|
||||
tag=None,
|
||||
*,
|
||||
show_bytes=False,
|
||||
verbose=None,
|
||||
):
|
||||
"""Show FIFF information.
|
||||
|
||||
This function is similar to mne_show_fiff.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
Filename to evaluate.
|
||||
indent : str
|
||||
How to indent the lines.
|
||||
read_limit : int
|
||||
Max number of bytes of data to read from a tag. Can be np.inf
|
||||
to always read all data (helps test read completion).
|
||||
max_str : int
|
||||
Max number of characters of string representation to print for
|
||||
each tag's data.
|
||||
output : type
|
||||
Either str or list. str is a convenience output for printing.
|
||||
tag : int | None
|
||||
Provide information about this tag. If None (default), all information
|
||||
is shown.
|
||||
show_bytes : bool
|
||||
If True (default False), print the byte offsets of each tag.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
contents : str
|
||||
The contents of the file.
|
||||
"""
|
||||
if output not in [list, str]:
|
||||
raise ValueError("output must be list or str")
|
||||
if isinstance(tag, str): # command mne show_fiff passes string
|
||||
tag = int(tag)
|
||||
fname = _check_fname(fname, "read", True)
|
||||
f, tree, _ = fiff_open(fname)
|
||||
# This gets set to 0 (unknown) by fiff_open, but FIFFB_ROOT probably
|
||||
# makes more sense for display
|
||||
tree["block"] = FIFF.FIFFB_ROOT
|
||||
with f as fid:
|
||||
out = _show_tree(
|
||||
fid,
|
||||
tree,
|
||||
indent=indent,
|
||||
level=0,
|
||||
read_limit=read_limit,
|
||||
max_str=max_str,
|
||||
tag_id=tag,
|
||||
show_bytes=show_bytes,
|
||||
)
|
||||
if output is str:
|
||||
out = "\n".join(out)
|
||||
return out
|
||||
|
||||
|
||||
def _find_type(value, fmts=("FIFF_",), exclude=("FIFF_UNIT",)):
|
||||
"""Find matching values."""
|
||||
value = int(value)
|
||||
vals = [
|
||||
k
|
||||
for k, v in FIFF.items()
|
||||
if v == value
|
||||
and any(fmt in k for fmt in fmts)
|
||||
and not any(exc in k for exc in exclude)
|
||||
]
|
||||
if len(vals) == 0:
|
||||
vals = ["???"]
|
||||
return vals
|
||||
|
||||
|
||||
def _show_tree(
|
||||
fid,
|
||||
tree,
|
||||
indent,
|
||||
level,
|
||||
read_limit,
|
||||
max_str,
|
||||
tag_id,
|
||||
*,
|
||||
show_bytes=False,
|
||||
):
|
||||
"""Show FIFF tree."""
|
||||
this_idt = indent * level
|
||||
next_idt = indent * (level + 1)
|
||||
# print block-level information
|
||||
found_types = "/".join(_find_type(tree["block"], fmts=["FIFFB_"]))
|
||||
out = [f"{this_idt}{str(int(tree['block'])).ljust(4)} = {found_types}"]
|
||||
tag_found = False
|
||||
if tag_id is None or out[0].strip().startswith(str(tag_id)):
|
||||
tag_found = True
|
||||
|
||||
if tree["directory"] is not None:
|
||||
kinds = [ent.kind for ent in tree["directory"]] + [-1]
|
||||
types = [ent.type for ent in tree["directory"]]
|
||||
sizes = [ent.size for ent in tree["directory"]]
|
||||
poss = [ent.pos for ent in tree["directory"]]
|
||||
counter = 0
|
||||
good = True
|
||||
for k, kn, size, pos, type_ in zip(kinds[:-1], kinds[1:], sizes, poss, types):
|
||||
if not tag_found and k != tag_id:
|
||||
continue
|
||||
tag = Tag(kind=k, type=type_, size=size, next=FIFF.FIFFV_NEXT_NONE, pos=pos)
|
||||
if read_limit is None or size <= read_limit:
|
||||
try:
|
||||
tag = read_tag(fid, pos)
|
||||
except Exception:
|
||||
good = False
|
||||
|
||||
if kn == k:
|
||||
# don't print if the next item is the same type (count 'em)
|
||||
counter += 1
|
||||
else:
|
||||
if show_bytes:
|
||||
at = f" @{pos}"
|
||||
else:
|
||||
at = ""
|
||||
# find the tag type
|
||||
this_type = _find_type(k, fmts=["FIFF_"])
|
||||
# prepend a count if necessary
|
||||
prepend = "x" + str(counter + 1) + ": " if counter > 0 else ""
|
||||
postpend = ""
|
||||
# print tag data nicely
|
||||
if tag.data is not None:
|
||||
postpend = " = " + str(tag.data)[:max_str]
|
||||
if isinstance(tag.data, np.ndarray):
|
||||
if tag.data.size > 1:
|
||||
postpend += " ... array size=" + str(tag.data.size)
|
||||
elif isinstance(tag.data, dict):
|
||||
postpend += " ... dict len=" + str(len(tag.data))
|
||||
elif isinstance(tag.data, str):
|
||||
postpend += " ... str len=" + str(len(tag.data))
|
||||
elif isinstance(tag.data, list | tuple):
|
||||
postpend += " ... list len=" + str(len(tag.data))
|
||||
elif issparse(tag.data):
|
||||
postpend += (
|
||||
f" ... sparse ({tag.data.getformat()}) shape="
|
||||
f"{tag.data.shape}"
|
||||
)
|
||||
else:
|
||||
postpend += " ... type=" + str(type(tag.data))
|
||||
postpend = ">" * 20 + f"BAD @{pos}" if not good else postpend
|
||||
matrix_info = _matrix_info(tag)
|
||||
if matrix_info is not None:
|
||||
_, type_, _, _ = matrix_info
|
||||
type_ = _call_dict_names.get(type_, f"?{type_}?")
|
||||
this_type = "/".join(this_type)
|
||||
out += [
|
||||
f"{next_idt}{prepend}{str(k).ljust(4)} = "
|
||||
f"{this_type}{at} ({size}b {type_}) {postpend}"
|
||||
]
|
||||
out[-1] = out[-1].replace("\n", "¶")
|
||||
counter = 0
|
||||
good = True
|
||||
if tag_id in kinds:
|
||||
tag_found = True
|
||||
if not tag_found:
|
||||
out = [""]
|
||||
level = -1 # removes extra indent
|
||||
# deal with children
|
||||
for branch in tree["children"]:
|
||||
out += _show_tree(
|
||||
fid,
|
||||
branch,
|
||||
indent,
|
||||
level + 1,
|
||||
read_limit,
|
||||
max_str,
|
||||
tag_id,
|
||||
show_bytes=show_bytes,
|
||||
)
|
||||
return out
|
||||
1413
mne/_fiff/pick.py
Normal file
1413
mne/_fiff/pick.py
Normal file
File diff suppressed because it is too large
Load Diff
345
mne/_fiff/proc_history.py
Normal file
345
mne/_fiff/proc_history.py
Normal file
@@ -0,0 +1,345 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..fixes import _csc_array_cast
|
||||
from ..utils import _check_fname, warn
|
||||
from .constants import FIFF
|
||||
from .open import fiff_open, read_tag
|
||||
from .tag import _float_item, _int_item, find_tag
|
||||
from .tree import dir_tree_find
|
||||
from .write import (
|
||||
_safe_name_list,
|
||||
end_block,
|
||||
start_block,
|
||||
write_float,
|
||||
write_float_matrix,
|
||||
write_float_sparse,
|
||||
write_id,
|
||||
write_int,
|
||||
write_int_matrix,
|
||||
write_name_list_sanitized,
|
||||
write_string,
|
||||
)
|
||||
|
||||
_proc_map = dict( # ID, caster, writer
|
||||
parent_file_id=(
|
||||
FIFF.FIFF_PARENT_FILE_ID,
|
||||
dict,
|
||||
write_id,
|
||||
),
|
||||
block_id=(
|
||||
FIFF.FIFF_BLOCK_ID,
|
||||
dict,
|
||||
write_id,
|
||||
),
|
||||
parent_block_id=(
|
||||
FIFF.FIFF_PARENT_BLOCK_ID,
|
||||
dict,
|
||||
write_id,
|
||||
),
|
||||
date=(
|
||||
FIFF.FIFF_MEAS_DATE,
|
||||
lambda d: tuple(int(dd) for dd in d),
|
||||
write_int,
|
||||
),
|
||||
experimenter=(
|
||||
FIFF.FIFF_EXPERIMENTER,
|
||||
str,
|
||||
write_string,
|
||||
),
|
||||
creator=(
|
||||
FIFF.FIFF_CREATOR,
|
||||
str,
|
||||
write_string,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _read_proc_history(fid, tree):
|
||||
"""Read processing history from fiff file.
|
||||
|
||||
This function reads the SSS info, the CTC correction and the
|
||||
calibaraions from the SSS processing logs inside af a raw file
|
||||
(C.f. Maxfilter v2.2 manual (October 2010), page 21)::
|
||||
|
||||
104 = { 900 = proc. history
|
||||
104 = { 901 = proc. record
|
||||
103 = block ID
|
||||
204 = date
|
||||
212 = scientist
|
||||
113 = creator program
|
||||
104 = { 502 = SSS info
|
||||
264 = SSS task
|
||||
263 = SSS coord frame
|
||||
265 = SSS origin
|
||||
266 = SSS ins.order
|
||||
267 = SSS outs.order
|
||||
268 = SSS nr chnls
|
||||
269 = SSS components
|
||||
278 = SSS nfree
|
||||
243 = HPI g limit 0.98
|
||||
244 = HPI dist limit 0.005
|
||||
105 = } 502 = SSS info
|
||||
104 = { 504 = MaxST info
|
||||
264 = SSS task
|
||||
272 = SSST subspace correlation
|
||||
279 = SSST buffer length
|
||||
105 = }
|
||||
104 = { 501 = CTC correction
|
||||
103 = block ID
|
||||
204 = date
|
||||
113 = creator program
|
||||
800 = CTC matrix
|
||||
3417 = proj item chs
|
||||
105 = } 501 = CTC correction
|
||||
104 = { 503 = SSS finecalib.
|
||||
270 = SSS cal chnls
|
||||
271 = SSS cal coeff
|
||||
105 = } 503 = SSS finecalib.
|
||||
105 = } 901 = proc. record
|
||||
105 = } 900 = proc. history
|
||||
"""
|
||||
proc_history = dir_tree_find(tree, FIFF.FIFFB_PROCESSING_HISTORY)
|
||||
out = list()
|
||||
if len(proc_history) > 0:
|
||||
proc_history = proc_history[0]
|
||||
proc_records = dir_tree_find(proc_history, FIFF.FIFFB_PROCESSING_RECORD)
|
||||
for proc_record in proc_records:
|
||||
record = dict()
|
||||
for i_ent in range(proc_record["nent"]):
|
||||
kind = proc_record["directory"][i_ent].kind
|
||||
pos = proc_record["directory"][i_ent].pos
|
||||
for key, (id_, cast, _) in _proc_map.items():
|
||||
if kind == id_:
|
||||
tag = read_tag(fid, pos)
|
||||
record[key] = cast(tag.data)
|
||||
break
|
||||
else:
|
||||
warn(f"Unknown processing history item {kind}")
|
||||
record["max_info"] = _read_maxfilter_record(fid, proc_record)
|
||||
iass = dir_tree_find(proc_record, FIFF.FIFFB_IAS)
|
||||
if len(iass) > 0:
|
||||
# XXX should eventually populate this
|
||||
ss = [dict() for _ in range(len(iass))]
|
||||
record["ias"] = ss
|
||||
if len(record["max_info"]) > 0:
|
||||
out.append(record)
|
||||
return out
|
||||
|
||||
|
||||
def _write_proc_history(fid, info):
|
||||
"""Write processing history to file."""
|
||||
if len(info["proc_history"]) > 0:
|
||||
start_block(fid, FIFF.FIFFB_PROCESSING_HISTORY)
|
||||
for record in info["proc_history"]:
|
||||
start_block(fid, FIFF.FIFFB_PROCESSING_RECORD)
|
||||
for key, (id_, _, writer) in _proc_map.items():
|
||||
if key in record:
|
||||
writer(fid, id_, record[key])
|
||||
_write_maxfilter_record(fid, record["max_info"])
|
||||
if "ias" in record:
|
||||
for _ in record["ias"]:
|
||||
start_block(fid, FIFF.FIFFB_IAS)
|
||||
# XXX should eventually populate this
|
||||
end_block(fid, FIFF.FIFFB_IAS)
|
||||
end_block(fid, FIFF.FIFFB_PROCESSING_RECORD)
|
||||
end_block(fid, FIFF.FIFFB_PROCESSING_HISTORY)
|
||||
|
||||
|
||||
_sss_info_keys = (
|
||||
"job",
|
||||
"frame",
|
||||
"origin",
|
||||
"in_order",
|
||||
"out_order",
|
||||
"nchan",
|
||||
"components",
|
||||
"nfree",
|
||||
"hpi_g_limit",
|
||||
"hpi_dist_limit",
|
||||
)
|
||||
_sss_info_ids = (
|
||||
FIFF.FIFF_SSS_JOB,
|
||||
FIFF.FIFF_SSS_FRAME,
|
||||
FIFF.FIFF_SSS_ORIGIN,
|
||||
FIFF.FIFF_SSS_ORD_IN,
|
||||
FIFF.FIFF_SSS_ORD_OUT,
|
||||
FIFF.FIFF_SSS_NMAG,
|
||||
FIFF.FIFF_SSS_COMPONENTS,
|
||||
FIFF.FIFF_SSS_NFREE,
|
||||
FIFF.FIFF_HPI_FIT_GOOD_LIMIT,
|
||||
FIFF.FIFF_HPI_FIT_DIST_LIMIT,
|
||||
)
|
||||
_sss_info_writers = (
|
||||
write_int,
|
||||
write_int,
|
||||
write_float,
|
||||
write_int,
|
||||
write_int,
|
||||
write_int,
|
||||
write_int,
|
||||
write_int,
|
||||
write_float,
|
||||
write_float,
|
||||
)
|
||||
_sss_info_casters = (
|
||||
_int_item,
|
||||
_int_item,
|
||||
np.array,
|
||||
_int_item,
|
||||
_int_item,
|
||||
_int_item,
|
||||
np.array,
|
||||
_int_item,
|
||||
_float_item,
|
||||
_float_item,
|
||||
)
|
||||
|
||||
_max_st_keys = ("job", "subspcorr", "buflen")
|
||||
_max_st_ids = (FIFF.FIFF_SSS_JOB, FIFF.FIFF_SSS_ST_CORR, FIFF.FIFF_SSS_ST_LENGTH)
|
||||
_max_st_writers = (write_int, write_float, write_float)
|
||||
_max_st_casters = (_int_item, _float_item, _float_item)
|
||||
|
||||
_sss_ctc_keys = ("block_id", "date", "creator", "decoupler")
|
||||
_sss_ctc_ids = (
|
||||
FIFF.FIFF_BLOCK_ID,
|
||||
FIFF.FIFF_MEAS_DATE,
|
||||
FIFF.FIFF_CREATOR,
|
||||
FIFF.FIFF_DECOUPLER_MATRIX,
|
||||
)
|
||||
_sss_ctc_writers = (write_id, write_int, write_string, write_float_sparse)
|
||||
_sss_ctc_casters = (dict, np.array, str, _csc_array_cast)
|
||||
|
||||
_sss_cal_keys = ("cal_chans", "cal_corrs")
|
||||
_sss_cal_ids = (FIFF.FIFF_SSS_CAL_CHANS, FIFF.FIFF_SSS_CAL_CORRS)
|
||||
_sss_cal_writers = (write_int_matrix, write_float_matrix)
|
||||
_sss_cal_casters = (np.array, np.array)
|
||||
|
||||
|
||||
def _read_ctc(fname):
|
||||
"""Read cross-talk correction matrix."""
|
||||
fname = _check_fname(fname, overwrite="read", must_exist=True)
|
||||
f, tree, _ = fiff_open(fname)
|
||||
with f as fid:
|
||||
sss_ctc = _read_maxfilter_record(fid, tree)["sss_ctc"]
|
||||
bad_str = f"Invalid cross-talk FIF: {fname}"
|
||||
if len(sss_ctc) == 0:
|
||||
raise ValueError(bad_str)
|
||||
node = dir_tree_find(tree, FIFF.FIFFB_DATA_CORRECTION)[0]
|
||||
comment = find_tag(fid, node, FIFF.FIFF_COMMENT).data
|
||||
if comment != "cross-talk compensation matrix":
|
||||
raise ValueError(bad_str)
|
||||
sss_ctc["creator"] = find_tag(fid, node, FIFF.FIFF_CREATOR).data
|
||||
sss_ctc["date"] = find_tag(fid, node, FIFF.FIFF_MEAS_DATE).data
|
||||
return sss_ctc
|
||||
|
||||
|
||||
def _read_maxfilter_record(fid, tree):
|
||||
"""Read maxfilter processing record from file."""
|
||||
sss_info_block = dir_tree_find(tree, FIFF.FIFFB_SSS_INFO) # 502
|
||||
sss_info = dict()
|
||||
if len(sss_info_block) > 0:
|
||||
sss_info_block = sss_info_block[0]
|
||||
for i_ent in range(sss_info_block["nent"]):
|
||||
kind = sss_info_block["directory"][i_ent].kind
|
||||
pos = sss_info_block["directory"][i_ent].pos
|
||||
for key, id_, cast in zip(_sss_info_keys, _sss_info_ids, _sss_info_casters):
|
||||
if kind == id_:
|
||||
tag = read_tag(fid, pos)
|
||||
sss_info[key] = cast(tag.data)
|
||||
break
|
||||
|
||||
max_st_block = dir_tree_find(tree, FIFF.FIFFB_SSS_ST_INFO) # 504
|
||||
max_st = dict()
|
||||
if len(max_st_block) > 0:
|
||||
max_st_block = max_st_block[0]
|
||||
for i_ent in range(max_st_block["nent"]):
|
||||
kind = max_st_block["directory"][i_ent].kind
|
||||
pos = max_st_block["directory"][i_ent].pos
|
||||
for key, id_, cast in zip(_max_st_keys, _max_st_ids, _max_st_casters):
|
||||
if kind == id_:
|
||||
tag = read_tag(fid, pos)
|
||||
max_st[key] = cast(tag.data)
|
||||
break
|
||||
|
||||
sss_ctc_block = dir_tree_find(tree, FIFF.FIFFB_CHANNEL_DECOUPLER) # 501
|
||||
sss_ctc = dict()
|
||||
if len(sss_ctc_block) > 0:
|
||||
sss_ctc_block = sss_ctc_block[0]
|
||||
for i_ent in range(sss_ctc_block["nent"]):
|
||||
kind = sss_ctc_block["directory"][i_ent].kind
|
||||
pos = sss_ctc_block["directory"][i_ent].pos
|
||||
for key, id_, cast in zip(_sss_ctc_keys, _sss_ctc_ids, _sss_ctc_casters):
|
||||
if kind == id_:
|
||||
tag = read_tag(fid, pos)
|
||||
sss_ctc[key] = cast(tag.data)
|
||||
break
|
||||
else:
|
||||
if kind == FIFF.FIFF_PROJ_ITEM_CH_NAME_LIST:
|
||||
tag = read_tag(fid, pos)
|
||||
chs = _safe_name_list(tag.data, "read", "proj_items_chs")
|
||||
# This list can null chars in the last entry, e.g.:
|
||||
# [..., 'MEG2642', 'MEG2643', 'MEG2641\x00 ... \x00']
|
||||
chs[-1] = chs[-1].split("\x00")[0]
|
||||
sss_ctc["proj_items_chs"] = chs
|
||||
|
||||
sss_cal_block = dir_tree_find(tree, FIFF.FIFFB_SSS_CAL) # 503
|
||||
sss_cal = dict()
|
||||
if len(sss_cal_block) > 0:
|
||||
sss_cal_block = sss_cal_block[0]
|
||||
for i_ent in range(sss_cal_block["nent"]):
|
||||
kind = sss_cal_block["directory"][i_ent].kind
|
||||
pos = sss_cal_block["directory"][i_ent].pos
|
||||
for key, id_, cast in zip(_sss_cal_keys, _sss_cal_ids, _sss_cal_casters):
|
||||
if kind == id_:
|
||||
tag = read_tag(fid, pos)
|
||||
sss_cal[key] = cast(tag.data)
|
||||
break
|
||||
|
||||
max_info = dict(sss_info=sss_info, sss_ctc=sss_ctc, sss_cal=sss_cal, max_st=max_st)
|
||||
return max_info
|
||||
|
||||
|
||||
def _write_maxfilter_record(fid, record):
|
||||
"""Write maxfilter processing record to file."""
|
||||
sss_info = record["sss_info"]
|
||||
if len(sss_info) > 0:
|
||||
start_block(fid, FIFF.FIFFB_SSS_INFO)
|
||||
for key, id_, writer in zip(_sss_info_keys, _sss_info_ids, _sss_info_writers):
|
||||
if key in sss_info:
|
||||
writer(fid, id_, sss_info[key])
|
||||
end_block(fid, FIFF.FIFFB_SSS_INFO)
|
||||
|
||||
max_st = record["max_st"]
|
||||
if len(max_st) > 0:
|
||||
start_block(fid, FIFF.FIFFB_SSS_ST_INFO)
|
||||
for key, id_, writer in zip(_max_st_keys, _max_st_ids, _max_st_writers):
|
||||
if key in max_st:
|
||||
writer(fid, id_, max_st[key])
|
||||
end_block(fid, FIFF.FIFFB_SSS_ST_INFO)
|
||||
|
||||
sss_ctc = record["sss_ctc"]
|
||||
if len(sss_ctc) > 0: # dict has entries
|
||||
start_block(fid, FIFF.FIFFB_CHANNEL_DECOUPLER)
|
||||
for key, id_, writer in zip(_sss_ctc_keys, _sss_ctc_ids, _sss_ctc_writers):
|
||||
if key in sss_ctc:
|
||||
writer(fid, id_, sss_ctc[key])
|
||||
if "proj_items_chs" in sss_ctc:
|
||||
write_name_list_sanitized(
|
||||
fid,
|
||||
FIFF.FIFF_PROJ_ITEM_CH_NAME_LIST,
|
||||
sss_ctc["proj_items_chs"],
|
||||
"proj_items_chs",
|
||||
)
|
||||
end_block(fid, FIFF.FIFFB_CHANNEL_DECOUPLER)
|
||||
|
||||
sss_cal = record["sss_cal"]
|
||||
if len(sss_cal) > 0:
|
||||
start_block(fid, FIFF.FIFFB_SSS_CAL)
|
||||
for key, id_, writer in zip(_sss_cal_keys, _sss_cal_ids, _sss_cal_writers):
|
||||
if key in sss_cal:
|
||||
writer(fid, id_, sss_cal[key])
|
||||
end_block(fid, FIFF.FIFFB_SSS_CAL)
|
||||
1189
mne/_fiff/proj.py
Normal file
1189
mne/_fiff/proj.py
Normal file
File diff suppressed because it is too large
Load Diff
738
mne/_fiff/reference.py
Normal file
738
mne/_fiff/reference.py
Normal file
@@ -0,0 +1,738 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..defaults import DEFAULTS
|
||||
from ..utils import (
|
||||
_check_option,
|
||||
_check_preload,
|
||||
_on_missing,
|
||||
_validate_type,
|
||||
fill_doc,
|
||||
logger,
|
||||
pinv,
|
||||
verbose,
|
||||
warn,
|
||||
)
|
||||
from .constants import FIFF
|
||||
from .meas_info import _check_ch_keys
|
||||
from .pick import _ELECTRODE_CH_TYPES, pick_channels, pick_channels_forward, pick_types
|
||||
from .proj import _has_eeg_average_ref_proj, make_eeg_average_ref_proj, setup_proj
|
||||
|
||||
|
||||
def _check_before_reference(inst, ref_from, ref_to, ch_type):
|
||||
"""Prepare instance for referencing."""
|
||||
# Check to see that data is preloaded
|
||||
_check_preload(inst, "Applying a reference")
|
||||
|
||||
ch_type = _get_ch_type(inst, ch_type)
|
||||
ch_dict = {**{type_: True for type_ in ch_type}, "meg": False, "ref_meg": False}
|
||||
eeg_idx = pick_types(inst.info, **ch_dict)
|
||||
|
||||
if ref_to is None:
|
||||
ref_to = [inst.ch_names[i] for i in eeg_idx]
|
||||
extra = "EEG channels found"
|
||||
else:
|
||||
extra = "channels supplied"
|
||||
if len(ref_to) == 0:
|
||||
raise ValueError(f"No {extra} to apply the reference to")
|
||||
|
||||
_check_ssp(inst, ref_from + ref_to)
|
||||
|
||||
# If the reference touches EEG/ECoG/sEEG/DBS electrodes, note in the
|
||||
# info that a non-CAR has been applied.
|
||||
ref_to_channels = pick_channels(inst.ch_names, ref_to, ordered=True)
|
||||
if len(np.intersect1d(ref_to_channels, eeg_idx)) > 0:
|
||||
with inst.info._unlock():
|
||||
inst.info["custom_ref_applied"] = FIFF.FIFFV_MNE_CUSTOM_REF_ON
|
||||
|
||||
return ref_to
|
||||
|
||||
|
||||
def _check_ssp(inst, ref_items):
|
||||
"""Check for SSPs that may block re-referencing."""
|
||||
projs_to_remove = []
|
||||
for i, proj in enumerate(inst.info["projs"]):
|
||||
# Remove any average reference projections
|
||||
if (
|
||||
proj["desc"] == "Average EEG reference"
|
||||
or proj["kind"] == FIFF.FIFFV_PROJ_ITEM_EEG_AVREF
|
||||
):
|
||||
logger.info("Removing existing average EEG reference projection.")
|
||||
# Don't remove the projection right away, but do this at the end of
|
||||
# this loop.
|
||||
projs_to_remove.append(i)
|
||||
|
||||
# Inactive SSPs may block re-referencing
|
||||
elif (
|
||||
not proj["active"]
|
||||
and len([ch for ch in ref_items if ch in proj["data"]["col_names"]]) > 0
|
||||
):
|
||||
raise RuntimeError(
|
||||
"Inactive signal space projection (SSP) operators are "
|
||||
"present that operate on sensors involved in the desired "
|
||||
"referencing scheme. These projectors need to be applied "
|
||||
"using the apply_proj() method function before the desired "
|
||||
"reference can be set."
|
||||
)
|
||||
|
||||
for i in projs_to_remove:
|
||||
del inst.info["projs"][i]
|
||||
|
||||
# Need to call setup_proj after changing the projs:
|
||||
inst._projector, _ = setup_proj(inst.info, add_eeg_ref=False, activate=False)
|
||||
|
||||
|
||||
def _check_before_dict_reference(inst, ref_dict):
|
||||
"""Prepare instance for dict-based referencing."""
|
||||
# Check to see that data is preloaded
|
||||
_check_preload(inst, "Applying a reference")
|
||||
|
||||
# Promote all values to list-like. This simplifies our logic and also helps catch
|
||||
# self-referencing cases like `{"Cz": ["Cz"]}`
|
||||
_refdict = {k: [v] if isinstance(v, str) else list(v) for k, v in ref_dict.items()}
|
||||
|
||||
# Check that keys are strings and values are lists-of-strings
|
||||
key_types = {type(k) for k in _refdict}
|
||||
value_types = {type(v) for val in _refdict.values() for v in val}
|
||||
for elem_name, elem in dict(key=key_types, value=value_types).items():
|
||||
if bad_elem := elem - {str}:
|
||||
raise TypeError(
|
||||
f"{elem_name.capitalize()}s in the ref_channels dict must be strings. "
|
||||
f"Your dict has {elem_name}s of type "
|
||||
f'{", ".join(map(lambda x: x.__name__, bad_elem))}.'
|
||||
)
|
||||
|
||||
# Check that keys are valid channels and values are lists-of-valid-channels
|
||||
ch_set = set(inst.ch_names)
|
||||
bad_ch_set = set(inst.info["bads"])
|
||||
keys = set(_refdict)
|
||||
values = set(sum(_refdict.values(), []))
|
||||
for elem_name, elem in dict(key=keys, value=values).items():
|
||||
if bad_elem := elem - ch_set:
|
||||
raise ValueError(
|
||||
f'ref_channels dict contains invalid {elem_name}(s) '
|
||||
f'({", ".join(bad_elem)}) '
|
||||
"that are not names of channels in the instance."
|
||||
)
|
||||
# Check that values are not bad channels
|
||||
if bad_elem := elem.intersection(bad_ch_set):
|
||||
warn(
|
||||
f"ref_channels dict contains {elem_name}(s) "
|
||||
f"({', '.join(bad_elem)}) "
|
||||
"that are marked as bad channels."
|
||||
)
|
||||
|
||||
_check_ssp(inst, keys.union(values))
|
||||
|
||||
# Check for self-referencing
|
||||
self_ref = [[k] == v for k, v in _refdict.items()]
|
||||
if any(self_ref):
|
||||
which = np.array(list(_refdict))[np.nonzero(self_ref)]
|
||||
for ch in which:
|
||||
warn(f"Channel {ch} is self-referenced, which will nullify the channel.")
|
||||
|
||||
# Check that channel types match. First unpack list-like vals into separate items:
|
||||
pairs = [(k, v) for k in _refdict for v in _refdict[k]]
|
||||
ch_type_map = dict(zip(inst.ch_names, inst.get_channel_types()))
|
||||
mismatch = [ch_type_map[k] != ch_type_map[v] for k, v in pairs]
|
||||
if any(mismatch):
|
||||
mismatch_pairs = np.array(pairs)[mismatch]
|
||||
for k, v in mismatch_pairs:
|
||||
warn(
|
||||
f"Channel {k} ({ch_type_map[k]}) is referenced to channel {v} which is "
|
||||
f"a different channel type ({ch_type_map[v]})."
|
||||
)
|
||||
|
||||
# convert channel names to indices
|
||||
keys_ix = pick_channels(inst.ch_names, list(_refdict), ordered=True)
|
||||
vals_ix = (pick_channels(inst.ch_names, v, ordered=True) for v in _refdict.values())
|
||||
return dict(zip(keys_ix, vals_ix))
|
||||
|
||||
|
||||
def _apply_reference(inst, ref_from, ref_to=None, forward=None, ch_type="auto"):
|
||||
"""Apply a custom EEG referencing scheme."""
|
||||
ref_to = _check_before_reference(inst, ref_from, ref_to, ch_type)
|
||||
|
||||
# Compute reference
|
||||
if len(ref_from) > 0:
|
||||
# this is guaranteed below, but we should avoid the crazy pick_channels
|
||||
# behavior that [] gives all. Also use ordered=True just to make sure
|
||||
# that all supplied channels actually exist.
|
||||
assert len(ref_to) > 0
|
||||
ref_names = ref_from
|
||||
ref_from = pick_channels(inst.ch_names, ref_from, ordered=True)
|
||||
ref_to = pick_channels(inst.ch_names, ref_to, ordered=True)
|
||||
|
||||
data = inst._data
|
||||
ref_data = data[..., ref_from, :].mean(-2, keepdims=True)
|
||||
data[..., ref_to, :] -= ref_data
|
||||
ref_data = ref_data[..., 0, :]
|
||||
|
||||
# REST
|
||||
if forward is not None:
|
||||
# use ch_sel and the given forward
|
||||
forward = pick_channels_forward(forward, ref_names, ordered=True)
|
||||
# 1-3. Compute a forward (G) and avg-ref'ed data (done above)
|
||||
G = forward["sol"]["data"]
|
||||
assert G.shape[0] == len(ref_names)
|
||||
# 4. Compute the forward (G) and average-reference it (Ga):
|
||||
Ga = G - np.mean(G, axis=0, keepdims=True)
|
||||
# 5. Compute the Ga_inv by SVD
|
||||
Ga_inv = pinv(Ga, rtol=1e-6)
|
||||
# 6. Compute Ra = (G @ Ga_inv) in eq (8) from G and Ga_inv
|
||||
Ra = G @ Ga_inv
|
||||
# 7-8. Compute Vp = Ra @ Va; then Vpa=average(Vp)
|
||||
Vpa = np.mean(Ra @ data[..., ref_from, :], axis=-2, keepdims=True)
|
||||
data[..., ref_to, :] += Vpa
|
||||
else:
|
||||
ref_data = None
|
||||
|
||||
return inst, ref_data
|
||||
|
||||
|
||||
def _apply_dict_reference(inst, ref_dict):
|
||||
"""Apply a dict-based custom EEG referencing scheme."""
|
||||
# this converts all keys to channel indices and all values to arrays of ch. indices:
|
||||
ref_dict = _check_before_dict_reference(inst, ref_dict)
|
||||
|
||||
data = inst._data
|
||||
orig_data = data.copy()
|
||||
for ref_to, ref_from in ref_dict.items():
|
||||
ref_data = orig_data[..., ref_from, :].mean(-2, keepdims=True)
|
||||
data[..., [ref_to], :] -= ref_data
|
||||
|
||||
with inst.info._unlock():
|
||||
inst.info["custom_ref_applied"] = FIFF.FIFFV_MNE_CUSTOM_REF_ON
|
||||
return inst, None
|
||||
|
||||
|
||||
@fill_doc
|
||||
def add_reference_channels(inst, ref_channels, copy=True):
|
||||
"""Add reference channels to data that consists of all zeros.
|
||||
|
||||
Adds reference channels to data that were not included during recording.
|
||||
This is useful when you need to re-reference your data to different
|
||||
channels. These added channels will consist of all zeros.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Instance of Raw or Epochs with EEG channels and reference channel(s).
|
||||
%(ref_channels)s
|
||||
copy : bool
|
||||
Specifies whether the data will be copied (True) or modified in-place
|
||||
(False). Defaults to True.
|
||||
|
||||
Returns
|
||||
-------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Data with added EEG reference channels.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. warning::
|
||||
When :ref:`re-referencing <tut-set-eeg-ref>`,
|
||||
make sure to apply the montage using :meth:`mne.io.Raw.set_montage`
|
||||
only after calling this function. Applying a montage will only set
|
||||
locations of channels that exist at the time it is applied.
|
||||
"""
|
||||
from ..epochs import BaseEpochs
|
||||
from ..evoked import Evoked
|
||||
from ..io import BaseRaw
|
||||
|
||||
# Check to see that data is preloaded
|
||||
_check_preload(inst, "add_reference_channels")
|
||||
_validate_type(ref_channels, (list, tuple, str), "ref_channels")
|
||||
if isinstance(ref_channels, str):
|
||||
ref_channels = [ref_channels]
|
||||
for ch in ref_channels:
|
||||
if ch in inst.info["ch_names"]:
|
||||
raise ValueError(f"Channel {ch} already specified in inst.")
|
||||
|
||||
# Once CAR is applied (active), don't allow adding channels
|
||||
if _has_eeg_average_ref_proj(inst.info, check_active=True):
|
||||
raise RuntimeError("Average reference already applied to data.")
|
||||
|
||||
if copy:
|
||||
inst = inst.copy()
|
||||
|
||||
if isinstance(inst, BaseRaw | Evoked):
|
||||
data = inst._data
|
||||
refs = np.zeros((len(ref_channels), data.shape[1]))
|
||||
data = np.vstack((data, refs))
|
||||
inst._data = data
|
||||
elif isinstance(inst, BaseEpochs):
|
||||
data = inst._data
|
||||
x, y, z = data.shape
|
||||
refs = np.zeros((x * len(ref_channels), z))
|
||||
data = np.vstack((data.reshape((x * y, z), order="F"), refs))
|
||||
data = data.reshape(x, y + len(ref_channels), z, order="F")
|
||||
inst._data = data
|
||||
else:
|
||||
raise TypeError(
|
||||
f"inst should be Raw, Epochs, or Evoked instead of {type(inst)}."
|
||||
)
|
||||
nchan = len(inst.info["ch_names"])
|
||||
|
||||
if inst.info.get("dig", None) is not None:
|
||||
# A montage has been set. Try to infer location of reference channels.
|
||||
# "zeroth" EEG electrode dig points is reference
|
||||
ref_dig_loc = [
|
||||
dl
|
||||
for dl in inst.info["dig"]
|
||||
if (dl["kind"] == FIFF.FIFFV_POINT_EEG and dl["ident"] == 0)
|
||||
]
|
||||
if len(ref_channels) > 1 or len(ref_dig_loc) != len(ref_channels):
|
||||
ref_dig_array = np.full(12, np.nan)
|
||||
warn(
|
||||
"Location for this channel is unknown or ambiguous; consider calling "
|
||||
"set_montage() after adding new reference channels if needed. "
|
||||
"Applying a montage will only set locations of channels that "
|
||||
"exist at the time it is applied."
|
||||
)
|
||||
else: # n_ref_channels == 1 and a single ref digitization exists
|
||||
ref_dig_array = np.concatenate(
|
||||
(ref_dig_loc[0]["r"], ref_dig_loc[0]["r"], np.zeros(6))
|
||||
)
|
||||
# Replace the (possibly new) Ref location for each channel
|
||||
for idx in pick_types(inst.info, meg=False, eeg=True, exclude=[]):
|
||||
inst.info["chs"][idx]["loc"][3:6] = ref_dig_loc[0]["r"]
|
||||
else:
|
||||
# If no montage has ever been set, we cannot even try to infer a location.
|
||||
ref_dig_array = np.full(12, np.nan)
|
||||
|
||||
for ch in ref_channels:
|
||||
chan_info = {
|
||||
"ch_name": ch,
|
||||
"coil_type": FIFF.FIFFV_COIL_EEG,
|
||||
"kind": FIFF.FIFFV_EEG_CH,
|
||||
"logno": nchan + 1,
|
||||
"scanno": nchan + 1,
|
||||
"cal": 1,
|
||||
"range": 1.0,
|
||||
"unit_mul": FIFF.FIFF_UNITM_NONE,
|
||||
"unit": FIFF.FIFF_UNIT_V,
|
||||
"coord_frame": FIFF.FIFFV_COORD_HEAD,
|
||||
"loc": ref_dig_array,
|
||||
}
|
||||
inst.info["chs"].append(chan_info)
|
||||
inst.info._update_redundant()
|
||||
range_ = np.arange(1, len(ref_channels) + 1)
|
||||
if isinstance(inst, BaseRaw):
|
||||
inst._cals = np.hstack((inst._cals, [1] * len(ref_channels)))
|
||||
for pi, picks in enumerate(inst._read_picks):
|
||||
inst._read_picks[pi] = np.concatenate([picks, np.max(picks) + range_])
|
||||
elif isinstance(inst, BaseEpochs):
|
||||
picks = inst.picks
|
||||
inst.picks = np.concatenate([picks, np.max(picks) + range_])
|
||||
inst.info._check_consistency()
|
||||
set_eeg_reference(inst, ref_channels=ref_channels, copy=False, verbose=False)
|
||||
return inst
|
||||
|
||||
|
||||
_ref_dict = {
|
||||
FIFF.FIFFV_MNE_CUSTOM_REF_ON: "on",
|
||||
FIFF.FIFFV_MNE_CUSTOM_REF_OFF: "off",
|
||||
FIFF.FIFFV_MNE_CUSTOM_REF_CSD: "CSD",
|
||||
}
|
||||
|
||||
|
||||
def _check_can_reref(inst):
|
||||
from ..epochs import BaseEpochs
|
||||
from ..evoked import Evoked
|
||||
from ..io import BaseRaw
|
||||
|
||||
_validate_type(inst, (BaseRaw, BaseEpochs, Evoked), "Instance")
|
||||
current_custom = inst.info["custom_ref_applied"]
|
||||
if current_custom not in (
|
||||
FIFF.FIFFV_MNE_CUSTOM_REF_ON,
|
||||
FIFF.FIFFV_MNE_CUSTOM_REF_OFF,
|
||||
):
|
||||
raise RuntimeError(
|
||||
"Cannot set new reference on data with custom reference type "
|
||||
f"{_ref_dict[current_custom]!r}"
|
||||
)
|
||||
|
||||
|
||||
@verbose
|
||||
def set_eeg_reference(
|
||||
inst,
|
||||
ref_channels="average",
|
||||
copy=True,
|
||||
projection=False,
|
||||
ch_type="auto",
|
||||
forward=None,
|
||||
*,
|
||||
joint=False,
|
||||
verbose=None,
|
||||
):
|
||||
"""Specify which reference to use for EEG data.
|
||||
|
||||
Use this function to explicitly specify the desired reference for EEG.
|
||||
This can be either an existing electrode or a new virtual channel.
|
||||
This function will re-reference the data according to the desired
|
||||
reference.
|
||||
|
||||
Note that it is also possible to re-reference the signal using a
|
||||
Laplacian (LAP) "reference-free" transformation using the
|
||||
:func:`.compute_current_source_density` function.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Instance of Raw or Epochs with EEG channels and reference channel(s).
|
||||
%(ref_channels_set_eeg_reference)s
|
||||
copy : bool
|
||||
Specifies whether the data will be copied (True) or modified in-place
|
||||
(False). Defaults to True.
|
||||
%(projection_set_eeg_reference)s
|
||||
%(ch_type_set_eeg_reference)s
|
||||
%(forward_set_eeg_reference)s
|
||||
%(joint_set_eeg_reference)s
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Data with EEG channels re-referenced. If ``ref_channels="average"`` and
|
||||
``projection=True`` a projection will be added instead of directly
|
||||
re-referencing the data.
|
||||
ref_data : array
|
||||
Array of reference data subtracted from EEG channels. This will be
|
||||
``None`` if ``projection=True``, or if ``ref_channels`` is ``"REST"`` or a
|
||||
:class:`dict`.
|
||||
%(set_eeg_reference_see_also_notes)s
|
||||
"""
|
||||
from ..forward import Forward
|
||||
|
||||
_check_can_reref(inst)
|
||||
|
||||
if isinstance(ref_channels, dict):
|
||||
logger.info("Applying a custom dict-based reference.")
|
||||
return _apply_dict_reference(inst, ref_channels)
|
||||
|
||||
ch_type = _get_ch_type(inst, ch_type)
|
||||
|
||||
if projection: # average reference projector
|
||||
if ref_channels != "average":
|
||||
raise ValueError(
|
||||
'Setting projection=True is only supported for ref_channels="average", '
|
||||
f"got {ref_channels!r}."
|
||||
)
|
||||
# We need verbose='error' here in case we add projs sequentially
|
||||
if _has_eeg_average_ref_proj(inst.info, ch_type=ch_type, verbose="error"):
|
||||
warn(
|
||||
"An average reference projection was already added. The data "
|
||||
"has been left untouched."
|
||||
)
|
||||
else:
|
||||
# Creating an average reference may fail. In this case, make
|
||||
# sure that the custom_ref_applied flag is left untouched.
|
||||
custom_ref_applied = inst.info["custom_ref_applied"]
|
||||
|
||||
try:
|
||||
with inst.info._unlock():
|
||||
inst.info["custom_ref_applied"] = FIFF.FIFFV_MNE_CUSTOM_REF_OFF
|
||||
if joint:
|
||||
inst.add_proj(
|
||||
make_eeg_average_ref_proj(
|
||||
inst.info, ch_type=ch_type, activate=False
|
||||
)
|
||||
)
|
||||
else:
|
||||
for this_ch_type in ch_type:
|
||||
inst.add_proj(
|
||||
make_eeg_average_ref_proj(
|
||||
inst.info, ch_type=this_ch_type, activate=False
|
||||
)
|
||||
)
|
||||
except Exception:
|
||||
with inst.info._unlock():
|
||||
inst.info["custom_ref_applied"] = custom_ref_applied
|
||||
raise
|
||||
# If the data has been preloaded, projections will no
|
||||
# longer be automatically applied.
|
||||
if inst.preload:
|
||||
logger.info(
|
||||
"Average reference projection was added, "
|
||||
"but has not been applied yet. Use the "
|
||||
"apply_proj method to apply it."
|
||||
)
|
||||
return inst, None
|
||||
del projection # not used anymore
|
||||
|
||||
inst = inst.copy() if copy else inst
|
||||
ch_dict = {**{type_: True for type_ in ch_type}, "meg": False, "ref_meg": False}
|
||||
ch_sel = [inst.ch_names[i] for i in pick_types(inst.info, **ch_dict)]
|
||||
|
||||
if ref_channels == "REST":
|
||||
_validate_type(forward, Forward, 'forward when ref_channels="REST"')
|
||||
else:
|
||||
forward = None # signal to _apply_reference not to do REST
|
||||
|
||||
if ref_channels in ("average", "REST"):
|
||||
logger.info(f"Applying {ref_channels} reference.")
|
||||
ref_channels = ch_sel
|
||||
|
||||
if ref_channels == []:
|
||||
logger.info("EEG data marked as already having the desired reference.")
|
||||
else:
|
||||
logger.info(
|
||||
"Applying a custom "
|
||||
f"{tuple(DEFAULTS['titles'][type_] for type_ in ch_type)} "
|
||||
"reference."
|
||||
)
|
||||
|
||||
return _apply_reference(inst, ref_channels, ch_sel, forward, ch_type=ch_type)
|
||||
|
||||
|
||||
def _get_ch_type(inst, ch_type):
|
||||
_validate_type(ch_type, (str, list, tuple), "ch_type")
|
||||
valid_ch_types = ("auto",) + _ELECTRODE_CH_TYPES
|
||||
if isinstance(ch_type, str):
|
||||
_check_option("ch_type", ch_type, valid_ch_types)
|
||||
if ch_type != "auto":
|
||||
ch_type = [ch_type]
|
||||
elif isinstance(ch_type, list | tuple):
|
||||
for type_ in ch_type:
|
||||
_validate_type(type_, str, "ch_type")
|
||||
_check_option("ch_type", type_, valid_ch_types[1:])
|
||||
ch_type = list(ch_type)
|
||||
|
||||
# if ch_type is 'auto', search through list to find first reasonable
|
||||
# reference-able channel type.
|
||||
if ch_type == "auto":
|
||||
for type_ in _ELECTRODE_CH_TYPES:
|
||||
if type_ in inst:
|
||||
ch_type = [type_]
|
||||
logger.info(
|
||||
f"{DEFAULTS['titles'][type_]} channel type selected for "
|
||||
"re-referencing"
|
||||
)
|
||||
break
|
||||
# if auto comes up empty, or the user specifies a bad ch_type.
|
||||
else:
|
||||
raise ValueError("No EEG, ECoG, sEEG or DBS channels found to rereference.")
|
||||
return ch_type
|
||||
|
||||
|
||||
@verbose
|
||||
def set_bipolar_reference(
|
||||
inst,
|
||||
anode,
|
||||
cathode,
|
||||
ch_name=None,
|
||||
ch_info=None,
|
||||
drop_refs=True,
|
||||
copy=True,
|
||||
on_bad="warn",
|
||||
verbose=None,
|
||||
):
|
||||
"""Re-reference selected channels using a bipolar referencing scheme.
|
||||
|
||||
A bipolar reference takes the difference between two channels (the anode
|
||||
minus the cathode) and adds it as a new virtual channel. The original
|
||||
channels will be dropped by default.
|
||||
|
||||
Multiple anodes and cathodes can be specified, in which case multiple
|
||||
virtual channels will be created. The 1st cathode will be subtracted
|
||||
from the 1st anode, the 2nd cathode from the 2nd anode, etc.
|
||||
|
||||
By default, the virtual channels will be annotated with channel-info and
|
||||
-location of the anodes and coil types will be set to EEG_BIPOLAR.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Data containing the unreferenced channels.
|
||||
anode : str | list of str
|
||||
The name(s) of the channel(s) to use as anode in the bipolar reference.
|
||||
cathode : str | list of str
|
||||
The name(s) of the channel(s) to use as cathode in the bipolar
|
||||
reference.
|
||||
ch_name : str | list of str | None
|
||||
The channel name(s) for the virtual channel(s) containing the resulting
|
||||
signal. By default, bipolar channels are named after the anode and
|
||||
cathode, but it is recommended to supply a more meaningful name.
|
||||
ch_info : dict | list of dict | None
|
||||
This parameter can be used to supply a dictionary (or a dictionary for
|
||||
each bipolar channel) containing channel information to merge in,
|
||||
overwriting the default values. Defaults to None.
|
||||
drop_refs : bool
|
||||
Whether to drop the anode/cathode channels from the instance.
|
||||
copy : bool
|
||||
Whether to operate on a copy of the data (True) or modify it in-place
|
||||
(False). Defaults to True.
|
||||
on_bad : str
|
||||
If a bipolar channel is created from a bad anode or a bad cathode, mne
|
||||
warns if on_bad="warns", raises ValueError if on_bad="raise", and does
|
||||
nothing if on_bad="ignore". For "warn" and "ignore", the new bipolar
|
||||
channel will be marked as bad. Defaults to on_bad="warns".
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
inst : instance of Raw | Epochs | Evoked
|
||||
Data with the specified channels re-referenced.
|
||||
|
||||
See Also
|
||||
--------
|
||||
set_eeg_reference : Convenience function for creating an EEG reference.
|
||||
|
||||
Notes
|
||||
-----
|
||||
1. If the anodes contain any EEG channels, this function removes
|
||||
any pre-existing average reference projections.
|
||||
|
||||
2. During source localization, the EEG signal should have an average
|
||||
reference.
|
||||
|
||||
3. The data must be preloaded.
|
||||
|
||||
.. versionadded:: 0.9.0
|
||||
"""
|
||||
from ..epochs import BaseEpochs, EpochsArray
|
||||
from ..evoked import EvokedArray
|
||||
from ..io import BaseRaw, RawArray
|
||||
from .meas_info import create_info
|
||||
|
||||
_check_can_reref(inst)
|
||||
if not isinstance(anode, list):
|
||||
anode = [anode]
|
||||
|
||||
if not isinstance(cathode, list):
|
||||
cathode = [cathode]
|
||||
|
||||
if len(anode) != len(cathode):
|
||||
raise ValueError(
|
||||
f"Number of anodes (got {len(anode)}) must equal the number "
|
||||
f"of cathodes (got {len(cathode)})."
|
||||
)
|
||||
|
||||
if ch_name is None:
|
||||
ch_name = [f"{a}-{c}" for (a, c) in zip(anode, cathode)]
|
||||
elif not isinstance(ch_name, list):
|
||||
ch_name = [ch_name]
|
||||
if len(ch_name) != len(anode):
|
||||
raise ValueError(
|
||||
"Number of channel names must equal the number of "
|
||||
f"anodes/cathodes (got {len(ch_name)})."
|
||||
)
|
||||
|
||||
# Check for duplicate channel names (it is allowed to give the name of the
|
||||
# anode or cathode channel, as they will be replaced).
|
||||
for ch, a, c in zip(ch_name, anode, cathode):
|
||||
if ch not in [a, c] and ch in inst.ch_names:
|
||||
raise ValueError(
|
||||
f'There is already a channel named "{ch}", please '
|
||||
"specify a different name for the bipolar "
|
||||
"channel using the ch_name parameter."
|
||||
)
|
||||
|
||||
if ch_info is None:
|
||||
ch_info = [{} for _ in anode]
|
||||
elif not isinstance(ch_info, list):
|
||||
ch_info = [ch_info]
|
||||
if len(ch_info) != len(anode):
|
||||
raise ValueError(
|
||||
"Number of channel info dictionaries must equal the "
|
||||
"number of anodes/cathodes."
|
||||
)
|
||||
|
||||
if copy:
|
||||
inst = inst.copy()
|
||||
|
||||
anode = _check_before_reference(
|
||||
inst, ref_from=cathode, ref_to=anode, ch_type="auto"
|
||||
)
|
||||
|
||||
# Create bipolar reference channels by multiplying the data
|
||||
# (channels x time) with a matrix (n_virtual_channels x channels)
|
||||
# and add them to the instance.
|
||||
multiplier = np.zeros((len(anode), len(inst.ch_names)))
|
||||
for idx, (a, c) in enumerate(zip(anode, cathode)):
|
||||
multiplier[idx, inst.ch_names.index(a)] = 1
|
||||
multiplier[idx, inst.ch_names.index(c)] = -1
|
||||
|
||||
ref_info = create_info(
|
||||
ch_names=ch_name,
|
||||
sfreq=inst.info["sfreq"],
|
||||
ch_types=inst.get_channel_types(picks=anode),
|
||||
)
|
||||
|
||||
# Update "chs" in Reference-Info.
|
||||
for ch_idx, (an, info) in enumerate(zip(anode, ch_info)):
|
||||
_check_ch_keys(info, ch_idx, name="ch_info", check_min=False)
|
||||
an_idx = inst.ch_names.index(an)
|
||||
# Copy everything from anode (except ch_name).
|
||||
an_chs = {k: v for k, v in inst.info["chs"][an_idx].items() if k != "ch_name"}
|
||||
ref_info["chs"][ch_idx].update(an_chs)
|
||||
# Set coil-type to bipolar.
|
||||
ref_info["chs"][ch_idx]["coil_type"] = FIFF.FIFFV_COIL_EEG_BIPOLAR
|
||||
# Update with info from ch_info-parameter.
|
||||
ref_info["chs"][ch_idx].update(info)
|
||||
|
||||
# Set other info-keys from original instance.
|
||||
pick_info = {
|
||||
k: v
|
||||
for k, v in inst.info.items()
|
||||
if k not in ["chs", "ch_names", "bads", "nchan", "sfreq"]
|
||||
}
|
||||
|
||||
with ref_info._unlock():
|
||||
ref_info.update(pick_info)
|
||||
|
||||
# Rereferencing of data.
|
||||
ref_data = multiplier @ inst._data
|
||||
|
||||
if isinstance(inst, BaseRaw):
|
||||
ref_inst = RawArray(ref_data, ref_info, first_samp=inst.first_samp, copy=None)
|
||||
elif isinstance(inst, BaseEpochs):
|
||||
ref_inst = EpochsArray(
|
||||
ref_data,
|
||||
ref_info,
|
||||
events=inst.events,
|
||||
tmin=inst.tmin,
|
||||
event_id=inst.event_id,
|
||||
metadata=inst.metadata,
|
||||
)
|
||||
else:
|
||||
ref_inst = EvokedArray(
|
||||
ref_data,
|
||||
ref_info,
|
||||
tmin=inst.tmin,
|
||||
comment=inst.comment,
|
||||
nave=inst.nave,
|
||||
kind="average",
|
||||
)
|
||||
|
||||
# Add referenced instance to original instance.
|
||||
inst.add_channels([ref_inst], force_update_info=True)
|
||||
|
||||
# Handle bad channels.
|
||||
bad_bipolar_chs = []
|
||||
for ch_idx, (a, c) in enumerate(zip(anode, cathode)):
|
||||
if a in inst.info["bads"] or c in inst.info["bads"]:
|
||||
bad_bipolar_chs.append(ch_name[ch_idx])
|
||||
|
||||
# Add warnings if bad channels are present.
|
||||
if bad_bipolar_chs:
|
||||
msg = f"Bipolar channels are based on bad channels: {bad_bipolar_chs}."
|
||||
_on_missing(on_bad, msg)
|
||||
inst.info["bads"] += bad_bipolar_chs
|
||||
|
||||
added_channels = ", ".join([name for name in ch_name])
|
||||
logger.info(f"Added the following bipolar channels:\n{added_channels}")
|
||||
|
||||
for attr_name in ["picks", "_projector"]:
|
||||
setattr(inst, attr_name, None)
|
||||
|
||||
# Drop remaining channels.
|
||||
if drop_refs:
|
||||
drop_channels = list((set(anode) | set(cathode)) & set(inst.ch_names))
|
||||
inst.drop_channels(drop_channels)
|
||||
|
||||
return inst
|
||||
523
mne/_fiff/tag.py
Normal file
523
mne/_fiff/tag.py
Normal file
@@ -0,0 +1,523 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import html
|
||||
import re
|
||||
import struct
|
||||
from dataclasses import dataclass
|
||||
from functools import partial
|
||||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
from scipy.sparse import csc_array, csr_array
|
||||
|
||||
from ..utils import _check_option, warn
|
||||
from ..utils.numerics import _julian_to_date
|
||||
from .constants import (
|
||||
FIFF,
|
||||
_ch_coil_type_named,
|
||||
_ch_kind_named,
|
||||
_ch_unit_mul_named,
|
||||
_ch_unit_named,
|
||||
_dig_cardinal_named,
|
||||
_dig_kind_named,
|
||||
)
|
||||
|
||||
##############################################################################
|
||||
# HELPERS
|
||||
|
||||
|
||||
@dataclass
|
||||
class Tag:
|
||||
"""Tag in FIF tree structure."""
|
||||
|
||||
kind: int
|
||||
type: int
|
||||
size: int
|
||||
next: int
|
||||
pos: int
|
||||
data: Any = None
|
||||
|
||||
def __eq__(self, tag): # noqa: D105
|
||||
return int(
|
||||
self.kind == tag.kind
|
||||
and self.type == tag.type
|
||||
and self.size == tag.size
|
||||
and self.next == tag.next
|
||||
and self.pos == tag.pos
|
||||
and self.data == tag.data
|
||||
)
|
||||
|
||||
@property
|
||||
def next_pos(self):
|
||||
"""The next tag position."""
|
||||
if self.next == FIFF.FIFFV_NEXT_SEQ: # 0
|
||||
return self.pos + 16 + self.size
|
||||
elif self.next > 0:
|
||||
return self.next
|
||||
else: # self.next should be -1 if we get here
|
||||
return None # safest to return None so that things like fid.seek die
|
||||
|
||||
|
||||
def _frombuffer_rows(fid, tag_size, dtype=None, shape=None, rlims=None):
|
||||
"""Get a range of rows from a large tag."""
|
||||
if shape is not None:
|
||||
item_size = np.dtype(dtype).itemsize
|
||||
if not len(shape) == 2:
|
||||
raise ValueError("Only implemented for 2D matrices")
|
||||
want_shape = np.prod(shape)
|
||||
have_shape = tag_size // item_size
|
||||
if want_shape != have_shape:
|
||||
raise ValueError(
|
||||
f"Wrong shape specified, requested {want_shape} but got "
|
||||
f"{have_shape}"
|
||||
)
|
||||
if not len(rlims) == 2:
|
||||
raise ValueError("rlims must have two elements")
|
||||
n_row_out = rlims[1] - rlims[0]
|
||||
if n_row_out <= 0:
|
||||
raise ValueError("rlims must yield at least one output")
|
||||
row_size = item_size * shape[1]
|
||||
# # of bytes to skip at the beginning, # to read, where to end
|
||||
start_skip = int(rlims[0] * row_size)
|
||||
read_size = int(n_row_out * row_size)
|
||||
end_pos = int(fid.tell() + tag_size)
|
||||
# Move the pointer ahead to the read point
|
||||
fid.seek(start_skip, 1)
|
||||
# Do the reading
|
||||
out = np.frombuffer(fid.read(read_size), dtype=dtype)
|
||||
# Move the pointer ahead to the end of the tag
|
||||
fid.seek(end_pos)
|
||||
else:
|
||||
out = np.frombuffer(fid.read(tag_size), dtype=dtype)
|
||||
return out
|
||||
|
||||
|
||||
def _loc_to_coil_trans(loc):
|
||||
"""Convert loc vector to coil_trans."""
|
||||
assert loc.shape[-1] == 12
|
||||
coil_trans = np.zeros(loc.shape[:-1] + (4, 4))
|
||||
coil_trans[..., :3, 3] = loc[..., :3]
|
||||
coil_trans[..., :3, :3] = np.reshape(
|
||||
loc[..., 3:], loc.shape[:-1] + (3, 3)
|
||||
).swapaxes(-1, -2)
|
||||
coil_trans[..., -1, -1] = 1.0
|
||||
return coil_trans
|
||||
|
||||
|
||||
def _coil_trans_to_loc(coil_trans):
|
||||
"""Convert coil_trans to loc."""
|
||||
coil_trans = coil_trans.astype(np.float64)
|
||||
return np.roll(coil_trans.T[:, :3], 1, 0).flatten()
|
||||
|
||||
|
||||
def _loc_to_eeg_loc(loc):
|
||||
"""Convert a loc to an EEG loc."""
|
||||
if not np.isfinite(loc[:3]).all():
|
||||
raise RuntimeError("Missing EEG channel location")
|
||||
if np.isfinite(loc[3:6]).all() and (loc[3:6]).any():
|
||||
return np.array([loc[0:3], loc[3:6]]).T
|
||||
else:
|
||||
return loc[0:3][:, np.newaxis].copy()
|
||||
|
||||
|
||||
##############################################################################
|
||||
# READING FUNCTIONS
|
||||
|
||||
# None of these functions have docstring because it's more compact that way,
|
||||
# and hopefully it's clear what they do by their names and variable values.
|
||||
# See ``read_tag`` for variable descriptions. Return values are implied
|
||||
# by the function names.
|
||||
|
||||
|
||||
def _read_tag_header(fid, pos):
|
||||
"""Read only the header of a Tag."""
|
||||
fid.seek(pos, 0)
|
||||
s = fid.read(16)
|
||||
if len(s) != 16:
|
||||
where = fid.tell() - len(s)
|
||||
extra = f" in file {fid.name}" if hasattr(fid, "name") else ""
|
||||
warn(f"Invalid tag with only {len(s)}/16 bytes at position {where}{extra}")
|
||||
return None
|
||||
# struct.unpack faster than np.frombuffer, saves ~10% of time some places
|
||||
kind, type_, size, next_ = struct.unpack(">iIii", s)
|
||||
return Tag(kind, type_, size, next_, pos)
|
||||
|
||||
|
||||
def _read_matrix(fid, tag, shape, rlims):
|
||||
"""Read a matrix (dense or sparse) tag."""
|
||||
# This should be easy to implement (see _frombuffer_rows)
|
||||
# if we need it, but for now, it's not...
|
||||
if shape is not None or rlims is not None:
|
||||
raise ValueError("Row reading not implemented for matrices yet")
|
||||
|
||||
matrix_coding, matrix_type, bit, dtype = _matrix_info(tag)
|
||||
|
||||
pos = tag.pos + 16
|
||||
fid.seek(pos + tag.size - 4, 0)
|
||||
if matrix_coding == "dense":
|
||||
# Find dimensions and return to the beginning of tag data
|
||||
ndim = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
fid.seek(-(ndim + 1) * 4, 1)
|
||||
dims = np.frombuffer(fid.read(4 * ndim), dtype=">i4")[::-1]
|
||||
#
|
||||
# Back to where the data start
|
||||
#
|
||||
fid.seek(pos, 0)
|
||||
|
||||
if ndim > 3:
|
||||
raise Exception(
|
||||
"Only 2 or 3-dimensional matrices are supported at this time"
|
||||
)
|
||||
|
||||
data = fid.read(int(bit * dims.prod()))
|
||||
data = np.frombuffer(data, dtype=dtype)
|
||||
# Note: we need the non-conjugate transpose here
|
||||
if matrix_type == FIFF.FIFFT_COMPLEX_FLOAT:
|
||||
data = data.view(">c8")
|
||||
elif matrix_type == FIFF.FIFFT_COMPLEX_DOUBLE:
|
||||
data = data.view(">c16")
|
||||
data.shape = dims
|
||||
else:
|
||||
# Find dimensions and return to the beginning of tag data
|
||||
ndim = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
fid.seek(-(ndim + 2) * 4, 1)
|
||||
dims = np.frombuffer(fid.read(4 * (ndim + 1)), dtype=">i4")
|
||||
if ndim != 2:
|
||||
raise Exception("Only two-dimensional matrices are supported at this time")
|
||||
|
||||
# Back to where the data start
|
||||
fid.seek(pos, 0)
|
||||
nnz = int(dims[0])
|
||||
nrow = int(dims[1])
|
||||
ncol = int(dims[2])
|
||||
# We need to make a copy so that we can own the data, otherwise we get:
|
||||
# _sparsetools.csr_sort_indices(len(self.indptr) - 1, self.indptr,
|
||||
# E ValueError: WRITEBACKIFCOPY base is read-only
|
||||
data = np.frombuffer(fid.read(bit * nnz), dtype=dtype).astype(np.float32)
|
||||
shape = (dims[1], dims[2])
|
||||
if matrix_coding == "sparse CCS":
|
||||
tmp_indices = fid.read(4 * nnz)
|
||||
indices = np.frombuffer(tmp_indices, dtype=">i4")
|
||||
tmp_ptr = fid.read(4 * (ncol + 1))
|
||||
indptr = np.frombuffer(tmp_ptr, dtype=">i4")
|
||||
swap = nrow
|
||||
klass = csc_array
|
||||
else:
|
||||
assert matrix_coding == "sparse RCS", matrix_coding
|
||||
tmp_indices = fid.read(4 * nnz)
|
||||
indices = np.frombuffer(tmp_indices, dtype=">i4")
|
||||
tmp_ptr = fid.read(4 * (nrow + 1))
|
||||
indptr = np.frombuffer(tmp_ptr, dtype=">i4")
|
||||
swap = ncol
|
||||
klass = csr_array
|
||||
if indptr[-1] > len(indices) or np.any(indptr < 0):
|
||||
# There was a bug in MNE-C that caused some data to be
|
||||
# stored without byte swapping
|
||||
indices = np.concatenate(
|
||||
(
|
||||
np.frombuffer(tmp_indices[: 4 * (swap + 1)], dtype=">i4"),
|
||||
np.frombuffer(tmp_indices[4 * (swap + 1) :], dtype="<i4"),
|
||||
)
|
||||
)
|
||||
indptr = np.frombuffer(tmp_ptr, dtype="<i4")
|
||||
data = klass((data, indices, indptr), shape=shape)
|
||||
return data
|
||||
|
||||
|
||||
def _read_simple(fid, tag, shape, rlims, dtype):
|
||||
"""Read simple datatypes from tag (typically used with partial)."""
|
||||
return _frombuffer_rows(fid, tag.size, dtype=dtype, shape=shape, rlims=rlims)
|
||||
|
||||
|
||||
def _read_string(fid, tag, shape, rlims):
|
||||
"""Read a string tag."""
|
||||
# Always decode to ISO 8859-1 / latin1 (FIFF standard).
|
||||
d = _frombuffer_rows(fid, tag.size, dtype=">c", shape=shape, rlims=rlims)
|
||||
string = str(d.tobytes().decode("latin1", "ignore"))
|
||||
if re.search(r"&#[0-9a-fA-F]{6};", string):
|
||||
string = html.unescape(string)
|
||||
return string
|
||||
|
||||
|
||||
def _read_complex_float(fid, tag, shape, rlims):
|
||||
"""Read complex float tag."""
|
||||
# data gets stored twice as large
|
||||
if shape is not None:
|
||||
shape = (shape[0], shape[1] * 2)
|
||||
d = _frombuffer_rows(fid, tag.size, dtype=">f4", shape=shape, rlims=rlims)
|
||||
d = d.view(">c8")
|
||||
return d
|
||||
|
||||
|
||||
def _read_complex_double(fid, tag, shape, rlims):
|
||||
"""Read complex double tag."""
|
||||
# data gets stored twice as large
|
||||
if shape is not None:
|
||||
shape = (shape[0], shape[1] * 2)
|
||||
d = _frombuffer_rows(fid, tag.size, dtype=">f8", shape=shape, rlims=rlims)
|
||||
d = d.view(">c16")
|
||||
return d
|
||||
|
||||
|
||||
def _read_id_struct(fid, tag, shape, rlims):
|
||||
"""Read ID struct tag."""
|
||||
return dict(
|
||||
version=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
machid=np.frombuffer(fid.read(8), dtype=">i4"),
|
||||
secs=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
usecs=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
)
|
||||
|
||||
|
||||
def _read_dig_point_struct(fid, tag, shape, rlims):
|
||||
"""Read dig point struct tag."""
|
||||
kind = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
kind = _dig_kind_named.get(kind, kind)
|
||||
ident = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
if kind == FIFF.FIFFV_POINT_CARDINAL:
|
||||
ident = _dig_cardinal_named.get(ident, ident)
|
||||
return dict(
|
||||
kind=kind,
|
||||
ident=ident,
|
||||
r=np.frombuffer(fid.read(12), dtype=">f4"),
|
||||
coord_frame=FIFF.FIFFV_COORD_UNKNOWN,
|
||||
)
|
||||
|
||||
|
||||
def _read_coord_trans_struct(fid, tag, shape, rlims):
|
||||
"""Read coord trans struct tag."""
|
||||
from ..transforms import Transform
|
||||
|
||||
fro = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
to = int(np.frombuffer(fid.read(4), dtype=">i4").item())
|
||||
rot = np.frombuffer(fid.read(36), dtype=">f4").reshape(3, 3)
|
||||
move = np.frombuffer(fid.read(12), dtype=">f4")
|
||||
trans = np.r_[np.c_[rot, move], np.array([[0], [0], [0], [1]]).T]
|
||||
data = Transform(fro, to, trans)
|
||||
fid.seek(48, 1) # Skip over the inverse transformation
|
||||
return data
|
||||
|
||||
|
||||
_ch_coord_dict = {
|
||||
FIFF.FIFFV_MEG_CH: FIFF.FIFFV_COORD_DEVICE,
|
||||
FIFF.FIFFV_REF_MEG_CH: FIFF.FIFFV_COORD_DEVICE,
|
||||
FIFF.FIFFV_EEG_CH: FIFF.FIFFV_COORD_HEAD,
|
||||
FIFF.FIFFV_ECOG_CH: FIFF.FIFFV_COORD_HEAD,
|
||||
FIFF.FIFFV_SEEG_CH: FIFF.FIFFV_COORD_HEAD,
|
||||
FIFF.FIFFV_DBS_CH: FIFF.FIFFV_COORD_HEAD,
|
||||
FIFF.FIFFV_FNIRS_CH: FIFF.FIFFV_COORD_HEAD,
|
||||
}
|
||||
|
||||
|
||||
def _read_ch_info_struct(fid, tag, shape, rlims):
|
||||
"""Read channel info struct tag."""
|
||||
d = dict(
|
||||
scanno=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
logno=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
kind=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
range=float(np.frombuffer(fid.read(4), dtype=">f4").item()),
|
||||
cal=float(np.frombuffer(fid.read(4), dtype=">f4").item()),
|
||||
coil_type=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
# deal with really old OSX Anaconda bug by casting to float64
|
||||
loc=np.frombuffer(fid.read(48), dtype=">f4").astype(np.float64),
|
||||
# unit and exponent
|
||||
unit=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
unit_mul=int(np.frombuffer(fid.read(4), dtype=">i4").item()),
|
||||
)
|
||||
# channel name
|
||||
ch_name = np.frombuffer(fid.read(16), dtype=">c")
|
||||
ch_name = ch_name[: np.argmax(ch_name == b"")].tobytes()
|
||||
d["ch_name"] = ch_name.decode()
|
||||
# coil coordinate system definition
|
||||
_update_ch_info_named(d)
|
||||
return d
|
||||
|
||||
|
||||
def _update_ch_info_named(d):
|
||||
d["coord_frame"] = _ch_coord_dict.get(d["kind"], FIFF.FIFFV_COORD_UNKNOWN)
|
||||
d["kind"] = _ch_kind_named.get(d["kind"], d["kind"])
|
||||
d["coil_type"] = _ch_coil_type_named.get(d["coil_type"], d["coil_type"])
|
||||
d["unit"] = _ch_unit_named.get(d["unit"], d["unit"])
|
||||
d["unit_mul"] = _ch_unit_mul_named.get(d["unit_mul"], d["unit_mul"])
|
||||
|
||||
|
||||
def _read_old_pack(fid, tag, shape, rlims):
|
||||
"""Read old pack tag."""
|
||||
offset = float(np.frombuffer(fid.read(4), dtype=">f4").item())
|
||||
scale = float(np.frombuffer(fid.read(4), dtype=">f4").item())
|
||||
data = np.frombuffer(fid.read(tag.size - 8), dtype=">i2")
|
||||
data = data * scale # to float64
|
||||
data += offset
|
||||
return data
|
||||
|
||||
|
||||
def _read_dir_entry_struct(fid, tag, shape, rlims):
|
||||
"""Read dir entry struct tag."""
|
||||
pos = tag.pos + 16
|
||||
entries = list()
|
||||
for offset in range(1, tag.size // 16):
|
||||
ent = _read_tag_header(fid, pos + offset * 16)
|
||||
# The position of the real tag on disk is stored in the "next" entry within the
|
||||
# directory, so we need to overwrite ent.pos. For safety let's also overwrite
|
||||
# ent.next to point nowhere
|
||||
ent.pos, ent.next = ent.next, FIFF.FIFFV_NEXT_NONE
|
||||
entries.append(ent)
|
||||
return entries
|
||||
|
||||
|
||||
def _read_julian(fid, tag, shape, rlims):
|
||||
"""Read julian tag."""
|
||||
return _julian_to_date(int(np.frombuffer(fid.read(4), dtype=">i4").item()))
|
||||
|
||||
|
||||
# Read types call dict
|
||||
_call_dict = {
|
||||
FIFF.FIFFT_STRING: _read_string,
|
||||
FIFF.FIFFT_COMPLEX_FLOAT: _read_complex_float,
|
||||
FIFF.FIFFT_COMPLEX_DOUBLE: _read_complex_double,
|
||||
FIFF.FIFFT_ID_STRUCT: _read_id_struct,
|
||||
FIFF.FIFFT_DIG_POINT_STRUCT: _read_dig_point_struct,
|
||||
FIFF.FIFFT_COORD_TRANS_STRUCT: _read_coord_trans_struct,
|
||||
FIFF.FIFFT_CH_INFO_STRUCT: _read_ch_info_struct,
|
||||
FIFF.FIFFT_OLD_PACK: _read_old_pack,
|
||||
FIFF.FIFFT_DIR_ENTRY_STRUCT: _read_dir_entry_struct,
|
||||
FIFF.FIFFT_JULIAN: _read_julian,
|
||||
}
|
||||
_call_dict_names = {
|
||||
FIFF.FIFFT_STRING: "str",
|
||||
FIFF.FIFFT_COMPLEX_FLOAT: "c8",
|
||||
FIFF.FIFFT_COMPLEX_DOUBLE: "c16",
|
||||
FIFF.FIFFT_ID_STRUCT: "ids",
|
||||
FIFF.FIFFT_DIG_POINT_STRUCT: "dps",
|
||||
FIFF.FIFFT_COORD_TRANS_STRUCT: "cts",
|
||||
FIFF.FIFFT_CH_INFO_STRUCT: "cis",
|
||||
FIFF.FIFFT_OLD_PACK: "op_",
|
||||
FIFF.FIFFT_DIR_ENTRY_STRUCT: "dir",
|
||||
FIFF.FIFFT_JULIAN: "jul",
|
||||
FIFF.FIFFT_VOID: "nul", # 0
|
||||
}
|
||||
|
||||
# Append the simple types
|
||||
_simple_dict = {
|
||||
FIFF.FIFFT_BYTE: ">B",
|
||||
FIFF.FIFFT_SHORT: ">i2",
|
||||
FIFF.FIFFT_INT: ">i4",
|
||||
FIFF.FIFFT_USHORT: ">u2",
|
||||
FIFF.FIFFT_UINT: ">u4",
|
||||
FIFF.FIFFT_FLOAT: ">f4",
|
||||
FIFF.FIFFT_DOUBLE: ">f8",
|
||||
FIFF.FIFFT_DAU_PACK16: ">i2",
|
||||
}
|
||||
for key, dtype in _simple_dict.items():
|
||||
_call_dict[key] = partial(_read_simple, dtype=dtype)
|
||||
_call_dict_names[key] = dtype
|
||||
|
||||
|
||||
def read_tag(fid, pos, shape=None, rlims=None):
|
||||
"""Read a Tag from a file at a given position.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file
|
||||
The open FIF file descriptor.
|
||||
pos : int
|
||||
The position of the Tag in the file.
|
||||
shape : tuple | None
|
||||
If tuple, the shape of the stored matrix. Only to be used with
|
||||
data stored as a vector (not implemented for matrices yet).
|
||||
rlims : tuple | None
|
||||
If tuple, the first (inclusive) and last (exclusive) rows to retrieve.
|
||||
Note that data are assumed to be stored row-major in the file. Only to
|
||||
be used with data stored as a vector (not implemented for matrices
|
||||
yet).
|
||||
|
||||
Returns
|
||||
-------
|
||||
tag : Tag
|
||||
The Tag read.
|
||||
"""
|
||||
tag = _read_tag_header(fid, pos)
|
||||
if tag is None:
|
||||
return tag
|
||||
if tag.size > 0:
|
||||
if _matrix_info(tag) is not None:
|
||||
tag.data = _read_matrix(fid, tag, shape, rlims)
|
||||
else:
|
||||
# All other data types
|
||||
try:
|
||||
fun = _call_dict[tag.type]
|
||||
except KeyError:
|
||||
raise Exception(f"Unimplemented tag data type {tag.type}") from None
|
||||
tag.data = fun(fid, tag, shape, rlims)
|
||||
return tag
|
||||
|
||||
|
||||
def find_tag(fid, node, findkind):
|
||||
"""Find Tag in an open FIF file descriptor.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fid : file-like
|
||||
Open file.
|
||||
node : dict
|
||||
Node to search.
|
||||
findkind : int
|
||||
Tag kind to find.
|
||||
|
||||
Returns
|
||||
-------
|
||||
tag : instance of Tag
|
||||
The first tag found.
|
||||
"""
|
||||
if node["directory"] is not None:
|
||||
for subnode in node["directory"]:
|
||||
if subnode.kind == findkind:
|
||||
return read_tag(fid, subnode.pos)
|
||||
return None
|
||||
|
||||
|
||||
def has_tag(node, kind):
|
||||
"""Check if the node contains a Tag of a given kind."""
|
||||
for d in node["directory"]:
|
||||
if d.kind == kind:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _rename_list(bads, ch_names_mapping):
|
||||
return [ch_names_mapping.get(bad, bad) for bad in bads]
|
||||
|
||||
|
||||
def _int_item(x):
|
||||
return int(x.item())
|
||||
|
||||
|
||||
def _float_item(x):
|
||||
return float(x.item())
|
||||
|
||||
|
||||
def _matrix_info(tag):
|
||||
matrix_coding = tag.type & 0xFFFF0000
|
||||
if matrix_coding == 0 or tag.size == 0:
|
||||
return None
|
||||
matrix_type = tag.type & 0x0000FFFF
|
||||
matrix_coding_dict = {
|
||||
FIFF.FIFFT_MATRIX: "dense",
|
||||
FIFF.FIFFT_MATRIX | FIFF.FIFFT_SPARSE_CCS_MATRIX: "sparse CCS",
|
||||
FIFF.FIFFT_MATRIX | FIFF.FIFFT_SPARSE_RCS_MATRIX: "sparse RCS",
|
||||
}
|
||||
_check_option("matrix_coding", matrix_coding, list(matrix_coding_dict))
|
||||
matrix_coding = matrix_coding_dict[matrix_coding]
|
||||
matrix_bit_dtype = {
|
||||
FIFF.FIFFT_INT: (4, ">i4"),
|
||||
FIFF.FIFFT_JULIAN: (4, ">i4"),
|
||||
FIFF.FIFFT_FLOAT: (4, ">f4"),
|
||||
FIFF.FIFFT_DOUBLE: (8, ">f8"),
|
||||
FIFF.FIFFT_COMPLEX_FLOAT: (8, ">f4"),
|
||||
FIFF.FIFFT_COMPLEX_DOUBLE: (16, ">f8"),
|
||||
}
|
||||
_check_option("matrix_type", matrix_type, list(matrix_bit_dtype))
|
||||
bit, dtype = matrix_bit_dtype[matrix_type]
|
||||
return matrix_coding, matrix_type, bit, dtype
|
||||
108
mne/_fiff/tree.py
Normal file
108
mne/_fiff/tree.py
Normal file
@@ -0,0 +1,108 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
|
||||
from ..utils import logger, verbose
|
||||
from .constants import FIFF
|
||||
from .tag import read_tag
|
||||
|
||||
|
||||
def dir_tree_find(tree, kind):
|
||||
"""Find nodes of the given kind from a directory tree structure.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
tree : dict
|
||||
Directory tree.
|
||||
kind : int
|
||||
Kind to find.
|
||||
|
||||
Returns
|
||||
-------
|
||||
nodes : list
|
||||
List of matching nodes.
|
||||
"""
|
||||
nodes = []
|
||||
|
||||
if isinstance(tree, list):
|
||||
for t in tree:
|
||||
nodes += dir_tree_find(t, kind)
|
||||
else:
|
||||
# Am I desirable myself?
|
||||
if tree["block"] == kind:
|
||||
nodes.append(tree)
|
||||
|
||||
# Search the subtrees
|
||||
for child in tree["children"]:
|
||||
nodes += dir_tree_find(child, kind)
|
||||
return nodes
|
||||
|
||||
|
||||
@verbose
|
||||
def make_dir_tree(fid, directory, start=0, indent=0, verbose=None):
|
||||
"""Create the directory tree structure."""
|
||||
if directory[start].kind == FIFF.FIFF_BLOCK_START:
|
||||
tag = read_tag(fid, directory[start].pos)
|
||||
block = tag.data.item()
|
||||
else:
|
||||
block = 0
|
||||
|
||||
start_separate = False
|
||||
|
||||
this = start
|
||||
|
||||
tree = dict()
|
||||
tree["block"] = block
|
||||
tree["id"] = None
|
||||
tree["parent_id"] = None
|
||||
tree["nent"] = 0
|
||||
tree["nchild"] = 0
|
||||
tree["directory"] = directory[this]
|
||||
tree["children"] = []
|
||||
|
||||
while this < len(directory):
|
||||
if directory[this].kind == FIFF.FIFF_BLOCK_START:
|
||||
if this != start:
|
||||
if not start_separate:
|
||||
start_separate = True
|
||||
logger.debug(" " * indent + f"start {{ {block}")
|
||||
child, this = make_dir_tree(fid, directory, this, indent + 1)
|
||||
tree["nchild"] += 1
|
||||
tree["children"].append(child)
|
||||
elif directory[this].kind == FIFF.FIFF_BLOCK_END:
|
||||
tag = read_tag(fid, directory[start].pos)
|
||||
if tag.data == block:
|
||||
break
|
||||
else:
|
||||
tree["nent"] += 1
|
||||
if tree["nent"] == 1:
|
||||
tree["directory"] = list()
|
||||
tree["directory"].append(directory[this])
|
||||
|
||||
# Add the id information if available
|
||||
if block == 0:
|
||||
if directory[this].kind == FIFF.FIFF_FILE_ID:
|
||||
tag = read_tag(fid, directory[this].pos)
|
||||
tree["id"] = tag.data
|
||||
else:
|
||||
if directory[this].kind == FIFF.FIFF_BLOCK_ID:
|
||||
tag = read_tag(fid, directory[this].pos)
|
||||
tree["id"] = tag.data
|
||||
elif directory[this].kind == FIFF.FIFF_PARENT_BLOCK_ID:
|
||||
tag = read_tag(fid, directory[this].pos)
|
||||
tree["parent_id"] = tag.data
|
||||
|
||||
this += 1
|
||||
|
||||
# Eliminate the empty directory
|
||||
if tree["nent"] == 0:
|
||||
tree["directory"] = None
|
||||
|
||||
content = f"block = {tree['block']} nent = {tree['nent']} nchild = {tree['nchild']}"
|
||||
if start_separate:
|
||||
logger.debug(" " * indent + f"end }} {content}")
|
||||
else:
|
||||
logger.debug(" " * indent + content)
|
||||
last = this
|
||||
return tree, last
|
||||
331
mne/_fiff/utils.py
Normal file
331
mne/_fiff/utils.py
Normal file
@@ -0,0 +1,331 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import os
|
||||
import os.path as op
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .constants import FIFF
|
||||
from .meas_info import _get_valid_units
|
||||
|
||||
|
||||
def _check_orig_units(orig_units):
|
||||
"""Check original units from a raw file.
|
||||
|
||||
Units that are close to a valid_unit but not equal can be remapped to fit
|
||||
into the valid_units. All other units that are not valid will be replaced
|
||||
with "n/a".
|
||||
|
||||
Parameters
|
||||
----------
|
||||
orig_units : dict
|
||||
Dictionary mapping channel names to their units as specified in
|
||||
the header file. Example: {'FC1': 'nV'}
|
||||
|
||||
Returns
|
||||
-------
|
||||
orig_units_remapped : dict
|
||||
Dictionary mapping channel names to their VALID units as specified in
|
||||
the header file. Invalid units are now labeled "n/a".
|
||||
Example: {'FC1': 'nV', 'Hfp3erz': 'n/a'}
|
||||
"""
|
||||
if orig_units is None:
|
||||
return
|
||||
valid_units = _get_valid_units()
|
||||
valid_units_lowered = [unit.lower() for unit in valid_units]
|
||||
orig_units_remapped = dict(orig_units)
|
||||
for ch_name, unit in orig_units.items():
|
||||
# Be lenient: we ignore case for now.
|
||||
if unit.lower() in valid_units_lowered:
|
||||
continue
|
||||
|
||||
# Common "invalid units" can be remapped to their valid equivalent
|
||||
remap_dict = dict()
|
||||
remap_dict["uv"] = "µV"
|
||||
remap_dict["μv"] = "µV" # greek letter mu vs micro sign. use micro
|
||||
remap_dict["\x83\xeav"] = "µV" # for shift-jis mu, use micro
|
||||
if unit.lower() in remap_dict:
|
||||
orig_units_remapped[ch_name] = remap_dict[unit.lower()]
|
||||
continue
|
||||
|
||||
# Some units cannot be saved, they are invalid: assign "n/a"
|
||||
orig_units_remapped[ch_name] = "n/a"
|
||||
|
||||
return orig_units_remapped
|
||||
|
||||
|
||||
def _find_channels(ch_names, ch_type="EOG"):
|
||||
"""Find EOG channel."""
|
||||
substrings = (ch_type,)
|
||||
substrings = [s.upper() for s in substrings]
|
||||
if ch_type == "EOG":
|
||||
substrings = ("EOG", "EYE")
|
||||
eog_idx = [
|
||||
idx
|
||||
for idx, ch in enumerate(ch_names)
|
||||
if any(substring in ch.upper() for substring in substrings)
|
||||
]
|
||||
return eog_idx
|
||||
|
||||
|
||||
def _mult_cal_one(data_view, one, idx, cals, mult):
|
||||
"""Take a chunk of raw data, multiply by mult or cals, and store."""
|
||||
one = np.asarray(one, dtype=data_view.dtype)
|
||||
assert data_view.shape[1] == one.shape[1], (
|
||||
data_view.shape[1],
|
||||
one.shape[1],
|
||||
) # noqa: E501
|
||||
if mult is not None:
|
||||
assert mult.ndim == one.ndim == 2
|
||||
data_view[:] = mult @ one[idx]
|
||||
else:
|
||||
assert cals is not None
|
||||
if isinstance(idx, slice):
|
||||
data_view[:] = one[idx]
|
||||
else:
|
||||
# faster than doing one = one[idx]
|
||||
np.take(one, idx, axis=0, out=data_view)
|
||||
data_view *= cals
|
||||
|
||||
|
||||
def _blk_read_lims(start, stop, buf_len):
|
||||
"""Deal with indexing in the middle of a data block.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start : int
|
||||
Starting index.
|
||||
stop : int
|
||||
Ending index (exclusive).
|
||||
buf_len : int
|
||||
Buffer size in samples.
|
||||
|
||||
Returns
|
||||
-------
|
||||
block_start_idx : int
|
||||
The first block to start reading from.
|
||||
r_lims : list
|
||||
The read limits.
|
||||
d_lims : list
|
||||
The write limits.
|
||||
|
||||
Notes
|
||||
-----
|
||||
Consider this example::
|
||||
|
||||
>>> start, stop, buf_len = 2, 27, 10
|
||||
|
||||
+---------+---------+---------
|
||||
File structure: | buf0 | buf1 | buf2 |
|
||||
+---------+---------+---------
|
||||
File time: 0 10 20 30
|
||||
+---------+---------+---------
|
||||
Requested time: 2 27
|
||||
|
||||
| |
|
||||
blockstart blockstop
|
||||
| |
|
||||
start stop
|
||||
|
||||
We need 27 - 2 = 25 samples (per channel) to store our data, and
|
||||
we need to read from 3 buffers (30 samples) to get all of our data.
|
||||
|
||||
On all reads but the first, the data we read starts at
|
||||
the first sample of the buffer. On all reads but the last,
|
||||
the data we read ends on the last sample of the buffer.
|
||||
|
||||
We call ``this_data`` the variable that stores the current buffer's data,
|
||||
and ``data`` the variable that stores the total output.
|
||||
|
||||
On the first read, we need to do this::
|
||||
|
||||
>>> data[0:buf_len-2] = this_data[2:buf_len] # doctest: +SKIP
|
||||
|
||||
On the second read, we need to do::
|
||||
|
||||
>>> data[1*buf_len-2:2*buf_len-2] = this_data[0:buf_len] # doctest: +SKIP
|
||||
|
||||
On the final read, we need to do::
|
||||
|
||||
>>> data[2*buf_len-2:3*buf_len-2-3] = this_data[0:buf_len-3] # doctest: +SKIP
|
||||
|
||||
This function encapsulates this logic to allow a loop over blocks, where
|
||||
data is stored using the following limits::
|
||||
|
||||
>>> data[d_lims[ii, 0]:d_lims[ii, 1]] = this_data[r_lims[ii, 0]:r_lims[ii, 1]] # doctest: +SKIP
|
||||
|
||||
""" # noqa: E501
|
||||
# this is used to deal with indexing in the middle of a sampling period
|
||||
assert all(isinstance(x, int) for x in (start, stop, buf_len))
|
||||
block_start_idx = start // buf_len
|
||||
block_start = block_start_idx * buf_len
|
||||
last_used_samp = stop - 1
|
||||
block_stop = last_used_samp - last_used_samp % buf_len + buf_len
|
||||
read_size = block_stop - block_start
|
||||
n_blk = read_size // buf_len + (read_size % buf_len != 0)
|
||||
start_offset = start - block_start
|
||||
end_offset = block_stop - stop
|
||||
d_lims = np.empty((n_blk, 2), int)
|
||||
r_lims = np.empty((n_blk, 2), int)
|
||||
for bi in range(n_blk):
|
||||
# Triage start (sidx) and end (eidx) indices for
|
||||
# data (d) and read (r)
|
||||
if bi == 0:
|
||||
d_sidx = 0
|
||||
r_sidx = start_offset
|
||||
else:
|
||||
d_sidx = bi * buf_len - start_offset
|
||||
r_sidx = 0
|
||||
if bi == n_blk - 1:
|
||||
d_eidx = stop - start
|
||||
r_eidx = buf_len - end_offset
|
||||
else:
|
||||
d_eidx = (bi + 1) * buf_len - start_offset
|
||||
r_eidx = buf_len
|
||||
d_lims[bi] = [d_sidx, d_eidx]
|
||||
r_lims[bi] = [r_sidx, r_eidx]
|
||||
return block_start_idx, r_lims, d_lims
|
||||
|
||||
|
||||
def _file_size(fname):
|
||||
"""Get the file size in bytes."""
|
||||
with open(fname, "rb") as f:
|
||||
f.seek(0, os.SEEK_END)
|
||||
return f.tell()
|
||||
|
||||
|
||||
def _read_segments_file(
|
||||
raw,
|
||||
data,
|
||||
idx,
|
||||
fi,
|
||||
start,
|
||||
stop,
|
||||
cals,
|
||||
mult,
|
||||
dtype,
|
||||
n_channels=None,
|
||||
offset=0,
|
||||
trigger_ch=None,
|
||||
):
|
||||
"""Read a chunk of raw data."""
|
||||
if n_channels is None:
|
||||
n_channels = raw._raw_extras[fi]["orig_nchan"]
|
||||
|
||||
n_bytes = np.dtype(dtype).itemsize
|
||||
# data_offset and data_left count data samples (channels x time points),
|
||||
# not bytes.
|
||||
data_offset = n_channels * start * n_bytes + offset
|
||||
data_left = (stop - start) * n_channels
|
||||
|
||||
# Read up to 100 MB of data at a time, block_size is in data samples
|
||||
block_size = ((int(100e6) // n_bytes) // n_channels) * n_channels
|
||||
block_size = min(data_left, block_size)
|
||||
with open(raw.filenames[fi], "rb", buffering=0) as fid:
|
||||
fid.seek(data_offset)
|
||||
# extract data in chunks
|
||||
for sample_start in np.arange(0, data_left, block_size) // n_channels:
|
||||
count = min(block_size, data_left - sample_start * n_channels)
|
||||
block = np.fromfile(fid, dtype, count)
|
||||
if block.size != count:
|
||||
raise RuntimeError(
|
||||
f"Incorrect number of samples ({block.size} != {count}), please "
|
||||
"report this error to MNE-Python developers"
|
||||
)
|
||||
block = block.reshape(n_channels, -1, order="F")
|
||||
n_samples = block.shape[1] # = count // n_channels
|
||||
sample_stop = sample_start + n_samples
|
||||
if trigger_ch is not None:
|
||||
stim_ch = trigger_ch[start:stop][sample_start:sample_stop]
|
||||
block = np.vstack((block, stim_ch))
|
||||
data_view = data[:, sample_start:sample_stop]
|
||||
_mult_cal_one(data_view, block, idx, cals, mult)
|
||||
|
||||
|
||||
def read_str(fid, count=1):
|
||||
"""Read string from a binary file in a python version compatible way."""
|
||||
dtype = np.dtype(f">S{count}")
|
||||
string = fid.read(dtype.itemsize)
|
||||
data = np.frombuffer(string, dtype=dtype)[0]
|
||||
bytestr = b"".join([data[0 : data.index(b"\x00") if b"\x00" in data else count]])
|
||||
|
||||
return str(bytestr.decode("ascii")) # Return native str type for Py2/3
|
||||
|
||||
|
||||
def _create_chs(ch_names, cals, ch_coil, ch_kind, eog, ecg, emg, misc):
|
||||
"""Initialize info['chs'] for eeg channels."""
|
||||
chs = list()
|
||||
for idx, ch_name in enumerate(ch_names):
|
||||
if ch_name in eog or idx in eog:
|
||||
coil_type = FIFF.FIFFV_COIL_NONE
|
||||
kind = FIFF.FIFFV_EOG_CH
|
||||
elif ch_name in ecg or idx in ecg:
|
||||
coil_type = FIFF.FIFFV_COIL_NONE
|
||||
kind = FIFF.FIFFV_ECG_CH
|
||||
elif ch_name in emg or idx in emg:
|
||||
coil_type = FIFF.FIFFV_COIL_NONE
|
||||
kind = FIFF.FIFFV_EMG_CH
|
||||
elif ch_name in misc or idx in misc:
|
||||
coil_type = FIFF.FIFFV_COIL_NONE
|
||||
kind = FIFF.FIFFV_MISC_CH
|
||||
else:
|
||||
coil_type = ch_coil
|
||||
kind = ch_kind
|
||||
|
||||
chan_info = {
|
||||
"cal": cals[idx],
|
||||
"logno": idx + 1,
|
||||
"scanno": idx + 1,
|
||||
"range": 1.0,
|
||||
"unit_mul": FIFF.FIFF_UNITM_NONE,
|
||||
"ch_name": ch_name,
|
||||
"unit": FIFF.FIFF_UNIT_V,
|
||||
"coord_frame": FIFF.FIFFV_COORD_HEAD,
|
||||
"coil_type": coil_type,
|
||||
"kind": kind,
|
||||
"loc": np.zeros(12),
|
||||
}
|
||||
if coil_type == FIFF.FIFFV_COIL_EEG:
|
||||
chan_info["loc"][:3] = np.nan
|
||||
chs.append(chan_info)
|
||||
return chs
|
||||
|
||||
|
||||
def _construct_bids_filename(base, ext, part_idx, validate=True):
|
||||
"""Construct a BIDS compatible filename for split files."""
|
||||
# insert index in filename
|
||||
dirname = op.dirname(base)
|
||||
base = op.basename(base)
|
||||
deconstructed_base = base.split("_")
|
||||
if len(deconstructed_base) < 2 and validate:
|
||||
raise ValueError(
|
||||
"Filename base must end with an underscore followed "
|
||||
f"by the modality (e.g., _eeg or _meg), got {base}"
|
||||
)
|
||||
suffix = deconstructed_base[-1]
|
||||
base = "_".join(deconstructed_base[:-1])
|
||||
use_fname = f"{base}_split-{part_idx + 1:02}_{suffix}{ext}"
|
||||
if dirname:
|
||||
use_fname = op.join(dirname, use_fname)
|
||||
return use_fname
|
||||
|
||||
|
||||
def _make_split_fnames(fname, n_splits, split_naming):
|
||||
"""Make a list of split filenames."""
|
||||
if n_splits == 1:
|
||||
fname = Path(fname)
|
||||
return [fname]
|
||||
res = []
|
||||
base, ext = op.splitext(fname)
|
||||
for i in range(n_splits):
|
||||
if split_naming == "neuromag":
|
||||
path = Path(f"{base}-{i:d}{ext}" if i else fname)
|
||||
res.append(path)
|
||||
else:
|
||||
assert split_naming == "bids"
|
||||
path = Path(_construct_bids_filename(base, ext, i))
|
||||
res.append(path)
|
||||
return res
|
||||
70
mne/_fiff/what.py
Normal file
70
mne/_fiff/what.py
Normal file
@@ -0,0 +1,70 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from collections import OrderedDict
|
||||
from inspect import signature
|
||||
|
||||
from ..utils import _check_fname, logger
|
||||
|
||||
|
||||
def what(fname):
|
||||
"""Try to determine the type of the FIF file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
The filename. Should end in ``.fif`` or ``.fif.gz``.
|
||||
|
||||
Returns
|
||||
-------
|
||||
what : str | None
|
||||
The type of the file. Will be 'unknown' if it could not be determined.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.19
|
||||
"""
|
||||
from ..bem import read_bem_solution, read_bem_surfaces
|
||||
from ..cov import read_cov
|
||||
from ..epochs import read_epochs
|
||||
from ..event import read_events
|
||||
from ..evoked import read_evokeds
|
||||
from ..forward import read_forward_solution
|
||||
from ..io import read_raw_fif
|
||||
from ..minimum_norm import read_inverse_operator
|
||||
from ..preprocessing import read_ica
|
||||
from ..proj import read_proj
|
||||
from ..source_space import read_source_spaces
|
||||
from ..transforms import read_trans
|
||||
from .meas_info import read_fiducials
|
||||
|
||||
fname = _check_fname(fname, overwrite="read", must_exist=True)
|
||||
checks = OrderedDict()
|
||||
checks["raw"] = read_raw_fif
|
||||
checks["ica"] = read_ica
|
||||
checks["epochs"] = read_epochs
|
||||
checks["evoked"] = read_evokeds
|
||||
checks["forward"] = read_forward_solution
|
||||
checks["inverse"] = read_inverse_operator
|
||||
checks["src"] = read_source_spaces
|
||||
checks["bem solution"] = read_bem_solution
|
||||
checks["bem surfaces"] = read_bem_surfaces
|
||||
checks["cov"] = read_cov
|
||||
checks["transform"] = read_trans
|
||||
checks["events"] = read_events
|
||||
checks["fiducials"] = read_fiducials
|
||||
checks["proj"] = read_proj
|
||||
for what, func in checks.items():
|
||||
args = signature(func).parameters
|
||||
assert "verbose" in args, func
|
||||
kwargs = dict(verbose="error")
|
||||
if "preload" in args:
|
||||
kwargs["preload"] = False
|
||||
try:
|
||||
func(fname, **kwargs)
|
||||
except Exception as exp:
|
||||
logger.debug(f"Not {what}: {exp}")
|
||||
else:
|
||||
return what
|
||||
return "unknown"
|
||||
454
mne/_fiff/write.py
Normal file
454
mne/_fiff/write.py
Normal file
@@ -0,0 +1,454 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import datetime
|
||||
import os.path as op
|
||||
import re
|
||||
import time
|
||||
import uuid
|
||||
from contextlib import contextmanager
|
||||
from gzip import GzipFile
|
||||
|
||||
import numpy as np
|
||||
from scipy.sparse import csc_array, csr_array
|
||||
|
||||
from ..utils import _file_like, _validate_type, logger
|
||||
from ..utils.numerics import _date_to_julian
|
||||
from .constants import FIFF
|
||||
|
||||
# We choose a "magic" date to store (because meas_date is obligatory)
|
||||
# to treat as meas_date=None. This one should be impossible for systems
|
||||
# to write -- the second field is microseconds, so anything >= 1e6
|
||||
# should be moved into the first field (seconds).
|
||||
DATE_NONE = (0, 2**31 - 1)
|
||||
|
||||
|
||||
def _write(fid, data, kind, data_size, FIFFT_TYPE, dtype):
|
||||
"""Write data."""
|
||||
if isinstance(data, np.ndarray):
|
||||
data_size *= data.size
|
||||
|
||||
# XXX for string types the data size is used as
|
||||
# computed in ``write_string``.
|
||||
|
||||
fid.write(np.array(kind, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFFT_TYPE, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data, dtype=dtype).tobytes())
|
||||
|
||||
|
||||
def _get_split_size(split_size):
|
||||
"""Convert human-readable bytes to machine-readable bytes."""
|
||||
if isinstance(split_size, str):
|
||||
exp = dict(MB=20, GB=30).get(split_size[-2:], None)
|
||||
if exp is None:
|
||||
raise ValueError('split_size has to end with either "MB" or "GB"')
|
||||
split_size = int(float(split_size[:-2]) * 2**exp)
|
||||
|
||||
if split_size > 2147483648:
|
||||
raise ValueError("split_size cannot be larger than 2GB")
|
||||
return split_size
|
||||
|
||||
|
||||
_NEXT_FILE_BUFFER = 1048576 # 2 ** 20 extra cushion for last post-data tags
|
||||
|
||||
|
||||
def write_nop(fid, last=False):
|
||||
"""Write a FIFF_NOP."""
|
||||
fid.write(np.array(FIFF.FIFF_NOP, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFT_VOID, dtype=">i4").tobytes())
|
||||
fid.write(np.array(0, dtype=">i4").tobytes())
|
||||
next_ = FIFF.FIFFV_NEXT_NONE if last else FIFF.FIFFV_NEXT_SEQ
|
||||
fid.write(np.array(next_, dtype=">i4").tobytes())
|
||||
|
||||
|
||||
INT32_MAX = 2147483647
|
||||
|
||||
|
||||
def write_int(fid, kind, data):
|
||||
"""Write a 32-bit integer tag to a fif file."""
|
||||
data_size = 4
|
||||
data = np.asarray(data)
|
||||
if data.dtype.kind not in "uib" and data.size > 0:
|
||||
raise TypeError(
|
||||
f"Cannot safely write data kind {kind} with dtype {data.dtype} as int",
|
||||
)
|
||||
max_val = data.max() if data.size > 0 else 0
|
||||
if max_val > INT32_MAX:
|
||||
raise TypeError(
|
||||
f"Value {max_val} exceeds maximum allowed ({INT32_MAX}) for tag {kind}"
|
||||
)
|
||||
data = data.astype(">i4").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_INT, ">i4")
|
||||
|
||||
|
||||
def write_double(fid, kind, data):
|
||||
"""Write a double-precision floating point tag to a fif file."""
|
||||
data_size = 8
|
||||
data = np.array(data, dtype=">f8").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_DOUBLE, ">f8")
|
||||
|
||||
|
||||
def write_float(fid, kind, data):
|
||||
"""Write a single-precision floating point tag to a fif file."""
|
||||
data_size = 4
|
||||
data = np.array(data, dtype=">f4").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_FLOAT, ">f4")
|
||||
|
||||
|
||||
def write_dau_pack16(fid, kind, data):
|
||||
"""Write a dau_pack16 tag to a fif file."""
|
||||
data_size = 2
|
||||
data = np.array(data, dtype=">i2").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_DAU_PACK16, ">i2")
|
||||
|
||||
|
||||
def write_complex64(fid, kind, data):
|
||||
"""Write a 64 bit complex floating point tag to a fif file."""
|
||||
data_size = 8
|
||||
data = np.array(data, dtype=">c8").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_COMPLEX_FLOAT, ">c8")
|
||||
|
||||
|
||||
def write_complex128(fid, kind, data):
|
||||
"""Write a 128 bit complex floating point tag to a fif file."""
|
||||
data_size = 16
|
||||
data = np.array(data, dtype=">c16").T
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_COMPLEX_FLOAT, ">c16")
|
||||
|
||||
|
||||
def write_julian(fid, kind, data):
|
||||
"""Write a Julian-formatted date to a FIF file."""
|
||||
assert isinstance(data, datetime.date), type(data)
|
||||
data_size = 4
|
||||
jd = _date_to_julian(data)
|
||||
data = np.array(jd, dtype=">i4")
|
||||
_write(fid, data, kind, data_size, FIFF.FIFFT_JULIAN, ">i4")
|
||||
|
||||
|
||||
def write_string(fid, kind, data):
|
||||
"""Write a string tag."""
|
||||
try:
|
||||
str_data = str(data).encode("latin1")
|
||||
except UnicodeEncodeError:
|
||||
str_data = str(data).encode("latin1", errors="xmlcharrefreplace")
|
||||
data_size = len(str_data) # therefore compute size here
|
||||
if data_size > 0:
|
||||
_write(fid, str_data, kind, data_size, FIFF.FIFFT_STRING, ">S")
|
||||
|
||||
|
||||
def write_name_list(fid, kind, data):
|
||||
"""Write a colon-separated list of names.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : list of strings
|
||||
"""
|
||||
write_string(fid, kind, ":".join(data))
|
||||
|
||||
|
||||
def write_name_list_sanitized(fid, kind, lst, name):
|
||||
"""Write a sanitized, colon-separated list of names."""
|
||||
write_string(fid, kind, _safe_name_list(lst, "write", name))
|
||||
|
||||
|
||||
def _safe_name_list(lst, operation, name):
|
||||
if operation == "write":
|
||||
assert isinstance(lst, list | tuple | np.ndarray), type(lst)
|
||||
if any("{COLON}" in val for val in lst):
|
||||
raise ValueError(f'The substring "{{COLON}}" in {name} not supported.')
|
||||
return ":".join(val.replace(":", "{COLON}") for val in lst)
|
||||
else:
|
||||
# take a sanitized string and return a list of strings
|
||||
assert operation == "read"
|
||||
assert lst is None or isinstance(lst, str)
|
||||
if not lst: # None or empty string
|
||||
return []
|
||||
return [val.replace("{COLON}", ":") for val in lst.split(":")]
|
||||
|
||||
|
||||
def write_float_matrix(fid, kind, mat):
|
||||
"""Write a single-precision floating-point matrix tag."""
|
||||
_write_matrix_data(fid, kind, mat, FIFF.FIFFT_FLOAT)
|
||||
|
||||
|
||||
def write_double_matrix(fid, kind, mat):
|
||||
"""Write a double-precision floating-point matrix tag."""
|
||||
_write_matrix_data(fid, kind, mat, FIFF.FIFFT_DOUBLE)
|
||||
|
||||
|
||||
def write_int_matrix(fid, kind, mat):
|
||||
"""Write integer 32 matrix tag."""
|
||||
_write_matrix_data(fid, kind, mat, FIFF.FIFFT_INT)
|
||||
|
||||
|
||||
def write_complex_float_matrix(fid, kind, mat):
|
||||
"""Write complex 64 matrix tag."""
|
||||
_write_matrix_data(fid, kind, mat, FIFF.FIFFT_COMPLEX_FLOAT)
|
||||
|
||||
|
||||
def write_complex_double_matrix(fid, kind, mat):
|
||||
"""Write complex 128 matrix tag."""
|
||||
_write_matrix_data(fid, kind, mat, FIFF.FIFFT_COMPLEX_DOUBLE)
|
||||
|
||||
|
||||
def _write_matrix_data(fid, kind, mat, data_type):
|
||||
dtype = {
|
||||
FIFF.FIFFT_FLOAT: ">f4",
|
||||
FIFF.FIFFT_DOUBLE: ">f8",
|
||||
FIFF.FIFFT_COMPLEX_FLOAT: ">c8",
|
||||
FIFF.FIFFT_COMPLEX_DOUBLE: ">c16",
|
||||
FIFF.FIFFT_INT: ">i4",
|
||||
}[data_type]
|
||||
dtype = np.dtype(dtype)
|
||||
data_size = dtype.itemsize * mat.size + 4 * (mat.ndim + 1)
|
||||
matrix_type = data_type | FIFF.FIFFT_MATRIX
|
||||
fid.write(np.array(kind, dtype=">i4").tobytes())
|
||||
fid.write(np.array(matrix_type, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
fid.write(np.array(mat, dtype=dtype).tobytes())
|
||||
dims = np.empty(mat.ndim + 1, dtype=np.int32)
|
||||
dims[: mat.ndim] = mat.shape[::-1]
|
||||
dims[-1] = mat.ndim
|
||||
fid.write(np.array(dims, dtype=">i4").tobytes())
|
||||
check_fiff_length(fid)
|
||||
|
||||
|
||||
def get_machid():
|
||||
"""Get (mostly) unique machine ID.
|
||||
|
||||
Returns
|
||||
-------
|
||||
ids : array (length 2, int32)
|
||||
The machine identifier used in MNE.
|
||||
"""
|
||||
mac = f"{uuid.getnode():012x}".encode() # byte conversion for Py3
|
||||
mac = re.findall(b"..", mac) # split string
|
||||
mac += [b"00", b"00"] # add two more fields
|
||||
|
||||
# Convert to integer in reverse-order (for some reason)
|
||||
from codecs import encode
|
||||
|
||||
mac = b"".join([encode(h, "hex_codec") for h in mac[::-1]])
|
||||
ids = np.flipud(np.frombuffer(mac, np.int32, count=2))
|
||||
return ids
|
||||
|
||||
|
||||
def get_new_file_id():
|
||||
"""Create a new file ID tag."""
|
||||
secs, usecs = divmod(time.time(), 1.0)
|
||||
secs, usecs = int(secs), int(usecs * 1e6)
|
||||
return {
|
||||
"machid": get_machid(),
|
||||
"version": FIFF.FIFFC_VERSION,
|
||||
"secs": secs,
|
||||
"usecs": usecs,
|
||||
}
|
||||
|
||||
|
||||
def write_id(fid, kind, id_=None):
|
||||
"""Write fiff id."""
|
||||
id_ = _generate_meas_id() if id_ is None else id_
|
||||
|
||||
data_size = 5 * 4 # The id comprises five integers
|
||||
fid.write(np.array(kind, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFT_ID_STRUCT, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
|
||||
# Collect the bits together for one write
|
||||
arr = np.array(
|
||||
[id_["version"], id_["machid"][0], id_["machid"][1], id_["secs"], id_["usecs"]],
|
||||
dtype=">i4",
|
||||
)
|
||||
fid.write(arr.tobytes())
|
||||
|
||||
|
||||
def start_block(fid, kind):
|
||||
"""Write a FIFF_BLOCK_START tag."""
|
||||
write_int(fid, FIFF.FIFF_BLOCK_START, kind)
|
||||
|
||||
|
||||
def end_block(fid, kind):
|
||||
"""Write a FIFF_BLOCK_END tag."""
|
||||
write_int(fid, FIFF.FIFF_BLOCK_END, kind)
|
||||
|
||||
|
||||
def start_file(fname, id_=None):
|
||||
"""Open a fif file for writing and writes the compulsory header tags.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like | fid
|
||||
The name of the file to open. It is recommended
|
||||
that the name ends with .fif or .fif.gz. Can also be an
|
||||
already opened file.
|
||||
id_ : dict | None
|
||||
ID to use for the FIFF_FILE_ID.
|
||||
"""
|
||||
if _file_like(fname):
|
||||
logger.debug(f"Writing using {type(fname)} I/O")
|
||||
fid = fname
|
||||
fid.seek(0)
|
||||
else:
|
||||
fname = str(fname)
|
||||
if op.splitext(fname)[1].lower() == ".gz":
|
||||
logger.debug("Writing using gzip")
|
||||
# defaults to compression level 9, which is barely smaller but much
|
||||
# slower. 2 offers a good compromise.
|
||||
fid = GzipFile(fname, "wb", compresslevel=2)
|
||||
else:
|
||||
logger.debug("Writing using normal I/O")
|
||||
fid = open(fname, "wb")
|
||||
# Write the compulsory items
|
||||
write_id(fid, FIFF.FIFF_FILE_ID, id_)
|
||||
write_int(fid, FIFF.FIFF_DIR_POINTER, -1)
|
||||
write_int(fid, FIFF.FIFF_FREE_LIST, -1)
|
||||
return fid
|
||||
|
||||
|
||||
@contextmanager
|
||||
def start_and_end_file(fname, id_=None):
|
||||
"""Start and (if successfully written) close the file."""
|
||||
with start_file(fname, id_=id_) as fid:
|
||||
yield fid
|
||||
end_file(fid) # we only hit this line if the yield does not err
|
||||
|
||||
|
||||
def check_fiff_length(fid, close=True):
|
||||
"""Ensure our file hasn't grown too large to work properly."""
|
||||
if fid.tell() > 2147483648: # 2 ** 31, FIFF uses signed 32-bit locations
|
||||
if close:
|
||||
fid.close()
|
||||
raise OSError(
|
||||
"FIFF file exceeded 2GB limit, please split file, reduce"
|
||||
" split_size (if possible), or save to a different "
|
||||
"format"
|
||||
)
|
||||
|
||||
|
||||
def end_file(fid):
|
||||
"""Write the closing tags to a fif file and closes the file."""
|
||||
write_nop(fid, last=True)
|
||||
check_fiff_length(fid)
|
||||
fid.close()
|
||||
|
||||
|
||||
def write_coord_trans(fid, trans):
|
||||
"""Write a coordinate transformation structure."""
|
||||
data_size = 4 * 2 * 12 + 4 * 2
|
||||
fid.write(np.array(FIFF.FIFF_COORD_TRANS, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFT_COORD_TRANS_STRUCT, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
fid.write(np.array(trans["from"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(trans["to"], dtype=">i4").tobytes())
|
||||
|
||||
# The transform...
|
||||
rot = trans["trans"][:3, :3]
|
||||
move = trans["trans"][:3, 3]
|
||||
fid.write(np.array(rot, dtype=">f4").tobytes())
|
||||
fid.write(np.array(move, dtype=">f4").tobytes())
|
||||
|
||||
# ...and its inverse
|
||||
trans_inv = np.linalg.inv(trans["trans"])
|
||||
rot = trans_inv[:3, :3]
|
||||
move = trans_inv[:3, 3]
|
||||
fid.write(np.array(rot, dtype=">f4").tobytes())
|
||||
fid.write(np.array(move, dtype=">f4").tobytes())
|
||||
|
||||
|
||||
def write_ch_info(fid, ch):
|
||||
"""Write a channel information record to a fif file."""
|
||||
data_size = 4 * 13 + 4 * 7 + 16
|
||||
|
||||
fid.write(np.array(FIFF.FIFF_CH_INFO, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFT_CH_INFO_STRUCT, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
|
||||
# Start writing fiffChInfoRec
|
||||
fid.write(np.array(ch["scanno"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(ch["logno"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(ch["kind"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(ch["range"], dtype=">f4").tobytes())
|
||||
fid.write(np.array(ch["cal"], dtype=">f4").tobytes())
|
||||
fid.write(np.array(ch["coil_type"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(ch["loc"], dtype=">f4").tobytes()) # writing 12 values
|
||||
|
||||
# unit and unit multiplier
|
||||
fid.write(np.array(ch["unit"], dtype=">i4").tobytes())
|
||||
fid.write(np.array(ch["unit_mul"], dtype=">i4").tobytes())
|
||||
|
||||
# Finally channel name
|
||||
ch_name = ch["ch_name"][:15]
|
||||
fid.write(np.array(ch_name, dtype=">c").tobytes())
|
||||
fid.write(b"\0" * (16 - len(ch_name)))
|
||||
|
||||
|
||||
def write_dig_points(fid, dig, block=False, coord_frame=None, *, ch_names=None):
|
||||
"""Write a set of digitizer data points into a fif file."""
|
||||
if dig is not None:
|
||||
data_size = 5 * 4
|
||||
if block:
|
||||
start_block(fid, FIFF.FIFFB_ISOTRAK)
|
||||
if coord_frame is not None:
|
||||
write_int(fid, FIFF.FIFF_MNE_COORD_FRAME, coord_frame)
|
||||
for d in dig:
|
||||
fid.write(np.array(FIFF.FIFF_DIG_POINT, ">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFT_DIG_POINT_STRUCT, ">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, ">i4").tobytes())
|
||||
# Start writing fiffDigPointRec
|
||||
fid.write(np.array(d["kind"], ">i4").tobytes())
|
||||
fid.write(np.array(d["ident"], ">i4").tobytes())
|
||||
fid.write(np.array(d["r"][:3], ">f4").tobytes())
|
||||
if ch_names is not None:
|
||||
write_name_list_sanitized(
|
||||
fid, FIFF.FIFF_MNE_CH_NAME_LIST, ch_names, "ch_names"
|
||||
)
|
||||
if block:
|
||||
end_block(fid, FIFF.FIFFB_ISOTRAK)
|
||||
|
||||
|
||||
def write_float_sparse_rcs(fid, kind, mat):
|
||||
"""Write a single-precision sparse compressed row matrix tag."""
|
||||
return write_float_sparse(fid, kind, mat, fmt="csr")
|
||||
|
||||
|
||||
def write_float_sparse(fid, kind, mat, fmt="auto"):
|
||||
"""Write a single-precision floating-point sparse matrix tag."""
|
||||
if fmt == "auto":
|
||||
fmt = "csr" if isinstance(mat, csr_array) else "csc"
|
||||
need = csr_array if fmt == "csr" else csc_array
|
||||
matrix_type = getattr(FIFF, f"FIFFT_SPARSE_{fmt[-1].upper()}CS_MATRIX")
|
||||
_validate_type(mat, need, "sparse")
|
||||
matrix_type = matrix_type | FIFF.FIFFT_MATRIX | FIFF.FIFFT_FLOAT
|
||||
nnzm = mat.nnz
|
||||
nrow = mat.shape[0]
|
||||
data_size = 4 * nnzm + 4 * nnzm + 4 * (nrow + 1) + 4 * 4
|
||||
|
||||
fid.write(np.array(kind, dtype=">i4").tobytes())
|
||||
fid.write(np.array(matrix_type, dtype=">i4").tobytes())
|
||||
fid.write(np.array(data_size, dtype=">i4").tobytes())
|
||||
fid.write(np.array(FIFF.FIFFV_NEXT_SEQ, dtype=">i4").tobytes())
|
||||
|
||||
fid.write(np.array(mat.data, dtype=">f4").tobytes())
|
||||
fid.write(np.array(mat.indices, dtype=">i4").tobytes())
|
||||
fid.write(np.array(mat.indptr, dtype=">i4").tobytes())
|
||||
|
||||
dims = [nnzm, mat.shape[0], mat.shape[1], 2]
|
||||
fid.write(np.array(dims, dtype=">i4").tobytes())
|
||||
check_fiff_length(fid)
|
||||
|
||||
|
||||
def _generate_meas_id():
|
||||
"""Generate a new meas_id dict."""
|
||||
id_ = dict()
|
||||
id_["version"] = FIFF.FIFFC_VERSION
|
||||
id_["machid"] = get_machid()
|
||||
id_["secs"], id_["usecs"] = DATE_NONE
|
||||
return id_
|
||||
854
mne/_freesurfer.py
Normal file
854
mne/_freesurfer.py
Normal file
@@ -0,0 +1,854 @@
|
||||
"""Freesurfer handling functions."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import os.path as op
|
||||
from gzip import GzipFile
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ._fiff.constants import FIFF
|
||||
from ._fiff.meas_info import read_fiducials
|
||||
from .surface import _read_mri_surface, read_surface
|
||||
from .transforms import (
|
||||
Transform,
|
||||
_ensure_trans,
|
||||
apply_trans,
|
||||
combine_transforms,
|
||||
invert_transform,
|
||||
read_ras_mni_t,
|
||||
)
|
||||
from .utils import (
|
||||
_check_fname,
|
||||
_check_option,
|
||||
_import_nibabel,
|
||||
_validate_type,
|
||||
get_subjects_dir,
|
||||
logger,
|
||||
verbose,
|
||||
)
|
||||
|
||||
|
||||
def _check_subject_dir(subject, subjects_dir):
|
||||
"""Check that the Freesurfer subject directory is as expected."""
|
||||
subjects_dir = Path(get_subjects_dir(subjects_dir, raise_error=True))
|
||||
for img_name in ("T1", "brain", "aseg"):
|
||||
if not (subjects_dir / subject / "mri" / f"{img_name}.mgz").is_file():
|
||||
raise ValueError(
|
||||
"Freesurfer recon-all subject folder "
|
||||
"is incorrect or improperly formatted, "
|
||||
f"got {subjects_dir / subject}"
|
||||
)
|
||||
return subjects_dir / subject
|
||||
|
||||
|
||||
def _get_aseg(aseg, subject, subjects_dir):
|
||||
"""Check that the anatomical segmentation file exists and load it."""
|
||||
nib = _import_nibabel("load aseg")
|
||||
subjects_dir = Path(get_subjects_dir(subjects_dir, raise_error=True))
|
||||
if aseg == "auto": # use aparc+aseg if auto
|
||||
aseg = _check_fname(
|
||||
subjects_dir / subject / "mri" / "aparc+aseg.mgz",
|
||||
overwrite="read",
|
||||
must_exist=False,
|
||||
)
|
||||
if not aseg: # if doesn't exist use wmparc
|
||||
aseg = subjects_dir / subject / "mri" / "wmparc.mgz"
|
||||
else:
|
||||
aseg = subjects_dir / subject / "mri" / f"{aseg}.mgz"
|
||||
_check_fname(aseg, overwrite="read", must_exist=True)
|
||||
aseg = nib.load(aseg)
|
||||
aseg_data = np.array(aseg.dataobj)
|
||||
return aseg, aseg_data
|
||||
|
||||
|
||||
def _reorient_image(img, axcodes="RAS"):
|
||||
"""Reorient an image to a given orientation.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
img : instance of SpatialImage
|
||||
The MRI image.
|
||||
axcodes : tuple | str
|
||||
The axis codes specifying the orientation, e.g. "RAS".
|
||||
See :func:`nibabel.orientations.aff2axcodes`.
|
||||
|
||||
Returns
|
||||
-------
|
||||
img_data : ndarray
|
||||
The reoriented image data.
|
||||
vox_ras_t : ndarray
|
||||
The new transform from the new voxels to surface RAS.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.24
|
||||
"""
|
||||
nib = _import_nibabel("reorient MRI image")
|
||||
orig_data = np.array(img.dataobj).astype(np.float32)
|
||||
# reorient data to RAS
|
||||
ornt = nib.orientations.axcodes2ornt(
|
||||
nib.orientations.aff2axcodes(img.affine)
|
||||
).astype(int)
|
||||
ras_ornt = nib.orientations.axcodes2ornt(axcodes)
|
||||
ornt_trans = nib.orientations.ornt_transform(ornt, ras_ornt)
|
||||
img_data = nib.orientations.apply_orientation(orig_data, ornt_trans)
|
||||
orig_mgh = nib.MGHImage(orig_data, img.affine)
|
||||
aff_trans = nib.orientations.inv_ornt_aff(ornt_trans, img.shape)
|
||||
vox_ras_t = np.dot(orig_mgh.header.get_vox2ras_tkr(), aff_trans)
|
||||
return img_data, vox_ras_t
|
||||
|
||||
|
||||
def _mri_orientation(orientation):
|
||||
"""Get MRI orientation information from an image.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
orientation : str
|
||||
Orientation that you want. Can be "axial", "sagittal", or "coronal".
|
||||
|
||||
Returns
|
||||
-------
|
||||
axis : int
|
||||
The dimension of the axis to take slices over when plotting.
|
||||
x : int
|
||||
The dimension of the x axis.
|
||||
y : int
|
||||
The dimension of the y axis.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.21
|
||||
.. versionchanged:: 0.24
|
||||
"""
|
||||
_check_option("orientation", orientation, ("coronal", "axial", "sagittal"))
|
||||
axis = dict(coronal=1, axial=2, sagittal=0)[orientation]
|
||||
x, y = sorted(set([0, 1, 2]).difference(set([axis])))
|
||||
return axis, x, y
|
||||
|
||||
|
||||
def _get_mri_info_data(mri, data):
|
||||
# Read the segmentation data using nibabel
|
||||
if data:
|
||||
_import_nibabel("load MRI atlas data")
|
||||
out = dict()
|
||||
_, out["vox_mri_t"], out["mri_ras_t"], dims, _, mgz = _read_mri_info(
|
||||
mri, return_img=True
|
||||
)
|
||||
out.update(
|
||||
mri_width=dims[0], mri_height=dims[1], mri_depth=dims[1], mri_volume_name=mri
|
||||
)
|
||||
if data:
|
||||
assert mgz is not None
|
||||
out["mri_vox_t"] = invert_transform(out["vox_mri_t"])
|
||||
out["data"] = np.asarray(mgz.dataobj)
|
||||
return out
|
||||
|
||||
|
||||
def _get_mgz_header(fname):
|
||||
"""Adapted from nibabel to quickly extract header info."""
|
||||
fname = _check_fname(fname, overwrite="read", must_exist=True, name="MRI image")
|
||||
if fname.suffix != ".mgz":
|
||||
raise OSError("Filename must end with .mgz")
|
||||
header_dtd = [
|
||||
("version", ">i4"),
|
||||
("dims", ">i4", (4,)),
|
||||
("type", ">i4"),
|
||||
("dof", ">i4"),
|
||||
("goodRASFlag", ">i2"),
|
||||
("delta", ">f4", (3,)),
|
||||
("Mdc", ">f4", (3, 3)),
|
||||
("Pxyz_c", ">f4", (3,)),
|
||||
]
|
||||
header_dtype = np.dtype(header_dtd)
|
||||
with GzipFile(fname, "rb") as fid:
|
||||
hdr_str = fid.read(header_dtype.itemsize)
|
||||
header = np.ndarray(shape=(), dtype=header_dtype, buffer=hdr_str)
|
||||
# dims
|
||||
dims = header["dims"].astype(int)
|
||||
dims = dims[:3] if len(dims) == 4 else dims
|
||||
# vox2ras_tkr
|
||||
delta = header["delta"]
|
||||
ds = np.array(delta, float)
|
||||
ns = np.array(dims * ds) / 2.0
|
||||
v2rtkr = np.array(
|
||||
[
|
||||
[-ds[0], 0, 0, ns[0]],
|
||||
[0, 0, ds[2], -ns[2]],
|
||||
[0, -ds[1], 0, ns[1]],
|
||||
[0, 0, 0, 1],
|
||||
],
|
||||
dtype=np.float32,
|
||||
)
|
||||
# ras2vox
|
||||
d = np.diag(delta)
|
||||
pcrs_c = dims / 2.0
|
||||
Mdc = header["Mdc"].T
|
||||
pxyz_0 = header["Pxyz_c"] - np.dot(Mdc, np.dot(d, pcrs_c))
|
||||
M = np.eye(4, 4)
|
||||
M[0:3, 0:3] = np.dot(Mdc, d)
|
||||
M[0:3, 3] = pxyz_0.T
|
||||
header = dict(dims=dims, vox2ras_tkr=v2rtkr, vox2ras=M, zooms=header["delta"])
|
||||
return header
|
||||
|
||||
|
||||
def _get_atlas_values(vol_info, rr):
|
||||
# Transform MRI coordinates (where our surfaces live) to voxels
|
||||
rr_vox = apply_trans(vol_info["mri_vox_t"], rr)
|
||||
good = (
|
||||
(rr_vox >= -0.5) & (rr_vox < np.array(vol_info["data"].shape, int) - 0.5)
|
||||
).all(-1)
|
||||
idx = np.round(rr_vox[good].T).astype(np.int64)
|
||||
values = np.full(rr.shape[0], np.nan)
|
||||
values[good] = vol_info["data"][tuple(idx)]
|
||||
return values
|
||||
|
||||
|
||||
def get_volume_labels_from_aseg(mgz_fname, return_colors=False, atlas_ids=None):
|
||||
"""Return a list of names and colors of segmented volumes.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
mgz_fname : path-like
|
||||
Filename to read. Typically ``aseg.mgz`` or some variant in the
|
||||
freesurfer pipeline.
|
||||
return_colors : bool
|
||||
If True returns also the labels colors.
|
||||
atlas_ids : dict | None
|
||||
A lookup table providing a mapping from region names (str) to ID values
|
||||
(int). Can be None to use the standard Freesurfer LUT.
|
||||
|
||||
.. versionadded:: 0.21.0
|
||||
|
||||
Returns
|
||||
-------
|
||||
label_names : list of str
|
||||
The names of segmented volumes included in this mgz file.
|
||||
label_colors : list of str
|
||||
The RGB colors of the labels included in this mgz file.
|
||||
|
||||
See Also
|
||||
--------
|
||||
read_freesurfer_lut
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionchanged:: 0.21.0
|
||||
The label names are now sorted in the same order as their corresponding
|
||||
values in the MRI file.
|
||||
|
||||
.. versionadded:: 0.9.0
|
||||
"""
|
||||
nib = _import_nibabel("load MRI atlas data")
|
||||
mgz_fname = _check_fname(
|
||||
mgz_fname, overwrite="read", must_exist=True, name="mgz_fname"
|
||||
)
|
||||
atlas = nib.load(mgz_fname)
|
||||
data = np.asarray(atlas.dataobj) # don't need float here
|
||||
want = np.unique(data)
|
||||
if atlas_ids is None:
|
||||
atlas_ids, colors = read_freesurfer_lut()
|
||||
elif return_colors:
|
||||
raise ValueError("return_colors must be False if atlas_ids are provided")
|
||||
# restrict to the ones in the MRI, sorted by label name
|
||||
keep = np.isin(list(atlas_ids.values()), want)
|
||||
keys = sorted(
|
||||
(key for ki, key in enumerate(atlas_ids.keys()) if keep[ki]),
|
||||
key=lambda x: atlas_ids[x],
|
||||
)
|
||||
if return_colors:
|
||||
colors = [colors[k] for k in keys]
|
||||
out = keys, colors
|
||||
else:
|
||||
out = keys
|
||||
return out
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Head to MRI volume conversion
|
||||
|
||||
|
||||
@verbose
|
||||
def head_to_mri(
|
||||
pos,
|
||||
subject,
|
||||
mri_head_t,
|
||||
subjects_dir=None,
|
||||
*,
|
||||
kind="mri",
|
||||
unscale=False,
|
||||
verbose=None,
|
||||
):
|
||||
"""Convert pos from head coordinate system to MRI ones.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
pos : array, shape (n_pos, 3)
|
||||
The coordinates (in m) in head coordinate system.
|
||||
%(subject)s
|
||||
mri_head_t : instance of Transform
|
||||
MRI<->Head coordinate transformation.
|
||||
%(subjects_dir)s
|
||||
kind : str
|
||||
The MRI coordinate frame kind, can be ``'mri'`` (default) for
|
||||
FreeSurfer surface RAS or ``'ras'`` (default in 1.2) to use MRI RAS
|
||||
(scanner RAS).
|
||||
|
||||
.. versionadded:: 1.2
|
||||
unscale : bool
|
||||
For surrogate MRIs (e.g., scaled using ``mne coreg``), if True
|
||||
(default False), use the MRI scaling parameters to obtain points in
|
||||
the original/surrogate subject's MRI space.
|
||||
|
||||
.. versionadded:: 1.2
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
coordinates : array, shape (n_pos, 3)
|
||||
The MRI RAS coordinates (in mm) of pos.
|
||||
|
||||
Notes
|
||||
-----
|
||||
This function requires nibabel.
|
||||
"""
|
||||
from .coreg import read_mri_cfg
|
||||
|
||||
_validate_type(kind, str, "kind")
|
||||
_check_option("kind", kind, ("ras", "mri"))
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
t1_fname = subjects_dir / subject / "mri" / "T1.mgz"
|
||||
head_mri_t = _ensure_trans(mri_head_t, "head", "mri")
|
||||
if kind == "ras":
|
||||
_, _, mri_ras_t, _, _ = _read_mri_info(t1_fname)
|
||||
head_ras_t = combine_transforms(head_mri_t, mri_ras_t, "head", "ras")
|
||||
head_dest_t = head_ras_t
|
||||
else:
|
||||
assert kind == "mri"
|
||||
head_dest_t = head_mri_t
|
||||
pos_dest = apply_trans(head_dest_t, pos)
|
||||
# unscale if requested
|
||||
if unscale:
|
||||
params = read_mri_cfg(subject, subjects_dir)
|
||||
pos_dest /= params["scale"]
|
||||
pos_dest *= 1e3 # mm
|
||||
return pos_dest
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Surface to MNI conversion
|
||||
|
||||
|
||||
@verbose
|
||||
def vertex_to_mni(vertices, hemis, subject, subjects_dir=None, verbose=None):
|
||||
"""Convert the array of vertices for a hemisphere to MNI coordinates.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
vertices : int, or list of int
|
||||
Vertex number(s) to convert.
|
||||
hemis : int, or list of int
|
||||
Hemisphere(s) the vertices belong to.
|
||||
%(subject)s
|
||||
subjects_dir : str, or None
|
||||
Path to ``SUBJECTS_DIR`` if it is not set in the environment.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
coordinates : array, shape (n_vertices, 3)
|
||||
The MNI coordinates (in mm) of the vertices.
|
||||
"""
|
||||
singleton = False
|
||||
if not isinstance(vertices, list) and not isinstance(vertices, np.ndarray):
|
||||
singleton = True
|
||||
vertices = [vertices]
|
||||
|
||||
if not isinstance(hemis, list) and not isinstance(hemis, np.ndarray):
|
||||
hemis = [hemis] * len(vertices)
|
||||
|
||||
if not len(hemis) == len(vertices):
|
||||
raise ValueError("hemi and vertices must match in length")
|
||||
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
|
||||
surfs = [subjects_dir / subject / "surf" / f"{h}.white" for h in ["lh", "rh"]]
|
||||
|
||||
# read surface locations in MRI space
|
||||
rr = [read_surface(s)[0] for s in surfs]
|
||||
|
||||
# take point locations in MRI space and convert to MNI coordinates
|
||||
xfm = read_talxfm(subject, subjects_dir)
|
||||
xfm["trans"][:3, 3] *= 1000.0 # m->mm
|
||||
data = np.array([rr[h][v, :] for h, v in zip(hemis, vertices)])
|
||||
if singleton:
|
||||
data = data[0]
|
||||
return apply_trans(xfm["trans"], data)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Volume to MNI conversion
|
||||
|
||||
|
||||
@verbose
|
||||
def head_to_mni(pos, subject, mri_head_t, subjects_dir=None, verbose=None):
|
||||
"""Convert pos from head coordinate system to MNI ones.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
pos : array, shape (n_pos, 3)
|
||||
The coordinates (in m) in head coordinate system.
|
||||
%(subject)s
|
||||
mri_head_t : instance of Transform
|
||||
MRI<->Head coordinate transformation.
|
||||
%(subjects_dir)s
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
coordinates : array, shape (n_pos, 3)
|
||||
The MNI coordinates (in mm) of pos.
|
||||
|
||||
Notes
|
||||
-----
|
||||
This function requires either nibabel.
|
||||
"""
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
|
||||
# before we go from head to MRI (surface RAS)
|
||||
head_mni_t = combine_transforms(
|
||||
_ensure_trans(mri_head_t, "head", "mri"),
|
||||
read_talxfm(subject, subjects_dir),
|
||||
"head",
|
||||
"mni_tal",
|
||||
)
|
||||
return apply_trans(head_mni_t, pos) * 1000.0
|
||||
|
||||
|
||||
@verbose
|
||||
def get_mni_fiducials(subject, subjects_dir=None, verbose=None):
|
||||
"""Estimate fiducials for a subject.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(subject)s
|
||||
%(subjects_dir)s
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
fids_mri : list
|
||||
List of estimated fiducials (each point in a dict), in the order
|
||||
LPA, nasion, RPA.
|
||||
|
||||
Notes
|
||||
-----
|
||||
This takes the ``fsaverage-fiducials.fif`` file included with MNE—which
|
||||
contain the LPA, nasion, and RPA for the ``fsaverage`` subject—and
|
||||
transforms them to the given FreeSurfer subject's MRI space.
|
||||
The MRI of ``fsaverage`` is already in MNI Talairach space, so applying
|
||||
the inverse of the given subject's MNI Talairach affine transformation
|
||||
(``$SUBJECTS_DIR/$SUBJECT/mri/transforms/talairach.xfm``) is used
|
||||
to estimate the subject's fiducial locations.
|
||||
|
||||
For more details about the coordinate systems and transformations involved,
|
||||
see https://surfer.nmr.mgh.harvard.edu/fswiki/CoordinateSystems and
|
||||
:ref:`tut-source-alignment`.
|
||||
"""
|
||||
# Eventually we might want to allow using the MNI Talairach with-skull
|
||||
# transformation rather than the standard brain-based MNI Talaranch
|
||||
# transformation, and/or project the points onto the head surface
|
||||
# (if available).
|
||||
fname_fids_fs = (
|
||||
Path(__file__).parent / "data" / "fsaverage" / "fsaverage-fiducials.fif"
|
||||
)
|
||||
|
||||
# Read fsaverage fiducials file and subject Talairach.
|
||||
fids, coord_frame = read_fiducials(fname_fids_fs)
|
||||
assert coord_frame == FIFF.FIFFV_COORD_MRI
|
||||
if subject == "fsaverage":
|
||||
return fids # special short-circuit for fsaverage
|
||||
mni_mri_t = invert_transform(read_talxfm(subject, subjects_dir))
|
||||
for f in fids:
|
||||
f["r"] = apply_trans(mni_mri_t, f["r"])
|
||||
return fids
|
||||
|
||||
|
||||
@verbose
|
||||
def estimate_head_mri_t(subject, subjects_dir=None, verbose=None):
|
||||
"""Estimate the head->mri transform from fsaverage fiducials.
|
||||
|
||||
A subject's fiducials can be estimated given a Freesurfer ``recon-all``
|
||||
by transforming ``fsaverage`` fiducials using the inverse Talairach
|
||||
transform, see :func:`mne.coreg.get_mni_fiducials`.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(subject)s
|
||||
%(subjects_dir)s
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
%(trans_not_none)s
|
||||
"""
|
||||
from .channels.montage import compute_native_head_t, make_dig_montage
|
||||
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
lpa, nasion, rpa = get_mni_fiducials(subject, subjects_dir)
|
||||
montage = make_dig_montage(
|
||||
lpa=lpa["r"], nasion=nasion["r"], rpa=rpa["r"], coord_frame="mri"
|
||||
)
|
||||
return invert_transform(compute_native_head_t(montage))
|
||||
|
||||
|
||||
def _get_affine_from_lta_info(lines):
|
||||
"""Get the vox2ras affine from lta file info."""
|
||||
volume_data = np.loadtxt([line.split("=")[1] for line in lines])
|
||||
# get the size of the volume (number of voxels), slice resolution.
|
||||
# the matrix of directional cosines and the ras at the center of the bore
|
||||
dims, deltas, dir_cos, center_ras = (
|
||||
volume_data[0],
|
||||
volume_data[1],
|
||||
volume_data[2:5],
|
||||
volume_data[5],
|
||||
)
|
||||
dir_cos_delta = dir_cos.T * deltas
|
||||
vol_center = (dir_cos_delta @ dims[:3]) / 2
|
||||
affine = np.eye(4)
|
||||
affine[:3, :3] = dir_cos_delta
|
||||
affine[:3, 3] = center_ras - vol_center
|
||||
return affine
|
||||
|
||||
|
||||
@verbose
|
||||
def read_lta(fname, verbose=None):
|
||||
"""Read a Freesurfer linear transform array file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
The transform filename.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
affine : ndarray
|
||||
The affine transformation described by the lta file.
|
||||
"""
|
||||
_check_fname(fname, "read", must_exist=True)
|
||||
with open(fname) as fid:
|
||||
lines = fid.readlines()
|
||||
# 0 is linear vox2vox, 1 is linear ras2ras
|
||||
trans_type = int(lines[0].split("=")[1].strip()[0])
|
||||
assert trans_type in (0, 1)
|
||||
affine = np.loadtxt(lines[5:9])
|
||||
if trans_type == 1:
|
||||
return affine
|
||||
|
||||
src_affine = _get_affine_from_lta_info(lines[12:18])
|
||||
dst_affine = _get_affine_from_lta_info(lines[21:27])
|
||||
|
||||
# don't compute if src and dst are already identical
|
||||
if np.allclose(src_affine, dst_affine):
|
||||
return affine
|
||||
|
||||
ras2ras = src_affine @ np.linalg.inv(affine) @ np.linalg.inv(dst_affine)
|
||||
affine = np.linalg.inv(np.linalg.inv(src_affine) @ ras2ras @ src_affine)
|
||||
return affine
|
||||
|
||||
|
||||
@verbose
|
||||
def read_talxfm(subject, subjects_dir=None, verbose=None):
|
||||
"""Compute MRI-to-MNI transform from FreeSurfer talairach.xfm file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(subject)s
|
||||
%(subjects_dir)s
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
mri_mni_t : instance of Transform
|
||||
The affine transformation from MRI to MNI space for the subject.
|
||||
"""
|
||||
# Adapted from freesurfer m-files. Altered to deal with Norig
|
||||
# and Torig correctly
|
||||
subjects_dir = get_subjects_dir(subjects_dir)
|
||||
# Setup the RAS to MNI transform
|
||||
ras_mni_t = read_ras_mni_t(subject, subjects_dir)
|
||||
ras_mni_t["trans"][:3, 3] /= 1000.0 # mm->m
|
||||
|
||||
# We want to get from Freesurfer surface RAS ('mri') to MNI ('mni_tal').
|
||||
# This file only gives us RAS (non-zero origin) ('ras') to MNI ('mni_tal').
|
||||
# Se we need to get the ras->mri transform from the MRI headers.
|
||||
|
||||
# To do this, we get Norig and Torig
|
||||
# (i.e. vox_ras_t and vox_mri_t, respectively)
|
||||
path = subjects_dir / subject / "mri" / "orig.mgz"
|
||||
if not path.is_file():
|
||||
path = subjects_dir / subject / "mri" / "T1.mgz"
|
||||
if not path.is_file():
|
||||
raise OSError(f"mri not found: {path}")
|
||||
_, _, mri_ras_t, _, _ = _read_mri_info(path)
|
||||
mri_mni_t = combine_transforms(mri_ras_t, ras_mni_t, "mri", "mni_tal")
|
||||
return mri_mni_t
|
||||
|
||||
|
||||
def _check_mri(mri, subject, subjects_dir) -> str:
|
||||
"""Check whether an mri exists in the Freesurfer subject directory."""
|
||||
_validate_type(mri, "path-like", mri)
|
||||
mri = Path(mri)
|
||||
if mri.is_file() and mri.name != mri:
|
||||
return str(mri)
|
||||
elif not mri.is_file():
|
||||
if subject is None:
|
||||
raise FileNotFoundError(
|
||||
f"MRI file {mri!r} not found and no subject provided."
|
||||
)
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
mri = subjects_dir / subject / "mri" / mri
|
||||
if not mri.is_file():
|
||||
raise FileNotFoundError(
|
||||
f"MRI file {mri!r} not found in the subjects directory "
|
||||
f"{subjects_dir!r} for subject {subject}."
|
||||
)
|
||||
if mri.name == mri:
|
||||
raise OSError(
|
||||
f"Ambiguous filename - found {mri!r} in current folder. "
|
||||
"If this is correct prefix name with relative or absolute path."
|
||||
)
|
||||
return str(mri)
|
||||
|
||||
|
||||
def _read_mri_info(path, units="m", return_img=False, use_nibabel=False):
|
||||
# This is equivalent but 100x slower, so only use nibabel if we need to
|
||||
# (later):
|
||||
if use_nibabel:
|
||||
nib = _import_nibabel()
|
||||
hdr = nib.load(path).header
|
||||
n_orig = hdr.get_vox2ras()
|
||||
t_orig = hdr.get_vox2ras_tkr()
|
||||
dims = hdr.get_data_shape()
|
||||
zooms = hdr.get_zooms()[:3]
|
||||
else:
|
||||
hdr = _get_mgz_header(path)
|
||||
n_orig = hdr["vox2ras"]
|
||||
t_orig = hdr["vox2ras_tkr"]
|
||||
dims = hdr["dims"]
|
||||
zooms = hdr["zooms"]
|
||||
|
||||
# extract the MRI_VOXEL to RAS (non-zero origin) transform
|
||||
vox_ras_t = Transform("mri_voxel", "ras", n_orig)
|
||||
|
||||
# extract the MRI_VOXEL to MRI transform
|
||||
vox_mri_t = Transform("mri_voxel", "mri", t_orig)
|
||||
|
||||
# construct the MRI to RAS (non-zero origin) transform
|
||||
mri_ras_t = combine_transforms(invert_transform(vox_mri_t), vox_ras_t, "mri", "ras")
|
||||
|
||||
assert units in ("m", "mm")
|
||||
if units == "m":
|
||||
conv = np.array([[1e-3, 1e-3, 1e-3, 1]]).T
|
||||
# scaling and translation terms
|
||||
vox_ras_t["trans"] *= conv
|
||||
vox_mri_t["trans"] *= conv
|
||||
# just the translation term
|
||||
mri_ras_t["trans"][:, 3:4] *= conv
|
||||
|
||||
out = (vox_ras_t, vox_mri_t, mri_ras_t, dims, zooms)
|
||||
if return_img:
|
||||
nibabel = _import_nibabel()
|
||||
out += (nibabel.load(path),)
|
||||
return out
|
||||
|
||||
|
||||
def read_freesurfer_lut(fname=None):
|
||||
"""Read a Freesurfer-formatted LUT.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like | None
|
||||
The filename. Can be None to read the standard Freesurfer LUT.
|
||||
|
||||
Returns
|
||||
-------
|
||||
atlas_ids : dict
|
||||
Mapping from label names to IDs.
|
||||
colors : dict
|
||||
Mapping from label names to colors.
|
||||
"""
|
||||
lut = _get_lut(fname)
|
||||
names, ids = lut["name"], lut["id"]
|
||||
colors = np.array([lut["R"], lut["G"], lut["B"], lut["A"]], float).T
|
||||
atlas_ids = dict(zip(names, ids))
|
||||
colors = dict(zip(names, colors))
|
||||
return atlas_ids, colors
|
||||
|
||||
|
||||
def _get_lut(fname=None):
|
||||
"""Get a FreeSurfer LUT."""
|
||||
if fname is None:
|
||||
fname = Path(__file__).parent / "data" / "FreeSurferColorLUT.txt"
|
||||
_check_fname(fname, "read", must_exist=True)
|
||||
dtype = [
|
||||
("id", "<i8"),
|
||||
("name", "U"),
|
||||
("R", "<i8"),
|
||||
("G", "<i8"),
|
||||
("B", "<i8"),
|
||||
("A", "<i8"),
|
||||
]
|
||||
lut = {d[0]: list() for d in dtype}
|
||||
with open(fname) as fid:
|
||||
for line in fid:
|
||||
line = line.strip()
|
||||
if line.startswith("#") or not line:
|
||||
continue
|
||||
line = line.split()
|
||||
if len(line) != len(dtype):
|
||||
raise RuntimeError(f"LUT is improperly formatted: {fname}")
|
||||
for d, part in zip(dtype, line):
|
||||
lut[d[0]].append(part)
|
||||
lut = {d[0]: np.array(lut[d[0]], dtype=d[1]) for d in dtype}
|
||||
assert len(lut["name"]) > 0
|
||||
lut["name"] = [str(name) for name in lut["name"]]
|
||||
return lut
|
||||
|
||||
|
||||
@verbose
|
||||
def _get_head_surface(surf, subject, subjects_dir, bem=None, verbose=None):
|
||||
"""Get a head surface from the Freesurfer subject directory.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
surf : str
|
||||
The name of the surface 'auto', 'head', 'outer_skin', 'head-dense'
|
||||
or 'seghead'.
|
||||
%(subject)s
|
||||
%(subjects_dir)s
|
||||
bem : mne.bem.ConductorModel | None
|
||||
The conductor model that stores information about the head surface.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
head_surf : dict | None
|
||||
A dictionary with keys 'rr', 'tris', 'ntri', 'use_tris', 'np'
|
||||
and 'coord_frame' that store information for mesh plotting and other
|
||||
useful information about the head surface.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded: 0.24
|
||||
"""
|
||||
from .bem import _bem_find_surface, read_bem_surfaces
|
||||
|
||||
_check_option("surf", surf, ("auto", "head", "outer_skin", "head-dense", "seghead"))
|
||||
if surf in ("auto", "head", "outer_skin"):
|
||||
if bem is not None:
|
||||
try:
|
||||
return _bem_find_surface(bem, "head")
|
||||
except RuntimeError:
|
||||
logger.info(
|
||||
"Could not find the surface for "
|
||||
"head in the provided BEM model, "
|
||||
"looking in the subject directory."
|
||||
)
|
||||
if subject is None:
|
||||
if surf == "auto":
|
||||
return
|
||||
raise ValueError(
|
||||
"To plot the head surface, the BEM/sphere"
|
||||
" model must contain a head surface "
|
||||
'or "subject" must be provided (got '
|
||||
"None)"
|
||||
)
|
||||
subject_dir = op.join(get_subjects_dir(subjects_dir, raise_error=True), subject)
|
||||
if surf in ("head-dense", "seghead"):
|
||||
try_fnames = [
|
||||
op.join(subject_dir, "bem", f"{subject}-head-dense.fif"),
|
||||
op.join(subject_dir, "surf", "lh.seghead"),
|
||||
]
|
||||
else:
|
||||
try_fnames = [
|
||||
op.join(subject_dir, "bem", "outer_skin.surf"),
|
||||
op.join(subject_dir, "bem", "flash", "outer_skin.surf"),
|
||||
op.join(subject_dir, "bem", f"{subject}-head-sparse.fif"),
|
||||
op.join(subject_dir, "bem", f"{subject}-head.fif"),
|
||||
]
|
||||
for fname in try_fnames:
|
||||
if op.exists(fname):
|
||||
logger.info(f"Using {op.basename(fname)} for head surface.")
|
||||
if op.splitext(fname)[-1] == ".fif":
|
||||
return read_bem_surfaces(fname, on_defects="warn")[0]
|
||||
else:
|
||||
return _read_mri_surface(fname)
|
||||
raise OSError(
|
||||
"No head surface found for subject "
|
||||
f"{subject} after trying:\n" + "\n".join(try_fnames)
|
||||
)
|
||||
|
||||
|
||||
@verbose
|
||||
def _get_skull_surface(surf, subject, subjects_dir, bem=None, verbose=None):
|
||||
"""Get a skull surface from the Freesurfer subject directory.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
surf : str
|
||||
The name of the surface 'outer' or 'inner'.
|
||||
%(subject)s
|
||||
%(subjects_dir)s
|
||||
bem : mne.bem.ConductorModel | None
|
||||
The conductor model that stores information about the skull surface.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
skull_surf : dict | None
|
||||
A dictionary with keys 'rr', 'tris', 'ntri', 'use_tris', 'np'
|
||||
and 'coord_frame' that store information for mesh plotting and other
|
||||
useful information about the head surface.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded: 0.24
|
||||
"""
|
||||
from .bem import _bem_find_surface
|
||||
|
||||
if bem is not None:
|
||||
try:
|
||||
return _bem_find_surface(bem, surf + "_skull")
|
||||
except RuntimeError:
|
||||
logger.info(
|
||||
"Could not find the surface for "
|
||||
"skull in the provided BEM model, "
|
||||
"looking in the subject directory."
|
||||
)
|
||||
subjects_dir = Path(get_subjects_dir(subjects_dir, raise_error=True))
|
||||
fname = _check_fname(
|
||||
subjects_dir / subject / "bem" / (surf + "_skull.surf"),
|
||||
overwrite="read",
|
||||
must_exist=True,
|
||||
name=f"{surf} skull surface",
|
||||
)
|
||||
return _read_mri_surface(fname)
|
||||
|
||||
|
||||
def _estimate_talxfm_rigid(subject, subjects_dir):
|
||||
from .coreg import _trans_from_params, fit_matched_points
|
||||
|
||||
xfm = read_talxfm(subject, subjects_dir)
|
||||
# XYZ+origin + halfway
|
||||
pts_tal = np.concatenate([np.eye(4)[:, :3], np.eye(3) * 0.5])
|
||||
pts_subj = apply_trans(invert_transform(xfm), pts_tal)
|
||||
# we fit with scaling enabled, but then discard it (we just need
|
||||
# the rigid-body components)
|
||||
params = fit_matched_points(pts_subj, pts_tal, scale=3, out="params")
|
||||
rigid = _trans_from_params((True, True, False), params[:6])
|
||||
return rigid
|
||||
463
mne/_ola.py
Normal file
463
mne/_ola.py
Normal file
@@ -0,0 +1,463 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
from scipy.signal import get_window
|
||||
|
||||
from .utils import _ensure_int, logger, verbose
|
||||
|
||||
###############################################################################
|
||||
# Class for interpolation between adjacent points
|
||||
|
||||
|
||||
class _Interp2:
|
||||
r"""Interpolate between two points.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
control_points : array, shape (n_changes,)
|
||||
The control points (indices) to use.
|
||||
values : callable | array, shape (n_changes, ...)
|
||||
Callable that takes the control point and returns a list of
|
||||
arrays that must be interpolated.
|
||||
interp : str
|
||||
Can be 'zero', 'linear', 'hann', or 'cos2' (same as hann).
|
||||
|
||||
Notes
|
||||
-----
|
||||
This will process data using overlapping windows of potentially
|
||||
different sizes to achieve a constant output value using different
|
||||
2-point interpolation schemes. For example, for linear interpolation,
|
||||
and window sizes of 6 and 17, this would look like::
|
||||
|
||||
1 _ _
|
||||
|\ / '-. .-'
|
||||
| \ / '-. .-'
|
||||
| x |-.-|
|
||||
| / \ .-' '-.
|
||||
|/ \_.-' '-.
|
||||
0 +----|----|----|----|---
|
||||
0 5 10 15 20 25
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, control_points, values, interp="hann"):
|
||||
# set up interpolation
|
||||
self.control_points = np.array(control_points, int).ravel()
|
||||
if not np.array_equal(np.unique(self.control_points), self.control_points):
|
||||
raise ValueError("Control points must be sorted and unique")
|
||||
if len(self.control_points) == 0:
|
||||
raise ValueError("Must be at least one control point")
|
||||
if not (self.control_points >= 0).all():
|
||||
raise ValueError(
|
||||
f"All control points must be positive (got {self.control_points[:3]})"
|
||||
)
|
||||
if isinstance(values, np.ndarray):
|
||||
values = [values]
|
||||
if isinstance(values, list | tuple):
|
||||
for v in values:
|
||||
if not (v is None or isinstance(v, np.ndarray)):
|
||||
raise TypeError(
|
||||
'All entries in "values" must be ndarray or None, got '
|
||||
f"{type(v)}"
|
||||
)
|
||||
if v is not None and v.shape[0] != len(self.control_points):
|
||||
raise ValueError(
|
||||
"Values, if provided, must be the same length as the number of "
|
||||
f"control points ({len(self.control_points)}), got {v.shape[0]}"
|
||||
)
|
||||
use_values = values
|
||||
|
||||
def val(pt):
|
||||
idx = np.where(control_points == pt)[0][0]
|
||||
return [v[idx] if v is not None else None for v in use_values]
|
||||
|
||||
values = val
|
||||
self.values = values
|
||||
self.n_last = None
|
||||
self._position = 0 # start at zero
|
||||
self._left_idx = 0
|
||||
self._left = self._right = self._use_interp = None
|
||||
known_types = ("cos2", "linear", "zero", "hann")
|
||||
if interp not in known_types:
|
||||
raise ValueError(f'interp must be one of {known_types}, got "{interp}"')
|
||||
self._interp = interp
|
||||
|
||||
def feed_generator(self, n_pts):
|
||||
"""Feed data and get interpolators as a generator."""
|
||||
self.n_last = 0
|
||||
n_pts = _ensure_int(n_pts, "n_pts")
|
||||
original_position = self._position
|
||||
stop = self._position + n_pts
|
||||
logger.debug(f"Feed {n_pts} ({self._position}-{stop})")
|
||||
used = np.zeros(n_pts, bool)
|
||||
if self._left is None: # first one
|
||||
logger.debug(f" Eval @ 0 ({self.control_points[0]})")
|
||||
self._left = self.values(self.control_points[0])
|
||||
if len(self.control_points) == 1:
|
||||
self._right = self._left
|
||||
n_used = 0
|
||||
|
||||
# Left zero-order hold condition
|
||||
if self._position < self.control_points[self._left_idx]:
|
||||
n_use = min(self.control_points[self._left_idx] - self._position, n_pts)
|
||||
logger.debug(f" Left ZOH {n_use}")
|
||||
this_sl = slice(None, n_use)
|
||||
assert used[this_sl].size == n_use
|
||||
assert not used[this_sl].any()
|
||||
used[this_sl] = True
|
||||
yield [this_sl, self._left, None, None]
|
||||
self._position += n_use
|
||||
n_used += n_use
|
||||
self.n_last += 1
|
||||
|
||||
# Standard interpolation condition
|
||||
stop_right_idx = np.where(self.control_points >= stop)[0]
|
||||
if len(stop_right_idx) == 0:
|
||||
stop_right_idx = [len(self.control_points) - 1]
|
||||
stop_right_idx = stop_right_idx[0]
|
||||
left_idxs = np.arange(self._left_idx, stop_right_idx)
|
||||
self.n_last += max(len(left_idxs) - 1, 0)
|
||||
for bi, left_idx in enumerate(left_idxs):
|
||||
if left_idx != self._left_idx or self._right is None:
|
||||
if self._right is not None:
|
||||
assert left_idx == self._left_idx + 1
|
||||
self._left = self._right
|
||||
self._left_idx += 1
|
||||
self._use_interp = None # need to recreate it
|
||||
eval_pt = self.control_points[self._left_idx + 1]
|
||||
logger.debug(f" Eval @ {self._left_idx + 1} ({eval_pt})")
|
||||
self._right = self.values(eval_pt)
|
||||
assert self._right is not None
|
||||
left_point = self.control_points[self._left_idx]
|
||||
right_point = self.control_points[self._left_idx + 1]
|
||||
if self._use_interp is None:
|
||||
interp_span = right_point - left_point
|
||||
if self._interp == "zero":
|
||||
self._use_interp = None
|
||||
elif self._interp == "linear":
|
||||
self._use_interp = np.linspace(
|
||||
1.0, 0.0, interp_span, endpoint=False
|
||||
)
|
||||
else: # self._interp in ('cos2', 'hann'):
|
||||
self._use_interp = np.cos(
|
||||
np.linspace(0, np.pi / 2.0, interp_span, endpoint=False)
|
||||
)
|
||||
self._use_interp *= self._use_interp
|
||||
n_use = min(stop, right_point) - self._position
|
||||
if n_use > 0:
|
||||
logger.debug(
|
||||
f" Interp {self._interp} {n_use} ({left_point}-{right_point})"
|
||||
)
|
||||
interp_start = self._position - left_point
|
||||
assert interp_start >= 0
|
||||
if self._use_interp is None:
|
||||
this_interp = None
|
||||
else:
|
||||
this_interp = self._use_interp[interp_start : interp_start + n_use]
|
||||
assert this_interp.size == n_use
|
||||
this_sl = slice(n_used, n_used + n_use)
|
||||
assert used[this_sl].size == n_use
|
||||
assert not used[this_sl].any()
|
||||
used[this_sl] = True
|
||||
yield [this_sl, self._left, self._right, this_interp]
|
||||
self._position += n_use
|
||||
n_used += n_use
|
||||
|
||||
# Right zero-order hold condition
|
||||
if self.control_points[self._left_idx] <= self._position:
|
||||
n_use = stop - self._position
|
||||
if n_use > 0:
|
||||
logger.debug(f" Right ZOH {n_use}")
|
||||
this_sl = slice(n_pts - n_use, None)
|
||||
assert not used[this_sl].any()
|
||||
used[this_sl] = True
|
||||
assert self._right is not None
|
||||
yield [this_sl, self._right, None, None]
|
||||
self._position += n_use
|
||||
n_used += n_use
|
||||
self.n_last += 1
|
||||
assert self._position == stop
|
||||
assert n_used == n_pts
|
||||
assert used.all()
|
||||
assert self._position == original_position + n_pts
|
||||
|
||||
def feed(self, n_pts):
|
||||
"""Feed data and get interpolated values."""
|
||||
# Convenience function for assembly
|
||||
out_arrays = None
|
||||
for o in self.feed_generator(n_pts):
|
||||
if out_arrays is None:
|
||||
out_arrays = [
|
||||
np.empty(v.shape + (n_pts,)) if v is not None else None
|
||||
for v in o[1]
|
||||
]
|
||||
for ai, arr in enumerate(out_arrays):
|
||||
if arr is not None:
|
||||
if o[3] is None:
|
||||
arr[..., o[0]] = o[1][ai][..., np.newaxis]
|
||||
else:
|
||||
arr[..., o[0]] = o[1][ai][..., np.newaxis] * o[3] + o[2][ai][
|
||||
..., np.newaxis
|
||||
] * (1.0 - o[3])
|
||||
assert out_arrays is not None
|
||||
return out_arrays
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Constant overlap-add processing class
|
||||
|
||||
|
||||
def _check_store(store):
|
||||
if isinstance(store, np.ndarray):
|
||||
store = [store]
|
||||
if isinstance(store, list | tuple) and all(
|
||||
isinstance(s, np.ndarray) for s in store
|
||||
):
|
||||
store = _Storer(*store)
|
||||
if not callable(store):
|
||||
raise TypeError(f"store must be callable, got type {type(store)}")
|
||||
return store
|
||||
|
||||
|
||||
class _COLA:
|
||||
r"""Constant overlap-add processing helper.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
process : callable
|
||||
A function that takes a chunk of input data with shape
|
||||
``(n_channels, n_samples)`` and processes it.
|
||||
store : callable | ndarray
|
||||
A function that takes a completed chunk of output data.
|
||||
Can also be an ``ndarray``, in which case it is treated as the
|
||||
output data in which to store the results.
|
||||
n_total : int
|
||||
The total number of samples.
|
||||
n_samples : int
|
||||
The number of samples per window.
|
||||
n_overlap : int
|
||||
The overlap between windows.
|
||||
window : str
|
||||
The window to use. Default is "hann".
|
||||
tol : float
|
||||
The tolerance for COLA checking.
|
||||
|
||||
Notes
|
||||
-----
|
||||
This will process data using overlapping windows to achieve a constant
|
||||
output value. For example, for ``n_total=27``, ``n_samples=10``,
|
||||
``n_overlap=5`` and ``window='triang'``::
|
||||
|
||||
1 _____ _______
|
||||
| \ /\ /\ /
|
||||
| \ / \ / \ /
|
||||
| x x x
|
||||
| / \ / \ / \
|
||||
| / \/ \/ \
|
||||
0 +----|----|----|----|----|-
|
||||
0 5 10 15 20 25
|
||||
|
||||
This produces four windows: the first three are the requested length
|
||||
(10 samples) and the last one is longer (12 samples). The first and last
|
||||
window are asymmetric.
|
||||
"""
|
||||
|
||||
@verbose
|
||||
def __init__(
|
||||
self,
|
||||
process,
|
||||
store,
|
||||
n_total,
|
||||
n_samples,
|
||||
n_overlap,
|
||||
sfreq,
|
||||
window="hann",
|
||||
tol=1e-10,
|
||||
*,
|
||||
verbose=None,
|
||||
):
|
||||
n_samples = _ensure_int(n_samples, "n_samples")
|
||||
n_overlap = _ensure_int(n_overlap, "n_overlap")
|
||||
n_total = _ensure_int(n_total, "n_total")
|
||||
if n_samples <= 0:
|
||||
raise ValueError(f"n_samples must be > 0, got {n_samples}")
|
||||
if n_overlap < 0:
|
||||
raise ValueError(f"n_overlap must be >= 0, got {n_overlap}")
|
||||
if n_total < 0:
|
||||
raise ValueError(f"n_total must be >= 0, got {n_total}")
|
||||
self._n_samples = int(n_samples)
|
||||
self._n_overlap = int(n_overlap)
|
||||
del n_samples, n_overlap
|
||||
if n_total < self._n_samples:
|
||||
raise ValueError(
|
||||
f"Number of samples per window ({self._n_samples}) must be at "
|
||||
f"most the total number of samples ({n_total})"
|
||||
)
|
||||
if not callable(process):
|
||||
raise TypeError(f"process must be callable, got type {type(process)}")
|
||||
self._process = process
|
||||
self._step = self._n_samples - self._n_overlap
|
||||
self._store = _check_store(store)
|
||||
self._idx = 0
|
||||
self._in_buffers = self._out_buffers = None
|
||||
|
||||
# Create our window boundaries
|
||||
window_name = window if isinstance(window, str) else "custom"
|
||||
self._window = get_window(
|
||||
window, self._n_samples, fftbins=(self._n_samples - 1) % 2
|
||||
)
|
||||
self._window /= _check_cola(
|
||||
self._window, self._n_samples, self._step, window_name, tol=tol
|
||||
)
|
||||
self.starts = np.arange(0, n_total - self._n_samples + 1, self._step)
|
||||
self.stops = self.starts + self._n_samples
|
||||
delta = n_total - self.stops[-1]
|
||||
self.stops[-1] = n_total
|
||||
sfreq = float(sfreq)
|
||||
pl = "s" if len(self.starts) != 1 else ""
|
||||
logger.info(
|
||||
f" Processing {len(self.starts):4d} data chunk{pl} of (at least) "
|
||||
f"{self._n_samples / sfreq:0.1f} s with "
|
||||
f"{self._n_overlap / sfreq:0.1f} s overlap and {window_name} windowing"
|
||||
)
|
||||
del window, window_name
|
||||
if delta > 0:
|
||||
logger.info(
|
||||
f" The final {delta / sfreq} s will be lumped into the final window"
|
||||
)
|
||||
|
||||
@property
|
||||
def _in_offset(self):
|
||||
"""Compute from current processing window start and buffer len."""
|
||||
return self.starts[self._idx] + self._in_buffers[0].shape[-1]
|
||||
|
||||
@verbose
|
||||
def feed(self, *datas, verbose=None, **kwargs):
|
||||
"""Pass in a chunk of data."""
|
||||
# Append to our input buffer
|
||||
if self._in_buffers is None:
|
||||
self._in_buffers = [None] * len(datas)
|
||||
if len(datas) != len(self._in_buffers):
|
||||
raise ValueError(
|
||||
f"Got {len(datas)} array(s), needed {len(self._in_buffers)}"
|
||||
)
|
||||
for di, data in enumerate(datas):
|
||||
if not isinstance(data, np.ndarray) or data.ndim < 1:
|
||||
raise TypeError(
|
||||
f"data entry {di} must be an 2D ndarray, got {type(data)}"
|
||||
)
|
||||
if self._in_buffers[di] is None:
|
||||
# In practice, users can give large chunks, so we use
|
||||
# dynamic allocation of the in buffer. We could save some
|
||||
# memory allocation by only ever processing max_len at once,
|
||||
# but this would increase code complexity.
|
||||
self._in_buffers[di] = np.empty(data.shape[:-1] + (0,), data.dtype)
|
||||
if (
|
||||
data.shape[:-1] != self._in_buffers[di].shape[:-1]
|
||||
or self._in_buffers[di].dtype != data.dtype
|
||||
):
|
||||
raise TypeError(
|
||||
f"data must dtype {self._in_buffers[di].dtype} and "
|
||||
f"shape[:-1]=={self._in_buffers[di].shape[:-1]}, got dtype "
|
||||
f"{data.dtype} shape[:-1]={data.shape[:-1]}"
|
||||
)
|
||||
logger.debug(
|
||||
f" + Appending {self._in_offset:d}->"
|
||||
f"{self._in_offset + data.shape[-1]:d}"
|
||||
)
|
||||
self._in_buffers[di] = np.concatenate([self._in_buffers[di], data], -1)
|
||||
if self._in_offset > self.stops[-1]:
|
||||
raise ValueError(
|
||||
f"data (shape {data.shape}) exceeded expected total buffer size ("
|
||||
f"{self._in_offset} > {self.stops[-1]})"
|
||||
)
|
||||
# Check to see if we can process the next chunk and dump outputs
|
||||
while self._idx < len(self.starts) and self._in_offset >= self.stops[self._idx]:
|
||||
start, stop = self.starts[self._idx], self.stops[self._idx]
|
||||
this_len = stop - start
|
||||
this_window = self._window.copy()
|
||||
if self._idx == len(self.starts) - 1:
|
||||
this_window = np.pad(
|
||||
self._window, (0, this_len - len(this_window)), "constant"
|
||||
)
|
||||
for offset in range(self._step, len(this_window), self._step):
|
||||
n_use = len(this_window) - offset
|
||||
this_window[offset:] += self._window[:n_use]
|
||||
if self._idx == 0:
|
||||
for offset in range(self._n_samples - self._step, 0, -self._step):
|
||||
this_window[:offset] += self._window[-offset:]
|
||||
logger.debug(f" * Processing {start}->{stop}")
|
||||
this_proc = [in_[..., :this_len].copy() for in_ in self._in_buffers]
|
||||
if not all(
|
||||
proc.shape[-1] == this_len == this_window.size for proc in this_proc
|
||||
):
|
||||
raise RuntimeError("internal indexing error")
|
||||
outs = self._process(*this_proc, **kwargs)
|
||||
if self._out_buffers is None:
|
||||
max_len = np.max(self.stops - self.starts)
|
||||
self._out_buffers = [
|
||||
np.zeros(o.shape[:-1] + (max_len,), o.dtype) for o in outs
|
||||
]
|
||||
for oi, out in enumerate(outs):
|
||||
out *= this_window
|
||||
self._out_buffers[oi][..., : stop - start] += out
|
||||
self._idx += 1
|
||||
if self._idx < len(self.starts):
|
||||
next_start = self.starts[self._idx]
|
||||
else:
|
||||
next_start = self.stops[-1]
|
||||
delta = next_start - self.starts[self._idx - 1]
|
||||
for di in range(len(self._in_buffers)):
|
||||
self._in_buffers[di] = self._in_buffers[di][..., delta:]
|
||||
logger.debug(f" - Shifting input/output buffers by {delta:d} samples")
|
||||
self._store(*[o[..., :delta] for o in self._out_buffers])
|
||||
for ob in self._out_buffers:
|
||||
ob[..., :-delta] = ob[..., delta:]
|
||||
ob[..., -delta:] = 0.0
|
||||
|
||||
|
||||
def _check_cola(win, nperseg, step, window_name, tol=1e-10):
|
||||
"""Check whether the Constant OverLap Add (COLA) constraint is met."""
|
||||
# adapted from SciPy
|
||||
binsums = np.sum(
|
||||
[win[ii * step : (ii + 1) * step] for ii in range(nperseg // step)], axis=0
|
||||
)
|
||||
if nperseg % step != 0:
|
||||
binsums[: nperseg % step] += win[-(nperseg % step) :]
|
||||
const = np.median(binsums)
|
||||
deviation = np.max(np.abs(binsums - const))
|
||||
if deviation > tol:
|
||||
raise ValueError(
|
||||
f"segment length {nperseg:d} with step {step:d} for {window_name} window "
|
||||
"type does not provide a constant output "
|
||||
f"({100 * deviation / const:g}% deviation)"
|
||||
)
|
||||
return const
|
||||
|
||||
|
||||
class _Storer:
|
||||
"""Store data in chunks."""
|
||||
|
||||
def __init__(self, *outs, picks=None):
|
||||
for oi, out in enumerate(outs):
|
||||
if not isinstance(out, np.ndarray) or out.ndim < 1:
|
||||
raise TypeError(f"outs[oi] must be >= 1D ndarray, got {out}")
|
||||
self.outs = outs
|
||||
self.idx = 0
|
||||
self.picks = picks
|
||||
|
||||
def __call__(self, *outs):
|
||||
if len(outs) != len(self.outs) or not all(
|
||||
out.shape[-1] == outs[0].shape[-1] for out in outs
|
||||
):
|
||||
raise ValueError("Bad outs")
|
||||
idx = (Ellipsis,)
|
||||
if self.picks is not None:
|
||||
idx += (self.picks,)
|
||||
stop = self.idx + outs[0].shape[-1]
|
||||
idx += (slice(self.idx, stop),)
|
||||
for o1, o2 in zip(self.outs, outs):
|
||||
o1[idx] = o2
|
||||
self.idx = stop
|
||||
1736
mne/annotations.py
Normal file
1736
mne/annotations.py
Normal file
File diff suppressed because it is too large
Load Diff
224
mne/baseline.py
Normal file
224
mne/baseline.py
Normal file
@@ -0,0 +1,224 @@
|
||||
"""Utility functions to baseline-correct data."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .utils import _check_option, _validate_type, logger, verbose
|
||||
|
||||
|
||||
def _log_rescale(baseline, mode="mean"):
|
||||
"""Log the rescaling method."""
|
||||
if baseline is not None:
|
||||
_check_option(
|
||||
"mode",
|
||||
mode,
|
||||
["logratio", "ratio", "zscore", "mean", "percent", "zlogratio"],
|
||||
)
|
||||
msg = f"Applying baseline correction (mode: {mode})"
|
||||
else:
|
||||
msg = "No baseline correction applied"
|
||||
return msg
|
||||
|
||||
|
||||
@verbose
|
||||
def rescale(data, times, baseline, mode="mean", copy=True, picks=None, verbose=None):
|
||||
"""Rescale (baseline correct) data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : array
|
||||
It can be of any shape. The only constraint is that the last
|
||||
dimension should be time.
|
||||
times : 1D array
|
||||
Time instants is seconds.
|
||||
%(baseline_rescale)s
|
||||
mode : 'mean' | 'ratio' | 'logratio' | 'percent' | 'zscore' | 'zlogratio'
|
||||
Perform baseline correction by
|
||||
|
||||
- subtracting the mean of baseline values ('mean')
|
||||
- dividing by the mean of baseline values ('ratio')
|
||||
- dividing by the mean of baseline values and taking the log
|
||||
('logratio')
|
||||
- subtracting the mean of baseline values followed by dividing by
|
||||
the mean of baseline values ('percent')
|
||||
- subtracting the mean of baseline values and dividing by the
|
||||
standard deviation of baseline values ('zscore')
|
||||
- dividing by the mean of baseline values, taking the log, and
|
||||
dividing by the standard deviation of log baseline values
|
||||
('zlogratio')
|
||||
|
||||
copy : bool
|
||||
Whether to return a new instance or modify in place.
|
||||
picks : list of int | None
|
||||
Data to process along the axis=-2 (None, default, processes all).
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
data_scaled: array
|
||||
Array of same shape as data after rescaling.
|
||||
"""
|
||||
if copy:
|
||||
data = data.copy()
|
||||
if verbose is not False:
|
||||
msg = _log_rescale(baseline, mode)
|
||||
logger.info(msg)
|
||||
if baseline is None or data.shape[-1] == 0:
|
||||
return data
|
||||
|
||||
bmin, bmax = baseline
|
||||
if bmin is None:
|
||||
imin = 0
|
||||
else:
|
||||
imin = np.where(times >= bmin)[0]
|
||||
if len(imin) == 0:
|
||||
raise ValueError(
|
||||
f"bmin is too large ({bmin}), it exceeds the largest time value"
|
||||
)
|
||||
imin = int(imin[0])
|
||||
if bmax is None:
|
||||
imax = len(times)
|
||||
else:
|
||||
imax = np.where(times <= bmax)[0]
|
||||
if len(imax) == 0:
|
||||
raise ValueError(
|
||||
f"bmax is too small ({bmax}), it is smaller than the smallest time "
|
||||
"value"
|
||||
)
|
||||
imax = int(imax[-1]) + 1
|
||||
if imin >= imax:
|
||||
raise ValueError(
|
||||
f"Bad rescaling slice ({imin}:{imax}) from time values {bmin}, {bmax}"
|
||||
)
|
||||
|
||||
# technically this is inefficient when `picks` is given, but assuming
|
||||
# that we generally pick most channels for rescaling, it's not so bad
|
||||
mean = np.mean(data[..., imin:imax], axis=-1, keepdims=True)
|
||||
|
||||
if mode == "mean":
|
||||
|
||||
def fun(d, m):
|
||||
d -= m
|
||||
|
||||
elif mode == "ratio":
|
||||
|
||||
def fun(d, m):
|
||||
d /= m
|
||||
|
||||
elif mode == "logratio":
|
||||
|
||||
def fun(d, m):
|
||||
d /= m
|
||||
np.log10(d, out=d)
|
||||
|
||||
elif mode == "percent":
|
||||
|
||||
def fun(d, m):
|
||||
d -= m
|
||||
d /= m
|
||||
|
||||
elif mode == "zscore":
|
||||
|
||||
def fun(d, m):
|
||||
d -= m
|
||||
d /= np.std(d[..., imin:imax], axis=-1, keepdims=True)
|
||||
|
||||
elif mode == "zlogratio":
|
||||
|
||||
def fun(d, m):
|
||||
d /= m
|
||||
np.log10(d, out=d)
|
||||
d /= np.std(d[..., imin:imax], axis=-1, keepdims=True)
|
||||
|
||||
if picks is None:
|
||||
fun(data, mean)
|
||||
else:
|
||||
for pi in picks:
|
||||
fun(data[..., pi, :], mean[..., pi, :])
|
||||
return data
|
||||
|
||||
|
||||
def _check_baseline(baseline, times, sfreq, on_baseline_outside_data="raise"):
|
||||
"""Check if the baseline is valid and adjust it if requested.
|
||||
|
||||
``None`` values inside ``baseline`` will be replaced with ``times[0]`` and
|
||||
``times[-1]``.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
baseline : array-like, shape (2,) | None
|
||||
Beginning and end of the baseline period, in seconds. If ``None``,
|
||||
assume no baseline and return immediately.
|
||||
times : array
|
||||
The time points.
|
||||
sfreq : float
|
||||
The sampling rate.
|
||||
on_baseline_outside_data : 'raise' | 'info' | 'adjust'
|
||||
What to do if the baseline period exceeds the data.
|
||||
If ``'raise'``, raise an exception (default).
|
||||
If ``'info'``, log an info message.
|
||||
If ``'adjust'``, adjust the baseline such that it is within the data range.
|
||||
|
||||
Returns
|
||||
-------
|
||||
(baseline_tmin, baseline_tmax) | None
|
||||
The baseline with ``None`` values replaced with times, and with adjusted times
|
||||
if ``on_baseline_outside_data='adjust'``; or ``None``, if ``baseline`` is
|
||||
``None``.
|
||||
"""
|
||||
if baseline is None:
|
||||
return None
|
||||
|
||||
_validate_type(baseline, "array-like")
|
||||
baseline = tuple(baseline)
|
||||
|
||||
if len(baseline) != 2:
|
||||
raise ValueError(
|
||||
f"baseline must have exactly two elements (got {len(baseline)})."
|
||||
)
|
||||
|
||||
tmin, tmax = times[0], times[-1]
|
||||
tstep = 1.0 / float(sfreq)
|
||||
|
||||
# check default value of baseline and `tmin=0`
|
||||
if baseline == (None, 0) and tmin == 0:
|
||||
raise ValueError(
|
||||
"Baseline interval is only one sample. Use `baseline=(0, 0)` if this is "
|
||||
"desired."
|
||||
)
|
||||
|
||||
baseline_tmin, baseline_tmax = baseline
|
||||
|
||||
if baseline_tmin is None:
|
||||
baseline_tmin = tmin
|
||||
baseline_tmin = float(baseline_tmin)
|
||||
|
||||
if baseline_tmax is None:
|
||||
baseline_tmax = tmax
|
||||
baseline_tmax = float(baseline_tmax)
|
||||
|
||||
if baseline_tmin > baseline_tmax:
|
||||
raise ValueError(
|
||||
f"Baseline min ({baseline_tmin}) must be less than baseline max ("
|
||||
f"{baseline_tmax})"
|
||||
)
|
||||
|
||||
if (baseline_tmin < tmin - tstep) or (baseline_tmax > tmax + tstep):
|
||||
msg = (
|
||||
f"Baseline interval [{baseline_tmin}, {baseline_tmax}] s is outside of "
|
||||
f"epochs data [{tmin}, {tmax}] s. Epochs were probably cropped."
|
||||
)
|
||||
if on_baseline_outside_data == "raise":
|
||||
raise ValueError(msg)
|
||||
elif on_baseline_outside_data == "info":
|
||||
logger.info(msg)
|
||||
elif on_baseline_outside_data == "adjust":
|
||||
if baseline_tmin < tmin - tstep:
|
||||
baseline_tmin = tmin
|
||||
if baseline_tmax > tmax + tstep:
|
||||
baseline_tmax = tmax
|
||||
|
||||
return baseline_tmin, baseline_tmax
|
||||
8
mne/beamformer/__init__.py
Normal file
8
mne/beamformer/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
"""Beamformers for source localization."""
|
||||
import lazy_loader as lazy
|
||||
|
||||
(__getattr__, __dir__, __all__) = lazy.attach_stub(__name__, __file__)
|
||||
34
mne/beamformer/__init__.pyi
Normal file
34
mne/beamformer/__init__.pyi
Normal file
@@ -0,0 +1,34 @@
|
||||
__all__ = [
|
||||
"Beamformer",
|
||||
"apply_dics",
|
||||
"apply_dics_csd",
|
||||
"apply_dics_epochs",
|
||||
"apply_dics_tfr_epochs",
|
||||
"apply_lcmv",
|
||||
"apply_lcmv_cov",
|
||||
"apply_lcmv_epochs",
|
||||
"apply_lcmv_raw",
|
||||
"make_dics",
|
||||
"make_lcmv",
|
||||
"make_lcmv_resolution_matrix",
|
||||
"rap_music",
|
||||
"read_beamformer",
|
||||
"trap_music",
|
||||
]
|
||||
from ._compute_beamformer import Beamformer, read_beamformer
|
||||
from ._dics import (
|
||||
apply_dics,
|
||||
apply_dics_csd,
|
||||
apply_dics_epochs,
|
||||
apply_dics_tfr_epochs,
|
||||
make_dics,
|
||||
)
|
||||
from ._lcmv import (
|
||||
apply_lcmv,
|
||||
apply_lcmv_cov,
|
||||
apply_lcmv_epochs,
|
||||
apply_lcmv_raw,
|
||||
make_lcmv,
|
||||
)
|
||||
from ._rap_music import rap_music, trap_music
|
||||
from .resolution_matrix import make_lcmv_resolution_matrix
|
||||
603
mne/beamformer/_compute_beamformer.py
Normal file
603
mne/beamformer/_compute_beamformer.py
Normal file
@@ -0,0 +1,603 @@
|
||||
"""Functions shared between different beamformer types."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .._fiff.proj import Projection, make_projector
|
||||
from ..cov import Covariance, make_ad_hoc_cov
|
||||
from ..forward.forward import _restrict_forward_to_src_sel, is_fixed_orient
|
||||
from ..minimum_norm.inverse import _get_vertno, _prepare_forward
|
||||
from ..source_space._source_space import label_src_vertno_sel
|
||||
from ..time_frequency.csd import CrossSpectralDensity
|
||||
from ..utils import (
|
||||
_check_option,
|
||||
_check_src_normal,
|
||||
_import_h5io_funcs,
|
||||
_pl,
|
||||
_reg_pinv,
|
||||
_sym_mat_pow,
|
||||
check_fname,
|
||||
logger,
|
||||
verbose,
|
||||
warn,
|
||||
)
|
||||
|
||||
|
||||
def _check_proj_match(proj, filters):
|
||||
"""Check whether SSP projections in data and spatial filter match."""
|
||||
proj_data, _, _ = make_projector(proj, filters["ch_names"])
|
||||
if not np.allclose(
|
||||
proj_data, filters["proj"], atol=np.finfo(float).eps, rtol=1e-13
|
||||
):
|
||||
raise ValueError(
|
||||
"The SSP projections present in the data "
|
||||
"do not match the projections used when "
|
||||
"calculating the spatial filter."
|
||||
)
|
||||
|
||||
|
||||
def _check_src_type(filters):
|
||||
"""Check whether src_type is in filters and set custom warning."""
|
||||
if "src_type" not in filters:
|
||||
filters["src_type"] = None
|
||||
warn_text = (
|
||||
"The spatial filter does not contain src_type and a robust "
|
||||
"guess of src_type is not possible without src. Consider "
|
||||
"recomputing the filter."
|
||||
)
|
||||
return filters, warn_text
|
||||
|
||||
|
||||
def _prepare_beamformer_input(
|
||||
info,
|
||||
forward,
|
||||
label=None,
|
||||
pick_ori=None,
|
||||
noise_cov=None,
|
||||
rank=None,
|
||||
pca=False,
|
||||
loose=None,
|
||||
combine_xyz="fro",
|
||||
exp=None,
|
||||
limit=None,
|
||||
allow_fixed_depth=True,
|
||||
limit_depth_chs=False,
|
||||
):
|
||||
"""Input preparation common for LCMV, DICS, and RAP-MUSIC."""
|
||||
_check_option("pick_ori", pick_ori, ("normal", "max-power", "vector", None))
|
||||
|
||||
# Restrict forward solution to selected vertices
|
||||
if label is not None:
|
||||
_, src_sel = label_src_vertno_sel(label, forward["src"])
|
||||
forward = _restrict_forward_to_src_sel(forward, src_sel)
|
||||
|
||||
if loose is None:
|
||||
loose = 0.0 if is_fixed_orient(forward) else 1.0
|
||||
# TODO: Deduplicate with _check_one_ch_type, should not be necessary
|
||||
# (DICS hits this code path, LCMV does not)
|
||||
if noise_cov is None:
|
||||
noise_cov = make_ad_hoc_cov(info, std=1.0)
|
||||
(
|
||||
forward,
|
||||
info_picked,
|
||||
gain,
|
||||
_,
|
||||
orient_prior,
|
||||
_,
|
||||
trace_GRGT,
|
||||
noise_cov,
|
||||
whitener,
|
||||
) = _prepare_forward(
|
||||
forward,
|
||||
info,
|
||||
noise_cov,
|
||||
"auto",
|
||||
loose,
|
||||
rank=rank,
|
||||
pca=pca,
|
||||
use_cps=True,
|
||||
exp=exp,
|
||||
limit_depth_chs=limit_depth_chs,
|
||||
combine_xyz=combine_xyz,
|
||||
limit=limit,
|
||||
allow_fixed_depth=allow_fixed_depth,
|
||||
)
|
||||
is_free_ori = not is_fixed_orient(forward) # could have been changed
|
||||
nn = forward["source_nn"]
|
||||
if is_free_ori: # take Z coordinate
|
||||
nn = nn[2::3]
|
||||
nn = nn.copy()
|
||||
vertno = _get_vertno(forward["src"])
|
||||
if forward["surf_ori"]:
|
||||
nn[...] = [0, 0, 1] # align to local +Z coordinate
|
||||
if pick_ori is not None and not is_free_ori:
|
||||
raise ValueError(
|
||||
f"Normal or max-power orientation (got {pick_ori!r}) can only be picked "
|
||||
"when a forward operator with free orientation is used."
|
||||
)
|
||||
if pick_ori == "normal" and not forward["surf_ori"]:
|
||||
raise ValueError(
|
||||
"Normal orientation can only be picked when a forward operator oriented in "
|
||||
"surface coordinates is used."
|
||||
)
|
||||
_check_src_normal(pick_ori, forward["src"])
|
||||
del forward, info
|
||||
|
||||
# Undo the scaling that MNE prefers
|
||||
scale = np.sqrt((noise_cov["eig"] > 0).sum() / trace_GRGT)
|
||||
gain /= scale
|
||||
if orient_prior is not None:
|
||||
orient_std = np.sqrt(orient_prior)
|
||||
else:
|
||||
orient_std = np.ones(gain.shape[1])
|
||||
|
||||
# Get the projector
|
||||
proj, _, _ = make_projector(info_picked["projs"], info_picked["ch_names"])
|
||||
return (is_free_ori, info_picked, proj, vertno, gain, whitener, nn, orient_std)
|
||||
|
||||
|
||||
def _reduce_leadfield_rank(G):
|
||||
"""Reduce the rank of the leadfield."""
|
||||
# decompose lead field
|
||||
u, s, v = np.linalg.svd(G, full_matrices=False)
|
||||
|
||||
# backproject, omitting one direction (equivalent to setting the smallest
|
||||
# singular value to zero)
|
||||
G = np.matmul(u[:, :, :-1], s[:, :-1, np.newaxis] * v[:, :-1, :])
|
||||
|
||||
return G
|
||||
|
||||
|
||||
def _sym_inv_sm(x, reduce_rank, inversion, sk):
|
||||
"""Symmetric inversion with single- or matrix-style inversion."""
|
||||
if x.shape[1:] == (1, 1):
|
||||
with np.errstate(divide="ignore", invalid="ignore"):
|
||||
x_inv = 1.0 / x
|
||||
x_inv[~np.isfinite(x_inv)] = 1.0
|
||||
else:
|
||||
assert x.shape[1:] == (3, 3)
|
||||
if inversion == "matrix":
|
||||
x_inv = _sym_mat_pow(x, -1, reduce_rank=reduce_rank)
|
||||
# Reapply source covariance after inversion
|
||||
x_inv *= sk[:, :, np.newaxis]
|
||||
x_inv *= sk[:, np.newaxis, :]
|
||||
else:
|
||||
# Invert for each dipole separately using plain division
|
||||
diags = np.diagonal(x, axis1=1, axis2=2)
|
||||
assert not reduce_rank # guaranteed earlier
|
||||
with np.errstate(divide="ignore"):
|
||||
diags = 1.0 / diags
|
||||
# set the diagonal of each 3x3
|
||||
x_inv = np.zeros_like(x)
|
||||
for k in range(x.shape[0]):
|
||||
this = diags[k]
|
||||
# Reapply source covariance after inversion
|
||||
this *= sk[k] * sk[k]
|
||||
x_inv[k].flat[::4] = this
|
||||
return x_inv
|
||||
|
||||
|
||||
def _compute_beamformer(
|
||||
G,
|
||||
Cm,
|
||||
reg,
|
||||
n_orient,
|
||||
weight_norm,
|
||||
pick_ori,
|
||||
reduce_rank,
|
||||
rank,
|
||||
inversion,
|
||||
nn,
|
||||
orient_std,
|
||||
whitener,
|
||||
):
|
||||
"""Compute a spatial beamformer filter (LCMV or DICS).
|
||||
|
||||
For more detailed information on the parameters, see the docstrings of
|
||||
`make_lcmv` and `make_dics`.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
G : ndarray, shape (n_dipoles, n_channels)
|
||||
The leadfield.
|
||||
Cm : ndarray, shape (n_channels, n_channels)
|
||||
The data covariance matrix.
|
||||
reg : float
|
||||
Regularization parameter.
|
||||
n_orient : int
|
||||
Number of dipole orientations defined at each source point
|
||||
weight_norm : None | 'unit-noise-gain' | 'nai'
|
||||
The weight normalization scheme to use.
|
||||
pick_ori : None | 'normal' | 'max-power'
|
||||
The source orientation to compute the beamformer in.
|
||||
reduce_rank : bool
|
||||
Whether to reduce the rank by one during computation of the filter.
|
||||
rank : dict | None | 'full' | 'info'
|
||||
See compute_rank.
|
||||
inversion : 'matrix' | 'single'
|
||||
The inversion scheme to compute the weights.
|
||||
nn : ndarray, shape (n_dipoles, 3)
|
||||
The source normals.
|
||||
orient_std : ndarray, shape (n_dipoles,)
|
||||
The std of the orientation prior used in weighting the lead fields.
|
||||
whitener : ndarray, shape (n_channels, n_channels)
|
||||
The whitener.
|
||||
|
||||
Returns
|
||||
-------
|
||||
W : ndarray, shape (n_dipoles, n_channels)
|
||||
The beamformer filter weights.
|
||||
"""
|
||||
_check_option(
|
||||
"weight_norm",
|
||||
weight_norm,
|
||||
["unit-noise-gain-invariant", "unit-noise-gain", "nai", None],
|
||||
)
|
||||
|
||||
# Whiten the data covariance
|
||||
Cm = whitener @ Cm @ whitener.T.conj()
|
||||
# Restore to properly Hermitian as large whitening coefs can have bad
|
||||
# rounding error
|
||||
Cm[:] = (Cm + Cm.T.conj()) / 2.0
|
||||
|
||||
assert Cm.shape == (G.shape[0],) * 2
|
||||
s, _ = np.linalg.eigh(Cm)
|
||||
if not (s >= -s.max() * 1e-7).all():
|
||||
# This shouldn't ever happen, but just in case
|
||||
warn(
|
||||
"data covariance does not appear to be positive semidefinite, "
|
||||
"results will likely be incorrect"
|
||||
)
|
||||
# Tikhonov regularization using reg parameter to control for
|
||||
# trade-off between spatial resolution and noise sensitivity
|
||||
# eq. 25 in Gross and Ioannides, 1999 Phys. Med. Biol. 44 2081
|
||||
Cm_inv, loading_factor, rank = _reg_pinv(Cm, reg, rank)
|
||||
|
||||
assert orient_std.shape == (G.shape[1],)
|
||||
n_sources = G.shape[1] // n_orient
|
||||
assert nn.shape == (n_sources, 3)
|
||||
|
||||
logger.info(f"Computing beamformer filters for {n_sources} source{_pl(n_sources)}")
|
||||
n_channels = G.shape[0]
|
||||
assert n_orient in (3, 1)
|
||||
Gk = np.reshape(G.T, (n_sources, n_orient, n_channels)).transpose(0, 2, 1)
|
||||
assert Gk.shape == (n_sources, n_channels, n_orient)
|
||||
sk = np.reshape(orient_std, (n_sources, n_orient))
|
||||
del G, orient_std
|
||||
|
||||
_check_option("reduce_rank", reduce_rank, (True, False))
|
||||
|
||||
# inversion of the denominator
|
||||
_check_option("inversion", inversion, ("matrix", "single"))
|
||||
if (
|
||||
inversion == "single"
|
||||
and n_orient > 1
|
||||
and pick_ori == "vector"
|
||||
and weight_norm == "unit-noise-gain-invariant"
|
||||
):
|
||||
raise ValueError(
|
||||
'Cannot use pick_ori="vector" with inversion="single" and '
|
||||
'weight_norm="unit-noise-gain-invariant"'
|
||||
)
|
||||
if reduce_rank and inversion == "single":
|
||||
raise ValueError(
|
||||
'reduce_rank cannot be used with inversion="single"; '
|
||||
'consider using inversion="matrix" if you have a '
|
||||
"rank-deficient forward model (i.e., from a sphere "
|
||||
"model with MEG channels), otherwise consider using "
|
||||
"reduce_rank=False"
|
||||
)
|
||||
if n_orient > 1:
|
||||
_, Gk_s, _ = np.linalg.svd(Gk, full_matrices=False)
|
||||
assert Gk_s.shape == (n_sources, n_orient)
|
||||
if not reduce_rank and (Gk_s[:, 0] > 1e6 * Gk_s[:, 2]).any():
|
||||
raise ValueError(
|
||||
"Singular matrix detected when estimating spatial filters. "
|
||||
"Consider reducing the rank of the forward operator by using "
|
||||
"reduce_rank=True."
|
||||
)
|
||||
del Gk_s
|
||||
|
||||
#
|
||||
# 1. Reduce rank of the lead field
|
||||
#
|
||||
if reduce_rank:
|
||||
Gk = _reduce_leadfield_rank(Gk)
|
||||
|
||||
def _compute_bf_terms(Gk, Cm_inv):
|
||||
bf_numer = np.matmul(Gk.swapaxes(-2, -1).conj(), Cm_inv)
|
||||
bf_denom = np.matmul(bf_numer, Gk)
|
||||
return bf_numer, bf_denom
|
||||
|
||||
#
|
||||
# 2. Reorient lead field in direction of max power or normal
|
||||
#
|
||||
if pick_ori == "max-power":
|
||||
assert n_orient == 3
|
||||
_, bf_denom = _compute_bf_terms(Gk, Cm_inv)
|
||||
if weight_norm is None:
|
||||
ori_numer = np.eye(n_orient)[np.newaxis]
|
||||
ori_denom = bf_denom
|
||||
else:
|
||||
# compute power, cf Sekihara & Nagarajan 2008, eq. 4.47
|
||||
ori_numer = bf_denom
|
||||
# Cm_inv should be Hermitian so no need for .T.conj()
|
||||
ori_denom = np.matmul(
|
||||
np.matmul(Gk.swapaxes(-2, -1).conj(), Cm_inv @ Cm_inv), Gk
|
||||
)
|
||||
ori_denom_inv = _sym_inv_sm(ori_denom, reduce_rank, inversion, sk)
|
||||
ori_pick = np.matmul(ori_denom_inv, ori_numer)
|
||||
assert ori_pick.shape == (n_sources, n_orient, n_orient)
|
||||
|
||||
# pick eigenvector that corresponds to maximum eigenvalue:
|
||||
eig_vals, eig_vecs = np.linalg.eig(ori_pick.real) # not Hermitian!
|
||||
# sort eigenvectors by eigenvalues for picking:
|
||||
order = np.argsort(np.abs(eig_vals), axis=-1)
|
||||
# eig_vals = np.take_along_axis(eig_vals, order, axis=-1)
|
||||
max_power_ori = eig_vecs[np.arange(len(eig_vecs)), :, order[:, -1]]
|
||||
assert max_power_ori.shape == (n_sources, n_orient)
|
||||
|
||||
# set the (otherwise arbitrary) sign to match the normal
|
||||
signs = np.sign(np.sum(max_power_ori * nn, axis=1, keepdims=True))
|
||||
signs[signs == 0] = 1.0
|
||||
max_power_ori *= signs
|
||||
|
||||
# Compute the lead field for the optimal orientation,
|
||||
# and adjust numer/denom
|
||||
Gk = np.matmul(Gk, max_power_ori[..., np.newaxis])
|
||||
n_orient = 1
|
||||
else:
|
||||
max_power_ori = None
|
||||
if pick_ori == "normal":
|
||||
Gk = Gk[..., 2:3]
|
||||
n_orient = 1
|
||||
|
||||
#
|
||||
# 3. Compute numerator and denominator of beamformer formula (unit-gain)
|
||||
#
|
||||
|
||||
bf_numer, bf_denom = _compute_bf_terms(Gk, Cm_inv)
|
||||
assert bf_denom.shape == (n_sources,) + (n_orient,) * 2
|
||||
assert bf_numer.shape == (n_sources, n_orient, n_channels)
|
||||
del Gk # lead field has been adjusted and should not be used anymore
|
||||
|
||||
#
|
||||
# 4. Invert the denominator
|
||||
#
|
||||
|
||||
# Here W is W_ug, i.e.:
|
||||
# G.T @ Cm_inv / (G.T @ Cm_inv @ G)
|
||||
bf_denom_inv = _sym_inv_sm(bf_denom, reduce_rank, inversion, sk)
|
||||
assert bf_denom_inv.shape == (n_sources, n_orient, n_orient)
|
||||
W = np.matmul(bf_denom_inv, bf_numer)
|
||||
assert W.shape == (n_sources, n_orient, n_channels)
|
||||
del bf_denom_inv, sk
|
||||
|
||||
#
|
||||
# 5. Re-scale filter weights according to the selected weight_norm
|
||||
#
|
||||
|
||||
# Weight normalization is done by computing, for each source::
|
||||
#
|
||||
# W_ung = W_ug / sqrt(W_ug @ W_ug.T)
|
||||
#
|
||||
# with W_ung referring to the unit-noise-gain (weight normalized) filter
|
||||
# and W_ug referring to the above-calculated unit-gain filter stored in W.
|
||||
|
||||
if weight_norm is not None:
|
||||
# Three different ways to calculate the normalization factors here.
|
||||
# Only matters when in vector mode, as otherwise n_orient == 1 and
|
||||
# they are all equivalent.
|
||||
#
|
||||
# In MNE < 0.21, we just used the Frobenius matrix norm:
|
||||
#
|
||||
# noise_norm = np.linalg.norm(W, axis=(1, 2), keepdims=True)
|
||||
# assert noise_norm.shape == (n_sources, 1, 1)
|
||||
# W /= noise_norm
|
||||
#
|
||||
# Sekihara 2008 says to use sqrt(diag(W_ug @ W_ug.T)), which is not
|
||||
# rotation invariant:
|
||||
if weight_norm in ("unit-noise-gain", "nai"):
|
||||
noise_norm = np.matmul(W, W.swapaxes(-2, -1).conj()).real
|
||||
noise_norm = np.reshape( # np.diag operation over last two axes
|
||||
noise_norm, (n_sources, -1, 1)
|
||||
)[:, :: n_orient + 1]
|
||||
np.sqrt(noise_norm, out=noise_norm)
|
||||
noise_norm[noise_norm == 0] = np.inf
|
||||
assert noise_norm.shape == (n_sources, n_orient, 1)
|
||||
W /= noise_norm
|
||||
else:
|
||||
assert weight_norm == "unit-noise-gain-invariant"
|
||||
# Here we use sqrtm. The shortcut:
|
||||
#
|
||||
# use = W
|
||||
#
|
||||
# ... does not match the direct route (it is rotated!), so we'll
|
||||
# use the direct one to match FieldTrip:
|
||||
use = bf_numer
|
||||
inner = np.matmul(use, use.swapaxes(-2, -1).conj())
|
||||
W = np.matmul(_sym_mat_pow(inner, -0.5), use)
|
||||
noise_norm = 1.0
|
||||
|
||||
if weight_norm == "nai":
|
||||
# Estimate noise level based on covariance matrix, taking the
|
||||
# first eigenvalue that falls outside the signal subspace or the
|
||||
# loading factor used during regularization, whichever is largest.
|
||||
if rank > len(Cm):
|
||||
# Covariance matrix is full rank, no noise subspace!
|
||||
# Use the loading factor as noise ceiling.
|
||||
if loading_factor == 0:
|
||||
raise RuntimeError(
|
||||
"Cannot compute noise subspace with a full-rank "
|
||||
"covariance matrix and no regularization. Try "
|
||||
"manually specifying the rank of the covariance "
|
||||
"matrix or using regularization."
|
||||
)
|
||||
noise = loading_factor
|
||||
else:
|
||||
noise, _ = np.linalg.eigh(Cm)
|
||||
noise = noise[-rank]
|
||||
noise = max(noise, loading_factor)
|
||||
W /= np.sqrt(noise)
|
||||
|
||||
W = W.reshape(n_sources * n_orient, n_channels)
|
||||
logger.info("Filter computation complete")
|
||||
return W, max_power_ori
|
||||
|
||||
|
||||
def _compute_power(Cm, W, n_orient):
|
||||
"""Use beamformer filters to compute source power.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
Cm : ndarray, shape (n_channels, n_channels)
|
||||
Data covariance matrix or CSD matrix.
|
||||
W : ndarray, shape (nvertices*norient, nchannels)
|
||||
Beamformer weights.
|
||||
|
||||
Returns
|
||||
-------
|
||||
power : ndarray, shape (nvertices,)
|
||||
Source power.
|
||||
"""
|
||||
n_sources = W.shape[0] // n_orient
|
||||
|
||||
Wk = W.reshape(n_sources, n_orient, W.shape[1])
|
||||
source_power = np.trace(
|
||||
(Wk @ Cm @ Wk.conj().transpose(0, 2, 1)).real, axis1=1, axis2=2
|
||||
)
|
||||
|
||||
return source_power
|
||||
|
||||
|
||||
class Beamformer(dict):
|
||||
"""A computed beamformer.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.17
|
||||
"""
|
||||
|
||||
def copy(self):
|
||||
"""Copy the beamformer.
|
||||
|
||||
Returns
|
||||
-------
|
||||
beamformer : instance of Beamformer
|
||||
A deep copy of the beamformer.
|
||||
"""
|
||||
return deepcopy(self)
|
||||
|
||||
def __repr__(self): # noqa: D105
|
||||
n_verts = sum(len(v) for v in self["vertices"])
|
||||
n_channels = len(self["ch_names"])
|
||||
if self["subject"] is None:
|
||||
subject = "unknown"
|
||||
else:
|
||||
subject = f'"{self["subject"]}"'
|
||||
out = "<Beamformer | {}, subject {}, {} vert, {} ch".format(
|
||||
self["kind"],
|
||||
subject,
|
||||
n_verts,
|
||||
n_channels,
|
||||
)
|
||||
if self["pick_ori"] is not None:
|
||||
out += f', {self["pick_ori"]} ori'
|
||||
if self["weight_norm"] is not None:
|
||||
out += f', {self["weight_norm"]} norm'
|
||||
if self.get("inversion") is not None:
|
||||
out += f', {self["inversion"]} inversion'
|
||||
if "rank" in self:
|
||||
out += f', rank {self["rank"]}'
|
||||
out += ">"
|
||||
return out
|
||||
|
||||
@verbose
|
||||
def save(self, fname, overwrite=False, verbose=None):
|
||||
"""Save the beamformer filter.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
The filename to use to write the HDF5 data.
|
||||
Should end in ``'-lcmv.h5'`` or ``'-dics.h5'``.
|
||||
%(overwrite)s
|
||||
%(verbose)s
|
||||
"""
|
||||
_, write_hdf5 = _import_h5io_funcs()
|
||||
|
||||
ending = f'-{self["kind"].lower()}.h5'
|
||||
check_fname(fname, self["kind"], (ending,))
|
||||
csd_orig = None
|
||||
try:
|
||||
if "csd" in self:
|
||||
csd_orig = self["csd"]
|
||||
self["csd"] = self["csd"].__getstate__()
|
||||
write_hdf5(fname, self, overwrite=overwrite, title="mnepython")
|
||||
finally:
|
||||
if csd_orig is not None:
|
||||
self["csd"] = csd_orig
|
||||
|
||||
|
||||
def read_beamformer(fname):
|
||||
"""Read a beamformer filter.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : path-like
|
||||
The filename of the HDF5 file.
|
||||
|
||||
Returns
|
||||
-------
|
||||
filter : instance of Beamformer
|
||||
The beamformer filter.
|
||||
"""
|
||||
read_hdf5, _ = _import_h5io_funcs()
|
||||
beamformer = read_hdf5(fname, title="mnepython")
|
||||
if "csd" in beamformer:
|
||||
beamformer["csd"] = CrossSpectralDensity(**beamformer["csd"])
|
||||
# h5io seems to cast `bool` to `int` on round-trip, probably a bug
|
||||
# we should fix at some point (if possible -- could be HDF5 limitation)
|
||||
for key in ("normalize_fwd", "is_free_ori", "is_ssp"):
|
||||
if key in beamformer:
|
||||
beamformer[key] = bool(beamformer[key])
|
||||
for key in ("data_cov", "noise_cov"):
|
||||
if beamformer.get(key) is not None:
|
||||
for pi, p in enumerate(beamformer[key]["projs"]):
|
||||
p = Projection(**p)
|
||||
p["active"] = bool(p["active"])
|
||||
beamformer[key]["projs"][pi] = p
|
||||
beamformer[key] = Covariance(
|
||||
*[
|
||||
beamformer[key].get(arg)
|
||||
for arg in (
|
||||
"data",
|
||||
"names",
|
||||
"bads",
|
||||
"projs",
|
||||
"nfree",
|
||||
"eig",
|
||||
"eigvec",
|
||||
"method",
|
||||
"loglik",
|
||||
)
|
||||
]
|
||||
)
|
||||
return Beamformer(beamformer)
|
||||
|
||||
|
||||
def _proj_whiten_data(M, proj, filters):
|
||||
if filters.get("is_ssp", True):
|
||||
# check whether data and filter projs match
|
||||
_check_proj_match(proj, filters)
|
||||
if filters["whitener"] is None:
|
||||
M = np.dot(filters["proj"], M)
|
||||
|
||||
if filters["whitener"] is not None:
|
||||
M = np.dot(filters["whitener"], M)
|
||||
return M
|
||||
648
mne/beamformer/_dics.py
Normal file
648
mne/beamformer/_dics.py
Normal file
@@ -0,0 +1,648 @@
|
||||
"""Dynamic Imaging of Coherent Sources (DICS)."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .._fiff.pick import pick_channels, pick_info
|
||||
from ..channels import equalize_channels
|
||||
from ..forward import _subject_from_forward
|
||||
from ..minimum_norm.inverse import _check_depth, _check_reference, combine_xyz
|
||||
from ..rank import compute_rank
|
||||
from ..source_estimate import _get_src_type, _make_stc
|
||||
from ..time_frequency import EpochsTFR
|
||||
from ..time_frequency.tfr import _check_tfr_complex
|
||||
from ..utils import (
|
||||
_check_channels_spatial_filter,
|
||||
_check_one_ch_type,
|
||||
_check_option,
|
||||
_check_rank,
|
||||
_validate_type,
|
||||
logger,
|
||||
verbose,
|
||||
warn,
|
||||
)
|
||||
from ._compute_beamformer import (
|
||||
Beamformer,
|
||||
_check_src_type,
|
||||
_compute_beamformer,
|
||||
_compute_power,
|
||||
_prepare_beamformer_input,
|
||||
_proj_whiten_data,
|
||||
)
|
||||
|
||||
|
||||
@verbose
|
||||
def make_dics(
|
||||
info,
|
||||
forward,
|
||||
csd,
|
||||
reg=0.05,
|
||||
noise_csd=None,
|
||||
label=None,
|
||||
pick_ori=None,
|
||||
rank=None,
|
||||
weight_norm=None,
|
||||
reduce_rank=False,
|
||||
depth=1.0,
|
||||
real_filter=True,
|
||||
inversion="matrix",
|
||||
verbose=None,
|
||||
):
|
||||
"""Compute a Dynamic Imaging of Coherent Sources (DICS) spatial filter.
|
||||
|
||||
This is a beamformer filter that can be used to estimate the source power
|
||||
at a specific frequency range :footcite:`GrossEtAl2001`. It does this by
|
||||
constructing a spatial filter for each source point.
|
||||
The computation of these filters is very similar to those of the LCMV
|
||||
beamformer (:func:`make_lcmv`), but instead of operating on a covariance
|
||||
matrix, the CSD matrix is used. When applying these filters to a CSD matrix
|
||||
(see :func:`apply_dics_csd`), the source power can be estimated for each
|
||||
source point.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(info_not_none)s
|
||||
forward : instance of Forward
|
||||
Forward operator.
|
||||
csd : instance of CrossSpectralDensity
|
||||
The data cross-spectral density (CSD) matrices. A source estimate is
|
||||
performed for each frequency or frequency-bin defined in the CSD
|
||||
object.
|
||||
reg : float
|
||||
The regularization to apply to the cross-spectral density before
|
||||
computing the inverse.
|
||||
noise_csd : instance of CrossSpectralDensity | None
|
||||
Noise cross-spectral density (CSD) matrices. If provided, whitening
|
||||
will be done. The noise CSDs need to have been computed for the same
|
||||
frequencies as the data CSDs. Providing noise CSDs is mandatory if you
|
||||
mix sensor types, e.g. gradiometers with magnetometers or EEG with
|
||||
MEG.
|
||||
|
||||
.. versionadded:: 0.20
|
||||
label : Label | None
|
||||
Restricts the solution to a given label.
|
||||
%(pick_ori_bf)s
|
||||
%(rank_none)s
|
||||
|
||||
.. versionadded:: 0.17
|
||||
%(weight_norm)s
|
||||
|
||||
Defaults to ``None``, in which case no normalization is performed.
|
||||
%(reduce_rank)s
|
||||
%(depth)s
|
||||
real_filter : bool
|
||||
If ``True``, take only the real part of the cross-spectral-density
|
||||
matrices to compute real filters.
|
||||
|
||||
.. versionchanged:: 0.23
|
||||
Version 0.23 an earlier used ``real_filter=False`` as the default,
|
||||
as of version 0.24 ``True`` is the default.
|
||||
%(inversion_bf)s
|
||||
|
||||
.. versionchanged:: 0.21
|
||||
Default changed to ``'matrix'``.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
filters : instance of Beamformer
|
||||
Dictionary containing filter weights from DICS beamformer.
|
||||
Contains the following keys:
|
||||
|
||||
'kind' : str
|
||||
The type of beamformer, in this case 'DICS'.
|
||||
'weights' : ndarray, shape (n_frequencies, n_weights)
|
||||
For each frequency, the filter weights of the beamformer.
|
||||
'csd' : instance of CrossSpectralDensity
|
||||
The data cross-spectral density matrices used to compute the
|
||||
beamformer.
|
||||
'ch_names' : list of str
|
||||
Channels used to compute the beamformer.
|
||||
'proj' : ndarray, shape (n_channels, n_channels)
|
||||
Projections used to compute the beamformer.
|
||||
'vertices' : list of ndarray
|
||||
Vertices for which the filter weights were computed.
|
||||
'n_sources' : int
|
||||
Number of source location for which the filter weight were
|
||||
computed.
|
||||
'subject' : str
|
||||
The subject ID.
|
||||
'pick-ori' : None | 'max-power' | 'normal' | 'vector'
|
||||
The orientation in which the beamformer filters were computed.
|
||||
'inversion' : 'single' | 'matrix'
|
||||
Whether the spatial filters were computed for each dipole
|
||||
separately or jointly for all dipoles at each vertex using a
|
||||
matrix inversion.
|
||||
'weight_norm' : None | 'unit-noise-gain'
|
||||
The normalization of the weights.
|
||||
'src_type' : str
|
||||
Type of source space.
|
||||
'source_nn' : ndarray, shape (n_sources, 3)
|
||||
For each source location, the surface normal.
|
||||
'is_free_ori' : bool
|
||||
Whether the filter was computed in a fixed direction
|
||||
(pick_ori='max-power', pick_ori='normal') or not.
|
||||
'whitener' : None | ndarray, shape (n_channels, n_channels)
|
||||
Whitening matrix, provided if whitening was applied to the
|
||||
covariance matrix and leadfield during computation of the
|
||||
beamformer weights.
|
||||
'max-power-ori' : ndarray, shape (n_sources, 3) | None
|
||||
When pick_ori='max-power', this fields contains the estimated
|
||||
direction of maximum power at each source location.
|
||||
|
||||
See Also
|
||||
--------
|
||||
apply_dics_csd
|
||||
|
||||
Notes
|
||||
-----
|
||||
The original reference is :footcite:`GrossEtAl2001`. See
|
||||
:footcite:`vanVlietEtAl2018` for a tutorial style paper on the topic.
|
||||
|
||||
The DICS beamformer is very similar to the LCMV (:func:`make_lcmv`)
|
||||
beamformer and many of the parameters are shared. However,
|
||||
:func:`make_dics` and :func:`make_lcmv` currently have different defaults
|
||||
for these parameters, which were settled on separately through extensive
|
||||
practical use case testing (but not necessarily exhaustive parameter space
|
||||
searching), and it remains to be seen how functionally interchangeable they
|
||||
could be.
|
||||
|
||||
The default setting reproduce the DICS beamformer as described in
|
||||
:footcite:`vanVlietEtAl2018`::
|
||||
|
||||
inversion='single', weight_norm=None, depth=1.
|
||||
|
||||
To use the :func:`make_lcmv` defaults, use::
|
||||
|
||||
inversion='matrix', weight_norm='unit-noise-gain-invariant', depth=None
|
||||
|
||||
For more information about ``real_filter``, see the
|
||||
supplemental information from :footcite:`HippEtAl2011`.
|
||||
|
||||
References
|
||||
----------
|
||||
.. footbibliography::
|
||||
""" # noqa: E501
|
||||
rank = _check_rank(rank)
|
||||
_check_option("pick_ori", pick_ori, [None, "vector", "normal", "max-power"])
|
||||
_check_option("inversion", inversion, ["single", "matrix"])
|
||||
_validate_type(weight_norm, (str, None), "weight_norm")
|
||||
|
||||
frequencies = [np.mean(freq_bin) for freq_bin in csd.frequencies]
|
||||
n_freqs = len(frequencies)
|
||||
|
||||
_, _, allow_mismatch = _check_one_ch_type("dics", info, forward, csd, noise_csd)
|
||||
# remove bads so that equalize_channels only keeps all good
|
||||
info = pick_info(info, pick_channels(info["ch_names"], [], info["bads"]))
|
||||
info, forward, csd = equalize_channels([info, forward, csd])
|
||||
|
||||
csd, noise_csd = _prepare_noise_csd(csd, noise_csd, real_filter)
|
||||
|
||||
depth = _check_depth(depth, "depth_sparse")
|
||||
if inversion == "single":
|
||||
depth["combine_xyz"] = False
|
||||
|
||||
(
|
||||
is_free_ori,
|
||||
info,
|
||||
proj,
|
||||
vertices,
|
||||
G,
|
||||
whitener,
|
||||
nn,
|
||||
orient_std,
|
||||
) = _prepare_beamformer_input(
|
||||
info,
|
||||
forward,
|
||||
label,
|
||||
pick_ori,
|
||||
noise_cov=noise_csd,
|
||||
rank=rank,
|
||||
pca=False,
|
||||
**depth,
|
||||
)
|
||||
|
||||
# Compute ranks
|
||||
csd_int_rank = []
|
||||
if not allow_mismatch:
|
||||
noise_rank = compute_rank(noise_csd, info=info, rank=rank)
|
||||
for i in range(len(frequencies)):
|
||||
csd_rank = compute_rank(
|
||||
csd.get_data(index=i, as_cov=True), info=info, rank=rank
|
||||
)
|
||||
if not allow_mismatch:
|
||||
for key in csd_rank:
|
||||
if key not in noise_rank or csd_rank[key] != noise_rank[key]:
|
||||
raise ValueError(
|
||||
f"{key} data rank ({csd_rank[key]}) did not match the noise "
|
||||
f"rank ({noise_rank.get(key, None)})"
|
||||
)
|
||||
csd_int_rank.append(sum(csd_rank.values()))
|
||||
|
||||
del noise_csd
|
||||
ch_names = list(info["ch_names"])
|
||||
|
||||
logger.info("Computing DICS spatial filters...")
|
||||
Ws = []
|
||||
max_oris = []
|
||||
for i, freq in enumerate(frequencies):
|
||||
if n_freqs > 1:
|
||||
logger.info(
|
||||
" computing DICS spatial filter at "
|
||||
f"{round(freq, 2)} Hz ({i + 1}/{n_freqs})"
|
||||
)
|
||||
|
||||
Cm = csd.get_data(index=i)
|
||||
|
||||
# XXX: Weird that real_filter happens *before* whitening, which could
|
||||
# make things complex again...?
|
||||
if real_filter:
|
||||
Cm = Cm.real
|
||||
|
||||
# compute spatial filter
|
||||
n_orient = 3 if is_free_ori else 1
|
||||
W, max_power_ori = _compute_beamformer(
|
||||
G,
|
||||
Cm,
|
||||
reg,
|
||||
n_orient,
|
||||
weight_norm,
|
||||
pick_ori,
|
||||
reduce_rank,
|
||||
rank=csd_int_rank[i],
|
||||
inversion=inversion,
|
||||
nn=nn,
|
||||
orient_std=orient_std,
|
||||
whitener=whitener,
|
||||
)
|
||||
Ws.append(W)
|
||||
max_oris.append(max_power_ori)
|
||||
|
||||
Ws = np.array(Ws)
|
||||
if pick_ori == "max-power":
|
||||
max_oris = np.array(max_oris)
|
||||
else:
|
||||
max_oris = None
|
||||
|
||||
src_type = _get_src_type(forward["src"], vertices)
|
||||
subject = _subject_from_forward(forward)
|
||||
is_free_ori = is_free_ori if pick_ori in [None, "vector"] else False
|
||||
n_sources = np.sum([len(v) for v in vertices])
|
||||
|
||||
filters = Beamformer(
|
||||
kind="DICS",
|
||||
weights=Ws,
|
||||
csd=csd,
|
||||
ch_names=ch_names,
|
||||
proj=proj,
|
||||
vertices=vertices,
|
||||
n_sources=n_sources,
|
||||
subject=subject,
|
||||
pick_ori=pick_ori,
|
||||
inversion=inversion,
|
||||
weight_norm=weight_norm,
|
||||
src_type=src_type,
|
||||
source_nn=forward["source_nn"].copy(),
|
||||
is_free_ori=is_free_ori,
|
||||
whitener=whitener,
|
||||
max_power_ori=max_oris,
|
||||
)
|
||||
|
||||
return filters
|
||||
|
||||
|
||||
def _prepare_noise_csd(csd, noise_csd, real_filter):
|
||||
if noise_csd is not None:
|
||||
csd, noise_csd = equalize_channels([csd, noise_csd])
|
||||
# Use the same noise CSD for all frequencies
|
||||
if len(noise_csd.frequencies) > 1:
|
||||
noise_csd = noise_csd.mean()
|
||||
noise_csd = noise_csd.get_data(as_cov=True)
|
||||
if real_filter:
|
||||
noise_csd["data"] = noise_csd["data"].real
|
||||
return csd, noise_csd
|
||||
|
||||
|
||||
def _apply_dics(data, filters, info, tmin, tfr=False):
|
||||
"""Apply DICS spatial filter to data for source reconstruction."""
|
||||
if isinstance(data, np.ndarray) and data.ndim == (2 + tfr):
|
||||
data = [data]
|
||||
one_epoch = True
|
||||
else:
|
||||
one_epoch = False
|
||||
|
||||
Ws = filters["weights"]
|
||||
one_freq = len(Ws) == 1
|
||||
|
||||
subject = filters["subject"]
|
||||
# compatibility with 0.16, add src_type as None if not present:
|
||||
filters, warn_text = _check_src_type(filters)
|
||||
|
||||
for i, M in enumerate(data):
|
||||
if not one_epoch:
|
||||
logger.info(f"Processing epoch : {i + 1}")
|
||||
|
||||
# Apply SSPs
|
||||
if not tfr: # save computation, only compute once
|
||||
M_w = _proj_whiten_data(M, info["projs"], filters)
|
||||
|
||||
stcs = []
|
||||
for j, W in enumerate(Ws):
|
||||
if tfr: # must compute for each frequency
|
||||
M_w = _proj_whiten_data(M[:, j], info["projs"], filters)
|
||||
|
||||
# project to source space using beamformer weights
|
||||
sol = np.dot(W, M_w)
|
||||
|
||||
if filters["is_free_ori"] and filters["pick_ori"] != "vector":
|
||||
logger.info("combining the current components...")
|
||||
sol = combine_xyz(sol)
|
||||
|
||||
tstep = 1.0 / info["sfreq"]
|
||||
|
||||
stcs.append(
|
||||
_make_stc(
|
||||
sol,
|
||||
vertices=filters["vertices"],
|
||||
src_type=filters["src_type"],
|
||||
tmin=tmin,
|
||||
tstep=tstep,
|
||||
subject=subject,
|
||||
vector=(filters["pick_ori"] == "vector"),
|
||||
source_nn=filters["source_nn"],
|
||||
warn_text=warn_text,
|
||||
)
|
||||
)
|
||||
if one_freq:
|
||||
yield stcs[0]
|
||||
else:
|
||||
yield stcs
|
||||
|
||||
logger.info("[done]")
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_dics(evoked, filters, verbose=None):
|
||||
"""Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights.
|
||||
|
||||
Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights
|
||||
on evoked data.
|
||||
|
||||
.. warning:: The result of this function is meant as an intermediate step
|
||||
for further processing (such as computing connectivity). If
|
||||
you are interested in estimating source time courses, use an
|
||||
LCMV beamformer (:func:`make_lcmv`, :func:`apply_lcmv`)
|
||||
instead. If you are interested in estimating spectral power at
|
||||
the source level, use :func:`apply_dics_csd`.
|
||||
.. warning:: This implementation has not been heavily tested so please
|
||||
report any issues or suggestions.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
evoked : Evoked
|
||||
Evoked data to apply the DICS beamformer weights to.
|
||||
filters : instance of Beamformer
|
||||
DICS spatial filter (beamformer weights)
|
||||
Filter weights returned from :func:`make_dics`.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc : SourceEstimate | VolSourceEstimate | list
|
||||
Source time courses. If the DICS beamformer has been computed for more
|
||||
than one frequency, a list is returned containing for each frequency
|
||||
the corresponding time courses.
|
||||
|
||||
See Also
|
||||
--------
|
||||
apply_dics_epochs
|
||||
apply_dics_tfr_epochs
|
||||
apply_dics_csd
|
||||
""" # noqa: E501
|
||||
_check_reference(evoked)
|
||||
|
||||
info = evoked.info
|
||||
data = evoked.data
|
||||
tmin = evoked.times[0]
|
||||
|
||||
sel = _check_channels_spatial_filter(evoked.ch_names, filters)
|
||||
data = data[sel]
|
||||
|
||||
stc = _apply_dics(data=data, filters=filters, info=info, tmin=tmin)
|
||||
|
||||
return next(stc)
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_dics_epochs(epochs, filters, return_generator=False, verbose=None):
|
||||
"""Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights.
|
||||
|
||||
Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights
|
||||
on single trial data.
|
||||
|
||||
.. warning:: The result of this function is meant as an intermediate step
|
||||
for further processing (such as computing connectivity). If
|
||||
you are interested in estimating source time courses, use an
|
||||
LCMV beamformer (:func:`make_lcmv`, :func:`apply_lcmv`)
|
||||
instead. If you are interested in estimating spectral power at
|
||||
the source level, use :func:`apply_dics_csd`.
|
||||
.. warning:: This implementation has not been heavily tested so please
|
||||
report any issue or suggestions.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
epochs : Epochs
|
||||
Single trial epochs.
|
||||
filters : instance of Beamformer
|
||||
DICS spatial filter (beamformer weights)
|
||||
Filter weights returned from :func:`make_dics`. The DICS filters must
|
||||
have been computed for a single frequency only.
|
||||
return_generator : bool
|
||||
Return a generator object instead of a list. This allows iterating
|
||||
over the stcs without having to keep them all in memory.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc: list | generator of (SourceEstimate | VolSourceEstimate)
|
||||
The source estimates for all epochs.
|
||||
|
||||
See Also
|
||||
--------
|
||||
apply_dics
|
||||
apply_dics_tfr_epochs
|
||||
apply_dics_csd
|
||||
"""
|
||||
_check_reference(epochs)
|
||||
|
||||
if len(filters["weights"]) > 1:
|
||||
raise ValueError(
|
||||
"This function only works on DICS beamformer weights that have "
|
||||
"been computed for a single frequency. When calling make_dics(), "
|
||||
"make sure to use a CSD object with only a single frequency (or "
|
||||
"frequency-bin) defined."
|
||||
)
|
||||
|
||||
info = epochs.info
|
||||
tmin = epochs.times[0]
|
||||
|
||||
sel = _check_channels_spatial_filter(epochs.ch_names, filters)
|
||||
data = epochs.get_data(sel)
|
||||
|
||||
stcs = _apply_dics(data=data, filters=filters, info=info, tmin=tmin)
|
||||
|
||||
if not return_generator:
|
||||
stcs = list(stcs)
|
||||
|
||||
return stcs
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_dics_tfr_epochs(epochs_tfr, filters, return_generator=False, verbose=None):
|
||||
"""Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights.
|
||||
|
||||
Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights
|
||||
on single trial time-frequency data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
epochs_tfr : EpochsTFR
|
||||
Single trial time-frequency epochs.
|
||||
filters : instance of Beamformer
|
||||
DICS spatial filter (beamformer weights)
|
||||
Filter weights returned from :func:`make_dics`.
|
||||
return_generator : bool
|
||||
Return a generator object instead of a list. This allows iterating
|
||||
over the stcs without having to keep them all in memory.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stcs : list of list of (SourceEstimate | VectorSourceEstimate | VolSourceEstimate)
|
||||
The source estimates for all epochs (outside list) and for
|
||||
all frequencies (inside list).
|
||||
|
||||
See Also
|
||||
--------
|
||||
apply_dics
|
||||
apply_dics_epochs
|
||||
apply_dics_csd
|
||||
""" # noqa E501
|
||||
_validate_type(epochs_tfr, EpochsTFR)
|
||||
_check_tfr_complex(epochs_tfr)
|
||||
|
||||
if filters["pick_ori"] == "vector":
|
||||
warn(
|
||||
"Using a vector solution to compute power will lead to "
|
||||
"inaccurate directions (only in the first quadrent) "
|
||||
"because power is a strictly positive (squared) metric. "
|
||||
"Using singular value decomposition (SVD) to determine "
|
||||
"the direction is not yet supported in MNE."
|
||||
)
|
||||
|
||||
sel = _check_channels_spatial_filter(epochs_tfr.ch_names, filters)
|
||||
data = epochs_tfr.data[:, sel, :, :]
|
||||
|
||||
stcs = _apply_dics(data, filters, epochs_tfr.info, epochs_tfr.tmin, tfr=True)
|
||||
if not return_generator:
|
||||
stcs = [[stc for stc in tfr_stcs] for tfr_stcs in stcs]
|
||||
return stcs
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_dics_csd(csd, filters, verbose=None):
|
||||
"""Apply Dynamic Imaging of Coherent Sources (DICS) beamformer weights.
|
||||
|
||||
Apply a previously computed DICS beamformer to a cross-spectral density
|
||||
(CSD) object to estimate source power in time and frequency windows
|
||||
specified in the CSD object :footcite:`GrossEtAl2001`.
|
||||
|
||||
.. note:: Only power can computed from the cross-spectral density, not
|
||||
complex phase-amplitude, so vector DICS filters will be
|
||||
converted to scalar source estimates since power is strictly
|
||||
positive and so 3D directions cannot be combined meaningfully
|
||||
(the direction would be confined to the positive quadrant).
|
||||
|
||||
Parameters
|
||||
----------
|
||||
csd : instance of CrossSpectralDensity
|
||||
The data cross-spectral density (CSD) matrices. A source estimate is
|
||||
performed for each frequency or frequency-bin defined in the CSD
|
||||
object.
|
||||
filters : instance of Beamformer
|
||||
DICS spatial filter (beamformer weights)
|
||||
Filter weights returned from `make_dics`.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc : SourceEstimate
|
||||
Source power with frequency instead of time.
|
||||
frequencies : list of float
|
||||
The frequencies for which the source power has been computed. If the
|
||||
data CSD object defines frequency-bins instead of exact frequencies,
|
||||
the mean of each bin is returned.
|
||||
|
||||
See Also
|
||||
--------
|
||||
apply_dics
|
||||
apply_dics_epochs
|
||||
apply_dics_tfr_epochs
|
||||
|
||||
References
|
||||
----------
|
||||
.. footbibliography::
|
||||
""" # noqa: E501
|
||||
ch_names = filters["ch_names"]
|
||||
vertices = filters["vertices"]
|
||||
n_orient = 3 if filters["is_free_ori"] else 1
|
||||
subject = filters["subject"]
|
||||
whitener = filters["whitener"]
|
||||
n_sources = filters["n_sources"]
|
||||
|
||||
# If CSD is summed over multiple frequencies, take the average frequency
|
||||
frequencies = [np.mean(dfreq) for dfreq in csd.frequencies]
|
||||
n_freqs = len(frequencies)
|
||||
|
||||
source_power = np.zeros((n_sources, len(csd.frequencies)))
|
||||
|
||||
# Ensure the CSD is in the same order as the weights
|
||||
csd_picks = [csd.ch_names.index(ch) for ch in ch_names]
|
||||
|
||||
logger.info("Computing DICS source power...")
|
||||
for i, freq in enumerate(frequencies):
|
||||
if n_freqs > 1:
|
||||
logger.info(
|
||||
" applying DICS spatial filter at "
|
||||
f"{round(freq, 2)} Hz ({i + 1}/{n_freqs})"
|
||||
)
|
||||
|
||||
Cm = csd.get_data(index=i)
|
||||
Cm = Cm[csd_picks, :][:, csd_picks]
|
||||
W = filters["weights"][i]
|
||||
|
||||
# Whiten the CSD
|
||||
Cm = np.dot(whitener, np.dot(Cm, whitener.conj().T))
|
||||
|
||||
source_power[:, i] = _compute_power(Cm, W, n_orient)
|
||||
|
||||
logger.info("[done]")
|
||||
|
||||
# compatibility with 0.16, add src_type as None if not present:
|
||||
filters, warn_text = _check_src_type(filters)
|
||||
|
||||
return (
|
||||
_make_stc(
|
||||
source_power,
|
||||
vertices=vertices,
|
||||
src_type=filters["src_type"],
|
||||
tmin=0.0,
|
||||
tstep=1.0,
|
||||
subject=subject,
|
||||
warn_text=warn_text,
|
||||
),
|
||||
frequencies,
|
||||
)
|
||||
503
mne/beamformer/_lcmv.py
Normal file
503
mne/beamformer/_lcmv.py
Normal file
@@ -0,0 +1,503 @@
|
||||
"""Compute Linearly constrained minimum variance (LCMV) beamformer."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .._fiff.meas_info import _simplify_info
|
||||
from .._fiff.pick import pick_channels_cov, pick_info
|
||||
from ..forward import _subject_from_forward
|
||||
from ..minimum_norm.inverse import _check_depth, _check_reference, combine_xyz
|
||||
from ..rank import compute_rank
|
||||
from ..source_estimate import _get_src_type, _make_stc
|
||||
from ..utils import (
|
||||
_check_channels_spatial_filter,
|
||||
_check_info_inv,
|
||||
_check_one_ch_type,
|
||||
logger,
|
||||
verbose,
|
||||
)
|
||||
from ._compute_beamformer import (
|
||||
Beamformer,
|
||||
_check_src_type,
|
||||
_compute_beamformer,
|
||||
_compute_power,
|
||||
_prepare_beamformer_input,
|
||||
_proj_whiten_data,
|
||||
)
|
||||
|
||||
|
||||
@verbose
|
||||
def make_lcmv(
|
||||
info,
|
||||
forward,
|
||||
data_cov,
|
||||
reg=0.05,
|
||||
noise_cov=None,
|
||||
label=None,
|
||||
pick_ori=None,
|
||||
rank="info",
|
||||
weight_norm="unit-noise-gain-invariant",
|
||||
reduce_rank=False,
|
||||
depth=None,
|
||||
inversion="matrix",
|
||||
verbose=None,
|
||||
):
|
||||
"""Compute LCMV spatial filter.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
%(info_not_none)s
|
||||
Specifies the channels to include. Bad channels (in ``info['bads']``)
|
||||
are not used.
|
||||
forward : instance of Forward
|
||||
Forward operator.
|
||||
data_cov : instance of Covariance
|
||||
The data covariance.
|
||||
reg : float
|
||||
The regularization for the whitened data covariance.
|
||||
noise_cov : instance of Covariance
|
||||
The noise covariance. If provided, whitening will be done. Providing a
|
||||
noise covariance is mandatory if you mix sensor types, e.g.
|
||||
gradiometers with magnetometers or EEG with MEG.
|
||||
|
||||
.. note::
|
||||
If ``noise_cov`` is ``None`` and ``weight_norm='unit-noise-gain'``,
|
||||
the unit noise is assumed to be 1 in SI units, e.g., 1 T for
|
||||
magnetometers, 1 V for EEG, so resulting amplitudes will be tiny.
|
||||
Consider using :func:`mne.make_ad_hoc_cov` to provide a
|
||||
``noise_cov`` to set noise values that are more reasonable for
|
||||
neural data or using ``weight_norm='nai'`` for weight-normalized
|
||||
beamformer output that is scaled by a noise estimate.
|
||||
label : instance of Label
|
||||
Restricts the LCMV solution to a given label.
|
||||
%(pick_ori_bf)s
|
||||
|
||||
- ``'vector'``
|
||||
Keeps the currents for each direction separate
|
||||
%(rank_info)s
|
||||
%(weight_norm)s
|
||||
|
||||
Defaults to ``'unit-noise-gain-invariant'``.
|
||||
%(reduce_rank)s
|
||||
%(depth)s
|
||||
|
||||
.. versionadded:: 0.18
|
||||
%(inversion_bf)s
|
||||
|
||||
.. versionadded:: 0.21
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
filters : instance of Beamformer
|
||||
Dictionary containing filter weights from LCMV beamformer.
|
||||
Contains the following keys:
|
||||
|
||||
'kind' : str
|
||||
The type of beamformer, in this case 'LCMV'.
|
||||
'weights' : array
|
||||
The filter weights of the beamformer.
|
||||
'data_cov' : instance of Covariance
|
||||
The data covariance matrix used to compute the beamformer.
|
||||
'noise_cov' : instance of Covariance | None
|
||||
The noise covariance matrix used to compute the beamformer.
|
||||
'whitener' : None | ndarray, shape (n_channels, n_channels)
|
||||
Whitening matrix, provided if whitening was applied to the
|
||||
covariance matrix and leadfield during computation of the
|
||||
beamformer weights.
|
||||
'weight_norm' : str | None
|
||||
Type of weight normalization used to compute the filter
|
||||
weights.
|
||||
'pick-ori' : None | 'max-power' | 'normal' | 'vector'
|
||||
The orientation in which the beamformer filters were computed.
|
||||
'ch_names' : list of str
|
||||
Channels used to compute the beamformer.
|
||||
'proj' : array
|
||||
Projections used to compute the beamformer.
|
||||
'is_ssp' : bool
|
||||
If True, projections were applied prior to filter computation.
|
||||
'vertices' : list
|
||||
Vertices for which the filter weights were computed.
|
||||
'is_free_ori' : bool
|
||||
If True, the filter was computed with free source orientation.
|
||||
'n_sources' : int
|
||||
Number of source location for which the filter weight were
|
||||
computed.
|
||||
'src_type' : str
|
||||
Type of source space.
|
||||
'source_nn' : ndarray, shape (n_sources, 3)
|
||||
For each source location, the surface normal.
|
||||
'proj' : ndarray, shape (n_channels, n_channels)
|
||||
Projections used to compute the beamformer.
|
||||
'subject' : str
|
||||
The subject ID.
|
||||
'rank' : int
|
||||
The rank of the data covariance matrix used to compute the
|
||||
beamformer weights.
|
||||
'max-power-ori' : ndarray, shape (n_sources, 3) | None
|
||||
When pick_ori='max-power', this fields contains the estimated
|
||||
direction of maximum power at each source location.
|
||||
'inversion' : 'single' | 'matrix'
|
||||
Whether the spatial filters were computed for each dipole
|
||||
separately or jointly for all dipoles at each vertex using a
|
||||
matrix inversion.
|
||||
|
||||
Notes
|
||||
-----
|
||||
The original reference is :footcite:`VanVeenEtAl1997`.
|
||||
|
||||
To obtain the Sekihara unit-noise-gain vector beamformer, you should use
|
||||
``weight_norm='unit-noise-gain', pick_ori='vector'`` followed by
|
||||
:meth:`vec_stc.project('pca', src) <mne.VectorSourceEstimate.project>`.
|
||||
|
||||
.. versionchanged:: 0.21
|
||||
The computations were extensively reworked, and the default for
|
||||
``weight_norm`` was set to ``'unit-noise-gain-invariant'``.
|
||||
|
||||
References
|
||||
----------
|
||||
.. footbibliography::
|
||||
"""
|
||||
# check number of sensor types present in the data and ensure a noise cov
|
||||
info = _simplify_info(info, keep=("proc_history",))
|
||||
noise_cov, _, allow_mismatch = _check_one_ch_type(
|
||||
"lcmv", info, forward, data_cov, noise_cov
|
||||
)
|
||||
# XXX we need this extra picking step (can't just rely on minimum norm's
|
||||
# because there can be a mismatch. Should probably add an extra arg to
|
||||
# _prepare_beamformer_input at some point (later)
|
||||
picks = _check_info_inv(info, forward, data_cov, noise_cov)
|
||||
info = pick_info(info, picks)
|
||||
data_rank = compute_rank(data_cov, rank=rank, info=info)
|
||||
noise_rank = compute_rank(noise_cov, rank=rank, info=info)
|
||||
for key in data_rank:
|
||||
if (
|
||||
key not in noise_rank or data_rank[key] != noise_rank[key]
|
||||
) and not allow_mismatch:
|
||||
raise ValueError(
|
||||
f"{key} data rank ({data_rank[key]}) did not match the noise rank ("
|
||||
f"{noise_rank.get(key, None)})"
|
||||
)
|
||||
del noise_rank
|
||||
rank = data_rank
|
||||
logger.info(f"Making LCMV beamformer with rank {rank}")
|
||||
del data_rank
|
||||
depth = _check_depth(depth, "depth_sparse")
|
||||
if inversion == "single":
|
||||
depth["combine_xyz"] = False
|
||||
|
||||
(
|
||||
is_free_ori,
|
||||
info,
|
||||
proj,
|
||||
vertno,
|
||||
G,
|
||||
whitener,
|
||||
nn,
|
||||
orient_std,
|
||||
) = _prepare_beamformer_input(
|
||||
info,
|
||||
forward,
|
||||
label,
|
||||
pick_ori,
|
||||
noise_cov=noise_cov,
|
||||
rank=rank,
|
||||
pca=False,
|
||||
**depth,
|
||||
)
|
||||
ch_names = list(info["ch_names"])
|
||||
|
||||
data_cov = pick_channels_cov(data_cov, include=ch_names)
|
||||
Cm = data_cov._get_square()
|
||||
if "estimator" in data_cov:
|
||||
del data_cov["estimator"]
|
||||
rank_int = sum(rank.values())
|
||||
del rank
|
||||
|
||||
# compute spatial filter
|
||||
n_orient = 3 if is_free_ori else 1
|
||||
W, max_power_ori = _compute_beamformer(
|
||||
G,
|
||||
Cm,
|
||||
reg,
|
||||
n_orient,
|
||||
weight_norm,
|
||||
pick_ori,
|
||||
reduce_rank,
|
||||
rank_int,
|
||||
inversion=inversion,
|
||||
nn=nn,
|
||||
orient_std=orient_std,
|
||||
whitener=whitener,
|
||||
)
|
||||
|
||||
# get src type to store with filters for _make_stc
|
||||
src_type = _get_src_type(forward["src"], vertno)
|
||||
|
||||
# get subject to store with filters
|
||||
subject_from = _subject_from_forward(forward)
|
||||
|
||||
# Is the computed beamformer a scalar or vector beamformer?
|
||||
is_free_ori = is_free_ori if pick_ori in [None, "vector"] else False
|
||||
is_ssp = bool(info["projs"])
|
||||
|
||||
filters = Beamformer(
|
||||
kind="LCMV",
|
||||
weights=W,
|
||||
data_cov=data_cov,
|
||||
noise_cov=noise_cov,
|
||||
whitener=whitener,
|
||||
weight_norm=weight_norm,
|
||||
pick_ori=pick_ori,
|
||||
ch_names=ch_names,
|
||||
proj=proj,
|
||||
is_ssp=is_ssp,
|
||||
vertices=vertno,
|
||||
is_free_ori=is_free_ori,
|
||||
n_sources=forward["nsource"],
|
||||
src_type=src_type,
|
||||
source_nn=forward["source_nn"].copy(),
|
||||
subject=subject_from,
|
||||
rank=rank_int,
|
||||
max_power_ori=max_power_ori,
|
||||
inversion=inversion,
|
||||
)
|
||||
|
||||
return filters
|
||||
|
||||
|
||||
def _apply_lcmv(data, filters, info, tmin):
|
||||
"""Apply LCMV spatial filter to data for source reconstruction."""
|
||||
if isinstance(data, np.ndarray) and data.ndim == 2:
|
||||
data = [data]
|
||||
return_single = True
|
||||
else:
|
||||
return_single = False
|
||||
|
||||
W = filters["weights"]
|
||||
|
||||
for i, M in enumerate(data):
|
||||
if len(M) != len(filters["ch_names"]):
|
||||
raise ValueError("data and picks must have the same length")
|
||||
|
||||
if not return_single:
|
||||
logger.info(f"Processing epoch : {i + 1}")
|
||||
|
||||
M = _proj_whiten_data(M, info["projs"], filters)
|
||||
|
||||
# project to source space using beamformer weights
|
||||
vector = False
|
||||
if filters["is_free_ori"]:
|
||||
sol = np.dot(W, M)
|
||||
if filters["pick_ori"] == "vector":
|
||||
vector = True
|
||||
else:
|
||||
logger.info("combining the current components...")
|
||||
sol = combine_xyz(sol)
|
||||
else:
|
||||
# Linear inverse: do computation here or delayed
|
||||
if M.shape[0] < W.shape[0] and filters["pick_ori"] != "max-power":
|
||||
sol = (W, M)
|
||||
else:
|
||||
sol = np.dot(W, M)
|
||||
|
||||
tstep = 1.0 / info["sfreq"]
|
||||
|
||||
# compatibility with 0.16, add src_type as None if not present:
|
||||
filters, warn_text = _check_src_type(filters)
|
||||
|
||||
yield _make_stc(
|
||||
sol,
|
||||
vertices=filters["vertices"],
|
||||
tmin=tmin,
|
||||
tstep=tstep,
|
||||
subject=filters["subject"],
|
||||
vector=vector,
|
||||
source_nn=filters["source_nn"],
|
||||
src_type=filters["src_type"],
|
||||
warn_text=warn_text,
|
||||
)
|
||||
|
||||
logger.info("[done]")
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_lcmv(evoked, filters, *, verbose=None):
|
||||
"""Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights.
|
||||
|
||||
Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights
|
||||
on evoked data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
evoked : Evoked
|
||||
Evoked data to invert.
|
||||
filters : instance of Beamformer
|
||||
LCMV spatial filter (beamformer weights).
|
||||
Filter weights returned from :func:`make_lcmv`.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc : SourceEstimate | VolSourceEstimate | VectorSourceEstimate
|
||||
Source time courses.
|
||||
|
||||
See Also
|
||||
--------
|
||||
make_lcmv, apply_lcmv_raw, apply_lcmv_epochs, apply_lcmv_cov
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.18
|
||||
"""
|
||||
_check_reference(evoked)
|
||||
|
||||
info = evoked.info
|
||||
data = evoked.data
|
||||
tmin = evoked.times[0]
|
||||
|
||||
sel = _check_channels_spatial_filter(evoked.ch_names, filters)
|
||||
data = data[sel]
|
||||
|
||||
stc = _apply_lcmv(data=data, filters=filters, info=info, tmin=tmin)
|
||||
|
||||
return next(stc)
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_lcmv_epochs(epochs, filters, *, return_generator=False, verbose=None):
|
||||
"""Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights.
|
||||
|
||||
Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights
|
||||
on single trial data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
epochs : Epochs
|
||||
Single trial epochs.
|
||||
filters : instance of Beamformer
|
||||
LCMV spatial filter (beamformer weights)
|
||||
Filter weights returned from :func:`make_lcmv`.
|
||||
return_generator : bool
|
||||
Return a generator object instead of a list. This allows iterating
|
||||
over the stcs without having to keep them all in memory.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc: list | generator of (SourceEstimate | VolSourceEstimate)
|
||||
The source estimates for all epochs.
|
||||
|
||||
See Also
|
||||
--------
|
||||
make_lcmv, apply_lcmv_raw, apply_lcmv, apply_lcmv_cov
|
||||
"""
|
||||
_check_reference(epochs)
|
||||
|
||||
info = epochs.info
|
||||
tmin = epochs.times[0]
|
||||
|
||||
sel = _check_channels_spatial_filter(epochs.ch_names, filters)
|
||||
data = epochs.get_data(sel)
|
||||
stcs = _apply_lcmv(data=data, filters=filters, info=info, tmin=tmin)
|
||||
|
||||
if not return_generator:
|
||||
stcs = [s for s in stcs]
|
||||
|
||||
return stcs
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_lcmv_raw(raw, filters, start=None, stop=None, *, verbose=None):
|
||||
"""Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights.
|
||||
|
||||
Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights
|
||||
on raw data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
raw : mne.io.Raw
|
||||
Raw data to invert.
|
||||
filters : instance of Beamformer
|
||||
LCMV spatial filter (beamformer weights).
|
||||
Filter weights returned from :func:`make_lcmv`.
|
||||
start : int
|
||||
Index of first time sample (index not time is seconds).
|
||||
stop : int
|
||||
Index of first time sample not to include (index not time is seconds).
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc : SourceEstimate | VolSourceEstimate
|
||||
Source time courses.
|
||||
|
||||
See Also
|
||||
--------
|
||||
make_lcmv, apply_lcmv_epochs, apply_lcmv, apply_lcmv_cov
|
||||
"""
|
||||
_check_reference(raw)
|
||||
|
||||
info = raw.info
|
||||
|
||||
sel = _check_channels_spatial_filter(raw.ch_names, filters)
|
||||
data, times = raw[sel, start:stop]
|
||||
tmin = times[0]
|
||||
|
||||
stc = _apply_lcmv(data=data, filters=filters, info=info, tmin=tmin)
|
||||
|
||||
return next(stc)
|
||||
|
||||
|
||||
@verbose
|
||||
def apply_lcmv_cov(data_cov, filters, verbose=None):
|
||||
"""Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights.
|
||||
|
||||
Apply Linearly Constrained Minimum Variance (LCMV) beamformer weights
|
||||
to a data covariance matrix to estimate source power.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data_cov : instance of Covariance
|
||||
Data covariance matrix.
|
||||
filters : instance of Beamformer
|
||||
LCMV spatial filter (beamformer weights).
|
||||
Filter weights returned from :func:`make_lcmv`.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
stc : SourceEstimate | VolSourceEstimate
|
||||
Source power.
|
||||
|
||||
See Also
|
||||
--------
|
||||
make_lcmv, apply_lcmv, apply_lcmv_epochs, apply_lcmv_raw
|
||||
"""
|
||||
sel = _check_channels_spatial_filter(data_cov.ch_names, filters)
|
||||
sel_names = [data_cov.ch_names[ii] for ii in sel]
|
||||
data_cov = pick_channels_cov(data_cov, sel_names)
|
||||
|
||||
n_orient = filters["weights"].shape[0] // filters["n_sources"]
|
||||
# Need to project and whiten along both dimensions
|
||||
data = _proj_whiten_data(data_cov["data"].T, data_cov["projs"], filters)
|
||||
data = _proj_whiten_data(data.T, data_cov["projs"], filters)
|
||||
del data_cov
|
||||
source_power = _compute_power(data, filters["weights"], n_orient)
|
||||
|
||||
# compatibility with 0.16, add src_type as None if not present:
|
||||
filters, warn_text = _check_src_type(filters)
|
||||
|
||||
return _make_stc(
|
||||
source_power,
|
||||
vertices=filters["vertices"],
|
||||
src_type=filters["src_type"],
|
||||
tmin=0.0,
|
||||
tstep=1.0,
|
||||
subject=filters["subject"],
|
||||
source_nn=filters["source_nn"],
|
||||
warn_text=warn_text,
|
||||
)
|
||||
315
mne/beamformer/_rap_music.py
Normal file
315
mne/beamformer/_rap_music.py
Normal file
@@ -0,0 +1,315 @@
|
||||
"""Compute a Recursively Applied and Projected MUltiple Signal Classification (RAP-MUSIC).""" # noqa
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
from scipy import linalg
|
||||
|
||||
from .._fiff.pick import pick_channels_forward, pick_info
|
||||
from ..fixes import _safe_svd
|
||||
from ..forward import convert_forward_solution, is_fixed_orient
|
||||
from ..inverse_sparse.mxne_inverse import _make_dipoles_sparse
|
||||
from ..minimum_norm.inverse import _log_exp_var
|
||||
from ..utils import _check_info_inv, fill_doc, logger, verbose
|
||||
from ._compute_beamformer import _prepare_beamformer_input
|
||||
|
||||
|
||||
@fill_doc
|
||||
def _apply_rap_music(
|
||||
data, info, times, forward, noise_cov, n_dipoles=2, picks=None, use_trap=False
|
||||
):
|
||||
"""RAP-MUSIC or TRAP-MUSIC for evoked data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : array, shape (n_channels, n_times)
|
||||
Evoked data.
|
||||
%(info_not_none)s
|
||||
times : array
|
||||
Times.
|
||||
forward : instance of Forward
|
||||
Forward operator.
|
||||
noise_cov : instance of Covariance
|
||||
The noise covariance.
|
||||
n_dipoles : int
|
||||
The number of dipoles to estimate. The default value is 2.
|
||||
picks : list of int
|
||||
Caller ensures this is a list of int.
|
||||
use_trap : bool
|
||||
Use the TRAP-MUSIC variant if True (default False).
|
||||
|
||||
Returns
|
||||
-------
|
||||
dipoles : list of instances of Dipole
|
||||
The dipole fits.
|
||||
explained_data : array | None
|
||||
Data explained by the dipoles using a least square fitting with the
|
||||
selected active dipoles and their estimated orientation.
|
||||
"""
|
||||
info = pick_info(info, picks)
|
||||
del picks
|
||||
# things are much simpler if we avoid surface orientation
|
||||
align = forward["source_nn"].copy()
|
||||
if forward["surf_ori"] and not is_fixed_orient(forward):
|
||||
forward = convert_forward_solution(forward, surf_ori=False)
|
||||
is_free_ori, info, _, _, G, whitener, _, _ = _prepare_beamformer_input(
|
||||
info, forward, noise_cov=noise_cov, rank=None
|
||||
)
|
||||
forward = pick_channels_forward(forward, info["ch_names"], ordered=True)
|
||||
del info
|
||||
|
||||
# whiten the data (leadfield already whitened)
|
||||
M = np.dot(whitener, data)
|
||||
del data
|
||||
|
||||
_, eig_vectors = linalg.eigh(np.dot(M, M.T))
|
||||
phi_sig = eig_vectors[:, -n_dipoles:]
|
||||
|
||||
n_orient = 3 if is_free_ori else 1
|
||||
G.shape = (G.shape[0], -1, n_orient)
|
||||
gain = forward["sol"]["data"].copy()
|
||||
gain.shape = G.shape
|
||||
n_channels = G.shape[0]
|
||||
A = np.empty((n_channels, n_dipoles))
|
||||
gain_dip = np.empty((n_channels, n_dipoles))
|
||||
oris = np.empty((n_dipoles, 3))
|
||||
poss = np.empty((n_dipoles, 3))
|
||||
|
||||
G_proj = G.copy()
|
||||
phi_sig_proj = phi_sig.copy()
|
||||
|
||||
idxs = list()
|
||||
for k in range(n_dipoles):
|
||||
subcorr_max = -1.0
|
||||
source_idx, source_ori, source_pos = 0, [0, 0, 0], [0, 0, 0]
|
||||
for i_source in range(G.shape[1]):
|
||||
Gk = G_proj[:, i_source]
|
||||
subcorr, ori = _compute_subcorr(Gk, phi_sig_proj)
|
||||
if subcorr > subcorr_max:
|
||||
subcorr_max = subcorr
|
||||
source_idx = i_source
|
||||
source_ori = ori
|
||||
source_pos = forward["source_rr"][i_source]
|
||||
if n_orient == 3 and align is not None:
|
||||
surf_normal = forward["source_nn"][3 * i_source + 2]
|
||||
# make sure ori is aligned to the surface orientation
|
||||
source_ori *= np.sign(source_ori @ surf_normal) or 1.0
|
||||
if n_orient == 1:
|
||||
source_ori = forward["source_nn"][i_source]
|
||||
|
||||
idxs.append(source_idx)
|
||||
if n_orient == 3:
|
||||
Ak = np.dot(G[:, source_idx], source_ori)
|
||||
else:
|
||||
Ak = G[:, source_idx, 0]
|
||||
A[:, k] = Ak
|
||||
oris[k] = source_ori
|
||||
poss[k] = source_pos
|
||||
|
||||
logger.info(f"source {k + 1} found: p = {source_idx}")
|
||||
if n_orient == 3:
|
||||
logger.info("ori = {} {} {}".format(*tuple(oris[k])))
|
||||
|
||||
projection = _compute_proj(A[:, : k + 1])
|
||||
G_proj = np.einsum("ab,bso->aso", projection, G)
|
||||
phi_sig_proj = np.dot(projection, phi_sig)
|
||||
if use_trap:
|
||||
phi_sig_proj = phi_sig_proj[:, -(n_dipoles - k) :]
|
||||
del G, G_proj
|
||||
|
||||
sol = linalg.lstsq(A, M)[0]
|
||||
if n_orient == 3:
|
||||
X = sol[:, np.newaxis] * oris[:, :, np.newaxis]
|
||||
X.shape = (-1, len(times))
|
||||
else:
|
||||
X = sol
|
||||
|
||||
gain_active = gain[:, idxs]
|
||||
if n_orient == 3:
|
||||
gain_dip = (oris * gain_active).sum(-1)
|
||||
idxs = np.array(idxs)
|
||||
active_set = np.array([[3 * idxs, 3 * idxs + 1, 3 * idxs + 2]]).T.ravel()
|
||||
else:
|
||||
gain_dip = gain_active[:, :, 0]
|
||||
active_set = idxs
|
||||
gain_active = whitener @ gain_active.reshape(gain.shape[0], -1)
|
||||
assert gain_active.shape == (n_channels, X.shape[0])
|
||||
|
||||
explained_data = gain_dip @ sol
|
||||
M_estimate = whitener @ explained_data
|
||||
_log_exp_var(M, M_estimate)
|
||||
tstep = np.median(np.diff(times)) if len(times) > 1 else 1.0
|
||||
dipoles = _make_dipoles_sparse(
|
||||
X, active_set, forward, times[0], tstep, M, gain_active, active_is_idx=True
|
||||
)
|
||||
for dipole, ori in zip(dipoles, oris):
|
||||
signs = np.sign((dipole.ori * ori).sum(-1, keepdims=True))
|
||||
dipole.ori *= signs
|
||||
dipole.amplitude *= signs[:, 0]
|
||||
logger.info("[done]")
|
||||
return dipoles, explained_data
|
||||
|
||||
|
||||
def _compute_subcorr(G, phi_sig):
|
||||
"""Compute the subspace correlation."""
|
||||
Ug, Sg, Vg = _safe_svd(G, full_matrices=False)
|
||||
# Now we look at the actual rank of the forward fields
|
||||
# in G and handle the fact that it might be rank defficient
|
||||
# eg. when using MEG and a sphere model for which the
|
||||
# radial component will be truly 0.
|
||||
rank = np.sum(Sg > (Sg[0] * 1e-6))
|
||||
if rank == 0:
|
||||
return 0, np.zeros(len(G))
|
||||
rank = max(rank, 2) # rank cannot be 1
|
||||
Ug, Sg, Vg = Ug[:, :rank], Sg[:rank], Vg[:rank]
|
||||
tmp = np.dot(Ug.T.conjugate(), phi_sig)
|
||||
Uc, Sc, _ = _safe_svd(tmp, full_matrices=False)
|
||||
X = np.dot(Vg.T / Sg[None, :], Uc[:, 0]) # subcorr
|
||||
return Sc[0], X / np.linalg.norm(X)
|
||||
|
||||
|
||||
def _compute_proj(A):
|
||||
"""Compute the orthogonal projection operation for a manifold vector A."""
|
||||
U, _, _ = _safe_svd(A, full_matrices=False)
|
||||
return np.identity(A.shape[0]) - np.dot(U, U.T.conjugate())
|
||||
|
||||
|
||||
def _rap_music(evoked, forward, noise_cov, n_dipoles, return_residual, use_trap):
|
||||
"""RAP-/TRAP-MUSIC implementation."""
|
||||
info = evoked.info
|
||||
data = evoked.data
|
||||
times = evoked.times
|
||||
|
||||
picks = _check_info_inv(info, forward, data_cov=None, noise_cov=noise_cov)
|
||||
|
||||
data = data[picks]
|
||||
|
||||
dipoles, explained_data = _apply_rap_music(
|
||||
data, info, times, forward, noise_cov, n_dipoles, picks, use_trap
|
||||
)
|
||||
|
||||
if return_residual:
|
||||
residual = evoked.copy().pick([info["ch_names"][p] for p in picks])
|
||||
residual.data -= explained_data
|
||||
active_projs = [p for p in residual.info["projs"] if p["active"]]
|
||||
for p in active_projs:
|
||||
p["active"] = False
|
||||
residual.add_proj(active_projs, remove_existing=True)
|
||||
residual.apply_proj()
|
||||
return dipoles, residual
|
||||
else:
|
||||
return dipoles
|
||||
|
||||
|
||||
@verbose
|
||||
def rap_music(
|
||||
evoked,
|
||||
forward,
|
||||
noise_cov,
|
||||
n_dipoles=5,
|
||||
return_residual=False,
|
||||
*,
|
||||
verbose=None,
|
||||
):
|
||||
"""RAP-MUSIC source localization method.
|
||||
|
||||
Compute Recursively Applied and Projected MUltiple SIgnal Classification
|
||||
(RAP-MUSIC) :footcite:`MosherLeahy1999,MosherLeahy1996` on evoked data.
|
||||
|
||||
.. note:: The goodness of fit (GOF) of all the returned dipoles is the
|
||||
same and corresponds to the GOF of the full set of dipoles.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
evoked : instance of Evoked
|
||||
Evoked data to localize.
|
||||
forward : instance of Forward
|
||||
Forward operator.
|
||||
noise_cov : instance of Covariance
|
||||
The noise covariance.
|
||||
n_dipoles : int
|
||||
The number of dipoles to look for. The default value is 5.
|
||||
return_residual : bool
|
||||
If True, the residual is returned as an Evoked instance.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
dipoles : list of instance of Dipole
|
||||
The dipole fits.
|
||||
residual : instance of Evoked
|
||||
The residual a.k.a. data not explained by the dipoles.
|
||||
Only returned if return_residual is True.
|
||||
|
||||
See Also
|
||||
--------
|
||||
mne.fit_dipole
|
||||
mne.beamformer.trap_music
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.9.0
|
||||
|
||||
References
|
||||
----------
|
||||
.. footbibliography::
|
||||
"""
|
||||
return _rap_music(evoked, forward, noise_cov, n_dipoles, return_residual, False)
|
||||
|
||||
|
||||
@verbose
|
||||
def trap_music(
|
||||
evoked,
|
||||
forward,
|
||||
noise_cov,
|
||||
n_dipoles=5,
|
||||
return_residual=False,
|
||||
*,
|
||||
verbose=None,
|
||||
):
|
||||
"""TRAP-MUSIC source localization method.
|
||||
|
||||
Compute Truncated Recursively Applied and Projected MUltiple SIgnal Classification
|
||||
(TRAP-MUSIC) :footcite:`Makela2018` on evoked data.
|
||||
|
||||
.. note:: The goodness of fit (GOF) of all the returned dipoles is the
|
||||
same and corresponds to the GOF of the full set of dipoles.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
evoked : instance of Evoked
|
||||
Evoked data to localize.
|
||||
forward : instance of Forward
|
||||
Forward operator.
|
||||
noise_cov : instance of Covariance
|
||||
The noise covariance.
|
||||
n_dipoles : int
|
||||
The number of dipoles to look for. The default value is 5.
|
||||
return_residual : bool
|
||||
If True, the residual is returned as an Evoked instance.
|
||||
%(verbose)s
|
||||
|
||||
Returns
|
||||
-------
|
||||
dipoles : list of instance of Dipole
|
||||
The dipole fits.
|
||||
residual : instance of Evoked
|
||||
The residual a.k.a. data not explained by the dipoles.
|
||||
Only returned if return_residual is True.
|
||||
|
||||
See Also
|
||||
--------
|
||||
mne.fit_dipole
|
||||
mne.beamformer.rap_music
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 1.4
|
||||
|
||||
References
|
||||
----------
|
||||
.. footbibliography::
|
||||
"""
|
||||
return _rap_music(evoked, forward, noise_cov, n_dipoles, return_residual, True)
|
||||
86
mne/beamformer/resolution_matrix.py
Normal file
86
mne/beamformer/resolution_matrix.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""Compute resolution matrix for beamformers."""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .._fiff.pick import pick_channels, pick_channels_forward, pick_info
|
||||
from ..evoked import EvokedArray
|
||||
from ..utils import fill_doc, logger
|
||||
from ._lcmv import apply_lcmv
|
||||
|
||||
|
||||
@fill_doc
|
||||
def make_lcmv_resolution_matrix(filters, forward, info):
|
||||
"""Compute resolution matrix for LCMV beamformer.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
filters : instance of Beamformer
|
||||
Dictionary containing filter weights from LCMV beamformer
|
||||
(see mne.beamformer.make_lcmv).
|
||||
forward : instance of Forward
|
||||
Forward Solution with leadfield matrix.
|
||||
%(info_not_none)s Used to compute LCMV filters.
|
||||
|
||||
Returns
|
||||
-------
|
||||
resmat : array, shape (n_dipoles_lcmv, n_dipoles_fwd)
|
||||
Resolution matrix (filter matrix multiplied to leadfield from
|
||||
forward solution). Numbers of rows (n_dipoles_lcmv) and columns
|
||||
(n_dipoles_fwd) may differ by a factor depending on orientation
|
||||
constraints of filter and forward solution, respectively (e.g. factor 3
|
||||
for free dipole orientation versus factor 1 for scalar beamformers).
|
||||
"""
|
||||
# don't include bad channels from noise covariance matrix
|
||||
bads_filt = filters["noise_cov"]["bads"]
|
||||
ch_names = filters["noise_cov"]["names"]
|
||||
|
||||
# good channels
|
||||
ch_names = [c for c in ch_names if (c not in bads_filt)]
|
||||
|
||||
# adjust channels in forward solution
|
||||
forward = pick_channels_forward(forward, ch_names, ordered=True)
|
||||
|
||||
# get leadfield matrix from forward solution
|
||||
leadfield = forward["sol"]["data"]
|
||||
|
||||
# get the filter weights for beamformer as matrix
|
||||
filtmat = _get_matrix_from_lcmv(filters, forward, info)
|
||||
|
||||
# compute resolution matrix
|
||||
resmat = filtmat.dot(leadfield)
|
||||
|
||||
logger.info(f"Dimensions of LCMV resolution matrix: {resmat.shape}.")
|
||||
|
||||
return resmat
|
||||
|
||||
|
||||
def _get_matrix_from_lcmv(filters, forward, info, verbose=None):
|
||||
"""Get inverse matrix for LCMV beamformer.
|
||||
|
||||
Returns
|
||||
-------
|
||||
invmat : array, shape (n_dipoles, n_channels)
|
||||
Inverse matrix associated with LCMV beamformer filters.
|
||||
"""
|
||||
# number of channels for identity matrix
|
||||
info = pick_info(info, pick_channels(info["ch_names"], filters["ch_names"]))
|
||||
n_chs = len(info["ch_names"])
|
||||
|
||||
# create identity matrix as input for inverse operator
|
||||
# set elements to zero for non-selected channels
|
||||
id_mat = np.eye(n_chs)
|
||||
|
||||
# convert identity matrix to evoked data type (pretending it's an epochs
|
||||
evo_ident = EvokedArray(id_mat, info=info, tmin=0.0)
|
||||
|
||||
# apply beamformer to identity matrix
|
||||
stc_lcmv = apply_lcmv(evo_ident, filters, verbose=verbose)
|
||||
|
||||
# turn source estimate into numpsy array
|
||||
invmat = stc_lcmv.data
|
||||
|
||||
return invmat
|
||||
2540
mne/bem.py
Normal file
2540
mne/bem.py
Normal file
File diff suppressed because it is too large
Load Diff
12
mne/channels/__init__.py
Normal file
12
mne/channels/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
||||
"""Module dedicated to manipulation of channels.
|
||||
|
||||
Can be used for setting of sensor locations used for processing and plotting.
|
||||
"""
|
||||
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import lazy_loader as lazy
|
||||
|
||||
(__getattr__, __dir__, __all__) = lazy.attach_stub(__name__, __file__)
|
||||
78
mne/channels/__init__.pyi
Normal file
78
mne/channels/__init__.pyi
Normal file
@@ -0,0 +1,78 @@
|
||||
__all__ = [
|
||||
"DigMontage",
|
||||
"Layout",
|
||||
"_EEG_SELECTIONS",
|
||||
"_SELECTIONS",
|
||||
"_divide_to_regions",
|
||||
"combine_channels",
|
||||
"compute_dev_head_t",
|
||||
"compute_native_head_t",
|
||||
"equalize_channels",
|
||||
"find_ch_adjacency",
|
||||
"find_layout",
|
||||
"fix_mag_coil_types",
|
||||
"generate_2d_layout",
|
||||
"get_builtin_ch_adjacencies",
|
||||
"get_builtin_montages",
|
||||
"make_1020_channel_selections",
|
||||
"make_dig_montage",
|
||||
"make_eeg_layout",
|
||||
"make_grid_layout",
|
||||
"make_standard_montage",
|
||||
"read_ch_adjacency",
|
||||
"read_custom_montage",
|
||||
"read_dig_captrak",
|
||||
"read_dig_dat",
|
||||
"read_dig_egi",
|
||||
"read_dig_fif",
|
||||
"read_dig_hpts",
|
||||
"read_dig_localite",
|
||||
"read_dig_polhemus_isotrak",
|
||||
"read_layout",
|
||||
"read_polhemus_fastscan",
|
||||
"read_vectorview_selection",
|
||||
"rename_channels",
|
||||
"transform_to_head",
|
||||
"unify_bad_channels",
|
||||
]
|
||||
from .channels import (
|
||||
_EEG_SELECTIONS,
|
||||
_SELECTIONS,
|
||||
_divide_to_regions,
|
||||
combine_channels,
|
||||
equalize_channels,
|
||||
find_ch_adjacency,
|
||||
fix_mag_coil_types,
|
||||
get_builtin_ch_adjacencies,
|
||||
make_1020_channel_selections,
|
||||
read_ch_adjacency,
|
||||
read_vectorview_selection,
|
||||
rename_channels,
|
||||
unify_bad_channels,
|
||||
)
|
||||
from .layout import (
|
||||
Layout,
|
||||
find_layout,
|
||||
generate_2d_layout,
|
||||
make_eeg_layout,
|
||||
make_grid_layout,
|
||||
read_layout,
|
||||
)
|
||||
from .montage import (
|
||||
DigMontage,
|
||||
compute_dev_head_t,
|
||||
compute_native_head_t,
|
||||
get_builtin_montages,
|
||||
make_dig_montage,
|
||||
make_standard_montage,
|
||||
read_custom_montage,
|
||||
read_dig_captrak,
|
||||
read_dig_dat,
|
||||
read_dig_egi,
|
||||
read_dig_fif,
|
||||
read_dig_hpts,
|
||||
read_dig_localite,
|
||||
read_dig_polhemus_isotrak,
|
||||
read_polhemus_fastscan,
|
||||
transform_to_head,
|
||||
)
|
||||
96
mne/channels/_dig_montage_utils.py
Normal file
96
mne/channels/_dig_montage_utils.py
Normal file
@@ -0,0 +1,96 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..utils import Bunch, _check_fname, _soft_import, warn
|
||||
|
||||
|
||||
def _read_dig_montage_egi(
|
||||
fname,
|
||||
_scaling,
|
||||
_all_data_kwargs_are_none,
|
||||
):
|
||||
if not _all_data_kwargs_are_none:
|
||||
raise ValueError(
|
||||
"hsp, hpi, elp, point_names, fif must all be None if egi is not None"
|
||||
)
|
||||
_check_fname(fname, overwrite="read", must_exist=True)
|
||||
defusedxml = _soft_import("defusedxml", "reading EGI montages")
|
||||
root = defusedxml.ElementTree.parse(fname).getroot()
|
||||
ns = root.tag[root.tag.index("{") : root.tag.index("}") + 1]
|
||||
sensors = root.find(f"{ns}sensorLayout/{ns}sensors")
|
||||
fids = dict()
|
||||
dig_ch_pos = dict()
|
||||
|
||||
fid_name_map = {
|
||||
"Nasion": "nasion",
|
||||
"Right periauricular point": "rpa",
|
||||
"Left periauricular point": "lpa",
|
||||
}
|
||||
|
||||
for s in sensors:
|
||||
name, number, kind = s[0].text, int(s[1].text), int(s[2].text)
|
||||
coordinates = np.array([float(s[3].text), float(s[4].text), float(s[5].text)])
|
||||
|
||||
coordinates *= _scaling
|
||||
|
||||
# EEG Channels
|
||||
if kind == 0:
|
||||
dig_ch_pos[f"EEG {number:03d}"] = coordinates
|
||||
# Reference
|
||||
elif kind == 1:
|
||||
dig_ch_pos[f"EEG {len(dig_ch_pos) + 1:03d}"] = coordinates
|
||||
# Fiducials
|
||||
elif kind == 2:
|
||||
fid_name = fid_name_map[name]
|
||||
fids[fid_name] = coordinates
|
||||
# Unknown
|
||||
else:
|
||||
warn(
|
||||
f"Unknown sensor type {kind} detected. Skipping sensor..."
|
||||
"Proceed with caution!"
|
||||
)
|
||||
|
||||
return Bunch(
|
||||
# EGI stuff
|
||||
nasion=fids["nasion"],
|
||||
lpa=fids["lpa"],
|
||||
rpa=fids["rpa"],
|
||||
ch_pos=dig_ch_pos,
|
||||
coord_frame="unknown",
|
||||
)
|
||||
|
||||
|
||||
def _parse_brainvision_dig_montage(fname, scale):
|
||||
FID_NAME_MAP = {"Nasion": "nasion", "RPA": "rpa", "LPA": "lpa"}
|
||||
defusedxml = _soft_import("defusedxml", "reading BrainVision montages")
|
||||
root = defusedxml.ElementTree.parse(fname).getroot()
|
||||
sensors = root.find("CapTrakElectrodeList")
|
||||
|
||||
fids, dig_ch_pos = dict(), dict()
|
||||
|
||||
for s in sensors:
|
||||
name = s.find("Name").text
|
||||
|
||||
is_fid = name in FID_NAME_MAP
|
||||
coordinates = scale * np.array(
|
||||
[float(s.find("X").text), float(s.find("Y").text), float(s.find("Z").text)]
|
||||
)
|
||||
|
||||
# Fiducials
|
||||
if is_fid:
|
||||
fids[FID_NAME_MAP[name]] = coordinates
|
||||
# EEG Channels
|
||||
else:
|
||||
dig_ch_pos[name] = coordinates
|
||||
|
||||
return dict(
|
||||
# BVCT stuff
|
||||
nasion=fids["nasion"],
|
||||
lpa=fids["lpa"],
|
||||
rpa=fids["rpa"],
|
||||
ch_pos=dig_ch_pos,
|
||||
coord_frame="unknown",
|
||||
)
|
||||
421
mne/channels/_standard_montage_utils.py
Normal file
421
mne/channels/_standard_montage_utils.py
Normal file
@@ -0,0 +1,421 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
import csv
|
||||
import os.path as op
|
||||
from collections import OrderedDict
|
||||
from functools import partial
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .._freesurfer import get_mni_fiducials
|
||||
from ..transforms import _sph_to_cart
|
||||
from ..utils import _pl, _soft_import, warn
|
||||
from . import __file__ as _CHANNELS_INIT_FILE
|
||||
from .montage import make_dig_montage
|
||||
|
||||
MONTAGE_PATH = op.join(op.dirname(_CHANNELS_INIT_FILE), "data", "montages")
|
||||
|
||||
_str = "U100"
|
||||
|
||||
|
||||
# In standard_1020, T9=LPA, T10=RPA, Nasion is the same as Iz with a
|
||||
# sign-flipped Y value
|
||||
|
||||
|
||||
def _egi_256(head_size):
|
||||
fname = op.join(MONTAGE_PATH, "EGI_256.csd")
|
||||
montage = _read_csd(fname, head_size)
|
||||
ch_pos = montage._get_ch_pos()
|
||||
|
||||
# For this cap, the Nasion is the frontmost electrode,
|
||||
# LPA/RPA we approximate by putting 75% of the way (toward the front)
|
||||
# between the two electrodes that are halfway down the ear holes
|
||||
nasion = ch_pos["E31"]
|
||||
lpa = 0.75 * ch_pos["E67"] + 0.25 * ch_pos["E94"]
|
||||
rpa = 0.75 * ch_pos["E219"] + 0.25 * ch_pos["E190"]
|
||||
|
||||
fids_montage = make_dig_montage(
|
||||
coord_frame="unknown",
|
||||
nasion=nasion,
|
||||
lpa=lpa,
|
||||
rpa=rpa,
|
||||
)
|
||||
|
||||
montage += fids_montage # add fiducials to montage
|
||||
|
||||
return montage
|
||||
|
||||
|
||||
def _easycap(basename, head_size):
|
||||
fname = op.join(MONTAGE_PATH, basename)
|
||||
montage = _read_theta_phi_in_degrees(fname, head_size, add_fiducials=True)
|
||||
return montage
|
||||
|
||||
|
||||
def _hydrocel(basename, head_size):
|
||||
fname = op.join(MONTAGE_PATH, basename)
|
||||
return _read_sfp(fname, head_size)
|
||||
|
||||
|
||||
def _str_names(ch_names):
|
||||
return [str(ch_name) for ch_name in ch_names]
|
||||
|
||||
|
||||
def _safe_np_loadtxt(fname, **kwargs):
|
||||
out = np.genfromtxt(fname, **kwargs)
|
||||
ch_names = _str_names(out["f0"])
|
||||
others = tuple(out[f"f{ii}"] for ii in range(1, len(out.dtype.fields)))
|
||||
return (ch_names,) + others
|
||||
|
||||
|
||||
def _biosemi(basename, head_size):
|
||||
fname = op.join(MONTAGE_PATH, basename)
|
||||
fid_names = ("Nz", "LPA", "RPA")
|
||||
return _read_theta_phi_in_degrees(fname, head_size, fid_names)
|
||||
|
||||
|
||||
def _mgh_or_standard(basename, head_size, coord_frame="unknown"):
|
||||
fid_names = ("Nz", "LPA", "RPA")
|
||||
fname = op.join(MONTAGE_PATH, basename)
|
||||
|
||||
ch_names_, pos = [], []
|
||||
with open(fname) as fid:
|
||||
# Ignore units as we will scale later using the norms anyway
|
||||
for line in fid:
|
||||
if "Positions\n" in line:
|
||||
break
|
||||
pos = []
|
||||
for line in fid:
|
||||
if "Labels\n" in line:
|
||||
break
|
||||
pos.append(list(map(float, line.split())))
|
||||
for line in fid:
|
||||
if not line or not set(line) - {" "}:
|
||||
break
|
||||
ch_names_.append(line.strip(" ").strip("\n"))
|
||||
|
||||
pos = np.array(pos) / 1000.0
|
||||
ch_pos = _check_dupes_odict(ch_names_, pos)
|
||||
nasion, lpa, rpa = (ch_pos.pop(n) for n in fid_names)
|
||||
if head_size is None:
|
||||
scale = 1.0
|
||||
else:
|
||||
scale = head_size / np.median(np.linalg.norm(pos, axis=1))
|
||||
for value in ch_pos.values():
|
||||
value *= scale
|
||||
# if we are in MRI/MNI coordinates, we need to replace nasion, LPA, and RPA
|
||||
# with those of fsaverage for ``trans='fsaverage'`` to work
|
||||
if coord_frame == "mri":
|
||||
lpa, nasion, rpa = (x["r"].copy() for x in get_mni_fiducials("fsaverage"))
|
||||
nasion *= scale
|
||||
lpa *= scale
|
||||
rpa *= scale
|
||||
|
||||
return make_dig_montage(
|
||||
ch_pos=ch_pos, coord_frame=coord_frame, nasion=nasion, lpa=lpa, rpa=rpa
|
||||
)
|
||||
|
||||
|
||||
standard_montage_look_up_table = {
|
||||
"EGI_256": _egi_256,
|
||||
"easycap-M1": partial(_easycap, basename="easycap-M1.txt"),
|
||||
"easycap-M10": partial(_easycap, basename="easycap-M10.txt"),
|
||||
"easycap-M43": partial(_easycap, basename="easycap-M43.txt"),
|
||||
"GSN-HydroCel-128": partial(_hydrocel, basename="GSN-HydroCel-128.sfp"),
|
||||
"GSN-HydroCel-129": partial(_hydrocel, basename="GSN-HydroCel-129.sfp"),
|
||||
"GSN-HydroCel-256": partial(_hydrocel, basename="GSN-HydroCel-256.sfp"),
|
||||
"GSN-HydroCel-257": partial(_hydrocel, basename="GSN-HydroCel-257.sfp"),
|
||||
"GSN-HydroCel-32": partial(_hydrocel, basename="GSN-HydroCel-32.sfp"),
|
||||
"GSN-HydroCel-64_1.0": partial(_hydrocel, basename="GSN-HydroCel-64_1.0.sfp"),
|
||||
"GSN-HydroCel-65_1.0": partial(_hydrocel, basename="GSN-HydroCel-65_1.0.sfp"),
|
||||
"biosemi128": partial(_biosemi, basename="biosemi128.txt"),
|
||||
"biosemi16": partial(_biosemi, basename="biosemi16.txt"),
|
||||
"biosemi160": partial(_biosemi, basename="biosemi160.txt"),
|
||||
"biosemi256": partial(_biosemi, basename="biosemi256.txt"),
|
||||
"biosemi32": partial(_biosemi, basename="biosemi32.txt"),
|
||||
"biosemi64": partial(_biosemi, basename="biosemi64.txt"),
|
||||
"mgh60": partial(_mgh_or_standard, basename="mgh60.elc", coord_frame="mri"),
|
||||
"mgh70": partial(_mgh_or_standard, basename="mgh70.elc", coord_frame="mri"),
|
||||
"standard_1005": partial(
|
||||
_mgh_or_standard, basename="standard_1005.elc", coord_frame="mri"
|
||||
),
|
||||
"standard_1020": partial(
|
||||
_mgh_or_standard, basename="standard_1020.elc", coord_frame="mri"
|
||||
),
|
||||
"standard_alphabetic": partial(
|
||||
_mgh_or_standard, basename="standard_alphabetic.elc", coord_frame="mri"
|
||||
),
|
||||
"standard_postfixed": partial(
|
||||
_mgh_or_standard, basename="standard_postfixed.elc", coord_frame="mri"
|
||||
),
|
||||
"standard_prefixed": partial(
|
||||
_mgh_or_standard, basename="standard_prefixed.elc", coord_frame="mri"
|
||||
),
|
||||
"standard_primed": partial(
|
||||
_mgh_or_standard, basename="standard_primed.elc", coord_frame="mri"
|
||||
),
|
||||
"artinis-octamon": partial(
|
||||
_mgh_or_standard, coord_frame="mri", basename="artinis-octamon.elc"
|
||||
),
|
||||
"artinis-brite23": partial(
|
||||
_mgh_or_standard, coord_frame="mri", basename="artinis-brite23.elc"
|
||||
),
|
||||
"brainproducts-RNP-BA-128": partial(
|
||||
_easycap, basename="brainproducts-RNP-BA-128.txt"
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def _read_sfp(fname, head_size):
|
||||
"""Read .sfp BESA/EGI files."""
|
||||
# fname has been already checked
|
||||
fid_names = ("FidNz", "FidT9", "FidT10")
|
||||
options = dict(dtype=(_str, "f4", "f4", "f4"))
|
||||
ch_names, xs, ys, zs = _safe_np_loadtxt(fname, **options)
|
||||
# deal with "headshape"
|
||||
mask = np.array([ch_name == "headshape" for ch_name in ch_names], bool)
|
||||
hsp = np.stack([xs[mask], ys[mask], zs[mask]], axis=-1)
|
||||
mask = ~mask
|
||||
pos = np.stack([xs[mask], ys[mask], zs[mask]], axis=-1)
|
||||
ch_names = [ch_name for ch_name, m in zip(ch_names, mask) if m]
|
||||
ch_pos = _check_dupes_odict(ch_names, pos)
|
||||
del xs, ys, zs, ch_names
|
||||
# no one grants that fid names are there.
|
||||
nasion, lpa, rpa = (ch_pos.pop(n, None) for n in fid_names)
|
||||
|
||||
if head_size is not None:
|
||||
scale = head_size / np.median(np.linalg.norm(pos, axis=-1))
|
||||
for value in ch_pos.values():
|
||||
value *= scale
|
||||
nasion = nasion * scale if nasion is not None else None
|
||||
lpa = lpa * scale if lpa is not None else None
|
||||
rpa = rpa * scale if rpa is not None else None
|
||||
|
||||
return make_dig_montage(
|
||||
ch_pos=ch_pos, coord_frame="unknown", nasion=nasion, rpa=rpa, lpa=lpa, hsp=hsp
|
||||
)
|
||||
|
||||
|
||||
def _read_csd(fname, head_size):
|
||||
# Label, Theta, Phi, Radius, X, Y, Z, off sphere surface
|
||||
options = dict(
|
||||
comments="//", dtype=(_str, "f4", "f4", "f4", "f4", "f4", "f4", "f4")
|
||||
)
|
||||
ch_names, _, _, _, xs, ys, zs, _ = _safe_np_loadtxt(fname, **options)
|
||||
pos = np.stack([xs, ys, zs], axis=-1)
|
||||
|
||||
if head_size is not None:
|
||||
pos *= head_size / np.median(np.linalg.norm(pos, axis=1))
|
||||
|
||||
return make_dig_montage(ch_pos=_check_dupes_odict(ch_names, pos))
|
||||
|
||||
|
||||
def _check_dupes_odict(ch_names, pos):
|
||||
"""Warn if there are duplicates, then turn to ordered dict."""
|
||||
ch_names = list(ch_names)
|
||||
dups = OrderedDict((ch_name, ch_names.count(ch_name)) for ch_name in ch_names)
|
||||
dups = OrderedDict((ch_name, count) for ch_name, count in dups.items() if count > 1)
|
||||
n = len(dups)
|
||||
if n:
|
||||
dups = ", ".join(f"{ch_name} ({count})" for ch_name, count in dups.items())
|
||||
warn(
|
||||
f"Duplicate channel position{_pl(n)} found, the last will be "
|
||||
f"used for {dups}"
|
||||
)
|
||||
return OrderedDict(zip(ch_names, pos))
|
||||
|
||||
|
||||
def _read_elc(fname, head_size):
|
||||
"""Read .elc files.
|
||||
|
||||
The `.elc` files are so-called "asa electrode files". ASA here stands for
|
||||
Advances Source Analysis, and is a software package developed and sold by
|
||||
the ANT Neuro company. They provide a device for sensor digitization, called
|
||||
'xensor', which produces the `.elc` files.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : str
|
||||
File extension is expected to be '.elc'.
|
||||
head_size : float | None
|
||||
The size of the head in [m]. If none, returns the values read from the
|
||||
file with no modification.
|
||||
|
||||
Returns
|
||||
-------
|
||||
montage : instance of DigMontage
|
||||
The montage units are [m].
|
||||
"""
|
||||
fid_names = ("Nz", "LPA", "RPA")
|
||||
|
||||
with open(fname) as fid:
|
||||
# Read units
|
||||
# _read_elc does require to detect the units. (see _mgh_or_standard)
|
||||
for line in fid:
|
||||
if "UnitPosition" in line:
|
||||
units = line.split()[1]
|
||||
scale = dict(m=1.0, mm=1e-3)[units]
|
||||
break
|
||||
else:
|
||||
raise RuntimeError(f"Could not detect units in file {fname}")
|
||||
for line in fid:
|
||||
if "Positions\n" in line:
|
||||
break
|
||||
|
||||
# Read positions
|
||||
new_style = False
|
||||
pos = []
|
||||
for line in fid:
|
||||
if "Labels\n" in line:
|
||||
break
|
||||
if ":" in line:
|
||||
# Of the 'new' format: `E01 : 5.288 -3.658 119.693`
|
||||
pos.append(list(map(float, line.split(":")[1].split())))
|
||||
new_style = True
|
||||
else:
|
||||
# Of the 'old' format: `5.288 -3.658 119.693`
|
||||
pos.append(list(map(float, line.split())))
|
||||
|
||||
# Read labels
|
||||
ch_names_ = []
|
||||
for line in fid:
|
||||
if not line or not set(line) - {" "}:
|
||||
break
|
||||
if new_style:
|
||||
# Not sure how this format would deal with spaces in channel labels,
|
||||
# but none of my test files had this, so let's wait until it comes up.
|
||||
parsed = line.strip(" ").strip("\n").split()
|
||||
else:
|
||||
parsed = [line.strip(" ").strip("\n")]
|
||||
ch_names_.extend(parsed)
|
||||
|
||||
pos = np.array(pos) * scale
|
||||
if head_size is not None:
|
||||
pos *= head_size / np.median(np.linalg.norm(pos, axis=1))
|
||||
|
||||
ch_pos = _check_dupes_odict(ch_names_, pos)
|
||||
nasion, lpa, rpa = (ch_pos.pop(n, None) for n in fid_names)
|
||||
|
||||
return make_dig_montage(
|
||||
ch_pos=ch_pos, coord_frame="unknown", nasion=nasion, lpa=lpa, rpa=rpa
|
||||
)
|
||||
|
||||
|
||||
def _read_theta_phi_in_degrees(fname, head_size, fid_names=None, add_fiducials=False):
|
||||
ch_names, theta, phi = _safe_np_loadtxt(
|
||||
fname, skip_header=1, dtype=(_str, "i4", "i4")
|
||||
)
|
||||
if add_fiducials:
|
||||
# Add fiducials based on 10/20 spherical coordinate definitions
|
||||
# http://chgd.umich.edu/wp-content/uploads/2014/06/
|
||||
# 10-20_system_positioning.pdf
|
||||
# extrapolated from other sensor coordinates in the Easycap layouts
|
||||
# https://www.easycap.de/wp-content/uploads/2018/02/
|
||||
# Easycap-Equidistant-Layouts.pdf
|
||||
assert fid_names is None
|
||||
fid_names = ["Nasion", "LPA", "RPA"]
|
||||
ch_names.extend(fid_names)
|
||||
theta = np.append(theta, [115, -115, 115])
|
||||
phi = np.append(phi, [90, 0, 0])
|
||||
|
||||
radii = np.full(len(phi), head_size)
|
||||
pos = _sph_to_cart(np.array([radii, np.deg2rad(phi), np.deg2rad(theta)]).T)
|
||||
ch_pos = _check_dupes_odict(ch_names, pos)
|
||||
|
||||
nasion, lpa, rpa = None, None, None
|
||||
if fid_names is not None:
|
||||
nasion, lpa, rpa = (ch_pos.pop(n, None) for n in fid_names)
|
||||
|
||||
return make_dig_montage(
|
||||
ch_pos=ch_pos, coord_frame="unknown", nasion=nasion, lpa=lpa, rpa=rpa
|
||||
)
|
||||
|
||||
|
||||
def _read_elp_besa(fname, head_size):
|
||||
# This .elp is not the same as polhemus elp. see _read_isotrak_elp_points
|
||||
dtype = np.dtype("S8, S8, f8, f8, f8")
|
||||
data = np.loadtxt(fname, dtype=dtype)
|
||||
|
||||
ch_names = data["f1"].astype(str).tolist()
|
||||
az = data["f2"]
|
||||
horiz = data["f3"]
|
||||
radius = np.abs(az / 180.0)
|
||||
az = np.deg2rad(np.array([h if a >= 0.0 else 180 + h for h, a in zip(horiz, az)]))
|
||||
pol = radius * np.pi
|
||||
rad = data["f4"] / 100
|
||||
pos = _sph_to_cart(np.array([rad, az, pol]).T)
|
||||
|
||||
if head_size is not None:
|
||||
pos *= head_size / np.median(np.linalg.norm(pos, axis=1))
|
||||
|
||||
ch_pos = _check_dupes_odict(ch_names, pos)
|
||||
|
||||
fid_names = ("Nz", "LPA", "RPA")
|
||||
# No one grants that the fid names actually exist.
|
||||
nasion, lpa, rpa = (ch_pos.pop(n, None) for n in fid_names)
|
||||
|
||||
return make_dig_montage(ch_pos=ch_pos, nasion=nasion, lpa=lpa, rpa=rpa)
|
||||
|
||||
|
||||
def _read_brainvision(fname, head_size):
|
||||
# 'BrainVision Electrodes File' format
|
||||
# Based on BrainVision Analyzer coordinate system: Defined between
|
||||
# standard electrode positions: X-axis from T7 to T8, Y-axis from Oz to
|
||||
# Fpz, Z-axis orthogonal from XY-plane through Cz, fit to a sphere if
|
||||
# idealized (when radius=1), specified in millimeters
|
||||
defusedxml = _soft_import("defusedxml", "reading BrainVision montages")
|
||||
root = defusedxml.ElementTree.parse(fname).getroot()
|
||||
ch_names = [s.text for s in root.findall("./Electrode/Name")]
|
||||
theta = [float(s.text) for s in root.findall("./Electrode/Theta")]
|
||||
pol = np.deg2rad(np.array(theta))
|
||||
phi = [float(s.text) for s in root.findall("./Electrode/Phi")]
|
||||
az = np.deg2rad(np.array(phi))
|
||||
rad = [float(s.text) for s in root.findall("./Electrode/Radius")]
|
||||
rad = np.array(rad) # specified in mm
|
||||
pos = _sph_to_cart(np.array([rad, az, pol]).T)
|
||||
|
||||
if head_size is not None:
|
||||
pos *= head_size / np.median(np.linalg.norm(pos, axis=1))
|
||||
|
||||
return make_dig_montage(ch_pos=_check_dupes_odict(ch_names, pos))
|
||||
|
||||
|
||||
def _read_xyz(fname):
|
||||
"""Import EEG channel locations from CSV, TSV, or XYZ files.
|
||||
|
||||
CSV and TSV files should have columns 4 columns containing
|
||||
ch_name, x, y, and z. Each row represents one channel.
|
||||
XYZ files should have 5 columns containing
|
||||
count, x, y, z, and ch_name. Each row represents one channel
|
||||
CSV files should be separated by commas, TSV and XYZ files should be
|
||||
separated by tabs.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
fname : str
|
||||
Name of the file to read channel locations from.
|
||||
|
||||
Returns
|
||||
-------
|
||||
montage : instance of DigMontage
|
||||
The montage.
|
||||
"""
|
||||
ch_names = []
|
||||
pos = []
|
||||
file_format = op.splitext(fname)[1].lower()
|
||||
with open(fname) as f:
|
||||
if file_format != ".xyz":
|
||||
f.readline() # skip header
|
||||
delimiter = "," if file_format == ".csv" else "\t"
|
||||
for row in csv.reader(f, delimiter=delimiter):
|
||||
if file_format == ".xyz":
|
||||
_, x, y, z, ch_name, *_ = row
|
||||
ch_name = ch_name.strip() # deals with variable tab size
|
||||
else:
|
||||
ch_name, x, y, z, *_ = row
|
||||
ch_names.append(ch_name)
|
||||
pos.append((x, y, z))
|
||||
d = _check_dupes_odict(ch_names, np.array(pos, dtype=float))
|
||||
return make_dig_montage(ch_pos=d)
|
||||
2150
mne/channels/channels.py
Normal file
2150
mne/channels/channels.py
Normal file
File diff suppressed because it is too large
Load Diff
276
mne/channels/data/layouts/CTF-275.lout
Normal file
276
mne/channels/data/layouts/CTF-275.lout
Normal file
@@ -0,0 +1,276 @@
|
||||
-42.27 42.33 -39.99 31.80
|
||||
001 -4.09 10.91 4.00 3.00 MLC11-2622
|
||||
002 -7.25 8.87 4.00 3.00 MLC12-2622
|
||||
003 -10.79 7.43 4.00 3.00 MLC13-2622
|
||||
004 -14.40 5.31 4.00 3.00 MLC14-2622
|
||||
005 -17.45 2.88 4.00 3.00 MLC15-2622
|
||||
006 -19.94 -0.21 4.00 3.00 MLC16-2622
|
||||
007 -22.30 -3.88 4.00 3.00 MLC17-2622
|
||||
008 -7.70 5.16 4.00 3.00 MLC21-2622
|
||||
009 -11.18 3.69 4.00 3.00 MLC22-2622
|
||||
010 -14.17 1.40 4.00 3.00 MLC23-2622
|
||||
011 -16.42 -1.52 4.00 3.00 MLC24-2622
|
||||
012 -18.64 -4.88 4.00 3.00 MLC25-2622
|
||||
013 -12.55 -2.00 4.00 3.00 MLC31-2622
|
||||
014 -15.13 -5.41 4.00 3.00 MLC32-2622
|
||||
015 -9.57 0.28 4.00 3.00 MLC41-2622
|
||||
016 -11.51 -5.56 4.00 3.00 MLC42-2622
|
||||
017 -4.04 4.58 4.00 3.00 MLC51-2622
|
||||
018 -6.04 1.35 4.00 3.00 MLC52-2622
|
||||
019 -8.79 -3.34 4.00 3.00 MLC53-2622
|
||||
020 -8.32 -7.10 4.00 3.00 MLC54-2622
|
||||
021 -6.60 -10.22 4.00 3.00 MLC55-2622
|
||||
022 -4.01 -1.76 4.00 3.00 MLC61-2622
|
||||
023 -5.55 -4.97 4.00 3.00 MLC62-2622
|
||||
024 -3.74 -8.12 4.00 3.00 MLC63-2622
|
||||
025 -7.63 28.14 4.00 3.00 MLF11-2622
|
||||
026 -12.92 27.01 4.00 3.00 MLF12-2622
|
||||
027 -18.14 25.41 4.00 3.00 MLF13-2622
|
||||
028 -23.34 23.65 4.00 3.00 MLF14-2622
|
||||
029 -4.64 25.47 4.00 3.00 MLF21-2622
|
||||
030 -9.22 24.68 4.00 3.00 MLF22-2622
|
||||
031 -13.60 23.41 4.00 3.00 MLF23-2622
|
||||
032 -18.31 21.53 4.00 3.00 MLF24-2622
|
||||
033 -22.68 19.69 4.00 3.00 MLF25-2622
|
||||
034 -6.57 22.14 4.00 3.00 MLF31-2622
|
||||
035 -10.75 21.22 4.00 3.00 MLF32-2622
|
||||
036 -15.16 19.49 4.00 3.00 MLF33-2622
|
||||
037 -19.01 17.57 4.00 3.00 MLF34-2622
|
||||
038 -22.93 15.25 4.00 3.00 MLF35-2622
|
||||
039 -4.25 19.38 4.00 3.00 MLF41-2622
|
||||
040 -8.17 18.80 4.00 3.00 MLF42-2622
|
||||
041 -12.29 17.37 4.00 3.00 MLF43-2622
|
||||
042 -15.93 15.49 4.00 3.00 MLF44-2622
|
||||
043 -19.89 13.39 4.00 3.00 MLF45-2622
|
||||
044 -24.12 10.50 4.00 3.00 MLF46-2622
|
||||
045 -5.48 16.15 4.00 3.00 MLF51-2622
|
||||
046 -9.58 15.10 4.00 3.00 MLF52-2622
|
||||
047 -13.17 13.43 4.00 3.00 MLF53-2622
|
||||
048 -16.66 11.39 4.00 3.00 MLF54-2622
|
||||
049 -20.76 9.06 4.00 3.00 MLF55-2622
|
||||
050 -24.71 5.73 4.00 3.00 MLF56-2622
|
||||
051 -7.17 12.78 4.00 3.00 MLF61-2622
|
||||
052 -10.58 11.08 4.00 3.00 MLF62-2622
|
||||
053 -13.93 9.16 4.00 3.00 MLF63-2622
|
||||
054 -17.37 7.29 4.00 3.00 MLF64-2622
|
||||
055 -20.83 4.87 4.00 3.00 MLF65-2622
|
||||
056 -23.40 1.59 4.00 3.00 MLF66-2622
|
||||
057 -25.90 -2.51 4.00 3.00 MLF67-2622
|
||||
058 -6.96 -27.32 4.00 3.00 MLO11-2622
|
||||
059 -11.88 -25.97 4.00 3.00 MLO12-2622
|
||||
060 -16.48 -23.69 4.00 3.00 MLO13-2622
|
||||
061 -20.64 -20.44 4.00 3.00 MLO14-2622
|
||||
062 -4.82 -30.75 4.00 3.00 MLO21-2622
|
||||
063 -10.11 -29.77 4.00 3.00 MLO22-2622
|
||||
064 -15.52 -27.87 4.00 3.00 MLO23-2622
|
||||
065 -20.40 -24.85 4.00 3.00 MLO24-2622
|
||||
066 -7.92 -33.45 4.00 3.00 MLO31-2622
|
||||
067 -13.84 -31.94 4.00 3.00 MLO32-2622
|
||||
068 -19.61 -29.16 4.00 3.00 MLO33-2622
|
||||
069 -24.70 -25.44 4.00 3.00 MLO34-2622
|
||||
070 -5.16 -36.86 4.00 3.00 MLO41-2622
|
||||
071 -11.67 -35.84 4.00 3.00 MLO42-2622
|
||||
072 -17.98 -33.55 4.00 3.00 MLO43-2622
|
||||
073 -23.91 -30.00 4.00 3.00 MLO44-2622
|
||||
074 -8.79 -39.34 4.00 3.00 MLO51-2622
|
||||
075 -15.83 -37.54 4.00 3.00 MLO52-2622
|
||||
076 -22.47 -34.34 4.00 3.00 MLO53-2622
|
||||
077 -4.98 -13.36 4.00 3.00 MLP11-2622
|
||||
078 -10.20 -10.01 4.00 3.00 MLP12-2622
|
||||
079 -3.80 -16.69 4.00 3.00 MLP21-2622
|
||||
080 -8.73 -13.30 4.00 3.00 MLP22-2622
|
||||
081 -13.58 -8.80 4.00 3.00 MLP23-2622
|
||||
082 -5.66 -19.72 4.00 3.00 MLP31-2622
|
||||
083 -8.41 -16.83 4.00 3.00 MLP32-2622
|
||||
084 -12.08 -14.80 4.00 3.00 MLP33-2622
|
||||
085 -15.13 -11.95 4.00 3.00 MLP34-2622
|
||||
086 -17.18 -8.63 4.00 3.00 MLP35-2622
|
||||
087 -9.92 -20.16 4.00 3.00 MLP41-2622
|
||||
088 -13.37 -18.09 4.00 3.00 MLP42-2622
|
||||
089 -16.59 -15.58 4.00 3.00 MLP43-2622
|
||||
090 -19.06 -11.87 4.00 3.00 MLP44-2622
|
||||
091 -20.87 -8.06 4.00 3.00 MLP45-2622
|
||||
092 -4.02 -24.07 4.00 3.00 MLP51-2622
|
||||
093 -8.77 -23.79 4.00 3.00 MLP52-2622
|
||||
094 -12.92 -22.08 4.00 3.00 MLP53-2622
|
||||
095 -16.83 -19.50 4.00 3.00 MLP54-2622
|
||||
096 -20.23 -16.32 4.00 3.00 MLP55-2622
|
||||
097 -22.76 -11.97 4.00 3.00 MLP56-2622
|
||||
098 -24.58 -7.58 4.00 3.00 MLP57-2622
|
||||
099 -27.14 12.98 4.00 3.00 MLT11-2622
|
||||
100 -28.19 7.51 4.00 3.00 MLT12-2622
|
||||
101 -28.08 2.09 4.00 3.00 MLT13-2622
|
||||
102 -28.56 -5.98 4.00 3.00 MLT14-2622
|
||||
103 -26.96 -11.17 4.00 3.00 MLT15-2622
|
||||
104 -24.11 -16.46 4.00 3.00 MLT16-2622
|
||||
105 -27.30 17.85 4.00 3.00 MLT21-2622
|
||||
106 -31.47 10.04 4.00 3.00 MLT22-2622
|
||||
107 -31.85 3.70 4.00 3.00 MLT23-2622
|
||||
108 -32.08 -2.62 4.00 3.00 MLT24-2622
|
||||
109 -31.09 -9.80 4.00 3.00 MLT25-2622
|
||||
110 -28.71 -15.38 4.00 3.00 MLT26-2622
|
||||
111 -24.78 -20.78 4.00 3.00 MLT27-2622
|
||||
112 -28.61 21.64 4.00 3.00 MLT31-2622
|
||||
113 -32.09 15.32 4.00 3.00 MLT32-2622
|
||||
114 -35.40 5.79 4.00 3.00 MLT33-2622
|
||||
115 -35.85 -1.29 4.00 3.00 MLT34-2622
|
||||
116 -34.97 -7.76 4.00 3.00 MLT35-2622
|
||||
117 -32.89 -13.91 4.00 3.00 MLT36-2622
|
||||
118 -29.32 -20.20 4.00 3.00 MLT37-2622
|
||||
119 -33.87 18.93 4.00 3.00 MLT41-2622
|
||||
120 -36.68 11.37 4.00 3.00 MLT42-2622
|
||||
121 -38.92 2.11 4.00 3.00 MLT43-2622
|
||||
122 -38.70 -5.16 4.00 3.00 MLT44-2622
|
||||
123 -36.95 -12.13 4.00 3.00 MLT45-2622
|
||||
124 -33.72 -18.79 4.00 3.00 MLT46-2622
|
||||
125 -29.28 -25.28 4.00 3.00 MLT47-2622
|
||||
126 -38.78 14.74 4.00 3.00 MLT51-2622
|
||||
127 -41.29 6.62 4.00 3.00 MLT52-2622
|
||||
128 -41.87 -1.80 4.00 3.00 MLT53-2622
|
||||
129 -40.62 -9.63 4.00 3.00 MLT54-2622
|
||||
130 -37.78 -16.89 4.00 3.00 MLT55-2622
|
||||
131 -33.73 -24.02 4.00 3.00 MLT56-2622
|
||||
132 -28.51 -29.92 4.00 3.00 MLT57-2622
|
||||
133 -0.24 10.97 4.00 3.00 MRC11-2622
|
||||
134 2.99 8.95 4.00 3.00 MRC12-2622
|
||||
135 6.57 7.62 4.00 3.00 MRC13-2622
|
||||
136 10.22 5.56 4.00 3.00 MRC14-2622
|
||||
137 13.27 3.22 4.00 3.00 MRC15-2622
|
||||
138 15.86 0.21 4.00 3.00 MRC16-2622
|
||||
139 18.32 -3.45 4.00 3.00 MRC17-2622
|
||||
140 3.53 5.28 4.00 3.00 MRC21-2622
|
||||
141 7.00 3.85 4.00 3.00 MRC22-2622
|
||||
142 10.06 1.68 4.00 3.00 MRC23-2622
|
||||
143 12.33 -1.20 4.00 3.00 MRC24-2622
|
||||
144 14.73 -4.52 4.00 3.00 MRC25-2622
|
||||
145 8.51 -1.76 4.00 3.00 MRC31-2622
|
||||
146 11.17 -5.14 4.00 3.00 MRC32-2622
|
||||
147 5.51 0.46 4.00 3.00 MRC41-2622
|
||||
148 7.56 -5.33 4.00 3.00 MRC42-2622
|
||||
149 -0.17 4.62 4.00 3.00 MRC51-2622
|
||||
150 1.93 1.46 4.00 3.00 MRC52-2622
|
||||
151 4.78 -3.16 4.00 3.00 MRC53-2622
|
||||
152 4.39 -6.98 4.00 3.00 MRC54-2622
|
||||
153 2.73 -10.10 4.00 3.00 MRC55-2622
|
||||
154 -0.07 -1.75 4.00 3.00 MRC61-2622
|
||||
155 1.58 -4.86 4.00 3.00 MRC62-2622
|
||||
156 -0.15 -8.08 4.00 3.00 MRC63-2622
|
||||
157 2.97 28.24 4.00 3.00 MRF11-2622
|
||||
158 8.25 27.25 4.00 3.00 MRF12-2622
|
||||
159 13.54 25.74 4.00 3.00 MRF13-2622
|
||||
160 18.74 24.12 4.00 3.00 MRF14-2622
|
||||
161 0.03 25.52 4.00 3.00 MRF21-2622
|
||||
162 4.63 24.85 4.00 3.00 MRF22-2622
|
||||
163 9.03 23.67 4.00 3.00 MRF23-2622
|
||||
164 13.78 21.87 4.00 3.00 MRF24-2622
|
||||
165 18.19 20.13 4.00 3.00 MRF25-2622
|
||||
166 2.05 22.22 4.00 3.00 MRF31-2622
|
||||
167 6.27 21.38 4.00 3.00 MRF32-2622
|
||||
168 10.63 19.79 4.00 3.00 MRF33-2622
|
||||
169 14.57 17.90 4.00 3.00 MRF34-2622
|
||||
170 18.54 15.70 4.00 3.00 MRF35-2622
|
||||
171 -0.22 19.42 4.00 3.00 MRF41-2622
|
||||
172 3.75 18.84 4.00 3.00 MRF42-2622
|
||||
173 7.86 17.57 4.00 3.00 MRF43-2622
|
||||
174 11.53 15.78 4.00 3.00 MRF44-2622
|
||||
175 15.55 13.76 4.00 3.00 MRF45-2622
|
||||
176 19.83 10.96 4.00 3.00 MRF46-2622
|
||||
177 1.08 16.23 4.00 3.00 MRF51-2622
|
||||
178 5.20 15.33 4.00 3.00 MRF52-2622
|
||||
179 8.81 13.68 4.00 3.00 MRF53-2622
|
||||
180 12.37 11.71 4.00 3.00 MRF54-2622
|
||||
181 16.53 9.44 4.00 3.00 MRF55-2622
|
||||
182 20.54 6.21 4.00 3.00 MRF56-2622
|
||||
183 2.82 12.87 4.00 3.00 MRF61-2622
|
||||
184 6.27 11.29 4.00 3.00 MRF62-2622
|
||||
185 9.66 9.43 4.00 3.00 MRF63-2622
|
||||
186 13.14 7.59 4.00 3.00 MRF64-2622
|
||||
187 16.52 5.22 4.00 3.00 MRF65-2622
|
||||
188 19.31 2.05 4.00 3.00 MRF66-2622
|
||||
189 21.91 -1.92 4.00 3.00 MRF67-2622
|
||||
190 3.46 -27.20 4.00 3.00 MRO11-2622
|
||||
191 8.35 -25.76 4.00 3.00 MRO12-2622
|
||||
192 12.92 -23.40 4.00 3.00 MRO13-2622
|
||||
193 17.02 -20.06 4.00 3.00 MRO14-2622
|
||||
194 1.43 -30.69 4.00 3.00 MRO21-2622
|
||||
195 6.66 -29.60 4.00 3.00 MRO22-2622
|
||||
196 12.02 -27.57 4.00 3.00 MRO23-2622
|
||||
197 16.88 -24.46 4.00 3.00 MRO24-2622
|
||||
198 4.55 -33.35 4.00 3.00 MRO31-2622
|
||||
199 10.46 -31.70 4.00 3.00 MRO32-2622
|
||||
200 16.07 -28.88 4.00 3.00 MRO33-2622
|
||||
201 21.16 -24.93 4.00 3.00 MRO34-2622
|
||||
202 1.88 -36.78 4.00 3.00 MRO41-2622
|
||||
203 8.37 -35.64 4.00 3.00 MRO42-2622
|
||||
204 14.63 -33.19 4.00 3.00 MRO43-2622
|
||||
205 20.45 -29.57 4.00 3.00 MRO44-2622
|
||||
206 5.57 -39.20 4.00 3.00 MRO51-2622
|
||||
207 12.57 -37.26 4.00 3.00 MRO52-2622
|
||||
208 19.11 -33.96 4.00 3.00 MRO53-2622
|
||||
209 1.20 -13.27 4.00 3.00 MRP11-2622
|
||||
210 6.34 -9.81 4.00 3.00 MRP12-2622
|
||||
211 0.06 -16.65 4.00 3.00 MRP21-2622
|
||||
212 4.94 -13.15 4.00 3.00 MRP22-2622
|
||||
213 9.72 -8.56 4.00 3.00 MRP23-2622
|
||||
214 2.03 -19.64 4.00 3.00 MRP31-2622
|
||||
215 4.72 -16.72 4.00 3.00 MRP32-2622
|
||||
216 8.28 -14.64 4.00 3.00 MRP33-2622
|
||||
217 11.32 -11.68 4.00 3.00 MRP34-2622
|
||||
218 13.30 -8.29 4.00 3.00 MRP35-2622
|
||||
219 6.32 -19.99 4.00 3.00 MRP41-2622
|
||||
220 9.66 -17.86 4.00 3.00 MRP42-2622
|
||||
221 12.83 -15.29 4.00 3.00 MRP43-2622
|
||||
222 15.21 -11.53 4.00 3.00 MRP44-2622
|
||||
223 16.99 -7.64 4.00 3.00 MRP45-2622
|
||||
224 0.42 -24.03 4.00 3.00 MRP51-2622
|
||||
225 5.29 -23.71 4.00 3.00 MRP52-2622
|
||||
226 9.32 -21.86 4.00 3.00 MRP53-2622
|
||||
227 13.19 -19.21 4.00 3.00 MRP54-2622
|
||||
228 16.49 -15.99 4.00 3.00 MRP55-2622
|
||||
229 18.98 -11.54 4.00 3.00 MRP56-2622
|
||||
230 20.69 -7.11 4.00 3.00 MRP57-2622
|
||||
231 22.81 13.51 4.00 3.00 MRT11-2622
|
||||
232 23.97 8.09 4.00 3.00 MRT12-2622
|
||||
233 23.97 2.65 4.00 3.00 MRT13-2622
|
||||
234 24.63 -5.42 4.00 3.00 MRT14-2622
|
||||
235 23.16 -10.65 4.00 3.00 MRT15-2622
|
||||
236 20.37 -16.02 4.00 3.00 MRT16-2622
|
||||
237 22.88 18.38 4.00 3.00 MRT21-2622
|
||||
238 27.23 10.62 4.00 3.00 MRT22-2622
|
||||
239 27.73 4.35 4.00 3.00 MRT23-2622
|
||||
240 28.08 -1.95 4.00 3.00 MRT24-2622
|
||||
241 27.24 -9.21 4.00 3.00 MRT25-2622
|
||||
242 24.97 -14.84 4.00 3.00 MRT26-2622
|
||||
243 21.15 -20.30 4.00 3.00 MRT27-2622
|
||||
244 24.07 22.26 4.00 3.00 MRT31-2622
|
||||
245 27.72 15.94 4.00 3.00 MRT32-2622
|
||||
246 31.24 6.55 4.00 3.00 MRT33-2622
|
||||
247 31.84 -0.55 4.00 3.00 MRT34-2622
|
||||
248 31.09 -7.10 4.00 3.00 MRT35-2622
|
||||
249 29.13 -13.33 4.00 3.00 MRT36-2622
|
||||
250 25.63 -19.73 4.00 3.00 MRT37-2622
|
||||
251 29.40 19.66 4.00 3.00 MRT41-2622
|
||||
252 32.38 12.17 4.00 3.00 MRT42-2622
|
||||
253 34.86 2.97 4.00 3.00 MRT43-2622
|
||||
254 34.80 -4.39 4.00 3.00 MRT44-2622
|
||||
255 33.11 -11.36 4.00 3.00 MRT45-2622
|
||||
256 30.03 -18.16 4.00 3.00 MRT46-2622
|
||||
257 25.54 -24.88 4.00 3.00 MRT47-2622
|
||||
258 34.47 15.52 4.00 3.00 MRT51-2622
|
||||
259 37.12 7.54 4.00 3.00 MRT52-2622
|
||||
260 37.93 -0.94 4.00 3.00 MRT53-2622
|
||||
261 36.82 -8.89 4.00 3.00 MRT54-2622
|
||||
262 34.10 -16.25 4.00 3.00 MRT55-2622
|
||||
263 30.13 -23.45 4.00 3.00 MRT56-2622
|
||||
264 25.07 -29.43 4.00 3.00 MRT57-2622
|
||||
265 -2.13 7.84 4.00 3.00 MZC01-2622
|
||||
266 -2.05 1.38 4.00 3.00 MZC02-2622
|
||||
267 -1.99 -5.04 4.00 3.00 MZC03-2622
|
||||
268 -1.93 -11.44 4.00 3.00 MZC04-2622
|
||||
269 -2.33 28.50 4.00 3.00 MZF01-2622
|
||||
270 -2.28 22.54 4.00 3.00 MZF02-2622
|
||||
271 -2.20 14.52 4.00 3.00 MZF03-2622
|
||||
272 -1.77 -27.22 4.00 3.00 MZO01-2622
|
||||
273 -1.71 -34.04 4.00 3.00 MZO02-2622
|
||||
274 -1.66 -39.69 4.00 3.00 MZO03-2622
|
||||
275 -1.81 -21.05 4.00 3.00 MZP01-2622
|
||||
153
mne/channels/data/layouts/CTF151.lay
Normal file
153
mne/channels/data/layouts/CTF151.lay
Normal file
@@ -0,0 +1,153 @@
|
||||
1 -0.440000 -4.000000 0.551100 0.351100 MLC11
|
||||
2 -1.200000 -4.130000 0.551100 0.351100 MLC12
|
||||
3 -2.220000 -4.270000 0.551100 0.351100 MLC13
|
||||
4 -2.820000 -4.710000 0.551100 0.351100 MLC14
|
||||
5 -3.340000 -5.230000 0.551100 0.351100 MLC15
|
||||
6 -0.820000 -4.550000 0.551100 0.351100 MLC21
|
||||
7 -1.620000 -4.570000 0.551100 0.351100 MLC22
|
||||
8 -2.160000 -4.970000 0.551100 0.351100 MLC23
|
||||
9 -2.640000 -5.370000 0.551100 0.351100 MLC24
|
||||
10 -1.270000 -5.050000 0.551100 0.351100 MLC31
|
||||
11 -1.780000 -5.450000 0.551100 0.351100 MLC32
|
||||
12 -1.300000 -5.930000 0.551100 0.351100 MLC33
|
||||
13 -0.440000 -5.050000 0.551100 0.351100 MLC41
|
||||
14 -0.820000 -5.530000 0.551100 0.351100 MLC42
|
||||
15 -0.400000 -6.010000 0.551100 0.351100 MLC43
|
||||
16 -1.170000 -2.010000 0.551100 0.351100 MLF11
|
||||
17 -2.260000 -2.230000 0.551100 0.351100 MLF12
|
||||
18 -0.490000 -2.300000 0.551100 0.351100 MLF21
|
||||
19 -1.540000 -2.470000 0.551100 0.351100 MLF22
|
||||
20 -2.540000 -2.750000 0.551100 0.351100 MLF23
|
||||
21 -1.000000 -2.750000 0.551100 0.351100 MLF31
|
||||
22 -1.950000 -2.980000 0.551100 0.351100 MLF32
|
||||
23 -2.780000 -3.300000 0.551100 0.351100 MLF33
|
||||
24 -3.440000 -3.770000 0.551100 0.351100 MLF34
|
||||
25 -0.450000 -3.100000 0.551100 0.351100 MLF41
|
||||
26 -1.380000 -3.260000 0.551100 0.351100 MLF42
|
||||
27 -2.280000 -3.570000 0.551100 0.351100 MLF43
|
||||
28 -2.870000 -4.060000 0.551100 0.351100 MLF44
|
||||
29 -3.500000 -4.510000 0.551100 0.351100 MLF45
|
||||
30 -0.850000 -3.580000 0.551100 0.351100 MLF51
|
||||
31 -1.700000 -3.790000 0.551100 0.351100 MLF52
|
||||
32 -0.470000 -7.690000 0.551100 0.351100 MLO11
|
||||
33 -1.650000 -7.420000 0.551100 0.351100 MLO12
|
||||
34 -1.210000 -7.930000 0.551100 0.351100 MLO21
|
||||
35 -2.350000 -7.580000 0.551100 0.351100 MLO22
|
||||
36 -0.600000 -8.400000 0.551100 0.351100 MLO31
|
||||
37 -1.920000 -8.120000 0.551100 0.351100 MLO32
|
||||
38 -3.110000 -7.670000 0.551100 0.351100 MLO33
|
||||
39 -1.400000 -8.560000 0.551100 0.351100 MLO41
|
||||
40 -2.750000 -8.210000 0.551100 0.351100 MLO42
|
||||
41 -3.910000 -7.620000 0.551100 0.351100 MLO43
|
||||
42 -0.840000 -6.390000 0.551100 0.351100 MLP11
|
||||
43 -1.710000 -6.320000 0.551100 0.351100 MLP12
|
||||
44 -2.240000 -5.870000 0.551100 0.351100 MLP13
|
||||
45 -0.440000 -6.900000 0.551100 0.351100 MLP21
|
||||
46 -1.220000 -6.760000 0.551100 0.351100 MLP22
|
||||
47 -0.970000 -7.220000 0.551100 0.351100 MLP31
|
||||
48 -1.900000 -6.880000 0.551100 0.351100 MLP32
|
||||
49 -2.470000 -6.390000 0.551100 0.351100 MLP33
|
||||
50 -2.990000 -5.850000 0.551100 0.351100 MLP34
|
||||
51 -3.420000 -3.120000 0.551100 0.351100 MLT11
|
||||
52 -4.100000 -4.200000 0.551100 0.351100 MLT12
|
||||
53 -4.040000 -5.030000 0.551100 0.351100 MLT13
|
||||
54 -3.780000 -5.770000 0.551100 0.351100 MLT14
|
||||
55 -3.210000 -6.440000 0.551100 0.351100 MLT15
|
||||
56 -2.570000 -7.010000 0.551100 0.351100 MLT16
|
||||
57 -3.320000 -2.550000 0.551100 0.351100 MLT21
|
||||
58 -4.260000 -3.520000 0.551100 0.351100 MLT22
|
||||
59 -4.720000 -4.710000 0.551100 0.351100 MLT23
|
||||
60 -4.520000 -5.590000 0.551100 0.351100 MLT24
|
||||
61 -4.040000 -6.350000 0.551100 0.351100 MLT25
|
||||
62 -3.280000 -7.060000 0.551100 0.351100 MLT26
|
||||
63 -4.340000 -2.900000 0.551100 0.351100 MLT31
|
||||
64 -5.040000 -4.050000 0.551100 0.351100 MLT32
|
||||
65 -5.200000 -5.210000 0.551100 0.351100 MLT33
|
||||
66 -4.820000 -6.140000 0.551100 0.351100 MLT34
|
||||
67 -4.090000 -7.000000 0.551100 0.351100 MLT35
|
||||
68 -5.210000 -3.450000 0.551100 0.351100 MLT41
|
||||
69 -5.640000 -4.620000 0.551100 0.351100 MLT42
|
||||
70 -5.500000 -5.730000 0.551100 0.351100 MLT43
|
||||
71 -4.910000 -6.720000 0.551100 0.351100 MLT44
|
||||
72 0.410000 -4.000000 0.551100 0.351100 MRC11
|
||||
73 1.170000 -4.130000 0.551100 0.351100 MRC12
|
||||
74 2.200000 -4.270000 0.551100 0.351100 MRC13
|
||||
75 2.800000 -4.710000 0.551100 0.351100 MRC14
|
||||
76 3.320000 -5.230000 0.551100 0.351100 MRC15
|
||||
77 0.800000 -4.560000 0.551100 0.351100 MRC21
|
||||
78 1.600000 -4.570000 0.551100 0.351100 MRC22
|
||||
79 2.140000 -4.970000 0.551100 0.351100 MRC23
|
||||
80 2.620000 -5.370000 0.551100 0.351100 MRC24
|
||||
81 1.260000 -5.050000 0.551100 0.351100 MRC31
|
||||
82 1.760000 -5.450000 0.551100 0.351100 MRC32
|
||||
83 1.280000 -5.930000 0.551100 0.351100 MRC33
|
||||
84 0.420000 -5.050000 0.551100 0.351100 MRC41
|
||||
85 0.810000 -5.540000 0.551100 0.351100 MRC42
|
||||
86 0.380000 -6.010000 0.551100 0.351100 MRC43
|
||||
87 1.130000 -2.010000 0.551100 0.351100 MRF11
|
||||
88 2.240000 -2.230000 0.551100 0.351100 MRF12
|
||||
89 0.460000 -2.290000 0.551100 0.351100 MRF21
|
||||
90 1.510000 -2.470000 0.551100 0.351100 MRF22
|
||||
91 2.520000 -2.740000 0.551100 0.351100 MRF23
|
||||
92 0.970000 -2.740000 0.551100 0.351100 MRF31
|
||||
93 1.920000 -2.980000 0.551100 0.351100 MRF32
|
||||
94 2.760000 -3.300000 0.551100 0.351100 MRF33
|
||||
95 3.420000 -3.770000 0.551100 0.351100 MRF34
|
||||
96 0.420000 -3.100000 0.551100 0.351100 MRF41
|
||||
97 1.360000 -3.260000 0.551100 0.351100 MRF42
|
||||
98 2.260000 -3.570000 0.551100 0.351100 MRF43
|
||||
99 2.840000 -4.050000 0.551100 0.351100 MRF44
|
||||
100 3.480000 -4.510000 0.551100 0.351100 MRF45
|
||||
101 0.820000 -3.580000 0.551100 0.351100 MRF51
|
||||
102 1.670000 -3.790000 0.551100 0.351100 MRF52
|
||||
103 0.470000 -7.690000 0.551100 0.351100 MRO11
|
||||
104 1.640000 -7.420000 0.551100 0.351100 MRO12
|
||||
105 1.200000 -7.930000 0.551100 0.351100 MRO21
|
||||
106 2.350000 -7.580000 0.551100 0.351100 MRO22
|
||||
107 0.580000 -8.390000 0.551100 0.351100 MRO31
|
||||
108 1.910000 -8.110000 0.551100 0.351100 MRO32
|
||||
109 3.110000 -7.670000 0.551100 0.351100 MRO33
|
||||
110 1.380000 -8.570000 0.551100 0.351100 MRO41
|
||||
111 2.750000 -8.220000 0.551100 0.351100 MRO42
|
||||
112 3.900000 -7.610000 0.551100 0.351100 MRO43
|
||||
113 0.820000 -6.380000 0.551100 0.351100 MRP11
|
||||
114 1.700000 -6.320000 0.551100 0.351100 MRP12
|
||||
115 2.220000 -5.870000 0.551100 0.351100 MRP13
|
||||
116 0.420000 -6.900000 0.551100 0.351100 MRP21
|
||||
117 1.200000 -6.750000 0.551100 0.351100 MRP22
|
||||
118 0.960000 -7.220000 0.551100 0.351100 MRP31
|
||||
119 1.880000 -6.870000 0.551100 0.351100 MRP32
|
||||
120 2.470000 -6.390000 0.551100 0.351100 MRP33
|
||||
121 2.990000 -5.850000 0.551100 0.351100 MRP34
|
||||
122 3.390000 -3.120000 0.551100 0.351100 MRT11
|
||||
123 4.070000 -4.190000 0.551100 0.351100 MRT12
|
||||
124 4.020000 -5.030000 0.551100 0.351100 MRT13
|
||||
125 3.760000 -5.770000 0.551100 0.351100 MRT14
|
||||
126 3.200000 -6.430000 0.551100 0.351100 MRT15
|
||||
127 2.570000 -7.010000 0.551100 0.351100 MRT16
|
||||
128 3.300000 -2.540000 0.551100 0.351100 MRT21
|
||||
129 4.230000 -3.510000 0.551100 0.351100 MRT22
|
||||
130 4.700000 -4.710000 0.551100 0.351100 MRT23
|
||||
131 4.500000 -5.590000 0.551100 0.351100 MRT24
|
||||
132 4.020000 -6.360000 0.551100 0.351100 MRT25
|
||||
133 3.260000 -7.060000 0.551100 0.351100 MRT26
|
||||
134 4.310000 -2.900000 0.551100 0.351100 MRT31
|
||||
135 5.020000 -4.050000 0.551100 0.351100 MRT32
|
||||
136 5.180000 -5.210000 0.551100 0.351100 MRT33
|
||||
137 4.800000 -6.140000 0.551100 0.351100 MRT34
|
||||
138 4.080000 -7.000000 0.551100 0.351100 MRT35
|
||||
139 5.200000 -3.450000 0.551100 0.351100 MRT41
|
||||
140 5.620000 -4.610000 0.551100 0.351100 MRT42
|
||||
141 5.480000 -5.730000 0.551100 0.351100 MRT43
|
||||
142 4.900000 -6.710000 0.551100 0.351100 MRT44
|
||||
143 0.000000 -4.510000 0.551100 0.351100 MZC01
|
||||
144 0.000000 -5.550000 0.551100 0.351100 MZC02
|
||||
145 0.000000 -1.930000 0.551100 0.351100 MZF01
|
||||
146 0.000000 -2.660000 0.551100 0.351100 MZF02
|
||||
147 0.000000 -3.510000 0.551100 0.351100 MZF03
|
||||
148 0.000000 -8.050000 0.551100 0.351100 MZO01
|
||||
149 0.000000 -8.660000 0.551100 0.351100 MZO02
|
||||
150 0.000000 -6.470000 0.551100 0.351100 MZP01
|
||||
151 0.000000 -7.290000 0.551100 0.351100 MZP02
|
||||
152 5.000000 -2.000000 0.551100 0.351100 SCALE
|
||||
153 -5.50000 -1.500000 0.551100 0.351100 COMNT
|
||||
275
mne/channels/data/layouts/CTF275.lay
Normal file
275
mne/channels/data/layouts/CTF275.lay
Normal file
@@ -0,0 +1,275 @@
|
||||
1 -0.029414 0.428191 0.100000 0.040000 MLC11
|
||||
2 -0.105398 0.378716 0.100000 0.040000 MLC12
|
||||
3 -0.187924 0.341472 0.100000 0.040000 MLC13
|
||||
4 -0.268071 0.285079 0.100000 0.040000 MLC14
|
||||
5 -0.330692 0.221374 0.100000 0.040000 MLC15
|
||||
6 -0.378697 0.144627 0.100000 0.040000 MLC16
|
||||
7 -0.411309 0.049716 0.100000 0.040000 MLC17
|
||||
8 -0.112105 0.295427 0.100000 0.040000 MLC21
|
||||
9 -0.189457 0.259287 0.100000 0.040000 MLC22
|
||||
10 -0.254180 0.203140 0.100000 0.040000 MLC23
|
||||
11 -0.298355 0.137997 0.100000 0.040000 MLC24
|
||||
12 -0.337649 0.050767 0.100000 0.040000 MLC25
|
||||
13 -0.213750 0.138862 0.100000 0.040000 MLC31
|
||||
14 -0.266243 0.056433 0.100000 0.040000 MLC32
|
||||
15 -0.150010 0.191395 0.100000 0.040000 MLC41
|
||||
16 -0.188739 0.067511 0.100000 0.040000 MLC42
|
||||
17 -0.027405 0.285532 0.100000 0.040000 MLC51
|
||||
18 -0.072194 0.217381 0.100000 0.040000 MLC52
|
||||
19 -0.130467 0.119358 0.100000 0.040000 MLC53
|
||||
20 -0.119656 0.041473 0.100000 0.040000 MLC54
|
||||
21 -0.083927 -0.021961 0.100000 0.040000 MLC55
|
||||
22 -0.027810 0.155198 0.100000 0.040000 MLC61
|
||||
23 -0.062042 0.088583 0.100000 0.040000 MLC62
|
||||
24 -0.025587 0.023975 0.100000 0.040000 MLC63
|
||||
25 -0.154623 0.879985 0.100000 0.040000 MLF11
|
||||
26 -0.322264 0.823233 0.100000 0.040000 MLF12
|
||||
27 -0.478342 0.740223 0.100000 0.040000 MLF13
|
||||
28 -0.622338 0.633371 0.100000 0.040000 MLF14
|
||||
29 -0.052995 0.810917 0.100000 0.040000 MLF21
|
||||
30 -0.193258 0.778479 0.100000 0.040000 MLF22
|
||||
31 -0.319702 0.726613 0.100000 0.040000 MLF23
|
||||
32 -0.447065 0.639878 0.100000 0.040000 MLF24
|
||||
33 -0.551024 0.545805 0.100000 0.040000 MLF25
|
||||
34 -0.106993 0.717661 0.100000 0.040000 MLF31
|
||||
35 -0.227303 0.683510 0.100000 0.040000 MLF32
|
||||
36 -0.344973 0.613898 0.100000 0.040000 MLF33
|
||||
37 -0.437794 0.535071 0.100000 0.040000 MLF34
|
||||
38 -0.516944 0.440135 0.100000 0.040000 MLF35
|
||||
39 -0.037498 0.646457 0.100000 0.040000 MLF41
|
||||
40 -0.145663 0.629747 0.100000 0.040000 MLF42
|
||||
41 -0.257022 0.575998 0.100000 0.040000 MLF43
|
||||
42 -0.344741 0.511350 0.100000 0.040000 MLF44
|
||||
43 -0.434608 0.430669 0.100000 0.040000 MLF45
|
||||
44 -0.512928 0.325699 0.100000 0.040000 MLF46
|
||||
45 -0.065241 0.564676 0.100000 0.040000 MLF51
|
||||
46 -0.176866 0.530203 0.100000 0.040000 MLF52
|
||||
47 -0.264799 0.476609 0.100000 0.040000 MLF53
|
||||
48 -0.344149 0.409817 0.100000 0.040000 MLF54
|
||||
49 -0.432009 0.328939 0.100000 0.040000 MLF55
|
||||
50 -0.502082 0.225317 0.100000 0.040000 MLF56
|
||||
51 -0.108196 0.473300 0.100000 0.040000 MLF61
|
||||
52 -0.191454 0.428184 0.100000 0.040000 MLF62
|
||||
53 -0.268505 0.371569 0.100000 0.040000 MLF63
|
||||
54 -0.343162 0.314227 0.100000 0.040000 MLF64
|
||||
55 -0.415355 0.241209 0.100000 0.040000 MLF65
|
||||
56 -0.459435 0.157639 0.100000 0.040000 MLF66
|
||||
57 -0.484998 0.050963 0.100000 0.040000 MLF67
|
||||
58 -0.086701 -0.382545 0.100000 0.040000 MLO11
|
||||
59 -0.173621 -0.361571 0.100000 0.040000 MLO12
|
||||
60 -0.257557 -0.329066 0.100000 0.040000 MLO13
|
||||
61 -0.337129 -0.278810 0.100000 0.040000 MLO14
|
||||
62 -0.050176 -0.456757 0.100000 0.040000 MLO21
|
||||
63 -0.138937 -0.440153 0.100000 0.040000 MLO22
|
||||
64 -0.234625 -0.414329 0.100000 0.040000 MLO23
|
||||
65 -0.323700 -0.370345 0.100000 0.040000 MLO24
|
||||
66 -0.099528 -0.519048 0.100000 0.040000 MLO31
|
||||
67 -0.201576 -0.499713 0.100000 0.040000 MLO32
|
||||
68 -0.300736 -0.464088 0.100000 0.040000 MLO33
|
||||
69 -0.395767 -0.412426 0.100000 0.040000 MLO34
|
||||
70 -0.054171 -0.598130 0.100000 0.040000 MLO41
|
||||
71 -0.162924 -0.587463 0.100000 0.040000 MLO42
|
||||
72 -0.270457 -0.559057 0.100000 0.040000 MLO43
|
||||
73 -0.375045 -0.514503 0.100000 0.040000 MLO44
|
||||
74 -0.114841 -0.674066 0.100000 0.040000 MLO51
|
||||
75 -0.232779 -0.654920 0.100000 0.040000 MLO52
|
||||
76 -0.347032 -0.617457 0.100000 0.040000 MLO53
|
||||
77 -0.050706 -0.086860 0.100000 0.040000 MLP11
|
||||
78 -0.157880 -0.022819 0.100000 0.040000 MLP12
|
||||
79 -0.027384 -0.156541 0.100000 0.040000 MLP21
|
||||
80 -0.125969 -0.090281 0.100000 0.040000 MLP22
|
||||
81 -0.229468 -0.007021 0.100000 0.040000 MLP23
|
||||
82 -0.063851 -0.221282 0.100000 0.040000 MLP31
|
||||
83 -0.117483 -0.164444 0.100000 0.040000 MLP32
|
||||
84 -0.191075 -0.130343 0.100000 0.040000 MLP33
|
||||
85 -0.256310 -0.076997 0.100000 0.040000 MLP34
|
||||
86 -0.301408 -0.017428 0.100000 0.040000 MLP35
|
||||
87 -0.145628 -0.236552 0.100000 0.040000 MLP41
|
||||
88 -0.211609 -0.201084 0.100000 0.040000 MLP42
|
||||
89 -0.277557 -0.161143 0.100000 0.040000 MLP43
|
||||
90 -0.330491 -0.093163 0.100000 0.040000 MLP44
|
||||
91 -0.372987 -0.024823 0.100000 0.040000 MLP45
|
||||
92 -0.032003 -0.311166 0.100000 0.040000 MLP51
|
||||
93 -0.120201 -0.309697 0.100000 0.040000 MLP52
|
||||
94 -0.197411 -0.282930 0.100000 0.040000 MLP53
|
||||
95 -0.273221 -0.242434 0.100000 0.040000 MLP54
|
||||
96 -0.341326 -0.192353 0.100000 0.040000 MLP55
|
||||
97 -0.397869 -0.117824 0.100000 0.040000 MLP56
|
||||
98 -0.439023 -0.040798 0.100000 0.040000 MLP57
|
||||
99 -0.600517 0.341742 0.100000 0.040000 MLT11
|
||||
100 -0.583854 0.221014 0.100000 0.040000 MLT12
|
||||
101 -0.546672 0.118228 0.100000 0.040000 MLT13
|
||||
102 -0.525679 -0.043954 0.100000 0.040000 MLT14
|
||||
103 -0.482366 -0.132402 0.100000 0.040000 MLT15
|
||||
104 -0.408785 -0.217740 0.100000 0.040000 MLT16
|
||||
105 -0.657080 0.441193 0.100000 0.040000 MLT21
|
||||
106 -0.681569 0.225254 0.100000 0.040000 MLT22
|
||||
107 -0.647357 0.101107 0.100000 0.040000 MLT23
|
||||
108 -0.618158 -0.017119 0.100000 0.040000 MLT24
|
||||
109 -0.570925 -0.147553 0.100000 0.040000 MLT25
|
||||
110 -0.505869 -0.237678 0.100000 0.040000 MLT26
|
||||
111 -0.406336 -0.310886 0.100000 0.040000 MLT27
|
||||
112 -0.758025 0.508412 0.100000 0.040000 MLT31
|
||||
113 -0.761740 0.316423 0.100000 0.040000 MLT32
|
||||
114 -0.751268 0.088675 0.100000 0.040000 MLT33
|
||||
115 -0.712573 -0.047448 0.100000 0.040000 MLT34
|
||||
116 -0.658112 -0.159355 0.100000 0.040000 MLT35
|
||||
117 -0.592395 -0.256839 0.100000 0.040000 MLT36
|
||||
118 -0.495312 -0.345113 0.100000 0.040000 MLT37
|
||||
119 -0.885393 0.353401 0.100000 0.040000 MLT41
|
||||
120 -0.847844 0.160648 0.100000 0.040000 MLT42
|
||||
121 -0.823787 -0.043736 0.100000 0.040000 MLT43
|
||||
122 -0.758805 -0.175411 0.100000 0.040000 MLT44
|
||||
123 -0.684634 -0.280647 0.100000 0.040000 MLT45
|
||||
124 -0.591783 -0.373867 0.100000 0.040000 MLT46
|
||||
125 -0.476572 -0.454666 0.100000 0.040000 MLT47
|
||||
126 -0.983285 0.161080 0.100000 0.040000 MLT51
|
||||
127 -0.944753 -0.028756 0.100000 0.040000 MLT52
|
||||
128 -0.872989 -0.188195 0.100000 0.040000 MLT53
|
||||
129 -0.785517 -0.310620 0.100000 0.040000 MLT54
|
||||
130 -0.688014 -0.407791 0.100000 0.040000 MLT55
|
||||
131 -0.571347 -0.497554 0.100000 0.040000 MLT56
|
||||
132 -0.457303 -0.565438 0.100000 0.040000 MLT57
|
||||
133 0.063389 0.426606 0.100000 0.040000 MRC11
|
||||
134 0.137902 0.375428 0.100000 0.040000 MRC12
|
||||
135 0.219516 0.336386 0.100000 0.040000 MRC13
|
||||
136 0.297688 0.277771 0.100000 0.040000 MRC14
|
||||
137 0.355955 0.213304 0.100000 0.040000 MRC15
|
||||
138 0.404150 0.135598 0.100000 0.040000 MRC16
|
||||
139 0.434870 0.040656 0.100000 0.040000 MRC17
|
||||
140 0.142678 0.292126 0.100000 0.040000 MRC21
|
||||
141 0.219470 0.254066 0.100000 0.040000 MRC22
|
||||
142 0.281922 0.196472 0.100000 0.040000 MRC23
|
||||
143 0.325059 0.128269 0.100000 0.040000 MRC24
|
||||
144 0.361805 0.044213 0.100000 0.040000 MRC25
|
||||
145 0.240157 0.132538 0.100000 0.040000 MRC31
|
||||
146 0.290750 0.048681 0.100000 0.040000 MRC32
|
||||
147 0.178346 0.187415 0.100000 0.040000 MRC41
|
||||
148 0.213493 0.062545 0.100000 0.040000 MRC42
|
||||
149 0.058440 0.284194 0.100000 0.040000 MRC51
|
||||
150 0.101359 0.215083 0.100000 0.040000 MRC52
|
||||
151 0.156968 0.115486 0.100000 0.040000 MRC53
|
||||
152 0.144211 0.038238 0.100000 0.040000 MRC54
|
||||
153 0.106635 -0.024115 0.100000 0.040000 MRC55
|
||||
154 0.055338 0.153928 0.100000 0.040000 MRC61
|
||||
155 0.088138 0.086634 0.100000 0.040000 MRC62
|
||||
156 0.049557 0.022680 0.100000 0.040000 MRC63
|
||||
157 0.197726 0.874477 0.100000 0.040000 MRF11
|
||||
158 0.364689 0.811426 0.100000 0.040000 MRF12
|
||||
159 0.518245 0.722181 0.100000 0.040000 MRF13
|
||||
160 0.658136 0.611411 0.100000 0.040000 MRF14
|
||||
161 0.095713 0.807816 0.100000 0.040000 MRF21
|
||||
162 0.233999 0.772267 0.100000 0.040000 MRF22
|
||||
163 0.358821 0.715911 0.100000 0.040000 MRF23
|
||||
164 0.484765 0.623142 0.100000 0.040000 MRF24
|
||||
165 0.585405 0.526324 0.100000 0.040000 MRF25
|
||||
166 0.147633 0.713396 0.100000 0.040000 MRF31
|
||||
167 0.265823 0.676341 0.100000 0.040000 MRF32
|
||||
168 0.382256 0.601823 0.100000 0.040000 MRF33
|
||||
169 0.473850 0.521768 0.100000 0.040000 MRF34
|
||||
170 0.548726 0.424836 0.100000 0.040000 MRF35
|
||||
171 0.075451 0.644959 0.100000 0.040000 MRF41
|
||||
172 0.182924 0.624842 0.100000 0.040000 MRF42
|
||||
173 0.292900 0.568899 0.100000 0.040000 MRF43
|
||||
174 0.379529 0.501620 0.100000 0.040000 MRF44
|
||||
175 0.465778 0.418231 0.100000 0.040000 MRF45
|
||||
176 0.541913 0.311405 0.100000 0.040000 MRF46
|
||||
177 0.102375 0.561860 0.100000 0.040000 MRF51
|
||||
178 0.212879 0.524802 0.100000 0.040000 MRF52
|
||||
179 0.299077 0.468924 0.100000 0.040000 MRF53
|
||||
180 0.376186 0.400507 0.100000 0.040000 MRF54
|
||||
181 0.461150 0.316311 0.100000 0.040000 MRF55
|
||||
182 0.527532 0.213125 0.100000 0.040000 MRF56
|
||||
183 0.143360 0.469857 0.100000 0.040000 MRF61
|
||||
184 0.224730 0.422291 0.100000 0.040000 MRF62
|
||||
185 0.301012 0.364856 0.100000 0.040000 MRF63
|
||||
186 0.373056 0.305526 0.100000 0.040000 MRF64
|
||||
187 0.443172 0.230008 0.100000 0.040000 MRF65
|
||||
188 0.482916 0.144546 0.100000 0.040000 MRF66
|
||||
189 0.509363 0.039864 0.100000 0.040000 MRF67
|
||||
190 0.101312 -0.384464 0.100000 0.040000 MRO11
|
||||
191 0.188777 -0.365285 0.100000 0.040000 MRO12
|
||||
192 0.274286 -0.333994 0.100000 0.040000 MRO13
|
||||
193 0.354824 -0.285987 0.100000 0.040000 MRO14
|
||||
194 0.062633 -0.457476 0.100000 0.040000 MRO21
|
||||
195 0.152570 -0.440791 0.100000 0.040000 MRO22
|
||||
196 0.248565 -0.418432 0.100000 0.040000 MRO23
|
||||
197 0.338845 -0.376241 0.100000 0.040000 MRO24
|
||||
198 0.111160 -0.521375 0.100000 0.040000 MRO31
|
||||
199 0.212466 -0.502957 0.100000 0.040000 MRO32
|
||||
200 0.313063 -0.468465 0.100000 0.040000 MRO33
|
||||
201 0.409385 -0.418933 0.100000 0.040000 MRO34
|
||||
202 0.063270 -0.599845 0.100000 0.040000 MRO41
|
||||
203 0.172480 -0.589865 0.100000 0.040000 MRO42
|
||||
204 0.279919 -0.563495 0.100000 0.040000 MRO43
|
||||
205 0.386742 -0.520993 0.100000 0.040000 MRO44
|
||||
206 0.121969 -0.676100 0.100000 0.040000 MRO51
|
||||
207 0.240331 -0.658743 0.100000 0.040000 MRO52
|
||||
208 0.356156 -0.623026 0.100000 0.040000 MRO53
|
||||
209 0.071855 -0.088269 0.100000 0.040000 MRP11
|
||||
210 0.180874 -0.026656 0.100000 0.040000 MRP12
|
||||
211 0.047839 -0.157479 0.100000 0.040000 MRP21
|
||||
212 0.147221 -0.093053 0.100000 0.040000 MRP22
|
||||
213 0.252807 -0.012686 0.100000 0.040000 MRP23
|
||||
214 0.082012 -0.222790 0.100000 0.040000 MRP31
|
||||
215 0.136825 -0.166819 0.100000 0.040000 MRP32
|
||||
216 0.210796 -0.134697 0.100000 0.040000 MRP33
|
||||
217 0.277587 -0.083946 0.100000 0.040000 MRP34
|
||||
218 0.322867 -0.024718 0.100000 0.040000 MRP35
|
||||
219 0.162954 -0.240118 0.100000 0.040000 MRP41
|
||||
220 0.230510 -0.205793 0.100000 0.040000 MRP42
|
||||
221 0.296283 -0.169213 0.100000 0.040000 MRP43
|
||||
222 0.351532 -0.101316 0.100000 0.040000 MRP44
|
||||
223 0.395383 -0.032706 0.100000 0.040000 MRP45
|
||||
224 0.048690 -0.312307 0.100000 0.040000 MRP51
|
||||
225 0.137008 -0.312230 0.100000 0.040000 MRP52
|
||||
226 0.214275 -0.287336 0.100000 0.040000 MRP53
|
||||
227 0.290637 -0.248388 0.100000 0.040000 MRP54
|
||||
228 0.360555 -0.199475 0.100000 0.040000 MRP55
|
||||
229 0.419086 -0.126737 0.100000 0.040000 MRP56
|
||||
230 0.463976 -0.050387 0.100000 0.040000 MRP57
|
||||
231 0.628409 0.323946 0.100000 0.040000 MRT11
|
||||
232 0.609835 0.205866 0.100000 0.040000 MRT12
|
||||
233 0.571838 0.105198 0.100000 0.040000 MRT13
|
||||
234 0.544252 -0.054539 0.100000 0.040000 MRT14
|
||||
235 0.500732 -0.143104 0.100000 0.040000 MRT15
|
||||
236 0.427582 -0.225716 0.100000 0.040000 MRT16
|
||||
237 0.685440 0.421411 0.100000 0.040000 MRT21
|
||||
238 0.705800 0.208084 0.100000 0.040000 MRT22
|
||||
239 0.667392 0.088109 0.100000 0.040000 MRT23
|
||||
240 0.637062 -0.030086 0.100000 0.040000 MRT24
|
||||
241 0.588417 -0.159092 0.100000 0.040000 MRT25
|
||||
242 0.522350 -0.247039 0.100000 0.040000 MRT26
|
||||
243 0.422093 -0.318167 0.100000 0.040000 MRT27
|
||||
244 0.789789 0.482334 0.100000 0.040000 MRT31
|
||||
245 0.786599 0.293212 0.100000 0.040000 MRT32
|
||||
246 0.770320 0.070984 0.100000 0.040000 MRT33
|
||||
247 0.731214 -0.061690 0.100000 0.040000 MRT34
|
||||
248 0.674802 -0.172109 0.100000 0.040000 MRT35
|
||||
249 0.607500 -0.268226 0.100000 0.040000 MRT36
|
||||
250 0.510484 -0.353209 0.100000 0.040000 MRT37
|
||||
251 0.910695 0.324672 0.100000 0.040000 MRT41
|
||||
252 0.867982 0.137317 0.100000 0.040000 MRT42
|
||||
253 0.839920 -0.060661 0.100000 0.040000 MRT43
|
||||
254 0.773256 -0.189639 0.100000 0.040000 MRT44
|
||||
255 0.698444 -0.293384 0.100000 0.040000 MRT45
|
||||
256 0.604482 -0.385347 0.100000 0.040000 MRT46
|
||||
257 0.489291 -0.462983 0.100000 0.040000 MRT47
|
||||
258 1.000000 0.135648 0.100000 0.040000 MRT51
|
||||
259 0.959092 -0.049055 0.100000 0.040000 MRT52
|
||||
260 0.886964 -0.204289 0.100000 0.040000 MRT53
|
||||
261 0.796842 -0.324881 0.100000 0.040000 MRT54
|
||||
262 0.698769 -0.420596 0.100000 0.040000 MRT55
|
||||
263 0.582500 -0.506810 0.100000 0.040000 MRT56
|
||||
264 0.467934 -0.572706 0.100000 0.040000 MRT57
|
||||
265 0.016063 0.355556 0.100000 0.040000 MZC01
|
||||
266 0.014747 0.217488 0.100000 0.040000 MZC02
|
||||
267 0.013199 0.087763 0.100000 0.040000 MZC03
|
||||
268 0.011197 -0.046263 0.100000 0.040000 MZC04
|
||||
269 0.022267 0.897778 0.100000 0.040000 MZF01
|
||||
270 0.019840 0.730557 0.100000 0.040000 MZF02
|
||||
271 0.017559 0.517279 0.100000 0.040000 MZF03
|
||||
272 0.007392 -0.378522 0.100000 0.040000 MZO01
|
||||
273 0.005634 -0.528155 0.100000 0.040000 MZO02
|
||||
274 0.003722 -0.675585 0.100000 0.040000 MZO03
|
||||
275 0.008864 -0.248776 0.100000 0.040000 MZP01
|
||||
337
mne/channels/data/layouts/EEG1005.lay
Normal file
337
mne/channels/data/layouts/EEG1005.lay
Normal file
@@ -0,0 +1,337 @@
|
||||
1 -0.485328 1.493835 0.069221 0.051916 Fp1
|
||||
2 0.000000 1.570696 0.069221 0.051916 Fpz
|
||||
3 0.485501 1.493884 0.069221 0.051916 Fp2
|
||||
4 -1.154207 1.588656 0.069221 0.051916 AF9
|
||||
5 -0.923319 1.270781 0.069221 0.051916 AF7
|
||||
6 -0.706117 1.226029 0.069221 0.051916 AF5
|
||||
7 -0.477022 1.197254 0.069221 0.051916 AF3
|
||||
8 -0.240008 1.182594 0.069221 0.051916 AF1
|
||||
9 0.000000 1.178022 0.069221 0.051916 AFz
|
||||
10 0.240008 1.182594 0.069221 0.051916 AF2
|
||||
11 0.476904 1.197159 0.069221 0.051916 AF4
|
||||
12 0.706117 1.226029 0.069221 0.051916 AF6
|
||||
13 0.923319 1.270781 0.069221 0.051916 AF8
|
||||
14 1.154207 1.588656 0.069221 0.051916 AF10
|
||||
15 -1.588376 1.154294 0.069221 0.051916 F9
|
||||
16 -1.270781 0.923319 0.069221 0.051916 F7
|
||||
17 -0.968950 0.852434 0.069221 0.051916 F5
|
||||
18 -0.652084 0.812357 0.069221 0.051916 F3
|
||||
19 -0.327689 0.791876 0.069221 0.051916 F1
|
||||
20 0.000000 0.785398 0.069221 0.051916 Fz
|
||||
21 0.327689 0.791876 0.069221 0.051916 F2
|
||||
22 0.652084 0.812357 0.069221 0.051916 F4
|
||||
23 0.968950 0.852434 0.069221 0.051916 F6
|
||||
24 1.270781 0.923319 0.069221 0.051916 F8
|
||||
25 1.588496 1.154168 0.069221 0.051916 F10
|
||||
26 -1.867677 0.606883 0.069221 0.051916 FT9
|
||||
27 -1.493930 0.485359 0.069221 0.051916 FT7
|
||||
28 -1.126134 0.436152 0.069221 0.051916 FC5
|
||||
29 -0.752811 0.409634 0.069221 0.051916 FC3
|
||||
30 -0.376942 0.396836 0.069221 0.051916 FC1
|
||||
31 0.000000 0.392844 0.069221 0.051916 FCz
|
||||
32 0.376942 0.396836 0.069221 0.051916 FC2
|
||||
33 0.752811 0.409634 0.069221 0.051916 FC4
|
||||
34 1.126134 0.436152 0.069221 0.051916 FC6
|
||||
35 1.493930 0.485359 0.069221 0.051916 FT8
|
||||
36 1.867677 0.606883 0.069221 0.051916 FT10
|
||||
37 -1.963487 -0.000213 0.069221 0.051916 T9
|
||||
38 -1.570796 0.000000 0.069221 0.051916 T7
|
||||
39 -1.178106 0.000128 0.069221 0.051916 C5
|
||||
40 -0.785398 0.000111 0.069221 0.051916 C3
|
||||
41 -0.392736 0.000205 0.069221 0.051916 C1
|
||||
42 0.000000 0.000200 0.069221 0.051916 Cz
|
||||
43 0.392736 0.000103 0.069221 0.051916 C2
|
||||
44 0.785398 0.000111 0.069221 0.051916 C4
|
||||
45 1.178106 0.000128 0.069221 0.051916 C6
|
||||
46 1.570796 -0.000000 0.069221 0.051916 T8
|
||||
47 1.963487 -0.000000 0.069221 0.051916 T10
|
||||
48 -1.867677 -0.606883 0.069221 0.051916 TP9
|
||||
49 -1.494026 -0.485389 0.069221 0.051916 TP7
|
||||
50 -1.126048 -0.435839 0.069221 0.051916 CP5
|
||||
51 -0.752775 -0.409460 0.069221 0.051916 CP3
|
||||
52 -0.376804 -0.396486 0.069221 0.051916 CP1
|
||||
53 -0.000000 -0.392551 0.069221 0.051916 CPz
|
||||
54 0.376804 -0.396486 0.069221 0.051916 CP2
|
||||
55 0.752795 -0.409357 0.069221 0.051916 CP4
|
||||
56 1.126048 -0.435839 0.069221 0.051916 CP6
|
||||
57 1.494026 -0.485389 0.069221 0.051916 TP8
|
||||
58 1.867603 -0.607072 0.069221 0.051916 TP10
|
||||
59 -1.588496 -1.154168 0.069221 0.051916 P9
|
||||
60 -1.270862 -0.923378 0.069221 0.051916 P7
|
||||
61 -0.969077 -0.852293 0.069221 0.051916 P5
|
||||
62 -0.652231 -0.811998 0.069221 0.051916 P3
|
||||
63 -0.327776 -0.791360 0.069221 0.051916 P1
|
||||
64 -0.000000 -0.785257 0.069221 0.051916 Pz
|
||||
65 0.327776 -0.791360 0.069221 0.051916 P2
|
||||
66 0.652231 -0.811998 0.069221 0.051916 P4
|
||||
67 0.969077 -0.852293 0.069221 0.051916 P6
|
||||
68 1.270862 -0.923378 0.069221 0.051916 P8
|
||||
69 1.588496 -1.154168 0.069221 0.051916 P10
|
||||
70 -1.154207 -1.588656 0.069221 0.051916 PO9
|
||||
71 -0.923319 -1.270781 0.069221 0.051916 PO7
|
||||
72 -0.706303 -1.225606 0.069221 0.051916 PO5
|
||||
73 -0.476710 -1.197888 0.069221 0.051916 PO3
|
||||
74 -0.240097 -1.182523 0.069221 0.051916 PO1
|
||||
75 -0.000000 -1.178022 0.069221 0.051916 POz
|
||||
76 0.240223 -1.182505 0.069221 0.051916 PO2
|
||||
77 0.476710 -1.197888 0.069221 0.051916 PO4
|
||||
78 0.706303 -1.225606 0.069221 0.051916 PO6
|
||||
79 0.923319 -1.270781 0.069221 0.051916 PO8
|
||||
80 1.154207 -1.588656 0.069221 0.051916 PO10
|
||||
81 -0.485359 -1.493930 0.069221 0.051916 O1
|
||||
82 -0.000000 -1.570796 0.069221 0.051916 Oz
|
||||
83 0.485359 -1.493930 0.069221 0.051916 O2
|
||||
84 -0.606613 -1.867239 0.069221 0.051916 I1
|
||||
85 -0.000000 -1.963478 0.069221 0.051916 Iz
|
||||
86 0.606613 -1.867239 0.069221 0.051916 I2
|
||||
87 -0.802226 1.574520 0.069221 0.051916 AFp9h
|
||||
88 -0.626475 1.393612 0.069221 0.051916 AFp7h
|
||||
89 -0.451133 1.382849 0.069221 0.051916 AFp5h
|
||||
90 -0.271959 1.376738 0.069221 0.051916 AFp3h
|
||||
91 -0.090887 1.374548 0.069221 0.051916 AFp1h
|
||||
92 0.090887 1.374548 0.069221 0.051916 AFp2h
|
||||
93 0.271959 1.376738 0.069221 0.051916 AFp4h
|
||||
94 0.451133 1.382849 0.069221 0.051916 AFp6h
|
||||
95 0.626475 1.393612 0.069221 0.051916 AFp8h
|
||||
96 0.802226 1.574520 0.069221 0.051916 AFp10h
|
||||
97 -1.249550 1.249550 0.069221 0.051916 AFF9h
|
||||
98 -0.982948 1.075122 0.069221 0.051916 AFF7h
|
||||
99 -0.713694 1.024626 0.069221 0.051916 AFF5h
|
||||
100 -0.432315 0.996167 0.069221 0.051916 AFF3h
|
||||
101 -0.144727 0.983315 0.069221 0.051916 AFF1h
|
||||
102 0.144727 0.983315 0.069221 0.051916 AFF2h
|
||||
103 0.432315 0.996167 0.069221 0.051916 AFF4h
|
||||
104 0.713694 1.024626 0.069221 0.051916 AFF6h
|
||||
105 0.982881 1.075049 0.069221 0.051916 AFF8h
|
||||
106 1.249550 1.249550 0.069221 0.051916 AFF10h
|
||||
107 -1.574645 0.802293 0.069221 0.051916 FFT9h
|
||||
108 -1.232019 0.675885 0.069221 0.051916 FFT7h
|
||||
109 -0.886990 0.627578 0.069221 0.051916 FFC5h
|
||||
110 -0.534535 0.601827 0.069221 0.051916 FFC3h
|
||||
111 -0.178478 0.590622 0.069221 0.051916 FFC1h
|
||||
112 0.178478 0.590622 0.069221 0.051916 FFC2h
|
||||
113 0.534535 0.601827 0.069221 0.051916 FFC4h
|
||||
114 0.886990 0.627578 0.069221 0.051916 FFC6h
|
||||
115 1.232019 0.675885 0.069221 0.051916 FFT8h
|
||||
116 1.574645 0.802293 0.069221 0.051916 FFT10h
|
||||
117 -1.745475 0.276484 0.069221 0.051916 FTT9h
|
||||
118 -1.358553 0.230430 0.069221 0.051916 FTT7h
|
||||
119 -0.971386 0.211155 0.069221 0.051916 FCC5h
|
||||
120 -0.583084 0.201295 0.069221 0.051916 FCC3h
|
||||
121 -0.194460 0.196994 0.069221 0.051916 FCC1h
|
||||
122 0.194460 0.196994 0.069221 0.051916 FCC2h
|
||||
123 0.583084 0.201295 0.069221 0.051916 FCC4h
|
||||
124 0.971386 0.211155 0.069221 0.051916 FCC6h
|
||||
125 1.358553 0.230430 0.069221 0.051916 FTT8h
|
||||
126 1.745475 0.276484 0.069221 0.051916 FTT10h
|
||||
127 -1.745506 -0.276309 0.069221 0.051916 TTP9h
|
||||
128 -1.358573 -0.230293 0.069221 0.051916 TTP7h
|
||||
129 -0.971375 -0.211008 0.069221 0.051916 CCP5h
|
||||
130 -0.583085 -0.200906 0.069221 0.051916 CCP3h
|
||||
131 -0.194448 -0.196679 0.069221 0.051916 CCP1h
|
||||
132 0.194448 -0.196679 0.069221 0.051916 CCP2h
|
||||
133 0.583078 -0.201010 0.069221 0.051916 CCP4h
|
||||
134 0.971375 -0.211008 0.069221 0.051916 CCP6h
|
||||
135 1.358573 -0.230293 0.069221 0.051916 TTP8h
|
||||
136 1.745475 -0.276484 0.069221 0.051916 TTP10h
|
||||
137 -1.574667 -0.802213 0.069221 0.051916 TPP9h
|
||||
138 -1.232021 -0.675979 0.069221 0.051916 TPP7h
|
||||
139 -0.887025 -0.627306 0.069221 0.051916 CPP5h
|
||||
140 -0.534524 -0.601312 0.069221 0.051916 CPP3h
|
||||
141 -0.178473 -0.590144 0.069221 0.051916 CPP1h
|
||||
142 0.178473 -0.590144 0.069221 0.051916 CPP2h
|
||||
143 0.534524 -0.601312 0.069221 0.051916 CPP4h
|
||||
144 0.887025 -0.627306 0.069221 0.051916 CPP6h
|
||||
145 1.231976 -0.676032 0.069221 0.051916 TPP8h
|
||||
146 1.574586 -0.802352 0.069221 0.051916 TPP10h
|
||||
147 -1.249639 -1.249639 0.069221 0.051916 PPO9h
|
||||
148 -0.983137 -1.074700 0.069221 0.051916 PPO7h
|
||||
149 -0.713821 -1.024109 0.069221 0.051916 PPO5h
|
||||
150 -0.432363 -0.995909 0.069221 0.051916 PPO3h
|
||||
151 -0.144761 -0.982953 0.069221 0.051916 PPO1h
|
||||
152 0.144761 -0.982953 0.069221 0.051916 PPO2h
|
||||
153 0.432253 -0.995937 0.069221 0.051916 PPO4h
|
||||
154 0.713967 -1.023998 0.069221 0.051916 PPO6h
|
||||
155 0.983137 -1.074700 0.069221 0.051916 PPO8h
|
||||
156 1.249639 -1.249639 0.069221 0.051916 PPO10h
|
||||
157 -0.802293 -1.574645 0.069221 0.051916 POO9h
|
||||
158 -0.626849 -1.393237 0.069221 0.051916 POO7h
|
||||
159 -0.451236 -1.382715 0.069221 0.051916 POO5h
|
||||
160 -0.271951 -1.377572 0.069221 0.051916 POO3h
|
||||
161 -0.090910 -1.374606 0.069221 0.051916 POO1h
|
||||
162 0.090910 -1.374606 0.069221 0.051916 POO2h
|
||||
163 0.271951 -1.377572 0.069221 0.051916 POO4h
|
||||
164 0.451236 -1.382715 0.069221 0.051916 POO6h
|
||||
165 0.626849 -1.393237 0.069221 0.051916 POO8h
|
||||
166 0.802293 -1.574645 0.069221 0.051916 POO10h
|
||||
167 -0.276453 -1.745460 0.069221 0.051916 OI1h
|
||||
168 0.276453 -1.745460 0.069221 0.051916 OI2h
|
||||
169 -0.245655 1.551367 0.069221 0.051916 Fp1h
|
||||
170 0.245655 1.551367 0.069221 0.051916 Fp2h
|
||||
171 -1.038573 1.429729 0.069221 0.051916 AF9h
|
||||
172 -0.816811 1.245775 0.069221 0.051916 AF7h
|
||||
173 -0.592502 1.210176 0.069221 0.051916 AF5h
|
||||
174 -0.359066 1.188527 0.069221 0.051916 AF3h
|
||||
175 -0.120203 1.179114 0.069221 0.051916 AF1h
|
||||
176 0.120212 1.179076 0.069221 0.051916 AF2h
|
||||
177 0.359066 1.188527 0.069221 0.051916 AF4h
|
||||
178 0.592545 1.210263 0.069221 0.051916 AF6h
|
||||
179 0.816811 1.245775 0.069221 0.051916 AF8h
|
||||
180 1.038668 1.429679 0.069221 0.051916 AF10h
|
||||
181 -1.429588 1.038701 0.069221 0.051916 F9h
|
||||
182 -1.122287 0.883303 0.069221 0.051916 F7h
|
||||
183 -0.811863 0.829210 0.069221 0.051916 F5h
|
||||
184 -0.490601 0.800049 0.069221 0.051916 F3h
|
||||
185 -0.164017 0.787126 0.069221 0.051916 F1h
|
||||
186 0.164017 0.787126 0.069221 0.051916 F2h
|
||||
187 0.490601 0.800049 0.069221 0.051916 F4h
|
||||
188 0.811863 0.829210 0.069221 0.051916 F6h
|
||||
189 1.122287 0.883303 0.069221 0.051916 F8h
|
||||
190 1.429588 1.038701 0.069221 0.051916 F10h
|
||||
191 -1.680799 0.546075 0.069221 0.051916 FT9h
|
||||
192 -1.310995 0.457012 0.069221 0.051916 FT7h
|
||||
193 -0.939857 0.420814 0.069221 0.051916 FC5h
|
||||
194 -0.565142 0.401905 0.069221 0.051916 FC3h
|
||||
195 -0.188491 0.393826 0.069221 0.051916 FC1h
|
||||
196 0.188491 0.393826 0.069221 0.051916 FC2h
|
||||
197 0.565142 0.401905 0.069221 0.051916 FC4h
|
||||
198 0.939857 0.420814 0.069221 0.051916 FC6h
|
||||
199 1.310995 0.457012 0.069221 0.051916 FT8h
|
||||
200 1.680740 0.546236 0.069221 0.051916 FT10h
|
||||
201 -1.767191 0.000000 0.069221 0.051916 T9h
|
||||
202 -1.374500 0.000000 0.069221 0.051916 T7h
|
||||
203 -0.981850 0.000118 0.069221 0.051916 C5h
|
||||
204 -0.589058 0.000212 0.069221 0.051916 C3h
|
||||
205 -0.196395 0.000101 0.069221 0.051916 C1h
|
||||
206 0.196395 0.000201 0.069221 0.051916 C2h
|
||||
207 0.589058 0.000212 0.069221 0.051916 C4h
|
||||
208 0.981850 0.000118 0.069221 0.051916 C6h
|
||||
209 1.374500 -0.000000 0.069221 0.051916 T8h
|
||||
210 1.767191 -0.000000 0.069221 0.051916 T10h
|
||||
211 -1.680646 -0.546088 0.069221 0.051916 TP9h
|
||||
212 -1.310970 -0.456960 0.069221 0.051916 TP7h
|
||||
213 -0.939815 -0.420500 0.069221 0.051916 CP5h
|
||||
214 -0.565062 -0.401491 0.069221 0.051916 CP3h
|
||||
215 -0.188515 -0.393352 0.069221 0.051916 CP1h
|
||||
216 0.188515 -0.393352 0.069221 0.051916 CP2h
|
||||
217 0.565062 -0.401491 0.069221 0.051916 CP4h
|
||||
218 0.939815 -0.420500 0.069221 0.051916 CP6h
|
||||
219 1.310970 -0.456960 0.069221 0.051916 TP8h
|
||||
220 1.680646 -0.546088 0.069221 0.051916 TP10h
|
||||
221 -1.429668 -1.038758 0.069221 0.051916 P9h
|
||||
222 -1.122286 -0.883271 0.069221 0.051916 P7h
|
||||
223 -0.812037 -0.829137 0.069221 0.051916 P5h
|
||||
224 -0.490726 -0.799336 0.069221 0.051916 P3h
|
||||
225 -0.164146 -0.786762 0.069221 0.051916 P1h
|
||||
226 0.164146 -0.786762 0.069221 0.051916 P2h
|
||||
227 0.490600 -0.799436 0.069221 0.051916 P4h
|
||||
228 0.812037 -0.829137 0.069221 0.051916 P6h
|
||||
229 1.122286 -0.883271 0.069221 0.051916 P8h
|
||||
230 1.429668 -1.038758 0.069221 0.051916 P10h
|
||||
231 -1.038821 -1.429709 0.069221 0.051916 PO9h
|
||||
232 -0.816502 -1.246067 0.069221 0.051916 PO7h
|
||||
233 -0.593079 -1.209372 0.069221 0.051916 PO5h
|
||||
234 -0.359230 -1.188332 0.069221 0.051916 PO3h
|
||||
235 -0.120221 -1.179168 0.069221 0.051916 PO1h
|
||||
236 0.120348 -1.179159 0.069221 0.051916 PO2h
|
||||
237 0.359230 -1.188332 0.069221 0.051916 PO4h
|
||||
238 0.593079 -1.209372 0.069221 0.051916 PO6h
|
||||
239 0.816502 -1.246067 0.069221 0.051916 PO8h
|
||||
240 1.038710 -1.429804 0.069221 0.051916 PO10h
|
||||
241 -0.245671 -1.551466 0.069221 0.051916 O1h
|
||||
242 0.245671 -1.551466 0.069221 0.051916 O2h
|
||||
243 -0.307129 -1.939338 0.069221 0.051916 I1h
|
||||
244 0.307129 -1.939338 0.069221 0.051916 I2h
|
||||
245 -0.891328 1.749684 0.069221 0.051916 AFp9
|
||||
246 -0.713143 1.399582 0.069221 0.051916 AFp7
|
||||
247 -0.539182 1.387878 0.069221 0.051916 AFp5
|
||||
248 -0.361777 1.379743 0.069221 0.051916 AFp3
|
||||
249 -0.181624 1.374948 0.069221 0.051916 AFp1
|
||||
250 0.000000 1.374461 0.069221 0.051916 AFpz
|
||||
251 0.181624 1.374948 0.069221 0.051916 AFp2
|
||||
252 0.361802 1.379839 0.069221 0.051916 AFp4
|
||||
253 0.539182 1.387878 0.069221 0.051916 AFp6
|
||||
254 0.713143 1.399582 0.069221 0.051916 AFp8
|
||||
255 0.891489 1.749582 0.069221 0.051916 AFp10
|
||||
256 -1.388504 1.388504 0.069221 0.051916 AFF9
|
||||
257 -1.110721 1.110721 0.069221 0.051916 AFF7
|
||||
258 -0.850463 1.046170 0.069221 0.051916 AFF5
|
||||
259 -0.574170 1.008058 0.069221 0.051916 AFF3
|
||||
260 -0.288981 0.988233 0.069221 0.051916 AFF1
|
||||
261 0.000000 0.981739 0.069221 0.051916 AFFz
|
||||
262 0.288981 0.988233 0.069221 0.051916 AFF2
|
||||
263 0.574170 1.008058 0.069221 0.051916 AFF4
|
||||
264 0.850463 1.046170 0.069221 0.051916 AFF6
|
||||
265 1.110721 1.110721 0.069221 0.051916 AFF8
|
||||
266 1.388504 1.388504 0.069221 0.051916 AFF10
|
||||
267 -1.749576 0.891591 0.069221 0.051916 FFT9
|
||||
268 -1.399582 0.713143 0.069221 0.051916 FFT7
|
||||
269 -1.060830 0.648168 0.069221 0.051916 FFC5
|
||||
270 -0.711350 0.612390 0.069221 0.051916 FFC3
|
||||
271 -0.356750 0.594619 0.069221 0.051916 FFC1
|
||||
272 0.000000 0.589085 0.069221 0.051916 FFCz
|
||||
273 0.356750 0.594619 0.069221 0.051916 FFC2
|
||||
274 0.711350 0.612390 0.069221 0.051916 FFC4
|
||||
275 1.060749 0.648119 0.069221 0.051916 FFC6
|
||||
276 1.399582 0.713143 0.069221 0.051916 FFT8
|
||||
277 1.749576 0.891591 0.069221 0.051916 FFT10
|
||||
278 -1.939489 0.307119 0.069221 0.051916 FTT9
|
||||
279 -1.551442 0.245824 0.069221 0.051916 FTT7
|
||||
280 -1.165132 0.219351 0.069221 0.051916 FCC5
|
||||
281 -0.777319 0.205363 0.069221 0.051916 FCC3
|
||||
282 -0.388766 0.198515 0.069221 0.051916 FCC1
|
||||
283 0.000000 0.196434 0.069221 0.051916 FCCz
|
||||
284 0.388766 0.198515 0.069221 0.051916 FCC2
|
||||
285 0.777319 0.205363 0.069221 0.051916 FCC4
|
||||
286 1.165132 0.219351 0.069221 0.051916 FCC6
|
||||
287 1.551466 0.245671 0.069221 0.051916 FTT8
|
||||
288 1.939489 0.307119 0.069221 0.051916 FTT10
|
||||
289 -1.939553 -0.307197 0.069221 0.051916 TTP9
|
||||
290 -1.551565 -0.245687 0.069221 0.051916 TTP7
|
||||
291 -1.165206 -0.219084 0.069221 0.051916 CCP5
|
||||
292 -0.777275 -0.205069 0.069221 0.051916 CCP3
|
||||
293 -0.388806 -0.198175 0.069221 0.051916 CCP1
|
||||
294 -0.000000 -0.196218 0.069221 0.051916 CCPz
|
||||
295 0.388801 -0.198275 0.069221 0.051916 CCP2
|
||||
296 0.777275 -0.205069 0.069221 0.051916 CCP4
|
||||
297 1.165206 -0.219084 0.069221 0.051916 CCP6
|
||||
298 1.551565 -0.245687 0.069221 0.051916 TTP8
|
||||
299 1.939553 -0.307197 0.069221 0.051916 TTP10
|
||||
300 -1.749664 -0.891531 0.069221 0.051916 TPP9
|
||||
301 -1.399671 -0.713188 0.069221 0.051916 TPP7
|
||||
302 -1.060852 -0.647970 0.069221 0.051916 CPP5
|
||||
303 -0.711356 -0.612379 0.069221 0.051916 CPP3
|
||||
304 -0.356663 -0.594548 0.069221 0.051916 CPP1
|
||||
305 -0.000000 -0.588863 0.069221 0.051916 CPPz
|
||||
306 0.356778 -0.594448 0.069221 0.051916 CPP2
|
||||
307 0.711384 -0.612287 0.069221 0.051916 CPP4
|
||||
308 1.060852 -0.647970 0.069221 0.051916 CPP6
|
||||
309 1.399671 -0.713188 0.069221 0.051916 TPP8
|
||||
310 1.749664 -0.891531 0.069221 0.051916 TPP10
|
||||
311 -1.388427 -1.388427 0.069221 0.051916 PPO9
|
||||
312 -1.110721 -1.110721 0.069221 0.051916 PPO7
|
||||
313 -0.850511 -1.046155 0.069221 0.051916 PPO5
|
||||
314 -0.574228 -1.007462 0.069221 0.051916 PPO3
|
||||
315 -0.289055 -0.987715 0.069221 0.051916 PPO1
|
||||
316 -0.000000 -0.981655 0.069221 0.051916 PPOz
|
||||
317 0.289055 -0.987715 0.069221 0.051916 PPO2
|
||||
318 0.574228 -1.007462 0.069221 0.051916 PPO4
|
||||
319 0.850454 -1.046223 0.069221 0.051916 PPO6
|
||||
320 1.110721 -1.110721 0.069221 0.051916 PPO8
|
||||
321 1.388427 -1.388427 0.069221 0.051916 PPO10
|
||||
322 -0.891143 -1.749540 0.069221 0.051916 POO9
|
||||
323 -0.713143 -1.399582 0.069221 0.051916 POO7
|
||||
324 -0.539360 -1.387717 0.069221 0.051916 POO5
|
||||
325 -0.362020 -1.379310 0.069221 0.051916 POO3
|
||||
326 -0.181486 -1.375484 0.069221 0.051916 POO1
|
||||
327 -0.000000 -1.374422 0.069221 0.051916 POOz
|
||||
328 0.181626 -1.375468 0.069221 0.051916 POO2
|
||||
329 0.362020 -1.379310 0.069221 0.051916 POO4
|
||||
330 0.539360 -1.387717 0.069221 0.051916 POO6
|
||||
331 0.713143 -1.399582 0.069221 0.051916 POO8
|
||||
332 0.891143 -1.749540 0.069221 0.051916 POO10
|
||||
333 -0.546073 -1.680586 0.069221 0.051916 OI1
|
||||
334 -0.000000 -1.767132 0.069221 0.051916 OIz
|
||||
335 0.546073 -1.680586 0.069221 0.051916 OI2
|
||||
336 -1.963487 1.749684 0.069221 0.051916 COMNT
|
||||
337 1.963487 1.749684 0.069221 0.051916 SCALE
|
||||
259
mne/channels/data/layouts/EGI256.lout
Normal file
259
mne/channels/data/layouts/EGI256.lout
Normal file
@@ -0,0 +1,259 @@
|
||||
-42.19 43.52 -41.70 28.71
|
||||
001 0.235020883 0.231411875 0.023840595 0.024283894 EEG 001
|
||||
002 0.180062322 0.24066255 0.023840595 0.024283894 EEG 002
|
||||
003 0.134498312 0.239722125 0.023840595 0.024283894 EEG 003
|
||||
004 0.098183698 0.230899463 0.023840595 0.024283894 EEG 004
|
||||
005 0.066117291 0.206774428 0.023840595 0.024283894 EEG 005
|
||||
006 0.038417416 0.175224454 0.023840595 0.024283894 EEG 006
|
||||
007 0.019093339 0.142334211 0.023840595 0.024283894 EEG 007
|
||||
008 0 0.106825455 0.023840595 0.024283894 EEG 008
|
||||
009 -0.017539353 0.062826857 0.023840595 0.024283894 EEG 009
|
||||
010 0.181942866 0.296413546 0.023840595 0.024283894 EEG 010
|
||||
011 0.13038807 0.293232492 0.023840595 0.024283894 EEG 011
|
||||
012 0.084273706 0.277147412 0.023840595 0.024283894 EEG 012
|
||||
013 0.050175359 0.251802841 0.023840595 0.024283894 EEG 013
|
||||
014 0.021773201 0.21699757 0.023840595 0.024283894 EEG 014
|
||||
015 0 0.180469732 0.023840595 0.024283894 EEG 015
|
||||
016 -0.019093339 0.142334211 0.023840595 0.024283894 EEG 016
|
||||
017 -0.036255497 0.09269913 0.023840595 0.024283894 EEG 017
|
||||
018 0.113098849 0.348229946 0.023840595 0.024283894 EEG 018
|
||||
019 0.069000992 0.329792276 0.023840595 0.024283894 EEG 019
|
||||
020 0.029776066 0.297506089 0.023840595 0.024283894 EEG 020
|
||||
021 0 0.258687873 0.023840595 0.024283894 EEG 021
|
||||
022 -0.021773201 0.21699757 0.023840595 0.024283894 EEG 022
|
||||
023 -0.038417416 0.175224454 0.023840595 0.024283894 EEG 023
|
||||
024 -0.055153266 0.126645408 0.023840595 0.024283894 EEG 024
|
||||
025 0.036940443 0.37703699 0.023840595 0.024283894 EEG 025
|
||||
026 0 0.343720309 0.023840595 0.024283894 EEG 026
|
||||
027 -0.029776066 0.297506089 0.023840595 0.024283894 EEG 027
|
||||
028 -0.050175359 0.251802841 0.023840595 0.024283894 EEG 028
|
||||
029 -0.066117291 0.206774428 0.023840595 0.024283894 EEG 029
|
||||
030 -0.079525249 0.158534511 0.023840595 0.024283894 EEG 030
|
||||
031 0 0.415202995 0.023840595 0.024283894 EEG 031
|
||||
032 -0.036940443 0.37703699 0.023840595 0.024283894 EEG 032
|
||||
033 -0.069000992 0.329792276 0.023840595 0.024283894 EEG 033
|
||||
034 -0.084273706 0.277147412 0.023840595 0.024283894 EEG 034
|
||||
035 -0.098183698 0.230899463 0.023840595 0.024283894 EEG 035
|
||||
036 -0.098479668 0.187945851 0.023840595 0.024283894 EEG 036
|
||||
037 -0.113098849 0.348229946 0.023840595 0.024283894 EEG 037
|
||||
038 -0.13038807 0.293232492 0.023840595 0.024283894 EEG 038
|
||||
039 -0.134498312 0.239722125 0.023840595 0.024283894 EEG 039
|
||||
040 -0.130890927 0.191286703 0.023840595 0.024283894 EEG 040
|
||||
041 -0.116009122 0.150111634 0.023840595 0.024283894 EEG 041
|
||||
042 -0.094840856 0.116834626 0.023840595 0.024283894 EEG 042
|
||||
043 -0.076990927 0.086006856 0.023840595 0.024283894 EEG 043
|
||||
044 -0.055587556 0.053147386 0.023840595 0.024283894 EEG 044
|
||||
045 -0.029699902 0.019405615 0.023840595 0.024283894 EEG 045
|
||||
046 -0.181942866 0.296413546 0.023840595 0.024283894 EEG 046
|
||||
047 -0.180062322 0.24066255 0.023840595 0.024283894 EEG 047
|
||||
048 -0.17285275 0.187572361 0.023840595 0.024283894 EEG 048
|
||||
049 -0.156410469 0.141423921 0.023840595 0.024283894 EEG 049
|
||||
050 -0.132742164 0.104084677 0.023840595 0.024283894 EEG 050
|
||||
051 -0.108362109 0.07207399 0.023840595 0.024283894 EEG 051
|
||||
052 -0.087032894 0.041560718 0.023840595 0.024283894 EEG 052
|
||||
053 -0.057033727 0.006635523 0.023840595 0.024283894 EEG 053
|
||||
054 -0.235020883 0.231411875 0.023840595 0.024283894 EEG 054
|
||||
055 -0.21721779 0.1735557 0.023840595 0.024283894 EEG 055
|
||||
056 -0.196096643 0.121848964 0.023840595 0.024283894 EEG 056
|
||||
057 -0.169122926 0.084563661 0.023840595 0.024283894 EEG 057
|
||||
058 -0.142622009 0.056366314 0.023840595 0.024283894 EEG 058
|
||||
059 -0.11607512 0.026701856 0.023840595 0.024283894 EEG 059
|
||||
060 -0.086703907 -0.006962228 0.023840595 0.024283894 EEG 060
|
||||
061 -0.271241865 0.131933691 0.023840595 0.024283894 EEG 061
|
||||
062 -0.237546771 0.082946276 0.023840595 0.024283894 EEG 062
|
||||
063 -0.20434592 0.049982898 0.023840595 0.024283894 EEG 063
|
||||
064 -0.175001011 0.027246728 0.023840595 0.024283894 EEG 064
|
||||
065 -0.144183544 0.006552794 0.023840595 0.024283894 EEG 065
|
||||
066 -0.117629392 -0.020953359 0.023840595 0.024283894 EEG 066
|
||||
067 -0.32017538 0.064356008 0.023840595 0.024283894 EEG 067
|
||||
068 -0.277394242 0.035815905 0.023840595 0.024283894 EEG 068
|
||||
069 -0.241320281 0.000293927 0.023840595 0.024283894 EEG 069
|
||||
070 -0.202988841 -0.017932839 0.023840595 0.024283894 EEG 070
|
||||
071 -0.170816713 -0.027588171 0.023840595 0.024283894 EEG 071
|
||||
072 -0.142940198 -0.038849379 0.023840595 0.024283894 EEG 072
|
||||
073 -0.364333595 -0.009526546 0.023840595 0.024283894 EEG 073
|
||||
074 -0.227828247 -0.074709585 0.023840595 0.024283894 EEG 074
|
||||
075 -0.186334435 -0.079063391 0.023840595 0.024283894 EEG 075
|
||||
076 -0.152612576 -0.080357072 0.023840595 0.024283894 EEG 076
|
||||
077 -0.122986168 -0.070147895 0.023840595 0.024283894 EEG 077
|
||||
078 -0.092860036 -0.059724481 0.023840595 0.024283894 EEG 078
|
||||
079 -0.063373134 -0.044961361 0.023840595 0.024283894 EEG 079
|
||||
080 -0.033138055 -0.028518783 0.023840595 0.024283894 EEG 080
|
||||
081 0 -0.006448832 0.023840595 0.024283894 EEG 081
|
||||
082 -0.384631539 -0.115563191 0.023840595 0.024283894 EEG 082
|
||||
083 -0.230231782 -0.157310034 0.023840595 0.024283894 EEG 083
|
||||
084 -0.201004697 -0.132397774 0.023840595 0.024283894 EEG 084
|
||||
085 -0.158874627 -0.130476761 0.023840595 0.024283894 EEG 085
|
||||
086 -0.125435162 -0.117006671 0.023840595 0.024283894 EEG 086
|
||||
087 -0.093818787 -0.102184911 0.023840595 0.024283894 EEG 087
|
||||
088 -0.063690231 -0.085009427 0.023840595 0.024283894 EEG 088
|
||||
089 -0.034226984 -0.069230419 0.023840595 0.024283894 EEG 089
|
||||
090 0 -0.043222928 0.023840595 0.024283894 EEG 090
|
||||
091 -0.376606255 -0.236283155 0.023840595 0.024283894 EEG 091
|
||||
092 -0.320841548 -0.246056831 0.023840595 0.024283894 EEG 092
|
||||
093 -0.264511728 -0.247963981 0.023840595 0.024283894 EEG 093
|
||||
094 -0.235119884 -0.22133859 0.023840595 0.024283894 EEG 094
|
||||
095 -0.200260526 -0.201104991 0.023840595 0.024283894 EEG 095
|
||||
096 -0.16089296 -0.182074387 0.023840595 0.024283894 EEG 096
|
||||
097 -0.123315473 -0.169463521 0.023840595 0.024283894 EEG 097
|
||||
098 -0.093577895 -0.148219199 0.023840595 0.024283894 EEG 098
|
||||
099 -0.062757092 -0.127508907 0.023840595 0.024283894 EEG 099
|
||||
100 -0.033465994 -0.105718695 0.023840595 0.024283894 EEG 100
|
||||
101 0 -0.123212516 0.023840595 0.024283894 EEG 101
|
||||
102 -0.309236143 -0.330394078 0.023840595 0.024283894 EEG 102
|
||||
103 -0.264402365 -0.317489099 0.023840595 0.024283894 EEG 103
|
||||
104 -0.215607267 -0.297916345 0.023840595 0.024283894 EEG 104
|
||||
105 -0.194042397 -0.266008675 0.023840595 0.024283894 EEG 105
|
||||
106 -0.156365562 -0.241406814 0.023840595 0.024283894 EEG 106
|
||||
107 -0.117304936 -0.222733874 0.023840595 0.024283894 EEG 107
|
||||
108 -0.08375779 -0.200153314 0.023840595 0.024283894 EEG 108
|
||||
109 -0.056791169 -0.173578646 0.023840595 0.024283894 EEG 109
|
||||
110 -0.028490371 -0.146436894 0.023840595 0.024283894 EEG 110
|
||||
111 -0.235425173 -0.391140875 0.023840595 0.024283894 EEG 111
|
||||
112 -0.20031364 -0.367491502 0.023840595 0.024283894 EEG 112
|
||||
113 -0.160198907 -0.335751192 0.023840595 0.024283894 EEG 113
|
||||
114 -0.148968879 -0.297338854 0.023840595 0.024283894 EEG 114
|
||||
115 -0.09913078 -0.279612547 0.023840595 0.024283894 EEG 115
|
||||
116 -0.06561825 -0.2506161 0.023840595 0.024283894 EEG 116
|
||||
117 -0.036528871 -0.219887692 0.023840595 0.024283894 EEG 117
|
||||
118 -0.01914107 -0.187670154 0.023840595 0.024283894 EEG 118
|
||||
119 0 -0.159638357 0.023840595 0.024283894 EEG 119
|
||||
120 -0.178151028 -0.424680349 0.023840595 0.024283894 EEG 120
|
||||
121 -0.142872329 -0.395550026 0.023840595 0.024283894 EEG 121
|
||||
122 -0.106134228 -0.360226213 0.023840595 0.024283894 EEG 122
|
||||
123 -0.074015552 -0.317797572 0.023840595 0.024283894 EEG 123
|
||||
124 -0.049414286 -0.292978277 0.023840595 0.024283894 EEG 124
|
||||
125 -0.020856534 -0.260833466 0.023840595 0.024283894 EEG 125
|
||||
126 0 -0.223512279 0.023840595 0.024283894 EEG 126
|
||||
127 0.01914107 -0.187670154 0.023840595 0.024283894 EEG 127
|
||||
128 0.028490371 -0.146436894 0.023840595 0.024283894 EEG 128
|
||||
129 0.033465994 -0.105718695 0.023840595 0.024283894 EEG 129
|
||||
130 0.034226984 -0.069230419 0.023840595 0.024283894 EEG 130
|
||||
131 0.033138055 -0.028518783 0.023840595 0.024283894 EEG 131
|
||||
132 0.029699902 0.019405615 0.023840595 0.024283894 EEG 132
|
||||
133 -0.11640639 -0.433892117 0.023840595 0.024283894 EEG 133
|
||||
134 -0.085226238 -0.411234759 0.023840595 0.024283894 EEG 134
|
||||
135 -0.054701526 -0.36252645 0.023840595 0.024283894 EEG 135
|
||||
136 -0.02321088 -0.335534555 0.023840595 0.024283894 EEG 136
|
||||
137 0 -0.303018075 0.023840595 0.024283894 EEG 137
|
||||
138 0.020856534 -0.260833466 0.023840595 0.024283894 EEG 138
|
||||
139 0.036528871 -0.219887692 0.023840595 0.024283894 EEG 139
|
||||
140 0.056791169 -0.173578646 0.023840595 0.024283894 EEG 140
|
||||
141 0.062757092 -0.127508907 0.023840595 0.024283894 EEG 141
|
||||
142 0.063690231 -0.085009427 0.023840595 0.024283894 EEG 142
|
||||
143 0.063373134 -0.044961361 0.023840595 0.024283894 EEG 143
|
||||
144 0.057033727 0.006635523 0.023840595 0.024283894 EEG 144
|
||||
145 -0.061719572 -0.45 0.023840595 0.024283894 EEG 145
|
||||
146 -0.032116421 -0.419782634 0.023840595 0.024283894 EEG 146
|
||||
147 -9.99E-17 -0.379508917 0.023840595 0.024283894 EEG 147
|
||||
148 0.02321088 -0.335534555 0.023840595 0.024283894 EEG 148
|
||||
149 0.049414286 -0.292978277 0.023840595 0.024283894 EEG 149
|
||||
150 0.06561825 -0.2506161 0.023840595 0.024283894 EEG 150
|
||||
151 0.08375779 -0.200153314 0.023840595 0.024283894 EEG 151
|
||||
152 0.093577895 -0.148219199 0.023840595 0.024283894 EEG 152
|
||||
153 0.093818787 -0.102184911 0.023840595 0.024283894 EEG 153
|
||||
154 0.092860036 -0.059724481 0.023840595 0.024283894 EEG 154
|
||||
155 0.086703907 -0.006962228 0.023840595 0.024283894 EEG 155
|
||||
156 0.032116421 -0.419782634 0.023840595 0.024283894 EEG 156
|
||||
157 0.054701526 -0.36252645 0.023840595 0.024283894 EEG 157
|
||||
158 0.074015552 -0.317797572 0.023840595 0.024283894 EEG 158
|
||||
159 0.09913078 -0.279612547 0.023840595 0.024283894 EEG 159
|
||||
160 0.117304936 -0.222733874 0.023840595 0.024283894 EEG 160
|
||||
161 0.123315473 -0.169463521 0.023840595 0.024283894 EEG 161
|
||||
162 0.125435162 -0.117006671 0.023840595 0.024283894 EEG 162
|
||||
163 0.122986168 -0.070147895 0.023840595 0.024283894 EEG 163
|
||||
164 0.117629392 -0.020953359 0.023840595 0.024283894 EEG 164
|
||||
165 0.061719572 -0.45 0.023840595 0.024283894 EEG 165
|
||||
166 0.085226238 -0.411234759 0.023840595 0.024283894 EEG 166
|
||||
167 0.106134228 -0.360226213 0.023840595 0.024283894 EEG 167
|
||||
168 0.148968879 -0.297338854 0.023840595 0.024283894 EEG 168
|
||||
169 0.156365562 -0.241406814 0.023840595 0.024283894 EEG 169
|
||||
170 0.16089296 -0.182074387 0.023840595 0.024283894 EEG 170
|
||||
171 0.158874627 -0.130476761 0.023840595 0.024283894 EEG 171
|
||||
172 0.152612576 -0.080357072 0.023840595 0.024283894 EEG 172
|
||||
173 0.142940198 -0.038849379 0.023840595 0.024283894 EEG 173
|
||||
174 0.11640639 -0.433892117 0.023840595 0.024283894 EEG 174
|
||||
175 0.142872329 -0.395550026 0.023840595 0.024283894 EEG 175
|
||||
176 0.160198907 -0.335751192 0.023840595 0.024283894 EEG 176
|
||||
177 0.194042397 -0.266008675 0.023840595 0.024283894 EEG 177
|
||||
178 0.200260526 -0.201104991 0.023840595 0.024283894 EEG 178
|
||||
179 0.201004697 -0.132397774 0.023840595 0.024283894 EEG 179
|
||||
180 0.186334435 -0.079063391 0.023840595 0.024283894 EEG 180
|
||||
181 0.170816713 -0.027588171 0.023840595 0.024283894 EEG 181
|
||||
182 0.144183544 0.006552794 0.023840595 0.024283894 EEG 182
|
||||
183 0.11607512 0.026701856 0.023840595 0.024283894 EEG 183
|
||||
184 0.087032894 0.041560718 0.023840595 0.024283894 EEG 184
|
||||
185 0.055587556 0.053147386 0.023840595 0.024283894 EEG 185
|
||||
186 0.017539353 0.062826857 0.023840595 0.024283894 EEG 186
|
||||
187 0.178151028 -0.424680349 0.023840595 0.024283894 EEG 187
|
||||
188 0.20031364 -0.367491502 0.023840595 0.024283894 EEG 188
|
||||
189 0.215607267 -0.297916345 0.023840595 0.024283894 EEG 189
|
||||
190 0.235119884 -0.22133859 0.023840595 0.024283894 EEG 190
|
||||
191 0.230231782 -0.157310034 0.023840595 0.024283894 EEG 191
|
||||
192 0.227828247 -0.074709585 0.023840595 0.024283894 EEG 192
|
||||
193 0.202988841 -0.017932839 0.023840595 0.024283894 EEG 193
|
||||
194 0.175001011 0.027246728 0.023840595 0.024283894 EEG 194
|
||||
195 0.142622009 0.056366314 0.023840595 0.024283894 EEG 195
|
||||
196 0.108362109 0.07207399 0.023840595 0.024283894 EEG 196
|
||||
197 0.076990927 0.086006856 0.023840595 0.024283894 EEG 197
|
||||
198 0.036255497 0.09269913 0.023840595 0.024283894 EEG 198
|
||||
199 0.235425173 -0.391140875 0.023840595 0.024283894 EEG 199
|
||||
200 0.264402365 -0.317489099 0.023840595 0.024283894 EEG 200
|
||||
201 0.264511728 -0.247963981 0.023840595 0.024283894 EEG 201
|
||||
202 0.241320281 0.000293927 0.023840595 0.024283894 EEG 202
|
||||
203 0.20434592 0.049982898 0.023840595 0.024283894 EEG 203
|
||||
204 0.169122926 0.084563661 0.023840595 0.024283894 EEG 204
|
||||
205 0.132742164 0.104084677 0.023840595 0.024283894 EEG 205
|
||||
206 0.094840856 0.116834626 0.023840595 0.024283894 EEG 206
|
||||
207 0.055153266 0.126645408 0.023840595 0.024283894 EEG 207
|
||||
208 0.309236143 -0.330394078 0.023840595 0.024283894 EEG 208
|
||||
209 0.320841548 -0.246056831 0.023840595 0.024283894 EEG 209
|
||||
210 0.277394242 0.035815905 0.023840595 0.024283894 EEG 210
|
||||
211 0.237546771 0.082946276 0.023840595 0.024283894 EEG 211
|
||||
212 0.196096643 0.121848964 0.023840595 0.024283894 EEG 212
|
||||
213 0.156410469 0.141423921 0.023840595 0.024283894 EEG 213
|
||||
214 0.116009122 0.150111634 0.023840595 0.024283894 EEG 214
|
||||
215 0.079525249 0.158534511 0.023840595 0.024283894 EEG 215
|
||||
216 0.376606255 -0.236283155 0.023840595 0.024283894 EEG 216
|
||||
217 0.384631539 -0.115563191 0.023840595 0.024283894 EEG 217
|
||||
218 0.364333595 -0.009526546 0.023840595 0.024283894 EEG 218
|
||||
219 0.32017538 0.064356008 0.023840595 0.024283894 EEG 219
|
||||
220 0.271241865 0.131933691 0.023840595 0.024283894 EEG 220
|
||||
221 0.21721779 0.1735557 0.023840595 0.024283894 EEG 221
|
||||
222 0.17285275 0.187572361 0.023840595 0.024283894 EEG 222
|
||||
223 0.130890927 0.191286703 0.023840595 0.024283894 EEG 223
|
||||
224 0.098479668 0.187945851 0.023840595 0.024283894 EEG 224
|
||||
225 0.316289645 0.145736715 0.023840595 0.024283894 EEG 225
|
||||
226 0.302702771 0.230332844 0.023840595 0.024283894 EEG 226
|
||||
227 0.368412876 0.104246485 0.023840595 0.024283894 EEG 227
|
||||
228 0.409165374 0.012374488 0.023840595 0.024283894 EEG 228
|
||||
229 0.423731189 -0.12797492 0.023840595 0.024283894 EEG 229
|
||||
230 0.298254153 0.303894316 0.023840595 0.024283894 EEG 230
|
||||
231 0.362100214 0.20909316 0.023840595 0.024283894 EEG 231
|
||||
232 0.410199617 0.143137194 0.023840595 0.024283894 EEG 232
|
||||
233 0.447869069 0.013249996 0.023840595 0.024283894 EEG 233
|
||||
234 0.269381414 0.382730951 0.023840595 0.024283894 EEG 234
|
||||
235 0.342518502 0.308483235 0.023840595 0.024283894 EEG 235
|
||||
236 0.395968691 0.254174349 0.023840595 0.024283894 EEG 236
|
||||
237 0.45 0.157922288 0.023840595 0.024283894 EEG 237
|
||||
238 0.2187115 0.45 0.023840595 0.024283894 EEG 238
|
||||
239 0.327880174 0.384827106 0.023840595 0.024283894 EEG 239
|
||||
240 0.38583302 0.329449945 0.023840595 0.024283894 EEG 240
|
||||
241 -0.2187115 0.45 0.023840595 0.024283894 EEG 241
|
||||
242 -0.327880174 0.384827106 0.023840595 0.024283894 EEG 242
|
||||
243 -0.38583302 0.329449945 0.023840595 0.024283894 EEG 243
|
||||
244 -0.269381414 0.382730951 0.023840595 0.024283894 EEG 244
|
||||
245 -0.342518502 0.308483235 0.023840595 0.024283894 EEG 245
|
||||
246 -0.395968691 0.254174349 0.023840595 0.024283894 EEG 246
|
||||
247 -0.45 0.157922288 0.023840595 0.024283894 EEG 247
|
||||
248 -0.298254153 0.303894316 0.023840595 0.024283894 EEG 248
|
||||
249 -0.362100214 0.20909316 0.023840595 0.024283894 EEG 249
|
||||
250 -0.410199617 0.143137194 0.023840595 0.024283894 EEG 250
|
||||
251 -0.447869069 0.013249996 0.023840595 0.024283894 EEG 251
|
||||
252 -0.302702771 0.230332844 0.023840595 0.024283894 EEG 252
|
||||
253 -0.316289645 0.145736715 0.023840595 0.024283894 EEG 253
|
||||
254 -0.368412876 0.104246485 0.023840595 0.024283894 EEG 254
|
||||
255 -0.409165374 0.012374488 0.023840595 0.024283894 EEG 255
|
||||
256 -0.423731189 -0.12797492 0.023840595 0.024283894 EEG 256
|
||||
257 -0.45 -0.45 0.023840595 0.024283894 EEG 257
|
||||
258 0.45 -0.45 0.023840595 0.024283894 EEG 258
|
||||
132
mne/channels/data/layouts/GeodesicHeadWeb-130.lout
Normal file
132
mne/channels/data/layouts/GeodesicHeadWeb-130.lout
Normal file
@@ -0,0 +1,132 @@
|
||||
-42.19 43.52 -41.70 28.71
|
||||
001 0.50 0.74 0.02 0.02 E1
|
||||
002 0.53 0.79 0.02 0.02 E2
|
||||
003 0.55 0.73 0.02 0.02 E3
|
||||
004 0.50 0.69 0.02 0.02 E4
|
||||
005 0.45 0.73 0.02 0.02 E5
|
||||
006 0.46 0.79 0.02 0.02 E6
|
||||
007 0.50 0.85 0.02 0.02 E7
|
||||
008 0.58 0.84 0.02 0.02 E8
|
||||
009 0.60 0.77 0.02 0.02 E9
|
||||
010 0.60 0.70 0.02 0.02 E10
|
||||
011 0.55 0.68 0.02 0.02 E11
|
||||
012 0.50 0.64 0.02 0.02 E12
|
||||
013 0.45 0.68 0.02 0.02 E13
|
||||
014 0.40 0.70 0.02 0.02 E14
|
||||
015 0.39 0.77 0.02 0.02 E15
|
||||
016 0.41 0.84 0.02 0.02 E16
|
||||
017 0.44 0.91 0.02 0.02 E17
|
||||
018 0.66 0.79 0.02 0.02 E18
|
||||
019 0.60 0.64 0.02 0.02 E19
|
||||
020 0.45 0.62 0.02 0.02 E20
|
||||
021 0.34 0.72 0.02 0.02 E21
|
||||
022 0.73 0.87 0.02 0.02 E22
|
||||
023 0.76 0.93 0.02 0.02 E23
|
||||
024 0.85 0.83 0.02 0.02 E24
|
||||
025 0.86 0.74 0.02 0.02 E25
|
||||
026 0.80 0.72 0.02 0.02 E26
|
||||
027 0.74 0.81 0.02 0.02 E27
|
||||
028 0.65 0.88 0.02 0.02 E28
|
||||
029 0.55 0.91 0.02 0.02 E29
|
||||
030 0.50 0.96 0.02 0.02 E30
|
||||
031 0.63 0.98 0.02 0.02 E31
|
||||
032 0.83 0.63 0.02 0.02 E32
|
||||
033 0.72 0.73 0.02 0.02 E33
|
||||
034 0.67 0.62 0.02 0.02 E34
|
||||
035 0.72 0.61 0.02 0.02 E35
|
||||
036 0.68 0.56 0.02 0.02 E36
|
||||
037 0.62 0.59 0.02 0.02 E37
|
||||
038 0.63 0.66 0.02 0.02 E38
|
||||
039 0.69 0.67 0.02 0.02 E39
|
||||
040 0.76 0.64 0.02 0.02 E40
|
||||
041 0.77 0.55 0.02 0.02 E41
|
||||
042 0.72 0.51 0.02 0.02 E42
|
||||
043 0.67 0.49 0.02 0.02 E43
|
||||
044 0.63 0.53 0.02 0.02 E44
|
||||
045 0.58 0.58 0.02 0.02 E45
|
||||
046 0.66 0.72 0.02 0.02 E46
|
||||
047 0.90 0.49 0.02 0.02 E47
|
||||
048 0.84 0.51 0.02 0.02 E48
|
||||
049 0.88 0.23 0.02 0.02 E49
|
||||
050 0.79 0.23 0.02 0.02 E50
|
||||
051 0.74 0.29 0.02 0.02 E51
|
||||
052 0.72 0.37 0.02 0.02 E52
|
||||
053 0.76 0.46 0.02 0.02 E53
|
||||
054 0.61 0.39 0.02 0.02 E54
|
||||
055 0.61 0.33 0.02 0.02 E55
|
||||
056 0.56 0.37 0.02 0.02 E56
|
||||
057 0.57 0.43 0.02 0.02 E57
|
||||
058 0.64 0.44 0.02 0.02 E58
|
||||
059 0.65 0.37 0.02 0.02 E59
|
||||
060 0.66 0.30 0.02 0.02 E60
|
||||
061 0.58 0.26 0.02 0.02 E61
|
||||
062 0.54 0.30 0.02 0.02 E62
|
||||
063 0.53 0.41 0.02 0.02 E63
|
||||
064 0.55 0.47 0.02 0.02 E64
|
||||
065 0.61 0.48 0.02 0.02 E65
|
||||
066 0.70 0.44 0.02 0.02 E66
|
||||
067 0.50 0.12 0.02 0.02 E67
|
||||
068 0.45 0.11 0.02 0.02 E68
|
||||
069 0.47 0.18 0.02 0.02 E69
|
||||
070 0.53 0.18 0.02 0.02 E70
|
||||
071 0.55 0.11 0.02 0.02 E71
|
||||
072 0.73 0.08 0.02 0.02 E72
|
||||
073 0.50 0.02 0.02 0.02 E73
|
||||
074 0.28 0.07 0.02 0.02 E74
|
||||
075 0.22 0.22 0.02 0.02 E75
|
||||
076 0.35 0.22 0.02 0.02 E76
|
||||
077 0.41 0.26 0.02 0.02 E77
|
||||
078 0.50 0.25 0.02 0.02 E78
|
||||
079 0.65 0.22 0.02 0.02 E79
|
||||
080 0.39 0.39 0.02 0.02 E80
|
||||
081 0.34 0.36 0.02 0.02 E81
|
||||
082 0.36 0.43 0.02 0.02 E82
|
||||
083 0.42 0.44 0.02 0.02 E83
|
||||
084 0.45 0.37 0.02 0.02 E84
|
||||
085 0.40 0.33 0.02 0.02 E85
|
||||
086 0.34 0.30 0.02 0.02 E86
|
||||
087 0.28 0.37 0.02 0.02 E87
|
||||
088 0.30 0.43 0.02 0.02 E88
|
||||
089 0.33 0.49 0.02 0.02 E89
|
||||
090 0.39 0.48 0.02 0.02 E90
|
||||
091 0.45 0.47 0.02 0.02 E91
|
||||
092 0.47 0.41 0.02 0.02 E92
|
||||
093 0.46 0.30 0.02 0.02 E93
|
||||
094 0.47 0.51 0.02 0.02 E94
|
||||
095 0.46 0.57 0.02 0.02 E95
|
||||
096 0.50 0.60 0.02 0.02 E96
|
||||
097 0.54 0.57 0.02 0.02 E97
|
||||
098 0.52 0.51 0.02 0.02 E98
|
||||
099 0.50 0.46 0.02 0.02 E99
|
||||
100 0.42 0.52 0.02 0.02 E100
|
||||
101 0.42 0.58 0.02 0.02 E101
|
||||
102 0.55 0.62 0.02 0.02 E102
|
||||
103 0.58 0.52 0.02 0.02 E103
|
||||
104 0.16 0.52 0.02 0.02 E104
|
||||
105 0.10 0.49 0.02 0.02 E105
|
||||
106 0.09 0.27 0.02 0.02 E106
|
||||
107 0.15 0.75 0.02 0.02 E107
|
||||
108 0.17 0.63 0.02 0.02 E108
|
||||
109 0.22 0.55 0.02 0.02 E109
|
||||
110 0.24 0.45 0.02 0.02 E110
|
||||
111 0.26 0.29 0.02 0.02 E111
|
||||
112 0.33 0.61 0.02 0.02 E112
|
||||
113 0.30 0.66 0.02 0.02 E113
|
||||
114 0.36 0.66 0.02 0.02 E114
|
||||
115 0.37 0.59 0.02 0.02 E115
|
||||
116 0.33 0.56 0.02 0.02 E116
|
||||
117 0.28 0.60 0.02 0.02 E117
|
||||
118 0.24 0.64 0.02 0.02 E118
|
||||
119 0.27 0.73 0.02 0.02 E119
|
||||
120 0.40 0.64 0.02 0.02 E120
|
||||
121 0.37 0.53 0.02 0.02 E121
|
||||
122 0.27 0.51 0.02 0.02 E122
|
||||
123 0.27 0.88 0.02 0.02 E123
|
||||
124 0.26 0.81 0.02 0.02 E124
|
||||
125 0.20 0.72 0.02 0.02 E125
|
||||
126 0.16 0.83 0.02 0.02 E126
|
||||
127 0.25 0.93 0.02 0.02 E127
|
||||
128 0.37 0.98 0.02 0.02 E128
|
||||
129 0.35 0.88 0.02 0.02 E129
|
||||
130 0.33 0.79 0.02 0.02 E130
|
||||
131 0.50 0.55 0.02 0.02 E131
|
||||
282
mne/channels/data/layouts/GeodesicHeadWeb-280.lout
Normal file
282
mne/channels/data/layouts/GeodesicHeadWeb-280.lout
Normal file
@@ -0,0 +1,282 @@
|
||||
-42.19 43.52 -41.70 28.71
|
||||
001 0.49 0.77 0.02 0.02 E1
|
||||
002 0.52 0.80 0.02 0.02 E2
|
||||
003 0.53 0.76 0.02 0.02 E3
|
||||
004 0.49 0.73 0.02 0.02 E4
|
||||
005 0.46 0.76 0.02 0.02 E5
|
||||
006 0.47 0.80 0.02 0.02 E6
|
||||
007 0.49 0.84 0.02 0.02 E7
|
||||
008 0.54 0.84 0.02 0.02 E8
|
||||
009 0.55 0.80 0.02 0.02 E9
|
||||
010 0.57 0.74 0.02 0.02 E10
|
||||
011 0.53 0.71 0.02 0.02 E11
|
||||
012 0.49 0.68 0.02 0.02 E12
|
||||
013 0.46 0.71 0.02 0.02 E13
|
||||
014 0.42 0.74 0.02 0.02 E14
|
||||
015 0.43 0.79 0.02 0.02 E15
|
||||
016 0.45 0.84 0.02 0.02 E16
|
||||
017 0.47 0.87 0.02 0.02 E17
|
||||
018 0.52 0.87 0.02 0.02 E18
|
||||
019 0.57 0.86 0.02 0.02 E19
|
||||
020 0.59 0.83 0.02 0.02 E20
|
||||
021 0.59 0.79 0.02 0.02 E21
|
||||
022 0.60 0.73 0.02 0.02 E22
|
||||
023 0.57 0.71 0.02 0.02 E23
|
||||
024 0.53 0.67 0.02 0.02 E24
|
||||
025 0.49 0.65 0.02 0.02 E25
|
||||
026 0.46 0.67 0.02 0.02 E26
|
||||
027 0.43 0.70 0.02 0.02 E27
|
||||
028 0.39 0.73 0.02 0.02 E28
|
||||
029 0.39 0.78 0.02 0.02 E29
|
||||
030 0.40 0.83 0.02 0.02 E30
|
||||
031 0.41 0.86 0.02 0.02 E31
|
||||
032 0.49 0.93 0.02 0.02 E32
|
||||
033 0.64 0.81 0.02 0.02 E33
|
||||
034 0.56 0.66 0.02 0.02 E34
|
||||
035 0.43 0.66 0.02 0.02 E35
|
||||
036 0.35 0.80 0.02 0.02 E36
|
||||
037 0.73 0.86 0.02 0.02 E37
|
||||
038 0.76 0.89 0.02 0.02 E38
|
||||
039 0.76 0.84 0.02 0.02 E39
|
||||
040 0.72 0.82 0.02 0.02 E40
|
||||
041 0.69 0.86 0.02 0.02 E41
|
||||
042 0.67 0.99 0.02 0.02 E42
|
||||
043 0.79 0.91 0.02 0.02 E43
|
||||
044 0.85 0.83 0.02 0.02 E44
|
||||
045 0.84 0.77 0.02 0.02 E45
|
||||
046 0.82 0.74 0.02 0.02 E46
|
||||
047 0.76 0.77 0.02 0.02 E47
|
||||
048 0.72 0.76 0.02 0.02 E48
|
||||
049 0.68 0.81 0.02 0.02 E49
|
||||
050 0.64 0.83 0.02 0.02 E50
|
||||
051 0.62 0.85 0.02 0.02 E51
|
||||
052 0.58 0.98 0.02 0.02 E52
|
||||
053 0.90 0.82 0.02 0.02 E53
|
||||
054 0.80 0.70 0.02 0.02 E54
|
||||
055 0.76 0.70 0.02 0.02 E55
|
||||
056 0.68 0.64 0.02 0.02 E56
|
||||
057 0.69 0.68 0.02 0.02 E57
|
||||
058 0.71 0.64 0.02 0.02 E58
|
||||
059 0.68 0.60 0.02 0.02 E59
|
||||
060 0.65 0.62 0.02 0.02 E60
|
||||
061 0.65 0.67 0.02 0.02 E61
|
||||
062 0.67 0.71 0.02 0.02 E62
|
||||
063 0.71 0.72 0.02 0.02 E63
|
||||
064 0.73 0.68 0.02 0.02 E64
|
||||
065 0.75 0.63 0.02 0.02 E65
|
||||
066 0.72 0.59 0.02 0.02 E66
|
||||
067 0.69 0.56 0.02 0.02 E67
|
||||
068 0.65 0.58 0.02 0.02 E68
|
||||
069 0.61 0.60 0.02 0.02 E69
|
||||
070 0.61 0.66 0.02 0.02 E70
|
||||
071 0.62 0.70 0.02 0.02 E71
|
||||
072 0.64 0.76 0.02 0.02 E72
|
||||
073 0.69 0.76 0.02 0.02 E73
|
||||
074 0.79 0.61 0.02 0.02 E74
|
||||
075 0.76 0.57 0.02 0.02 E75
|
||||
076 0.73 0.53 0.02 0.02 E76
|
||||
077 0.69 0.49 0.02 0.02 E77
|
||||
078 0.65 0.53 0.02 0.02 E78
|
||||
079 0.62 0.54 0.02 0.02 E79
|
||||
080 0.59 0.57 0.02 0.02 E80
|
||||
081 0.59 0.63 0.02 0.02 E81
|
||||
082 0.60 0.69 0.02 0.02 E82
|
||||
083 0.76 0.48 0.02 0.02 E83
|
||||
084 0.61 0.50 0.02 0.02 E84
|
||||
085 0.90 0.51 0.02 0.02 E85
|
||||
086 0.91 0.63 0.02 0.02 E86
|
||||
087 0.94 0.58 0.02 0.02 E87
|
||||
088 0.97 0.54 0.02 0.02 E88
|
||||
089 0.94 0.51 0.02 0.02 E89
|
||||
090 0.91 0.46 0.02 0.02 E90
|
||||
091 0.87 0.48 0.02 0.02 E91
|
||||
092 0.82 0.49 0.02 0.02 E92
|
||||
093 0.91 0.73 0.02 0.02 E93
|
||||
094 0.97 0.68 0.02 0.02 E94
|
||||
095 0.94 0.33 0.02 0.02 E95
|
||||
096 0.88 0.31 0.02 0.02 E96
|
||||
097 0.77 0.22 0.02 0.02 E97
|
||||
098 0.82 0.34 0.02 0.02 E98
|
||||
099 0.79 0.37 0.02 0.02 E99
|
||||
100 0.77 0.41 0.02 0.02 E100
|
||||
101 0.79 0.50 0.02 0.02 E101
|
||||
102 0.83 0.17 0.02 0.02 E102
|
||||
103 0.74 0.29 0.02 0.02 E103
|
||||
104 0.62 0.36 0.02 0.02 E104
|
||||
105 0.64 0.39 0.02 0.02 E105
|
||||
106 0.66 0.35 0.02 0.02 E106
|
||||
107 0.62 0.32 0.02 0.02 E107
|
||||
108 0.59 0.35 0.02 0.02 E108
|
||||
109 0.60 0.39 0.02 0.02 E109
|
||||
110 0.62 0.43 0.02 0.02 E110
|
||||
111 0.67 0.43 0.02 0.02 E111
|
||||
112 0.68 0.39 0.02 0.02 E112
|
||||
113 0.70 0.33 0.02 0.02 E113
|
||||
114 0.66 0.31 0.02 0.02 E114
|
||||
115 0.62 0.27 0.02 0.02 E115
|
||||
116 0.58 0.31 0.02 0.02 E116
|
||||
117 0.55 0.34 0.02 0.02 E117
|
||||
118 0.56 0.39 0.02 0.02 E118
|
||||
119 0.58 0.43 0.02 0.02 E119
|
||||
120 0.59 0.46 0.02 0.02 E120
|
||||
121 0.65 0.48 0.02 0.02 E121
|
||||
122 0.71 0.44 0.02 0.02 E122
|
||||
123 0.73 0.40 0.02 0.02 E123
|
||||
124 0.73 0.34 0.02 0.02 E124
|
||||
125 0.67 0.27 0.02 0.02 E125
|
||||
126 0.60 0.23 0.02 0.02 E126
|
||||
127 0.56 0.25 0.02 0.02 E127
|
||||
128 0.53 0.28 0.02 0.02 E128
|
||||
129 0.49 0.31 0.02 0.02 E129
|
||||
130 0.52 0.36 0.02 0.02 E130
|
||||
131 0.53 0.41 0.02 0.02 E131
|
||||
132 0.55 0.45 0.02 0.02 E132
|
||||
133 0.49 0.24 0.02 0.02 E133
|
||||
134 0.49 0.40 0.02 0.02 E134
|
||||
135 0.49 0.13 0.02 0.02 E135
|
||||
136 0.51 0.16 0.02 0.02 E136
|
||||
137 0.52 0.11 0.02 0.02 E137
|
||||
138 0.49 0.08 0.02 0.02 E138
|
||||
139 0.46 0.11 0.02 0.02 E139
|
||||
140 0.47 0.16 0.02 0.02 E140
|
||||
141 0.49 0.19 0.02 0.02 E141
|
||||
142 0.54 0.19 0.02 0.02 E142
|
||||
143 0.55 0.14 0.02 0.02 E143
|
||||
144 0.57 0.09 0.02 0.02 E144
|
||||
145 0.53 0.06 0.02 0.02 E145
|
||||
146 0.49 0.03 0.02 0.02 E146
|
||||
147 0.45 0.06 0.02 0.02 E147
|
||||
148 0.42 0.09 0.02 0.02 E148
|
||||
149 0.43 0.15 0.02 0.02 E149
|
||||
150 0.45 0.19 0.02 0.02 E150
|
||||
151 0.47 0.21 0.02 0.02 E151
|
||||
152 0.52 0.21 0.02 0.02 E152
|
||||
153 0.62 0.21 0.02 0.02 E153
|
||||
154 0.68 0.19 0.02 0.02 E154
|
||||
155 0.75 0.15 0.02 0.02 E155
|
||||
156 0.68 0.06 0.02 0.02 E156
|
||||
157 0.49 0.01 0.02 0.02 E157
|
||||
158 0.31 0.05 0.02 0.02 E158
|
||||
159 0.28 0.12 0.02 0.02 E159
|
||||
160 0.21 0.21 0.02 0.02 E160
|
||||
161 0.29 0.20 0.02 0.02 E161
|
||||
162 0.34 0.21 0.02 0.02 E162
|
||||
163 0.38 0.24 0.02 0.02 E163
|
||||
164 0.15 0.16 0.02 0.02 E164
|
||||
165 0.25 0.28 0.02 0.02 E165
|
||||
166 0.47 0.51 0.02 0.02 E166
|
||||
167 0.46 0.55 0.02 0.02 E167
|
||||
168 0.49 0.58 0.02 0.02 E168
|
||||
169 0.52 0.55 0.02 0.02 E169
|
||||
170 0.51 0.52 0.02 0.02 E170
|
||||
171 0.46 0.48 0.02 0.02 E171
|
||||
172 0.44 0.53 0.02 0.02 E172
|
||||
173 0.43 0.56 0.02 0.02 E173
|
||||
174 0.46 0.59 0.02 0.02 E174
|
||||
175 0.49 0.61 0.02 0.02 E175
|
||||
176 0.52 0.59 0.02 0.02 E176
|
||||
177 0.55 0.56 0.02 0.02 E177
|
||||
178 0.54 0.53 0.02 0.02 E178
|
||||
179 0.53 0.48 0.02 0.02 E179
|
||||
180 0.51 0.44 0.02 0.02 E180
|
||||
181 0.47 0.44 0.02 0.02 E181
|
||||
182 0.43 0.46 0.02 0.02 E182
|
||||
183 0.41 0.49 0.02 0.02 E183
|
||||
184 0.40 0.53 0.02 0.02 E184
|
||||
185 0.41 0.58 0.02 0.02 E185
|
||||
186 0.43 0.61 0.02 0.02 E186
|
||||
187 0.46 0.64 0.02 0.02 E187
|
||||
188 0.53 0.64 0.02 0.02 E188
|
||||
189 0.56 0.61 0.02 0.02 E189
|
||||
190 0.59 0.53 0.02 0.02 E190
|
||||
191 0.57 0.48 0.02 0.02 E191
|
||||
192 0.37 0.50 0.02 0.02 E192
|
||||
193 0.36 0.36 0.02 0.02 E193
|
||||
194 0.39 0.39 0.02 0.02 E194
|
||||
195 0.40 0.35 0.02 0.02 E195
|
||||
196 0.36 0.32 0.02 0.02 E196
|
||||
197 0.33 0.35 0.02 0.02 E197
|
||||
198 0.34 0.39 0.02 0.02 E198
|
||||
199 0.36 0.44 0.02 0.02 E199
|
||||
200 0.41 0.43 0.02 0.02 E200
|
||||
201 0.43 0.38 0.02 0.02 E201
|
||||
202 0.44 0.33 0.02 0.02 E202
|
||||
203 0.40 0.31 0.02 0.02 E203
|
||||
204 0.36 0.28 0.02 0.02 E204
|
||||
205 0.33 0.31 0.02 0.02 E205
|
||||
206 0.29 0.34 0.02 0.02 E206
|
||||
207 0.31 0.39 0.02 0.02 E207
|
||||
208 0.32 0.43 0.02 0.02 E208
|
||||
209 0.35 0.48 0.02 0.02 E209
|
||||
210 0.39 0.46 0.02 0.02 E210
|
||||
211 0.45 0.41 0.02 0.02 E211
|
||||
212 0.47 0.36 0.02 0.02 E212
|
||||
213 0.46 0.28 0.02 0.02 E213
|
||||
214 0.42 0.25 0.02 0.02 E214
|
||||
215 0.31 0.28 0.02 0.02 E215
|
||||
216 0.26 0.34 0.02 0.02 E216
|
||||
217 0.22 0.44 0.02 0.02 E217
|
||||
218 0.26 0.40 0.02 0.02 E218
|
||||
219 0.28 0.45 0.02 0.02 E219
|
||||
220 0.30 0.49 0.02 0.02 E220
|
||||
221 0.23 0.48 0.02 0.02 E221
|
||||
222 0.10 0.51 0.02 0.02 E222
|
||||
223 0.18 0.49 0.02 0.02 E223
|
||||
224 0.13 0.48 0.02 0.02 E224
|
||||
225 0.09 0.46 0.02 0.02 E225
|
||||
226 0.06 0.51 0.02 0.02 E226
|
||||
227 0.03 0.54 0.02 0.02 E227
|
||||
228 0.06 0.58 0.02 0.02 E228
|
||||
229 0.09 0.63 0.02 0.02 E229
|
||||
230 0.18 0.76 0.02 0.02 E230
|
||||
231 0.19 0.71 0.02 0.02 E231
|
||||
232 0.21 0.64 0.02 0.02 E232
|
||||
233 0.20 0.54 0.02 0.02 E233
|
||||
234 0.19 0.39 0.02 0.02 E234
|
||||
235 0.17 0.33 0.02 0.02 E235
|
||||
236 0.10 0.31 0.02 0.02 E236
|
||||
237 0.05 0.33 0.02 0.02 E237
|
||||
238 0.03 0.67 0.02 0.02 E238
|
||||
239 0.09 0.74 0.02 0.02 E239
|
||||
240 0.15 0.79 0.02 0.02 E240
|
||||
241 0.23 0.78 0.02 0.02 E241
|
||||
242 0.08 0.81 0.02 0.02 E242
|
||||
243 0.31 0.64 0.02 0.02 E243
|
||||
244 0.34 0.67 0.02 0.02 E244
|
||||
245 0.34 0.62 0.02 0.02 E245
|
||||
246 0.31 0.60 0.02 0.02 E246
|
||||
247 0.27 0.63 0.02 0.02 E247
|
||||
248 0.29 0.67 0.02 0.02 E248
|
||||
249 0.32 0.71 0.02 0.02 E249
|
||||
250 0.37 0.70 0.02 0.02 E250
|
||||
251 0.37 0.65 0.02 0.02 E251
|
||||
252 0.38 0.60 0.02 0.02 E252
|
||||
253 0.34 0.58 0.02 0.02 E253
|
||||
254 0.30 0.55 0.02 0.02 E254
|
||||
255 0.27 0.58 0.02 0.02 E255
|
||||
256 0.23 0.62 0.02 0.02 E256
|
||||
257 0.25 0.67 0.02 0.02 E257
|
||||
258 0.28 0.72 0.02 0.02 E258
|
||||
259 0.30 0.76 0.02 0.02 E259
|
||||
260 0.35 0.75 0.02 0.02 E260
|
||||
261 0.40 0.68 0.02 0.02 E261
|
||||
262 0.40 0.64 0.02 0.02 E262
|
||||
263 0.37 0.55 0.02 0.02 E263
|
||||
264 0.34 0.52 0.02 0.02 E264
|
||||
265 0.26 0.53 0.02 0.02 E265
|
||||
266 0.23 0.56 0.02 0.02 E266
|
||||
267 0.23 0.70 0.02 0.02 E267
|
||||
268 0.28 0.77 0.02 0.02 E268
|
||||
269 0.32 0.81 0.02 0.02 E269
|
||||
270 0.27 0.87 0.02 0.02 E270
|
||||
271 0.23 0.89 0.02 0.02 E271
|
||||
272 0.24 0.84 0.02 0.02 E272
|
||||
273 0.28 0.83 0.02 0.02 E273
|
||||
274 0.30 0.87 0.02 0.02 E274
|
||||
275 0.32 0.99 0.02 0.02 E275
|
||||
276 0.21 0.91 0.02 0.02 E276
|
||||
277 0.16 0.87 0.02 0.02 E277
|
||||
278 0.34 0.83 0.02 0.02 E278
|
||||
279 0.37 0.84 0.02 0.02 E279
|
||||
280 0.41 0.98 0.02 0.02 E280
|
||||
281 0.49 0.54 0.02 0.02 E281
|
||||
126
mne/channels/data/layouts/KIT-125.lout
Normal file
126
mne/channels/data/layouts/KIT-125.lout
Normal file
@@ -0,0 +1,126 @@
|
||||
-0.50 0.50 -0.50 0.50
|
||||
001 0.12 -0.10 0.04 0.03 MEG 001
|
||||
002 0.15 -0.06 0.04 0.03 MEG 002
|
||||
003 0.03 -0.15 0.04 0.03 MEG 003
|
||||
004 -0.22 -0.29 0.04 0.03 MEG 004
|
||||
005 -0.28 -0.23 0.04 0.03 MEG 005
|
||||
006 -0.33 -0.15 0.04 0.03 MEG 006
|
||||
007 -0.07 -0.36 0.04 0.03 MEG 007
|
||||
008 0.09 -0.36 0.04 0.03 MEG 008
|
||||
009 -0.06 -0.25 0.04 0.03 MEG 009
|
||||
010 -0.18 0.18 0.04 0.03 MEG 010
|
||||
011 -0.10 0.25 0.04 0.03 MEG 011
|
||||
012 -0.15 0.22 0.04 0.03 MEG 012
|
||||
013 -0.37 0.13 0.04 0.03 MEG 013
|
||||
014 -0.36 -0.06 0.04 0.03 MEG 014
|
||||
015 -0.18 -0.41 0.04 0.03 MEG 015
|
||||
016 -0.27 -0.35 0.04 0.03 MEG 016
|
||||
017 -0.16 -0.19 0.04 0.03 MEG 017
|
||||
018 -0.18 -0.10 0.04 0.03 MEG 018
|
||||
019 -0.14 -0.14 0.04 0.03 MEG 019
|
||||
020 -0.30 -0.04 0.04 0.03 MEG 020
|
||||
021 -0.31 0.11 0.04 0.03 MEG 021
|
||||
022 -0.37 0.04 0.04 0.03 MEG 022
|
||||
023 -0.20 -0.14 0.04 0.03 MEG 023
|
||||
024 -0.11 -0.23 0.04 0.03 MEG 024
|
||||
025 -0.11 -0.11 0.04 0.03 MEG 025
|
||||
026 -0.02 -0.14 0.04 0.03 MEG 026
|
||||
027 -0.13 -0.28 0.04 0.03 MEG 027
|
||||
028 -0.24 -0.18 0.04 0.03 MEG 028
|
||||
029 -0.19 -0.23 0.04 0.03 MEG 029
|
||||
030 -0.21 0.01 0.04 0.03 MEG 030
|
||||
031 -0.21 0.07 0.04 0.03 MEG 031
|
||||
032 -0.20 0.13 0.04 0.03 MEG 032
|
||||
033 -0.12 0.08 0.04 0.03 MEG 033
|
||||
034 -0.09 -0.07 0.04 0.03 MEG 034
|
||||
035 -0.12 0.03 0.04 0.03 MEG 035
|
||||
036 -0.25 0.11 0.04 0.03 MEG 036
|
||||
037 -0.25 -0.03 0.04 0.03 MEG 037
|
||||
038 -0.23 -0.09 0.04 0.03 MEG 038
|
||||
039 -0.26 0.04 0.04 0.03 MEG 039
|
||||
040 -0.14 -0.06 0.04 0.03 MEG 040
|
||||
041 -0.00 0.29 0.04 0.03 MEG 041
|
||||
042 0.09 0.26 0.04 0.03 MEG 042
|
||||
043 -0.07 -0.00 0.04 0.03 MEG 043
|
||||
044 -0.07 0.09 0.04 0.03 MEG 044
|
||||
045 -0.34 -0.28 0.04 0.03 MEG 045
|
||||
046 -0.43 -0.09 0.04 0.03 MEG 046
|
||||
047 -0.45 0.03 0.04 0.03 MEG 047
|
||||
048 -0.44 0.14 0.04 0.03 MEG 048
|
||||
049 -0.07 0.21 0.04 0.03 MEG 049
|
||||
050 -0.15 0.15 0.04 0.03 MEG 050
|
||||
051 -0.16 -0.02 0.04 0.03 MEG 051
|
||||
052 -0.17 0.04 0.04 0.03 MEG 052
|
||||
053 0.07 0.17 0.04 0.03 MEG 053
|
||||
054 -0.07 0.17 0.04 0.03 MEG 054
|
||||
055 0.00 0.14 0.04 0.03 MEG 055
|
||||
056 0.08 0.09 0.04 0.03 MEG 056
|
||||
057 0.21 -0.39 0.04 0.03 MEG 057
|
||||
058 0.09 -0.06 0.04 0.03 MEG 058
|
||||
059 -0.04 -0.09 0.04 0.03 MEG 059
|
||||
060 0.05 -0.09 0.04 0.03 MEG 060
|
||||
061 0.17 -0.18 0.04 0.03 MEG 061
|
||||
062 0.06 -0.19 0.04 0.03 MEG 062
|
||||
063 -0.04 -0.19 0.04 0.03 MEG 063
|
||||
064 0.01 -0.20 0.04 0.03 MEG 064
|
||||
065 0.19 -0.09 0.04 0.03 MEG 065
|
||||
066 0.01 -0.31 0.04 0.03 MEG 066
|
||||
067 0.14 -0.27 0.04 0.03 MEG 067
|
||||
068 0.24 -0.28 0.04 0.03 MEG 068
|
||||
069 0.34 -0.13 0.04 0.03 MEG 069
|
||||
070 0.29 -0.21 0.04 0.03 MEG 070
|
||||
071 0.30 -0.33 0.04 0.03 MEG 071
|
||||
072 0.02 -0.45 0.04 0.03 MEG 072
|
||||
073 0.21 -0.14 0.04 0.03 MEG 073
|
||||
074 0.24 -0.08 0.04 0.03 MEG 074
|
||||
075 0.26 0.12 0.04 0.03 MEG 075
|
||||
076 0.26 0.05 0.04 0.03 MEG 076
|
||||
077 0.07 -0.24 0.04 0.03 MEG 077
|
||||
078 0.12 -0.22 0.04 0.03 MEG 078
|
||||
079 0.22 0.02 0.04 0.03 MEG 079
|
||||
080 0.15 -0.13 0.04 0.03 MEG 080
|
||||
081 0.43 0.16 0.04 0.03 MEG 081
|
||||
082 0.22 0.09 0.04 0.03 MEG 082
|
||||
083 0.18 0.19 0.04 0.03 MEG 083
|
||||
084 0.14 0.23 0.04 0.03 MEG 084
|
||||
085 0.20 0.14 0.04 0.03 MEG 085
|
||||
086 0.36 -0.04 0.04 0.03 MEG 086
|
||||
087 0.36 0.15 0.04 0.03 MEG 087
|
||||
088 0.26 -0.02 0.04 0.03 MEG 088
|
||||
089 0.25 -0.17 0.04 0.03 MEG 089
|
||||
090 0.30 0.13 0.04 0.03 MEG 090
|
||||
091 0.30 -0.03 0.04 0.03 MEG 091
|
||||
092 0.37 0.05 0.04 0.03 MEG 092
|
||||
093 0.14 0.15 0.04 0.03 MEG 093
|
||||
094 0.17 0.05 0.04 0.03 MEG 094
|
||||
095 0.17 -0.01 0.04 0.03 MEG 095
|
||||
096 0.45 0.06 0.04 0.03 MEG 096
|
||||
097 0.13 0.03 0.04 0.03 MEG 097
|
||||
098 -0.04 0.07 0.04 0.03 MEG 098
|
||||
099 0.04 0.07 0.04 0.03 MEG 099
|
||||
100 -0.04 0.01 0.04 0.03 MEG 100
|
||||
101 0.04 0.02 0.04 0.03 MEG 101
|
||||
102 0.36 -0.25 0.04 0.03 MEG 102
|
||||
103 0.44 -0.05 0.04 0.03 MEG 103
|
||||
104 0.20 -0.23 0.04 0.03 MEG 104
|
||||
105 0.08 -0.00 0.04 0.03 MEG 105
|
||||
106 -0.04 -0.04 0.04 0.03 MEG 106
|
||||
107 0.00 -0.05 0.04 0.03 MEG 107
|
||||
108 0.05 -0.04 0.04 0.03 MEG 108
|
||||
109 0.02 0.23 0.04 0.03 MEG 109
|
||||
110 -0.03 0.23 0.04 0.03 MEG 110
|
||||
111 0.07 0.22 0.04 0.03 MEG 111
|
||||
112 0.13 0.09 0.04 0.03 MEG 112
|
||||
113 0.18 -0.33 0.04 0.03 MEG 113
|
||||
114 -0.10 0.13 0.04 0.03 MEG 114
|
||||
115 0.11 -0.43 0.04 0.03 MEG 115
|
||||
116 0.29 -0.10 0.04 0.03 MEG 116
|
||||
117 -0.06 -0.30 0.04 0.03 MEG 117
|
||||
118 0.11 0.13 0.04 0.03 MEG 118
|
||||
119 0.21 -0.03 0.04 0.03 MEG 119
|
||||
120 0.08 -0.30 0.04 0.03 MEG 120
|
||||
121 -0.20 -0.05 0.04 0.03 MEG 121
|
||||
122 -0.08 -0.44 0.04 0.03 MEG 122
|
||||
123 -0.15 -0.34 0.04 0.03 MEG 123
|
||||
124 0.02 -0.37 0.04 0.03 MEG 124
|
||||
125 -0.28 -0.11 0.04 0.03 MEG 125
|
||||
158
mne/channels/data/layouts/KIT-157.lout
Normal file
158
mne/channels/data/layouts/KIT-157.lout
Normal file
@@ -0,0 +1,158 @@
|
||||
-42.19 43.52 -41.7 28.71
|
||||
001 9.78 -14.18 4.00 3.00 MEG 001
|
||||
002 3.31 -16.56 4.00 3.00 MEG 002
|
||||
003 12.02 -19.42 4.00 3.00 MEG 003
|
||||
004 8.08 -21.05 4.00 3.00 MEG 004
|
||||
005 4.12 -22.01 4.00 3.00 MEG 005
|
||||
006 15.80 -16.63 4.00 3.00 MEG 006
|
||||
007 10.21 -12.01 4.00 3.00 MEG 007
|
||||
008 7.23 -13.67 4.00 3.00 MEG 008
|
||||
009 -22.12 -3.07 4.00 3.00 MEG 009
|
||||
010 -13.99 -13.09 4.00 3.00 MEG 010
|
||||
011 -21.05 -7.51 4.00 3.00 MEG 011
|
||||
012 -18.85 -12.06 4.00 3.00 MEG 012
|
||||
013 -0.14 -16.77 4.00 3.00 MEG 013
|
||||
014 -6.69 -15.41 4.00 3.00 MEG 014
|
||||
015 -10.69 -15.56 4.00 3.00 MEG 015
|
||||
016 -3.91 -10.00 4.00 3.00 MEG 016
|
||||
017 0.80 -6.66 4.00 3.00 MEG 017
|
||||
018 3.74 -20.66 4.00 3.00 MEG 018
|
||||
019 15.01 -15.63 4.00 3.00 MEG 019
|
||||
020 4.16 -14.75 4.00 3.00 MEG 020
|
||||
021 16.72 -0.60 4.00 3.00 MEG 021
|
||||
022 14.31 -7.30 4.00 3.00 MEG 022
|
||||
023 1.27 -13.23 4.00 3.00 MEG 023
|
||||
024 9.63 -10.10 4.00 3.00 MEG 024
|
||||
025 -1.74 -14.94 4.00 3.00 MEG 025
|
||||
026 -4.68 -14.12 4.00 3.00 MEG 026
|
||||
027 -1.65 -8.33 4.00 3.00 MEG 027
|
||||
028 -6.53 -8.53 4.00 3.00 MEG 028
|
||||
029 -8.52 -6.61 4.00 3.00 MEG 029
|
||||
030 -10.18 -4.27 4.00 3.00 MEG 030
|
||||
031 -11.14 -1.21 4.00 3.00 MEG 031
|
||||
032 -4.02 -18.39 4.00 3.00 MEG 032
|
||||
033 19.69 0.13 4.00 3.00 MEG 033
|
||||
034 4.03 -8.21 4.00 3.00 MEG 034
|
||||
035 3.56 0.14 4.00 3.00 MEG 035
|
||||
036 4.19 -12.79 4.00 3.00 MEG 036
|
||||
037 19.43 -3.03 4.00 3.00 MEG 037
|
||||
038 20.99 -9.54 4.00 3.00 MEG 038
|
||||
039 15.93 -11.27 4.00 3.00 MEG 039
|
||||
040 22.46 -5.52 4.00 3.00 MEG 040
|
||||
041 -9.37 -8.82 4.00 3.00 MEG 041
|
||||
042 -6.93 -10.92 4.00 3.00 MEG 042
|
||||
043 -1.56 -13.07 4.00 3.00 MEG 043
|
||||
044 -7.75 -20.89 4.00 3.00 MEG 044
|
||||
045 -11.74 -19.07 4.00 3.00 MEG 045
|
||||
046 0.31 -22.23 4.00 3.00 MEG 046
|
||||
047 -3.75 -21.89 4.00 3.00 MEG 047
|
||||
048 -3.89 -5.28 4.00 3.00 MEG 048
|
||||
049 23.23 -0.95 4.00 3.00 MEG 049
|
||||
050 13.94 -14.13 4.00 3.00 MEG 050
|
||||
051 7.41 -17.72 4.00 3.00 MEG 051
|
||||
052 19.50 -8.59 4.00 3.00 MEG 052
|
||||
053 18.26 -7.47 4.00 3.00 MEG 053
|
||||
054 18.19 -2.34 4.00 3.00 MEG 054
|
||||
055 14.76 -9.91 4.00 3.00 MEG 055
|
||||
056 21.32 -0.18 4.00 3.00 MEG 056
|
||||
057 -1.88 -3.98 4.00 3.00 MEG 057
|
||||
058 3.56 -3.73 4.00 3.00 MEG 058
|
||||
059 -12.57 -8.25 4.00 3.00 MEG 059
|
||||
060 -7.56 -12.70 4.00 3.00 MEG 060
|
||||
061 -15.02 -1.73 4.00 3.00 MEG 061
|
||||
062 -11.53 -17.47 4.00 3.00 MEG 062
|
||||
063 -0.18 -18.90 4.00 3.00 MEG 063
|
||||
064 -6.61 -0.05 4.00 3.00 MEG 064
|
||||
065 6.73 -9.47 4.00 3.00 MEG 065
|
||||
066 1.16 -8.63 4.00 3.00 MEG 066
|
||||
067 18.43 8.05 4.00 3.00 MEG 067
|
||||
068 16.27 12.00 4.00 3.00 MEG 068
|
||||
069 19.53 3.47 4.00 3.00 MEG 069
|
||||
070 11.49 5.68 4.00 3.00 MEG 070
|
||||
071 12.54 -0.07 4.00 3.00 MEG 071
|
||||
072 12.40 3.05 4.00 3.00 MEG 072
|
||||
073 -15.98 -9.55 4.00 3.00 MEG 073
|
||||
074 -18.65 -1.75 4.00 3.00 MEG 074
|
||||
075 -17.81 -5.83 4.00 3.00 MEG 075
|
||||
076 -1.09 0.06 4.00 3.00 MEG 076
|
||||
077 -1.11 2.07 4.00 3.00 MEG 077
|
||||
078 -17.59 -10.78 4.00 3.00 MEG 078
|
||||
079 -20.36 -2.47 4.00 3.00 MEG 079
|
||||
080 -16.06 10.29 4.00 3.00 MEG 080
|
||||
081 10.71 -5.93 4.00 3.00 MEG 081
|
||||
082 12.02 -3.35 4.00 3.00 MEG 082
|
||||
083 19.99 8.66 4.00 3.00 MEG 083
|
||||
084 15.61 15.53 4.00 3.00 MEG 084
|
||||
085 5.76 -4.95 4.00 3.00 MEG 085
|
||||
086 12.48 13.62 4.00 3.00 MEG 086
|
||||
087 18.03 3.69 4.00 3.00 MEG 087
|
||||
088 14.69 11.11 4.00 3.00 MEG 088
|
||||
089 -19.42 6.89 4.00 3.00 MEG 089
|
||||
090 -16.09 14.39 4.00 3.00 MEG 090
|
||||
091 -6.70 -5.77 4.00 3.00 MEG 091
|
||||
092 -12.37 -11.31 4.00 3.00 MEG 092
|
||||
093 -1.72 9.34 4.00 3.00 MEG 093
|
||||
094 -4.12 1.65 4.00 3.00 MEG 094
|
||||
095 -18.66 2.58 4.00 3.00 MEG 095
|
||||
096 -17.76 6.59 4.00 3.00 MEG 096
|
||||
097 8.82 -5.11 4.00 3.00 MEG 097
|
||||
098 8.79 -7.85 4.00 3.00 MEG 098
|
||||
099 15.43 6.10 4.00 3.00 MEG 099
|
||||
100 11.93 11.57 4.00 3.00 MEG 100
|
||||
101 16.58 7.80 4.00 3.00 MEG 101
|
||||
102 8.27 6.69 4.00 3.00 MEG 102
|
||||
103 11.62 -8.00 4.00 3.00 MEG 103
|
||||
104 13.11 -5.40 4.00 3.00 MEG 104
|
||||
105 -13.38 0.11 4.00 3.00 MEG 105
|
||||
106 -12.78 -3.22 4.00 3.00 MEG 106
|
||||
107 -12.98 3.35 4.00 3.00 MEG 107
|
||||
108 -11.84 6.58 4.00 3.00 MEG 108
|
||||
109 -10.08 9.11 4.00 3.00 MEG 109
|
||||
110 -16.27 -5.03 4.00 3.00 MEG 110
|
||||
111 -11.45 -6.21 4.00 3.00 MEG 111
|
||||
112 -0.59 5.83 4.00 3.00 MEG 112
|
||||
113 14.18 -2.06 4.00 3.00 MEG 113
|
||||
114 14.48 1.15 4.00 3.00 MEG 114
|
||||
115 12.68 7.37 4.00 3.00 MEG 115
|
||||
116 13.93 4.46 4.00 3.00 MEG 116
|
||||
117 8.98 11.57 4.00 3.00 MEG 117
|
||||
118 6.35 12.95 4.00 3.00 MEG 118
|
||||
119 11.01 9.71 4.00 3.00 MEG 119
|
||||
120 0.01 16.08 4.00 3.00 MEG 120
|
||||
121 -16.87 2.69 4.00 3.00 MEG 121
|
||||
122 -16.02 6.38 4.00 3.00 MEG 122
|
||||
123 -14.38 9.83 4.00 3.00 MEG 123
|
||||
124 -12.23 12.65 4.00 3.00 MEG 124
|
||||
125 -10.14 5.19 4.00 3.00 MEG 125
|
||||
126 -5.63 12.72 4.00 3.00 MEG 126
|
||||
127 -2.90 13.72 4.00 3.00 MEG 127
|
||||
128 -7.93 11.11 4.00 3.00 MEG 128
|
||||
129 6.83 14.86 4.00 3.00 MEG 129
|
||||
130 7.63 3.51 4.00 3.00 MEG 130
|
||||
131 8.56 0.40 4.00 3.00 MEG 131
|
||||
132 -2.70 7.01 4.00 3.00 MEG 132
|
||||
133 3.09 11.73 4.00 3.00 MEG 133
|
||||
134 8.14 9.62 4.00 3.00 MEG 134
|
||||
135 2.84 2.47 4.00 3.00 MEG 135
|
||||
136 4.05 6.89 4.00 3.00 MEG 136
|
||||
137 -6.16 14.64 4.00 3.00 MEG 137
|
||||
138 -11.02 2.49 4.00 3.00 MEG 138
|
||||
139 -6.78 6.65 4.00 3.00 MEG 139
|
||||
140 -6.24 3.18 4.00 3.00 MEG 140
|
||||
141 -6.83 9.47 4.00 3.00 MEG 141
|
||||
142 -2.48 11.64 4.00 3.00 MEG 142
|
||||
143 -17.59 14.92 4.00 3.00 MEG 143
|
||||
144 -22.23 2.07 4.00 3.00 MEG 144
|
||||
145 3.20 13.71 4.00 3.00 MEG 145
|
||||
146 2.06 5.84 4.00 3.00 MEG 146
|
||||
147 5.76 1.93 4.00 3.00 MEG 147
|
||||
148 23.08 3.86 4.00 3.00 MEG 148
|
||||
149 21.96 8.34 4.00 3.00 MEG 149
|
||||
150 20.00 12.43 4.00 3.00 MEG 150
|
||||
151 17.22 16.08 4.00 3.00 MEG 151
|
||||
152 3.91 9.37 4.00 3.00 MEG 152
|
||||
153 -21.58 6.32 4.00 3.00 MEG 153
|
||||
154 -20.17 10.61 4.00 3.00 MEG 154
|
||||
155 -11.01 10.95 4.00 3.00 MEG 155
|
||||
156 -14.51 5.43 4.00 3.00 MEG 156
|
||||
157 1.28 9.74 4.00 3.00 MEG 157
|
||||
162
mne/channels/data/layouts/KIT-160.lay
Normal file
162
mne/channels/data/layouts/KIT-160.lay
Normal file
@@ -0,0 +1,162 @@
|
||||
001 -0.0758202152 0.3520500341 0.03188472676 0.02713339699 MEG 001
|
||||
002 -0.1261117022 0.328933222 0.03188472676 0.02713339699 MEG 002
|
||||
003 -0.1696053658 0.2965692769 0.03188472676 0.02713339699 MEG 003
|
||||
004 0.1650030446 0.2798950608 0.03188472676 0.02713339699 MEG 004
|
||||
005 -0.1114275357 0.2868555816 0.03188472676 0.02713339699 MEG 005
|
||||
006 -0.06544380774 0.2622312709 0.03188472676 0.02713339699 MEG 006
|
||||
007 -0.1353647314 0.2073255917 0.03188472676 0.02713339699 MEG 007
|
||||
008 -0.17422271 0.1205755843 0.03188472676 0.02713339699 MEG 008
|
||||
009 -0.01368858767 0.2301473849 0.03188472676 0.02713339699 MEG 009
|
||||
010 -0.06470805562 0.2189319658 0.03188472676 0.02713339699 MEG 010
|
||||
011 -0.1247701784 0.1499178411 0.03188472676 0.02713339699 MEG 011
|
||||
012 -0.03961772545 0.1793694653 0.03188472676 0.02713339699 MEG 012
|
||||
013 -0.0711276654 0.1599000923 0.03188472676 0.02713339699 MEG 013
|
||||
014 -0.09668684076 0.1249745081 0.03188472676 0.02713339699 MEG 014
|
||||
015 -0.1103655395 0.08862749713 0.03188472676 0.02713339699 MEG 015
|
||||
016 -0.03953495363 0.1363424548 0.03188472676 0.02713339699 MEG 016
|
||||
017 -0.1781804786 0.01931847664 0.03188472676 0.02713339699 MEG 017
|
||||
018 -0.142520225 -0.06752066402 0.03188472676 0.02713339699 MEG 018
|
||||
019 -0.08088893708 -0.1241365481 0.03188472676 0.02713339699 MEG 019
|
||||
020 -0.04456843369 -0.1415706457 0.03188472676 0.02713339699 MEG 020
|
||||
021 -0.1426655535 0.05244256024 0.03188472676 0.02713339699 MEG 021
|
||||
022 -0.1340581452 0.000388349131 0.03188472676 0.02713339699 MEG 022
|
||||
023 -0.08512707038 -0.07696214533 0.03188472676 0.02713339699 MEG 023
|
||||
024 -0.04736054836 -0.09618399923 0.03188472676 0.02713339699 MEG 024
|
||||
025 -0.114643504 -0.04085422212 0.03188472676 0.02713339699 MEG 025
|
||||
026 -0.1103503321 0.03823179105 0.03188472676 0.02713339699 MEG 026
|
||||
027 -0.03958310463 -0.05556958642 0.03188472676 0.02713339699 MEG 027
|
||||
028 -0.06993629917 0.01943095503 0.03188472676 0.02713339699 MEG 028
|
||||
029 -0.04398320652 -0.01300040853 0.03188472676 0.02713339699 MEG 029
|
||||
030 -0.004227454924 -0.01962159408 0.03188472676 0.02713339699 MEG 030
|
||||
031 -0.01056467818 0.1062293634 0.03188472676 0.02713339699 MEG 031
|
||||
032 -0.04021127484 0.08385147042 0.03188472676 0.02713339699 MEG 032
|
||||
033 -0.3500780541 0.3978039282 0.03188472676 0.02713339699 MEG 033
|
||||
034 -0.400516673 0.3077821901 0.03188472676 0.02713339699 MEG 034
|
||||
035 -0.4325895921 0.2136911051 0.03188472676 0.02713339699 MEG 035
|
||||
036 -0.45 0.1074214926 0.03188472676 0.02713339699 MEG 036
|
||||
037 -0.3046138565 0.3570489454 0.03188472676 0.02713339699 MEG 037
|
||||
038 -0.3775870934 0.1989319321 0.03188472676 0.02713339699 MEG 038
|
||||
039 -0.3470032996 0.2860012743 0.03188472676 0.02713339699 MEG 039
|
||||
040 -0.2596101607 0.2361677074 0.03188472676 0.02713339699 MEG 040
|
||||
041 -0.3370312654 0.1080933205 0.03188472676 0.02713339699 MEG 041
|
||||
042 -0.2054494635 0.2529931344 0.03188472676 0.02713339699 MEG 042
|
||||
043 -0.2819761985 0.1711718789 0.03188472676 0.02713339699 MEG 043
|
||||
044 -0.2293126541 0.2020325726 0.03188472676 0.02713339699 MEG 044
|
||||
045 -0.253186216 0.08822084019 0.03188472676 0.02713339699 MEG 045
|
||||
046 -0.177239753 0.2148932642 0.03188472676 0.02713339699 MEG 046
|
||||
047 -0.1982663002 0.1636997157 0.03188472676 0.02713339699 MEG 047
|
||||
048 -0.2443663193 0.1429437606 0.03188472676 0.02713339699 MEG 048
|
||||
049 -0.3888843678 0.1059383909 0.03188472676 0.02713339699 MEG 049
|
||||
050 -0.4270282413 -0.09637491351 0.03188472676 0.02713339699 MEG 050
|
||||
051 -0.2842037041 -0.02907823435 0.03188472676 0.02713339699 MEG 051
|
||||
052 -0.3447270537 -0.2595887593 0.03188472676 0.02713339699 MEG 052
|
||||
053 -0.3909909615 0.01655882049 0.03188472676 0.02713339699 MEG 053
|
||||
054 -0.2988307343 -0.1206055812 0.03188472676 0.02713339699 MEG 054
|
||||
055 -0.2625165926 -0.18469877 0.03188472676 0.02713339699 MEG 055
|
||||
056 -0.3742205763 -0.06701211297 0.03188472676 0.02713339699 MEG 056
|
||||
057 -0.3368815045 0.02914339448 0.03188472676 0.02713339699 MEG 057
|
||||
058 -0.2614922293 -0.09693316038 0.03188472676 0.02713339699 MEG 058
|
||||
059 -0.2296354398 -0.1520887173 0.03188472676 0.02713339699 MEG 059
|
||||
060 -0.2424341314 -0.03356215166 0.03188472676 0.02713339699 MEG 060
|
||||
061 -0.1876464844 -0.1390883676 0.03188472676 0.02713339699 MEG 061
|
||||
062 -0.2141382597 0.06121102293 0.03188472676 0.02713339699 MEG 062
|
||||
063 -0.210559287 0.002243140577 0.03188472676 0.02713339699 MEG 063
|
||||
064 -0.1972138638 -0.04829819556 0.03188472676 0.02713339699 MEG 064
|
||||
065 0.1239897025 0.3184822507 0.03188472676 0.02713339699 MEG 065
|
||||
066 0.07602269198 0.346841814 0.03188472676 0.02713339699 MEG 066
|
||||
067 0.02730949028 0.3618289046 0.03188472676 0.02713339699 MEG 067
|
||||
068 -0.02876209065 0.3665275653 0.03188472676 0.02713339699 MEG 068
|
||||
069 0.06023566248 0.305037035 0.03188472676 0.02713339699 MEG 069
|
||||
070 0.01553893996 0.3208156125 0.03188472676 0.02713339699 MEG 070
|
||||
071 0.1455353008 0.1519564037 0.03188472676 0.02713339699 MEG 071
|
||||
072 0.09261086754 0.2300225572 0.03188472676 0.02713339699 MEG 072
|
||||
073 0.01800727232 0.2722816956 0.03188472676 0.02713339699 MEG 073
|
||||
074 0.09471660492 0.1660243591 0.03188472676 0.02713339699 MEG 074
|
||||
075 0.02256442482 0.2241822666 0.03188472676 0.02713339699 MEG 075
|
||||
076 0.1172275823 0.121354496 0.03188472676 0.02713339699 MEG 076
|
||||
077 0.06434989605 0.1443350384 0.03188472676 0.02713339699 MEG 077
|
||||
078 0.03192340214 0.1736460766 0.03188472676 0.02713339699 MEG 078
|
||||
079 0.002050178715 0.1879975831 0.03188472676 0.02713339699 MEG 079
|
||||
080 0.003697062517 0.143421051 0.03188472676 0.02713339699 MEG 080
|
||||
081 -0.003899772644 -0.1490601771 0.03188472676 0.02713339699 MEG 081
|
||||
082 0.0711394085 -0.1177609441 0.03188472676 0.02713339699 MEG 082
|
||||
083 0.1339233002 -0.04641972764 0.03188472676 0.02713339699 MEG 083
|
||||
084 0.1624045334 0.04808542023 0.03188472676 0.02713339699 MEG 084
|
||||
085 0.03165333222 -0.09469832945 0.03188472676 0.02713339699 MEG 085
|
||||
086 0.07137560881 -0.06228631109 0.03188472676 0.02713339699 MEG 086
|
||||
087 0.1185350219 0.01900269558 0.03188472676 0.02713339699 MEG 087
|
||||
088 0.1266742656 0.06930579768 0.03188472676 0.02713339699 MEG 088
|
||||
089 -0.004420218989 -0.06278528823 0.03188472676 0.02713339699 MEG 089
|
||||
090 0.06173501644 -0.0229233209 0.03188472676 0.02713339699 MEG 090
|
||||
091 0.08381840152 0.01449327322 0.03188472676 0.02713339699 MEG 091
|
||||
092 0.02911019425 -0.004626517545 0.03188472676 0.02713339699 MEG 092
|
||||
093 0.05293614742 0.03703628974 0.03188472676 0.02713339699 MEG 093
|
||||
094 0.08589158435 0.06075797622 0.03188472676 0.02713339699 MEG 094
|
||||
095 -0.007916726978 0.01526702488 0.03188472676 0.02713339699 MEG 095
|
||||
096 0.02152774438 0.08873530965 0.03188472676 0.02713339699 MEG 096
|
||||
097 0.4428288832 0.1535592899 0.03188472676 0.02713339699 MEG 097
|
||||
098 0.4162971034 0.267171892 0.03188472676 0.02713339699 MEG 098
|
||||
099 0.3668411201 0.3681231645 0.03188472676 0.02713339699 MEG 099
|
||||
100 0.3105057204 0.45 0.03188472676 0.02713339699 MEG 100
|
||||
101 0.3522874782 0.2435209125 0.03188472676 0.02713339699 MEG 101
|
||||
102 0.2611099363 0.4005591579 0.03188472676 0.02713339699 MEG 102
|
||||
103 0.3199035742 0.1404206704 0.03188472676 0.02713339699 MEG 103
|
||||
104 0.2620111685 0.2979083124 0.03188472676 0.02713339699 MEG 104
|
||||
105 0.2183237036 0.3586832133 0.03188472676 0.02713339699 MEG 105
|
||||
106 0.253424964 0.2038387029 0.03188472676 0.02713339699 MEG 106
|
||||
107 0.1821371767 0.3235092766 0.03188472676 0.02713339699 MEG 107
|
||||
108 0.2320142778 0.1055366971 0.03188472676 0.02713339699 MEG 108
|
||||
109 0.1969983757 0.2287392657 0.03188472676 0.02713339699 MEG 109
|
||||
110 0.1892169645 0.138858437 0.03188472676 0.02713339699 MEG 110
|
||||
111 0.1718069319 0.1949879663 0.03188472676 0.02713339699 MEG 111
|
||||
112 0.1412427238 0.2390846129 0.03188472676 0.02713339699 MEG 112
|
||||
113 0.3413341674 -0.2749014578 0.03188472676 0.02713339699 MEG 113
|
||||
114 0.3957163081 -0.1867381122 0.03188472676 0.02713339699 MEG 114
|
||||
115 0.4343284389 -0.0791376981 0.03188472676 0.02713339699 MEG 115
|
||||
116 0.45 0.04115848657 0.03188472676 0.02713339699 MEG 116
|
||||
117 0.294108122 -0.2248146657 0.03188472676 0.02713339699 MEG 117
|
||||
118 0.3408651095 -0.144258791 0.03188472676 0.02713339699 MEG 118
|
||||
119 0.3829160873 0.05059902865 0.03188472676 0.02713339699 MEG 119
|
||||
120 0.3147171717 -0.02712556599 0.03188472676 0.02713339699 MEG 120
|
||||
121 0.2904098027 -0.1079793618 0.03188472676 0.02713339699 MEG 121
|
||||
122 0.2489284377 -0.08302604569 0.03188472676 0.02713339699 MEG 122
|
||||
123 0.2791450822 0.06065203717 0.03188472676 0.02713339699 MEG 123
|
||||
124 0.1699476764 -0.1323891552 0.03188472676 0.02713339699 MEG 124
|
||||
125 0.2213406675 -0.02048593019 0.03188472676 0.02713339699 MEG 125
|
||||
126 0.1793293141 -0.03692175528 0.03188472676 0.02713339699 MEG 126
|
||||
127 0.2340431716 0.04272096725 0.03188472676 0.02713339699 MEG 127
|
||||
128 0.1989990214 0.07992534312 0.03188472676 0.02713339699 MEG 128
|
||||
129 -0.2893372271 -0.3287872551 0.03188472676 0.02713339699 MEG 129
|
||||
130 -0.2271848223 -0.3869397712 0.03188472676 0.02713339699 MEG 130
|
||||
131 -0.1541857375 -0.4262216107 0.03188472676 0.02713339699 MEG 131
|
||||
132 -0.07352758894 -0.45 0.03188472676 0.02713339699 MEG 132
|
||||
133 -0.2537949872 -0.2821367359 0.03188472676 0.02713339699 MEG 133
|
||||
134 -0.05789427224 -0.3854591968 0.03188472676 0.02713339699 MEG 134
|
||||
135 -0.2180547699 -0.2381599549 0.03188472676 0.02713339699 MEG 135
|
||||
136 -0.1654458556 -0.2836078687 0.03188472676 0.02713339699 MEG 136
|
||||
137 -0.1282115583 -0.3636295479 0.03188472676 0.02713339699 MEG 137
|
||||
138 -0.1869048087 -0.2008317859 0.03188472676 0.02713339699 MEG 138
|
||||
139 -0.092414085 -0.2712662931 0.03188472676 0.02713339699 MEG 139
|
||||
140 -0.04464737067 -0.3262626614 0.03188472676 0.02713339699 MEG 140
|
||||
141 -0.1084802139 -0.2080301215 0.03188472676 0.02713339699 MEG 141
|
||||
142 -0.008347885446 -0.2337992621 0.03188472676 0.02713339699 MEG 142
|
||||
143 -0.1346335691 -0.1372039628 0.03188472676 0.02713339699 MEG 143
|
||||
144 -0.05019800217 -0.1837431338 0.03188472676 0.02713339699 MEG 144
|
||||
145 0.08934861049 -0.3726540907 0.03188472676 0.02713339699 MEG 145
|
||||
146 0.106172944 -0.4435639299 0.03188472676 0.02713339699 MEG 146
|
||||
147 0.2218612721 0.2682623426 0.03188472676 0.02713339699 MEG 147
|
||||
148 0.2670027616 -0.3555067924 0.03188472676 0.02713339699 MEG 148
|
||||
149 0.01625933145 -0.3877305948 0.03188472676 0.02713339699 MEG 149
|
||||
150 0.1626843509 -0.342433819 0.03188472676 0.02713339699 MEG 150
|
||||
151 0.07960240502 -0.3134489525 0.03188472676 0.02713339699 MEG 151
|
||||
152 0.1456745581 -0.2843789795 0.03188472676 0.02713339699 MEG 152
|
||||
153 0.2343957441 -0.2951725192 0.03188472676 0.02713339699 MEG 153
|
||||
154 0.01783071962 -0.2738066839 0.03188472676 0.02713339699 MEG 154
|
||||
155 0.1274451621 -0.2352949445 0.03188472676 0.02713339699 MEG 155
|
||||
156 0.1746647823 -0.1970760538 0.03188472676 0.02713339699 MEG 156
|
||||
157 0.0872449245 -0.2076405522 0.03188472676 0.02713339699 MEG 157
|
||||
158 0.03888945369 -0.183846741 0.03188472676 0.02713339699 MEG 158
|
||||
159 0.08527772847 -0.1590694194 0.03188472676 0.02713339699 MEG 159
|
||||
160 0.1230026134 -0.1283845973 0.03188472676 0.02713339699 MEG 160
|
||||
161 -0.547000000 -0.5000000000 0.03188472676 0.02713339699 COMNT
|
||||
162 -0.547000000 -0.5000000000 0.03188472676 0.02713339699 SCALE
|
||||
209
mne/channels/data/layouts/KIT-AD.lout
Normal file
209
mne/channels/data/layouts/KIT-AD.lout
Normal file
@@ -0,0 +1,209 @@
|
||||
0.00 1.00 0.00 1.00
|
||||
001 0.61 0.56 0.02 0.04 MEG 001
|
||||
002 0.59 0.50 0.02 0.04 MEG 002
|
||||
003 0.48 0.42 0.02 0.04 MEG 003
|
||||
004 0.52 0.43 0.02 0.04 MEG 004
|
||||
005 0.43 0.44 0.02 0.04 MEG 005
|
||||
006 0.39 0.48 0.02 0.04 MEG 006
|
||||
007 0.52 0.70 0.02 0.04 MEG 007
|
||||
008 0.58 0.59 0.02 0.04 MEG 008
|
||||
009 0.47 0.71 0.02 0.04 MEG 009
|
||||
010 0.53 0.49 0.02 0.04 MEG 010
|
||||
011 0.57 0.53 0.02 0.04 MEG 011
|
||||
012 0.43 0.50 0.02 0.04 MEG 012
|
||||
013 0.40 0.55 0.02 0.04 MEG 013
|
||||
014 0.57 0.39 0.02 0.04 MEG 014
|
||||
015 0.38 0.41 0.02 0.04 MEG 015
|
||||
016 0.48 0.37 0.02 0.04 MEG 016
|
||||
017 0.16 0.84 0.02 0.04 MEG 017
|
||||
018 0.53 0.63 0.02 0.04 MEG 018
|
||||
019 0.48 0.53 0.02 0.04 MEG 019
|
||||
020 0.44 0.63 0.02 0.04 MEG 020
|
||||
021 0.53 0.56 0.02 0.04 MEG 021
|
||||
022 0.44 0.57 0.02 0.04 MEG 022
|
||||
023 0.56 0.46 0.02 0.04 MEG 023
|
||||
024 0.59 0.68 0.02 0.04 MEG 024
|
||||
025 0.34 0.86 0.02 0.04 MEG 025
|
||||
026 0.39 0.89 0.02 0.04 MEG 026
|
||||
027 0.50 0.91 0.02 0.04 MEG 027
|
||||
028 0.61 0.87 0.02 0.04 MEG 028
|
||||
029 0.66 0.84 0.02 0.04 MEG 029
|
||||
030 0.59 0.76 0.02 0.04 MEG 030
|
||||
031 0.39 0.62 0.02 0.04 MEG 031
|
||||
032 0.55 0.85 0.02 0.04 MEG 032
|
||||
033 0.28 0.39 0.02 0.04 MEG 033
|
||||
034 0.37 0.52 0.02 0.04 MEG 034
|
||||
035 0.36 0.59 0.02 0.04 MEG 035
|
||||
036 0.38 0.70 0.02 0.04 MEG 036
|
||||
037 0.07 0.87 0.02 0.04 MEG 037
|
||||
038 0.24 0.61 0.02 0.04 MEG 038
|
||||
039 0.32 0.68 0.02 0.04 MEG 039
|
||||
040 0.30 0.81 0.02 0.04 MEG 040
|
||||
041 0.43 0.96 0.02 0.04 MEG 041
|
||||
042 0.55 0.95 0.02 0.04 MEG 042
|
||||
043 0.42 0.74 0.02 0.04 MEG 043
|
||||
044 0.56 0.72 0.02 0.04 MEG 044
|
||||
045 0.47 0.76 0.02 0.04 MEG 045
|
||||
046 0.52 0.75 0.02 0.04 MEG 046
|
||||
047 0.45 0.85 0.02 0.04 MEG 047
|
||||
048 0.40 0.79 0.02 0.04 MEG 048
|
||||
049 0.24 0.79 0.02 0.04 MEG 049
|
||||
050 0.21 0.46 0.02 0.04 MEG 050
|
||||
051 0.32 0.76 0.02 0.04 MEG 051
|
||||
052 0.20 0.63 0.02 0.04 MEG 052
|
||||
053 0.27 0.33 0.02 0.04 MEG 053
|
||||
054 0.17 0.74 0.02 0.04 MEG 054
|
||||
055 0.05 0.65 0.02 0.04 MEG 055
|
||||
056 0.28 0.63 0.02 0.04 MEG 056
|
||||
057 0.70 0.62 0.02 0.04 MEG 057
|
||||
058 0.94 0.38 0.02 0.04 MEG 058
|
||||
059 0.91 0.73 0.02 0.04 MEG 059
|
||||
060 0.82 0.93 0.02 0.04 MEG 060
|
||||
061 0.93 0.63 0.02 0.04 MEG 061
|
||||
062 0.75 0.78 0.02 0.04 MEG 062
|
||||
063 0.69 0.78 0.02 0.04 MEG 063
|
||||
064 0.43 0.00 0.02 0.04 MEG 064
|
||||
065 0.18 0.40 0.02 0.04 MEG 065
|
||||
066 0.19 0.29 0.02 0.04 MEG 066
|
||||
067 0.15 0.56 0.02 0.04 MEG 067
|
||||
068 0.33 0.53 0.02 0.04 MEG 068
|
||||
069 0.35 0.47 0.02 0.04 MEG 069
|
||||
070 0.25 0.89 0.02 0.04 MEG 070
|
||||
071 0.24 0.53 0.02 0.04 MEG 071
|
||||
072 0.16 0.95 0.02 0.04 MEG 072
|
||||
073 0.67 0.75 0.02 0.04 MEG 073
|
||||
074 0.74 0.86 0.02 0.04 MEG 074
|
||||
075 0.81 0.71 0.02 0.04 MEG 075
|
||||
076 0.78 0.62 0.02 0.04 MEG 076
|
||||
077 0.65 0.65 0.02 0.04 MEG 077
|
||||
078 0.83 0.81 0.02 0.04 MEG 078
|
||||
079 0.82 0.53 0.02 0.04 MEG 079
|
||||
080 0.78 0.36 0.02 0.04 MEG 080
|
||||
081 0.56 0.65 0.02 0.04 MEG 081
|
||||
082 0.35 0.74 0.02 0.04 MEG 082
|
||||
083 0.21 0.71 0.02 0.04 MEG 083
|
||||
084 0.12 0.75 0.02 0.04 MEG 084
|
||||
085 0.11 0.66 0.02 0.04 MEG 085
|
||||
086 0.21 0.92 0.02 0.04 MEG 086
|
||||
087 0.13 0.96 0.02 0.04 MEG 087
|
||||
088 0.03 0.76 0.02 0.04 MEG 088
|
||||
089 0.66 0.89 0.02 0.04 MEG 089
|
||||
090 0.61 0.93 0.02 0.04 MEG 090
|
||||
091 0.63 0.79 0.02 0.04 MEG 091
|
||||
092 0.71 0.84 0.02 0.04 MEG 092
|
||||
093 0.44 0.91 0.02 0.04 MEG 093
|
||||
094 0.56 0.89 0.02 0.04 MEG 094
|
||||
095 0.42 0.68 0.02 0.04 MEG 095
|
||||
096 0.54 0.79 0.02 0.04 MEG 096
|
||||
097 0.11 0.86 0.02 0.04 MEG 097
|
||||
098 0.14 0.36 0.02 0.04 MEG 098
|
||||
099 0.32 0.60 0.02 0.04 MEG 099
|
||||
100 0.25 0.45 0.02 0.04 MEG 100
|
||||
101 0.19 0.54 0.02 0.04 MEG 101
|
||||
102 0.27 0.85 0.02 0.04 MEG 102
|
||||
103 0.27 0.75 0.02 0.04 MEG 103
|
||||
104 0.01 0.64 0.02 0.04 MEG 104
|
||||
105 0.69 0.68 0.02 0.04 MEG 105
|
||||
106 0.88 0.82 0.02 0.04 MEG 106
|
||||
107 0.45 0.80 0.02 0.04 MEG 107
|
||||
108 0.50 0.86 0.02 0.04 MEG 108
|
||||
109 0.36 0.80 0.02 0.04 MEG 109
|
||||
110 0.49 0.96 0.02 0.04 MEG 110
|
||||
111 0.37 0.93 0.02 0.04 MEG 111
|
||||
112 0.32 0.90 0.02 0.04 MEG 112
|
||||
113 0.07 0.42 0.02 0.04 MEG 113
|
||||
114 0.73 0.72 0.02 0.04 MEG 114
|
||||
115 0.19 0.12 0.02 0.04 MEG 115
|
||||
116 0.01 0.51 0.02 0.04 MEG 116
|
||||
117 0.07 0.29 0.02 0.04 MEG 117
|
||||
118 0.16 0.47 0.02 0.04 MEG 118
|
||||
119 0.22 0.33 0.02 0.04 MEG 119
|
||||
120 0.10 0.54 0.02 0.04 MEG 120
|
||||
121 0.78 0.89 0.02 0.04 MEG 121
|
||||
122 0.87 0.63 0.02 0.04 MEG 122
|
||||
123 0.86 0.72 0.02 0.04 MEG 123
|
||||
124 0.77 0.70 0.02 0.04 MEG 124
|
||||
125 0.63 0.71 0.02 0.04 MEG 125
|
||||
126 0.89 0.27 0.02 0.04 MEG 126
|
||||
127 0.97 0.62 0.02 0.04 MEG 127
|
||||
128 0.83 0.62 0.02 0.04 MEG 128
|
||||
129 0.77 0.11 0.02 0.04 MEG 129
|
||||
130 0.86 0.95 0.02 0.04 MEG 130
|
||||
131 0.71 0.42 0.02 0.04 MEG 131
|
||||
132 0.78 0.53 0.02 0.04 MEG 132
|
||||
133 0.65 0.57 0.02 0.04 MEG 133
|
||||
134 0.16 0.67 0.02 0.04 MEG 134
|
||||
135 0.29 0.71 0.02 0.04 MEG 135
|
||||
136 0.16 0.23 0.02 0.04 MEG 136
|
||||
137 0.82 0.34 0.02 0.04 MEG 137
|
||||
138 0.87 0.52 0.02 0.04 MEG 138
|
||||
139 0.81 0.22 0.02 0.04 MEG 139
|
||||
140 0.90 0.40 0.02 0.04 MEG 140
|
||||
141 0.97 0.49 0.02 0.04 MEG 141
|
||||
142 0.74 0.30 0.02 0.04 MEG 142
|
||||
143 0.81 0.44 0.02 0.04 MEG 143
|
||||
144 0.95 0.75 0.02 0.04 MEG 144
|
||||
145 0.13 0.19 0.02 0.04 MEG 145
|
||||
146 0.28 0.56 0.02 0.04 MEG 146
|
||||
147 0.74 0.15 0.02 0.04 MEG 147
|
||||
148 0.10 0.33 0.02 0.04 MEG 148
|
||||
149 0.35 0.02 0.02 0.04 MEG 149
|
||||
150 0.03 0.39 0.02 0.04 MEG 150
|
||||
151 0.27 0.06 0.02 0.04 MEG 151
|
||||
152 0.31 0.43 0.02 0.04 MEG 152
|
||||
153 0.77 0.26 0.02 0.04 MEG 153
|
||||
154 0.67 0.10 0.02 0.04 MEG 154
|
||||
155 0.76 0.44 0.02 0.04 MEG 155
|
||||
156 0.83 0.18 0.02 0.04 MEG 156
|
||||
157 0.61 0.02 0.02 0.04 MEG 157
|
||||
158 0.91 0.86 0.02 0.04 MEG 158
|
||||
159 0.92 0.51 0.02 0.04 MEG 159
|
||||
160 0.86 0.30 0.02 0.04 MEG 160
|
||||
161 0.44 0.12 0.02 0.04 MEG 161
|
||||
162 0.37 0.30 0.02 0.04 MEG 162
|
||||
163 0.30 0.17 0.02 0.04 MEG 163
|
||||
164 0.36 0.25 0.02 0.04 MEG 164
|
||||
165 0.41 0.22 0.02 0.04 MEG 165
|
||||
166 0.31 0.28 0.02 0.04 MEG 166
|
||||
167 0.05 0.53 0.02 0.04 MEG 167
|
||||
168 0.08 0.76 0.02 0.04 MEG 168
|
||||
169 0.69 0.24 0.02 0.04 MEG 169
|
||||
170 0.57 0.18 0.02 0.04 MEG 170
|
||||
171 0.50 0.17 0.02 0.04 MEG 171
|
||||
172 0.64 0.20 0.02 0.04 MEG 172
|
||||
173 0.65 0.42 0.02 0.04 MEG 173
|
||||
174 0.69 0.53 0.02 0.04 MEG 174
|
||||
175 0.61 0.44 0.02 0.04 MEG 175
|
||||
176 0.70 0.32 0.02 0.04 MEG 176
|
||||
177 0.44 0.17 0.02 0.04 MEG 177
|
||||
178 0.38 0.18 0.02 0.04 MEG 178
|
||||
179 0.32 0.22 0.02 0.04 MEG 179
|
||||
180 0.44 0.06 0.02 0.04 MEG 180
|
||||
181 0.22 0.16 0.02 0.04 MEG 181
|
||||
182 0.36 0.07 0.02 0.04 MEG 182
|
||||
183 0.28 0.11 0.02 0.04 MEG 183
|
||||
184 0.42 0.27 0.02 0.04 MEG 184
|
||||
185 0.52 0.32 0.02 0.04 MEG 185
|
||||
186 0.57 0.33 0.02 0.04 MEG 186
|
||||
187 0.47 0.32 0.02 0.04 MEG 187
|
||||
188 0.62 0.37 0.02 0.04 MEG 188
|
||||
189 0.73 0.49 0.02 0.04 MEG 189
|
||||
190 0.67 0.36 0.02 0.04 MEG 190
|
||||
191 0.74 0.57 0.02 0.04 MEG 191
|
||||
192 0.64 0.49 0.02 0.04 MEG 192
|
||||
193 0.59 0.06 0.02 0.04 MEG 193
|
||||
194 0.52 -0.00 0.02 0.04 MEG 194
|
||||
195 0.58 0.29 0.02 0.04 MEG 195
|
||||
196 0.53 0.27 0.02 0.04 MEG 196
|
||||
197 0.47 0.26 0.02 0.04 MEG 197
|
||||
198 0.34 0.39 0.02 0.04 MEG 198
|
||||
199 0.42 0.33 0.02 0.04 MEG 199
|
||||
200 0.38 0.35 0.02 0.04 MEG 200
|
||||
201 0.53 0.22 0.02 0.04 MEG 201
|
||||
202 0.59 0.24 0.02 0.04 MEG 202
|
||||
203 0.65 0.27 0.02 0.04 MEG 203
|
||||
204 0.27 0.26 0.02 0.04 MEG 204
|
||||
205 0.51 0.11 0.02 0.04 MEG 205
|
||||
206 0.65 0.15 0.02 0.04 MEG 206
|
||||
207 0.51 0.05 0.02 0.04 MEG 207
|
||||
208 0.69 0.05 0.02 0.04 MEG 208
|
||||
158
mne/channels/data/layouts/KIT-AS-2008.lout
Normal file
158
mne/channels/data/layouts/KIT-AS-2008.lout
Normal file
@@ -0,0 +1,158 @@
|
||||
0.00 0.00 0.04 0.02
|
||||
000 0.43 0.98 0.10 0.05 MEG 001
|
||||
001 0.38 0.96 0.10 0.05 MEG 002
|
||||
002 0.32 0.92 0.10 0.05 MEG 003
|
||||
003 0.44 0.93 0.10 0.05 MEG 004
|
||||
004 0.39 0.91 0.10 0.05 MEG 005
|
||||
005 0.45 0.88 0.10 0.05 MEG 006
|
||||
006 0.36 0.82 0.10 0.05 MEG 007
|
||||
007 0.32 0.78 0.10 0.05 MEG 008
|
||||
008 0.33 0.68 0.10 0.05 MEG 009
|
||||
009 0.40 0.79 0.10 0.05 MEG 010
|
||||
010 0.36 0.74 0.10 0.05 MEG 011
|
||||
011 0.48 0.78 0.10 0.05 MEG 012
|
||||
012 0.39 0.71 0.10 0.05 MEG 013
|
||||
013 0.37 0.66 0.10 0.05 MEG 014
|
||||
014 0.48 0.72 0.10 0.05 MEG 015
|
||||
015 0.44 0.69 0.10 0.05 MEG 016
|
||||
016 0.28 0.57 0.10 0.05 MEG 017
|
||||
017 0.29 0.51 0.10 0.05 MEG 018
|
||||
018 0.32 0.45 0.10 0.05 MEG 019
|
||||
019 0.40 0.36 0.10 0.05 MEG 020
|
||||
020 0.46 0.44 0.10 0.05 MEG 021
|
||||
021 0.33 0.60 0.10 0.05 MEG 022
|
||||
022 0.34 0.53 0.10 0.05 MEG 023
|
||||
023 0.41 0.42 0.10 0.05 MEG 024
|
||||
024 0.46 0.51 0.10 0.05 MEG 025
|
||||
025 0.38 0.59 0.10 0.05 MEG 026
|
||||
026 0.50 0.38 0.10 0.05 MEG 027
|
||||
027 0.41 0.48 0.10 0.05 MEG 028
|
||||
028 0.42 0.56 0.10 0.05 MEG 029
|
||||
029 0.51 0.49 0.10 0.05 MEG 030
|
||||
030 0.46 0.58 0.10 0.05 MEG 031
|
||||
031 0.47 0.64 0.10 0.05 MEG 032
|
||||
032 0.12 0.99 0.10 0.05 MEG 033
|
||||
033 0.07 0.90 0.10 0.05 MEG 034
|
||||
034 0.11 0.88 0.10 0.05 MEG 035
|
||||
035 0.13 0.77 0.10 0.05 MEG 036
|
||||
036 0.16 0.97 0.10 0.05 MEG 037
|
||||
037 0.07 0.78 0.10 0.05 MEG 038
|
||||
038 0.20 0.94 0.10 0.05 MEG 039
|
||||
039 0.16 0.86 0.10 0.05 MEG 040
|
||||
040 0.10 0.67 0.10 0.05 MEG 041
|
||||
041 0.25 0.90 0.10 0.05 MEG 042
|
||||
042 0.20 0.83 0.10 0.05 MEG 043
|
||||
043 0.17 0.76 0.10 0.05 MEG 044
|
||||
044 0.24 0.80 0.10 0.05 MEG 045
|
||||
045 0.20 0.65 0.10 0.05 MEG 046
|
||||
046 0.29 0.82 0.10 0.05 MEG 047
|
||||
047 0.25 0.69 0.10 0.05 MEG 048
|
||||
048 0.00 0.52 0.10 0.05 MEG 049
|
||||
049 0.02 0.40 0.10 0.05 MEG 050
|
||||
050 0.07 0.30 0.10 0.05 MEG 051
|
||||
051 0.12 0.20 0.10 0.05 MEG 052
|
||||
052 0.05 0.53 0.10 0.05 MEG 053
|
||||
053 0.07 0.42 0.10 0.05 MEG 054
|
||||
054 0.16 0.24 0.10 0.05 MEG 055
|
||||
055 0.10 0.56 0.10 0.05 MEG 056
|
||||
056 0.15 0.37 0.10 0.05 MEG 057
|
||||
057 0.16 0.56 0.10 0.05 MEG 058
|
||||
058 0.17 0.48 0.10 0.05 MEG 059
|
||||
059 0.20 0.40 0.10 0.05 MEG 060
|
||||
060 0.21 0.48 0.10 0.05 MEG 061
|
||||
061 0.28 0.34 0.10 0.05 MEG 062
|
||||
062 0.24 0.61 0.10 0.05 MEG 063
|
||||
063 0.30 0.39 0.10 0.05 MEG 064
|
||||
064 0.67 0.93 0.10 0.05 MEG 065
|
||||
065 0.62 0.96 0.10 0.05 MEG 066
|
||||
066 0.56 0.98 0.10 0.05 MEG 067
|
||||
067 0.50 0.99 0.10 0.05 MEG 068
|
||||
068 0.60 0.86 0.10 0.05 MEG 069
|
||||
069 0.56 0.93 0.10 0.05 MEG 070
|
||||
070 0.71 0.72 0.10 0.05 MEG 071
|
||||
071 0.65 0.83 0.10 0.05 MEG 072
|
||||
072 0.56 0.88 0.10 0.05 MEG 073
|
||||
073 0.65 0.76 0.10 0.05 MEG 074
|
||||
074 0.56 0.83 0.10 0.05 MEG 075
|
||||
075 0.64 0.66 0.10 0.05 MEG 076
|
||||
076 0.62 0.71 0.10 0.05 MEG 077
|
||||
077 0.53 0.78 0.10 0.05 MEG 078
|
||||
078 0.57 0.68 0.10 0.05 MEG 079
|
||||
079 0.53 0.72 0.10 0.05 MEG 080
|
||||
080 0.50 0.33 0.10 0.05 MEG 081
|
||||
081 0.55 0.34 0.10 0.05 MEG 082
|
||||
082 0.60 0.36 0.10 0.05 MEG 083
|
||||
083 0.69 0.44 0.10 0.05 MEG 084
|
||||
084 0.72 0.57 0.10 0.05 MEG 085
|
||||
085 0.61 0.42 0.10 0.05 MEG 086
|
||||
086 0.67 0.53 0.10 0.05 MEG 087
|
||||
087 0.69 0.61 0.10 0.05 MEG 088
|
||||
088 0.56 0.45 0.10 0.05 MEG 089
|
||||
089 0.60 0.48 0.10 0.05 MEG 090
|
||||
090 0.64 0.59 0.10 0.05 MEG 091
|
||||
091 0.56 0.51 0.10 0.05 MEG 092
|
||||
092 0.59 0.55 0.10 0.05 MEG 093
|
||||
093 0.51 0.55 0.10 0.05 MEG 094
|
||||
094 0.54 0.58 0.10 0.05 MEG 095
|
||||
095 0.54 0.64 0.10 0.05 MEG 096
|
||||
096 1.00 0.69 0.10 0.05 MEG 097
|
||||
097 0.97 0.81 0.10 0.05 MEG 098
|
||||
098 0.93 0.92 0.10 0.05 MEG 099
|
||||
099 0.87 1.00 0.10 0.05 MEG 100
|
||||
100 0.93 0.80 0.10 0.05 MEG 101
|
||||
101 0.83 0.97 0.10 0.05 MEG 102
|
||||
102 0.89 0.68 0.10 0.05 MEG 103
|
||||
103 0.84 0.87 0.10 0.05 MEG 104
|
||||
104 0.79 0.94 0.10 0.05 MEG 105
|
||||
105 0.85 0.68 0.10 0.05 MEG 106
|
||||
106 0.83 0.76 0.10 0.05 MEG 107
|
||||
107 0.76 0.91 0.10 0.05 MEG 108
|
||||
108 0.74 0.76 0.10 0.05 MEG 109
|
||||
109 0.76 0.81 0.10 0.05 MEG 110
|
||||
110 0.76 0.69 0.10 0.05 MEG 111
|
||||
111 0.71 0.83 0.10 0.05 MEG 112
|
||||
112 0.88 0.22 0.10 0.05 MEG 113
|
||||
113 0.94 0.32 0.10 0.05 MEG 114
|
||||
114 0.98 0.42 0.10 0.05 MEG 115
|
||||
115 1.00 0.54 0.10 0.05 MEG 116
|
||||
116 0.84 0.26 0.10 0.05 MEG 117
|
||||
117 0.93 0.45 0.10 0.05 MEG 118
|
||||
118 0.95 0.56 0.10 0.05 MEG 119
|
||||
119 0.81 0.30 0.10 0.05 MEG 120
|
||||
120 0.85 0.38 0.10 0.05 MEG 121
|
||||
121 0.81 0.41 0.10 0.05 MEG 122
|
||||
122 0.83 0.49 0.10 0.05 MEG 123
|
||||
123 0.85 0.58 0.10 0.05 MEG 124
|
||||
124 0.73 0.35 0.10 0.05 MEG 125
|
||||
125 0.79 0.49 0.10 0.05 MEG 126
|
||||
126 0.74 0.46 0.10 0.05 MEG 127
|
||||
127 0.77 0.61 0.10 0.05 MEG 128
|
||||
128 0.20 0.12 0.10 0.05 MEG 129
|
||||
129 0.37 0.02 0.10 0.05 MEG 130
|
||||
130 0.46 0.00 0.10 0.05 MEG 131
|
||||
131 0.30 0.11 0.10 0.05 MEG 132
|
||||
132 0.47 0.06 0.10 0.05 MEG 133
|
||||
133 0.25 0.21 0.10 0.05 MEG 134
|
||||
134 0.32 0.17 0.10 0.05 MEG 135
|
||||
135 0.39 0.13 0.10 0.05 MEG 136
|
||||
136 0.29 0.26 0.10 0.05 MEG 137
|
||||
137 0.41 0.19 0.10 0.05 MEG 138
|
||||
138 0.47 0.18 0.10 0.05 MEG 139
|
||||
139 0.39 0.26 0.10 0.05 MEG 140
|
||||
140 0.50 0.22 0.10 0.05 MEG 141
|
||||
141 0.33 0.29 0.10 0.05 MEG 142
|
||||
142 0.45 0.29 0.10 0.05 MEG 143
|
||||
143 0.50 0.28 0.10 0.05 MEG 144
|
||||
144 0.65 0.03 0.10 0.05 MEG 145
|
||||
145 0.82 0.13 0.10 0.05 MEG 146
|
||||
146 0.55 0.06 0.10 0.05 MEG 147
|
||||
147 0.71 0.12 0.10 0.05 MEG 148
|
||||
148 0.62 0.14 0.10 0.05 MEG 149
|
||||
149 0.69 0.18 0.10 0.05 MEG 150
|
||||
150 0.76 0.23 0.10 0.05 MEG 151
|
||||
151 0.54 0.18 0.10 0.05 MEG 152
|
||||
152 0.61 0.20 0.10 0.05 MEG 153
|
||||
153 0.73 0.27 0.10 0.05 MEG 154
|
||||
154 0.63 0.25 0.10 0.05 MEG 155
|
||||
155 0.56 0.28 0.10 0.05 MEG 156
|
||||
156 0.67 0.35 0.10 0.05 MEG 157
|
||||
158
mne/channels/data/layouts/KIT-UMD-3.lout
Normal file
158
mne/channels/data/layouts/KIT-UMD-3.lout
Normal file
@@ -0,0 +1,158 @@
|
||||
-25.00 28.00 -21.35 23.75
|
||||
000 -23.42 20.48 3.20 2.40 MEG 001
|
||||
001 -22.32 15.16 3.20 2.40 MEG 002
|
||||
002 -24.20 10.24 3.20 2.40 MEG 003
|
||||
003 -25.00 5.27 3.20 2.40 MEG 004
|
||||
004 -24.75 -0.21 3.20 2.40 MEG 005
|
||||
005 -23.41 -5.22 3.20 2.40 MEG 006
|
||||
006 -22.35 -11.37 3.20 2.40 MEG 007
|
||||
007 -14.06 -15.64 3.20 2.40 MEG 008
|
||||
008 -15.12 -18.15 3.20 2.40 MEG 009
|
||||
009 -11.26 -20.73 3.20 2.40 MEG 010
|
||||
010 -6.28 -20.94 3.20 2.40 MEG 011
|
||||
011 -2.04 -21.35 3.20 2.40 MEG 012
|
||||
012 2.04 -21.35 3.20 2.40 MEG 013
|
||||
013 6.28 -20.94 3.20 2.40 MEG 014
|
||||
014 11.26 -20.73 3.20 2.40 MEG 015
|
||||
015 15.12 -18.15 3.20 2.40 MEG 016
|
||||
016 19.41 -14.06 3.20 2.40 MEG 017
|
||||
017 22.35 -11.37 3.20 2.40 MEG 018
|
||||
018 24.06 -3.70 3.20 2.40 MEG 019
|
||||
019 24.23 1.80 3.20 2.40 MEG 020
|
||||
020 24.80 5.19 3.20 2.40 MEG 021
|
||||
021 22.03 13.42 3.20 2.40 MEG 022
|
||||
022 21.58 16.68 3.20 2.40 MEG 023
|
||||
023 23.42 20.48 3.20 2.40 MEG 024
|
||||
024 20.15 19.33 3.20 2.40 MEG 025
|
||||
025 7.46 -2.58 3.20 2.40 MEG 026
|
||||
026 22.86 7.70 3.20 2.40 MEG 027
|
||||
027 20.76 2.91 3.20 2.40 MEG 028
|
||||
028 19.70 -8.80 3.20 2.40 MEG 029
|
||||
029 3.41 -5.91 3.20 2.40 MEG 030
|
||||
030 14.06 -15.64 3.20 2.40 MEG 031
|
||||
031 0.12 -5.34 3.20 2.40 MEG 032
|
||||
032 1.80 -18.87 3.20 2.40 MEG 033
|
||||
033 -1.80 -18.87 3.20 2.40 MEG 034
|
||||
034 -10.12 -18.16 3.20 2.40 MEG 035
|
||||
035 -3.41 -5.91 3.20 2.40 MEG 036
|
||||
036 -18.35 -13.97 3.20 2.40 MEG 037
|
||||
037 -19.70 -8.80 3.20 2.40 MEG 038
|
||||
038 -20.76 2.91 3.20 2.40 MEG 039
|
||||
039 -22.86 7.70 3.20 2.40 MEG 040
|
||||
040 -7.46 -2.58 3.20 2.40 MEG 041
|
||||
041 -20.15 19.33 3.20 2.40 MEG 042
|
||||
042 -16.84 18.53 3.20 2.40 MEG 043
|
||||
043 -18.55 14.46 3.20 2.40 MEG 044
|
||||
044 -20.31 10.64 3.20 2.40 MEG 045
|
||||
045 -10.05 0.17 3.20 2.40 MEG 046
|
||||
046 -20.62 -2.66 3.20 2.40 MEG 047
|
||||
047 -17.20 -6.26 3.20 2.40 MEG 048
|
||||
048 -16.21 -11.50 3.20 2.40 MEG 049
|
||||
049 -8.92 -15.60 3.20 2.40 MEG 050
|
||||
050 -5.79 -18.42 3.20 2.40 MEG 051
|
||||
051 -1.62 -16.14 3.20 2.40 MEG 052
|
||||
052 -8.25 6.10 3.20 2.40 MEG 053
|
||||
053 5.79 -18.42 3.20 2.40 MEG 054
|
||||
054 8.92 -15.60 3.20 2.40 MEG 055
|
||||
055 16.21 -11.50 3.20 2.40 MEG 056
|
||||
056 17.20 -6.26 3.20 2.40 MEG 057
|
||||
057 20.62 -2.66 3.20 2.40 MEG 058
|
||||
058 -6.11 13.61 3.20 2.40 MEG 059
|
||||
059 20.31 10.64 3.20 2.40 MEG 060
|
||||
060 17.58 15.92 3.20 2.40 MEG 061
|
||||
061 16.84 18.53 3.20 2.40 MEG 062
|
||||
062 13.49 18.47 3.20 2.40 MEG 063
|
||||
063 15.28 13.32 3.20 2.40 MEG 064
|
||||
064 -4.11 11.13 3.20 2.40 MEG 065
|
||||
065 19.39 7.54 3.20 2.40 MEG 066
|
||||
066 17.50 3.47 3.20 2.40 MEG 067
|
||||
067 -6.54 8.57 3.20 2.40 MEG 068
|
||||
068 11.44 -8.04 3.20 2.40 MEG 069
|
||||
069 12.41 -13.14 3.20 2.40 MEG 070
|
||||
070 8.16 -13.13 3.20 2.40 MEG 071
|
||||
071 -7.60 2.77 3.20 2.40 MEG 072
|
||||
072 1.62 -16.14 3.20 2.40 MEG 073
|
||||
073 -6.80 0.14 3.20 2.40 MEG 074
|
||||
074 -5.40 -15.93 3.20 2.40 MEG 075
|
||||
075 -8.16 -13.13 3.20 2.40 MEG 076
|
||||
076 -12.41 -13.14 3.20 2.40 MEG 077
|
||||
077 -14.81 -8.97 3.20 2.40 MEG 078
|
||||
078 -3.23 -2.94 3.20 2.40 MEG 079
|
||||
079 -17.50 3.47 3.20 2.40 MEG 080
|
||||
080 -19.39 7.54 3.20 2.40 MEG 081
|
||||
081 4.03 -2.84 3.20 2.40 MEG 082
|
||||
082 -15.28 13.32 3.20 2.40 MEG 083
|
||||
083 -13.49 18.47 3.20 2.40 MEG 084
|
||||
084 -12.29 15.99 3.20 2.40 MEG 085
|
||||
085 -16.74 10.63 3.20 2.40 MEG 086
|
||||
086 6.80 0.14 3.20 2.40 MEG 087
|
||||
087 -17.30 -2.88 3.20 2.40 MEG 088
|
||||
088 -13.99 -4.86 3.20 2.40 MEG 089
|
||||
089 11.58 6.13 3.20 2.40 MEG 090
|
||||
090 -11.44 -8.04 3.20 2.40 MEG 091
|
||||
091 -3.30 -13.45 3.20 2.40 MEG 092
|
||||
092 6.54 8.57 3.20 2.40 MEG 093
|
||||
093 -9.52 -10.67 3.20 2.40 MEG 094
|
||||
094 9.52 -10.67 3.20 2.40 MEG 095
|
||||
095 4.11 11.13 3.20 2.40 MEG 096
|
||||
096 13.99 -4.86 3.20 2.40 MEG 097
|
||||
097 18.10 -0.17 3.20 2.40 MEG 098
|
||||
098 0.74 11.38 3.20 2.40 MEG 099
|
||||
099 16.74 10.63 3.20 2.40 MEG 100
|
||||
100 12.29 15.99 3.20 2.40 MEG 101
|
||||
101 10.11 18.86 3.20 2.40 MEG 102
|
||||
102 6.83 19.80 3.20 2.40 MEG 103
|
||||
103 3.48 21.35 3.20 2.40 MEG 104
|
||||
104 0.00 21.35 3.20 2.40 MEG 105
|
||||
105 -3.48 21.35 3.20 2.40 MEG 106
|
||||
106 -6.83 19.80 3.20 2.40 MEG 107
|
||||
107 -10.11 18.86 3.20 2.40 MEG 108
|
||||
108 -12.03 13.52 3.20 2.40 MEG 109
|
||||
109 -1.63 8.64 3.20 2.40 MEG 110
|
||||
110 -3.36 18.88 3.20 2.40 MEG 111
|
||||
111 -0.02 18.88 3.20 2.40 MEG 112
|
||||
112 3.36 18.88 3.20 2.40 MEG 113
|
||||
113 1.63 8.64 3.20 2.40 MEG 114
|
||||
114 9.01 16.34 3.20 2.40 MEG 115
|
||||
115 4.97 5.29 3.20 2.40 MEG 116
|
||||
116 13.28 10.76 3.20 2.40 MEG 117
|
||||
117 15.78 7.58 3.20 2.40 MEG 118
|
||||
118 14.24 3.60 3.20 2.40 MEG 119
|
||||
119 14.69 -0.31 3.20 2.40 MEG 120
|
||||
120 3.37 -0.21 3.20 2.40 MEG 121
|
||||
121 8.20 -8.14 3.20 2.40 MEG 122
|
||||
122 6.11 -10.67 3.20 2.40 MEG 123
|
||||
123 2.77 -10.98 3.20 2.40 MEG 124
|
||||
124 0.10 -13.43 3.20 2.40 MEG 125
|
||||
125 0.02 -0.57 3.20 2.40 MEG 126
|
||||
126 -2.77 -10.98 3.20 2.40 MEG 127
|
||||
127 -8.20 -8.14 3.20 2.40 MEG 128
|
||||
128 -3.37 -0.21 3.20 2.40 MEG 129
|
||||
129 -14.69 -0.31 3.20 2.40 MEG 130
|
||||
130 -14.24 3.60 3.20 2.40 MEG 131
|
||||
131 -15.78 7.58 3.20 2.40 MEG 132
|
||||
132 -13.28 10.76 3.20 2.40 MEG 133
|
||||
133 -4.97 5.29 3.20 2.40 MEG 134
|
||||
134 -9.46 11.02 3.20 2.40 MEG 135
|
||||
135 -12.21 7.84 3.20 2.40 MEG 136
|
||||
136 -10.93 3.58 3.20 2.40 MEG 137
|
||||
137 -10.71 -3.82 3.20 2.40 MEG 138
|
||||
138 -6.89 -5.51 3.20 2.40 MEG 139
|
||||
139 -1.66 5.24 3.20 2.40 MEG 140
|
||||
140 -2.40 -8.39 3.20 2.40 MEG 141
|
||||
141 2.40 -8.39 3.20 2.40 MEG 142
|
||||
142 -4.29 2.66 3.20 2.40 MEG 143
|
||||
143 6.89 -5.51 3.20 2.40 MEG 144
|
||||
144 10.71 -3.82 3.20 2.40 MEG 145
|
||||
145 10.93 3.58 3.20 2.40 MEG 146
|
||||
146 4.29 2.66 3.20 2.40 MEG 147
|
||||
147 9.46 11.02 3.20 2.40 MEG 148
|
||||
148 5.70 16.39 3.20 2.40 MEG 149
|
||||
149 1.66 5.24 3.20 2.40 MEG 150
|
||||
150 -2.37 16.38 3.20 2.40 MEG 151
|
||||
151 -5.70 16.39 3.20 2.40 MEG 152
|
||||
152 8.25 6.10 3.20 2.40 MEG 153
|
||||
153 -0.58 13.96 3.20 2.40 MEG 154
|
||||
154 2.81 13.89 3.20 2.40 MEG 155
|
||||
155 6.11 13.61 3.20 2.40 MEG 156
|
||||
156 2.37 16.38 3.20 2.40 MEG 157
|
||||
123
mne/channels/data/layouts/Neuromag_122.lout
Normal file
123
mne/channels/data/layouts/Neuromag_122.lout
Normal file
@@ -0,0 +1,123 @@
|
||||
-3 28 -17 15
|
||||
1 25.381295 -0.771781 2 1.5 MEG 001
|
||||
2 25.381295 0.727697 2 1.5 MEG 002
|
||||
3 22.715372 -0.733246 2 1.5 MEG 003
|
||||
4 22.715372 0.766753 2 1.5 MEG 004
|
||||
5 19.911143 -0.608748 2 1.5 MEG 005
|
||||
6 19.911143 0.891252 2 1.5 MEG 006
|
||||
7 24.481102 4.347077 2 1.5 MEG 007
|
||||
8 24.481102 5.847077 2 1.5 MEG 008
|
||||
9 21.9673 3.613717 2 1.5 MEG 009
|
||||
10 21.9673 5.113717 2 1.5 MEG 010
|
||||
11 19.345958 3.110359 2 1.5 MEG 011
|
||||
12 19.345958 4.610058 2 1.5 MEG 012
|
||||
13 16.706588 2.875744 2 1.5 MEG 013
|
||||
14 16.706588 4.375643 2 1.5 MEG 014
|
||||
15 14.09047 2.753697 2 1.5 MEG 015
|
||||
16 14.09047 4.253697 2 1.5 MEG 016
|
||||
17 19.559995 7.243332 2 1.5 MEG 017
|
||||
18 19.559995 8.743163 2 1.5 MEG 018
|
||||
19 16.942979 6.237191 2 1.5 MEG 019
|
||||
20 16.942979 7.737225 2 1.5 MEG 020
|
||||
21 14.204774 5.792745 2 1.5 MEG 021
|
||||
22 14.204774 7.292858 2 1.5 MEG 022
|
||||
23 11.5 5.70429 2 1.5 MEG 023
|
||||
24 11.5 7.204446 2 1.5 MEG 024
|
||||
25 16.662514 9.87843 2 1.5 MEG 025
|
||||
26 16.662514 11.37843 2 1.5 MEG 026
|
||||
27 13.466339 11.859999 2 1.5 MEG 027
|
||||
28 13.466339 13.359952 2 1.5 MEG 028
|
||||
29 13.450371 8.807222 2 1.5 MEG 029
|
||||
30 13.450371 10.307518 2 1.5 MEG 030
|
||||
31 9.533661 11.859999 2 1.5 MEG 031
|
||||
32 9.533661 13.359952 2 1.5 MEG 032
|
||||
33 9.54963 8.807222 2 1.5 MEG 033
|
||||
34 9.54963 10.307518 2 1.5 MEG 034
|
||||
35 6.3374865 9.87843 2 1.5 MEG 035
|
||||
36 6.337486 11.37843 2 1.5 MEG 036
|
||||
37 3.440005 7.243332 2 1.5 MEG 037
|
||||
38 3.440005 8.743163 2 1.5 MEG 038
|
||||
39 6.057021 6.237192 2 1.5 MEG 039
|
||||
40 6.057021 7.737225 2 1.5 MEG 040
|
||||
41 8.795226 5.792745 2 1.5 MEG 041
|
||||
42 8.795226 7.292858 2 1.5 MEG 042
|
||||
43 -1.481102 4.347078 2 1.5 MEG 043
|
||||
44 -1.481102 5.847078 2 1.5 MEG 044
|
||||
45 1.0327 3.613581 2 1.5 MEG 045
|
||||
46 1.0327 5.113717 2 1.5 MEG 046
|
||||
47 3.654042 3.11036 2 1.5 MEG 047
|
||||
48 3.654042 4.610058 2 1.5 MEG 048
|
||||
49 6.293412 2.875744 2 1.5 MEG 049
|
||||
50 6.293412 4.375643 2 1.5 MEG 050
|
||||
51 8.90953 2.753697 2 1.5 MEG 051
|
||||
52 8.90953 4.253697 2 1.5 MEG 052
|
||||
53 11.5 2.731327 2 1.5 MEG 053
|
||||
54 11.5 4.231464 2 1.5 MEG 054
|
||||
55 -2.381295 -0.771781 2 1.5 MEG 055
|
||||
56 -2.381295 0.727697 2 1.5 MEG 056
|
||||
57 0.284628 -0.733246 2 1.5 MEG 057
|
||||
58 0.284628 0.766753 2 1.5 MEG 058
|
||||
59 3.088857 -0.608748 2 1.5 MEG 059
|
||||
60 3.088857 0.891252 2 1.5 MEG 060
|
||||
61 5.895393 -0.521429 2 1.5 MEG 061
|
||||
62 5.895393 0.978571 2 1.5 MEG 062
|
||||
63 8.696664 -0.481488 2 1.5 MEG 063
|
||||
64 8.696664 1.018793 2 1.5 MEG 064
|
||||
65 11.5 -0.46314 2 1.5 MEG 065
|
||||
66 11.5 1.036853 2 1.5 MEG 066
|
||||
67 -1.590015 -6.177621 2 1.5 MEG 067
|
||||
68 -1.590015 -4.677286 2 1.5 MEG 068
|
||||
69 0.893853 -5.313065 2 1.5 MEG 069
|
||||
70 0.893853 -3.813065 2 1.5 MEG 070
|
||||
71 3.788197 -4.494587 2 1.5 MEG 071
|
||||
72 3.788197 -2.994811 2 1.5 MEG 072
|
||||
73 6.749538 -3.95458 2 1.5 MEG 073
|
||||
74 6.749538 -2.454261 2 1.5 MEG 074
|
||||
75 1.096738 -10.894836 2 1.5 MEG 075
|
||||
76 1.096738 -9.394836 2 1.5 MEG 076
|
||||
77 3.402274 -9.346367 2 1.5 MEG 077
|
||||
78 3.402274 -7.846579 2 1.5 MEG 078
|
||||
79 6.182132 -8.131419 2 1.5 MEG 079
|
||||
80 6.182132 -6.631304 2 1.5 MEG 080
|
||||
81 6.102499 -15.409053 2 1.5 MEG 081
|
||||
82 6.102499 -13.908834 2 1.5 MEG 082
|
||||
83 6.914234 -12.406122 2 1.5 MEG 083
|
||||
84 6.914234 -10.906034 2 1.5 MEG 084
|
||||
85 9.307503 -10.644013 2 1.5 MEG 085
|
||||
86 9.307503 -9.143762 2 1.5 MEG 086
|
||||
87 9.660984 -7.199067 2 1.5 MEG 087
|
||||
88 9.660984 -5.699067 2 1.5 MEG 088
|
||||
89 9.807536 -3.822648 2 1.5 MEG 089
|
||||
90 9.807536 -2.322552 2 1.5 MEG 090
|
||||
91 11.5 -16.259918 2 1.5 MEG 091
|
||||
92 11.5 -14.759918 2 1.5 MEG 092
|
||||
93 11.5 -13.097164 2 1.5 MEG 093
|
||||
94 11.5 -11.597439 2 1.5 MEG 094
|
||||
95 13.692497 -10.644013 2 1.5 MEG 095
|
||||
96 13.692497 -9.143762 2 1.5 MEG 096
|
||||
97 13.339016 -7.199067 2 1.5 MEG 097
|
||||
98 13.339016 -5.699067 2 1.5 MEG 098
|
||||
99 13.192464 -3.822648 2 1.5 MEG 099
|
||||
100 13.192464 -2.322552 2 1.5 MEG 100
|
||||
101 16.897501 -15.409053 2 1.5 MEG 101
|
||||
102 16.897501 -13.908834 2 1.5 MEG 102
|
||||
103 16.085766 -12.406122 2 1.5 MEG 103
|
||||
104 16.085766 -10.906034 2 1.5 MEG 104
|
||||
105 21.903262 -10.894836 2 1.5 MEG 105
|
||||
106 21.903262 -9.394836 2 1.5 MEG 106
|
||||
107 19.597726 -9.346367 2 1.5 MEG 107
|
||||
108 19.597726 -7.846579 2 1.5 MEG 108
|
||||
109 16.817868 -8.131419 2 1.5 MEG 109
|
||||
110 16.817868 -6.631304 2 1.5 MEG 110
|
||||
111 24.590015 -6.177621 2 1.5 MEG 111
|
||||
112 24.590015 -4.677286 2 1.5 MEG 112
|
||||
113 22.106147 -5.313065 2 1.5 MEG 113
|
||||
114 22.106147 -3.813065 2 1.5 MEG 114
|
||||
115 19.211802 -4.494588 2 1.5 MEG 115
|
||||
116 19.211802 -2.994811 2 1.5 MEG 116
|
||||
117 16.250462 -3.95458 2 1.5 MEG 117
|
||||
118 16.250462 -2.454261 2 1.5 MEG 118
|
||||
119 17.104607 -0.521429 2 1.5 MEG 119
|
||||
120 17.104607 0.978571 2 1.5 MEG 120
|
||||
121 14.303336 -0.481488 2 1.5 MEG 121
|
||||
122 14.303336 1.018792 2 1.5 MEG 122
|
||||
307
mne/channels/data/layouts/Vectorview-all.lout
Normal file
307
mne/channels/data/layouts/Vectorview-all.lout
Normal file
@@ -0,0 +1,307 @@
|
||||
-85.000000 90.000000 -83.000000 75.000000
|
||||
113 -73.416206 33.416687 6.000000 5.000000 MEG 0113
|
||||
112 -73.416206 38.416687 6.000000 5.000000 MEG 0112
|
||||
111 -67.416206 35.916687 6.000000 5.000000 MEG 0111
|
||||
122 -59.602242 38.489067 6.000000 5.000000 MEG 0122
|
||||
123 -59.602242 43.489067 6.000000 5.000000 MEG 0123
|
||||
121 -53.602242 40.989067 6.000000 5.000000 MEG 0121
|
||||
132 -68.018288 18.676970 6.000000 5.000000 MEG 0132
|
||||
133 -68.018288 23.676970 6.000000 5.000000 MEG 0133
|
||||
131 -62.018288 21.176970 6.000000 5.000000 MEG 0131
|
||||
143 -80.582848 8.095787 6.000000 5.000000 MEG 0143
|
||||
142 -80.582848 13.095787 6.000000 5.000000 MEG 0142
|
||||
141 -74.582848 10.595787 6.000000 5.000000 MEG 0141
|
||||
213 -56.595154 17.019251 6.000000 5.000000 MEG 0213
|
||||
212 -56.595154 22.019251 6.000000 5.000000 MEG 0212
|
||||
211 -50.595154 19.519251 6.000000 5.000000 MEG 0211
|
||||
222 -44.599728 17.543873 6.000000 5.000000 MEG 0222
|
||||
223 -44.599728 22.543873 6.000000 5.000000 MEG 0223
|
||||
221 -38.599728 20.043873 6.000000 5.000000 MEG 0221
|
||||
232 -47.416420 -0.216784 6.000000 5.000000 MEG 0232
|
||||
233 -47.416420 4.783216 6.000000 5.000000 MEG 0233
|
||||
231 -41.416420 2.283216 6.000000 5.000000 MEG 0231
|
||||
243 -59.280643 -2.761772 6.000000 5.000000 MEG 0243
|
||||
242 -59.280643 2.238228 6.000000 5.000000 MEG 0242
|
||||
241 -53.280643 -0.261772 6.000000 5.000000 MEG 0241
|
||||
313 -39.790501 47.430138 6.000000 5.000000 MEG 0313
|
||||
312 -39.790501 52.430138 6.000000 5.000000 MEG 0312
|
||||
311 -33.790501 49.930138 6.000000 5.000000 MEG 0311
|
||||
322 -38.014336 32.768585 6.000000 5.000000 MEG 0322
|
||||
323 -38.014336 37.768585 6.000000 5.000000 MEG 0323
|
||||
321 -32.014336 35.268585 6.000000 5.000000 MEG 0321
|
||||
333 -27.679966 28.868065 6.000000 5.000000 MEG 0333
|
||||
332 -27.679966 33.868065 6.000000 5.000000 MEG 0332
|
||||
331 -21.679966 31.368065 6.000000 5.000000 MEG 0331
|
||||
343 -49.684467 34.078434 6.000000 5.000000 MEG 0343
|
||||
342 -49.684467 39.078434 6.000000 5.000000 MEG 0342
|
||||
341 -43.684467 36.578434 6.000000 5.000000 MEG 0341
|
||||
413 -32.997990 15.607347 6.000000 5.000000 MEG 0413
|
||||
412 -32.997990 20.607347 6.000000 5.000000 MEG 0412
|
||||
411 -26.997990 18.107347 6.000000 5.000000 MEG 0411
|
||||
422 -21.084751 13.953575 6.000000 5.000000 MEG 0422
|
||||
423 -21.084751 18.953575 6.000000 5.000000 MEG 0423
|
||||
421 -15.084751 16.453575 6.000000 5.000000 MEG 0421
|
||||
432 -21.930935 -0.085500 6.000000 5.000000 MEG 0432
|
||||
433 -21.930935 4.914500 6.000000 5.000000 MEG 0433
|
||||
431 -15.930935 2.414500 6.000000 5.000000 MEG 0431
|
||||
443 -34.824663 0.362587 6.000000 5.000000 MEG 0443
|
||||
442 -34.824663 5.362587 6.000000 5.000000 MEG 0442
|
||||
441 -28.824663 2.862587 6.000000 5.000000 MEG 0441
|
||||
513 -27.861498 55.439636 6.000000 5.000000 MEG 0513
|
||||
512 -27.861498 60.439636 6.000000 5.000000 MEG 0512
|
||||
511 -21.861498 57.939636 6.000000 5.000000 MEG 0511
|
||||
523 -15.506709 59.619865 6.000000 5.000000 MEG 0523
|
||||
522 -15.506709 64.619865 6.000000 5.000000 MEG 0522
|
||||
521 -9.506709 62.119865 6.000000 5.000000 MEG 0521
|
||||
532 -14.616095 49.308380 6.000000 5.000000 MEG 0532
|
||||
533 -14.616095 54.308380 6.000000 5.000000 MEG 0533
|
||||
531 -8.616095 51.808380 6.000000 5.000000 MEG 0531
|
||||
542 -27.240477 43.863430 6.000000 5.000000 MEG 0542
|
||||
543 -27.240477 48.863430 6.000000 5.000000 MEG 0543
|
||||
541 -21.240477 46.363430 6.000000 5.000000 MEG 0541
|
||||
613 -14.782405 38.147827 6.000000 5.000000 MEG 0613
|
||||
612 -14.782405 43.147827 6.000000 5.000000 MEG 0612
|
||||
611 -8.782405 40.647827 6.000000 5.000000 MEG 0611
|
||||
622 -2.967276 27.260933 6.000000 5.000000 MEG 0622
|
||||
623 -2.967276 32.260933 6.000000 5.000000 MEG 0623
|
||||
621 3.032724 29.760933 6.000000 5.000000 MEG 0621
|
||||
633 -9.094766 14.700909 6.000000 5.000000 MEG 0633
|
||||
632 -9.094766 19.700909 6.000000 5.000000 MEG 0632
|
||||
631 -3.094766 17.200909 6.000000 5.000000 MEG 0631
|
||||
642 -15.199021 26.631405 6.000000 5.000000 MEG 0642
|
||||
643 -15.199021 31.631405 6.000000 5.000000 MEG 0643
|
||||
641 -9.199021 29.131405 6.000000 5.000000 MEG 0641
|
||||
713 -9.246834 1.693846 6.000000 5.000000 MEG 0713
|
||||
712 -9.246834 6.693846 6.000000 5.000000 MEG 0712
|
||||
711 -3.246834 4.193846 6.000000 5.000000 MEG 0711
|
||||
723 3.314525 1.573887 6.000000 5.000000 MEG 0723
|
||||
722 3.314525 6.573887 6.000000 5.000000 MEG 0722
|
||||
721 9.314525 4.073887 6.000000 5.000000 MEG 0721
|
||||
733 3.387173 -10.588106 6.000000 5.000000 MEG 0733
|
||||
732 3.387173 -5.588106 6.000000 5.000000 MEG 0732
|
||||
731 9.387173 -8.088106 6.000000 5.000000 MEG 0731
|
||||
743 -9.422897 -10.519942 6.000000 5.000000 MEG 0743
|
||||
742 -9.422897 -5.519942 6.000000 5.000000 MEG 0742
|
||||
741 -3.422897 -8.019942 6.000000 5.000000 MEG 0741
|
||||
813 -2.962408 61.007698 6.000000 5.000000 MEG 0813
|
||||
812 -2.962408 66.007698 6.000000 5.000000 MEG 0812
|
||||
811 3.037592 63.507698 6.000000 5.000000 MEG 0811
|
||||
822 -2.965545 50.641838 6.000000 5.000000 MEG 0822
|
||||
823 -2.965545 55.641838 6.000000 5.000000 MEG 0823
|
||||
821 3.034455 53.141838 6.000000 5.000000 MEG 0821
|
||||
913 9.504830 59.655254 6.000000 5.000000 MEG 0913
|
||||
912 9.504830 64.655254 6.000000 5.000000 MEG 0912
|
||||
911 15.504830 62.155254 6.000000 5.000000 MEG 0911
|
||||
923 21.967310 55.408710 6.000000 5.000000 MEG 0923
|
||||
922 21.967310 60.408710 6.000000 5.000000 MEG 0922
|
||||
921 27.967310 57.908710 6.000000 5.000000 MEG 0921
|
||||
932 21.254196 43.889683 6.000000 5.000000 MEG 0932
|
||||
933 21.254196 48.889683 6.000000 5.000000 MEG 0933
|
||||
931 27.254196 46.389683 6.000000 5.000000 MEG 0931
|
||||
942 8.661931 49.358044 6.000000 5.000000 MEG 0942
|
||||
943 8.661931 54.358044 6.000000 5.000000 MEG 0943
|
||||
941 14.661931 51.858044 6.000000 5.000000 MEG 0941
|
||||
1013 -2.967087 39.669956 6.000000 5.000000 MEG 1013
|
||||
1012 -2.967087 44.669956 6.000000 5.000000 MEG 1012
|
||||
1011 3.032913 42.169956 6.000000 5.000000 MEG 1011
|
||||
1023 8.751018 38.154079 6.000000 5.000000 MEG 1023
|
||||
1022 8.751018 43.154079 6.000000 5.000000 MEG 1022
|
||||
1021 14.751018 40.654079 6.000000 5.000000 MEG 1021
|
||||
1032 9.123913 26.648697 6.000000 5.000000 MEG 1032
|
||||
1033 9.123913 31.648697 6.000000 5.000000 MEG 1033
|
||||
1031 15.123913 29.148697 6.000000 5.000000 MEG 1031
|
||||
1043 3.200539 14.795620 6.000000 5.000000 MEG 1043
|
||||
1042 3.200539 19.795620 6.000000 5.000000 MEG 1042
|
||||
1041 9.200539 17.295620 6.000000 5.000000 MEG 1041
|
||||
1112 15.014965 13.912239 6.000000 5.000000 MEG 1112
|
||||
1113 15.014965 18.912239 6.000000 5.000000 MEG 1113
|
||||
1111 21.014965 16.412239 6.000000 5.000000 MEG 1111
|
||||
1123 26.958527 15.562130 6.000000 5.000000 MEG 1123
|
||||
1122 26.958527 20.562130 6.000000 5.000000 MEG 1122
|
||||
1121 32.958527 18.062130 6.000000 5.000000 MEG 1121
|
||||
1133 28.757563 0.227141 6.000000 5.000000 MEG 1133
|
||||
1132 28.757563 5.227141 6.000000 5.000000 MEG 1132
|
||||
1131 34.757563 2.727141 6.000000 5.000000 MEG 1131
|
||||
1142 15.882982 0.037700 6.000000 5.000000 MEG 1142
|
||||
1143 15.882982 5.037700 6.000000 5.000000 MEG 1143
|
||||
1141 21.882982 2.537700 6.000000 5.000000 MEG 1141
|
||||
1213 33.958897 47.388790 6.000000 5.000000 MEG 1213
|
||||
1212 33.958897 52.388790 6.000000 5.000000 MEG 1212
|
||||
1211 39.958897 49.888790 6.000000 5.000000 MEG 1211
|
||||
1223 43.923473 33.914738 6.000000 5.000000 MEG 1223
|
||||
1222 43.923473 38.914738 6.000000 5.000000 MEG 1222
|
||||
1221 49.923473 36.414738 6.000000 5.000000 MEG 1221
|
||||
1232 32.014336 32.768585 6.000000 5.000000 MEG 1232
|
||||
1233 32.014336 37.768585 6.000000 5.000000 MEG 1233
|
||||
1231 38.014336 35.268585 6.000000 5.000000 MEG 1231
|
||||
1243 21.600079 28.898149 6.000000 5.000000 MEG 1243
|
||||
1242 21.600079 33.898149 6.000000 5.000000 MEG 1242
|
||||
1241 27.600079 31.398149 6.000000 5.000000 MEG 1241
|
||||
1312 38.599728 17.543867 6.000000 5.000000 MEG 1312
|
||||
1313 38.599728 22.543867 6.000000 5.000000 MEG 1313
|
||||
1311 44.599728 20.043867 6.000000 5.000000 MEG 1311
|
||||
1323 50.558392 16.887651 6.000000 5.000000 MEG 1323
|
||||
1322 50.558392 21.887651 6.000000 5.000000 MEG 1322
|
||||
1321 56.558392 19.387651 6.000000 5.000000 MEG 1321
|
||||
1333 53.420483 -2.919475 6.000000 5.000000 MEG 1333
|
||||
1332 53.420483 2.080525 6.000000 5.000000 MEG 1332
|
||||
1331 59.420483 -0.419475 6.000000 5.000000 MEG 1331
|
||||
1342 41.371586 -0.216817 6.000000 5.000000 MEG 1342
|
||||
1343 41.371586 4.783183 6.000000 5.000000 MEG 1343
|
||||
1341 47.371586 2.283183 6.000000 5.000000 MEG 1341
|
||||
1412 53.704369 38.563030 6.000000 5.000000 MEG 1412
|
||||
1413 53.704369 43.563030 6.000000 5.000000 MEG 1413
|
||||
1411 59.704369 41.063030 6.000000 5.000000 MEG 1411
|
||||
1423 67.119286 33.843739 6.000000 5.000000 MEG 1423
|
||||
1422 67.119286 38.843739 6.000000 5.000000 MEG 1422
|
||||
1421 73.119286 36.343739 6.000000 5.000000 MEG 1421
|
||||
1433 74.438919 8.335863 6.000000 5.000000 MEG 1433
|
||||
1432 74.438919 13.335863 6.000000 5.000000 MEG 1432
|
||||
1431 80.438919 10.835863 6.000000 5.000000 MEG 1431
|
||||
1442 61.883209 18.562304 6.000000 5.000000 MEG 1442
|
||||
1443 61.883209 23.562304 6.000000 5.000000 MEG 1443
|
||||
1441 67.883209 21.062304 6.000000 5.000000 MEG 1441
|
||||
1512 -71.298943 -4.707253 6.000000 5.000000 MEG 1512
|
||||
1513 -71.298943 0.292747 6.000000 5.000000 MEG 1513
|
||||
1511 -65.298943 -2.207253 6.000000 5.000000 MEG 1511
|
||||
1522 -67.281609 -25.407852 6.000000 5.000000 MEG 1522
|
||||
1523 -67.281609 -20.407852 6.000000 5.000000 MEG 1523
|
||||
1521 -61.281609 -22.907852 6.000000 5.000000 MEG 1521
|
||||
1533 -71.702820 -40.152336 6.000000 5.000000 MEG 1533
|
||||
1532 -71.702820 -35.152336 6.000000 5.000000 MEG 1532
|
||||
1531 -65.702820 -37.652336 6.000000 5.000000 MEG 1531
|
||||
1543 -79.907913 -17.418098 6.000000 5.000000 MEG 1543
|
||||
1542 -79.907913 -12.418098 6.000000 5.000000 MEG 1542
|
||||
1541 -73.907913 -14.918098 6.000000 5.000000 MEG 1541
|
||||
1613 -56.916454 -20.312164 6.000000 5.000000 MEG 1613
|
||||
1612 -56.916454 -15.312164 6.000000 5.000000 MEG 1612
|
||||
1611 -50.916454 -17.812164 6.000000 5.000000 MEG 1611
|
||||
1622 -45.631779 -16.320436 6.000000 5.000000 MEG 1622
|
||||
1623 -45.631779 -11.320436 6.000000 5.000000 MEG 1623
|
||||
1621 -39.631779 -13.820436 6.000000 5.000000 MEG 1621
|
||||
1632 -37.896103 -30.578358 6.000000 5.000000 MEG 1632
|
||||
1633 -37.896103 -25.578358 6.000000 5.000000 MEG 1633
|
||||
1631 -31.896103 -28.078358 6.000000 5.000000 MEG 1631
|
||||
1643 -48.859089 -36.176094 6.000000 5.000000 MEG 1643
|
||||
1642 -48.859089 -31.176094 6.000000 5.000000 MEG 1642
|
||||
1641 -42.859089 -33.676094 6.000000 5.000000 MEG 1641
|
||||
1713 -56.796040 -59.082275 6.000000 5.000000 MEG 1713
|
||||
1712 -56.796040 -54.082275 6.000000 5.000000 MEG 1712
|
||||
1711 -50.796040 -56.582275 6.000000 5.000000 MEG 1711
|
||||
1722 -57.188797 -44.057373 6.000000 5.000000 MEG 1722
|
||||
1723 -57.188797 -39.057373 6.000000 5.000000 MEG 1723
|
||||
1721 -51.188797 -41.557373 6.000000 5.000000 MEG 1721
|
||||
1732 -41.902962 -58.279526 6.000000 5.000000 MEG 1732
|
||||
1733 -41.902962 -53.279526 6.000000 5.000000 MEG 1733
|
||||
1731 -35.902962 -55.779526 6.000000 5.000000 MEG 1731
|
||||
1743 -37.408134 -72.449036 6.000000 5.000000 MEG 1743
|
||||
1742 -37.408134 -67.449036 6.000000 5.000000 MEG 1742
|
||||
1741 -31.408134 -69.949036 6.000000 5.000000 MEG 1741
|
||||
1813 -33.801163 -13.768716 6.000000 5.000000 MEG 1813
|
||||
1812 -33.801163 -8.768716 6.000000 5.000000 MEG 1812
|
||||
1811 -27.801163 -11.268716 6.000000 5.000000 MEG 1811
|
||||
1822 -21.685101 -12.619589 6.000000 5.000000 MEG 1822
|
||||
1823 -21.685101 -7.619589 6.000000 5.000000 MEG 1823
|
||||
1821 -15.685101 -10.119589 6.000000 5.000000 MEG 1821
|
||||
1832 -9.600111 -22.190945 6.000000 5.000000 MEG 1832
|
||||
1833 -9.600111 -17.190945 6.000000 5.000000 MEG 1833
|
||||
1831 -3.600111 -19.690945 6.000000 5.000000 MEG 1831
|
||||
1843 -24.483526 -26.850609 6.000000 5.000000 MEG 1843
|
||||
1842 -24.483526 -21.850609 6.000000 5.000000 MEG 1842
|
||||
1841 -18.483526 -24.350609 6.000000 5.000000 MEG 1841
|
||||
1912 -25.866816 -40.850040 6.000000 5.000000 MEG 1912
|
||||
1913 -25.866816 -35.850040 6.000000 5.000000 MEG 1913
|
||||
1911 -19.866816 -38.350040 6.000000 5.000000 MEG 1911
|
||||
1923 -20.513481 -56.355225 6.000000 5.000000 MEG 1923
|
||||
1922 -20.513481 -51.355225 6.000000 5.000000 MEG 1922
|
||||
1921 -14.513481 -53.855225 6.000000 5.000000 MEG 1921
|
||||
1932 -23.428471 -67.375893 6.000000 5.000000 MEG 1932
|
||||
1933 -23.428471 -62.375893 6.000000 5.000000 MEG 1933
|
||||
1931 -17.428471 -64.875893 6.000000 5.000000 MEG 1931
|
||||
1943 -36.237587 -48.444530 6.000000 5.000000 MEG 1943
|
||||
1942 -36.237587 -43.444530 6.000000 5.000000 MEG 1942
|
||||
1941 -30.237587 -45.944530 6.000000 5.000000 MEG 1941
|
||||
2013 -10.441930 -34.308243 6.000000 5.000000 MEG 2013
|
||||
2012 -10.441930 -29.308243 6.000000 5.000000 MEG 2012
|
||||
2011 -4.441930 -31.808243 6.000000 5.000000 MEG 2011
|
||||
2023 4.357624 -34.289736 6.000000 5.000000 MEG 2023
|
||||
2022 4.357624 -29.289736 6.000000 5.000000 MEG 2022
|
||||
2021 10.357624 -31.789736 6.000000 5.000000 MEG 2021
|
||||
2032 4.645295 -46.290749 6.000000 5.000000 MEG 2032
|
||||
2033 4.645295 -41.290749 6.000000 5.000000 MEG 2033
|
||||
2031 10.645295 -43.790749 6.000000 5.000000 MEG 2031
|
||||
2042 -10.645079 -46.244335 6.000000 5.000000 MEG 2042
|
||||
2043 -10.645079 -41.244335 6.000000 5.000000 MEG 2043
|
||||
2041 -4.645079 -43.744335 6.000000 5.000000 MEG 2041
|
||||
2113 -3.052351 -58.889515 6.000000 5.000000 MEG 2113
|
||||
2112 -3.052351 -53.889515 6.000000 5.000000 MEG 2112
|
||||
2111 2.947649 -56.389515 6.000000 5.000000 MEG 2111
|
||||
2122 -2.999999 -70.362061 6.000000 5.000000 MEG 2122
|
||||
2123 -2.999999 -65.362061 6.000000 5.000000 MEG 2123
|
||||
2121 3.000001 -67.862061 6.000000 5.000000 MEG 2121
|
||||
2133 8.918572 -79.441826 6.000000 5.000000 MEG 2133
|
||||
2132 8.918572 -74.441826 6.000000 5.000000 MEG 2132
|
||||
2131 14.918572 -76.941826 6.000000 5.000000 MEG 2131
|
||||
2143 -14.987089 -79.428932 6.000000 5.000000 MEG 2143
|
||||
2142 -14.987089 -74.428932 6.000000 5.000000 MEG 2142
|
||||
2141 -8.987089 -76.928932 6.000000 5.000000 MEG 2141
|
||||
2212 15.641460 -12.579389 6.000000 5.000000 MEG 2212
|
||||
2213 15.641460 -7.579389 6.000000 5.000000 MEG 2213
|
||||
2211 21.641460 -10.079389 6.000000 5.000000 MEG 2211
|
||||
2223 27.786499 -13.669980 6.000000 5.000000 MEG 2223
|
||||
2222 27.786499 -8.669980 6.000000 5.000000 MEG 2222
|
||||
2221 33.786499 -11.169980 6.000000 5.000000 MEG 2221
|
||||
2233 18.501518 -26.949615 6.000000 5.000000 MEG 2233
|
||||
2232 18.501518 -21.949615 6.000000 5.000000 MEG 2232
|
||||
2231 24.501518 -24.449615 6.000000 5.000000 MEG 2231
|
||||
2242 3.641699 -22.206125 6.000000 5.000000 MEG 2242
|
||||
2243 3.641699 -17.206125 6.000000 5.000000 MEG 2243
|
||||
2241 9.641699 -19.706125 6.000000 5.000000 MEG 2241
|
||||
2312 19.852789 -40.871220 6.000000 5.000000 MEG 2312
|
||||
2313 19.852789 -35.871220 6.000000 5.000000 MEG 2313
|
||||
2311 25.852789 -38.371220 6.000000 5.000000 MEG 2311
|
||||
2323 30.078903 -48.474960 6.000000 5.000000 MEG 2323
|
||||
2322 30.078903 -43.474960 6.000000 5.000000 MEG 2322
|
||||
2321 36.078903 -45.974960 6.000000 5.000000 MEG 2321
|
||||
2332 17.363274 -67.365387 6.000000 5.000000 MEG 2332
|
||||
2333 17.363274 -62.365387 6.000000 5.000000 MEG 2333
|
||||
2331 23.363274 -64.865387 6.000000 5.000000 MEG 2331
|
||||
2343 14.329920 -56.380260 6.000000 5.000000 MEG 2343
|
||||
2342 14.329920 -51.380260 6.000000 5.000000 MEG 2342
|
||||
2341 20.329920 -53.880260 6.000000 5.000000 MEG 2341
|
||||
2412 39.644810 -16.175139 6.000000 5.000000 MEG 2412
|
||||
2413 39.644810 -11.175139 6.000000 5.000000 MEG 2413
|
||||
2411 45.644810 -13.675139 6.000000 5.000000 MEG 2411
|
||||
2423 50.812263 -20.401899 6.000000 5.000000 MEG 2423
|
||||
2422 50.812263 -15.401899 6.000000 5.000000 MEG 2422
|
||||
2421 56.812263 -17.901899 6.000000 5.000000 MEG 2421
|
||||
2433 42.694180 -36.278580 6.000000 5.000000 MEG 2433
|
||||
2432 42.694180 -31.278580 6.000000 5.000000 MEG 2432
|
||||
2431 48.694180 -33.778580 6.000000 5.000000 MEG 2431
|
||||
2442 31.896111 -30.578348 6.000000 5.000000 MEG 2442
|
||||
2443 31.896111 -25.578348 6.000000 5.000000 MEG 2443
|
||||
2441 37.896111 -28.078348 6.000000 5.000000 MEG 2441
|
||||
2512 35.812634 -58.300888 6.000000 5.000000 MEG 2512
|
||||
2513 35.812634 -53.300888 6.000000 5.000000 MEG 2513
|
||||
2511 41.812634 -55.800888 6.000000 5.000000 MEG 2511
|
||||
2522 51.171906 -43.981274 6.000000 5.000000 MEG 2522
|
||||
2523 51.171906 -38.981274 6.000000 5.000000 MEG 2523
|
||||
2521 57.171906 -41.481274 6.000000 5.000000 MEG 2521
|
||||
2533 50.704624 -59.132656 6.000000 5.000000 MEG 2533
|
||||
2532 50.704624 -54.132656 6.000000 5.000000 MEG 2532
|
||||
2531 56.704624 -56.632656 6.000000 5.000000 MEG 2531
|
||||
2543 31.320171 -72.484848 6.000000 5.000000 MEG 2543
|
||||
2542 31.320171 -67.484848 6.000000 5.000000 MEG 2542
|
||||
2541 37.320171 -69.984848 6.000000 5.000000 MEG 2541
|
||||
2612 65.137360 -4.702045 6.000000 5.000000 MEG 2612
|
||||
2613 65.137360 0.297955 6.000000 5.000000 MEG 2613
|
||||
2611 71.137360 -2.202045 6.000000 5.000000 MEG 2611
|
||||
2623 73.822243 -17.329140 6.000000 5.000000 MEG 2623
|
||||
2622 73.822243 -12.329140 6.000000 5.000000 MEG 2622
|
||||
2621 79.822243 -14.829140 6.000000 5.000000 MEG 2621
|
||||
2633 65.490112 -40.332645 6.000000 5.000000 MEG 2633
|
||||
2632 65.490112 -35.332645 6.000000 5.000000 MEG 2632
|
||||
2631 71.490112 -37.832645 6.000000 5.000000 MEG 2631
|
||||
2642 61.220192 -25.385981 6.000000 5.000000 MEG 2642
|
||||
2643 61.220192 -20.385981 6.000000 5.000000 MEG 2643
|
||||
2641 67.220192 -22.885981 6.000000 5.000000 MEG 2641
|
||||
205
mne/channels/data/layouts/Vectorview-grad.lout
Normal file
205
mne/channels/data/layouts/Vectorview-grad.lout
Normal file
@@ -0,0 +1,205 @@
|
||||
-55.000000 55.000000 -65.000000 60.000000
|
||||
113 -48.186871 26.886379 6.000000 5.000000 MEG 0113
|
||||
112 -48.186871 31.886379 6.000000 5.000000 MEG 0112
|
||||
122 -39.322296 31.036510 6.000000 5.000000 MEG 0122
|
||||
123 -39.322296 36.036510 6.000000 5.000000 MEG 0123
|
||||
132 -44.722965 14.826612 6.000000 5.000000 MEG 0132
|
||||
133 -44.722965 19.826612 6.000000 5.000000 MEG 0133
|
||||
143 -52.785782 6.169280 6.000000 5.000000 MEG 0143
|
||||
142 -52.785782 11.169280 6.000000 5.000000 MEG 0142
|
||||
213 -37.392612 13.470296 6.000000 5.000000 MEG 0213
|
||||
212 -37.392612 18.470296 6.000000 5.000000 MEG 0212
|
||||
222 -29.695013 13.899532 6.000000 5.000000 MEG 0222
|
||||
223 -29.695013 18.899532 6.000000 5.000000 MEG 0223
|
||||
232 -31.502516 -0.631914 6.000000 5.000000 MEG 0232
|
||||
233 -31.502516 4.368086 6.000000 5.000000 MEG 0233
|
||||
243 -39.115921 -2.709978 6.000000 5.000000 MEG 0243
|
||||
242 -39.115921 2.290022 6.000000 5.000000 MEG 0242
|
||||
313 -26.608879 38.351933 6.000000 5.000000 MEG 0313
|
||||
312 -26.608879 43.351933 6.000000 5.000000 MEG 0312
|
||||
322 -25.469093 26.356115 6.000000 5.000000 MEG 0322
|
||||
323 -25.469093 31.356115 6.000000 5.000000 MEG 0323
|
||||
333 -18.837411 23.164780 6.000000 5.000000 MEG 0333
|
||||
332 -18.837411 28.164780 6.000000 5.000000 MEG 0332
|
||||
343 -32.957949 27.427811 6.000000 5.000000 MEG 0343
|
||||
342 -32.957949 32.427811 6.000000 5.000000 MEG 0342
|
||||
413 -22.250046 12.315103 6.000000 5.000000 MEG 0413
|
||||
412 -22.250046 17.315103 6.000000 5.000000 MEG 0412
|
||||
422 -14.605187 10.962016 6.000000 5.000000 MEG 0422
|
||||
423 -14.605187 15.962016 6.000000 5.000000 MEG 0423
|
||||
432 -15.148193 -0.524500 6.000000 5.000000 MEG 0432
|
||||
433 -15.148193 4.475500 6.000000 5.000000 MEG 0433
|
||||
443 -23.422245 -0.157884 6.000000 5.000000 MEG 0443
|
||||
442 -23.422245 4.842116 6.000000 5.000000 MEG 0442
|
||||
513 -18.953902 44.905155 6.000000 5.000000 MEG 0513
|
||||
512 -18.953902 49.905155 6.000000 5.000000 MEG 0512
|
||||
523 -11.025696 48.325344 6.000000 5.000000 MEG 0523
|
||||
522 -11.025696 53.325344 6.000000 5.000000 MEG 0522
|
||||
532 -10.454178 39.888676 6.000000 5.000000 MEG 0532
|
||||
533 -10.454178 44.888676 6.000000 5.000000 MEG 0533
|
||||
542 -18.555386 35.433716 6.000000 5.000000 MEG 0542
|
||||
543 -18.555386 40.433716 6.000000 5.000000 MEG 0543
|
||||
613 -10.560901 30.757313 6.000000 5.000000 MEG 0613
|
||||
612 -10.560901 35.757313 6.000000 5.000000 MEG 0612
|
||||
622 -2.979000 21.849854 6.000000 5.000000 MEG 0622
|
||||
623 -2.979000 26.849854 6.000000 5.000000 MEG 0623
|
||||
633 -6.911079 11.573471 6.000000 5.000000 MEG 0633
|
||||
632 -6.911079 16.573471 6.000000 5.000000 MEG 0632
|
||||
642 -10.828249 21.334785 6.000000 5.000000 MEG 0642
|
||||
643 -10.828249 26.334785 6.000000 5.000000 MEG 0643
|
||||
713 -7.008664 0.931329 6.000000 5.000000 MEG 0713
|
||||
712 -7.008664 5.931329 6.000000 5.000000 MEG 0712
|
||||
723 1.052102 0.833180 6.000000 5.000000 MEG 0723
|
||||
722 1.052102 5.833180 6.000000 5.000000 MEG 0722
|
||||
733 1.098721 -8.987786 6.000000 5.000000 MEG 0733
|
||||
732 1.098721 -3.987786 6.000000 5.000000 MEG 0732
|
||||
743 -7.121645 -8.933109 6.000000 5.000000 MEG 0743
|
||||
742 -7.121645 -3.933109 6.000000 5.000000 MEG 0742
|
||||
813 -2.975877 49.460842 6.000000 5.000000 MEG 0813
|
||||
812 -2.975877 54.460842 6.000000 5.000000 MEG 0812
|
||||
822 -2.977890 40.979687 6.000000 5.000000 MEG 0822
|
||||
823 -2.977890 45.979687 6.000000 5.000000 MEG 0823
|
||||
913 5.024490 48.354298 6.000000 5.000000 MEG 0913
|
||||
912 5.024490 53.354298 6.000000 5.000000 MEG 0912
|
||||
923 13.021803 44.879852 6.000000 5.000000 MEG 0923
|
||||
922 13.021803 49.879852 6.000000 5.000000 MEG 0922
|
||||
932 12.564190 35.455193 6.000000 5.000000 MEG 0932
|
||||
933 12.564190 40.455193 6.000000 5.000000 MEG 0933
|
||||
942 4.483593 39.929310 6.000000 5.000000 MEG 0942
|
||||
943 4.483593 44.929310 6.000000 5.000000 MEG 0943
|
||||
1013 -2.978879 32.002693 6.000000 5.000000 MEG 1013
|
||||
1012 -2.978879 37.002693 6.000000 5.000000 MEG 1012
|
||||
1023 4.540760 30.762428 6.000000 5.000000 MEG 1023
|
||||
1022 4.540760 35.762428 6.000000 5.000000 MEG 1022
|
||||
1032 4.780051 21.348934 6.000000 5.000000 MEG 1032
|
||||
1033 4.780051 26.348934 6.000000 5.000000 MEG 1033
|
||||
1043 0.978956 11.650963 6.000000 5.000000 MEG 1043
|
||||
1042 0.978956 16.650963 6.000000 5.000000 MEG 1042
|
||||
1112 8.560405 10.928195 6.000000 5.000000 MEG 1112
|
||||
1113 8.560405 15.928195 6.000000 5.000000 MEG 1113
|
||||
1123 16.224724 12.278107 6.000000 5.000000 MEG 1123
|
||||
1122 16.224724 17.278107 6.000000 5.000000 MEG 1122
|
||||
1133 17.379185 -0.268703 6.000000 5.000000 MEG 1133
|
||||
1132 17.379185 4.731297 6.000000 5.000000 MEG 1132
|
||||
1142 9.117422 -0.423700 6.000000 5.000000 MEG 1142
|
||||
1143 9.117422 4.576300 6.000000 5.000000 MEG 1143
|
||||
1213 20.716938 38.318100 6.000000 5.000000 MEG 1213
|
||||
1212 20.716938 43.318100 6.000000 5.000000 MEG 1212
|
||||
1223 27.111319 27.293877 6.000000 5.000000 MEG 1223
|
||||
1222 27.111319 32.293877 6.000000 5.000000 MEG 1222
|
||||
1232 19.469093 26.356115 6.000000 5.000000 MEG 1232
|
||||
1233 19.469093 31.356115 6.000000 5.000000 MEG 1233
|
||||
1243 12.786146 23.189396 6.000000 5.000000 MEG 1243
|
||||
1242 12.786146 28.189396 6.000000 5.000000 MEG 1242
|
||||
1312 23.695013 13.899529 6.000000 5.000000 MEG 1312
|
||||
1313 23.695013 18.899529 6.000000 5.000000 MEG 1313
|
||||
1323 31.369019 13.362624 6.000000 5.000000 MEG 1323
|
||||
1322 31.369019 18.362624 6.000000 5.000000 MEG 1322
|
||||
1333 33.205658 -2.836478 6.000000 5.000000 MEG 1333
|
||||
1332 33.205658 2.163522 6.000000 5.000000 MEG 1332
|
||||
1342 25.473745 -0.631941 6.000000 5.000000 MEG 1342
|
||||
1343 25.473745 4.368059 6.000000 5.000000 MEG 1343
|
||||
1412 33.387833 31.097027 6.000000 5.000000 MEG 1412
|
||||
1413 33.387833 36.097027 6.000000 5.000000 MEG 1413
|
||||
1423 41.996334 27.235786 6.000000 5.000000 MEG 1423
|
||||
1422 41.996334 32.235786 6.000000 5.000000 MEG 1422
|
||||
1433 46.693424 6.365705 6.000000 5.000000 MEG 1433
|
||||
1432 46.693424 11.365705 6.000000 5.000000 MEG 1432
|
||||
1442 38.636284 14.732794 6.000000 5.000000 MEG 1442
|
||||
1443 38.636284 19.732794 6.000000 5.000000 MEG 1443
|
||||
1512 -46.828197 -4.270524 6.000000 5.000000 MEG 1512
|
||||
1513 -46.828197 0.729476 6.000000 5.000000 MEG 1513
|
||||
1522 -44.250233 -20.875282 6.000000 5.000000 MEG 1522
|
||||
1523 -44.250233 -15.875282 6.000000 5.000000 MEG 1523
|
||||
1533 -47.087372 -32.702410 6.000000 5.000000 MEG 1533
|
||||
1532 -47.087372 -27.702410 6.000000 5.000000 MEG 1532
|
||||
1543 -52.352669 -14.466389 6.000000 5.000000 MEG 1543
|
||||
1542 -52.352669 -9.466389 6.000000 5.000000 MEG 1542
|
||||
1613 -37.598797 -16.787832 6.000000 5.000000 MEG 1613
|
||||
1612 -37.598797 -11.787832 6.000000 5.000000 MEG 1612
|
||||
1622 -30.357292 -13.585911 6.000000 5.000000 MEG 1622
|
||||
1623 -30.357292 -8.585911 6.000000 5.000000 MEG 1623
|
||||
1632 -25.393221 -25.022747 6.000000 5.000000 MEG 1632
|
||||
1633 -25.393221 -20.022747 6.000000 5.000000 MEG 1633
|
||||
1643 -32.428291 -29.512911 6.000000 5.000000 MEG 1643
|
||||
1642 -32.428291 -24.512911 6.000000 5.000000 MEG 1642
|
||||
1713 -37.521523 -47.886852 6.000000 5.000000 MEG 1713
|
||||
1712 -37.521523 -42.886852 6.000000 5.000000 MEG 1712
|
||||
1722 -37.773560 -35.834789 6.000000 5.000000 MEG 1722
|
||||
1723 -37.773560 -30.834789 6.000000 5.000000 MEG 1723
|
||||
1732 -27.964468 -47.242935 6.000000 5.000000 MEG 1732
|
||||
1733 -27.964468 -42.242935 6.000000 5.000000 MEG 1733
|
||||
1743 -25.080088 -58.608849 6.000000 5.000000 MEG 1743
|
||||
1742 -25.080088 -53.608849 6.000000 5.000000 MEG 1742
|
||||
1813 -22.765453 -11.539077 6.000000 5.000000 MEG 1813
|
||||
1812 -22.765453 -6.539077 6.000000 5.000000 MEG 1812
|
||||
1822 -14.990439 -10.617317 6.000000 5.000000 MEG 1822
|
||||
1823 -14.990439 -5.617317 6.000000 5.000000 MEG 1823
|
||||
1832 -7.235366 -18.294876 6.000000 5.000000 MEG 1832
|
||||
1833 -7.235366 -13.294876 6.000000 5.000000 MEG 1833
|
||||
1843 -16.786220 -22.032574 6.000000 5.000000 MEG 1843
|
||||
1842 -16.786220 -17.032574 6.000000 5.000000 MEG 1842
|
||||
1912 -17.673892 -33.262066 6.000000 5.000000 MEG 1912
|
||||
1913 -17.673892 -28.262066 6.000000 5.000000 MEG 1913
|
||||
1923 -14.238597 -45.699379 6.000000 5.000000 MEG 1923
|
||||
1922 -14.238597 -40.699379 6.000000 5.000000 MEG 1922
|
||||
1932 -16.109179 -54.539486 6.000000 5.000000 MEG 1932
|
||||
1933 -16.109179 -49.539486 6.000000 5.000000 MEG 1933
|
||||
1943 -24.328934 -39.353901 6.000000 5.000000 MEG 1943
|
||||
1942 -24.328934 -34.353901 6.000000 5.000000 MEG 1942
|
||||
2013 -7.775570 -28.014633 6.000000 5.000000 MEG 2013
|
||||
2012 -7.775570 -23.014633 6.000000 5.000000 MEG 2012
|
||||
2023 1.721470 -27.999788 6.000000 5.000000 MEG 2023
|
||||
2022 1.721470 -22.999788 6.000000 5.000000 MEG 2022
|
||||
2032 1.906072 -37.626270 6.000000 5.000000 MEG 2032
|
||||
2033 1.906072 -32.626270 6.000000 5.000000 MEG 2033
|
||||
2042 -7.905933 -37.589039 6.000000 5.000000 MEG 2042
|
||||
2043 -7.905933 -32.589039 6.000000 5.000000 MEG 2043
|
||||
2113 -3.033595 -47.732231 6.000000 5.000000 MEG 2113
|
||||
2112 -3.033595 -42.732231 6.000000 5.000000 MEG 2112
|
||||
2122 -2.999999 -56.934807 6.000000 5.000000 MEG 2122
|
||||
2123 -2.999999 -51.934807 6.000000 5.000000 MEG 2123
|
||||
2133 4.648282 -64.218044 6.000000 5.000000 MEG 2133
|
||||
2132 4.648282 -59.218044 6.000000 5.000000 MEG 2132
|
||||
2143 -10.692250 -64.207703 6.000000 5.000000 MEG 2143
|
||||
2142 -10.692250 -59.207703 6.000000 5.000000 MEG 2142
|
||||
2212 8.962435 -10.585071 6.000000 5.000000 MEG 2212
|
||||
2213 8.962435 -5.585071 6.000000 5.000000 MEG 2213
|
||||
2223 16.756042 -11.459877 6.000000 5.000000 MEG 2223
|
||||
2222 16.756042 -6.459877 6.000000 5.000000 MEG 2222
|
||||
2233 10.797766 -22.111992 6.000000 5.000000 MEG 2233
|
||||
2232 10.797766 -17.111992 6.000000 5.000000 MEG 2232
|
||||
2242 1.262053 -18.307052 6.000000 5.000000 MEG 2242
|
||||
2243 1.262053 -13.307052 6.000000 5.000000 MEG 2243
|
||||
2312 11.664891 -33.279053 6.000000 5.000000 MEG 2312
|
||||
2313 11.664891 -28.279053 6.000000 5.000000 MEG 2313
|
||||
2323 18.227104 -39.378311 6.000000 5.000000 MEG 2323
|
||||
2322 18.227104 -34.378311 6.000000 5.000000 MEG 2322
|
||||
2332 10.067341 -54.531059 6.000000 5.000000 MEG 2332
|
||||
2333 10.067341 -49.531059 6.000000 5.000000 MEG 2333
|
||||
2343 8.120804 -45.719460 6.000000 5.000000 MEG 2343
|
||||
2342 8.120804 -40.719460 6.000000 5.000000 MEG 2342
|
||||
2412 24.365654 -13.469363 6.000000 5.000000 MEG 2412
|
||||
2413 24.365654 -8.469363 6.000000 5.000000 MEG 2413
|
||||
2423 31.531933 -16.859812 6.000000 5.000000 MEG 2423
|
||||
2422 31.531933 -11.859812 6.000000 5.000000 MEG 2422
|
||||
2433 26.322470 -29.595119 6.000000 5.000000 MEG 2433
|
||||
2432 26.322470 -24.595119 6.000000 5.000000 MEG 2432
|
||||
2442 19.393225 -25.022739 6.000000 5.000000 MEG 2442
|
||||
2443 19.393225 -20.022739 6.000000 5.000000 MEG 2443
|
||||
2512 21.906504 -47.260071 6.000000 5.000000 MEG 2512
|
||||
2513 21.906504 -42.260071 6.000000 5.000000 MEG 2513
|
||||
2522 31.762718 -35.773750 6.000000 5.000000 MEG 2522
|
||||
2523 31.762718 -30.773750 6.000000 5.000000 MEG 2523
|
||||
2533 31.462860 -47.927265 6.000000 5.000000 MEG 2533
|
||||
2532 31.462860 -42.927265 6.000000 5.000000 MEG 2532
|
||||
2543 19.023640 -58.637577 6.000000 5.000000 MEG 2543
|
||||
2542 19.023640 -53.637577 6.000000 5.000000 MEG 2542
|
||||
2612 40.724506 -4.266347 6.000000 5.000000 MEG 2612
|
||||
2613 40.724506 0.733653 6.000000 5.000000 MEG 2613
|
||||
2623 46.297695 -14.395032 6.000000 5.000000 MEG 2623
|
||||
2622 46.297695 -9.395032 6.000000 5.000000 MEG 2622
|
||||
2633 40.950874 -32.847042 6.000000 5.000000 MEG 2633
|
||||
2632 40.950874 -27.847042 6.000000 5.000000 MEG 2632
|
||||
2642 38.210819 -20.857738 6.000000 5.000000 MEG 2642
|
||||
2643 38.210819 -15.857738 6.000000 5.000000 MEG 2643
|
||||
103
mne/channels/data/layouts/Vectorview-grad_norm.lout
Normal file
103
mne/channels/data/layouts/Vectorview-grad_norm.lout
Normal file
@@ -0,0 +1,103 @@
|
||||
-50.000000 50.000000 -50.000000 38.000000
|
||||
11 -41.408840 17.090919 6.000000 5.000000 MEG 011X
|
||||
12 -33.873951 19.857674 6.000000 5.000000 MEG 012X
|
||||
13 -38.464523 9.051075 6.000000 5.000000 MEG 013X
|
||||
14 -45.317917 3.279520 6.000000 5.000000 MEG 014X
|
||||
21 -32.233719 8.146864 6.000000 5.000000 MEG 021X
|
||||
22 -25.690760 8.433022 6.000000 5.000000 MEG 022X
|
||||
23 -27.227139 -1.254610 6.000000 5.000000 MEG 023X
|
||||
24 -33.698534 -2.642785 6.000000 5.000000 MEG 024X
|
||||
31 -23.067547 24.734621 6.000000 5.000000 MEG 031X
|
||||
32 -22.098728 16.737410 6.000000 5.000000 MEG 032X
|
||||
33 -16.461800 14.609854 6.000000 5.000000 MEG 033X
|
||||
34 -28.464256 17.451874 6.000000 5.000000 MEG 034X
|
||||
41 -19.362539 7.376735 6.000000 5.000000 MEG 041X
|
||||
42 -12.864409 6.474677 6.000000 5.000000 MEG 042X
|
||||
43 -13.325964 -1.183000 6.000000 5.000000 MEG 043X
|
||||
44 -20.358908 -0.938589 6.000000 5.000000 MEG 044X
|
||||
51 -16.560817 29.103437 6.000000 5.000000 MEG 051X
|
||||
52 -9.821842 31.383564 6.000000 5.000000 MEG 052X
|
||||
53 -9.336051 25.759117 6.000000 5.000000 MEG 053X
|
||||
54 -16.222077 22.789145 6.000000 5.000000 MEG 054X
|
||||
61 -9.426766 19.671541 6.000000 5.000000 MEG 061X
|
||||
62 -2.982150 13.733236 6.000000 5.000000 MEG 062X
|
||||
63 -6.324418 6.882314 6.000000 5.000000 MEG 063X
|
||||
64 -9.654012 13.389857 6.000000 5.000000 MEG 064X
|
||||
71 -6.407364 -0.212448 6.000000 5.000000 MEG 071X
|
||||
72 0.444286 -0.277880 6.000000 5.000000 MEG 072X
|
||||
73 0.483912 -6.911695 6.000000 5.000000 MEG 073X
|
||||
74 -6.503398 -6.874514 6.000000 5.000000 MEG 074X
|
||||
81 -2.979496 32.140564 6.000000 5.000000 MEG 081X
|
||||
82 -2.981206 26.486458 6.000000 5.000000 MEG 082X
|
||||
91 3.820817 31.402866 6.000000 5.000000 MEG 091X
|
||||
92 10.618533 29.086569 6.000000 5.000000 MEG 092X
|
||||
93 10.229562 22.803463 6.000000 5.000000 MEG 093X
|
||||
94 3.361053 25.786205 6.000000 5.000000 MEG 094X
|
||||
101 -2.982047 20.501795 6.000000 5.000000 MEG 101X
|
||||
102 3.409646 19.674952 6.000000 5.000000 MEG 102X
|
||||
103 3.613043 13.399289 6.000000 5.000000 MEG 103X
|
||||
104 0.382112 6.933975 6.000000 5.000000 MEG 104X
|
||||
111 6.826344 6.452130 6.000000 5.000000 MEG 111X
|
||||
112 13.341015 7.352071 6.000000 5.000000 MEG 112X
|
||||
113 14.322306 -1.012468 6.000000 5.000000 MEG 113X
|
||||
114 7.299809 -1.115800 6.000000 5.000000 MEG 114X
|
||||
121 17.159397 24.712067 6.000000 5.000000 MEG 121X
|
||||
122 22.594622 17.362583 6.000000 5.000000 MEG 122X
|
||||
123 16.098728 16.737411 6.000000 5.000000 MEG 123X
|
||||
124 10.418224 14.626265 6.000000 5.000000 MEG 124X
|
||||
131 19.690762 8.433019 6.000000 5.000000 MEG 131X
|
||||
132 26.213667 8.075083 6.000000 5.000000 MEG 132X
|
||||
133 27.774809 -2.728805 6.000000 5.000000 MEG 133X
|
||||
134 21.202684 -1.254627 6.000000 5.000000 MEG 134X
|
||||
141 27.929657 19.898018 6.000000 5.000000 MEG 141X
|
||||
142 35.246883 17.323858 6.000000 5.000000 MEG 142X
|
||||
143 39.239410 3.410470 6.000000 5.000000 MEG 143X
|
||||
144 32.390839 8.988529 6.000000 5.000000 MEG 144X
|
||||
151 -40.253967 -3.703956 6.000000 5.000000 MEG 151X
|
||||
152 -38.062698 -14.995193 6.000000 5.000000 MEG 152X
|
||||
153 -40.474266 -23.037640 6.000000 5.000000 MEG 153X
|
||||
154 -44.949768 -10.637144 6.000000 5.000000 MEG 154X
|
||||
161 -32.408976 -12.215726 6.000000 5.000000 MEG 161X
|
||||
162 -26.253698 -10.038419 6.000000 5.000000 MEG 162X
|
||||
163 -22.034237 -17.815468 6.000000 5.000000 MEG 163X
|
||||
164 -28.014048 -20.868780 6.000000 5.000000 MEG 164X
|
||||
171 -32.343294 -33.363060 6.000000 5.000000 MEG 171X
|
||||
172 -32.557526 -25.167658 6.000000 5.000000 MEG 172X
|
||||
173 -24.219797 -32.925196 6.000000 5.000000 MEG 173X
|
||||
174 -21.768074 -40.654018 6.000000 5.000000 MEG 174X
|
||||
181 -19.800634 -8.646573 6.000000 5.000000 MEG 181X
|
||||
182 -13.191874 -8.019776 6.000000 5.000000 MEG 182X
|
||||
183 -6.600061 -13.240516 6.000000 5.000000 MEG 183X
|
||||
184 -14.718287 -15.782150 6.000000 5.000000 MEG 184X
|
||||
191 -15.472808 -23.418205 6.000000 5.000000 MEG 191X
|
||||
192 -12.552808 -31.875578 6.000000 5.000000 MEG 192X
|
||||
193 -14.142802 -37.886852 6.000000 5.000000 MEG 193X
|
||||
194 -21.129593 -27.560652 6.000000 5.000000 MEG 194X
|
||||
201 -7.059234 -19.849951 6.000000 5.000000 MEG 201X
|
||||
202 1.013249 -19.839857 6.000000 5.000000 MEG 202X
|
||||
203 1.170161 -26.385864 6.000000 5.000000 MEG 203X
|
||||
204 -7.170043 -26.360546 6.000000 5.000000 MEG 204X
|
||||
211 -3.028555 -33.257917 6.000000 5.000000 MEG 211X
|
||||
212 -3.000000 -39.515667 6.000000 5.000000 MEG 212X
|
||||
213 3.501040 -44.468269 6.000000 5.000000 MEG 213X
|
||||
214 -9.538412 -44.461239 6.000000 5.000000 MEG 214X
|
||||
221 7.168070 -7.997848 6.000000 5.000000 MEG 221X
|
||||
222 13.792637 -8.592716 6.000000 5.000000 MEG 222X
|
||||
223 8.728101 -15.836154 6.000000 5.000000 MEG 223X
|
||||
224 0.622745 -13.248796 6.000000 5.000000 MEG 224X
|
||||
231 9.465158 -23.429756 6.000000 5.000000 MEG 231X
|
||||
232 15.043037 -27.577251 6.000000 5.000000 MEG 232X
|
||||
233 8.107240 -37.881119 6.000000 5.000000 MEG 233X
|
||||
234 6.452683 -31.889233 6.000000 5.000000 MEG 234X
|
||||
241 20.260805 -9.959167 6.000000 5.000000 MEG 241X
|
||||
242 26.352144 -12.264672 6.000000 5.000000 MEG 242X
|
||||
243 21.924099 -20.924681 6.000000 5.000000 MEG 243X
|
||||
244 16.034241 -17.815463 6.000000 5.000000 MEG 244X
|
||||
251 18.170528 -32.936850 6.000000 5.000000 MEG 251X
|
||||
252 26.548311 -25.126150 6.000000 5.000000 MEG 252X
|
||||
253 26.293430 -33.390539 6.000000 5.000000 MEG 253X
|
||||
254 15.720093 -40.673553 6.000000 5.000000 MEG 254X
|
||||
261 34.165833 -3.701116 6.000000 5.000000 MEG 261X
|
||||
262 38.903042 -10.588621 6.000000 5.000000 MEG 262X
|
||||
263 34.358242 -23.135988 6.000000 5.000000 MEG 263X
|
||||
264 32.029198 -14.983262 6.000000 5.000000 MEG 264X
|
||||
103
mne/channels/data/layouts/Vectorview-mag.lout
Normal file
103
mne/channels/data/layouts/Vectorview-mag.lout
Normal file
@@ -0,0 +1,103 @@
|
||||
-50.000000 50.000000 -50.000000 38.000000
|
||||
111 -41.408840 17.090919 6.000000 5.000000 MEG 0111
|
||||
121 -33.873951 19.857674 6.000000 5.000000 MEG 0121
|
||||
131 -38.464523 9.051075 6.000000 5.000000 MEG 0131
|
||||
141 -45.317917 3.279520 6.000000 5.000000 MEG 0141
|
||||
211 -32.233719 8.146864 6.000000 5.000000 MEG 0211
|
||||
221 -25.690760 8.433022 6.000000 5.000000 MEG 0221
|
||||
231 -27.227139 -1.254610 6.000000 5.000000 MEG 0231
|
||||
241 -33.698534 -2.642785 6.000000 5.000000 MEG 0241
|
||||
311 -23.067547 24.734621 6.000000 5.000000 MEG 0311
|
||||
321 -22.098728 16.737410 6.000000 5.000000 MEG 0321
|
||||
331 -16.461800 14.609854 6.000000 5.000000 MEG 0331
|
||||
341 -28.464256 17.451874 6.000000 5.000000 MEG 0341
|
||||
411 -19.362539 7.376735 6.000000 5.000000 MEG 0411
|
||||
421 -12.864409 6.474677 6.000000 5.000000 MEG 0421
|
||||
431 -13.325964 -1.183000 6.000000 5.000000 MEG 0431
|
||||
441 -20.358908 -0.938589 6.000000 5.000000 MEG 0441
|
||||
511 -16.560817 29.103437 6.000000 5.000000 MEG 0511
|
||||
521 -9.821842 31.383564 6.000000 5.000000 MEG 0521
|
||||
531 -9.336051 25.759117 6.000000 5.000000 MEG 0531
|
||||
541 -16.222077 22.789145 6.000000 5.000000 MEG 0541
|
||||
611 -9.426766 19.671541 6.000000 5.000000 MEG 0611
|
||||
621 -2.982150 13.733236 6.000000 5.000000 MEG 0621
|
||||
631 -6.324418 6.882314 6.000000 5.000000 MEG 0631
|
||||
641 -9.654012 13.389857 6.000000 5.000000 MEG 0641
|
||||
711 -6.407364 -0.212448 6.000000 5.000000 MEG 0711
|
||||
721 0.444286 -0.277880 6.000000 5.000000 MEG 0721
|
||||
731 0.483912 -6.911695 6.000000 5.000000 MEG 0731
|
||||
741 -6.503398 -6.874514 6.000000 5.000000 MEG 0741
|
||||
811 -2.979496 32.140564 6.000000 5.000000 MEG 0811
|
||||
821 -2.981206 26.486458 6.000000 5.000000 MEG 0821
|
||||
911 3.820817 31.402866 6.000000 5.000000 MEG 0911
|
||||
921 10.618533 29.086569 6.000000 5.000000 MEG 0921
|
||||
931 10.229562 22.803463 6.000000 5.000000 MEG 0931
|
||||
941 3.361053 25.786205 6.000000 5.000000 MEG 0941
|
||||
1011 -2.982047 20.501795 6.000000 5.000000 MEG 1011
|
||||
1021 3.409646 19.674952 6.000000 5.000000 MEG 1021
|
||||
1031 3.613043 13.399289 6.000000 5.000000 MEG 1031
|
||||
1041 0.382112 6.933975 6.000000 5.000000 MEG 1041
|
||||
1111 6.826344 6.452130 6.000000 5.000000 MEG 1111
|
||||
1121 13.341015 7.352071 6.000000 5.000000 MEG 1121
|
||||
1131 14.322306 -1.012468 6.000000 5.000000 MEG 1131
|
||||
1141 7.299809 -1.115800 6.000000 5.000000 MEG 1141
|
||||
1211 17.159397 24.712067 6.000000 5.000000 MEG 1211
|
||||
1221 22.594622 17.362583 6.000000 5.000000 MEG 1221
|
||||
1231 16.098728 16.737411 6.000000 5.000000 MEG 1231
|
||||
1241 10.418224 14.626265 6.000000 5.000000 MEG 1241
|
||||
1311 19.690762 8.433019 6.000000 5.000000 MEG 1311
|
||||
1321 26.213667 8.075083 6.000000 5.000000 MEG 1321
|
||||
1331 27.774809 -2.728805 6.000000 5.000000 MEG 1331
|
||||
1341 21.202684 -1.254627 6.000000 5.000000 MEG 1341
|
||||
1411 27.929657 19.898018 6.000000 5.000000 MEG 1411
|
||||
1421 35.246883 17.323858 6.000000 5.000000 MEG 1421
|
||||
1431 39.239410 3.410470 6.000000 5.000000 MEG 1431
|
||||
1441 32.390839 8.988529 6.000000 5.000000 MEG 1441
|
||||
1511 -40.253967 -3.703956 6.000000 5.000000 MEG 1511
|
||||
1521 -38.062698 -14.995193 6.000000 5.000000 MEG 1521
|
||||
1531 -40.474266 -23.037640 6.000000 5.000000 MEG 1531
|
||||
1541 -44.949768 -10.637144 6.000000 5.000000 MEG 1541
|
||||
1611 -32.408976 -12.215726 6.000000 5.000000 MEG 1611
|
||||
1621 -26.253698 -10.038419 6.000000 5.000000 MEG 1621
|
||||
1631 -22.034237 -17.815468 6.000000 5.000000 MEG 1631
|
||||
1641 -28.014048 -20.868780 6.000000 5.000000 MEG 1641
|
||||
1711 -32.343294 -33.363060 6.000000 5.000000 MEG 1711
|
||||
1721 -32.557526 -25.167658 6.000000 5.000000 MEG 1721
|
||||
1731 -24.219797 -32.925196 6.000000 5.000000 MEG 1731
|
||||
1741 -21.768074 -40.654018 6.000000 5.000000 MEG 1741
|
||||
1811 -19.800634 -8.646573 6.000000 5.000000 MEG 1811
|
||||
1821 -13.191874 -8.019776 6.000000 5.000000 MEG 1821
|
||||
1831 -6.600061 -13.240516 6.000000 5.000000 MEG 1831
|
||||
1841 -14.718287 -15.782150 6.000000 5.000000 MEG 1841
|
||||
1911 -15.472808 -23.418205 6.000000 5.000000 MEG 1911
|
||||
1921 -12.552808 -31.875578 6.000000 5.000000 MEG 1921
|
||||
1931 -14.142802 -37.886852 6.000000 5.000000 MEG 1931
|
||||
1941 -21.129593 -27.560652 6.000000 5.000000 MEG 1941
|
||||
2011 -7.059234 -19.849951 6.000000 5.000000 MEG 2011
|
||||
2021 1.013249 -19.839857 6.000000 5.000000 MEG 2021
|
||||
2031 1.170161 -26.385864 6.000000 5.000000 MEG 2031
|
||||
2041 -7.170043 -26.360546 6.000000 5.000000 MEG 2041
|
||||
2111 -3.028555 -33.257917 6.000000 5.000000 MEG 2111
|
||||
2121 -3.000000 -39.515667 6.000000 5.000000 MEG 2121
|
||||
2131 3.501040 -44.468269 6.000000 5.000000 MEG 2131
|
||||
2141 -9.538412 -44.461239 6.000000 5.000000 MEG 2141
|
||||
2211 7.168070 -7.997848 6.000000 5.000000 MEG 2211
|
||||
2221 13.792637 -8.592716 6.000000 5.000000 MEG 2221
|
||||
2231 8.728101 -15.836154 6.000000 5.000000 MEG 2231
|
||||
2241 0.622745 -13.248796 6.000000 5.000000 MEG 2241
|
||||
2311 9.465158 -23.429756 6.000000 5.000000 MEG 2311
|
||||
2321 15.043037 -27.577251 6.000000 5.000000 MEG 2321
|
||||
2331 8.107240 -37.881119 6.000000 5.000000 MEG 2331
|
||||
2341 6.452683 -31.889233 6.000000 5.000000 MEG 2341
|
||||
2411 20.260805 -9.959167 6.000000 5.000000 MEG 2411
|
||||
2421 26.352144 -12.264672 6.000000 5.000000 MEG 2421
|
||||
2431 21.924099 -20.924681 6.000000 5.000000 MEG 2431
|
||||
2441 16.034241 -17.815463 6.000000 5.000000 MEG 2441
|
||||
2511 18.170528 -32.936850 6.000000 5.000000 MEG 2511
|
||||
2521 26.548311 -25.126150 6.000000 5.000000 MEG 2521
|
||||
2531 26.293430 -33.390539 6.000000 5.000000 MEG 2531
|
||||
2541 15.720093 -40.673553 6.000000 5.000000 MEG 2541
|
||||
2611 34.165833 -3.701116 6.000000 5.000000 MEG 2611
|
||||
2621 38.903042 -10.588621 6.000000 5.000000 MEG 2621
|
||||
2631 34.358242 -23.135988 6.000000 5.000000 MEG 2631
|
||||
2641 32.029198 -14.983262 6.000000 5.000000 MEG 2641
|
||||
64
mne/channels/data/layouts/biosemi.lay
Normal file
64
mne/channels/data/layouts/biosemi.lay
Normal file
@@ -0,0 +1,64 @@
|
||||
1 -0.496189 1.527114 0.290000 0.230000 Fp1
|
||||
2 -0.943808 1.299041 0.290000 0.230000 AF7
|
||||
3 -0.545830 1.170536 0.290000 0.230000 AF3
|
||||
4 -0.326906 0.809121 0.290000 0.230000 F1
|
||||
5 -0.659023 0.813825 0.290000 0.230000 F3
|
||||
6 -0.987913 0.858779 0.290000 0.230000 F5
|
||||
7 -1.299041 0.943808 0.290000 0.230000 F7
|
||||
8 -1.527114 0.496189 0.290000 0.230000 FT7
|
||||
9 -1.173172 0.450338 0.290000 0.230000 FC5
|
||||
10 -0.770517 0.409691 0.290000 0.230000 FC3
|
||||
11 -0.394923 0.394923 0.290000 0.230000 FC1
|
||||
12 -0.401426 -0.000000 0.290000 0.230000 C1
|
||||
13 -0.802851 -0.000000 0.290000 0.230000 C3
|
||||
14 -1.204277 -0.000000 0.290000 0.230000 C5
|
||||
15 -1.605703 -0.000000 0.290000 0.230000 T7
|
||||
16 -1.527114 -0.496189 0.290000 0.230000 TP7
|
||||
17 -1.173172 -0.450338 0.290000 0.230000 CP5
|
||||
18 -0.770517 -0.409691 0.290000 0.230000 CP3
|
||||
19 -0.394923 -0.394923 0.290000 0.230000 CP1
|
||||
20 -0.326906 -0.809121 0.290000 0.230000 P1
|
||||
21 -0.659023 -0.813825 0.290000 0.230000 P3
|
||||
22 -0.987913 -0.858779 0.290000 0.230000 P5
|
||||
23 -1.299041 -0.943808 0.290000 0.230000 P7
|
||||
24 -1.537550 -1.290157 0.290000 0.230000 P9
|
||||
25 -0.943808 -1.299041 0.290000 0.230000 PO7
|
||||
26 -0.545830 -1.170536 0.290000 0.230000 PO3
|
||||
27 -0.496189 -1.527114 0.290000 0.230000 O1
|
||||
28 0.000000 -2.007129 0.290000 0.230000 Iz
|
||||
29 0.000000 -1.605703 0.290000 0.230000 Oz
|
||||
30 0.000000 -1.204277 0.290000 0.230000 POz
|
||||
31 0.000000 -0.802851 0.290000 0.230000 Pz
|
||||
32 0.000000 -0.401426 0.290000 0.230000 CPz
|
||||
33 0.000000 1.605703 0.290000 0.230000 Fpz
|
||||
34 0.496189 1.527114 0.290000 0.230000 Fp2
|
||||
35 0.943808 1.299041 0.290000 0.230000 AF8
|
||||
36 0.545830 1.170536 0.290000 0.230000 AF4
|
||||
37 0.000000 1.204277 0.290000 0.230000 AFz
|
||||
38 0.000000 0.802851 0.290000 0.230000 Fz
|
||||
39 0.326906 0.809121 0.290000 0.230000 F2
|
||||
40 0.659023 0.813825 0.290000 0.230000 F4
|
||||
41 0.987913 0.858779 0.290000 0.230000 F6
|
||||
42 1.299041 0.943808 0.290000 0.230000 F8
|
||||
43 1.527114 0.496189 0.290000 0.230000 FT8
|
||||
44 1.173172 0.450338 0.290000 0.230000 FC6
|
||||
45 0.770517 0.409691 0.290000 0.230000 FC4
|
||||
46 0.394923 0.394923 0.290000 0.230000 FC2
|
||||
47 0.000000 0.401426 0.290000 0.230000 FCz
|
||||
48 0.000000 0.000000 0.290000 0.230000 Cz
|
||||
49 0.401426 0.000000 0.290000 0.230000 C2
|
||||
50 0.802851 0.000000 0.290000 0.230000 C4
|
||||
51 1.204277 0.000000 0.290000 0.230000 C6
|
||||
52 1.605703 0.000000 0.290000 0.230000 T8
|
||||
53 1.527114 -0.496189 0.290000 0.230000 TP8
|
||||
54 1.173172 -0.450338 0.290000 0.230000 CP6
|
||||
55 0.770517 -0.409691 0.290000 0.230000 CP4
|
||||
56 0.394923 -0.394923 0.290000 0.230000 CP2
|
||||
57 0.326906 -0.809121 0.290000 0.230000 P2
|
||||
58 0.659023 -0.813825 0.290000 0.230000 P4
|
||||
59 0.987913 -0.858779 0.290000 0.230000 P6
|
||||
60 1.299041 -0.943808 0.290000 0.230000 P8
|
||||
61 1.537550 -1.290157 0.290000 0.230000 P10
|
||||
62 0.943808 -1.299041 0.290000 0.230000 PO8
|
||||
63 0.545830 -1.170536 0.290000 0.230000 PO4
|
||||
64 0.496189 -1.527114 0.290000 0.230000 O2
|
||||
249
mne/channels/data/layouts/magnesWH3600.lout
Normal file
249
mne/channels/data/layouts/magnesWH3600.lout
Normal file
@@ -0,0 +1,249 @@
|
||||
-42.19 43.52 -41.70 28.71
|
||||
001 -1.28 -5.13 4.00 3.00 MEG 001
|
||||
002 -1.22 -1.43 4.00 3.00 MEG 002
|
||||
003 -1.37 2.53 4.00 3.00 MEG 003
|
||||
004 -1.36 5.90 4.00 3.00 MEG 004
|
||||
005 -1.45 9.27 4.00 3.00 MEG 005
|
||||
006 -4.89 9.36 4.00 3.00 MEG 006
|
||||
007 -5.20 5.86 4.00 3.00 MEG 007
|
||||
008 -5.26 2.40 4.00 3.00 MEG 008
|
||||
009 -5.34 -1.29 4.00 3.00 MEG 009
|
||||
010 -5.12 -5.08 4.00 3.00 MEG 010
|
||||
011 -4.73 -8.47 4.00 3.00 MEG 011
|
||||
012 -1.31 -8.81 4.00 3.00 MEG 012
|
||||
013 2.04 -8.49 4.00 3.00 MEG 013
|
||||
014 2.54 -5.16 4.00 3.00 MEG 014
|
||||
015 2.69 -1.43 4.00 3.00 MEG 015
|
||||
016 2.62 2.56 4.00 3.00 MEG 016
|
||||
017 2.50 5.89 4.00 3.00 MEG 017
|
||||
018 2.10 9.34 4.00 3.00 MEG 018
|
||||
019 -1.45 12.55 4.00 3.00 MEG 019
|
||||
020 -5.76 12.42 4.00 3.00 MEG 020
|
||||
021 -8.30 9.98 4.00 3.00 MEG 021
|
||||
022 -9.16 5.97 4.00 3.00 MEG 022
|
||||
023 -9.32 2.49 4.00 3.00 MEG 023
|
||||
024 -9.42 -1.32 4.00 3.00 MEG 024
|
||||
025 -9.13 -5.11 4.00 3.00 MEG 025
|
||||
026 -8.43 -9.18 4.00 3.00 MEG 026
|
||||
027 -5.45 -12.10 4.00 3.00 MEG 027
|
||||
028 -1.40 -12.51 4.00 3.00 MEG 028
|
||||
029 2.64 -12.08 4.00 3.00 MEG 029
|
||||
030 5.77 -9.29 4.00 3.00 MEG 030
|
||||
031 6.50 -5.19 4.00 3.00 MEG 031
|
||||
032 6.85 -1.37 4.00 3.00 MEG 032
|
||||
033 6.70 2.65 4.00 3.00 MEG 033
|
||||
034 6.46 6.18 4.00 3.00 MEG 034
|
||||
035 5.61 10.08 4.00 3.00 MEG 035
|
||||
036 2.95 12.49 4.00 3.00 MEG 036
|
||||
037 -1.47 15.77 4.00 3.00 MEG 037
|
||||
038 -5.48 15.52 4.00 3.00 MEG 038
|
||||
039 -8.97 13.31 4.00 3.00 MEG 039
|
||||
040 -11.91 10.42 4.00 3.00 MEG 040
|
||||
041 -12.96 6.84 4.00 3.00 MEG 041
|
||||
042 -13.39 3.21 4.00 3.00 MEG 042
|
||||
043 -13.58 -0.70 4.00 3.00 MEG 043
|
||||
044 -13.08 -4.42 4.00 3.00 MEG 044
|
||||
045 -12.52 -8.05 4.00 3.00 MEG 045
|
||||
046 -11.13 -11.34 4.00 3.00 MEG 046
|
||||
047 -8.45 -14.21 4.00 3.00 MEG 047
|
||||
048 -5.08 -15.56 4.00 3.00 MEG 048
|
||||
049 -1.60 -16.17 4.00 3.00 MEG 049
|
||||
050 2.22 -15.61 4.00 3.00 MEG 050
|
||||
051 5.63 -14.28 4.00 3.00 MEG 051
|
||||
052 8.38 -11.70 4.00 3.00 MEG 052
|
||||
053 9.89 -8.24 4.00 3.00 MEG 053
|
||||
054 10.43 -4.42 4.00 3.00 MEG 054
|
||||
055 10.94 -0.62 4.00 3.00 MEG 055
|
||||
056 10.72 3.35 4.00 3.00 MEG 056
|
||||
057 10.22 7.01 4.00 3.00 MEG 057
|
||||
058 9.04 10.61 4.00 3.00 MEG 058
|
||||
059 6.20 13.42 4.00 3.00 MEG 059
|
||||
060 2.52 15.65 4.00 3.00 MEG 060
|
||||
061 -1.53 18.91 4.00 3.00 MEG 061
|
||||
062 -5.68 18.61 4.00 3.00 MEG 062
|
||||
063 -9.46 16.89 4.00 3.00 MEG 063
|
||||
064 -12.95 14.48 4.00 3.00 MEG 064
|
||||
065 -15.67 11.24 4.00 3.00 MEG 065
|
||||
066 -17.06 7.05 4.00 3.00 MEG 066
|
||||
067 -17.65 3.16 4.00 3.00 MEG 067
|
||||
068 -17.98 -1.20 4.00 3.00 MEG 068
|
||||
069 -17.13 -5.53 4.00 3.00 MEG 069
|
||||
070 -16.60 -9.33 4.00 3.00 MEG 070
|
||||
071 -14.32 -12.91 4.00 3.00 MEG 071
|
||||
072 -11.85 -15.75 4.00 3.00 MEG 072
|
||||
073 -8.78 -17.93 4.00 3.00 MEG 073
|
||||
074 -5.30 -19.40 4.00 3.00 MEG 074
|
||||
075 -1.58 -19.85 4.00 3.00 MEG 075
|
||||
076 2.41 -19.42 4.00 3.00 MEG 076
|
||||
077 5.94 -18.13 4.00 3.00 MEG 077
|
||||
078 9.16 -15.98 4.00 3.00 MEG 078
|
||||
079 11.79 -13.08 4.00 3.00 MEG 079
|
||||
080 13.62 -9.59 4.00 3.00 MEG 080
|
||||
081 14.57 -5.64 4.00 3.00 MEG 081
|
||||
082 15.42 -1.35 4.00 3.00 MEG 082
|
||||
083 15.05 3.30 4.00 3.00 MEG 083
|
||||
084 14.29 7.20 4.00 3.00 MEG 084
|
||||
085 12.81 11.43 4.00 3.00 MEG 085
|
||||
086 9.96 14.67 4.00 3.00 MEG 086
|
||||
087 6.46 17.06 4.00 3.00 MEG 087
|
||||
088 2.60 18.73 4.00 3.00 MEG 088
|
||||
089 -1.60 22.21 4.00 3.00 MEG 089
|
||||
090 -5.83 21.82 4.00 3.00 MEG 090
|
||||
091 -9.75 20.43 4.00 3.00 MEG 091
|
||||
092 -13.45 18.45 4.00 3.00 MEG 092
|
||||
093 -16.67 15.62 4.00 3.00 MEG 093
|
||||
094 -19.33 12.13 4.00 3.00 MEG 094
|
||||
095 -20.94 7.82 4.00 3.00 MEG 095
|
||||
096 -21.81 3.65 4.00 3.00 MEG 096
|
||||
097 -22.23 -1.27 4.00 3.00 MEG 097
|
||||
098 -21.14 -5.87 4.00 3.00 MEG 098
|
||||
099 -20.30 -9.97 4.00 3.00 MEG 099
|
||||
100 -18.46 -13.84 4.00 3.00 MEG 100
|
||||
101 -16.07 -17.08 4.00 3.00 MEG 101
|
||||
102 -12.88 -19.71 4.00 3.00 MEG 102
|
||||
103 -9.34 -21.89 4.00 3.00 MEG 103
|
||||
104 -5.64 -23.02 4.00 3.00 MEG 104
|
||||
105 -1.72 -23.54 4.00 3.00 MEG 105
|
||||
106 2.48 -23.24 4.00 3.00 MEG 106
|
||||
107 6.42 -22.00 4.00 3.00 MEG 107
|
||||
108 9.86 -20.19 4.00 3.00 MEG 108
|
||||
109 13.22 -17.32 4.00 3.00 MEG 109
|
||||
110 15.75 -14.15 4.00 3.00 MEG 110
|
||||
111 17.67 -10.19 4.00 3.00 MEG 111
|
||||
112 18.65 -6.08 4.00 3.00 MEG 112
|
||||
113 19.69 -1.27 4.00 3.00 MEG 113
|
||||
114 19.27 3.70 4.00 3.00 MEG 114
|
||||
115 18.30 8.05 4.00 3.00 MEG 115
|
||||
116 16.46 12.48 4.00 3.00 MEG 116
|
||||
117 13.74 15.93 4.00 3.00 MEG 117
|
||||
118 10.41 18.72 4.00 3.00 MEG 118
|
||||
119 6.64 20.69 4.00 3.00 MEG 119
|
||||
120 2.67 22.02 4.00 3.00 MEG 120
|
||||
121 -1.74 25.41 4.00 3.00 MEG 121
|
||||
122 -6.59 24.84 4.00 3.00 MEG 122
|
||||
123 -11.16 23.37 4.00 3.00 MEG 123
|
||||
124 -15.46 21.07 4.00 3.00 MEG 124
|
||||
125 -19.25 17.84 4.00 3.00 MEG 125
|
||||
126 -22.45 13.89 4.00 3.00 MEG 126
|
||||
127 -24.89 8.96 4.00 3.00 MEG 127
|
||||
128 -26.13 4.36 4.00 3.00 MEG 128
|
||||
129 -26.65 -1.22 4.00 3.00 MEG 129
|
||||
130 -25.30 -6.36 4.00 3.00 MEG 130
|
||||
131 -24.16 -11.45 4.00 3.00 MEG 131
|
||||
132 -21.98 -15.88 4.00 3.00 MEG 132
|
||||
133 -18.81 -19.82 4.00 3.00 MEG 133
|
||||
134 -15.20 -22.99 4.00 3.00 MEG 134
|
||||
135 -11.11 -25.29 4.00 3.00 MEG 135
|
||||
136 -6.51 -26.74 4.00 3.00 MEG 136
|
||||
137 -1.86 -27.28 4.00 3.00 MEG 137
|
||||
138 3.17 -26.90 4.00 3.00 MEG 138
|
||||
139 7.79 -25.55 4.00 3.00 MEG 139
|
||||
140 12.07 -23.15 4.00 3.00 MEG 140
|
||||
141 15.93 -20.09 4.00 3.00 MEG 141
|
||||
142 19.04 -16.25 4.00 3.00 MEG 142
|
||||
143 21.39 -11.67 4.00 3.00 MEG 143
|
||||
144 22.75 -6.58 4.00 3.00 MEG 144
|
||||
145 23.99 -1.23 4.00 3.00 MEG 145
|
||||
146 23.36 4.49 4.00 3.00 MEG 146
|
||||
147 22.02 9.37 4.00 3.00 MEG 147
|
||||
148 19.51 14.31 4.00 3.00 MEG 148
|
||||
149 16.20 18.23 4.00 3.00 MEG 149
|
||||
150 12.16 21.54 4.00 3.00 MEG 150
|
||||
151 7.85 23.69 4.00 3.00 MEG 151
|
||||
152 3.16 25.01 4.00 3.00 MEG 152
|
||||
153 -23.01 18.82 4.00 3.00 MEG 153
|
||||
154 -26.06 15.31 4.00 3.00 MEG 154
|
||||
155 -28.76 10.18 4.00 3.00 MEG 155
|
||||
156 -31.71 3.39 4.00 3.00 MEG 156
|
||||
157 -32.05 -2.89 4.00 3.00 MEG 157
|
||||
158 -31.42 -8.67 4.00 3.00 MEG 158
|
||||
159 -26.22 -15.24 4.00 3.00 MEG 159
|
||||
160 -23.31 -19.72 4.00 3.00 MEG 160
|
||||
161 -19.33 -23.66 4.00 3.00 MEG 161
|
||||
162 -14.75 -26.73 4.00 3.00 MEG 162
|
||||
163 -9.92 -28.91 4.00 3.00 MEG 163
|
||||
164 -4.52 -30.10 4.00 3.00 MEG 164
|
||||
165 1.25 -30.15 4.00 3.00 MEG 165
|
||||
166 6.17 -29.40 4.00 3.00 MEG 166
|
||||
167 11.43 -27.39 4.00 3.00 MEG 167
|
||||
168 16.20 -24.37 4.00 3.00 MEG 168
|
||||
169 20.37 -20.27 4.00 3.00 MEG 169
|
||||
170 23.54 -15.56 4.00 3.00 MEG 170
|
||||
171 28.66 -8.94 4.00 3.00 MEG 171
|
||||
172 29.46 -3.00 4.00 3.00 MEG 172
|
||||
173 29.04 3.51 4.00 3.00 MEG 173
|
||||
174 25.94 10.77 4.00 3.00 MEG 174
|
||||
175 23.08 15.80 4.00 3.00 MEG 175
|
||||
176 19.78 19.54 4.00 3.00 MEG 176
|
||||
177 -26.70 20.52 4.00 3.00 MEG 177
|
||||
178 -29.66 16.81 4.00 3.00 MEG 178
|
||||
179 -32.55 11.68 4.00 3.00 MEG 179
|
||||
180 -32.47 -13.23 4.00 3.00 MEG 180
|
||||
181 -27.63 -19.12 4.00 3.00 MEG 181
|
||||
182 -23.75 -23.89 4.00 3.00 MEG 182
|
||||
183 -18.94 -27.77 4.00 3.00 MEG 183
|
||||
184 -13.64 -30.59 4.00 3.00 MEG 184
|
||||
185 -7.93 -32.70 4.00 3.00 MEG 185
|
||||
186 -2.12 -33.31 4.00 3.00 MEG 186
|
||||
187 4.06 -32.74 4.00 3.00 MEG 187
|
||||
188 10.04 -31.14 4.00 3.00 MEG 188
|
||||
189 15.57 -28.41 4.00 3.00 MEG 189
|
||||
190 20.44 -24.69 4.00 3.00 MEG 190
|
||||
191 24.62 -19.81 4.00 3.00 MEG 191
|
||||
192 29.49 -13.87 4.00 3.00 MEG 192
|
||||
193 29.48 12.54 4.00 3.00 MEG 193
|
||||
194 26.49 17.54 4.00 3.00 MEG 194
|
||||
195 23.28 21.40 4.00 3.00 MEG 195
|
||||
196 -36.84 4.15 4.00 3.00 MEG 196
|
||||
197 -37.22 -3.16 4.00 3.00 MEG 197
|
||||
198 -36.14 -9.68 4.00 3.00 MEG 198
|
||||
199 -28.42 -23.63 4.00 3.00 MEG 199
|
||||
200 -23.68 -28.05 4.00 3.00 MEG 200
|
||||
201 -18.03 -31.89 4.00 3.00 MEG 201
|
||||
202 -11.97 -34.42 4.00 3.00 MEG 202
|
||||
203 -5.32 -35.88 4.00 3.00 MEG 203
|
||||
204 1.03 -36.08 4.00 3.00 MEG 204
|
||||
205 7.92 -35.00 4.00 3.00 MEG 205
|
||||
206 13.99 -32.64 4.00 3.00 MEG 206
|
||||
207 19.78 -29.06 4.00 3.00 MEG 207
|
||||
208 24.79 -24.52 4.00 3.00 MEG 208
|
||||
209 33.39 -10.13 4.00 3.00 MEG 209
|
||||
210 34.62 -3.11 4.00 3.00 MEG 210
|
||||
211 34.23 4.57 4.00 3.00 MEG 211
|
||||
212 -32.38 19.14 4.00 3.00 MEG 212
|
||||
213 -35.90 13.21 4.00 3.00 MEG 213
|
||||
214 -36.70 -14.70 4.00 3.00 MEG 214
|
||||
215 -32.93 -22.44 4.00 3.00 MEG 215
|
||||
216 -28.17 -28.07 4.00 3.00 MEG 216
|
||||
217 -22.65 -32.41 4.00 3.00 MEG 217
|
||||
218 -16.53 -35.71 4.00 3.00 MEG 218
|
||||
219 -9.52 -37.92 4.00 3.00 MEG 219
|
||||
220 -2.58 -38.82 4.00 3.00 MEG 220
|
||||
221 4.65 -38.54 4.00 3.00 MEG 221
|
||||
222 11.78 -36.65 4.00 3.00 MEG 222
|
||||
223 18.43 -33.60 4.00 3.00 MEG 223
|
||||
224 24.26 -29.21 4.00 3.00 MEG 224
|
||||
225 29.52 -23.44 4.00 3.00 MEG 225
|
||||
226 33.73 -15.36 4.00 3.00 MEG 226
|
||||
227 33.02 14.20 4.00 3.00 MEG 227
|
||||
228 29.24 19.93 4.00 3.00 MEG 228
|
||||
229 -36.80 18.24 4.00 3.00 MEG 229
|
||||
230 -40.03 12.76 4.00 3.00 MEG 230
|
||||
231 -41.35 5.03 4.00 3.00 MEG 231
|
||||
232 -41.79 -3.17 4.00 3.00 MEG 232
|
||||
233 -40.48 -10.59 4.00 3.00 MEG 233
|
||||
234 -32.92 -26.79 4.00 3.00 MEG 234
|
||||
235 -27.40 -32.12 4.00 3.00 MEG 235
|
||||
236 -20.92 -36.72 4.00 3.00 MEG 236
|
||||
237 -14.11 -39.49 4.00 3.00 MEG 237
|
||||
238 -6.76 -41.18 4.00 3.00 MEG 238
|
||||
239 1.45 -41.40 4.00 3.00 MEG 239
|
||||
240 8.96 -40.25 4.00 3.00 MEG 240
|
||||
241 16.27 -37.84 4.00 3.00 MEG 241
|
||||
242 22.75 -33.68 4.00 3.00 MEG 242
|
||||
243 29.08 -28.20 4.00 3.00 MEG 243
|
||||
244 37.59 -11.05 4.00 3.00 MEG 244
|
||||
245 39.12 -3.16 4.00 3.00 MEG 245
|
||||
246 38.59 5.47 4.00 3.00 MEG 246
|
||||
247 37.16 13.60 4.00 3.00 MEG 247
|
||||
248 33.62 18.93 4.00 3.00 MEG 248
|
||||
258
mne/channels/data/montages/EGI_256.csd
Normal file
258
mne/channels/data/montages/EGI_256.csd
Normal file
@@ -0,0 +1,258 @@
|
||||
// MatLab Sphere coordinates [degrees] Cartesian coordinates
|
||||
// Label Theta Phi Radius X Y Z off sphere surface
|
||||
E1 37.700 -14.000 1.000 0.7677 0.5934 -0.2419 -0.00000000000000011
|
||||
E2 44.600 -0.880 1.000 0.7119 0.7021 -0.0154 0.00000000000000000
|
||||
E3 51.700 11.000 1.000 0.6084 0.7704 0.1908 0.00000000000000000
|
||||
E4 58.200 21.800 1.000 0.4893 0.7891 0.3714 -0.00000000000000011
|
||||
E5 64.200 33.600 1.000 0.3625 0.7499 0.5534 0.00000000000000000
|
||||
E6 70.800 45.500 1.000 0.2305 0.6619 0.7133 -0.00000000000000022
|
||||
E7 77.200 56.700 1.000 0.1216 0.5354 0.8358 0.00000000000000000
|
||||
E8 90.000 67.700 1.000 0.0000 0.3795 0.9252 0.00000000000000000
|
||||
E9 127.300 78.300 1.000 -0.1229 0.1613 0.9792 0.00000000000000000
|
||||
E10 51.200 -9.080 1.000 0.6188 0.7696 -0.1578 0.00000000000000000
|
||||
E11 58.800 2.370 1.000 0.5176 0.8546 0.0414 0.00000000000000000
|
||||
E12 66.800 14.300 1.000 0.3817 0.8907 0.2470 -0.00000000000000011
|
||||
E13 73.800 25.200 1.000 0.2524 0.8689 0.4258 0.00000000000000022
|
||||
E14 81.360 36.400 1.000 0.1209 0.7958 0.5934 0.00000000000000022
|
||||
E15 90.000 46.900 1.000 0.0000 0.6833 0.7302 0.00000000000000000
|
||||
E16 102.800 56.700 1.000 -0.1216 0.5354 0.8358 0.00000000000000000
|
||||
E17 128.200 66.600 1.000 -0.2456 0.3121 0.9178 -0.00000000000000011
|
||||
E18 66.600 -4.970 1.000 0.3957 0.9143 -0.0866 -0.00000000000000011
|
||||
E19 74.000 4.680 1.000 0.2747 0.9581 0.0816 -0.00000000000000011
|
||||
E20 81.960 15.700 1.000 0.1346 0.9532 0.2706 0.00000000000000022
|
||||
E21 90.000 26.400 1.000 0.0000 0.8957 0.4446 0.00000000000000000
|
||||
E22 98.640 36.400 1.000 -0.1209 0.7958 0.5934 0.00000000000000022
|
||||
E23 109.200 45.500 1.000 -0.2305 0.6619 0.7133 0.00000000000000000
|
||||
E24 127.200 54.200 1.000 -0.3537 0.4659 0.8111 0.00000000000000000
|
||||
E25 82.540 -3.260 1.000 0.1296 0.9899 -0.0569 0.00000000000000000
|
||||
E26 90.000 5.370 1.000 0.0000 0.9956 0.0936 0.00000000000000000
|
||||
E27 98.040 15.700 1.000 -0.1346 0.9532 0.2706 0.00000000000000022
|
||||
E28 106.200 25.200 1.000 -0.2524 0.8689 0.4258 0.00000000000000022
|
||||
E29 115.800 33.600 1.000 -0.3625 0.7499 0.5534 0.00000000000000000
|
||||
E30 128.800 41.200 1.000 -0.4715 0.5864 0.6587 0.00000000000000000
|
||||
E31 90.000 -11.000 1.000 0.0000 0.9816 -0.1908 0.00000000000000000
|
||||
E32 97.460 -3.260 1.000 -0.1296 0.9899 -0.0569 0.00000000000000000
|
||||
E33 106.000 4.680 1.000 -0.2747 0.9581 0.0816 -0.00000000000000011
|
||||
E34 113.200 14.300 1.000 -0.3817 0.8907 0.2470 -0.00000000000000022
|
||||
E35 121.800 21.800 1.000 -0.4893 0.7891 0.3714 -0.00000000000000011
|
||||
E36 128.500 30.200 1.000 -0.5380 0.6764 0.5030 0.00000000000000022
|
||||
E37 113.400 -4.970 1.000 -0.3957 0.9143 -0.0866 0.00000000000000000
|
||||
E38 121.200 2.370 1.000 -0.5176 0.8546 0.0414 0.00000000000000000
|
||||
E39 128.300 11.000 1.000 -0.6084 0.7704 0.1908 0.00000000000000000
|
||||
E40 135.300 20.800 1.000 -0.6645 0.6576 0.3551 0.00000000000000000
|
||||
E41 140.600 32.000 1.000 -0.6553 0.5383 0.5299 0.00000000000000000
|
||||
E42 144.500 44.000 1.000 -0.5856 0.4177 0.6947 0.00000000000000000
|
||||
E43 151.000 54.800 1.000 -0.5042 0.2795 0.8171 0.00000000000000000
|
||||
E44 163.200 66.400 1.000 -0.3833 0.1157 0.9164 0.00000000000000000
|
||||
E45 197.000 77.300 1.000 -0.2102 -0.0643 0.9755 0.00000000000000000
|
||||
E46 128.800 -9.080 1.000 -0.6188 0.7696 -0.1578 0.00000000000000000
|
||||
E47 135.400 -0.880 1.000 -0.7119 0.7021 -0.0154 -0.00000000000000011
|
||||
E48 142.500 8.460 1.000 -0.7847 0.6021 0.1471 0.00000000000000000
|
||||
E49 149.200 19.400 1.000 -0.8102 0.4830 0.3322 0.00000000000000000
|
||||
E50 155.300 32.200 1.000 -0.7688 0.3536 0.5329 0.00000000000000000
|
||||
E51 162.400 44.200 1.000 -0.6834 0.2168 0.6972 0.00000000000000000
|
||||
E52 173.500 54.500 1.000 -0.5770 0.0657 0.8141 0.00000000000000000
|
||||
E53 197.000 65.600 1.000 -0.3951 -0.1208 0.9107 0.00000000000000000
|
||||
E54 142.300 -14.000 1.000 -0.7677 0.5934 -0.2419 0.00000000000000000
|
||||
E55 149.100 -4.100 1.000 -0.8559 0.5122 -0.0715 0.00000000000000000
|
||||
E56 156.700 7.130 1.000 -0.9113 0.3925 0.1241 0.00000000000000022
|
||||
E57 163.200 19.500 1.000 -0.9024 0.2725 0.3338 0.00000000000000000
|
||||
E58 169.700 31.600 1.000 -0.8380 0.1523 0.5240 0.00000000000000000
|
||||
E59 179.500 43.000 1.000 -0.7313 0.0064 0.6820 0.00000000000000000
|
||||
E60 197.000 53.000 1.000 -0.5755 -0.1760 0.7986 0.00000000000000000
|
||||
E61 158.000 -17.200 1.000 -0.8857 0.3579 -0.2957 -0.00000000000000022
|
||||
E62 165.100 -5.730 1.000 -0.9615 0.2558 -0.0998 0.00000000000000022
|
||||
E63 171.400 6.890 1.000 -0.9816 0.1485 0.1200 0.00000000000000022
|
||||
E64 177.200 19.000 1.000 -0.9444 0.0462 0.3256 0.00000000000000000
|
||||
E65 184.300 31.100 1.000 -0.8539 -0.0642 0.5165 0.00000000000000000
|
||||
E66 196.000 39.900 1.000 -0.7374 -0.2115 0.6414 0.00000000000000000
|
||||
E67 167.300 -27.900 1.000 -0.8621 0.1943 -0.4679 0.00000000000000000
|
||||
E68 172.300 -17.500 1.000 -0.9451 0.1278 -0.3007 0.00000000000000000
|
||||
E69 179.500 -6.970 1.000 -0.9926 0.0087 -0.1213 0.00000000000000000
|
||||
E70 185.400 5.990 1.000 -0.9901 -0.0936 0.1044 0.00000000000000022
|
||||
E71 191.000 18.700 1.000 -0.9298 -0.1807 0.3206 0.00000000000000000
|
||||
E72 197.000 28.500 1.000 -0.8404 -0.2569 0.4772 0.00000000000000000
|
||||
E73 174.500 -38.200 1.000 -0.7822 0.0753 -0.6184 0.00000000000000022
|
||||
E74 193.000 -6.630 1.000 -0.9679 -0.2234 -0.1155 0.00000000000000000
|
||||
E75 199.000 7.590 1.000 -0.9372 -0.3227 0.1321 0.00000000000000000
|
||||
E76 205.000 19.800 1.000 -0.8527 -0.3976 0.3387 -0.00000000000000011
|
||||
E77 209.000 31.900 1.000 -0.7425 -0.4116 0.5284 0.00000000000000000
|
||||
E78 214.000 43.600 1.000 -0.6004 -0.4050 0.6896 0.00000000000000000
|
||||
E79 221.000 55.600 1.000 -0.4264 -0.3707 0.8251 -0.00000000000000011
|
||||
E80 233.000 67.400 1.000 -0.2313 -0.3069 0.9232 0.00000000000000000
|
||||
E81 -90.000 78.400 1.000 0.0000 -0.2011 0.9796 -0.00000000000000011
|
||||
E82 183.900 -45.800 1.000 -0.6956 -0.0474 -0.7169 0.00000000000000000
|
||||
E83 205.000 -15.000 1.000 -0.8754 -0.4082 -0.2588 0.00000000000000000
|
||||
E84 206.000 -3.510 1.000 -0.8971 -0.4375 -0.0612 -0.00000000000000022
|
||||
E85 213.000 10.000 1.000 -0.8259 -0.5364 0.1736 -0.00000000000000011
|
||||
E86 218.000 22.700 1.000 -0.7270 -0.5680 0.3859 0.00000000000000000
|
||||
E87 225.000 35.300 1.000 -0.5771 -0.5771 0.5779 0.00000000000000000
|
||||
E88 232.000 46.800 1.000 -0.4214 -0.5394 0.7290 -0.00000000000000011
|
||||
E89 245.000 56.900 1.000 -0.2308 -0.4949 0.8377 -0.00000000000000011
|
||||
E90 -90.000 67.500 1.000 0.0000 -0.3827 0.9239 0.00000000000000000
|
||||
E91 195.000 -50.900 1.000 -0.6092 -0.1632 -0.7760 0.00000000000000000
|
||||
E92 203.000 -42.700 1.000 -0.6765 -0.2872 -0.6782 -0.00000000000000022
|
||||
E93 211.000 -32.500 1.000 -0.7229 -0.4344 -0.5373 0.00000000000000000
|
||||
E94 212.000 -23.100 1.000 -0.7801 -0.4874 -0.3923 0.00000000000000000
|
||||
E95 216.000 -12.400 1.000 -0.7901 -0.5741 -0.2147 0.00000000000000000
|
||||
E96 221.000 0.666 1.000 -0.7547 -0.6560 0.0116 0.00000000000000000
|
||||
E97 228.000 12.900 1.000 -0.6522 -0.7244 0.2233 0.00000000000000022
|
||||
E98 233.000 24.900 1.000 -0.5459 -0.7244 0.4210 0.00000000000000000
|
||||
E99 241.000 36.400 1.000 -0.3902 -0.7040 0.5934 0.00000000000000000
|
||||
E100 251.000 46.900 1.000 -0.2225 -0.6460 0.7302 0.00000000000000000
|
||||
E101 -90.000 44.200 1.000 0.0000 -0.7169 0.6972 0.00000000000000000
|
||||
E102 211.000 -47.800 1.000 -0.5758 -0.3460 -0.7408 0.00000000000000000
|
||||
E103 217.000 -39.900 1.000 -0.6127 -0.4617 -0.6414 0.00000000000000000
|
||||
E104 223.000 -29.500 1.000 -0.6365 -0.5936 -0.4924 0.00000000000000000
|
||||
E105 224.000 -20.500 1.000 -0.6738 -0.6507 -0.3502 0.00000000000000000
|
||||
E106 228.000 -8.840 1.000 -0.6612 -0.7343 -0.1537 0.00000000000000022
|
||||
E107 235.000 2.900 1.000 -0.5728 -0.8181 0.0506 0.00000000000000000
|
||||
E108 242.000 14.600 1.000 -0.4543 -0.8544 0.2521 0.00000000000000000
|
||||
E109 248.000 25.700 1.000 -0.3375 -0.8355 0.4337 -0.00000000000000011
|
||||
E110 257.000 36.000 1.000 -0.1820 -0.7883 0.5878 0.00000000000000000
|
||||
E111 226.000 -43.800 1.000 -0.5014 -0.5192 -0.6921 0.00000000000000000
|
||||
E112 230.000 -36.300 1.000 -0.5180 -0.6174 -0.5920 0.00000000000000000
|
||||
E113 235.000 -25.900 1.000 -0.5160 -0.7369 -0.4368 -0.00000000000000022
|
||||
E114 235.000 -17.500 1.000 -0.5470 -0.7812 -0.3007 0.00000000000000000
|
||||
E115 244.000 -6.240 1.000 -0.4358 -0.8935 -0.1087 0.00000000000000000
|
||||
E116 251.000 4.850 1.000 -0.3244 -0.9421 0.0845 0.00000000000000000
|
||||
E117 258.000 15.500 1.000 -0.2004 -0.9426 0.2672 0.00000000000000000
|
||||
E118 263.000 25.200 1.000 -0.1103 -0.8981 0.4258 0.00000000000000000
|
||||
E119 -90.000 33.400 1.000 0.0000 -0.8348 0.5505 -0.00000000000000011
|
||||
E120 237.000 -41.100 1.000 -0.4104 -0.6320 -0.6574 0.00000000000000022
|
||||
E121 242.000 -33.400 1.000 -0.3919 -0.7371 -0.5505 -0.00000000000000022
|
||||
E122 247.000 -23.400 1.000 -0.3586 -0.8448 -0.3971 0.00000000000000000
|
||||
E123 252.000 -11.200 1.000 -0.3031 -0.9329 -0.1942 0.00000000000000000
|
||||
E124 257.000 -3.660 1.000 -0.2245 -0.9724 -0.0638 0.00000000000000022
|
||||
E125 264.000 5.580 1.000 -0.1040 -0.9898 0.0972 0.00000000000000000
|
||||
E126 -90.000 15.400 1.000 0.0000 -0.9641 0.2656 0.00000000000000000
|
||||
E127 -83.000 25.200 1.000 0.1103 -0.8981 0.4258 0.00000000000000000
|
||||
E128 -77.000 36.000 1.000 0.1820 -0.7883 0.5878 0.00000000000000000
|
||||
E129 -71.000 46.900 1.000 0.2225 -0.6460 0.7302 0.00000000000000000
|
||||
E130 -65.000 56.900 1.000 0.2308 -0.4949 0.8377 -0.00000000000000011
|
||||
E131 -53.000 67.400 1.000 0.2313 -0.3069 0.9232 0.00000000000000000
|
||||
E132 -17.000 77.300 1.000 0.2102 -0.0643 0.9755 0.00000000000000000
|
||||
E133 248.000 -36.400 1.000 -0.3015 -0.7463 -0.5934 0.00000000000000022
|
||||
E134 253.000 -30.700 1.000 -0.2514 -0.8223 -0.5105 -0.00000000000000011
|
||||
E135 258.000 -19.400 1.000 -0.1961 -0.9226 -0.3322 -0.00000000000000011
|
||||
E136 265.000 -12.900 1.000 -0.0850 -0.9711 -0.2233 0.00000000000000000
|
||||
E137 -90.000 -5.280 1.000 0.0000 -0.9958 -0.0920 0.00000000000000000
|
||||
E138 -84.000 5.580 1.000 0.1040 -0.9898 0.0972 -0.00000000000000022
|
||||
E139 -78.000 15.500 1.000 0.2004 -0.9426 0.2672 -0.00000000000000011
|
||||
E140 -68.000 25.700 1.000 0.3375 -0.8355 0.4337 -0.00000000000000011
|
||||
E141 -61.000 36.400 1.000 0.3902 -0.7040 0.5934 0.00000000000000000
|
||||
E142 -52.000 46.800 1.000 0.4214 -0.5394 0.7290 0.00000000000000000
|
||||
E143 -41.000 55.600 1.000 0.4264 -0.3707 0.8251 0.00000000000000000
|
||||
E144 -17.000 65.600 1.000 0.3951 -0.1208 0.9107 0.00000000000000000
|
||||
E145 258.000 -35.800 1.000 -0.1686 -0.7933 -0.5850 0.00000000000000000
|
||||
E146 264.000 -29.600 1.000 -0.0909 -0.8647 -0.4939 0.00000000000000000
|
||||
E147 -90.000 -22.100 1.000 0.0000 -0.9265 -0.3762 0.00000000000000000
|
||||
E148 -85.000 -12.900 1.000 0.0850 -0.9711 -0.2233 0.00000000000000000
|
||||
E149 -77.000 -3.660 1.000 0.2245 -0.9724 -0.0638 0.00000000000000022
|
||||
E150 -71.000 4.850 1.000 0.3244 -0.9421 0.0845 -0.00000000000000022
|
||||
E151 -62.000 14.600 1.000 0.4543 -0.8544 0.2521 0.00000000000000000
|
||||
E152 -53.000 24.900 1.000 0.5459 -0.7244 0.4210 0.00000000000000000
|
||||
E153 -45.000 35.300 1.000 0.5771 -0.5771 0.5779 0.00000000000000000
|
||||
E154 -34.000 43.600 1.000 0.6004 -0.4050 0.6896 0.00000000000000000
|
||||
E155 -17.000 53.000 1.000 0.5755 -0.1760 0.7986 0.00000000000000000
|
||||
E156 -84.000 -29.600 1.000 0.0909 -0.8647 -0.4939 -0.00000000000000011
|
||||
E157 -78.000 -19.400 1.000 0.1961 -0.9226 -0.3322 -0.00000000000000022
|
||||
E158 -72.000 -11.200 1.000 0.3031 -0.9329 -0.1942 0.00000000000000000
|
||||
E159 -64.000 -6.240 1.000 0.4358 -0.8935 -0.1087 0.00000000000000022
|
||||
E160 -55.000 2.900 1.000 0.5728 -0.8181 0.0506 0.00000000000000022
|
||||
E161 -48.000 12.900 1.000 0.6522 -0.7244 0.2233 0.00000000000000000
|
||||
E162 -38.000 22.700 1.000 0.7270 -0.5680 0.3859 0.00000000000000000
|
||||
E163 -29.000 31.900 1.000 0.7425 -0.4116 0.5284 0.00000000000000000
|
||||
E164 -16.000 39.900 1.000 0.7374 -0.2115 0.6414 0.00000000000000000
|
||||
E165 -78.000 -35.800 1.000 0.1686 -0.7933 -0.5850 0.00000000000000000
|
||||
E166 -73.000 -30.700 1.000 0.2514 -0.8223 -0.5105 0.00000000000000000
|
||||
E167 -67.000 -23.400 1.000 0.3586 -0.8448 -0.3971 0.00000000000000000
|
||||
E168 -55.000 -17.500 1.000 0.5470 -0.7812 -0.3007 0.00000000000000000
|
||||
E169 -48.000 -8.840 1.000 0.6612 -0.7343 -0.1537 0.00000000000000022
|
||||
E170 -41.000 0.666 1.000 0.7547 -0.6560 0.0116 0.00000000000000000
|
||||
E171 -33.000 10.000 1.000 0.8259 -0.5364 0.1736 -0.00000000000000011
|
||||
E172 -25.000 19.800 1.000 0.8527 -0.3976 0.3387 -0.00000000000000022
|
||||
E173 -17.000 28.500 1.000 0.8404 -0.2569 0.4772 0.00000000000000000
|
||||
E174 -68.000 -36.400 1.000 0.3015 -0.7463 -0.5934 0.00000000000000000
|
||||
E175 -62.000 -33.400 1.000 0.3919 -0.7371 -0.5505 -0.00000000000000011
|
||||
E176 -55.000 -25.900 1.000 0.5160 -0.7369 -0.4368 -0.00000000000000022
|
||||
E177 -44.000 -20.500 1.000 0.6738 -0.6507 -0.3502 0.00000000000000000
|
||||
E178 -36.000 -12.400 1.000 0.7901 -0.5741 -0.2147 0.00000000000000000
|
||||
E179 -26.000 -3.510 1.000 0.8971 -0.4375 -0.0612 -0.00000000000000011
|
||||
E180 -19.000 7.590 1.000 0.9372 -0.3227 0.1321 0.00000000000000022
|
||||
E181 -11.000 18.700 1.000 0.9298 -0.1807 0.3206 0.00000000000000022
|
||||
E182 -4.300 31.100 1.000 0.8539 -0.0642 0.5165 0.00000000000000000
|
||||
E183 0.500 43.000 1.000 0.7313 0.0064 0.6820 0.00000000000000000
|
||||
E184 6.500 54.500 1.000 0.5770 0.0657 0.8141 0.00000000000000000
|
||||
E185 16.800 66.400 1.000 0.3833 0.1157 0.9164 0.00000000000000000
|
||||
E186 52.700 78.300 1.000 0.1229 0.1613 0.9792 0.00000000000000000
|
||||
E187 -57.000 -41.100 1.000 0.4104 -0.6320 -0.6574 0.00000000000000022
|
||||
E188 -50.000 -36.300 1.000 0.5180 -0.6174 -0.5920 -0.00000000000000022
|
||||
E189 -43.000 -29.500 1.000 0.6365 -0.5936 -0.4924 0.00000000000000000
|
||||
E190 -32.000 -23.100 1.000 0.7801 -0.4874 -0.3923 0.00000000000000000
|
||||
E191 -25.000 -15.000 1.000 0.8754 -0.4082 -0.2588 0.00000000000000000
|
||||
E192 -13.000 -6.630 1.000 0.9679 -0.2234 -0.1155 0.00000000000000000
|
||||
E193 -5.400 5.990 1.000 0.9901 -0.0936 0.1044 0.00000000000000022
|
||||
E194 2.800 19.000 1.000 0.9444 0.0462 0.3256 0.00000000000000022
|
||||
E195 10.300 31.600 1.000 0.8380 0.1523 0.5240 0.00000000000000000
|
||||
E196 17.600 44.200 1.000 0.6834 0.2168 0.6972 0.00000000000000000
|
||||
E197 29.000 54.800 1.000 0.5042 0.2795 0.8171 0.00000000000000000
|
||||
E198 51.800 66.600 1.000 0.2456 0.3121 0.9178 0.00000000000000000
|
||||
E199 -46.000 -43.800 1.000 0.5014 -0.5192 -0.6921 0.00000000000000000
|
||||
E200 -37.000 -39.900 1.000 0.6127 -0.4617 -0.6414 0.00000000000000000
|
||||
E201 -31.000 -32.500 1.000 0.7229 -0.4344 -0.5373 0.00000000000000000
|
||||
E202 0.500 -6.970 1.000 0.9926 0.0087 -0.1213 0.00000000000000000
|
||||
E203 8.600 6.890 1.000 0.9816 0.1485 0.1200 0.00000000000000044
|
||||
E204 16.800 19.500 1.000 0.9024 0.2725 0.3338 0.00000000000000000
|
||||
E205 24.700 32.200 1.000 0.7688 0.3536 0.5329 0.00000000000000000
|
||||
E206 35.500 44.000 1.000 0.5856 0.4177 0.6947 0.00000000000000000
|
||||
E207 52.800 54.200 1.000 0.3537 0.4659 0.8111 0.00000000000000000
|
||||
E208 -31.000 -47.800 1.000 0.5758 -0.3460 -0.7408 0.00000000000000000
|
||||
E209 -23.000 -42.700 1.000 0.6765 -0.2872 -0.6782 0.00000000000000000
|
||||
E210 7.700 -17.500 1.000 0.9451 0.1278 -0.3007 0.00000000000000000
|
||||
E211 14.900 -5.730 1.000 0.9615 0.2558 -0.0998 -0.00000000000000011
|
||||
E212 23.300 7.130 1.000 0.9113 0.3925 0.1241 0.00000000000000022
|
||||
E213 30.800 19.400 1.000 0.8102 0.4830 0.3322 0.00000000000000000
|
||||
E214 39.400 32.000 1.000 0.6553 0.5383 0.5299 0.00000000000000000
|
||||
E215 51.200 41.200 1.000 0.4715 0.5864 0.6587 0.00000000000000000
|
||||
E216 -15.000 -50.900 1.000 0.6092 -0.1632 -0.7760 0.00000000000000000
|
||||
E217 -3.900 -45.800 1.000 0.6956 -0.0474 -0.7169 0.00000000000000000
|
||||
E218 5.500 -38.200 1.000 0.7822 0.0753 -0.6184 0.00000000000000022
|
||||
E219 12.700 -27.900 1.000 0.8621 0.1943 -0.4679 0.00000000000000000
|
||||
E220 22.000 -17.200 1.000 0.8857 0.3579 -0.2957 -0.00000000000000022
|
||||
E221 30.900 -4.100 1.000 0.8559 0.5122 -0.0715 0.00000000000000000
|
||||
E222 37.500 8.460 1.000 0.7847 0.6021 0.1471 0.00000000000000000
|
||||
E223 44.700 20.800 1.000 0.6645 0.6576 0.3551 0.00000000000000000
|
||||
E224 51.500 30.200 1.000 0.5380 0.6764 0.5030 0.00000000000000000
|
||||
E225 23.100 -28.000 1.000 0.8122 0.3464 -0.4695 0.00000000000000000
|
||||
E226 33.500 -28.800 1.000 0.7307 0.4837 -0.4818 0.00000000000000000
|
||||
E227 18.500 -38.200 1.000 0.7452 0.2494 -0.6184 0.00000000000000000
|
||||
E228 10.400 -46.300 1.000 0.6795 0.1247 -0.7230 0.00000000000000000
|
||||
E229 -1.200 -53.100 1.000 0.6003 -0.0126 -0.7997 0.00000000000000000
|
||||
E230 41.600 -32.900 1.000 0.6279 0.5574 -0.5432 0.00000000000000000
|
||||
E231 29.900 -39.600 1.000 0.6680 0.3841 -0.6374 0.00000000000000000
|
||||
E232 23.600 -46.600 1.000 0.6296 0.2751 -0.7266 0.00000000000000000
|
||||
E233 13.200 -53.300 1.000 0.5818 0.1365 -0.8018 0.00000000000000022
|
||||
E234 50.800 -35.100 1.000 0.5171 0.6340 -0.5750 -0.00000000000000011
|
||||
E235 40.300 -41.300 1.000 0.5730 0.4859 -0.6600 0.00000000000000022
|
||||
E236 34.400 -47.800 1.000 0.5542 0.3795 -0.7408 0.00000000000000000
|
||||
E237 26.900 -54.600 1.000 0.5166 0.2621 -0.8151 0.00000000000000000
|
||||
E238 60.300 -35.600 1.000 0.4029 0.7063 -0.5821 0.00000000000000022
|
||||
E239 47.800 -45.000 1.000 0.4750 0.5238 -0.7071 -0.00000000000000011
|
||||
E240 41.600 -50.500 1.000 0.4757 0.4223 -0.7716 0.00000000000000000
|
||||
E241 119.700 -35.600 1.000 -0.4029 0.7063 -0.5821 0.00000000000000000
|
||||
E242 132.200 -45.000 1.000 -0.4750 0.5238 -0.7071 -0.00000000000000011
|
||||
E243 138.400 -50.500 1.000 -0.4757 0.4223 -0.7716 0.00000000000000000
|
||||
E244 129.200 -35.100 1.000 -0.5171 0.6340 -0.5750 -0.00000000000000011
|
||||
E245 139.700 -41.300 1.000 -0.5730 0.4859 -0.6600 0.00000000000000000
|
||||
E246 145.600 -47.800 1.000 -0.5542 0.3795 -0.7408 -0.00000000000000011
|
||||
E247 153.100 -54.600 1.000 -0.5166 0.2621 -0.8151 0.00000000000000000
|
||||
E248 138.400 -32.900 1.000 -0.6279 0.5574 -0.5432 -0.00000000000000022
|
||||
E249 150.100 -39.600 1.000 -0.6680 0.3841 -0.6374 0.00000000000000000
|
||||
E250 156.400 -46.600 1.000 -0.6296 0.2751 -0.7266 -0.00000000000000011
|
||||
E251 166.800 -53.300 1.000 -0.5818 0.1365 -0.8018 0.00000000000000022
|
||||
E252 146.500 -28.800 1.000 -0.7307 0.4837 -0.4818 0.00000000000000000
|
||||
E253 156.900 -28.000 1.000 -0.8122 0.3464 -0.4695 0.00000000000000000
|
||||
E254 161.500 -38.200 1.000 -0.7452 0.2494 -0.6184 0.00000000000000000
|
||||
E255 169.600 -46.300 1.000 -0.6795 0.1247 -0.7230 0.00000000000000000
|
||||
E256 181.200 -53.100 1.000 -0.6003 -0.0126 -0.7997 0.00000000000000000
|
||||
131
mne/channels/data/montages/GSN-HydroCel-128.sfp
Normal file
131
mne/channels/data/montages/GSN-HydroCel-128.sfp
Normal file
@@ -0,0 +1,131 @@
|
||||
FidNz 0 9.071585155 -2.359754454
|
||||
FidT9 -6.711765 0.040402876 -3.251600355
|
||||
FidT10 6.711765 0.040402876 -3.251600355
|
||||
E1 5.787677636 5.520863216 -2.577468644
|
||||
E2 5.291804727 6.709097557 0.307434896
|
||||
E3 3.864122447 7.63424051 3.067770143
|
||||
E4 2.868837559 7.145708546 4.989564557
|
||||
E5 1.479340453 5.68662139 6.812878187
|
||||
E6 0 3.806770224 7.891304964
|
||||
E7 -1.223800252 1.558864431 8.44043914
|
||||
E8 4.221901505 7.998817387 -1.354789681
|
||||
E9 2.695405558 8.884820317 1.088308144
|
||||
E10 1.830882336 8.708839134 3.18709115
|
||||
E11 0 7.96264703 5.044718001
|
||||
E12 -1.479340453 5.68662139 6.812878187
|
||||
E13 -2.435870762 3.254307219 7.608766206
|
||||
E14 1.270447661 9.479016328 -0.947183306
|
||||
E15 0 9.087440894 1.333345013
|
||||
E16 0 9.076490798 3.105438474
|
||||
E17 0 9.271139705 -2.211516434
|
||||
E18 -1.830882336 8.708839134 3.18709115
|
||||
E19 -2.868837559 7.145708546 4.989564557
|
||||
E20 -3.825797111 5.121648995 5.942844877
|
||||
E21 -1.270447661 9.479016328 -0.947183306
|
||||
E22 -2.695405558 8.884820317 1.088308144
|
||||
E23 -3.864122447 7.63424051 3.067770143
|
||||
E24 -4.459387187 6.021159964 4.365321482
|
||||
E25 -4.221901505 7.998817387 -1.354789681
|
||||
E26 -5.291804727 6.709097557 0.307434896
|
||||
E27 -5.682547954 5.453384344 2.836565436
|
||||
E28 -5.546670402 4.157847823 4.627615703
|
||||
E29 -4.762196763 2.697832099 6.297663028
|
||||
E30 -3.695490968 0.960411022 7.627828134
|
||||
E31 -1.955187826 -0.684381878 8.564858511
|
||||
E32 -5.787677636 5.520863216 -2.577468644
|
||||
E33 -6.399087198 4.127248875 -0.356852241
|
||||
E34 -6.823959684 2.968422112 2.430080351
|
||||
E35 -6.414469893 1.490027747 4.741794544
|
||||
E36 -5.47913021 0.284948655 6.38332782
|
||||
E37 -3.909902609 -1.519049882 7.764134929
|
||||
E38 -6.550732888 3.611543152 -3.353155926
|
||||
E39 -7.191620108 0.850096251 -0.882936903
|
||||
E40 -7.391919265 0.032151584 2.143634599
|
||||
E41 -6.905051715 -0.800953972 4.600056501
|
||||
E42 -5.956055073 -2.338984312 6.00361353
|
||||
E43 -6.518995129 2.417299399 -5.253637073
|
||||
E44 -6.840717711 1.278489412 -3.5553823
|
||||
E45 -7.304625099 -1.866238006 -0.629182006
|
||||
E46 -7.312517928 -2.298574078 2.385298838
|
||||
E47 -6.737313764 -3.011819533 4.178390203
|
||||
E48 -5.934584124 2.22697797 -7.934360742
|
||||
E49 -6.298127313 0.41663451 -6.069156425
|
||||
E50 -6.78248072 -4.023512045 -0.232191092
|
||||
E51 -6.558030032 -4.667036048 2.749989597
|
||||
E52 -5.831241498 -4.494821698 4.955347697
|
||||
E53 -4.193518856 -4.037020083 6.982920038
|
||||
E54 -2.270752074 -3.414835627 8.204556551
|
||||
E55 0 -2.138343513 8.791875902
|
||||
E56 -6.174969392 -2.458138877 -5.637380998
|
||||
E57 -6.580438308 -3.739554155 -2.991084431
|
||||
E58 -6.034746843 -5.755782196 0.051843011
|
||||
E59 -5.204501802 -6.437833018 2.984444293
|
||||
E60 -4.116929504 -6.061561438 5.365757296
|
||||
E61 -2.344914884 -5.481057427 7.057748614
|
||||
E62 0 -6.676694032 6.465208258
|
||||
E63 -5.333266171 -4.302240169 -5.613509789
|
||||
E64 -5.404091392 -5.870302681 -2.891640039
|
||||
E65 -4.645302298 -7.280552408 0.130139701
|
||||
E66 -3.608293164 -7.665487704 3.129931648
|
||||
E67 -1.844644417 -7.354417376 5.224001733
|
||||
E68 -3.784983913 -6.401014415 -5.260040689
|
||||
E69 -3.528848027 -7.603010836 -2.818037873
|
||||
E70 -2.738838019 -8.607966849 0.239368223
|
||||
E71 -1.404967401 -8.437486994 3.277284901
|
||||
E72 0 -7.829896826 4.687622229
|
||||
E73 -1.929652202 -7.497197868 -5.136777648
|
||||
E74 -1.125731192 -8.455208629 -2.632832329
|
||||
E75 0 -8.996686498 0.487952047
|
||||
E76 1.404967401 -8.437486994 3.277284901
|
||||
E77 1.844644417 -7.354417376 5.224001733
|
||||
E78 2.344914884 -5.481057427 7.057748614
|
||||
E79 2.270752074 -3.414835627 8.204556551
|
||||
E80 1.955187826 -0.684381878 8.564858511
|
||||
E81 0 -7.85891896 -4.945387489
|
||||
E82 1.125731192 -8.455208629 -2.632832329
|
||||
E83 2.738838019 -8.607966849 0.239368223
|
||||
E84 3.608293164 -7.665487704 3.129931648
|
||||
E85 4.116929504 -6.061561438 5.365757296
|
||||
E86 4.193518856 -4.037020083 6.982920038
|
||||
E87 3.909902609 -1.519049882 7.764134929
|
||||
E88 1.929652202 -7.497197868 -5.136777648
|
||||
E89 3.528848027 -7.603010836 -2.818037873
|
||||
E90 4.645302298 -7.280552408 0.130139701
|
||||
E91 5.204501802 -6.437833018 2.984444293
|
||||
E92 5.831241498 -4.494821698 4.955347697
|
||||
E93 5.956055073 -2.338984312 6.00361353
|
||||
E94 3.784983913 -6.401014415 -5.260040689
|
||||
E95 5.404091392 -5.870302681 -2.891640039
|
||||
E96 6.034746843 -5.755782196 0.051843011
|
||||
E97 6.558030032 -4.667036048 2.749989597
|
||||
E98 6.737313764 -3.011819533 4.178390203
|
||||
E99 5.333266171 -4.302240169 -5.613509789
|
||||
E100 6.580438308 -3.739554155 -2.991084431
|
||||
E101 6.78248072 -4.023512045 -0.232191092
|
||||
E102 7.312517928 -2.298574078 2.385298838
|
||||
E103 6.905051715 -0.800953972 4.600056501
|
||||
E104 5.47913021 0.284948655 6.38332782
|
||||
E105 3.695490968 0.960411022 7.627828134
|
||||
E106 1.223800252 1.558864431 8.44043914
|
||||
E107 6.174969392 -2.458138877 -5.637380998
|
||||
E108 7.304625099 -1.866238006 -0.629182006
|
||||
E109 7.391919265 0.032151584 2.143634599
|
||||
E110 6.414469893 1.490027747 4.741794544
|
||||
E111 4.762196763 2.697832099 6.297663028
|
||||
E112 2.435870762 3.254307219 7.608766206
|
||||
E113 6.298127313 0.41663451 -6.069156425
|
||||
E114 6.840717711 1.278489412 -3.5553823
|
||||
E115 7.191620108 0.850096251 -0.882936903
|
||||
E116 6.823959684 2.968422112 2.430080351
|
||||
E117 5.546670402 4.157847823 4.627615703
|
||||
E118 3.825797111 5.121648995 5.942844877
|
||||
E119 5.934584124 2.22697797 -7.934360742
|
||||
E120 6.518995129 2.417299399 -5.253637073
|
||||
E121 6.550732888 3.611543152 -3.353155926
|
||||
E122 6.399087198 4.127248875 -0.356852241
|
||||
E123 5.682547954 5.453384344 2.836565436
|
||||
E124 4.459387187 6.021159964 4.365321482
|
||||
E125 6.118458137 4.523870113 -4.409174427
|
||||
E126 3.743504949 6.649204911 -6.530243068
|
||||
E127 -3.743504949 6.649204911 -6.530243068
|
||||
E128 -6.118458137 4.523870113 -4.409174427
|
||||
132
mne/channels/data/montages/GSN-HydroCel-129.sfp
Normal file
132
mne/channels/data/montages/GSN-HydroCel-129.sfp
Normal file
@@ -0,0 +1,132 @@
|
||||
FidNz 0 9.071585155 -2.359754454
|
||||
FidT9 -6.711765 0.040402876 -3.251600355
|
||||
FidT10 6.711765 0.040402876 -3.251600355
|
||||
E1 5.787677636 5.520863216 -2.577468644
|
||||
E2 5.291804727 6.709097557 0.307434896
|
||||
E3 3.864122447 7.63424051 3.067770143
|
||||
E4 2.868837559 7.145708546 4.989564557
|
||||
E5 1.479340453 5.68662139 6.812878187
|
||||
E6 0 3.806770224 7.891304964
|
||||
E7 -1.223800252 1.558864431 8.44043914
|
||||
E8 4.221901505 7.998817387 -1.354789681
|
||||
E9 2.695405558 8.884820317 1.088308144
|
||||
E10 1.830882336 8.708839134 3.18709115
|
||||
E11 0 7.96264703 5.044718001
|
||||
E12 -1.479340453 5.68662139 6.812878187
|
||||
E13 -2.435870762 3.254307219 7.608766206
|
||||
E14 1.270447661 9.479016328 -0.947183306
|
||||
E15 0 9.087440894 1.333345013
|
||||
E16 0 9.076490798 3.105438474
|
||||
E17 0 9.271139705 -2.211516434
|
||||
E18 -1.830882336 8.708839134 3.18709115
|
||||
E19 -2.868837559 7.145708546 4.989564557
|
||||
E20 -3.825797111 5.121648995 5.942844877
|
||||
E21 -1.270447661 9.479016328 -0.947183306
|
||||
E22 -2.695405558 8.884820317 1.088308144
|
||||
E23 -3.864122447 7.63424051 3.067770143
|
||||
E24 -4.459387187 6.021159964 4.365321482
|
||||
E25 -4.221901505 7.998817387 -1.354789681
|
||||
E26 -5.291804727 6.709097557 0.307434896
|
||||
E27 -5.682547954 5.453384344 2.836565436
|
||||
E28 -5.546670402 4.157847823 4.627615703
|
||||
E29 -4.762196763 2.697832099 6.297663028
|
||||
E30 -3.695490968 0.960411022 7.627828134
|
||||
E31 -1.955187826 -0.684381878 8.564858511
|
||||
E32 -5.787677636 5.520863216 -2.577468644
|
||||
E33 -6.399087198 4.127248875 -0.356852241
|
||||
E34 -6.823959684 2.968422112 2.430080351
|
||||
E35 -6.414469893 1.490027747 4.741794544
|
||||
E36 -5.47913021 0.284948655 6.38332782
|
||||
E37 -3.909902609 -1.519049882 7.764134929
|
||||
E38 -6.550732888 3.611543152 -3.353155926
|
||||
E39 -7.191620108 0.850096251 -0.882936903
|
||||
E40 -7.391919265 0.032151584 2.143634599
|
||||
E41 -6.905051715 -0.800953972 4.600056501
|
||||
E42 -5.956055073 -2.338984312 6.00361353
|
||||
E43 -6.518995129 2.417299399 -5.253637073
|
||||
E44 -6.840717711 1.278489412 -3.5553823
|
||||
E45 -7.304625099 -1.866238006 -0.629182006
|
||||
E46 -7.312517928 -2.298574078 2.385298838
|
||||
E47 -6.737313764 -3.011819533 4.178390203
|
||||
E48 -5.934584124 2.22697797 -7.934360742
|
||||
E49 -6.298127313 0.41663451 -6.069156425
|
||||
E50 -6.78248072 -4.023512045 -0.232191092
|
||||
E51 -6.558030032 -4.667036048 2.749989597
|
||||
E52 -5.831241498 -4.494821698 4.955347697
|
||||
E53 -4.193518856 -4.037020083 6.982920038
|
||||
E54 -2.270752074 -3.414835627 8.204556551
|
||||
E55 0 -2.138343513 8.791875902
|
||||
E56 -6.174969392 -2.458138877 -5.637380998
|
||||
E57 -6.580438308 -3.739554155 -2.991084431
|
||||
E58 -6.034746843 -5.755782196 0.051843011
|
||||
E59 -5.204501802 -6.437833018 2.984444293
|
||||
E60 -4.116929504 -6.061561438 5.365757296
|
||||
E61 -2.344914884 -5.481057427 7.057748614
|
||||
E62 0 -6.676694032 6.465208258
|
||||
E63 -5.333266171 -4.302240169 -5.613509789
|
||||
E64 -5.404091392 -5.870302681 -2.891640039
|
||||
E65 -4.645302298 -7.280552408 0.130139701
|
||||
E66 -3.608293164 -7.665487704 3.129931648
|
||||
E67 -1.844644417 -7.354417376 5.224001733
|
||||
E68 -3.784983913 -6.401014415 -5.260040689
|
||||
E69 -3.528848027 -7.603010836 -2.818037873
|
||||
E70 -2.738838019 -8.607966849 0.239368223
|
||||
E71 -1.404967401 -8.437486994 3.277284901
|
||||
E72 0 -7.829896826 4.687622229
|
||||
E73 -1.929652202 -7.497197868 -5.136777648
|
||||
E74 -1.125731192 -8.455208629 -2.632832329
|
||||
E75 0 -8.996686498 0.487952047
|
||||
E76 1.404967401 -8.437486994 3.277284901
|
||||
E77 1.844644417 -7.354417376 5.224001733
|
||||
E78 2.344914884 -5.481057427 7.057748614
|
||||
E79 2.270752074 -3.414835627 8.204556551
|
||||
E80 1.955187826 -0.684381878 8.564858511
|
||||
E81 0 -7.85891896 -4.945387489
|
||||
E82 1.125731192 -8.455208629 -2.632832329
|
||||
E83 2.738838019 -8.607966849 0.239368223
|
||||
E84 3.608293164 -7.665487704 3.129931648
|
||||
E85 4.116929504 -6.061561438 5.365757296
|
||||
E86 4.193518856 -4.037020083 6.982920038
|
||||
E87 3.909902609 -1.519049882 7.764134929
|
||||
E88 1.929652202 -7.497197868 -5.136777648
|
||||
E89 3.528848027 -7.603010836 -2.818037873
|
||||
E90 4.645302298 -7.280552408 0.130139701
|
||||
E91 5.204501802 -6.437833018 2.984444293
|
||||
E92 5.831241498 -4.494821698 4.955347697
|
||||
E93 5.956055073 -2.338984312 6.00361353
|
||||
E94 3.784983913 -6.401014415 -5.260040689
|
||||
E95 5.404091392 -5.870302681 -2.891640039
|
||||
E96 6.034746843 -5.755782196 0.051843011
|
||||
E97 6.558030032 -4.667036048 2.749989597
|
||||
E98 6.737313764 -3.011819533 4.178390203
|
||||
E99 5.333266171 -4.302240169 -5.613509789
|
||||
E100 6.580438308 -3.739554155 -2.991084431
|
||||
E101 6.78248072 -4.023512045 -0.232191092
|
||||
E102 7.312517928 -2.298574078 2.385298838
|
||||
E103 6.905051715 -0.800953972 4.600056501
|
||||
E104 5.47913021 0.284948655 6.38332782
|
||||
E105 3.695490968 0.960411022 7.627828134
|
||||
E106 1.223800252 1.558864431 8.44043914
|
||||
E107 6.174969392 -2.458138877 -5.637380998
|
||||
E108 7.304625099 -1.866238006 -0.629182006
|
||||
E109 7.391919265 0.032151584 2.143634599
|
||||
E110 6.414469893 1.490027747 4.741794544
|
||||
E111 4.762196763 2.697832099 6.297663028
|
||||
E112 2.435870762 3.254307219 7.608766206
|
||||
E113 6.298127313 0.41663451 -6.069156425
|
||||
E114 6.840717711 1.278489412 -3.5553823
|
||||
E115 7.191620108 0.850096251 -0.882936903
|
||||
E116 6.823959684 2.968422112 2.430080351
|
||||
E117 5.546670402 4.157847823 4.627615703
|
||||
E118 3.825797111 5.121648995 5.942844877
|
||||
E119 5.934584124 2.22697797 -7.934360742
|
||||
E120 6.518995129 2.417299399 -5.253637073
|
||||
E121 6.550732888 3.611543152 -3.353155926
|
||||
E122 6.399087198 4.127248875 -0.356852241
|
||||
E123 5.682547954 5.453384344 2.836565436
|
||||
E124 4.459387187 6.021159964 4.365321482
|
||||
E125 6.118458137 4.523870113 -4.409174427
|
||||
E126 3.743504949 6.649204911 -6.530243068
|
||||
E127 -3.743504949 6.649204911 -6.530243068
|
||||
E128 -6.118458137 4.523870113 -4.409174427
|
||||
Cz 0 0 8.899186843
|
||||
259
mne/channels/data/montages/GSN-HydroCel-256.sfp
Normal file
259
mne/channels/data/montages/GSN-HydroCel-256.sfp
Normal file
@@ -0,0 +1,259 @@
|
||||
FidNz 0.00000 10.56381 -2.05108
|
||||
FidT9 -7.82694 0.45386 -3.76056
|
||||
FidT10 7.82694 0.45386 -3.76056
|
||||
E1 6.96223 5.38242 -2.19061
|
||||
E2 6.48414 6.40424 -0.14004
|
||||
E3 5.69945 7.20796 1.79088
|
||||
E4 4.81093 7.77321 3.65006
|
||||
E5 3.61962 7.47782 5.50947
|
||||
E6 2.25278 6.46157 6.96317
|
||||
E7 1.18879 5.21755 8.13378
|
||||
E8 0.00000 3.59608 8.75111
|
||||
E9 -1.15339 1.51369 9.19904
|
||||
E10 5.94022 7.38337 -1.51513
|
||||
E11 5.07624 8.37264 0.40595
|
||||
E12 3.87946 9.03611 2.51559
|
||||
E13 2.60756 8.97868 4.39107
|
||||
E14 1.23344 8.11574 6.06161
|
||||
E15 0.00000 6.81181 7.28186
|
||||
E16 -1.18879 5.21755 8.13378
|
||||
E17 -2.29559 2.91372 8.55810
|
||||
E18 4.06489 9.40559 -0.89098
|
||||
E19 2.86784 10.01456 0.85212
|
||||
E20 1.42153 10.06322 2.84803
|
||||
E21 0.00000 9.40339 4.65829
|
||||
E22 -1.23344 8.11574 6.06161
|
||||
E23 -2.25278 6.46157 6.96317
|
||||
E24 -3.34467 4.40891 7.67253
|
||||
E25 1.39547 10.65281 -0.61138
|
||||
E26 0.00000 10.68996 1.00542
|
||||
E27 -1.42153 10.06322 2.84803
|
||||
E28 -2.60756 8.97868 4.39107
|
||||
E29 -3.61962 7.47782 5.50947
|
||||
E30 -4.49828 5.59395 6.28801
|
||||
E31 0.00000 10.56381 -2.05108
|
||||
E32 -1.39547 10.65281 -0.61138
|
||||
E33 -2.86784 10.01456 0.85212
|
||||
E34 -3.87946 9.03611 2.51559
|
||||
E35 -4.81093 7.77321 3.65006
|
||||
E36 -5.10466 6.41586 4.77815
|
||||
E37 -4.06489 9.40559 -0.89098
|
||||
E38 -5.07624 8.37264 0.40595
|
||||
E39 -5.69945 7.20796 1.79088
|
||||
E40 -6.16984 6.11292 3.29612
|
||||
E41 -6.01447 4.93908 4.85771
|
||||
E42 -5.33943 3.80220 6.32664
|
||||
E43 -4.64127 2.57224 7.50868
|
||||
E44 -3.53746 1.07133 8.47419
|
||||
E45 -1.99458 -0.60998 9.28870
|
||||
E46 -5.94022 7.38337 -1.51513
|
||||
E47 -6.48414 6.40424 -0.14004
|
||||
E48 -6.97545 5.35131 1.30741
|
||||
E49 -7.10064 4.23342 2.91874
|
||||
E50 -6.86564 3.16240 4.76800
|
||||
E51 -6.11380 1.94213 6.23844
|
||||
E52 -5.31389 0.60081 7.48811
|
||||
E53 -3.72368 -1.14573 8.58697
|
||||
E54 -6.96223 5.38242 -2.19061
|
||||
E55 -7.31613 4.37155 -0.61128
|
||||
E56 -7.66385 3.29619 1.04415
|
||||
E57 -7.62423 2.30205 2.81799
|
||||
E58 -7.36570 1.34368 4.60382
|
||||
E59 -6.70292 0.06004 6.23992
|
||||
E60 -5.40372 -1.61247 7.47343
|
||||
E61 -7.54098 3.05323 -2.51935
|
||||
E62 -7.77059 2.06323 -0.80729
|
||||
E63 -7.96921 1.20744 0.97332
|
||||
E64 -8.06621 0.40109 2.78565
|
||||
E65 -7.60767 -0.56840 4.59939
|
||||
E66 -6.81554 -1.94522 5.93053
|
||||
E67 -7.69315 1.74041 -4.18153
|
||||
E68 -7.74468 1.05291 -2.47059
|
||||
E69 -7.93758 0.07220 -0.96992
|
||||
E70 -7.98893 -0.75212 0.84194
|
||||
E71 -8.05947 -1.50296 2.76753
|
||||
E72 -7.56445 -2.31141 4.30327
|
||||
E73 -7.52646 0.73096 -5.96025
|
||||
E74 -7.76752 -1.84131 -0.92719
|
||||
E75 -7.79279 -2.73175 1.10033
|
||||
E76 -7.46191 -3.49308 2.95937
|
||||
E77 -6.86934 -3.79448 4.89401
|
||||
E78 -5.65276 -3.84604 6.52108
|
||||
E79 -4.12465 -3.54800 7.95405
|
||||
E80 -2.23647 -2.95809 8.92461
|
||||
E81 0.00000 -1.93834 9.45867
|
||||
E82 -7.12806 -0.49186 -7.34929
|
||||
E83 -7.37920 -3.49709 -2.18347
|
||||
E84 -7.52183 -3.70044 -0.51432
|
||||
E85 -7.15214 -4.71132 1.51762
|
||||
E86 -6.48817 -5.15829 3.47294
|
||||
E87 -5.53051 -5.46184 5.50189
|
||||
E88 -4.03809 -5.23807 7.04455
|
||||
E89 -2.29514 -4.87829 8.27223
|
||||
E90 0.00000 -3.74195 9.02791
|
||||
E91 -6.82585 -1.86426 -8.69399
|
||||
E92 -6.74047 -2.84840 -6.74712
|
||||
E93 -6.78379 -4.01784 -5.01755
|
||||
E94 -7.03346 -4.45090 -3.54895
|
||||
E95 -6.99052 -5.01694 -1.88810
|
||||
E96 -6.67571 -5.73608 0.10234
|
||||
E97 -5.96851 -6.52864 2.03293
|
||||
E98 -5.10822 -6.74936 3.92134
|
||||
E99 -3.75216 -6.67734 5.63719
|
||||
E100 -2.14874 -6.29190 7.11453
|
||||
E101 0.00000 -7.15042 6.95434
|
||||
E102 -6.36989 -3.82470 -8.20622
|
||||
E103 -6.24349 -4.62250 -6.49623
|
||||
E104 -6.09726 -5.61090 -4.67894
|
||||
E105 -6.31441 -6.01299 -3.25921
|
||||
E106 -5.98418 -6.74733 -1.40314
|
||||
E107 -5.23709 -7.57398 0.46627
|
||||
E108 -4.29098 -8.11323 2.38442
|
||||
E109 -3.24277 -8.15293 4.22025
|
||||
E110 -1.73181 -7.63850 5.69360
|
||||
E111 -5.63580 -5.80367 -7.74857
|
||||
E112 -5.38718 -6.45180 -6.16689
|
||||
E113 -5.08285 -7.32643 -4.32109
|
||||
E114 -5.27282 -7.46584 -2.87485
|
||||
E115 -4.13620 -8.61230 -1.04503
|
||||
E116 -3.13323 -9.13629 0.81878
|
||||
E117 -1.94503 -9.23415 2.62135
|
||||
E118 -1.09312 -8.74110 4.13810
|
||||
E119 0.00000 -8.09146 5.34087
|
||||
E120 -4.70608 -7.21970 -7.52955
|
||||
E121 -4.20415 -7.81153 -5.84368
|
||||
E122 -3.62234 -8.59338 -4.04243
|
||||
E123 -3.02717 -9.45363 -1.95941
|
||||
E124 -2.20152 -9.70916 -0.63755
|
||||
E125 -1.01682 -9.71656 0.95467
|
||||
E126 0.00000 -9.23206 2.54671
|
||||
E127 1.09312 -8.74110 4.13810
|
||||
E128 1.73181 -7.63850 5.69360
|
||||
E129 2.14874 -6.29190 7.11453
|
||||
E130 2.29514 -4.87829 8.27223
|
||||
E131 2.23647 -2.95809 8.92461
|
||||
E132 1.99458 -0.60998 9.28870
|
||||
E133 -3.45625 -8.57317 -6.82654
|
||||
E134 -2.71528 -8.94646 -5.55376
|
||||
E135 -2.03205 -9.56166 -3.44989
|
||||
E136 -0.91885 -9.62744 -2.21054
|
||||
E137 0.00000 -9.58535 -0.88629
|
||||
E138 1.01682 -9.71656 0.95467
|
||||
E139 1.94503 -9.23415 2.62135
|
||||
E140 3.24277 -8.15293 4.22025
|
||||
E141 3.75216 -6.67734 5.63719
|
||||
E142 4.03809 -5.23807 7.04455
|
||||
E143 4.12465 -3.54800 7.95405
|
||||
E144 3.72368 -1.14573 8.58697
|
||||
E145 -1.88533 -9.22031 -6.79889
|
||||
E146 -1.06111 -9.53369 -5.45325
|
||||
E147 0.00000 -9.48329 -3.84204
|
||||
E148 0.91885 -9.62744 -2.21054
|
||||
E149 2.20152 -9.70916 -0.63755
|
||||
E150 3.13323 -9.13629 0.81878
|
||||
E151 4.29098 -8.11323 2.38442
|
||||
E152 5.10822 -6.74936 3.92134
|
||||
E153 5.53051 -5.46184 5.50189
|
||||
E154 5.65276 -3.84604 6.52108
|
||||
E155 5.40372 -1.61247 7.47343
|
||||
E156 1.06111 -9.53369 -5.45325
|
||||
E157 2.03205 -9.56166 -3.44989
|
||||
E158 3.02717 -9.45363 -1.95941
|
||||
E159 4.13620 -8.61230 -1.04503
|
||||
E160 5.23709 -7.57398 0.46627
|
||||
E161 5.96851 -6.52864 2.03293
|
||||
E162 6.48817 -5.15829 3.47294
|
||||
E163 6.86934 -3.79448 4.89401
|
||||
E164 6.81554 -1.94522 5.93053
|
||||
E165 1.88533 -9.22031 -6.79889
|
||||
E166 2.71528 -8.94646 -5.55376
|
||||
E167 3.62234 -8.59338 -4.04243
|
||||
E168 5.27282 -7.46584 -2.87485
|
||||
E169 5.98418 -6.74733 -1.40314
|
||||
E170 6.67571 -5.73608 0.10234
|
||||
E171 7.15214 -4.71132 1.51762
|
||||
E172 7.46191 -3.49308 2.95937
|
||||
E173 7.56445 -2.31141 4.30327
|
||||
E174 3.45625 -8.57317 -6.82654
|
||||
E175 4.20415 -7.81153 -5.84368
|
||||
E176 5.08285 -7.32643 -4.32109
|
||||
E177 6.31441 -6.01299 -3.25921
|
||||
E178 6.99052 -5.01694 -1.88810
|
||||
E179 7.52183 -3.70044 -0.51432
|
||||
E180 7.79279 -2.73175 1.10033
|
||||
E181 8.05947 -1.50296 2.76753
|
||||
E182 7.60767 -0.56840 4.59939
|
||||
E183 6.70292 0.06004 6.23992
|
||||
E184 5.31389 0.60081 7.48811
|
||||
E185 3.53746 1.07133 8.47419
|
||||
E186 1.15339 1.51369 9.19904
|
||||
E187 4.70608 -7.21970 -7.52955
|
||||
E188 5.38718 -6.45180 -6.16689
|
||||
E189 6.09726 -5.61090 -4.67894
|
||||
E190 7.03346 -4.45090 -3.54895
|
||||
E191 7.37920 -3.49709 -2.18347
|
||||
E192 7.76752 -1.84131 -0.92719
|
||||
E193 7.98893 -0.75212 0.84194
|
||||
E194 8.06621 0.40109 2.78565
|
||||
E195 7.36570 1.34368 4.60382
|
||||
E196 6.11380 1.94213 6.23844
|
||||
E197 4.64127 2.57224 7.50868
|
||||
E198 2.29559 2.91372 8.55810
|
||||
E199 5.63580 -5.80367 -7.74857
|
||||
E200 6.24349 -4.62250 -6.49623
|
||||
E201 6.78379 -4.01784 -5.01755
|
||||
E202 7.93758 0.07220 -0.96992
|
||||
E203 7.96921 1.20744 0.97332
|
||||
E204 7.62423 2.30205 2.81799
|
||||
E205 6.86564 3.16240 4.76800
|
||||
E206 5.33943 3.80220 6.32664
|
||||
E207 3.34467 4.40891 7.67253
|
||||
E208 6.36989 -3.82470 -8.20622
|
||||
E209 6.74047 -2.84840 -6.74712
|
||||
E210 7.74468 1.05291 -2.47059
|
||||
E211 7.77059 2.06323 -0.80729
|
||||
E212 7.66385 3.29619 1.04415
|
||||
E213 7.10064 4.23342 2.91874
|
||||
E214 6.01447 4.93908 4.85771
|
||||
E215 4.49828 5.59395 6.28801
|
||||
E216 6.82585 -1.86426 -8.69399
|
||||
E217 7.12806 -0.49186 -7.34929
|
||||
E218 7.52646 0.73096 -5.96025
|
||||
E219 7.69315 1.74041 -4.18153
|
||||
E220 7.54098 3.05323 -2.51935
|
||||
E221 7.31613 4.37155 -0.61128
|
||||
E222 6.97545 5.35131 1.30741
|
||||
E223 6.16984 6.11292 3.29612
|
||||
E224 5.10466 6.41586 4.77815
|
||||
E225 7.62652 3.24782 -4.40493
|
||||
E226 7.24346 4.80120 -4.77214
|
||||
E227 7.55603 2.52648 -6.26962
|
||||
E228 7.38028 1.35743 -7.84943
|
||||
E229 6.86103 -0.14155 -9.14913
|
||||
E230 6.74159 5.99080 -5.83258
|
||||
E231 7.22458 4.14855 -6.88918
|
||||
E232 7.31422 3.19647 -8.44268
|
||||
E233 7.09051 1.66694 -9.77213
|
||||
E234 5.88750 7.22674 -6.54736
|
||||
E235 6.65934 5.64059 -7.65729
|
||||
E236 6.75138 4.62427 -9.03070
|
||||
E237 6.58044 3.33743 -10.39707
|
||||
E238 4.69146 8.22723 -6.78260
|
||||
E239 5.81346 6.42065 -8.65026
|
||||
E240 6.04363 5.37051 -9.81363
|
||||
E241 -4.69146 8.22723 -6.78260
|
||||
E242 -5.81346 6.42065 -8.65026
|
||||
E243 -6.04363 5.37051 -9.81363
|
||||
E244 -5.88750 7.22674 -6.54736
|
||||
E245 -6.65934 5.64059 -7.65729
|
||||
E246 -6.75138 4.62427 -9.03070
|
||||
E247 -6.58044 3.33743 -10.39707
|
||||
E248 -6.74159 5.99080 -5.83258
|
||||
E249 -7.22458 4.14855 -6.88918
|
||||
E250 -7.31422 3.19647 -8.44268
|
||||
E251 -7.09051 1.66694 -9.77213
|
||||
E252 -7.24346 4.80120 -4.77214
|
||||
E253 -7.62652 3.24782 -4.40493
|
||||
E254 -7.55603 2.52648 -6.26962
|
||||
E255 -7.38028 1.35743 -7.84943
|
||||
E256 -6.86103 -0.14155 -9.14913
|
||||
260
mne/channels/data/montages/GSN-HydroCel-257.sfp
Normal file
260
mne/channels/data/montages/GSN-HydroCel-257.sfp
Normal file
@@ -0,0 +1,260 @@
|
||||
FidNz 0.00000 10.56381 -2.05108
|
||||
FidT9 -7.82694 0.45386 -3.76056
|
||||
FidT10 7.82694 0.45386 -3.76056
|
||||
E1 6.96223 5.38242 -2.19061
|
||||
E2 6.48414 6.40424 -0.14004
|
||||
E3 5.69945 7.20796 1.79088
|
||||
E4 4.81093 7.77321 3.65006
|
||||
E5 3.61962 7.47782 5.50947
|
||||
E6 2.25278 6.46157 6.96317
|
||||
E7 1.18879 5.21755 8.13378
|
||||
E8 0.00000 3.59608 8.75111
|
||||
E9 -1.15339 1.51369 9.19904
|
||||
E10 5.94022 7.38337 -1.51513
|
||||
E11 5.07624 8.37264 0.40595
|
||||
E12 3.87946 9.03611 2.51559
|
||||
E13 2.60756 8.97868 4.39107
|
||||
E14 1.23344 8.11574 6.06161
|
||||
E15 0.00000 6.81181 7.28186
|
||||
E16 -1.18879 5.21755 8.13378
|
||||
E17 -2.29559 2.91372 8.55810
|
||||
E18 4.06489 9.40559 -0.89098
|
||||
E19 2.86784 10.01456 0.85212
|
||||
E20 1.42153 10.06322 2.84803
|
||||
E21 0.00000 9.40339 4.65829
|
||||
E22 -1.23344 8.11574 6.06161
|
||||
E23 -2.25278 6.46157 6.96317
|
||||
E24 -3.34467 4.40891 7.67253
|
||||
E25 1.39547 10.65281 -0.61138
|
||||
E26 0.00000 10.68996 1.00542
|
||||
E27 -1.42153 10.06322 2.84803
|
||||
E28 -2.60756 8.97868 4.39107
|
||||
E29 -3.61962 7.47782 5.50947
|
||||
E30 -4.49828 5.59395 6.28801
|
||||
E31 0.00000 10.56381 -2.05108
|
||||
E32 -1.39547 10.65281 -0.61138
|
||||
E33 -2.86784 10.01456 0.85212
|
||||
E34 -3.87946 9.03611 2.51559
|
||||
E35 -4.81093 7.77321 3.65006
|
||||
E36 -5.10466 6.41586 4.77815
|
||||
E37 -4.06489 9.40559 -0.89098
|
||||
E38 -5.07624 8.37264 0.40595
|
||||
E39 -5.69945 7.20796 1.79088
|
||||
E40 -6.16984 6.11292 3.29612
|
||||
E41 -6.01447 4.93908 4.85771
|
||||
E42 -5.33943 3.80220 6.32664
|
||||
E43 -4.64127 2.57224 7.50868
|
||||
E44 -3.53746 1.07133 8.47419
|
||||
E45 -1.99458 -0.60998 9.28870
|
||||
E46 -5.94022 7.38337 -1.51513
|
||||
E47 -6.48414 6.40424 -0.14004
|
||||
E48 -6.97545 5.35131 1.30741
|
||||
E49 -7.10064 4.23342 2.91874
|
||||
E50 -6.86564 3.16240 4.76800
|
||||
E51 -6.11380 1.94213 6.23844
|
||||
E52 -5.31389 0.60081 7.48811
|
||||
E53 -3.72368 -1.14573 8.58697
|
||||
E54 -6.96223 5.38242 -2.19061
|
||||
E55 -7.31613 4.37155 -0.61128
|
||||
E56 -7.66385 3.29619 1.04415
|
||||
E57 -7.62423 2.30205 2.81799
|
||||
E58 -7.36570 1.34368 4.60382
|
||||
E59 -6.70292 0.06004 6.23992
|
||||
E60 -5.40372 -1.61247 7.47343
|
||||
E61 -7.54098 3.05323 -2.51935
|
||||
E62 -7.77059 2.06323 -0.80729
|
||||
E63 -7.96921 1.20744 0.97332
|
||||
E64 -8.06621 0.40109 2.78565
|
||||
E65 -7.60767 -0.56840 4.59939
|
||||
E66 -6.81554 -1.94522 5.93053
|
||||
E67 -7.69315 1.74041 -4.18153
|
||||
E68 -7.74468 1.05291 -2.47059
|
||||
E69 -7.93758 0.07220 -0.96992
|
||||
E70 -7.98893 -0.75212 0.84194
|
||||
E71 -8.05947 -1.50296 2.76753
|
||||
E72 -7.56445 -2.31141 4.30327
|
||||
E73 -7.52646 0.73096 -5.96025
|
||||
E74 -7.76752 -1.84131 -0.92719
|
||||
E75 -7.79279 -2.73175 1.10033
|
||||
E76 -7.46191 -3.49308 2.95937
|
||||
E77 -6.86934 -3.79448 4.89401
|
||||
E78 -5.65276 -3.84604 6.52108
|
||||
E79 -4.12465 -3.54800 7.95405
|
||||
E80 -2.23647 -2.95809 8.92461
|
||||
E81 0.00000 -1.93834 9.45867
|
||||
E82 -7.12806 -0.49186 -7.34929
|
||||
E83 -7.37920 -3.49709 -2.18347
|
||||
E84 -7.52183 -3.70044 -0.51432
|
||||
E85 -7.15214 -4.71132 1.51762
|
||||
E86 -6.48817 -5.15829 3.47294
|
||||
E87 -5.53051 -5.46184 5.50189
|
||||
E88 -4.03809 -5.23807 7.04455
|
||||
E89 -2.29514 -4.87829 8.27223
|
||||
E90 0.00000 -3.74195 9.02791
|
||||
E91 -6.82585 -1.86426 -8.69399
|
||||
E92 -6.74047 -2.84840 -6.74712
|
||||
E93 -6.78379 -4.01784 -5.01755
|
||||
E94 -7.03346 -4.45090 -3.54895
|
||||
E95 -6.99052 -5.01694 -1.88810
|
||||
E96 -6.67571 -5.73608 0.10234
|
||||
E97 -5.96851 -6.52864 2.03293
|
||||
E98 -5.10822 -6.74936 3.92134
|
||||
E99 -3.75216 -6.67734 5.63719
|
||||
E100 -2.14874 -6.29190 7.11453
|
||||
E101 0.00000 -7.15042 6.95434
|
||||
E102 -6.36989 -3.82470 -8.20622
|
||||
E103 -6.24349 -4.62250 -6.49623
|
||||
E104 -6.09726 -5.61090 -4.67894
|
||||
E105 -6.31441 -6.01299 -3.25921
|
||||
E106 -5.98418 -6.74733 -1.40314
|
||||
E107 -5.23709 -7.57398 0.46627
|
||||
E108 -4.29098 -8.11323 2.38442
|
||||
E109 -3.24277 -8.15293 4.22025
|
||||
E110 -1.73181 -7.63850 5.69360
|
||||
E111 -5.63580 -5.80367 -7.74857
|
||||
E112 -5.38718 -6.45180 -6.16689
|
||||
E113 -5.08285 -7.32643 -4.32109
|
||||
E114 -5.27282 -7.46584 -2.87485
|
||||
E115 -4.13620 -8.61230 -1.04503
|
||||
E116 -3.13323 -9.13629 0.81878
|
||||
E117 -1.94503 -9.23415 2.62135
|
||||
E118 -1.09312 -8.74110 4.13810
|
||||
E119 0.00000 -8.09146 5.34087
|
||||
E120 -4.70608 -7.21970 -7.52955
|
||||
E121 -4.20415 -7.81153 -5.84368
|
||||
E122 -3.62234 -8.59338 -4.04243
|
||||
E123 -3.02717 -9.45363 -1.95941
|
||||
E124 -2.20152 -9.70916 -0.63755
|
||||
E125 -1.01682 -9.71656 0.95467
|
||||
E126 0.00000 -9.23206 2.54671
|
||||
E127 1.09312 -8.74110 4.13810
|
||||
E128 1.73181 -7.63850 5.69360
|
||||
E129 2.14874 -6.29190 7.11453
|
||||
E130 2.29514 -4.87829 8.27223
|
||||
E131 2.23647 -2.95809 8.92461
|
||||
E132 1.99458 -0.60998 9.28870
|
||||
E133 -3.45625 -8.57317 -6.82654
|
||||
E134 -2.71528 -8.94646 -5.55376
|
||||
E135 -2.03205 -9.56166 -3.44989
|
||||
E136 -0.91885 -9.62744 -2.21054
|
||||
E137 0.00000 -9.58535 -0.88629
|
||||
E138 1.01682 -9.71656 0.95467
|
||||
E139 1.94503 -9.23415 2.62135
|
||||
E140 3.24277 -8.15293 4.22025
|
||||
E141 3.75216 -6.67734 5.63719
|
||||
E142 4.03809 -5.23807 7.04455
|
||||
E143 4.12465 -3.54800 7.95405
|
||||
E144 3.72368 -1.14573 8.58697
|
||||
E145 -1.88533 -9.22031 -6.79889
|
||||
E146 -1.06111 -9.53369 -5.45325
|
||||
E147 0.00000 -9.48329 -3.84204
|
||||
E148 0.91885 -9.62744 -2.21054
|
||||
E149 2.20152 -9.70916 -0.63755
|
||||
E150 3.13323 -9.13629 0.81878
|
||||
E151 4.29098 -8.11323 2.38442
|
||||
E152 5.10822 -6.74936 3.92134
|
||||
E153 5.53051 -5.46184 5.50189
|
||||
E154 5.65276 -3.84604 6.52108
|
||||
E155 5.40372 -1.61247 7.47343
|
||||
E156 1.06111 -9.53369 -5.45325
|
||||
E157 2.03205 -9.56166 -3.44989
|
||||
E158 3.02717 -9.45363 -1.95941
|
||||
E159 4.13620 -8.61230 -1.04503
|
||||
E160 5.23709 -7.57398 0.46627
|
||||
E161 5.96851 -6.52864 2.03293
|
||||
E162 6.48817 -5.15829 3.47294
|
||||
E163 6.86934 -3.79448 4.89401
|
||||
E164 6.81554 -1.94522 5.93053
|
||||
E165 1.88533 -9.22031 -6.79889
|
||||
E166 2.71528 -8.94646 -5.55376
|
||||
E167 3.62234 -8.59338 -4.04243
|
||||
E168 5.27282 -7.46584 -2.87485
|
||||
E169 5.98418 -6.74733 -1.40314
|
||||
E170 6.67571 -5.73608 0.10234
|
||||
E171 7.15214 -4.71132 1.51762
|
||||
E172 7.46191 -3.49308 2.95937
|
||||
E173 7.56445 -2.31141 4.30327
|
||||
E174 3.45625 -8.57317 -6.82654
|
||||
E175 4.20415 -7.81153 -5.84368
|
||||
E176 5.08285 -7.32643 -4.32109
|
||||
E177 6.31441 -6.01299 -3.25921
|
||||
E178 6.99052 -5.01694 -1.88810
|
||||
E179 7.52183 -3.70044 -0.51432
|
||||
E180 7.79279 -2.73175 1.10033
|
||||
E181 8.05947 -1.50296 2.76753
|
||||
E182 7.60767 -0.56840 4.59939
|
||||
E183 6.70292 0.06004 6.23992
|
||||
E184 5.31389 0.60081 7.48811
|
||||
E185 3.53746 1.07133 8.47419
|
||||
E186 1.15339 1.51369 9.19904
|
||||
E187 4.70608 -7.21970 -7.52955
|
||||
E188 5.38718 -6.45180 -6.16689
|
||||
E189 6.09726 -5.61090 -4.67894
|
||||
E190 7.03346 -4.45090 -3.54895
|
||||
E191 7.37920 -3.49709 -2.18347
|
||||
E192 7.76752 -1.84131 -0.92719
|
||||
E193 7.98893 -0.75212 0.84194
|
||||
E194 8.06621 0.40109 2.78565
|
||||
E195 7.36570 1.34368 4.60382
|
||||
E196 6.11380 1.94213 6.23844
|
||||
E197 4.64127 2.57224 7.50868
|
||||
E198 2.29559 2.91372 8.55810
|
||||
E199 5.63580 -5.80367 -7.74857
|
||||
E200 6.24349 -4.62250 -6.49623
|
||||
E201 6.78379 -4.01784 -5.01755
|
||||
E202 7.93758 0.07220 -0.96992
|
||||
E203 7.96921 1.20744 0.97332
|
||||
E204 7.62423 2.30205 2.81799
|
||||
E205 6.86564 3.16240 4.76800
|
||||
E206 5.33943 3.80220 6.32664
|
||||
E207 3.34467 4.40891 7.67253
|
||||
E208 6.36989 -3.82470 -8.20622
|
||||
E209 6.74047 -2.84840 -6.74712
|
||||
E210 7.74468 1.05291 -2.47059
|
||||
E211 7.77059 2.06323 -0.80729
|
||||
E212 7.66385 3.29619 1.04415
|
||||
E213 7.10064 4.23342 2.91874
|
||||
E214 6.01447 4.93908 4.85771
|
||||
E215 4.49828 5.59395 6.28801
|
||||
E216 6.82585 -1.86426 -8.69399
|
||||
E217 7.12806 -0.49186 -7.34929
|
||||
E218 7.52646 0.73096 -5.96025
|
||||
E219 7.69315 1.74041 -4.18153
|
||||
E220 7.54098 3.05323 -2.51935
|
||||
E221 7.31613 4.37155 -0.61128
|
||||
E222 6.97545 5.35131 1.30741
|
||||
E223 6.16984 6.11292 3.29612
|
||||
E224 5.10466 6.41586 4.77815
|
||||
E225 7.62652 3.24782 -4.40493
|
||||
E226 7.24346 4.80120 -4.77214
|
||||
E227 7.55603 2.52648 -6.26962
|
||||
E228 7.38028 1.35743 -7.84943
|
||||
E229 6.86103 -0.14155 -9.14913
|
||||
E230 6.74159 5.99080 -5.83258
|
||||
E231 7.22458 4.14855 -6.88918
|
||||
E232 7.31422 3.19647 -8.44268
|
||||
E233 7.09051 1.66694 -9.77213
|
||||
E234 5.88750 7.22674 -6.54736
|
||||
E235 6.65934 5.64059 -7.65729
|
||||
E236 6.75138 4.62427 -9.03070
|
||||
E237 6.58044 3.33743 -10.39707
|
||||
E238 4.69146 8.22723 -6.78260
|
||||
E239 5.81346 6.42065 -8.65026
|
||||
E240 6.04363 5.37051 -9.81363
|
||||
E241 -4.69146 8.22723 -6.78260
|
||||
E242 -5.81346 6.42065 -8.65026
|
||||
E243 -6.04363 5.37051 -9.81363
|
||||
E244 -5.88750 7.22674 -6.54736
|
||||
E245 -6.65934 5.64059 -7.65729
|
||||
E246 -6.75138 4.62427 -9.03070
|
||||
E247 -6.58044 3.33743 -10.39707
|
||||
E248 -6.74159 5.99080 -5.83258
|
||||
E249 -7.22458 4.14855 -6.88918
|
||||
E250 -7.31422 3.19647 -8.44268
|
||||
E251 -7.09051 1.66694 -9.77213
|
||||
E252 -7.24346 4.80120 -4.77214
|
||||
E253 -7.62652 3.24782 -4.40493
|
||||
E254 -7.55603 2.52648 -6.26962
|
||||
E255 -7.38028 1.35743 -7.84943
|
||||
E256 -6.86103 -0.14155 -9.14913
|
||||
Cz 0.00000 0.00000 9.68308
|
||||
36
mne/channels/data/montages/GSN-HydroCel-32.sfp
Normal file
36
mne/channels/data/montages/GSN-HydroCel-32.sfp
Normal file
@@ -0,0 +1,36 @@
|
||||
FidNz 0 9.071585155 -2.359754454
|
||||
FidT9 -6.711765 0.040402876 -3.251600355
|
||||
FidT10 6.711765 0.040402876 -3.251600355
|
||||
E1 -2.695405558 8.884820317 1.088308144
|
||||
E2 2.695405558 8.884820317 1.088308144
|
||||
E3 -4.459387187 6.021159964 4.365321482
|
||||
E4 4.459387187 6.021159964 4.365321482
|
||||
E5 -5.47913021 0.284948655 6.38332782
|
||||
E6 5.47913021 0.284948655 6.38332782
|
||||
E7 -5.831241498 -4.494821698 4.955347697
|
||||
E8 5.831241498 -4.494821698 4.955347697
|
||||
E9 -2.738838019 -8.607966849 0.239368223
|
||||
E10 2.738838019 -8.607966849 0.239368223
|
||||
E11 -6.399087198 4.127248875 -0.356852241
|
||||
E12 6.399087198 4.127248875 -0.356852241
|
||||
E13 -7.304625099 -1.866238006 -0.629182006
|
||||
E14 7.304625099 -1.866238006 -0.629182006
|
||||
E15 -6.034746843 -5.755782196 0.051843011
|
||||
E16 6.034746843 -5.755782196 0.051843011
|
||||
E17 0 7.96264703 5.044718001
|
||||
E18 0 9.271139705 -2.211516434
|
||||
E19 0 -6.676694032 6.465208258
|
||||
E20 0 -8.996686498 0.487952047
|
||||
E21 -6.518995129 2.417299399 -5.253637073
|
||||
E22 6.518995129 2.417299399 -5.253637073
|
||||
E23 -6.174969392 -2.458138877 -5.637380998
|
||||
E24 6.174969392 -2.458138877 -5.637380998
|
||||
E25 -3.784983913 -6.401014415 -5.260040689
|
||||
E26 3.784983913 -6.401014415 -5.260040689
|
||||
E27 0 9.087440894 1.333345013
|
||||
E28 0 3.806770224 7.891304964
|
||||
E29 -3.743504949 6.649204911 -6.530243068
|
||||
E30 3.743504949 6.649204911 -6.530243068
|
||||
E31 -6.118458137 4.523870113 -4.409174427
|
||||
E32 6.118458137 4.523870113 -4.409174427
|
||||
Cz 0 0 8.899186843
|
||||
67
mne/channels/data/montages/GSN-HydroCel-64_1.0.sfp
Normal file
67
mne/channels/data/montages/GSN-HydroCel-64_1.0.sfp
Normal file
@@ -0,0 +1,67 @@
|
||||
FidNz 0.00000 10.3556 -2.69376
|
||||
FidT9 -7.18083 0.0461216 -3.71184
|
||||
FidT10 6.24270 0.0461216 -3.71184
|
||||
E1 6.60688 6.30230 -2.94229
|
||||
E2 4.41106 8.71481 3.50199
|
||||
E3 3.27490 8.15713 5.69580
|
||||
E4 0.00000 4.34559 9.00826
|
||||
E5 3.07692 10.1424 1.24235
|
||||
E6 0.00000 9.08970 5.75876
|
||||
E7 -2.78065 3.71493 8.68573
|
||||
E8 0.00000 10.3612 3.54499
|
||||
E9 -3.2749 8.15713 5.6958
|
||||
E10 -3.07692 10.1424 1.24235
|
||||
E11 -4.41106 8.71481 3.50199
|
||||
E12 -5.09058 6.87341 4.98320
|
||||
E13 -6.48687 6.22527 3.23806
|
||||
E14 -6.33176 4.74636 5.28262
|
||||
E15 -5.43625 3.07969 7.18905
|
||||
E16 -4.21856 1.09635 8.70749
|
||||
E17 -6.60688 6.30230 -2.94229
|
||||
E18 -7.30483 4.71143 -0.407362
|
||||
E19 -7.78984 3.38858 2.77404
|
||||
E20 -6.25466 0.325281 7.28684
|
||||
E21 -4.46332 -1.73406 8.86309
|
||||
E22 -7.88241 -0.914323 5.25116
|
||||
E23 -7.80897 1.45945 -4.05862
|
||||
E24 -8.33854 -2.13039 -0.718238
|
||||
E25 -8.34755 -2.62392 2.72292
|
||||
E26 -7.69093 -3.43812 4.76981
|
||||
E27 -7.48627 -5.32762 3.13923
|
||||
E28 -6.65661 -5.13103 5.65674
|
||||
E29 -7.51185 -4.26886 -3.41445
|
||||
E30 -6.88892 -6.57047 0.0591810
|
||||
E31 -4.69965 -6.91953 6.12524
|
||||
E32 -6.16900 -6.70120 -3.30093
|
||||
E33 -2.10574 -8.39538 5.96342
|
||||
E34 0.00000 -4.98271 9.28085
|
||||
E35 -3.12650 -9.82636 0.273249
|
||||
E36 0.00000 -8.93816 5.35112
|
||||
E37 0.00000 -10.2701 0.557018
|
||||
E38 2.10574 -8.39538 5.96342
|
||||
E39 3.12650 -9.82636 0.273249
|
||||
E40 4.69965 -6.91953 6.12524
|
||||
E41 4.46332 -1.73406 8.86309
|
||||
E42 6.65661 -5.13103 5.65674
|
||||
E43 6.16900 -6.70120 -3.30093
|
||||
E44 6.88892 -6.57047 0.0591810
|
||||
E45 7.48627 -5.32762 3.13923
|
||||
E46 7.69093 -3.43812 4.76981
|
||||
E47 7.51185 -4.26886 -3.41445
|
||||
E48 8.34755 -2.62392 2.72292
|
||||
E49 7.88241 -0.914323 5.25116
|
||||
E50 6.25466 0.325281 7.28684
|
||||
E51 4.21856 1.09635 8.70749
|
||||
E52 8.33854 -2.13039 -0.718238
|
||||
E53 5.43625 3.07969 7.18905
|
||||
E54 2.78065 3.71493 8.68573
|
||||
E55 7.80897 1.45945 -4.05862
|
||||
E56 7.78984 3.38858 2.77404
|
||||
E57 6.33176 4.74636 5.28262
|
||||
E58 7.30483 4.71143 -0.407362
|
||||
E59 6.48687 6.22527 3.23806
|
||||
E60 5.09058 6.87341 4.98320
|
||||
E61 6.98448 5.16419 -5.03326
|
||||
E62 4.27337 7.59035 -7.45455
|
||||
E63 -4.27337 7.59035 -7.45455
|
||||
E64 -6.98448 5.16419 -5.03326
|
||||
68
mne/channels/data/montages/GSN-HydroCel-65_1.0.sfp
Normal file
68
mne/channels/data/montages/GSN-HydroCel-65_1.0.sfp
Normal file
@@ -0,0 +1,68 @@
|
||||
FidNz 0.00000 10.3556 -2.69376
|
||||
FidT9 -7.18083 0.0461216 -3.71184
|
||||
FidT10 6.24270 0.0461216 -3.71184
|
||||
E1 6.60688 6.30230 -2.94229
|
||||
E2 4.41106 8.71481 3.50199
|
||||
E3 3.27490 8.15713 5.69580
|
||||
E4 0.00000 4.34559 9.00826
|
||||
E5 3.07692 10.1424 1.24235
|
||||
E6 0.00000 9.08970 5.75876
|
||||
E7 -2.78065 3.71493 8.68573
|
||||
E8 0.00000 10.3612 3.54499
|
||||
E9 -3.2749 8.15713 5.6958
|
||||
E10 -3.07692 10.1424 1.24235
|
||||
E11 -4.41106 8.71481 3.50199
|
||||
E12 -5.09058 6.87341 4.98320
|
||||
E13 -6.48687 6.22527 3.23806
|
||||
E14 -6.33176 4.74636 5.28262
|
||||
E15 -5.43625 3.07969 7.18905
|
||||
E16 -4.21856 1.09635 8.70749
|
||||
E17 -6.60688 6.30230 -2.94229
|
||||
E18 -7.30483 4.71143 -0.407362
|
||||
E19 -7.78984 3.38858 2.77404
|
||||
E20 -6.25466 0.325281 7.28684
|
||||
E21 -4.46332 -1.73406 8.86309
|
||||
E22 -7.88241 -0.914323 5.25116
|
||||
E23 -7.80897 1.45945 -4.05862
|
||||
E24 -8.33854 -2.13039 -0.718238
|
||||
E25 -8.34755 -2.62392 2.72292
|
||||
E26 -7.69093 -3.43812 4.76981
|
||||
E27 -7.48627 -5.32762 3.13923
|
||||
E28 -6.65661 -5.13103 5.65674
|
||||
E29 -7.51185 -4.26886 -3.41445
|
||||
E30 -6.88892 -6.57047 0.0591810
|
||||
E31 -4.69965 -6.91953 6.12524
|
||||
E32 -6.16900 -6.70120 -3.30093
|
||||
E33 -2.10574 -8.39538 5.96342
|
||||
E34 0.00000 -4.98271 9.28085
|
||||
E35 -3.12650 -9.82636 0.273249
|
||||
E36 0.00000 -8.93816 5.35112
|
||||
E37 0.00000 -10.2701 0.557018
|
||||
E38 2.10574 -8.39538 5.96342
|
||||
E39 3.12650 -9.82636 0.273249
|
||||
E40 4.69965 -6.91953 6.12524
|
||||
E41 4.46332 -1.73406 8.86309
|
||||
E42 6.65661 -5.13103 5.65674
|
||||
E43 6.16900 -6.70120 -3.30093
|
||||
E44 6.88892 -6.57047 0.0591810
|
||||
E45 7.48627 -5.32762 3.13923
|
||||
E46 7.69093 -3.43812 4.76981
|
||||
E47 7.51185 -4.26886 -3.41445
|
||||
E48 8.34755 -2.62392 2.72292
|
||||
E49 7.88241 -0.914323 5.25116
|
||||
E50 6.25466 0.325281 7.28684
|
||||
E51 4.21856 1.09635 8.70749
|
||||
E52 8.33854 -2.13039 -0.718238
|
||||
E53 5.43625 3.07969 7.18905
|
||||
E54 2.78065 3.71493 8.68573
|
||||
E55 7.80897 1.45945 -4.05862
|
||||
E56 7.78984 3.38858 2.77404
|
||||
E57 6.33176 4.74636 5.28262
|
||||
E58 7.30483 4.71143 -0.407362
|
||||
E59 6.48687 6.22527 3.23806
|
||||
E60 5.09058 6.87341 4.98320
|
||||
E61 6.98448 5.16419 -5.03326
|
||||
E62 4.27337 7.59035 -7.45455
|
||||
E63 -4.27337 7.59035 -7.45455
|
||||
E64 -6.98448 5.16419 -5.03326
|
||||
Cz 0.00000 0.00000 10.1588
|
||||
48
mne/channels/data/montages/artinis-brite23.elc
Normal file
48
mne/channels/data/montages/artinis-brite23.elc
Normal file
@@ -0,0 +1,48 @@
|
||||
# ASA optode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 21
|
||||
Positions
|
||||
-4.62 82.33 -45.74
|
||||
79.66 -18.72 -45.89
|
||||
-81.41 -17.18 -45.56
|
||||
65.18 27.28 35.31
|
||||
48.62 59.71 22.68
|
||||
18.95 72.41 38.32
|
||||
-3.97 79.74 30.28
|
||||
-25.96 72.19 35.16
|
||||
-52.51 60.53 14.54
|
||||
-66.37 32.04 31.08
|
||||
76.10 -0.29 31.24
|
||||
65.61 -0.26 56.15
|
||||
64.93 42.43 8.29
|
||||
43.32 46.36 50.77
|
||||
21.58 82.45 1.06
|
||||
-2.91 59.57 61.59
|
||||
-29.62 79.35 2.38
|
||||
-48.13 44.76 49.15
|
||||
-67.68 43.26 -3.18
|
||||
-65.37 4.89 56.36
|
||||
-77.24 5.88 27.58
|
||||
Labels
|
||||
Nz
|
||||
RPA
|
||||
LPA
|
||||
D1
|
||||
D2
|
||||
D3
|
||||
D4
|
||||
D5
|
||||
D6
|
||||
D7
|
||||
S1
|
||||
S2
|
||||
S3
|
||||
S4
|
||||
S5
|
||||
S6
|
||||
S7
|
||||
S8
|
||||
S9
|
||||
S10
|
||||
S11
|
||||
32
mne/channels/data/montages/artinis-octamon.elc
Normal file
32
mne/channels/data/montages/artinis-octamon.elc
Normal file
@@ -0,0 +1,32 @@
|
||||
# ASA optode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 13
|
||||
Positions
|
||||
0.96 83.56 -48.63
|
||||
80.25 -19.67 -43.88
|
||||
-82.58 -20.09 -43.10
|
||||
47.77 65.28 7.28
|
||||
-46.45 67.76 8.81
|
||||
63.88 34.84 28.34
|
||||
64.96 45.02 -10.31
|
||||
22.07 74.86 31.03
|
||||
17.84 84.96 -10.84
|
||||
-10.81 77.96 32.10
|
||||
-15.96 85.24 -7.41
|
||||
-61.78 40.78 29.92
|
||||
-65.28 48.14 -10.73
|
||||
Labels
|
||||
Nz
|
||||
RPA
|
||||
LPA
|
||||
D1
|
||||
D2
|
||||
S1
|
||||
S2
|
||||
S3
|
||||
S4
|
||||
S5
|
||||
S6
|
||||
S7
|
||||
S8
|
||||
132
mne/channels/data/montages/biosemi128.txt
Normal file
132
mne/channels/data/montages/biosemi128.txt
Normal file
@@ -0,0 +1,132 @@
|
||||
Site Theta Phi
|
||||
A1 0 0
|
||||
A2 11.5 -90
|
||||
A3 23 -90
|
||||
A4 34.5 -90
|
||||
A5 -46 67.5
|
||||
A6 -46 45
|
||||
A7 -57.5 45
|
||||
A8 -69 54
|
||||
A9 -80.5 54
|
||||
A10 -92 54
|
||||
A11 -103.5 54
|
||||
A12 -115 54
|
||||
A13 -115 72
|
||||
A14 -103.5 72
|
||||
A15 -92 72
|
||||
A16 -80.5 72
|
||||
A17 -69 72
|
||||
A18 -57.5 67.5
|
||||
A19 46 -90
|
||||
A20 57.5 -90
|
||||
A21 69 -90
|
||||
A22 80.5 -90
|
||||
A23 92 -90
|
||||
A24 103.5 -90
|
||||
A25 115 -90
|
||||
A26 115 -72
|
||||
A27 103.5 -72
|
||||
A28 92 -72
|
||||
A29 80.5 -72
|
||||
A30 69 -72
|
||||
A31 57.5 -67.5
|
||||
A32 46 -67.5
|
||||
B1 11.5 -18
|
||||
B2 23 -45
|
||||
B3 46 -45
|
||||
B4 57.5 -45
|
||||
B5 69 -54
|
||||
B6 80.5 -54
|
||||
B7 92 -54
|
||||
B8 103.5 -54
|
||||
B9 115 -54
|
||||
B10 103.5 -36
|
||||
B11 92 -36
|
||||
B12 80.5 -36
|
||||
B13 69 -36
|
||||
B14 92 -18
|
||||
B15 80.5 -18
|
||||
B16 69 -18
|
||||
B17 57.5 -22.5
|
||||
B18 46 -22.5
|
||||
B19 34.5 -30
|
||||
B20 23 0
|
||||
B21 34.5 0
|
||||
B22 46 0
|
||||
B23 57.5 0
|
||||
B24 69 0
|
||||
B25 80.5 0
|
||||
B26 92 0
|
||||
B27 92 18
|
||||
B28 80.5 18
|
||||
B29 69 18
|
||||
B30 57.5 22.5
|
||||
B31 46 22.5
|
||||
B32 34.5 30
|
||||
C1 11.5 54
|
||||
C2 23 45
|
||||
C3 46 45
|
||||
C4 57.5 45
|
||||
C5 69 36
|
||||
C6 80.5 36
|
||||
C7 92 36
|
||||
C8 92 54
|
||||
C9 80.5 54
|
||||
C10 69 54
|
||||
C11 34.5 60
|
||||
C12 46 67.5
|
||||
C13 57.5 67.5
|
||||
C14 69 72
|
||||
C15 80.5 72
|
||||
C16 92 72
|
||||
C17 92 90
|
||||
C18 80.5 90
|
||||
C19 69 90
|
||||
C20 57.5 90
|
||||
C21 46 90
|
||||
C22 34.5 90
|
||||
C23 23 90
|
||||
C24 -34.5 -60
|
||||
C25 -46 -67.5
|
||||
C26 -57.5 -67.5
|
||||
C27 -69 -72
|
||||
C28 -80.5 -72
|
||||
C29 -92 -72
|
||||
C30 -92 -54
|
||||
C31 -80.5 -54
|
||||
C32 -69 -54
|
||||
D1 -11.5 -54
|
||||
D2 -23 -45
|
||||
D3 -46 -45
|
||||
D4 -57.5 -45
|
||||
D5 -69 -36
|
||||
D6 -80.5 -36
|
||||
D7 -92 -36
|
||||
D8 -92 -18
|
||||
D9 -80.5 -18
|
||||
D10 -69 -18
|
||||
D11 -57.5 -22.5
|
||||
D12 -46 -22.5
|
||||
D13 -34.5 -30
|
||||
D14 -23 0
|
||||
D15 -11.5 18
|
||||
D16 -23 45
|
||||
D17 -34.5 30
|
||||
D18 -34.5 0
|
||||
D19 -46 0
|
||||
D20 -57.5 0
|
||||
D21 -69 0
|
||||
D22 -80.5 0
|
||||
D23 -92 0
|
||||
D24 -92 18
|
||||
D25 -80.5 18
|
||||
D26 -69 18
|
||||
D27 -57.5 22.5
|
||||
D28 -46 22.5
|
||||
D29 -69 36
|
||||
D30 -80.5 36
|
||||
D31 -92 36
|
||||
D32 -103.5 36
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
20
mne/channels/data/montages/biosemi16.txt
Normal file
20
mne/channels/data/montages/biosemi16.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
Site Theta Phi
|
||||
Fp1 -92 -72
|
||||
Fp2 92 72
|
||||
F4 60 51
|
||||
Fz 46 90
|
||||
F3 -60 -51
|
||||
T7 -92 0
|
||||
C3 -46 0
|
||||
Cz 0 0
|
||||
C4 46 0
|
||||
T8 92 0
|
||||
P4 60 -51
|
||||
Pz 46 -90
|
||||
P3 -60 51
|
||||
O1 -92 72
|
||||
Oz 92 -90
|
||||
O2 92 -72
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
164
mne/channels/data/montages/biosemi160.txt
Normal file
164
mne/channels/data/montages/biosemi160.txt
Normal file
@@ -0,0 +1,164 @@
|
||||
Site Theta Phi
|
||||
A1 0 0
|
||||
A2 11.5 -90
|
||||
A3 23 -90
|
||||
A4 34.5 -90
|
||||
A5 -46 72
|
||||
A6 -46 54
|
||||
A7 -57.5 54
|
||||
A8 -69 60
|
||||
A9 -80.5 60
|
||||
A10 -92 60
|
||||
A11 -103.5 60
|
||||
A12 -115 60
|
||||
A13 -115 75
|
||||
A14 -103.5 75
|
||||
A15 -92 75
|
||||
A16 -80.5 75
|
||||
A17 -69 75
|
||||
A18 -57.5 72
|
||||
A19 46 -90
|
||||
A20 57.5 -90
|
||||
A21 69 -90
|
||||
A22 80.5 -90
|
||||
A23 92 -90
|
||||
A24 103.5 -90
|
||||
A25 115 -90
|
||||
A26 115 -75
|
||||
A27 103.5 -75
|
||||
A28 92 -75
|
||||
A29 80.5 -75
|
||||
A30 69 -75
|
||||
A31 57.5 -72
|
||||
A32 46 -72
|
||||
B1 11.5 -18
|
||||
B2 23 -60
|
||||
B3 46 -54
|
||||
B4 57.5 -54
|
||||
B5 69 -60
|
||||
B6 80.5 -60
|
||||
B7 92 -60
|
||||
B8 103.5 -60
|
||||
B9 115 -60
|
||||
B10 115 -45
|
||||
B11 103.5 -45
|
||||
B12 92 -45
|
||||
B13 80.5 -45
|
||||
B14 69 -45
|
||||
B15 69 -30
|
||||
B16 80.5 -30
|
||||
B17 92 -30
|
||||
B18 103.5 -30
|
||||
B19 92 -15
|
||||
B20 80.5 -15
|
||||
B21 69 -15
|
||||
B22 57.5 -36
|
||||
B23 46 -36
|
||||
B24 34.5 -45
|
||||
B25 23 -30
|
||||
B26 34.5 -22.5
|
||||
B27 46 -18
|
||||
B28 57.5 -18
|
||||
B29 57.5 0
|
||||
B30 69 0
|
||||
B31 80.5 0
|
||||
B32 92 0
|
||||
C1 11.5 54
|
||||
C2 23 30
|
||||
C3 23 0
|
||||
C4 34.5 0
|
||||
C5 34.5 22.5
|
||||
C6 46 18
|
||||
C7 46 0
|
||||
C8 57.5 18
|
||||
C9 69 15
|
||||
C10 80.5 15
|
||||
C11 92 15
|
||||
C12 92 30
|
||||
C13 80.5 30
|
||||
C14 69 30
|
||||
C15 69 45
|
||||
C16 80.5 45
|
||||
C17 92 45
|
||||
C18 92 60
|
||||
C19 80.5 60
|
||||
C20 69 60
|
||||
C21 57.5 54
|
||||
C22 57.5 36
|
||||
C23 46 36
|
||||
C24 34.5 45
|
||||
C25 23 60
|
||||
C26 34.5 67.5
|
||||
C27 46 54
|
||||
C28 46 72
|
||||
C29 57.5 72
|
||||
C30 69 75
|
||||
C31 80.5 75
|
||||
C32 92 75
|
||||
D1 -11.5 -54
|
||||
D2 23 90
|
||||
D3 34.5 90
|
||||
D4 46 90
|
||||
D5 57.5 90
|
||||
D6 69 90
|
||||
D7 80.5 90
|
||||
D8 92 90
|
||||
D9 -92 -75
|
||||
D10 -80.5 -75
|
||||
D11 -69 -75
|
||||
D12 -57.5 -72
|
||||
D13 -46 -72
|
||||
D14 -34.5 -67.5
|
||||
D15 -23 -60
|
||||
D16 -23 -30
|
||||
D17 -34.5 -45
|
||||
D18 -46 -54
|
||||
D19 -57.5 -54
|
||||
D20 -69 -60
|
||||
D21 -80.5 -60
|
||||
D22 -92 -60
|
||||
D23 -92 -45
|
||||
D24 -80.5 -45
|
||||
D25 -69 -45
|
||||
D26 -57.5 -36
|
||||
D27 -46 -36
|
||||
D28 -34.5 -22.5
|
||||
D29 -46 -18
|
||||
D30 -69 -30
|
||||
D31 -80.5 -30
|
||||
D32 -92 -30
|
||||
E1 -11.5 18
|
||||
E2 -23 0
|
||||
E3 -34.5 0
|
||||
E4 -46 0
|
||||
E5 -57.5 -18
|
||||
E6 -69 -15
|
||||
E7 -80.5 -15
|
||||
E8 -92 -15
|
||||
E9 -92 0
|
||||
E10 -80.5 0
|
||||
E11 -69 0
|
||||
E12 -57.5 0
|
||||
E13 -57.5 18
|
||||
E14 -69 15
|
||||
E15 -80.5 15
|
||||
E16 -92 15
|
||||
E17 -103.5 30
|
||||
E18 -92 30
|
||||
E19 -80.5 30
|
||||
E20 -69 30
|
||||
E21 -46 18
|
||||
E22 -34.5 22.5
|
||||
E23 -23 30
|
||||
E24 -23 60
|
||||
E25 -34.5 45
|
||||
E26 -46 36
|
||||
E27 -57.5 36
|
||||
E28 -69 45
|
||||
E29 -80.5 45
|
||||
E30 -92 45
|
||||
E31 -103.5 45
|
||||
E32 -115 45
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
260
mne/channels/data/montages/biosemi256.txt
Normal file
260
mne/channels/data/montages/biosemi256.txt
Normal file
@@ -0,0 +1,260 @@
|
||||
Site Theta Phi
|
||||
A1 0 0
|
||||
A2 9.2 -90
|
||||
A3 18.4 -90
|
||||
A4 27.6 -90
|
||||
A5 36.8 -90
|
||||
A6 46 -90
|
||||
A7 -46 75
|
||||
A8 -55.2 75
|
||||
A9 -64.4 78
|
||||
A10 -73.6 78
|
||||
A11 -82.8 78.75
|
||||
A12 -92 78.75
|
||||
A13 -101.2 78.75
|
||||
A14 -110.4 78
|
||||
A15 -119.6 78
|
||||
A16 119.6 -90
|
||||
A17 110.4 -90
|
||||
A18 101.2 -90
|
||||
A19 92 -90
|
||||
A20 82.8 -90
|
||||
A21 73.6 -90
|
||||
A22 64.4 -90
|
||||
A23 55.2 -90
|
||||
A24 46 -75
|
||||
A25 55.2 -75
|
||||
A26 64.4 -78
|
||||
A27 73.6 -78
|
||||
A28 82.8 -78.75
|
||||
A29 92 -78.75
|
||||
A30 101.2 -78.75
|
||||
A31 110.4 -78
|
||||
A32 119.6 -78
|
||||
B1 18.4 -54
|
||||
B2 27.6 -66
|
||||
B3 36.8 -54
|
||||
B4 46 -60
|
||||
B5 55.2 -60
|
||||
B6 64.4 -66
|
||||
B7 73.6 -66
|
||||
B8 82.8 -67.5
|
||||
B9 92 -67.5
|
||||
B10 101.2 -67.5
|
||||
B11 110.4 -66
|
||||
B12 119.6 -66
|
||||
B13 110.4 -54
|
||||
B14 101.2 -56.25
|
||||
B15 92 -56.25
|
||||
B16 82.8 -56.25
|
||||
B17 73.6 -54
|
||||
B18 64.4 -54
|
||||
B19 55.2 -45
|
||||
B20 46 -45
|
||||
B21 27.6 -42
|
||||
B22 36.8 -36
|
||||
B23 46 -30
|
||||
B24 55.2 -30
|
||||
B25 64.4 -42
|
||||
B26 73.6 -42
|
||||
B27 82.8 -45
|
||||
B28 92 -45
|
||||
B29 101.2 -45
|
||||
B30 110.4 -42
|
||||
B31 110.4 -30
|
||||
B32 101.2 -33.75
|
||||
C1 9.2 -18
|
||||
C2 18.4 -18
|
||||
C3 27.6 -18
|
||||
C4 36.8 -18
|
||||
C5 46 -15
|
||||
C6 55.2 -15
|
||||
C7 64.4 -18
|
||||
C8 64.4 -30
|
||||
C9 73.6 -30
|
||||
C10 82.8 -33.75
|
||||
C11 92 -33.75
|
||||
C12 101.2 -22.5
|
||||
C13 92 -22.5
|
||||
C14 82.8 -22.5
|
||||
C15 73.6 -18
|
||||
C16 82.8 -11.25
|
||||
C17 92 -11.25
|
||||
C18 92 0
|
||||
C19 82.8 0
|
||||
C20 73.6 -6
|
||||
C21 64.4 -6
|
||||
C22 55.2 0
|
||||
C23 46 0
|
||||
C24 36.8 0
|
||||
C25 27.6 6
|
||||
C26 36.8 18
|
||||
C27 46 15
|
||||
C28 55.2 15
|
||||
C29 64.4 6
|
||||
C30 73.6 6
|
||||
C31 82.8 11.25
|
||||
C32 92 11.25
|
||||
D1 9.2 54
|
||||
D2 18.4 18
|
||||
D3 27.6 30
|
||||
D4 36.8 36
|
||||
D5 46 30
|
||||
D6 64.4 18
|
||||
D7 73.6 18
|
||||
D8 82.8 22.5
|
||||
D9 92 22.5
|
||||
D10 101.2 22.5
|
||||
D11 101.2 33.75
|
||||
D12 92 33.75
|
||||
D13 82.8 33.75
|
||||
D14 73.6 30
|
||||
D15 64.4 30
|
||||
D16 55.2 30
|
||||
D17 46 45
|
||||
D18 55.2 45
|
||||
D19 64.4 42
|
||||
D20 73.6 42
|
||||
D21 82.8 45
|
||||
D22 92 45
|
||||
D23 101.2 45
|
||||
D24 92 56.25
|
||||
D25 82.8 56.25
|
||||
D26 73.6 54
|
||||
D27 64.4 54
|
||||
D28 55.2 60
|
||||
D29 64.4 66
|
||||
D30 73.6 66
|
||||
D31 82.8 67.5
|
||||
D32 92 67.5
|
||||
E1 18.4 90
|
||||
E2 18.4 54
|
||||
E3 27.6 54
|
||||
E4 36.8 54
|
||||
E5 46 60
|
||||
E6 46 75
|
||||
E7 55.2 75
|
||||
E8 64.4 78
|
||||
E9 73.6 78
|
||||
E10 82.8 78.75
|
||||
E11 92 78.75
|
||||
E12 92 90
|
||||
E13 82.8 90
|
||||
E14 73.6 90
|
||||
E15 64.4 90
|
||||
E16 55.2 90
|
||||
E17 46 90
|
||||
E18 36.8 90
|
||||
E19 36.8 72
|
||||
E20 27.6 78
|
||||
E21 -27.6 -78
|
||||
E22 -36.8 -72
|
||||
E23 -46 -75
|
||||
E24 -55.2 -75
|
||||
E25 -64.4 -78
|
||||
E26 -73.6 -78
|
||||
E27 -82.8 -78.75
|
||||
E28 -92 -78.75
|
||||
E29 -92 -67.5
|
||||
E30 -82.8 -67.5
|
||||
E31 -73.6 -66
|
||||
E32 -64.4 -66
|
||||
F1 -9.2 -54
|
||||
F2 -18.4 -54
|
||||
F3 -27.6 -54
|
||||
F4 -36.8 -54
|
||||
F5 -46 -60
|
||||
F6 -55.2 -60
|
||||
F7 -64.4 -54
|
||||
F8 -73.6 -54
|
||||
F9 -82.8 -56.25
|
||||
F10 -92 -56.25
|
||||
F11 -101.2 -45
|
||||
F12 -92 -45
|
||||
F13 -82.8 -45
|
||||
F14 -73.6 -42
|
||||
F15 -64.4 -42
|
||||
F16 -55.2 -45
|
||||
F17 -46 -45
|
||||
F18 -36.8 -36
|
||||
F19 -27.6 -30
|
||||
F20 -18.4 -18
|
||||
F21 -27.6 -6
|
||||
F22 -36.8 -18
|
||||
F23 -46 -30
|
||||
F24 -55.2 -30
|
||||
F25 -64.4 -30
|
||||
F26 -73.6 -30
|
||||
F27 -82.8 -33.75
|
||||
F28 -92 -33.75
|
||||
F29 -101.2 -33.75
|
||||
F30 -101.2 -22.5
|
||||
F31 -92 -22.5
|
||||
F32 -82.8 -22.5
|
||||
G1 -9.2 18
|
||||
G2 -18.4 18
|
||||
G3 -27.6 18
|
||||
G4 -36.8 0
|
||||
G5 -46 -15
|
||||
G6 -55.2 -15
|
||||
G7 -64.4 -18
|
||||
G8 -73.6 -18
|
||||
G9 -82.8 -11.25
|
||||
G10 -92 -11.25
|
||||
G11 -92 0
|
||||
G12 -82.8 0
|
||||
G13 -73.6 -6
|
||||
G14 -64.4 -6
|
||||
G15 -55.2 0
|
||||
G16 -46 0
|
||||
G17 -55.2 15
|
||||
G18 -64.4 6
|
||||
G19 -73.6 6
|
||||
G20 -82.8 11.25
|
||||
G21 -92 11.25
|
||||
G22 -101.2 22.5
|
||||
G23 -92 22.5
|
||||
G24 -82.8 22.5
|
||||
G25 -73.6 18
|
||||
G26 -64.4 18
|
||||
G27 -64.4 30
|
||||
G28 -73.6 30
|
||||
G29 -82.8 33.75
|
||||
G30 -92 33.75
|
||||
G31 -101.2 33.75
|
||||
G32 -110.4 30
|
||||
H1 -18.4 54
|
||||
H2 -27.6 42
|
||||
H3 -36.8 36
|
||||
H4 -36.8 18
|
||||
H5 -46 15
|
||||
H6 -46 30
|
||||
H7 -55.2 30
|
||||
H8 -64.4 42
|
||||
H9 -73.6 42
|
||||
H10 -82.8 45
|
||||
H11 -92 45
|
||||
H12 -101.2 45
|
||||
H13 -110.4 42
|
||||
H14 -110.4 54
|
||||
H15 -101.2 56.25
|
||||
H16 -92 56.25
|
||||
H17 -82.8 56.25
|
||||
H18 -73.6 54
|
||||
H19 -64.4 54
|
||||
H20 -55.2 45
|
||||
H21 -46 45
|
||||
H22 -36.8 54
|
||||
H23 -27.6 66
|
||||
H24 -46 60
|
||||
H25 -55.2 60
|
||||
H26 -64.4 66
|
||||
H27 -73.6 66
|
||||
H28 -82.8 67.5
|
||||
H29 -92 67.5
|
||||
H30 -101.2 67.5
|
||||
H31 -110.4 66
|
||||
H32 -119.6 66
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
36
mne/channels/data/montages/biosemi32.txt
Normal file
36
mne/channels/data/montages/biosemi32.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
Site Theta Phi
|
||||
Fp1 -92 -72
|
||||
AF3 -74 -65
|
||||
F7 -92 -36
|
||||
F3 -60 -51
|
||||
FC1 -32 -45
|
||||
FC5 -72 -21
|
||||
T7 -92 0
|
||||
C3 -46 0
|
||||
CP1 -32 45
|
||||
CP5 -72 21
|
||||
P7 -92 36
|
||||
P3 -60 51
|
||||
Pz 46 -90
|
||||
PO3 -74 65
|
||||
O1 -92 72
|
||||
Oz 92 -90
|
||||
O2 92 -72
|
||||
PO4 74 -65
|
||||
P4 60 -51
|
||||
P8 92 -36
|
||||
CP6 72 -21
|
||||
CP2 32 -45
|
||||
C4 46 0
|
||||
T8 92 0
|
||||
FC6 72 21
|
||||
FC2 32 45
|
||||
F4 60 51
|
||||
F8 92 36
|
||||
AF4 74 65
|
||||
Fp2 92 72
|
||||
Fz 46 90
|
||||
Cz 0 0
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
68
mne/channels/data/montages/biosemi64.txt
Normal file
68
mne/channels/data/montages/biosemi64.txt
Normal file
@@ -0,0 +1,68 @@
|
||||
Site Theta Phi
|
||||
Fp1 -92 -72
|
||||
AF7 -92 -54
|
||||
AF3 -74 -65
|
||||
F1 -50 -68
|
||||
F3 -60 -51
|
||||
F5 -75 -41
|
||||
F7 -92 -36
|
||||
FT7 -92 -18
|
||||
FC5 -72 -21
|
||||
FC3 -50 -28
|
||||
FC1 -32 -45
|
||||
C1 -23 0
|
||||
C3 -46 0
|
||||
C5 -69 0
|
||||
T7 -92 0
|
||||
TP7 -92 18
|
||||
CP5 -72 21
|
||||
CP3 -50 28
|
||||
CP1 -32 45
|
||||
P1 -50 68
|
||||
P3 -60 51
|
||||
P5 -75 41
|
||||
P7 -92 36
|
||||
P9 -115 36
|
||||
PO7 -92 54
|
||||
PO3 -74 65
|
||||
O1 -92 72
|
||||
Iz 115 -90
|
||||
Oz 92 -90
|
||||
POz 69 -90
|
||||
Pz 46 -90
|
||||
CPz 23 -90
|
||||
Fpz 92 90
|
||||
Fp2 92 72
|
||||
AF8 92 54
|
||||
AF4 74 65
|
||||
AFz 69 90
|
||||
Fz 46 90
|
||||
F2 50 68
|
||||
F4 60 51
|
||||
F6 75 41
|
||||
F8 92 36
|
||||
FT8 92 18
|
||||
FC6 72 21
|
||||
FC4 50 28
|
||||
FC2 32 45
|
||||
FCz 23 90
|
||||
Cz 0 0
|
||||
C2 23 0
|
||||
C4 46 0
|
||||
C6 69 0
|
||||
T8 92 0
|
||||
TP8 92 -18
|
||||
CP6 72 -21
|
||||
CP4 50 -28
|
||||
CP2 32 -45
|
||||
P2 50 -68
|
||||
P4 60 -51
|
||||
P6 75 -41
|
||||
P8 92 -36
|
||||
P10 115 -36
|
||||
PO8 92 -54
|
||||
PO4 74 -65
|
||||
O2 92 -72
|
||||
Nz 115 90
|
||||
LPA -115 0
|
||||
RPA 115 0
|
||||
131
mne/channels/data/montages/brainproducts-RNP-BA-128.txt
Normal file
131
mne/channels/data/montages/brainproducts-RNP-BA-128.txt
Normal file
@@ -0,0 +1,131 @@
|
||||
Name Theta Phi
|
||||
Fp1 -90 -72
|
||||
Fz 45 90
|
||||
F3 -60 -51
|
||||
F7 -90 -36
|
||||
F9 -113 -36
|
||||
FC5 -69 -21
|
||||
FC1 -31 -46
|
||||
C3 -45 0
|
||||
T7 -90 0
|
||||
CP5 -69 21
|
||||
CP1 -31 46
|
||||
Pz 45 -90
|
||||
P3 -60 51
|
||||
P7 -90 36
|
||||
P9 -113 36
|
||||
O1 -90 72
|
||||
Oz 90 -90
|
||||
O2 90 -72
|
||||
P10 113 -36
|
||||
P8 90 -36
|
||||
P4 60 -51
|
||||
CP2 31 -46
|
||||
CP6 69 -21
|
||||
T8 90 0
|
||||
C4 45 0
|
||||
Cz 0 0
|
||||
FC2 31 46
|
||||
FC6 69 21
|
||||
F10 113 36
|
||||
F8 90 36
|
||||
F4 60 51
|
||||
Fp2 90 72
|
||||
AF7 -90 -54
|
||||
AF3 -74 -68
|
||||
AFz 67 90
|
||||
F1 -49 -68
|
||||
F5 -74 -41
|
||||
FT7 -90 -18
|
||||
FC3 -49 -29
|
||||
C1 -23 0
|
||||
C5 -68 0
|
||||
TP7 -90 18
|
||||
CP3 -49 29
|
||||
P1 -49 68
|
||||
P5 -74 41
|
||||
PO7 -90 54
|
||||
PO3 -74 68
|
||||
Iz 112 -90
|
||||
POz 67 -90
|
||||
PO4 74 -68
|
||||
PO8 90 -54
|
||||
P6 74 -41
|
||||
P2 49 -68
|
||||
CPz 22 -90
|
||||
CP4 49 -29
|
||||
TP8 90 -18
|
||||
C6 68 0
|
||||
C2 23 0
|
||||
FC4 49 29
|
||||
FT8 90 18
|
||||
F6 74 41
|
||||
F2 49 68
|
||||
AF4 74 68
|
||||
AF8 90 54
|
||||
AFF3h -62 -67
|
||||
FFC1h -35 -73
|
||||
FFC5h -62 -35
|
||||
FT9 -113 -18
|
||||
FTT7h -79 -10
|
||||
FCC3h -35 -19
|
||||
CCP1h -16 45
|
||||
CCP5h -57 12
|
||||
TP9 -113 18
|
||||
TPP7h -81 29
|
||||
CPP3h -46 48
|
||||
PPO3h -62 67
|
||||
PPO9h -101 45
|
||||
POO1 -79 82
|
||||
PO9 -113 54
|
||||
I1 -112 72
|
||||
I2 112 -72
|
||||
PO10 113 -54
|
||||
POO2 79 -82
|
||||
PPO10h 101 -45
|
||||
PPO4h 62 -67
|
||||
CPP4h 46 -48
|
||||
TPP8h 81 -29
|
||||
TP10 113 -18
|
||||
CCP6h 57 -12
|
||||
CCP2h 16 -45
|
||||
FCC4h 35 19
|
||||
FTT8h 79 10
|
||||
FT10 113 18
|
||||
FFC6h 62 35
|
||||
FFC2h 35 73
|
||||
AFF4h 62 67
|
||||
AFp1 -79 -82
|
||||
AFF1h -57 -82
|
||||
AFF5h -72 -55
|
||||
FFT7h -81 -29
|
||||
FFC3h -46 -48
|
||||
FCC1h -16 -45
|
||||
FCC5h -57 -12
|
||||
TTP7h -79 10
|
||||
CCP3h -35 19
|
||||
CPP1h -35 73
|
||||
CPP5h -62 35
|
||||
TPP9h -101 27
|
||||
PPO5h -72 55
|
||||
PPO1h -57 82
|
||||
POO9h -101 63
|
||||
OI1h -101 81
|
||||
OI2h 101 -81
|
||||
POO10h 101 -63
|
||||
PPO2h 57 -82
|
||||
PPO6h 72 -55
|
||||
TPP10h 101 -27
|
||||
CPP6h 62 -35
|
||||
CPP2h 35 -73
|
||||
CCP4h 35 -19
|
||||
TTP8h 79 -10
|
||||
FCC6h 57 12
|
||||
FCC2h 16 45
|
||||
FFC4h 46 48
|
||||
FFT8h 81 29
|
||||
AFF6h 72 55
|
||||
AFF2h 57 82
|
||||
AFp2 79 82
|
||||
FCz 23 90
|
||||
Fpz 90 90
|
||||
75
mne/channels/data/montages/easycap-M1.txt
Normal file
75
mne/channels/data/montages/easycap-M1.txt
Normal file
@@ -0,0 +1,75 @@
|
||||
Site Theta Phi
|
||||
Fp1 -92 -72
|
||||
Fp2 92 72
|
||||
F3 -60 -51
|
||||
F4 60 51
|
||||
C3 -46 0
|
||||
C4 46 0
|
||||
P3 -60 51
|
||||
P4 60 -51
|
||||
O1 -92 72
|
||||
O2 92 -72
|
||||
F7 -92 -36
|
||||
F8 92 36
|
||||
T7 -92 0
|
||||
T8 92 0
|
||||
P7 -92 36
|
||||
P8 92 -36
|
||||
Fz 46 90
|
||||
Cz 0 0
|
||||
Pz 46 -90
|
||||
F1 -50 -68
|
||||
F2 50 68
|
||||
FC1 -32 -45
|
||||
FC2 32 45
|
||||
C1 -23 0
|
||||
C2 23 0
|
||||
CP1 -32 45
|
||||
CP2 32 -45
|
||||
P1 -50 68
|
||||
P2 50 -68
|
||||
AF3 -74 -65
|
||||
AF4 74 65
|
||||
FC3 -53 -33
|
||||
FC4 53 33
|
||||
CP3 -52 33
|
||||
CP4 52 -33
|
||||
PO3 -74 65
|
||||
PO4 74 -65
|
||||
F5 -75 -41
|
||||
F6 75 41
|
||||
FC5 -72 -21
|
||||
FC6 72 21
|
||||
C5 -69 0
|
||||
C6 69 0
|
||||
CP5 -72 21
|
||||
CP6 72 -21
|
||||
P5 -75 41
|
||||
P6 75 -41
|
||||
AF7 -92 -54
|
||||
AF8 92 54
|
||||
FT7 -92 -18
|
||||
FT8 92 18
|
||||
TP7 -92 18
|
||||
TP8 92 -18
|
||||
PO7 -92 54
|
||||
PO8 92 -54
|
||||
F9 -115 -36
|
||||
F10 115 36
|
||||
FT9 -115 -18
|
||||
FT10 115 18
|
||||
TP9 -115 18
|
||||
TP10 115 -18
|
||||
P9 -115 36
|
||||
P10 115 -36
|
||||
PO9 -115 54
|
||||
PO10 115 -54
|
||||
O9 -115 72
|
||||
O10 115 -72
|
||||
Fpz 92 90
|
||||
AFz 69 90
|
||||
FCz 23 90
|
||||
CPz 23 -90
|
||||
POz 69 -90
|
||||
Oz 92 -90
|
||||
Iz 115 -90
|
||||
62
mne/channels/data/montages/easycap-M10.txt
Normal file
62
mne/channels/data/montages/easycap-M10.txt
Normal file
@@ -0,0 +1,62 @@
|
||||
Site Theta Phi
|
||||
1 0 0
|
||||
2 23 90
|
||||
3 23 30
|
||||
4 23 -30
|
||||
5 23 -90
|
||||
6 -23 30
|
||||
7 -23 -30
|
||||
8 46 90
|
||||
9 46 66
|
||||
10 46 33
|
||||
11 46 0
|
||||
12 46 -33
|
||||
13 46 -66
|
||||
14 46 -90
|
||||
15 -46 66
|
||||
16 -46 33
|
||||
17 -46 0
|
||||
18 -46 -33
|
||||
19 -46 -66
|
||||
20 69 90
|
||||
21 69 66
|
||||
22 69 42
|
||||
23 69 18
|
||||
24 69 -6
|
||||
25 69 -30
|
||||
26 69 -54
|
||||
27 69 -78
|
||||
28 -69 78
|
||||
29 -69 54
|
||||
30 -69 30
|
||||
31 -69 6
|
||||
32 -69 -18
|
||||
33 -69 -42
|
||||
34 -69 -66
|
||||
35 92 90
|
||||
36 92 68
|
||||
37 92 45
|
||||
38 92 22
|
||||
39 92 0
|
||||
40 92 -22
|
||||
41 92 -45
|
||||
42 92 -68
|
||||
43 92 -90
|
||||
44 -92 68
|
||||
45 -92 45
|
||||
46 -92 22
|
||||
47 -92 0
|
||||
48 -92 -22
|
||||
49 -92 -45
|
||||
50 -92 -68
|
||||
51 115 35
|
||||
52 115 10
|
||||
53 115 -15
|
||||
54 115 -40
|
||||
55 115 -65
|
||||
56 115 -90
|
||||
57 -115 65
|
||||
58 -115 40
|
||||
59 -115 15
|
||||
60 -115 -10
|
||||
61 -115 -35
|
||||
65
mne/channels/data/montages/easycap-M43.txt
Normal file
65
mne/channels/data/montages/easycap-M43.txt
Normal file
@@ -0,0 +1,65 @@
|
||||
Site Theta Phi
|
||||
1 23 90
|
||||
2 23 30
|
||||
3 23 -30
|
||||
4 23 -90
|
||||
5 -23 30
|
||||
6 -23 -30
|
||||
7 46 74
|
||||
8 46 41
|
||||
9 46 8
|
||||
10 46 -25
|
||||
11 46 -57
|
||||
12 46 -90
|
||||
13 -46 57
|
||||
14 -46 25
|
||||
15 -46 -8
|
||||
16 -46 -41
|
||||
17 -46 -74
|
||||
18 69 76
|
||||
19 69 49
|
||||
20 69 21
|
||||
21 69 -7
|
||||
22 69 -35
|
||||
23 69 -62
|
||||
24 69 -90
|
||||
25 -69 62
|
||||
26 -69 35
|
||||
27 -69 7
|
||||
28 -69 -21
|
||||
29 -69 -49
|
||||
30 -69 -76
|
||||
31 92 90
|
||||
32 92 62
|
||||
33 92 34
|
||||
34 92 6
|
||||
35 92 -21
|
||||
36 92 -49
|
||||
37 92 -76
|
||||
38 -92 76
|
||||
39 -92 49
|
||||
40 -92 21
|
||||
41 -92 -6
|
||||
42 -92 -34
|
||||
43 -92 -62
|
||||
44 115 35
|
||||
45 115 10
|
||||
46 115 -15
|
||||
47 115 -40
|
||||
48 115 -65
|
||||
49 115 -90
|
||||
50 -115 65
|
||||
51 -115 40
|
||||
52 -115 15
|
||||
53 -115 -10
|
||||
54 -115 -35
|
||||
55 138 23
|
||||
56 138 -15
|
||||
57 138 -40
|
||||
58 138 -65
|
||||
59 138 -90
|
||||
60 -138 65
|
||||
61 -138 40
|
||||
62 -138 15
|
||||
63 -138 -23
|
||||
Ref 0 0
|
||||
132
mne/channels/data/montages/mgh60.elc
Normal file
132
mne/channels/data/montages/mgh60.elc
Normal file
@@ -0,0 +1,132 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 63
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-54.8397 68.5722 -10.5900
|
||||
-33.7007 76.8371 21.2270
|
||||
35.7123 77.7259 21.9560
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-34.0619 26.0111 79.9870
|
||||
34.7841 26.4379 78.8080
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-85.8941 -15.8287 -48.2830
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
85.5599 -16.3613 -48.2710
|
||||
-85.6192 -46.5147 -45.7070
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
85.5488 -45.5453 -7.1300
|
||||
86.1618 -47.0353 -45.8690
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
-54.8404 -97.5279 2.7920
|
||||
-36.5114 -100.8529 37.1670
|
||||
36.7816 -100.8491 36.3970
|
||||
55.6666 -97.6251 2.7300
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
0.0045 -118.5650 -23.0780
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
EEG001
|
||||
EEG002
|
||||
EEG003
|
||||
EEG004
|
||||
EEG005
|
||||
EEG006
|
||||
EEG007
|
||||
EEG008
|
||||
EEG009
|
||||
EEG010
|
||||
EEG011
|
||||
EEG012
|
||||
EEG013
|
||||
EEG014
|
||||
EEG015
|
||||
EEG016
|
||||
EEG017
|
||||
EEG018
|
||||
EEG019
|
||||
EEG020
|
||||
EEG021
|
||||
EEG022
|
||||
EEG023
|
||||
EEG024
|
||||
EEG025
|
||||
EEG026
|
||||
EEG027
|
||||
EEG028
|
||||
EEG029
|
||||
EEG030
|
||||
EEG031
|
||||
EEG032
|
||||
EEG033
|
||||
EEG034
|
||||
EEG035
|
||||
EEG036
|
||||
EEG037
|
||||
EEG038
|
||||
EEG039
|
||||
EEG040
|
||||
EEG041
|
||||
EEG042
|
||||
EEG043
|
||||
EEG044
|
||||
EEG045
|
||||
EEG046
|
||||
EEG047
|
||||
EEG048
|
||||
EEG049
|
||||
EEG050
|
||||
EEG051
|
||||
EEG052
|
||||
EEG053
|
||||
EEG054
|
||||
EEG055
|
||||
EEG056
|
||||
EEG057
|
||||
EEG058
|
||||
EEG059
|
||||
EEG060
|
||||
152
mne/channels/data/montages/mgh70.elc
Normal file
152
mne/channels/data/montages/mgh70.elc
Normal file
@@ -0,0 +1,152 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 73
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-54.8397 68.5722 -10.5900
|
||||
-33.7007 76.8371 21.2270
|
||||
0.2313 80.7710 35.4170
|
||||
35.7123 77.7259 21.9560
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-85.8941 -15.8287 -48.2830
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
85.5599 -16.3613 -48.2710
|
||||
-85.6192 -46.5147 -45.7070
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
86.1618 -47.0353 -45.8690
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.8404 -97.5279 2.7920
|
||||
-36.5114 -100.8529 37.1670
|
||||
0.2156 -102.1780 50.6080
|
||||
36.7816 -100.8491 36.3970
|
||||
55.6666 -97.6251 2.7300
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
0.0045 -118.5650 -23.0780
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
EEG001
|
||||
EEG002
|
||||
EEG003
|
||||
EEG004
|
||||
EEG005
|
||||
EEG006
|
||||
EEG007
|
||||
EEG008
|
||||
EEG009
|
||||
EEG010
|
||||
EEG011
|
||||
EEG012
|
||||
EEG013
|
||||
EEG014
|
||||
EEG015
|
||||
EEG016
|
||||
EEG017
|
||||
EEG018
|
||||
EEG019
|
||||
EEG020
|
||||
EEG021
|
||||
EEG022
|
||||
EEG023
|
||||
EEG024
|
||||
EEG025
|
||||
EEG026
|
||||
EEG027
|
||||
EEG028
|
||||
EEG029
|
||||
EEG030
|
||||
EEG031
|
||||
EEG032
|
||||
EEG033
|
||||
EEG034
|
||||
EEG035
|
||||
EEG036
|
||||
EEG037
|
||||
EEG038
|
||||
EEG039
|
||||
EEG040
|
||||
EEG041
|
||||
EEG042
|
||||
EEG043
|
||||
EEG044
|
||||
EEG045
|
||||
EEG046
|
||||
EEG047
|
||||
EEG048
|
||||
EEG049
|
||||
EEG050
|
||||
EEG051
|
||||
EEG052
|
||||
EEG053
|
||||
EEG054
|
||||
EEG055
|
||||
EEG056
|
||||
EEG057
|
||||
EEG058
|
||||
EEG059
|
||||
EEG060
|
||||
EEG065
|
||||
EEG066
|
||||
EEG067
|
||||
EEG068
|
||||
EEG069
|
||||
EEG070
|
||||
EEG071
|
||||
EEG072
|
||||
EEG073
|
||||
EEG074
|
||||
698
mne/channels/data/montages/standard_1005.elc
Normal file
698
mne/channels/data/montages/standard_1005.elc
Normal file
@@ -0,0 +1,698 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 346
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-48.9708 64.0872 -47.6830
|
||||
-54.8397 68.5722 -10.5900
|
||||
-45.4307 72.8622 5.9780
|
||||
-33.7007 76.8371 21.2270
|
||||
-18.4717 79.9041 32.7520
|
||||
0.2313 80.7710 35.4170
|
||||
19.8203 80.3019 32.7640
|
||||
35.7123 77.7259 21.9560
|
||||
46.5843 73.8078 6.0340
|
||||
55.7433 69.6568 -10.7550
|
||||
50.4352 63.8698 -48.0050
|
||||
-70.1019 41.6523 -49.9520
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
72.1141 42.0667 -50.4520
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-85.8941 -15.8287 -48.2830
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
85.5599 -16.3613 -48.2710
|
||||
-85.6192 -46.5147 -45.7070
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
86.1618 -47.0353 -45.8690
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.9104 -98.0448 -35.4650
|
||||
-54.8404 -97.5279 2.7920
|
||||
-48.4244 -99.3408 21.5990
|
||||
-36.5114 -100.8529 37.1670
|
||||
-18.9724 -101.7680 46.5360
|
||||
0.2156 -102.1780 50.6080
|
||||
19.8776 -101.7930 46.3930
|
||||
36.7816 -100.8491 36.3970
|
||||
49.8196 -99.4461 21.7270
|
||||
55.6666 -97.6251 2.7300
|
||||
54.9876 -98.0911 -35.5410
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
-29.8184 -114.5700 -29.2160
|
||||
0.0045 -118.5650 -23.0780
|
||||
29.7416 -114.2600 -29.2560
|
||||
-43.2897 75.8552 -28.2440
|
||||
-38.5517 79.9532 -4.9950
|
||||
-27.9857 82.4591 2.7020
|
||||
-17.1947 84.8491 10.0270
|
||||
-5.9317 86.8780 16.2000
|
||||
7.1053 87.0740 16.4690
|
||||
18.9233 85.5969 11.4430
|
||||
28.6443 82.9759 2.8280
|
||||
39.3203 80.6868 -4.7250
|
||||
43.8223 76.5418 -28.3070
|
||||
-63.2538 53.8573 -30.3160
|
||||
-61.3508 58.7992 0.8970
|
||||
-50.7998 64.0412 23.0890
|
||||
-34.3157 68.3931 41.1880
|
||||
-11.4357 70.7561 50.3480
|
||||
13.4793 71.2010 51.1750
|
||||
36.1833 69.1509 41.2540
|
||||
52.3972 65.0708 22.8620
|
||||
62.9152 60.0448 0.6300
|
||||
64.3342 54.5998 -30.4440
|
||||
-79.0669 28.0813 -31.2530
|
||||
-74.4999 31.3003 4.8460
|
||||
-65.2379 36.4282 36.1440
|
||||
-44.4098 40.7622 61.6900
|
||||
-15.4238 43.6600 77.6820
|
||||
17.5922 44.0540 77.7880
|
||||
45.8532 41.6228 60.6470
|
||||
67.1281 37.7998 35.2960
|
||||
78.0531 32.9817 4.4830
|
||||
80.0971 28.5137 -31.3380
|
||||
-84.1250 -1.8467 -29.7940
|
||||
-82.3550 0.8263 8.5790
|
||||
-74.6920 4.3033 45.3070
|
||||
-51.0509 7.1772 74.3770
|
||||
-18.2190 9.0941 92.5290
|
||||
18.7870 9.2479 91.5620
|
||||
51.8851 7.7978 73.5070
|
||||
77.0020 5.3357 45.3500
|
||||
83.8880 1.9457 8.5010
|
||||
84.1230 -1.8083 -29.6380
|
||||
-86.9731 -32.2157 -27.8480
|
||||
-85.5651 -30.6287 11.1530
|
||||
-76.4071 -29.7307 49.2170
|
||||
-52.9281 -28.9058 80.3040
|
||||
-18.3541 -28.3219 98.2200
|
||||
20.2199 -28.1481 98.1720
|
||||
55.1139 -28.3862 80.4740
|
||||
79.0059 -28.9863 49.6280
|
||||
85.9999 -29.8203 11.2480
|
||||
88.6249 -32.2723 -28.0000
|
||||
-78.1602 -60.7567 -23.8240
|
||||
-76.6802 -60.8317 12.8800
|
||||
-68.1152 -62.9747 47.2520
|
||||
-46.9142 -64.6908 75.2960
|
||||
-15.8202 -65.5999 91.1640
|
||||
19.4198 -65.5950 92.4050
|
||||
50.6738 -64.4822 76.1300
|
||||
71.0958 -62.6243 47.3280
|
||||
78.5198 -60.4323 12.9020
|
||||
78.9027 -60.9553 -23.8050
|
||||
-64.5973 -87.6558 -19.0140
|
||||
-62.9593 -87.5028 12.9520
|
||||
-54.0103 -89.8988 37.3320
|
||||
-35.8874 -91.6669 55.5040
|
||||
-12.0474 -92.6069 65.5080
|
||||
13.9226 -92.6940 66.9580
|
||||
37.7986 -91.6291 56.7330
|
||||
54.6087 -89.6402 37.0350
|
||||
63.1117 -87.2282 12.8560
|
||||
65.0137 -87.8062 -18.9520
|
||||
-42.8624 -108.0730 -13.1510
|
||||
-40.1204 -107.1290 12.0610
|
||||
-31.9514 -108.2520 23.0470
|
||||
-19.8624 -108.9420 29.7600
|
||||
-6.9194 -109.2600 32.7100
|
||||
6.8036 -109.1630 31.5820
|
||||
20.2936 -108.9140 28.9440
|
||||
32.1756 -108.2520 22.2550
|
||||
41.0976 -107.2450 12.1380
|
||||
43.8946 -109.1270 -13.1700
|
||||
-14.8504 -117.9870 -6.9200
|
||||
15.0946 -118.0180 -6.9330
|
||||
-14.8107 87.2351 -4.4770
|
||||
15.1623 88.0910 -4.5510
|
||||
-54.8298 66.4132 -29.7040
|
||||
-51.1757 70.8362 -1.7550
|
||||
-39.6407 74.8671 13.6780
|
||||
-27.2187 78.7091 28.3750
|
||||
-9.1977 80.6051 35.1330
|
||||
10.4823 80.8650 35.3590
|
||||
28.5803 79.3029 28.4700
|
||||
40.9403 75.7399 13.8600
|
||||
52.0293 71.8468 -1.9200
|
||||
55.7542 67.1698 -29.8240
|
||||
-71.5079 41.1193 -30.8540
|
||||
-68.5558 45.2843 3.0020
|
||||
-58.4878 50.6722 30.1920
|
||||
-39.9798 55.2601 52.6000
|
||||
-13.3838 57.9021 64.3320
|
||||
15.8342 58.4559 64.9920
|
||||
41.7942 56.2259 51.4990
|
||||
60.0522 52.0858 28.7080
|
||||
71.9592 47.1917 2.4750
|
||||
72.7981 41.8218 -31.0260
|
||||
-82.9559 13.3203 -30.8080
|
||||
-80.1139 16.3903 6.8500
|
||||
-71.2099 20.8203 41.3240
|
||||
-48.5119 24.5292 69.1360
|
||||
-17.3439 27.0241 86.9230
|
||||
18.4181 27.2709 86.4370
|
||||
49.5481 25.2378 68.4300
|
||||
73.2191 22.0067 41.2970
|
||||
81.5801 17.6837 6.5640
|
||||
83.3711 13.5477 -30.7490
|
||||
-85.1321 -17.0557 -28.7310
|
||||
-82.9461 -14.8827 10.0090
|
||||
-75.2941 -12.6397 47.9040
|
||||
-51.5811 -10.7548 78.0350
|
||||
-18.2790 -9.4319 97.3560
|
||||
19.6780 -9.3041 95.7060
|
||||
53.8059 -10.1442 77.7300
|
||||
78.1249 -11.7353 47.8400
|
||||
85.1369 -13.9063 9.8900
|
||||
86.0999 -17.0883 -28.7560
|
||||
-84.8102 -47.2457 -26.2200
|
||||
-82.7042 -46.2977 11.9740
|
||||
-73.3012 -46.7917 49.1090
|
||||
-51.0492 -47.1758 80.0160
|
||||
-17.3542 -47.3419 97.4100
|
||||
20.6798 -47.2321 98.0720
|
||||
53.9968 -46.8902 80.0770
|
||||
76.5498 -46.3733 49.1400
|
||||
85.1998 -45.8073 12.1020
|
||||
85.4428 -47.2213 -26.1760
|
||||
-72.1773 -74.6277 -21.5360
|
||||
-70.1133 -74.8677 12.9990
|
||||
-61.7283 -77.6238 43.0280
|
||||
-41.6733 -79.7528 66.7150
|
||||
-13.9613 -81.0029 81.0030
|
||||
17.2977 -80.9810 81.6410
|
||||
44.7477 -79.6111 67.6550
|
||||
63.6267 -77.3022 43.1190
|
||||
72.1037 -74.4993 13.0250
|
||||
73.2817 -75.0773 -21.5760
|
||||
-54.7754 -98.9768 -16.1930
|
||||
-51.9284 -98.4438 12.3040
|
||||
-43.3424 -100.1629 30.0090
|
||||
-28.0074 -101.3610 42.3790
|
||||
-9.5034 -102.0600 49.4180
|
||||
10.2356 -102.0290 48.9420
|
||||
28.6476 -101.3901 42.1380
|
||||
44.2206 -100.2191 29.8080
|
||||
52.8386 -98.5360 12.2500
|
||||
55.8596 -99.8940 -16.2080
|
||||
-14.8054 -115.1000 11.8290
|
||||
15.1456 -115.1910 11.8330
|
||||
-15.1584 -118.2420 -26.0480
|
||||
15.1286 -118.1510 -26.0810
|
||||
-36.1247 72.3801 -45.8520
|
||||
-43.5117 78.5802 -9.2400
|
||||
-33.2847 81.2071 -1.1400
|
||||
-22.3517 83.5621 6.0710
|
||||
-12.2417 86.1941 14.1880
|
||||
0.1703 87.3220 17.4420
|
||||
13.6223 86.7579 15.3020
|
||||
24.1013 84.3769 7.4330
|
||||
33.9133 81.8119 -1.0350
|
||||
43.9483 79.2958 -9.3000
|
||||
37.7123 72.1679 -46.1970
|
||||
-59.3398 52.6802 -48.7700
|
||||
-63.2618 55.9922 -11.1730
|
||||
-55.8198 61.3962 11.8840
|
||||
-43.3817 66.3672 32.8110
|
||||
-23.5817 69.9171 47.2930
|
||||
0.2763 71.2800 52.0920
|
||||
25.5583 70.5559 47.8270
|
||||
45.1522 67.2748 32.7310
|
||||
58.0002 62.5998 11.9000
|
||||
64.6732 57.2738 -11.4600
|
||||
60.6012 52.2668 -49.0380
|
||||
-78.4839 28.7703 -50.5220
|
||||
-76.6149 28.6533 -11.5080
|
||||
-71.5059 33.9263 20.9930
|
||||
-55.9399 38.7162 49.7880
|
||||
-30.6548 42.4151 71.0400
|
||||
0.3512 44.0740 79.1410
|
||||
32.6451 43.1009 70.7950
|
||||
57.5042 39.8518 48.8110
|
||||
74.2501 35.4997 20.3800
|
||||
79.0341 30.3437 -11.9970
|
||||
79.9201 28.9417 -50.9140
|
||||
-87.3620 -0.5147 -49.8370
|
||||
-82.6680 -0.9417 -10.2840
|
||||
-80.1330 2.5853 27.3120
|
||||
-64.1610 5.8313 60.8850
|
||||
-35.7490 8.3091 85.4590
|
||||
0.3911 9.5080 95.5600
|
||||
36.0700 8.6519 83.8320
|
||||
65.1640 6.6198 60.0520
|
||||
81.5440 3.6637 27.2010
|
||||
83.1680 0.1817 -10.3640
|
||||
85.3930 -0.9523 -49.5200
|
||||
-86.6321 -31.2377 -47.1780
|
||||
-85.9331 -31.0927 -8.4740
|
||||
-81.5431 -30.1727 30.2730
|
||||
-66.1281 -29.2957 65.8980
|
||||
-36.9301 -28.5699 91.7340
|
||||
0.3959 -28.1630 101.2690
|
||||
38.5399 -28.2251 90.9760
|
||||
68.8539 -28.6403 66.4100
|
||||
84.5529 -29.3783 30.8780
|
||||
85.9999 -30.2803 -8.4350
|
||||
86.7619 -31.7313 -47.2530
|
||||
-80.7152 -60.6457 -43.5940
|
||||
-78.5992 -59.7237 -4.7580
|
||||
-73.6642 -61.9227 30.3800
|
||||
-59.4112 -63.9248 62.6720
|
||||
-32.7283 -65.3199 85.9440
|
||||
0.3658 -65.7500 94.0580
|
||||
35.8918 -65.1381 85.9800
|
||||
62.2558 -63.6152 62.7190
|
||||
76.6708 -61.5483 30.5430
|
||||
79.3188 -59.3033 -4.8400
|
||||
81.5598 -61.2153 -43.8000
|
||||
-64.5703 -86.4318 -38.3240
|
||||
-64.5833 -86.2218 0.0330
|
||||
-58.7123 -88.7048 25.1930
|
||||
-46.1603 -90.8878 47.4460
|
||||
-24.6483 -92.2919 62.0760
|
||||
0.2727 -92.7580 67.3420
|
||||
26.4367 -92.2951 63.1990
|
||||
47.1437 -90.7122 47.6780
|
||||
60.8127 -88.5042 25.6620
|
||||
65.1517 -85.9432 -0.0090
|
||||
65.0377 -86.7182 -38.4480
|
||||
-43.1284 -107.5160 -32.3870
|
||||
-42.9764 -106.4930 5.7730
|
||||
-36.2344 -107.7160 17.7500
|
||||
-25.9844 -108.6160 26.5440
|
||||
-13.6644 -109.2660 32.8560
|
||||
0.1676 -109.2760 32.7900
|
||||
13.6506 -109.1060 30.9360
|
||||
26.6636 -108.6680 26.4150
|
||||
37.7006 -107.8400 18.0690
|
||||
43.6696 -106.5990 5.7260
|
||||
43.1766 -107.4440 -32.4630
|
||||
-29.3914 -114.5110 -10.0200
|
||||
0.0525 -119.3430 -3.9360
|
||||
29.5526 -113.6360 -10.0510
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-72.4343 -73.4527 -2.4870
|
||||
85.0799 -15.0203 -9.4900
|
||||
73.0557 -73.0683 -2.5400
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
AF9
|
||||
AF7
|
||||
AF5
|
||||
AF3
|
||||
AF1
|
||||
AFz
|
||||
AF2
|
||||
AF4
|
||||
AF6
|
||||
AF8
|
||||
AF10
|
||||
F9
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F10
|
||||
FT9
|
||||
FT7
|
||||
FC5
|
||||
FC3
|
||||
FC1
|
||||
FCz
|
||||
FC2
|
||||
FC4
|
||||
FC6
|
||||
FT8
|
||||
FT10
|
||||
T9
|
||||
T7
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T8
|
||||
T10
|
||||
TP9
|
||||
TP7
|
||||
CP5
|
||||
CP3
|
||||
CP1
|
||||
CPz
|
||||
CP2
|
||||
CP4
|
||||
CP6
|
||||
TP8
|
||||
TP10
|
||||
P9
|
||||
P7
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
P8
|
||||
P10
|
||||
PO9
|
||||
PO7
|
||||
PO5
|
||||
PO3
|
||||
PO1
|
||||
POz
|
||||
PO2
|
||||
PO4
|
||||
PO6
|
||||
PO8
|
||||
PO10
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
I1
|
||||
Iz
|
||||
I2
|
||||
AFp9h
|
||||
AFp7h
|
||||
AFp5h
|
||||
AFp3h
|
||||
AFp1h
|
||||
AFp2h
|
||||
AFp4h
|
||||
AFp6h
|
||||
AFp8h
|
||||
AFp10h
|
||||
AFF9h
|
||||
AFF7h
|
||||
AFF5h
|
||||
AFF3h
|
||||
AFF1h
|
||||
AFF2h
|
||||
AFF4h
|
||||
AFF6h
|
||||
AFF8h
|
||||
AFF10h
|
||||
FFT9h
|
||||
FFT7h
|
||||
FFC5h
|
||||
FFC3h
|
||||
FFC1h
|
||||
FFC2h
|
||||
FFC4h
|
||||
FFC6h
|
||||
FFT8h
|
||||
FFT10h
|
||||
FTT9h
|
||||
FTT7h
|
||||
FCC5h
|
||||
FCC3h
|
||||
FCC1h
|
||||
FCC2h
|
||||
FCC4h
|
||||
FCC6h
|
||||
FTT8h
|
||||
FTT10h
|
||||
TTP9h
|
||||
TTP7h
|
||||
CCP5h
|
||||
CCP3h
|
||||
CCP1h
|
||||
CCP2h
|
||||
CCP4h
|
||||
CCP6h
|
||||
TTP8h
|
||||
TTP10h
|
||||
TPP9h
|
||||
TPP7h
|
||||
CPP5h
|
||||
CPP3h
|
||||
CPP1h
|
||||
CPP2h
|
||||
CPP4h
|
||||
CPP6h
|
||||
TPP8h
|
||||
TPP10h
|
||||
PPO9h
|
||||
PPO7h
|
||||
PPO5h
|
||||
PPO3h
|
||||
PPO1h
|
||||
PPO2h
|
||||
PPO4h
|
||||
PPO6h
|
||||
PPO8h
|
||||
PPO10h
|
||||
POO9h
|
||||
POO7h
|
||||
POO5h
|
||||
POO3h
|
||||
POO1h
|
||||
POO2h
|
||||
POO4h
|
||||
POO6h
|
||||
POO8h
|
||||
POO10h
|
||||
OI1h
|
||||
OI2h
|
||||
Fp1h
|
||||
Fp2h
|
||||
AF9h
|
||||
AF7h
|
||||
AF5h
|
||||
AF3h
|
||||
AF1h
|
||||
AF2h
|
||||
AF4h
|
||||
AF6h
|
||||
AF8h
|
||||
AF10h
|
||||
F9h
|
||||
F7h
|
||||
F5h
|
||||
F3h
|
||||
F1h
|
||||
F2h
|
||||
F4h
|
||||
F6h
|
||||
F8h
|
||||
F10h
|
||||
FT9h
|
||||
FT7h
|
||||
FC5h
|
||||
FC3h
|
||||
FC1h
|
||||
FC2h
|
||||
FC4h
|
||||
FC6h
|
||||
FT8h
|
||||
FT10h
|
||||
T9h
|
||||
T7h
|
||||
C5h
|
||||
C3h
|
||||
C1h
|
||||
C2h
|
||||
C4h
|
||||
C6h
|
||||
T8h
|
||||
T10h
|
||||
TP9h
|
||||
TP7h
|
||||
CP5h
|
||||
CP3h
|
||||
CP1h
|
||||
CP2h
|
||||
CP4h
|
||||
CP6h
|
||||
TP8h
|
||||
TP10h
|
||||
P9h
|
||||
P7h
|
||||
P5h
|
||||
P3h
|
||||
P1h
|
||||
P2h
|
||||
P4h
|
||||
P6h
|
||||
P8h
|
||||
P10h
|
||||
PO9h
|
||||
PO7h
|
||||
PO5h
|
||||
PO3h
|
||||
PO1h
|
||||
PO2h
|
||||
PO4h
|
||||
PO6h
|
||||
PO8h
|
||||
PO10h
|
||||
O1h
|
||||
O2h
|
||||
I1h
|
||||
I2h
|
||||
AFp9
|
||||
AFp7
|
||||
AFp5
|
||||
AFp3
|
||||
AFp1
|
||||
AFpz
|
||||
AFp2
|
||||
AFp4
|
||||
AFp6
|
||||
AFp8
|
||||
AFp10
|
||||
AFF9
|
||||
AFF7
|
||||
AFF5
|
||||
AFF3
|
||||
AFF1
|
||||
AFFz
|
||||
AFF2
|
||||
AFF4
|
||||
AFF6
|
||||
AFF8
|
||||
AFF10
|
||||
FFT9
|
||||
FFT7
|
||||
FFC5
|
||||
FFC3
|
||||
FFC1
|
||||
FFCz
|
||||
FFC2
|
||||
FFC4
|
||||
FFC6
|
||||
FFT8
|
||||
FFT10
|
||||
FTT9
|
||||
FTT7
|
||||
FCC5
|
||||
FCC3
|
||||
FCC1
|
||||
FCCz
|
||||
FCC2
|
||||
FCC4
|
||||
FCC6
|
||||
FTT8
|
||||
FTT10
|
||||
TTP9
|
||||
TTP7
|
||||
CCP5
|
||||
CCP3
|
||||
CCP1
|
||||
CCPz
|
||||
CCP2
|
||||
CCP4
|
||||
CCP6
|
||||
TTP8
|
||||
TTP10
|
||||
TPP9
|
||||
TPP7
|
||||
CPP5
|
||||
CPP3
|
||||
CPP1
|
||||
CPPz
|
||||
CPP2
|
||||
CPP4
|
||||
CPP6
|
||||
TPP8
|
||||
TPP10
|
||||
PPO9
|
||||
PPO7
|
||||
PPO5
|
||||
PPO3
|
||||
PPO1
|
||||
PPOz
|
||||
PPO2
|
||||
PPO4
|
||||
PPO6
|
||||
PPO8
|
||||
PPO10
|
||||
POO9
|
||||
POO7
|
||||
POO5
|
||||
POO3
|
||||
POO1
|
||||
POOz
|
||||
POO2
|
||||
POO4
|
||||
POO6
|
||||
POO8
|
||||
POO10
|
||||
OI1
|
||||
OIz
|
||||
OI2
|
||||
T3
|
||||
T5
|
||||
T4
|
||||
T6
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
200
mne/channels/data/montages/standard_1020.elc
Normal file
200
mne/channels/data/montages/standard_1020.elc
Normal file
@@ -0,0 +1,200 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 97
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-48.9708 64.0872 -47.6830
|
||||
-54.8397 68.5722 -10.5900
|
||||
-45.4307 72.8622 5.9780
|
||||
-33.7007 76.8371 21.2270
|
||||
-18.4717 79.9041 32.7520
|
||||
0.2313 80.7710 35.4170
|
||||
19.8203 80.3019 32.7640
|
||||
35.7123 77.7259 21.9560
|
||||
46.5843 73.8078 6.0340
|
||||
55.7433 69.6568 -10.7550
|
||||
50.4352 63.8698 -48.0050
|
||||
-70.1019 41.6523 -49.9520
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
72.1141 42.0667 -50.4520
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-85.8941 -15.8287 -48.2830
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
85.5599 -16.3613 -48.2710
|
||||
-85.6192 -46.5147 -45.7070
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
86.1618 -47.0353 -45.8690
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.9104 -98.0448 -35.4650
|
||||
-54.8404 -97.5279 2.7920
|
||||
-48.4244 -99.3408 21.5990
|
||||
-36.5114 -100.8529 37.1670
|
||||
-18.9724 -101.7680 46.5360
|
||||
0.2156 -102.1780 50.6080
|
||||
19.8776 -101.7930 46.3930
|
||||
36.7816 -100.8491 36.3970
|
||||
49.8196 -99.4461 21.7270
|
||||
55.6666 -97.6251 2.7300
|
||||
54.9876 -98.0911 -35.5410
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
-29.8184 -114.5700 -29.2160
|
||||
0.0045 -118.5650 -23.0780
|
||||
29.7416 -114.2600 -29.2560
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-72.4343 -73.4527 -2.4870
|
||||
85.0799 -15.0203 -9.4900
|
||||
73.0557 -73.0683 -2.5400
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
AF9
|
||||
AF7
|
||||
AF5
|
||||
AF3
|
||||
AF1
|
||||
AFz
|
||||
AF2
|
||||
AF4
|
||||
AF6
|
||||
AF8
|
||||
AF10
|
||||
F9
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F10
|
||||
FT9
|
||||
FT7
|
||||
FC5
|
||||
FC3
|
||||
FC1
|
||||
FCz
|
||||
FC2
|
||||
FC4
|
||||
FC6
|
||||
FT8
|
||||
FT10
|
||||
T9
|
||||
T7
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T8
|
||||
T10
|
||||
TP9
|
||||
TP7
|
||||
CP5
|
||||
CP3
|
||||
CP1
|
||||
CPz
|
||||
CP2
|
||||
CP4
|
||||
CP6
|
||||
TP8
|
||||
TP10
|
||||
P9
|
||||
P7
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
P8
|
||||
P10
|
||||
PO9
|
||||
PO7
|
||||
PO5
|
||||
PO3
|
||||
PO1
|
||||
POz
|
||||
PO2
|
||||
PO4
|
||||
PO6
|
||||
PO8
|
||||
PO10
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
O9
|
||||
Iz
|
||||
O10
|
||||
T3
|
||||
T5
|
||||
T4
|
||||
T6
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
142
mne/channels/data/montages/standard_alphabetic.elc
Normal file
142
mne/channels/data/montages/standard_alphabetic.elc
Normal file
@@ -0,0 +1,142 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 68
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-54.8397 68.5722 -10.5900
|
||||
-33.7007 76.8371 21.2270
|
||||
0.2313 80.7710 35.4170
|
||||
35.7123 77.7259 21.9560
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
-54.8404 -97.5279 2.7920
|
||||
-36.5114 -100.8529 37.1670
|
||||
0.2156 -102.1780 50.6080
|
||||
36.7816 -100.8491 36.3970
|
||||
55.6666 -97.6251 2.7300
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
B3
|
||||
B1
|
||||
Bz
|
||||
B2
|
||||
B4
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
D7
|
||||
D5
|
||||
D3
|
||||
D1
|
||||
Dz
|
||||
D2
|
||||
D4
|
||||
D6
|
||||
D8
|
||||
T3
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T4
|
||||
E7
|
||||
E5
|
||||
E3
|
||||
E1
|
||||
Ez
|
||||
E2
|
||||
E4
|
||||
E6
|
||||
E8
|
||||
T5
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
T6
|
||||
H3
|
||||
H1
|
||||
Hz
|
||||
H2
|
||||
H4
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
212
mne/channels/data/montages/standard_postfixed.elc
Normal file
212
mne/channels/data/montages/standard_postfixed.elc
Normal file
@@ -0,0 +1,212 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 103
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-54.8397 68.5722 -10.5900
|
||||
-45.4307 72.8622 5.9780
|
||||
-33.7007 76.8371 21.2270
|
||||
-18.4717 79.9041 32.7520
|
||||
0.2313 80.7710 35.4170
|
||||
19.8203 80.3019 32.7640
|
||||
35.7123 77.7259 21.9560
|
||||
46.5843 73.8078 6.0340
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.9104 -98.0448 -35.4650
|
||||
-54.8404 -97.5279 2.7920
|
||||
-48.4244 -99.3408 21.5990
|
||||
-36.5114 -100.8529 37.1670
|
||||
-18.9724 -101.7680 46.5360
|
||||
0.2156 -102.1780 50.6080
|
||||
19.8776 -101.7930 46.3930
|
||||
36.7816 -100.8491 36.3970
|
||||
49.8196 -99.4461 21.7270
|
||||
55.6666 -97.6251 2.7300
|
||||
54.9876 -98.0911 -35.5410
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
-29.8184 -114.5700 -29.2160
|
||||
0.0045 -118.5650 -23.0780
|
||||
29.7416 -114.2600 -29.2560
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
F7a
|
||||
F5a
|
||||
F3a
|
||||
F1a
|
||||
Fza
|
||||
F2a
|
||||
F4a
|
||||
F6a
|
||||
F8a
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F7p
|
||||
F5p
|
||||
F3p
|
||||
F1p
|
||||
Fzp
|
||||
F2p
|
||||
F4p
|
||||
F6p
|
||||
F8p
|
||||
T1
|
||||
T3a
|
||||
C5a
|
||||
C3a
|
||||
C1a
|
||||
Cza
|
||||
C2a
|
||||
C4a
|
||||
C6a
|
||||
T4a
|
||||
T2
|
||||
T3
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T4
|
||||
T3p
|
||||
C5p
|
||||
C3p
|
||||
C1p
|
||||
Czp
|
||||
C2p
|
||||
C4p
|
||||
C6p
|
||||
T4p
|
||||
T5a
|
||||
P5a
|
||||
P3a
|
||||
P1a
|
||||
Pza
|
||||
P2a
|
||||
P4a
|
||||
P6a
|
||||
T6a
|
||||
Cb1a
|
||||
T5
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
T6
|
||||
Cb2a
|
||||
Cb1
|
||||
O1a
|
||||
P5p
|
||||
P3p
|
||||
P1p
|
||||
Pzp
|
||||
P2p
|
||||
P4p
|
||||
P6p
|
||||
O2a
|
||||
Cb2
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
Cb1p
|
||||
Iz
|
||||
Cb2p
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
160
mne/channels/data/montages/standard_prefixed.elc
Normal file
160
mne/channels/data/montages/standard_prefixed.elc
Normal file
@@ -0,0 +1,160 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 77
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
55.7433 69.6568 -10.7550
|
||||
-33.7007 76.8371 21.2270
|
||||
0.2313 80.7710 35.4170
|
||||
35.7123 77.7259 21.9560
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-85.8941 -15.8287 -48.2830
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
85.5599 -16.3613 -48.2710
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.9104 -98.0448 -35.4650
|
||||
-54.8404 -97.5279 2.7920
|
||||
-36.5114 -100.8529 37.1670
|
||||
0.2156 -102.1780 50.6080
|
||||
36.7816 -100.8491 36.3970
|
||||
55.6666 -97.6251 2.7300
|
||||
54.9876 -98.0911 -35.5410
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
0.0045 -118.5650 -23.0780
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
aF3
|
||||
aF1
|
||||
aFz
|
||||
aF2
|
||||
aF4
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
iT1
|
||||
T1
|
||||
pF5
|
||||
pF3
|
||||
pF1
|
||||
pFz
|
||||
pF2
|
||||
pF4
|
||||
pF6
|
||||
T2
|
||||
iT2
|
||||
iT3
|
||||
T3
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T4
|
||||
iT4
|
||||
T3A
|
||||
pC5
|
||||
pC3
|
||||
pC1
|
||||
pCz
|
||||
pC2
|
||||
pC4
|
||||
pC6
|
||||
T4A
|
||||
iT5
|
||||
T5
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
T6
|
||||
iT6
|
||||
pO5
|
||||
pO3
|
||||
pO1
|
||||
pOz
|
||||
pO2
|
||||
pO4
|
||||
pO6
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
Iz
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
212
mne/channels/data/montages/standard_primed.elc
Normal file
212
mne/channels/data/montages/standard_primed.elc
Normal file
@@ -0,0 +1,212 @@
|
||||
# ASA electrode file
|
||||
ReferenceLabel avg
|
||||
UnitPosition mm
|
||||
NumberPositions= 103
|
||||
Positions
|
||||
-86.0761 -19.9897 -47.9860
|
||||
85.7939 -20.0093 -48.0310
|
||||
0.0083 86.8110 -39.9830
|
||||
-29.4367 83.9171 -6.9900
|
||||
0.1123 88.2470 -1.7130
|
||||
29.8723 84.8959 -7.0800
|
||||
-54.8397 68.5722 -10.5900
|
||||
-45.4307 72.8622 5.9780
|
||||
-33.7007 76.8371 21.2270
|
||||
-18.4717 79.9041 32.7520
|
||||
0.2313 80.7710 35.4170
|
||||
19.8203 80.3019 32.7640
|
||||
35.7123 77.7259 21.9560
|
||||
46.5843 73.8078 6.0340
|
||||
55.7433 69.6568 -10.7550
|
||||
-70.2629 42.4743 -11.4200
|
||||
-64.4658 48.0353 16.9210
|
||||
-50.2438 53.1112 42.1920
|
||||
-27.4958 56.9311 60.3420
|
||||
0.3122 58.5120 66.4620
|
||||
29.5142 57.6019 59.5400
|
||||
51.8362 54.3048 40.8140
|
||||
67.9142 49.8297 16.3670
|
||||
73.0431 44.4217 -12.0000
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
-84.0759 14.5673 -50.4290
|
||||
-80.7750 14.1203 -11.1350
|
||||
-77.2149 18.6433 24.4600
|
||||
-60.1819 22.7162 55.5440
|
||||
-34.0619 26.0111 79.9870
|
||||
0.3761 27.3900 88.6680
|
||||
34.7841 26.4379 78.8080
|
||||
62.2931 23.7228 55.6300
|
||||
79.5341 19.9357 24.4380
|
||||
81.8151 15.4167 -11.3300
|
||||
84.1131 14.3647 -50.5380
|
||||
-84.1611 -16.0187 -9.3460
|
||||
-80.2801 -13.7597 29.1600
|
||||
-65.3581 -11.6317 64.3580
|
||||
-36.1580 -9.9839 89.7520
|
||||
0.4009 -9.1670 100.2440
|
||||
37.6720 -9.6241 88.4120
|
||||
67.1179 -10.9003 63.5800
|
||||
83.4559 -12.7763 29.2080
|
||||
85.0799 -15.0203 -9.4900
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-84.8302 -46.0217 -7.0560
|
||||
-79.5922 -46.5507 30.9490
|
||||
-63.5562 -47.0088 65.6240
|
||||
-35.5131 -47.2919 91.3150
|
||||
0.3858 -47.3180 99.4320
|
||||
38.3838 -47.0731 90.6950
|
||||
66.6118 -46.6372 65.5800
|
||||
83.3218 -46.1013 31.2060
|
||||
85.5488 -45.5453 -7.1300
|
||||
-73.0093 -73.7657 -40.9980
|
||||
-72.4343 -73.4527 -2.4870
|
||||
-67.2723 -76.2907 28.3820
|
||||
-53.0073 -78.7878 55.9400
|
||||
-28.6203 -80.5249 75.4360
|
||||
0.3247 -81.1150 82.6150
|
||||
31.9197 -80.4871 76.7160
|
||||
55.6667 -78.5602 56.5610
|
||||
67.8877 -75.9043 28.0910
|
||||
73.0557 -73.0683 -2.5400
|
||||
73.8947 -74.3903 -41.2200
|
||||
-54.9104 -98.0448 -35.4650
|
||||
-54.8404 -97.5279 2.7920
|
||||
-48.4244 -99.3408 21.5990
|
||||
-36.5114 -100.8529 37.1670
|
||||
-18.9724 -101.7680 46.5360
|
||||
0.2156 -102.1780 50.6080
|
||||
19.8776 -101.7930 46.3930
|
||||
36.7816 -100.8491 36.3970
|
||||
49.8196 -99.4461 21.7270
|
||||
55.6666 -97.6251 2.7300
|
||||
54.9876 -98.0911 -35.5410
|
||||
-29.4134 -112.4490 8.8390
|
||||
0.1076 -114.8920 14.6570
|
||||
29.8426 -112.1560 8.8000
|
||||
-29.8184 -114.5700 -29.2160
|
||||
0.0045 -118.5650 -23.0780
|
||||
29.7416 -114.2600 -29.2560
|
||||
-86.0761 -44.9897 -67.9860
|
||||
85.7939 -45.0093 -68.0310
|
||||
-86.0761 -24.9897 -67.9860
|
||||
85.7939 -25.0093 -68.0310
|
||||
Labels
|
||||
LPA
|
||||
RPA
|
||||
Nz
|
||||
Fp1
|
||||
Fpz
|
||||
Fp2
|
||||
F7'
|
||||
F5'
|
||||
F3'
|
||||
F1'
|
||||
Fz'
|
||||
F2'
|
||||
F4'
|
||||
F6'
|
||||
F8'
|
||||
F7
|
||||
F5
|
||||
F3
|
||||
F1
|
||||
Fz
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F7''
|
||||
F5''
|
||||
F3''
|
||||
F1''
|
||||
Fz''
|
||||
F2''
|
||||
F4''
|
||||
F6''
|
||||
F8''
|
||||
T1
|
||||
T3'
|
||||
C5'
|
||||
C3'
|
||||
C1'
|
||||
Cz'
|
||||
C2'
|
||||
C4'
|
||||
C6'
|
||||
T4'
|
||||
T2
|
||||
T3
|
||||
C5
|
||||
C3
|
||||
C1
|
||||
Cz
|
||||
C2
|
||||
C4
|
||||
C6
|
||||
T4
|
||||
T3''
|
||||
C5''
|
||||
C3''
|
||||
C1''
|
||||
Cz''
|
||||
C2''
|
||||
C4''
|
||||
C6''
|
||||
T4''
|
||||
T5'
|
||||
P5'
|
||||
P3'
|
||||
P1'
|
||||
Pz'
|
||||
P2'
|
||||
P4'
|
||||
P6'
|
||||
T6'
|
||||
Cb1'
|
||||
T5
|
||||
P5
|
||||
P3
|
||||
P1
|
||||
Pz
|
||||
P2
|
||||
P4
|
||||
P6
|
||||
T6
|
||||
Cb2'
|
||||
Cb1
|
||||
O1'
|
||||
P5''
|
||||
P3''
|
||||
P1''
|
||||
Pz''
|
||||
P2''
|
||||
P4''
|
||||
P6''
|
||||
O2'
|
||||
Cb2
|
||||
O1
|
||||
Oz
|
||||
O2
|
||||
Cb1''
|
||||
Iz
|
||||
Cb2''
|
||||
M1
|
||||
M2
|
||||
A1
|
||||
A2
|
||||
BIN
mne/channels/data/neighbors/KIT-157_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-157_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-208_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-208_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-NYU-2019_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-NYU-2019_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-UMD-1_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-UMD-1_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-UMD-2_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-UMD-2_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-UMD-3_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-UMD-3_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/KIT-UMD-4_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/KIT-UMD-4_neighb.mat
Normal file
Binary file not shown.
13
mne/channels/data/neighbors/__init__.py
Normal file
13
mne/channels/data/neighbors/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
"""Neighbor definitions for clustering permutation analysis."""
|
||||
# This is a selection of files from http://fieldtrip.fcdonders.nl/template
|
||||
# Additional definitions can be obtained through the FieldTrip software.
|
||||
# For additional information on how these definitions were computed, please
|
||||
# consider the related fieldtrip documentation:
|
||||
# http://fieldtrip.fcdonders.nl/template/neighbours.
|
||||
#
|
||||
# KIT neighbor files were computed with ft_prepare_neighbours using the
|
||||
# triangulation method.
|
||||
BIN
mne/channels/data/neighbors/biosemi16_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/biosemi16_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/biosemi32_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/biosemi32_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/biosemi64_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/biosemi64_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/bti148_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/bti148_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/bti248_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/bti248_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/bti248grad_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/bti248grad_neighb.mat
Normal file
Binary file not shown.
BIN
mne/channels/data/neighbors/ctf151_neighb.mat
Normal file
BIN
mne/channels/data/neighbors/ctf151_neighb.mat
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user