aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/PupillAnalysis/WorkloadIndex.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/PupillAnalysis/WorkloadIndex.py')
-rw-r--r--src/argaze/PupillAnalysis/WorkloadIndex.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/argaze/PupillAnalysis/WorkloadIndex.py b/src/argaze/PupillAnalysis/WorkloadIndex.py
new file mode 100644
index 0000000..4a20091
--- /dev/null
+++ b/src/argaze/PupillAnalysis/WorkloadIndex.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+""" """
+
+__author__ = "Théo de la Hogue"
+__credits__ = ["Jean-Paul Imbert"]
+__copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)"
+__license__ = "BSD"
+
+from typing import TypeVar
+from dataclasses import dataclass, field
+import math
+
+from argaze import PupillFeatures
+
+import numpy
+
+@dataclass
+class PupillDiameterAnalyzer(PupillFeatures.PupillDiameterAnalyzer):
+ """Periodic average of pupill diameter variations to pupill diameter reference value."""
+
+ reference: PupillFeatures.PupillDiameter
+ """ """
+
+ period: int | float = field(default=1)
+ """Identification period length."""
+
+ def __post_init__(self):
+
+ assert(self.reference.valid)
+
+ self.__variations_sum = 0.
+ self.__variations_number = 0
+ self.__last_ts = 0
+
+ def analyze(self, ts, pupill_diameter) -> float:
+ """Analyze workload index from successive timestamped pupill diameters."""
+
+ # Ignore non valid pupill diameter
+ if not pupill_diameter.valid:
+
+ return None
+
+ if ts - self.__last_ts >= self.period:
+
+ if self.__variations_number > 0 and self.reference.value > 0.:
+
+ workload_index = (self.__variations_sum / self.__variations_number) / self.reference.value
+
+ else:
+
+ workload_index = 0.
+
+ self.__variations_sum = pupill_diameter.value - self.reference.value
+ self.__variations_number = 1
+ self.__last_ts = ts
+
+ return workload_index
+
+ else:
+
+ self.__variations_sum += pupill_diameter.value - self.reference.value
+ self.__variations_number += 1
+ \ No newline at end of file