Change the ZernikeRadial filter on the Python API side as a

subclass of Zernike filter.
This commit is contained in:
Zhuoran Han 2018-08-07 11:34:29 -05:00
parent abdd753d59
commit 0b45dc66c4
2 changed files with 1 additions and 98 deletions

View file

@ -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,

View file

@ -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