Spaces:
Running
Running
| # Authors: The MNE-Python contributors. | |
| # License: BSD-3-Clause | |
| # Copyright the MNE-Python contributors. | |
| import numpy as np | |
| from ...utils import _validate_type | |
| from .calibration import Calibration | |
| def _check_calibration( | |
| calibration, want_keys=("screen_size", "screen_resolution", "screen_distance") | |
| ): | |
| missing_keys = [] | |
| for key in want_keys: | |
| if calibration.get(key, None) is None: | |
| missing_keys.append(key) | |
| if missing_keys: | |
| raise KeyError( | |
| "Calibration object must have the following keys with valid values:" | |
| f" {', '.join(missing_keys)}" | |
| ) | |
| else: | |
| return True | |
| def get_screen_visual_angle(calibration): | |
| """Calculate the radians of visual angle that the participant screen subtends. | |
| Parameters | |
| ---------- | |
| calibration : Calibration | |
| An instance of Calibration. Must have valid values for ``"screen_size"`` and | |
| ``"screen_distance"`` keys. | |
| Returns | |
| ------- | |
| visual angle in radians : ndarray, shape (2,) | |
| The visual angle of the monitor width and height, respectively. | |
| """ | |
| _validate_type(calibration, Calibration, "calibration") | |
| _check_calibration(calibration, want_keys=("screen_size", "screen_distance")) | |
| size = np.array(calibration["screen_size"]) | |
| return 2 * np.arctan(size / (2 * calibration["screen_distance"])) | |