From 5381ad46bc73c1cc45c2debd6507c15c5e1bf8da Mon Sep 17 00:00:00 2001 From: Isaac Meyer Date: Mon, 23 Jul 2018 13:43:07 -0500 Subject: [PATCH] Style, changed sampling/subset methods to return new objects --- .../nuclear-data-resonance-covariance.ipynb | 776 +++++++++++++++--- openmc/data/endf.py | 22 +- openmc/data/neutron.py | 8 +- openmc/data/resonance_covariance.py | 281 ++++--- 4 files changed, 848 insertions(+), 239 deletions(-) diff --git a/examples/jupyter/nuclear-data-resonance-covariance.ipynb b/examples/jupyter/nuclear-data-resonance-covariance.ipynb index 9e79175d8..ab2694922 100644 --- a/examples/jupyter/nuclear-data-resonance-covariance.ipynb +++ b/examples/jupyter/nuclear-data-resonance-covariance.ipynb @@ -1,5 +1,12 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this notebook we will explore features of the Python API that allow us to import and manipulate resonance covariance data. A full description of the ENDF-VI and ENDF-VII formats can be found in the [ENDF102 manual](https://www.oecd-nea.org/dbdata/data/manual-endf/endf102.pdf)." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -16,8 +23,6 @@ "import h5py\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "import matplotlib.cm\n", - "from matplotlib.patches import Rectangle\n", "\n", "import openmc.data" ] @@ -28,7 +33,7 @@ "source": [ "### ENDF: Resonance Covariance Data\n", "\n", - "We can also load the resonance covariance data contained within File 32 of ENDF. Let's download the ENDF/B-VII.1 evaluation for $^{157}$Gd and load it in:" + "Let's download the ENDF/B-VII.1 evaluation for $^{157}$Gd and load it in:" ] }, { @@ -53,7 +58,7 @@ "filename, headers = urllib.request.urlretrieve(url, 'gd157.endf')\n", "\n", "# Load into memory\n", - "gd157_endf = openmc.data.IncidentNeutron.from_endf(filename, covariance = True)\n", + "gd157_endf = openmc.data.IncidentNeutron.from_endf(filename, covariance=True)\n", "gd157_endf" ] }, @@ -70,28 +75,113 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " energy J neutronWidth captureWidth fissionWidthA fissionWidthB L\n", - "0 0.0314 2.0 0.000474 0.1072 0.0 0.0 0\n", - "1 2.8250 2.0 0.000345 0.0970 0.0 0.0 0\n", - "2 16.2400 1.0 0.000400 0.0910 0.0 0.0 0\n", - "3 16.7700 2.0 0.012800 0.0805 0.0 0.0 0\n", - "4 20.5600 2.0 0.011360 0.0880 0.0 0.0 0\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energyJneutronWidthcaptureWidthfissionWidthAfissionWidthBL
00.03142.00.0004740.10720.00.00
12.82502.00.0003450.09700.00.00
216.24001.00.0004000.09100.00.00
316.77002.00.0128000.08050.00.00
420.56002.00.0113600.08800.00.00
\n", + "
" + ], + "text/plain": [ + " energy J neutronWidth captureWidth fissionWidthA fissionWidthB L\n", + "0 0.0314 2.0 0.000474 0.1072 0.0 0.0 0\n", + "1 2.8250 2.0 0.000345 0.0970 0.0 0.0 0\n", + "2 16.2400 1.0 0.000400 0.0910 0.0 0.0 0\n", + "3 16.7700 2.0 0.012800 0.0805 0.0 0.0 0\n", + "4 20.5600 2.0 0.011360 0.0880 0.0 0.0 0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "first_five = gd157_endf.resonance_covariance.ranges[0].parameters[:5]\n", - "print(first_five)" + "gd157_endf.resonance_covariance.ranges[0].parameters[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The newly created object will contain multiple resonance regions within 'gd157_endf.res_covariance.ranges'. We can access the full covariance matrix from File 32 for a given range by:" + "The newly created object will contain multiple resonance regions within `gd157_endf.resonance_covariance.ranges`. We can access the full covariance matrix from File 32 for a given range by:" ] }, { @@ -118,7 +208,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -127,9 +217,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nIiq5Enr3y8wuN7OTzOwUqk1VPmZmPwl8nGrHKZjTfY2nTZjoaI47bH5pY+9jVmIunphK1nS1TlN1\nxSzBmNxNhRQqp5L+tz2P2PlQcTeVRqx86pXqb9iXnOKNlS19dm2fgZx8uXrCz99QxnaNJZ0n6XZJ\neyVdFrl+WD3yZG89EuWU4PrTJd0v6dd6d6pmGgr+dcBr6p2njqHaiWrlCD+cuV//Lr/Y03J924h9\nqVeRPs8gpuBiFt4Y8qTqGet/N5YilLQBeAdwPnA68ApJpwfFLgLuNbPTqLbrfFtw/Srgf/fryeMZ\nJcFjZjcAN9Tv7wDOGKPeZSL2QYy5ol0/sH3rKHGNY1/cMb5Qfa2U0i992FZp2RL6yt4mx1iW25gW\nYMjIc43PAPbW+gJJ1wBbgM83ymwB3lS//wDwe5JU7238UuAO4J/GEGZZXX7HcaaApKIXsGkyKqR+\nXRxUdSLw1cZxbITJo2XqnMN9wDGSnkzlef76WP1axCE/C0n4S52L++VoixHG2iqpZ4hMXelbd8xK\n7dPPWZNK9IxVdxfLeBASbCxUGQ8/fI+ZreVqi5wLR5ikyvw61aSN+2ulOxhXhDOiqxuacndzH/xp\nxg/nQaHMA31d+mn9b2b+fylXhG0l9gEnN45jI0wmZfZJ2gg8FTgAPB94maTfAI4EHpH0oJn9Xplw\nT8QV4YyJDSsJz+fIKdRYYmZIzCg1fCQs0yZ3WE+p0m+jS7+aMpTeN1YSq6sS7CrjzJRhF4uwnZuA\nzZJOBb5GNfLklUGZ7VQjTz5JNRLlY2ZmwL99TCS9Cbh/iBIEV4QzJ6as2pRNSX3TJGfRlFiqoaLu\n006MPkqg67MtlWdMq29ure9DDoHDDy8r+4//mL1sZgclXQpcR7Vy1zYz2y3pCmCXmW2nGnHyh/UI\nlANUynIquCJ0HKeMcS1CzGwHsCM494bG+weBl7fU8aYxZHFFuE6UBv1zrnDI0KB8Lm45LboMiRki\nz3oOn4lZi2M93z5DigYxoiKcJ5azVwtELH7WJW7W9QsVKx+LnZUq6j5xtJJ4YtdrJW1PQ/Gsdz19\nMum9GdkinCeWs1cLRMxaGDrLIKechliIYRuls03asuJjzaooZRoKNTZTqOT/MbZ8U8UVoTNNcpnY\nLlnkti9cV6sul+To4rJ3qaeLa9xFYYw1RjLXx5TFm1KcKZmGJMtKQyy9cEXozJJUZjlG1+EzKStv\n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\nUQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -137,7 +227,7 @@ } ], "source": [ - "plt.imshow(covariance)\n", + "plt.imshow(covariance,cmap='seismic',vmin=-0.08, vmax=0.08)\n", "plt.colorbar()" ] }, @@ -145,7 +235,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Another capability of the covariance module is selecting a subset of the resonance parameters and the corresponding subset of the covariance matrix. We can do this by specifying the value we want to discriminate and the bounds within one energy region. Selecting only resonances with J=2:" + "The correlation matrix can be constructed using the covariance matrix and also give some insight into the relations among the parameters." ] }, { @@ -154,31 +244,47 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " energy J neutronWidth captureWidth fissionWidthA fissionWidthB L\n", - "0 0.0314 2.0 0.000474 0.1072 0.0 0.0 0\n", - "1 2.8250 2.0 0.000345 0.0970 0.0 0.0 0\n", - "3 16.7700 2.0 0.012800 0.0805 0.0 0.0 0\n", - "4 20.5600 2.0 0.011360 0.0880 0.0 0.0 0\n", - "5 21.6500 2.0 0.000376 0.1140 0.0 0.0 0\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nOEtDAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "lower_bound = 2; #inclusive\n", - "upper_bound = 2; #inclusive\n", - "gd157_endf.resonance_covariance.ranges[0].res_subset('J',[lower_bound,upper_bound])\n", - "subset_first_five = gd157_endf.resonance_covariance.ranges[0].parameters_subset[:5]\n", - "print(subset_first_five)" + "corr = np.zeros([len(covariance),len(covariance)])\n", + "for i in range(len(covariance)):\n", + " for j in range(len(covariance)):\n", + " corr[i, j]=covariance[i, j]/covariance[i, i]**(0.5)/covariance[j, j]**(0.5)\n", + "plt.imshow(corr, cmap='seismic',vmin=-1.0, vmax=1.0)\n", + "plt.colorbar()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The subset method will also store the corresponding subset of the covariance matrix" + "### Sampling and Reconstruction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The covariance module also has the ability to sample a new set of parameters using the covariance matrix. Currently the sampling uses numpy.multivariate_normal(). Because parameters are assumed to have a multivariate normal distribution this method doesn't not currently guarantee that sampled parameters will be positive." ] }, { @@ -187,32 +293,36 @@ "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "[[ 2.82609600e-06 5.89537500e-09 -4.78638600e-06 -5.73895500e-08\n", - " -1.48636900e-09]\n", - " [ 0.00000000e+00 1.36218000e-11 -9.61975600e-09 -1.15354000e-10\n", - " -2.87250000e-12]\n", - " [ 0.00000000e+00 0.00000000e+00 8.20814700e-06 9.83537100e-08\n", - " 2.58111200e-09]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 6.54205000e-06\n", - " -4.31977000e-10]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", - " 1.76975000e-10]]\n" + "/home/icmeyer/miniconda3/lib/python3.6/site-packages/openmc-0.10.0-py3.6-linux-x86_64.egg/openmc/data/resonance_covariance.py:239: UserWarning: Sampling routine does not guarantee positive values for parameters. This can lead to undefined behavior in the reconstruction routine.\n", + " warnings.warn(warn_str)\n" ] + }, + { + "data": { + "text/plain": [ + "openmc.data.resonance.ReichMoore" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "cov_subset = gd157_endf.resonance_covariance.ranges[0].cov_subset\n", - "print(cov_subset[:5,:5])" + "rm_resonance = gd157_endf.resonances.ranges[0]\n", + "n_samples = 5\n", + "samples = gd157_endf.resonance_covariance.ranges[0].sample_resonance_parameters(n_samples, rm_resonance)\n", + "type(samples[0])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The covariance module also has the ability to sample a new set of parameters using the covariance matrix. Currently the sampling uses np.multivariate_normal(). Because parameters are assumed to have a multivariate normal distribution this method doesn't not currently guarantee that sampled parameters will be positive." + "The sampling routine requires the incorporation of the `openmc.data.ResonanceRange` for the same resonance range object. This allows each sample itself to be its own `openmc.data.ResonanceRange` with a new set of parameters. Looking at some of the sampled parameters below:" ] }, { @@ -220,10 +330,105 @@ "execution_count": 8, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 1\n" + ] + }, { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energyLJneutronWidthcaptureWidthfissionWidthAfissionWidthB
00.02930902.00.0004680.1103270.00.0
12.82776102.00.0003590.0945390.00.0
216.20841801.00.0002830.0469950.00.0
316.76232202.00.0130440.0781280.00.0
420.55739402.00.0111030.0863090.00.0
\n", + "
" + ], "text/plain": [ - "openmc.data.resonance.ReichMoore" + " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", + "0 0.029309 0 2.0 0.000468 0.110327 0.0 0.0\n", + "1 2.827761 0 2.0 0.000359 0.094539 0.0 0.0\n", + "2 16.208418 0 1.0 0.000283 0.046995 0.0 0.0\n", + "3 16.762322 0 2.0 0.013044 0.078128 0.0 0.0\n", + "4 20.557394 0 2.0 0.011103 0.086309 0.0 0.0" ] }, "execution_count": 8, @@ -232,18 +437,8 @@ } ], "source": [ - "rm_resonance = gd157_endf.resonances.ranges[0]\n", - "n_samples = 5\n", - "gd157_endf.resonance_covariance.ranges[0].sample_resonance_parameters(n_samples, rm_resonance)\n", - "samples = gd157_endf.resonance_covariance.ranges[0].samples\n", - "type(samples[0])\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The sampling routine requires the incorpotation of the `openmc.data.ResonanceRange` for the same resonance range object. This allows each sample itself to be its own `openmc.data.ResonanceRange` with a new set of parameters. Looking at some of the sampled parameters below:" + "print('Sample 1')\n", + "samples[0].parameters[:5]" ] }, { @@ -255,30 +450,111 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample 1\n", - " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", - "0 0.030278 0 2.0 0.000472 0.109151 0.0 0.0\n", - "1 2.826910 0 2.0 0.000347 0.099239 0.0 0.0\n", - "2 16.199761 0 1.0 0.000258 0.082103 0.0 0.0\n", - "3 16.772474 0 2.0 0.012354 0.091428 0.0 0.0\n", - "4 20.553868 0 2.0 0.011185 0.089609 0.0 0.0\n", - "Sample 2\n", - " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", - "0 0.033611 0 2.0 0.000479 0.103410 0.0 0.0\n", - "1 2.825707 0 2.0 0.000335 0.101266 0.0 0.0\n", - "2 16.270769 0 1.0 0.000360 0.071230 0.0 0.0\n", - "3 16.773850 0 2.0 0.013402 0.074592 0.0 0.0\n", - "4 20.563037 0 2.0 0.011916 0.086590 0.0 0.0\n" + "Sample 2\n" ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energyLJneutronWidthcaptureWidthfissionWidthAfissionWidthB
00.03134402.00.0004730.1071360.00.0
12.82702602.00.0003210.1029000.00.0
216.24279101.00.0004790.1198320.00.0
316.77214702.00.0133930.0702520.00.0
420.55632402.00.0122200.0771220.00.0
\n", + "
" + ], + "text/plain": [ + " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", + "0 0.031344 0 2.0 0.000473 0.107136 0.0 0.0\n", + "1 2.827026 0 2.0 0.000321 0.102900 0.0 0.0\n", + "2 16.242791 0 1.0 0.000479 0.119832 0.0 0.0\n", + "3 16.772147 0 2.0 0.013393 0.070252 0.0 0.0\n", + "4 20.556324 0 2.0 0.012220 0.077122 0.0 0.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "first_five_sample_1 = samples[0].parameters[:5]\n", - "first_five_sample_2 = samples[1].parameters[:5]\n", - "print('Sample 1')\n", - "print(first_five_sample_1)\n", "print('Sample 2')\n", - "print(first_five_sample_2)" + "samples[1].parameters[:5]" ] }, { @@ -296,8 +572,8 @@ { "data": { "text/plain": [ - "[,\n", - " ]" + "[,\n", + " ]" ] }, "execution_count": 10, @@ -312,7 +588,9 @@ { "cell_type": "code", "execution_count": 11, - "metadata": {}, + "metadata": { + "scrolled": false + }, "outputs": [ { "data": { @@ -326,9 +604,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -339,14 +617,326 @@ "energy_range = [rm_resonance.energy_min, rm_resonance.energy_max]\n", "energies = np.logspace(np.log10(energy_range[0]),\n", " np.log10(energy_range[1]), 10000)\n", - "for sample in gd157_endf.resonance_covariance.ranges[0].samples:\n", + "for sample in samples:\n", " xs = sample.reconstruct(energies)\n", " elastic_xs = xs[2]\n", " plt.loglog(energies, elastic_xs)\n", "plt.xlabel('Energy (eV)')\n", - "plt.ylabel('Cross section (b)')\n", - "\n", - " " + "plt.ylabel('Cross section (b)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Subset Selection" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another capability of the covariance module is selecting a subset of the resonance parameters and the corresponding subset of the covariance matrix. We can do this by specifying the value we want to discriminate and the bounds within one energy region. Selecting only resonances with J=2:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energyLJneutronWidthcaptureWidthfissionWidthAfissionWidthB
00.031402.00.0004740.10720.00.0
12.825002.00.0003450.09700.00.0
316.770002.00.0128000.08050.00.0
420.560002.00.0113600.08800.00.0
521.650002.00.0003760.11400.00.0
\n", + "
" + ], + "text/plain": [ + " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", + "0 0.0314 0 2.0 0.000474 0.1072 0.0 0.0\n", + "1 2.8250 0 2.0 0.000345 0.0970 0.0 0.0\n", + "3 16.7700 0 2.0 0.012800 0.0805 0.0 0.0\n", + "4 20.5600 0 2.0 0.011360 0.0880 0.0 0.0\n", + "5 21.6500 0 2.0 0.000376 0.1140 0.0 0.0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lower_bound = 2; # inclusive\n", + "upper_bound = 2; # inclusive\n", + "rm_resonance_sub, rm_res_cov_sub = gd157_endf.resonance_covariance.ranges[0].res_subset('J',[lower_bound,upper_bound], rm_resonance)\n", + "rm_resonance_sub.parameters[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The subset method will also store the corresponding subset of the covariance matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(180, 180)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rm_res_cov_sub.covariance\n", + "gd157_endf.resonance_covariance.ranges[0].covariance.shape\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Checking the size of the new covariance matrix to be sure it was sampled properly: " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of parameters\n", + "Original: 60\n", + "Subet: 36\n", + "Covariance Size\n", + "Original: (180, 180)\n", + "Subset: (108, 108)\n" + ] + } + ], + "source": [ + "old_n_parameters = gd157_endf.resonance_covariance.ranges[0].parameters.shape[0]\n", + "old_shape = gd157_endf.resonance_covariance.ranges[0].covariance.shape\n", + "new_n_parameters = rm_resonance_sub.parameters.shape[0]\n", + "new_shape = rm_res_cov_sub.covariance.shape\n", + "print('Number of parameters\\nOriginal: '+str(old_n_parameters)+'\\nSubet: '+str(new_n_parameters)+'\\nCovariance Size\\nOriginal: '+str(old_shape)+'\\nSubset: '+str(new_shape))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And finally, we can sample from the subset as well" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/icmeyer/miniconda3/lib/python3.6/site-packages/openmc-0.10.0-py3.6-linux-x86_64.egg/openmc/data/resonance_covariance.py:239: UserWarning: Sampling routine does not guarantee positive values for parameters. This can lead to undefined behavior in the reconstruction routine.\n", + " warnings.warn(warn_str)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energyLJneutronWidthcaptureWidthfissionWidthAfissionWidthB
00.03306102.00.0004770.1042860.00.0
12.82275802.00.0003450.1010870.00.0
216.77208402.00.0132770.0747350.00.0
320.55597702.00.0114170.0924370.00.0
421.66221302.00.0003800.1222820.00.0
\n", + "
" + ], + "text/plain": [ + " energy L J neutronWidth captureWidth fissionWidthA fissionWidthB\n", + "0 0.033061 0 2.0 0.000477 0.104286 0.0 0.0\n", + "1 2.822758 0 2.0 0.000345 0.101087 0.0 0.0\n", + "2 16.772084 0 2.0 0.013277 0.074735 0.0 0.0\n", + "3 20.555977 0 2.0 0.011417 0.092437 0.0 0.0\n", + "4 21.662213 0 2.0 0.000380 0.122282 0.0 0.0" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples_sub = rm_res_cov_sub.sample_resonance_parameters(n_samples, rm_resonance_sub)\n", + "samples_sub[0].parameters[:5]" ] } ], diff --git a/openmc/data/endf.py b/openmc/data/endf.py index cc930b442..8a118f169 100644 --- a/openmc/data/endf.py +++ b/openmc/data/endf.py @@ -71,8 +71,8 @@ def float_endf(s): return float(_ENDF_FLOAT_RE.sub(r'\1e\2', s)) -def int_endf(s): - """Conver string to int. Used for INTG records where blank entries +def _int_endf(s): + """Convert string to int. Used for INTG records where blank entries indicate a 0. Parameters @@ -267,10 +267,11 @@ def get_tab2_record(file_obj): return params, Tabulated2D(breakpoints, interpolation) + def get_intg_record(file_obj): """ - Return data from an INTG record in an ENDF-6 file. Used to store the - covariance matrix in a compact format. + Return data from an INTG record in an ENDF-6 file. Used to store the + covariance matrix in a compact format. Parameters ---------- @@ -285,8 +286,8 @@ def get_intg_record(file_obj): # determine how many items are in list and NDIGIT items = get_cont_record(file_obj) ndigit = int(items[2]) - npar = int(items[3]) # Number of parameters - nlines = int(items[4]) # Lines to read + npar = int(items[3]) # Number of parameters + nlines = int(items[4]) # Lines to read NROW_RULES = {2: 18, 3: 12, 4: 11, 5: 9, 6: 8} nrow = NROW_RULES[ndigit] @@ -294,24 +295,23 @@ def get_intg_record(file_obj): corr = np.identity(npar) for i in range(nlines): line = file_obj.readline() - ii = int_endf(line[:5]) - 1 #-1 to account for 0 indexing - jj = int_endf(line[5:10]) - 1 + ii = _int_endf(line[:5]) - 1 # -1 to account for 0 indexing + jj = _int_endf(line[5:10]) - 1 factor = 10**ndigit for j in range(nrow): if jj+j >= ii: break - element = int_endf(line[11+(ndigit+1)*j:11+(ndigit+1)*(j+1)]) + element = _int_endf(line[11+(ndigit+1)*j:11+(ndigit+1)*(j+1)]) if element > 0: corr[ii, jj] = (element+0.5)/factor elif element < 0: corr[ii, jj] = (element-0.5)/factor - #Symmetrize the correlation matrix + # Symmetrize the correlation matrix corr = corr + corr.T - np.diag(corr.diagonal()) return corr - def get_evaluations(filename): """Return a list of all evaluations within an ENDF file. diff --git a/openmc/data/neutron.py b/openmc/data/neutron.py index 3b98e00a2..3917496b8 100644 --- a/openmc/data/neutron.py +++ b/openmc/data/neutron.py @@ -299,7 +299,7 @@ class IncidentNeutron(EqualityMixin): @resonance_covariance.setter def resonance_covariance(self, resonance_covariance): cv.check_type('resonance covariance', resonance_covariance, - res_cov.ResonanceCovariances) + res_cov.ResonanceCovariances) self._resonance_covariance = resonance_covariance @summed_reactions.setter @@ -767,7 +767,7 @@ class IncidentNeutron(EqualityMixin): be the filename for the ENDF file. covariance : bool - Flag to indicate whether or not covariance data from File 32 should be + Flag to indicate whether or not covariance data from File 32 should be retrieved Returns @@ -802,7 +802,9 @@ class IncidentNeutron(EqualityMixin): data.resonances = res.Resonances.from_endf(ev) if (32, 151) in ev.section and covariance: - data.resonance_covariance = res_cov.ResonanceCovariances.from_endf(ev, data.resonances) + data.resonance_covariance = ( + res_cov.ResonanceCovariances.from_endf(ev, data.resonances) + ) # Read each reaction for mf, mt, nc, mod in ev.reaction_list: diff --git a/openmc/data/resonance_covariance.py b/openmc/data/resonance_covariance.py index 960d55bc9..69e677692 100644 --- a/openmc/data/resonance_covariance.py +++ b/openmc/data/resonance_covariance.py @@ -12,13 +12,13 @@ from .resonance import Resonances def _add_file2_contributions(file32params, file2params): - """Function for aiding in adding resonance parameters from File 2 that are + """Function for aiding in adding resonance parameters from File 2 that are not always present in File 32. Uses already imported resonance data. Paramaters ---------- file32params : pandas.Dataframe - Incomplete set of resonance parameters contained in File 32. + Incomplete set of resonance parameters contained in File 32. file2params : pandas.Dataframe Resonance parameters from File 2. Ordered by energy. @@ -26,6 +26,7 @@ def _add_file2_contributions(file32params, file2params): ------- parameters : pandas.Dataframe Complete set of parameters ordered by L-values and then energy + """ # Use l-values and competitiveWidth from File 2 data # Re-sort File 2 by energy to match File 32 @@ -54,6 +55,7 @@ class ResonanceCovariances(Resonances): ---------- ranges : list of openmc.data.ResonanceCovarianceRange Distinct energy ranges for resonance data + """ @property @@ -63,8 +65,8 @@ class ResonanceCovariances(Resonances): @ranges.setter def ranges(self, ranges): cv.check_type('resonance ranges', ranges, MutableSequence) - self._ranges = cv.CheckedList(ResonanceCovarianceRange, 'resonance range', - ranges) + self._ranges = cv.CheckedList(ResonanceCovarianceRange, + 'resonance range', ranges) @classmethod def from_endf(cls, ev, resonances): @@ -75,8 +77,8 @@ class ResonanceCovariances(Resonances): ev : openmc.data.endf.Evaluation ENDF evaluation resonances : openmc.data.Resonance object - openmc.data.Resonanance object generated from the same evaluation used - to import values not contained in File 32 + openmc.data.Resonanance object generated from the same evaluation + used to import values not contained in File 32 Returns ------- @@ -88,39 +90,40 @@ class ResonanceCovariances(Resonances): # Determine whether discrete or continuous representation items = endf.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 = endf.get_cont_record(file_obj) abundance = items[1] - fission_widths = (items[3] == 1) # Flag for fission widths - n_ranges = items[4] # number of resonance energy ranges + fission_widths = (items[3] == 1) # Flag for fission widths + n_ranges = items[4] # Number of resonance energy ranges for j in range(n_ranges): items = endf.get_cont_record(file_obj) - unresolved_flag = items[2] # 0: only scattering radius given - # 1: resolved parameters given - # 2: unresolved parameters given + # Unresolved flags - 0: only scattering radius given + # 1: resolved parameters given + # 2: unresolved parameters given + unresolved_flag = items[2] formalism = items[3] # resonance formalism # Throw error for unsupported formalisms if formalism in [0, 7]: - raise NotImplementedError('LRF= ', formalism, - 'covariance not supported for this formalism') + error = 'LRF = '+str(formalism)+'covariance not supported '\ + 'for this formalism' + raise NotImplementedError(error) if unresolved_flag in (0, 1): - # resolved resonance region + # Resolved resonance region file2params = resonances.ranges[j].parameters erange = _FORMALISMS[formalism].from_endf(ev, file_obj, items, file2params) ranges.append(erange) elif unresolved_flag == 2: - warn_str = 'Unresolved resonance not supported. '\ - 'Covariance values for the unresolved region not imported.' - warnings.warn(warn_str) - + warn = 'Unresolved resonance not supported. Covariance '\ + 'values for the unresolved region not imported.' + warnings.warn(warn) return cls(ranges) @@ -146,7 +149,7 @@ class ResonanceCovarianceRange: covariance : numpy.array The covariance matrix contained within the ENDF evaluation lcomp : int - Flag indicating the format of the covariance matrix within the ENDF file + Flag indicating format of the covariance matrix within the ENDF file mpar : int Number of parameters in covariance matrix for each individual resonance formalism : str @@ -155,35 +158,47 @@ class ResonanceCovarianceRange: def __init__(self, energy_min, energy_max): self.energy_min = energy_min self.energy_max = energy_max - - def res_subset(self, parameter_str, bounds): + + def res_subset(self, parameter_str, bounds, resonances): """Produce a subset of resonance parameters and the corresponding covariance matrix to an IncidentNeutron object. - + Parameters ---------- parameter_str : str parameter to be discriminated (i.e. 'energy', 'captureWidth', 'fissionWidthA'...) - bounds : np.array + bounds : np.array [low numerical bound, high numerical bound] - + resonances : openmc.data.ResonanceRange object + Corresponding resonance range with File 2 data. + Returns ------- - parameters_subset : pandas.Dataframe - Subset of parameters (maintains indexing of original) - cov_subset : np.array - Subset of covariance matrix (upper triangular) - + res_range : openmc.data.ResonanceRange + ResonanceRange object that contains a subset of parameters + (maintains indexing of original) + res_cov_range : openmc.data.ResonanceCovarianceRange + ResonanceCovarianceRange object that contains a subset of the + covariance matrix (upper triangular) as well as parameters + """ - parameters = self.parameters - cov = self.covariance - mpar = self.mpar + # Copy the objects + res_range = copy.copy(resonances) + res_cov_range = copy.copy(self) + + parameters = res_range.parameters + cov = res_cov_range.covariance + mpar = res_cov_range.mpar + # Create mask mask1 = parameters[parameter_str] >= bounds[0] mask2 = parameters[parameter_str] <= bounds[1] mask = mask1 & mask2 - parameters_subset = parameters[mask] - indices = parameters_subset.index.values + # Set the parameters for each object + res_range.parameters = parameters[mask] + res_cov_range.parameters = parameters[mask] + indices = res_cov_range.parameters.index.values + # Build subset of covariance sub_cov_dim = len(indices)*mpar cov_subset_vals = [] for index1 in indices: @@ -191,54 +206,48 @@ class ResonanceCovarianceRange: for index2 in indices: for j in range(mpar): if index2*mpar+j >= index1*mpar+i: - cov_subset_vals.append(cov[index1*mpar+i, index2*mpar+j]) - + cov_subset_vals.append(cov[index1*mpar+i, + index2*mpar+j]) + cov_subset = np.zeros([sub_cov_dim, sub_cov_dim]) tri_indices = np.triu_indices(sub_cov_dim) cov_subset[tri_indices] = cov_subset_vals - - self.parameters_subset = parameters_subset - self.cov_subset = cov_subset + res_cov_range.covariance = cov_subset + + return res_range, res_cov_range + + def sample_resonance_parameters(self, n_samples, resonances): + """Sample resonance parameters based on the covariances provided + within an ENDF evaluation. - def sample_resonance_parameters(self, n_samples, resonances, use_subset=False): - """Return a list size 'n_samples' of openmc.data.ResonanceRange objects. - Each with an indepentenly sampled set of parameters - Parameters ---------- n_samples : int The number of samples to produce resonances : openmc.data.ResonanceRange object Corresponding resonance range with File 2 data. - use_subset : bool, optional - Flag on whether to sample from an already produced subset - + Returns ------- - samples : list of openmc.data.ResonanceCovarianceRange objects + samples : list of openmc.data.ResonanceCovarianceRange objects List of samples size `n_samples` - + """ warn_str = 'Sampling routine does not guarantee positive values for '\ 'parameters. This can lead to undefined behavior in the '\ 'reconstruction routine.' warnings.warn(warn_str) - if not use_subset: - parameters = self.parameters - cov = self.covariance - else: - if self.parameters_subset is None: - raise ValueError('No subset of resonances defined') - parameters = self.parameters_subset - cov = self.cov_subset + parameters = self.parameters + cov = self.covariance nparams, params = parameters.shape - cov = cov + cov.T - np.diag(cov.diagonal()) # symmetrizing covariance matrix + # Symmetrizing covariance matrix + cov = cov + cov.T - np.diag(cov.diagonal()) covsize = cov.shape[0] formalism = self.formalism mpar = self.mpar samples = [] - + # Handling MLBW sampling if formalism == 'mlbw' or formalism == 'slbw': if mpar == 3: @@ -258,20 +267,22 @@ class ResonanceCovarianceRange: gt = gn + gg + gf 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) res_range = copy.copy(resonances) - res_range._prepared = False # Set prepared to False to ensure - # the sampled parameters are used - # in reconstruction + # Set _prepared to False to ensure sampled paramaters are + # used during construction routine + res_range._prepared = False res_range.parameters = sample_params samples.append(res_range) - + elif mpar == 4: - param_list = ['energy', 'neutronWidth', 'captureWidth', 'fissionWidth'] + param_list = ['energy', 'neutronWidth', 'captureWidth', + 'fissionWidth'] mean_array = pd.DataFrame.as_matrix(parameters[param_list]) spin = pd.DataFrame.as_matrix(parameters['J']) l_value = pd.DataFrame.as_matrix(parameters['L']) @@ -287,18 +298,19 @@ class ResonanceCovarianceRange: gt = gn + gg + gf 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) res_range = copy.copy(resonances) - res_range._prepared = False # Set prepared to False to ensure - # the sampled parameters are used - # in reconstruction + # Set _prepared to False to ensure sampled paramaters are + # used during construction routine + res_range._prepared = False res_range.parameters = sample_params samples.append(res_range) - + elif mpar == 5: param_list = ['energy', 'neutronWidth', 'captureWidth', 'fissionWidth', 'competitiveWidth'] @@ -317,15 +329,16 @@ class ResonanceCovarianceRange: gt = gn + gg + gf 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', 'competitveWidth'] - sample_params = pd.DataFrame.from_records(records, columns=columns) + sample_params = pd.DataFrame.from_records(records, + columns=columns) res_range = copy.copy(resonances) - res_range._prepared = False # Set prepared to False to ensure - # the sampled parameters are used - # in reconstruction + # Set _prepared to False to ensure sampled paramaters are + # used during construction routine + res_range._prepared = False res_range.parameters = sample_params samples.append(res_range) @@ -351,14 +364,15 @@ class ResonanceCovarianceRange: gg[j], gfa[j], gfb[j]]) columns = ['energy', 'L', 'J', 'neutronWidth', 'captureWidth', 'fissionWidthA', 'fissionWidthB'] - sample_params = pd.DataFrame.from_records(records, columns=columns) + sample_params = pd.DataFrame.from_records(records, + columns=columns) res_range = copy.copy(resonances) - res_range._prepared = False # Set prepared to False to ensure - # the sampled parameters are used - # in reconstruction + # Set _prepared to False to ensure sampled paramaters are + # used during construction routine + res_range._prepared = False res_range.parameters = sample_params samples.append(res_range) - + elif mpar == 5: param_list = ['energy', 'neutronWidth', 'captureWidth', 'fissionWidthA', 'fissionWidthB'] @@ -380,15 +394,16 @@ class ResonanceCovarianceRange: gg[j], gfa[j], gfb[j]]) columns = ['energy', 'L', 'J', 'neutronWidth', 'captureWidth', 'fissionWidthA', 'fissionWidthB'] - sample_params = pd.DataFrame.from_records(records, columns=columns) + sample_params = pd.DataFrame.from_records(records, + columns=columns) res_range = copy.copy(resonances) - res_range._prepared = False # Set prepared to False to ensure - # the sampled parameters are used - # in reconstruction + # Set _prepared to False to ensure sampled paramaters are + # used during construction routine + res_range._prepared = False res_range.parameters = sample_params samples.append(res_range) - - self.samples = samples + + return samples class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): @@ -411,7 +426,7 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): covariance : numpy.array The covariance matrix contained within the ENDF evaluation lcomp : int - Flag indicating the format of the covariance matrix within the ENDF file + Flag indicating format of the covariance matrix within the ENDF file mpar : int Number of parameters in covariance matrix for each individual resonance formalism : str @@ -425,7 +440,7 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): self.mpar = mpar self.lcomp = lcomp self.formalism = 'mlbw' - + @classmethod def from_endf(cls, ev, file_obj, items, file2params): """Create MLBW covariance data from an ENDF evaluation. @@ -460,16 +475,16 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): # Other scatter radius parameters items = endf.get_cont_record(file_obj) target_spin = items[0] - lcomp = items[3] # Flag for compatibility 0, 1, 2 - 2 is compact form + lcomp = items[3] # Flag for compatibility 0, 1, 2 - 2 is compact form nls = items[4] # number of l-values # Build covariance matrix for General Resolved Resonance Formats if lcomp == 1: items = endf.get_cont_record(file_obj) - num_short_range = items[4] # Number of short range type resonance - # covariances - num_long_range = items[5] # Number of long range type resonance - # covariances + # Number of short range type resonance covariances + num_short_range = items[4] + # Number of long range type resonance covariances + num_long_range = items[5] # Read resonance widths, J values, etc records = [] @@ -498,7 +513,7 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): indices = np.triu_indices(cov_dim) cov[indices] = cov_values - # Create pandas DataFrame with resonance data, currently + # Create pandas DataFrame with resonance data, currently # redundant with data.IncidentNeutron.resonance columns = ['energy', 'J', 'totalWidth', 'neutronWidth', 'captureWidth', 'fissionWidth'] @@ -507,11 +522,12 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): # Add parameters from File 2 parameters = _add_file2_contributions(parameters, file2params) - elif lcomp == 2: # Compact format - Resonances and individual - # uncertainties followed by compact correlations + # Compact format - Resonances and individual uncertainties followed by + # compact correlations + elif lcomp == 2: items, values = endf.get_list_record(file_obj) mean = items - num_res = items[5] + num_res = items[5] energy = values[0::12] spin = values[1::12] gt = values[2::12] @@ -525,9 +541,9 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): # DAJ/DGT always zero, DGF sometimes none zero [1, 2, 5] res_unc_nonzero = [] for j in range(6): - if j in [1, 2, 5] and res_unc[j] != 0.0 : + if j in [1, 2, 5] and res_unc[j] != 0.0: res_unc_nonzero.append(res_unc[j]) - elif j in [0,3,4]: + elif j in [0, 3, 4]: res_unc_nonzero.append(res_unc[j]) par_unc.extend(res_unc_nonzero) @@ -549,11 +565,11 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): nparams, params = parameters.shape covsize = cov.shape[0] mpar = int(covsize/nparams) - + # Add parameters from File 2 parameters = _add_file2_contributions(parameters, file2params) - elif lcomp == 0 : + elif lcomp == 0: cov = np.zeros([4, 4]) records = [] cov_index = 0 @@ -576,12 +592,11 @@ class MultiLevelBreitWignerCovariance(ResonanceCovarianceRange): cov[cov_index+3, cov_index+3] = cov_values[6] cov_index += 4 - if j < num_res-1: # Pad matrix for additional values + if j < num_res-1: # Pad matrix for additional values cov = np.pad(cov, ((0, 4), (0, 4)), 'constant', constant_values=0) - - # Create pandas DataFrame with resonance data, currently + # Create pandas DataFrame with resonance data, currently # redundant with data.IncidentNeutron.resonance columns = ['energy', 'J', 'totalWidth', 'neutronWidth', 'captureWidth', 'fissionWidth'] @@ -624,15 +639,17 @@ class SingleLevelBreitWignerCovariance(MultiLevelBreitWignerCovariance): covariance : numpy.array The covariance matrix contained within the ENDF evaluation lcomp : int - Flag indicating the format of the covariance matrix within the ENDF file + Flag indicating format of the covariance matrix within the ENDF file mpar : int Number of parameters in covariance matrix for each individual resonance formalism : str String descriptor of formalism """ - def __init__(self, energy_min, energy_max, parameters, covariance, mpar, lcomp): - super().__init__(energy_min, energy_max, parameters, covariance, mpar, lcomp) + def __init__(self, energy_min, energy_max, parameters, covariance, mpar, + lcomp): + super().__init__(energy_min, energy_max, parameters, covariance, mpar, + lcomp) self.formalism = 'slbw' @@ -660,14 +677,15 @@ class ReichMooreCovariance(ResonanceCovarianceRange): covariance : numpy.array The covariance matrix contained within the ENDF evaluation lcomp : int - Flag indicating the format of the covariance matrix within the ENDF file + Flag indicating format of the covariance matrix within the ENDF file mpar : int Number of parameters in covariance matrix for each individual resonance formalism : str String descriptor of formalism """ - def __init__(self, energy_min, energy_max, parameters, covariance, mpar, lcomp): + def __init__(self, energy_min, energy_max, parameters, covariance, mpar, + lcomp): super().__init__(energy_min, energy_max) self.parameters = parameters self.covariance = covariance @@ -677,8 +695,9 @@ class ReichMooreCovariance(ResonanceCovarianceRange): @classmethod def from_endf(cls, ev, file_obj, items, file2params): - """Create Reich-Moore resonance covariance data from an ENDF evaluation. - Includes the resonance parameters contained separately in File 32. + """Create Reich-Moore resonance covariance data from an ENDF + evaluation. Includes the resonance parameters contained separately in + File 32. Parameters ---------- @@ -691,8 +710,8 @@ class ReichMooreCovariance(ResonanceCovarianceRange): Items from the CONT record at the start of the resonance range subsection resonances : openmc.data.Resonance object - openmc.data.Resonanance object generated from the same evaluation used - to import values not contained in File 32 + openmc.data.Resonanance object generated from the same evaluation + used to import values not contained in File 32 Returns ------- @@ -712,14 +731,13 @@ class ReichMooreCovariance(ResonanceCovarianceRange): lcomp = items[3] # Flag for compatibility 0, 1, 2 - 2 is compact form nls = items[4] # Number of l-values - # Build covariance matrix for General Resolved Resonance Formats if lcomp == 1: items = endf.get_cont_record(file_obj) - num_short_range = items[4] # Number of short range type resonance - # covariances - num_long_range = items[5] # Number of long range type resonance - # covariances + # Number of short range type resonance covariances + num_short_range = items[4] + # Number of long range type resonance covariances + num_long_range = items[5] # Read resonance widths, J values, etc channel_radius = {} scattering_radius = {} @@ -731,7 +749,7 @@ class ReichMooreCovariance(ResonanceCovarianceRange): num_par_vals = num_res*6 res_values = values[:num_par_vals] cov_values = values[num_par_vals:] - + energy = res_values[0::6] spin = res_values[1::6] gn = res_values[2::6] @@ -745,7 +763,7 @@ class ReichMooreCovariance(ResonanceCovarianceRange): # Build the upper-triangular covariance matrix cov_dim = mpar*num_res - cov = np.zeros([cov_dim,cov_dim]) + cov = np.zeros([cov_dim, cov_dim]) indices = np.triu_indices(cov_dim) cov[indices] = cov_values @@ -757,10 +775,11 @@ class ReichMooreCovariance(ResonanceCovarianceRange): # Add parameters from File 2 parameters = _add_file2_contributions(parameters, file2params) - elif lcomp == 2: # Compact format - Resonances and individual - # uncertainties followed by compact correlations + # Compact format - Resonances and individual uncertainties followed by + # compact correlations + elif lcomp == 2: items, values = endf.get_list_record(file_obj) - num_res = items[5] + num_res = items[5] energy = values[0::12] spin = values[1::12] gn = values[2::12] @@ -789,7 +808,7 @@ class ReichMooreCovariance(ResonanceCovarianceRange): # Determine mpar (number of parameters for each resonance in # covariance matrix) - nparams,params = parameters.shape + nparams, params = parameters.shape covsize = cov.shape[0] mpar = int(covsize/nparams) @@ -800,6 +819,7 @@ class ReichMooreCovariance(ResonanceCovarianceRange): rmc = cls(energy_min, energy_max, parameters, cov, mpar, lcomp) return rmc + _FORMALISMS = { 0: ResonanceCovarianceRange, 1: SingleLevelBreitWignerCovariance, @@ -807,6 +827,3 @@ _FORMALISMS = { 3: ReichMooreCovariance # 7: RMatrixLimitedCovariance } - - -