Source code for biopsykit.io.tfm

"""Module for loading and processing Task Force Monitor (TFM) data."""

from typing import ClassVar

import pandas as pd
from scipy.io import loadmat

from biopsykit.utils._types_internal import path_t


[docs]class TFMDataset: """Class for loading and processing Task Force Monitor (TFM) data.""" CHANNEL_MAPPING: ClassVar[dict[str, str]] = {"ecg_1": "rawECG1", "ecg_2": "rawECG2", "icg_der": "rawICG"} _tz: str def __init__(self, data_dict: dict[str, pd.DataFrame], sampling_rate_dict: dict[str, float], tz: str | None = None): """Initialize a TFM dataset. Parameters ---------- data_dict : dict Dictionary containing TFM data. Keys are channel names, values are dataframes with the TFM data. tz : str, optional Timezone of the data. Default: None """ self._data = data_dict self._sampling_rate = sampling_rate_dict for name, data in data_dict.items(): setattr(self, name, data) for name, sampling_rate in sampling_rate_dict.items(): setattr(self, f"sampling_rate_hz_{name}", sampling_rate) setattr(self, "channels", list(self._data.keys())) self._tz = tz
[docs] @classmethod def from_mat_file( cls, path: path_t, # channel_mapping: Optional[Dict[str, str]] = None, tz: str | None = "Europe/Berlin", ): """Load a TFM dataset from a .mat file. Parameters ---------- path : str or :class:`~pathlib.Path` Path to the .mat file. tz : str, optional Timezone of the data. Default: "Europe/Berlin" """ data = loadmat(path, struct_as_record=False, squeeze_me=True) data_raw = data["RAW_SIGNALS"] # keys = [s for s in dir(data_raw) if not s.startswith("_")] # print(keys) data_dict = {key: getattr(data_raw, value) for key, value in cls.CHANNEL_MAPPING.items()} return cls(data_dict=data_dict, tz=tz, sampling_rate_dict={})
[docs] def data_as_df(self) -> dict[str, pd.DataFrame]: """Return the TFM data as a dictionary of pandas DataFrames. Returns ------- dict Dictionary containing the TFM data as pandas DataFrames. Keys are channel names, values are the dataframes. """ return self._data