Source code for syned.beamline.optical_element_with_surface_shape

"""
Base classes for optical elements with shape(s).

   * OpticalElementsWithSurfaceShape (e.g. an elliptical mirror).
   * OpticalElementsWithMultipleShapes (e.g. a lens that has two surfaces).
"""
from syned.beamline.optical_element import OpticalElement
from syned.beamline.shape import SurfaceShape

[docs]class OpticalElementsWithMultipleShapes(OpticalElement): """ Constructor. Parameters ---------- name : str The optical elemnt name. surface_shapes : list List with surface shapes (instances of SurfaceShape) boundary_shape : instance of BoundaryShape, optional The element shape. The default=None means no shape associated to the optical element. """ def __init__(self, name="", surface_shapes=None, boundary_shape=None): super().__init__(name, boundary_shape) if surface_shapes is None: surface_shapes = [SurfaceShape()] if not isinstance(surface_shapes, list): raise ValueError("surface_shapes must of type 'list'") self._surface_shapes = surface_shapes
[docs] def get_surface_shape(self, index): """ Gets the surface shape. Parameters ---------- index : int The index of the requested surface shape in the list. Returns ------- instance of SurfaceShape The requested surface shape. """ try: return self._surface_shapes[index] except: raise Exception("only " + str(len(self._surface_shapes)) + " shapes in OpticalElementsWithMultipleShapes")
[docs] def set_surface_shape(self, index, surface_shape=None): """ Sets a surface shape. Parameters ---------- index : int The index of the surface shape to be set in the list. surface_shape : instances of SurfaceShape, optional The surface shape to be set (If None, initialize to SurfaceShape()) """ if surface_shape is None: surface_shape = SurfaceShape() try: self._surface_shapes[index] = surface_shape except: raise Exception("only " + str(len(self._surface_shapes)) + " shapes in OpticalElementsWithMultipleShapes")
[docs]class OpticalElementsWithSurfaceShape(OpticalElementsWithMultipleShapes): """ Constructor. Parameters ---------- name : str The optical elemnt name. surface_shape : instances of SurfaceShape The surface shape. boundary_shape : instance of BoundaryShape, optional The element shape. The default=None means no shape associated to the optical element. """ def __init__(self, name, surface_shape=None, boundary_shape=None): super(OpticalElementsWithSurfaceShape, self).__init__(name=name, boundary_shape=boundary_shape, surface_shapes=[surface_shape]) # these definitions are necessary to define self._surface_shape which is needed to # build the object instance from json files. @property def _surface_shape(self): return self.get_surface_shape() @_surface_shape.setter def _surface_shape(self, value): self.set_surface_shape(value)
[docs] def get_surface_shape(self): """ Gets the surface shape. Returns ------- instance of SurfaceShape The requested surface shape. """ return super(OpticalElementsWithSurfaceShape, self).get_surface_shape(index=0)
[docs] def set_surface_shape(self, surface_shape=None): """ Sets a surface shape. Parameters ---------- surface_shape : instances of SurfaceShape, optional The surface shape to be set (If None, initialize to SurfaceShape()) """ super(OpticalElementsWithSurfaceShape, self).set_surface_shape(index=0, surface_shape=surface_shape)
if __name__=="__main__": from syned.beamline.shape import Cylinder, EllipticalCylinder oe = OpticalElementsWithSurfaceShape(name="TEST", surface_shape=Cylinder()) print(oe.get_surface_shape()) oe.set_surface_shape(surface_shape=EllipticalCylinder()) print(oe.get_surface_shape())