# 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"]))