diff --git a/examples/xml/pincell/tallies.xml b/examples/xml/pincell/tallies.xml
index 0ae36eced..7e1e0dafe 100644
--- a/examples/xml/pincell/tallies.xml
+++ b/examples/xml/pincell/tallies.xml
@@ -8,7 +8,7 @@
- 1
+ 2
diff --git a/openmc/filter.py b/openmc/filter.py
index 26d81112f..2a36a66e0 100644
--- a/openmc/filter.py
+++ b/openmc/filter.py
@@ -15,6 +15,7 @@ import openmc.checkvalue as cv
from .cell import Cell
from .material import Material
from .mixin import IDManagerMixin
+from .surface import Surface
from .universe import Universe
@@ -22,14 +23,11 @@ _FILTER_TYPES = ['universe', 'material', 'cell', 'cellborn', 'surface',
'mesh', 'energy', 'energyout', 'mu', 'polar', 'azimuthal',
'distribcell', 'delayedgroup', 'energyfunction', 'cellfrom']
-_CURRENT_NAMES = OrderedDict([
- (1, 'x-min out'), (2, 'x-min in'),
- (3, 'x-max out'), (4, 'x-max in'),
- (5, 'y-min out'), (6, 'y-min in'),
- (7, 'y-max out'), (8, 'y-max in'),
- (9, 'z-min out'), (10, 'z-min in'),
- (11, 'z-max out'), (12, 'z-max in')
-])
+_CURRENT_NAMES = (
+ 'x-min out', 'x-min in', 'x-max out', 'x-max in',
+ 'y-min out', 'y-min in', 'y-max out', 'y-max in',
+ 'z-min out', 'z-min in', 'z-max out', 'z-max in'
+)
class FilterMeta(ABCMeta):
@@ -566,7 +564,7 @@ class CellbornFilter(WithIDFilter):
expected_type = Cell
-class SurfaceFilter(Filter):
+class SurfaceFilter(WithIDFilter):
"""Filters particles by surface crossing
Parameters
@@ -588,57 +586,7 @@ class SurfaceFilter(Filter):
The number of filter bins
"""
- @Filter.bins.setter
- def bins(self, bins):
- # Format the bins as a 1D numpy array.
- bins = np.atleast_1d(bins)
-
- # Check the bin values.
- cv.check_iterable_type('filter bins', bins, Integral)
- for edge in bins:
- cv.check_greater_than('filter bin', edge, 0, equality=True)
-
- self._bins = bins
-
- def get_pandas_dataframe(self, data_size, stride, **kwargs):
- """Builds a Pandas DataFrame for the Filter's bins.
-
- This method constructs a Pandas DataFrame object for the filter with
- columns annotated by filter bin information. This is a helper method for
- :meth:`Tally.get_pandas_dataframe`.
-
- Parameters
- ----------
- data_size : int
- The total number of bins in the tally corresponding to this filter
- stride : int
- Stride in memory for the filter
-
- Returns
- -------
- pandas.DataFrame
- A Pandas DataFrame with a column of strings describing which surface
- the current is crossing and which direction it points. The number
- of rows in the DataFrame is the same as the total number of bins in
- the corresponding tally, with the filter bin appropriately tiled to
- map to the corresponding tally bins.
-
- See also
- --------
- Tally.get_pandas_dataframe(), CrossFilter.get_pandas_dataframe()
-
- """
- # Initialize Pandas DataFrame
- df = pd.DataFrame()
-
- filter_bins = np.repeat(self.bins, stride)
- tile_factor = data_size // len(filter_bins)
- filter_bins = np.tile(filter_bins, tile_factor)
- filter_bins = [_CURRENT_NAMES[x] for x in filter_bins]
- df = pd.concat([df, pd.DataFrame(
- {self.short_name.lower(): filter_bins})])
-
- return df
+ expected_type = Surface
class MeshFilter(Filter):
@@ -873,9 +821,9 @@ class MeshSurfaceFilter(MeshFilter):
# Combine surface and mesh index
n_dim = len(self.mesh.dimension)
- for surf_index, name in _CURRENT_NAMES.items():
+ for surf_index, name in enumerate(_CURRENT_NAMES):
if surf == name:
- return 4*n_dim*mesh_index + surf_index - 1
+ return 4*n_dim*mesh_index + surf_index
else:
raise ValueError("'{}' is not a valid mesh surface.".format(surf))
@@ -883,7 +831,7 @@ class MeshSurfaceFilter(MeshFilter):
n_dim = len(self.mesh.dimension)
mesh_index, surf_index = divmod(bin_index, 4*n_dim)
mesh_bin = super().get_bin(mesh_index)
- return mesh_bin + (_CURRENT_NAMES[surf_index + 1],)
+ return mesh_bin + (_CURRENT_NAMES[surf_index],)
def get_pandas_dataframe(self, data_size, stride, **kwargs):
"""Builds a Pandas DataFrame for the Filter's bins.
@@ -957,17 +905,14 @@ class MeshSurfaceFilter(MeshFilter):
filter_dict[(mesh_key, 'z')] = filter_bins
# Generate multi-index sub-column for surface
- filter_bins = list(_CURRENT_NAMES.values())
repeat_factor = stride
- filter_bins = np.repeat(filter_bins, repeat_factor)
+ filter_bins = np.repeat(_CURRENT_NAMES, repeat_factor)
tile_factor = data_size // len(filter_bins)
filter_bins = np.tile(filter_bins, tile_factor)
filter_dict[(mesh_key, 'surf')] = filter_bins
# Initialize a Pandas DataFrame from the mesh dictionary
- df = pd.concat([df, pd.DataFrame(filter_dict)])
-
- return df
+ return pd.concat([df, pd.DataFrame(filter_dict)])
class RealFilter(Filter):