Source code for pyetsimul.simulation.target_position

"""Target 3D position variations."""

import math
from collections.abc import Iterable

from ..types import Position3D
from .core import TargetVariation
from .grid_base import RegularGrid


[docs] class TargetPositionVariation(TargetVariation): """Varies gaze target positions in space using grid generation."""
[docs] def __init__( self, grid_center: Position3D, dx: list[float], dy: list[float], dz: list[float], grid_size: list[int] ) -> None: """Initialize target position variation. Args: grid_center: Center position for grid dx: X-axis displacement ranges dy: Y-axis displacement ranges dz: Z-axis displacement ranges grid_size: Number of steps in each dimension """ super().__init__("target_position") self.grid = RegularGrid(center=grid_center, dx=dx, dy=dy, dz=dz, grid_size=grid_size)
[docs] def describe(self) -> str: """Return human-readable description of target position variation.""" total_targets = len(self) return f"gaze targets across {total_targets} screen positions"
def __len__(self) -> int: """Return the total number of target positions.""" return math.prod(self.grid.grid_size)
[docs] def generate_values(self) -> Iterable[Position3D]: """Generate all target positions using the grid system.""" yield from self.grid.generate_positions()