Source code for tolteca.simu.base
#!/usr/bin/env python
from astropy.modeling import Model
import astropy.units as u
__all__ = ['ProjModel', 'LabelFrame']
[docs]class ProjModel(Model):
    """
    Base class for models that transform properties from one frame to another.
    """
    fittable = False
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.inputs = self.input_frame.axes_names
        self.outputs = self.output_frame.axes_names
        self.name = f'{self.output_frame.name}_proj' 
[docs]class LabelFrame(object):
    """
    An coordinate frame for describing discrete detector attributes.
    """
    def __init__(self, axes_names, axes_order=None, name=None):
        self._naxes = len(axes_names)
        if axes_order is None:
            axes_order = tuple(range(self._naxes))
        self._axes_order = axes_order
        self._axes_names = axes_names
        self._axes_type = ('LABEL', ) * self._naxes
        if name is None:
            name = self.__class__.__name__
        self._name = name
        self._unit = (u.dimensionless_unscaled, ) * self._naxes
        self._axis_physical_types = ('meta.id', ) * self._naxes
    def __repr__(self):
        return (
            f'<{self.__class__.__name__}(name="{self.name}", '
            f'axes_names={self.axes_names}, '
            f'axes_order={self.axes_order})>')
    def __str__(self):
        return f'{self.__class__.__name__}({self.axes_names[0]})'
    @property
    def name(self):
        """ A custom name of this frame."""
        return self._name
    @name.setter
    def name(self, val):
        """ A custom name of this frame."""
        self._name = val
    @property
    def naxes(self):
        """ The number of axes in this frame."""
        return self._naxes
    @property
    def axes_names(self):
        """ Names of axes in the frame."""
        return self._axes_names
    @property
    def axes_order(self):
        """ A tuple of indices which map inputs to axes."""
        return self._axes_order
    @property
    def axes_type(self):
        return self._axes_type
[docs]    def coordinates(self, *args):
        """ Create world coordinates object"""
        # reorder the args with axes order
        return args 
    @property
    def unit(self):
        return self._unit
    @property
    def axis_physical_types(self):
        return self._axis_physical_types