Source code for aotpy.core.loop

"""
This module contains classes that describe conceptual loops in an adaptive optics system.
"""

from dataclasses import dataclass

from .base import Referenceable
from .image import Image
from .optical_sensor import WavefrontSensor
from .time import Time
from .wavefront_corrector import WavefrontCorrector

__all__ = ['Loop', 'ControlLoop', 'OffloadLoop']


[docs] @dataclass(kw_only=True) class Loop(Referenceable): """Base class that contains data regarding one system loop.""" commanded_corrector: WavefrontCorrector """Wavefront corrector that is being commanded by this loop.""" time: Time = None closed: bool = True "Indicates whether the loop was opened or closed for the duration of the data collection." commands: Image = None """Sequence of commands sent to the associated wavefront corrector. Each of the :math:`t` frames contains the values sent to each of the :math:`a_v` valid actuators of a certain wavefront corrector. (Dimensions :math:`t \\times a_v`, in m units, using data type flt)""" ref_commands: Image = None """Reference offset commands for each of :math:`a_v` actuators. (Dimensions :math:`a_v`, in m units, using data type flt)""" framerate: float = None 'Frequency at which the loop operates. (in Hz units)' delay: float = None """Full AO loop delay, measured from the mid-point of the integration to the mid-point of the command applied. Includes the RTC latency and other communication delays. (in frame units)""" time_filter_num: Image = None """One set of time filter numerators per mode being described. If :math:`m=1`, it is assumed to be applicable to all modes. The first numerator is the loop gain. (Dimensions :math:`m \\times i`, dimensionless quantity, using data type flt)""" time_filter_den: Image = None r"""One set of time filter denominators per mode being described. If :math:`m=1`, it is assumed to be applicable to all modes. Uses standard transfer function :math:`sys(z) = \sum_{i=0}^{N-1} b_i z^i/\sum_{j=0}^N a_j z^j`. (Dimensions :math:`m \times j`, dimensionless quantity, using data type flt)"""
[docs] @dataclass(kw_only=True) class ControlLoop(Loop): """Contains data relevant to a control loop (relation between one wavefront sensor and one wavefront corrector).""" input_sensor: WavefrontSensor modes: Image = None """Set of :math:`m` different :math:`h \\times w` arrays, each representing the orthonormal basis of the corresponding mode. (Dimensions :math:`m \\times h \\times w`, dimensionless quantity, using data type flt)""" modal_coefficients: Image = None """Sequence of coefficients of the modes to be corrected on the wavefront corrector. Each of the :math:`t` frames contains the coefficients respective to each of the :math:`m` modes being corrected. (Dimensions :math:`t \\times m`, in user defined units, using data type flt)""" control_matrix: Image = None """Linear relationship between the wavefront sensor measurements (:math:`d \\times s_v`) and the corrector commands (:math:`a_v`). (Dimensions :math:`a_v \\times d \\times s_v`, in user defined units, using data type flt)""" measurements_to_modes: Image = None """Linear relationship between the wavefront sensor measurements (:math:`d \\times s_v`) and the modes to be corrected (:math:`m`). (Dimensions :math:`m \\times d \\times s_v`, in user defined units, using data type flt)""" modes_to_commands: Image = None """Linear relationship between the modes (:math:`m`) to be corrected and the corrector commands (:math:`a_v`). (Dimensions :math:`a_v \\times m`, in user defined units, using data type flt)""" interaction_matrix: Image = None """Represents the measurements of the wavefront sensor (:math:`s_v \\times d`) in response to each actuator of the wavefront corrector (:math:`a_v`). (Dimensions :math:`s_v \\times d \\times a_v`, in user defined units, using data type flt)""" commands_to_modes: Image = None """Represents the modal response (:math:`m`) to each actuator of the wavefront corrector (:math:`a_v`). (Dimensions :math:`m \\times a_v`, in user defined units, using data type flt)""" modes_to_measurements: Image = None """Linear relationship between the modal response (:math:`m`) and the wavefront sensor measurements (:math:`s_v \\times d`). (Dimensions :math:`s_v \\times d \\times m`, in user defined units, using data type flt)""" residual_commands: Image = None """Reconstructed corrector commands before time filtering (Dimensions :math:`t \\times a_v`, in user defined units, using data type flt)"""
[docs] @dataclass(kw_only=True) class OffloadLoop(Loop): """Contains data relevant to an offload loop (relation between two wavefront correctors).""" input_corrector: WavefrontCorrector offload_matrix: Image = None """Linear relationship between the commands from one actuator (:math:`a1`) and the corresponding commands that get offloaded to another actuator (:math:`a2`). (Dimensions :math:`a2_v \\times a1_v`, in user defined units, using data type flt)"""