Source code for biopsykit.sleep.sleep_wake_detection.sleep_wake_detection

"""General class for sleep/wake detection."""
from typing import Optional

from biopsykit.sleep.sleep_wake_detection.algorithms.cole_kripke import ColeKripke
from biopsykit.sleep.sleep_wake_detection.algorithms.cole_kripke_old import ColeKripkeOld
from biopsykit.sleep.sleep_wake_detection.algorithms.sadeh import Sadeh
from biopsykit.sleep.sleep_wake_detection.algorithms.sazonov import Sazonov
from biopsykit.sleep.sleep_wake_detection.algorithms.scripps_clinic import ScrippsClinic
from biopsykit.sleep.sleep_wake_detection.algorithms.webster import Webster
from biopsykit.utils._types import arr_t
from biopsykit.utils.datatype_helper import SleepWakeDataFrame, _SleepWakeDataFrame


[docs]class SleepWakeDetection: """General class for sleep/wake detection.""" sleep_wake_algo = None def __init__(self, algorithm_type: Optional[str] = None, **kwargs): """General class for sleep/wake detection. This class provides a generalized interface for sleep/wake detection independent of the used algorithm. When initializing a new instance the algorithm type can be specified.> Parameters ---------- algorithm_type : str, optional name of sleep/wake detection algorithm to internally use for sleep/wake detection or ``None`` to use default algorithm (Cole/Kripke Algorithm, see :class:`~biopsykit.sleep.sleep_wake_detection.algorithms.cole_kripke.ColeKripke` for further information) kwargs optional parameters to be passed to the sleep/wake detection algorithm. The possible parameters depend on the selected sleep/wake detection algorithm and are passed to the respective class. """ available_sleep_wake_algorithms = { "cole_kripke": ColeKripke, "sadeh": Sadeh, "cole_kripke_old": ColeKripkeOld, "webster": Webster, "scripps_clinic": ScrippsClinic, "sazonov": Sazonov, } if algorithm_type is None: algorithm_type = "cole_kripke" if algorithm_type not in available_sleep_wake_algorithms: raise ValueError( "Invalid algorithm type for sleep/wake detection! Must be one of {}, got {}.".format( available_sleep_wake_algorithms, algorithm_type ) ) sleep_wake_cls = available_sleep_wake_algorithms[algorithm_type] if ( sleep_wake_cls is ColeKripke or sleep_wake_cls is ColeKripkeOld or sleep_wake_cls is Webster or sleep_wake_cls is ScrippsClinic ): self.sleep_wake_algo = sleep_wake_cls(**kwargs) else: self.sleep_wake_algo = sleep_wake_cls()
[docs] def predict(self, data: arr_t, **kwargs) -> SleepWakeDataFrame: """Apply sleep/wake prediction on input data. Parameters ---------- data : array_like input data **kwargs : additional arguments to be passed to the sleep/wake detection algorithm. The possible arguments depend on the individual algorithm. Returns ------- :obj:`~biopsykit.utils.datatype_helper.SleepWakeDataFrame` dataframe with sleep/wake predictions """ return _SleepWakeDataFrame(self.sleep_wake_algo.predict(data, **kwargs))