Source code for xicsrt.filters._XicsrtBundleFilterSightline

# -*- coding: utf-8 -*-
"""
Authors
-------
- Novimir A. Pablant <npblant@pppl.gov>

"""

import numpy as np

from xicsrt.tools.xicsrt_doc import dochelper
from xicsrt.filters._XicsrtBundleFilter import XicsrtBundleFilter

[docs] @dochelper class XicsrtBundleFilterSightline(XicsrtBundleFilter): """ A bundle filter based on proximity to sightline vectors. """
[docs] def default_config(self): """ radius The radius of the cylindrical sightline. """ config = super().default_config() config['radius'] = None return config
[docs] def filter(self, bundle_input): """ Filter ray bundles that do not originate inside the cylindrical sightline. """ # vector from sightline origin to bundle position. l_0 = self.config['origin'] - bundle_input['origin'] # Projection of l_0 onto the sightline proj = np.einsum('j,ij->i', self.config['zaxis'], l_0)[np.newaxis] l_1 = np.dot(np.transpose(self.config['zaxis'][np.newaxis]), proj) l_1 = np.transpose(l_1) # Component of l_0 perpendicular to the sightline l_2 = l_0 - l_1 # Sightline distance is the length of l_2 distance = np.sqrt(np.einsum('ij,ij->i', l_2, l_2)) # Check to see if the bundle is close enough to the sightline mask = (self.config['radius'] >= distance) bundle_input['mask'] &= mask return bundle_input