Source code for pyetsimul.core.default_configs

"""Centralized default parameters for PyEtSimul core components.

Defaults for anatomical and hardware parameters.
"""

from dataclasses import dataclass

from pyetsimul.log import info


[docs] @dataclass class EyeAnatomyDefaults: """Anatomical parameters based on Böhme et al. 2008, Boff & Lincoln 1988.""" AXIAL_LENGTH: float = 24.75 # mm PUPIL_RADIUS: float = 3.0 # mm N_AQUEOUS_HUMOR: float = 1.336 FOVEA_ALPHA_DEG: float = 6.0 # deg FOVEA_BETA_DEG: float = 2.0 # deg EYELID_OPENNESS: float = 1.0
[docs] @dataclass class CorneaDefaults: """Corneal parameters from Böhme et al. 2008, Goncharov & Dainty 2007.""" # Spherical model ANTERIOR_RADIUS: float = 7.98 # mm POSTERIOR_RADIUS: float = 6.22 # mm REFRACTIVE_INDEX: float = 1.376 THICKNESS_OFFSET: float = 1.15 # mm CORNEA_DEPTH: float = 3.54 # mm CENTER_TO_ROTATION: float = 10.20 # mm # Conic model (30-year subject) CONIC_ANTERIOR_RADIUS: float = 7.76 # mm CONIC_ANTERIOR_K: float = -0.10 CONIC_POSTERIOR_RADIUS: float = 6.52 # mm CONIC_POSTERIOR_K: float = -0.30 CONIC_THICKNESS_OFFSET: float = 0.55 # mm
[docs] @dataclass class PupilDefaults: """Pupil parameters based on Wyatt 1995.""" BOUNDARY_POINTS_ELLIPTICAL: int = 100 BOUNDARY_POINTS_FACTORY: int = 20 BOUNDARY_POINTS_REALISTIC: int = 360 BASE_RADIUS: float = 2.5 # mm NONCIRCULARITY: float = 0.0166 ELLIPSE_CONTRIBUTION: float = 0.5 MAJOR_AXIS_ANGLE: float = 0.0 # rad OFFSET_FROM_LIMBUS: tuple[float, float] = (0.27, 0.20) # mm N_HARMONICS: int = 6 REFERENCE_AGE: float = 35.8 # years
[docs] @dataclass class CameraDefaults: """Camera parameters for typical eye tracking configurations.""" FOCAL_LENGTH: float = 2880.0 # pixels PRINCIPAL_POINT_X: float = 640.0 # pixels PRINCIPAL_POINT_Y: float = 512.0 # pixels RESOLUTION_WIDTH: int = 1280 # pixels RESOLUTION_HEIGHT: int = 1024 # pixels MEASUREMENT_ERROR: float = 0.0 # pixels
[docs] @dataclass class EyelidDefaults: """Eyelid shape and numerical parameters.""" LOWER_CAP_FRACTION: float = 0.5 ELLIPSE_WIDTH_TO_HEIGHT: float = 1.5 ELLIPSE_WIDTH_MULTIPLIER: float = 2.0 HEIGHT_MULTIPLIER: float = 2.0 BISECTION_ITERATIONS_PHI1: int = 80 BISECTION_ITERATIONS_PHI2: int = 100 BISECTION_ITERATIONS_AREA: int = 120
[docs] @dataclass class PupilDecentrationDefaults: """Pupil decentration parameters from Wildenmann & Schaeffel (2013). Reference: Wildenmann U & Schaeffel F. Variations of pupil centration and their effects on video eye tracking. Ophthalmic Physiol Opt 2013, 33, 634-641. """ # Right eye (OD): horizontal -0.03±0.07 RIGHT_EYE_X_COEFF: float = -0.03 # mm/mm RIGHT_EYE_X_STD: float = 0.07 # mm/mm # Right eye (OD): vertical -0.04±0.06 mm/mm RIGHT_EYE_Y_COEFF: float = -0.04 # mm/mm RIGHT_EYE_Y_STD: float = 0.06 # mm/mm # Left eye (OS): horizontal +0.03±0.04 LEFT_EYE_X_COEFF: float = 0.03 # mm/mm LEFT_EYE_X_STD: float = 0.04 # mm/mm # Left eye (OS): vertical -0.05±0.12 mm/mm LEFT_EYE_Y_COEFF: float = -0.05 # mm/mm LEFT_EYE_Y_STD: float = 0.12 # mm/mm # Baseline diameter used in the original study BASELINE_DIAMETER: float = 4.75 # mm (4.75±0.52 mm at 800 lux)
[docs] def pprint_anatomical_defaults() -> None: """Print anatomical default values in formatted table.""" info("Eye Anatomy:") info(f" Axial Length: {EyeAnatomyDefaults.AXIAL_LENGTH:.2f} mm") info(f" Pupil Radius: {EyeAnatomyDefaults.PUPIL_RADIUS:.1f} mm") info(f" Aqueous Humor n: {EyeAnatomyDefaults.N_AQUEOUS_HUMOR:.3f}") info(f" Fovea α: {EyeAnatomyDefaults.FOVEA_ALPHA_DEG:.1f}°") info(f" Fovea β: {EyeAnatomyDefaults.FOVEA_BETA_DEG:.1f}°") info("Cornea:") info(f" Anterior Radius: {CorneaDefaults.ANTERIOR_RADIUS:.2f} mm") info(f" Posterior Radius: {CorneaDefaults.POSTERIOR_RADIUS:.2f} mm") info(f" Refractive Index: {CorneaDefaults.REFRACTIVE_INDEX:.3f}") info(f" Thickness: {CorneaDefaults.THICKNESS_OFFSET:.2f} mm")
[docs] def pprint_hardware_defaults() -> None: """Print hardware default values in formatted table.""" info("Camera:") info(f" Focal Length: {CameraDefaults.FOCAL_LENGTH:.0f} pixels") info(f" Resolution: {CameraDefaults.RESOLUTION_WIDTH}x{CameraDefaults.RESOLUTION_HEIGHT}") info(f" Principal Point: ({CameraDefaults.PRINCIPAL_POINT_X:.0f}, {CameraDefaults.PRINCIPAL_POINT_Y:.0f})") info("Pupil:") info(f" Base Radius: {PupilDefaults.BASE_RADIUS:.1f} mm") info(f" Noncircularity: {PupilDefaults.NONCIRCULARITY:.4f}") info(f" Boundary Points: {PupilDefaults.BOUNDARY_POINTS_REALISTIC}")
[docs] def pprint_all_defaults() -> None: """Print all default parameters in formatted tables.""" info("=== PyEtSimul Default Parameters ===") pprint_anatomical_defaults() info() pprint_hardware_defaults()