Changed __copy__ method of ResonanceRange to mark parameters unprepared

This commit is contained in:
Isaac Meyer 2018-07-27 11:00:03 -05:00
parent 3626d8ead7
commit 28414ef283
3 changed files with 84 additions and 86 deletions

File diff suppressed because one or more lines are too long

View file

@ -91,14 +91,14 @@ class Resonances(object):
# Determine whether discrete or continuous representation
items = get_head_record(file_obj)
n_isotope = items[4] # Number of isotopes
n_isotope = items[4] # Number of isotopes
ranges = []
for iso in range(n_isotope):
items = get_cont_record(file_obj)
abundance = items[1]
fission_widths = (items[3] == 1) # fission widths are given?
n_ranges = items[4] # number of resonance energy ranges
fission_widths = (items[3] == 1) # fission widths are given?
n_ranges = items[4] # number of resonance energy ranges
for j in range(n_ranges):
items = get_cont_record(file_obj)
@ -113,7 +113,7 @@ class Resonances(object):
# unresolved resonance region
erange = Unresolved.from_endf(file_obj, items, fission_widths)
#erange.material = self
# erange.material = self
ranges.append(erange)
return cls(ranges)
@ -163,6 +163,13 @@ class ResonanceRange(object):
self._prepared = False
self._parameter_matrix = {}
def __copy__(self):
cls = type(self)
new_copy = cls.__new__(cls)
new_copy.__dict__.update(self.__dict__)
new_copy._prepared = False
return new_copy
@classmethod
def from_endf(cls, ev, file_obj, items):
"""Create resonance range from an ENDF evaluation.

View file

@ -208,10 +208,6 @@ class ResonanceCovarianceRange:
res_cov_range.file2res.parameters = parameters[mask]
res_cov_range.covariance = cov_subset
# Set _prepared to False to ensure parameter subset
# used during construction routine
res_cov_range.file2res._prepared = False
return res_cov_range
def sample_resonance_parameters(self, n_samples):
@ -264,29 +260,27 @@ class ResonanceCovarianceRange:
records = []
for j, E in enumerate(energy):
records.append([energy[j], l_value[j], spin[j], gt[j], gn[j],
gg[j], gf[j], gx[j]])
records.append([energy[j], l_value[j], spin[j], gt[j],
gn[j], gg[j], gf[j], gx[j]])
columns = ['energy', 'L', 'J', 'totalWidth', 'neutronWidth',
'captureWidth', 'fissionWidth', 'competitiveWidth']
sample_params = pd.DataFrame.from_records(records, columns=columns)
sample_params = pd.DataFrame.from_records(records,
columns=columns)
# Copy ResonanceRange object
res_range = copy.copy(self.file2res)
# Set _prepared to False to ensure sampled parameters are
# used during construction routine
res_range._prepared = False
res_range.parameters = sample_params
samples.append(res_range)
# Handling RM sampling
elif formalism == 'rm':
params = ['energy', 'L', 'J', 'neutronWidth', 'captureWidth',
params = ['energy', 'neutronWidth', 'captureWidth',
'fissionWidthA', 'fissionWidthB']
param_list = params[:mpar]
mean_array = parameters[param_list].values
mean = mean_array.flatten()
par_samples = np.random.multivariate_normal(mean, cov,
size=n_samples)
spin = parameters['J']
spin = parameters['J'].values
l_value = parameters['L'].values
for sample in par_samples:
energy = sample[0::mpar]
@ -305,9 +299,6 @@ class ResonanceCovarianceRange:
columns=columns)
# Copy ResonanceRange object
res_range = copy.copy(self.file2res)
# Set _prepared to False to ensure sampled parameters are
# used during construction routine
res_range._prepared = False
res_range.parameters = sample_params
samples.append(res_range)