Source code for shamo.eeg.leadfield.single.solution

"""Implement `SolEEGLeadfield` class."""
import h5py
import numpy as np

from shamo.core.problems.single import CompSensors
from shamo.core.solutions.single import SolGetDP


[docs]class SolEEGLeadfield(SolGetDP): """Store information about an EEG leadfield matrix. Parameters ---------- name : str The name of the solution. parent_path : str, byte or os.PathLike The path to the parent directory of the solution. Other Parameters ---------------- sigmas : dict [str, list [float, str]] The electrical conductivity of the tissues. model_json_path : str The relative path of the model JSON file. markers : list [str] The names of the markers. reference : list [str] The name of the reference. rois : list [str] The names of the tissues of the region of interest. sensors : list [str] The names of the active sensors. shape : tuple [int] The shape of the matrix. use_grid : bool If ``True``, the source space is based on a grid. """ def __init__(self, name, parent_path, **kwargs): super().__init__(name, parent_path, **kwargs) self.update( { "markers": kwargs.get("markers", []), "reference": kwargs.get("reference", []), "rois": kwargs.get("rois", []), "sensors": kwargs.get("sensors", []), "shape": tuple(kwargs.get("shape", [])), "use_grid": kwargs.get("use_grid", False), } ) @property def matrix_path(self): """Return the path to the matrix HDF5 file. Returns ------- pathlib.Path The path to the matrix HDF5 file. """ return self.path / f"{self.name}.hdf5" @property def shape(self): """Return the shape of the matrix. Returns ------- tuple [int] The shape of the matrix. """ return self["shape"] @property def n_sensors(self): """Return the number of active sensors. Returns ------- int The number of active sensors. """ return self["shape"][0] @property def n_sources(self): """Return the number of sources. Returns ------- int The number of sources. """ return self["shape"][1] @property def markers(self): """Return the names of the markers. Returns ------- list [str] The names of the markers. """ return self["markers"] @property def reference(self): """Return the name of the reference. Returns ------- str The name of the reference. """ return self["reference"][0] @property def sensors(self): """Return the names of the active sensors. Returns ------- list [str] The names of the active sensors. """ return self["sensors"] @property def rois(self): """Return the names of the tissues of the region of interest. Returns ------- list [str] The names of the tissues of the region of interest. """ return self["rois"] @property def use_grid(self): """Return ``True`` if the source space is based on a grid. Returns ------- bool ``True`` if the source space is based on a grid, ``False`` otherwise. """ return self["use_grid"] @property def source_sp_path(self): """Return the path to the source space file. Returns ------- pathlib.Path The path to the source space file. """ if self.use_grid: return self.path / f"{self.name}_mask.nii.gz" return self.path / f"{self.name}_elems.npz"
[docs] def set_matrix(self, matrix): """Set the matrix of the solution. Parameters ---------- numpy.ndarray The leadfield matrix. """ with h5py.File(self.matrix_path, "w") as f: data = f.create_dataset( "e_field", matrix.shape, dtype="f", compression="lzf" ) data[...] = matrix self["shape"] = matrix.shape
[docs] def get_matrix(self): """Return the matrix. Returns ------- h5py.Dataset The dataset containing the matrix. """ return h5py.File(self.matrix_path, "r")["e_field"]