46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
# 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"]))
|