Source code for dispel.processing.modalities
"""A module containing functionality to process specific modalities."""
from typing import Iterable, Set
from dispel.data.levels import Level
from dispel.data.values import AVEnum
from dispel.processing.level import LevelFilter
[docs]
class HandModality(AVEnum):
"""Handedness for tasks that are applied to different hands."""
LEFT = ("left hand", "left")
RIGHT = ("right hand", "right")
[docs]
class HandModalityFilter(LevelFilter):
"""Filter for same hand modality."""
[docs]
def __init__(self, hand: HandModality):
self.hand = hand
[docs]
def repr(self):
"""Get representation of the filter."""
return f"only {self.hand.av}>"
[docs]
def filter(self, levels: Iterable[Level]) -> Set[Level]:
"""Filter levels performed with a specific hand."""
return set(
filter(
lambda x: "usedHand" in x.context
and x.context.get_raw_value("usedHand") == self.hand.abbr,
levels,
)
)
[docs]
class SensorModality(AVEnum):
# FIXME remove class
"""Sensor types enumerator."""
[docs]
def unit(self, order: int = 1) -> str:
"""Get the unit of the sensor signal.
Parameters
----------
order
The unit order.
Returns
-------
str
The unit of the sensor.
"""
basis = {"acc": "G", "gyr": "rad/s", "itrem": "pixel"}[self.abbr]
if order == 1:
return basis
return "/".join([x + f"^{order}" for x in basis.split("/")])
ACCELEROMETER = ("accelerometer", "acc")
GYROSCOPE = ("gyroscope", "gyr")
INTENTIONAL = ("intentional tremors", "itrem")
[docs]
class LimbModality(AVEnum):
"""Type of limb exercises enumerator."""
UPPER_LIMB = ("upper limb", "upper")
LOWER_LIMB = ("lower limb", "lower")