From 3d94bf30083f6df047cf9ec6d9a9739397db1947 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=93=D1=83=D1=80=D0=B0=D0=BD=D0=B5=D1=86=D1=8C?= Date: Tue, 24 Feb 2026 15:12:49 +0200 Subject: [PATCH] Parse accelerometer values as int16 (remove float conversion) --- agent/src/file_datasource.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/agent/src/file_datasource.py b/agent/src/file_datasource.py index 8781d80..00becfb 100644 --- a/agent/src/file_datasource.py +++ b/agent/src/file_datasource.py @@ -14,6 +14,9 @@ import config class FileDatasource: + INT16_MIN = -32768 + INT16_MAX = 32767 + def __init__(self, accelerometer_filename: str, gps_filename: str) -> None: self.accelerometer_filename = accelerometer_filename self.gps_filename = gps_filename @@ -199,13 +202,24 @@ class FileDatasource: # Otherwise treat it as header-ish (skip it) return True, None + @staticmethod + def _parse_int16(s: str) -> int: + """ + Parse a signed 16-bit integer from string representation. + The file is expected to contain integer literals (e.g. "123", "-42"). + """ + v = int(s) + if not FileDatasource.INT16_MIN <= v <= FileDatasource.INT16_MAX: + raise ValueError(f"Value {v} is out of signed 16-bit range") + return v + @staticmethod def _parse_acc(row: List[str]) -> Accelerometer: if len(row) < 3: raise ValueError(f"Accelerometer row must have 3 values (x,y,z). Got: {row}") - x = int(float(row[0])) - y = int(float(row[1])) - z = int(float(row[2])) + x = FileDatasource._parse_int16(row[0]) + y = FileDatasource._parse_int16(row[1]) + z = FileDatasource._parse_int16(row[2]) return Accelerometer(x=x, y=y, z=z) @staticmethod