# Authors: The MNE-Python contributors.
# License: BSD-3-Clause
# Copyright the MNE-Python contributors.
from copy import deepcopy
DEFAULTS = dict(
color=dict(
mag="darkblue",
grad="b",
eeg="k",
eog="k",
ecg="m",
emg="k",
ref_meg="steelblue",
misc="k",
stim="k",
resp="k",
chpi="k",
exci="k",
ias="k",
syst="k",
seeg="saddlebrown",
dbs="seagreen",
dipole="k",
gof="k",
bio="k",
ecog="k",
hbo="#AA3377",
hbr="b",
fnirs_cw_amplitude="k",
fnirs_fd_ac_amplitude="k",
fnirs_fd_phase="k",
fnirs_od="k",
csd="k",
whitened="k",
gsr="#666633",
temperature="#663333",
eyegaze="k",
pupil="k",
),
si_units=dict(
mag="T",
grad="T/m",
eeg="V",
eog="V",
ecg="V",
emg="V",
misc="AU",
seeg="V",
dbs="V",
dipole="Am",
gof="GOF",
bio="V",
ecog="V",
hbo="M",
hbr="M",
ref_meg="T",
fnirs_cw_amplitude="V",
fnirs_fd_ac_amplitude="V",
fnirs_fd_phase="rad",
fnirs_od="V",
csd="V/m²",
whitened="Z",
gsr="S",
temperature="C",
eyegaze="rad",
pupil="m",
),
units=dict(
mag="fT",
grad="fT/cm",
eeg="µV",
eog="µV",
ecg="µV",
emg="µV",
misc="AU",
seeg="mV",
dbs="µV",
dipole="nAm",
gof="GOF",
bio="µV",
ecog="µV",
hbo="µM",
hbr="µM",
ref_meg="fT",
fnirs_cw_amplitude="V",
fnirs_fd_ac_amplitude="V",
fnirs_fd_phase="rad",
fnirs_od="V",
csd="mV/m²",
whitened="Z",
gsr="S",
temperature="C",
eyegaze="rad",
pupil="µm",
),
# scalings for the units
scalings=dict(
mag=1e15,
grad=1e13,
eeg=1e6,
eog=1e6,
emg=1e6,
ecg=1e6,
misc=1.0,
seeg=1e3,
dbs=1e6,
ecog=1e6,
dipole=1e9,
gof=1.0,
bio=1e6,
hbo=1e6,
hbr=1e6,
ref_meg=1e15,
fnirs_cw_amplitude=1.0,
fnirs_fd_ac_amplitude=1.0,
fnirs_fd_phase=1.0,
fnirs_od=1.0,
csd=1e3,
whitened=1.0,
gsr=1.0,
temperature=1.0,
eyegaze=1.0,
pupil=1e6,
),
# rough guess for a good plot
scalings_plot_raw=dict(
mag=1e-12,
grad=4e-11,
eeg=20e-6,
eog=150e-6,
ecg=5e-4,
emg=1e-3,
ref_meg=1e-12,
misc="auto",
stim=1,
resp=1,
chpi=1e-4,
exci=1,
ias=1,
syst=1,
seeg=1e-4,
dbs=1e-4,
bio=1e-6,
ecog=1e-4,
hbo=10e-6,
hbr=10e-6,
whitened=10.0,
fnirs_cw_amplitude=2e-2,
fnirs_fd_ac_amplitude=2e-2,
fnirs_fd_phase=2e-1,
fnirs_od=2e-2,
csd=200e-4,
dipole=1e-7,
gof=1e2,
gsr=1.0,
temperature=0.1,
eyegaze=2e-1,
pupil=1e-2,
),
scalings_cov_rank=dict(
mag=1e12,
grad=1e11,
eeg=1e5, # ~100x scalings
seeg=1e1,
dbs=1e4,
ecog=1e4,
hbo=1e4,
hbr=1e4,
),
ylim=dict(
mag=(-600.0, 600.0),
grad=(-200.0, 200.0),
eeg=(-200.0, 200.0),
misc=(-5.0, 5.0),
seeg=(-20.0, 20.0),
dbs=(-200.0, 200.0),
dipole=(-100.0, 100.0),
gof=(0.0, 1.0),
bio=(-500.0, 500.0),
ecog=(-200.0, 200.0),
hbo=(0, 20),
hbr=(0, 20),
csd=(-50.0, 50.0),
eyegaze=(-1, 1),
pupil=(-1.0, 1.0),
),
titles=dict(
mag="Magnetometers",
grad="Gradiometers",
eeg="EEG",
eog="EOG",
ecg="ECG",
emg="EMG",
misc="misc",
seeg="sEEG",
dbs="DBS",
bio="BIO",
dipole="Dipole",
ecog="ECoG",
hbo="Oxyhemoglobin",
ref_meg="Reference Magnetometers",
fnirs_cw_amplitude="fNIRS (CW amplitude)",
fnirs_fd_ac_amplitude="fNIRS (FD AC amplitude)",
fnirs_fd_phase="fNIRS (FD phase)",
fnirs_od="fNIRS (OD)",
hbr="Deoxyhemoglobin",
gof="Goodness of fit",
csd="Current source density",
stim="Stimulus",
gsr="Galvanic skin response",
temperature="Temperature",
eyegaze="Eye-tracking (Gaze position)",
pupil="Eye-tracking (Pupil size)",
resp="Respiration monitoring channel",
chpi="Continuous head position indicator (HPI) coil channels",
exci="Flux excitation channel",
ias="Internal Active Shielding data (Triux systems)",
syst="System status channel information (Triux systems)",
whitened="Whitened data",
),
mask_params=dict(
marker="o",
markerfacecolor="w",
markeredgecolor="k",
linewidth=0,
markeredgewidth=1,
markersize=4,
),
coreg=dict(
mri_fid_opacity=1.0,
dig_fid_opacity=1.0,
# go from unit scaling (e.g., unit-radius sphere) to meters
mri_fid_scale=5e-3,
dig_fid_scale=8e-3,
extra_scale=4e-3,
eeg_scale=4e-3,
eegp_scale=20e-3,
eegp_height=0.1,
ecog_scale=2e-3,
seeg_scale=2e-3,
meg_scale=1.0, # sensors are already in SI units
ref_meg_scale=1.0,
dbs_scale=5e-3,
fnirs_scale=5e-3,
source_scale=5e-3,
detector_scale=5e-3,
hpi_scale=4e-3,
head_color=(0.988, 0.89, 0.74),
hpi_color=(1.0, 0.0, 1.0),
extra_color=(1.0, 1.0, 1.0),
meg_color=(0.0, 0.25, 0.5),
ref_meg_color=(0.5, 0.5, 0.5),
helmet_color=(0.0, 0.0, 0.6),
eeg_color=(1.0, 0.596, 0.588),
eegp_color=(0.839, 0.15, 0.16),
ecog_color=(1.0, 1.0, 1.0),
dbs_color=(0.82, 0.455, 0.659),
seeg_color=(1.0, 1.0, 0.3),
fnirs_color=(1.0, 0.647, 0.0),
source_color=(1.0, 0.05, 0.0),
detector_color=(0.3, 0.15, 0.15),
lpa_color=(1.0, 0.0, 0.0),
nasion_color=(0.0, 1.0, 0.0),
rpa_color=(0.0, 0.0, 1.0),
),
noise_std=dict(grad=5e-13, mag=20e-15, eeg=0.2e-6),
eloreta_options=dict(eps=1e-6, max_iter=20, force_equal=False),
depth_mne=dict(
exp=0.8,
limit=10.0,
limit_depth_chs=True,
combine_xyz="spectral",
allow_fixed_depth=False,
),
depth_sparse=dict(
exp=0.8,
limit=None,
limit_depth_chs="whiten",
combine_xyz="fro",
allow_fixed_depth=True,
),
interpolation_method=dict(
eeg="spline", meg="MNE", fnirs="nearest", ecog="spline", seeg="spline"
),
volume_options=dict(
alpha=None,
resolution=1.0,
surface_alpha=None,
blending="mip",
silhouette_alpha=None,
silhouette_linewidth=2.0,
),
prefixes={
"k": 1e-3,
"h": 1e-2,
"": 1e0,
"d": 1e1,
"c": 1e2,
"m": 1e3,
"µ": 1e6,
"u": 1e6,
"n": 1e9,
"p": 1e12,
"f": 1e15,
},
transform_zooms=dict(translation=None, rigid=None, affine=None, sdr=None),
transform_niter=dict(
translation=(10000, 1000, 100),
rigid=(10000, 1000, 100),
affine=(10000, 1000, 100),
sdr=(10, 10, 5),
),
volume_label_indices=(
# Left and middle
4, # Left-Lateral-Ventricle
5, # Left-Inf-Lat-Vent
8, # Left-Cerebellum-Cortex
10, # Left-Thalamus-Proper
11, # Left-Caudate
12, # Left-Putamen
13, # Left-Pallidum
14, # 3rd-Ventricle
15, # 4th-Ventricle
16, # Brain-Stem
17, # Left-Hippocampus
18, # Left-Amygdala
26, # Left-Accumbens-area
28, # Left-VentralDC
# Right
43, # Right-Lateral-Ventricle
44, # Right-Inf-Lat-Vent
47, # Right-Cerebellum-Cortex
49, # Right-Thalamus-Proper
50, # Right-Caudate
51, # Right-Putamen
52, # Right-Pallidum
53, # Right-Hippocampus
54, # Right-Amygdala
58, # Right-Accumbens-area
60, # Right-VentralDC
),
report_stc_plot_kwargs=dict(
views=("lateral", "medial"),
hemi="split",
backend="pyvistaqt",
time_viewer=False,
show_traces=False,
size=(450, 450),
background="white",
time_label=None,
add_data_kwargs={"colorbar_kwargs": {"label_font_size": 12, "n_labels": 5}},
),
)
def _handle_default(k, v=None):
"""Avoid dicts as default keyword arguments.
Use this function instead to resolve default dict values. Example usage::
scalings = _handle_default('scalings', scalings)
"""
this_mapping = deepcopy(DEFAULTS[k])
if v is not None:
if isinstance(v, dict):
this_mapping.update(v)
else:
for key in this_mapping:
this_mapping[key] = v
return this_mapping
HEAD_SIZE_DEFAULT = 0.095 # in [m]
_BORDER_DEFAULT = "mean"
_INTERPOLATION_DEFAULT = "cubic"
_EXTRAPOLATE_DEFAULT = "auto"