mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 14:15:42 -04:00
Change the ZernikeRadial filter on the Python API side as a
subclass of Zernike filter.
This commit is contained in:
parent
abdd753d59
commit
0b45dc66c4
2 changed files with 1 additions and 98 deletions
|
|
@ -95,12 +95,6 @@ _dll.openmc_zernike_filter_get_order.errcheck = _error_handler
|
|||
_dll.openmc_zernike_filter_set_order.argtypes = [c_int32, c_int]
|
||||
_dll.openmc_zernike_filter_set_order.restype = c_int
|
||||
_dll.openmc_zernike_filter_set_order.errcheck = _error_handler
|
||||
_dll.openmc_zernike_radial_filter_get_order.argtypes = [c_int32, POINTER(c_int)]
|
||||
_dll.openmc_zernike_radial_filter_get_order.restype = c_int
|
||||
_dll.openmc_zernike_radial_filter_get_order.errcheck = _error_handler
|
||||
_dll.openmc_zernike_radial_filter_set_order.argtypes = [c_int32, c_int]
|
||||
_dll.openmc_zernike_radial_filter_set_order.restype = c_int
|
||||
_dll.openmc_zernike_radial_filter_set_order.errcheck = _error_handler
|
||||
|
||||
class Filter(_FortranObjectWithID):
|
||||
__instances = WeakValueDictionary()
|
||||
|
|
@ -369,21 +363,6 @@ class ZernikeFilter(Filter):
|
|||
class ZernikeRadialFilter(Filter):
|
||||
filter_type = 'zernikeradial'
|
||||
|
||||
def __init__(self, order=None, uid=None, new=True, index=None):
|
||||
super().__init__(uid, new, index)
|
||||
if order is not None:
|
||||
self.order = order
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
temp_order = c_int()
|
||||
_dll.openmc_zernike_radial_filter_get_order(self._index, temp_order)
|
||||
return temp_order.value
|
||||
|
||||
@order.setter
|
||||
def order(self, order):
|
||||
_dll.openmc_zernike_radial_filter_set_order(self._index, order)
|
||||
|
||||
|
||||
_FILTER_TYPE_MAP = {
|
||||
'azimuthal': AzimuthalFilter,
|
||||
|
|
|
|||
|
|
@ -465,7 +465,7 @@ class ZernikeFilter(ExpansionFilter):
|
|||
return element
|
||||
|
||||
|
||||
class ZernikeRadialFilter(ExpansionFilter):
|
||||
class ZernikeRadialFilter(ZernikeFilter):
|
||||
r"""Score radial Zernike expansion moments in space up to specified order.
|
||||
|
||||
The Zernike polynomials are defined the same as in ZernikeFilter.
|
||||
|
|
@ -521,83 +521,7 @@ class ZernikeRadialFilter(ExpansionFilter):
|
|||
|
||||
"""
|
||||
|
||||
def __init__(self, order, x=0.0, y=0.0, r=1.0, filter_id=None):
|
||||
super().__init__(order, filter_id)
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.r = r
|
||||
|
||||
def __hash__(self):
|
||||
string = type(self).__name__ + '\n'
|
||||
string += '{: <16}=\t{}\n'.format('\tOrder', self.order)
|
||||
return hash(string)
|
||||
|
||||
def __repr__(self):
|
||||
string = type(self).__name__ + '\n'
|
||||
string += '{: <16}=\t{}\n'.format('\tOrder', self.order)
|
||||
string += '{: <16}=\t{}\n'.format('\tID', self.id)
|
||||
return string
|
||||
|
||||
@ExpansionFilter.order.setter
|
||||
def order(self, order):
|
||||
ExpansionFilter.order.__set__(self, order)
|
||||
self.bins = ['Z{},0'.format(n) for n in range(0, order+1, 2)]
|
||||
|
||||
@property
|
||||
def x(self):
|
||||
return self._x
|
||||
|
||||
@x.setter
|
||||
def x(self, x):
|
||||
cv.check_type('x', x, Real)
|
||||
self._x = x
|
||||
|
||||
@property
|
||||
def y(self):
|
||||
return self._y
|
||||
|
||||
@y.setter
|
||||
def y(self, y):
|
||||
cv.check_type('y', y, Real)
|
||||
self._y = y
|
||||
|
||||
@property
|
||||
def r(self):
|
||||
return self._r
|
||||
|
||||
@r.setter
|
||||
def r(self, r):
|
||||
cv.check_type('r', r, Real)
|
||||
self._r = r
|
||||
|
||||
@classmethod
|
||||
def from_hdf5(cls, group, **kwargs):
|
||||
if group['type'].value.decode() != cls.short_name.lower():
|
||||
raise ValueError("Expected HDF5 data for filter type '"
|
||||
+ cls.short_name.lower() + "' but got '"
|
||||
+ group['type'].value.decode() + " instead")
|
||||
|
||||
filter_id = int(group.name.split('/')[-1].lstrip('filter '))
|
||||
order = group['order'].value
|
||||
x, y, r = group['x'].value, group['y'].value, group['r'].value
|
||||
|
||||
return cls(order, x, y, r, filter_id)
|
||||
|
||||
def to_xml_element(self):
|
||||
"""Return XML Element representing the filter.
|
||||
|
||||
Returns
|
||||
-------
|
||||
element : xml.etree.ElementTree.Element
|
||||
XML element containing radial Zernike filter data
|
||||
|
||||
"""
|
||||
element = super().to_xml_element()
|
||||
subelement = ET.SubElement(element, 'x')
|
||||
subelement.text = str(self.x)
|
||||
subelement = ET.SubElement(element, 'y')
|
||||
subelement.text = str(self.y)
|
||||
subelement = ET.SubElement(element, 'r')
|
||||
subelement.text = str(self.r)
|
||||
|
||||
return element
|
||||
Loading…
Add table
Add a link
Reference in a new issue