aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/GazeFeatures.py
diff options
context:
space:
mode:
authorThéo de la Hogue2022-04-20 20:40:50 +0200
committerThéo de la Hogue2022-04-20 20:40:50 +0200
commit2e0f8f4200da7bba4667e4bc098a3c5d964ae40e (patch)
treebdf5dac9208af0c47a0926071d334e569b94d939 /src/argaze/GazeFeatures.py
parent2ebe773a5137048b013ee43e4ad4651e69ddc9bd (diff)
downloadargaze-2e0f8f4200da7bba4667e4bc098a3c5d964ae40e.zip
argaze-2e0f8f4200da7bba4667e4bc098a3c5d964ae40e.tar.gz
argaze-2e0f8f4200da7bba4667e4bc098a3c5d964ae40e.tar.bz2
argaze-2e0f8f4200da7bba4667e4bc098a3c5d964ae40e.tar.xz
Using @dataclass decoration to define base library data structures
Diffstat (limited to 'src/argaze/GazeFeatures.py')
-rw-r--r--src/argaze/GazeFeatures.py34
1 files changed, 15 insertions, 19 deletions
diff --git a/src/argaze/GazeFeatures.py b/src/argaze/GazeFeatures.py
index dfbfc2d..a382ddc 100644
--- a/src/argaze/GazeFeatures.py
+++ b/src/argaze/GazeFeatures.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
+from dataclasses import dataclass
import math
from argaze import DataStructures
@@ -9,16 +10,12 @@ import numpy
FIXATION_MAX_DURATION = 1000
+@dataclass
class GazePosition(DataStructures.DictObject):
"""Define gaze position."""
- def __init__(self, x, y):
-
- super().__init__(type(self).__name__, **{'x': x, 'y': y})
-
- def __iter__(self):
- yield self.x
- yield self.y
+ x: float
+ y: float
class TimeStampedGazePositions(DataStructures.TimeStampedBuffer):
"""Define timestamped buffer to store gaze positions."""
@@ -30,12 +27,13 @@ class TimeStampedGazePositions(DataStructures.TimeStampedBuffer):
super().__setitem__(key, value)
+@dataclass
class Fixation(DataStructures.DictObject):
"""Define fixation"""
- def __init__(self, duration, dispersion, cx, cy):
-
- super().__init__(type(self).__name__, **{'duration': duration, 'dispersion': dispersion, 'centroid': [cx, cy]})
+ duration: float
+ dispersion: float
+ centroid: tuple((float, float))
class TimeStampedFixations(DataStructures.TimeStampedBuffer):
"""Define timestamped buffer to store fixations."""
@@ -177,7 +175,7 @@ class DispersionBasedFixationIdentifier(FixationIdentifier):
if duration > 0:
# return timestamp and fixation
- return ts_list[0], Fixation(duration, dispersion, cx, cy)
+ return ts_list[0], Fixation(duration, dispersion, (cx, cy))
return -1, None
@@ -193,12 +191,13 @@ class DispersionBasedFixationIdentifier(FixationIdentifier):
return -1, None
+@dataclass
class VisualScanStep(DataStructures.DictObject):
"""Define a visual scan step as a duration, the name of the area of interest and all its frames during the step."""
- def __init__(self, duration, aoi, frames = []):
-
- super().__init__(type(self).__name__, **{'duration': duration, 'aoi': aoi, 'frames': frames})
+ duration: float
+ aoi: str
+ frames: DataStructures.TimeStampedBuffer
class TimeStampedVisualScanSteps(DataStructures.TimeStampedBuffer):
"""Define timestamped buffer to store visual scan steps."""
@@ -230,9 +229,7 @@ class VisualScanGenerator():
if step == None:
continue
- if step.get_type() == 'VisualScanStep':
-
- visual_scan_steps[ts] = step
+ visual_scan_steps[ts] = step
return visual_scan_steps
@@ -260,9 +257,8 @@ class PointerBasedVisualScan(VisualScanGenerator):
#if not aoi_scene_current.looked:
# raise ValueError('TimeStampedAOIScenes must be looked using look_at method.')
- for name in aoi_scene_current.areas():
+ for name, aoi in aoi_scene_current.areas.items():
- aoi = aoi_scene_current[name]
aoi_looked = aoi.pointer != None
if aoi_looked: