Revised reporting of AggregateNuclides and AggregateScores in Pandas DataFrames

This commit is contained in:
wbinventor@gmail.com 2016-02-26 20:38:42 -05:00
parent d66556a637
commit 3c2a38fa4e
2 changed files with 32 additions and 3 deletions

View file

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

View file

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