mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Revised reporting of AggregateNuclides and AggregateScores in Pandas DataFrames
This commit is contained in:
parent
d66556a637
commit
3c2a38fa4e
2 changed files with 32 additions and 3 deletions
|
|
@ -562,6 +562,13 @@ class AggregateScore(object):
|
|||
def aggregate_op(self):
|
||||
return self._aggregate_op
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
|
||||
# Append each score in the aggregate to the string
|
||||
string = '(' + ', '.join(map(str, self.scores)) + ')'
|
||||
return string
|
||||
|
||||
@scores.setter
|
||||
def scores(self, scores):
|
||||
cv.check_iterable_type('scores', scores, basestring)
|
||||
|
|
@ -649,6 +656,15 @@ class AggregateNuclide(object):
|
|||
def aggregate_op(self):
|
||||
return self._aggregate_op
|
||||
|
||||
@property
|
||||
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]
|
||||
string = '(' + ', '.join(map(str, names)) + ')'
|
||||
return string
|
||||
|
||||
@nuclides.setter
|
||||
def nuclides(self, nuclides):
|
||||
cv.check_iterable_type('nuclides', nuclides,
|
||||
|
|
|
|||
|
|
@ -1571,23 +1571,36 @@ class Tally(object):
|
|||
# Include DataFrame column for nuclides if user requested it
|
||||
if nuclides:
|
||||
nuclides = []
|
||||
column_name = 'nuclide'
|
||||
|
||||
for nuclide in self.nuclides:
|
||||
# Write Nuclide name if Summary info was linked with StatePoint
|
||||
if isinstance(nuclide, Nuclide):
|
||||
nuclides.append(nuclide.name)
|
||||
elif isinstance(nuclide, AggregateNuclide):
|
||||
nuclides.append(nuclide.name)
|
||||
column_name = '{0}(nuclide)'.format(nuclide.aggregate_op)
|
||||
else:
|
||||
nuclides.append(nuclide)
|
||||
|
||||
# Tile the nuclide bins into a DataFrame column
|
||||
nuclides = np.repeat(nuclides, len(self.scores))
|
||||
tile_factor = data_size / len(nuclides)
|
||||
df['nuclide'] = np.tile(nuclides, int(tile_factor))
|
||||
df[column_name] = np.tile(nuclides, int(tile_factor))
|
||||
|
||||
# Include column for scores if user requested it
|
||||
if scores:
|
||||
scores = []
|
||||
column_name = 'score'
|
||||
|
||||
for score in self.scores:
|
||||
if isinstance(score, (basestring, CrossScore)):
|
||||
scores.append(score)
|
||||
elif isinstance(score, AggregateScore):
|
||||
scores.append(score.name)
|
||||
column_name = '{0}(score)'.format(score.aggregate_op)
|
||||
|
||||
tile_factor = data_size / len(self.scores)
|
||||
df['score'] = np.tile(self.scores, int(tile_factor))
|
||||
df[column_name] = np.tile(scores, int(tile_factor))
|
||||
|
||||
# Append columns with mean, std. dev. for each tally bin
|
||||
df['mean'] = self.mean.ravel()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue