Module moog.game_rules.fixation

Rule that can be used to monitor fixation.

This rule is used to keep track of how long the subject has been fixating on a sprite (e.g. a fixation cross). The fixation duration is stored in the environment meta_state, and at each step either incremented if subject is fixating or reset to 0 otherwise.

A config that uses this rule should have a conditional rule checking whether the fixation duration in the environment meta_state has reached a threshold, in order to proceed with the task.

Expand source code
"""Rule that can be used to monitor fixation.

This rule is used to keep track of how long the subject has been fixating on a
sprite (e.g. a fixation cross). The fixation duration is stored in the
environment meta_state, and at each step either incremented if subject is
fixating or reset to 0 otherwise.

A config that uses this rule should have a conditional rule checking whether the
fixation duration in the environment meta_state has reached a threshold, in
order to proceed with the task.
"""

from . import abstract_rule
import numpy as np


class Fixation(abstract_rule.AbstractRule):
    """Fixation rule."""

    def __init__(self,
                 agent_layer,
                 fixation_layer,
                 fixation_threshold=0.1,
                 meta_state_fixation_key='fixation_duration'):
        """Constructor.

        Args:
            agent_layer: String. Key in environment state of agent layer. Agent
                is assumed to be the sprite at index 0 in this layer.
            fixation_layer: String. Key in environment state of agent layer.
                Fixation target is assumed to be the sprite at index 0 in this
                layer.
            fixation_threshold: Float. Distance from agent to fixation target
                considered fixating.
            meta_state_fixation_key: String. Key in meta_state whose value
                contains fixation duration.
        """
        self._agent_layer = agent_layer
        self._fixation_layer = fixation_layer
        self._fixation_threshold = fixation_threshold
        self._meta_state_fixation_key = meta_state_fixation_key

    def reset(self, state, meta_state):
        del state
        meta_state[self._meta_state_fixation_key] = 0

    def step(self, state, meta_state):
        agent = state[self._agent_layer][0]
        target = state[self._fixation_layer][0]
        dist = np.linalg.norm(agent.position - target.position)
        if dist < self._fixation_threshold:
            meta_state[self._meta_state_fixation_key] += 1
        else:
            meta_state[self._meta_state_fixation_key] = 0

Classes

class Fixation (agent_layer, fixation_layer, fixation_threshold=0.1, meta_state_fixation_key='fixation_duration')

Fixation rule.

Constructor.

Args

agent_layer
String. Key in environment state of agent layer. Agent is assumed to be the sprite at index 0 in this layer.
fixation_layer
String. Key in environment state of agent layer. Fixation target is assumed to be the sprite at index 0 in this layer.
fixation_threshold
Float. Distance from agent to fixation target considered fixating.
meta_state_fixation_key
String. Key in meta_state whose value contains fixation duration.
Expand source code
class Fixation(abstract_rule.AbstractRule):
    """Fixation rule."""

    def __init__(self,
                 agent_layer,
                 fixation_layer,
                 fixation_threshold=0.1,
                 meta_state_fixation_key='fixation_duration'):
        """Constructor.

        Args:
            agent_layer: String. Key in environment state of agent layer. Agent
                is assumed to be the sprite at index 0 in this layer.
            fixation_layer: String. Key in environment state of agent layer.
                Fixation target is assumed to be the sprite at index 0 in this
                layer.
            fixation_threshold: Float. Distance from agent to fixation target
                considered fixating.
            meta_state_fixation_key: String. Key in meta_state whose value
                contains fixation duration.
        """
        self._agent_layer = agent_layer
        self._fixation_layer = fixation_layer
        self._fixation_threshold = fixation_threshold
        self._meta_state_fixation_key = meta_state_fixation_key

    def reset(self, state, meta_state):
        del state
        meta_state[self._meta_state_fixation_key] = 0

    def step(self, state, meta_state):
        agent = state[self._agent_layer][0]
        target = state[self._fixation_layer][0]
        dist = np.linalg.norm(agent.position - target.position)
        if dist < self._fixation_threshold:
            meta_state[self._meta_state_fixation_key] += 1
        else:
            meta_state[self._meta_state_fixation_key] = 0

Ancestors

Inherited members