Source code for rtgym.agent.sensory.movement_modulated.displacement_abs
import numpy as np
import rtgym.dataclass
from .mm_base import MMBase
import rtgym
[docs]
class DisplacementAbs(MMBase):
"""Absolute displacement signal sensory cells.
Generates sensory responses based on the absolute displacement of the agent.
Displacement values may include negative values and represent spatial movement
in both x and y directions.
Args:
arena (Arena): Arena environment object.
**kwargs: Additional keyword arguments including:
n_cells (int): Number of displacement cells (must be even).
sigma_s (float): Temporal smoothing sigma in seconds.
ssigma_s (float): Spatial smoothing sigma in seconds.
Attributes:
sens_type (str): Sensory type identifier 'displacement_abs'.
"""
sens_type = 'displacement_abs'
def __init__(self, arena, **kwargs):
super().__init__(arena, **kwargs)
# parameters
self.sigma_ts = self._t_to_ts(kwargs.get('sigma_s', 0.0))
self.ssigma_ts = self._t_to_ts(kwargs.get('ssigma_s', 0.0))
# check parameters
self._check_params()
def _check_params(self):
""" Check parameters """
assert self.n_cells > 0, "n_cells <= 0"
assert self.n_cells % 2 == 0, "n_cells must be even"
[docs]
def get_response(self, agent_data: rtgym.dataclass.Trajectory):
assert isinstance(agent_data, rtgym.dataclass.Trajectory), \
"agent_data for displacement_abs must be a rtgym.dataclass.Trajectory"
dup_res = self._duplicate_res(agent_data.disp, divisor=2)
return self._smooth_res(dup_res)
[docs]
def get_specs(self):
specs = super().get_specs()
return specs