From 0a1408def10740676cd7933e791856a28a3d9920 Mon Sep 17 00:00:00 2001 From: Isaac Meyer Date: Tue, 17 Apr 2018 16:12:02 -0400 Subject: [PATCH] Sampling and reconstructing working for large files --- openmc/data/endf.py | 8 +++++++- openmc/data/neutron.py | 13 ++++++++++--- openmc/data/resonance_covariance.py | 8 +++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/openmc/data/endf.py b/openmc/data/endf.py index 6018719d2c..e2de655bc8 100644 --- a/openmc/data/endf.py +++ b/openmc/data/endf.py @@ -67,7 +67,13 @@ def float_endf(s): The number """ - return float(ENDF_FLOAT_RE.sub(r'\1e\2', s)) + try: + return float(ENDF_FLOAT_RE.sub(r'\1e\2', s)) + except: + if ENDF_FLOAT_RE.sub(r'\1e\2', s).isspace(): + return 0 + else: + raise TypeError('Expected float value or blank entry') def int_endf(s): diff --git a/openmc/data/neutron.py b/openmc/data/neutron.py index 824dded24c..e35dd5ab36 100644 --- a/openmc/data/neutron.py +++ b/openmc/data/neutron.py @@ -1,6 +1,6 @@ +from __future__ import division, unicode_literals import sys -from collections import OrderedDict -from collections.abc import Iterable, Mapping, MutableMapping +from collections import OrderedDict, Iterable, Mapping, MutableMapping from io import StringIO from itertools import chain from math import log10 @@ -10,6 +10,7 @@ import shutil import tempfile from warnings import warn +from six import string_types import numpy as np import h5py @@ -109,7 +110,6 @@ class IncidentNeutron(EqualityMixin): :meth:`IncidentNeutron.from_ace`. Parameters - ---------- name : str Name of the nuclide using the GND naming convention atomic_number : int @@ -889,3 +889,10 @@ class IncidentNeutron(EqualityMixin): data[2].xs['0K'] = xs return data +import sys +from collections import OrderedDict +from collections.abc import Iterable, Mapping, MutableMapping +from io import StringIO +from itertools import chain +from math import log10 +from numbers import Integral, Real diff --git a/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py index c68414bcef..d52da4fe71 100644 --- a/openmc/data/resonance_covariance.py +++ b/openmc/data/resonance_covariance.py @@ -4,6 +4,7 @@ import io import numpy as np from numpy.polynomial import Polynomial +from scipy import sparse import pandas as pd from .data import NEUTRON_MASS @@ -11,7 +12,6 @@ from .endf import get_head_record, get_cont_record, get_tab1_record, get_list_re import openmc.checkvalue as cv from .resonance import ResonanceRange -### Under Construction START def sample_resonance_parameters(nuclide, n_samples): """Return a IncidentNeutron object with n_samples of xs @@ -24,6 +24,7 @@ def sample_resonance_parameters(nuclide, n_samples): ev : openmc.data.endf.Evaluation """ + print('begin sampling') nparams,params = nuclide.res_covariance.ranges[0].parameters.shape cov = nuclide.res_covariance.ranges[0].covariance cov = cov + cov.T - np.diag(cov.diagonal()) #symmetrizing covariance matrix @@ -128,6 +129,7 @@ def sample_resonance_parameters(nuclide, n_samples): spin = pd.DataFrame.as_matrix(nuclide.res_covariance.ranges[0].parameters['J']) mean = mean_array.flatten() for i in range(n_samples): + print("On sample",i) sample = np.random.multivariate_normal(mean,cov) energy = sample[0::5] gn = sample[1::5] @@ -144,7 +146,6 @@ def sample_resonance_parameters(nuclide, n_samples): samples.append(sample_params) return samples -### Under Construction END class ResonanceCovariance(object): """Resolved resonance covariance data @@ -209,11 +210,9 @@ class ResonanceCovariance(object): abundance = items[1] fission_widths = (items[3] == 1) # Flag for fission widths n_ranges = items[4] # number of resonance energy ranges - print('there are',n_ranges,'ranges') for j in range(n_ranges): items = get_cont_record(file_obj) - print("Line with unresovled flag:",items) resonance_flag = items[2] # flag for resolved (1)/unresolved (2) formalism = items[3] # resonance formalism @@ -582,7 +581,6 @@ class ReichMooreCovariance(ResonanceRange): # Build covariance matrix for General Resolved Resonance Formats if LCOMP == 1: items = get_cont_record(file_obj) - print("in resonance_covariance.py", items) num_short_range = items[4] #Number of short range type resonance #covariances num_long_range = items[5] #Number of long range type resonance