# -*- coding: utf-8 -*-
"""
.. Authors:
Novimir Pablant <npablant@pppl.gov>
Define the :class:`InteractObject` class.
"""
import numpy as np
from copy import deepcopy
from xicsrt.tools.xicsrt_doc import dochelper
from xicsrt.optics._TraceObject import TraceObject
from xicsrt.tools import xicsrt_math as xm
[docs]
@dochelper
class InteractObject(TraceObject):
"""
The base class for interactions of rays with surfaces in XICSRT.
This base class should be used to define behavior such as reflection,
transmission and absorption.
"""
[docs]
def interact(self, rays, xloc, norm, mask=None):
"""
Evaluate interaction with a surface.
The base-class has no interaction, rays just pass through.
"""
O = rays['origin']
if mask is not None:
rays['mask'][:] = mask
# The following line does two things:
# 1. Set the origin for rays (lost or found) with an intersection.
# 2. Set the rays without an intersection to nan.
O[:] = xloc[:]
return rays