Clean up tally namespace

This commit is contained in:
Sterling Harper 2016-09-30 12:19:22 -04:00
parent 52c9898128
commit 62f8dbfc02
4 changed files with 75 additions and 73 deletions

View file

@ -1,3 +1,4 @@
from openmc.arithmetic import *
from openmc.cell import *
from openmc.lattice import *
from openmc.element import *

View file

@ -4,7 +4,7 @@ from collections import Iterable
import numpy as np
from openmc import Filter, Nuclide
import openmc
from openmc.filter import _FILTER_TYPES
import openmc.checkvalue as cv
@ -171,7 +171,7 @@ class CrossNuclide(object):
string = ''
# If the Summary was linked, the left nuclide is a Nuclide object
if isinstance(self.left_nuclide, Nuclide):
if isinstance(self.left_nuclide, openmc.Nuclide):
string += '(' + self.left_nuclide.name
# If the Summary was not linked, the left nuclide is the ZAID
else:
@ -180,7 +180,7 @@ class CrossNuclide(object):
string += ' ' + self.binary_op + ' '
# If the Summary was linked, the right nuclide is a Nuclide object
if isinstance(self.right_nuclide, Nuclide):
if isinstance(self.right_nuclide, openmc.Nuclide):
string += self.right_nuclide.name + ')'
# If the Summary was not linked, the right nuclide is the ZAID
else:
@ -191,13 +191,13 @@ class CrossNuclide(object):
@left_nuclide.setter
def left_nuclide(self, left_nuclide):
cv.check_type('left_nuclide', left_nuclide,
(Nuclide, CrossNuclide, AggregateNuclide))
(openmc.Nuclide, CrossNuclide, AggregateNuclide))
self._left_nuclide = left_nuclide
@right_nuclide.setter
def right_nuclide(self, right_nuclide):
cv.check_type('right_nuclide', right_nuclide,
(Nuclide, CrossNuclide, AggregateNuclide))
(openmc.Nuclide, CrossNuclide, AggregateNuclide))
self._right_nuclide = right_nuclide
@binary_op.setter
@ -330,14 +330,14 @@ class CrossFilter(object):
@left_filter.setter
def left_filter(self, left_filter):
cv.check_type('left_filter', left_filter,
(Filter, CrossFilter, AggregateFilter))
(openmc.Filter, CrossFilter, AggregateFilter))
self._left_filter = left_filter
self._bins['left'] = left_filter.bins
@right_filter.setter
def right_filter(self, right_filter):
cv.check_type('right_filter', right_filter,
(Filter, CrossFilter, AggregateFilter))
(openmc.Filter, CrossFilter, AggregateFilter))
self._right_filter = right_filter
self._bins['right'] = right_filter.bins
@ -550,8 +550,8 @@ class AggregateNuclide(object):
# Append each nuclide in the aggregate to the string
string = '{0}('.format(self.aggregate_op)
names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide)
for nuclide in self.nuclides]
names = [nuclide.name if isinstance(nuclide, openmc.Nuclide)
else str(nuclide) for nuclide in self.nuclides]
string += ', '.join(map(str, names)) + ')'
return string
@ -567,15 +567,15 @@ class AggregateNuclide(object):
def name(self):
# Append each nuclide in the aggregate to the string
names = [nuclide.name if isinstance(nuclide, Nuclide) else str(nuclide)
for nuclide in self.nuclides]
names = [nuclide.name if isinstance(nuclide, openmc.Nuclide)
else str(nuclide) for nuclide in self.nuclides]
string = '(' + ', '.join(map(str, names)) + ')'
return string
@nuclides.setter
def nuclides(self, nuclides):
cv.check_iterable_type('nuclides', nuclides,
(basestring, Nuclide, CrossNuclide))
(basestring, openmc.Nuclide, CrossNuclide))
self._nuclides = nuclides
@aggregate_op.setter
@ -700,7 +700,8 @@ class AggregateFilter(object):
@aggregate_filter.setter
def aggregate_filter(self, aggregate_filter):
cv.check_type('aggregate_filter', aggregate_filter, (Filter, CrossFilter))
cv.check_type('aggregate_filter', aggregate_filter,
(openmc.Filter, CrossFilter))
self._aggregate_filter = aggregate_filter
@bins.setter

View file

@ -8,7 +8,7 @@ from xml.etree import ElementTree as ET
import numpy as np
from openmc import Mesh
import openmc
import openmc.checkvalue as cv
@ -506,7 +506,7 @@ class MeshFilter(Filter):
@mesh.setter
def mesh(self, mesh):
cv.check_type('filter mesh', mesh, Mesh)
cv.check_type('filter mesh', mesh, openmc.Mesh)
self._mesh = mesh
self.bins = mesh.id

View file

@ -13,10 +13,7 @@ from xml.etree import ElementTree as ET
import numpy as np
from openmc import Trigger, Nuclide
from openmc.arithmetic import CrossScore, CrossNuclide, CrossFilter, \
AggregateScore, AggregateNuclide, AggregateFilter
import openmc.filter
import openmc
import openmc.checkvalue as cv
from openmc.clean_xml import clean_xml_indentation
@ -36,9 +33,10 @@ _PRODUCT_TYPES = ['tensor', 'entrywise']
# The following indicate acceptable types when setting Tally.scores,
# Tally.nuclides, and Tally.filters
_SCORE_CLASSES = (basestring, CrossScore, AggregateScore)
_NUCLIDE_CLASSES = (basestring, Nuclide, CrossNuclide, AggregateNuclide)
_FILTER_CLASSES = (openmc.filter.Filter, CrossFilter, AggregateFilter)
_SCORE_CLASSES = (basestring, openmc.CrossScore, openmc.AggregateScore)
_NUCLIDE_CLASSES = (basestring, openmc.Nuclide, openmc.CrossNuclide,
openmc.AggregateNuclide)
_FILTER_CLASSES = (openmc.Filter, openmc.CrossFilter, openmc.AggregateFilter)
# Valid types of estimators
ESTIMATOR_TYPES = ['tracklength', 'collision', 'analog']
@ -118,7 +116,7 @@ class Tally(object):
self._nuclides = cv.CheckedList(_NUCLIDE_CLASSES, 'tally nuclides')
self._scores = cv.CheckedList(_SCORE_CLASSES, 'tally scores')
self._estimator = None
self._triggers = cv.CheckedList(Trigger, 'tally triggers')
self._triggers = cv.CheckedList(openmc.Trigger, 'tally triggers')
self._num_realizations = 0
self._with_summary = False
@ -187,7 +185,7 @@ class Tally(object):
string += '{0: <16}{1}'.format('\tNuclides', '=\t')
for nuclide in self.nuclides:
if isinstance(nuclide, Nuclide):
if isinstance(nuclide, openmc.Nuclide):
string += '{0} '.format(nuclide.name)
else:
string += '{0} '.format(nuclide)
@ -396,7 +394,8 @@ class Tally(object):
@triggers.setter
def triggers(self, triggers):
cv.check_type('tally triggers', triggers, MutableSequence)
self._triggers = cv.CheckedList(Trigger, 'tally triggers', triggers)
self._triggers = cv.CheckedList(openmc.Trigger, 'tally triggers',
triggers)
def add_trigger(self, trigger):
"""Add a tally trigger to the tally
@ -700,8 +699,8 @@ class Tally(object):
return False
# Return False if only one tally has a delayed group filter
tally1_dg = self.contains_filter(openmc.filter.DelayedGroupFilter)
tally2_dg = other.contains_filter(openmc.filter.DelayedGroupFilter)
tally1_dg = self.contains_filter(openmc.DelayedGroupFilter)
tally2_dg = other.contains_filter(openmc.DelayedGroupFilter)
if sum([tally1_dg, tally2_dg]) == 1:
return False
@ -1032,7 +1031,7 @@ class Tally(object):
if len(self.nuclides) > 0:
nuclides = ''
for nuclide in self.nuclides:
if isinstance(nuclide, Nuclide):
if isinstance(nuclide, openmc.Nuclide):
nuclides += '{0} '.format(nuclide.name)
else:
nuclides += '{0} '.format(nuclide)
@ -1070,7 +1069,7 @@ class Tally(object):
Parameters
----------
filter_type : openmc.filter.FilterMeta
filter_type : openmc.FilterMeta
Type of the filter, e.g. MeshFilter
Returns
@ -1096,7 +1095,7 @@ class Tally(object):
Parameters
----------
filter_type : openmc.filter.FilterMeta
filter_type : openmc.FilterMeta
Type of the filter, e.g. MeshFilter
Returns
@ -1122,7 +1121,7 @@ class Tally(object):
# Also check to see if the desired filter is wrapped up in an
# aggregate
elif isinstance(test_filter, AggregateFilter):
elif isinstance(test_filter, openmc.AggregateFilter):
if isinstance(test_filter.aggregate_filter, filter_type):
filter_found = test_filter
break
@ -1140,7 +1139,7 @@ class Tally(object):
Parameters
----------
filter_type : openmc.filter.FilterMeta
filter_type : openmc.FilterMeta
Type of the filter, e.g. MeshFilter
filter_bin : int or tuple
The bin is an integer ID for 'material', 'surface', 'cell',
@ -1191,7 +1190,7 @@ class Tally(object):
for i, test_nuclide in enumerate(self.nuclides):
# If the Summary was linked, then values are Nuclide objects
if isinstance(test_nuclide, Nuclide):
if isinstance(test_nuclide, openmc.Nuclide):
if test_nuclide.name == nuclide:
nuclide_index = i
break
@ -1250,7 +1249,7 @@ class Tally(object):
Parameters
----------
filters : Iterable of openmc.filter.FilterMeta
filters : Iterable of openmc.FilterMeta
An iterable of filter types
(e.g., [MeshFilter, EnergyFilter]; default is [])
filter_bins : Iterable of tuple
@ -1273,7 +1272,7 @@ class Tally(object):
"""
cv.check_type('filters', filters, Iterable, openmc.filter.FilterMeta)
cv.check_type('filters', filters, Iterable, openmc.FilterMeta)
cv.check_type('filter_bins', filter_bins, Iterable, tuple)
# Determine the score indices from any of the requested scores
@ -1295,21 +1294,20 @@ class Tally(object):
# If not a user-requested Filter, get all bins
if not user_filter:
# Create list of 2- or 3-tuples tuples for mesh cell bins
if isinstance(self_filter, openmc.filter.MeshFilter):
if isinstance(self_filter, openmc.MeshFilter):
dimension = self_filter.mesh.dimension
xyz = [range(1, x+1) for x in dimension]
bins = list(itertools.product(*xyz))
# Create list of 2-tuples for energy boundary bins
elif isinstance(self_filter, (openmc.filter.EnergyFilter,
openmc.filter.EnergyoutFilter)):
elif isinstance(self_filter, (openmc.EnergyFilter,
openmc.EnergyoutFilter)):
bins = []
for k in range(self_filter.num_bins):
bins.append((self_filter.bins[k], self_filter.bins[k+1]))
# Create list of cell instance IDs for distribcell Filters
elif isinstance(self_filter,
openmc.filter.DistribcellFilter):
elif isinstance(self_filter, openmc.DistribcellFilter):
bins = np.arange(self_filter.num_bins)
# Create list of IDs for bins for all other filter types
@ -1392,7 +1390,7 @@ class Tally(object):
"""
for score in scores:
if not isinstance(score, (basestring, CrossScore)):
if not isinstance(score, (basestring, openmc.CrossScore)):
msg = 'Unable to get score indices for score "{0}" in Tally ' \
'ID="{1}" since it is not a string or CrossScore'\
.format(score, self.id)
@ -1424,7 +1422,7 @@ class Tally(object):
scores : list of str
A list of one or more score strings
(e.g., ['absorption', 'nu-fission']; default is [])
filters : Iterable of openmc.filter.FilterMeta
filters : Iterable of openmc.FilterMeta
An iterable of filter types
(e.g., [MeshFilter, EnergyFilter]; default is [])
filter_bins : list of Iterables
@ -1568,9 +1566,9 @@ class Tally(object):
column_name = 'nuclide'
for nuclide in self.nuclides:
if isinstance(nuclide, Nuclide):
if isinstance(nuclide, openmc.Nuclide):
nuclides.append(nuclide.name)
elif isinstance(nuclide, AggregateNuclide):
elif isinstance(nuclide, openmc.AggregateNuclide):
nuclides.append(nuclide.name)
column_name = '{0}(nuclide)'.format(nuclide.aggregate_op)
else:
@ -1587,9 +1585,9 @@ class Tally(object):
column_name = 'score'
for score in self.scores:
if isinstance(score, (basestring, CrossScore)):
if isinstance(score, (basestring, openmc.CrossScore)):
scores.append(str(score))
elif isinstance(score, AggregateScore):
elif isinstance(score, openmc.AggregateScore):
scores.append(score.name)
column_name = '{0}(score)'.format(score.aggregate_op)
@ -1979,7 +1977,8 @@ class Tally(object):
else:
all_filters = [self_copy.filters, other_copy.filters]
for self_filter, other_filter in itertools.product(*all_filters):
new_filter = CrossFilter(self_filter, other_filter, binary_op)
new_filter = openmc.CrossFilter(self_filter, other_filter,
binary_op)
new_tally.filters.append(new_filter)
# Add nuclides to the new tally
@ -1990,7 +1989,7 @@ class Tally(object):
all_nuclides = [self_copy.nuclides, other_copy.nuclides]
for self_nuclide, other_nuclide in itertools.product(*all_nuclides):
new_nuclide = \
CrossNuclide(self_nuclide, other_nuclide, binary_op)
openmc.CrossNuclide(self_nuclide, other_nuclide, binary_op)
new_tally.nuclides.append(new_nuclide)
# Add scores to the new tally
@ -2000,7 +1999,8 @@ class Tally(object):
else:
all_scores = [self_copy.scores, other_copy.scores]
for self_score, other_score in itertools.product(*all_scores):
new_score = CrossScore(self_score, other_score, binary_op)
new_score = openmc.CrossScore(self_score, other_score,
binary_op)
new_tally.scores.append(new_score)
# Update the new tally's filter strides
@ -2229,12 +2229,12 @@ class Tally(object):
# Construct lists of tuples for the bins in each of the two filters
filters = [type(filter1), type(filter2)]
if isinstance(filter1, openmc.filter.DistribcellFilter):
if isinstance(filter1, openmc.DistribcellFilter):
filter1_bins = np.arange(filter1.num_bins)
else:
filter1_bins = [filter1.get_bin(i) for i in range(filter1.num_bins)]
if isinstance(filter2, openmc.filter.DistribcellFilter):
if isinstance(filter2, openmc.DistribcellFilter):
filter2_bins = np.arange(filter2.num_bins)
else:
filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)]
@ -2354,11 +2354,11 @@ class Tally(object):
raise ValueError(msg)
# Check that the scores are valid
if not isinstance(score1, (basestring, CrossScore)):
if not isinstance(score1, (basestring, openmc.CrossScore)):
msg = 'Unable to swap score1 "{0}" in Tally ID="{1}" since it is ' \
'not a string or CrossScore'.format(score1, self.id)
raise ValueError(msg)
elif not isinstance(score2, (basestring, CrossScore)):
elif not isinstance(score2, (basestring, openmc.CrossScore)):
msg = 'Unable to swap score2 "{0}" in Tally ID="{1}" since it is ' \
'not a string or CrossScore'.format(score2, self.id)
raise ValueError(msg)
@ -2876,7 +2876,7 @@ class Tally(object):
scores : list of str
A list of one or more score strings
(e.g., ['absorption', 'nu-fission']; default is [])
filters : Iterable of openmc.filter.FilterMeta
filters : Iterable of openmc.FilterMeta
An iterable of filter types
(e.g., [MeshFilter, EnergyFilter]; default is [])
filter_bins : list of Iterables
@ -2981,13 +2981,13 @@ class Tally(object):
for filter_bin in filter_bins[i]:
bin_index = find_filter.get_bin_index(filter_bin)
if filter_type in [openmc.filter.EnergyFilter,
openmc.filter.EnergyoutFilter]:
if filter_type in [openmc.EnergyFilter,
openmc.EnergyoutFilter]:
bin_indices.extend([bin_index])
bin_indices.extend([bin_index, bin_index+1])
num_bins += 1
elif filter_type in [openmc.filter.DistribcellFilter,
openmc.filter.MeshFilter]:
elif filter_type in [openmc.DistribcellFilter,
openmc.MeshFilter]:
bin_indices = [0]
num_bins = find_filter.num_bins
else:
@ -3019,7 +3019,7 @@ class Tally(object):
scores : list of str
A list of one or more score strings to sum across
(e.g., ['absorption', 'nu-fission']; default is [])
filter_type : openmc.filter.FilterMeta
filter_type : openmc.FilterMeta
Type of the filter, e.g. MeshFilter
filter_bins : Iterable of int or tuple
A list of the filter bins corresponding to the filter_type parameter
@ -3058,14 +3058,14 @@ class Tally(object):
std_dev = self.get_reshaped_data(value='std_dev')
# Sum across any filter bins specified by the user
if isinstance(filter_type, openmc.filter.FilterMeta):
if isinstance(filter_type, openmc.FilterMeta):
find_filter = self.find_filter(filter_type)
# If user did not specify filter bins, sum across all bins
if len(filter_bins) == 0:
bin_indices = np.arange(find_filter.num_bins)
if isinstance(find_filter, openmc.filter.DistribcellFilter):
if isinstance(find_filter, openmc.DistribcellFilter):
filter_bins = np.arange(find_filter.num_bins)
else:
num_bins = find_filter.num_bins
@ -3088,8 +3088,8 @@ class Tally(object):
# Add AggregateFilter to the tally sum
if not remove_filter:
filter_sum = \
AggregateFilter(self_filter, [tuple(filter_bins)], 'sum')
filter_sum = openmc.AggregateFilter(self_filter,
[tuple(filter_bins)], 'sum')
tally_sum.filters.append(filter_sum)
# Add a copy of each filter not summed across to the tally sum
@ -3111,7 +3111,7 @@ class Tally(object):
std_dev = np.sqrt(std_dev)
# Add AggregateNuclide to the tally sum
nuclide_sum = AggregateNuclide(nuclides, 'sum')
nuclide_sum = openmc.AggregateNuclide(nuclides, 'sum')
tally_sum.nuclides.append(nuclide_sum)
# Add a copy of this tally's nuclides to the tally sum
@ -3129,7 +3129,7 @@ class Tally(object):
std_dev = np.sqrt(std_dev)
# Add AggregateScore to the tally sum
score_sum = AggregateScore(scores, 'sum')
score_sum = openmc.AggregateScore(scores, 'sum')
tally_sum.scores.append(score_sum)
# Add a copy of this tally's scores to the tally sum
@ -3166,7 +3166,7 @@ class Tally(object):
scores : list of str
A list of one or more score strings to average across
(e.g., ['absorption', 'nu-fission']; default is [])
filter_type : openmc.filter.FilterMeta
filter_type : openmc.FilterMeta
Type of the filter, e.g. MeshFilter
filter_bins : Iterable of int or tuple
A list of the filter bins corresponding to the filter_type parameter
@ -3205,14 +3205,14 @@ class Tally(object):
std_dev = self.get_reshaped_data(value='std_dev')
# Average across any filter bins specified by the user
if isinstance(filter_type, openmc.filter.FilterMeta):
if isinstance(filter_type, openmc.FilterMeta):
find_filter = self.find_filter(filter_type)
# If user did not specify filter bins, average across all bins
if len(filter_bins) == 0:
bin_indices = np.arange(find_filter.num_bins)
if isinstance(find_filter, openmc.filter.DistribcellFilter):
if isinstance(find_filter, openmc.DistribcellFilter):
filter_bins = np.arange(find_filter.num_bins)
else:
num_bins = find_filter.num_bins
@ -3236,8 +3236,8 @@ class Tally(object):
# Add AggregateFilter to the tally avg
if not remove_filter:
filter_sum = \
AggregateFilter(self_filter, [tuple(filter_bins)], 'avg')
filter_sum = openmc.AggregateFilter(self_filter,
[tuple(filter_bins)], 'avg')
tally_avg.filters.append(filter_sum)
# Add a copy of each filter not averaged across to the tally avg
@ -3260,7 +3260,7 @@ class Tally(object):
std_dev = np.sqrt(std_dev)
# Add AggregateNuclide to the tally avg
nuclide_avg = AggregateNuclide(nuclides, 'avg')
nuclide_avg = openmc.AggregateNuclide(nuclides, 'avg')
tally_avg.nuclides.append(nuclide_avg)
# Add a copy of this tally's nuclides to the tally avg
@ -3279,7 +3279,7 @@ class Tally(object):
std_dev = np.sqrt(std_dev)
# Add AggregateScore to the tally avg
score_sum = AggregateScore(scores, 'avg')
score_sum = openmc.AggregateScore(scores, 'avg')
tally_avg.scores.append(score_sum)
# Add a copy of this tally's scores to the tally avg
@ -3554,7 +3554,7 @@ class Tallies(cv.CheckedList):
already_written = set()
for tally in self:
for f in tally.filters:
if isinstance(f, openmc.filter.MeshFilter):
if isinstance(f, openmc.MeshFilter):
if f.mesh not in already_written:
if len(f.mesh.name) > 0:
self._tallies_file.append(ET.Comment(f.mesh.name))