"""Collection of Actions that involve beam tracing."""
from .base import Action
import logging
LOGGER = logging.getLogger(__name__)
[docs]class ABCD(Action):
"""Computation of an ABCD matrix over a path.
See :func:`.compute_abcd` for details.
"""
def __init__(self, name="abcd", **kwargs):
super().__init__(name)
self.kwargs = kwargs
def _requests(self, model, memo, first=True):
pass
def _do(self, state):
return state.model.ABCD(solution_name=self.name, **self.kwargs)
[docs]class BeamTrace(Action):
"""Full beam tracing on a complete model.
See :meth:`.Model.beam_trace` for details.
"""
def __init__(self, name="beam_trace", **kwargs):
super().__init__(name)
self.kwargs = kwargs
def _requests(self, model, memo, first=True):
pass
def _do(self, state):
return state.model.beam_trace(solution_name=self.name, **self.kwargs)
[docs]class PropagateBeam(Action):
"""Propagation of a beam, in a single plane, through a given path.
See :meth:`.Model.propagate_beam` for details.
"""
def __init__(self, name="propagation", **kwargs):
super().__init__(name)
self.kwargs = kwargs
def _requests(self, model, memo, first=True):
pass
def _do(self, state):
return state.model.propagate_beam(solution_name=self.name, **self.kwargs)
[docs]class PropagateAstigmaticBeam(Action):
"""Propagation of a beam, in both planes, through a given path.
See :meth:`.Model.propagate_beam_astig` for details.
"""
def __init__(self, name="astig_propagation", **kwargs):
super().__init__(name)
self.kwargs = kwargs
def _requests(self, model, memo, first=True):
pass
def _do(self, state):
return state.model.propagate_beam_astig(solution_name=self.name, **self.kwargs)