diff --git a/CNAME b/CNAME index 025a4c19..8dcf94aa 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -pyne.io \ No newline at end of file +pyne.io diff --git a/_downloads/03-nuclear-data.ipynb b/_downloads/03-nuclear-data.ipynb deleted file mode 100644 index 4715a919..00000000 --- a/_downloads/03-nuclear-data.ipynb +++ /dev/null @@ -1,574 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:2b0d58c652e846c4d8a4cf9713743c880cdae57d7569af4af361c7f70e97014a" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Nuclear Data\n", - "\n", - "PyNE provides a top-level interface for a variety of basic nuclear data needs. This aims to provide quick access to very high fidelity data. Values are taken from the `nuc_data.h5` library. The basic suite of data comes from public sources. However if you have access to proprietary or export-controlled data, such as CINDER cross sections, then PyNE will attempt to provide an interface to this as well.\n", - "\n", - "All functionality may be found in the data module:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from pyne import data" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "-c:1: QAWarning: pyne.data is not yet QA compliant.\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The usual suspects follow." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Atomic Mass [amu]\n", - "Finds the atomic mass of a nuclide" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.atomic_mass('U235')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 2, - "text": [ - "235.043930131" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Natural Abundance Ratios\n", - "Finds the natural abundance of a nuclide" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.natural_abund('U235')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - "0.007204" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.natural_abund('Pu-239')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "0.0" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Half Lives (s) & Decay Constants (1/s)\n", - "Finds the amount of time for half of the radionuclide to decay (half life). Decay constant is another measure of the rate of radioactive decay." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.half_life('U-238')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 5, - "text": [ - "1.409993568e+17" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.decay_const('U-238')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 6, - "text": [ - "4.915959875924379e-18" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Decay Children" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.decay_children('Rb86')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 7, - "text": [ - "set([360860000, 380860000])" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from pyne import nucname\n", - "print \"Rb86 decayse to two isotopes,\", \"\\n\"\n", - "print \"The first daughter is\", nucname.name(360860000), \"\\n\"\n", - "print \"The second daughter is\", nucname.name(380860000), \"\\n\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Rb86 decayse to two isotopes, \n", - "\n", - "The first daughter is Kr86 \n", - "\n", - "The second daughter is Sr86 \n", - "\n" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print \"It decays to \",nucname.name(360860000), \" with a branch ratio of \", data.branch_ratio('Rb86', 360860000)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "It decays to Kr86 with a branch ratio of 5.2e-05\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Neutron Scattering Lengths [cm]\n", - "Finds the bound scattering length; the generic value is computed from the coherent and incoherent scattering data:\n", - "\n", - "$$b = \\sqrt{\\left| b_{\\mbox{coh}} \\right|^2 + \\left| b_{\\mbox{inc}} \\right|^2}$$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.b('H1')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 12, - "text": [ - "2.554930849083787e-12" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.b_coherent('H1')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 13, - "text": [ - "(-3.7406e-13+0j)" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data.b_incoherent('H1')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 14, - "text": [ - "(2.5274000000000003e-12+0j)" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Half-life Plot" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "%matplotlib inline\n", - "import matplotlib\n", - "matplotlib.rc('font', family='serif', size=14)\n", - "import matplotlib.pyplot as plt\n", - "from pyne import nucname, nuc_data\n", - "\n", - "import tables as tb\n", - "f = tb.open_file(nuc_data)\n", - "# get a map between nucleon numbers and half-lives\n", - "anums = map(nucname.anum, f.root.decay.level_list[:]['nuc_id'])\n", - "#anums = map(nucname.anum, data.half_life_map.keys())\n", - "\n", - "fig = plt.figure(figsize=(13,7))\n", - "plt.semilogy(anums, f.root.decay.level_list[:]['half_life'], 'ko', ms=1, alpha=0.3)\n", - "plt.xlabel('A')\n", - "plt.ylabel('Half-life [s]')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 15, - "text": [ - "" - ] - }, - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "/usr/lib/pymodules/python2.7/matplotlib/scale.py:90: RuntimeWarning: invalid value encountered in less_equal\n", - " mask = a <= 0.0\n" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#ENSDF decay data\n", - "In addition to the basic ENSDF data interface shown above, there is an extended interface that provides access to a large portion of the decay data in the ENSDF dataset. For example lets look at Cs-137:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# we can look up most decay data by parent or by decay energy\n", - "# returns a list of gamma ray level pairs from ENSDF decay data from a given parent's state id.\n", - "decay_pairs = data.gamma_from_to_byparent(551370000)\n", - "print \"The decay pairs are \", decay_pairs, \",\\n\"\n", - "\n", - "# this resturns a list of gamma ray energies given a parent\n", - "energies = data.gamma_energy(551370000)\n", - "\n", - "print \"and they have these energies (paired with errors):\", (energies), \".\\n\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The decay pairs are [(561370001, 561370000), (561370002, 561370000)] ,\n", - "\n", - "and they have these energies (paired with errors): [(283.5, 0.1), (661.657, 0.003)] .\n", - "\n" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# these are relative gamma intensities\n", - "intensities = data.gamma_photon_intensity(551370000)\n", - "\n", - "# This converts the relative intensities to decays per 100 decays of the parent\n", - "photonbr, photonbr_error = data.decay_photon_branch_ratio(551370000,561370000)\n", - "final_intensities = []\n", - "print \n", - "for item in intensities:\n", - " # compute the intensities by multiplying the branch ratio and the relative intensity; ignore the errors \n", - " final_intensities.append(photonbr*item[0])\n", - "\n", - "print nucname.name(551370000), \"gamma decays to\", nucname.name(561370000), \"with intensities\", final_intensities, \"\\n\"\n", - " \n", - "# Alpha intensities a bit trickier because we need to get the reaction\n", - "from pyne import rxname\n", - "# This is intensity per 100 alpha decays with no errors \n", - "a_intensities = data.alpha_intensity(922290000)\n", - "\n", - "# Find the alpha branch intensity\n", - "a_br = data.branch_ratio(922290000,rxname.child(922290000,'a','decay'))\n", - "\n", - "# Calculate the intensities of each alpha per 100 decays of the parent\n", - "a_final_intensities = []\n", - "for item in a_intensities:\n", - " a_final_intensities.append(a_br*item)\n", - " \n", - "print nucname.name(922290000), \"decays to\", nucname.name(rxname.child(922290000,'a','decay')),\"with intensities\", a_final_intensities, \"\\n\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Cs137 gamma decays to Ba137 with intensities [0.00058, 85.1] \n", - "\n", - "U229 decays to Th225 with intensities [0.2, 0.6000000000000001, 0.2, 2.2, 4.0, 12.8] \n", - "\n" - ] - } - ], - "prompt_number": 33 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Another possible use is the search for candidate gamma rays" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# The default range is +- 1 keV, which returns a lot of stuff\n", - "possible_parents = data.gamma_parent(661.657)\n", - "print \"number of possible parents of 661.657 +- 1keV decay is\", len(possible_parents), \"\\n\"\n", - "\n", - "# Or, return gamma ray level pairs based on gamma ray energy (another way to do it)\n", - "from_to = data.gamma_from_to_byen(661.657)\n", - "\n", - "# Or, a list of gamma ray intensities from a given gamman ray energy (another way to do it)\n", - "intensity_list = data.gamma_photon_intensity_byen(661.657)\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "number of possible parents of 661.657 +- 1keV decay is 876 \n", - "\n" - ] - } - ], - "prompt_number": 56 - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "# we can downselect from this\n", - "import numpy as np\n", - "from pyne import nucname\n", - "hls = []\n", - "final_ints = []\n", - "parents = []\n", - "\n", - "for i, item in enumerate(possible_parents):\n", - " \n", - " # Temporary fix for bug\n", - " if from_to[i][0] < 0:\n", - " continue\n", - " \n", - " # gammas that don't have from-to pairs get lost here\n", - " phbr = data.decay_photon_branch_ratio(item,nucname.groundstate(from_to[i][0]))\n", - " \n", - " # Select non-zero branch ratios, intensities over 5% of all decays, and half lives over 10 days\n", - " if phbr[0] > 0.0 and intensity_list[i][0]*phbr[0] > 5.0:\n", - " if nucname.groundstate(from_to[i][0]) != item and data.half_life(item,False) > 60.*60.*24.*10.:\n", - " parents.append(item)\n", - " hls.append(data.half_life(item,False))\n", - " final_ints.append(intensity_list[i][0]*phbr[0])\n", - "\n", - "# now we have a managably short list\n", - "for i, item in enumerate(parents):\n", - " # Temporary fix for bug\n", - " if item < 0:\n", - " continue\n", - " print(\"possible candidate: {0}\".format(nucname.name(item)))\n", - " print(\"half life: {0} s/ {1} days/ {2} years\".format(hls[i],hls[i]/(60.*60.*24.),hls[i]/(60.*60.*24.*365.25)))\n", - " print(\"intensity: {0} %\".format(final_ints[i]))\n", - " print(\"################################################################\")\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "possible candidate: Ag110M\n", - "half life: 21585312.0 s/ 249.83 days/ 0.683997262149 years\n", - "intensity: 95.61123 %\n", - "################################################################\n", - "possible candidate: Cs137\n", - "half life: 949252608.0 s/ 10986.72 days/ 30.08 years\n", - "intensity: 85.1 %\n", - "################################################################\n", - "possible candidate: I126\n", - "half life: 1117152.0 s/ 12.93 days/ 0.0354004106776 years\n", - "intensity: 32.8848 %\n", - "################################################################\n", - "possible candidate: Sb126\n", - "half life: 1067040.0 s/ 12.35 days/ 0.0338124572211 years\n", - "intensity: 99.6 %\n", - "################################################################\n" - ] - } - ], - "prompt_number": 63 - }, - { - "cell_type": "code", - "collapsed": true, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - } - ], - "metadata": {} - } - ] -} diff --git a/_downloads/ace.ipynb b/_downloads/138795b097bf46ad4fbe46b0a295c90b/ace.ipynb similarity index 100% rename from _downloads/ace.ipynb rename to _downloads/138795b097bf46ad4fbe46b0a295c90b/ace.ipynb diff --git a/_downloads/05-cross-sections.ipynb b/_downloads/148927d5402aadf3141a4c7667f99df3/05-cross-sections.ipynb similarity index 100% rename from _downloads/05-cross-sections.ipynb rename to _downloads/148927d5402aadf3141a4c7667f99df3/05-cross-sections.ipynb diff --git a/_downloads/materials.ipynb b/_downloads/1768ba3826f74d67d0bd3db50ea5a2af/materials.ipynb similarity index 100% rename from _downloads/materials.ipynb rename to _downloads/1768ba3826f74d67d0bd3db50ea5a2af/materials.ipynb diff --git a/_downloads/00-intro.ipynb b/_downloads/274d39393c02741e3eff01d59ae558a9/00-intro.ipynb similarity index 100% rename from _downloads/00-intro.ipynb rename to _downloads/274d39393c02741e3eff01d59ae558a9/00-intro.ipynb diff --git a/_downloads/08-diffusion.ipynb b/_downloads/2f1a0df4c8426e072c843febabdcd559/08-diffusion.ipynb similarity index 96% rename from _downloads/08-diffusion.ipynb rename to _downloads/2f1a0df4c8426e072c843febabdcd559/08-diffusion.ipynb index 3b6744f3..14f4375e 100644 --- a/_downloads/08-diffusion.ipynb +++ b/_downloads/2f1a0df4c8426e072c843febabdcd559/08-diffusion.ipynb @@ -56,7 +56,7 @@ "collapsed": false, "input": [ "from itertools import product \n", - "from pyne.mesh import Mesh, IMeshTag\n", + "from pyne.mesh import Mesh, NativeMeshTag\n", "from pyne.xs.cache import XSCache\n", "from pyne.xs.data_source import CinderDataSource, SimpleDataSource, NullDataSource\n", "from pyne.xs.channels import sigma_a, sigma_s\n", @@ -230,12 +230,12 @@ " # Make Mesh\n", " rx = Mesh(structured_coords=[xpoints, ypoints, zpoints], structured=True)\n", " # Add Tags\n", - " rx.D = IMeshTag(size=1, dtype=float)\n", - " rx.k = IMeshTag(size=1, dtype=float)\n", - " rx.S = IMeshTag(size=1, dtype=float)\n", - " rx.Sigma_a = IMeshTag(size=1, dtype=float)\n", - " rx.flux = IMeshTag(size=1, dtype=float)\n", - " rx.phi_next = IMeshTag(size=1, dtype=float)\n", + " rx.D = NativeMeshTag(size=1, dtype=float)\n", + " rx.k = NativeMeshTag(size=1, dtype=float)\n", + " rx.S = NativeMeshTag(size=1, dtype=float)\n", + " rx.Sigma_a = NativeMeshTag(size=1, dtype=float)\n", + " rx.flux = NativeMeshTag(size=1, dtype=float)\n", + " rx.phi_next = NativeMeshTag(size=1, dtype=float)\n", " # Assign initial conditions\n", " Ds = []; Sigma_as = []; phis = []; ks = [];\n", " for i, mat, ent in rx:\n", diff --git a/_downloads/reaction_names.ipynb b/_downloads/3d98e0e7285cb3871344c0b17e06cc50/reaction_names.ipynb similarity index 100% rename from _downloads/reaction_names.ipynb rename to _downloads/3d98e0e7285cb3871344c0b17e06cc50/reaction_names.ipynb diff --git a/_downloads/04-reaction_names.ipynb b/_downloads/3e6eaf12bbd177529c4221570307db4c/04-reaction_names.ipynb similarity index 100% rename from _downloads/04-reaction_names.ipynb rename to _downloads/3e6eaf12bbd177529c4221570307db4c/04-reaction_names.ipynb diff --git a/_downloads/49f8eb4a8684e1ab5ff26f8b58ee3b7b/data_sources.ipynb b/_downloads/49f8eb4a8684e1ab5ff26f8b58ee3b7b/data_sources.ipynb new file mode 100644 index 00000000..675dadfd --- /dev/null +++ b/_downloads/49f8eb4a8684e1ab5ff26f8b58ee3b7b/data_sources.ipynb @@ -0,0 +1,263 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Sources\n", + "\n", + "Below are examples of how to grab cross sections from the EAF \n", + "and simple data sources and re-discretize them." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "from pyne.xs.data_source import *\n", + "from pyne.bins import stair_step\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib\n", + "matplotlib.rc('font', family='serif', size=14)\n", + "import numpy as np\n", + "dst_e_g = np.logspace(1, -7, 11)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## EAF Data Source" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3.40601e-04, 4.13527e-04, 4.52339e-04, 5.35260e-04, 7.79656e-04,\n", + " 9.12824e-04, 1.05027e-03, 1.20057e-03, 1.33202e-03, 1.46200e-03,\n", + " 1.60595e-03, 1.67206e-03, 1.76457e-03, 1.90211e-03, 2.03703e-03,\n", + " 2.12614e-03, 2.15500e-03, 2.15923e-03, 2.17015e-03, 2.19708e-03,\n", + " 2.24992e-03, 2.34009e-03, 2.47761e-03, 2.65621e-03, 2.80624e-03,\n", + " 2.93429e-03, 3.18937e-03, 3.54963e-03, 3.99022e-03, 4.53866e-03,\n", + " 5.21324e-03, 6.05776e-03, 7.06523e-03, 9.26177e-03, 1.27481e-02,\n", + " 1.75162e-02, 2.23344e-02, 2.54474e-02, 2.88533e-02, 3.21686e-02,\n", + " 3.59024e-02, 4.03127e-02, 4.31805e-02, 4.57085e-02, 4.57084e-02,\n", + " 4.57112e-02, 4.87787e-02, 5.18315e-02, 5.62859e-02, 6.08943e-02,\n", + " 6.55405e-02, 7.01358e-02, 7.41851e-02, 7.78783e-02, 8.13216e-02,\n", + " 8.57563e-02, 8.88694e-02, 9.13386e-02, 9.53971e-02, 9.82263e-02,\n", + " 1.00158e-01, 1.04962e-01, 1.08964e-01, 1.11877e-01, 1.14201e-01,\n", + " 1.16384e-01, 1.19622e-01, 1.23457e-01, 1.27270e-01, 1.31726e-01,\n", + " 1.35999e-01, 1.40273e-01, 1.44433e-01, 1.49346e-01, 1.55223e-01,\n", + " 1.60902e-01, 1.69406e-01, 1.83582e-01, 1.92772e-01, 1.99107e-01,\n", + " 2.07917e-01, 2.18980e-01, 2.24834e-01, 2.28807e-01, 2.28834e-01,\n", + " 2.28851e-01, 2.32272e-01, 2.47665e-01, 2.60721e-01, 2.69491e-01,\n", + " 2.77787e-01, 2.86525e-01, 2.95251e-01, 3.03786e-01, 3.12412e-01,\n", + " 3.20788e-01, 3.28606e-01, 3.35689e-01, 3.45583e-01, 3.55016e-01,\n", + " 3.64635e-01, 3.74740e-01, 3.83871e-01, 3.96374e-01, 4.20446e-01,\n", + " 4.36756e-01, 4.49877e-01, 4.66706e-01, 4.97313e-01, 5.05926e-01,\n", + " 5.32346e-01, 5.64841e-01, 5.50892e-01, 5.98351e-01, 6.17782e-01,\n", + " 6.72248e-01, 6.96237e-01, 6.99460e-01, 7.01140e-01, 7.19296e-01,\n", + " 7.33180e-01, 7.24884e-01, 7.69404e-01, 7.77250e-01, 8.32799e-01,\n", + " 9.33925e-01, 1.01020e+00, 1.07310e+00, 1.21651e+00, 1.27445e+00,\n", + " 1.30837e+00, 1.52976e+00, 1.62957e+00, 1.69051e+00, 1.74094e+00,\n", + " 1.83856e+00, 1.95794e+00, 1.97871e+00, 2.60955e+00, 2.70133e+00,\n", + " 2.82330e+00, 3.85308e+00, 4.03064e+00, 3.91338e+00, 4.59505e+00,\n", + " 4.20223e+00, 5.61362e+00, 7.39548e+00, 8.33983e+00, 1.02707e+01,\n", + " 1.11389e+01, 1.29232e+01, 8.42540e+00, 2.31086e+01, 1.80067e+01,\n", + " 3.46571e+01, 1.94390e+01, 4.63772e+01, 1.76541e+01, 6.54149e+01,\n", + " 3.43397e+01, 2.86602e+01, 2.89308e+01, 1.97519e+01, 1.58082e+01,\n", + " 3.79141e+00, 1.33372e+01, 3.45039e+00, 1.42551e+01, 1.37460e+01,\n", + " 7.05691e+00, 8.53781e+00, 1.27605e+01, 3.89028e+01, 9.05356e+01])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eds = EAFDataSource()\n", + "rx = eds.reaction('U235', 'gamma')\n", + "rx" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "eds.dst_group_struct = dst_e_g\n", + "rxc = eds.discretize('U235', 'gamma')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Cross Section [barns]')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(7,7))\n", + "plt.loglog(*stair_step(eds.src_group_struct, rx), figure=fig)\n", + "plt.loglog(*stair_step(eds.dst_group_struct, rxc), figure=fig)\n", + "plt.xlabel('E [MeV]')\n", + "plt.ylabel('Cross Section [barns]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple Data Source" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "sds = SimpleDataSource(dst_group_struct=dst_e_g)\n", + "print(sds.exists)\n", + "rx = sds.reaction('U233', 'absorption')\n", + "rxc = sds.discretize('U233', 'absorption')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Cross Section [barns]')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(7,7))\n", + "plt.loglog(sds.src_group_struct[:-1], rx, figure=fig)\n", + "plt.loglog(sds.dst_group_struct[:-1], rxc, figure=fig)\n", + "plt.xlabel('E [MeV]')\n", + "plt.ylabel('Cross Section [barns]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data sources are caches, which means that subsequent requests for \n", + "the same data are very fast! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 20 ms, sys: 0 ns, total: 20 ms\n", + "Wall time: 16.8 ms\n", + "\n", + "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", + "Wall time: 33.1 µs\n", + "\n", + "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", + "Wall time: 21.5 µs\n", + "\n" + ] + } + ], + "source": [ + "%time sds.reaction('U238', 'fiss')\n", + "print()\n", + "%time sds.reaction('U238', 'fission')\n", + "print()\n", + "%time sds.reaction('U238', 'fiss')\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/_downloads/56484056aa47c5021ec842d36b7abd9f/mstar_vs_flowrate.ipynb b/_downloads/56484056aa47c5021ec842d36b7abd9f/mstar_vs_flowrate.ipynb new file mode 100644 index 00000000..788050f3 --- /dev/null +++ b/_downloads/56484056aa47c5021ec842d36b7abd9f/mstar_vs_flowrate.ipynb @@ -0,0 +1,115 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Multicomponent Enrichment\n", + "\n", + "This demonstrates how the total normalized flowrate $L_t/F$ in \n", + "a matched abundance ratio enrichment cascade changes as a function \n", + "of the key mass $M^*$, an optimization parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tyler/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + "/home/tyler/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.material is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + "/home/tyler/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.enrichment is not yet QA compliant.\n", + " return f(*args, **kwds)\n" + ] + } + ], + "source": [ + "import time\n", + "import numpy as np\n", + "import matplotlib\n", + "matplotlib.rc('font', family='serif', size=16)\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "from pyne import enrichment as enr\n", + "\n", + "NPOINTS = 50\n", + "duc = enr.default_uranium_cascade()\n", + "mstars = np.linspace(235.1, 237.9, NPOINTS)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "calc took 8.41 ms.\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "flowrates = []\n", + "for mstar in mstars:\n", + " duc.Mstar = mstar\n", + " casc = enr.solve_symbolic(duc)\n", + " flowrates.append(casc.l_t_per_feed)\n", + "print(\"calc took {0:.3g} ms.\".format((time.time()-start) * 1e3))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAF7CAYAAAC9/t3DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X2cXGV9///XJzeQBJLdQIIBQrLIDwsoEEokIIVC9VsUlBat1W8DgqCBKghFbkQUqTUtKigW70AQEGOBUisUvog3oFbkLiANciMK4SZFJAIhYAKS5PP748yaZbMzO3tzZnZmX8/HYx4zc805Zz5zsjt573XOdZ3ITCRJktRaxjS7AEmSJA2cIU6SJKkFGeIkSZJakCFOkiSpBRniJEmSWpAhTpIkqQUZ4iRJklqQIU6SJKkFGeIkSZJa0LhmF1CGadOmZVdXV7PLkCRJ6tedd975u8ycPtD12jLEdXV1sXjx4maXIUmS1K+IeHQw63k4VZIkqQUZ4iRJklqQIU6SJKkFteU5cZIkqTW9/PLLLFu2jBdffLHZpQy7CRMmMHPmTMaPHz8s2zPESZKkEWPZsmVMnjyZrq4uIqLZ5QybzOTpp59m2bJlbLvttsOyzVJDXERMBG4DvpeZJ0XEBOBs4H+B7YGzMvPByrKHArsBa4GHMvP8SnsX8HHg10AX8OHMfKHMuiVJUnO8+OKLbRfgACKCzTffnOXLlw/bNsvuifsU8PMez08AHsvMz0TEzsBFwD4RMRM4CdgtMzMi7oiIGzPzV8BXgTMy8/aIOA44lSLUSZKkNtRuAa7bcH+u0gY2RMRhwM3A0h7NBwG3AGTmPcCuETEFOAC4MzOzstwtwFsiYjywP3BHpf3myjYkSZJGtVJCXETsBOyYmd/u9dIWwPM9nq+stFVrnwas7hHuutv7es8FEbE4IhYPZ1elJEnSSFRWT9whwIsR8RHgz4A9IuIE4Clgco/lplTaqrX/DpgY6/sfu9s3kJkXZObczJw7ffqAr1whSZL0R+effz4f/OAHay5z9NFHc/PNN3P++eez5ZZbMmfOHObMmcNhhx3WkBpLCXGZuTAzP5mZZwE/BW7PzHOB64C9ACrnxP1PZq4EbgB27xHW9gKuz8yXgZuA11fa965so3kWLYKuLhgzprhftKip5UiSpOG3ZMkSdt5555rL3Hbbbey5554sWbKET33qU9x9993cfffdXHbZZQ2psdTJfiPiHcC+wJ4R8X+BLwCzI+JjwIeBowAycxnFqNXPR8Q5wIWVQQ0AxwDHVNbZGfh0mTXXtGgRLFgAjz4KmcX9ggUGOUmSmqWkzpV77rmnZoi7//77ec1rXsPYsWO55557mDNnzrC870DE+tPN2sfcuXNz8eLFw7/hrq4iuPU2ezY88sjwv58kSaPM/fffz4477ljfwt2dK6tWrW+bNAkuuADmzx9SHZttthlLly6lo6Pjj23PPvssU6dOBeBzn/scnZ2dHHnkkWy++eZsvfXWjBkzhmnTpvGDH/yg6nb7+nwRcWdmzh1ojU72OxCPPTawdkmSNHgnnAB331399VtvhZdeemXbqlVw1FHwta/1vc6cOXDuuTXf9vHHH2fy5MmvCHAA//AP/8All1wCwA033MDFF1/M448/zowZM1iyZEl/n2bYee3UgZg1a2DtkiSpPL0DXH/tderrfLjvfve7PPDAA5x99tmsWrWKFStWsNVWW7FkyRJe+9rXDun9BsueuIFYuLDvbtuFC5tXkyRJ7aqfHrOapzn96EeDftu+zoebNm0ahx56KMceeyzXXXcd+++//x+XbVaIsyduIObPL46zb7558XyrrYbluLskSRqEhQuLzpSehqFz5Z577uGCCy6gq6uLrq4u9tprL5YsWcKuu+4KwPXXX8+b3/zmPy670047Den9BsueuIGaPx822QQOOQT+67/gT/+02RVJkjQ6dXeinH56cX76rFlFgBti58qiPka4XnPNNVx44YVMmzaNn/3sZ3z+85+vumyjGOIGo/tEx+eea24dkiSNdvPnN+SI2MEHH8zBBx8MwF133VX6+9XDw6mDYYiTJElNZogbDEOcJElqMkPcYHSHuBUrmluHJEkatQxxg2FPnCRJajJD3GCMH18MYTbESZI07NrxkqAw/J/LEDdYHR2GOEmShtmECRN4+umn2y7IZSZPP/00EyZMGLZtOsXIYBniJEkadjNnzmTZsmUsX7682aUMuwkTJjBz5sxh254hbrAMcZIkDbvx48ez7bbbNruMluDh1MEyxEmSpCYyxA1WR4dTjEiSpKYxxA1WZ6c9cZIkqWkMcYPl4VRJktREhrjB6uiAF1+EP/yh2ZVIkqRRyBA3WF61QZIkNZEhbrAM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77Brt3Xrigkoq/08R8B22xUzjUMRAF96qfY2u9/fw7OShltf320bbQRvfGPxR+dddxWHS6updojU76yWZE+c2lO9o6PGjKneazd9OvzjP8KcOfCLX8C3v/3KAAfFF+kHPlAcjr3ttuIv275GejmXnaT+VOthy4Tf/KY4h+244zbsYfvDH+D664uetve+Fy65BLbcsu/3qPZ95zQfo4o9cWof9fba9XeeXc/l+vpLd+bM4q/ciA3f37+ApfZU7+93X99DY8fCq19dzNe2ouoVIwu9e9jq/V5TS7MnTqq3167aX7CzZhXnoFx9NXzmM9VHcy1bVgzZ32UXOPjg4pyVQw+Fo46qr9fO8/GkkaOe38e+euXf/34466zi++Jzn4Njjy3muDziiA172NauLcLf3/0dfPGLxUjSmTP7rqf395NztamWzGy72+67755SVd/8ZuakSZnF13FxmzSpaO9p9uxXLtN9mzo18/jjMw8+OHOXXTInT+57OcjceOPMQw/N/MhHMr/4xcwTTsicMKH/9+6uc/bszIjivq9lJPWtnt+fat8Fl12W+eSTmXfckfntbxe/89V+x7tvHR2Zf/qn1V+PqO+9/T0flYDFOYi80/TAVcbNEKd+DeULvvey69YV26n25d3VlTl+fO3/ACZMyDziiCLsnXtu5gc/WATAer/g6w18BkO1soH8nFf73X366cx778384Q8zp03rP5zVukVk3n57sc1u1f74mz178J9Hbc8QZ4hTGer9ku3vi3vt2uIv+1phb+bM/sPe+PGZf/7nmX/zN5nHHJP5sY8VPX0bbfTK5SZOzPzGNzb8LAP5y99gqKEYyM/FUP6o+trXMn/968xbb8289trMSy6pr+esv9t552V+5zuZd95Z/G4OJJjZw6YBMsQZ4tRMQz1E2/2fwbp1xV/1tcLePvtk7rhj5vTpmWPG1P6PqLMzc9ttM3fffcPDuN23zTfPvOaazB//OPPnP898+OHM88+v7/MM5D+s4f5PfaDbbCdl7J/h3OZAfi4uu6z4o6PnshtvnHn00Zlf+ELmmWcWpy9sssnQQln37fOfz/y3f8u86abMrbaq/fs4mM8z0P0uZRriet4McWqK4fzPrd5DMmvX1g58xx6bOX9+5lveMjz/AW68ceab35z5zndmvve91c8HnD498/vfz7z55iIYnn32hv9R1wp7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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(10,6))\n", + "plt.plot(mstars, flowrates, 'r-o', label='$L_t/F$')\n", + "plt.xlabel('$M^*$ [amu]')\n", + "plt.ylabel('Total per Feed Flow Rate [unitless]')\n", + "lgd = plt.legend(loc=0)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/_downloads/chainsolve_transmutation.ipynb b/_downloads/5b581cfae0d91ab3fb0f020feaf7f09c/chainsolve_transmutation.ipynb similarity index 100% rename from _downloads/chainsolve_transmutation.ipynb rename to _downloads/5b581cfae0d91ab3fb0f020feaf7f09c/chainsolve_transmutation.ipynb diff --git a/_downloads/07-mesh-basics.ipynb b/_downloads/8375ec2ef6f7040ca84e5362ab391b54/07-mesh-basics.ipynb similarity index 99% rename from _downloads/07-mesh-basics.ipynb rename to _downloads/8375ec2ef6f7040ca84e5362ab391b54/07-mesh-basics.ipynb index 04b7a5c5..9dd61ce6 100644 --- a/_downloads/07-mesh-basics.ipynb +++ b/_downloads/8375ec2ef6f7040ca84e5362ab391b54/07-mesh-basics.ipynb @@ -14,8 +14,8 @@ "source": [ "The PyNE ```mesh``` module provides generic mesh creation and manipulation capabilities. Both Cartesian and tetrahedral mesh are supported. PyNE meshes can be tagged with scalar and vector quantities and also PyNE `Material` objects. Tagged data can all be easily accessed with a common syntax.\n", "\n", - "Under the hood, the PyNE `Mesh` class is a wrapper around a [MOAB](https://trac.mcs.anl.gov/projects/ITAPS/wiki/MOAB) mesh.\n", - "A `Mesh` object stores a MOAB iMesh instance, and additionally a PyNE `MaterialLibrary` object (to map PyNE `Material`s to mesh volume elements).\n", + "Under the hood, the PyNE `Mesh` class is a wrapper around a [MOAB](https://press3.mcs.anl.gov/sigma/moab-library) mesh.\n", + "A `Mesh` object stores a mesh instance, and additionally a PyNE `MaterialLibrary` object (to map PyNE `Material`s to mesh volume elements).\n", "\n", "The notebook will provide some basic examples of PyNE mesh usage. First let's import the necessary components of PyNE and a few other things that will be explained in this notebook:\n" ] @@ -25,7 +25,7 @@ "collapsed": false, "input": [ "# Import some classes from pyne.mesh\n", - "from pyne.mesh import Mesh, IMeshTag, MetadataTag, ComputedTag\n", + "from pyne.mesh import Mesh, NativeMeshTag, MetadataTag, ComputedTag\n", "from pyne.material import Material, from_atom_frac\n", "from pyne.xs.channels import sigma_t\n", "import numpy as np\n", @@ -122,14 +122,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Tags -- sometimes known as fields -- are a way of storing data on a mesh. Both scalar and vector quantities can be tagged on each volume element of the mesh using PyNE IMeshTags. Here we create a scalar, floating point tag to describe the neutron flux on a mesh:" + "Tags -- sometimes known as fields -- are a way of storing data on a mesh. Both scalar and vector quantities can be tagged on each volume element of the mesh using PyNE NativeMeshTags. Here we create a scalar, floating point tag to describe the neutron flux on a mesh:" ] }, { "cell_type": "code", "collapsed": false, "input": [ - "m.neutron_flux = IMeshTag(size=1, dtype=float)" + "m.neutron_flux = NativeMeshTag(size=1, dtype=float)" ], "language": "python", "metadata": {}, @@ -373,7 +373,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The materials that we've added to the mesh can be accesssed via the same syntax used for IMeshTags. The material on the the mesh volume element with index `i=12` is retrieved:" + "The materials that we've added to the mesh can be accesssed via the same syntax used for NativeMeshTags. The material on the the mesh volume element with index `i=12` is retrieved:" ] }, { @@ -645,4 +645,4 @@ "metadata": {} } ] -} \ No newline at end of file +} diff --git a/_downloads/endf_reader.ipynb b/_downloads/8545be243afb567563c4ece0844091a2/endf_reader.ipynb similarity index 100% rename from _downloads/endf_reader.ipynb rename to _downloads/8545be243afb567563c4ece0844091a2/endf_reader.ipynb diff --git a/_downloads/mesh_tags.ipynb b/_downloads/869eab3d7fc2b140faec855833f8767d/mesh_tags.ipynb similarity index 99% rename from _downloads/mesh_tags.ipynb rename to _downloads/869eab3d7fc2b140faec855833f8767d/mesh_tags.ipynb index b8df5c51..c6dcda3b 100644 --- a/_downloads/mesh_tags.ipynb +++ b/_downloads/869eab3d7fc2b140faec855833f8767d/mesh_tags.ipynb @@ -21,7 +21,7 @@ "input": [ "from pyne.xs.channels import sigma_t\n", "from pyne.material import Material, from_atom_frac\n", - "from pyne.mesh import Mesh, IMeshTag, MetadataTag, ComputedTag\n", + "from pyne.mesh import Mesh, NativeMeshTag, MetadataTag, ComputedTag\n", "from yt.config import ytcfg; ytcfg[\"yt\",\"suppressStreamLogging\"] = \"True\"\n", "from yt.mods import *" ], diff --git a/_downloads/10-spatial-solver.ipynb b/_downloads/a12db48f96dca6a484f91675edcc4695/10-spatial-solver.ipynb similarity index 100% rename from _downloads/10-spatial-solver.ipynb rename to _downloads/a12db48f96dca6a484f91675edcc4695/10-spatial-solver.ipynb diff --git a/_downloads/fng_model.ipynb b/_downloads/abd49ba14607325035658d4762a6f9ef/fng_model.ipynb similarity index 100% rename from _downloads/fng_model.ipynb rename to _downloads/abd49ba14607325035658d4762a6f9ef/fng_model.ipynb diff --git a/_downloads/ac866931d4fcfae1ab36e4dfa69f7b54/material_library.ipynb b/_downloads/ac866931d4fcfae1ab36e4dfa69f7b54/material_library.ipynb new file mode 100644 index 00000000..6701212c --- /dev/null +++ b/_downloads/ac866931d4fcfae1ab36e4dfa69f7b54/material_library.ipynb @@ -0,0 +1,180 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Material Library\n", + "================\n", + "\n", + "PyNE comes with a pre-built library of materials Most of this data comes from [a materials compendium by PNNL](http://www.pnnl.gov/main/publications/external/technical_reports/PNNL-15870Rev1.pdf), which is gives canonical values for normal materials. This notebook demonstrates how to load and use this data via the `MaterialLibrary` class. First the imports!" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# the path to the nuc_data.h5 database\n", + "from pyne import nuc_data\n", + "\n", + "# the material library class itself\n", + "from pyne.material import MaterialLibrary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `MaterialLibrary` class is a dict-like class which maps string names to `Material` objects. We can instantiate this class directly from the database as follows." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "mats = MaterialLibrary(nuc_data, datapath='/material_library/materials', nucpath='/material_library/nucid')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also take a gander at the keys in this dictionary." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Mercury',\n", + " 'Oil, Crude (Heavy, Qayarah, Iraq)',\n", + " 'Sm',\n", + " 'Lead',\n", + " 'Concrete, M-1',\n", + " 'Sc',\n", + " 'Iron, Armco Ingot',\n", + " 'Freon-13',\n", + " 'Concrete, Luminite-colemanite-baryte',\n", + " 'Air (dry, near sea level)']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(mats.keys())[:10]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the values too!" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pyne.material.Material({60120000: 0.006738245111767505, 60130000: 7.897265541693453e-05, 140280000: 0.006030785183179145, 140290000: 0.00031731459880155025, 140300000: 0.0002166284382709865, 150310000: 0.00026258912881006724, 160320000: 0.0001913170536528978, 160330000: 1.5577740060598633e-06, 160340000: 9.094152479801166e-06, 160360000: 2.2657407446809237e-08, 240500000: 0.0071659230051185135, 240520000: 0.1437058558626111, 240530000: 0.016608861068700017, 240540000: 0.004212251977845144, 250550000: 0.006564728220251681, 260540000: 0.0453319840390509, 260560000: 0.7379391848713018, 260570000: 0.017347052627181583, 260580000: 0.002349035618019461, 420920000: 0.0006858785659733434, 420940000: 0.00044131037523069465, 420950000: 0.0007721150950900054, 420960000: 0.0008211250795034776, 420970000: 0.0004778107493212208, 420980000: 0.0012264572134956845, 421000000: 0.0005038988775129898}, 1.0, 7.8, -1.0, {\"name\":\"Steel, Stainless 440\"})" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mats['Steel, Stainless 440']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can do everything you normaly would with these materials, like print them out in MCNP form!" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "C name: Steel, Stainless 440\n", + "C density = 7.8\n", + "m?\n", + " 6012 -6.7382e-03\n", + " 6013 -7.8973e-05\n", + " 14028 -6.0308e-03\n", + " 14029 -3.1731e-04\n", + " 14030 -2.1663e-04\n", + " 15031 -2.6259e-04\n", + " 16032 -1.9132e-04\n", + " 16033 -1.5578e-06\n", + " 16034 -9.0942e-06\n", + " 16036 -2.2657e-08\n", + " 24050 -7.1659e-03\n", + " 24052 -1.4371e-01\n", + " 24053 -1.6609e-02\n", + " 24054 -4.2123e-03\n", + " 25055 -6.5647e-03\n", + " 26054 -4.5332e-02\n", + " 26056 -7.3794e-01\n", + " 26057 -1.7347e-02\n", + " 26058 -2.3490e-03\n", + " 42092 -6.8588e-04\n", + " 42094 -4.4131e-04\n", + " 42095 -7.7212e-04\n", + " 42096 -8.2113e-04\n", + " 42097 -4.7781e-04\n", + " 42098 -1.2265e-03\n", + " 42100 -5.0390e-04\n", + "\n" + ] + } + ], + "source": [ + "print(mats['Steel, Stainless 440'].mcnp())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/_downloads/01-nuclide-naming.ipynb b/_downloads/ae3dfe810f537c06b003ae1c4889a828/01-nuclide-naming.ipynb similarity index 100% rename from _downloads/01-nuclide-naming.ipynb rename to _downloads/ae3dfe810f537c06b003ae1c4889a828/01-nuclide-naming.ipynb diff --git a/_downloads/b3a02486e4631498dbf352f08e2032c7/03-nuclear-data.ipynb b/_downloads/b3a02486e4631498dbf352f08e2032c7/03-nuclear-data.ipynb new file mode 100644 index 00000000..87b2cce8 --- /dev/null +++ b/_downloads/b3a02486e4631498dbf352f08e2032c7/03-nuclear-data.ipynb @@ -0,0 +1,578 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Nuclear Data\n", + "\n", + "PyNE provides a top-level interface for a variety of basic nuclear data needs. This aims to provide quick access to very high fidelity data. Values are taken from the `nuc_data.h5` library. The basic suite of data comes from public sources. However if you have access to proprietary or export-controlled data, such as CINDER cross sections, then PyNE will attempt to provide an interface to this as well.\n", + "\n", + "All functionality may be found in the data module:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tyler/anaconda3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n" + ] + } + ], + "source": [ + "from pyne import data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The usual suspects follow." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Atomic Mass [amu]\n", + "Finds the atomic mass of a nuclide" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "235.043930131" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.atomic_mass('U235')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Natural Abundance Ratios\n", + "Finds the natural abundance of a nuclide" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.007204" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.natural_abund('U235')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.natural_abund('Pu-239')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Half Lives (s) & Decay Constants (1/s)\n", + "Finds the amount of time for half of the radionuclide to decay (half life). Decay constant is another measure of the rate of radioactive decay." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.409993568e+17" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.half_life('U-238')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.915959875924379e-18" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.decay_const('U-238')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Decay Children" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "set([360860000, 380860000])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.decay_children('Rb86')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rb86 decayse to two isotopes, \n", + "\n", + "The first daughter is Kr86 \n", + "\n", + "The second daughter is Sr86 \n", + "\n" + ] + } + ], + "source": [ + "from pyne import nucname\n", + "print(\"Rb86 decayse to two isotopes,\", \"\\n\")\n", + "print(\"The first daughter is\", nucname.name(360860000), \"\\n\")\n", + "print(\"The second daughter is\", nucname.name(380860000), \"\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "It decays to Kr86 with a branch ratio of 5.2e-05\n" + ] + } + ], + "source": [ + "print(\"It decays to \",nucname.name(360860000), \" with a branch ratio of \", data.branch_ratio('Rb86', 360860000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Neutron Scattering Lengths [cm]\n", + "Finds the bound scattering length; the generic value is computed from the coherent and incoherent scattering data:\n", + "\n", + "$$b = \\sqrt{\\left| b_{\\mbox{coh}} \\right|^2 + \\left| b_{\\mbox{inc}} \\right|^2}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.554930849083787e-12" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.b('H1')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-3.7406e-13+0j)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.b_coherent('H1')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2.5274000000000003e-12+0j)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.b_incoherent('H1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Half-life Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Half-life [s]')" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nwD+MQ/PmzXM/9NBDsU6G7SUnJyM3NxfJycmxTopHTU0NVq9ejezsbKSkpBh+p7a2Ftu2bcOhQ4cw\nbdo0OBwO5ObmAgh+m9QyMzIyPL+dO3cuysrKkJaWhr59+2Lbtm0oLy/3Wl+4GKXbKE1mMjIy4HA4\n8M0332DatGk4ffo0Zs2ahQ4dOsDpdHp9V+3nTz75BDNmzIDD4UC/fv3QqVMn9OvXD8nJyZ7luVwu\npKeno2/fvkhNTfVJ76JFi/CLX/wCGRkZKCgo8PrsxIkTmDt3LgYMGACn04m6ujr85je/QVZWFoYP\nH+61vqysLK//A/DZ56tXr0ZpaSmysrJw8OBBlJaWwuFw4Pbbb8e6des8n506dQrr169Hy5YtsX79\nesvH7O9//zu2bNmC9u3bY9++fWjTpg1WrVrl9Xt1XN555x0888wzXvtX7bOzZ8/6fKY/xtrje/jw\nYWzZsgVdu3bFiRMn0LFjR6xYscJrvfv27cNrr70Gl8uF06dPe50X+nNFu986duzotV7tZy6XCw6H\nA5mZmXjhhRdw9uxZzJ49Gw6HA/3790dWVhYuXbqEhQsX4vDhw1i8eDHS0tJw6dIllJeX49y5c6io\nqMB1112H1q1bY/DgwZ51tG/fHhcuXMDgwYM9541idKz90e43tX/79euHjh07Gv7W6FpS26zSq/7V\n7l/1ndTUVLz++uvIy8vzpFvt3x49esDhcODuu+9Gz5490a9fP1y8eBFVVVUYMWIEMjIyvNISyD3D\n6HpPSUnBuXPn0KdPH+zdu9frs6qqKlRUVKBv374YOHAgOnfujKqqKq/vqH3hcDiQlZWFwsJCHDt2\nDFu2bMHAgQPhdDqxY8cOVFRUoHv37ujZsye6devm994LAO+88w5ee+01nD9/Hr///e8990ctdd33\n6dMHXbp0gcvlQosWLVBdXY1evXqhsrIS1113He69916kpKRgy5YtmDVrFs6ePYsZM2bg4sWL2Lp1\nK5xOJ9577z3MnTsXrVu3xgcffIAePXqgU6dOcLlcSEtLQ7du3fDVV19h9erVuOaaa9CnTx8kJyfj\n7NmzaN++PWpra72eKdr9nJeXh6ysLK/7Urdu3UyPUyj83QPefvttPP3002jfvj06deoEANi+fTte\ne+019OvXD3feeSeSk5M9978WLVrggw8+QMuWLbF7927DZ4TRdt5xxx3o06cP0tLSfK4pl8vV4LW4\n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\n9uzxLMeoBkV/HkydOtWTNrP0qt85nU4JQF577bU+x06/TdrzUaX36aefbnDUnOLiYtmiRQs5adIk\n01JTtcyCggLZpEkTOXz4cJ/tVP0lVI2Yqn3Yu3evp7R38+bNPrVJat+p93784x/LK664Qv70pz/1\nKd3VHsM5c+bItm3bygceeMDvELdqdDQ1QpG2v5T++tEeV7VNqnawqqrKZzSul156SY4ZM0a+8cYb\nnvWqfmGTJk2STqdTPvroo57aMLVMdawmTZrks02q7f6OHTv89h1Qx1F7batatgcffNDnGlu0aJFs\n166dHDp0qLziiivk0KFDPd/R1z5pS/ZnzpwpW7duLSdPnuy175577jnZsmVLOWvWLJ99qL1G9ftJ\n2wdFUfeXoqIin3uXmg/otttu8yzTXym69t6i9sXUqVN9+qyp7/1/9r48rKkzbf+mUQQEA4FAZAmB\nQEjY932JLAIRlSriVlvrOFo7UzvT9vvZOjoT1HZsnVq1o611qVg3al3qhguiKIIoCIrFBVQsm4qK\nIJuAye+P6fv2JBxicOm0/b7nurhEkrO95z3veZb7vp+333671/F0Zc+1K5ZMtTNiq1atUtvY2Kjf\nfvtt+pn2PWNbi8g8fvPNN/uszrOd22uvvaZ+6aWX1C+//HIvvoe29beSoUviWZeinz77JmuJUql8\nqmqFPpWUF+Gr6IM4eBFVnf+W4TmpeG3WMxoqVyqVt/X57rMaWwVFqVR2ZGRk/AXAeS0OyhQALz2L\nwtj/cVB0Vyu0P2PLBOjDg9Cn+vC01t99a2dTdCl9PY/MB8n+WFhYYMWKFRQ/zoazJx2fXVxcEBgY\nCGNj4173gPl/8jtR8GGqH2ljYpn3paCgAPPmzcPgwYNRVVWFW7du4ejRo/Dx8UFrayv4fD7NhN26\ndQuLFy+GRCKhqknkmi5duoRVq1bRygQzw5mfn4/s7GwYGhpi5cqVEAqFtHJiYGCAnJwc+i+z4kPO\nMyUlBWKxGG+99RY8PDxYMcdXr16lFaS4uDh4eXkhOjpag6tBKj5GRkYQCAQ4c+YMhEIhHV/CERKJ\nRDh//ryGqo+2cg/pqG1vb4+KigqcOHECoaGhMDQ0RG1tLYqLi9HW1ob9+/fD0dERvr6+uHr1KqZP\nnw6BQIDNmzcjKysLdnZ2MDc3x+zZsxEWFoaJEydCJBL14iSR7KutrS26urowYcIEuLi4QNRHR2nC\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "%matplotlib inline\n", + "import matplotlib\n", + "matplotlib.rc('font', family='serif', size=14)\n", + "import matplotlib.pyplot as plt\n", + "from pyne import nucname, nuc_data\n", + "\n", + "import tables as tb\n", + "f = tb.open_file(nuc_data)\n", + "# get a map between nucleon numbers and half-lives\n", + "\n", + "#anums = map(nucname.anum, f.root.decay.level_list[:]['nuc_id'])\n", + "#anums = map(nucname.anum, data.half_life_map.keys())\n", + "NuclearName= list(map(lambda x:int(x),f.root.decay.level_list[:]['nuc_id']))\n", + "anums = map(nucname.anum, NuclearName)\n", + "\n", + "fig = plt.figure(figsize=(13,7))\n", + "plt.semilogy(list(anums), f.root.decay.level_list[:]['half_life'], 'ko', ms=1, alpha=0.3)\n", + "plt.xlabel('A')\n", + "plt.ylabel('Half-life [s]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#ENSDF decay data\n", + "In addition to the basic ENSDF data interface shown above, there is an extended interface that provides access to a large portion of the decay data in the ENSDF dataset. For example lets look at Cs-137:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The decay pairs are [(561370001, 561370000), (561370002, 561370000)] ,\n", + "\n", + "and they have these energies (paired with errors): [(283.5, 0.1), (661.657, 0.003)] .\n", + "\n" + ] + } + ], + "source": [ + "# we can look up most decay data by parent or by decay energy\n", + "# returns a list of gamma ray level pairs from ENSDF decay data from a given parent's state id.\n", + "decay_pairs = data.gamma_from_to_byparent(551370000)\n", + "print(\"The decay pairs are \", decay_pairs, \",\\n\")\n", + "\n", + "# this resturns a list of gamma ray energies given a parent\n", + "energies = data.gamma_energy(551370000)\n", + "\n", + "print(\"and they have these energies (paired with errors):\", (energies), \".\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cs137 gamma decays to Ba137 with intensities [0.00058, 85.1] \n", + "\n", + "U229 decays to Th226 with intensities [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] \n", + "\n" + ] + } + ], + "source": [ + "# these are relative gamma intensities\n", + "intensities = data.gamma_photon_intensity(551370000)\n", + "\n", + "# This converts the relative intensities to decays per 100 decays of the parent\n", + "photonbr, photonbr_error = data.decay_photon_branch_ratio(551370000,561370000)\n", + "final_intensities = []\n", + "#print \n", + "for item in intensities:\n", + " # compute the intensities by multiplying the branch ratio and the relative intensity; ignore the errors \n", + " final_intensities.append(photonbr*item[0])\n", + "\n", + "print(nucname.name(551370000), \"gamma decays to\", nucname.name(561370000), \"with intensities\", final_intensities, \"\\n\")\n", + " \n", + "# Alpha intensities a bit trickier because we need to get the reaction\n", + "from pyne import rxname\n", + "# This is intensity per 100 alpha decays with no errors \n", + "a_intensities = data.alpha_intensity(922290000)\n", + "\n", + "# Find the alpha branch intensity\n", + "a_br = data.branch_ratio(922290000,rxname.child(922290000,'a')) #alpha decay\n", + "\n", + "\n", + "# Calculate the intensities of each alpha per 100 decays of the parent\n", + "a_final_intensities = []\n", + "for item in a_intensities:\n", + " a_final_intensities.append(a_br*item)\n", + " \n", + "print(nucname.name(922290000), \"decays to\", nucname.name(rxname.child(922290000,'a')),\"with intensities\", a_final_intensities, \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Another possible use is the search for candidate gamma rays" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of possible parents of 661.657 +- 1keV decay is 894 \n", + "\n" + ] + } + ], + "source": [ + "# The default range is +- 1 keV, which returns a lot of stuff\n", + "possible_parents = data.gamma_parent(661.657)\n", + "print(\"number of possible parents of 661.657 +- 1keV decay is\", len(possible_parents), \"\\n\")\n", + "\n", + "# Or, return gamma ray level pairs based on gamma ray energy (another way to do it)\n", + "from_to = data.gamma_from_to_byen(661.657)\n", + "\n", + "# Or, a list of gamma ray intensities from a given gamman ray energy (another way to do it)\n", + "intensity_list = data.gamma_photon_intensity_byen(661.657)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "possible candidate: Ag110M\n", + "half life: 21585312.0 s/ 249.83 days/ 0.6839972621492129 years\n", + "intensity: 95.61123 %\n", + "################################################################\n", + "possible candidate: Cs137\n", + "half life: 949252608.0 s/ 10986.72 days/ 30.08 years\n", + "intensity: 85.1 %\n", + "################################################################\n", + "possible candidate: I126\n", + "half life: 1117152.0 s/ 12.93 days/ 0.03540041067761807 years\n", + "intensity: 32.884800000000006 %\n", + "################################################################\n", + "possible candidate: Sb126\n", + "half life: 1067040.0 s/ 12.35 days/ 0.03381245722108145 years\n", + "intensity: 99.6 %\n", + "################################################################\n" + ] + } + ], + "source": [ + "# we can downselect from this\n", + "import numpy as np\n", + "from pyne import nucname\n", + "hls = []\n", + "final_ints = []\n", + "parents = []\n", + "\n", + "for i, item in enumerate(possible_parents):\n", + " \n", + " # Temporary fix for bug\n", + " if from_to[i][0] < 0:\n", + " continue\n", + " \n", + " # gammas that don't have from-to pairs get lost here\n", + " phbr = data.decay_photon_branch_ratio(item,nucname.groundstate(from_to[i][0]))\n", + " \n", + " # Select non-zero branch ratios, intensities over 5% of all decays, and half lives over 10 days\n", + " if phbr[0] > 0.0 and intensity_list[i][0]*phbr[0] > 5.0:\n", + " if nucname.groundstate(from_to[i][0]) != item and data.half_life(item,False) > 60.*60.*24.*10.:\n", + " parents.append(item)\n", + " hls.append(data.half_life(item,False))\n", + " final_ints.append(intensity_list[i][0]*phbr[0])\n", + "\n", + "# now we have a managably short list\n", + "for i, item in enumerate(parents):\n", + " # Temporary fix for bug\n", + " if item < 0:\n", + " continue\n", + " print(\"possible candidate: {0}\".format(nucname.name(item)))\n", + " print(\"half life: {0} s/ {1} days/ {2} years\".format(hls[i],hls[i]/(60.*60.*24.),hls[i]/(60.*60.*24.*365.25)))\n", + " print(\"intensity: {0} %\".format(final_ints[i]))\n", + " print(\"################################################################\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/_downloads/06-transmutation.ipynb b/_downloads/b4ab995cad238dd6b30fac204f651430/06-transmutation.ipynb similarity index 100% rename from _downloads/06-transmutation.ipynb rename to _downloads/b4ab995cad238dd6b30fac204f651430/06-transmutation.ipynb diff --git a/_downloads/open_origen_data.ipynb b/_downloads/c2d3965b466078824bb58829b3d4c4eb/open_origen_data.ipynb similarity index 100% rename from _downloads/open_origen_data.ipynb rename to _downloads/c2d3965b466078824bb58829b3d4c4eb/open_origen_data.ipynb diff --git a/_downloads/pynepubs.bib b/_downloads/c423385a9bb4f0083040ed6f022781b7/pynepubs.bib similarity index 100% rename from _downloads/pynepubs.bib rename to _downloads/c423385a9bb4f0083040ed6f022781b7/pynepubs.bib diff --git a/_downloads/02-materials.ipynb b/_downloads/cd035cade90f52068cebef0584b012d1/02-materials.ipynb similarity index 100% rename from _downloads/02-materials.ipynb rename to _downloads/cd035cade90f52068cebef0584b012d1/02-materials.ipynb diff --git a/_downloads/origen22_h1_xs.ipynb b/_downloads/cd1cb8f3444e997c5473975be1fe46a6/origen22_h1_xs.ipynb similarity index 100% rename from _downloads/origen22_h1_xs.ipynb rename to _downloads/cd1cb8f3444e997c5473975be1fe46a6/origen22_h1_xs.ipynb diff --git a/_downloads/data_sources.ipynb b/_downloads/data_sources.ipynb deleted file mode 100644 index 96716550..00000000 --- a/_downloads/data_sources.ipynb +++ /dev/null @@ -1,310 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:e8b389a3631dfa6362e5d06a80ac72ab2106bbc252fcf87f7f26790f2bc39cd5" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Data Sources\n", - "\n", - "Below are examples of how to grab cross sections from the EAF \n", - "and simple data sources and re-discretize them." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from pyne.xs.data_source import *\n", - "from pyne.bins import stair_step\n", - "import matplotlib.pyplot as plt\n", - "import matplotlib\n", - "matplotlib.rc('font', family='serif', size=14)\n", - "import numpy as np\n", - "dst_e_g = np.logspace(1, -7, 11)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/xs/data_source.py:20: QAWarning: pyne.nucname is not yet QA compliant.\n", - " from .. import nucname\n", - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/xs/data_source.py:21: QAWarning: pyne.rxname is not yet QA compliant.\n", - " from .. import rxname\n", - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/rxdata.py:5: QAWarning: pyne.rxdata is not yet QA compliant.\n", - " warn(__name__ + \" is not yet QA compliant.\", QAWarning)\n" - ] - }, - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/xs/data_source.py:22: QAWarning: pyne.endf is not yet QA compliant.\n", - " from ..endf import Library\n", - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/xs/data_source.py:23: QAWarning: pyne.xs.models is not yet QA compliant.\n", - " from .models import partial_energy_matrix, group_collapse\n", - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/xs/data_source.py:25: QAWarning: pyne.xs.data_source is not yet QA compliant.\n", - " warn(__name__ + \" is not yet QA compliant.\", QAWarning)\n", - "/home/scopatz/.local/lib/python2.7/site-packages/pyne/bins.py:8: QAWarning: pyne.bins is not yet QA compliant.\n", - " warn(__name__ + \" is not yet QA compliant.\", QAWarning)\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## EAF Data Source" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "eds = EAFDataSource()\n", - "rx = eds.reaction('U235', 'gamma')\n", - "rx" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 2, - "text": [ - "array([ 3.40601000e-04, 4.13527000e-04, 4.52339000e-04,\n", - " 5.35260000e-04, 7.79656000e-04, 9.12824000e-04,\n", - " 1.05027000e-03, 1.20057000e-03, 1.33202000e-03,\n", - " 1.46200000e-03, 1.60595000e-03, 1.67206000e-03,\n", - " 1.76457000e-03, 1.90211000e-03, 2.03703000e-03,\n", - " 2.12614000e-03, 2.15500000e-03, 2.15923000e-03,\n", - " 2.17015000e-03, 2.19708000e-03, 2.24992000e-03,\n", - " 2.34009000e-03, 2.47761000e-03, 2.65621000e-03,\n", - " 2.80624000e-03, 2.93429000e-03, 3.18937000e-03,\n", - " 3.54963000e-03, 3.99022000e-03, 4.53866000e-03,\n", - " 5.21324000e-03, 6.05776000e-03, 7.06523000e-03,\n", - " 9.26177000e-03, 1.27481000e-02, 1.75162000e-02,\n", - " 2.23344000e-02, 2.54474000e-02, 2.88533000e-02,\n", - " 3.21686000e-02, 3.59024000e-02, 4.03127000e-02,\n", - " 4.31805000e-02, 4.57085000e-02, 4.57084000e-02,\n", - " 4.57112000e-02, 4.87787000e-02, 5.18315000e-02,\n", - " 5.62859000e-02, 6.08943000e-02, 6.55405000e-02,\n", - " 7.01358000e-02, 7.41851000e-02, 7.78783000e-02,\n", - " 8.13216000e-02, 8.57563000e-02, 8.88694000e-02,\n", - " 9.13386000e-02, 9.53971000e-02, 9.82263000e-02,\n", - " 1.00158000e-01, 1.04962000e-01, 1.08964000e-01,\n", - " 1.11877000e-01, 1.14201000e-01, 1.16384000e-01,\n", - " 1.19622000e-01, 1.23457000e-01, 1.27270000e-01,\n", - " 1.31726000e-01, 1.35999000e-01, 1.40273000e-01,\n", - " 1.44433000e-01, 1.49346000e-01, 1.55223000e-01,\n", - " 1.60902000e-01, 1.69406000e-01, 1.83582000e-01,\n", - " 1.92772000e-01, 1.99107000e-01, 2.07917000e-01,\n", - " 2.18980000e-01, 2.24834000e-01, 2.28807000e-01,\n", - " 2.28834000e-01, 2.28851000e-01, 2.32272000e-01,\n", - " 2.47665000e-01, 2.60721000e-01, 2.69491000e-01,\n", - " 2.77787000e-01, 2.86525000e-01, 2.95251000e-01,\n", - " 3.03786000e-01, 3.12412000e-01, 3.20788000e-01,\n", - " 3.28606000e-01, 3.35689000e-01, 3.45583000e-01,\n", - " 3.55016000e-01, 3.64635000e-01, 3.74740000e-01,\n", - " 3.83871000e-01, 3.96374000e-01, 4.20446000e-01,\n", - " 4.36756000e-01, 4.49877000e-01, 4.66706000e-01,\n", - " 4.97313000e-01, 5.05926000e-01, 5.32346000e-01,\n", - " 5.64841000e-01, 5.50892000e-01, 5.98351000e-01,\n", - " 6.17782000e-01, 6.72248000e-01, 6.96237000e-01,\n", - " 6.99460000e-01, 7.01140000e-01, 7.19296000e-01,\n", - " 7.33180000e-01, 7.24884000e-01, 7.69404000e-01,\n", - " 7.77250000e-01, 8.32799000e-01, 9.33925000e-01,\n", - " 1.01020000e+00, 1.07310000e+00, 1.21651000e+00,\n", - " 1.27445000e+00, 1.30837000e+00, 1.52976000e+00,\n", - " 1.62957000e+00, 1.69051000e+00, 1.74094000e+00,\n", - " 1.83856000e+00, 1.95794000e+00, 1.97871000e+00,\n", - " 2.60955000e+00, 2.70133000e+00, 2.82330000e+00,\n", - " 3.85308000e+00, 4.03064000e+00, 3.91338000e+00,\n", - " 4.59505000e+00, 4.20223000e+00, 5.61362000e+00,\n", - " 7.39548000e+00, 8.33983000e+00, 1.02707000e+01,\n", - " 1.11389000e+01, 1.29232000e+01, 8.42540000e+00,\n", - " 2.31086000e+01, 1.80067000e+01, 3.46571000e+01,\n", - " 1.94390000e+01, 4.63772000e+01, 1.76541000e+01,\n", - " 6.54149000e+01, 3.43397000e+01, 2.86602000e+01,\n", - " 2.89308000e+01, 1.97519000e+01, 1.58082000e+01,\n", - " 3.79141000e+00, 1.33372000e+01, 3.45039000e+00,\n", - " 1.42551000e+01, 1.37460000e+01, 7.05691000e+00,\n", - " 8.53781000e+00, 1.27605000e+01, 3.89028000e+01,\n", - " 9.05356000e+01])" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "eds.dst_group_struct = dst_e_g\n", - "rxc = eds.discretize('U235', 'gamma')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "fig = plt.figure(figsize=(7,7))\n", - "plt.loglog(*stair_step(eds.src_group_struct, rx), figure=fig)\n", - "plt.loglog(*stair_step(eds.dst_group_struct, rxc), figure=fig)\n", - "plt.xlabel('E [MeV]')\n", - "plt.ylabel('Cross Section [barns]')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nt1uffvqpTpw44dmqyTAMrVmzRr/61a/CEtBM7OULINzYVN8eLN3L9/7779drr72mSy65RN27d5fj\n//drGIahzz77TJWVlaYGMxt7+QIw29n28vW1/y+iS8SOb2tu69atOnTokHr37t3q3rx580wJAwCx\npOmkGoej/XNVERv8LqjDhw/3WUwl6dlnnzUtEADEEiYrxQ+/JyXdddddevrpp/X111+3ah5PmzbN\n9GAAEEuYrBT7/B5DTUhou/Y6HA41NjaaFiocGEMFYLZgzkN1OCT+KYoeloyhjhgxQs8//7zPFz/4\n4IOmhAGAWNd0Ug3jqbHH74L6yCOPaMKECT7v/fa3vzUtEADEsqaJShTV2ON3l2+Turo6/e1vf5Mk\nXXTRRUpMTAxLMLPR5QvAbMnLklV50volg0mdk1SxkOocDDNrg98FtbGxUYsXL9azzz6rkydPSjpz\n/ulDDz2k3NzcdsdYowEFFUA0MXONajBjuTjDkjHUxx57TJs3b9by5cs1dOhQSdL+/fv1u9/9To2N\njXryySdNCQQA8YCu39jjdwv1sssu00cffaRu3bp5Xf/uu+901VVX6S9/+UtYAvrjwIEDevjhh9W5\nc2e9+eabPj+HFiqAaGRGS5UWavDMrA1+99M6nc5WxVSSunXrJqfTaUqYYO3YsUOTJ0+2NAMABIPz\nVGNHQAX1jTfeaHU9Ly/P8oI6Y8YMderUydIMABAszlONDX6PoT799NO69tprlZ2draFDh8owDB04\ncEA1NTV67733wpkRAGIep9TYn98t1PT0dO3bt0+33367zjvvPPXu3Vt33HGH9u3bp/T09HBm9LJi\nxQpNnjy51Yb8DjbKBBAD6AK2r4DXofqyf/9+z8xff9TX1+s3v/mNnnnmGe3fv18DBgzwup+fn68n\nnnhCTqdTjY2Nev7553XllVe2+8zVq1eroKCASUkAYkJyslRZ6d8pNUxKCp4lk5Lac+edd/r9uaWl\npXK5XCorK/O5/29xcbGysrK0du1aFRUVadGiRZo0aZLKy8vbfObGjRu1ceNG7d27Vy+88EJQfwYA\niCYVFT/s+Utr1R7abaFOnTpVQ4cO1dNPP23a5vh79uyR0+nU4cOHlZGRodLSUq8W6vTp0+VwOLR+\n/XrPtbS0NE2bNk1Llizx6x1tZaSFCsCOztZapYUavIht7DB+/Hj169dPknmb46elpUmSDh065PP+\n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\n7valyxcAgCgTVwWVrQcBIHCx2O3L1oMhoMsXAIIXq92+dPkCABBlKKgAAJiAggoAOKtYHEc1G2Oo\nAAC/xOI4KmOoAABEGQoqAMAvdPu2j9NmAAB+iaXTZzhtJgSMoQJA6GJtHJUxVACAJej2bRstVABA\nQGKplUoLFQBgGVqpvtFCBQAELFZaqbRQAQCWopXaGi1UAEBQYqGVSgsVAIAoQ0EFAAQlKelMK5Wu\n3zMoqACAoFRU/NDl63D88BGvBZaCCgAISVNhbfqQ4rOospcvAMBUdtjzl718Q8AsXwCInKYWakWF\ntTnOxszaQEEFAISFHZbVsGwGABD14m3zB1qoAICwifZWKi1UAACiDAUVABA28dTtS5cvACCsornb\nly5fAACiDAUVABBW8dLtS5cvACDsorXb18zaYOutB7///nvNmDFDV199tY4cOSKHw6Hly5dbHQsA\nEIdsXVANw9BNN92k22+/XZI0fPhw3XbbbbrsssssTgYAiDcx0+VbXV2tkSNHaseOHUr20VlPly8A\nWCceunxjYlLSunXrdPPNN+vXv/61z2IKALBWPExMslULdcWKFXr33XfVt29frVq1qtX9G264QXfe\neaduvvnmVvdooQKAtaKxlWrrFmp9fb2ys7PVsWNHHTp0qNX9/Px8jR49WhMmTNC4ceNUXFzsuXfX\nXXdpy5YtnmK6d+9e7dy503N/8ODBOnDgQPj/EAAAtBDRSUmlpaWaNWuWLr74YjU2Nra6X1xcrKys\nLO3cuVOpqanatGmTJk2apD179iglJaXV5ycmJurJJ5/UpZdequrqah0/flx33nlnJP4oAAB4iWiX\n7549e+R0OnX48GFlZGSotLRUAwYM8NyfPn26HA6H1q9f77mWlpamadOmacmSJSG9my5fALAWXb4m\nSktL05AhQ9oMv337do0aNcrrWnp6urZt2xaJeAAABC1q1qFWVFSoqqpK/fr187qekpKiLVu2mPKO\nnJwcz69dLpdcLpcpzwUA2IPb7Zbb7Q7Ls6OmoNbU1Eg6My7aXGJiompra015R/OCCgCIPy0bU7m5\nuaY9O2rWoXbt2lWSVFdX53W9rq7Ocw8AYF+xvhY1alqoycnJ6tmzp8rKyryul5WVaejQoaa8Iycn\nh65eALBIRcWZiUnRIBxdv5Zs7OB2uzVx4sRWs3z/8R//UYZhtJrlO3369JCb5czyBQDrRdtMX9vO\n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\nv/zud7/TI488wgz+EBw9elTdu3f3/L5Hjx46evSohYliUyA/q1E1KSmSVqxYocmTJ7faBvH06dMq\nLCzUNddcY1Gy1lpm7dGjhwYNGqRevXpJkq6++mr96U9/sjKih6/va9Ph7+ecc47GjBkT/t1KAtAy\nb35+vgzD8JxgVFBQoHXr1lmc8oy2fmZnzZql999/X//xH/+hP/zhDxala62tvO+8846qqqr0wAMP\nWJSstbayOhwOixKdXZ8+fXTixAnP76uqqtSnTx8LE/knmr+nLQX8sxrWjugwC8fJNfn5+cbLL78c\n1VmPHTtmXHDBBUZdXZ1hGIbx0EMPGS+88EJUZi0pKTFef/11z+9vvPFG449//KNpWc3O29zZTjCy\nOusXX3xh7Nixw/P7BQsWGM8880zU5jUMw8jLyzOefvppwzAM49NPPzX++te/Rm1WwzCMVatWhXW8\nL5TMTWOoTXMpxowZYxw4cCBsWUPN2yTc31Ozsgbzs2rbgnrw4EHjqquuMm699dZW2xgahmHs2rXL\n6Natm7F3717DMAxj48aNRq9evYyysrJ2n3vLLbcYNTU1UZ/1nXfeMebPn288/vjjxt13323U19dH\nZdZvvvnGmDp1qvH4448bv/zlL43s7GxTcoYrb5NVq1YZI0eONG6++WZj+/btUZl1//79xuzZs41/\n+Zd/MR555BEjKyvLqK6uNiVrOPK+//77xrnnnmtkZGQYLpfLuPTSSz0TP6Itq2EYxoYNG4xp06YZ\nP/rRj4znn3/elJxmZ964caNxzz33GL/85S+NV1991fSMZucN9/fUrKzB/qzatqDu3r3b2L9/v+F2\nu31+w6ZNm2ZMnz7d69oll1xiPPbYY5GMaRgGWcPJTnntlNUw7JXXTlmb2C2znfJaldW2Y6h2OrmG\nrOFjp7x2yirZK6+dsjaxW2Y75bUqq20LansqKipUVVWlfv36eV1PSUnRgQMHLErlG1nDx0557ZRV\nsldeO2VtYrfMdsobzqwxWVDDfXKNmcgaPnbKa6eskr3y2ilrE7tltlPecGaNyYJqp5NryBo+dspr\np6ySvfLaKWsTu2W2U95wZo3Jgmqnk2vIGj52ymunrJK98topaxO7ZbZT3nBmjcmCKtnr5Bqyho+d\n8topq2SvvHbK2sRume2UN2xZQ5ojHAUKCwsNh8PRaiP74uJio3v37p51Rps2bTJ69epllJeXWxHT\nMAyyhpOd8topq2HYK6+dsjaxW2Y75Y10VtsW1Gg+uYaskWOnvHbKahj2ymunrE3sltlOea3K6jCM\nNhbqAAAAv8XsGCoAAJFEQQUAwAQUVAAATEBBBQDABBRUAABMQEEFAMAEFFQAAExAQQUAwAQUVMBi\npaWlysjIUOfOnTV48GBlZGR4fTidzna/PiEhQVdccYUyMjL07bffSpJcLpf69u2rhIQEffzxxz6/\n7ssvv1RCQoIGDx6sn/3sZ2fN+c0332jcuHFKSEjQkCFD9OKLL3rdX7x4sS644AL96Ec/0n/913/p\nwQcf9ORfs2aNn98NwMZC3msJgCkGDRpk5Obmtro+ePDgdr/O4XAYRUVFra7PnTvX6NSpkzFt2jSf\nX3fXXXcZnTp18vnO9qSmphrXX3+9z3tXXXWVcezYMa9rgwYNMtasWRPQOwA7ooUKRLlQWnf/9E//\npD/84Q86cOCA1/WjR4/qq6++0vnnnx/wM2fOnKlt27bp6NGjXte//PJL9erVS8nJyUHnBeyMggpE\nqaau4J/85CdBP2P27Nnq3bu3nn32Wa/rL730ku6++26fX/O3v/1NkydP1pgxY/STn/xE9913n2pr\naz33Z82apVOnTumtt97y+rq8vDzNnj076KyA3VFQgShimHxWRWJiou69916tXr1alZWVkqSTJ09q\n27Ztuummm1p9fn19va677jrdeOON+vjjj1VUVKQjR454Fd+LLrpI6enpysvL8/rajRs3asqUKabm\nB+yEggpECcMwtHr1as9kpJkzZ4b8TIfDobvvvluGYejll1+WJK1du1azZ8+Ww+Fo9fnr1q1TeXm5\nfv7zn0s6M+Fp3rx5euONN1RdXe35vFmzZmnHjh3av3+/JOmTTz7RZZddps6dO4ecGbArCioQJRwO\nh+bNm6fCwkIVFhbqrbfe8ln0ApWcnKy5c+fqX//1X3Xy5EmtXbtW8+bN8/m5f/nLX3T69Gldc801\nnsL+29/+VgMHDtQ333zj+bwZM2YoISHB00rNy8tTVlZWyFkBO+tgdQAAvg0cOFDvv/9+SM9o6kJ+\n8MEH9eqrr2r27NlyuVzttiSTkpJUWFjY7nNTUlKUkZGhvLw8/frXv1ZRUZGee+65kLICdkcLFYhy\nmzdvVk1NTVBf29TCveiii3TjjTdq06ZNuu+++9r8/BEjRqi8vFxVVVWea42Njbr11ltVV1fn9bmz\nZs3Svn37tHTpUmVkZCghgX9OEN/4GwBECcMwfE5Keuqpp/R///d/IT/vqaee0u9//3ulpKS0+Tmz\nZs3SoEGD9OSTT3quvfzyy2poaFBiYqLX86dNm6ZOnTppyZIldPcCossXsNzBgwc1a9YslZeXa+XK\nldq6davX/b179wY8ljplyhTt2LFDn332mRYsWKA77rhDw4YN07BhwyRJhw8f1pw5c/Ttt99q9erV\n+vrrr7VixQp17NhRBQUFuv/++3XZZZepd+/eGjp0qFasWNHqHT169NBPf/pTff7550pPTw/+GwDE\nCIdh9jx9ABGVkJCgwsJCTZgwweooPg0ePFi5ubmaM2eO1VGAsKLLF7C5gQMHKjs7WxkZGSovL7c6\njkfTXr4dO3ZUt27drI4DhB0tVAAATEALFQAAE1BQAQAwAQUVAAATUFABADABBRUAABP8P75cI9fR\nmcnqAAAAAElFTkSuQmCC\n", - "text": [ - "" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple Data Source" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "sds = SimpleDataSource(dst_group_struct=dst_e_g)\n", - "print sds.exists\n", - "rx = sds.reaction('U233', 'absorption')\n", - "rxc = sds.discretize('U233', 'absorption')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "True\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "fig = plt.figure(figsize=(7,7))\n", - "plt.loglog(sds.src_group_struct[:-1], rx, figure=fig)\n", - "plt.loglog(sds.dst_group_struct[:-1], rxc, figure=fig)\n", - "plt.xlabel('E [MeV]')\n", - "plt.ylabel('Cross Section [barns]')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 6, - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAdAAAAHJCAYAAAA1hGhTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYVGX7B/DvgMgipOCC5o7W624uuCugmKa5vWIq4Fpu\naab5lmipqJXpz1zexDI1N9xyDRVFIsal3EtzzQVRMyFXEEjW8/vjvIMgiDPDmXnOzHw/18VVnhnO\nfDXt9jnnOfetkSRJAhERERnETnQAIiIiS8QCSkREZAQWUCIiIiOwgBIRERmBBZSIiMgILKBERERG\nYAElIiIyQgnRAQzxzz//YMCAAWjTpg3u3LkDjUaDhQsXio5FREQ2yKIKqCRJ6NmzJ95++20AQN26\ndTF8+HA0bNhQcDIiIrI1GkvtRJScnIymTZvi+PHj8PDwEB2HiIhsjEXeA92wYQN69+6Njz/+mMWT\niIiEsNgVKAB0794dI0aMQO/evUVHISIiG2P2FWhGRgZCQkLg4OCAmzdvFng9IiICLVq0gI+PD9q1\na4dTp07lvnbx4kWcOHEi98c1a9ZEXFycWXITERHlZdZNRPHx8QgMDMSrr76K7OzsAq+fOnUKQUFB\nOHHiBOrUqYM9e/agS5cuOH/+PDw9PeHo6IjPP/8cDRo0QHJyMh49eoQRI0aY86dAREQEwMyXcM+f\nPw9nZ2fcunULfn5+iI+PR7Vq1XJfDwgIgEajwZYtW3KP1a9fH3379sWsWbPMFZOIiOiFzHoJt379\n+vDy8sLzanZMTAyaN2+e75i3tzeio6PNEY+IiEhvqnkO9MGDB0hKSkKlSpXyHff09MTevXsNPp9G\no1EqGhERWRGlLryq5jGW1NRUAICjo2O+446OjkhLSzPqnJIk6f01Y8YMxd5f2Gt5jyn5WUpnM/Tz\nmI3ZzJlNyZ8Ls9lmNiWppoCWKlUKAJCenp7veHp6eu5rpuTr66vY+wt7zdDzF+d7mc2472U2477X\nnNkM/X5mM+77mU1PkgCxsbGSRqORbty4ke+4u7u7NHfu3HzHBg8eLLVp08bgzxD0U9PLjBkzREco\nkprzMZtxmM04zGYcNWdTsjaoZgUKAP7+/vme8wSAkydPwt/fX1Ai0zDp34gUoOZ8zGYcZjMOsxlH\nzdmUJKQTkVarRceOHXH9+nVUr1499/ivv/4KX19fHD9+HHXq1EFkZCQGDx6MCxcuoEKFCgZ9hkaj\nUfx6NxERWTYla4NZd+FmZmaiQ4cOSE5OhkajQZ8+fVC5cmXs2rULANC0aVOsX78egwcPhrOzM3Jy\nchAVFWVw8dQJDQ2Fr6+vzfxtiIiICqfVaqHVahU9p0X3wi0KV6BERPQsJWuDqu6BEhERWQoWUCIi\nIiOwgBIRERmBBZSIiMgILKBERERGsOoCGhoaqvi2ZSIisjxarRahoaGKnpOPsRARkc3gYyxERESC\nsYASEREZgQWUiIjICCygRERERmABJSIiMoJVF1A+xkJERAAfYzEIH2MhIqJn8TEWIiIiwVhAiYiI\njMACSkREZAQWUCIiIiOwgBIRERmBBZSIiMgILKBERERGsOoCykYKREQEsJGCQYrzsOyDB8Dly0Cr\nVgqHIiIiodhIwcQuXQJ69gROnhSdhIiI1IoFtBBt2gArVgA9egAXL4pOQ0REalRCdAC16tkTePQI\n6NIFOHQIqF5ddCIiIlITFtAiDB4MPHwIdO4MHD4MVKggOhEREakFC+gLvP++vKmoa1cgNhYoXVp0\nIiIiUgPuwtWDJAHjxwNnzgBRUYCzsyKnJSIiM1OyNrCA6iknR76km5QEbN8OODgodmoiIjITPsYi\ngJ0dsGqV/O/DhskFlYiIbJdVF1ClOxE5OADffw/cuiXfG7XOtTsRkfVhJyIDKH0JN6+kJMDPT37U\nReH/HkREZEJK1gbuwjVC6dLAvn1A+/aAu7u8GiUiItvCAmqkChWA/fufFtHBg0UnIiIic2IBLYbq\n1eXHWjp2BMqUkS/pEhGRbbDqTUTmULcusGsX8M47ACenERHZDhZQBTRvDmzeDLz1FnDqlOg0RERk\nDiygCvHzA5YvB958Ux6HRkRE1o33QBXUq1f+CS7VqolOREREpsICqrAhQ+QJLq+/Dhw8yAkuRETW\nigXUBCZM4AQXIiJrx05EJiJJwHvvAWfPyk0XOMGFiEg8TmPRg+gCCsgN5wcNAh4/BrZt4wQXIiLR\nOI1FT0o3kzeUnR2werVcSIcP5wQXIiJR2EzeAGpYgeqkpcn3Q197DVi8GNBoRCciIrJNXIFaGBcX\nuVvRoUPArFmi0xARkRK4C9dMnp3gMn686ERERFQcLKBm5OkJREfLRdTDAwgOFp2IiIiMxQJqZtWr\nyyvRjh3lVWmPHqITERGRMXgPVIB69eR7om+/DRw4IDoNEREZgwVUEG9vYNMmoF8/4NdfRachIiJD\nsYAK1LEj8O23QPfuwB9/iE5DRESG4D1QwXr3lie4vP46cPgwULWq6ERERKQPFlAVGDpUnuDSubP8\nrGj58qITERHRi7CAqsTEifknuLz0kuhERERUFLbyUxFJAsaNA86fB/bu5QQXIiKlcRqLHiyxgAJy\nw/ngYCAlhRNciIiUxl64VszODlizBsjOlp8T5QQXIiJ1YgFVIQcHYMsW4Pp1+d6oBS6kiYisnlUX\nUNHzQItDN8HlwAFg9mzRaYiILBvngRrAUu+BPisxEWjXDnj/fXmDERERGU/J2sDHWFQu7wQXd3cg\nKEh0IiIiAlhALUKNGkBU1NMJLm++KToRERFZ9T1Qa1KvHhARAQwfDhw8KDoNERGxgFqQFi2AjRuB\ngADgt99EpyEism0soBamUydg2TJ5gsvly6LTEBHZLt4DtUB9+jyd4HLoECe4EBGJwAJqoYYNkye4\n6IpouXKiExER2RY+B2rhPv4Y2L8fiInhBBciohdhM3k92EoBlSTg3XeBS5fkCS5OTqITERGpFwuo\nHmylgAJy4/ngYCAtTZ7gUoIX5omICsVpLJSPvb08wSUjA3jnHU5wISIyBxZQK1GypLz6vHoVmDSJ\nE1yIiEyNBdSKuLgAu3cDsbHAZ5+JTkNEZN14t8zKlCkD7Nv3tPn82LGiExERWScWUCtUsaL8aEuH\nDnIRDQwUnYiIyPqwgFqpmjXllWinTvIEl+7dRSciIrIuvAdqxerXB374Qe5adOiQ6DRERNaFBdTK\ntWwJbNgA9O3LCS5EREpiAbUB/v7AN99wggsRkZJ4D9RG/PvfTye4HD4MVKkiOhERkWVjAbUhw4c/\nneBy8CAnuBARFYdVX8INDQ2FVqsVHUNVJk0CevcG3ngDePxYdBoiIvPQarUIDQ1V9JxsJm+DJAkY\nM0a+HxoZyQkuRGQ7OI1FDyygRcvOBoKCgPR0YMsWTnAhItvAaSxUbPb2wNq1wJMnwIgRnOBCRGQo\nFlAbVrIksHWrfCn3P//hBBciIkOwgNq4UqXkCS4//gh8/rnoNEREloN3vgju7kBUlDzBxcND3mBE\nRERFYwElAEClSkB0tDzBpUwZYOBA0YmIiNSNBZRy1awJ7N0rt/4rXRro1k10IiIi9eI9UMqnQQNg\n505g6FC55R8RERWOBZQKaNUKWL9enuBy+rToNERE6sQCSoXq3BkIC5Mv4165IjoNEZH68B4oPVdA\nAJCUJDefP3SIE1yIiPJiAaUivf028OABJ7gQET2LvXBtjCRJ0Gg0Bn/flClATIz85eZmgmBERGbA\nXrhktLe2voVjfx4z+Ps+/xxo0kQehfbkiQmCERFZGBZQG9PrX70wNnIssnOyDfo+jQZYuhQoW1Zu\nspCVZaKAREQWggXUxgQ1DIKLgwuW/7rc4O+1twfCw4G0NGDkSDafJyLbxnugNuj3xN/hv9YfF8Ze\nQDkXw3cFpabKj7m0bg3Mny+vTomILAEHauuBBbRoE6MmIiUjBct7GL4SBYCHDwEfH2DAAGDqVIXD\nERGZCDcRUbGF+oRiz+U9Rm0oAp5OcPnuO+DrrxUOR0RkAVhAbVRpp9KY13meURuKdCpVAvbvBz77\nDNi0SeGAREQqxwJqw4qzoUjHywvYtw+YMEGe5EJEZCt4D9TGFXdDkc6RI0CvXsCOHUDbtgoGJCJS\nEDcR6YEFVH/F3VCks38/MGiQ/M/GjRUKR0SkIBZQPbCA6i/pSRLqhtXFjv470LJKy2Kda+tW4P33\ngQMHgNq1FQpIRKQQ7sIlRSmxoUgnIAAIDZWbz9++rUw+IiI1YgElAMpsKNIZMQIYPVouovfvKxCO\niEiFeAmXcim1oUgnJASIjZUnuLi6KhCQiKiYzHYPdObMmQaNvipTpgzGjx+vSLDiYgE1zoR9E5Ca\nmVrsDUWA3Ct31CggLg7YswdwdFQgIBFRMZitgLq7u+O1117T60SSJOHvv//GhQsXFAlWXCygxlFy\nQxEAZGfL01uys4HNm4ESHOFORAKZrYD6+fkhNjZW75MZ+n5DnTt3DnPmzEHTpk1x5coVNG/eHO+8\n806h72UBNV747+FYdHQRjr1zDPZ29sU+X3o60KMHULUqsGIFm88TkThm24XbtWtXg05m6PsNdf/+\nfYwaNQqTJk3CkiVL8NFHHyEpKcmkn2mLlNxQBMiXbrdvBy5cAD78kGPQiMg6WOwmoszMTFSpUgVx\ncXEoVapUgde5Ai0epTcUAcCDB/IEl8BAYMoURU5JRGQQIc+BpqWl4ebNm3jy5AkA4Pr161i4cCH2\n7NmjSBBDff3115g6dWqhxZOKr5FnIwQ2DMSUGOUqnYeH3KVoxQpg2TLFTktEJITeK9D3338f+/fv\nx5YtW1C5cmXUrVsXzs7OyM7Oxrhx4/DRRx+ZOmuubdu24cKFC5g2bdpz38MVaPEpvaFI59o1eSX6\n5ZdA//6KnZaI6IWErEBPnDiB3377DQ0aNMDq1avh6OiICxcu4OLFi9iyZYveH5iRkYGQkBA4ODjg\n5s2bBV6PiIhAixYt4OPjg3bt2uHUqVP5Xt+wYQPi4+Mxbdo0nDlzBleuXNH7s8kwSnYoyqtWLXly\ny/jx8iQXIiJLpHcBdXJygpOTEwBg06ZNePvtt+Hs7IxSpUrBzc1Nr3PEx8fD19cXCQkJyM4u+D/k\nU6dOISgoCGvXrsWBAwcwZcoUdOnSBYmJiQCA2NhYvPvuu9izZw/8/PwQHByMO3fu6PtTICMovaFI\np2FDYOdOYPBg4OefFT01EZFZ6H0Jt3Xr1pgzZw6uX7+OESNG4Nq1a6hevTrS0tLQsWNHHD169IXn\nOH/+PJydnXHr1i34+fkhPj4e1apVy309ICAAGo0m34q2fv366Nu3L2bNmmXYT4yXcBVjig1FOlFR\nchGNjgYaNVL01EREBShZG/R+rH3WrFno1asXHj9+jClTpqB69eqIiorCuHHj0L17d73OUb9+fQAo\n9NItAMTExCAkJCTfMW9vb0RHRxtcQAEgNDQ09999fX3h6+tr8Dko/4YiJToU5dWlC/DVV8Abb3CC\nCxEpT6vVQqvVmuTcBj3GkpWVhcePH8Pd3R0AkJKSgnv37qFChQpwcXHR+0O1Wi06duyYbwX64MED\nlCtXDqtXr8bgwYNz3zt58mSsXr069zKuvrgCVZapNhTpfPst8MUXwKFDQOXKip+eiAiAwHFmJUqU\nyC2eAODq6ooaNWrgk08+KXaQ1NRUAIDjMw1THR0dkZaWVuzzU/GUdiqNuf5zFd9QpDNypNw3t0sX\n+XlRIiK10/sSbkZGBjZs2IDTp08jOTkZkiTlVvKoqCgsWLCgWEF0z3Omp6fnO56ens5nPVUiuFEw\nvv31Wyz/dTlGNx+t+PknT5bHn3XrBvz4Iye4EJG66b0CHTp0KKZNm4Zbt24hJycHkiTl+youDw8P\nlClTBgkJCfmOJyQkoFatWsU+PxWfRqNBWLcwTI+djntp90zyGXPnAg0aAH36yD10iYjUSu8V6OnT\np3HlypXcR1nymqJQXzZ/f3+cOHEi37GTJ08iICBAkfNT8ZlyQxEgN5pftgwYMAAICpInuNgXv589\nEZHi9F6B1qlTp9DiCSDfph9DPLtyDQkJQVRUFC5dugQAiIyMRGJiIsaOHWvU+UNDQ022+8qWzfSd\niT2X9+DYn8dMcn57eyA8HEhOlu+Lci8YERWXVqvN92SGEvTehfv999/j4MGDGDhwIF5++WXY/29Z\nIEkSBg4ciF9++eWF58jMzESHDh2QnJyMS5cuoXHjxqhcuTJ27dqV+55du3Zh9uzZcHZ2Rk5ODhYt\nWoRmzZoZ/hPjLlyTWndmHRYfW6zYyLPCpKQA/v5Ahw7AvHkm+QgisjFmmweal53d8xerGo2m0M5C\nIrGAmpYkSeiwugOCGgaZZEORzoMHcgEdNEjeZEREVBxCGim0aNECmzdvLvSDBw4cqEgYshy6DUX+\na/0RUC9A8Q5FOroJLu3aAe7u8uMuRERqoPcK9ODBg/Dy8kKVKlUKvPbrr7+iadOmiocrDq5AzWPC\nvglIzUw1yYaivK5dk1eiCxcCb71l0o8iIism7BJur169sGPHDkU+2NRYQM3D1B2K8vr9d6BzZ2Dt\nWrnhAhGRoYR0ImrZsqXFFE8yH1N3KMqrUSNgxw75fqgee9aIiExK7wL66quv4tGjR4W+NnToUKXy\nKIqPsZhHcKNgODs4Kz7yrDBt2sgr0D595BUpEZE+hD7G8uWXXyI8PBx9+vRB1apV8z3G8sUXX+Di\nxYuKBisuXsI1L1OOPCvM5s3ABx8ABw/KA7qJiPQh5B6os7MzKlasWOC4JEn4+++/VdfwnQXU/My1\noUhn2TL5+dBDh4CXXzbLRxKRhRPyGEvLli2fezmUczYJkDsU1Q2ri6N/HkWrKq1M/nmjRsnPiXbp\nIs8S9fAw+UcSEeXSewWanJyMl156qdDXcnJyimy0IAJXoGKsO7MOi44twvF3jpusQ1FekgR89BFw\n+DAQHc0JLkRUNCG7cJ9XPAG5CTwRIG8ocnFwMcuGIkBuPj9vHlC/PvDvf3OCCxGZj94r0IyMDMyd\nOxd79+5FYmIicnJycl9LSEjAP//8Y7KQxuAKVBxzbygCgKwsoH9/wM4O2LSJE1yIqHBCVqAhISH4\n5ZdfMGTIEJQsWRKhoaGYMmUKGjRogMDAQEXCKI2PsYiRd+SZuZQoAWzYADx8CIwezQkuRJSf0MdY\nWrVqhcOHD6NEiRLw8/NDbGwsACA7Oxv9+vXD9u3bFQ1WXFyBiqXrULS9/3azbCjSSUkBOnUC/PyA\nL74w28cSkYUQsgJ1cXFBiRLypt2MjIzcAPb29rh9+7YiYch6mLNDUV6urkBkJLBrFzB3rtk+lohs\nkN4FND09Hbt37wYAVKtWDe+99x4OHDiAadOmITk52WQByXKZe0ORTtmy8gSXZcuA5eb9aCKyIXpf\nwt22bRu2bt2K+fPn49GjR+jYsSPu3r0LZ2dnbNiwAb169TJ1VoPwEq46iNhQpHP1KuDjAyxaBPTr\nZ9aPJiKVEtKJ6Fmpqam4dOkSatSogbJlyyoSRkksoOph7g5FeZ05A7z+OrBunfxPIrJtQgtoWloa\nrl27BgCoVasWXFxcFAmiNBZQ9RC1oUjn55/l5vM//AC0bm32jyciFRGyiSg1NRVjxoyBh4cHGjdu\njMaNG8PDwwPvvvuu6vrgkrqI2lCk07atPMGld2/g7FmzfzwRWSm9V6BBQUH4448/MGrUKHh5eQEA\nrl27hmXLlqFu3boIDw83aVBDcQWqLpIkocPqDghsEIgx3mOEZNi0CfjPf+QJLv/7LUxENkbIJVwv\nLy+cP38ezs7O+Y6npaWhfv36uH79uiKBlKLRaDBjxgz4+vqy2b1KiNxQpPPNN8D//Z/cO7dSJSER\niEgArVYLrVaLmTNnmr+Adu3aFfv27Sv0tddffx379+9XJJBSuAJVJ5EbinQ+/xzYuJETXIhskZB7\noP369cOiRYuQkZGReywjIwMLFy5Et27dFAlD1m+m70zsubwHR/88KizDlCnyCLQ33wRSU4XFICIL\nV+QKtGbNmvl+nJiYiKysLHh6egIA/v77b+Tk5KBq1aqIi4szbVIDcQWqXuYeeVYYSQLefhu4fRuI\niAAcHYXEICIzM9s90Dp16mDKlCkv/LC5c+fi4sWLigRSCguoeuk2FAU1DMLo5qOF5cjKAt56S25E\nv3EjJ7gQ2QIla0OJol4cM2YMhgwZ8sKTsJUfGUKj0SCsWxj81/ojoF6AsA1Fugkub74JvPuuvMFI\noxEShYgskNGdiNSOK1D1U8OGIgB4/Fie4NKpEzBnjtAoRGRiZttEZOicz4EDBxYrDNkWNWwoAgA3\nN2DvXvle6P/9n9AoRGRBiiygd+7cMehkCQkJxQpDtkV0h6K8dBNcli4FVqwQGoWILESRBfTAgQOw\ns7PT+ys+Pt5MsclaiBp5VpjKleUiOn06sHWr6DREpHZFbiL66aefDDrZs12KRAsNDWUnIpVTy4Yi\nnVdekQdyd+kClC4NdO4sNA4RKUTXiUhJ3EREqqCWDUU6hw8D//63fF+0lfkHyBCRiahiHqjasYBa\nFtEjzwoTGQkMHw78+CPQoIHoNESkBCGt/IhMSU0binS6dQMWLgTeeANQ2awEIlIBFlBSDTVtKNIZ\nOBCYOlW+F2rgpnQisnK8hEuqooaRZ4X57DNg82Z5gou7u+g0RGQs1V3CnTdvnhKnIUIjz0YIbBiI\nKTFTREfJZ+pUwN+fE1yI6CmDVqBarRanT5/G48ePcyu4JElYs2YNp7GQYtS4oQgAcnLkCS537si7\nc0uWFJ2IiAwlZBfu+PHjsXz5ctSrVw9ubm7Q/K/rtiRJOHPmDB4+fKhIIKWwgFo2NYw8K0xWFtCv\nn1w8N2zgBBciSyOkgL766qv4+eefUb58+QKvDRs2DKtWrVIkkFJYQC2bWkaeFebJE6B7d7npwtdf\nc4ILkSURcg+0bt26hRZPAFiwYIEiYYh0dB2KpsdOx720e6Lj5OPkBOzcCfz6K/Dxx6LTEJEoehfQ\nkSNHYv78+bh9+3aB6t23b1/FgxGpdUMRIE9wiYyUC+n8+aLTEJEIel/CtbN7fq3VaDTIzlbHw+86\nvIRrHdS6oUjnzz+Bdu2AadPkDUZEpG5K1oYim8nn1ahRIyxevLjQD544caIiYZTGZvKWL2+HIrVt\nKAKAKlXkCS6+vvLzof/+t+hERFQYoc3kv//+e7z11luFvhYZGYlu3bopGqy4uAK1HmreUKTz22/y\nBJcNG+TnRYlInYQ2k09PT8fVq1cBALVr14ajo6MiQZTGAmpd1NqhKK9Dh4C+fYFdu4CWLUWnIaLC\nCNmFm52djU8++QTu7u5o2LAhGjZsCA8PD0ybNg05OTmKhCF6HjVvKNJp3x5YtQro1Qs4f150GiIy\nNb1XoFOnTkVkZCTGjBmDWrVqAQCuXbuGr7/+Gt26dcPnn39u0qCG4grU+qh9Q5HOhg3A5MnAwYNA\nzZqi0xBRXkIu4TZs2BBHjhyBq6trvuMpKSlo3bo1zp49q0ggpbCAWqfw38Ox8OhCVW4oyissTB6F\ndvgwULGi6DREpCPkEq6zs3OB4gkArq6ucHZ2ViQM0YsENQxCKYdSqhp5VpixY4EhQ+SNRY8eiU5D\nRKZgUAENDw8vcHz9+vUsoGQ2Go0GS7otUWWHomd98gnQsaPc9o8TXIisj96XcE+cOIHOnTvD1dUV\ntWrVgiRJiIuLQ2pqKvbv3w9vb29TZzUIL+Fatwn7JiA1MxXLe6h7JZqTAwwfDiQmAj/8wAkuRKIJ\ne4zl7t27WLJkCc6dOwdAvi86btw4lCunvscKWECtm6VsKALkCS4BAXIP3fXrOcGFSCShz4EW5tq1\na7k7c9WCBdT6WcqGIkCe4NKtG/CvfwFLl3KCC5EoQjYRFWXEiBFKnIbIIJayoQiQV58//ACcPCnf\nGyUiy1fkCrRPnz6oVasW5s+fz2bypEqW0KEor3v35IYL77wDTJokOg2R7TFbM/kOHTqgUqVKACyz\nmTxZv7wditS+oQgAypWTm8+3bw94eADDholORETG0vseaHh4OIKDgw1+TRSuQG2HJW0o0rl8WZ7g\nEhYG9OkjOg2R7RByDzQlJaXAsbS0NLRo0QIvvfSSImGIjFHaqTTmdZ6HsZFjkZ2jrlsJz/Pqq8Du\n3cCoUUBMjOg0RGQMvQvo5s2bCxxzcXHBrl27MHfuXEVDKSU0NFTx+W+kTpa0oUinaVNg61Zg4EDg\n+HHRaYism1arRWhoqKLnLPISblJSEpKSkiBJEgYMGFBoEb1//z6GDh2KM2fOKBqsuHgJ1/ZY2oYi\nnd275U1FP/0E1KsnOg2RdTPbc6ChoaGYNWtWkSews7NDSEgIPv30U0UCKYUF1DZNjJqIlIwUi9hQ\nlNf69UBIiDxTtEYN0WmIrJfZCmhSUhIePnwIALkr0Lxvt7OzQ7ly5eDi4qJIGCWxgNomS9xQpLNk\nCbB4sTzBxdNTdBoi6ySkE9G5c+fQoEEDRT7UHFhAbZcldSh61qxZwPbtgFYLlCkjOg2R9RGyCzc7\nOxszZ87EDz/8kHtsx44d2L59uyJBiJRiiRuKdKZNkx9vefNNIC1NdBoiKoreBfTTTz/FuXPnULVq\n1dxjtWvXxooVK7B48WKThCMyhiWNPHuWRgMsWAB4eckN6DMyRCcioufR+xJuy5YtceTIkQIt/bKy\nstC+fXscOXLEJAGNxUu4ZKkbigAgM1MuoC4uQHg4J7gQKUVYM/nC+uGWKFECOTk5ioQhUlKoTyj2\nXN6Do38eFR3FYA4OwObNQEIC8N57AP8uSKQ+ehdQJycnrF+/vsDx8PBwODs7KxqKSAmW2KEoL90E\nl+PHgenTRachomfpfQn35MmT8Pf3h5ubG7y8vCBJEuLi4pCamoro6Gg0b97c1FkNwku4BACSJMFn\ntQ8CGwZidPPRouMY5e5dufn8qFEA5zYQFY+wgdp3797FkiVLcO7cOQBAw4YNMW7cOJQrp76uLyyg\npGOpHYryunVLLqKhocDQoaLTEFkuYQXUkrCAUl4ToybicfpjrOi5QnQUo/3xh/yIy9dfA717i05D\nZJmEbSLCgbYTAAAgAElEQVS6cuUKJk2ahNGj5UthGzZsyF2NEqlZqE8oIq9EWuSGIp1//QvYswcY\nOVLum0tEYuldQGNjY9GoUSMcOnQIBw8eBAA4Oztj4MCB2Lt3r8kCEinB0jcU6TRtCmzZAgwYAJw4\nIToNkW3Tu4CGhobi8OHDOH78ODz/16izT58+OHDggGrHmRHlZckdivLy8QFWrgR69AAuXBCdhsh2\n6V1ANRoNmjVrVuC4h4cHsrMt92/0ZDssuUPRs3r0AObPB7p2BW7cEJ2GyDbpXUB1s0GfdePGDTx4\n8EDRUESm0sizEYIaBWFKzBTRUYotOBj48EOgc2cgMVF0GiLbo3cBHTRoELy9vTFv3jz8/fffWLly\nJT788EO0bNkSI0eONGVGIkVZcoeiZ733HhAUJK9EC/n7LRGZkEGPsaxcuRKzZ8/GzZs3AQDVq1fH\ntGnTMHz4cJMFNBYfY6GiWPLIs2dJEvD++8Dp08C+fXL/XCIqnPDnQB8/fgwAcHNzUySEKbCAUlGs\noUNRXjk5wJAhwIMHwM6dci9dIipIeAEFgOTkZDg7O8NBpX9SWUDpRayhQ1FemZlA376Amxuwbh1Q\nyOwHIptntkYKUVFRGDFiBKZOnZp77NGjR/D19UWZMmXg4uKCfv365a5IiSyJNW0oAp5OcPnzT2D8\neE5wITK1IgvoypUrkZiYiDfeeCP32H/+8x8cPnwY8+bNw7Zt25CWloaZM2eaPKgxQkNDodVqRccg\nFbOmDUUA4OwMREQAR44AM2aITkOkHlqtFqGhoYqes8hLuN7e3jh06BCcnJwAyJdtK1asiKCgICxf\nLj+MnpqaCh8fH5w8eVLRYMXFS7ikL2vaUKSjm+AyejQwYYLoNETqYbZLuK6urrnFEwB2796NJ0+e\n5Nt1W6pUKbi6uioShkgEa+lQlFf58sD+/cDChcCaNaLTEFmnIgtoZmZmvh+vWbMGlSpVQqtWrfId\n50qPLJk1dSjKq1o1ICoKCAmRB3MTkbKKLKCVK1fGp59+ikuXLmHhwoWIjo7GiBEjoNFoct9z6NAh\ntvIji9fIsxECGwZazYYinTp1gN27gREjgNhY0WmIrEuR90Dj4uLQtWtXXL16FQDQoUMH7Nu3D05O\nTrh//z6CgoIQGxuL6dOn4+OPPzZbaH3wHigZKulJEuqG1cX2/tvRqkqrF3+DBdFqgbfeAiIjgebN\nRachEsesz4FmZmbi4sWLKFmyJOrUqZN7PDs7G7du3QIAeHp6wtnZWZFASmEBJWNY44YinYgIeZZo\nbCxQt67oNERiqKKRgtqxgJIxrK1D0bPWrQM+/hg4dAioXl10GiLzYwHVAwsoGcvaOhQ9a/FiICwM\nOHwYqFBBdBoi82IB1QMLKBXHhH0TkJqZiuU9rOfRlrxCQ+WduVotULq06DRE5sMCqgcWUCoOa95Q\nBMht/saPB86ckR91UdkWBiKTMVsjBSJbVdqpNOZ1noexkWORnWN9j2lpNPKl3GrVgH795Eb0RGQY\nowtoUlISduzYgXPnzimZh0g1rLFDUV52dsCqVXIxHTZMHolGRPrTu4BOnToV5cqVw4kTJ5CWlgZv\nb28MGjQILVu2xBr2CiMrZK0divJycAC+/x64dUseys27HkT607uAarVaXLp0Cd7e3li/fj0ePXqE\n69ev49q1awgLCzNlRiJhrLVDUV66CS4//yxvLiIi/ehdQJ2cnFCunLylf9OmTRg6dCjKly+PihUr\nspk8WbWZvjOtauRZYUqXBvbtAzZtku+NEtGL6V1AU1JSEB8fj9jYWGi1WgwdOhSA3JHon3/+MVU+\nIuFKO5XGXP+5VruhSKdCBXmCy5dfAmvXik5DpH56F9AJEybglVdeQadOnRAcHIx69erhyJEj6Nix\nI+rXr2/KjETCBTcKhouDi9VuKNKpXl0uopMny5d1iej5DHoO9K+//kJiYiKaNGmS++PLly+jbt26\n8PT0NFlIY/A5UFKatXcoyuvkSaBbN3mDka+v6DREylFFI4Xs7Gz8/vvvqFatGsqWLatIGCWxgJIp\nWHuHorxiY4H+/YG9e4FmzUSnIVKGkEYKixcvxiuvvIITJ04gKysL7du3R7NmzVC1alVERkYqEoZI\n7WxhQ5GOnx+wfDnw5pvApUui0xCpj94F9Pvvv0dkZCS8vb2xZcsWnDt3DufOncMvv/yC2bNnmzIj\nkWrYyoYinV69gC++ALp0AW7eFJ2GSF0MeozllVdeAQBs3LgxdyPRa6+9prpZoESmZCsbinSGDAE+\n+ADo3Bn4+2/RaYjUo4S+b0xOTkZKSgr+/PNP7Nu3D4cPH859LT093SThiNRIo9EgrFsY/Nf6I6Be\ngNVvKALkLkX37wNdu8r3RjnBhciAFWhQUBBefvllNGnSBL6+vmjRogXOnz+PoKAgVKtWzZQZiVTH\nFjoUPWvmTKBNG6BnT4CPfhMZuAv3+PHjuH37Nrp16wZHR0dcunQJR48eRdu2bXMv76oFd+GSqVn7\nyLPC5OQAgwYBycnA9u1yL10iSyL8MZbU1FQAQKlSpRQJYQosoGQO686sw6Jji3D8neOwt7MXHccs\nMjOBPn0Ad3dgzRp5qguRpRA2D3TFihWoWbMm3Nzc4ObmBi8vL6xcuVKRIESWyNY2FAFPJ7jcuAFM\nmMAJLmS79F6BLly4EF9++SUGDRqEWrVqAQCuXbuG8PBwfPDBB5g4caJJgxqKK1AyF1vqUJRXUpLc\npah3b2DGDNFpiPQj5BJuo0aNsH//flSsWDHf8YSEBLz++uv4/fffFQmkFBZQMidb6lCUV2Ii0L49\nMG4cMH686DRELybkEq6Li0uB4gkAFStWhIuLiyJhiCyVLXUoysvTE4iOBubPB9atE52GyLz0LqCS\nJOHQoUMFjh8+fNjsK724uDj06dMHAwcONOvnEj2PrXUoyqt6dSAqCvjwQ2DXLtFpiMxH70u4UVFR\n6NmzJ5o3b47atWsDAK5cuYJTp04hIiICXbp0MWnQvDZt2oTk5GTExsZi48aNhb6Hl3DJ3CRJQofV\nHRDUMAijm48WHcfsTpwAunfnBBdSNyGXcLt06YLffvsNtWvXxrlz53D+/Hm8+uqrOH36tFmLJwAM\nGDAAJUuWNOtnEr2IrkPR9NjpuJd2T3Qcs/P2BjZtAt56Czh1SnQaItPTu5XfmjVrULJkSaxZs8aU\neYgsWt4ORba2oQgAOnYEvv1WnuASGwvUqSM6EZHp6L0CHTVqFP766y9TZjGIRqMRHYGoULa6oUin\nd29gzhxOcCHrp3cBbd++PSZNmlToaw8fPjToQzMyMhASEgIHBwfcLORPWEREBFq0aAEfHx+0a9cO\npwq5HsT7m6RWtryhSGfoULnJwuuvA3fvik5DZBp6F1Bvb2/89ttvhb7Wt29fvT8wPj4evr6+SEhI\nQHZ2wf+5nDp1CkFBQVi7di0OHDiAKVOmoEuXLkhMTMx9z+7du7F7925cvHgR//3vf/X+bCJzscUO\nRc+aOBHo10+e4JKcLDoNkfL03oU7ZMgQREREoEmTJqhatSrs7OxydzPt27cPd+7c0esDz58/D2dn\nZ9y6dQt+fn6Ij4/PN80lICAAGo0GW7ZsyT1Wv3599O3bF7NmzdL/J8ZduCSYrXYoykuS5CYL588D\ne/cCHB1MoilZG/TeRLR//3707t0bkiTl3n+UJMngIPXr1weAQi/dAkBMTAxCQkLyHfP29kZ0dLRB\nBRQAQkNDc//d19cXvtxbT2Zk6xuKAECjAb76CggOBvr3B7Zt4wQXMi+tVgutVmuSc+tdQLt27YpV\nq1YV+tp7772nSJgHDx4gKSkJlSpVynfc09MTe/fuNfh8eQsokQgzfWeiblhdHP3zqM2MPHuWnZ08\ntaV3b+Dtt4HVqznBhczn2cXTzJkzFTu33r+Nn1c8AeCrr75SJIxuTJqjo2O+446OjkhLS1PkM4jM\niRuKZA4OwJYtwPXr8r1R3l0ha1BkAb1z5w4mTpyIDz74AGfOnCnw+ogRI3Dr1i3Fwujmi6anp+c7\nnp6erurZo0RFCW4UjFIOpWx6QxEAuLjIrf4OHABmzxadhqj4iiygmzdvxooVK+Dh4YGXX365wOtZ\nWVlo27Ytrl+/rkgYDw8PlClTBgkJCfmOJyQk5I5QI7I0Go0GS7otsdkORXmVKSP3zQ0Pl++NElmy\nIgtoREQEIiIi8Mknn6B8+fIFXl+1ahU+//xzRa8p+/v748SJE/mOnTx5Ev7+/op9BpG55d1QZOs8\nPYH9+4F584D160WnITJekQU0KysLfn5+RZ4gODgYV69eNTrAs7t4Q0JCEBUVhUuXLgEAIiMjkZiY\niLFjxxp87tDQUJPtviIylK13KMqrRg15JTppEie4kHlotVrFN5YW+Ryon58fYmNjX3gSfd8HAJmZ\nmejQoQOSk5Nx6dIlNG7cGJUrV8auPH+Kdu3ahdmzZ8PZ2Rk5OTlYtGgRmjVrptf5dfgcKKnRujPr\nsOjYIhx/5zjs7exFxxHu+HG5b+7WrUCHDqLTkC1QsjYUWUDbtGmD2NjYArti80pPT4evry+OHDmi\nSCClsICSGtn6yLPCxMQAAwcC+/YBTZuKTkPWzmzjzLp164aRI0ciIyOj0NczMjIwatQo9OjRQ5Ew\nRNbO1keeFaZTJ2DZMnklevmy6DRE+ityBfrPP/+gU6dOuHXrFnr16oU6derA1dUVqampuHDhAiIi\nIlC7dm1ERUWpbj4nV6CkZhP2TUBqZqrNdigqzKpVwMyZwKFDQNWqotOQtTLbJVxALqKhoaFYtmwZ\nkvN0hHZ3d8fYsWMxbdo0OKiwNxcLKKlZ0pMk1A2ri+39t9tsh6LCLFgALF8OHDwIFLLxn6jYzFpA\ndbKzs3Hp0iU8evQI7u7u+Ne//gV7e/VugmABJbXjhqLCffKJfD/0p5+Al14SnYasjdnugeZlb2+P\n+vXro23btqhXr56qi6cOH2MhNePIs8LNng14ewO9egFPnohOQ9bC7I+xWDKuQMkScORZ4bKz5Qku\naWnyBJcSeo+9ICqakEu4loYFlCwFNxQVLiNDnuBSvry8wYgTXEgJLKB6YAElS8ENRc+Xlga8/jrQ\nvDmwcKE8X5SoOITcAyUi0+DIs+dzcQF27wa0WuDTT0WnIcqPBZRIBbih6PnKlJF35a5dC4SFiU5D\n9BQv4RKpBDcUFe36dblf7hdfAEFBotOQpeI9UD2wgJIl4oaiop0/L7f+W7kS6N5ddBqyRLwHqic+\nB0qWhiPPila/PhARAQwbJrf8I9IXnwM1AFegZKnYoejFfvwRCAyUZ4o2aSI6DVkSrkCJrBg3FL2Y\nvz/wzTfyZVxOcCFRuAIlUiFuKNLPd98Bs2YBhw8DVaqITkOWgJuI9MACSpaOG4r08+WXwIoV8j3R\ncvy7Br0AC6geWEDJ0rFDkf6mTgWio+UJLm5uotOQmvEeKJENYIci/X32GdCsGSe4kHmxgBKpGDcU\n6UejkbsUVagADBgAZGWJTkS2wKoLKJ8DJUun0WgQ1i0M02On417aPdFxVM3eXm73l54OjBgB5OSI\nTkRqwudADcB7oGRNuKFIf6mp8gSXFi2ABQs4wYXy4z1QIhuj61B07M9joqOoXqlS8gSXmBj53iiR\nqbCAElmA0k6lMa/zPG4o0pO7u9ylaPVqYOlS0WnIWrGAElmIoIZB3FBkgEqV5Edb5swBNm4UnYas\nEe+BElkQdigy3Llzcuu/774DunUTnYZEYyMFPbCAkrXihiLDHT0K9OwJbNsGtG8vOg2JxAKqBxZQ\nsla6DkU7+u9AyyotRcexGLoJLvv3A6+9JjoNicJduEQ2jBuKjOPvD3z9tXwZ98oV0WnIGrCAElkg\nbigyTt++wOzZ8nOif/4pOg1ZOl7CJbJQ3FBkvP/7P2DVKuDgQU5wsTW8hKsntvIja9bIsxECGwZi\nSswU0VEszocfyo3nu3UDHj8WnYbMga38DMAVKNkCbigyniQBo0cDV68Ce/YATk6iE5E5cAVKRAC4\noag4NBq5S1G5csDAgZzgQoZjASWycNxQZDx7e2DdOiAtjRNcyHC8hEtkBbihqHhSU4HOnYHWrYH5\n8znBxZqxkYIeWEDJ1kyMmoiUjBR2KDLSw4eAj488kHvqVNFpyFR4D5SICgj1CeXIs2LQTXD57ju5\n4QLRi7CAElkJbigqvkqV5FZ/n30GbNokOg2pHQsokRXhhqLi8/IC9u0D3n8fiIwUnYbUjPdAiawM\nNxQpQzfBZft2oF070WlIKdxEpAcWULJl3FCkjOhoIDhYvqzbuLHoNKQEbiIioiJxQ5EyOncGwsI4\nwYUKZ9UFlL1wyVZxQ5FyAgKAmTPlCS63b4tOQ8ZiL1wD8BIu2TpJkuCz2geBDQMxuvlo0XEs3rx5\nwJo18gSXsmVFpyFj8R6oHlhAiZ5uKDo75iw8XT1Fx7F4ISFAbCzw44+Am5voNGQM3gMlIr008myE\nMd5j0Pf7vkjPShcdx+LNmSNvJurTB0jnL6fN4wqUyMrlSDkI+D4AZZzKYGXPldCw0WuxZGfL01uy\ns4HNm4ESJUQnIkNwBUpEerPT2GFdn3X49c6vWHh0oeg4Fk83wSUlBRg1Sp4rSraJBZTIBpQqWQoR\nAyMw/5f5iLzC9jrF5egoN1i4cAH48EMWUVvFAkpkI6qVroatb23F0J1DceHuBdFxLF6pUsCePXID\n+i++EJ2GRGABJbIhbaq2wfzX56PHxh64n3ZfdByL5+EhdylasQL45hvRacjcuImIyAZN/nEyjt8+\njv3B++Fg7yA6jsWLiwM6dAC+/BLo3190GioKnwPVAwso0fNl52Sj9+beqOxWGV93/5o7cxVw9izg\n7y83W+jaVXQaeh7uwiWiYrG3s8f6f6/H4ZuHEXYiTHQcq9CwIbBzJzB4MPDzz6LTkDlwBUpkw+Ie\nxqHNyjZY12cdOtfqLDqOVYiKkosoJ7ioE1egRKQIL3cvbA7YjOAdwbh8/7LoOFahSxdgyRJ5gsvV\nq6LTkCmxgBLZOJ8aPvis42fosbEHHv7zUHQcq9CvHxAaygku1o6XcIkIADBh3wRcvHcRewL3oIQd\n+9MpYe5cYO1aTnBRE17CJSLFzX99PgBg0v5JgpNYj8mTge7d5a+UFNFpSGlWXUA5UJtIfyXsSmBz\nwGZEXY3Ct6e+FR3HasydCzRowAkuonGgtgF4CZfIOFfuX0G7Ve3wfcD38KnhIzqOVcjOBgYMkHvm\nbt4sN6S3JZIEHDoEtGkjfnoNL+ESkcm8UvYVrP/3evTf2h9xD+NEx7EK9vZAeDiQnGxbE1zS04HV\nq4EmTYCRI4GbN0UnUhYLKBEV4O/lj2kdpqHHxh5ITk8WHccq6Ca4nDsHfPSRdRfRxERg5kygenVg\n40Z5EPmFC4CXl+hkymIBJaJCvev9LjpU74DAbYHIzskWHccquLoCkZHAvn3yvVFrc+YMMHw4UKcO\n8NdfQEyM3FjijTcAOyusNlb4UyIiJWg0Gvy363+RlpmGKTFTRMexGh4eclH59lv5y9JlZwMREUDH\njnLziNq1gStXgGXLgPr1RaczLT7sRUTP5WDvgC39tqDlipaoV74ehr42VHQkq/Dyy0B0tDzBpXRp\ny5zg8vixfH9z8WLA3R2YOBEICABKlhSdzHxYQImoSGVdymLXwF3wWe2DVzxeQdtqbUVHsgq1agF7\n9wKdOwNlysgtAC1BfLzcqnDVKnnVuWaNvLvWFgf68BIuEb1Q3fJ1sab3GvTb0g83Ht0QHcdqNGoE\n7NgBDBoE/PKL6DTPJ0nA4cPyCrNZM/nYr78CW7YAbdvaZvEE+BwoERlgwZEFWHtmLQ4PPwzXkq6i\n41gN3QSX6Gi5qKpFRoZcJBctAh49At5/HxgyBHBzE53MeByorQcWUCLlSZKEd3a9gwf/PMC2t7bB\nTsOLWErZvBn44AO5b26tWmKz3LsnbwJaulTeUTthgtyO0Bp20rKRAhEJodFosLTbUtxLu4fpsdNF\nx7Eq/fsD06fL90T/+ktMhvPn5YYHr7wCxMXJ92hjYoAePayjeCqNm4iIyCCOJRyx7a1tuTtzAxsG\nio5kNUaNAh4+lMegHTwoP/Jiajk58iXkhQuBs2eBMWOAP/4AKlQw/WdbOl7CJSKj/J74Ozqt7YQ9\ngXvQonIL0XGshiTJnYoOH5bvibqa6FZzaqo8am3xYsDZWb5MO2CA3DHJGPfS7iH2eixirsfA38sf\nAfUClA2sEN4D1QMLKJHp/XDpB4yNHItj7xxD5Zcqi45jNSQJGDFC7h27a5fxRa0wt24BYWHAihVA\n+/Zy4ezQwfCdtKkZqTh08xB+jPsRMddjcO3BNbSv3h6danZC7zq94eWuzr59LKB6YAElMo8vDn+B\nrRe24uCwg3BxcBEdx2pkZcn3Re3sgE2bij/B5dgx+TLt/v3yjt/33jNss1JmdiaO3T6GmLgYxFyP\nwa93fkXTSk3h7+WPTjU7oUXlFnCwdyheSDNgAdUDCyiReUiShEE7BiEzJxOb+m6CxlYfCjSB9HR5\n92vNmnLbP0N/aTMz5Qb2ixbJDd7HjweGDZO7H71IjpSDs4lnEXNdLpiHbhxCbY/a6OTVCZ1qdkL7\nau1RqmQp435iArGA6oEFlMh8nmQ9gc9qH7z5ypuY5jNNdByrkpIC+PsDPj76N6B/8ABYvlzuGOTl\nJV+m7dnzxavYuIdxiImLwY/Xf0Ts9ViUdiqNTjU7wd/LH341/FDWpWzxf0KCsYDqgQWUyLzuPL6D\nlitaYmGXhehbr6/oOFbl/n35PuXgwcDkyc9/3x9/yJuCNm6UHz2ZMAFo2vT5709MScRP13/KXWU+\nyXqCTjXlFWYnr06oVrqa8j8ZwZSsDXyMhYgUUcmtEnYO2Iku4V3g5e6FJpWaiI5kNcqWle9dtm8v\nP9oyYsTT1yQJ+PFH+TLtyZPyozAXLgCVKhU8z+P0xzhw44BcMONicDPpJnxq+KBTzU74oPUHqFuu\nLi/BG4ArUCJS1JbzWzBp/yQcH3EcFV0rio5jVa5elS/lLloEvPkmEB4urzg1Gnm1GRgoP5Kik56V\njqN/HkXM9Rj8GPcjfk/8HS0qt8jd+NPs5WYoYWdb6yhewtUDCyiRODO1M7Hv2j7EDomFUwkn0XGs\ngiRJeJL1BMdOpyBgYCpySqSg3mup6NUvBa/UT0FaZipSMlKQkpGCpPQkHP3zKH659Qvqlqubu/Gn\nbdW2cHZwfvGHWTEWUD1oNBrMmDEDvr6+8PX1FR2HyKbkSDkYsHUAHEs4Ym3vtVZzWVCSJEiQkCPl\n5PuSpILHsqVspGakIjVPYUvNyPPv/zte2OvPO+Zg5wDXkq5wsnOFs30peLi5wrWkK0o5lJL/WVL+\np2tJVzSt2BS+NXzh7uwu+pdNFbRaLbRaLWbOnMkC+iJcgRKJlZaZhvar2iM1IxUl7eUpyxLy/5nM\n+2c072vP/tktzmv6FLvc1wp5f97vkyBBAw3sNHaw09hBo3n674V9FVbYChxzeMHr/ztWqmQpm7vc\nagpcgeqBBZRIvNSMVFx9cDXfsbyrUQ00ih9/9jV7jb1eBS9vYcx3PM/3aKCxmtW0rWIB1QMLKBER\nPYvjzIiIiARjASUiIjICCygREZERWECJiIiMwAJKRERkBBZQIiIiI7CAEhERGYEFlIiIyAgsoERE\nREZgASUiIjICCygREZERWECJiIiMwAJKRERkBBZQIiIiI7CAEhERGYEFlIiIyAgsoEREREZgASUi\nIjICCygREZERWECJiIiMwAJKRERkBBZQIiIiI7CAEhERGYEFlIiIyAgsoEREREZgASUiIjICCygR\nEZERSogOYKg9e/YgKioKpUqVQo0aNTBq1CjRkYiIyAZpJEmSRIfQV0pKCpo1a4aLFy/Czs4Obdq0\nQXh4OLy8vAq8V6PRwIJ+akREZAZK1gaLuoR79OhR1KxZE3Z2cmxvb2/s27dPcCoiIrJFFlVA7969\nCzc3t9wfv/TSS7h7967AREREZKssqoBWqFABjx8/zv1xUlISKlSoIDARERHZKrMX0IyMDISEhMDB\nwQE3b94s8HpERARatGgBHx8ftGvXDqdOncp9rWXLlrh+/Tqys7MBACdOnEDXrl3Nll0pWq1WdIQi\nqTkfsxmH2YzDbMZRczYlmbWAxsfHw9fXFwkJCblFMK9Tp04hKCgIa9euxYEDBzBlyhR06dIFiYmJ\nAABXV1csWLAA48ePx0cffYRhw4ahZs2a5vwpKELtv7nUnI/ZjMNsxmE246g5m5LMWkBTU1MRHh6O\nYcOGFfr6nDlz0LVrV9SpUwcA0L17d3h6eiIsLCz3Pd27d0dYWBjmzZuHkSNHKpbN0P/gRb2/sNeK\n8xuK2YzDbMZRczZDv5/ZjPt+ZtOPWQto/fr14eXl9dwtxDExMWjevHm+Y97e3oiOjjZ5NjX/T4PZ\njMNsxlFzNkO/n9mM+35m05MkQGxsrKTRaKQbN27kHrt//76k0WikNWvW5HvvRx99JFWoUMHgzwDA\nL37xi1/84leBL6WophNRamoqAMDR0THfcUdHR6SlpRl8PolNFIiIyIRU8xhLqVKlAADp6en5jqen\np+e+RkREpBaqKaAeHh4oU6YMEhIS8h1PSEhArVq1BKUiIiIqnGoKKAD4+/vjxIkT+Y6dPHkS/v7+\nghIREREVTug90GfvU4aEhMDX1xeXLl1CnTp1EBkZicTERIwdO9Ykn79gwQLExcWhfPnyuHnzJpYt\nW4YSJcTfFo6Pj4e/vz+qVq0KQG5h2K9fP8yYMUNwMtnFixexfv16vPTSSzhw4ADmzJmDRo0aiY4F\nAGjVqhWcnZ0BAG5uboiIiBCcKL+7d+/itddew/Tp01UzSeiff/7BgAED0KZNG9y5cwcajQYLFy4U\nHSvXuXPnMGfOHDRt2hRXrlxB8+bN8c4774iOlSsuLg6TJk2Ck5MTNm7cKDqO6idWqe3XCyjG7zHF\ntr+yV9kAAAqnSURBVCPpISMjQ2rVqpVUr149yc7OTmrSpIn05ptv5ntPRESE5O3tLXXo0EFq166d\ndPLkSZNkuXv3ruTh4ZH74169eknbtm0zyWcZ6v79+1JsbGzuj8eMGSPFx8eLC5RHVlaW5OPjI2Vl\nZUmSJEm3b9+W7t+/LzjVU6GhoaIjPFdOTo40cuRIqVevXtI333wjOk6u1NRUacWKFbk/rlOnjvT7\n778LTJSfVquVDhw4IEmSJGVmZkru7u7So0ePBKd6auPGjdKyZcukAQMGiI4iPX78WHr11Vel7Oxs\nSZIkqXXr1tK1a9cEp8pPTb9eOsb+HjPrcsvBwQFHjhwp8j09evRAjx49TJ7FyckJjo6OePz4Mdzc\n3HD//n1UrFjR5J+rDw8PD/j6+gIAHj58iEePHqF69epiQ/3P8ePHAQBLly5FWloaypcvj+HDhwtO\n9dTZs2cxb948/PPPP2jbtq2qLv8vWrQIgwcPxooVK0RHycfFxQVvv/02ACA5ORmZmZmoXLmy4FRP\n+fj45P67JElwcHBQxZUinQEDBmD16tWiYwB4/sSqd999V3Cyp9T066Vj7O8x9fwuNDNXV1fMmzcP\ngwYNQtmyZdGiRQu0adNGdKwCvvvuu9z/uanBzZs3ceLECWzbtg1ly5bFgAED4Obmhn79+omOBgCY\nPHkyvL29kZ2djXbt2sHDwwNNmzYVHQvHjh1Deno62rZti+XLl4uOU6gNGzZgxYoV+Pjjj+Hh4SE6\nTqG+/vprTJ06lTvzn4MTq4rPkN9jqtpEZErffvst3njjjdw2gqdPn8bChQuxc+dOrFy5Ejdv3sSm\nTZtUkU0nJycHsbGx6NSpk5BcQMFsL730EmrUqIGyZcsCANq0aYODBw+qIhsg/40bAOzt7dGqVSvT\ndiExIFtERAQkScLcuXNx7tw5REVFYcOGDarIphMYGIiffvoJW7duxc6dO4VkA56fb9u2bUhKSsL7\n778vKNnzs2k0GkGJ8rOUiVVq+fV6lsG/x0x6YVlh6enp0uTJk6USJUrk62Kk88MPP+TeP23btm2R\n9093794tde7cOffH48aNkxYsWKCKbDoRERHS0qVLjc5kimz379+XqlSpIqWnp0uSJEkffPCB9N//\n/lcV2S5duiStXLky98c9evSQfvjhB1Vky2vo0KHFvgeqZLYLFy5Ix48fz/3x2LFjpS+//FI1+SRJ\nktavXy/Nnz9fkiRJOn36tHT58mXVZJMkSVq1apVi9/SKk093D1S3R6FVq1ZSXFycIrmUyKej5K+X\nUrmM+T1mMQX0+vXrUuvWraUhQ4YUaAMoSZJ08uRJydXVVbp48aIkSXKBLFu2rJSQkFDo+bKysqSR\nI0dKH330kTRjxgxp4MCBUnJysiqy6fTr109KTU01KpMps23btk0aNWqUNHv2bGnMmDFSRkaGKrL9\n9ddfUp8+faTZs2dLH374oRQSEmJULlNk01m1apXUtGlTqXfv3lJMTIwqsl27dk0KDg6WvvjiC2nq\n1KlSUFCQ0X8WTJHvp59+kkqXLi35+flJvr6+UoMGDXI3fIjOJkmStGvXLqlv375S48aNpcWLFxuV\nS8l8u3fvlt59913pww8/lJYtW1asPKbIp+Svl1K5jP09ZjEF9Ny5c9K1a9ckrVZb6C9Q3759pYCA\ngHzH6tWrJ02bNo3ZmI3ZzJRN7fnUnI35LC+XxdwDVfMkF2ZjNmZ7Ss351JwNYD5Ly2UxBbQoDx48\nQFJSEipVqpTvuKenJ+Li4gSlkjGbcZjNOGrOBqg7n5qzAcxnLFPmsooCqvQkFyUxm3GYzThqzgao\nO5+aswHMZyxT5rKKAqrmSS7MZhxmM46aswHqzqfmbADzGcuUuayigKp5kguzGYfZjKPmbIC686k5\nG8B8xjJlLqsooIC6J7kwm3GYzThqzgaoO5+aswHMZyyT5SrWHl4BYmNjJY1GU6C5+qlTpyQ3N7fc\n53z27NkjlS1bVkpMTGQ2ZmM2M2dTez41Z2M+y8llMQVUTZNcmI3ZmM0y86k5G/NZXi6NJD3nwRki\nIiJ6Lqu5B0pERGROLKBERERGYAElIiIyAgsoERGREVhAiYiIjMACSkREZAQWUCIiIiOwgBIRERmB\nBZTIzOLj4+Hn5wcnJyfUrFkTfn5++b6cnZ2L/H47Ozs0adIEfn5++PvvvwEAvr6+qFixIuzs7HD0\n6NFCv++PP/6AnZ0datasiUGDBr0w519//YV27drBzs4OXl5e+Oqrr/K9PmPGDFSpUgWNGzfGzz//\njIkTJ+bmX7NmjZ6/GkQWrNi9jIjIKDVq1JBmzpxZ4HjNmjWL/D6NRiMdOHCgwPGhQ4dKJUuWlPr2\n7Vvo940cOVIqWbJkoZ9ZlDp16kjdunUr9LXWrVtL9+/fz3esRo0a0po1awz6DCJLxBUokcoUZ/XW\nv39/7Ny5E3FxcfmO3717Fzdu3MDLL79s8DkHDhyI6Oho3L17N9/xP/74A2XLloWHh4fReYksGQso\nkUroLu22b9/e6HMEBwejfPnyWLBgQb7jYWFhGDNmTKHfc/XqVbzxxhto1aoV2rdvj/feew9paWm5\nrwcGBiIrKwubNm3K933r169HcHCw0VmJLB0LKJFAksKzHBwdHTFu3DisXr0aDx8+BAA8efIE0dHR\n6NmzZ4H3Z2RkoGvXrujRoweOHj2KAwcO4M6dO/mKbe3ateHt7Y3169fn+97du3ejV69eiuYnsiQs\noESCSJKE1atX524eGjhwYLHPqdFoMGbMGEiShKVLlwIA1q5di+DgYGg0mgLv37BhAxITEzF69GgA\n8galYcOGITw8HMnJybnvCwwMxPHjx3Ht2jUAwLFjx9CwYUM4OTkVOzORpWIBJRJEo9Fg2LBhiI2N\nRWxsLDZt2lRokTOUh4cHhg4diiVLluDJkydYu3Ythg0bVuh7z549i5ycHHTq1Cm3kH/22WeoXr06\n/vrrr9z3DRgwAP/fzh3DHA6GcQD/X3N8i0gMYkToyGamOzHYSmqxCYlNYmIgMZkkGoPFYicsGquN\nxWAwiKFiMRhExDdcSOS+70uuzvXc/X/j27dPnzRpnzxv31QQhFsX2u12kUwmH86V6JV9NzsBIvrB\n7XZjPB4/FOO6JFwoFNBqtZBKpRCJRL7sFB0OBzRN+zKuy+WCJEnodrsolUqYTCZoNBoP5Ur06tiB\nEv1lBoMBDoeDoXOvHazf70csFkO/30cul/t0fjAYhK7r2O/3t7Hz+Yx0Oo3j8Xg3V5ZlLJdL1Go1\nSJIEQeDrg/5vfAKITHK5XD7cRFSv17Hb7R6OV6/X0ev14HK5Pp0jyzI8Hg+q1eptrNls4nQ64e3t\n7S5+IpGA1WpFpVLh8i0RuIRL9MetVivIsgxd19FutzEcDu+OLxaLX/4WGo/HMZ1OMZvNkM1mkclk\nIIoiRFEEAKzXayiKgu12i06ng81mA1VVYbFYMBqNkM/nEQgE4HQ64fP5oKrqT9ew2+2IRqOYz+cI\nhULGbwDRP+Lb5XfvoyeipxIEAZqmIRwOm53Kh7xeL8rlMhRFMTsVoqfiEi7Ri3G73SgWi5AkCbqu\nm53OzfVfuBaLBTabzex0iJ6OHSgREZEB7ECJiIgMYAElIiIygAWUiIjIABZQIiIiA1hAiYiIDHgH\nXsPgcMrwDDAAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The data sources are caches, which means that subsequent requests for \n", - "the same data are very fast! " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%time sds.reaction('U238', 'fiss')\n", - "print\n", - "%time sds.reaction('U238', 'fission')\n", - "print\n", - "%time sds.reaction('U238', 'fiss')\n", - "print" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "CPU times: user 23.2 ms, sys: 163 \u00b5s, total: 23.3 ms\n", - "Wall time: 21.7 ms\n", - "\n", - "CPU times: user 40 \u00b5s, sys: 2 \u00b5s, total: 42 \u00b5s\n", - "Wall time: 46 \u00b5s\n", - "\n", - "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", - "Wall time: 30 \u00b5s\n", - "\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 7 - } - ], - "metadata": {} - } - ] -} diff --git a/_downloads/half_life_plot.ipynb b/_downloads/db986a0fe4b02b9f37d406d4c0313e51/half_life_plot.ipynb similarity index 100% rename from _downloads/half_life_plot.ipynb rename to _downloads/db986a0fe4b02b9f37d406d4c0313e51/half_life_plot.ipynb diff --git a/_downloads/09-outro.ipynb b/_downloads/e06bd4fd41ee69c9fa2813a237022876/09-outro.ipynb similarity index 100% rename from _downloads/09-outro.ipynb rename to _downloads/e06bd4fd41ee69c9fa2813a237022876/09-outro.ipynb diff --git a/_downloads/discretized_teapot.ipynb b/_downloads/ea18dc0f6f80c1261f12aecaa2d0d4d8/discretized_teapot.ipynb similarity index 96% rename from _downloads/discretized_teapot.ipynb rename to _downloads/ea18dc0f6f80c1261f12aecaa2d0d4d8/discretized_teapot.ipynb index abedd490..43815aa0 100644 --- a/_downloads/discretized_teapot.ipynb +++ b/_downloads/ea18dc0f6f80c1261f12aecaa2d0d4d8/discretized_teapot.ipynb @@ -16,7 +16,7 @@ "from os import path, getcwd, remove\n", "from numpy import linspace, bitwise_or\n", "\n", - "from pyne.mesh import Mesh, IMeshTag\n", + "from pyne.mesh import Mesh, NativeMeshTag\n", "from pyne.dagmc import load, discretize_geom\n", "\n", "from yt.config import ytcfg; ytcfg[\"yt\",\"suppressStreamLogging\"] = \"True\"\n", @@ -83,7 +83,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "m.vols = IMeshTag(1, float)\n", + "m.vols = NativeMeshTag(1, float)\n", "mask = bitwise_or(results['cell'] == 1, results['cell'] == 2)\n", "m.vols[results['idx'][mask]] = results[mask]['vol_frac']" ], diff --git a/_downloads/enrichment_mstar_vs_flowrate.ipynb b/_downloads/enrichment_mstar_vs_flowrate.ipynb deleted file mode 100644 index 45616be1..00000000 --- a/_downloads/enrichment_mstar_vs_flowrate.ipynb +++ /dev/null @@ -1,104 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:47a933dcaf8b1b21b9f5b0280cdc63e7004ce456e4dcb8ae1b8e30a9b314e113" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Multicomponent Erichment\n", - "\n", - "This demonstrates how the total normalized flowrate $L_t/F$ in \n", - "a matched abundance ratio enrichment cascade changes as a function \n", - "of the key mass $M^*$, an optimization parameter." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "import numpy as np\n", - "import matplotlib\n", - "matplotlib.rc('font', family='serif', size=16)\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "from pyne import enrichment as enr\n", - "\n", - "NPOINTS = 50\n", - "duc = enr.default_uranium_cascade()\n", - "mstars = np.linspace(235.1, 237.9, NPOINTS)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "start = time.time()\n", - "flowrates = []\n", - "for mstar in mstars:\n", - " duc.Mstar = mstar\n", - " casc = enr.solve_symbolic(duc)\n", - " flowrates.append(casc.l_t_per_feed)\n", - "print \"calc took {0:.3g} ms.\".format((time.time()-start) * 1e3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "calc took 5.01 ms.\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "fig, ax = plt.subplots(1, 1, figsize=(10,6))\n", - "plt.plot(mstars, flowrates, 'r-o', label='$L_t/F$')\n", - "plt.xlabel('$M^*$ [amu]')\n", - "plt.ylabel('Total per Feed Flow Rate [unitless]')\n", - "lgd = plt.legend(loc=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAGCCAYAAABpSl5WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//HXhyTsW1TQKoqSomILUkXB5YZYNfEncG+t\ntb1trWurtypoK2IFo1RNrZbWCm3t4lK0vbdXbW+txEr0SohFcakKirhFwAUlolCgypLw+f1xTriT\nZGYyCbOcSd7Px2Meznzne875zHESPvmu5u6IiIiISP7qkesARERERGT3KKETERERyXNK6ERERETy\nnBI6ERERkTynhE5EREQkzymhExEREclzhZk8uZn1AZ4CFrr7FWa2B3Aj8CYwEpjp7g1h3SuAAUAx\nUOPuD4blY4GLgFXAUGC6uzdlMm4RERGRfJLRhA64AXgOaF7s7gfAI+5+v5lNBuYAZ5nZeKDM3SeZ\nWQGw0sxqgS3APcCJ7t5gZnOAs4E7Mxy3iIiISN7IWJermZ0J/I2gZa3ZqcCT4fMngEnh88nha8LW\nt5VAGTAC6NPcigcsiTlGRERERMhQQmdmhwGj3P1/AAsfEHSZbg6fbwKKwxa5IQStccS8NzQs3xxT\nvjksFxEREZFQprpcvwBsNbMrgeOAnmZ2KdAADCRI2AYCG9y9ycwaCMbPNRsIrAvrty5vQERERER2\nyUhC5+4/aH4eTozo5+63mtmhwDHAfQSJ3oKwWjVwTVi/CBgF1BG0yH1iZnu7+7pWx7RgZtqUVkRE\nRPKGu1v7tVJj7pnLg8zsi8DFQBHwC2AhcBOwBigBrnT3D8K60wlmuBYDD7n7grD8cGBqeEwxwSzX\nnXGu5Zn8LNLW7NmzmT17dq7D6FZ0z7NP9zz7dM+zT/c8+8wsrQldRme5uvufgD+1Kr4gQd05CcqX\nAd9Mc2ht1FVXUzN3LoXbttHYqxfl06ZROknzL0RERCT6Mr1sSV6oq65m4aWXUlVfv6tsVvhcSZ2I\niIhEnXaKAGrmzm2RzAFU1dfzyLx5OYooP5SVleU6hG5H9zz7dM+zT/c8+3TP858SOqBw27a45QVb\nt2Y5kvyiXwDZp3uefbrn2ad7nn265/lPXa5AY69eccubevfOciQiIiL5wyxtY/q7tGxM2lRCB5RP\nm8as+voW3a4zS0o4ZerUHEYlIiISfVphIrlsJb0ZXbYkm3Z32ZK66moemTuXgpoamioqOHnqVE2I\nEBERSSJceiPXYURaonuU7mVLlNC11q8fvP8+DBjQfl0REZFuTAld+7KV0GlSRGuDBsE//pHrKERE\nRERSpoSuNSV0IiIikmeU0LWmhE5ERKTb27x5M6+++mquw0iZErrWlNCJiIh0GU8//TQVFRVMmDCB\nX/3qV3z44YcpHXfvvffSv3//Xa+fffZZTj31VI455hjuuOMObr/9diorKxk6dGimQu8QLVvSmhI6\nERGR3ZKO/dHTtcf60UcfTZ8+fTjrrLP4+te/nvJxb7/9Nvvtt9+u1+PGjaNv375MmTKF888/f1d5\nz549OxxTJiiha00JnYiISKelY3/0dO6xvnPnTurq6vjFL36R8jGvvPIKhx56aIsyd2fx4sVcffXV\nAHz00UfsscceLZK+XFKXa2uDByuhExER6aR07I+ezj3Wn3/+efbaay/23XfflI954IEH+OIXv9ii\nbPny5XzyySeMGTMGd+e+++4D4LzzzutwTJmgFrrW1EInIiLSaQn3R1+4EFLcNSFRctKZPdYXLVrE\n5z//+RZl7p5wB4empiZ27NjRpit10aJFDB8+nLvvvpvHHnuMKVOmdDiWTFILXWtK6ERERDot4f7o\nFRXgntKjsbw8/jk6scf6okWLOOGEE1qUzZ8/H4BbbrmF999/v8V7jz76KOVxrr9o0SLOPfdczjnn\nHC655BImTpzY4VgySQlda4MGwcaNuY5CREQkL5VPm8askpIWZTNLSji5A/ujp+McAI2NjSxZsoSy\nsrJdZX/4wx847LDDAHjttdfYZ599WhyzdOlSjj766BZlO3fu5PHHH9/VKnf00UdHZnZrM3W5tqYW\nOhERkU5rnrRQOW8eBVu30tS7N6d0cH/0dJzjhRde4J577gFgwYIF7Nixg7///e88/fTTLFu2jMcf\nf5zVq1ezdOlSJkyYAMDGjRspLi5ucZ5ly5bx+9//nq1bt1JbW8vAgQP51Kc+lXIc2aK9XFurrYVr\nroG6ut0/l4iISBeWz3u5rlmzhj/84Q9ceeWVu8p+85vfMGXKlDatdrtDe7nmilroREREurwlS5Zw\n3HHH8dZbb+0qW7t2bVqTuWxSQteaEjoREZEur2/fvrz33nvs3LkTgDfffJMxY8bkOKrOU5drax9+\nCJ/+NGzYsPvnEhER6cLyucs1W9TlmisDB8KmTcHUaREREZE8oISutaIi6NMHtmzJdSQiIiIiKVFC\n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\nOncCIQ51/W2tU1MAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - } - ], - "metadata": {} - } - ] -} diff --git a/_downloads/material_library.ipynb b/_downloads/material_library.ipynb deleted file mode 100644 index b4108724..00000000 --- a/_downloads/material_library.ipynb +++ /dev/null @@ -1,175 +0,0 @@ -{ - "metadata": { - "name": "" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Material Library\n", - "================\n", - "\n", - "PyNE comes with a pre-built library of materials Most of this data comes from [a materials compendium by PNNL](http://www.pnnl.gov/main/publications/external/technical_reports/PNNL-15870Rev1.pdf), which is gives canonical values for normal materials. This notebook demonstrates how to load and use this data via the `MaterialLibrary` class. First the imports!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# the path to the nuc_data.h5 database\n", - "from pyne import nuc_data\n", - "\n", - "# the material library class itself\n", - "from pyne.material import MaterialLibrary" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `MaterialLibrary` class is a dict-like class which maps string names to `Material` objects. We can instantiate this class directly from the database as follows." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "mats = MaterialLibrary(nuc_data, datapath='/material_library/materials', nucpath='/material_library/nucid')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also take a gander at the keys in this dictionary." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "mats.keys()[:10]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - "['Mercury',\n", - " 'Oil, Crude (Heavy, Qayarah, Iraq)',\n", - " 'Sm',\n", - " 'Lead',\n", - " 'Concrete, M-1',\n", - " 'Sc',\n", - " 'Iron, Armco Ingot',\n", - " 'Freon-13',\n", - " 'Concrete, Luminite-colemanite-baryte',\n", - " 'Air (dry, near sea level)']" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And the values too!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "mats['Steel, Stainless 440']" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "pyne.material.Material({60120000: 0.12366250000000002, 60130000: 0.0013375000000000004, 140280000: 0.11527875000000001, 140290000: 0.00585625, 140300000: 0.003865000000000001, 150310000: 0.12500000000000003, 160320000: 0.11873750000000001, 160330000: 0.0009375000000000001, 160340000: 0.005312500000000001, 160360000: 1.2500000000000002e-05, 240500000: 0.00543125, 240520000: 0.10473625000000002, 240530000: 0.011876250000000001, 240540000: 0.002956250000000001, 250550000: 0.12500000000000003, 260540000: 0.007306250000000001, 260560000: 0.11469250000000002, 260570000: 0.002648750000000001, 260580000: 0.0003525, 420920000: 0.0181625, 420940000: 0.011437500000000003, 420950000: 0.019800000000000005, 420960000: 0.020837500000000005, 420970000: 0.012000000000000002, 420980000: 0.030487500000000004, 421000000: 0.012275000000000003}, 1.0, 7.8, -1.0, {\"name\":\"Steel, Stainless 440\"})" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can do everything you normaly would with these materials, like print them out in MCNP form!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print mats['Steel, Stainless 440'].mcnp()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "C name: Steel, Stainless 440\n", - "C density = 7.8\n", - "m?\n", - " 6012 -1.2366E-01\n", - " 6013 -1.3375E-03\n", - " 14028 -1.1528E-01\n", - " 14029 -5.8563E-03\n", - " 14030 -3.8650E-03\n", - " 15031 -1.2500E-01\n", - " 16032 -1.1874E-01\n", - " 16033 -9.3750E-04\n", - " 16034 -5.3125E-03\n", - " 16036 -1.2500E-05\n", - " 24050 -5.4313E-03\n", - " 24052 -1.0474E-01\n", - " 24053 -1.1876E-02\n", - " 24054 -2.9563E-03\n", - " 25055 -1.2500E-01\n", - " 26054 -7.3063E-03\n", - " 26056 -1.1469E-01\n", - " 26057 -2.6488E-03\n", - " 26058 -3.5250E-04\n", - " 42092 -1.8163E-02\n", - " 42094 -1.1438E-02\n", - " 42095 -1.9800E-02\n", - " 42096 -2.0838E-02\n", - " 42097 -1.2000E-02\n", - " 42098 -3.0488E-02\n", - " 42100 -1.2275E-02\n", - "\n" - ] - } - ], - "prompt_number": 5 - } - ], - "metadata": {} - } - ] -} diff --git a/_downloads/mstar_vs_flowrate.ipynb b/_downloads/mstar_vs_flowrate.ipynb deleted file mode 100644 index 5628e51c..00000000 --- a/_downloads/mstar_vs_flowrate.ipynb +++ /dev/null @@ -1,87 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:970199470b63a24c1a9ecbd9082a91a8a4f771ef2702e72592934ed9e66d2066" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import pyne.data\n", - "from pyne import enrichment as enr\n", - "\n", - "matplotlib.rc('font', family='serif', size=16)\n", - "\n", - "duc = enr.default_uranium_cascade()\n", - "minMstar = pyne.data.atomic_mass(duc.j) + 0.1\n", - "maxMstar = pyne.data.atomic_mass(duc.k) - 0.1\n", - "mstars = np.linspace(minMstar, maxMstar)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "-c:4: QAWarning: pyne.nucname is not yet QA compliant.\n", - "-c:4: QAWarning: pyne.data is not yet QA compliant.\n", - "-c:5: QAWarning: pyne.material is not yet QA compliant.\n", - "-c:5: QAWarning: pyne.enrichment is not yet QA compliant.\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "lofs = []\n", - "for mstar in mstars:\n", - " duc.Mstar = mstar\n", - " casc = enr.solve_symbolic(duc)\n", - " lofs.append(casc.l_t_per_feed)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "fig, ax = plt.subplots(1, 1, figsize=(10,6))\n", - "plt.plot(mstars, lofs, 'r-o', label='$L_t/F$')\n", - "plt.xlabel('$M^*$ [amu]')\n", - "plt.ylabel('Total per Feed Flow Rate [unitless]')\n", - "lgd = plt.legend(loc=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nkqwJSvD8aAwAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 3 - } - ], - "metadata": {} - } - ] -} diff --git a/_images/math/0098a67a20b9db7f683701567e477fa98375e281.png b/_images/math/0098a67a20b9db7f683701567e477fa98375e281.png deleted file mode 100644 index c95a3fa0..00000000 Binary files a/_images/math/0098a67a20b9db7f683701567e477fa98375e281.png and /dev/null differ diff --git a/_images/math/017ec021546a293f26f057dd65848cc42b5758e0.png b/_images/math/017ec021546a293f26f057dd65848cc42b5758e0.png deleted file mode 100644 index 4b3acb00..00000000 Binary files a/_images/math/017ec021546a293f26f057dd65848cc42b5758e0.png and /dev/null differ diff --git a/_images/math/050b75980d00e72d3a1d37cb7d030ca5f0eb012c.png b/_images/math/050b75980d00e72d3a1d37cb7d030ca5f0eb012c.png deleted file mode 100644 index 051e4ca4..00000000 Binary files a/_images/math/050b75980d00e72d3a1d37cb7d030ca5f0eb012c.png and /dev/null differ diff --git a/_images/math/06087aec794484d3bfd55826bb6f580454cfd0f7.png b/_images/math/06087aec794484d3bfd55826bb6f580454cfd0f7.png deleted file mode 100644 index aba5dfdc..00000000 Binary files a/_images/math/06087aec794484d3bfd55826bb6f580454cfd0f7.png and /dev/null differ diff --git a/_images/math/06e1c933af0d5fcfd95eae0867c3b55d77a9715b.png b/_images/math/06e1c933af0d5fcfd95eae0867c3b55d77a9715b.png deleted file mode 100644 index 137def17..00000000 Binary files a/_images/math/06e1c933af0d5fcfd95eae0867c3b55d77a9715b.png and /dev/null differ diff --git a/_images/math/07278e475bbd33b5827cc79eb2f6ccf633e73bcd.png b/_images/math/07278e475bbd33b5827cc79eb2f6ccf633e73bcd.png deleted file mode 100644 index 21e9e6de..00000000 Binary files a/_images/math/07278e475bbd33b5827cc79eb2f6ccf633e73bcd.png and /dev/null differ diff --git a/_images/math/097a1796f918527a18068f879d1619d4c0452e46.png b/_images/math/097a1796f918527a18068f879d1619d4c0452e46.png deleted file mode 100644 index 92f608d8..00000000 Binary files a/_images/math/097a1796f918527a18068f879d1619d4c0452e46.png and /dev/null differ diff --git a/_images/math/0a93664afe9a571efe03d2f32ba4593e94492813.png b/_images/math/0a93664afe9a571efe03d2f32ba4593e94492813.png deleted file mode 100644 index 19274139..00000000 Binary files a/_images/math/0a93664afe9a571efe03d2f32ba4593e94492813.png and /dev/null differ diff --git a/_images/math/0acafa529182e79b4f56165ec677554fba7fcf98.png b/_images/math/0acafa529182e79b4f56165ec677554fba7fcf98.png deleted file mode 100644 index 0af1ede4..00000000 Binary files a/_images/math/0acafa529182e79b4f56165ec677554fba7fcf98.png and /dev/null differ diff --git a/_images/math/0d51378f3d796c09416115853f8fabf01266f008.png b/_images/math/0d51378f3d796c09416115853f8fabf01266f008.png deleted file mode 100644 index ffcaf883..00000000 Binary files a/_images/math/0d51378f3d796c09416115853f8fabf01266f008.png and /dev/null differ diff --git a/_images/math/0d7c7a714f4dbe8a551ba3250d5f9a96d150de63.png b/_images/math/0d7c7a714f4dbe8a551ba3250d5f9a96d150de63.png deleted file mode 100644 index b3e7a5eb..00000000 Binary files a/_images/math/0d7c7a714f4dbe8a551ba3250d5f9a96d150de63.png and /dev/null differ diff --git a/_images/math/0e5d05c237d7b1c68c79af6d94ab5b7e2320bc5e.png b/_images/math/0e5d05c237d7b1c68c79af6d94ab5b7e2320bc5e.png deleted file mode 100644 index 5ea16f49..00000000 Binary files a/_images/math/0e5d05c237d7b1c68c79af6d94ab5b7e2320bc5e.png and /dev/null differ diff --git a/_images/math/0ebb67342b546ca42a1c634b1ef03c893c4cdedb.png b/_images/math/0ebb67342b546ca42a1c634b1ef03c893c4cdedb.png deleted file mode 100644 index 7c25bd71..00000000 Binary files a/_images/math/0ebb67342b546ca42a1c634b1ef03c893c4cdedb.png and /dev/null differ diff --git a/_images/math/111d9757d6fb66f085e15875d226ac21f3bff4dd.png b/_images/math/111d9757d6fb66f085e15875d226ac21f3bff4dd.png deleted file mode 100644 index 93cc7349..00000000 Binary files a/_images/math/111d9757d6fb66f085e15875d226ac21f3bff4dd.png and /dev/null differ diff --git a/_images/math/112f05b540c6b87e532679533ed4f162fb883f84.png b/_images/math/112f05b540c6b87e532679533ed4f162fb883f84.png deleted file mode 100644 index 9e3ecef1..00000000 Binary files a/_images/math/112f05b540c6b87e532679533ed4f162fb883f84.png and /dev/null differ diff --git a/_images/math/11fb6e4d4fb9a81c4a653f0c587dc97203b585d1.png b/_images/math/11fb6e4d4fb9a81c4a653f0c587dc97203b585d1.png deleted file mode 100644 index 60c12fa4..00000000 Binary files a/_images/math/11fb6e4d4fb9a81c4a653f0c587dc97203b585d1.png and /dev/null differ diff --git a/_images/math/120e21f75fe5307f451d3c7fcc1b1eb35914fa50.png b/_images/math/120e21f75fe5307f451d3c7fcc1b1eb35914fa50.png deleted file mode 100644 index 20157eda..00000000 Binary files a/_images/math/120e21f75fe5307f451d3c7fcc1b1eb35914fa50.png and /dev/null differ diff --git a/_images/math/14ebce7d0454f2c50a5d775af18c93958cc1a157.png b/_images/math/14ebce7d0454f2c50a5d775af18c93958cc1a157.png deleted file mode 100644 index 1c89a204..00000000 Binary files a/_images/math/14ebce7d0454f2c50a5d775af18c93958cc1a157.png and /dev/null differ diff --git a/_images/math/1793d818d14cd3c4bd491b812e3b25edef8526d1.png b/_images/math/1793d818d14cd3c4bd491b812e3b25edef8526d1.png deleted file mode 100644 index 5c5f16c3..00000000 Binary files a/_images/math/1793d818d14cd3c4bd491b812e3b25edef8526d1.png and /dev/null differ diff --git a/_images/math/183421431fcc0a42e22f825a33dcc3c51607fa6e.png b/_images/math/183421431fcc0a42e22f825a33dcc3c51607fa6e.png deleted file mode 100644 index b048c4e0..00000000 Binary files a/_images/math/183421431fcc0a42e22f825a33dcc3c51607fa6e.png and /dev/null differ diff --git a/_images/math/1886ad7fb679a4e50a913bc18eca549053c8a70e.png b/_images/math/1886ad7fb679a4e50a913bc18eca549053c8a70e.png deleted file mode 100644 index 3d4a2b36..00000000 Binary files a/_images/math/1886ad7fb679a4e50a913bc18eca549053c8a70e.png and /dev/null differ diff --git a/_images/math/188c175aac0a8a9c22499336711b5d7256407254.png b/_images/math/188c175aac0a8a9c22499336711b5d7256407254.png deleted file mode 100644 index 2776aa5a..00000000 Binary files a/_images/math/188c175aac0a8a9c22499336711b5d7256407254.png and /dev/null differ diff --git a/_images/math/1a921404af68df9fc1c3bcd740279c5a76603af0.png b/_images/math/1a921404af68df9fc1c3bcd740279c5a76603af0.png deleted file mode 100644 index cba253b1..00000000 Binary files a/_images/math/1a921404af68df9fc1c3bcd740279c5a76603af0.png and /dev/null differ diff --git a/_images/math/1f9ae7e35eec8578c5030e32437a1e94807c1b5a.png b/_images/math/1f9ae7e35eec8578c5030e32437a1e94807c1b5a.png deleted file mode 100644 index 19f5b69e..00000000 Binary files a/_images/math/1f9ae7e35eec8578c5030e32437a1e94807c1b5a.png and /dev/null differ diff --git a/_images/math/1fc4fa1321d060a09a29279f6117afa678d509e2.png b/_images/math/1fc4fa1321d060a09a29279f6117afa678d509e2.png deleted file mode 100644 index 85233bd9..00000000 Binary files a/_images/math/1fc4fa1321d060a09a29279f6117afa678d509e2.png and /dev/null differ diff --git a/_images/math/21657abf2dea8e36fed8ad9de97c6a7d36bb6953.png b/_images/math/21657abf2dea8e36fed8ad9de97c6a7d36bb6953.png deleted file mode 100644 index 7c89410a..00000000 Binary files a/_images/math/21657abf2dea8e36fed8ad9de97c6a7d36bb6953.png and /dev/null differ diff --git a/_images/math/21ce006c272c7c290661a9b612b86960b64be6a0.png b/_images/math/21ce006c272c7c290661a9b612b86960b64be6a0.png deleted file mode 100644 index bfce06f3..00000000 Binary files a/_images/math/21ce006c272c7c290661a9b612b86960b64be6a0.png and /dev/null differ diff --git a/_images/math/22f3ee2d2327d80f435fbb9fc2d52648425f603f.png b/_images/math/22f3ee2d2327d80f435fbb9fc2d52648425f603f.png deleted file mode 100644 index 3f23418a..00000000 Binary files a/_images/math/22f3ee2d2327d80f435fbb9fc2d52648425f603f.png and /dev/null differ diff --git a/_images/math/23bb10fd314dc15cedfe75a27cd400d97456d382.png b/_images/math/23bb10fd314dc15cedfe75a27cd400d97456d382.png deleted file mode 100644 index d5980ddb..00000000 Binary files a/_images/math/23bb10fd314dc15cedfe75a27cd400d97456d382.png and /dev/null differ diff --git a/_images/math/23f1b45408e5b4130c0f940fcbfcec54492cbdcd.png b/_images/math/23f1b45408e5b4130c0f940fcbfcec54492cbdcd.png deleted file mode 100644 index 00a4e390..00000000 Binary files a/_images/math/23f1b45408e5b4130c0f940fcbfcec54492cbdcd.png and /dev/null differ diff --git a/_images/math/2623d55b1760a35694c4eaa7362c6cb118a18a38.png b/_images/math/2623d55b1760a35694c4eaa7362c6cb118a18a38.png deleted file mode 100644 index 6a5df28c..00000000 Binary files a/_images/math/2623d55b1760a35694c4eaa7362c6cb118a18a38.png and /dev/null differ diff --git a/_images/math/267e8f2b1e9e5df9e3f1e27a10f59e51222d24e0.png b/_images/math/267e8f2b1e9e5df9e3f1e27a10f59e51222d24e0.png deleted file mode 100644 index a685d16a..00000000 Binary files a/_images/math/267e8f2b1e9e5df9e3f1e27a10f59e51222d24e0.png and /dev/null differ diff --git a/_images/math/26bed463602b7b5764b5bdb149c6f77b40c998c3.png b/_images/math/26bed463602b7b5764b5bdb149c6f77b40c998c3.png deleted file mode 100644 index 9b352bb0..00000000 Binary files a/_images/math/26bed463602b7b5764b5bdb149c6f77b40c998c3.png and /dev/null differ diff --git a/_images/math/26c8d466b90b8ee6d402533bd80894f924753cda.png b/_images/math/26c8d466b90b8ee6d402533bd80894f924753cda.png deleted file mode 100644 index 5207e8f5..00000000 Binary files a/_images/math/26c8d466b90b8ee6d402533bd80894f924753cda.png and /dev/null differ diff --git a/_images/math/276e5ebc77bdd44874432c87f9e9c603cd48f5d4.png b/_images/math/276e5ebc77bdd44874432c87f9e9c603cd48f5d4.png deleted file mode 100644 index f8beb89f..00000000 Binary files a/_images/math/276e5ebc77bdd44874432c87f9e9c603cd48f5d4.png and /dev/null differ diff --git a/_images/math/2890f475336d7daf12e0f9ab3e274c81cf2e599d.png b/_images/math/2890f475336d7daf12e0f9ab3e274c81cf2e599d.png deleted file mode 100644 index 78f6539b..00000000 Binary files a/_images/math/2890f475336d7daf12e0f9ab3e274c81cf2e599d.png and /dev/null differ diff --git a/_images/math/28bc944ae7db6d3cc9a2ab3ffa7c73b948bfc704.png b/_images/math/28bc944ae7db6d3cc9a2ab3ffa7c73b948bfc704.png deleted file mode 100644 index f8ba6181..00000000 Binary files a/_images/math/28bc944ae7db6d3cc9a2ab3ffa7c73b948bfc704.png and /dev/null differ diff --git a/_images/math/29210a352e9dacb058b4d85446d6be2671a7e53c.png b/_images/math/29210a352e9dacb058b4d85446d6be2671a7e53c.png deleted file mode 100644 index 12f11053..00000000 Binary files a/_images/math/29210a352e9dacb058b4d85446d6be2671a7e53c.png and /dev/null differ diff --git a/_images/math/2b0c7ba91040f34d839421e25d79a17193a421ce.png b/_images/math/2b0c7ba91040f34d839421e25d79a17193a421ce.png deleted file mode 100644 index 73135d93..00000000 Binary files a/_images/math/2b0c7ba91040f34d839421e25d79a17193a421ce.png and /dev/null differ diff --git a/_images/math/2bcc65482aa8e15cd4c9e9f2542451fb4e971a91.png b/_images/math/2bcc65482aa8e15cd4c9e9f2542451fb4e971a91.png deleted file mode 100644 index 19123bad..00000000 Binary files a/_images/math/2bcc65482aa8e15cd4c9e9f2542451fb4e971a91.png and /dev/null differ diff --git a/_images/math/2d7b54f0e8de3b1eedcb62cdcf4f00fba30736e5.png b/_images/math/2d7b54f0e8de3b1eedcb62cdcf4f00fba30736e5.png deleted file mode 100644 index d05cf1a0..00000000 Binary files a/_images/math/2d7b54f0e8de3b1eedcb62cdcf4f00fba30736e5.png and /dev/null differ diff --git a/_images/math/2de38926392ba23abeac75effc66c37a5f5be5fd.png b/_images/math/2de38926392ba23abeac75effc66c37a5f5be5fd.png deleted file mode 100644 index 045b8603..00000000 Binary files a/_images/math/2de38926392ba23abeac75effc66c37a5f5be5fd.png and /dev/null differ diff --git a/_images/math/2e228c74dfa8a29768a2957c51cffd974d0b7b1e.png b/_images/math/2e228c74dfa8a29768a2957c51cffd974d0b7b1e.png deleted file mode 100644 index de2fa31f..00000000 Binary files a/_images/math/2e228c74dfa8a29768a2957c51cffd974d0b7b1e.png and /dev/null differ diff --git a/_images/math/2f4ebc352523c3a053905bef702e0b2db1413c97.png b/_images/math/2f4ebc352523c3a053905bef702e0b2db1413c97.png deleted file mode 100644 index 4fb1c0cf..00000000 Binary files a/_images/math/2f4ebc352523c3a053905bef702e0b2db1413c97.png and /dev/null differ diff --git a/_images/math/2fe6d04895027b099930348e8e7654f313ff0e14.png b/_images/math/2fe6d04895027b099930348e8e7654f313ff0e14.png deleted file mode 100644 index 1b9b687c..00000000 Binary files a/_images/math/2fe6d04895027b099930348e8e7654f313ff0e14.png and /dev/null differ diff --git a/_images/math/3035d866f0ab8bb2bb1ae6bcf005430617d9af23.png b/_images/math/3035d866f0ab8bb2bb1ae6bcf005430617d9af23.png deleted file mode 100644 index 2b7742b4..00000000 Binary files a/_images/math/3035d866f0ab8bb2bb1ae6bcf005430617d9af23.png and /dev/null differ diff --git a/_images/math/307831dde409b912c75681efe0d91f3e52cd33fe.png b/_images/math/307831dde409b912c75681efe0d91f3e52cd33fe.png deleted file mode 100644 index b79b913b..00000000 Binary files a/_images/math/307831dde409b912c75681efe0d91f3e52cd33fe.png and /dev/null differ diff --git a/_images/math/3325f4ad142eba40ad4ce998527fb22c0fe1b157.png b/_images/math/3325f4ad142eba40ad4ce998527fb22c0fe1b157.png deleted file mode 100644 index ef0ad5b8..00000000 Binary files a/_images/math/3325f4ad142eba40ad4ce998527fb22c0fe1b157.png and /dev/null differ diff --git a/_images/math/339ea333e0f09ba0ee3c854c6f905531bd885fa1.png b/_images/math/339ea333e0f09ba0ee3c854c6f905531bd885fa1.png deleted file mode 100644 index 77b24cbc..00000000 Binary files a/_images/math/339ea333e0f09ba0ee3c854c6f905531bd885fa1.png and /dev/null differ diff --git a/_images/math/349512486427c04a1f5779f1b8976324ee443a0c.png b/_images/math/349512486427c04a1f5779f1b8976324ee443a0c.png deleted file mode 100644 index b67cbc86..00000000 Binary files a/_images/math/349512486427c04a1f5779f1b8976324ee443a0c.png and /dev/null differ diff --git a/_images/math/36ddef3a44c5bee758494eccaca665d1e98ccf9f.png b/_images/math/36ddef3a44c5bee758494eccaca665d1e98ccf9f.png deleted file mode 100644 index 2649e7c8..00000000 Binary files a/_images/math/36ddef3a44c5bee758494eccaca665d1e98ccf9f.png and /dev/null differ diff --git a/_images/math/388482ead199a9a8b9ebdedd0a6570082b4ac6ef.png b/_images/math/388482ead199a9a8b9ebdedd0a6570082b4ac6ef.png deleted file mode 100644 index 12cbab12..00000000 Binary files a/_images/math/388482ead199a9a8b9ebdedd0a6570082b4ac6ef.png and /dev/null differ diff --git a/_images/math/39252787bdbff288e0da5c5934b30704ffe75c2f.png b/_images/math/39252787bdbff288e0da5c5934b30704ffe75c2f.png deleted file mode 100644 index 88252be0..00000000 Binary files a/_images/math/39252787bdbff288e0da5c5934b30704ffe75c2f.png and /dev/null differ diff --git a/_images/math/3b765ea6939f1eba2541e91f870cb3c078aa29be.png b/_images/math/3b765ea6939f1eba2541e91f870cb3c078aa29be.png deleted file mode 100644 index 329fd6b1..00000000 Binary files a/_images/math/3b765ea6939f1eba2541e91f870cb3c078aa29be.png and /dev/null differ diff --git a/_images/math/3dd295df5efbb79ffb2421e639ce9fd9a7a645fd.png b/_images/math/3dd295df5efbb79ffb2421e639ce9fd9a7a645fd.png deleted file mode 100644 index ab2aac3d..00000000 Binary files a/_images/math/3dd295df5efbb79ffb2421e639ce9fd9a7a645fd.png and /dev/null differ diff --git a/_images/math/3dedded53669c9ca5267fa9c7e1fded4862dff62.png b/_images/math/3dedded53669c9ca5267fa9c7e1fded4862dff62.png deleted file mode 100644 index 6cc94086..00000000 Binary files a/_images/math/3dedded53669c9ca5267fa9c7e1fded4862dff62.png and /dev/null differ diff --git a/_images/math/3e847b193063ea68bbbb97edc878ea46e0cea45a.png b/_images/math/3e847b193063ea68bbbb97edc878ea46e0cea45a.png deleted file mode 100644 index 00f30e56..00000000 Binary files a/_images/math/3e847b193063ea68bbbb97edc878ea46e0cea45a.png and /dev/null differ diff --git a/_images/math/3eca8557203e86160952e1c0f735f7417f3285b1.png b/_images/math/3eca8557203e86160952e1c0f735f7417f3285b1.png deleted file mode 100644 index 337ef4f2..00000000 Binary files a/_images/math/3eca8557203e86160952e1c0f735f7417f3285b1.png and /dev/null differ diff --git a/_images/math/3f25586867e023785e736d63584bfca4b79577ef.png b/_images/math/3f25586867e023785e736d63584bfca4b79577ef.png deleted file mode 100644 index c1149d37..00000000 Binary files a/_images/math/3f25586867e023785e736d63584bfca4b79577ef.png and /dev/null differ diff --git a/_images/math/413f8a8e40062a9090d9d50b88bc7b551b314c26.png b/_images/math/413f8a8e40062a9090d9d50b88bc7b551b314c26.png deleted file mode 100644 index b7562bcd..00000000 Binary files a/_images/math/413f8a8e40062a9090d9d50b88bc7b551b314c26.png and /dev/null differ diff --git a/_images/math/427ce0d8400db7fb708f746d15496174638d8d9e.png b/_images/math/427ce0d8400db7fb708f746d15496174638d8d9e.png deleted file mode 100644 index 82435387..00000000 Binary files a/_images/math/427ce0d8400db7fb708f746d15496174638d8d9e.png and /dev/null differ diff --git a/_images/math/42db8c9a0969681c17146c28c8ec8135be2f597c.png b/_images/math/42db8c9a0969681c17146c28c8ec8135be2f597c.png deleted file mode 100644 index f3791781..00000000 Binary files a/_images/math/42db8c9a0969681c17146c28c8ec8135be2f597c.png and /dev/null differ diff --git a/_images/math/436435ef347c617652f9dc974365b6bcd7cc6b32.png b/_images/math/436435ef347c617652f9dc974365b6bcd7cc6b32.png deleted file mode 100644 index c56313c9..00000000 Binary files a/_images/math/436435ef347c617652f9dc974365b6bcd7cc6b32.png and /dev/null differ diff --git a/_images/math/43c76a77dea026eec022b581e5a82007936cdc2d.png b/_images/math/43c76a77dea026eec022b581e5a82007936cdc2d.png deleted file mode 100644 index 55df547b..00000000 Binary files a/_images/math/43c76a77dea026eec022b581e5a82007936cdc2d.png and /dev/null differ diff --git a/_images/math/448084fb2e82fdf470ec04a6b962d93a01573568.png b/_images/math/448084fb2e82fdf470ec04a6b962d93a01573568.png deleted file mode 100644 index 3d99cb44..00000000 Binary files a/_images/math/448084fb2e82fdf470ec04a6b962d93a01573568.png and /dev/null differ diff --git a/_images/math/47099a40663b862f217f05c3b553d7af862dc691.png b/_images/math/47099a40663b862f217f05c3b553d7af862dc691.png deleted file mode 100644 index c2165505..00000000 Binary files a/_images/math/47099a40663b862f217f05c3b553d7af862dc691.png and /dev/null differ diff --git a/_images/math/4835d98e3dc88b84780b7e556f7751d10dc1ab74.png b/_images/math/4835d98e3dc88b84780b7e556f7751d10dc1ab74.png deleted file mode 100644 index 661e9b0c..00000000 Binary files a/_images/math/4835d98e3dc88b84780b7e556f7751d10dc1ab74.png and /dev/null differ diff --git a/_images/math/496867ca68c428fa123f26f0f73997632e61e116.png b/_images/math/496867ca68c428fa123f26f0f73997632e61e116.png deleted file mode 100644 index 1cae33ba..00000000 Binary files a/_images/math/496867ca68c428fa123f26f0f73997632e61e116.png and /dev/null differ diff --git a/_images/math/4ce319463e93178aae8f6f8437fc0c99c1d71757.png b/_images/math/4ce319463e93178aae8f6f8437fc0c99c1d71757.png deleted file mode 100644 index 2a280d7b..00000000 Binary files a/_images/math/4ce319463e93178aae8f6f8437fc0c99c1d71757.png and /dev/null differ diff --git a/_images/math/52b63b0863a41fca0b1c66bbcb44d887f4ba28d3.png b/_images/math/52b63b0863a41fca0b1c66bbcb44d887f4ba28d3.png deleted file mode 100644 index 630d5bc6..00000000 Binary files a/_images/math/52b63b0863a41fca0b1c66bbcb44d887f4ba28d3.png and /dev/null differ diff --git a/_images/math/5376e481e344117aa7f943a605c72e41abef1bbd.png b/_images/math/5376e481e344117aa7f943a605c72e41abef1bbd.png deleted file mode 100644 index 1ba69d35..00000000 Binary files a/_images/math/5376e481e344117aa7f943a605c72e41abef1bbd.png and /dev/null differ diff --git a/_images/math/541d0e2e3e15f23aa720e7df10bff2f56b31b25f.png b/_images/math/541d0e2e3e15f23aa720e7df10bff2f56b31b25f.png deleted file mode 100644 index 9548ec7e..00000000 Binary files a/_images/math/541d0e2e3e15f23aa720e7df10bff2f56b31b25f.png and /dev/null differ diff --git a/_images/math/554378124337a01a796bde98ba4b1c71f3c6552a.png b/_images/math/554378124337a01a796bde98ba4b1c71f3c6552a.png deleted file mode 100644 index 2db7ebd2..00000000 Binary files a/_images/math/554378124337a01a796bde98ba4b1c71f3c6552a.png and /dev/null differ diff --git a/_images/math/558448a66c5587e716e2fbb0eb07e546ec7c4661.png b/_images/math/558448a66c5587e716e2fbb0eb07e546ec7c4661.png deleted file mode 100644 index 434ec05e..00000000 Binary files a/_images/math/558448a66c5587e716e2fbb0eb07e546ec7c4661.png and /dev/null differ diff --git a/_images/math/56b1aeb1d3196a78c5fb18cd2d3fbc581fb17aa7.png b/_images/math/56b1aeb1d3196a78c5fb18cd2d3fbc581fb17aa7.png deleted file mode 100644 index 212b2153..00000000 Binary files a/_images/math/56b1aeb1d3196a78c5fb18cd2d3fbc581fb17aa7.png and /dev/null differ diff --git a/_images/math/57be377296c4dbf4d003ca7dacb5f0a034ea127b.png b/_images/math/57be377296c4dbf4d003ca7dacb5f0a034ea127b.png deleted file mode 100644 index 1066fca7..00000000 Binary files a/_images/math/57be377296c4dbf4d003ca7dacb5f0a034ea127b.png and /dev/null differ diff --git a/_images/math/5874ba3c56a176823ab9fad8f765b8ae718ace1c.png b/_images/math/5874ba3c56a176823ab9fad8f765b8ae718ace1c.png deleted file mode 100644 index 4377139f..00000000 Binary files a/_images/math/5874ba3c56a176823ab9fad8f765b8ae718ace1c.png and /dev/null differ diff --git a/_images/math/590fd8b58a2957dd92b9772146f6fd23396d0b30.png b/_images/math/590fd8b58a2957dd92b9772146f6fd23396d0b30.png deleted file mode 100644 index 93b685e9..00000000 Binary files a/_images/math/590fd8b58a2957dd92b9772146f6fd23396d0b30.png and /dev/null differ diff --git a/_images/math/5c076dbfa3828a04539a5c36d6f3f279090bc751.png b/_images/math/5c076dbfa3828a04539a5c36d6f3f279090bc751.png deleted file mode 100644 index 3851094b..00000000 Binary files a/_images/math/5c076dbfa3828a04539a5c36d6f3f279090bc751.png and /dev/null differ diff --git a/_images/math/5c36ac964f4070b7920c9ad93498e852492f1c20.png b/_images/math/5c36ac964f4070b7920c9ad93498e852492f1c20.png deleted file mode 100644 index d8e1de1c..00000000 Binary files a/_images/math/5c36ac964f4070b7920c9ad93498e852492f1c20.png and /dev/null differ diff --git a/_images/math/5c4c8bbd40eb37a39d46760e3c9de2447649b4eb.png b/_images/math/5c4c8bbd40eb37a39d46760e3c9de2447649b4eb.png deleted file mode 100644 index eafb8112..00000000 Binary files a/_images/math/5c4c8bbd40eb37a39d46760e3c9de2447649b4eb.png and /dev/null differ diff --git a/_images/math/5cdd961a36af1484337ce98f11d2ec4dde8ae94f.png b/_images/math/5cdd961a36af1484337ce98f11d2ec4dde8ae94f.png deleted file mode 100644 index 138248b0..00000000 Binary files a/_images/math/5cdd961a36af1484337ce98f11d2ec4dde8ae94f.png and /dev/null differ diff --git a/_images/math/5da33fa62c2b4517b4fa2858aa4233d3ed6e1037.png b/_images/math/5da33fa62c2b4517b4fa2858aa4233d3ed6e1037.png deleted file mode 100644 index fa4e0fdf..00000000 Binary files a/_images/math/5da33fa62c2b4517b4fa2858aa4233d3ed6e1037.png and /dev/null differ diff --git a/_images/math/5f66826767d666e4015c9e776d847e2d64cfaac9.png b/_images/math/5f66826767d666e4015c9e776d847e2d64cfaac9.png deleted file mode 100644 index ce9cb566..00000000 Binary files a/_images/math/5f66826767d666e4015c9e776d847e2d64cfaac9.png and /dev/null differ diff --git a/_images/math/5f7d743c0b53985b0648d0aa1667cfa9ee5eb6e5.png b/_images/math/5f7d743c0b53985b0648d0aa1667cfa9ee5eb6e5.png deleted file mode 100644 index 1b96dab9..00000000 Binary files a/_images/math/5f7d743c0b53985b0648d0aa1667cfa9ee5eb6e5.png and /dev/null differ diff --git a/_images/math/6071b58147128cdf276ce6e6152a68e67f123885.png b/_images/math/6071b58147128cdf276ce6e6152a68e67f123885.png deleted file mode 100644 index 1ba0f1d5..00000000 Binary files a/_images/math/6071b58147128cdf276ce6e6152a68e67f123885.png and /dev/null differ diff --git a/_images/math/61d59bf791e5655abe327bc505ca5fa92ca03976.png b/_images/math/61d59bf791e5655abe327bc505ca5fa92ca03976.png deleted file mode 100644 index d4f6b280..00000000 Binary files a/_images/math/61d59bf791e5655abe327bc505ca5fa92ca03976.png and /dev/null differ diff --git a/_images/math/630e3a780577ea7921e81ee2ac5237dd1802ec8d.png b/_images/math/630e3a780577ea7921e81ee2ac5237dd1802ec8d.png deleted file mode 100644 index 255271bd..00000000 Binary files a/_images/math/630e3a780577ea7921e81ee2ac5237dd1802ec8d.png and /dev/null differ diff --git a/_images/math/66200e63a8ad1c1a68bcea600eaea83c49a81367.png b/_images/math/66200e63a8ad1c1a68bcea600eaea83c49a81367.png deleted file mode 100644 index 0baa89a6..00000000 Binary files a/_images/math/66200e63a8ad1c1a68bcea600eaea83c49a81367.png and /dev/null differ diff --git a/_images/math/67f4714f065d485540ad40829e0717bf75e9dd85.png b/_images/math/67f4714f065d485540ad40829e0717bf75e9dd85.png deleted file mode 100644 index 6301baea..00000000 Binary files a/_images/math/67f4714f065d485540ad40829e0717bf75e9dd85.png and /dev/null differ diff --git a/_images/math/6835daa51116b0a8cd16d9f0946c74fcab846046.png b/_images/math/6835daa51116b0a8cd16d9f0946c74fcab846046.png deleted file mode 100644 index 44e41cd3..00000000 Binary files a/_images/math/6835daa51116b0a8cd16d9f0946c74fcab846046.png and /dev/null differ diff --git a/_images/math/6b44e99e1875c1de632f247c68ab2b88cefa5f33.png b/_images/math/6b44e99e1875c1de632f247c68ab2b88cefa5f33.png deleted file mode 100644 index c60ddecf..00000000 Binary files a/_images/math/6b44e99e1875c1de632f247c68ab2b88cefa5f33.png and /dev/null differ diff --git a/_images/math/6c7a917d16d814facbc67882c24eb1e07f2781f4.png b/_images/math/6c7a917d16d814facbc67882c24eb1e07f2781f4.png deleted file mode 100644 index e26825f1..00000000 Binary files a/_images/math/6c7a917d16d814facbc67882c24eb1e07f2781f4.png and /dev/null differ diff --git a/_images/math/7118d4755e7b4fa6a52a9e9ca2aa9c5a3dab61b4.png b/_images/math/7118d4755e7b4fa6a52a9e9ca2aa9c5a3dab61b4.png deleted file mode 100644 index e9f05be8..00000000 Binary files a/_images/math/7118d4755e7b4fa6a52a9e9ca2aa9c5a3dab61b4.png and /dev/null differ diff --git a/_images/math/7298a37649db5255ed571dfac815e469dd8f54d0.png b/_images/math/7298a37649db5255ed571dfac815e469dd8f54d0.png deleted file mode 100644 index a3420965..00000000 Binary files a/_images/math/7298a37649db5255ed571dfac815e469dd8f54d0.png and /dev/null differ diff --git a/_images/math/7553e32e07326a1b00ba242f3ac39604c9531713.png b/_images/math/7553e32e07326a1b00ba242f3ac39604c9531713.png deleted file mode 100644 index abe7567f..00000000 Binary files a/_images/math/7553e32e07326a1b00ba242f3ac39604c9531713.png and /dev/null differ diff --git a/_images/math/75e27f04188974063be3230dca208cd495b77ce1.png b/_images/math/75e27f04188974063be3230dca208cd495b77ce1.png deleted file mode 100644 index c7b0ff3e..00000000 Binary files a/_images/math/75e27f04188974063be3230dca208cd495b77ce1.png and /dev/null differ diff --git a/_images/math/7842de0c3d8595f25e5273886faf42b0ab6fe203.png b/_images/math/7842de0c3d8595f25e5273886faf42b0ab6fe203.png deleted file mode 100644 index e5c20d93..00000000 Binary files a/_images/math/7842de0c3d8595f25e5273886faf42b0ab6fe203.png and /dev/null differ diff --git a/_images/math/78c2f498e7578d00e1801dfe78cc19c1bab568d0.png b/_images/math/78c2f498e7578d00e1801dfe78cc19c1bab568d0.png deleted file mode 100644 index 7cba9624..00000000 Binary files a/_images/math/78c2f498e7578d00e1801dfe78cc19c1bab568d0.png and /dev/null differ diff --git a/_images/math/79656cad8c3aaabda360ba440b63d9b2a39c42b3.png b/_images/math/79656cad8c3aaabda360ba440b63d9b2a39c42b3.png deleted file mode 100644 index 30e12548..00000000 Binary files a/_images/math/79656cad8c3aaabda360ba440b63d9b2a39c42b3.png and /dev/null differ diff --git a/_images/math/7a838a70bfa89f22d28a70b979a4784ef74ab9ea.png b/_images/math/7a838a70bfa89f22d28a70b979a4784ef74ab9ea.png deleted file mode 100644 index 9252dbf3..00000000 Binary files a/_images/math/7a838a70bfa89f22d28a70b979a4784ef74ab9ea.png and /dev/null differ diff --git a/_images/math/7b1137e90198e4da2cb05e275b54f9729a3072a5.png b/_images/math/7b1137e90198e4da2cb05e275b54f9729a3072a5.png deleted file mode 100644 index 104eb69b..00000000 Binary files a/_images/math/7b1137e90198e4da2cb05e275b54f9729a3072a5.png and /dev/null differ diff --git a/_images/math/7bbdfb18b2b2384b5974f7d932938f82661a2cc3.png b/_images/math/7bbdfb18b2b2384b5974f7d932938f82661a2cc3.png deleted file mode 100644 index 3deaf51c..00000000 Binary files a/_images/math/7bbdfb18b2b2384b5974f7d932938f82661a2cc3.png and /dev/null differ diff --git a/_images/math/7bc8a52ff12529252fec5af88813830b0b2ff7ff.png b/_images/math/7bc8a52ff12529252fec5af88813830b0b2ff7ff.png deleted file mode 100644 index c4ac026e..00000000 Binary files a/_images/math/7bc8a52ff12529252fec5af88813830b0b2ff7ff.png and /dev/null differ diff --git a/_images/math/7dd2a5ea01fbd72ad2a58dd1f3d6ecbfde6208a1.png b/_images/math/7dd2a5ea01fbd72ad2a58dd1f3d6ecbfde6208a1.png deleted file mode 100644 index 7bfc4fc3..00000000 Binary files a/_images/math/7dd2a5ea01fbd72ad2a58dd1f3d6ecbfde6208a1.png and /dev/null differ diff --git a/_images/math/7eaeb7c0682765488c3035e5d37ef383b3bd27da.png b/_images/math/7eaeb7c0682765488c3035e5d37ef383b3bd27da.png deleted file mode 100644 index 873fcd4f..00000000 Binary files a/_images/math/7eaeb7c0682765488c3035e5d37ef383b3bd27da.png and /dev/null differ diff --git a/_images/math/7eb4c780ffeaa265e5e2fb89b9d40aec90300449.png b/_images/math/7eb4c780ffeaa265e5e2fb89b9d40aec90300449.png deleted file mode 100644 index bc09ff0f..00000000 Binary files a/_images/math/7eb4c780ffeaa265e5e2fb89b9d40aec90300449.png and /dev/null differ diff --git a/_images/math/7f84915a94f116e966d0fc6f1085fd098b4dfda4.png b/_images/math/7f84915a94f116e966d0fc6f1085fd098b4dfda4.png deleted file mode 100644 index 4ad5cdfe..00000000 Binary files a/_images/math/7f84915a94f116e966d0fc6f1085fd098b4dfda4.png and /dev/null differ diff --git a/_images/math/807e33ce1d74b7e9886c6ea4ea7a4b6a14db1584.png b/_images/math/807e33ce1d74b7e9886c6ea4ea7a4b6a14db1584.png deleted file mode 100644 index 5a7681f0..00000000 Binary files a/_images/math/807e33ce1d74b7e9886c6ea4ea7a4b6a14db1584.png and /dev/null differ diff --git a/_images/math/810f9f4f289e7f0840e8c75bbb91c545142c8fcd.png b/_images/math/810f9f4f289e7f0840e8c75bbb91c545142c8fcd.png deleted file mode 100644 index d541dfb1..00000000 Binary files a/_images/math/810f9f4f289e7f0840e8c75bbb91c545142c8fcd.png and /dev/null differ diff --git a/_images/math/812f92da6db61fb4e16c0060582e4cab04c5cb60.png b/_images/math/812f92da6db61fb4e16c0060582e4cab04c5cb60.png deleted file mode 100644 index a8025e36..00000000 Binary files a/_images/math/812f92da6db61fb4e16c0060582e4cab04c5cb60.png and /dev/null differ diff --git a/_images/math/81633fc2824befe93af597f740a654b472d4bbbc.png b/_images/math/81633fc2824befe93af597f740a654b472d4bbbc.png deleted file mode 100644 index f89ea27b..00000000 Binary files a/_images/math/81633fc2824befe93af597f740a654b472d4bbbc.png and /dev/null differ diff --git a/_images/math/831810d0f5ee8bbc880030dc216f41f50f6c2b85.png b/_images/math/831810d0f5ee8bbc880030dc216f41f50f6c2b85.png deleted file mode 100644 index 2dc5e7f4..00000000 Binary files a/_images/math/831810d0f5ee8bbc880030dc216f41f50f6c2b85.png and /dev/null differ diff --git a/_images/math/8394c33dc0e6ec209ca351ddf28373fd33d39976.png b/_images/math/8394c33dc0e6ec209ca351ddf28373fd33d39976.png deleted file mode 100644 index 15ebacb3..00000000 Binary files a/_images/math/8394c33dc0e6ec209ca351ddf28373fd33d39976.png and /dev/null differ diff --git a/_images/math/83d8e20db57c0c97fce0f32d82df97c008ad98ee.png b/_images/math/83d8e20db57c0c97fce0f32d82df97c008ad98ee.png deleted file mode 100644 index 32681f57..00000000 Binary files a/_images/math/83d8e20db57c0c97fce0f32d82df97c008ad98ee.png and /dev/null differ diff --git a/_images/math/859588bedc710b54a658d41a0798ef039bc0b453.png b/_images/math/859588bedc710b54a658d41a0798ef039bc0b453.png deleted file mode 100644 index 6efe6f82..00000000 Binary files a/_images/math/859588bedc710b54a658d41a0798ef039bc0b453.png and /dev/null differ diff --git a/_images/math/86ea92631f93273c2714a4814df963c44c4426a4.png b/_images/math/86ea92631f93273c2714a4814df963c44c4426a4.png deleted file mode 100644 index 54584768..00000000 Binary files a/_images/math/86ea92631f93273c2714a4814df963c44c4426a4.png and /dev/null differ diff --git a/_images/math/87179e0d3fbdda1c2b257b186368b665fe0d2b5e.png b/_images/math/87179e0d3fbdda1c2b257b186368b665fe0d2b5e.png deleted file mode 100644 index 685a3cc5..00000000 Binary files a/_images/math/87179e0d3fbdda1c2b257b186368b665fe0d2b5e.png and /dev/null differ diff --git a/_images/math/8728ee4f6dc0e015a78e80cd4c122e2d3cf560d5.png b/_images/math/8728ee4f6dc0e015a78e80cd4c122e2d3cf560d5.png deleted file mode 100644 index e8977d4d..00000000 Binary files a/_images/math/8728ee4f6dc0e015a78e80cd4c122e2d3cf560d5.png and /dev/null differ diff --git a/_images/math/88c6d2da5f1a0bb938a721b819dea356cd58213c.png b/_images/math/88c6d2da5f1a0bb938a721b819dea356cd58213c.png deleted file mode 100644 index 864fe325..00000000 Binary files a/_images/math/88c6d2da5f1a0bb938a721b819dea356cd58213c.png and /dev/null differ diff --git a/_images/math/8ce03f78ed945f2ef3dac87c8799b55b393527e7.png b/_images/math/8ce03f78ed945f2ef3dac87c8799b55b393527e7.png deleted file mode 100644 index 7416cf4a..00000000 Binary files a/_images/math/8ce03f78ed945f2ef3dac87c8799b55b393527e7.png and /dev/null differ diff --git a/_images/math/8d7933f8f95cd8f8322be1d70d706d9959a65c01.png b/_images/math/8d7933f8f95cd8f8322be1d70d706d9959a65c01.png deleted file mode 100644 index 25e0a8fd..00000000 Binary files a/_images/math/8d7933f8f95cd8f8322be1d70d706d9959a65c01.png and /dev/null differ diff --git a/_images/math/8da4268c45a0e4f6a81c6ec484fbcd786b06cb18.png b/_images/math/8da4268c45a0e4f6a81c6ec484fbcd786b06cb18.png deleted file mode 100644 index 52b33313..00000000 Binary files a/_images/math/8da4268c45a0e4f6a81c6ec484fbcd786b06cb18.png and /dev/null differ diff --git a/_images/math/8def7b1e7cf8c6b1a90b679f2574fe02d34133b6.png b/_images/math/8def7b1e7cf8c6b1a90b679f2574fe02d34133b6.png deleted file mode 100644 index 7af62d80..00000000 Binary files a/_images/math/8def7b1e7cf8c6b1a90b679f2574fe02d34133b6.png and /dev/null differ diff --git a/_images/math/8f94a19de76fb4362df2bfef8a22eb3929ed1c9e.png b/_images/math/8f94a19de76fb4362df2bfef8a22eb3929ed1c9e.png deleted file mode 100644 index 149715c0..00000000 Binary files a/_images/math/8f94a19de76fb4362df2bfef8a22eb3929ed1c9e.png and /dev/null differ diff --git a/_images/math/90f92bbe75a1f67cf7e5561af6a3eaa44e938f49.png b/_images/math/90f92bbe75a1f67cf7e5561af6a3eaa44e938f49.png deleted file mode 100644 index 10714f93..00000000 Binary files a/_images/math/90f92bbe75a1f67cf7e5561af6a3eaa44e938f49.png and /dev/null differ diff --git a/_images/math/913a083cc2f99a03c6e1586ddd0417d70b0abdd3.png b/_images/math/913a083cc2f99a03c6e1586ddd0417d70b0abdd3.png deleted file mode 100644 index 71c8818e..00000000 Binary files a/_images/math/913a083cc2f99a03c6e1586ddd0417d70b0abdd3.png and /dev/null differ diff --git a/_images/math/914c2ae47b3c28c3b8687f0f3341f886333783ed.png b/_images/math/914c2ae47b3c28c3b8687f0f3341f886333783ed.png deleted file mode 100644 index 56048e02..00000000 Binary files a/_images/math/914c2ae47b3c28c3b8687f0f3341f886333783ed.png and /dev/null differ diff --git a/_images/math/9268be9d39fdcefa71c12c3a3bcd9ff175fd5bbe.png b/_images/math/9268be9d39fdcefa71c12c3a3bcd9ff175fd5bbe.png deleted file mode 100644 index 3259f8a3..00000000 Binary files a/_images/math/9268be9d39fdcefa71c12c3a3bcd9ff175fd5bbe.png and /dev/null differ diff --git a/_images/math/9506c19b33884b64e200a503490dc7905ed1f3c7.png b/_images/math/9506c19b33884b64e200a503490dc7905ed1f3c7.png deleted file mode 100644 index 65f8ef1a..00000000 Binary files a/_images/math/9506c19b33884b64e200a503490dc7905ed1f3c7.png and /dev/null differ diff --git a/_images/math/95bfa4e3092cf925e093ecaa9312d9ac388813fc.png b/_images/math/95bfa4e3092cf925e093ecaa9312d9ac388813fc.png deleted file mode 100644 index 7359fbd3..00000000 Binary files a/_images/math/95bfa4e3092cf925e093ecaa9312d9ac388813fc.png and /dev/null differ diff --git a/_images/math/969207f036f3832051b025c8615ce01ddf1e93e7.png b/_images/math/969207f036f3832051b025c8615ce01ddf1e93e7.png deleted file mode 100644 index 52a20fb3..00000000 Binary files a/_images/math/969207f036f3832051b025c8615ce01ddf1e93e7.png and /dev/null differ diff --git a/_images/math/9749c120dcb6601ff12ed0145159eee6094bf482.png b/_images/math/9749c120dcb6601ff12ed0145159eee6094bf482.png deleted file mode 100644 index 9cbc6a6e..00000000 Binary files a/_images/math/9749c120dcb6601ff12ed0145159eee6094bf482.png and /dev/null differ diff --git a/_images/math/9849cb4e998bf90d819ab1701298eabf1cbae3df.png b/_images/math/9849cb4e998bf90d819ab1701298eabf1cbae3df.png deleted file mode 100644 index 95f2f247..00000000 Binary files a/_images/math/9849cb4e998bf90d819ab1701298eabf1cbae3df.png and /dev/null differ diff --git a/_images/math/99afec31e8fd109cef70340770f48fd8ddb22965.png b/_images/math/99afec31e8fd109cef70340770f48fd8ddb22965.png deleted file mode 100644 index 8b3c1b9c..00000000 Binary files a/_images/math/99afec31e8fd109cef70340770f48fd8ddb22965.png and /dev/null differ diff --git a/_images/math/9a3656f8e3f0a7c6ae79468e8ef525b236a1e3f5.png b/_images/math/9a3656f8e3f0a7c6ae79468e8ef525b236a1e3f5.png deleted file mode 100644 index d830d43f..00000000 Binary files a/_images/math/9a3656f8e3f0a7c6ae79468e8ef525b236a1e3f5.png and /dev/null differ diff --git a/_images/math/9b386d02a77215e2b65c653aff1411f82649a982.png b/_images/math/9b386d02a77215e2b65c653aff1411f82649a982.png deleted file mode 100644 index c5bcce5e..00000000 Binary files a/_images/math/9b386d02a77215e2b65c653aff1411f82649a982.png and /dev/null differ diff --git a/_images/math/9d5c04e54679fcffa27fea6e29fe90f73209e4de.png b/_images/math/9d5c04e54679fcffa27fea6e29fe90f73209e4de.png deleted file mode 100644 index a0dd8171..00000000 Binary files a/_images/math/9d5c04e54679fcffa27fea6e29fe90f73209e4de.png and /dev/null differ diff --git a/_images/math/9d86170e7de539c0ff999de09621ee0c7b6c8ed0.png b/_images/math/9d86170e7de539c0ff999de09621ee0c7b6c8ed0.png deleted file mode 100644 index 007a6ab6..00000000 Binary files a/_images/math/9d86170e7de539c0ff999de09621ee0c7b6c8ed0.png and /dev/null differ diff --git a/_images/math/a14f8fdd50ee6a92038e77082be297ddb2c1d4c4.png b/_images/math/a14f8fdd50ee6a92038e77082be297ddb2c1d4c4.png deleted file mode 100644 index 73172899..00000000 Binary files a/_images/math/a14f8fdd50ee6a92038e77082be297ddb2c1d4c4.png and /dev/null differ diff --git a/_images/math/a1ece8b9f5e7169ff5d584dff758d1d6d9e05b19.png b/_images/math/a1ece8b9f5e7169ff5d584dff758d1d6d9e05b19.png deleted file mode 100644 index 0da7e281..00000000 Binary files a/_images/math/a1ece8b9f5e7169ff5d584dff758d1d6d9e05b19.png and /dev/null differ diff --git a/_images/math/a32000a44fab329c7ae4c69e61c9f3aab85beb1a.png b/_images/math/a32000a44fab329c7ae4c69e61c9f3aab85beb1a.png deleted file mode 100644 index 4f7bc0ee..00000000 Binary files a/_images/math/a32000a44fab329c7ae4c69e61c9f3aab85beb1a.png and /dev/null differ diff --git a/_images/math/a574f2eeba55bfcc01457665d171e58f93b52044.png b/_images/math/a574f2eeba55bfcc01457665d171e58f93b52044.png deleted file mode 100644 index 20c739f9..00000000 Binary files a/_images/math/a574f2eeba55bfcc01457665d171e58f93b52044.png and /dev/null differ diff --git a/_images/math/a581f053bbfa5115f42c13094857cdd12a37ec49.png b/_images/math/a581f053bbfa5115f42c13094857cdd12a37ec49.png deleted file mode 100644 index afc7f806..00000000 Binary files a/_images/math/a581f053bbfa5115f42c13094857cdd12a37ec49.png and /dev/null differ diff --git a/_images/math/a6579a6db5116f81d4dd80e78c38e8af17179742.png b/_images/math/a6579a6db5116f81d4dd80e78c38e8af17179742.png deleted file mode 100644 index 391bfd57..00000000 Binary files a/_images/math/a6579a6db5116f81d4dd80e78c38e8af17179742.png and /dev/null differ diff --git a/_images/math/a6f2e4dbfa7b4d49e600dd40514532970b5d1021.png b/_images/math/a6f2e4dbfa7b4d49e600dd40514532970b5d1021.png deleted file mode 100644 index 901c8ab3..00000000 Binary files a/_images/math/a6f2e4dbfa7b4d49e600dd40514532970b5d1021.png and /dev/null differ diff --git a/_images/math/a78a6247aea585606b3ca54f4b3c832461c7305b.png b/_images/math/a78a6247aea585606b3ca54f4b3c832461c7305b.png deleted file mode 100644 index 8e7798b0..00000000 Binary files a/_images/math/a78a6247aea585606b3ca54f4b3c832461c7305b.png and /dev/null differ diff --git a/_images/math/a7d1ed984bfb602089e94f9822ffca9983efac7d.png b/_images/math/a7d1ed984bfb602089e94f9822ffca9983efac7d.png deleted file mode 100644 index c8d10322..00000000 Binary files a/_images/math/a7d1ed984bfb602089e94f9822ffca9983efac7d.png and /dev/null differ diff --git a/_images/math/a7d7fe26ae02da56b37391c8b2b1c6dcef0bf987.png b/_images/math/a7d7fe26ae02da56b37391c8b2b1c6dcef0bf987.png deleted file mode 100644 index 5682bc22..00000000 Binary files a/_images/math/a7d7fe26ae02da56b37391c8b2b1c6dcef0bf987.png and /dev/null differ diff --git a/_images/math/a8736a947f7f6079f89f5aadc4791d627b17650e.png b/_images/math/a8736a947f7f6079f89f5aadc4791d627b17650e.png deleted file mode 100644 index b000963e..00000000 Binary files a/_images/math/a8736a947f7f6079f89f5aadc4791d627b17650e.png and /dev/null differ diff --git a/_images/math/aa647584edaea11b6f4f9e85e051f242f31ba74c.png b/_images/math/aa647584edaea11b6f4f9e85e051f242f31ba74c.png deleted file mode 100644 index 0693bdd8..00000000 Binary files a/_images/math/aa647584edaea11b6f4f9e85e051f242f31ba74c.png and /dev/null differ diff --git a/_images/math/aaa4a2e60cae27ffe56709f02b578c5e7ae055af.png b/_images/math/aaa4a2e60cae27ffe56709f02b578c5e7ae055af.png deleted file mode 100644 index 2ac7d200..00000000 Binary files a/_images/math/aaa4a2e60cae27ffe56709f02b578c5e7ae055af.png and /dev/null differ diff --git a/_images/math/aacfe6ab4a010802c2d2bd77d77739b8dce3c501.png b/_images/math/aacfe6ab4a010802c2d2bd77d77739b8dce3c501.png deleted file mode 100644 index 0c355041..00000000 Binary files a/_images/math/aacfe6ab4a010802c2d2bd77d77739b8dce3c501.png and /dev/null differ diff --git a/_images/math/ad59b6e24a4a00ac621801f8d7513d68be654ab5.png b/_images/math/ad59b6e24a4a00ac621801f8d7513d68be654ab5.png deleted file mode 100644 index ff0a49a2..00000000 Binary files a/_images/math/ad59b6e24a4a00ac621801f8d7513d68be654ab5.png and /dev/null differ diff --git a/_images/math/adea1581a9875ebd4c84f242d073f08fe356689c.png b/_images/math/adea1581a9875ebd4c84f242d073f08fe356689c.png deleted file mode 100644 index afbac7a5..00000000 Binary files a/_images/math/adea1581a9875ebd4c84f242d073f08fe356689c.png and /dev/null differ diff --git a/_images/math/adfd934da867e636e40c4f7dfe964c92f370b0fe.png b/_images/math/adfd934da867e636e40c4f7dfe964c92f370b0fe.png deleted file mode 100644 index 9f7656ec..00000000 Binary files a/_images/math/adfd934da867e636e40c4f7dfe964c92f370b0fe.png and /dev/null differ diff --git a/_images/math/aee3e1fd60bbde030d316500517c763ef3dcbc8d.png b/_images/math/aee3e1fd60bbde030d316500517c763ef3dcbc8d.png deleted file mode 100644 index f02c8bee..00000000 Binary files a/_images/math/aee3e1fd60bbde030d316500517c763ef3dcbc8d.png and /dev/null differ diff --git a/_images/math/af537bdb785cb7ca422ce732e06fdd0bd31619d9.png b/_images/math/af537bdb785cb7ca422ce732e06fdd0bd31619d9.png deleted file mode 100644 index 4418ac51..00000000 Binary files a/_images/math/af537bdb785cb7ca422ce732e06fdd0bd31619d9.png and /dev/null differ diff --git a/_images/math/af6ea7209dedcf6a7f3bb83ae13ae3176e0b7c67.png b/_images/math/af6ea7209dedcf6a7f3bb83ae13ae3176e0b7c67.png deleted file mode 100644 index d26d8d4b..00000000 Binary files a/_images/math/af6ea7209dedcf6a7f3bb83ae13ae3176e0b7c67.png and /dev/null differ diff --git a/_images/math/b075d780384e471b19aeb22ad0396924451ea933.png b/_images/math/b075d780384e471b19aeb22ad0396924451ea933.png deleted file mode 100644 index 2ca67918..00000000 Binary files a/_images/math/b075d780384e471b19aeb22ad0396924451ea933.png and /dev/null differ diff --git a/_images/math/b124ff74afb0914bb434e8fb849eb56d734412f8.png b/_images/math/b124ff74afb0914bb434e8fb849eb56d734412f8.png deleted file mode 100644 index 28dd7ded..00000000 Binary files a/_images/math/b124ff74afb0914bb434e8fb849eb56d734412f8.png and /dev/null differ diff --git a/_images/math/b19da9de2a542b86cc7d7a118feebf3be13a80a2.png b/_images/math/b19da9de2a542b86cc7d7a118feebf3be13a80a2.png deleted file mode 100644 index d80b7799..00000000 Binary files a/_images/math/b19da9de2a542b86cc7d7a118feebf3be13a80a2.png and /dev/null differ diff --git a/_images/math/b362bd5e82ed43693b97f3e0c38f506585ce553d.png b/_images/math/b362bd5e82ed43693b97f3e0c38f506585ce553d.png deleted file mode 100644 index c163d022..00000000 Binary files a/_images/math/b362bd5e82ed43693b97f3e0c38f506585ce553d.png and /dev/null differ diff --git a/_images/math/b4b238f0f085c6843273ec1babb3460deae99fea.png b/_images/math/b4b238f0f085c6843273ec1babb3460deae99fea.png deleted file mode 100644 index a8fdb19e..00000000 Binary files a/_images/math/b4b238f0f085c6843273ec1babb3460deae99fea.png and /dev/null differ diff --git a/_images/math/b7899e45c94b312c8bdea3a90aec0cfa400e74ec.png b/_images/math/b7899e45c94b312c8bdea3a90aec0cfa400e74ec.png deleted file mode 100644 index 95d8cd12..00000000 Binary files a/_images/math/b7899e45c94b312c8bdea3a90aec0cfa400e74ec.png and /dev/null differ diff --git a/_images/math/b92c09a649305a0aef3239729d93cdf941e0e5cf.png b/_images/math/b92c09a649305a0aef3239729d93cdf941e0e5cf.png deleted file mode 100644 index 0c00eac9..00000000 Binary files a/_images/math/b92c09a649305a0aef3239729d93cdf941e0e5cf.png and /dev/null differ diff --git a/_images/math/b9974cf36d320faae4c0e4c3a6389604cdc58fc3.png b/_images/math/b9974cf36d320faae4c0e4c3a6389604cdc58fc3.png deleted file mode 100644 index 112e9721..00000000 Binary files a/_images/math/b9974cf36d320faae4c0e4c3a6389604cdc58fc3.png and /dev/null differ diff --git a/_images/math/bc1323168f095b81062ac1e4f40152cc7cf4eb38.png b/_images/math/bc1323168f095b81062ac1e4f40152cc7cf4eb38.png deleted file mode 100644 index 93a9dcd5..00000000 Binary files a/_images/math/bc1323168f095b81062ac1e4f40152cc7cf4eb38.png and /dev/null differ diff --git a/_images/math/bf59a8c155f6dde73729d7a348bc81dba5296f56.png b/_images/math/bf59a8c155f6dde73729d7a348bc81dba5296f56.png deleted file mode 100644 index bd18b8ac..00000000 Binary files a/_images/math/bf59a8c155f6dde73729d7a348bc81dba5296f56.png and /dev/null differ diff --git a/_images/math/c2cd13b1d5a274495255ae25e7f57b3f34887bbb.png b/_images/math/c2cd13b1d5a274495255ae25e7f57b3f34887bbb.png deleted file mode 100644 index 29cb0220..00000000 Binary files a/_images/math/c2cd13b1d5a274495255ae25e7f57b3f34887bbb.png and /dev/null differ diff --git a/_images/math/c32a36adb1cac2b48e0415a782d3a124f1cbe624.png b/_images/math/c32a36adb1cac2b48e0415a782d3a124f1cbe624.png deleted file mode 100644 index 47b5a2e1..00000000 Binary files a/_images/math/c32a36adb1cac2b48e0415a782d3a124f1cbe624.png and /dev/null differ diff --git a/_images/math/c4563e7ecec2336a3934447a6c10ef8519b0b452.png b/_images/math/c4563e7ecec2336a3934447a6c10ef8519b0b452.png deleted file mode 100644 index d5468db6..00000000 Binary files a/_images/math/c4563e7ecec2336a3934447a6c10ef8519b0b452.png and /dev/null differ diff --git a/_images/math/c994cb031f0d1049710a5e4f2d7a39655cbe4f4f.png b/_images/math/c994cb031f0d1049710a5e4f2d7a39655cbe4f4f.png deleted file mode 100644 index 635861aa..00000000 Binary files a/_images/math/c994cb031f0d1049710a5e4f2d7a39655cbe4f4f.png and /dev/null differ diff --git a/_images/math/ca5f38ac0938b0fe10d2270072cccc4d72c9ece5.png b/_images/math/ca5f38ac0938b0fe10d2270072cccc4d72c9ece5.png deleted file mode 100644 index d4dc982d..00000000 Binary files a/_images/math/ca5f38ac0938b0fe10d2270072cccc4d72c9ece5.png and /dev/null differ diff --git a/_images/math/caaa312553e4b619c70084a0de87b337ffa0f5da.png b/_images/math/caaa312553e4b619c70084a0de87b337ffa0f5da.png deleted file mode 100644 index a50a6155..00000000 Binary files a/_images/math/caaa312553e4b619c70084a0de87b337ffa0f5da.png and /dev/null differ diff --git a/_images/math/cbe9c684691c599b381b66ecc129c9661d272d3e.png b/_images/math/cbe9c684691c599b381b66ecc129c9661d272d3e.png deleted file mode 100644 index 3a41ce0b..00000000 Binary files a/_images/math/cbe9c684691c599b381b66ecc129c9661d272d3e.png and /dev/null differ diff --git a/_images/math/cbeae6c7af10eaa0ac53b65265e82ba070a5c56d.png b/_images/math/cbeae6c7af10eaa0ac53b65265e82ba070a5c56d.png deleted file mode 100644 index 8ca63e10..00000000 Binary files a/_images/math/cbeae6c7af10eaa0ac53b65265e82ba070a5c56d.png and /dev/null differ diff --git a/_images/math/cd4321c696b6b066437c8c595b3e947d8e6677fd.png b/_images/math/cd4321c696b6b066437c8c595b3e947d8e6677fd.png deleted file mode 100644 index 8e42ccca..00000000 Binary files a/_images/math/cd4321c696b6b066437c8c595b3e947d8e6677fd.png and /dev/null differ diff --git a/_images/math/cd4ddd73ef1034644bee05fa8e8da95ef0b44c0f.png b/_images/math/cd4ddd73ef1034644bee05fa8e8da95ef0b44c0f.png deleted file mode 100644 index 284fd363..00000000 Binary files a/_images/math/cd4ddd73ef1034644bee05fa8e8da95ef0b44c0f.png and /dev/null differ diff --git a/_images/math/cd8e8be56f6f811fdaf310b14c95ec82fc9807c2.png b/_images/math/cd8e8be56f6f811fdaf310b14c95ec82fc9807c2.png deleted file mode 100644 index 06ecedb6..00000000 Binary files a/_images/math/cd8e8be56f6f811fdaf310b14c95ec82fc9807c2.png and /dev/null differ diff --git a/_images/math/cdbc74cf3949999438b733112eed4b5f96e882f0.png b/_images/math/cdbc74cf3949999438b733112eed4b5f96e882f0.png deleted file mode 100644 index 8d244c89..00000000 Binary files a/_images/math/cdbc74cf3949999438b733112eed4b5f96e882f0.png and /dev/null differ diff --git a/_images/math/cf51f118fdb301d07c4e0bc8f4f168a8529927c2.png b/_images/math/cf51f118fdb301d07c4e0bc8f4f168a8529927c2.png deleted file mode 100644 index f567a7e9..00000000 Binary files a/_images/math/cf51f118fdb301d07c4e0bc8f4f168a8529927c2.png and /dev/null differ diff --git a/_images/math/cfc0221793fe76a76a7c41c5f6662cb3a4d9646f.png b/_images/math/cfc0221793fe76a76a7c41c5f6662cb3a4d9646f.png deleted file mode 100644 index 5fd8f6f1..00000000 Binary files a/_images/math/cfc0221793fe76a76a7c41c5f6662cb3a4d9646f.png and /dev/null differ diff --git a/_images/math/cfd13a0f26eb7ef0093319a7669da7dd3771dbac.png b/_images/math/cfd13a0f26eb7ef0093319a7669da7dd3771dbac.png deleted file mode 100644 index 32a9b6fa..00000000 Binary files a/_images/math/cfd13a0f26eb7ef0093319a7669da7dd3771dbac.png and /dev/null differ diff --git a/_images/math/d00a9d05571edb02b173788f8613f5847657e37a.png b/_images/math/d00a9d05571edb02b173788f8613f5847657e37a.png deleted file mode 100644 index aa88436c..00000000 Binary files a/_images/math/d00a9d05571edb02b173788f8613f5847657e37a.png and /dev/null differ diff --git a/_images/math/d27c6237ae1103bb818af548df730c0b7e2b0a9e.png b/_images/math/d27c6237ae1103bb818af548df730c0b7e2b0a9e.png deleted file mode 100644 index 181e3175..00000000 Binary files a/_images/math/d27c6237ae1103bb818af548df730c0b7e2b0a9e.png and /dev/null differ diff --git a/_images/math/d2e66cb5b326aed944d39a13fe5849238c32d0b1.png b/_images/math/d2e66cb5b326aed944d39a13fe5849238c32d0b1.png deleted file mode 100644 index 883e4afa..00000000 Binary files a/_images/math/d2e66cb5b326aed944d39a13fe5849238c32d0b1.png and /dev/null differ diff --git a/_images/math/d32c78b759903e3f4bd4fd2ce0b86358f7500c5d.png b/_images/math/d32c78b759903e3f4bd4fd2ce0b86358f7500c5d.png deleted file mode 100644 index 1326331e..00000000 Binary files a/_images/math/d32c78b759903e3f4bd4fd2ce0b86358f7500c5d.png and /dev/null differ diff --git a/_images/math/d4291fba3e7192c1e92f4b064fd1aee7704c04d4.png b/_images/math/d4291fba3e7192c1e92f4b064fd1aee7704c04d4.png deleted file mode 100644 index 9a58e2be..00000000 Binary files a/_images/math/d4291fba3e7192c1e92f4b064fd1aee7704c04d4.png and /dev/null differ diff --git a/_images/math/dabe85fea7a2f637d286b26b338ba440dd477780.png b/_images/math/dabe85fea7a2f637d286b26b338ba440dd477780.png deleted file mode 100644 index d0b5ed04..00000000 Binary files a/_images/math/dabe85fea7a2f637d286b26b338ba440dd477780.png and /dev/null differ diff --git a/_images/math/e6ce310b5bb6222dccc926e85b9f73a24229c53c.png b/_images/math/e6ce310b5bb6222dccc926e85b9f73a24229c53c.png deleted file mode 100644 index 97e27ea8..00000000 Binary files a/_images/math/e6ce310b5bb6222dccc926e85b9f73a24229c53c.png and /dev/null differ diff --git a/_images/math/e8511f458d17f93873bcaf6a93129bba6c0ae8f1.png b/_images/math/e8511f458d17f93873bcaf6a93129bba6c0ae8f1.png deleted file mode 100644 index ed5dbd48..00000000 Binary files a/_images/math/e8511f458d17f93873bcaf6a93129bba6c0ae8f1.png and /dev/null differ diff --git a/_images/math/e89d8b67cc10603ec59c692d2387d039ca552b20.png b/_images/math/e89d8b67cc10603ec59c692d2387d039ca552b20.png deleted file mode 100644 index 5c1f49d8..00000000 Binary files a/_images/math/e89d8b67cc10603ec59c692d2387d039ca552b20.png and /dev/null differ diff --git a/_images/math/e9203da50e1059455123460d4e716c9c7f440cc3.png b/_images/math/e9203da50e1059455123460d4e716c9c7f440cc3.png deleted file mode 100644 index f411cdfc..00000000 Binary files a/_images/math/e9203da50e1059455123460d4e716c9c7f440cc3.png and /dev/null differ diff --git a/_images/math/e9b59e204ab968c949258f84fdab201554bf2338.png b/_images/math/e9b59e204ab968c949258f84fdab201554bf2338.png deleted file mode 100644 index b2e20b3d..00000000 Binary files a/_images/math/e9b59e204ab968c949258f84fdab201554bf2338.png and /dev/null differ diff --git a/_images/math/ec67f244208831f60545f8008a85c32e3f0da9c8.png b/_images/math/ec67f244208831f60545f8008a85c32e3f0da9c8.png deleted file mode 100644 index bc51cf45..00000000 Binary files a/_images/math/ec67f244208831f60545f8008a85c32e3f0da9c8.png and /dev/null differ diff --git a/_images/math/eca65e2fe8109ccd3dd3be789de13a2e7eb8bdd8.png b/_images/math/eca65e2fe8109ccd3dd3be789de13a2e7eb8bdd8.png deleted file mode 100644 index 16bcd8f9..00000000 Binary files a/_images/math/eca65e2fe8109ccd3dd3be789de13a2e7eb8bdd8.png and /dev/null differ diff --git a/_images/math/ef9270877405055756d345facd044e4ab297f858.png b/_images/math/ef9270877405055756d345facd044e4ab297f858.png deleted file mode 100644 index 740653f6..00000000 Binary files a/_images/math/ef9270877405055756d345facd044e4ab297f858.png and /dev/null differ diff --git a/_images/math/f0b551aff0ab52968c9273d9ff7e782a6857c11e.png b/_images/math/f0b551aff0ab52968c9273d9ff7e782a6857c11e.png deleted file mode 100644 index af5b7387..00000000 Binary files a/_images/math/f0b551aff0ab52968c9273d9ff7e782a6857c11e.png and /dev/null differ diff --git a/_images/math/f101b21e0e9af152d837c1c5ad4f533cda7f87ff.png b/_images/math/f101b21e0e9af152d837c1c5ad4f533cda7f87ff.png deleted file mode 100644 index 82a4173f..00000000 Binary files a/_images/math/f101b21e0e9af152d837c1c5ad4f533cda7f87ff.png and /dev/null differ diff --git a/_images/math/f14c7b5bb385a7b8c667f1ef939b30ded4bfc2a9.png b/_images/math/f14c7b5bb385a7b8c667f1ef939b30ded4bfc2a9.png deleted file mode 100644 index b2dd835f..00000000 Binary files a/_images/math/f14c7b5bb385a7b8c667f1ef939b30ded4bfc2a9.png and /dev/null differ diff --git a/_images/math/f2b30171a3b0d3395cb190d1bec47494cba58eef.png b/_images/math/f2b30171a3b0d3395cb190d1bec47494cba58eef.png deleted file mode 100644 index 1cae33ba..00000000 Binary files a/_images/math/f2b30171a3b0d3395cb190d1bec47494cba58eef.png and /dev/null differ diff --git a/_images/math/f3f716e1c56d5ebdca97bb1546662b9e96f5be07.png b/_images/math/f3f716e1c56d5ebdca97bb1546662b9e96f5be07.png deleted file mode 100644 index aea58830..00000000 Binary files a/_images/math/f3f716e1c56d5ebdca97bb1546662b9e96f5be07.png and /dev/null differ diff --git a/_images/math/f48b617185733d8dd6712643f1ab17c736661a06.png b/_images/math/f48b617185733d8dd6712643f1ab17c736661a06.png deleted file mode 100644 index 2578a669..00000000 Binary files a/_images/math/f48b617185733d8dd6712643f1ab17c736661a06.png and /dev/null differ diff --git a/_images/math/f8450baaaa8e6337d276dcb60d0f44b4cb2c164f.png b/_images/math/f8450baaaa8e6337d276dcb60d0f44b4cb2c164f.png deleted file mode 100644 index f46be69b..00000000 Binary files a/_images/math/f8450baaaa8e6337d276dcb60d0f44b4cb2c164f.png and /dev/null differ diff --git a/_images/math/f9c46407a9e24d56deebf1607c12a67a3230b562.png b/_images/math/f9c46407a9e24d56deebf1607c12a67a3230b562.png deleted file mode 100644 index 6a12b023..00000000 Binary files a/_images/math/f9c46407a9e24d56deebf1607c12a67a3230b562.png and /dev/null differ diff --git a/_images/math/fd43f0a696fe2daa6455b8eaabd6f8cdcbf3fd7a.png b/_images/math/fd43f0a696fe2daa6455b8eaabd6f8cdcbf3fd7a.png deleted file mode 100644 index a2bc9933..00000000 Binary files a/_images/math/fd43f0a696fe2daa6455b8eaabd6f8cdcbf3fd7a.png and /dev/null differ diff --git a/_images/math/fd814902b5662370ea31747b343d2b81c37e45ca.png b/_images/math/fd814902b5662370ea31747b343d2b81c37e45ca.png deleted file mode 100644 index 2c6b54b5..00000000 Binary files a/_images/math/fd814902b5662370ea31747b343d2b81c37e45ca.png and /dev/null differ diff --git a/_images/math/fe23d3ea4266cbc9d9f7f6e1baec1cf4e91da64c.png b/_images/math/fe23d3ea4266cbc9d9f7f6e1baec1cf4e91da64c.png deleted file mode 100644 index d254dff9..00000000 Binary files a/_images/math/fe23d3ea4266cbc9d9f7f6e1baec1cf4e91da64c.png and /dev/null differ diff --git a/_images/math/ff154ac06eff91e047bc1cf7ea98b3266656062b.png b/_images/math/ff154ac06eff91e047bc1cf7ea98b3266656062b.png deleted file mode 100644 index f33d6145..00000000 Binary files a/_images/math/ff154ac06eff91e047bc1cf7ea98b3266656062b.png and /dev/null differ diff --git a/_images/enrichment_mstar_vs_flowrate_thumb.png b/_images/mstar_vs_flowrate_thumb.png similarity index 100% rename from _images/enrichment_mstar_vs_flowrate_thumb.png rename to _images/mstar_vs_flowrate_thumb.png diff --git a/_images/r2s_example_geometry.png b/_images/r2s_example_geometry.png new file mode 100644 index 00000000..1b98e26e Binary files /dev/null and b/_images/r2s_example_geometry.png differ diff --git a/_modules/_abcoll.html b/_modules/_abcoll.html index 7fb3caf1..5ab1a110 100644 --- a/_modules/_abcoll.html +++ b/_modules/_abcoll.html @@ -6,27 +6,19 @@ + - - _abcoll — PyNE 0.5.0-rc1 - + _abcoll — PyNE 0.5.11 - - - + + + + + @@ -48,8 +40,7 @@ })(); } - - +
@@ -866,8 +826,8 @@

Navigation

- - - - - - - - - - - -
- - -
- - -
-
-
-
- -

Source code for collections.abc

-from _collections_abc import *
-from _collections_abc import __all__
-
- -
-
-
- - - - - -
-
-
- - -
- - - - \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html index 355da026..72d6c7df 100644 --- a/_modules/index.html +++ b/_modules/index.html @@ -11,11 +11,14 @@ Overview: module code — PyNE 0.5.11 - - + + + + + @@ -62,7 +65,7 @@

Navigation

All modules for which code is available

-
  • collections.abc
  • +
    • _abcoll
    • pyne.ace
    • pyne.alara
    • pyne.bins
    • @@ -102,6 +105,7 @@

      All modules for which code is available

    • pyne.transmute.chainsolve
    • pyne.transmuters
    • pyne.utils
    • +
    • pyne.variancereduction
    • pyne.xs.cache
    • pyne.xs.channels
    • pyne.xs.data_source
    • @@ -170,8 +174,8 @@

      Navigation

      + + + + + @@ -66,11 +69,16 @@

      Source code for pyne.alara

       """This module contains functions relevant to the ALARA activation code and the Chebyshev Rational Approximation Method
       """
       from __future__ import print_function
      +from pyne.xs.data_source import SimpleDataSource
      +from pyne.data import N_A, decay_const, decay_children, branch_ratio
      +from pyne.nucname import serpent, alara, znum, anum
      +from pyne import nucname
      +from pyne.material import Material, from_atom_frac
      +from pyne.mesh import Mesh, MeshError, HAVE_PYMOAB
       import os
       import collections
       from warnings import warn
      -from pyne.utils import QAWarning
      -
      +from pyne.utils import QAWarning, to_sec
       import numpy as np
       import tables as tb
       
      @@ -81,19 +89,12 @@ 

      Source code for pyne.alara

       except NameError:
           basestring = str
       
      -try:
      -    from itaps import iMesh, iBase, iMeshExtensions
      -except ImportError:
      -    warn("the PyTAPS optional dependency could not be imported. "
      -                  "Some aspects of the alara module may be incomplete.",
      -                  QAWarning)
       
      -from pyne.mesh import Mesh, MeshError
      -from pyne.material import Material, from_atom_frac
      -from pyne import nucname
      -from pyne.nucname import serpent, alara, znum, anum
      -from pyne.data import N_A, decay_const, decay_children, branch_ratio
      -from pyne.xs.data_source import SimpleDataSource
      +if HAVE_PYMOAB:
      +    from pyne.mesh import mesh_iterate
      +else:
      +    warn("The PyMOAB optional dependency could not be imported. "
      +         "Some aspects of the mesh module may be incomplete.", QAWarning)
       
       
       
      [docs]def mesh_to_fluxin(flux_mesh, flux_tag, fluxin="fluxin.out", @@ -139,12 +140,10 @@

      Source code for pyne.alara

               If sub_voxel=False, neither cell_fracs nor cell_mats will be used.
       
           """
      -    tag_flux = flux_mesh.mesh.getTagHandle(flux_tag)
      +    tag_flux = flux_mesh.get_tag(flux_tag)
       
           # find number of e_groups
      -    e_groups = flux_mesh.mesh.getTagHandle(flux_tag)[list(
      -        flux_mesh.mesh.iterate(iBase.Type.region,
      -                               iMesh.Topology.all))[0]]
      +    e_groups = tag_flux[list(mesh_iterate(flux_mesh.mesh))[0]]
           e_groups = np.atleast_1d(e_groups)
           num_e_groups = len(e_groups)
       
      @@ -171,8 +170,8 @@ 

      Source code for pyne.alara

                       output = _output_flux(ves[row['idx']], tag_flux, output, start,
                                             stop, direction)
       
      -    with open(fluxin, "w") as f:
      - f.write(output) + with open(fluxin, "w") as f: + f.write(output)
      [docs]def photon_source_to_hdf5(filename, chunkshape=(10000,)): @@ -185,7 +184,7 @@

      Source code for pyne.alara

               idx : int
                   The volume element index assuming the volume elements appear in xyz
                   order (z changing fastest) within the photon source file in the case of
      -            a structured mesh or imesh.iterate() order for an unstructured mesh.
      +            a structured mesh or mesh.mesh_iterate() order for an unstructured mesh.
               nuc : str
                   The nuclide name as it appears in the photon source file.
               time : str
      @@ -211,7 +210,7 @@ 

      Source code for pyne.alara

               ('nuc', 'S6'),
               ('time', 'S20'),
               ('phtn_src', np.float64, G),
      -        ])
      +    ])
       
           filters = tb.Filters(complevel=1, complib='zlib')
           h5f = tb.open_file(filename + '.h5', 'w', filters=filters)
      @@ -242,8 +241,8 @@ 

      Source code for pyne.alara

           if i % chunksize != 0:
               tab.append(rows[:j+1])
       
      -    h5f.close()
      - f.close() + h5f.close() + f.close()
      [docs]def photon_source_hdf5_to_mesh(mesh, filename, tags, sub_voxel=False, @@ -256,7 +255,7 @@

      Source code for pyne.alara

           Parameters
           ----------
           mesh : PyNE Mesh
      -       The object containing the imesh instance to be tagged.
      +       The object containing the PyMOAB instance to be tagged.
           filename : str
               The path of the hdf5 version of the photon source file.
           tags: dict
      @@ -282,22 +281,23 @@ 

      Source code for pyne.alara

           # find number of energy groups
           with tb.open_file(filename) as h5f:
               num_e_groups = len(h5f.root.data[0][3])
      -    max_num_cells = -1
      +    max_num_cells = 1
           ve0 = next(mesh.iter_ve())
           if sub_voxel:
               num_vol_elements = len(mesh)
               subvoxel_array = _get_subvoxel_array(mesh, cell_mats)
      -        max_num_cells = \
      -                len(mesh.mesh.getTagHandle('cell_number')[ve0])
      -    else:
      -        max_num_cells = 1
      +        # get max_num_cells
      +        max_num_cells = len(np.atleast_1d(mesh.cell_number[ve0]))
       
           # create a dict of tag handles for all keys of the tags dict
           tag_handles = {}
      +    tag_size = num_e_groups * max_num_cells
           for tag_name in tags.values():
      -        tag_handles[tag_name] = \
      -                mesh.mesh.createTag(tag_name, num_e_groups * max_num_cells,
      -                                    float)
      +
      +        mesh.tag(tag_name, np.zeros(tag_size, dtype=float), 'nat_mesh',
      +                 size=tag_size, dtype=float)
      +        tag_handles[tag_name] = mesh.get_tag(tag_name)
      +
           # creat a list of decay times (strings) in the source file
           phtn_src_dc = []
           with tb.open_file(filename) as h5f:
      @@ -336,11 +336,12 @@ 

      Source code for pyne.alara

                       dtype=float)
                   temp_mesh_data.fill(0.0)
                   for sve, subvoxel in enumerate(subvoxel_array):
      -                temp_mesh_data[subvoxel['idx'],subvoxel['scid'],:] = \
      +                temp_mesh_data[subvoxel['idx'], subvoxel['scid'], :] = \
                           matched_data[sve][3][:]
                   for i, _, ve in mesh:
      -                tag_handles[tags[cond]][ve] = \
      - temp_mesh_data[i,:].reshape(max_num_cells * num_e_groups) + tag_handles[tags[cond]][ve] = \ + temp_mesh_data[i, :].reshape(max_num_cells * num_e_groups)
      +
      [docs]def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, sig_figs=6, sub_voxel=False): @@ -388,9 +389,9 @@

      Source code for pyne.alara

       
           # Create three strings in order to create all ALARA input blocks in a
           # single mesh iteration.
      -    volume = 'volume\n' # volume input block
      -    mat_loading = 'mat_loading\n' # material loading input block
      -    mixture = '' # mixture blocks
      +    volume = 'volume\n'  # volume input block
      +    mat_loading = 'mat_loading\n'  # material loading input block
      +    mixture = ''  # mixture blocks
       
           unique_mixtures = []
           if not sub_voxel:
      @@ -412,21 +413,21 @@ 

      Source code for pyne.alara

                   if ve_mixture not in unique_mixtures:
                       unique_mixtures.append(ve_mixture)
                       mixture += 'mixture mix_{0}\n'.format(
      -                                            unique_mixtures.index(ve_mixture))
      +                    unique_mixtures.index(ve_mixture))
                       for key, value in ve_mixture.items():
                           mixture += '    material {0} 1 {1}\n'.format(key, value)
       
                       mixture += 'end\n\n'
       
                   mat_loading += '    zone_{0}    mix_{1}\n'.format(i,
      -                            unique_mixtures.index(ve_mixture))
      +                                                              unique_mixtures.index(ve_mixture))
           else:
               ves = list(mesh.iter_ve())
               sve_count = 0
               for row in cell_fracs:
                   if len(cell_mats[row['cell']].comp) != 0:
                       volume += '    {0: 1.6E}    zone_{1}\n'.format(
      -                mesh.elem_volume(ves[row['idx']]) * row['vol_frac'], sve_count)
      +                    mesh.elem_volume(ves[row['idx']]) * row['vol_frac'], sve_count)
                       cell_mat = cell_mats[row['cell']]
                       name = cell_mat.metadata['name']
                       if name not in unique_mixtures:
      @@ -444,7 +445,7 @@ 

      Source code for pyne.alara

           with open(geom_file, 'w') as f:
               f.write(geometry + volume + mat_loading + mixture)
       
      -    matlib = '' # ALARA material library string
      +    matlib = ''  # ALARA material library string
       
           printed_mats = []
           print_void = False
      @@ -459,14 +460,15 @@ 

      Source code for pyne.alara

                                                                len(mat.comp))
                   for nuc, comp in mat.comp.iteritems():
                       matlib += '{0}    {1: 1.6E}    {2}\n'.format(alara(nuc),
      -                                                      comp*100.0, znum(nuc))
      +                                                             comp*100.0, znum(nuc))
                   matlib += '\n'
       
           if print_void:
      -       matlib += '# void material\nmat_void 0.0 1\nhe 1 2\n'
      +        matlib += '# void material\nmat_void 0.0 1\nhe 1 2\n'
      +
      +    with open(matlib_file, 'w') as f:
      +        f.write(matlib)
      - with open(matlib_file, 'w') as f:
      - f.write(matlib) def _is_void(name): """Private function for determining if a material name specifies void. @@ -474,11 +476,12 @@

      Source code for pyne.alara

           lname = name.lower()
           return 'vacuum' in lname or 'void' in lname or 'graveyard' in lname
       
      +
       
      [docs]def mesh_to_geom(mesh, geom_file, matlib_file): """This function reads the materials of a PyNE mesh object and prints the geometry and materials portion of an ALARA input file, as well as a corresponding matlib file. If the mesh is structured, xyz ordering is used - (z changing fastest). If the mesh is unstructured iMesh.iterate order is + (z changing fastest). If the mesh is unstructured the mesh_iterate order is used. Parameters @@ -497,10 +500,10 @@

      Source code for pyne.alara

       
           # Create three strings in order to create all ALARA input blocks in a
           # single mesh iteration.
      -    volume = "volume\n" # volume input block
      -    mat_loading = "mat_loading\n" # material loading input block
      -    mixture = "" # mixture blocks
      -    matlib = "" # ALARA material library string
      +    volume = "volume\n"  # volume input block
      +    mat_loading = "mat_loading\n"  # material loading input block
      +    mixture = ""  # mixture blocks
      +    matlib = ""  # ALARA material library string
       
           for i, mat, ve in mesh:
               volume += "    {0: 1.6E}    zone_{1}\n".format(mesh.elem_volume(ve), i)
      @@ -521,8 +524,9 @@ 

      Source code for pyne.alara

           with open(geom_file, 'w') as f:
               f.write(geometry + volume + mat_loading + mixture)
       
      -    with open(matlib_file, 'w') as f:
      - f.write(matlib) + with open(matlib_file, 'w') as f: + f.write(matlib)
      +
      [docs]def num_density_to_mesh(lines, time, m): """num_density_to_mesh(lines, time, m) @@ -567,7 +571,7 @@

      Source code for pyne.alara

           # Read through file until enough material objects are create to fill mesh.
           while count != len(m):
               # Pop lines to the start of the next material.
      -        while (lines.pop(0) + " " )[0] != '=':
      +        while (lines.pop(0) + " ")[0] != '=':
                   pass
       
               # Create a new material object and add to mats dict.
      @@ -586,14 +590,14 @@ 

      Source code for pyne.alara

               mat = from_atom_frac(nucvec, density=density, mass=0)
               mats[count] = mat
               count += 1
      -
      - m.mats = mats + + m.mats = mats
      [docs]def irradiation_blocks(material_lib, element_lib, data_library, cooling, - flux_file, irr_time, output = "number_density", - truncation=1E-12, impurity = (5E-6, 1E-3), - dump_file = "dump_file"): + flux_file, irr_time, output="number_density", + truncation=1E-12, impurity=(5E-6, 1E-3), + dump_file="dump_file"): """irradiation_blocks(material_lib, element_lib, data_library, cooling, flux_file, irr_time, output = "number_density", truncation=1E-12, impurity = (5E-6, 1E-3), @@ -661,7 +665,7 @@

      Source code for pyne.alara

       
           # Flux schedule
           s += ("schedule simple_schedule\n"
      -         "    {0} flux_1 pulse_once 0 s\nend\n\n".format(irr_time))
      +          "    {0} flux_1 pulse_once 0 s\nend\n\n".format(irr_time))
       
           s += "pulsehistory pulse_once\n    1 0.0 s\nend\n\n"
       
      @@ -679,8 +683,9 @@ 

      Source code for pyne.alara

           s += "truncation {0}\n".format(truncation)
           s += "impurity {0} {1}\n".format(impurity[0], impurity[1])
           s += "dump_file {0}\n".format(dump_file)
      -
      - return s + + return s
      +
      [docs]def phtn_src_energy_bounds(input_file): """Reads an ALARA input file and extracts the energy bounds from the @@ -705,9 +710,10 @@

      Source code for pyne.alara

               upper_bounds = [float(x) for x in line.split()[4:]]
               while len(upper_bounds) < num_groups:
                   line = f.readline()
      -            upper_bounds += [float(x) for x in line.split("#")[0].split('end')[0].split()]
      -    e_bounds = [0.] + upper_bounds
      - return e_bounds + upper_bounds += [float(x) for x in line.split("#") + [0].split('end')[0].split()] + e_bounds = [0.] + upper_bounds + return e_bounds
      def _build_matrix(N): @@ -737,6 +743,7 @@

      Source code for pyne.alara

                       A[i, k] += branch_ratio(N_id[k], N_id[i])*decay_const(N_id[k])
           return A
       
      +
       def _rat_apprx_14(A, t, n_0):
           """ CRAM of order 14
       
      @@ -750,21 +757,21 @@ 

      Source code for pyne.alara

               Inital composition vector
           """
       
      -    theta = np.array([ -8.8977731864688888199 + 16.630982619902085304j,
      -                   -3.7032750494234480603 + 13.656371871483268171j,
      -                   -.2087586382501301251 + 10.991260561901260913j,
      -                   3.9933697105785685194 + 6.0048316422350373178j,
      -                   5.0893450605806245066 + 3.5888240290270065102j,
      -                   5.6231425727459771248 + 1.1940690463439669766j,
      -                   2.2697838292311127097 + 8.4617379730402214019j])
      +    theta = np.array([-8.8977731864688888199 + 16.630982619902085304j,
      +                      -3.7032750494234480603 + 13.656371871483268171j,
      +                      -.2087586382501301251 + 10.991260561901260913j,
      +                      3.9933697105785685194 + 6.0048316422350373178j,
      +                      5.0893450605806245066 + 3.5888240290270065102j,
      +                      5.6231425727459771248 + 1.1940690463439669766j,
      +                      2.2697838292311127097 + 8.4617379730402214019j])
       
           alpha = np.array([-.000071542880635890672853 + .00014361043349541300111j,
      -                   .0094390253107361688779 - .01784791958483017511j,
      -                   -.37636003878226968717 + .33518347029450104214j,
      -                   -23.498232091082701191 - 5.8083591297142074004j,
      -                   46.933274488831293047 + 45.643649768827760791j,
      -                   -27.875161940145646468 - 102.14733999056451434j,
      -                   4.8071120988325088907 - 1.3209793837428723881j])
      +                      .0094390253107361688779 - .01784791958483017511j,
      +                      -.37636003878226968717 + .33518347029450104214j,
      +                      -23.498232091082701191 - 5.8083591297142074004j,
      +                      46.933274488831293047 + 45.643649768827760791j,
      +                      -27.875161940145646468 - 102.14733999056451434j,
      +                      4.8071120988325088907 - 1.3209793837428723881j])
       
           alpha_0 = np.array([1.8321743782540412751e-14])
       
      @@ -773,13 +780,15 @@ 

      Source code for pyne.alara

           n = 0*n_0
       
           for j in range(7):
      -        n = n + np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0)
      +        n = n + np.linalg.solve(A - theta[j] *
      +                                np.identity(np.shape(A)[0]), alpha[j]*n_0)
       
           n = 2*n.real
           n = n + alpha_0*n_0
       
           return n
       
      +
       def _rat_apprx_16(A, t, n_0):
           """ CRAM of order 16
       
      @@ -792,16 +801,16 @@ 

      Source code for pyne.alara

           n_0: numpy array
               Inital composition vector
           """
      -    theta = np.array([ -10.843917078696988026 + 19.277446167181652284j,
      -                   -5.2649713434426468895 + 16.220221473167927305j,
      -                   5.9481522689511774808 + 3.5874573620183222829j,
      -                   3.5091036084149180974 + 8.4361989858843750826j,
      -                   6.4161776990994341923 + 1.1941223933701386874j,
      -                   1.4193758971856659786 + 10.925363484496722585j,
      -                   4.9931747377179963991 + 5.9968817136039422260j,
      -                   -1.4139284624888862114 + 13.497725698892745389j])
      -
      -    alpha = np.array([ -.0000005090152186522491565 - .00002422001765285228797j,
      +    theta = np.array([-10.843917078696988026 + 19.277446167181652284j,
      +                      -5.2649713434426468895 + 16.220221473167927305j,
      +                      5.9481522689511774808 + 3.5874573620183222829j,
      +                      3.5091036084149180974 + 8.4361989858843750826j,
      +                      6.4161776990994341923 + 1.1941223933701386874j,
      +                      1.4193758971856659786 + 10.925363484496722585j,
      +                      4.9931747377179963991 + 5.9968817136039422260j,
      +                      -1.4139284624888862114 + 13.497725698892745389j])
      +
      +    alpha = np.array([-.0000005090152186522491565 - .00002422001765285228797j,
                             .00021151742182466030907 + .0043892969647380673918j,
                             113.39775178483930527 + 101.9472170421585645j,
                             15.059585270023467528 - 5.7514052776421819979j,
      @@ -812,18 +821,19 @@ 

      Source code for pyne.alara

       
           alpha_0 = np.array([2.1248537104952237488e-16])
       
      -
           s = 8
           A = A*t
           n = 0*n_0
       
           for j in range(8):
      -        n = n + np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0)
      +        n = n + np.linalg.solve(A - theta[j] *
      +                                np.identity(np.shape(A)[0]), alpha[j]*n_0)
       
           n = 2*n.real
           n = n + alpha_0*n_0
           return n
       
      +
       
      [docs]def cram(N, t, n_0, order): """ This function returns matrix exponential solution n using CRAM14 or CRAM16 @@ -849,10 +859,12 @@

      Source code for pyne.alara

               return _rat_apprx_16(A, t, n_0)
       
           else:
      -        msg = 'Rational approximation of degree {0} is not supported.'.format(order)
      - raise ValueError(msg) + msg = 'Rational approximation of degree {0} is not supported.'.format( + order) + raise ValueError(msg)
      -def _output_flux(ve, tag_flux,output,start,stop,direction): + +def _output_flux(ve, tag_flux, output, start, stop, direction): """ This function is used to get neutron flux for fluxin @@ -879,6 +891,7 @@

      Source code for pyne.alara

           output += "\n\n"
           return output
       
      +
       def _get_subvoxel_array(mesh, cell_mats):
           """
           This function returns an array of subvoxels.
      @@ -899,7 +912,7 @@ 

      Source code for pyne.alara

                       The cell index of the cell in that voxel
       
           """
      -    cell_number_tag = mesh.mesh.getTagHandle('cell_number')
      +    cell_number_tag = mesh.cell_number
           subvoxel_array = np.zeros(0, dtype=[(b'svid', np.int64),
                                               (b'idx', np.int64),
                                               (b'scid', np.int64)])
      @@ -909,37 +922,21 @@ 

      Source code for pyne.alara

           # calculate the total number of non-void sub-voxel
           non_void_sv_num = 0
           for i, _, ve in mesh:
      -        for c, cell in enumerate(cell_number_tag[ve]):
      -            if cell > 0 and len(cell_mats[cell].comp): #non-void cell
      +        for c, cell in enumerate(np.atleast_1d(cell_number_tag[ve])):
      +            if cell > 0 and len(cell_mats[cell].comp):  # non-void cell
                       temp_subvoxel[0] = (non_void_sv_num, i, c)
                       subvoxel_array = np.append(subvoxel_array, temp_subvoxel)
                       non_void_sv_num += 1
       
           return subvoxel_array
       
      -_TO_SEC = {
      -    's': 1,
      -    'second': 1,
      -    'm': 60,
      -    'minute': 60,
      -    'h': 60 * 60,
      -    'hour': 60 * 60,
      -    'd': 60 * 60 * 24,
      -    'day': 60 * 60 * 24,
      -    'w': 60 * 60 * 24 * 7,
      -    'week': 60 * 60 * 24 * 7,
      -    'y': 60 * 60 * 24 * 365.25,
      -    'year': 60 * 60 * 24 * 365.25,
      -    'c': 60 * 60 * 24 * 365.25 * 100,
      -    'century': 60 * 60 * 24 * 365.25 * 100,
      -}
       
       def _convert_unit_to_s(dc):
           """
           This function return a float number represent a time in unit of s.
           Parameters
           ----------
      -    dc : string. Contain a num and an unit. 
      +    dc : string. Contain a num and an unit.
       
           Returns
           -------
      @@ -947,37 +944,46 @@ 

      Source code for pyne.alara

           """
           # get num and unit
           num, unit = dc.split()
      -    conv = _TO_SEC.get(unit, None)
      -    if conv:
      -        return float(num) * conv
      -    else:
      -        raise ValueError('Invalid unit: {0}'.format(unit))
      +    return to_sec(float(num), unit)
      +
       
       def _find_phsrc_dc(idc, phtn_src_dc):
           """
      -    This function return a string representing a time in phsrc_dc.
      +    This function returns a string representing a time in phsrc_dc.
      +
           Parameters
           ----------
      -    idc : string. Represent a time, input decay time
      -    phtn_src_dc : list of string. Decay times in phtn_src file.
      +    idc : string
      +        Represents a time, input decay time
      +    phtn_src_dc : list of strings
      +        Decay times in phtn_src file
       
      -    return : odc, string. output mathched decay time.
      -    """ 
      +    Returns
      +    -------
      +    string from phtn_src_dc list that mathches idc
      +    """
      +    # Check the existence of idc in phtn_src_dc list.
           if idc in phtn_src_dc:
      -        # if idc exist in phtn_src_dc, directly return idc
               return idc
      +    # Direct matching cannot be found. Convert units to [s] and compare.
           else:
      -        # the idc doesn't exist in phtn_src_dc, convert the unit to `s`,
      +        # convert idc to [s]
               idc_s = _convert_unit_to_s(idc)
      -        phtn_src_dc_s = []
      -        for i, dc in enumerate(phtn_src_dc):
      +        # Loop over decay times in phtn_src_dc list and compare to idc_s.
      +        for dc in phtn_src_dc:
      +            # Skip "shutdown" string in list.
      +            if dc == 'shutdown':
      +                continue
      +            # Convert to [s].
                   dc_s = _convert_unit_to_s(dc)
      -            if (abs(idc_s - dc_s)/dc_s) < 1e-6:
      -                return phtn_src_dc[i]
      -        raise ValueError('Decay time {0} not found in phtn_src file'.format(idc)) 
      -
      -
      -
      +            if idc_s == dc_s:
      +                # idc_s matches dc_s. return original string, dc.
      +                return dc
      +            elif dc_s != 0.0 and (abs(idc_s - dc_s)/dc_s) < 1e-6:
      +                return dc
      +        # if idc doesn't match any string in phtn_src_dc list, raise an error.
      +        raise ValueError(
      +            'Decay time {0} not found in phtn_src file'.format(idc))
       
      @@ -1043,8 +1049,8 @@

      Navigation

      + + + + + @@ -80,7 +83,7 @@

      Source code for pyne.cccc

       A description of several CCCC formats are available online for ISOTXS_, MATXS_,
       RTFLUX_, and RZFLUX_. Other format specifications can be found in Los Alamos
       Report LA-5324-MS_.
      -    
      +
       .. _ISOTXS: http://t2.lanl.gov/codes/transx-hyper/isotxs.html
       
       .. _MATXS: http://t2.lanl.gov/codes/transx-hyper/matxs.html
      @@ -102,6 +105,7 @@ 

      Source code for pyne.cccc

       
       warn(__name__ + " is not yet QA compliant.", QAWarning)
       
      +
       
      [docs]class Isotxs(_BinaryReader): """An Isotxs object represents a binary ISOTXS file written according to the CCCC specifications. @@ -135,15 +139,15 @@

      Source code for pyne.cccc

           ----------
           filename : str
               Path of the ISOTXS file to load.
      -    
      +
           """
      -    
      +
           def __init__(self, filename):
               super(Isotxs, self).__init__(filename)
       
               # Initialize attributes
               self.fc = {}       # file control info
      -        self.nuclides = [] #: List of nuclides in ISOTXS file.
      +        self.nuclides = []  # : List of nuclides in ISOTXS file.
       
       
      [docs] def read(self): """Read through and parse the ISOTXS file.""" @@ -155,33 +159,33 @@

      Source code for pyne.cccc

               # Read file-wide chi-distribution matrix if present. Note that if
               # file-wide chi is given as a vector, it will be read during
               # the read_file_data method.
      -        if self.fc['ichidst']>1:
      +        if self.fc['ichidst'] > 1:
                   self._read_chi_data()
       
               # Read nuclide data
               for nucName in self.nucNames:
                   # Create nuclide object
                   nuc = _Nuclide(nucName)
      -            
      +
                   # Read nuclide name and global data
                   self._read_nuclide_data(nuc)
       
                   # Read nuclide cross sections
      -            self._read_nuclide_xs(nuc)   
      +            self._read_nuclide_xs(nuc)
       
                   # Read nuclide chi data if present
      -            if nuc.libParams['chiFlag']>1:
      +            if nuc.libParams['chiFlag'] > 1:
                       self._read_nuclide_chi(nuc)
      -                
      +
                   # Read nuclide scattering matrix
                   for block in range(self.fc['nscmax']):
                       for subBlock in range(self.fc['nsblok']):
                           if nuc.libParams['ords'][block] > 0:
                               self._read_nuclide_scatter(nuc, block, subBlock)
       
      -            # Add nuclide to dictionary
      - self.nuclides.append(nuc) - + # Add nuclide to dictionary + self.nuclides.append(nuc)
      + def _read_file_ID(self): """Reads the file identification block. This block is always present in the ISOTXS format and contains a label and file version number. @@ -193,26 +197,29 @@

      Source code for pyne.cccc

               # Read data from file identification record
               self.label = fileID.get_string(24)[0]
               self.fileVersion = fileID.get_int()[0]
      -        
      +
           def _read_file_control(self):
               """Reads the file control block. This block is always present and gives
               many parameters for the file including number of energy groups, number
               of isotopes, etc.
               """
      -        
      +
               # Get file control record
               fc = self.get_fortran_record()
       
               # Read data from file control record
      -        self.fc['ngroup'] = fc.get_int()[0] # Number of energy groups in file
      -        self.fc['niso'] = fc.get_int()[0] # Number of isotopes in file
      -        self.fc['maxup'] = fc.get_int()[0] # Maximum number of upscatter groups
      -        self.fc['maxdown'] = fc.get_int()[0] # Maximum number of downscatter groups
      -        self.fc['maxord'] = fc.get_int()[0] # Maximum scattering order
      -        self.fc['ichidst'] = fc.get_int()[0] # File-wide fission spectrum flag
      -        self.fc['nscmax'] = fc.get_int()[0] # Max blocks of scatter data (seems to be actual number)
      -        self.fc['nsblok'] = fc.get_int()[0] # Number of subblocks
      -        
      +        self.fc['ngroup'] = fc.get_int()[0]  # Number of energy groups in file
      +        self.fc['niso'] = fc.get_int()[0]  # Number of isotopes in file
      +        # Maximum number of upscatter groups
      +        self.fc['maxup'] = fc.get_int()[0]
      +        # Maximum number of downscatter groups
      +        self.fc['maxdown'] = fc.get_int()[0]
      +        self.fc['maxord'] = fc.get_int()[0]  # Maximum scattering order
      +        self.fc['ichidst'] = fc.get_int()[0]  # File-wide fission spectrum flag
      +        # Max blocks of scatter data (seems to be actual number)
      +        self.fc['nscmax'] = fc.get_int()[0]
      +        self.fc['nsblok'] = fc.get_int()[0]  # Number of subblocks
      +
           def _read_file_data(self):
               """Reads the file data block. This block is always present and contains
               isotope names, global chi distribution, energy group structure, and
      @@ -224,27 +231,27 @@ 

      Source code for pyne.cccc

       
               # Skip identification label of file
               fileData.get_string(12*8)
      -        
      +
               # Read nuclide label for each nuclide
               self.nucNames = fileData.get_string(8, self.fc['niso'])
               self.nucNames = [name.strip() for name in self.nucNames]
      -            
      +
               # Read file-wide chi distribution vector
      -        if self.fc['ichidst']==1:
      +        if self.fc['ichidst'] == 1:
                   self.chi = fileData.get_float(self.fc['ngroup'])
      -        
      +
               #: Mean neutron velocity in each group
               self.vel = fileData.get_float(self.fc['ngroup'])
       
               # Read maximum energy bound of each group
               self.emax = fileData.get_float(self.fc['ngroup'])
      -        
      +
               # Read minimum energy bound of set
               self.emin = fileData.get_float()[0]
      -        
      +
               # Read number of records to be skipped to read data for a given nuclide
               self.locs = fileData.get_int(self.fc['niso'])
      -            
      +
           def _read_chi_data(self):
               """Reads file-wide chi-distribution matrix. In most cases, chi will be
               given as a vector, not a matrix, and thus in such cases this routine is
      @@ -252,7 +259,7 @@ 

      Source code for pyne.cccc

               """
       
               raise NotImplementedError
      -    
      +
           def _read_nuclide_data(self, nuc):
               """Read the following individual nuclide XS record. Load data into nuc.
               This record contains non-mg data like atomic mass, temperature, and some
      @@ -263,27 +270,35 @@ 

      Source code for pyne.cccc

               r = self.get_fortran_record()
       
               # Read nuclide data
      -        nuc.libParams['nuclide'] = r.get_string(8)[0].strip() # absolute nuclide label
      -        nuc.libParams['libName'] = r.get_string(8)[0] # library name (ENDFV, etc. )
      +        nuc.libParams['nuclide'] = r.get_string(
      +            8)[0].strip()  # absolute nuclide label
      +        nuc.libParams['libName'] = r.get_string(
      +            8)[0]  # library name (ENDFV, etc. )
               nuc.libParams['isoIdent'] = r.get_string(8)[0]
      -        nuc.libParams['amass'] = r.get_float()[0] # gram atomic mass
      -        nuc.libParams['efiss'] = r.get_float()[0] # thermal energy yield/fission
      -        nuc.libParams['ecapt'] = r.get_float()[0] # thermal energy yield/capture
      -        nuc.libParams['temp'] = r.get_float()[0] # nuclide temperature (K)
      -        nuc.libParams['sigPot'] = r.get_float()[0] # potential scattering (b/atom)
      -        nuc.libParams['adens'] = r.get_float()[0] # density of nuclide (atom/b-cm)
      -        nuc.libParams['classif'] = r.get_int()[0] # nuclide classification
      -        nuc.libParams['chiFlag'] = r.get_int()[0] # fission spectrum flag
      -        nuc.libParams['fisFlag'] = r.get_int()[0] # (n,f) cross section flag
      -        nuc.libParams['nalph'] = r.get_int()[0] # (n,alpha) cross section flag
      -        nuc.libParams['np'] = r.get_int()[0] # (n,p) cross section flag
      -        nuc.libParams['n2n'] = r.get_int()[0] # (n,2n) cross section flag
      -        nuc.libParams['nd'] = r.get_int()[0] # (n,d) cross section flag
      -        nuc.libParams['nt'] = r.get_int()[0] # (n,t) cross section flag
      -        nuc.libParams['ltot'] = r.get_int()[0] # number of moments of total xs
      -        nuc.libParams['ltrn'] = r.get_int()[0] # number of moments of transport xs
      -        nuc.libParams['strpd'] = r.get_int()[0] # number of coord directions for transport xs
      -        
      +        nuc.libParams['amass'] = r.get_float()[0]  # gram atomic mass
      +        # thermal energy yield/fission
      +        nuc.libParams['efiss'] = r.get_float()[0]
      +        # thermal energy yield/capture
      +        nuc.libParams['ecapt'] = r.get_float()[0]
      +        nuc.libParams['temp'] = r.get_float()[0]  # nuclide temperature (K)
      +        # potential scattering (b/atom)
      +        nuc.libParams['sigPot'] = r.get_float()[0]
      +        # density of nuclide (atom/b-cm)
      +        nuc.libParams['adens'] = r.get_float()[0]
      +        nuc.libParams['classif'] = r.get_int()[0]  # nuclide classification
      +        nuc.libParams['chiFlag'] = r.get_int()[0]  # fission spectrum flag
      +        nuc.libParams['fisFlag'] = r.get_int()[0]  # (n,f) cross section flag
      +        nuc.libParams['nalph'] = r.get_int()[0]  # (n,alpha) cross section flag
      +        nuc.libParams['np'] = r.get_int()[0]  # (n,p) cross section flag
      +        nuc.libParams['n2n'] = r.get_int()[0]  # (n,2n) cross section flag
      +        nuc.libParams['nd'] = r.get_int()[0]  # (n,d) cross section flag
      +        nuc.libParams['nt'] = r.get_int()[0]  # (n,t) cross section flag
      +        nuc.libParams['ltot'] = r.get_int()[0]  # number of moments of total xs
      +        # number of moments of transport xs
      +        nuc.libParams['ltrn'] = r.get_int()[0]
      +        # number of coord directions for transport xs
      +        nuc.libParams['strpd'] = r.get_int()[0]
      +
               # Read scattering matrix type identifications for each scatter
               # block. Could be total, inelastic, elastic, n2n
               nuc.libParams['scatFlag'] = r.get_int(self.fc['nscmax'])
      @@ -296,15 +311,15 @@ 

      Source code for pyne.cccc

               nuc.libParams['jband'] = {}
               for n in range(self.fc['nscmax']):
                   for j in range(self.fc['ngroup']):
      -                nuc.libParams['jband'][j,n] = r.get_int()[0]
      -                
      +                nuc.libParams['jband'][j, n] = r.get_int()[0]
      +
               # Read position of in-group scattering cross section for group j,
               # scattering block n, counted from first word of group j data
               nuc.libParams['jj'] = {}
               for n in range(self.fc['nscmax']):
                   for j in range(self.fc['ngroup']):
      -                nuc.libParams['jj'][j,n] = r.get_int()[0]
      -        
      +                nuc.libParams['jj'][j, n] = r.get_int()[0]
      +
           def _read_nuclide_xs(self, nuc):
               """Reads principal microscopic multigroup cross-section data for a
               single nuclide.
      @@ -312,60 +327,60 @@ 

      Source code for pyne.cccc

       
               # Get cross section record
               r = self.get_fortran_record()
      -        
      +
               # PL-weighted transport cross section in group g for Legendre order l
               for l in range(nuc.libParams['ltrn']):
                   for g in range(self.fc['ngroup']):
      -                nuc.micros['transport',g,l] = r.get_float()[0]
      -        
      +                nuc.micros['transport', g, l] = r.get_float()[0]
      +
               # PL-weighted total cross section in group g for Legendre order l
               for l in range(nuc.libParams['ltot']):
                   for g in range(self.fc['ngroup']):
      -                nuc.micros['total',g,l] = r.get_float()[0]
      -        
      +                nuc.micros['total', g, l] = r.get_float()[0]
      +
               # Microscopic (n,gamma) cross section in group g
               for g in range(self.fc['ngroup']):
      -            nuc.micros['n,g',g] = r.get_float()[0]
      -    
      +            nuc.micros['n,g', g] = r.get_float()[0]
      +
               # Read fission data if present
               if nuc.libParams['fisFlag'] > 0:
      -            
      +
                   # Microscopic (n,fission) cross section in group g
                   for g in range(self.fc['ngroup']):
      -                nuc.micros['fis',g] = r.get_float()[0]
      -        
      +                nuc.micros['fis', g] = r.get_float()[0]
      +
                   # Total number of neutrons/fission in group g
                   for g in range(self.fc['ngroup']):
      -                nuc.micros['nu',g] = r.get_float()[0]
      -        
      +                nuc.micros['nu', g] = r.get_float()[0]
      +
               # Read fission spectrum vector if present
               if nuc.libParams['chiFlag'] == 1:
                   # Nuclide chi in group g
                   for g in range(self.fc['ngroup']):
      -                nuc.micros['chi',g]=r.get_float()[0]
      +                nuc.micros['chi', g] = r.get_float()[0]
               else:
                   if nuc.libParams['fisFlag'] > 0:
                       # Make sure file-wide chi exists
                       assert self.fc['ichidst'] == 1, "Fissile nuclide %s in library but no individual or global chi!" % nuc
      -                
      +
                       # Set the chi to the file-wide chi distribution if this nuclide
                       # has a fission cross section
                       for g in range(self.fc['ngroup']):
      -                    nuc.micros['chi',g]=self.chi[g]
      -        
      +                    nuc.micros['chi', g] = self.chi[g]
      +
               # Read some other important cross sections, if they exist
      -        for xstype in ['nalph','np','n2n','nd','nt']:
      +        for xstype in ['nalph', 'np', 'n2n', 'nd', 'nt']:
                   if nuc.libParams[xstype]:
                       for g in range(self.fc['ngroup']):
      -                    nuc.micros[xstype,g]=r.get_float()[0]
      -        
      +                    nuc.micros[xstype, g] = r.get_float()[0]
      +
               # Read coordinate direction transport cross section (for various
               # coordinate directions)
               if nuc.libParams['strpd'] > 0:
                   for i in range(nuc.libParams['strpd']):
                       for g in range(self.fc['ngroup']):
      -                    nuc.micros['strpd',g,i] = r.get_float()[0]
      -        
      +                    nuc.micros['strpd', g, i] = r.get_float()[0]
      +
           def _read_nuclide_chi(self, nuc):
               """Reads nuclide-level fission spectrum matrix. In most cases, chi will
               be given as a vector, not a matrix, and thus in such cases this routine
      @@ -373,7 +388,7 @@ 

      Source code for pyne.cccc

               """
       
               raise NotImplementedError
      -    
      +
           def _read_nuclide_scatter(self, nuc, block, subBlock):
               """Read nuclide scattering matrix.
       
      @@ -391,7 +406,7 @@ 

      Source code for pyne.cccc

               nsblok = self.fc['nsblok']
       
               # Make sure blocks and subblocks are indexed starting from 1
      -        m = subBlock + 1 
      +        m = subBlock + 1
               n = block + 1
       
               # Determine number of scattering orders in this block
      @@ -403,15 +418,15 @@ 

      Source code for pyne.cccc

               jup = m*((ng - 1)//nsblok + 1)
               ju = min(ng, jup)
       
      -        # Figure out kmax for this sub-block. 
      +        # Figure out kmax for this sub-block.
               kmax = 0
               for j in range(jl, ju+1):
                   g = j - 1  # convert to groups starting at 0
      -            kmax += nuc.libParams['jband'][g,block] 
      +            kmax += nuc.libParams['jband'][g, block]
                   # scattering from group j
      -        
      +
               for order in range(lordn):
      -            #for k in range(kmax):
      +            # for k in range(kmax):
                   for j in range(jl, ju+1):
                       # There are JBAND values for scattering into group j listed in
                       # order of the "from" group as from j+jup to j, from j+jup-1 to
      @@ -420,15 +435,17 @@ 

      Source code for pyne.cccc

                       # upscatter. anything to the right is downscatter. n,2n on
                       # MC**2-2 ISOTXS scatter matrix are reaction based and need to
                       # be multiplied by 2 to get the correct neutron balance.
      -                g = j-1 
      -                assert g>=0, "loading negative group in ISOTXS."
      -                jup   = nuc.libParams['jj'][g, block] - 1
      -                jdown = nuc.libParams['jband'][g, block] - nuc.libParams['jj'][g, block]
      +                g = j-1
      +                assert g >= 0, "loading negative group in ISOTXS."
      +                jup = nuc.libParams['jj'][g, block] - 1
      +                jdown = nuc.libParams['jband'][g, block] - \
      +                    nuc.libParams['jj'][g, block]
                       fromgroups = list(range(j-jdown, j+jup+1))
                       fromgroups.reverse()
                       for k in fromgroups:
                           fromg = k-1
      -                    nuc.micros['scat', block, g, fromg, order] = r.get_float()[0]
      +                    nuc.micros['scat', block, g, fromg, order] = r.get_float()[
      +                        0]
       
       
      [docs] def find_nuclide(self, name): """Returns a nuclide with a given name. @@ -447,17 +464,17 @@

      Source code for pyne.cccc

       
               for nuc in self:
                   if nuc.name == name:
      -                return nuc
      - return None + return nuc + return None
      def __iter__(self): for nuc in self.nuclides: yield nuc - - def __repr__(self):
      - return "<ISOTXS File: {0}>".format(self.f.name) - + def __repr__(self): + return "<ISOTXS File: {0}>".format(self.f.name)
      + +
      [docs]class Dlayxs(_BinaryReader): """A Dlayxs object represents the data stored in a CCCC-format DLAYXS file. This file contains delayed neutron precursor yields, emission spectra, @@ -469,7 +486,7 @@

      Source code for pyne.cccc

               Names of the isotopes in the DLAYXS file.
       
             **isotopeFamily** : dict
      -        Dictionary whose keys are the isotope names and whose values are 
      +        Dictionary whose keys are the isotope names and whose values are
       
             **decay** : dict
               Dictionary whose keys are names of nuclides and whose values are decay
      @@ -487,7 +504,7 @@ 

      Source code for pyne.cccc

               Number of delayed neutron families
       
             **nu** : dict
      -      
      +
       
           Parameters
           ----------
      @@ -495,87 +512,88 @@ 

      Source code for pyne.cccc

               Path of the DLAYXS file to load.
       
           """
      -    
      +
           def __init__(self, filename):
               super(Dlayxs, self).__init__(filename)
      -        
      +
               self.isotopeFamily = {}
               self.decay = {}
               self.spectrum = {}
               self.nu = {}
      -    
      +
       
      [docs] def read(self): """Read through and parse data in the DLAYXS file.""" - + self._read_file_ID() self._read_file_control() (decay, spectrum) = self._read_spectra() self._read_yield() - + for isotope in self.isotopes: - self.decay[isotope] = {} + self.decay[isotope] = {} self.spectrum[isotope] = {} - for gDelay in [1,2,3,4,5,6]: + for gDelay in [1, 2, 3, 4, 5, 6]: family = self.isotopeFamily[isotope][gDelay-1] - self.decay[isotope][gDelay] = decay[family]
      - self.spectrum[isotope][gDelay] = spectrum[family] - + self.decay[isotope][gDelay] = decay[family] + self.spectrum[isotope][gDelay] = spectrum[family]
      + def _read_file_ID(self): """Read file ID block""" - + id = self.get_fortran_record() self.label = id.get_string(24)[0] fileID = id.get_int()[0] - + def _read_file_control(self): """Read file control block.""" - + fileControl = self.get_fortran_record() self.nGroups = fileControl.get_int()[0] self.nIsotopes = fileControl.get_int()[0] self.nFamilies = fileControl.get_int()[0] - + def _read_spectra(self): """Read the decay constants and delayed neutron spectra""" - + fileData = self.get_fortran_record() self.isotopes = fileData.get_string(8, self.nIsotopes) - + # Read decay constants for each family. We will follow the convention # of the CCCC files that the families are indexed starting from 1. decay = {} for family in range(1, self.nFamilies+1): decay[family] = fileData.get_float()[0] - + # Read the delayed neutron spectra for each family spectra = {} for family in range(1, self.nFamilies+1): spectra[family] = fileData.get_float(self.nGroups) - + # This reads the maximum E for each energy group in eV as well as the - # minimum energy bound of the set in eV. - + # minimum energy bound of the set in eV. + self.energySpectra = fileData.get_float(self.nGroups) self.minEnergy = fileData.get_float()[0] - + # Determine the number of families to which fission each isotope # contributes to delayed neutron precursors and the number of records # to be skipped to read data for each isotope - + ## nFamilies = fileData.get_int(self.nIsotopes) ## nSkip = fileData.get_int(self.nIsotopes) - + return decay, spectra - + def _read_yield(self): """Read the delayed neutron precursor yields""" - + for isotope in self.isotopes: yieldData = self.get_fortran_record() self.nu[isotope] = {} - for gDelay in [1,2,3,4,5,6]: - self.nu[isotope][gDelay] = yieldData.get_float(self.nGroups)
      - self.isotopeFamily[isotope] = yieldData.get_int(6) + for gDelay in [1, 2, 3, 4, 5, 6]: + self.nu[isotope][gDelay] = yieldData.get_float(self.nGroups) + self.isotopeFamily[isotope] = yieldData.get_int(6)
      +
      [docs]class Brkoxs(_BinaryReader): """A Brkoxs object represents data stored in a BRKOXS file from the CCCC @@ -589,8 +607,9 @@

      Source code for pyne.cccc

       
           """
       
      -    def __init__(self, filename):
      - super(Brkoxs, self).__init__(filename) + def __init__(self, filename): + super(Brkoxs, self).__init__(filename)
      +
      [docs]class Rtflux(object): """An Rtflux object represents data stored in a RTFLUX file from the CCCC @@ -651,7 +670,7 @@

      Source code for pyne.cccc

                   self.adjoint = False
               elif self.hname == "atflux":
                   self.adjoint = True
      - 
      +
               # read specifcations
               fr = b.get_fortran_record()
               self.ndim, self.ngroup, self.ninti, self.nintj, self.nintk, self.niter \
      @@ -670,7 +689,7 @@ 

      Source code for pyne.cccc

               # It does not work the the PyNE binary reader, but using the 3D format
               # does work, as tested.
               #
      -        #if self.ndim == 1:
      +        # if self.ndim == 1:
               #    for m in range(1, self.nblok + 1):
               #        fr = b.get_fortran_record()
               #        print fr.num_bytes
      @@ -685,7 +704,7 @@ 

      Source code for pyne.cccc

                       for m in range(1, self.nblok + 1):
                           fr = b.get_fortran_record()
                           jl = (m - 1)*((self.nintj - 1)/self.nblok + 1) + 1
      -                    jup = m*((self.nintj -1)/self.nblok + 1)
      +                    jup = m*((self.nintj - 1)/self.nblok + 1)
                           ju = min(self.nintj, jup)
                           flux += fr.get_double(int(self.ninti*(ju-jl+1)))
       
      @@ -716,17 +735,13 @@ 

      Source code for pyne.cccc

                    The tag name to use to tag the fluxes onto the mesh.
               """
       
      -        try:
      -            from itaps import iMesh
      -            HAVE_PYTAPS = True
      -        except ImportError:
      -            warn("the PyTAPS optional dependency could not be imported. "
      -                          "All aspects of the partisn module are not imported.",
      -                          QAWarning)
      -            HAVE_PYTAPS = False
      -        
      -        if HAVE_PYTAPS:
      -            from pyne.mesh import Mesh, IMeshTag
      +        from pyne.mesh import HAVE_PYMOAB
      +        if HAVE_PYMOAB:
      +            from pyne.mesh import Mesh, NativeMeshTag
      +        else:
      +            warn("The PyMOAB optional dependency could not be imported. "
      +                 "All aspects of the partisn module are not imported.",
      +                 QAWarning)
       
               if not m.structured:
                   raise ValueError("Only structured mesh is supported.")
      @@ -737,9 +752,10 @@ 

      Source code for pyne.cccc

       
               temp = m.structured_ordering
               m.structured_ordering = 'zyx'
      -        m.tag = IMeshTag(self.ngroup, float, name=tag_name)
      -        m.tag[:] = self.flux
      - m.structured_ordering = temp + m.tag = NativeMeshTag(self.ngroup, float, name=tag_name) + m.tag[:] = self.flux + m.structured_ordering = temp
      +
      [docs]class Atflux(Rtflux): """An Atflux object represents data stored in a ATFLUX file from the CCCC @@ -756,8 +772,8 @@

      Source code for pyne.cccc

               ----------
               filename : str
               Path to the ATFLUX file to be read.
      -        """
      - super(Atflux, self).__init__(filename) + """ + super(Atflux, self).__init__(filename)
      [docs]class Rzflux(_BinaryReader): @@ -772,8 +788,8 @@

      Source code for pyne.cccc

       
           """
       
      -    def __init__(self, filename):
      - super(Rzflux, self).__init__(filename) + def __init__(self, filename): + super(Rzflux, self).__init__(filename)
      [docs]class Matxs(_BinaryReader): @@ -787,8 +803,8 @@

      Source code for pyne.cccc

       
           """
       
      -    def __init__(self, filename):
      - super(Matxs, self).__init__(filename) + def __init__(self, filename): + super(Matxs, self).__init__(filename)
      [docs]class Spectr(_BinaryReader): @@ -799,7 +815,7 @@

      Source code for pyne.cccc

               self.fc = {}
               self.read1D()
               self.flux = self.read2D()
      -        
      +
           def read1D(self):
               t1 = self.get_fortran_record()
               self.fc['eig'] = t1.get_float()[0]
      @@ -809,13 +825,13 @@ 

      Source code for pyne.cccc

               self.fc['ngrp'] = t1.get_int()[0]
               self.fc['mgcsd'] = t1.get_int()[0]
               self.fc['ncsd'] = t1.get_int()[0]
      -        
      +
           def read2D(self):
               t2 = self.get_fortran_record()
               flux = []
               for g in range(self.fc['ngrp']):
      -            flux.append(t2.get_float()[0])
      - return flux + flux.append(t2.get_float()[0]) + return flux
      class _Nuclide(object): @@ -833,7 +849,7 @@

      Source code for pyne.cccc

               return "<Nuclide: {0}>".format(self.name)
       
       
      -if __name__=='__main__':
      +if __name__ == '__main__':
           lib = Isotxs('ISOTXS')
       
      @@ -900,8 +916,8 @@

      Navigation

      + + + + + @@ -95,8 +98,8 @@

      Source code for pyne.cli.tape9

               decays.extend(decs)
               branches.extend(brs)
           decays = [x for x in decays if x[0] is not None]
      -    branches = [x for x in branches if x[0] is not None]
      - return decays, branches + branches = [x for x in branches if x[0] is not None] + return decays, branches
      def _is_metastable_beta_decay_0(item, metastable_cutoff): return (item[3] is not None) and (item[3] > metastable_cutoff) and \ @@ -241,8 +244,8 @@

      Source code for pyne.cli.tape9

               for nuc in nucs:
                   key = nucname.zzaaam(nuc)
                   if key not in hl:
      -                hl[key] = data.half_life(nuc)
      - return t9 + hl[key] = data.half_life(nuc) + return t9
      [docs]def main_gen(ns): @@ -262,8 +265,8 @@

      Source code for pyne.cli.tape9

                                              NullDataSource])
           xsc.load()
           t9xsfpy = origen22.xslibs(xscache=xsc, verbose=True)
      -    t9 = origen22.merge_tape9([t9decay, t9xsfpy])
      - origen22.write_tape9(t9, outfile=ns.filename) + t9 = origen22.merge_tape9([t9decay, t9xsfpy]) + origen22.write_tape9(t9, outfile=ns.filename)
      _cmd_mains = { 'gen': main_gen, @@ -357,8 +360,8 @@

      Navigation

      + + + + + @@ -95,8 +98,8 @@

      Source code for pyne.dbgen.atomic_mass

               return
       
           mass = pkgutil.get_data('pyne.dbgen', MASS_FILE)
      -    with open(os.path.join(build_dir, MASS_FILE), 'wb') as f:
      - f.write(mass) + with open(os.path.join(build_dir, MASS_FILE), 'wb') as f: + f.write(mass)
      # Note, this regex specifically leaves our free neutrons @@ -123,8 +126,8 @@

      Source code for pyne.dbgen.atomic_mass

               atomic_masses.append((nuc, mass, error))
       
           f.close()
      -
      - return atomic_masses + + return atomic_masses
      atomic_mass_desc = { @@ -194,8 +197,8 @@

      Source code for pyne.dbgen.atomic_mass

           # Ensure that data was written to table
           Atable.flush()
       
      -    # Close the hdf5 file
      - kdb.close() + # Close the hdf5 file + kdb.close()
      [docs]def make_atomic_mass(args): @@ -213,8 +216,8 @@

      Source code for pyne.dbgen.atomic_mass

           copy_atomic_mass_adjustment(build_dir)
       
           # Make atomic mass table once we have the array
      -    print("Making atomic mass data table.")
      - make_atomic_mass_table(nuc_data, build_dir) + print("Making atomic mass data table.") + make_atomic_mass_table(nuc_data, build_dir)
      @@ -280,8 +283,8 @@

      Navigation

      + + + + + @@ -115,8 +118,8 @@

      Source code for pyne.dbgen.cinder

               rtn = True
           else:
               print(warning("cinder.dat file not found in DATAPATH dir - skipping."))
      -        rtn = False
      - return rtn + rtn = False + return rtn
      # These read in cinder.dat cinder_float = "[\d.+-Ee]+" @@ -191,8 +194,8 @@

      Source code for pyne.dbgen.cinder

           G_n = int(g[1])
           G_p = int(g[2])
           G_g = int(g[3])
      -
      - return nuclides, G_n, G_p, G_g + + return nuclides, G_n, G_p, G_g
      [docs]def safe_decode(b, encs=(None, 'utf-8', 'latin-1')): @@ -203,8 +206,8 @@

      Source code for pyne.dbgen.cinder

           except UnicodeDecodeError:
               if len(encs) == 0:
                   raise
      -        s = safe_decode(b, encs)
      - return s + s = safe_decode(b, encs) + return s
      [docs]def make_mg_group_structure(nuc_data, build_dir=""): @@ -246,8 +249,8 @@

      Source code for pyne.dbgen.cinder

           g_E_g = np.array(g[::-1], dtype=float)
           db.create_array('/photon/cinder_source', 'E_g', g_E_g, 'Photon energy group bounds [MeV]')
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      # Helpful patterns @@ -337,8 +340,8 @@

      Source code for pyne.dbgen.cinder

               # Flush this from nuc
               absorption_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      fission_base = "\n([\s\d]+),([\s\d]+),([\s\d]+)=\(n,f\) yield sets\. If > 0,[\s\d]{4}-gp fisn CX follows\..*?\n" @@ -426,8 +429,8 @@

      Source code for pyne.dbgen.cinder

               frow.append()
               fission_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      gamma_decay_base = "gamma spectra from .{3} multiplied by\s+(" + cinder_float + ")\s+to agree w/ Eg=\s*(" +\ @@ -513,8 +516,8 @@

      Source code for pyne.dbgen.cinder

               gdrow.append()
               gamma_decay_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      [docs]def get_fp_sizes(raw_data): @@ -541,8 +544,8 @@

      Source code for pyne.dbgen.cinder

           N_g_pattern = "Photofission Yield Data.*?\n\s*(\d+)\s+yield sets"
           m_g = re.search(N_g_pattern, raw_data)
           N_g = int(m_g.group(1))
      -
      - return N_n, N_g + + return N_n, N_g
      fp_info_dtype = np.dtype([ @@ -613,8 +616,8 @@

      Source code for pyne.dbgen.cinder

               info_table.append(info_row)
       
           info_table = np.array(info_table, dtype=fp_info_dtype)
      -
      - return info_table + + return info_table
      [docs]def make_neutron_fp_info(nuc_data, build_dir=""): @@ -650,8 +653,8 @@

      Source code for pyne.dbgen.cinder

           # Append Rows
           nfp_table.append(info_table)
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      gfp_info_pattern = "Photofission Yield Data.*?fission products" @@ -705,8 +708,8 @@

      Source code for pyne.dbgen.cinder

               info_table.append(info_row)
       
           info_table = np.array(info_table, dtype=fp_info_dtype)
      -
      - return info_table + + return info_table
      [docs]def make_photon_fp_info(nuc_data, build_dir=""): @@ -740,8 +743,8 @@

      Source code for pyne.dbgen.cinder

                                      'CINDER Photofission Product Yield Information')
           gfp_table.append(info_table)
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      fp_yields_dtype = np.dtype([ @@ -822,8 +825,8 @@

      Source code for pyne.dbgen.cinder

               # Write the table
               nfp_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      gfp_yields_pattern = "Photofission Yield Data.*" @@ -893,8 +896,8 @@

      Source code for pyne.dbgen.cinder

               # Write the table
               gfp_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      [docs]def make_cinder(args): @@ -943,8 +946,8 @@

      Source code for pyne.dbgen.cinder

           # Add neutron yield table
           print("  photofission product yields.")
           make_photon_fp_yields(nuc_data, build_dir)
      -
      - print("...finished with cinder.") + + print("...finished with cinder.")
      @@ -1010,8 +1013,8 @@

      Navigation

      + + + + + @@ -204,8 +207,8 @@

      Source code for pyne.dbgen.decay

                       if not os.path.exists(os.path.join(build_dir, name)):
                           print("    extracting {0} from {1}".format(name, fpath))
                           zf.extract(name, build_dir)
      -        finally:
      - zf.close() + finally: + zf.close()
      level_dtype = np.dtype([ @@ -331,8 +334,8 @@

      Source code for pyne.dbgen.decay

               level_list = ensdf.levels(f, level_list)
       
           level_list_array = np.array(level_list, dtype=level_dtype)
      -
      - return level_list_array + + return level_list_array
      [docs]def parse_decay_data(build_dir=""): @@ -391,8 +394,8 @@

      Source code for pyne.dbgen.decay

           all_betas_array = np.array(all_betas, dtype=betas_dtype)
           all_ecbp_array = np.array(all_ecbp, dtype=ecbp_dtype)
       
      -    return all_decay_array, all_gammas_array, all_alphas_array, \
      - all_betas_array, all_ecbp_array + return all_decay_array, all_gammas_array, all_alphas_array, \ + all_betas_array, all_ecbp_array
      [docs]def make_atomic_decay_table(nuc_data, build_dir=""): @@ -441,8 +444,8 @@

      Source code for pyne.dbgen.decay

                                     'kb_x_ray_en'
                                     'l_x_ray_en',
                                     expectedrows=103)
      -    atomic_table.flush()
      - db.close() + atomic_table.flush() + db.close()
      [docs]def make_decay_half_life_table(nuc_data, build_dir=""): @@ -529,8 +532,8 @@

      Source code for pyne.dbgen.decay

                                       expectedrows=len(ecbp))
           ecbp_table.flush()
       
      -    # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      [docs]def make_decay(args): @@ -553,8 +556,8 @@

      Source code for pyne.dbgen.decay

           print("Grabbing Atomic data")
           grab_atomic_data(build_dir)
       
      -    print("Making atomic decay data table")
      - make_atomic_decay_table(nuc_data, build_dir) + print("Making atomic decay data table") + make_atomic_decay_table(nuc_data, build_dir)
      @@ -620,8 +623,8 @@

      Navigation

      + + + + + @@ -138,8 +141,8 @@

      Source code for pyne.dbgen.eaf

                       fw.write(line.decode("us-ascii"))
           finally:
               gf.close()
      -        
      - return True + + return True
      # numpy array row storage information for EAF data @@ -207,8 +210,8 @@

      Source code for pyne.dbgen.eaf

           eaf_array = np.array(eaf_data, dtype=eaf_dtype)
       
           print("Read in {0} sets of EAF data.".format(len(eaf_array)))
      -
      - return eaf_array + + return eaf_array
      [docs]def make_eaf_table(nuc_data, build_path=""): @@ -254,8 +257,8 @@

      Source code for pyne.dbgen.eaf

           db.create_array('/neutron/eaf_xs', 'E_g', _get_eaf_groups(), \
                   'Neutron energy group bounds [MeV]')
           
      -    # Close the HDF5 file
      - db.close() + # Close the HDF5 file + db.close()
      def _get_eaf_groups(): @@ -342,8 +345,8 @@

      Source code for pyne.dbgen.eaf

               return
       
           #
      -    print("Making EAF activation data table.")
      - make_eaf_table(nuc_data, build_path) + print("Making EAF activation data table.") + make_eaf_table(nuc_data, build_path)
      @@ -410,8 +413,8 @@

      Navigation

      + + + + + @@ -127,8 +130,8 @@

      Source code for pyne.dbgen.kaeri

                   hdl = urllib2.urlopen(req, timeout=30.0)
       
           # Write out to the file    
      -    with open(filename, 'w') as f:
      - f.write(kaeri_html) + with open(filename, 'w') as f: + f.write(kaeri_html)
      nat_iso_regex = re.compile('.*?/cgi-bin/nuclide[?]nuc=([A-Za-z]{1,2}\d{1,3}).*?[(].*?[)]') @@ -139,8 +142,8 @@

      Source code for pyne.dbgen.kaeri

               for line in f:
                   m = nat_iso_regex.search(line)
                   if m is not None:
      -                nat_isos.add(nucname.id(m.group(1)))
      - return nat_isos + nat_isos.add(nucname.id(m.group(1))) + return nat_isos
      all_iso_regex = re.compile('.*?/cgi-bin/nuclide[?]nuc=([A-Za-z]{1,2}\d{1,3})') @@ -152,8 +155,8 @@

      Source code for pyne.dbgen.kaeri

               for line in f:
                   m = all_iso_regex.search(line)
                   if m is not None:
      -                isos.add(nucname.id(m.group(1)))
      - return isos + isos.add(nucname.id(m.group(1))) + return isos
      @@ -220,8 +223,8 @@

      Navigation

      + + + + + @@ -105,8 +108,8 @@

      Source code for pyne.dbgen.materials_library

      # filter out 111, 113, 115, 117, 118 - the ones with no names
           elts = (Material(dict(abunds), metadata={"name": nucname.name(zz)})
                   for zz, abunds in grouped_abunds if zz in nucname.zz_name.keys())
      -    eltsdict = dict(((elt.metadata["name"], elt) for elt in elts))
      - return eltsdict + eltsdict = dict(((elt.metadata["name"], elt) for elt in elts)) + return eltsdict
      # Parses data from .csv @@ -131,8 +134,8 @@

      Source code for pyne.dbgen.materials_library

      reader = csv.reader(f, delimiter=',', quotechar='"')
           lines = list(filter(is_comp_matname_or_density, reader))
           mats = parse_materials({}, lines)
      -    f.close()
      - return mats + f.close() + return mats
      comp_matname_or_density_re = re.compile(r'\d+. +$|[A-Za-z]{1,2}-?(\d{1,3})?$') @@ -157,8 +160,8 @@

      Source code for pyne.dbgen.materials_library

      if line[0] == "Density (g/cm3) =":
               return True
           if comp_matname_or_density_re.match(line[0]):
      -        return True
      - return False + return True + return False
      first_line_re = re.compile(r"^\d+. +") @@ -186,15 +189,15 @@

      Source code for pyne.dbgen.materials_library

      mat.normalize()
           mat = mat.expand_elements()
           mat.comp = dict((frac for frac in mat.comp.items() if frac[1] != 0))
      -    mats.update({name: mat})
      - return parse_materials(mats, lines[material_length:]) + mats.update({name: mat}) + return parse_materials(mats, lines[material_length:])
      # Writes to file
      [docs]def make_materials_compendium(nuc_data, matslib): """Adds materials compendium to nuc_data.h5.""" - matslib.write_hdf5(nuc_data, datapath="/material_library/materials",
      - nucpath="/material_library/nucid") + matslib.write_hdf5(nuc_data, datapath="/material_library/materials", + nucpath="/material_library/nucid")
      [docs]def make_matslib(fname): @@ -213,8 +216,8 @@

      Source code for pyne.dbgen.materials_library

          """
           matslib = MaterialLibrary(make_elements())
           matsdict = grab_materials_compendium(fname)
      -    matslib.update(matsdict)
      - return matslib + matslib.update(matsdict) + return matslib
      [docs]def make_materials_library(args): @@ -228,8 +231,8 @@

      Source code for pyne.dbgen.materials_library

      print("Making materials library...")
           matslib = make_matslib(os.path.join(os.path.split(__file__)[0],
      -                                        'materials_compendium.csv'))
      - make_materials_compendium(nuc_data, matslib) + 'materials_compendium.csv')) + make_materials_compendium(nuc_data, matslib)
      @@ -295,8 +298,8 @@

      Navigation

      + + + + + @@ -129,7 +132,7 @@

      Source code for pyne.dbgen.nuc_data_make

       def _fetch_prebuilt(args):
           nuc_data, build_dir = args.nuc_data, args.build_dir
           prebuilt_nuc_data = os.path.join(build_dir, 'prebuilt_nuc_data.h5')
      -    prebuilt_nuc_data_url = "http://data.pyne.io/prebuilt_nuc_data.h5"
      +    prebuilt_nuc_data_url = "https://github.com/pyne/data/raw/master/prebuilt_nuc_data.h5"
       
           if not os.path.exists(prebuilt_nuc_data):
               print("Fetching pre-built nuc_data.h5 from " + prebuilt_nuc_data_url)
      @@ -234,8 +237,8 @@ 

      Source code for pyne.dbgen.nuc_data_make

                       print(" node " + name + " checksum doesn't match!!")
               if badsum is True:
                   print("""You may need to try building the data from scratch using:\n
      -                  nuc_data_make --fetch-prebuilt False
      - """) + nuc_data_make --fetch-prebuilt False + """)
      if __name__ == '__main__': @@ -305,8 +308,8 @@

      Navigation

      + + + + + @@ -98,8 +101,8 @@

      Source code for pyne.dbgen.scattering_lengths

      return nist = urllib2.urlopen("http://www.ncnr.nist.gov/resources/n-lengths/list.html") - with open(build_filename, 'w') as f:
      - f.write(nist.read()) + with open(build_filename, 'w') as f: + f.write(nist.read())
      @@ -127,8 +130,8 @@

      Source code for pyne.dbgen.scattering_lengths

      nd = "0.0" nd = nd.replace("<i>i</i>", 'j') - d = eval(nd)
      - return d + d = eval(nd) + return d
      sl_dtype = np.dtype([ @@ -167,8 +170,8 @@

      Source code for pyne.dbgen.scattering_lengths

      sl_data.append(slrow) - sl_array = np.array(sl_data, dtype=sl_dtype)
      - return sl_array + sl_array = np.array(sl_data, dtype=sl_dtype) + return sl_array
      @@ -202,8 +205,8 @@

      Source code for pyne.dbgen.scattering_lengths

      # Write the table sl_table.flush() - # Close the hdf5 file
      - db.close() + # Close the hdf5 file + db.close()
      @@ -222,8 +225,8 @@

      Source code for pyne.dbgen.scattering_lengths

      grab_scattering_lengths(build_dir) # Make scatering table once we have the data - print("Making neutron scattering length table.")
      - make_scattering_lengths_table(nuc_data, build_dir) + print("Making neutron scattering length table.") + make_scattering_lengths_table(nuc_data, build_dir)
      @@ -290,8 +293,8 @@

      Navigation

      + + + + + @@ -129,8 +132,8 @@

      Source code for pyne.dbgen.simple_xs

           for nuc in sorted(all_nuclides):
               nuc = nucname.name(nuc)
               htmlfile = nuc.upper() + '_2.html'
      -        if htmlfile not in already_grabbed:
      - grab_kaeri_nuclide(nuc.upper(), build_dir, 2) + if htmlfile not in already_grabbed: + grab_kaeri_nuclide(nuc.upper(), build_dir, 2)
      @@ -219,8 +222,8 @@

      Source code for pyne.dbgen.simple_xs

                       # XS not defined for this energy, returning zero
                       return 0.0
       
      -    # If the specific XS was not found in this file, return zero
      - return 0.0 + # If the specific XS was not found in this file, return zero + return 0.0
@@ -269,8 +272,8 @@

Source code for pyne.dbgen.simple_xs

                                         energy_tables[eng]['sigma_trit'] + \
                                         energy_tables[eng]['sigma_2n'] + \
                                         energy_tables[eng]['sigma_3n'] + \
-                                        energy_tables[eng]['sigma_4n']
- return energy_tables + energy_tables[eng]['sigma_4n'] + return energy_tables
@@ -310,8 +313,8 @@

Source code for pyne.dbgen.simple_xs

         simple_xs_table.append(simple_xs_tables[eng])
         simple_xs_table.flush()
 
-    # Close the hdf5 file
- db.close() + # Close the hdf5 file + db.close()
@@ -330,8 +333,8 @@

Source code for pyne.dbgen.simple_xs

     grab_kaeri_simple_xs(build_dir)
 
     # Make simple table once we have the array
-    print("Making simple cross section data tables")
- make_simple_xs_tables(nuc_data, build_dir) + print("Making simple cross section data tables") + make_simple_xs_tables(nuc_data, build_dir) @@ -398,8 +401,8 @@

Navigation

+ + + + + @@ -118,8 +121,8 @@

Source code for pyne.dbgen.wimsdfpy

         return 
 
     nist = urllib2.urlopen('https://www-nds.iaea.org/wimsd/fpyield.htm')
-    with open(build_filename, 'w') as f:
- f.write(nist.read()) + with open(build_filename, 'w') as f: + f.write(nist.read())
[docs]class Parser(HTMLParser): @@ -154,8 +157,8 @@

Source code for pyne.dbgen.wimsdfpy

     def handle_data(self, data):
         data = ''.join(data.split())
         if len(data) == 0:
-            return
- self._currrow.append(data.strip()) + return + self._currrow.append(data.strip())
fpy_dtype = np.dtype([ @@ -173,8 +176,8 @@

Source code for pyne.dbgen.wimsdfpy

     parser = Parser()
     parser.feed(raw_data)
     data = sorted(parser.fission_product_yields)
-    data = np.array(data, dtype=fpy_dtype)
- return data + data = np.array(data, dtype=fpy_dtype) + return data
[docs]def make_fpy_table(nuc_data, build_dir=""): @@ -193,8 +196,8 @@

Source code for pyne.dbgen.wimsdfpy

         neutron_group = db.create_group('/', 'neutron', 'Neutron Data')
     fpy_table = db.create_table('/neutron/', 'wimsd_fission_products', yields, 
                                'WIMSD Fission Product Yields, fractions [unitless]')
-    fpy_table.flush()
- db.close() + fpy_table.flush() + db.close()
[docs]def make_fpy(args): @@ -214,8 +217,8 @@

Source code for pyne.dbgen.wimsdfpy

     grab_fpy(build_dir)
 
     # Make scatering table once we have the data
-    print('Making WIMSD fission product yield table.')
- make_fpy_table(nuc_data, build_dir) + print('Making WIMSD fission product yield table.') + make_fpy_table(nuc_data, build_dir)
@@ -282,8 +285,8 @@

Navigation

+ + + + + @@ -338,8 +341,8 @@

Source code for pyne.endl

             return self._read_nuc_pin_rdesc_rprop(nuc, p_in,
                                                   rdesc, rprop,
                                                   x1, p_out)
-        else:
- raise ValueError('Nucleus {} does not exist.'.format(nuc)) + else: + raise ValueError('Nucleus {} does not exist.'.format(nuc))
def _read_nuc_pin_rdesc_rprop(self, nuc, p_in, rdesc, rprop, x1, yo): """Load in the data from one reaction into self.structure. @@ -402,8 +405,8 @@

Source code for pyne.endl

 
         if opened_here:
             fh.close()
-
- return parsed_data + + return parsed_data @@ -469,8 +472,8 @@

Navigation

- - - - - - - - - - - -
- - -
- - -
-
-
-
- -

Source code for pyne.ensdf

-from __future__ import division
-import re
-import sys
-import copy
-from collections import defaultdict
-from warnings import warn
-from pyne.utils import QAWarning
-from pyne.utils import time_conv_dict
-
-import numpy as np
-
-from pyne import nucname, rxname, data
-
-if sys.version_info[0] > 2:
-    basestring = str
-
-warn(__name__ + " is not yet QA compliant.", QAWarning)
-
-_valexp = re.compile('([0-9.]*)([Ee][+-]?\d*)')
-_val = re.compile('(\d*)[.](\d*)')
-_specialval = re.compile("([0-9. ]*)[+]([A-Z])")
-_specialval2 = re.compile("([A-Z]*)[+]([0-9.]*)")
-_errpm = re.compile('[+](\d*)[-](\d*)')
-_err = re.compile('[ ]*(\d*)')
-_base = '([ \d]{3}[ A-Za-z]{2})'
-_ident = re.compile(_base + '    (.{30})(.{26})(.{7})(.{6})')
-_g = re.compile(_base + '  G (.{10})(.{2})(.{8})(.{2}).{24}(.{7})(.{2})(.{10})'
-                + '(.{2})')
-_gc = re.compile(_base + '[0-9A-Za-z] [GE] (.{70})')
-_beta = re.compile(_base + '  B (.{10})(.{2})(.{8})(.{2}).{10}(.{8})(.{6})')
-_betac = re.compile(_base + '[0-9A-Za-z] ([BE]) (.{70})')
-_ec = re.compile(_base + '  E (.{10})(.{2})(.{8})(.{2})'
-                 + '(.{8})(.{2})(.{8})(.{6})(.{10})(.{2})')
-_p = re.compile(_base + '  P (.{10})(.{2})(.{18})(.{10})'
-                + '(.{6}).{9}(.{10})(.{2})(.{4})')
-_norm = re.compile(_base + '  N (.{10})(.{2})(.{8})(.{2})(.{8})(.{2})(.{8})'
-                   + '(.{6})(.{7})(.{2})')
-_normp = re.compile(_base +
-                    ' PN (.{10})(.{2})(.{8})(.{2})(.{8})(.{2})(.{7})(.{2})')
-_q = re.compile(_base + '  Q (.{10})(.{2})(.{8})(.{2})'
-                + '(.{8})(.{2})(.{8})(.{6})')
-_alpha = re.compile(_base + '  A (.{10})(.{2})(.{8})(.{2})(.{8})(.{2})')
-_dp = re.compile(_base + '  D(.{1})(.{10})(.{2})(.{8})(.{2})(.{8})(.{10})'
-                 + '(.{6})')
-_decays = ['B-', 'B+A', 'EC', 'B-A', 'B+', 'B+P', 'B-N', 'ECP', 'EC2P', 'N',
-           '2N', 'IT', 'B+2P', 'B-2N', 'B+3P', 'ECA', 'P', '2P', '2B-', 'SF',
-           'A', '2B+', '2EC', '14C']
-_level_regex = re.compile(_base + '  L (.{10})(.{2})(.{18})(.{10})(.{6})'
-                          + '(.{9})(.{10})(.{2})(.{1})([ M])([ 1-9])')
-_level_cont_regex = re.compile('([ \d]{3}[ A-Za-z]{2})[0-9A-Za-z] L (.*)')
-
-
-def _getvalue(obj, fn=float, rn=None):
-    x = obj.strip()
-    x = x.replace('$', '')
-    x = x.replace('?', '')
-    try:
-        return fn(x)
-    except ValueError:
-        return rn
-
-
-def _to_id(nuc):
-    if 'NN' not in nuc:
-        nucid = nucname.ensdf_to_id(nuc.strip())
-    else:
-        warn('Neutron data not supported!')
-        return 0
-    return nucid
-
-
-# Energy to half-life conversion:  T1/2= ln(2) × (h/2 pi) / energy
-# See http://www.nndc.bnl.gov/nudat2/help/glossary.jsp#halflife
-# NIST CODATA https://physics.nist.gov/cgi-bin/cuu/Value?hbar
-#    h-bar = 1.054 571 800(13) x 1e-34 J
-#    1 J = 6.241 509 126(38) x 1e18 eV
-HBAR_LN2 = 4.5623775832376968e-16  # h-bar ln(2) in eV s
-energy_conv_dict = {'ev': HBAR_LN2,
-                    'kev': 1e-3 * HBAR_LN2,
-                    'mev': 1e-6 * HBAR_LN2,
-                    }
-
-
-def _halflife_to_seconds(value, err, units):
-    """Converts a halflife with err and units to seconds.
-
-    Parameters
-    ----------
-    value: number
-        Time or energy, depending on units.
-    err : number or (number, number)
-        Uncertainty, or (plus, minus) uncertainty in [units].
-    units : str
-        Units flag, eg 'min', 'ms', 'days', or even 'MeV'.
-
-    Returns
-    -------
-    sec_time : float
-        Time value in [sec].
-    sec_err : None or float or (float, float) in [sec].
-        Time uncertainty in [sec], or (plus, minus) if asymmetric uncertainty.
-    """
-    if err is None:
-        plus, minus = 0, 0
-    elif np.isscalar(err):
-        plus, minus = err, err
-    else:
-        plus, minus = err
-
-    units = units.lower()
-    scale = time_conv_dict.get(units, None)
-    if scale is not None:
-        sec_time = scale * value
-        sec_err = (scale * plus, scale * minus)
-    else:
-        scale = energy_conv_dict[units]
-        sec_time = scale / value
-        sec_err = (scale / max(0.1*value, value - minus) - sec_time,
-                   sec_time - scale / (value + plus))
-    if err is None:
-        return sec_time, None
-    elif sec_err[0] == sec_err[1]:
-        return sec_time, sec_err[0]
-    else:
-        return sec_time, sec_err
-
-
-def _to_time(tstr, errstr):
-    t = tstr.strip()
-    # This accepts questionable levels
-    t = t.replace('?', '')
-    tobj = [s.strip(' ()') for s in t.split()]
-    if len(tobj) == 2:
-        t, t_unit = tobj
-        value, err = _get_val_err(t, errstr)
-        tfinal, tfinalerr = _halflife_to_seconds(value, err, t_unit)
-    elif 'STABLE' in t:
-        tfinal = np.inf
-        tfinalerr = None
-    else:
-        tfinal = None
-        tfinalerr = None
-    return tfinal, tfinalerr
-
-
-def _get_val_err(valstr, errstr):
-    pm = _errpm.match(errstr)
-    err = _err.match(errstr)
-    if pm is None and err.group(1) == '':
-        return _getvalue(valstr), None
-    val = _valexp.match(valstr)
-    if val is None:
-        valexp = ''
-        val = valstr
-    else:
-        valexp = val.group(2)
-        val = val.group(1)
-    punc = _val.match(val.strip())
-    if pm is not None:
-        if punc is None:
-            errplus = _getvalue(pm.group(1) + valexp)
-            errminus = _getvalue(pm.group(2) + valexp)
-        else:
-            errplus = _get_err(len(punc.group(2)), pm.group(1), valexp)
-            errminus = _get_err(len(punc.group(2)), pm.group(2), valexp)
-        return _getvalue(valstr), (errplus, errminus)
-    else:
-        if punc is None:
-            errplus = _getvalue(errstr + valexp)
-        else:
-            errplus = _get_err(len(punc.group(2)), errstr, valexp)
-        return _getvalue(valstr), errplus
-
-
-def _get_err(plen, errstr, valexp):
-    errp = list((errstr.strip()).zfill(plen))
-    errp.insert(-plen, '.')
-    return _getvalue(''.join(errp) + valexp)
-
-
-def _parse_level_record(l_rec):
-    """
-    This Parses and ENSDF level record
-
-    Parameters
-    ----------
-    g : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    e : float
-        Level energy in keV
-    tfinal : float
-        Half life in seconds
-    from_nuc : int
-        nuc id of nuclide
-    state : int
-        metastable state of level
-    special : str
-        A-Z character denoting a group of known levels with no reference
-        to the ground state. P and N are special characters reserved for
-        proton and neutron resonances given in center of mass system energy.
-    """
-    lm = re.match("[ ]*([A-Z]+)(?![A-Z0-9+])", l_rec.group(2))
-    spv = _specialval.match(l_rec.group(2).strip())
-    spv2 = _specialval2.match(l_rec.group(2).strip())
-    special = ' '
-    if lm is not None:
-        special = lm.group(1)
-        if "S" in special and len(special.strip()) > 1:
-            special = special.strip()[1]
-        e = 0.0
-        de = np.nan
-    elif spv is not None:
-        e, de = _get_val_err(spv.group(1), l_rec.group(3))
-        special = spv.group(2)
-    elif spv2 is not None:
-        e, de = _get_val_err(spv2.group(2), l_rec.group(3))
-        special = spv2.group(1)
-        if "S" in special and len(special.strip()) > 1:
-            special = special.strip()[1]
-    else:
-        e, de = _get_val_err(l_rec.group(2).strip('() '), l_rec.group(3))
-    tfinal, tfinalerr = _to_time(l_rec.group(5), l_rec.group(6))
-    from_nuc = _to_id(l_rec.group(1))
-    m = l_rec.group(11)
-    s = l_rec.group(12)
-    state = 0
-    if m == 'M':
-        state = s.strip()
-        if 0 < len(state):
-            state = int(state)
-        else:
-            state = 1
-    return e, tfinal, from_nuc, state, special
-
-
-def _parse_level_continuation_record(lc_rec):
-    """
-    This Parses and ENSDF level record
-
-    Parameters
-    ----------
-    g : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    dat : dict
-        dictionary of branching ratios of different reaction channels
-    """
-    g = lc_rec.groups()
-    dat = {}
-    raw_children = g[-1].replace(' AP ', '=')
-    raw_children = raw_children.replace('$', ' ').split()
-    for raw_child in raw_children:
-        if '=' in raw_child:
-            rx, br = raw_child.split('=')[:2]
-            br = br.strip()
-        else:
-            continue
-        if '%' in rx and '?' not in br and len(br) > 0:
-            dat[rx] = br
-    return dat
-
-
-def _parse_gamma_record(g):
-    """
-    This parses an ENSDF gamma record
-
-    Parameters
-    ----------
-    g : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    dat : np.ndarray
-        This array contains 6 floats corresponding to:
-            * gamma ray energy in keV
-            * uncertainty in energy
-            * intensity
-            * uncertainty in intensity
-            * electron conversion intensity
-            * uncertainty in electron conversion intensity
-    """
-    en, en_err = _get_val_err(g.group(2), g.group(3))
-    inten, inten_err = _get_val_err(g.group(4), g.group(5))
-    conv, conv_err = _get_val_err(g.group(6), g.group(7))
-    tti, tti_err = _get_val_err(g.group(8), g.group(9))
-    return [en, en_err, inten, inten_err, conv, conv_err, tti, tti_err]
-
-
-def _parse_gamma_continuation_record(g, inten, tti):
-    """
-    This parses an ENSDF gamma continuation record
-
-    """
-    conversions = {}
-    entries = g.group(2).split('$')
-    for entry in entries:
-        entry = entry.replace('AP', '=')
-        entry = entry.replace('EL1C+EL2C', 'LC')
-        if '+=' in entry or 'EAV' in entry:
-            continue
-        if 'C=' in entry:
-            tsplit = entry.split('C')
-        else:
-            tsplit = entry.split('=')
-            tsplit[0] = tsplit[0].lstrip('C')
-        greff = inten
-        if '/T' in entry:
-            tsplit = entry.split('/T')
-            greff = tti
-            if greff is None:
-                greff = inten
-        if greff is None:
-            greff = 1.0
-        if len(tsplit) == 2:
-            conv = None
-            err = None
-            contype = tsplit[0].lstrip('E')
-            eff = tsplit[1].lstrip('= ').split()
-            if len(eff) == 2:
-                conv, err = _get_val_err(eff[0], eff[1])
-            elif len(eff) == 1:
-                conv = _getvalue(eff[0])
-            if conv is None and contype not in conversions:
-                conversions[contype] = (None, None)
-            elif contype not in conversions:
-                conversions[contype] = (conv * greff, err)
-    return conversions
-
-
-def _parse_beta_record(b_rec):
-    """
-    This parses an ENSDF beta minus record
-
-    Parameters
-    ----------
-    b_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    en : float
-        b- endpoint energy in keV
-    en_err : float
-        error in b- endpoint energy
-    ib : float
-        branch intensity
-    dib : float
-        error in branch intensity
-    logft : float
-        logft of the decay
-    dft : float
-        error in logft
-    """
-    en, en_err = _get_val_err(b_rec.group(2), b_rec.group(3))
-    ib, dib = _get_val_err(b_rec.group(4), b_rec.group(5))
-    logft, dft = _get_val_err(b_rec.group(6), b_rec.group(7))
-    return en, en_err, ib, dib, logft, dft
-
-
-def _parse_beta_continuation_record(bc_rec):
-    """
-    This parse the beta continuation record for EAV
-    """
-    entries = bc_rec.group(3).split('$')
-    eav = None
-    eav_err = None
-    for entry in entries:
-        if 'EAV' in entry and '=' in entry:
-            dat = entry.split('=')[1]
-            dat = dat.split()
-            if len(dat) == 2:
-                eav, eav_err = _get_val_err(dat[0], dat[1])
-            elif len(dat) == 1:
-                eav = _getvalue(dat[0])
-    return eav, eav_err
-
-
-def _parse_ec_record(e_rec):
-    """
-    This parses an ENSDF electron capture + b+ record
-
-    Parameters
-    ----------
-    e_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    en : float
-        b+ endpoint energy in keV
-    en_err : float
-        error in b+ endpoint energy
-    ib : float
-        b+ branch intensity
-    dib : float
-        error in b+ branch intensity
-    ie : float
-        ec branch intensity
-    die : float
-        error in ec branch intensity
-    logft : float
-        logft of the decay
-    dft : float
-        error in logft
-    """
-    en, en_err = _get_val_err(e_rec.group(2), e_rec.group(3))
-    ib, dib = _get_val_err(e_rec.group(4), e_rec.group(5))
-    ie, die = _get_val_err(e_rec.group(6), e_rec.group(7))
-    logft, dft = _get_val_err(e_rec.group(8), e_rec.group(9))
-    tti, dtti = _get_val_err(e_rec.group(10), e_rec.group(11))
-    return en, en_err, ib, dib, ie, die, logft, dft, tti, dtti
-
-
-def _parse_normalization_record(n_rec):
-    """
-    This parses an ENSDF normalization record
-
-    Parameters
-    ----------
-    n_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    nr : float
-        Multiplier for converting relative photon intensity to photons per 100
-        decays of the parent through the decay branch or to photons per 100
-        neutron captures for (n,g).
-    nr_err : float
-        Uncertainty in nr
-    nt : float
-        Multiplier for converting relative transition intensity to transitions
-        per 100 decays of the parent through the decay branch or to photons
-        per 100 neutron captures for (n,g).
-    nt_err : float
-        Uncertainty in nt
-    br : float
-        Branching ratio multiplier for converting intensity per 100 decays
-        through this decay branch to intensity per 100 decays of the parent
-        nuclide.
-    br_err : float
-        Uncertainty in br
-    nb : float
-        Multiplier for converting relative B- and EC intensities to intensities
-        per 100 decays through this decay branch.
-    nb_err : float
-        Uncertainty in nb
-
-    """
-    nr, nr_err = _get_val_err(n_rec.group(2), n_rec.group(3))
-    nt, nt_err = _get_val_err(n_rec.group(4), n_rec.group(5))
-    br, br_err = _get_val_err(n_rec.group(6), n_rec.group(7))
-    nb, nb_err = _get_val_err(n_rec.group(8), n_rec.group(9))
-    if nr is not None and br is not None:
-        nrbr = nr * br
-    else:
-        nrbr = None
-    if nr_err is not None and br_err is not None:
-        nrbr_err = nrbr*np.sqrt((br_err/br) ** 2 * (nr_err/nr) ** 2)
-    else:
-        nrbr_err = None
-    return nr, nr_err, nt, nt_err, br, br_err, nb, nb_err, nrbr, nrbr_err
-
-
-def _parse_production_normalization_record(np_rec):
-    """
-    This parses an ENSDF production normalization record
-
-    Parameters
-    ----------
-    np_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    nrbr : float
-        Multiplier for converting relative photon intensity to photons per 100
-        decays of the parent nuclide
-    nrbr_err : float
-        Uncertainty in nrbr
-    ntbr : float
-        Multiplier for converting relative transition intensity to transitions
-        per 100 decays of the parent nuclide
-    ntbr_err : float
-        Uncertainty in ntbr
-    nbbr: float
-        Multiplier for converting relative B- and EC intensities to intensity
-        per 100 decays of the parent nuclide
-    nbbr_err : float
-        Uncertainty in nbbr
-    """
-    nrbr, nrbr_err = _get_val_err(np_rec.group(2), np_rec.group(3))
-    ntbr, ntbr_err = _get_val_err(np_rec.group(4), np_rec.group(5))
-    nbbr, nbbr_err = _get_val_err(np_rec.group(6), np_rec.group(7))
-    return nrbr, nrbr_err, ntbr, ntbr_err, nbbr, nbbr_err
-
-
-def _parse_parent_record(p_rec):
-    """
-    This parses an ENSDF parent record
-
-    Parameters
-    ----------
-    p_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    tfinal : float
-        half-life in seconds
-    tfinalerr : float
-        Uncertainty in half-life in seconds
-    """
-    lm = re.match("[ ]*([A-Z]+)(?![A-Z0-9+])", p_rec.group(2))
-    spv = _specialval.match(p_rec.group(2).strip())
-    spv2 = _specialval2.match(p_rec.group(2).strip())
-    special = ' '
-    if lm is not None:
-        special = lm.group(1)
-        if "S" in special and len(special.strip()) > 1:
-            special = special.strip()[1]
-        e = 0.0
-        de = np.nan
-    elif spv is not None:
-        e, de = _get_val_err(spv.group(1), p_rec.group(3))
-        special = spv.group(2)
-    elif spv2 is not None:
-        e, de = _get_val_err(spv2.group(2), p_rec.group(3))
-        special = spv2.group(1)
-        if "S" in special and len(special.strip()) > 1:
-            special = special.strip()[1]
-    else:
-        e, de = _get_val_err(p_rec.group(2).strip('() '), p_rec.group(3))
-    j = p_rec.group(4)
-    tfinal, tfinalerr = _to_time(p_rec.group(5), p_rec.group(6))
-    return p_rec.group(1), tfinal, tfinalerr, e, de, special
-
-
-def _parse_qvalue_record(q_rec):
-    """
-    This parses and ENSDF q-value record
-
-    Parameters
-    ----------
-    q_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    qminus : float
-        total energy for B- decay (if qminus > 0 B- decay is possible)
-    dqminus : float
-        standard uncertainty in qminus
-    sn : float
-        neutron separation energy in keV
-    dsn : float
-        standard uncertainty in sn
-    sp : float
-        neutron separation energy in keV
-    dsp : float
-        standard uncertainty in sp
-    qa : float
-        total energy available for alpha decay of the ground state
-    dqa : float
-        standard uncertainty in qa
-    """
-    qminus, dqminus = _get_val_err(q_rec.group(2), q_rec.group(3))
-    sn, dsn = _get_val_err(q_rec.group(4), q_rec.group(5))
-    sp, dsp = _get_val_err(q_rec.group(5), q_rec.group(7))
-    qa, dqa = _get_val_err(q_rec.group(8), q_rec.group(9))
-    return qminus, dqminus, sn, dsn, sp, dsp, qa, dqa
-
-
-def _parse_alpha_record(a_rec):
-    """
-    This parses and ENSDF alpha record
-
-    Parameters
-    ----------
-    q_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    e : float
-        energy of alpha particle
-    de : float
-        standard uncertainty in energy
-    ia : float
-        intensity of the decay branch in percent
-    dia : float
-        standard uncertainty in intensity
-    hf : float
-        hindrance factor
-    dhf : float
-        standard uncertainty in hindrance factor
-    """
-    e, de = _get_val_err(a_rec.group(2), a_rec.group(3))
-    ia, dia = _get_val_err(a_rec.group(4), a_rec.group(5))
-    hf, dhf = _get_val_err(a_rec.group(5), a_rec.group(7))
-    return e, de, ia, dia, hf, dhf
-
-
-def _parse_delayed_particle_record(dp_rec):
-    """
-    This parses and ENSDF delayed particle record
-
-    Parameters
-    ----------
-    dp_rec : re.MatchObject
-        regular expression MatchObject
-
-    Returns
-    -------
-    ptype : str
-        symbol for delayed particle
-    e : float
-        particle energy
-    de : float
-        standard uncertainty in energy
-    ip : float
-        intensity of delayed particle in percent
-    dip : float
-        standard uncertainty in intensity
-    ei : float
-        energy level of the intermediate
-    t : float
-        half-life of the transition (in seconds)
-    dt : float
-        standard uncertainty in half-life
-    """
-    ptype = dp_rec.group(2)
-    e, de = _get_val_err(dp_rec.group(3), dp_rec.group(4))
-    ip, dip = _get_val_err(dp_rec.group(5), dp_rec.group(6))
-    ei = _getvalue(dp_rec.group(7))
-    t, dt = _to_time(dp_rec.group(8), dp_rec.group(9))
-    return ptype, e, de, ip, dip, ei, t, dt
-
-
-def _parse_decay_dataset(lines, decay_s):
-    """
-    This parses a gamma ray dataset. It returns a tuple of the parsed data.
-
-    Parameters
-    ----------
-    lines : list of str
-        list containing lines from one dataset of an ensdf file
-    decay_s : str
-        string of the decay type
-
-    Returns
-    -------
-    Tuple of decay parameters which is described in detail in gamma_rays docs
-
-    """
-    gammarays = []
-    betas = []
-    alphas = []
-    ecbp = []
-    ident = _ident.match(lines[0])
-    daughter = ident.group(1)
-    daughter_id = _to_id(daughter)
-    parent = ident.group(2).split()[0]
-    parent = parent.split('(')[0]
-    parents = parent.split(',')
-    if len(parents) > 1:
-        pfinal = _to_id(parents[0])
-    else:
-        pfinal = _to_id(parents[0][:5])
-    tfinal = None
-    tfinalerr = None
-    nrbr = None
-    nbbr = None
-    nrbr_err = None
-    nbbr_err = None
-    nb_err = None
-    br_err = None
-    nb = None
-    br = None
-    level = None
-    special = " "
-    goodgray = False
-    parent2 = None
-    for line in lines:
-        level_l = _level_regex.match(line)
-        if level_l is not None:
-            level, half_lifev, from_nuc, \
-            state, special = _parse_level_record(level_l)
-            continue
-        b_rec = _beta.match(line)
-        if b_rec is not None:
-            dat = _parse_beta_record(b_rec)
-            if parent2 is None:
-                bparent = pfinal
-            else:
-                bparent = parent2
-            level = 0.0 if level is None else level
-            bdaughter = data.id_from_level(_to_id(daughter), level)
-            betas.append([bparent, bdaughter, dat[0], 0.0, dat[2]])
-        bc_rec = _betac.match(line)
-        if bc_rec is not None:
-            bcdat = _parse_beta_continuation_record(bc_rec)
-            if bcdat[0] is not None:
-                if bc_rec.group(2) == 'B':
-                    betas[-1][3] = bcdat[0]
-                else:
-                    ecbp[-1][3] = bcdat[0]
-                    bggc = _gc.match(line)
-                    conv = _parse_gamma_continuation_record(bggc, dat[2],
-                                                            dat[8])
-                    if 'K' in conv:
-                        ecbp[-1][-3] = conv['K'][0]
-                    if 'L' in conv:
-                        ecbp[-1][-2] = conv['L'][0]
-                    if 'M' in conv:
-                        ecbp[-1][-1] = conv['M'][0]
-        a_rec = _alpha.match(line)
-        if a_rec is not None:
-            dat = _parse_alpha_record(a_rec)
-            if parent2 is None:
-                aparent = pfinal
-            else:
-                aparent = parent2
-            level = 0.0 if level is None else level
-            adaughter = data.id_from_level(_to_id(daughter), level)
-            alphas.append([aparent, adaughter, dat[0], dat[2]])
-        ec_rec = _ec.match(line)
-        if ec_rec is not None:
-            dat = _parse_ec_record(ec_rec)
-            if parent2 is None:
-                ecparent = pfinal
-            else:
-                ecparent = parent2
-            level = 0.0 if level is None else level
-            ecdaughter = data.id_from_level(_to_id(daughter), level)
-            ecbp.append([ecparent, ecdaughter, dat[0], 0.0, dat[2], dat[4],
-                         0, 0, 0])
-            continue
-        g_rec = _g.match(line)
-        if g_rec is not None:
-            dat = _parse_gamma_record(g_rec)
-            if dat[0] is not None:
-                gparent = 0
-                gdaughter = 0
-                if level is not None:
-                    gparent = data.id_from_level(_to_id(daughter), level,
-                                                 special)
-                    dlevel = level - dat[0]
-                    gdaughter = data.id_from_level(_to_id(daughter), dlevel,
-                                                   special)
-                if parent2 is None:
-                    gp2 = pfinal
-                else:
-                    gp2 = parent2
-                dat.insert(0, daughter_id)
-                dat.insert(0, gp2)
-                dat.insert(0, gdaughter)
-                dat.insert(0, gparent)
-                for i in range(3):
-                    dat.append(0)
-                gammarays.append(dat)
-                goodgray = True
-            else:
-                goodgray = False
-            continue
-        gc_rec = _gc.match(line)
-        if gc_rec is not None and goodgray is True:
-            conv = _parse_gamma_continuation_record(gc_rec, gammarays[-1][6],
-                                                    gammarays[-1][10])
-            if 'K' in conv:
-                gammarays[-1][-3] = conv['K'][0]
-            if 'L' in conv:
-                gammarays[-1][-2] = conv['L'][0]
-            if 'M' in conv:
-                gammarays[-1][-1] = conv['M'][0]
-            continue
-        n_rec = _norm.match(line)
-        if n_rec is not None:
-            nr, nr_err, nt, nt_err, br, br_err, nb, nb_err, nrbr, nrbr_err = \
-                _parse_normalization_record(n_rec)
-            if nb is not None and br is not None:
-                nbbr = nb * br
-            if nb_err is not None and br_err is not None and nb_err != 0:
-                nbbr_err = nbbr*((br_err/br) ** 2 * (nb_err/nb) ** 2) ** 0.5
-            continue
-        np_rec = _normp.match(line)
-        if np_rec is not None:
-            nrbr2, nrbr_err2, ntbr, ntbr_err, nbbr2, nbbr_err2 = \
-                _parse_production_normalization_record(np_rec)
-            if nrbr2 is not None and nrbr is None:
-                nrbr = nrbr2
-                nrbr_err = nrbr_err2
-            if nbbr2 is not None and nbbr is None:
-                nbbr = nbbr2
-                nbbr_err = nbbr_err2
-            continue
-        p_rec = _p.match(line)
-        if p_rec is not None:
-            # only 2 parents are supported so this can be here
-            multi = False
-            if parent2 is not None:
-                multi = True
-                pfinal = [parent2,]
-                tfinal = [t,]
-                tfinalerr = [terr,]
-            parent2, t, terr, e, e_err, special = _parse_parent_record(p_rec)
-            parent2 = data.id_from_level(_to_id(parent2), e, special)
-            if terr is not None and not isinstance(terr, float):
-                terr = (terr[0] + terr[1])/2.0
-            if multi:
-                tfinal.append(t)
-                tfinalerr.append(terr)
-                pfinal.append(parent2)
-            else:
-                tfinal = t
-                tfinalerr = terr
-                pfinal = parent2
-            continue
-    if len(gammarays) > 0 or len(alphas) > 0 or len(betas) > 0 or len(ecbp) > 0:
-        if len(parents) > 1 and parent2 is None:
-            pfinal = []
-            for item in parents:
-                pfinal.append(_to_id(item))
-        return pfinal, daughter_id, rxname.id(decay_s.strip().lower()), \
-               tfinal, tfinalerr, \
-               br, br_err, nrbr, nrbr_err, nbbr, nbbr_err, gammarays, alphas, \
-               betas, ecbp
-    return None
-
-
-_BAD_RX = frozenset([
-    # Be-6 doesn't really alpha decay (leaving He-2), rather it emits 2p
-    (40060000, 1089),
-    # Li-8 -> He-4 + beta- + alpha is really a shortcut for
-    # Li-8 -> Be-8 + beta- -> He-4 + alpha
-    (30080000, 1355894000),
-    ])
-
-
-def _adjust_ge100_branches(levellist):
-    """This adjust branches that are greater than or equal to 100% to be
-    100% - sum(other branches).  This helps prevent unphysical errors
-    downstream.
-    """
-    n = len(levellist)
-    brsum = defaultdict(float)
-    bridx = defaultdict(lambda: (-1, -1.0))
-    baddies = []
-    for i, (nuc, rx, hl, lvl, br, ms, sp) in enumerate(levellist):
-        if rx == 0:
-            continue
-        if br >= bridx[nuc][1]:
-            bridx[nuc] = (i, br)
-        brsum[nuc] += br
-        nucrx = (nuc, rx)
-        if nucrx in _BAD_RX:
-            baddies.append(i)
-    # adjust branch ratios
-    for nuc, (i, br) in bridx.items():
-        row = levellist[i]
-        # this line ensures that all branches sum to 100.0 within floating point
-        new_br = 100.0 - brsum[nuc] + br
-        new_row = row[:4] + (new_br,) + row[5:]
-        levellist[i] = new_row
-    # remove bad reaction rows
-    for i in baddies[::-1]:
-        del levellist[i]
-
-
-# State Id, Bad Metastable Number, (Replacement State ID, optional) Replacement Metastable Number
-_BAD_METASTABLES = {
-    # Rh-110 misreports its ground state as a first meta-stable and its first
-    # metastable as its second.
-    (451100000, 1): 0,
-    (451100001, 2): 1,
-    # Pm-154 misreports its ground state as a first metastable
-    (611540000, 1): 0,
-    # Ga-72M is not listed as metastable
-    (310720002, 0): 1,
-    # Rh-108M is not listed as metastable
-    (451080004, 0): 1,
-    # Pm-136 mislabels two states as both metastable or ground.
-    # Replacing with what KAERI and NNDC report
-    (611360001, 2): (611360000, 0),
-    (611360000, 1): (611360001, 1),
-    }
-
-
-def _adjust_metastables(levellist):
-    """Adjusts misreported metastable states in place."""
-    for i in range(len(levellist)):
-        key = (levellist[i][0], levellist[i][5])
-        if key in _BAD_METASTABLES:
-            row = list(levellist[i])
-            new_id = _BAD_METASTABLES[key]
-            if not isinstance(new_id, int):
-                row[0], new_id = new_id
-            row[5] = new_id
-            levellist[i] = tuple(row)
-
-
-# State Id, Rx Id : New Half-lives
-_BAD_HALF_LIVES = {
-    # Eu-151 lists a very long half-life (5.364792e+25) even though it
-    # lists no reaction, and thus no children, and no branch ratio.
-    # set to infinity for consistency.
-    (631510000, 0): float('inf'),
-    }
-
-
-def _adjust_half_lives(levellist):
-    """Resets misbehaving half-lives to new value."""
-    for i in range(len(levellist)):
-        key = levellist[i][:2]
-        if key in _BAD_HALF_LIVES:
-            row = list(levellist[i])
-            row[2] = _BAD_HALF_LIVES[key]
-            levellist[i] = tuple(row)
-
-
-
[docs]def levels(filename, levellist=None): - """ - This takes an ENSDF filename or file object and parses the ADOPTED LEVELS - records to assign level numbers by energy. It also parses the different - reported decay types and branching ratios. - - Parameters - ---------- - filename : str or file - Name of ENSDF formatted file or a file-like object containing ENSDF - formatted data - levellist : list of tuples - This is a list object which all newly processed levels will be added - to. If it's None a new one will be created. - - Returns - ------- - levellist : list of tuples - This is a list of all the level data. Each level has base entry with a - reaction id of 0 and additional entries for any listed decays. The - format of each row is: - nuc_id : int - The state_id of the level - rx_id : int - The id of the decay "reaction" in PyNE reaction id form. - half_life : float - Half life of the state in s - level : float - energy of the level in keV - branch_ratio : float - if rx_id != 0 this is the percent of decays in that channel - metastable : int - metastable id number of the level (if given) - special : string - single character denoting levels with unknown relation to ground - state - """ - badlist = ["ecsf", "34si", "|b{+-}fission", "{+24}ne", - "{+22}ne", "24ne", "b-f", "{+20}o", "2|e", "b++ec", - "ecp+ec2p", "ecf", "mg", "ne", "{+20}ne", "{+25}ne", - "{+28}mg", "sf(+ec+b+)"] - special = "" - if levellist is None: - levellist = [] - if isinstance(filename, str): - with open(filename, 'r') as f: - dat = f.read() - else: - dat = filename.read() - datasets = dat.split(80 * " " + "\n")[0:-1] - for dataset in datasets: - lines = dataset.splitlines() - ident = re.match(_ident, lines[0]) - if ident is None: - continue - if 'ADOPTED LEVELS' in ident.group(2): - leveln = 0 - brs = {} - level_found = False - for line in lines: - level_l = _level_regex.match(line) - if level_l is not None: - if len(brs) > 0: - for key, val in brs.items(): - goodkey = True - keystrip = key.replace("%", "").lower() - for item in badlist: - if keystrip == item: - goodkey = False - if goodkey is True: - rx = rxname.id(keystrip) - branch_percent = float(val.split("(")[0]) - levellist.append((nuc_id, rx, half_lifev, - level, branch_percent, - state, special)) - if level_found is True: - levellist.append((nuc_id, 0, half_lifev, level, 0.0, - state, special)) - brs = {} - level, half_lifev, from_nuc, state, special = \ - _parse_level_record(level_l) - if from_nuc is not None: - nuc_id = from_nuc + leveln - leveln += 1 - level_found = True - else: - level_found = False - continue - levelc = _level_cont_regex.match(line) - if levelc is not None: - brs.update(_parse_level_continuation_record(levelc)) - continue - if len(brs) > 0: - for key, val in brs.items(): - goodkey = True - keystrip = key.replace("%", "").lower() - for item in badlist: - if keystrip == item: - goodkey = False - if goodkey is True: - rx = rxname.id(keystrip) - branch_percent = float(val.split("(")[0]) - levellist.append((nuc_id, rx, half_lifev, level, - branch_percent, state, special)) - if level_found is True: - levellist.append((nuc_id, 0, half_lifev, level, 0.0, state, - special)) - _adjust_ge100_branches(levellist) - _adjust_metastables(levellist) - _adjust_half_lives(levellist)
- return levellist - - -
[docs]def decays(filename, decaylist=None): - """ - This splits an ENSDF file into datasets. It then passes the dataset to the - appropriate parser. Currently only a subset of decay datasets are - supported. The output is a list of objects containing information - pertaining to a particular decay. - - Parameters - ---------- - filename : str or file - Name of ENSDF formatted file or a file-like object containing ENSDF - formatted data - decaylist : list of tuples - This is a list object which all newly processed decays will be added - to. If it's None a new one will be created. - - Returns - ------- - decaylist : list of tuples - list of objects containing information pertaining to a particular - decay. This information is in the following format: - - int - nuc_id of the parent - int - nuc_id of the daughter - int - PyNE reaction id - float - half-life in seconds - float - half-life error in seconds - float - branching ratio (percent) - float - Conversion factor for gamma intensity to photons per 100 decays of the - parent - float - Error in conversion factor for gamma intensity - float - Conversion factor for electron capture/beta intensity to electron - captures/betas per 100 decays of the parent - float - Error in conversion factor for electron capture/beta intensity - list - a list containing information about each gamma ray: - * starting level of gamma transition in stats_id form - * final level of gamma transition in state_id form - * original parent - * energy in keV - * uncertainty in energy - * intensity (multiply by conversion factor for percentage) - * uncertainty in intensity - * electron conversion intensity - * uncertainty in electron conversion intensity - * total transition intensity - * total transition intensity error - * k electron conversion intensity - * l electron conversion intensity - * m electron conversion intensity - list - a list containing information about each alpha: - * parent nuclide id in state_id form - * child nuclide id in state_id form - * alpha energy - * alpha intensity in percent of total alphas - list - a list containing information about each beta minus from the parent - decay: - * parent nuclide id in state_id form - * child nuclide id in state_id form - * beta endpoint energy - * beta average energy - * beta intensity (multiply by conversion factor for percentage) - list - a list containing information about each beta plus and electron capture - from the parent decay: - * parent nuclide id in state_id form - * child nuclide id in state_id form - * beta plus endpoint energy - * beta plus average energy - * beta intensity (multiply by conversion factor for percentage) - * electron capture intensity (multiply by conversion factor for - percentage) - * k electron conversion intensity - * l electron conversion intensity - * m electron conversion intensity - """ - if decaylist is None: - decaylist = [] - if isinstance(filename, str): - with open(filename, 'r') as f: - dat = f.read() - else: - dat = filename.read() - datasets = dat.split(80 * " " + "\n") - for dataset in datasets: - lines = dataset.splitlines() - if len(lines) == 0: - continue - ident = re.match(_ident, lines[0]) - if ident is None: - continue - if 'DECAY' in ident.group(2): - decay_s = ident.group(2).split()[1] - decay = _parse_decay_dataset(lines, decay_s) - if decay is not None: - if isinstance(decay[0], list): - if isinstance(decay[3], list): - for i, parent in enumerate(decay[0]): - dc = copy.deepcopy(list(decay)) - dc[0] = parent - dc[3] = decay[3][i] - dc[4] = decay[4][i] - for gamma in dc[11]: - gamma[2] = parent - for alpha in dc[12]: - alpha[0] = parent - for beta in dc[13]: - beta[0] = parent - for ecbp in dc[14]: - ecbp[0] = parent - decaylist.append(tuple(dc)) - else: - for parent in decay[0]: - dc = copy.deepcopy(list(decay)) - dc[0] = parent - for gamma in dc[11]: - gamma[2] = parent - for alpha in dc[12]: - alpha[0] = parent - for beta in dc[13]: - beta[0] = parent - for ecbp in dc[14]: - ecbp[0] = parent - decaylist.append(tuple(dc)) - else: - decaylist.append(decay)
- return decaylist - - -def _dlist_gen(f): - """ - This compiles a list of decay types in an ensdf file - - Parameters - ---------- - f : str - Name of ENSDF formatted file - - Returns - ------- - decaylist : list - list of decay types in the ENSDF file eg. ['B+','B-','A'] - """ - if isinstance(f, str): - with open(f, 'r') as f: - dat = f.read() - else: - dat = f.read() - decaylist = [] - datasets = dat.split(80 * " " + "\n")[0:-1] - for dataset in datasets: - lines = dataset.splitlines() - ident = re.match(_ident, lines[0]) - if ident is not None: - if 'DECAY' in ident.group(2): - fin = ident.group(2).split()[1] - if fin not in decaylist: - decaylist.append(fin) - - return decaylist - - -def _level_dlist_gen(f, keys): - """ - This compiles a list of decay types in an ensdf file - - Parameters - ---------- - f : str - Name of ENSDF formatted file - - Returns - ------- - decaylist : list - list of decay types in the ENSDF file eg. ['B+','B-','A'] - """ - if isinstance(f, str): - with open(f, 'r') as f: - dat = f.read() - else: - dat = f.read() - datasets = dat.split(80 * " " + "\n")[0:-1] - for dataset in datasets: - lines = dataset.splitlines() - ident = re.match(_ident, lines[0]) - if ident is not None: - if 'ADOPTED LEVELS' in ident.group(2): - for line in lines: - levelc = _level_cont_regex.match(line) - if levelc is None: - continue - ddict = _parse_level_continuation_record(levelc) - for item in ddict.keys(): - if item in keys: - continue - keys.append(item) - return keys -
- -
-
-
- - - - - -
-
-
- - -
- - - - \ No newline at end of file diff --git a/_modules/pyne/fluka.html b/_modules/pyne/fluka.html index 443800bf..d1986b2d 100644 --- a/_modules/pyne/fluka.html +++ b/_modules/pyne/fluka.html @@ -11,11 +11,14 @@ pyne.fluka — PyNE 0.5.11 - - + + + + + @@ -73,7 +76,7 @@

Source code for pyne.fluka

 
 Currently, only usrbin output files can be read.
 
-If PyTAPS is not installed, then Usrbin and UsrbinTally will not be
+If PyMOAB is not installed, then Usrbin and UsrbinTally will not be
 available to use.
 
 """
@@ -82,16 +85,14 @@ 

Source code for pyne.fluka

 from pyne.utils import QAWarning
 
 # Mesh specific imports
-try:
-    from itaps import iMesh
-    HAVE_PYTAPS = True
-except ImportError:
-    warn("the PyTAPS optional dependency could not be imported. "
-                  "Some aspects of the mcnp module may be incomplete.",
-                  QAWarning)
-    HAVE_PYTAPS = False
+from pyne.mesh import Mesh, StatMesh, MeshError, HAVE_PYMOAB
 
-from pyne.mesh import Mesh, StatMesh, MeshError, IMeshTag
+if HAVE_PYMOAB:
+    from pyne.mesh import NativeMeshTag
+else:
+    warn("The PyMOAB optional dependency could not be imported. "
+         "Some aspects of the fluka module may be incomplete.",
+         QAWarning)
 
 
 
[docs]class Usrbin(object): @@ -116,8 +117,8 @@

Source code for pyne.fluka

             FLUKA USRBIN file
         """
 
-        if not HAVE_PYTAPS:
-            raise RuntimeError("PyTAPS is not available, "
+        if not HAVE_PYMOAB:
+            raise RuntimeError("PyMOAB is not available, "
                                "unable to create Meshtal.")
 
         self.tally = {}
@@ -132,8 +133,8 @@ 

Source code for pyne.fluka

 
         while (line != "" and line[0] == '1'):
             new_tally = UsrbinTally(fh)
-            self.tally[new_tally.name] = new_tally
- line = fh.readline() + self.tally[new_tally.name] = new_tally + line = fh.readline()
[docs]class UsrbinTally(Mesh): @@ -172,8 +173,8 @@

Source code for pyne.fluka

             An open usrbin file
         """
 
-        if not HAVE_PYTAPS:
-            raise RuntimeError("PyTAPS is not available, "
+        if not HAVE_PYMOAB:
+            raise RuntimeError("PyMOAB is not available, "
                                "unable to create Meshtal.")
 
         part_data = []
@@ -190,7 +191,8 @@ 

Source code for pyne.fluka

         self.particle = self.particle.split()[-1]
 
         if self.coord_sys != 'Cartesian':
-            raise ValueError("Only cartesian coordinate system currently supported")
+            raise ValueError(
+                "Only cartesian coordinate system currently supported")
 
         [x_info, y_info, z_info] = self._read_usrbin_head(fh)
 
@@ -249,7 +251,7 @@ 

Source code for pyne.fluka

         """
         tokens = line.split()
         return float(tokens[3]), float(tokens[5]), int(tokens[7]), \
-               float(tokens[10])
+            float(tokens[10])
 
     def _generate_bounds(self, dim_info):
         """This takes in the dimension information (min, max, bins, and width)
@@ -267,16 +269,16 @@ 

Source code for pyne.fluka

         the error_data.
         """
         super(UsrbinTally, self).__init__(structured_coords=[self.x_bounds,
-                                          self.y_bounds, self.z_bounds],
+                                                             self.y_bounds, self.z_bounds],
                                           structured=True,
                                           structured_ordering='zyx',
                                           mats=None)
-        self.part_data_tag = IMeshTag(size=1, dtype=float, mesh=self,
-                                  name="part_data_{0}".format(self.particle))
-        self.error_data_tag = IMeshTag(size=1, dtype=float, mesh=self,
-                                  name="error_data_{0}".format(self.particle))
-        self.part_data_tag[:] = part_data
- self.error_data_tag[:] = error_data + self.part_data_tag = NativeMeshTag(size=1, dtype=float, mesh=self, + name="part_data_{0}".format(self.particle)) + self.error_data_tag = NativeMeshTag(size=1, dtype=float, mesh=self, + name="error_data_{0}".format(self.particle)) + self.part_data_tag[:] = part_data + self.error_data_tag[:] = error_data
@@ -342,8 +344,8 @@

Navigation

+ + + + + @@ -72,11 +75,12 @@

Source code for pyne.mcnp

 Mctal and Runtpe classes still need work. Also should add Meshtal and Outp
 classes.
 
-If PyTAPS is not installed, then Wwinp, Meshtal, and Meshtally will not be
+If PyMOAB is not installed, then Wwinp, Meshtal, and Meshtally will not be
 available to use.
 
 """
 from __future__ import print_function, division
+from pyne.mesh import Mesh, StatMesh, HAVE_PYMOAB
 import sys
 import struct
 import math
@@ -97,21 +101,19 @@ 

Source code for pyne.mcnp

 warn(__name__ + " is not yet QA compliant.", QAWarning)
 
 # Mesh specific imports
-try:
-    from itaps import iMesh
-    HAVE_PYTAPS = True
-except ImportError:
-    warn("the PyTAPS optional dependency could not be imported. "
-                  "Some aspects of the mcnp module may be incomplete.",
-                  QAWarning)
-    HAVE_PYTAPS = False
 
-from pyne.mesh import Mesh, StatMesh, IMeshTag
+if HAVE_PYMOAB:
+    from pyne.mesh import NativeMeshTag
+else:
+    warn("The PyMOAB optional dependency could not be imported. "
+         "Some aspects of the mcnp module may be incomplete.",
+         QAWarning)
 
 if sys.version_info[0] > 2:
     def cmp(a, b):
         return (a > b) - (a < b)
 
+
 class Mctal(object):
     def __init__(self):
         pass
@@ -281,8 +283,8 @@ 

Source code for pyne.mcnp

                 header_string += " {0}".format(i.surf_params)
             header_string += ")\n"
         header_string += "Summary Table: " + str(self.summary_table)
-
- return header_string + + return header_string
[docs] def print_tracklist(self, max_tracks=None): """Returns tracklists in SurfSrc as a string. @@ -316,8 +318,8 @@

Source code for pyne.mcnp

                 j.x, j.y, j.z, j.u, j.v, j.cs, j.w) + "\n"
             if cnt > max_tracks:
                 break
-
- return track_data + + return track_data
def __eq__(self, other): rtn = self.__cmp__(other) @@ -426,9 +428,10 @@

Source code for pyne.mcnp

                 self.np1 = tablelengths.get_long()[0]   # hist used to gen. src
                 self.nrss = tablelengths.get_long()[0]  # #tracks to surf src
 
-            self.ncrd = tablelengths.get_int()[0]  # #values in surf src record
-                                                   # 6 for a spherical source
-                                                   # 11 otherwise
+	    # values in surf src record
+            # 6 for a spherical source
+            # 11 otherwise
+            self.ncrd = tablelengths.get_int()[0]
             self.njsw = tablelengths.get_int()[0]  # number of surfaces
             self.niss = tablelengths.get_int()[0]  # #histories to surf src
             self.table1extra = list()
@@ -510,8 +513,8 @@ 

Source code for pyne.mcnp

         self.summary_table = summary_info.get_int(
             (2+4*self.mipts)*(self.njsw+self.niwr)+1)
         self.summary_extra = list()
-        while summary_info.num_bytes > summary_info.pos:
- self.summary_extra += summary_info.get_int() + while summary_info.num_bytes > summary_info.pos: + self.summary_extra += summary_info.get_int()
[docs] def read_tracklist(self): """Reads in track records for individual particles.""" @@ -537,8 +540,8 @@

Source code for pyne.mcnp

                           track_data.v*track_data.v), track_data.bitarray)
             # track_data.bitarray = abs(track_data.bitarray)
 
-            self.tracklist.append(track_data)
- return + self.tracklist.append(track_data) + return
[docs] def put_header(self): """Write the header part of the header to the surface source file""" @@ -559,8 +562,8 @@

Source code for pyne.mcnp

             joinrec = "".join(rec)
             newrecord = _FortranRecord(joinrec, len(joinrec))
             newrecord.put_int([self.knod])
-            self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def put_table_1(self): """Write the table1 part of the header to the surface source file""" @@ -577,8 +580,8 @@

Source code for pyne.mcnp

         newrecord.put_int([self.njsw])
         newrecord.put_int([self.niss])  # MCNP needs 'int', could be 'long' ?
         newrecord.put_int(self.table1extra)
-        self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def put_table_2(self): """Write the table2 part of the header to the surface source file""" @@ -587,8 +590,8 @@

Source code for pyne.mcnp

         newrecord.put_int([self.mipts])
         newrecord.put_int([self.kjaq])
         newrecord.put_int(self.table2extra)
-        self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def put_surface_info(self): """Write the record for each surface to the surface source file""" @@ -604,16 +607,16 @@

Source code for pyne.mcnp

             newrecord.put_int(s.num_params)
             newrecord.put_double(s.surf_params)
 
-            self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def put_summary(self): """Write the summary part of the header to the surface source file""" newrecord = _FortranRecord("", 0) newrecord.put_int(list(self.summary_table)) newrecord.put_int(list(self.summary_extra)) - self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def write_header(self): """Write the first part of the MCNP surface source file. The header content @@ -622,8 +625,8 @@

Source code for pyne.mcnp

         self.put_header()
         self.put_table_1()
         self.put_table_2()
-        self.put_surface_info()
- self.put_summary() + self.put_surface_info() + self.put_summary()
[docs] def write_tracklist(self): """Write track records for individual particles. Second part of the MCNP @@ -644,8 +647,8 @@

Source code for pyne.mcnp

             newrecord.put_double(self.tracklist[j].u)
             newrecord.put_double(self.tracklist[j].v)
             newrecord.put_double(self.tracklist[j].cs)
-            self.put_fortran_record(newrecord)
- return + self.put_fortran_record(newrecord) + return
[docs] def update_tracklist(self, surf_src): """ Update tracklist from another surface source. @@ -676,12 +679,12 @@

Source code for pyne.mcnp

         elif self == surf_src:
             raise ValueError('Tracklist cannot be updated with itself')
 
-        self.tracklist = surf_src.tracklist
- self.nrss = surf_src.nrss + self.tracklist = surf_src.tracklist + self.nrss = surf_src.nrss
def __del__(self): - """Destructor. The only thing to do is close the file."""
- self.f.close() + """Destructor. The only thing to do is close the file.""" + self.f.close()
[docs]class Srctp(_BinaryReader): @@ -732,8 +735,8 @@

Source code for pyne.mcnp

         else:
             return self.sites[index: index + self.n_run]
 
-    def __repr__(self):
- return "<Srctp: {0}>".format(self.f.name) + def __repr__(self): + return "<Srctp: {0}>".format(self.f.name)
class SourceSite(object): @@ -771,8 +774,8 @@

Source code for pyne.mcnp

         for i in range(self.n_tables):
             self.tables.append(self.get_fortran_record())
 
-    def __repr__(self):
- return "<Runtpe: {0}>".format(self.f.name) + def __repr__(self): + return "<Runtpe: {0}>".format(self.f.name)
[docs]class Xsdir(object): @@ -881,8 +884,8 @@

Source code for pyne.mcnp

                 table.entries = int(words[8])
             if len(words) > 9:
                 table.temperature = float(words[9])
-            if len(words) > 10:
- table.ptable = (words[10] == 'ptable') + if len(words) > 10: + table.ptable = (words[10] == 'ptable')
[docs] def find_table(self, name): """Find all tables for a given ZIAD. @@ -900,8 +903,8 @@

Source code for pyne.mcnp

         tables = []
         for table in self:
             if name in table.name:
-                tables.append(table)
- return tables + tables.append(table) + return tables
[docs] def to_xsdata(self, filename): """Writes a Serpent xsdata file for all continuous energy xs tables. @@ -915,8 +918,8 @@

Source code for pyne.mcnp

         xsdata = open(filename, 'w')
         for table in self.tables:
             if table.serpent_type == 1:
-                xsdata.write(table.to_serpent() + '\n')
- xsdata.close() + xsdata.write(table.to_serpent() + '\n') + xsdata.close()
def __iter__(self): for table in self.tables: @@ -933,8 +936,8 @@

Source code for pyne.mcnp

         """
         valid_nucs = set(nucname.id(table.name.split('.')[0])
                          for table in self.tables if
-                         nucname.isnuclide(table.name.split('.')[0]))
- return valid_nucs + nucname.isnuclide(table.name.split('.')[0])) + return valid_nucs
[docs]class XsdirTable(object): @@ -1053,11 +1056,11 @@

Source code for pyne.mcnp

         return "{0} {0} {1} {2} {3} {4} {5:.11e} {6} {7}".format(
             self.name,
             self.serpent_type, self.zaid, 1 if self.metastable else 0,
-            self.awr, self.temperature/8.6173423e-11, self.filetype - 1,
- directory + self.filename) + self.awr, self.temperature/8.6173423e-11, self.filetype - 1, + directory + self.filename)
- def __repr__(self): - return "<XsDirTable: {0}>".format(self.name) + def __repr__(self): + return "<XsDirTable: {0}>".format(self.name) class PtracEvent(tables.IsDescription): @@ -1145,8 +1148,8 @@

Source code for pyne.mcnp

         else:
             self.endianness = '>'
 
-        # discard the next 8 bytes (the value -1 und another 4)
- self.f.read(8) + # discard the next 8 bytes (the value -1 und another 4) + self.f.read(8)
[docs] def read_next(self, format, number=1, auto=False, raw_format=False): """Helper method for reading records from the Ptrac file. @@ -1186,7 +1189,7 @@

Source code for pyne.mcnp

 
             b = self.f.read(length + 4)
             tmp = struct.unpack(b"".join([self.endianness.encode(),
-                                (format*number).encode(), b'i']), b)
+                                          (format*number).encode(), b'i']), b)
             length2 = tmp[-1]
             tmp = tmp[:-1]
         else:
@@ -1215,8 +1218,8 @@ 

Source code for pyne.mcnp

             # just return the number and not a tuple containing just the number
             return tmp[0]
         else:
-            # convert tuple to list
- return list(tmp) + # convert tuple to list + return list(tmp)
[docs] def read_headers(self): """Read and save the MCNP version and problem description from the @@ -1254,8 +1257,8 @@

Source code for pyne.mcnp

             if current_variable < num_variables and (current_pos + n + 1) >= \
                     len(line):
                 line += self.read_next('f', 10)
-            current_pos += n + 1
- current_variable += 1 + current_pos += n + 1 + current_variable += 1
[docs] def read_variable_ids(self): """Read the list of variable IDs that each record type in the Ptrac @@ -1295,14 +1298,14 @@

Source code for pyne.mcnp

             variable_ids[l] = all_var_ids[:variable_nums[l]]
             all_var_ids = all_var_ids[variable_nums[l]:]
 
-        self.variable_nums = variable_nums
- self.variable_ids = variable_ids + self.variable_nums = variable_nums + self.variable_ids = variable_ids
[docs] def read_nps_line(self): """Read an NPS record and save the type of the next event. """ - nps_line = self.read_next('i', self.variable_nums["nps"])
- self.next_event = nps_line[1] + nps_line = self.read_next('i', self.variable_nums["nps"]) + self.next_event = nps_line[1]
[docs] def read_event_line(self, ptrac_event): """Read an event record and save it to a given PtracParticle instance. @@ -1331,8 +1334,8 @@

Source code for pyne.mcnp

             if self.variable_ids[e][i] in self.variable_mappings:
                 ptrac_event[self.variable_mappings[
                     self.variable_ids[e][i]]] = \
-                    evt_line[i]
- ptrac_event["event_type"] = event_type + evt_line[i] + ptrac_event["event_type"] = event_type
[docs] def write_to_hdf5_table(self, hdf5_table, print_progress=0): """Writes the events contained in this Ptrac file to a given HDF5 @@ -1356,8 +1359,9 @@

Source code for pyne.mcnp

                 ptrac_event.append()
 
                 counter += 1
-                if print_progress > 0 and counter % print_progress == 0:
- print("processing event {0}".format(counter)) + if print_progress > 0 and counter % print_progress == 0: + print("processing event {0}".format(counter)) + def _is_cell_line(line): is_cell = False @@ -1367,9 +1371,10 @@

Source code for pyne.mcnp

            not line.split()[2][0].isalpha() and \
            line[0:5] != '     ' and \
            line.split()[1] != '0':
-               is_cell = True
+            is_cell = True
     return is_cell
 
+
 
[docs]def mats_from_inp(inp): """This function reads an MCNP inp file and returns a mapping of material numbers to material objects. @@ -1382,9 +1387,9 @@

Source code for pyne.mcnp

     Returns
     --------
     materials : dict
-       Keys are MCNP material numbers and values are PyNE material objects (for 
-       single density materials) and MultiMaterial objects (for multiple density 
-       materials). 
+       Keys are MCNP material numbers and values are PyNE material objects (for
+       single density materials) and MultiMaterial objects (for multiple density
+       materials).
     """
 
     mat_lines = []  # line of lines that begin material cards
@@ -1401,20 +1406,20 @@ 

Source code for pyne.mcnp

         # information is stored in a dictionary where:
         # key = material number, value = list of densities
         if _is_cell_line(line):
-           mat_num = int(line.split()[1])
-           den = float(line.split()[2])
+            mat_num = int(line.split()[1])
+            den = float(line.split()[2])
 
-           if mat_num not in densities.keys():
-               densities[mat_num] = [den]
+            if mat_num not in densities.keys():
+                densities[mat_num] = [den]
 
-           else:
-               same_bool = False
-               for j in range(0, len(densities[mat_num])):
-                   if abs((den - densities[mat_num][j])/den) < 1E-4:
-                       same_bool = True
+            else:
+                same_bool = False
+                for j in range(0, len(densities[mat_num])):
+                    if abs((den - densities[mat_num][j])/den) < 1E-4:
+                        same_bool = True
 
-               if same_bool is False:
-                   densities[mat_num].append(den)
+                if same_bool is False:
+                    densities[mat_num].append(den)
 
         # check line to see if it contain a material card, in the form
         # m* where * is a digit. If so store the line num. and material number
@@ -1430,17 +1435,17 @@ 

Source code for pyne.mcnp

     for i in range(0, len(mat_nums)):
         if mat_nums[i] in densities.keys():
             materials[mat_nums[i]] = mat_from_inp_line(inp, mat_lines[i],
-                                                   densities[mat_nums[i]])
+                                                       densities[mat_nums[i]])
         else:
-            materials[mat_nums[i]] = mat_from_inp_line(inp, mat_lines[i])
- return materials + materials[mat_nums[i]] = mat_from_inp_line(inp, mat_lines[i]) + return materials
[docs]def mat_from_inp_line(filename, mat_line, densities='None'): """ This function reads an MCNP material card from a file and returns a Material or Multimaterial object for the material described by the card. This function is used by :func:`mats_from_inp`. - + Parameters ---------- filename : str @@ -1469,7 +1474,7 @@

Source code for pyne.mcnp

             line_index += 1
             line = linecache.getline(filename, mat_line + line_index)
         # otherwise this not a line we care about, move on and
-        # skip lines that start with c or C                                                                                                                  
+        # skip lines that start with c or C
         else:
             line_index += 1
             line = linecache.getline(filename, mat_line + line_index)
@@ -1482,7 +1487,7 @@ 

Source code for pyne.mcnp

             zzzaaam = str(nucname.zzaaam(
                 nucname.mcnp_to_id(data_string.split()[i].split('.')[0])))
 
-            # this allows us to read nuclides that are repeated                                                                                              
+            # this allows us to read nuclides that are repeated
             if zzzaaam in nucvec.keys():
                 nucvec[zzzaaam] += float(data_string.split()[i+1])
             else:
@@ -1582,8 +1587,8 @@ 

Source code for pyne.mcnp

             finished_mat = MultiMaterial(mat_dict)
     else:
         finished_mat = mat
-
- return finished_mat + + return finished_mat
[docs]class Wwinp(Mesh): @@ -1637,8 +1642,8 @@

Source code for pyne.mcnp

     """
 
     def __init__(self):
-        if not HAVE_PYTAPS:
-            raise RuntimeError("PyTAPS is not available, "
+        if not HAVE_PYMOAB:
+            raise RuntimeError("PyMOAB is not available, "
                                "unable to create Wwinp Mesh.")
         pass
 
@@ -1647,8 +1652,8 @@ 

Source code for pyne.mcnp

         """
         with open(filename, 'r') as f:
             self._read_block1(f)
-            self._read_block2(f)
- self._read_block3(f) + self._read_block2(f) + self._read_block3(f)
def _read_block1(self, f): # Retrieves all of the information from block 1 of a wwinp file. @@ -1717,7 +1722,7 @@

Source code for pyne.mcnp

 
             self._read_wwlb('n', f)
 
-        if len(self.ne) == 2:
+        if len(self.ne) == 2 and self.ne[1] != 0:
             self.e.append([])
             while len(self.e[-1]) < self.ne[1]:
                 self.e[-1] += [float(x) for x in f.readline().split()]
@@ -1733,7 +1738,7 @@ 

Source code for pyne.mcnp

         # preexisting mesh.
         if not hasattr(self, 'mesh'):
             super(Wwinp, self).__init__(structured_coords=[self.bounds[0],
-                                        self.bounds[1], self.bounds[2]],
+                                                           self.bounds[1], self.bounds[2]],
                                         structured=True)
 
         volume_elements = list(self.structured_iterate_hex('zyx'))
@@ -1756,26 +1761,30 @@ 

Source code for pyne.mcnp

             ww_data[i] = ww_row
 
         # create vector tags for data
-        tag_ww = self.mesh.createTag(
-            "ww_{0}".format(particle), self.ne[particle_index], float)
+        ww_tag_name = "ww_{0}".format(particle)
+        self.tag(ww_tag_name, size=self.ne[particle_index],
+                 dtype=float, tagtype='nat_mesh')
+        tag_ww = self.get_tag(ww_tag_name)
 
         # tag vector data to mesh
         for i, volume_element in enumerate(volume_elements):
             tag_ww[volume_element] = ww_data[:, i]
 
         # Save energy upper bounds to rootset.
-        tag_e_bounds = \
-            self.mesh.createTag('{0}_e_upper_bounds'.format(particle),
-                                len(self.e[particle_index]), float)
-        tag_e_bounds[self.mesh.rootSet] = self.e[particle_index]
+        e_bounds_tag_name = '{0}_e_upper_bounds'.format(particle)
+        self.tag(e_bounds_tag_name,
+                 size=len(self.e[particle_index]),
+                 dtype=float, tagtype='nat_mesh')
+        tag_e_bounds = self.get_tag(e_bounds_tag_name)
+        tag_e_bounds[self] = self.e[particle_index]
 
 
[docs] def write_wwinp(self, filename): """This method writes a complete WWINP file to <filename>. """ with open(filename, 'w') as f: self._write_block1(f) - self._write_block2(f)
- self._write_block3(f) + self._write_block2(f) + self._write_block3(f)
def _write_block1(self, f): # Writes the all block 1 data to WWINP file @@ -1875,8 +1884,8 @@

Source code for pyne.mcnp

         ww_data = np.empty(shape=(self.nft, self.ne[particle_index]))
         volume_elements = list(self.structured_iterate_hex('zyx'))
         for i, volume_element in enumerate(volume_elements):
-            ww_data[i] = self.mesh.getTagHandle(
-                "ww_{0}".format(particle))[volume_element]
+            ww_data[i] = self.get_tag("ww_{0}".format(particle))[
+                volume_element]
 
         for i in range(0, self.ne[particle_index]):
             # Append ww_data to block3 string.
@@ -1910,11 +1919,10 @@ 

Source code for pyne.mcnp

         # Set energy related attributes.
         self.e = []
         self.ne = []
-        all_tags = [x.name for x in self.mesh.getAllTags(self.mesh.rootSet)]
+        all_tags = [x.name for x in self.get_all_tags()]
 
         if 'n_e_upper_bounds' in all_tags:
-            n_e_upper_bounds = self.mesh.getTagHandle(
-                'n_e_upper_bounds')[self.mesh.rootSet]
+            n_e_upper_bounds = self.n_e_upper_bounds[self]
             # In the single energy group case, the "E_upper_bounds" tag
             # returns a non-iterable float. If this is the case, put this
             # float into an array so that it can be iterated over
@@ -1929,8 +1937,7 @@ 

Source code for pyne.mcnp

             self.ne.append(0)
 
         if 'p_e_upper_bounds' in all_tags:
-            p_e_upper_bounds = self.mesh.getTagHandle(
-                'p_e_upper_bounds')[self.mesh.rootSet]
+            p_e_upper_bounds = self.p_e_upper_bounds[self]
             if isinstance(p_e_upper_bounds, float):
                 p_e_upper_bounds = [p_e_upper_bounds]
 
@@ -1970,8 +1977,8 @@ 

Source code for pyne.mcnp

             self.cm[i].append(points[-1])
 
         self.nc = [len(self.cm[0]), len(self.cm[1]), len(self.cm[2])]
-        self.nf = [sum(self.fm[0]), sum(self.fm[1]), sum(self.fm[2])]
- self.nft = self.nf[0]*self.nf[1]*self.nf[2] + self.nf = [sum(self.fm[0]), sum(self.fm[1]), sum(self.fm[2])] + self.nft = self.nf[0]*self.nf[1]*self.nf[2]
[docs]class Meshtal(object): @@ -2020,8 +2027,8 @@

Source code for pyne.mcnp

              material objects.
         """
 
-        if not HAVE_PYTAPS:
-            raise RuntimeError("PyTAPS is not available, "
+        if not HAVE_PYMOAB:
+            raise RuntimeError("PyMOAB is not available, "
                                "unable to create Meshtal.")
 
         self.tally = {}
@@ -2061,12 +2068,12 @@ 

Source code for pyne.mcnp

                 if self.tags is not None and tally_num in self.tags.keys():
                     self.tally[tally_num] = MeshTally(f, tally_num,
                                                       self.tags[tally_num],
-                                          mesh_has_mats=self._meshes_have_mats)
+                                                      mesh_has_mats=self._meshes_have_mats)
                 else:
                     self.tally[tally_num] = MeshTally(f, tally_num,
-                                          mesh_has_mats=self._meshes_have_mats)
-
- line = f.readline() + mesh_has_mats=self._meshes_have_mats) + + line = f.readline()
[docs]class MeshTally(StatMesh): @@ -2094,7 +2101,7 @@

Source code for pyne.mcnp

     e_bounds : list of floats
         The minimum and maximum bounds for energy bins
     mesh :
-        An iMesh instance tagged with all results and
+        An PyMOAB core instance tagged with all results and
         relative errors
     tag_names : iterable
         Four strs that specify the tag names for the results, relative errors,
@@ -2127,8 +2134,8 @@ 

Source code for pyne.mcnp

              objects.
         """
 
-        if not HAVE_PYTAPS:
-            raise RuntimeError("PyTAPS is not available, "
+        if not HAVE_PYMOAB:
+            raise RuntimeError("PyMOAB is not available, "
                                "unable to create Meshtally Mesh.")
 
         self.tally_number = tally_number
@@ -2190,13 +2197,13 @@ 

Source code for pyne.mcnp

         self._column_idx = dict(zip(column_names, range(0, len(column_names))))
 
     def _create_mesh(self, f, mesh_has_mats):
-        """Instantiate a Mesh object and tag the iMesh instance
+        """Instantiate a Mesh object and tag the PyMOAB core instance
            with results and relative errors.
         """
 
         mats = () if mesh_has_mats is True else None
         super(MeshTally, self).__init__(structured_coords=[self.x_bounds,
-                                        self.y_bounds, self.z_bounds],
+                                                           self.y_bounds, self.z_bounds],
                                         structured=True, mats=mats)
 
         num_vol_elements = (len(self.x_bounds)-1) * (len(self.y_bounds)-1)\
@@ -2219,10 +2226,13 @@ 

Source code for pyne.mcnp

             rel_error[i] = rel_error_row
 
         # Tag results and error vector to mesh
-        res_tag = IMeshTag(num_e_groups, float, mesh=self,
-                           name=self.tag_names[0])
-        rel_err_tag = IMeshTag(num_e_groups, float, mesh=self,
-                               name=self.tag_names[1])
+        self.tag(self.tag_names[0], tagtype='nat_mesh',
+                 size=num_e_groups, dtype=float)
+        res_tag = self.get_tag(self.tag_names[0])
+        self.tag(self.tag_names[1], tagtype='nat_mesh',
+                 size=num_e_groups, dtype=float)
+        rel_err_tag = self.get_tag(self.tag_names[1])
+
         if num_e_groups == 1:
             res_tag[:] = result[0]
             rel_err_tag[:] = rel_error[0]
@@ -2241,11 +2251,16 @@ 

Source code for pyne.mcnp

                 rel_error.append(
                     float(line[self._column_idx["Rel_Error"]]))
 
-            res_tot_tag = IMeshTag(1, float, mesh=self, name=self.tag_names[2])
-            rel_err_tot_tag = IMeshTag(1, float, mesh=self,
-                                       name=self.tag_names[3])
-            res_tot_tag[:] = result
- rel_err_tot_tag[:] = rel_error + self.tag(self.tag_names[2], size=1, + dtype=float, tagtype='nat_mesh') + res_tot_tag = self.get_tag(self.tag_names[2]) + + self.tag(self.tag_names[3], size=1, + dtype=float, tagtype='nat_mesh') + rel_err_tot_tag = self.get_tag(self.tag_names[3]) + + res_tot_tag[:] = result + rel_err_tot_tag[:] = rel_error
[docs]def mesh_to_geom(mesh, frac_type='mass', title_card="Generated from PyNE Mesh"): @@ -2280,8 +2295,8 @@

Source code for pyne.mcnp

     surf_cards = _mesh_to_surf_cards(mesh, divs)
     mat_cards = _mesh_to_mat_cards(mesh, divs, frac_type)
 
-    return "{0}\n{1}\n{2}\n{3}".format(title_card, cell_cards,
- surf_cards, mat_cards) + return "{0}\n{1}\n{2}\n{3}".format(title_card, cell_cards, + surf_cards, mat_cards)
def _mesh_to_cell_cards(mesh, divs): @@ -2403,8 +2418,8 @@

Navigation

+ + + + + @@ -64,6 +67,7 @@

Navigation

Source code for pyne.mesh

 from __future__ import print_function, division
+from pyne.material import Material, MaterialLibrary, MultiMaterial
 import sys
 import copy
 import itertools
@@ -74,15 +78,23 @@ 

Source code for pyne.mesh

 import numpy as np
 import tables as tb
 
+
 warn(__name__ + " is not yet QA compliant.", QAWarning)
 
 try:
-    from itaps import iMesh, iBase, iMeshExtensions
+    from pymoab import core as mb_core, hcoord, scd, types
+    from pymoab.rng import subtract
+    from pymoab.tag import Tag
+    from pymoab.types import _eh_py_type, _TAG_TYPE_STRS
+    HAVE_PYMOAB = True
+
 except ImportError:
-    warn("the PyTAPS optional dependency could not be imported. "
+    HAVE_PYMOAB = False
+    warn("The PyMOAB optional dependency could not be imported. "
          "Some aspects of the mesh module may be incomplete.", QAWarning)
 
-from pyne.material import Material, MaterialLibrary, MultiMaterial
+
+_BOX_DIMS_TAG_NAME = "BOX_DIMS"
 
 if sys.version_info[0] > 2:
     basestring = str
@@ -94,15 +106,15 @@ 

Source code for pyne.mesh

         "/": lambda val_1, val_2: (val_1 / val_2)}
 
 err__ops = {"+": lambda val_1, val_2, val_1_err, val_2_err:
-                 (1/(val_1 + val_2)*np.sqrt((val_1*val_1_err)**2
-                  + (val_2*val_2_err)**2)),
+            (1/(val_1 + val_2)*np.sqrt((val_1*val_1_err)**2
+                                       + (val_2*val_2_err)**2)),
             "-": lambda val_1, val_2, val_1_err, val_2_err:
-                 (1/(val_1 - val_2)*np.sqrt((val_1*val_1_err)**2
-                  + (val_2*val_2_err)**2)),
+            (1/(val_1 - val_2)*np.sqrt((val_1*val_1_err)**2
+                                       + (val_2*val_2_err)**2)),
             "*": lambda val_1, val_2, val_1_err, val_2_err:
-                 (np.sqrt(val_1_err**2 + val_2_err**2)),
+            (np.sqrt(val_1_err**2 + val_2_err**2)),
             "/": lambda val_1, val_2, val_1_err, val_2_err:
-                 (np.sqrt(val_1_err**2 + val_2_err**2))}
+            (np.sqrt(val_1_err**2 + val_2_err**2))}
 
 _INTEGRAL_TYPES = (int, np.integer, np.bool_)
 _SEQUENCE_TYPES = (Sequence, np.ndarray)
@@ -110,7 +122,7 @@ 

Source code for pyne.mesh

 
 
[docs]class Tag(object): """A mesh tag, which acts as a descriptor on the mesh. This dispatches - access to intrinsic material properties, the iMesh.Mesh tags, and material + access to intrinsic material properties, PyMOAB tags, and material metadata attributes. """ @@ -156,9 +168,16 @@

Source code for pyne.mesh

                                  "{0} and {1}".format(self.name, value.name))
         self[:] = value[:]
 
-    def __delete__(self, mesh):
+ def __delete__(self, mesh): + del mesh.tags[self.name] del self[:] + def delete(self, mesh=None): + if mesh == None: + mesh = self.mesh + del self[:] + del mesh.tags[self.name]
+
[docs]class MaterialPropertyTag(Tag): """A mesh tag which looks itself up as a material property (attribute). @@ -181,12 +200,13 @@

Source code for pyne.mesh

             return getattr(mats[key], name)
         elif isinstance(key, slice):
             return np.array([getattr(mats[i], name)
-                            for i in range(*key.indices(size))])
+                             for i in range(*key.indices(size))])
         elif isinstance(key, np.ndarray) and key.dtype == np.bool:
             if len(key) != size:
-                raise KeyError("boolean mask must match the length of the mesh.")
+                raise KeyError(
+                    "boolean mask must match the length of the mesh.")
             return np.array([getattr(mats[i], name) for i, b in enumerate(key)
-                            if b])
+                             if b])
         elif isinstance(key, Iterable):
             return np.array([getattr(mats[i], name) for i in key])
         else:
@@ -233,8 +253,8 @@ 

Source code for pyne.mesh

 
     def __delitem__(self, key):
         msg = ("the material property tag {0!r} may "
-               "not be deleted").format(self.name)
- raise AttributeError(msg) + "not be deleted").format(self.name) + raise AttributeError(msg)
[docs]class MaterialMethodTag(Tag): @@ -277,8 +297,8 @@

Source code for pyne.mesh

 
     def __delitem__(self, key):
         msg = ("the material method tag {0!r} may not be "
-               "deleted").format(self.name)
- raise AttributeError(msg) + "deleted").format(self.name) + raise AttributeError(msg)
[docs]class MetadataTag(Tag): @@ -376,17 +396,19 @@

Source code for pyne.mesh

             for i in key:
                 del mats[i].metadata[name]
         else:
-            raise TypeError("{0} is not an int, slice, mask, "
- "or fancy index.".format(key)) + raise TypeError("{0} is not an int, slice, mask, " + "or fancy index.".format(key))
-
[docs]class IMeshTag(Tag): - """A mesh tag which looks itself up as a tag on the iMesh.Mesh instance. - This makes the following expressions equivalent for a given iMesh.Mesh tag - name:: +
[docs]class NativeMeshTag(Tag): + """A mesh tag which looks itself up as a tag on a PyMOAB core instance. + This makes the following expressions equivalent for a given PyNE/PyNE Mesh + tag name:: - mesh.name[i] == mesh.mesh.getTagHandle(name)[list(mesh.mesh.iterate( - iBase.Type.region, iMesh.Topology.all))[i]] + mesh.tag_name[i] == mesh.mesh.tag_get_data(mesh.mesh.tag_get_handle(name), + mesh.mesh.get_entities_by_type( + mesh.mesh.get_root_set(), + types.MBHEX))[i] It also adds slicing, fancy indexing, boolean masking, and broadcasting features to this process. @@ -399,7 +421,7 @@

Source code for pyne.mesh

         size : int, optional
             The number of elements of type dtype that this tag stores.
         dtype : np.dtype or similar, optional
-            The data type of this tag from int, float, and byte. See PyTAPS
+            The data type of this tag from int, float, and byte. See PyMOAB
             tags for more details.
         default : dtype or None, optional
             The default value to fill this tag with upon creation. If None,
@@ -412,7 +434,8 @@ 

Source code for pyne.mesh

             Documentation string for the tag.
 
         """
-        super(IMeshTag, self).__init__(mesh=mesh, name=name, doc=doc)
+        super(NativeMeshTag, self).__init__(mesh=mesh, name=name, doc=doc)
+
         if mesh is None or name is None:
             self._lazy_args['size'] = size
             self._lazy_args['dtype'] = dtype
@@ -420,40 +443,81 @@ 

Source code for pyne.mesh

             return
         self.size = size
         self.dtype = dtype
+        self.pymbtype = types.pymoab_data_type(self.dtype)
         self.default = default
+        # if the tag already exists, pick up its properties
         try:
-            self.tag = self.mesh.mesh.getTagHandle(self.name)
-        except iBase.TagNotFoundError:
-            self.tag = self.mesh.mesh.createTag(self.name, size, dtype)
+            self.tag = self.mesh.mesh.tag_get_handle(self.name)
+            self.size = self.tag.get_length()
+            self.dtype = self.tag.get_dtype()
+            self.pymbtype = types.pymoab_data_type(self.dtype)
+            self.default = self.tag.get_default_value()
+        except RuntimeError:
+            self.tag = self.mesh.mesh.tag_get_handle(self.name,
+                                                     self.size,
+                                                     self.pymbtype,
+                                                     types.MB_TAG_DENSE,
+                                                     create_if_missing=True,
+                                                     default_value=default)
             if default is not None:
                 self[:] = default
 
     def __delete__(self, mesh):
-        super(IMeshTag, self).__delete__(mesh)
-        self.mesh.mesh.destroyTag(self.name, force=True)
+        super(NativeMeshTag, self).__delete__(mesh)
+        mesh.mesh.tag_delete(self.tag)
+
+    def delete(self, mesh=None):
+        if mesh == None:
+            mesh = self.mesh
+        super(NativeMeshTag, self).delete()
+        mesh.mesh.tag_delete(self.tag)
+
+    def _collect_iterables(self, key, miter):
+        ves = list(miter)
+        list_of_ves = []
+        # support either indexes or entityhandles
+        for k in key:
+            if isinstance(k, _eh_py_type):
+                list_of_ves.append(k)
+            elif isinstance(k, _INTEGRAL_TYPES):
+                list_of_ves.append(ves[k])
+            else:
+                raise TypeError("{0} contains invalid element references "
+                                "(non-ints, non-handles)".format(key))
+        return list_of_ves
 
     def __getitem__(self, key):
         m = self.mesh.mesh
         size = len(self.mesh)
         mtag = self.tag
         miter = self.mesh.iter_ve()
-        if isinstance(key, _INTEGRAL_TYPES):
+        # special case, get data on mesh's root set
+        if isinstance(key, Mesh) and key == self.mesh:
+            return self.mesh.mesh.tag_get_data(self.tag,
+                                               self.mesh.mesh.get_root_set(),
+                                               flat=True)
+        elif isinstance(key, _eh_py_type):
+            return self.mesh.mesh.tag_get_data(self.tag, key, flat=True)
+        elif isinstance(key, _INTEGRAL_TYPES):
             if key >= size:
                 raise IndexError("key index {0} greater than the size of the "
                                  "mesh {1}".format(key, size))
             for i_ve in zip(range(key+1), miter):
                 pass
-            return mtag[i_ve[1]]
+            return self.mesh.mesh.tag_get_data(self.tag, i_ve[1], flat=True)
         elif isinstance(key, slice):
-            return mtag[list(miter)[key]]
+            flat = True if self.size == 1 else False
+            ents = list(miter)[key]
+            data = self.mesh.mesh.tag_get_data(self.tag, ents, flat=flat)
+            return data
         elif isinstance(key, np.ndarray) and key.dtype == np.bool:
             if len(key) != size:
                 raise KeyError("boolean mask must match the length "
                                "of the mesh.")
-            return mtag[[ve for b, ve in zip(key, miter) if b]]
+            return self.mesh.mesh.tag_get_data(self.tag, [ve for b, ve in zip(key, miter) if b], flat=True)
         elif isinstance(key, Iterable):
-            ves = list(miter)
-            return mtag[[ves[i] for i in key]]
+            ves_to_get = self._collect_iterables(key, miter)
+            return self.mesh.mesh.tag_get_data(self.tag, ves_to_get, flat=True)
         else:
             raise TypeError("{0} is not an int, slice, mask, "
                             "or fancy index.".format(key))
@@ -461,44 +525,51 @@ 

Source code for pyne.mesh

     def __setitem__(self, key, value):
         # get value into canonical form
         tsize = self.size
-        value = np.asarray(value, self.tag.type)
+        value = np.asarray(value, self.tag.get_dtype())
         value = np.atleast_1d(value) if tsize == 1 else np.atleast_2d(value)
         # set up mesh to be iterated over
         m = self.mesh.mesh
         msize = len(self.mesh)
         mtag = self.tag
         miter = self.mesh.iter_ve()
-        if isinstance(key, _INTEGRAL_TYPES):
+        # special case: tag the mesh's root set
+        if isinstance(key, Mesh) and key == self.mesh:
+            self.mesh.mesh.tag_set_data(
+                self.tag, self.mesh.mesh.get_root_set(), value)
+        elif isinstance(key, _eh_py_type):
+            self.mesh.mesh.tag_set_data(self.tag, key, value)
+        elif isinstance(key, _INTEGRAL_TYPES):
             if key >= msize:
                 raise IndexError("key index {0} greater than the size of the "
                                  "mesh {1}".format(key, msize))
             for i_ve in zip(range(key+1), miter):
                 pass
-            mtag[i_ve[1]] = value if tsize == 1 else value[0]
+            self.mesh.mesh.tag_set_data(
+                self.tag, i_ve[1], value if tsize == 1 else value[0])
         elif isinstance(key, slice):
             key = list(miter)[key]
-            v = np.empty((len(key), tsize), self.tag.type)
+            v = np.empty((len(key), tsize), self.tag.get_dtype())
             if tsize == 1 and len(value.shape) == 1:
                 v.shape = (len(key), )
             v[...] = value
-            mtag[key] = v
+            self.mesh.mesh.tag_set_data(mtag, key, v)
         elif isinstance(key, np.ndarray) and key.dtype == np.bool:
             if len(key) != msize:
                 raise KeyError("boolean mask must match the length "
                                "of the mesh.")
             key = [ve for b, ve in zip(key, miter) if b]
-            v = np.empty((len(key), tsize), self.tag.type)
+            v = np.empty((len(key), tsize), self.tag.get_dtype())
             if tsize == 1 and len(value.shape) == 1:
                 v.shape = (len(key), )
             v[...] = value
-            mtag[key] = v
+            self.mesh.mesh.tag_set_data(mtag, key, v)
         elif isinstance(key, Iterable):
-            ves = list(miter)
             if tsize != 1 and len(value) != len(key):
-                v = np.empty((len(key), tsize), self.tag.type)
+                v = np.empty((len(key), tsize), self.tag.get_dtype())
                 v[...] = value
                 value = v
-            mtag[[ves[i] for i in key]] = value
+            ves_to_tag = self._collect_iterables(key, miter)
+            self.mesh.mesh.tag_set_data(mtag, ves_to_tag, value)
         else:
             raise TypeError("{0} is not an int, slice, mask, "
                             "or fancy index.".format(key))
@@ -508,28 +579,35 @@ 

Source code for pyne.mesh

         size = len(self.mesh)
         mtag = self.tag
         miter = self.mesh.iter_ve()
-        if isinstance(key, _INTEGRAL_TYPES):
+        # special case, look up mesh's root set
+        if isinstance(key, Mesh) and key == self.mesh:
+            self.mesh.mesh.tag_delete_data(mtag,
+                                           self.mesh.mesh.get_root_set())
+        elif isinstance(key, _eh_py_type):
+            self.mesh.mesh.tag_delete_data(mtag, key)
+        elif isinstance(key, _INTEGRAL_TYPES):
             if key >= size:
                 raise IndexError("key index {0} greater than the size of the "
                                  "mesh {1}".format(key, size))
             for i_ve in zip(range(key+1), miter):
                 pass
-            del mtag[i_ve[1]]
+            self.mesh.mesh.tag_delete_data(mtag, i_ve[1])
         elif isinstance(key, slice):
-            del mtag[list(miter)[key]]
+            self.mesh.mesh.tag_delete_data(mtag, list(miter)[key])
         elif isinstance(key, np.ndarray) and key.dtype == np.bool:
             if len(key) != size:
                 raise KeyError("boolean mask must match the "
                                "length of the mesh.")
-            del mtag[[ve for b, ve in zip(key, miter) if b]]
+            self.mesh.mesh.tag_delete_data(
+                mtag, [ve for b, ve in zip(key, miter) if b])
         elif isinstance(key, Iterable):
-            ves = list(miter)
-            del mtag[[ves[i] for i in key]]
+            ves_to_del = self._collect_iterables(key, miter)
+            self.mesh.mesh.tag_delete_data(mtag, ves_to_del)
         else:
             raise TypeError("{0} is not an int, slice, mask, "
                             "or fancy index.".format(key))
 
-
[docs] def expand(self): +
[docs] def expand(self): """This function creates a group of scalar tags from a vector tag. For a vector tag named <tag_name> of length N, scalar tags in the form: @@ -541,9 +619,11 @@

Source code for pyne.mesh

             raise TypeError("Cannot expand a tag that is already a scalar.")
         for j in range(self.size):
             data = [x[j] for x in self[:]]
-            tag = self.mesh.mesh.createTag("{0}_{1:03d}".format(self.name, j),
-                                           1, self.dtype)
- tag[list(self.mesh.iter_ve())] = data + tag = self.mesh.mesh.tag_get_handle("{0}_{1:03d}".format(self.name, j), + 1, self.pymbtype, + storage_type=types.MB_TAG_DENSE, + create_if_missing=True) + self.mesh.mesh.tag_set_data(tag, list(self.mesh.iter_ve()), data)
[docs]class ComputedTag(Tag): @@ -620,23 +700,23 @@

Source code for pyne.mesh

         raise AttributeError(msg)
 
     def __delitem__(self, key):
-        msg = "the computed tag {0!r} may not be deleted".format(self.name)
- raise AttributeError(msg) + msg = "the computed tag {0!r} may not be deleted".format(self.name) + raise AttributeError(msg)
[docs]class MeshError(Exception): """Errors related to instantiating mesh objects and utilizing their methods. - """
- pass + """ + pass
[docs]class Mesh(object): - """This class houses an iMesh instance and contains methods for various mesh - operations. Special methods exploit the properties of structured mesh. + """This class houses a PyMOAB core instance and contains methods for various + mesh operations. Special methods exploit the properties of structured mesh. Attributes ---------- - mesh : iMesh instance + mesh : PyMOAB core instance structured : bool True for structured mesh. structured_coords : list of lists @@ -652,17 +732,16 @@

Source code for pyne.mesh

                  structured_ordering='xyz', mats=()):
         """Parameters
         ----------
-        mesh : iMesh instance or str, optional
-            Either an iMesh instance or a file name of file containing an
-            iMesh instance.
+        mesh : PyMOAB core instance or str, optional
+            Either a PyMOAB core instance or a file name of a PyMOAB mesh file.
         structured : bool, optional
             True for structured mesh.
         structured_coords : list of lists, optional
             A list containing lists of x_points, y_points and z_points
             that make up a structured mesh.
-        structured_set : iMesh entity set handle, optional
-            A preexisting structured entity set on an iMesh instance with a
-            "BOX_DIMS" tag.
+        structured_set : PyMOAB entity set handle, optional
+            A preexisting structured entity set on an PyMOAB core instance with
+            a "BOX_DIMS" tag.
         structured_ordering : str, optional
             A three character string denoting the iteration order of the mesh
             (e.g. 'xyz', meaning z changest fastest, then y, then x.)
@@ -671,22 +750,22 @@ 

Source code for pyne.mesh

             If mats is None, then no empty materials are created for the mesh.
 
             Unstructured mesh instantiation:
-                 - From iMesh instance by specifying: <mesh>
+                 - From PyMOAB core instance by specifying: <mesh>
                  - From mesh file by specifying: <mesh_file>
 
             Structured mesh instantiation:
-                - From iMesh instance with exactly 1 entity set (with BOX_DIMS
-                  tag) by specifying <mesh> and structured = True.
+                - From PyMOAB core instance with exactly 1 entity set
+                  (with BOX_DIMS tag) by specifying <mesh> and structured = True.
                 - From mesh file with exactly 1 entity set (with BOX_DIMS tag)
                   by specifying <mesh_file> and structured = True.
-                - From an imesh instance with multiple entity sets by
+                - From a PyMOAB instance with multiple entity sets by
                   specifying <mesh>, <structured_set>, structured=True.
                 - From coordinates by specifying <structured_coords>,
-                  structured=True, and optional preexisting iMesh instance
-                  <mesh>
+                  structured=True, and optional pre-existing PyMOAB core
+                  instance <mesh>
 
-            The "BOX_DIMS" tag on iMesh instances containing structured mesh is
-            a vector of floats it the following form:
+            The "BOX_DIMS" tag on PyMOAB core instances containing structured
+            mesh is a vector of floats in the following form:
             [i_min, j_min, k_min, i_max, j_max, k_max]
             where each value is a volume element index number. Typically volume
             elements should be indexed from 0. The "BOX_DIMS" information is
@@ -694,31 +773,38 @@ 

Source code for pyne.mesh

 
         """
         if mesh is None:
-            self.mesh = iMesh.Mesh()
+            self.mesh = mb_core.Core()
         elif isinstance(mesh, basestring):
-            self.mesh = iMesh.Mesh()
-            self.mesh.load(mesh)
+            self.mesh = mb_core.Core()
+            self.mesh.load_file(mesh)
         else:
             self.mesh = mesh
 
         self.structured = structured
 
         if self.structured:
+            self.scd = scd.ScdInterface(self.mesh)
             self.structured_coords = structured_coords
             self.structured_ordering = structured_ordering
+            # if a MOAB mesh instance exists and no structured coords
+            # or structured set is provided, search for a single
+            # structured set
             if (mesh is not None) and not structured_coords \
                and not structured_set:
+                # check for the structured box tag on the instance
                 try:
-                    self.mesh.getTagHandle("BOX_DIMS")
-                except iBase.TagNotFoundError as e:
-                    print("BOX_DIMS not found on iMesh instance")
+                    box_tag = self.mesh.tag_get_handle(_BOX_DIMS_TAG_NAME)
+                except types.MB_TAG_NOT_FOUND as e:
+                    print("BOX_DIMS not found on MOAB mesh instance")
                     raise e
 
+                # find all entity sets with the structured box tag
                 count = 0
-                for ent_set in self.mesh.rootSet.getEntSets():
+                root_set = self.mesh.get_root_set()
+                for ent_set in self.mesh.get_entities_by_type(root_set, types.MBENTITYSET):
                     try:
-                        self.mesh.getTagHandle("BOX_DIMS")[ent_set]
-                    except iBase.TagNotFoundError:
+                        self.mesh.tag_get_data(box_tag, ent_set)
+                    except RuntimeError:
                         pass
                     else:
                         self.structured_set = ent_set
@@ -731,18 +817,40 @@ 

Source code for pyne.mesh

                     raise MeshError("Found {0} structured meshes."
                                     " Instantiate individually using"
                                     " from_ent_set()".format(count))
+
             # from coordinates
             elif (mesh is None) and structured_coords and not structured_set:
+                # check for single vertex coordinates here? it seems we only support volumetric mesh -PCS
                 extents = [0, 0, 0] + [len(x) - 1 for x in structured_coords]
-                self.structured_set = self.mesh.createStructuredMesh(
-                     extents, i=structured_coords[0], j=structured_coords[1],
-                     k=structured_coords[2], create_set=True)
-
-            # From mesh and structured_set:
+                low = hcoord.HomCoord([0, 0, 0])
+                high = hcoord.HomCoord([len(x) - 1 for x in structured_coords])
+                # get coordinates as array
+                xs = np.asarray(structured_coords[0])
+                ys = np.asarray(structured_coords[1])
+                zs = np.asarray(structured_coords[2])
+                # generate array
+                coords = np.empty(
+                    (xs.size * ys.size * zs.size * 3,), dtype=np.float64)
+                # set mesh values
+                coords[0::3] = np.tile(xs, ys.size * zs.size)
+                coords[1::3] = np.tile(np.repeat(ys, xs.size,), zs.size)
+                coords[2::3] = np.repeat(zs, xs.size * ys.size)
+                # construct the structured mesh
+                scd_box = self.scd.construct_box(low, high, coords)
+                self.structured_set = scd_box.box_set()
+
+            # from mesh and structured_set:
             elif not structured_coords and structured_set:
+                # check for the structured box tag on the instance
+                try:
+                    box_tag = self.mesh.tag_get_handle(_BOX_DIMS_TAG_NAME)
+                except types.MB_TAG_NOT_FOUND as e:
+                    print("BOX_DIMS not found on MOAB mesh instance")
+                    raise e
+                # check that the structured_set found is tagged as a structured set
                 try:
-                    self.mesh.getTagHandle("BOX_DIMS")[structured_set]
-                except iBase.TagNotFoundError as e:
+                    self.mesh.tag_get_data(box_tag, structured_set)
+                except:
                     print("Supplied entity set does not contain BOX_DIMS tag")
                     raise e
 
@@ -750,14 +858,16 @@ 

Source code for pyne.mesh

             else:
                 raise MeshError("For structured mesh instantiation, need to"
                                 "supply exactly one of the following:\n"
-                                "A. iMesh instance\n"
+                                "A. PyMOAB instance\n"
                                 "B. Mesh file\n"
                                 "C. Mesh coordinates\n"
-                                "D. Structured entity set AND iMesh instance")
+                                "D. Structured entity set AND PyMOAB instance")
+
+            self.dims = list(self.mesh.tag_get_data(self.mesh.tag_get_handle(_BOX_DIMS_TAG_NAME),
+                                                    self.structured_set, flat=True))
 
-            self.dims = self.mesh.getTagHandle("BOX_DIMS")[self.structured_set]
             self.vertex_dims = list(self.dims[0:3]) \
-                               + [x + 1 for x in self.dims[3:6]]
+                + [x + 1 for x in self.dims[3:6]]
 
             if self.structured_coords is None:
                 self.structured_coords = [self.structured_get_divisions("x"),
@@ -790,17 +900,25 @@ 

Source code for pyne.mesh

 
         # tag with volume id and ensure mats exist.
         ves = list(self.iter_ve())
-        tags = self.mesh.getAllTags(ves[0])
-        tags = set(tag.name for tag in tags)
+        tags = self.mesh.tag_get_tags_on_entity(ves[0])
+        tags = set(tag.get_name() for tag in tags)
         if 'idx' in tags:
-            tag_idx = self.mesh.getTagHandle('idx')
+            tag_idx = self.mesh.tag_get_handle('idx')
         else:
-            tag_idx = self.mesh.createTag('idx', 1, int)
-        for i, ve in enumerate(ves):
-            tag_idx[ve] = i
-            if mats is not None and i not in mats:
-                mats[i] = Material()
-        self._len = i + 1
+            tag_idx = self.mesh.tag_get_handle('idx',
+                                               1,
+                                               types.MB_TYPE_INTEGER,
+                                               types.MB_TAG_DENSE,
+                                               create_if_missing=True)
+        # tag elements with index
+        idxs = np.arange(0, len(ves))
+        self.mesh.tag_set_data(tag_idx, ves, idxs)
+        # check for and populate materials
+        if mats is not None:
+            for i in range(len(ves)):
+                if i not in mats:
+                    mats[i] = Material()
+        self._len = len(ves)
 
         # Default tags
         self.tags = {}
@@ -812,22 +930,24 @@ 

Source code for pyne.mesh

                 metatagnames.update(mat.metadata.keys())
             for name in metatagnames:
                 setattr(self, name, MetadataTag(mesh=self, name=name))
-        # iMesh.Mesh() tags
+        # PyMOAB tags
         tagnames = set()
         for ve in ves:
-            tagnames.update(t.name for t in self.mesh.getAllTags(ve))
+            tagnames.update(t.get_name()
+                            for t in self.mesh.tag_get_tags_on_entity(ve))
         for name in tagnames:
-            setattr(self, name, IMeshTag(mesh=self, name=name))
+            setattr(self, name, NativeMeshTag(mesh=self, name=name))
+
         if mats is not None:
             # Material property tags
             self.atoms_per_molecule = MaterialPropertyTag(mesh=self,
-                                      name='atoms_per_molecule',
-                                      doc='Number of atoms per molecule')
+                                                          name='atoms_per_molecule',
+                                                          doc='Number of atoms per molecule')
             self.metadata = MaterialPropertyTag(mesh=self, name='metadata',
-                            doc='metadata attributes, stored on the material')
+                                                doc='metadata attributes, stored on the material')
             self.comp = MaterialPropertyTag(mesh=self, name='comp',
-                        doc='normalized composition mapping from nuclides to '
-                            'mass fractions')
+                                            doc='normalized composition mapping from nuclides to '
+                                            'mass fractions')
             self.mass = MaterialPropertyTag(mesh=self, name='mass',
                                             doc='the mass of the material')
             self.density = MaterialPropertyTag(mesh=self, name='density',
@@ -840,8 +960,10 @@ 

Source code for pyne.mesh

             for name in methtagnames:
                 doc = "see Material.{0}() for more information".format(name)
                 setattr(self, name, MaterialMethodTag(mesh=self, name=name,
-                        doc=doc))
+                                                      doc=doc))
 
+    def get_all_tags(self):
+        return [getattr(self, t) for t in dir(self) if isinstance(getattr(self, t), Tag)]
 
     def __len__(self):
         return self._len
@@ -863,8 +985,8 @@ 

Source code for pyne.mesh

         """
         if self.structured:
             return self.structured_iterate_hex(self.structured_ordering)
-        else:
- return self.mesh.iterate(iBase.Type.region, iMesh.Topology.all) + else: + return iter(list(self.mesh.get_entities_by_dimension(self.mesh.get_root_set(), 3, True)))
def __contains__(self, i): return i < len(self) @@ -891,14 +1013,14 @@

Source code for pyne.mesh

             The value to initialize the tag with, skipped if None.
         tagtype : Tag or str, optional
             The type of tag this should be any of the following classes or
-            strings are accepted: IMeshTag, MetadataTag, ComputedTag, 'imesh',
-            'metadata', or 'computed'.
+            strings are accepted: NativeMeshTag, MetadataTag, ComputedTag,
+            'nat_mesh', 'metadata', or 'computed'.
         doc : str, optional
             The tag documentation string.
         size : int, optional
-            The size of the tag. This only applies to IMeshTags.
+            The size of the tag. This only applies to NativeMeshTags.
         dtype : numpy dtype, optional
-            The data type of the tag. This only applies to IMeshTags. See PyTAPS
+            The data type of the tag. This only applies to NativeMeshTags. See PyMOAB
             for more details.
 
         """
@@ -909,23 +1031,23 @@ 

Source code for pyne.mesh

                 tagtype = ComputedTag
             elif size is None and dtype is not None:
                 size = 1
-                tagtype = IMeshTag
+                tagtype = NativeMeshTag
             elif size is not None and dtype is None:
                 dtype = 'f8'
-                tagtype = IMeshTag
+                tagtype = NativeMeshTag
             elif value is None:
                 size = 1
                 value = 0.0
                 dtype = 'f8'
-                tagtype = IMeshTag
+                tagtype = NativeMeshTag
             elif isinstance(value, float):
                 size = 1
                 dtype = 'f8'
-                tagtype = IMeshTag
+                tagtype = NativeMeshTag
             elif isinstance(value, int):
                 size = 1
                 dtype = 'i'
-                tagtype = IMeshTag
+                tagtype = NativeMeshTag
             elif isinstance(value, str):
                 tagtype = MetadataTag
             elif isinstance(value, _SEQUENCE_TYPES):
@@ -934,8 +1056,9 @@ 

Source code for pyne.mesh

                                  'or dtype'.format(name))
             else:
                 tagtype = MetadataTag
-        if tagtype is IMeshTag or tagtype.lower() == 'imesh':
-            t = IMeshTag(size=size, dtype=dtype, mesh=self, name=name, doc=doc)
+        if tagtype is NativeMeshTag or tagtype.lower() == 'nat_mesh':
+            t = NativeMeshTag(size=size, dtype=dtype,
+                              mesh=self, name=name, doc=doc)
         elif tagtype is MetadataTag or tagtype.lower() == 'metadata':
             t = MetadataTag(mesh=self, name=name, doc=doc)
         elif tagtype is ComputedTag or tagtype.lower() == 'computed':
@@ -943,8 +1066,27 @@ 

Source code for pyne.mesh

         else:
             raise ValueError('tagtype {0} not valid'.format(tagtype))
         if value is not None and tagtype is not ComputedTag:
-            t[:] = value
- setattr(self, name, t) + t[:] = value + setattr(self, name, t)
+ + def get_tag(self, tag_name): + return getattr(self, tag_name) + + def delete_tag(self, tag): + if isinstance(tag, Tag): + tag_name = tag.name + tag_handle = tag + elif isinstance(tag, str): + tag_name = tag + tag_handle = self.tags[tag_name] + else: + raise ValueError( + '{0} is neither a Tag object nor a string'.format(tag)) + + tag_handle.delete() + + if hasattr(self, tag_name): + delattr(self, tag_name) def __iadd__(self, other): """Adds the common tags of other to the mesh object. @@ -981,40 +1123,45 @@

Source code for pyne.mesh

             mesh_1 = self
         else:
             mesh_1 = copy.copy(self)
-
         for tag in tags:
             for ve_1, ve_2 in \
-                zip(zip(iter(mesh_1.mesh.iterate(iBase.Type.region,
-                    iMesh.Topology.all))),
-                    zip(iter(other.mesh.iterate(iBase.Type.region,
-                        iMesh.Topology.all)))):
-                self.mesh.getTagHandle(tag)[ve_1] = \
-                    _ops[op](mesh_1.mesh.getTagHandle(tag)[ve_1],
-                             other.mesh.getTagHandle(tag)[ve_2])
+                zip(zip(iter(meshset_iterate(mesh_1.mesh, mesh_1.structured_set, types.MBMAXTYPE, dim=3))),
+                    zip(iter(meshset_iterate(other.mesh,  other.structured_set, types.MBMAXTYPE, dim=3)))):
+                mesh_1_tag = mesh_1.mesh.tag_get_handle(tag)
+                other_tag = other.mesh.tag_get_handle(tag)
+                val = _ops[op](mesh_1.mesh.tag_get_data(mesh_1_tag, ve_1, flat=True)[0],
+                               other.mesh.tag_get_data(other_tag,   ve_2, flat=True)[0])
+                mesh_1.mesh.tag_set_data(mesh_1_tag, ve_1,
+                                         _ops[op](mesh_1.mesh.tag_get_data(mesh_1_tag, ve_1, flat=True)[0],
+                                                  other.mesh.tag_get_data(other_tag,   ve_2, flat=True)[0]))
 
         return mesh_1
 
 
[docs] def common_ve_tags(self, other): """Returns the volume element tags in common between self and other. """ - self_tags = self.mesh.getAllTags(list(self.mesh.iterate( - iBase.Type.region, - iMesh.Topology.all))[0]) - other_tags = other.mesh.getAllTags(list(other.mesh.iterate( - iBase.Type.region, - iMesh.Topology.all))[0]) - self_tags = set(x.name for x in self_tags) - other_tags = set(x.name for x in other_tags) + self_it = MeshSetIterator(self.mesh, + self.structured_set, + types.MBMAXTYPE, + dim=3) + self_tags = self.mesh.tag_get_tags_on_entity(self_it.next()) + other_it = MeshSetIterator(other.mesh, + other.structured_set, + types.MBMAXTYPE, + dim=3) + other_tags = other.mesh.tag_get_tags_on_entity(other_it.next()) + self_tags = set(x.get_name() for x in self_tags) + other_tags = set(x.get_name() for x in other_tags) intersect = self_tags & other_tags - intersect.discard('idx')
- return intersect + intersect.discard('idx') + return intersect
def __copy__(self): - # first copy full imesh instance - imesh_copy = iMesh.Mesh() + # first copy full pymoab instance + pymb_copy = mb_core.Core() - # now create Mesh objected from copied iMesh instance - mesh_copy = Mesh(mesh=imesh_copy, + # now create Mesh objected from copied PyMOAB instance + mesh_copy = Mesh(mesh=pymb_copy, structured=copy.copy(self.structured)) return mesh_copy @@ -1026,7 +1173,7 @@

Source code for pyne.mesh

 
         Parameters
         ----------
-        ve : iMesh.Mesh.EntitySet
+        ve : PyMOAB EntitySet handle
             A volume element
 
         Returns
@@ -1034,16 +1181,18 @@ 

Source code for pyne.mesh

         .. : float
             Element's volume. Returns None if volume is not a hex or tet.
         """
-        coord = self.mesh.getVtxCoords(
-                self.mesh.getEntAdj(ve, iBase.Type.vertex))
-        if len(coord) == 4:
+        coord = self.mesh.get_coords(
+            self.mesh.get_connectivity(ve)).reshape(-1, 3)
+        num_coords = coord.shape[0]
+
+        if num_coords == 4:
             return abs(np.linalg.det(coord[:-1] - coord[1:])) / 6.0
-        elif len(coord) == 8:
+        elif num_coords == 8:
             b = coord[np.array([[0, 1, 3, 4], [7, 3, 6, 4], [4, 5, 1, 6],
                                 [1, 6, 3, 4], [2, 6, 3, 1]])]
             return np.sum(np.abs(np.linalg.det(b[:, :-1] - b[:, 1:]))) / 6.0
-        else:
- return None + else: + return None
[docs] def ve_center(self, ve): """Finds the point at the center of any tetrahedral or hexahedral mesh @@ -1051,7 +1200,7 @@

Source code for pyne.mesh

 
         Parameters
         ----------
-        ve : iMesh entity handle
+        ve : PyMOAB EntitySet handle
            Any mesh volume element.
 
         Returns
@@ -1059,39 +1208,40 @@ 

Source code for pyne.mesh

         center : tuple
            The (x, y, z) coordinates of the center of the mesh volume element.
         """
-        coords = self.mesh.getVtxCoords(
-                  self.mesh.getEntAdj(ve, iBase.Type.vertex))
-        center = tuple([np.mean(coords[:, x]) for x in range(3)])
- return center + ve_handle = _eh_py_type(ve) + coords = self.mesh.get_coords( + self.mesh.get_connectivity(ve_handle)).reshape(-1, 3) + center = tuple([np.mean(coords[:, x]) for x in range(3)]) + return center
# Structured methods:
[docs] def structured_get_vertex(self, i, j, k): """Return the handle for (i,j,k)'th vertex in the mesh""" self._structured_check() n = _structured_find_idx(self.vertex_dims, (i, j, k)) - return _structured_step_iter( - self.structured_set.iterate(iBase.Type.vertex,
- iMesh.Topology.point), n) + return _structured_step_iter(meshset_iterate(self.mesh, + self.structured_set, + entity_type=types.MBVERTEX), n)
[docs] def structured_get_hex(self, i, j, k): """Return the handle for the (i,j,k)'th hexahedron in the mesh""" self._structured_check() n = _structured_find_idx(self.dims, (i, j, k)) return _structured_step_iter( - self.structured_set.iterate(iBase.Type.region,
- iMesh.Topology.hexahedron), n) + meshset_iterate(self.mesh, self.structured_set, types.MBHEX, 3), n)
[docs] def structured_hex_volume(self, i, j, k): """Return the volume of the (i,j,k)'th hexahedron in the mesh""" self._structured_check() - v = list(self.structured_iterate_vertex(x=[i, i + 1], - y=[j, j + 1], - z=[k, k + 1])) - coord = self.mesh.getVtxCoords(v) - dx = coord[1][0] - coord[0][0] - dy = coord[2][1] - coord[0][1] - dz = coord[4][2] - coord[0][2]
- return dx * dy * dz + handle = self.structured_get_hex(i, j, k) + h = self.mesh.get_connectivity(handle) + coord = self.mesh.get_coords(list(h)) + coord = coord.reshape(8, 3) + # assumes a "well-behaved" hex element + dx = max(coord[:, 0]) - min(coord[:, 0]) + dy = max(coord[:, 1]) - min(coord[:, 1]) + dz = max(coord[:, 2]) - min(coord[:, 2]) + return dx * dy * dz
[docs] def structured_iterate_hex(self, order="zyx", **kw): """Get an iterator over the hexahedra of the mesh @@ -1118,7 +1268,7 @@

Source code for pyne.mesh

 
         Examples::
 
-          structured_iterate_hex(): equivalent to iMesh iterator over hexes
+          structured_iterate_hex(): equivalent to mehset_iterator over hexes
                                     in mesh
           structured_iterate_hex("xyz"): iterate over entire mesh, with
                                          k-coordinates changing fastest,
@@ -1136,16 +1286,20 @@ 

Source code for pyne.mesh

         self._structured_check()
 
         # special case: zyx order is the standard pytaps iteration order,
-        # so we can save time by simply returning a pytaps iterator
+        # so we can save time by simply returning an iterator
         # if no kwargs were specified
         if order == "zyx" and not kw:
-            return self.structured_set.iterate(iBase.Type.region,
-                                               iMesh.Topology.hexahedron)
+            return meshset_iterate(self.mesh,
+                                   self.structured_set,
+                                   entity_type=types.MBHEX,
+                                   dim=3)
 
         indices, ordmap = _structured_iter_setup(self.dims, order, **kw)
         return _structured_iter(indices, ordmap, self.dims,
-                self.structured_set.iterate(iBase.Type.region,
- iMesh.Topology.hexahedron)) + meshset_iterate(self.mesh, + self.structured_set, + entity_type=types.MBHEX, + dim=3))
[docs] def structured_iterate_vertex(self, order="zyx", **kw): """Get an iterator over the vertices of the mesh @@ -1154,15 +1308,17 @@

Source code for pyne.mesh

         and the available keyword arguments.
         """
         self._structured_check()
-        # special case: zyx order without kw is equivalent to pytaps iterator
+        # special case: zyx order without kw is equivalent to an iterator
         if order == "zyx" and not kw:
-            return self.structured_set.iterate(iBase.Type.vertex,
-                                               iMesh.Topology.point)
+            return meshset_iterate(self.mesh,
+                                   self.structured_set,
+                                   entity_type=types.MBVERTEX)
 
         indices, ordmap = _structured_iter_setup(self.vertex_dims, order, **kw)
         return _structured_iter(indices, ordmap, self.vertex_dims,
-                self.structured_set.iterate(iBase.Type.vertex,
- iMesh.Topology.point)) + meshset_iterate(self.mesh, + self.structured_set, + entity_type=types.MBVERTEX))
[docs] def structured_iterate_hex_volumes(self, order="zyx", **kw): """Get an iterator over the volumes of the mesh hexahedra @@ -1180,8 +1336,8 @@

Source code for pyne.mesh

             # ordering, but we want ijk/xyz ordering, so create the ordmap
             # differently.
             ordmap = [order.find(L) for L in "xyz"]
-            ijk = [A[ordmap[x]] for x in range(3)]
- yield self.structured_hex_volume(*ijk) + ijk = [A[ordmap[x]] for x in range(3)] + yield self.structured_hex_volume(*ijk)
[docs] def iter_structured_idx(self, order=None): """Return an iterater object of volume element indexes (idx) for any @@ -1200,9 +1356,9 @@

Source code for pyne.mesh

             order = self.structured_ordering
 
         ves = self.structured_iterate_hex(order)
-        tag = self.mesh.getTagHandle('idx')
-        for ve in ves:
- yield tag[ve] + tag = self.mesh.tag_get_handle('idx') + for ve in ves: + yield self.mesh.tag_get_data(tag, ve, flat=True)[0]
[docs] def structured_get_divisions(self, dim): """Get the mesh divisions on a given dimension @@ -1211,23 +1367,24 @@

Source code for pyne.mesh

         along that dimension.
         """
         self._structured_check()
+
         if len(dim) == 1 and dim in "xyz":
             idx = "xyz".find(dim)
-            return [self.mesh.getVtxCoords(i)[idx]
-                    for i in self.structured_iterate_vertex(dim)]
-        else:
- raise MeshError("Invalid dimension: {0}".format(str(dim))) + return [self.mesh.get_coords(v)[idx] for v in self.structured_iterate_vertex(dim)] + + else: + raise MeshError("Invalid dimension: {0}".format(str(dim)))
def _structured_check(self): if not self.structured: - raise MeshError("Structured mesh methods cannot be called from "\ + raise MeshError("Structured mesh methods cannot be called from " "unstructured mesh instances.") -
[docs] def write_hdf5(self, filename): +
[docs] def write_hdf5(self, filename, write_mats=True): """Writes the mesh to an hdf5 file.""" - self.mesh.save(filename) - if self.mats is not None:
- self.mats.write_hdf5(filename) + self.mesh.write_file(filename) + if write_mats and self.mats is not None: + self.mats.write_hdf5(filename)
[docs] def cell_fracs_to_mats(self, cell_fracs, cell_mats): """This function uses the output from dagmc.discretize_geom() and @@ -1261,8 +1418,8 @@

Source code for pyne.mesh

             for row in cell_fracs[cell_fracs['idx'] == i]:
                 mat_col[cell_mats[row['cell']]] = row['vol_frac']
 
-            mixed = MultiMaterial(mat_col)
- self.mats[i] = mixed.mix_by_volume() + mixed = MultiMaterial(mat_col) + self.mats[i] = mixed.mix_by_volume()
[docs] def tag_cell_fracs(self, cell_fracs): """This function uses the output from dagmc.discretize_geom() and @@ -1313,39 +1470,106 @@

Source code for pyne.mesh

             # cell_largest_frac_tag
             cell_largest_frac[i] = max(voxel_cell_fracs[i, :])
             largest_index = \
-                    list(voxel_cell_fracs[i, :]).index(cell_largest_frac[i])
+                list(voxel_cell_fracs[i, :]).index(cell_largest_frac[i])
             cell_largest_frac_number[i] = \
-                    int(voxel_cell_number[i, largest_index])
+                int(voxel_cell_number[i, largest_index])
 
         # create the tags
         self.tag(name='cell_number', value=voxel_cell_number,
                  doc='cell numbers of the voxel, -1 used to fill vacancy',
-                 tagtype=IMeshTag, size=max_num_cells, dtype=int)
+                 tagtype=NativeMeshTag, size=max_num_cells, dtype=int)
         self.tag(name='cell_fracs', value=voxel_cell_fracs,
-                 tagtype=IMeshTag, doc='volume fractions of each cell in the '
-                                       'voxel, 0.0 used to fill vacancy',
+                 tagtype=NativeMeshTag, doc='volume fractions of each cell in the '
+                 'voxel, 0.0 used to fill vacancy',
                  size=max_num_cells, dtype=float)
         self.tag(name='cell_largest_frac_number',
-                 value=cell_largest_frac_number, tagtype=IMeshTag,
+                 value=cell_largest_frac_number, tagtype=NativeMeshTag,
                  doc='cell number of the cell with largest volume fraction in '
                      'the voxel', size=1, dtype=int)
         self.tag(name='cell_largest_frac', value=cell_largest_frac,
-                 tagtype=IMeshTag, doc='cell fraction of the cell with largest'
-                                       'cell volume fraction',
- size=1, dtype=float) + tagtype=NativeMeshTag, doc='cell fraction of the cell with ' + 'largest cell volume fraction', + size=1, dtype=float)
+ + +
[docs]class StatMesh(Mesh): + """This class extends the basic Mesh class by modifying the standard + mathematical operations that are performed on multiple meshes. + + A StatMesh assumes that each value being operated upon also has a + statistical error associaed with it, and forces operations on the + statistical error as well. For any tag with name `tag_name` the StatMesh + assumes that there is also a tag with name `tag_name_rel_error`. + + For example, when to quantities are added together, c = a + b, the + statistical error of c is found by combining the statistical errors of a + and b. + """ + + def __init__(self, mesh=None, structured=False, + structured_coords=None, structured_set=None, mats=()): + + super(StatMesh, self).__init__(mesh=mesh, + structured=structured, + structured_coords=structured_coords, + structured_set=structured_set, mats=mats) + + def _do_op(self, other, tags, op, in_place=True): + """Private function to do mesh +, -, *, /. Called by operater + overloading functions. + """ + # Exclude error tags because result and error tags are treated + # simultaneously so there is not need to include both in the tag + # list to iterate through. + error_suffix = "_rel_error" + + tags = set(tag for tag in tags if not tag.endswith(error_suffix)) + + if in_place: + mesh_1 = self + else: + mesh_1 = copy.copy(self) + + for tag in tags: + for ve_1, ve_2 in \ + zip(zip(iter(meshset_iterate(mesh_1.mesh, mesh_1.structured_set, types.MBMAXTYPE, dim=3))), + zip(iter(meshset_iterate(other.mesh, other.structured_set, types.MBMAXTYPE, dim=3)))): + mesh_1_err_tag = mesh_1.mesh.tag_get_handle(tag + error_suffix) + other_err_tag = other.mesh.tag_get_handle(tag + error_suffix) + mesh_1_tag = mesh_1.mesh.tag_get_handle(tag) + other_tag = other.mesh.tag_get_handle(tag) + + mesh_1_val = mesh_1.mesh.tag_get_data( + mesh_1_tag, ve_1, flat=True)[0] + other_val = other.mesh.tag_get_data( + other_tag, ve_2, flat=True)[0] + mesh_1_err = mesh_1.mesh.tag_get_data( + mesh_1_err_tag, ve_1, flat=True)[0] + other_err = other.mesh.tag_get_data( + other_err_tag, ve_2, flat=True)[0] + + new_err_val = err__ops[op]( + mesh_1_val, other_val, mesh_1_err, other_err) + mesh_1.mesh.tag_set_data(mesh_1_err_tag, ve_1, new_err_val) + + new_val = _ops[op](mesh_1_val, other_val) + mesh_1.mesh.tag_set_data(mesh_1_tag, ve_1, new_val) + + return mesh_1
###################################################### # private helper functions for structured mesh methods ###################################################### + def _structured_find_idx(dims, ijk): """Helper method fo structured_get_vertex and structured_get_hex. For tuple (i,j,k), return the number N in the appropriate iterator. """ dim0 = [0] * 3 - for i in xrange(0, 3): + for i in range(0, 3): if (dims[i] > ijk[i] or dims[i + 3] <= ijk[i]): raise MeshError(str(ijk) + " is out of bounds") dim0[i] = ijk[i] - dims[i] @@ -1404,7 +1628,7 @@

Source code for pyne.mesh

     indices = []
     for L in order:
         idx = "xyz".find(L)
-        indices.append(spec.get(L, xrange(dims[idx], dims[idx + 3])))
+        indices.append(spec.get(L, range(dims[idx], dims[idx + 3])))
 
     ordmap = ["zyx".find(L) for L in order]
     return indices, ordmap
@@ -1425,49 +1649,61 @@ 

Source code for pyne.mesh

         yield _structured_step_iter(it, (ioff + joff + koff))
 
 
-
[docs]class StatMesh(Mesh): - def __init__(self, mesh=None, structured=False, - structured_coords=None, structured_set=None, mats=()): - - super(StatMesh, self).__init__(mesh=mesh, - structured=structured, - structured_coords=structured_coords, - structured_set=structured_set, mats=mats) +if HAVE_PYMOAB: + def mesh_iterate(mesh, mesh_type=3, + topo_type=types.MBMAXTYPE): + return meshset_iterate(mesh, 0, topo_type, mesh_type, recursive=True) + + def meshset_iterate(pymb, meshset=0, entity_type=types.MBMAXTYPE, dim=-1, arr_size=1, recursive=False): + return MeshSetIterator(pymb, meshset, entity_type, dim, arr_size, recursive) + + +class MeshSetIterator(object): + + def __init__(self, inst, meshset, entity_type, dim=-1, arr_size=1, recursive=False): + self.pymb = inst + self.meshset = meshset + self.ent_type = entity_type + self.dimension = dim + self.arr_size = arr_size + self.recur = recursive + self.reset() + + def reset(self): + # if a specific dimension is requested, return only that dimension + if(self.ent_type != types.MBMAXTYPE): + ents = self.pymb.get_entities_by_type( + self.meshset, self.ent_type, self.recur) + # if a specific type is requested, return only that type + elif(self.dimension != -1): + ents = self.pymb.get_entities_by_dimension( + self.meshset, self.dimension, self.recur) + # otherwise return everything + else: + ents = self.pymb.get_entities_by_handle(self.meshset, self.recur) - def _do_op(self, other, tags, op, in_place=True): - """Private function to do mesh +, -, *, /. Called by operater - overloading functions. - """ - # Exclude error tags because result and error tags are treated - # simultaneously so there is not need to include both in the tag - # list to iterate through. - error_suffix = "_rel_error" + self.pos = 0 + self.size = len(ents) + self.entities = ents - tags = set(tag for tag in tags if not tag.endswith(error_suffix)) + def __iter__(self): + for i in range(0, self.size): + yield self.entities[i] - if in_place: - mesh_1 = self + def next(self): + if self.pos >= self.size: + raise StopIteration else: - mesh_1 = copy.copy(self) - - for tag in tags: - for ve_1, ve_2 in \ - zip(zip(iter(mesh_1.mesh.iterate(iBase.Type.region, - iMesh.Topology.all))), - zip(iter(other.mesh.iterate(iBase.Type.region, - iMesh.Topology.all)))): - - mesh_1.mesh.getTagHandle(tag + error_suffix)[ve_1] = err__ops[op]( - mesh_1.mesh.getTagHandle(tag)[ve_1], - other.mesh.getTagHandle(tag)[ve_2], - mesh_1.mesh.getTagHandle(tag + error_suffix)[ve_1], - other.mesh.getTagHandle(tag + error_suffix)[ve_2]) - - mesh_1.mesh.getTagHandle(tag)[ve_1] = \ - _ops[op](mesh_1.mesh.getTagHandle(tag)[ve_1], - other.mesh.getTagHandle(tag)[ve_2]) -
- return mesh_1 + return self.entities[self.pos] + self.pos += 1 + + def step(self, num_steps): + self.pos += int(num_steps) # protecting from Python 3 auto-promotion + at_end = False + if self.pos >= self.size: + self.pos = self.size - 1 + at_end = True + return at_end
@@ -1533,8 +1769,8 @@

Navigation

+ + + + + @@ -99,8 +102,8 @@

Source code for pyne.njoy

 warn(__name__ + " is not yet QA compliant.", QAWarning)
 
 
[docs]class PyNjoyError(Exception): - """Exception indicating an error in PyNjoy."""
- pass + """Exception indicating an error in PyNjoy.""" + pass
[docs]class Njoy99(object): """The NJOY99 wrapper class.""" @@ -266,8 +269,8 @@

Source code for pyne.njoy

         os.system("chmod 644 out_pendf_" + self.hmat)
         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'tape':
-                os.remove(file_name)
- os.chdir(mycwd) + os.remove(file_name) + os.chdir(mycwd)
[docs] def gendf(self, eaf=0): """Generate a multigroup GENDF file using the MODER and GROUPR @@ -396,8 +399,8 @@

Source code for pyne.njoy

         os.system("chmod 644 out_gendf_" + self.hmat)
         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'tape':
-                os.remove(file_name)
- os.chdir(mycwd) + os.remove(file_name) + os.chdir(mycwd)
[docs] def gamma(self): """Generate photo-atomic (gamma) group ENDF file using the MODER, @@ -435,8 +438,8 @@

Source code for pyne.njoy

         os.system("chmod 644 out_gamma_" + self.hmatgg)
         for file_name in os.listdir(os.getcwd()):
           if file_name[:4] == 'tape':
-              os.remove(file_name)
- os.chdir(mycwd) + os.remove(file_name) + os.chdir(mycwd)
[docs] def draglib(self, fp=0): """Generate a DRAGLIB file using the MODER and DRAGR modules and @@ -572,8 +575,8 @@

Source code for pyne.njoy

         os.system("chmod 644 out_draglib_" + self.hmat)
         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'temp' or file_name[:4] == 'tape':
-                os.remove(file_name)
- os.chdir(mycwd) + os.remove(file_name) + os.chdir(mycwd)
[docs] def matxs(self): """Generate an ASCII MATXS file using the MODER and MATXSR modules.""" @@ -615,8 +618,8 @@

Source code for pyne.njoy

         os.system("chmod 644 out_matxs_" + self.hmat)
         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'tape':
-                os.remove(file_name)
- os.chdir(mycwd) + os.remove(file_name) + os.chdir(mycwd)
[docs] def makefp(self, eaf=0): """Creates a PENDF, GENDF, and DRAGLIB file for a single fission @@ -637,8 +640,8 @@

Source code for pyne.njoy

         self.legendre = 0
         self.pendf(eaf)
         self.gendf(eaf)
-        self.draglib(fp=1)
- self.legendre = keeplegendre + self.draglib(fp=1) + self.legendre = keeplegendre
[docs] def burnup(self): """Process burnup data for the complete library. This requires a file @@ -752,8 +755,8 @@

Source code for pyne.njoy

         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'temp' or file_name[:4] == 'tape':
                 os.remove(file_name)
-        os.remove("file_data")
- os.chdir(mycwd) + os.remove("file_data") + os.chdir(mycwd)
[docs] def acer(self): """Generate ACE-format cross section libraries using the MODER, RECONR, @@ -874,8 +877,8 @@

Source code for pyne.njoy

         for file_name in os.listdir(os.getcwd()):
             if file_name[:4] == 'tape':
                 os.remove(file_name)
-        os.remove("file_data")
- os.chdir(mycwd) + os.remove("file_data") + os.chdir(mycwd)
@@ -941,8 +944,8 @@

Navigation

+ + + + + @@ -430,8 +433,8 @@

Source code for pyne.origen22

                 unit -= 1
             t = s / ORIGEN_TIME_UNITS[unit]
             break
-
- return t, unit + + return t, unit
# Regex helpers @@ -471,8 +474,8 @@

Source code for pyne.origen22

 
     outfile.write(tape4)
 
-    if opened_here:
- outfile.close() + if opened_here: + outfile.close()
_tape5_irradiation_template = """\ @@ -641,8 +644,8 @@

Source code for pyne.origen22

 
     outfile.write(tape5)
 
-    if opened_here:
- outfile.close() + if opened_here: + outfile.close()
[docs]def write_tape5_decay(dec_time, @@ -724,8 +727,8 @@

Source code for pyne.origen22

 
     outfile.write(tape5)
 
-    if opened_here:
- outfile.close() + if opened_here: + outfile.close()
# # Tape6 functions @@ -984,8 +987,8 @@

Source code for pyne.origen22

                                             for i, m in enumerate(mats)]
 
         results['materials'] = mats
-
- return results + + return results
# @@ -1213,8 +1216,8 @@

Source code for pyne.origen22

             deck_num = int(m.group(1))
             parsed[deck_num] = _parse_tape9_xsfpy(deck)
             continue
-
- return parsed + + return parsed
[docs]def loads_tape9(tape9): @@ -1235,8 +1238,8 @@

Source code for pyne.origen22

         t9 = StringIO(tape9)
     else:
         t9 = StringIO(tape9.decode())
-    parsed = parse_tape9(t9)
- return parsed + parsed = parse_tape9(t9) + return parsed
[docs]def merge_tape9(tape9s): @@ -1278,8 +1281,8 @@

Source code for pyne.origen22

             else:
                 # New library number, make a copy
                 tape9[nlb] = deepcopy(deck)
-
- return tape9 + + return tape9
def _double_get(dict, key1, key2, default=0.0): @@ -1484,8 +1487,8 @@

Source code for pyne.origen22

 
     outfile.write(t9)
 
-    if opened_here:
- outfile.close() + if opened_here: + outfile.close()
_fyp_present = {'activation_products': False, 'actinides': False, 'fission_products': True, } @@ -1599,8 +1602,8 @@

Source code for pyne.origen22

                     print('Key Error with ', key, ' in a computing fission product cross sections')
                 continue
     xscache['E_g'] = old_group_struct
-    xscache['phi_g'] = old_flux
- return t9 + xscache['phi_g'] = old_flux + return t9
[docs]def nlbs(t9): @@ -1629,8 +1632,8 @@

Source code for pyne.origen22

             xsfpy_nlb[1] = n
         elif lib['_subtype'] == 'fission_products':
             xsfpy_nlb[2] = n
-    decay_nlb.sort()
- return tuple(decay_nlb), tuple(xsfpy_nlb) + decay_nlb.sort() + return tuple(decay_nlb), tuple(xsfpy_nlb)
[docs]def make_tape9(nucs, xscache=None, nlb=(201, 202, 203)): @@ -1656,8 +1659,8 @@

Source code for pyne.origen22

         xscache = cache.XSCache()
     nucs = {nucname.id(nuc) for nuc in nucs}
     xsfpys = xslibs(nucs=nucs, xscache=xscache, nlb=nlb)
-    tape9 = merge_tape9([decay, xsfpys])
- return tape9 + tape9 = merge_tape9([decay, xsfpys]) + return tape9
@@ -1723,8 +1726,8 @@

Navigation

+ + + + + @@ -72,10 +75,11 @@

Source code for pyne.partisn

 
 Module is designed to work on 1D, 2D, or 3D Cartesian geometries.
 
-If PyTaps not installed then this module will not work.
+If PyMOAB not installed then this module will not work.
 """
 
 from __future__ import print_function, division
+from pyne.mesh import HAVE_PYMOAB
 import sys
 import collections
 import string
@@ -102,21 +106,23 @@ 

Source code for pyne.partisn

 warn(__name__ + " is not yet QA compliant.", QAWarning)
 
 # Mesh specific imports
+
+if HAVE_PYMOAB:
+    from pyne.mesh import Mesh, StatMesh, MeshError, NativeMeshTag
+else:
+    warn("The PyMOAB optional dependency could not be imported. "
+         "All aspects of the partisn module are not imported.",
+         QAWarning)
+
 try:
-    from itaps import iMesh
-    HAVE_PYTAPS = True
-except ImportError:
-    warn("the PyTAPS optional dependency could not be imported. "
-                  "All aspects of the partisn module are not imported.",
-                  QAWarning)
-    HAVE_PYTAPS = False
-
-if HAVE_PYTAPS:
-    from pyne.mesh import Mesh, StatMesh, MeshError, IMeshTag
     from pyne import dagmc
+    HAVE_DAGMC = True
+except:
+    HAVE_DAGMC = False
+
 
 
[docs]def write_partisn_input(mesh, hdf5, ngroup, **kwargs): - """This function reads a material-laden geometry file and a pre-made PyNE + """This function reads a material-laden geometry file and a pre-made PyNE mesh object and writes a PARTISN text input file for blocks 1-5. The following cards are included: @@ -127,27 +133,27 @@

Source code for pyne.partisn

     block 5: source.
 
     The 'source' card that appears by default is uniform in space and energy
-    and isotropic in direction. In addition, "suggested" cards are printed, 
-    commented-out. These suggested cards are the additional cards required for a 
+    and isotropic in direction. In addition, "suggested" cards are printed,
+    commented-out. These suggested cards are the additional cards required for a
     minimum working PARTISN input file:
 
     block 1: isn, maxscm, maxlcm,
     block 2: lib, lng, maxord, ihm, iht, ihs, ifido, ititl.
 
     Using the 'cards' parameter, any one of these cards (including 'source') as
-    well as any PARTISN input card not specified here can be supplied and 
-    printed to the input file. Supplied cards will be ommitted from suggested 
+    well as any PARTISN input card not specified here can be supplied and
+    printed to the input file. Supplied cards will be ommitted from suggested
     cards.
-   
+
     Parameters
     ----------
-    mesh : PyNE mesh 
+    mesh : PyNE mesh
         A premade mesh object that conforms to the geometry. Bounds of the mesh
         must correspond to the desired PARTISN coarse mesh intervals. By default
         one fine mesh inverval per coarse mesh will be used. This can be changed
-        with the fine_per_coarse parameter. The sum of all fine mesh intervals 
-        in the problem must be greater than or equal to 7. Mesh can be 1-D 
-        (Nx1x1 mesh), 2-D (NxMx1 mesh), or 3-D (NxMxP mesh). Only Cartesian 
+        with the fine_per_coarse parameter. The sum of all fine mesh intervals
+        in the problem must be greater than or equal to 7. Mesh can be 1-D
+        (Nx1x1 mesh), 2-D (NxMx1 mesh), or 3-D (NxMxP mesh). Only Cartesian
         meshes are currently supported.
     hdf5 : string
         File path to a material-laden dagmc geometry file.
@@ -157,30 +163,35 @@ 

Source code for pyne.partisn

         Desired path of generated PARTISN input file. Any file already existing
         by the same name will be overwritten.
     cards : dict, optional, default = {}
-        This is a dictionary with the following keys: 'block1', 'block2', 
+        This is a dictionary with the following keys: 'block1', 'block2',
         'block3', 'block4', 'block5'. The values are each dicts in the format:
          <partisn_card_name>:<partisn_card_value>. These cards will be printed
         out in the input file produced by this function. When specifying a
         source via this method, the key source be 'source' and the value should
-        the entire source card, including the card name (e.g. source, sourcx, 
+        the entire source card, including the card name (e.g. source, sourcx,
         sourcef, etc) and '='.
     names_dict : dict, optional, default = None
         PyNE element/isotope names to bxslib name assignment. Keys are PyNE
         nucids (int) and values are bxslib names (str)
         Example: names_dict[250550000] ='mn55'
     num_rays : int, optional, default = 10
-        For discretize_geom. Structured mesh only. The number of rays to fire 
+        For discretize_geom. Structured mesh only. The number of rays to fire
         in each mesh row for each direction.
     grid : boolean, optional, default = False
-        For discretize_geom. Structured mesh only. If false, rays starting 
-        points are chosen randomly (on the boundary) for each mesh row. If 
-        true, a linearly spaced grid of starting points is used, with dimension 
-        sqrt(num_rays) x sqrt(num_rays). In this case, "num_rays" must be a 
+        For discretize_geom. Structured mesh only. If false, rays starting
+        points are chosen randomly (on the boundary) for each mesh row. If
+        true, a linearly spaced grid of starting points is used, with dimension
+        sqrt(num_rays) x sqrt(num_rays). In this case, "num_rays" must be a
         perfect square.
     dg : record array, optional, default = None
-        The output of pyne.dagmc.discretize_geom(). Use this input option if 
+        The output of pyne.dagmc.discretize_geom(). Use this input option if
         discretize_geom() has already been run, to avoid duplicating this
-        expensive step.
+        expensive step. If HAVE_DAGMC=False, then this must be supplied.
+    mat_assigns : dict, optional, default = None
+        The output from pyne.cell_material_assignments().
+        Dictionary of the cell to material assignments. Keys are cell
+        numbers and values are material names. If HAVE_DAGMC=False, then
+        this must be supplied.
     fine_per_coarse : int, optional, default = 1
         The number of fine mesh intervals per coarse mesh interval.
     data_hdf5path : string, optional, default = /materials
@@ -188,17 +199,18 @@ 

Source code for pyne.partisn

     nuc_hdf5path : string, optional, default = /nucid
         the path in the heirarchy to the nuclide array in an HDF5 file.
     """
-    
+
     # Initialize dictionaries for each PARTISN block
     block01 = {}
     block02 = {}
     block03 = {}
     block04 = {}
     block05 = {}
-    
+
     # Read optional inputs:
     cards = kwargs.get('cards', {})
     dg = kwargs.get('dg', None)
+    mat_assigns = kwargs.get('mat_assigns', None)
     num_rays = kwargs.get('num_rays', 10)
     grid = kwargs.get('grid', False)
     if dg is not None and ('num_rays' in kwargs or 'grid' in kwargs):
@@ -214,15 +226,17 @@ 

Source code for pyne.partisn

     # provided.
     if 'names_dict' in kwargs:
         nuc_names = kwargs['names_dict']
-        mat_lib, unique_names= _get_material_lib(hdf5, data_hdf5path, nuc_hdf5path, nuc_names=nuc_names)
+        mat_lib, unique_names = _get_material_lib(
+            hdf5, data_hdf5path, nuc_hdf5path, nuc_names=nuc_names)
         mat_xs_names = _nucid_to_xs(mat_lib, nuc_names=nuc_names)
     else:
-        mat_lib, unique_names = _get_material_lib(hdf5, data_hdf5path, nuc_hdf5path)
+        mat_lib, unique_names = _get_material_lib(
+            hdf5, data_hdf5path, nuc_hdf5path)
         mat_xs_names = _nucid_to_xs(mat_lib)
-    
+
     # Set input variables
     block04['matls'] = mat_xs_names
-    
+
     xs_names = _get_xs_names(mat_xs_names)
     block01['niso'] = len(xs_names)
     block03['names'] = xs_names
@@ -230,11 +244,12 @@ 

Source code for pyne.partisn

     block01['igeom'], bounds = _get_coord_sys(mesh)
     block01['ngroup'] = ngroup
     block01['mt'] = len(mat_lib)
-    
-    block02['zones'], block04['assign'] = _get_zones(mesh, hdf5, bounds, num_rays, grid, dg, unique_names)
+
+    block02['zones'], block04['assign'] = _get_zones(mesh, hdf5, bounds, num_rays,
+                                                     grid, dg, mat_assigns, unique_names)
     block01['nzone'] = len(block04['assign'])
     block02['fine_per_coarse'] = fine_per_coarse
-    
+
     for dim in bounds:
         if dim == 'x':
             n = len(bounds[dim]) - 1
@@ -251,17 +266,18 @@ 

Source code for pyne.partisn

             block01['km'] = n
             block01['kt'] = block01['km']*fine_per_coarse
             block02['zmesh'] = bounds[dim]
-    
+
     _check_fine_mesh_total(block01)
 
-    # call function to write to file
- _write_input(title, block01, block02, block03, block04, block05, cards, input_file) + # call function to write to file + _write_input(title, block01, block02, block03, + block04, block05, cards, input_file)
def _get_material_lib(hdf5, data_hdf5path, nuc_hdf5path, **kwargs): """Read material properties from the loaded dagmc geometry. """ - + # If a set of nuc_names is provided, then collapse elements if 'nuc_names' in kwargs: nuc_names = kwargs['nuc_names'] @@ -270,7 +286,7 @@

Source code for pyne.partisn

         mat_except = set(nuc_names.keys())
     else:
         collapse = False
-    
+
     # collapse isotopes into elements (if required)
     mats = MaterialLibrary(hdf5, datapath=data_hdf5path, nucpath=nuc_hdf5path)
     mats_collapsed = {}
@@ -279,7 +295,8 @@ 

Source code for pyne.partisn

         fluka_name = mats[mat_name].metadata['fluka_name']
         unique_names[mat_name] = fluka_name
         if collapse:
-            mats_collapsed[fluka_name] = mats[mat_name].collapse_elements(mat_except)
+            mats_collapsed[fluka_name] = mats[mat_name].collapse_elements(
+                mat_except)
         else:
             mats_collapsed[fluka_name] = mats[mat_name]
 
@@ -289,7 +306,7 @@ 

Source code for pyne.partisn

         comp = mats_collapsed[mat_name]
         atom_dens_dict = comp.to_atom_dens()
         comp_list = {}
-        for nucid, dens in atom_dens_dict.iteritems():
+        for nucid, dens in atom_dens_dict.items():
             # convert from [at/cc] to [at/b-cm]
             comp_list[nucid] = dens*10.**-24
         mat_lib[mat_name] = comp_list
@@ -305,7 +322,7 @@ 

Source code for pyne.partisn

         names_tf = True
     else:
         names_tf = False
-    
+
     mat_xs_names = {}
     for mat in mat_lib:
         mat_xs_names[mat] = {}
@@ -315,19 +332,21 @@ 

Source code for pyne.partisn

                     name = nuc_names[nucid]
                     mat_xs_names[mat][name] = mat_lib[mat][nucid]
                 else:
-                    warn("Nucid {0} does not exist in the provided nuc_names dictionary.".format(nucid))
-                    mat_xs_names[mat]["{0}".format(nucid)] = mat_lib[mat][nucid]
+                    warn(
+                        "Nucid {0} does not exist in the provided nuc_names dictionary.".format(nucid))
+                    mat_xs_names[mat]["{0}".format(
+                        nucid)] = mat_lib[mat][nucid]
             else:
                 mat_xs_names[mat][nucname.name(nucid)] = mat_lib[mat][nucid]
 
     return mat_xs_names
-    
+
 
 def _get_xs_names(mat_xs_names):
     """Create list of names (strings) of the nuclides that appear in the cross
     section library from the list of nuc_names.
     """
-    
+
     xs_names = set()
     list(map(xs_names.update, mat_xs_names.values()))
     return list(xs_names)
@@ -336,12 +355,12 @@ 

Source code for pyne.partisn

 def _get_coord_sys(mesh):
     """Determine coordinate system and get bounds
     """
-    
+
     # get number of divisions
     nx = len(mesh.structured_get_divisions("x"))
     ny = len(mesh.structured_get_divisions("y"))
     nz = len(mesh.structured_get_divisions("z"))
-    
+
     coord_sys = ""
     if nx > 2:
         coord_sys += "x"
@@ -364,21 +383,25 @@ 

Source code for pyne.partisn

         igeom = 'x-y'
     elif len(coord_sys) == 3:
         igeom = 'x-y-z'
-    
+
     return igeom, bounds
 
 
-def _get_zones(mesh, hdf5, bounds, num_rays, grid, dg, unique_names):
+def _get_zones(mesh, hdf5, bounds, num_rays, grid, dg, mat_assigns, unique_names):
     """Get the minimum zone definitions for the geometry.
     """
-    
+
     # Discretize the geometry and get cell fractions
     if dg is None:
-        dagmc.load(hdf5)
-        dg = dagmc.discretize_geom(mesh, num_rays=num_rays, grid=grid)
+        if not HAVE_DAGMC:
+            raise RuntimeError("DAGMC is not available."
+                               "Unable to discretize the geometry.")
+        else:
+            dagmc.load(hdf5)
+            dg = dagmc.discretize_geom(mesh, num_rays=num_rays, grid=grid)
 
-    # Reorganize dictionary of each voxel's info with the key the voxel number 
-    # and values of cell and volume fraction   
+    # Reorganize dictionary of each voxel's info with the key the voxel number
+    # and values of cell and volume fraction
     voxel = {}
     for i in dg:
         idx = i[0]  # voxel number
@@ -390,7 +413,13 @@ 

Source code for pyne.partisn

         voxel[idx]['vol_frac'].append(i[2])
 
     # get material to cell assignments
-    mat_assigns = dagmc.cell_material_assignments(hdf5)
+    if mat_assigns is None:
+        if not HAVE_DAGMC:
+            raise RuntimeError("DAGMC is not available."
+                               "Unable to get cell material assignments.")
+        else:
+            mat_assigns = dagmc.cell_material_assignments(hdf5)
+
     # Replace the names in the material assignments with unique names
     temp = {}
     for i, name in mat_assigns.items():
@@ -416,11 +445,13 @@ 

Source code for pyne.partisn

                 # update value that already exists with new volume fraction
                 for j, val in enumerate(zones[z]['mat']):
                     if mat_assigns[cell] == val:
-                        vol_frac = zones[z]['vol_frac'][j] + voxel[z]['vol_frac'][i]
+                        vol_frac = zones[z]['vol_frac'][j] + \
+                            voxel[z]['vol_frac'][i]
                         zones[z]['vol_frac'][j] = vol_frac
-    
+
     # Remove vacuum or graveyard from material definition if not vol_frac of 1.0
-    skip_array = [['mat:Vacuum'], ['mat:vacuum'], ['mat:Graveyard'], ['mat:graveyard']]
+    skip_array = [['mat:Vacuum'], ['mat:vacuum'],
+                  ['mat:Graveyard'], ['mat:graveyard']]
     skip_list = ['mat:Vacuum', 'mat:vacuum', 'mat:Graveyard', 'mat:graveyard']
     zones_compressed = {}
     for z, info in zones.iteritems():
@@ -429,19 +460,20 @@ 

Source code for pyne.partisn

             zones_compressed[z] = info
         else:
             # check for partial void
-            zones_compressed[z] = {'mat':[], 'vol_frac':[]}
+            zones_compressed[z] = {'mat': [], 'vol_frac': []}
             for i, mat in enumerate(zones[z]['mat']):
                 if mat not in skip_list:
                     zones_compressed[z]['mat'].append(mat)
-                    zones_compressed[z]['vol_frac'].append(zones[z]['vol_frac'][i])
-    
+                    zones_compressed[z]['vol_frac'].append(
+                        zones[z]['vol_frac'][i])
+
     # Eliminate duplicate zones and assign each voxel a zone number.
     # Assign zone = 0 if vacuum or graveyard and eliminate material definition.
     voxel_zone = {}
     zones_mats = {}
     z = 0
     match = False
-    first = True    
+    first = True
     for i, vals in zones_compressed.iteritems():
         # Find if the zone already exists
         for zone, info in zones_mats.iteritems():
@@ -450,8 +482,8 @@ 

Source code for pyne.partisn

             match_all.fill(False)
             for ii, mat in enumerate(vals['mat']):
                 for jj, mat_info in enumerate(info['mat']):
-                    if mat == mat_info and np.allclose(np.array(vals['vol_frac'][ii]), \
-                                np.array(info['vol_frac'][jj]), rtol=1e-5):
+                    if mat == mat_info and np.allclose(np.array(vals['vol_frac'][ii]),
+                                                       np.array(info['vol_frac'][jj]), rtol=1e-5):
                         match_all[ii] = True
                         break
             if match_all.all() == True:
@@ -475,27 +507,28 @@ 

Source code for pyne.partisn

                 voxel_zone[i] = 0
             else:
                 voxel_zone[i] = y
-    
+
     # Remove any instances of graveyard or vacuum in zone definitions
     zones_novoid = {}
     for z in zones_mats:
-        zones_novoid[z] = {'mat':[], 'vol_frac':[]}
+        zones_novoid[z] = {'mat': [], 'vol_frac': []}
         for i, mat in enumerate(zones_mats[z]['mat']):
             if mat not in skip_list:
                 zones_novoid[z]['mat'].append(mat)
-                zones_novoid[z]['vol_frac'].append(zones_mats[z]['vol_frac'][i])
-    
+                zones_novoid[z]['vol_frac'].append(
+                    zones_mats[z]['vol_frac'][i])
+
     # Put zones into format for PARTISN input
     if 'x' in bounds:
         im = len(bounds['x']) - 1
     else:
         im = 1
-    
+
     if 'y' in bounds:
         jm = len(bounds['y']) - 1
     else:
         jm = 1
-    
+
     if 'z' in bounds:
         km = len(bounds['z']) - 1
     else:
@@ -514,7 +547,7 @@ 

Source code for pyne.partisn

         zones_formatted[:, i] = temp
 
     return zones_formatted, zones_novoid
-    
+
 
 def _check_fine_mesh_total(block01):
     """Check that the fine mesh total is greater than or equal to 7.
@@ -523,7 +556,7 @@ 

Source code for pyne.partisn

     for key in block01:
         if key in ['it', 'jt', 'kt']:
             total += block01[key]
-    
+
     if total < 7:
         warn("Please supply a larger mesh. Number of fine mesh intervals is less than 7.")
 
@@ -531,13 +564,13 @@ 

Source code for pyne.partisn

 def _write_input(title, block01, block02, block03, block04, block05, cards, file_name):
     """Write all variables and comments to a file.
     """
- 
+
     # Create file to write to
     f = open(file_name, 'w')
     partisn = ''
-    
+
     # NOTE: header is prepended at the end of this function.
-    
+
     ###########################################
     #              Write Block 1              #
     ###########################################
@@ -549,8 +582,7 @@ 

Source code for pyne.partisn

     partisn += "  niso={0}".format(block01['niso'])
     partisn += "  mt={0}".format(block01['mt'])
     partisn += "  nzone={0}\n".format(block01['nzone'])
-    
-    
+
     if 'im' in block01:
         partisn += "im={0}".format(block01['im'])
         partisn += "  it={0}  ".format(block01['it'])
@@ -565,24 +597,24 @@ 

Source code for pyne.partisn

 
     block1_cards = []
     if 'block1' in cards:
-      for card, value in cards['block1'].iteritems():
-          partisn += "{}={}\n".format(card, value)
-          block1_cards.append(card)
-    
+        for card, value in cards['block1'].iteritems():
+            partisn += "{}={}\n".format(card, value)
+            block1_cards.append(card)
+
     missing_1 = set(['isn', 'maxscm', 'maxlcm']) - set(block1_cards)
     if len(missing_1) > 0:
         partisn += "/ Please provide input for the following variables:\n"
         for mis in sorted(missing_1):
             partisn += "/{}=\n".format(mis)
     partisn += 't'
-    
+
     ###########################################
     #              Write Block 2              #
     ###########################################
     partisn += "\n/ \n"
     partisn += "/ ------------ Block 2 (Geometry) ------------"
     partisn += "\n/ \n"
-    
+
     if 'xmesh' in block02:
         partisn += "xmesh= "
         count = 0
@@ -594,9 +626,10 @@ 

Source code for pyne.partisn

                     partisn += "\n       "
                 count = 0
         partisn += "\nxints= "
-        partisn += "{0}R {1}".format(len(block02['xmesh'])-1, block02['fine_per_coarse'])
+        partisn += "{0}R {1}".format(len(block02['xmesh'])-1,
+                                     block02['fine_per_coarse'])
         partisn += "\n"
-        
+
     if 'ymesh' in block02:
         partisn += "ymesh= "
         count = 0
@@ -608,9 +641,10 @@ 

Source code for pyne.partisn

                     partisn += "\n       "
                 count = 0
         partisn += "\nyints= "
-        partisn += "{0}R {1}".format(len(block02['ymesh'])-1, block02['fine_per_coarse'])
+        partisn += "{0}R {1}".format(len(block02['ymesh'])-1,
+                                     block02['fine_per_coarse'])
         partisn += "\n"
-        
+
     if 'zmesh' in block02:
         partisn += "zmesh= "
         count = 0
@@ -622,9 +656,10 @@ 

Source code for pyne.partisn

                     partisn += "\n       "
                 count = 0
         partisn += "\nzints= "
-        partisn += "{0}R {1}".format(len(block02['zmesh'])-1, block02['fine_per_coarse'])
+        partisn += "{0}R {1}".format(len(block02['zmesh'])-1,
+                                     block02['fine_per_coarse'])
         partisn += "\n"
-        
+
     partisn += "zones= "
     for i, row in enumerate(block02['zones']):
         count = 0
@@ -641,18 +676,18 @@ 

Source code for pyne.partisn

             partisn += "\n"
 
     if 'block2' in cards:
-      for card, value in cards['block2'].iteritems():
-          partisn += "{}={}\n".format(card, value)
+        for card, value in cards['block2'].iteritems():
+            partisn += "{}={}\n".format(card, value)
 
     partisn += "t"
-    
+
     ###########################################
     #              Write Block 3              #
     ###########################################
     partisn += "\n/ \n"
     partisn += "/ ------------ Block 3 (Nuclear Data) ------------"
     partisn += "\n/ \n"
-    
+
     partisn += "/ Note: NAMES is not all inclusive. Only NAMES that are present in\n"
     partisn += "/ meshed area are listed.\n"
     partisn += "names= "
@@ -664,30 +699,30 @@ 

Source code for pyne.partisn

             if i != len(block03['names'])-1:
                 partisn += "\n       "
             count = 0
-    
+
     partisn += "\n"
 
     block3_cards = []
     if 'block3' in cards:
-      for card, value in cards['block3'].iteritems():
-          partisn += "{}={}\n".format(card, value)
-          block3_cards.append(card)
-    
+        for card, value in cards['block3'].iteritems():
+            partisn += "{}={}\n".format(card, value)
+            block3_cards.append(card)
+
     missing_3 = set(['lib', 'lng', 'maxord', 'ihm', 'iht', 'ihs', 'ifido', 'ititl']) \
-              - set(block3_cards)
+        - set(block3_cards)
     if len(missing_3) > 0:
         partisn += "/ Please provide input for the following variables:\n"
         for mis in sorted(missing_3):
             partisn += "/{}=\n".format(mis)
     partisn += "t"
-    
+
     ###########################################
     #              Write Block 4              #
     ###########################################
     partisn += "\n/ \n"
     partisn += "/ ------------ Block 4 (Cross-Section Mixing) ------------"
     partisn += "\n/ \n"
-    
+
     partisn += "matls= "
     for i, mat in enumerate(block04['matls']):
         partisn += "{0} ".format(mat)
@@ -707,7 +742,7 @@ 

Source code for pyne.partisn

                     partisn += "{} {:.4e};\n".format(iso, dens)
                 else:
                     partisn += "{} {:.4e};\n       ".format(iso, dens)
-            
+
     partisn += "assign= "
     for i, z in enumerate(block04['assign']):
         partisn += "{0} ".format(z)
@@ -715,23 +750,26 @@ 

Source code for pyne.partisn

         for j, mat in enumerate(block04['assign'][z]['mat']):
             if j != len(block04['assign'][z]['mat'])-1:
                 count += 1
-                partisn += "{} {:.4e}, ".format(mat, block04['assign'][z]['vol_frac'][j])
+                partisn += "{} {:.4e}, ".format(mat,
+                                                block04['assign'][z]['vol_frac'][j])
                 if count == 3:
                     if i != len(block04['assign'][z]['mat'])-1:
                         partisn += "\n          "
                     count = 0
             else:
                 if i == len(block04['assign']) - 1:
-                    partisn += "{} {:.4e};\n".format(mat, block04['assign'][z]['vol_frac'][j])
+                    partisn += "{} {:.4e};\n".format(mat,
+                                                     block04['assign'][z]['vol_frac'][j])
                 else:
-                    partisn += "{} {:.4e};\n        ".format(mat, block04['assign'][z]['vol_frac'][j])
+                    partisn += "{} {:.4e};\n        ".format(
+                        mat, block04['assign'][z]['vol_frac'][j])
 
     if 'block4' in cards:
-      for card, value in cards['block4'].iteritems():
-          partisn += "{}={}\n".format(card, value)
-    
+        for card, value in cards['block4'].iteritems():
+            partisn += "{}={}\n".format(card, value)
+
     partisn += "t"
-    
+
     ###########################################
     #              Write Block 5              #
     ###########################################
@@ -749,9 +787,9 @@ 

Source code for pyne.partisn

         default_source = True
 
     if 'block5' in cards:
-      for card, value in cards['block5'].iteritems():
-          if card != 'source':
-              partisn += "{}={}\n".format(card, value)
+        for card, value in cards['block5'].iteritems():
+            if card != 'source':
+                partisn += "{}={}\n".format(card, value)
     partisn += "t\n"
 
     ###########################################
@@ -767,42 +805,43 @@ 

Source code for pyne.partisn

         header += "/ NOTE: The follow commented out cards must be filled in for\n"
         header += "/       a complete PARTISN input file:\n"
         if len(missing_1) > 0:
-           header += '/       Block 1:'
-           for mis in sorted(missing_1):
-              header += " {},".format(mis)
-           header += "\n"
+            header += '/       Block 1:'
+            for mis in sorted(missing_1):
+                header += " {},".format(mis)
+            header += "\n"
         if len(missing_3) > 0:
-           header += '/       Block 3:'
-           for mis in sorted(missing_3):
-              header += " {},".format(mis)
-           header += "\n"
-    header += "/" 
-	# Prepend header to begining of file
+            header += '/       Block 3:'
+            for mis in sorted(missing_3):
+                header += " {},".format(mis)
+            header += "\n"
+    header += "/"
+    # Prepend header to begining of file
     partisn = header + partisn
-    
+
     # Write to the file
     f.write(partisn)
 
+
 
[docs]def format_repeated_vector(vector): """Creates string out of a vector with the PARTISN format for repeated numbers. - + Parameters: ----------- vector: list Desired list to be formatted - + Returns: -------- string: string Formatted string representation of the vector - + Example: vector = [1, 2, 0, 0, 0, 7, 8, 3, 3] string = "1 2 3R 0 7 8 2R 3" """ - - # put vector into a list of lists formatted as + + # put vector into a list of lists formatted as # [[number , R], [number, R], ...] # where 'R' is the number of times that 'number' is repeated tot = 0 @@ -817,25 +856,25 @@

Source code for pyne.partisn

             else:
                 repeats.append([val, 1])
                 tot += 1
-    
+
     # make into a string of characters
     string = ""
     n = 0
     for pair in repeats:
         if pair[1] == 1:
             string += "{} ".format(pair[0])
-            n =+ 1
+            n = + 1
         else:
             string += "{0}R {1} ".format(pair[1], pair[0])
             n += 2
-
- return string + + return string
[docs]def mesh_to_isotropic_source(m, tag): """This function reads an isotropic source definition from a supplied mesh and creates a corresponding PARTISN SOURCF input card. The input card wraps - to 80 characters and utilizes the "R" repeation notation for zero values + to 80 characters and utilizes the "R" repeation notation for zero values (e.g. 4R 0 = 0 0 0 0). Parameters: @@ -854,7 +893,7 @@

Source code for pyne.partisn

     # get data
     temp = m.structured_ordering
     m.structured_ordering = "zyx"
-    m.src = IMeshTag(name=tag)
+    m.src = NativeMeshTag(name=tag)
     data = m.src[:].transpose()[::-1]
     m.structured_ordering = temp
     ninti = len(m.structured_coords[0]) - 1
@@ -866,7 +905,7 @@ 

Source code for pyne.partisn

     for e_row in data:
         for src in e_row:
             if src == 0.0:
-               zero_count += 1
+                zero_count += 1
             else:
                 if zero_count != 0:
                     if zero_count == 1:
@@ -878,7 +917,7 @@ 

Source code for pyne.partisn

             if count % ninti == 0:
                 if zero_count != 0:
                     if zero_count == 1:
-                       s += " 0"
+                        s += " 0"
                     else:
                         s += " {}R 0".format(zero_count)
                     zero_count = 0
@@ -886,8 +925,8 @@ 

Source code for pyne.partisn

             count += 1
 
     # wrap to 80 characters
-    s = "\n".join(wrap(s, 80))
- return s + s = "\n".join(wrap(s, 80)) + return s
[docs]def isotropic_vol_source(geom, mesh, cells, spectra, intensities, **kwargs): @@ -914,27 +953,27 @@

Source code for pyne.partisn

         The normalized energy spectrum for each of the cells. If spectra are
         not normalized, they will be normalized in this function.
     intensities : list of floats
-        The volumetric intensity (i.e. s^-1 cm^-3) for each geometry cell. 
+        The volumetric intensity (i.e. s^-1 cm^-3) for each geometry cell.
     tag_name : str, optional, default = 'src'
         The name of the tag for which source data will be tagged on the mesh.
     num_rays : int, optional, default = 10
-        For discretize_geom. The number of rays to fire in each mesh row for 
+        For discretize_geom. The number of rays to fire in each mesh row for
         each direction.
     grid : boolean, optional, default = False
-        For discretize_geom. If false, rays starting points are chosen randomly 
+        For discretize_geom. If false, rays starting points are chosen randomly
         (on the boundary) for each mesh row. If true, a linearly spaced grid of
-        starting points is used, with dimension sqrt(num_rays) x sqrt(num_rays). 
+        starting points is used, with dimension sqrt(num_rays) x sqrt(num_rays).
         In this case, "num_rays" must be a perfect square.
-  
+
     Returns:
     --------
     output : str
         PARTISN SOURF card representing the requested source
     dg : record array
-        The output of dagmc.discretize_geom; stored in a one dimensional array, 
+        The output of dagmc.discretize_geom; stored in a one dimensional array,
         each entry containing the following
         fields:
-        :idx: int 
+        :idx: int
             The volume element index.
         :cell: int
             The geometry cell number.
@@ -952,10 +991,10 @@ 

Source code for pyne.partisn

 
     # Check lengths of input
     if len(cells) != len(spectra) or len(cells) != len(intensities):
-       raise ValueError("Cells, spectra, intensities must be the same length")
+        raise ValueError("Cells, spectra, intensities must be the same length")
     lengths = [len(x) for x in spectra]
     if not all(lengths[0] == length for length in lengths):
-       raise ValueError("Spectra must all be the same length")
+        raise ValueError("Spectra must all be the same length")
 
     # Normalize spectra
     norm_spectra = []
@@ -967,22 +1006,25 @@ 

Source code for pyne.partisn

     intensities = {cell: inten for cell, inten in zip(cells, intensities)}
 
     # ray trace
-    dagmc.load(geom)
-    dg = dagmc.discretize_geom(mesh, num_rays=num_rays, grid=grid)
+    if not HAVE_DAGMC:
+        raise RuntimeError("DAGMC is not available."
+                           "Cannot run isotropic_vol_source().")
+    else:
+        dagmc.load(geom)
+        dg = dagmc.discretize_geom(mesh, num_rays=num_rays, grid=grid)
 
     # determine  source intensities
     data = np.zeros(shape=(len(mesh), len(spectra[0])))
     for row in dg:
-       if row[1] in cells:
-           data[row[0], :] += np.multiply(row[2]*intensities[row[1]], 
-                                          norm_spectra[row[1]])
+        if row[1] in cells:
+            data[row[0], :] += np.multiply(row[2]*intensities[row[1]],
+                                           norm_spectra[row[1]])
 
-    mesh.tag = IMeshTag(len(spectra[0]), float, name=tag_name)
+    mesh.tag = NativeMeshTag(len(spectra[0]), float, name=tag_name)
     mesh.tag[:] = data
-    
-    output = mesh_to_isotropic_source(mesh, tag_name)
- return output, dg + output = mesh_to_isotropic_source(mesh, tag_name) + return output, dg
@@ -1048,8 +1090,8 @@

Navigation

+ + + + + @@ -71,17 +74,76 @@

Source code for pyne.r2s

 from pyne.mesh import Mesh
 from pyne.mcnp import Meshtal
 from pyne.alara import mesh_to_fluxin, record_to_geom, photon_source_to_hdf5, \
-                       photon_source_hdf5_to_mesh
+    photon_source_hdf5_to_mesh
 
 warn(__name__ + " is not yet QA compliant.", QAWarning)
 
 
-
[docs]def irradiation_setup(flux_mesh, cell_mats, alara_params, tally_num=4, - geom=None, num_rays=10, grid=False, flux_tag="n_flux", +
[docs]def resolve_mesh(mesh_reference, tally_num=None, flux_tag="n_flux", + output_material=False): + """This function creates a method that will consume many mesh-like objects + (e.g. mesh, an h5m file, a meshtal file, etc) and returns a robust PyNE + mesh object accordingly. + + Parameters + ---------- + mesh_reference : Mesh object, unstructured mesh file, Meshtal, meshtal + file, or PyNE Meshtal object. + The source of the neutron flux information. This can be a PyNE Meshtal + object, a pyne Mesh object, or the filename an MCNP meshtal file, or + the filename of an unstructured mesh tagged with fluxes. + tally_num : int + The MCNP FMESH4 tally number of the neutron flux tally within the + meshtal file. + flux_tag : str, optional + The tag name for the neutron flux. + output_material : bool, optional + If true, output mesh will have materials as determined by + dagmc.discretize_geom(). + + Returns + ------- + m : PyNE mesh object + The PyNE mesh object of the flux data. + """ + + # mesh_reference is Mesh object + if isinstance(mesh_reference, Mesh): + m = mesh_reference + # mesh_reference is unstructured mesh file + elif isinstance(mesh_reference, str) and isfile(mesh_reference) \ + and mesh_reference.endswith(".h5m"): + m = Mesh(structured=False, mesh=mesh_reference) + # mesh_reference is Meshtal or meshtal file + elif tally_num is not None: + # mesh_reference is meshtal file + if isinstance(mesh_reference, str) and isfile(mesh_reference): + mesh_reference = Meshtal(mesh_reference, + {tally_num: (flux_tag, flux_tag + "_err", + flux_tag + "_total", + flux_tag + "_err_total")}, + meshes_have_mats=output_material) + m = mesh_reference.tally[tally_num] + # mesh_reference is Meshtal object + elif isinstance(mesh_reference, Meshtal): + m = mesh_reference.tally[tally_num] + else: + raise ValueError("meshtal argument not a Mesh object, Meshtal" + " object, MCNP meshtal file or meshtal.h5m file.") + # mesh_references is a Meshtal file but no tally_num provided + else: + raise ValueError( + "Need to provide a tally number when reading a Meshtal file") + + return m
+ + +
[docs]def irradiation_setup(flux_mesh, cell_mats, cell_fracs, alara_params, + tally_num=4, num_rays=10, grid=False, flux_tag="n_flux", fluxin="alara_fluxin", reverse=False, - alara_inp="alara_geom", alara_matlib="alara_matlib", + alara_inp="alara_inp", alara_matlib="alara_matlib", output_mesh="r2s_step1.h5m", output_material=False, - sub_voxel=False): + decay_times=None, sub_voxel=False): """This function is used to setup the irradiation inputs after the first R2S transport step. @@ -91,17 +153,16 @@

Source code for pyne.r2s

         The source of the neutron flux information. This can be a PyNE Meshtal
         object, a pyne Mesh object, or the filename an MCNP meshtal file, or
         the filename of an unstructured mesh tagged with fluxes.
-    tally_num : int
-        The MCNP FMESH4 tally number of the neutron flux tally within the
-        meshtal file.
     cell_mats : dict
         Maps geometry cell numbers to PyNE Material objects.
+    cell_fracs : record array
+        The output of dagmc.discretize_geom().
     alara_params : str
         The ALARA input blocks specifying everything except the geometry
         and materials. This can either be passed as string or as a file name.
-    geom : str, optional
-        The file name of a DAGMC-loadable faceted geometry. This is only
-        necessary if the geometry is not already loaded into memory.
+    tally_num : int
+        The MCNP FMESH4 tally number of the neutron flux tally within the
+        meshtal file.
     num_rays : int, optional
         The number of rays to fire down a mesh row for geometry discretization.
         This number must be a perfect square if grid=True.
@@ -110,7 +171,7 @@ 

Source code for pyne.r2s

         rays. If true, a grid of sqrt(num_rays) x sqrt(num_rays) rays is used
         for each mesh row.
     flux_tag : str, optional
-        The iMesh tag for the neutron flux.
+        The mesh tag for the neutron flux.
     fluxin : str, optional
         The name of the ALARA fluxin file to be created.
     reverse : bool, optional
@@ -129,44 +190,13 @@ 

Source code for pyne.r2s

     output_material : bool, optional
         If true, output mesh will have materials as determined by
         dagmc.discretize_geom()
+    decay_times: list
+        List of the decay times. If no decay times given, use '1 s'.
     sub_voxel : bool, optional
         If true, sub-voxel r2s work flow  will be used.
     """
-    from pyne.dagmc import load, discretize_geom
-    if geom is not None and isfile(geom):
-        load(geom)
-
-    #  flux_mesh is Mesh object
-    if isinstance(flux_mesh, Mesh):
-        m = flux_mesh
-    #  flux_mesh is unstructured mesh file
-    elif isinstance(flux_mesh, str) and isfile(flux_mesh) \
-         and flux_mesh.endswith(".h5m"):
-            m = Mesh(structured=False, mesh=flux_mesh)
-    #  flux_mesh is Meshtal or meshtal file
-    else:
-        #  flux_mesh is meshtal file
-        if isinstance(flux_mesh, str) and isfile(flux_mesh):
-            flux_mesh = Meshtal(flux_mesh,
-                                {tally_num: (flux_tag, flux_tag + "_err",
-                                             flux_tag + "_total",
-                                             flux_tag + "_err_total")},
-                                meshes_have_mats=output_material)
-            m = flux_mesh.tally[tally_num]
-        #  flux_mesh is Meshtal object
-        elif isinstance(flux_mesh, Meshtal):
-            m = flux_mesh.tally[tally_num]
-        else:
-            raise ValueError("meshtal argument not a Mesh object, Meshtal"
-                             " object, MCNP meshtal file or meshtal.h5m file.")
 
-    if m.structured:
-        cell_fracs = discretize_geom(m, num_rays=num_rays, grid=grid)
-        # tag cell fracs
-        if sub_voxel:
-            m.tag_cell_fracs(cell_fracs)
-    else:
-        cell_fracs = discretize_geom(m)
+    m = resolve_mesh(flux_mesh, tally_num, flux_tag, output_material)
 
     if output_material:
         m.cell_fracs_to_mats(cell_fracs, cell_mats)
@@ -176,14 +206,24 @@ 

Source code for pyne.r2s

     record_to_geom(m, cell_fracs, cell_mats, alara_inp, alara_matlib,
                    sub_voxel=sub_voxel)
 
+    # write decay times into alara_inp
+    if decay_times is None:
+        decay_times = ['1 s']
+    decay_str = 'cooling\n'
+    for dc in decay_times:
+        decay_str = ''.join([decay_str, '    ', dc, '\n'])
+    decay_str = ''.join([decay_str, 'end\n'])
+    with open(alara_inp, 'a') as f:
+        f.write(decay_str)
+
     if isfile(alara_params):
         with open(alara_params, 'r') as f:
             alara_params = f.read()
 
     with open(alara_inp, 'a') as f:
         f.write("\n" + alara_params)
-
- m.write_hdf5(output_mesh) + + m.write_hdf5(output_mesh)
[docs]def photon_sampling_setup(mesh, phtn_src, tags): @@ -194,7 +234,7 @@

Source code for pyne.r2s

     Parameters
     ----------
     mesh : PyNE Mesh
-       The object containing the iMesh instance to be tagged.
+       The object containing the mesh instance to be tagged.
     phtn_src : str
         The path of the ALARA phtn_file.
     tags: dict
@@ -210,11 +250,11 @@ 

Source code for pyne.r2s

         tags = {('U-235', 'shutdown'): 'tag1', ('TOTAL', '1 h'): 'tag2'}
     """
     photon_source_to_hdf5(phtn_src)
-    h5_file = phtn_src + ".h5"
- photon_source_hdf5_to_mesh(mesh, h5_file, tags) + h5_file = phtn_src + ".h5" + photon_source_hdf5_to_mesh(mesh, h5_file, tags)
-
[docs]def total_photon_source_intensity(m, tag_name): +
[docs]def total_photon_source_intensity(m, tag_name, sub_voxel=False): """This function reads mesh tagged with photon source densities and returns the total photon emission desinty. @@ -223,7 +263,10 @@

Source code for pyne.r2s

     m : PyNE Mesh
        The mesh-based photon emission density distribution in p/cm3/s.
     tag_name : str
-       The name of the tag on the mesh with the photon emission density information.
+       The name of the tag on the mesh with the photon emission density
+       information.
+    sub_voxel: bool, optional
+        If true, sub-voxel r2s work flow will be used.
 
     Returns
     -------
@@ -231,13 +274,22 @@ 

Source code for pyne.r2s

         The total photon emission density across the entire mesh (p/s).
     """
 
-    sd_tag = m.mesh.getTagHandle(tag_name)
-    intensity = 0.
+    sd_tag = m.get_tag(tag_name)
+    intensity = 0.0
+    if sub_voxel:
+        cell_fracs = m.cell_fracs[:]
+    else:
+        # create a cell_fracs
+        cell_fracs = np.ones(shape=(len(m), 1), dtype=float)
+    max_num_cells = len(cell_fracs[0])
+    num_e_groups = len(sd_tag[list(m.iter_ve())[0]]) / max_num_cells
     for idx, _, ve in m:
-        vol = m.elem_volume(ve)
         ve_data = sd_tag[ve]
-        intensity += vol*np.sum(ve_data)
- return intensity + for svid in range(max_num_cells): + vol = m.elem_volume(ve) * cell_fracs[idx][svid] + sv_data = ve_data[num_e_groups*svid:num_e_groups*(svid+1)] + intensity += vol * np.sum(sv_data) + return intensity
@@ -303,8 +355,8 @@

Navigation

+ + + + + @@ -78,8 +81,8 @@

Source code for pyne.rxdata

     def __init__(self, data):
         self.data = data
 
-    def write(self, filename, file_type_out):
- pass + def write(self, filename, file_type_out): + pass
[docs]class DoubleSpinDict(collections.MutableMapping): @@ -118,8 +121,8 @@

Source code for pyne.rxdata

                 return (int(round(2.0*key[0])), key[1])
             if len(key) == 3:
                 return (int(round(2.0*key[0])), key[1], key[2])
-        except TypeError:
- return key + except TypeError: + return key
@@ -185,8 +188,8 @@

Navigation

+ + + + + @@ -246,8 +249,8 @@

Source code for pyne.serpent

     res = {}
     exec(f, res, res)
     if '__builtins__' in res:
-        del res['__builtins__']
- return res + del res['__builtins__'] + return res
[docs]def parse_dep(depfile, write_py=False, make_mats=True): @@ -352,8 +355,8 @@

Source code for pyne.serpent

     dep = {}
     exec(f, dep, dep)
     if '__builtins__' in dep:
-        del dep['__builtins__']
- return dep + del dep['__builtins__'] + return dep
[docs]def parse_det(detfile, write_py=False): @@ -433,8 +436,8 @@

Source code for pyne.serpent

     # Execute the adjusted file
     det = {}
     exec(f, {}, det)
-
- return det + + return det
@@ -500,8 +503,8 @@

Navigation

+ + + + + @@ -210,8 +213,8 @@

Source code for pyne.transmute.chainsolve

         y = from_atom_frac(y_atoms, atoms_per_molecule=x.atoms_per_molecule)
         # even though it doesn't look like it, the following line is actually
         #   mass_y = MW_y * mass_x / MW_x
-        y.mass *= x.mass / mw_x 
- return y + y.mass *= x.mass / mw_x + return y
def _transmute_partial(self, nuc): """Core method to transmute a material into its daughters. @@ -409,8 +412,8 @@

Source code for pyne.transmute.chainsolve

         decay_branches = {}
         children = data.decay_children(nuc)
         for child in children:
-            decay_branches[child] = data.branch_ratio(nuc, child)
- return decay_branches + decay_branches[child] = data.branch_ratio(nuc, child) + return decay_branches
@@ -476,8 +479,8 @@

Navigation

+ + + + + @@ -73,8 +76,8 @@

Source code for pyne.utils

                         use_warnings, fromendl_tok
 
 
-
[docs]class QAWarning(UserWarning):
- pass +
[docs]class QAWarning(UserWarning): + pass
time_conv_dict = {'as': 1e-18, 'attosec': 1e-18, @@ -114,9 +117,15 @@

Source code for pyne.utils

                   'd': 86400.0,
                   'day': 86400.0,
                   'days': 86400.0,
+                  'w': 86400.0*7.0,
+                  'week': 86400.0*7.0,
+                  'weeks': 86400.0*7.0,
                   'y': 86400.0*365.25,
                   'year': 86400.0*365.25,
                   'years': 86400.0*365.25,
+                  'c': 86400.0*365.25*100,
+                  'century': 86400.0*365.25*100,
+                  'centuries': 86400.0*365.25*100,
                   }
 
 
@@ -136,9 +145,12 @@ 

Source code for pyne.utils

         Time value in [sec].
 
     """
-    sec_time = input_time * time_conv_dict[units.lower()]
- return sec_time - + conv = time_conv_dict.get(units.lower(), None) + if conv: + sec_time = input_time * conv + return sec_time + else: + raise ValueError('Invalid units: {0}'.format(units))
barn_conv_dict = { 'mb': 1E-3, @@ -169,8 +181,8 @@

Source code for pyne.utils

     barn_xs :
         Cross section value in [barns].
 
-    """
- return xs * barn_conv_dict[units.lower()] + """ + return xs * barn_conv_dict[units.lower()]
[docs]def from_barns(xs, units): @@ -188,8 +200,8 @@

Source code for pyne.utils

     unit_xs :
         Cross section value in [units].
 
-    """
- return xs / barn_conv_dict[units.lower()] + """ + return xs / barn_conv_dict[units.lower()]
######################### @@ -206,8 +218,8 @@

Source code for pyne.utils

     """
     head = "\033[1;32m" if USE_COLOR else "*** MESSAGE ***: "
     tail = "\033[0m" if USE_COLOR else ""
-    msg = head + s + tail
- return msg + msg = head + s + tail + return msg
[docs]def failure(s): @@ -217,8 +229,8 @@

Source code for pyne.utils

     """
     head = "\033[1;31m" if USE_COLOR else "*** FAILURE ***: "
     tail = "\033[0m" if USE_COLOR else ""
-    msg = head + s + tail
- return msg + msg = head + s + tail + return msg
[docs]def warning(s): @@ -227,8 +239,8 @@

Source code for pyne.utils

     """
     head = "\033[1;33m" if USE_COLOR else "*** WARNING ***: "
     tail = "\033[0m" if USE_COLOR else ""
-    msg = head + s + tail
- return msg + msg = head + s + tail + return msg
################################## ### Path manipulation routines ### @@ -244,8 +256,8 @@

Source code for pyne.utils

         os.remove(path)
     elif os.path.isdir(path):
         remove_tree(path, verbose=False)
-    else:
- pass + else: + pass
@@ -311,8 +323,8 @@

Navigation

+ + + + + @@ -48,8 +40,7 @@ })(); } - - +
- lib.read(atab.name) + lib = self.libs[atab] = ace.Library(atab.abspath or atab.path) + lib.read(atab.name)
[docs]class StatePointDataSource(DataSource): """Data source for reactions coming from openmc state points @@ -1270,8 +1273,8 @@

Source code for pyne.xs.data_source

         rxkey = (nuc, rx)
         if rxkey not in self.reactions:
             return None
-        else:
- return self.reactions[rxkey] + else: + return self.reactions[rxkey]
@@ -1337,8 +1340,8 @@

Navigation

- @@ -31,39 +29,19 @@
- + - - + + + +
_atomic_data.h
-
1 #include <map>
6 
7 namespace pyne
8 {
14 
16 
19  void _insert_abund_map();
20 
22  extern std::map<int,double> natural_abund_map;
23 
25  extern std::map<int,double> atomic_mass_map;
26 
29  extern std::map<int,double> atomic_mass_error_map;
30 } // namespace pyne
void _insert_atomic_mass_map()
Definition: _atomic_data.cpp:42
-
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: data.h:55
-
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: data.h:90
-
std::map< int, double > atomic_mass_error_map
-
void _load_atomic_mass_map_memory()
Definition: _atomic_data.cpp:7
-
void _insert_abund_map()
Definition: _atomic_data.cpp:3397
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
1 /*
2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5 !!!!!! This file has been autogenerated, modify atomicgen.py !!!!!!!!!!
6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9 */
14 #include <map>
15 
16 namespace pyne
17 {
23 
25 
28  void _insert_abund_map();
29 
31  extern std::map<int,double> natural_abund_map;
32 
34  extern std::map<int,double> atomic_mass_map;
35 
38  extern std::map<int,double> atomic_mass_error_map;
39 } // namespace pyne
void _insert_atomic_mass_map()
Definition: _atomic_data.cpp:51
+
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: atomic_data.h:35
+
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: atomic_data.h:32
+
void _load_atomic_mass_map_memory()
Definition: _atomic_data.cpp:16
+
std::map< int, double > atomic_mass_error_map
Definition: atomic_data.h:39
+
void _insert_abund_map()
Definition: _atomic_data.cpp:3407
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/__decay_8h_source.html b/cppapi/html/__decay_8h_source.html index 405b4163..8cccb937 100644 --- a/cppapi/html/__decay_8h_source.html +++ b/cppapi/html/__decay_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/_decay.h Source File + + +PyNE C++: /root/repo/src/_decay.h Source File - @@ -31,39 +29,19 @@
- + - - + + + +
1 #ifdef PYNE_DECAY_IS_DUMMY
2 #ifndef PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
3 #define PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
4 
5 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7 // WARNING
8 // This file has been auto generated
9 // Do not modify directly. You have
10 // been warned. This is that warning
11 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13 
14 #include <map>
15 //#include <cmath>
16 
17 #ifndef PYNE_IS_AMALGAMATED
18 #include "data.h"
19 #include "nucname.h"
20 #endif
21 
22 namespace pyne {
23 namespace decayers {
24 
25 extern const int all_nucs[4];
26 
27 std::map<int, double> decay(std::map<int, double> comp, double t);
28 
29 } // namespace decayers
30 } // namespace pyne
31 
32 #endif // PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
33 #endif // PYNE_DECAY_IS_DUMMY
Implements basic nuclear data functions.
struct pyne::decay decay
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/annotated.html b/cppapi/html/annotated.html index 34385999..b2cef502 100644 --- a/cppapi/html/annotated.html +++ b/cppapi/html/annotated.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
 Cray_buffers  CSamplerMesh based Monte Carlo source sampling  Cscattering_lengthsStruct matching the '/neutron/scattering_lengths' table in nuc_data.h5 - CswapmapcompareData access functions - CTally - Ctally_struct - CwimsdfpyStruct matching the '/neutron/wimsd_fission_product' table in nuc_data.h5 + CSourceParticle + CswapmapcompareData access functions + CTally + Ctally_struct + CValueErrorException representing value errors of all kinds + CwimsdfpyStruct matching the '/neutron/wimsd_fission_product' table in nuc_data.h5  Nsct_module  Cpolyhedron  Ntracking_data_structures @@ -143,16 +120,17 @@  Ctrackingunitsc  Ctrackingunitsp_r  CCartVect - Csimple_xs - Cxd_complex_tComplex type struct, matching PyTables definition + Cpyne_cram_transmute_info_tag + Csimple_xs + Cxd_complex_tComplex type struct, matching PyTables definition
diff --git a/cppapi/html/arrowdown.png b/cppapi/html/arrowdown.png deleted file mode 100644 index 0b63f6d3..00000000 Binary files a/cppapi/html/arrowdown.png and /dev/null differ diff --git a/cppapi/html/arrowright.png b/cppapi/html/arrowright.png deleted file mode 100644 index c6ee22f9..00000000 Binary files a/cppapi/html/arrowright.png and /dev/null differ diff --git a/cppapi/html/atomic__data_8h_source.html b/cppapi/html/atomic__data_8h_source.html index 9675dfc1..7d9305f9 100644 --- a/cppapi/html/atomic__data_8h_source.html +++ b/cppapi/html/atomic__data_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/lucas/opt/gcc-6/pyne-dev/pyne/src/atomic_data.h Source File + + +PyNE C++: /root/repo/src/atomic_data.h Source File - @@ -31,39 +29,19 @@
- + - - + + + +
atomic_data.h
-
1 #include <map>
6 
7 namespace pyne
8 {
14 
16 
19  void _insert_abund_map();
20 
22  extern std::map<int,double> natural_abund_map;
23 
25  extern std::map<int,double> atomic_mass_map;
26 
29  extern std::map<int,double> atomic_mass_error_map;
30 } // namespace pyne
void _insert_atomic_mass_map()
Definition: _atomic_data.cpp:42
-
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: atomic_data.h:25
-
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: atomic_data.h:22
-
void _load_atomic_mass_map_memory()
Definition: _atomic_data.cpp:7
-
std::map< int, double > atomic_mass_error_map
Definition: atomic_data.h:29
-
void _insert_abund_map()
Definition: _atomic_data.cpp:3397
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
1 /*
2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5 !!!!!! This file has been autogenerated, modify atomicgen.py !!!!!!!!!!
6 !!!!!! DO NOT MODIFY THIS FILE BY HAND!! !!!!!!!!!!
7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10 */
15 #include <map>
16 
17 namespace pyne
18 {
24 
26 
29  void _insert_abund_map();
30 
32  extern std::map<int,double> natural_abund_map;
33 
35  extern std::map<int,double> atomic_mass_map;
36 
39  extern std::map<int,double> atomic_mass_error_map;
40 } // namespace pyne
void _insert_atomic_mass_map()
Definition: _atomic_data.cpp:51
+
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: atomic_data.h:35
+
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: atomic_data.h:32
+
void _load_atomic_mass_map_memory()
Definition: _atomic_data.cpp:16
+
std::map< int, double > atomic_mass_error_map
Definition: atomic_data.h:39
+
void _insert_abund_map()
Definition: _atomic_data.cpp:3407
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/class_cart_vect-members.html b/cppapi/html/class_cart_vect-members.html index 21dbafdb..fd3da8ce 100644 --- a/cppapi/html/class_cart_vect-members.html +++ b/cppapi/html/class_cart_vect-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
CartVect() (defined in CartVect)CartVectinline CartVect(double tx, double ty, double tz) (defined in CartVect)CartVectinline CartVect(const CartVect &other) (defined in CartVect)CartVectinline - len() const (defined in CartVect)CartVectinline - lensqr() const (defined in CartVect)CartVectinline + len() const (defined in CartVect)CartVectinline + lensqr() const (defined in CartVect)CartVectinline operator*=(const CartVect &other) (defined in CartVect)CartVectinline operator*=(double a) (defined in CartVect)CartVectinline operator+=(const CartVect &other) (defined in CartVect)CartVectinline operator-=(const CartVect &other) (defined in CartVect)CartVectinline operator/=(double a) (defined in CartVect)CartVectinline - operator~() const (defined in CartVect)CartVectinline + operator~() const (defined in CartVect)CartVectinline set(double tx, double ty, double tz) (defined in CartVect)CartVectinline set(const double *c) (defined in CartVect)CartVectinline - x() const (defined in CartVect)CartVectinline - y() const (defined in CartVect)CartVectinline - z() const (defined in CartVect)CartVectinline + x() const (defined in CartVect)CartVectinline + y() const (defined in CartVect)CartVectinline + z() const (defined in CartVect)CartVectinline
diff --git a/cppapi/html/class_cart_vect.html b/cppapi/html/class_cart_vect.html index a127ba68..c8daa3b7 100644 --- a/cppapi/html/class_cart_vect.html +++ b/cppapi/html/class_cart_vect.html @@ -3,7 +3,8 @@ - + + PyNE C++: CartVect Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  CartVect (double tx, double ty, double tz)   - +  CartVect (const CartVect &other)   - + void set (double tx, double ty, double tz)   - + void set (const double *c)   - -double x () const -  - -double y () const -  - -double z () const -  - + +double x () const +  + +double y () const +  + +double z () const +  + CartVectoperator+= (const CartVect &other)   - + CartVectoperator-= (const CartVect &other)   - + CartVectoperator*= (const CartVect &other)   - -double lensqr () const -  - -double len () const -  - -CartVect operator~ () const -  - + +double lensqr () const +  + +double len () const +  + +CartVect operator~ () const +  + CartVectoperator*= (double a)   - + CartVectoperator/= (double a)  
The documentation for this class was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/measure.cpp
  • +
  • /root/repo/src/measure.cpp
diff --git a/cppapi/html/classes.html b/cppapi/html/classes.html index 9520308b..ac2d7a73 100644 --- a/cppapi/html/classes.html +++ b/cppapi/html/classes.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Index @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
Class Index
-
A | B | C | D | E | F | G | H | I | L | M | N | P | Q | R | S | T | W | X
+
a | b | c | d | e | f | g | h | i | l | m | n | p | q | r | s | t | v | w | x
- - + + + - - - + + - + + - - - - - - - - - - - - - - + + + + + + + + + + +
  A  
-
  H  
-
  P  
-
dose (pyne)   ndsfpysub (pyne)   
  e  
-
  p  
+
  a  
+
edge_points (pyne)   IndeterminateReactionForm (pyne::rxname)   polyhedron (sct_module)   tally_struct (pyne)   
EnrichmentInfiniteLoopError (pyne::enrichment)   InvalidSimpleXS (pyne)   pyne_cram_transmute_info_tag   trackingunitsc (tracking_data_structures)   
AliasTable (pyne)   EnrichmentIterationLimit (pyne::enrichment)   
  l  
+
  q  
+
trackingunitsp_r (tracking_data_structures)   
alpha (pyne)   EnrichmentIterationNaN (pyne::enrichment)   
  v  
AliasTable (pyne)   HDF5BoundsError (h5wrap)   PathNotFound (h5wrap)   
  C  
-
HomogenousTypeTable (h5wrap)   
  S  
-
ecbp (pyne)   polyhedron (sct_module)   
  I  
-
edge_points (pyne)   
  q  
+
atomic (pyne)   
  f  
+
level_data (pyne)   q_val_data (pyne)   
atomic_mass_data (pyne)   
  m  
+
  r  
+
ValueError (pyne)   
  b  
+
FileNotFound (pyne)   
  w  
CartVect   Sampler (pyne)   
  g  
+
FileNotHDF5 (h5wrap)   Material (pyne)   ray_buffers (pyne)   
beta (pyne)   
  g  
+
material_data (pyne)   
  s  
+
wimsdfpy (pyne)   
  c  
+
MaterialProtocolError (pyne)   
  x  
Cascade (pyne::enrichment)   IndeterminateNuclideForm (pyne::nucname)   
  T  
-
q_val_data (pyne)   
  E  
-
IndeterminateReactionForm (pyne::rxname)   gamma (pyne)   
  r  
-
InvalidSimpleXS (pyne)   Tally (pyne)   
  l  
-
EnrichmentInfiniteLoopError (pyne::enrichment)   
  M  
-
  a  
-
ray_buffers (pyne)   
EnrichmentIterationLimit (pyne::enrichment)   level_data (pyne)   
  s  
-
EnrichmentIterationNaN (pyne::enrichment)   Material (pyne)   alpha (pyne)   
  m  
-
  F  
-
MaterialProtocolError (pyne)   atomic (pyne)   scattering_lengths (pyne)   
  N  
-
atomic_mass_data (pyne)   material_data (pyne)   simple_xs   
FileNotFound (pyne)   
  b  
-
meshcell (tracking_data_structures)   singular (tracking_data_structures)   
FileNotHDF5 (h5wrap)   NotANuclide (pyne::nucname)   
  n  
-
swapmapcompare (pyne)   
  G  
-
NotAParticle (pyne::particle)   beta (pyne)   
  t  
-
NotAReaction (pyne::rxname)   
  d  
-
ndsfpy (pyne)   
GroupNotFound (h5wrap)   tally_struct (pyne)   
decay (pyne)   
gamma (pyne)   meshcell (tracking_data_structures)   Sampler (pyne)   
CartVect   GroupNotFound (h5wrap)   
  n  
+
scattering_lengths (pyne)   xd_complex_t   
Cascade (pyne::enrichment)   
  h  
+
simple_xs   
  d  
+
ndsfpy (pyne)   singular (tracking_data_structures)   
HDF5BoundsError (h5wrap)   ndsfpysub (pyne)   SourceParticle (pyne)   
decay (pyne)   HomogenousTypeTable (h5wrap)   NotANuclide (pyne::nucname)   swapmapcompare (pyne)   
dose (pyne)   
  i  
+
NotAParticle (pyne::particle)   
  t  
+
  e  
+
NotAReaction (pyne::rxname)   
IndeterminateNuclideForm (pyne::nucname)   
  p  
+
Tally (pyne)   
ecbp (pyne)   
PathNotFound (h5wrap)   
-
A | B | C | D | E | F | G | H | I | L | M | N | P | Q | R | S | T | W | X
+
a | b | c | d | e | f | g | h | i | l | m | n | p | q | r | s | t | v | w | x
diff --git a/cppapi/html/classh5wrap_1_1_file_not_h_d_f5-members.html b/cppapi/html/classh5wrap_1_1_file_not_h_d_f5-members.html index e63f30ee..86f8d05a 100644 --- a/cppapi/html/classh5wrap_1_1_file_not_h_d_f5-members.html +++ b/cppapi/html/classh5wrap_1_1_file_not_h_d_f5-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
FileNotHDF5()h5wrap::FileNotHDF5inline FileNotHDF5(std::string fname)h5wrap::FileNotHDF5inline - what() const h5wrap::FileNotHDF5inlinevirtual + what() consth5wrap::FileNotHDF5inlinevirtual ~FileNotHDF5()h5wrap::FileNotHDF5inline
diff --git a/cppapi/html/classh5wrap_1_1_file_not_h_d_f5.html b/cppapi/html/classh5wrap_1_1_file_not_h_d_f5.html index 776478b8..87b856e5 100644 --- a/cppapi/html/classh5wrap_1_1_file_not_h_d_f5.html +++ b/cppapi/html/classh5wrap_1_1_file_not_h_d_f5.html @@ -3,7 +3,8 @@ - + + PyNE C++: h5wrap::FileNotHDF5 Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  FileNotHDF5 ()  default constructor
  - +  ~FileNotHDF5 () throw ()  default destructor
  - +  FileNotHDF5 (std::string fname)  constructor with the filename
  - -virtual const char * what () const throw () - helpful error message that includes the filename
-  + +virtual const char * what () const throw () + helpful error message that includes the filename

Detailed Description

Custom exception for when an existing file is not in a valid HDF5 format.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classh5wrap_1_1_group_not_found-members.html b/cppapi/html/classh5wrap_1_1_group_not_found-members.html index 8529231d..ec5a5e9e 100644 --- a/cppapi/html/classh5wrap_1_1_group_not_found-members.html +++ b/cppapi/html/classh5wrap_1_1_group_not_found-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
GroupNotFound()h5wrap::GroupNotFoundinline GroupNotFound(std::string fname, std::string gname)h5wrap::GroupNotFoundinline - what() const h5wrap::GroupNotFoundinlinevirtual + what() consth5wrap::GroupNotFoundinlinevirtual ~GroupNotFound()h5wrap::GroupNotFoundinline
diff --git a/cppapi/html/classh5wrap_1_1_group_not_found.html b/cppapi/html/classh5wrap_1_1_group_not_found.html index ef448394..be154eec 100644 --- a/cppapi/html/classh5wrap_1_1_group_not_found.html +++ b/cppapi/html/classh5wrap_1_1_group_not_found.html @@ -3,7 +3,8 @@ - + + PyNE C++: h5wrap::GroupNotFound Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  GroupNotFound ()  default constructor
  - +  ~GroupNotFound () throw ()  default destructor
  - +  GroupNotFound (std::string fname, std::string gname)  constructor with the filename and the groupname
  - -virtual const char * what () const throw () - helpful error message that includes the filename and the groupname
-  + +virtual const char * what () const throw () + helpful error message that includes the filename and the groupname

Detailed Description

Custom exception for when a group cannot be found in an HDF5 file.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error-members.html b/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error-members.html index bc6698de..d3c2a564 100644 --- a/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error-members.html +++ b/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error.html b/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error.html index 3f76e3bc..3e2e065f 100644 --- a/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error.html +++ b/cppapi/html/classh5wrap_1_1_h_d_f5_bounds_error.html @@ -3,7 +3,8 @@ - + + PyNE C++: h5wrap::HDF5BoundsError Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Detailed Description

Custom exception for HDF5 indexing errors.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classh5wrap_1_1_homogenous_type_table-members.html b/cppapi/html/classh5wrap_1_1_homogenous_type_table-members.html index 74a299c8..d1b4cec5 100644 --- a/cppapi/html/classh5wrap_1_1_homogenous_type_table-members.html +++ b/cppapi/html/classh5wrap_1_1_homogenous_type_table-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classh5wrap_1_1_homogenous_type_table.html b/cppapi/html/classh5wrap_1_1_homogenous_type_table.html index 86a9b28f..ecc89eb1 100644 --- a/cppapi/html/classh5wrap_1_1_homogenous_type_table.html +++ b/cppapi/html/classh5wrap_1_1_homogenous_type_table.html @@ -3,7 +3,8 @@ - + + PyNE C++: h5wrap::HomogenousTypeTable< T > Class Template Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  HomogenousTypeTable ()  default constructor
  - +  ~HomogenousTypeTable ()  default destructor
   HomogenousTypeTable (hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)   - + std::vector< T > operator[] (std::string col_name)  index into the table by column name (string)
  - + std::map< std::string, T > operator[] (int m)  index into the table by row
  - - - @@ -142,7 +117,9 @@

A class representing a high-level table contruct whose columns all have the same type T in C/C++ (and the analogous type in HDF5).

Constructor & Destructor Documentation

- + +

◆ HomogenousTypeTable()

+
@@ -193,7 +170,9 @@

Member Data Documentation

- + +

◆ cols

+
@@ -209,14 +188,14 @@

Member Data Documentation


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classh5wrap_1_1_path_not_found-members.html b/cppapi/html/classh5wrap_1_1_path_not_found-members.html index 7a50571e..027107e1 100644 --- a/cppapi/html/classh5wrap_1_1_path_not_found-members.html +++ b/cppapi/html/classh5wrap_1_1_path_not_found-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@

Public Attributes

+
std::string path
 path in file to the data
 
+
int shape [2]
 table shape, rows x columns.
 
std::vector< std::string > cols
 
+
std::map< std::string, std::vector< T > > data
 mapping from column names to column data
 
- + - - + + + +
PathNotFound()h5wrap::PathNotFoundinline PathNotFound(std::string fname, std::string pname)h5wrap::PathNotFoundinline - what() const h5wrap::PathNotFoundinlinevirtual + what() consth5wrap::PathNotFoundinlinevirtual ~PathNotFound()h5wrap::PathNotFoundinline
diff --git a/cppapi/html/classh5wrap_1_1_path_not_found.html b/cppapi/html/classh5wrap_1_1_path_not_found.html index cf4a2e12..87c458e6 100644 --- a/cppapi/html/classh5wrap_1_1_path_not_found.html +++ b/cppapi/html/classh5wrap_1_1_path_not_found.html @@ -3,7 +3,8 @@ - + + PyNE C++: h5wrap::PathNotFound Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  PathNotFound ()  default constructor
  - +  ~PathNotFound () throw ()  default destructor
  - +  PathNotFound (std::string fname, std::string pname)  constructor with the filename and the pathname
  - -virtual const char * what () const throw () - helpful error message that includes the filename and the pathname
-  + +virtual const char * what () const throw () + helpful error message that includes the filename and the pathname

Detailed Description

Custom exception for when a path is not found in an HDF5 file.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classpyne_1_1_alias_table-members.html b/cppapi/html/classpyne_1_1_alias_table-members.html index 4d2ef140..e7dcc7ca 100644 --- a/cppapi/html/classpyne_1_1_alias_table-members.html +++ b/cppapi/html/classpyne_1_1_alias_table-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1_alias_table.html b/cppapi/html/classpyne_1_1_alias_table.html index 509d8670..33647d5e 100644 --- a/cppapi/html/classpyne_1_1_alias_table.html +++ b/cppapi/html/classpyne_1_1_alias_table.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::AliasTable Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
- - - @@ -125,7 +100,9 @@

Detailed Description

A data structure for O(1) source sampling.

Constructor & Destructor Documentation

- + +

◆ AliasTable()

+

Public Attributes

+
int n
 
+
std::vector< double > prob
 Number of bins in the PDF.
 
+
std::vector< int > alias
 Probabilities.
 
@@ -148,7 +125,9 @@

Member Function Documentation

- + +

◆ sample_pdf()

+
@@ -182,15 +161,15 @@

Member Function Documentation


The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/source_sampling.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/source_sampling.cpp
  • +
  • /root/repo/src/source_sampling.h
  • +
  • /root/repo/src/source_sampling.cpp
diff --git a/cppapi/html/classpyne_1_1_file_not_found-members.html b/cppapi/html/classpyne_1_1_file_not_found-members.html index 7ef6d1fc..c270bd09 100644 --- a/cppapi/html/classpyne_1_1_file_not_found-members.html +++ b/cppapi/html/classpyne_1_1_file_not_found-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
FileNotFound()pyne::FileNotFoundinline FileNotFound(std::string fname)pyne::FileNotFoundinline - what() const pyne::FileNotFoundinlinevirtual + what() constpyne::FileNotFoundinlinevirtual ~FileNotFound()pyne::FileNotFoundinline
diff --git a/cppapi/html/classpyne_1_1_file_not_found.html b/cppapi/html/classpyne_1_1_file_not_found.html index a7f76c0a..fb006180 100644 --- a/cppapi/html/classpyne_1_1_file_not_found.html +++ b/cppapi/html/classpyne_1_1_file_not_found.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::FileNotFound Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  FileNotFound ()  default constructor
  - +  ~FileNotFound () throw ()  default destructor
  - +  FileNotFound (std::string fname)  constructor with the filename fname.
  - -virtual const char * what () const throw () - Creates a helpful error message.
-  + +virtual const char * what () const throw () + Creates a helpful error message.

Detailed Description

Custom exception to be thrown in the event that a required file is not able to be found.


The documentation for this class was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/utils.h
  • +
  • /root/repo/src/utils.h
diff --git a/cppapi/html/classpyne_1_1_invalid_simple_x_s-members.html b/cppapi/html/classpyne_1_1_invalid_simple_x_s-members.html index ac00d0ed..79178f87 100644 --- a/cppapi/html/classpyne_1_1_invalid_simple_x_s-members.html +++ b/cppapi/html/classpyne_1_1_invalid_simple_x_s-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
InvalidSimpleXS() (defined in pyne::InvalidSimpleXS)pyne::InvalidSimpleXSinline InvalidSimpleXS(std::string msg)pyne::InvalidSimpleXSinline - what() const pyne::InvalidSimpleXSinlinevirtual + what() constpyne::InvalidSimpleXSinlinevirtual ~InvalidSimpleXS() (defined in pyne::InvalidSimpleXS)pyne::InvalidSimpleXSinline
diff --git a/cppapi/html/classpyne_1_1_invalid_simple_x_s.html b/cppapi/html/classpyne_1_1_invalid_simple_x_s.html index aaeb6fc6..3b4bddb8 100644 --- a/cppapi/html/classpyne_1_1_invalid_simple_x_s.html +++ b/cppapi/html/classpyne_1_1_invalid_simple_x_s.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::InvalidSimpleXS Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  InvalidSimpleXS (std::string msg)  Exception thrown if energy group or rxname are invalid.
  - -virtual const char * what () const throw () - Exception returns the string passed when thrown.
-  + +virtual const char * what () const throw () + Exception returns the string passed when thrown.

Detailed Description

Custom exception for declaring a simple_xs request invalid.


The documentation for this class was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/data.h
  • +
  • /root/repo/src/data.h
diff --git a/cppapi/html/classpyne_1_1_material-members.html b/cppapi/html/classpyne_1_1_material-members.html index 36abf971..82ff6344 100644 --- a/cppapi/html/classpyne_1_1_material-members.html +++ b/cppapi/html/classpyne_1_1_material-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
collapse_elements(std::set< int > exception_znum) (defined in pyne::Material)pyne::Material collapse_elements(int **int_ptr_arry) (defined in pyne::Material)pyne::Material comppyne::Material - decay(double t)pyne::Material - decay_heat()pyne::Material - del_mat(std::set< int > nucset)pyne::Material - del_mat(std::set< std::string > nucset)pyne::Material - del_range(int lower=0, int upper=10000000)pyne::Material - densitypyne::Material - dose_per_g(std::string dose_type, int source=0)pyne::Material - dump_json()pyne::Material - expand_elements()pyne::Material + cram(std::vector< double > A, const int order=14)pyne::Material + decay(double t)pyne::Material + decay_heat()pyne::Material + del_mat(std::set< int > nucset)pyne::Material + del_mat(std::set< std::string > nucset)pyne::Material + del_range(int lower=0, int upper=10000000)pyne::Material + densitypyne::Material + dose_per_g(std::string dose_type, int source=0)pyne::Material + dump_json()pyne::Material + expand_elements(std::set< int > exception_ids)pyne::Material + expand_elements(int **int_ptr_arry=NULL) (defined in pyne::Material)pyne::Material fluka(int id, std::string frac_type="mass")pyne::Material fluka_compound_str(int id, std::string frac_type="mass")pyne::Material fluka_format_field(float field)pyne::Material @@ -141,39 +118,40 @@ normalize_radioactivity(std::vector< std::pair< double, double > > unnormed)pyne::Material not_fluka_builtin(std::string fluka_name)pyne::Material number_density(double mass_dens=-1.0, double apm=-1.0)pyne::Material - operator*(double)pyne::Material - operator+(double)pyne::Material - operator+(Material)pyne::Material - operator/(double)pyne::Material - photons(bool norm)pyne::Material - set_mat(std::set< int > nucset, double value)pyne::Material - set_mat(std::set< std::string > nucset, double value)pyne::Material - set_range(int lower=0, int upper=10000000, double value=0.0)pyne::Material - sub_act()pyne::Material - sub_elem(int element)pyne::Material - sub_fp()pyne::Material - sub_lan()pyne::Material - sub_ma()pyne::Material - sub_mat(std::set< int > nucset)pyne::Material - sub_mat(std::set< std::string > nucset)pyne::Material - sub_range(int lower=0, int upper=10000000)pyne::Material - sub_tru()pyne::Material - to_atom_dens()pyne::Material - to_atom_frac()pyne::Material - write_hdf5(char *filename, char *datapath, char *nucpath, float row=-0.0, int chunksize=100)pyne::Material - write_hdf5(std::string filename, std::string datapath="/material", std::string nucpath="/nucid", float row=-0.0, int chunksize=100)pyne::Material - write_json(char *filename)pyne::Material - write_json(std::string filename)pyne::Material - write_text(char *filename)pyne::Material - write_text(std::string filename)pyne::Material - xrays()pyne::Material - ~Material()pyne::Material + openmc(std::string fact_type="mass")pyne::Material + operator*(double)pyne::Material + operator+(double)pyne::Material + operator+(Material)pyne::Material + operator/(double)pyne::Material + photons(bool norm)pyne::Material + set_mat(std::set< int > nucset, double value)pyne::Material + set_mat(std::set< std::string > nucset, double value)pyne::Material + set_range(int lower=0, int upper=10000000, double value=0.0)pyne::Material + sub_act()pyne::Material + sub_elem(int element)pyne::Material + sub_fp()pyne::Material + sub_lan()pyne::Material + sub_ma()pyne::Material + sub_mat(std::set< int > nucset)pyne::Material + sub_mat(std::set< std::string > nucset)pyne::Material + sub_range(int lower=0, int upper=10000000)pyne::Material + sub_tru()pyne::Material + to_atom_dens()pyne::Material + to_atom_frac()pyne::Material + write_hdf5(char *filename, char *datapath, char *nucpath, float row=-0.0, int chunksize=100)pyne::Material + write_hdf5(std::string filename, std::string datapath="/material", std::string nucpath="/nucid", float row=-0.0, int chunksize=100)pyne::Material + write_json(char *filename)pyne::Material + write_json(std::string filename)pyne::Material + write_text(char *filename)pyne::Material + write_text(std::string filename)pyne::Material + xrays()pyne::Material + ~Material()pyne::Material
diff --git a/cppapi/html/classpyne_1_1_material.html b/cppapi/html/classpyne_1_1_material.html index 63a2ffeb..bb8b1bc4 100644 --- a/cppapi/html/classpyne_1_1_material.html +++ b/cppapi/html/classpyne_1_1_material.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::Material Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
   Material (std::string filename, double m=-1.0, double d=-1.0, double apm=-1.0, Json::Value attributes=Json::Value(Json::objectValue))   - +  ~Material ()  default destructor
  - + void norm_comp ()  Normalizes the mass values in the composition.
  @@ -132,11 +107,16 @@   void write_hdf5 (std::string filename, std::string datapath="/material", std::string nucpath="/nucid", float row=-0.0, int chunksize=100)   - + +std::string openmc (std::string fact_type="mass") + Return an openmc xml material element as a string.
+  + std::string mcnp (std::string frac_type="mass")  Return an mcnp input deck record as a string.
  std::string fluka (int id, std::string frac_type="mass") + Return a fluka input deck MATERIAL card as a string. More...
  bool not_fluka_builtin (std::string fluka_name)  Convenience function to tell whether a given name needs a material card. More...
@@ -155,43 +135,43 @@   std::string fluka_compound_str (int id, std::string frac_type="mass")   - + void from_text (char *filename)  Reads data from a plaintext file at filename into this Material instance.
  - + void from_text (std::string filename)  Reads data from a plaintext file at filename into this Material instance.
  - + void write_text (char *filename)  Writes the Material out to a simple plaintext file readable by from_text().
  - + void write_text (std::string filename)  Writes the Material out to a simple plaintext file readable by from_text().
  - + void load_json (Json::Value)  Loads a JSON instance tree into this Material.
  - + Json::Value dump_json ()  Dumps the Material out to a JSON instance tree.
  - + void from_json (char *filename)  Reads data from a JSON file at filename into this Material instance.
  - + void from_json (std::string filname)  Reads data from a JSON file at filename into this Material instance.
  - + void write_json (char *filename)  Writes the Material out to a JSON file.
  - + void write_json (std::string filename)  Writes the Material out to a JSON file.
  @@ -207,12 +187,15 @@   comp_map dose_per_g (std::string dose_type, int source=0)   -Material expand_elements () -  - +Material expand_elements (std::set< int > exception_ids) +  + +Material expand_elements (int **int_ptr_arry=NULL) +  + Material collapse_elements (std::set< int > exception_znum)   - + Material collapse_elements (int **int_ptr_arry)   double mass_density (double num_dens=-1.0, double apm=-1.0) @@ -231,35 +214,35 @@   Material del_mat (std::set< std::string > nucset)   - + Material sub_range (int lower=0, int upper=10000000)  Creates a sub-Material based on a range of id-form integers.
  Material set_range (int lower=0, int upper=10000000, double value=0.0)   - + Material del_range (int lower=0, int upper=10000000)  Creates a new Material with the all nuclides in the id range removed.
  Material sub_elem (int element)   - + Material sub_lan ()  Creates a sub-Material of only lanthanides.
  - + Material sub_act ()  Creates a sub-Material of only actinides.
  - + Material sub_tru ()  Creates a sub-Material of only transuranics.
  - + Material sub_ma ()  Creates a sub-Material of only minor actinides.
  - + Material sub_fp ()  Creates a sub-Material of only fission products.
  @@ -277,51 +260,53 @@   std::vector< std::pair< double, double > > normalize_radioactivity (std::vector< std::pair< double, double > > unnormed)   - + Material decay (double t)  Decays this material for a given amount of time in seconds.
  - +Material cram (std::vector< double > A, const int order=14) +  + Material operator+ (double)  Adds mass to a material instance.
  - + Material operator+ (Material)  Adds two materials together.
  - + Material operator* (double)  Multiplies a material's mass.
  - + Material operator/ (double)  Divides a material's mass.
  - - - -

Public Attributes

+
comp_map comp
 composition, maps nuclides in id form to normalized mass weights.
 
+
double mass
 mass (in arbitrary units) of the Material.
 
+
double density
 density (in arbitrary units) of the Material.
 
double atoms_per_molecule
 
+
Json::Value metadata
 container for arbitrary metadata, following the JSON rules.
 
- @@ -329,7 +314,9 @@

Detailed Description

Material composed of nuclides.

Constructor & Destructor Documentation

- + +

◆ Material() [1/4]

+

Protected Member Functions

+
double get_comp_sum ()
 Computes the total mass stored in the composition.
 
@@ -345,7 +332,9 @@ - + +

◆ Material() [2/4]

+
@@ -399,7 +388,9 @@ - + +

◆ Material() [3/4]

+
@@ -453,7 +444,9 @@ - + +

◆ Material() [4/4]

+
@@ -508,7 +501,9 @@

Member Function Documentation

- + +

◆ _load_comp_protocol0()

+
@@ -548,7 +543,9 @@

Member Function Documentation

- + +

◆ _load_comp_protocol1()

+
@@ -588,7 +585,9 @@

Member Function Documentation

- + +

◆ activity()

+
@@ -604,7 +603,45 @@

Member Function Documentation

- + +

◆ cram()

+ +
+
+
+ + + + + + + + + + + + + + + + + +
pyne::Material pyne::Material::cram (std::vector< double > A,
const int order = 14 
)
+
+

Transmutes the material via the CRAM method.

Parameters
+ + + +
AThe transmutation matrix [unitless]
orderThe CRAM approximation order (default 14).
+
+
+
Returns
A new material which has been transmuted.
+ +
+
+ +

◆ decay_heat()

+
@@ -620,7 +657,9 @@

Member Function Documentation

- + +

◆ del_mat() [1/2]

+
@@ -637,7 +676,9 @@

Member Function Documentation

- + +

◆ del_mat() [2/2]

+
@@ -654,7 +695,9 @@

Member Function Documentation

- + +

◆ dose_per_g()

+
@@ -681,14 +724,17 @@

Member Function Documentation

- + +

◆ expand_elements()

+
- + +
pyne::Material pyne::Material::expand_elements ()std::set< int > exception_ids)
@@ -697,7 +743,9 @@

Member Function Documentation

- + +

◆ fluka()

+
@@ -720,12 +768,15 @@

Member Function Documentation

-

Return a fluka input deck MATERIAL card as a string

+ +

Return a fluka input deck MATERIAL card as a string.

------------------------------------------------------------------------—// fluka ------------------------------------------------------------------------—// Main external call

- + +

◆ fluka_compound_str()

+
@@ -753,7 +804,9 @@

Member Function Documentation

- + +

◆ fluka_format_field()

+
@@ -772,7 +825,9 @@

Member Function Documentation

- + +

◆ fluka_material_component()

+
@@ -807,7 +862,9 @@

Member Function Documentation

- + +

◆ fluka_material_line()

+
@@ -848,7 +905,9 @@

Member Function Documentation

- + +

◆ fluka_material_str()

+
@@ -868,7 +927,9 @@

Member Function Documentation

- + +

◆ from_atom_frac()

+
@@ -885,7 +946,9 @@

Member Function Documentation

- + +

◆ from_hdf5() [1/2]

+
@@ -932,7 +995,9 @@

Member Function Documentation

- + +

◆ from_hdf5() [2/2]

+
@@ -979,7 +1044,9 @@

Member Function Documentation

- + +

◆ gammas()

+
@@ -995,7 +1062,9 @@

Member Function Documentation

- + +

◆ mass_density()

+
@@ -1022,7 +1091,9 @@

Member Function Documentation

- + +

◆ molecular_mass()

+
@@ -1039,7 +1110,9 @@

Member Function Documentation

- + +

◆ mult_by_mass()

+
@@ -1055,7 +1128,9 @@

Member Function Documentation

- + +

◆ normalize()

+
@@ -1071,7 +1146,9 @@

Member Function Documentation

- + +

◆ normalize_radioactivity()

+
@@ -1088,7 +1165,9 @@

Member Function Documentation

- + +

◆ not_fluka_builtin()

+
@@ -1107,7 +1186,9 @@

Member Function Documentation

- + +

◆ number_density()

+
@@ -1134,7 +1215,9 @@

Member Function Documentation

- + +

◆ photons()

+
@@ -1151,7 +1234,9 @@

Member Function Documentation

- + +

◆ set_mat() [1/2]

+
@@ -1178,7 +1263,9 @@

Member Function Documentation

- + +

◆ set_mat() [2/2]

+
@@ -1205,7 +1292,9 @@

Member Function Documentation

- + +

◆ set_range()

+
@@ -1238,7 +1327,9 @@

Member Function Documentation

- + +

◆ sub_elem()

+
@@ -1255,7 +1346,9 @@

Member Function Documentation

- + +

◆ sub_mat() [1/2]

+
@@ -1272,7 +1365,9 @@

Member Function Documentation

- + +

◆ sub_mat() [2/2]

+
@@ -1289,7 +1384,9 @@

Member Function Documentation

- + +

◆ to_atom_dens()

+
@@ -1305,7 +1402,9 @@

Member Function Documentation

- + +

◆ to_atom_frac()

+
@@ -1321,7 +1420,9 @@

Member Function Documentation

- + +

◆ write_hdf5() [1/2]

+
@@ -1375,7 +1476,9 @@

Member Function Documentation

- + +

◆ write_hdf5() [2/2]

+
@@ -1429,7 +1532,9 @@

Member Function Documentation

- + +

◆ xrays()

+
@@ -1446,7 +1551,9 @@

Member Function Documentation

Member Data Documentation

- + +

◆ atoms_per_molecule

+
@@ -1460,15 +1567,15 @@

Member Data Documentation


The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/material.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/material.cpp
  • +
  • /root/repo/src/material.h
  • +
  • /root/repo/src/material.cpp
diff --git a/cppapi/html/classpyne_1_1_material_protocol_error-members.html b/cppapi/html/classpyne_1_1_material_protocol_error-members.html index 723dfe4e..3de3acd4 100644 --- a/cppapi/html/classpyne_1_1_material_protocol_error-members.html +++ b/cppapi/html/classpyne_1_1_material_protocol_error-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1_material_protocol_error.html b/cppapi/html/classpyne_1_1_material_protocol_error.html index 776cde91..02e9d6d4 100644 --- a/cppapi/html/classpyne_1_1_material_protocol_error.html +++ b/cppapi/html/classpyne_1_1_material_protocol_error.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::MaterialProtocolError Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Detailed Description

Custom exception for invalid HDF5 protocol numbers.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classpyne_1_1_sampler-members.html b/cppapi/html/classpyne_1_1_sampler-members.html index 1258e6d0..b17114f1 100644 --- a/cppapi/html/classpyne_1_1_sampler-members.html +++ b/cppapi/html/classpyne_1_1_sampler-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
This is the complete list of members for pyne::Sampler, including all inherited members.

- + - + +
particle_birth(std::vector< double > rands)pyne::Sampler
particle_birth(std::vector< double > rands)pyne::Sampler
Sampler(std::string filename, std::string src_tag_name, std::vector< double > e_bounds, bool uniform)pyne::Sampler
Sampler(std::string filename, std::string src_tag_name, std::vector< double > e_bounds, std::string bias_tag_name)pyne::Sampler
~Sampler() (defined in pyne::Sampler)pyne::Samplerinline
Sampler(std::string filename, std::map< std::string, std::string > tag_names, std::vector< double > e_bounds, int mode)pyne::Sampler
~Sampler() (defined in pyne::Sampler)pyne::Samplerinline
diff --git a/cppapi/html/classpyne_1_1_sampler.html b/cppapi/html/classpyne_1_1_sampler.html index 120f817a..cc92c5b4 100644 --- a/cppapi/html/classpyne_1_1_sampler.html +++ b/cppapi/html/classpyne_1_1_sampler.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::Sampler Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
   Sampler (std::string filename, std::string src_tag_name, std::vector< double > e_bounds, std::string bias_tag_name)   -std::vector< double > particle_birth (std::vector< double > rands) -  + Sampler (std::string filename, std::map< std::string, std::string > tag_names, std::vector< double > e_bounds, int mode) +  +pyne::SourceParticle particle_birth (std::vector< double > rands) + 

Detailed Description

Mesh based Monte Carlo source sampling.

Constructor & Destructor Documentation

- + +

◆ Sampler() [1/3]

+
@@ -159,7 +138,9 @@ - + +

◆ Sampler() [2/3]

+
@@ -204,15 +185,66 @@ + + + +

◆ Sampler() [3/3]

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pyne::Sampler::Sampler (std::string filename,
std::map< std::string, std::string > tag_names,
std::vector< double > e_bounds,
int mode 
)
+
+

Constuctor for overall sampler

Parameters
+ + + + + +
filenameThe filename of the h5m file
tag_namesThe map of src_tag_name and bias_tag_name
e_boundsThe energy boundaries, note there are N + 1 energy bounds for N energy groups
modeThe mode number, 0, 1, 2, 3, 4 or 5
+
+
+

Member Function Documentation

- + +

◆ particle_birth()

+
- + @@ -226,20 +258,20 @@

Member Function Documentation

std::vector< double > pyne::Sampler::particle_birth pyne::SourceParticle pyne::Sampler::particle_birth ( std::vector< double >  rands)
-
Returns
A vector containing the x position, y, position, z, point, energy and weight of a particle (in that order).
+
Returns
A SourceParticle object containing the x position, y, position, z, position, e, energy and w, weight of a particle.

The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/source_sampling.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/source_sampling.cpp
  • +
  • /root/repo/src/source_sampling.h
  • +
  • /root/repo/src/source_sampling.cpp
diff --git a/cppapi/html/classpyne_1_1_source_particle-members.html b/cppapi/html/classpyne_1_1_source_particle-members.html new file mode 100644 index 00000000..ba2a7407 --- /dev/null +++ b/cppapi/html/classpyne_1_1_source_particle-members.html @@ -0,0 +1,89 @@ + + + + + + + +PyNE C++: Member List + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
pyne::SourceParticle Member List
+
+
+ +

This is the complete list of members for pyne::SourceParticle, including all inherited members.

+ + + + + + + + + + +
get_c() (defined in pyne::SourceParticle)pyne::SourceParticleinline
get_e() (defined in pyne::SourceParticle)pyne::SourceParticleinline
get_w() (defined in pyne::SourceParticle)pyne::SourceParticleinline
get_x() (defined in pyne::SourceParticle)pyne::SourceParticleinline
get_y() (defined in pyne::SourceParticle)pyne::SourceParticleinline
get_z() (defined in pyne::SourceParticle)pyne::SourceParticleinline
SourceParticle() (defined in pyne::SourceParticle)pyne::SourceParticle
SourceParticle(double x, double y, double z, double e, double w, int c)pyne::SourceParticle
~SourceParticle() (defined in pyne::SourceParticle)pyne::SourceParticle
+ + + + diff --git a/cppapi/html/classpyne_1_1_source_particle.html b/cppapi/html/classpyne_1_1_source_particle.html new file mode 100644 index 00000000..a12136df --- /dev/null +++ b/cppapi/html/classpyne_1_1_source_particle.html @@ -0,0 +1,172 @@ + + + + + + + +PyNE C++: pyne::SourceParticle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
pyne::SourceParticle Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

 SourceParticle (double x, double y, double z, double e, double w, int c)
 
+double get_x ()
 
+double get_y ()
 
+double get_z ()
 
+double get_e ()
 
+double get_w ()
 
+int get_c ()
 
+

Constructor & Destructor Documentation

+ +

◆ SourceParticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pyne::SourceParticle::SourceParticle (double x,
double y,
double z,
double e,
double w,
int c 
)
+
+

Constructor for source particle

Parameters
+ + + + + + + +
xThe x coordinate of the source particle
yThe y coordinate of the source particle
zThe z coordinate of the source particle
eThe energy of the source particle
wThe weight of the source particle
cThe cell number of the source particle
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/cppapi/html/classpyne_1_1_tally-members.html b/cppapi/html/classpyne_1_1_tally-members.html index bad8b29a..668dde00 100644 --- a/cppapi/html/classpyne_1_1_tally-members.html +++ b/cppapi/html/classpyne_1_1_tally-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1_tally.html b/cppapi/html/classpyne_1_1_tally.html index 7afe6a3a..ffd0889c 100644 --- a/cppapi/html/classpyne_1_1_tally.html +++ b/cppapi/html/classpyne_1_1_tally.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::Tally Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  Tally ()  Tally Constructors.
   Tally (std::string type, std::string particle_name, int entity, std::string entity_type, std::string entity_name, std::string tally_name="", double entity_size=0.0, double normalization=1.0)  empty constructor More...
  - + hid_t create_dataspace (hid_t file, std::string datapath)  default destructor
  - + hid_t create_filetype ()   - + hid_t create_memtype ()   void from_hdf5 (char *filename, char *datapath, int row=-1) @@ -123,58 +98,60 @@   void write_hdf5 (std::string filename, std::string datapath)   - + std::string mcnp (int tally_index=1, std::string mcnp_version="mcnp5")   - + std::string fluka (std::string unit_number="-21")   - - - - - - - - - -

Public Attributes

+
std::map< std::string, std::string > rx2fluka
 
+
std::map< std::string, std::string > rx2mcnp5
 
+
std::map< std::string, std::string > rx2mcnp6
 
std::string entity_type
 fundamental tally variables More...
 
+
std::string entity_name
 the name of the entity (optional)
 
+
std::string particle_name
 particle name string
 
+
std::string tally_type
 type of tally flux or current
 
+
std::string tally_name
 name of the tally
 
+
int entity_id
 id number of the entity being tallied upon
 
+
double entity_size
 the physical size of the entity
 
+
double normalization
 the tally normalization
 

Constructor & Destructor Documentation

- + +

◆ Tally()

+
@@ -252,7 +229,9 @@

Constructor & Destructor Documentation

Member Function Documentation

- + +

◆ from_hdf5() [1/2]

+
@@ -292,7 +271,9 @@

Member Function Documentation

- + +

◆ from_hdf5() [2/2]

+
@@ -332,7 +313,9 @@

Member Function Documentation

- + +

◆ write_hdf5() [1/2]

+
@@ -365,7 +348,9 @@

Member Function Documentation

- + +

◆ write_hdf5() [2/2]

+
@@ -399,7 +384,9 @@

Member Function Documentation

Member Data Documentation

- + +

◆ entity_type

+
@@ -415,15 +402,15 @@

Member Data Documentation


The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/tally.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/tally.cpp
  • +
  • /root/repo/src/tally.h
  • +
  • /root/repo/src/tally.cpp
diff --git a/cppapi/html/classpyne_1_1_value_error-members.html b/cppapi/html/classpyne_1_1_value_error-members.html new file mode 100644 index 00000000..a51321a3 --- /dev/null +++ b/cppapi/html/classpyne_1_1_value_error-members.html @@ -0,0 +1,84 @@ + + + + + + + +PyNE C++: Member List + + + + + + + + + +
+
+
+ + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
pyne::ValueError Member List
+
+
+ +

This is the complete list of members for pyne::ValueError, including all inherited members.

+ + + + + +
ValueError()pyne::ValueErrorinline
ValueError(std::string msg)pyne::ValueErrorinline
what() constpyne::ValueErrorinlinevirtual
~ValueError()pyne::ValueErrorinline
+ + + + diff --git a/cppapi/html/classpyne_1_1_value_error.html b/cppapi/html/classpyne_1_1_value_error.html new file mode 100644 index 00000000..3ed5edb7 --- /dev/null +++ b/cppapi/html/classpyne_1_1_value_error.html @@ -0,0 +1,118 @@ + + + + + + + +PyNE C++: pyne::ValueError Class Reference + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
pyne::ValueError Class Reference
+
+
+ +

Exception representing value errors of all kinds. + More...

+ +

#include <utils.h>

+
+Inheritance diagram for pyne::ValueError:
+
+
+ + + +
+ + + + + + + + + + + + + + +

+Public Member Functions

ValueError ()
 default constructor
 
~ValueError () throw ()
 default destructor
 
ValueError (std::string msg)
 constructor with the filename fname.
 
+virtual const char * what () const throw ()
 Creates a helpful error message.
 
+

Detailed Description

+

Exception representing value errors of all kinds.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/cppapi/html/classpyne_1_1_value_error.png b/cppapi/html/classpyne_1_1_value_error.png new file mode 100644 index 00000000..3969b402 Binary files /dev/null and b/cppapi/html/classpyne_1_1_value_error.png differ diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_cascade-members.html b/cppapi/html/classpyne_1_1enrichment_1_1_cascade-members.html index e378b30e..868edee9 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_cascade-members.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_cascade-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_cascade.html b/cppapi/html/classpyne_1_1enrichment_1_1_cascade.html index 477e7377..d8f29c78 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_cascade.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_cascade.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::enrichment::Cascade Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  Cascade ()  default constructors
  - +  ~Cascade ()  default destructor
  - + void _reset_xjs ()  Sets x_feed_j to j-th value of mat_feed.
  - - - - - - - - - - - - - - - @@ -182,15 +157,15 @@

Detailed Description

A set of physical parameters used to specify an enrichment cascade.


The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/enrichment_cascade.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/enrichment_cascade.cpp
  • +
  • /root/repo/src/enrichment_cascade.h
  • +
  • /root/repo/src/enrichment_cascade.cpp
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error-members.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error-members.html index f9385062..8642d5bd 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error-members.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@

Public Attributes

+
double alpha
 stage separation factor
 
+
double Mstar
 mass separation factor
 
+
int j
 Component to enrich (U-235), id form.
 
+
int k
 Component to de-enrich, or strip (U-238), id form.
 
+
double N
 number of enriching stages
 
+
double M
 number of stripping stages
 
+
double x_feed_j
 enrichment of the j-th isotope in the feed stream
 
+
double x_prod_j
 enrichment of the j-th isotope in the product stream
 
+
double x_tail_j
 enrichment of the j-th isotope in the tails stream
 
+
pyne::Material mat_feed
 feed material
 
+
pyne::Material mat_prod
 product material
 
+
pyne::Material mat_tail
 tails material
 
+
double l_t_per_feed
 Total flow rate per feed rate.
 
+
double swu_per_feed
 This is the SWU for 1 kg of Feed material.
 
+
double swu_per_prod
 This is the SWU for 1 kg of Product material.
 
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error.html index b405c28d..68241406 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_infinite_loop_error.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::enrichment::EnrichmentInfiniteLoopError Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Detailed Description

Custom exception for when an enrichment solver has entered an infinite loop.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit-members.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit-members.html index 91c3c316..a85a9a6c 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit-members.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit.html index 8fa7a415..cbda560f 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_limit.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::enrichment::EnrichmentIterationLimit Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Detailed Description

Custom exception for when an enrichment solver has reached its maximum number of iterations.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n-members.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n-members.html index 6280146d..6aff92d5 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n-members.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n.html b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n.html index 2f1a2e9f..a7609aa7 100644 --- a/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n.html +++ b/cppapi/html/classpyne_1_1enrichment_1_1_enrichment_iteration_na_n.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::enrichment::EnrichmentIterationNaN Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Detailed Description

Custom exception for when an enrichment solver iteration has produced a NaN.


The documentation for this class was generated from the following file:
diff --git a/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form-members.html b/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form-members.html index 16a03fff..1ac11eda 100644 --- a/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form-members.html +++ b/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + + diff --git a/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form.html b/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form.html index 4cd74f65..f2e3d13b 100644 --- a/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form.html +++ b/cppapi/html/classpyne_1_1nucname_1_1_indeterminate_nuclide_form.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::nucname::IndeterminateNuclideForm Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  IndeterminateNuclideForm ()  default constructor
  - +  ~IndeterminateNuclideForm () throw ()  default destuctor
  @@ -123,13 +98,15 @@    IndeterminateNuclideForm (int wasptr, int nowptr)   -virtual const char * what () const throw () -  +virtual const char * what () const throw () + 

Detailed Description

Custom expection for declaring that a value represents one or more nuclides in one or more namig conventions

Constructor & Destructor Documentation

- + +

◆ IndeterminateNuclideForm() [1/4]

+
@@ -170,7 +147,9 @@ - + +

◆ IndeterminateNuclideForm() [2/4]

+
@@ -211,7 +190,9 @@ - + +

◆ IndeterminateNuclideForm() [3/4]

+
@@ -252,7 +233,9 @@ - + +

◆ IndeterminateNuclideForm() [4/4]

+
@@ -294,7 +277,9 @@

Member Function Documentation

- + +

◆ what()

+
@@ -325,14 +310,14 @@

Member Function Documentation


The documentation for this class was generated from the following file: diff --git a/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide-members.html b/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide-members.html index 4bc3db01..13ba6a3a 100644 --- a/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide-members.html +++ b/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
NotANuclide(std::string wasptr, int nowptr)pyne::nucname::NotANuclideinline NotANuclide(int wasptr, std::string nowptr)pyne::nucname::NotANuclideinline NotANuclide(int wasptr, int nowptr)pyne::nucname::NotANuclideinline - what() const pyne::nucname::NotANuclideinlinevirtual + what() constpyne::nucname::NotANuclideinlinevirtual ~NotANuclide()pyne::nucname::NotANuclideinline
diff --git a/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide.html b/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide.html index 45385369..70903d86 100644 --- a/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide.html +++ b/cppapi/html/classpyne_1_1nucname_1_1_not_a_nuclide.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::nucname::NotANuclide Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  NotANuclide ()  default constructor
  - +  ~NotANuclide () throw ()  default destructor
  @@ -123,13 +98,15 @@    NotANuclide (int wasptr, int nowptr)   -virtual const char * what () const throw () -  +virtual const char * what () const throw () + 

Detailed Description

Custom expection for declaring that a value does not follow a recognizable nuclide naming convention.

Constructor & Destructor Documentation

- + +

◆ NotANuclide() [1/4]

+
@@ -170,7 +147,9 @@ - + +

◆ NotANuclide() [2/4]

+
@@ -211,7 +190,9 @@ - + +

◆ NotANuclide() [3/4]

+
@@ -252,7 +233,9 @@ - + +

◆ NotANuclide() [4/4]

+
@@ -294,7 +277,9 @@

Member Function Documentation

- + +

◆ what()

+
@@ -325,14 +310,14 @@

Member Function Documentation


The documentation for this class was generated from the following file: diff --git a/cppapi/html/classpyne_1_1particle_1_1_not_a_particle-members.html b/cppapi/html/classpyne_1_1particle_1_1_not_a_particle-members.html index c86fcae1..fa3b6923 100644 --- a/cppapi/html/classpyne_1_1particle_1_1_not_a_particle-members.html +++ b/cppapi/html/classpyne_1_1particle_1_1_not_a_particle-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + + diff --git a/cppapi/html/classpyne_1_1particle_1_1_not_a_particle.html b/cppapi/html/classpyne_1_1particle_1_1_not_a_particle.html index 9e607cd5..a806692b 100644 --- a/cppapi/html/classpyne_1_1particle_1_1_not_a_particle.html +++ b/cppapi/html/classpyne_1_1particle_1_1_not_a_particle.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::particle::NotAParticle Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  NotAParticle ()  Default constructor.
  - +  ~NotAParticle () throw ()  Default destructor.
   NotAParticle (std::string particle_name)   - -virtual const char * what () const throw () - raises error message
-  + +virtual const char * what () const throw () + raises error message

Detailed Description

Custom excpeption for failed particle types.

Constructor & Destructor Documentation

- + +

◆ NotAParticle()

+
@@ -154,14 +131,14 @@
The documentation for this class was generated from the following file: diff --git a/cppapi/html/classpyne_1_1ray__buffers-members.html b/cppapi/html/classpyne_1_1ray__buffers-members.html index fd523ed2..b082c46a 100644 --- a/cppapi/html/classpyne_1_1ray__buffers-members.html +++ b/cppapi/html/classpyne_1_1ray__buffers-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/classpyne_1_1ray__buffers.html b/cppapi/html/classpyne_1_1ray__buffers.html index 8edf4502..e46260e7 100644 --- a/cppapi/html/classpyne_1_1ray__buffers.html +++ b/cppapi/html/classpyne_1_1ray__buffers.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::ray_buffers Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Attributes

- + DagMC::RayHistory history   - + std::vector< EntityHandle > surfs   - + std::vector< double > dists   - + std::vector< EntityHandle > vols  
The documentation for this class was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/dagmc_bridge.cpp
  • +
  • /root/repo/src/dagmc_bridge.cpp
diff --git a/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form-members.html b/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form-members.html index 826cf546..ee665a61 100644 --- a/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form-members.html +++ b/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + + diff --git a/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form.html b/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form.html index ab8f6612..e6a08b77 100644 --- a/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form.html +++ b/cppapi/html/classpyne_1_1rxname_1_1_indeterminate_reaction_form.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::rxname::IndeterminateReactionForm Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  IndeterminateReactionForm ()  default constructor
  - +  ~IndeterminateReactionForm () throw ()  default destructor
  @@ -126,15 +101,17 @@    IndeterminateReactionForm (int wasptr, int nowptr)   - -virtual const char * what () const throw () - Returns a helpful error message containing prior and current reaction state.
-  + +virtual const char * what () const throw () + Returns a helpful error message containing prior and current reaction state.

Detailed Description

Custom exception for declaring a value not to be of ambiquous reaction form.

Constructor & Destructor Documentation

- + +

◆ IndeterminateReactionForm() [1/4]

+
@@ -169,7 +146,9 @@ - + +

◆ IndeterminateReactionForm() [2/4]

+
@@ -204,7 +183,9 @@ - + +

◆ IndeterminateReactionForm() [3/4]

+
@@ -239,7 +220,9 @@ - + +

◆ IndeterminateReactionForm() [4/4]

+
@@ -275,14 +258,14 @@
The documentation for this class was generated from the following file: diff --git a/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction-members.html b/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction-members.html index 5d81c576..1f9a9ff9 100644 --- a/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction-members.html +++ b/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
NotAReaction(std::string wasptr, unsigned int nowptr)pyne::rxname::NotAReactioninline NotAReaction(unsigned int wasptr, std::string nowptr)pyne::rxname::NotAReactioninline NotAReaction(unsigned int wasptr, unsigned int nowptr)pyne::rxname::NotAReactioninline - what() const pyne::rxname::NotAReactioninlinevirtual + what() constpyne::rxname::NotAReactioninlinevirtual ~NotAReaction()pyne::rxname::NotAReactioninline
diff --git a/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction.html b/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction.html index da835f45..d683b469 100644 --- a/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction.html +++ b/cppapi/html/classpyne_1_1rxname_1_1_not_a_reaction.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::rxname::NotAReaction Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- +  NotAReaction ()  default constructor
  - +  ~NotAReaction () throw ()  default destructor
  @@ -132,15 +107,17 @@    NotAReaction (unsigned int wasptr, unsigned int nowptr)   - -virtual const char * what () const throw () - Returns a helpful error message containing prior and current reaction state.
-  + +virtual const char * what () const throw () + Returns a helpful error message containing prior and current reaction state.

Detailed Description

Custom exception for declaring a value not to be a valid reaction.

Constructor & Destructor Documentation

- + +

◆ NotAReaction() [1/7]

+
@@ -175,7 +152,9 @@ - + +

◆ NotAReaction() [2/7]

+
@@ -210,7 +189,9 @@ - + +

◆ NotAReaction() [3/7]

+
@@ -245,7 +226,9 @@ - + +

◆ NotAReaction() [4/7]

+
@@ -280,7 +263,9 @@ - + +

◆ NotAReaction() [5/7]

+
@@ -315,7 +300,9 @@ - + +

◆ NotAReaction() [6/7]

+
@@ -350,7 +337,9 @@ - + +

◆ NotAReaction() [7/7]

+
@@ -386,14 +375,14 @@
The documentation for this class was generated from the following file: diff --git a/cppapi/html/classpyne_1_1swapmapcompare-members.html b/cppapi/html/classpyne_1_1swapmapcompare-members.html index d1680cc7..6e97779d 100644 --- a/cppapi/html/classpyne_1_1swapmapcompare-members.html +++ b/cppapi/html/classpyne_1_1swapmapcompare-members.html @@ -3,7 +3,8 @@ - + +PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
This is the complete list of members for pyne::swapmapcompare, including all inherited members.

- +
operator()(const std::pair< int, double > &lhs, const std::pair< int, double > &rhs) const pyne::swapmapcompare
operator()(const std::pair< int, double > &lhs, const std::pair< int, double > &rhs) constpyne::swapmapcompare
diff --git a/cppapi/html/classpyne_1_1swapmapcompare.html b/cppapi/html/classpyne_1_1swapmapcompare.html index bb45d4cf..a875742e 100644 --- a/cppapi/html/classpyne_1_1swapmapcompare.html +++ b/cppapi/html/classpyne_1_1swapmapcompare.html @@ -3,7 +3,8 @@ - + + PyNE C++: pyne::swapmapcompare Class Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +

Public Member Functions

- -bool operator() (const std::pair< int, double > &lhs, const std::pair< int, double > &rhs) const - This operator compares the second item in a pair first.
-  + +bool operator() (const std::pair< int, double > &lhs, const std::pair< int, double > &rhs) const + This operator compares the second item in a pair first.

Detailed Description

Data access functions.

simple class to swap the order in which a pair is compared


The documentation for this class was generated from the following files:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/data.h
  • -
  • /home/ubuntu/Documents/pyne.github.com/src/data.cpp
  • +
  • /root/repo/src/data.h
  • +
  • /root/repo/src/data.cpp
diff --git a/cppapi/html/cram_8h_source.html b/cppapi/html/cram_8h_source.html new file mode 100644 index 00000000..758732a8 --- /dev/null +++ b/cppapi/html/cram_8h_source.html @@ -0,0 +1,80 @@ + + + + + + + +PyNE C++: /root/repo/src/cram.h Source File + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cram.h
+
+
+
1 /* This file was generated automatically with transmutagen version 1.1.0+2.g772e41d.dirty. */
2 /* The command used to generate this file was: python -m transmutagen.gensolve --py-solve --namespace=pyne_cram --outfile=cram.c --gnu-asm --clang-asm --tar*/
3 #ifndef PYNE_CRAM_SOLVE_C
4 #define PYNE_CRAM_SOLVE_C
5 
6 
7 #include <complex.h>
8 
10  int n;
11  int nnz;
12  int* i;
13  int* j;
14  char** nucs;
15  int* nucids;
16  double* decay_matrix;
18 
19 extern pyne_cram_transmute_info_t pyne_cram_transmute_info;
20 
21 int pyne_cram_transmute_ij(int i, int j);
22 
23 int pyne_cram_transmute_nucid_to_i(int nucid);
24 
25 
26 void pyne_cram_solve_double(double* A, double* b, double* x);
27 void pyne_cram_diag_add_double(double* A, double alpha);
28 void pyne_cram_dot_double(double* A, double* x, double* y);
29 void pyne_cram_scalar_times_vector_double(double, double*);
30 
31 void pyne_cram_solve_complex(double complex* A, double complex* b, double complex* x);
32 void pyne_cram_diag_add_complex(double complex* A, double complex alpha);
33 void pyne_cram_dot_complex(double complex* A, double complex* x, double complex* y);
34 void pyne_cram_scalar_times_vector_complex(double complex, double complex*);
35 
36 void pyne_cram_expm_multiply6(double* A, double* b, double* x);
37 void pyne_cram_expm_multiply8(double* A, double* b, double* x);
38 void pyne_cram_expm_multiply10(double* A, double* b, double* x);
39 void pyne_cram_expm_multiply12(double* A, double* b, double* x);
40 void pyne_cram_expm_multiply14(double* A, double* b, double* x);
41 void pyne_cram_expm_multiply16(double* A, double* b, double* x);
42 void pyne_cram_expm_multiply18(double* A, double* b, double* x);
43 #endif
struct pyne::alpha alpha
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
+
double b(int nuc)
Computes the scattering length [cm] from the coherent and incoherent components.
Definition: data.cpp:835
+
Definition: cram.h:9
+
+ + + + diff --git a/cppapi/html/cram_8hpp_source.html b/cppapi/html/cram_8hpp_source.html new file mode 100644 index 00000000..aa6f8b65 --- /dev/null +++ b/cppapi/html/cram_8hpp_source.html @@ -0,0 +1,80 @@ + + + + + + + +PyNE C++: /root/repo/src/cram.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cram.hpp
+
+
+
1 #ifdef PYNE_CRAM_SOLVE_C
2 #error "Both cram.h (the C header for CRAM) and cram.hpp (C++) have been included, only one is allowed!"
3 #endif
4 
5 #ifndef PYNE_CRAM_SOLVE_CPP
6 #define PYNE_CRAM_SOLVE_CPP
7 
8 
9 typedef struct pyne_cram_transmute_info_tag {
10  int n;
11  int nnz;
12  int* i;
13  int* j;
14  char** nucs;
15  int* nucids;
16  double* decay_matrix;
18 
19 extern pyne_cram_transmute_info_t pyne_cram_transmute_info;
20 
21 int pyne_cram_transmute_ij(int i, int j);
22 
23 int pyne_cram_transmute_nucid_to_i(int nucid);
24 
25 
26 void pyne_cram_solve_double(double* A, double* b, double* x);
27 void pyne_cram_diag_add_double(double* A, double alpha);
28 void pyne_cram_dot_double(double* A, double* x, double* y);
29 void pyne_cram_scalar_times_vector_double(double, double*);
30 
31 // double complex types are not allowed in the C++ type convention,
32 // which extern "C" forced us into.
33 
34 void pyne_cram_expm_multiply6(double* A, double* b, double* x);
35 void pyne_cram_expm_multiply8(double* A, double* b, double* x);
36 void pyne_cram_expm_multiply10(double* A, double* b, double* x);
37 void pyne_cram_expm_multiply12(double* A, double* b, double* x);
38 void pyne_cram_expm_multiply14(double* A, double* b, double* x);
39 void pyne_cram_expm_multiply16(double* A, double* b, double* x);
40 void pyne_cram_expm_multiply18(double* A, double* b, double* x);
41 #endif // PYNE_CRAM_SOLVE_CPP
struct pyne::alpha alpha
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
+
double b(int nuc)
Computes the scattering length [cm] from the coherent and incoherent components.
Definition: data.cpp:835
+
Definition: cram.h:9
+
+ + + + diff --git a/cppapi/html/dagmc__bridge_8h_source.html b/cppapi/html/dagmc__bridge_8h_source.html index 31a4f6a6..88f0aea6 100644 --- a/cppapi/html/dagmc__bridge_8h_source.html +++ b/cppapi/html/dagmc__bridge_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/dagmc_bridge.h Source File + + +PyNE C++: /root/repo/src/dagmc_bridge.h Source File - @@ -31,39 +29,19 @@
- + - - + + + +
dagmc_bridge.h
-
1 #ifndef PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ
2 #define PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ
3 
4 /* Types.hpp may be validly included from C code */
5 #include <moab/Types.hpp>
6 
7 #ifdef __cplusplus
8 using moab::ErrorCode;
9 using moab::EntityHandle;
10 
11 namespace pyne {
12 
13 extern "C" {
14 #endif
15 /* Notice to future maintainers:
16  * If this file is ever used as a C header from a C compilation unit,
17  * there will probably need to be an #elseif here that defines EntityHandle
18  * or includes an appropriate MOAB header. I don't think Types.hpp guarantees
19  * that EntityHandle will be defined in C.
20  */
21 
22 typedef double vec3[3];
23 
24 float dag_version(void);
25 
26 unsigned dag_rev_version(void);
27 
28 int dag_ent_handle_size(void);
29 
30 const int* geom_id_list(int dimension, int* number_of_items);
31 
32 EntityHandle handle_from_id(int dimension, int id);
33 int id_from_handle(EntityHandle eh);
34 
35 ErrorCode dag_load(const char* filename);
36 
37 void* dag_alloc_ray_history(void);
38 
39 void dag_dealloc_ray_history(void* history);
40 
41 ErrorCode dag_ray_fire(EntityHandle vol, vec3 ray_start, vec3 ray_dir,
42  EntityHandle* next_surf, double* next_surf_dist,
43  void* history, double distance_limit);
44 
45 ErrorCode dag_ray_follow(EntityHandle firstvol, vec3 ray_start, vec3 ray_dir,
46  double distance_limit, int* num_intersections,
47  EntityHandle** surfs, double** distances,
48  EntityHandle** volumes, void* data_buffers);
49 
50 void dag_dealloc_ray_buffer(void* data_buffers);
51 
52 ErrorCode dag_pt_in_vol(EntityHandle vol, vec3 pt, int* result, vec3 dir,
53  const void* history);
54 
55 ErrorCode dag_next_vol(EntityHandle surface, EntityHandle volume,
56  EntityHandle* next_vol);
57 
58 int vol_is_graveyard(EntityHandle vol);
59 /* int surf_is_spec_refl(EntityHandle surf); */
60 /* int surf_is_white_refl(EntityHandle surf); */
61 int vol_is_implicit_complement(EntityHandle vol);
62 
63 ErrorCode get_volume_metadata(EntityHandle vol, int* material, double* density, double* importance);
64 
65 ErrorCode get_volume_boundary(EntityHandle vol, vec3 minPt, vec3 maxPt);
66 
67 #ifdef __cplusplus
68 } // namespace pyne
69 } // extern "C"
70 #endif
71 
72 #endif /* PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ */
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
1 #ifndef PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ
2 #define PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ
3 
4 /* Types.hpp may be validly included from C code */
5 #include <moab/Types.hpp>
6 #include <DagMC.hpp>
7 
8 #ifdef __cplusplus
9 using moab::ErrorCode;
10 using moab::EntityHandle;
11 using moab::DagMC;
12 
13 namespace pyne {
14 
15 static DagMC* DAG = new DagMC();
16 
17 extern "C" {
18 #endif
19 /* Notice to future maintainers:
20  * If this file is ever used as a C header from a C compilation unit,
21  * there will probably need to be an #elseif here that defines EntityHandle
22  * or includes an appropriate MOAB header. I don't think Types.hpp guarantees
23  * that EntityHandle will be defined in C.
24  */
25 
26 typedef double vec3[3];
27 
28 float dag_version(void);
29 
30 unsigned dag_rev_version(void);
31 
32 int dag_ent_handle_size(void);
33 
34 const int* geom_id_list(int dimension, int* number_of_items);
35 
36 EntityHandle handle_from_id(int dimension, int id);
37 int id_from_handle(EntityHandle eh);
38 
39 ErrorCode dag_load(const char* filename);
40 
41 void* dag_alloc_ray_history(void);
42 
43 void dag_dealloc_ray_history(void* history);
44 
45 ErrorCode dag_ray_fire(EntityHandle vol, vec3 ray_start, vec3 ray_dir,
46  EntityHandle* next_surf, double* next_surf_dist,
47  void* history, double distance_limit);
48 
49 ErrorCode dag_ray_follow(EntityHandle firstvol, vec3 ray_start, vec3 ray_dir,
50  double distance_limit, int* num_intersections,
51  EntityHandle** surfs, double** distances,
52  EntityHandle** volumes, void* data_buffers);
53 
54 void dag_dealloc_ray_buffer(void* data_buffers);
55 
56 ErrorCode dag_pt_in_vol(EntityHandle vol, vec3 pt, int* result, vec3 dir,
57  const void* history);
58 
59 ErrorCode dag_next_vol(EntityHandle surface, EntityHandle volume,
60  EntityHandle* next_vol);
61 
62 int vol_is_graveyard(EntityHandle vol);
63 /* int surf_is_spec_refl(EntityHandle surf); */
64 /* int surf_is_white_refl(EntityHandle surf); */
65 int vol_is_implicit_complement(EntityHandle vol);
66 
67 ErrorCode get_volume_metadata(EntityHandle vol, int* material, double* density, double* importance);
68 
69 ErrorCode get_volume_boundary(EntityHandle vol, vec3 minPt, vec3 maxPt);
70 
71 #ifdef __cplusplus
72 } // namespace pyne
73 } // extern "C"
74 #endif
75 
76 #endif /* PYNE_SKQ36P4BFNE3VI6VHVADCDT4VQ */
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/data_8h.html b/cppapi/html/data_8h.html index be6f0818..9b1671bf 100644 --- a/cppapi/html/data_8h.html +++ b/cppapi/html/data_8h.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/data.h File Reference + + +PyNE C++: /root/repo/src/data.h File Reference - @@ -31,39 +29,19 @@
- + - - + + + +
double pyne::natural_abund (int nuc)  Returns the natural abundance of a nuclide nuc. More...
  - + double pyne::natural_abund (char *nuc)  Returns the natural abundance of a nuclide nuc.
  - + double pyne::natural_abund (std::string nuc)  Returns the natural abundance of a nuclide nuc.
  - - - - - - - - - - - + +

Variables

+
std::string pyne::NUC_DATA_PATH = ""
 Path to the nuc_data.h5 file.
 
std::map< std::string, std::string > pyne::data_checksums
 Mapping from nodes in nuc_data.h5 to hashes of nodes. More...
 
+
std::map< std::string, std::map< int, std::map< int, double > > > pyne::simple_xs_map
 map<energy, map<nuclide, map<rx, xs> > >
 
Mathematical and Physical Constants
+
const double pyne::pi = 3.14159265359
 pi = 3.14159265359
 
+
const double pyne::N_A = 6.0221415e+23
 Avogadro's Number.
 
+
const double pyne::barns_per_cm2 = 1e24
 barns per cm^2
 
+
const double pyne::cm2_per_barn = 1e-24
 cm^2 per barn
 
+
const double pyne::sec_per_day = 24.0 * 3600.0
 seconds per day
 
+
const double pyne::MeV_per_K = 8.617343e-11
 MeV per Kelvin.
 
+
const double pyne::MeV_per_MJ = 6.2415096471204E+18
 MeV per MJ.
 
+
const double pyne::Bq_per_Ci = 3.7e10
 Becquerel per Curie.
 
const double pyne::Ci_per_Bq = 2.7027027e-11
+const double pyne::Ci_per_Bq = 2.7027027e-11
 Curies per Becquerel.
 
- - @@ -260,63 +240,63 @@ - -

Atomic Mass Data

+
typedef struct pyne::atomic_mass_data pyne::atomic_mass_data
 a struct matching the atomic_mass table in nuc_data.h5.
 
+
std::map< std::string, std::string > pyne::get_data_checksums ()
 
void pyne::_load_atomic_mass_map ()
double pyne::atomic_mass (int nuc)
 Returns the atomic mass of a nuclide nuc. More...
 
+
double pyne::atomic_mass (char *nuc)
 Returns the atomic mass of a nuclide nuc.
 
+
double pyne::atomic_mass (std::string nuc)
 Returns the atomic mass of a nuclide nuc.
 
- - - - - - - -

Q_value Data

+
typedef struct pyne::q_val_data pyne::q_val_data
 a struct matching the q_value table in nuc_data.h5.
 
std::map< int, double > pyne::q_val_map = std::map<int, double>()
 
+
std::map< int, double > pyne::gamma_frac_map = std::map<int, double>()
 
+
void pyne::_load_q_val_map ()
 Loads the q_value data from the nuc_data.h5 file into memory.
 
double pyne::q_val (int nuc)
 Returns the q_value of a nuclide nuc. More...
 
+
double pyne::q_val (const char *nuc)
 
+
double pyne::q_val (std::string nuc)
 
+
double pyne::gamma_frac (int nuc)
 
+
double pyne::gamma_frac (const char *nuc)
 
+
double pyne::gamma_frac (std::string nuc)
 
- - - - @@ -324,137 +304,137 @@ - - - - - - - - - - - - - - - - -

Dose Factor Data

+
typedef struct pyne::dose pyne::dose
 A struct matching the dose factor table in nuc_data.h5.
 
+
std::map< int, dose > pyne::epa_dose_map
 Mapping from int to dose for 3 sources.
 
+
std::map< int, dose > pyne::doe_dose_map
 
+
std::map< int, dose > pyne::genii_dose_map
 
void pyne::_load_dose_map (std::map< int, dose > &dm, std::string source_path)
double pyne::ext_air_dose (int nuc, int source)
 Returns the dose factors of a nuclide. More...
 
+
double pyne::ext_air_dose (const char *nuc, int source)
 
+
double pyne::ext_air_dose (std::string nuc, int source)
 
double pyne::ext_soil_dose (int nuc, int source)
 
+
double pyne::ext_soil_dose (const char *nuc, int source)
 
+
double pyne::ext_soil_dose (std::string nuc, int source)
 
double pyne::ingest_dose (int nuc, int source)
 Ingestion. More...
 
+
double pyne::ingest_dose (const char *nuc, int source)
 
+
double pyne::ingest_dose (std::string nuc, int source)
 
double pyne::inhale_dose (int nuc, int source)
 Inhalation. More...
 
+
double pyne::inhale_dose (const char *nuc, int source)
 
+
double pyne::inhale_dose (std::string nuc, int source)
 
+
double pyne::dose_ratio (int nuc, int source)
 Dose Ratio.
 
+
double pyne::dose_ratio (const char *nuc, int source)
 
+
double pyne::dose_ratio (std::string nuc, int source)
 
+
double pyne::dose_fluid_frac (int nuc, int source)
 Fluid Fraction.
 
+
double pyne::dose_fluid_frac (const char *nuc, int source)
 
+
double pyne::dose_fluid_frac (std::string nuc, int source)
 
+
std::string pyne::dose_lung_model (int nuc, int source)
 Lung Model.
 
+
std::string pyne::dose_lung_model (const char *nuc, int source)
 
+
std::string pyne::dose_lung_model (std::string nuc, int source)
 
- - - - - - - - - - - -

Scattering Length Data

+
typedef struct pyne::scattering_lengths pyne::scattering_lengths
 a struct matching the '/neutron/scattering_lengths' table in nuc_data.h5.
 
+
std::map< int, xd_complex_tpyne::b_coherent_map = std::map<int, xd_complex_t>()
 Mapping from nuclides in id form to their coherent scattering length.
 
+
std::map< int, xd_complex_tpyne::b_incoherent_map = std::map<int, xd_complex_t>()
 Mapping from nuclides in id form to their incoherent scattering length.
 
+
std::map< int, double > pyne::b_map = std::map<int, double>()
 Mapping from nuclides in id form to their scattering length.
 
+
void pyne::_load_scattering_lengths ()
 Loads the scattering length data from the nuc_data.h5 file into memory.
 
xd_complex_t pyne::b_coherent (int nuc)
 Finds the coherent scattering length [cm] for a nuclide nuc. More...
 
+
xd_complex_t pyne::b_coherent (char *nuc)
 Finds the coherent scattering length [cm] for a nuclide nuc.
 
+
xd_complex_t pyne::b_coherent (std::string nuc)
 Finds the coherent scattering length [cm] for a nuclide nuc.
 
xd_complex_t pyne::b_incoherent (int nuc)
 Finds the incoherent scattering length [cm] for a nuclide nuc. More...
 
+
xd_complex_t pyne::b_incoherent (char *nuc)
 Finds the incoherent scattering length [cm] for a nuclide nuc.
 
+
xd_complex_t pyne::b_incoherent (std::string nuc)
 Finds the incoherent scattering length [cm] for a nuclide nuc.
 
+
double pyne::b (int nuc)
 Computes the scattering length [cm] from the coherent and incoherent components.
 
+
double pyne::b (char *nuc)
 Computes the scattering length [cm] from the coherent and incoherent components.
 
+
double pyne::b (std::string nuc)
 Computes the scattering length [cm] from the coherent and incoherent components.
 
- - - @@ -463,82 +443,82 @@ - - - - -

Fission Product Yield Data

+
typedef struct pyne::wimsdfpy pyne::wimsdfpy
 a struct matching the '/neutron/wimsd_fission_product' table in nuc_data.h5.
 
+
typedef struct pyne::ndsfpy pyne::ndsfpy
 a struct matching the '/neutron/nds_fission_product' table in nuc_data.h5
 
+
typedef struct pyne::ndsfpysub pyne::ndsfpysub
 a struct for the nds data for fpyield
 
 
std::map< std::pair< int, int >, ndsfpysub > pyne::ndsfpy_data
 
+
void pyne::_load_wimsdfpy ()
 Loads the WIMSD fission product yield data from the nuc_data.h5 file into memory.
 
+
void pyne::_load_ndsfpy ()
 Loads the NDS fission product yield data from the nuc_data.h5 file into memory.
 
double pyne::fpyield (std::pair< int, int > from_to, int source, bool get_error)
 Returns the fission product yield for a parent/child nuclide pair. More...
 
+
double pyne::fpyield (int from_nuc, int to_nuc, int source, bool get_error)
 Returns the fission product yield for a parent/child nuclide pair.
 
+
double pyne::fpyield (char *from_nuc, char *to_nuc, int source, bool get_error)
 Returns the fission product yield for a parent/child nuclide pair.
 
+
double pyne::fpyield (std::string from_nuc, std::string to_nuc, int source, bool get_error)
 Returns the fission product yield for a parent/child nuclide pair.
 
- - - - - - - - - - - - - @@ -554,229 +534,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -784,25 +764,25 @@ - - - - - - -

Decay Data

+
typedef struct pyne::atomic pyne::atomic
 Structure for atomic data.
 
+
typedef struct pyne::level_data pyne::level_data
 a struct matching the '/decay/level_list' table in nuc_data.h5.
 
+
typedef struct pyne::decay pyne::decay
 a struct matching the '/decay/decays' table in nuc_data.h5.
 
+
typedef struct pyne::gamma pyne::gamma
 a struct matching the '/decay/gammas' table in nuc_data.h5.
 
+
typedef struct pyne::alpha pyne::alpha
 a struct matching the '/decay/alphas' table in nuc_data.h5.
 
+
typedef struct pyne::beta pyne::beta
 a struct matching the '/decay/betas' table in nuc_data.h5.
 
+
typedef struct pyne::ecbp pyne::ecbp
 A struct matching the '/decay/ecbp' table in nuc_data.h5.
 
+
std::map< int, atomic > pyne::atomic_data_map
 
std::map< std::pair< int, double >, level_data > pyne::level_data_lvl_map
 
+
std::map< std::pair< int, unsigned int >, level_data > pyne::level_data_rx_map
 
std::map< std::pair< int, int >, decay > pyne::decay_data
 
+
std::map< std::pair< int, double >, gamma > pyne::gamma_data
 
+
std::map< std::pair< int, double >, alpha > pyne::alpha_data
 A vector of structs containing alpha data for access in memory.
 
+
std::map< std::pair< int, double >, beta > pyne::beta_data
 A vector of structs containing beta data for access in memory.
 
+
std::map< std::pair< int, double >, ecbp > pyne::ecbp_data
 A vector of structs containing ecbp data for access in memory.
 
template<typename T , typename U >
std::vector< T > pyne::data_access (int parent, size_t valoffset, std::map< std::pair< int, int >, U > &data)
 
+
template<typename T , typename U >
std::vector< T > pyne::data_access (int parent, size_t valoffset, std::map< std::pair< int, unsigned int >, U > &data)
 
template<typename U >
double pyne::data_access (int parent, size_t valoffset, std::map< int, U > &data)
 
+
template<typename T >
void pyne::_load_data ()
 
+
template<>
void pyne::_load_data< atomic > ()
 
+
std::vector< std::pair< double, double > > pyne::calculate_xray_data (int z, double k_conv, double l_conv)
 
+
template<>
void pyne::_load_data< level_data > ()
 
int pyne::id_from_level (int nuc, double level)
 Returns the nuc_id of an energy level. More...
 
+
int pyne::id_from_level (int nuc, double level, std::string special)
 
int pyne::metastable_id (int nuc, int m)
 Returns the nuc_id of a metastable state. More...
 
+
int pyne::metastable_id (int nuc)
 Assumes the first metastable state is the desired one.
 
double pyne::half_life (int nuc)
 Returns the half life for a nuclide nuc. More...
 
+
double pyne::half_life (char *nuc)
 Returns the half life for a nuclide nuc.
 
+
double pyne::half_life (std::string nuc)
 Returns the half life for a nuclide nuc.
 
double pyne::decay_const (int nuc)
 Returns the decay constant for a nuclide nuc. More...
 
+
double pyne::decay_const (char *nuc)
 Returns the decay constant for a nuclide nuc.
 
+
double pyne::decay_const (std::string nuc)
 Returns the decay constant for a nuclide nuc.
 
double pyne::branch_ratio (std::pair< int, int > from_to)
 Returns the branch ratio for a parent/child nuclide pair. More...
 
+
double pyne::branch_ratio (int from_nuc, int to_nuc)
 Returns the branch ratio for a parent/child nuclide pair.
 
+
double pyne::branch_ratio (char *from_nuc, char *to_nuc)
 Returns the branch ratio for a parent/child nuclide pair.
 
+
double pyne::branch_ratio (std::string from_nuc, std::string to_nuc)
 Returns the branch ratio for a parent/child nuclide pair.
 
double pyne::state_energy (int nuc)
 Returns the excitation energy [MeV] of a nuc in a given state. More...
 
+
double pyne::state_energy (char *nuc)
 Returns the excitation energy [MeV] of a nuc in a given state.
 
+
double pyne::state_energy (std::string nuc)
 Returns the excitation energy [MeV] of a nuc in a given state.
 
std::set< int > pyne::decay_children (int nuc)
 Returns a set of decay children of a nuc. More...
 
+
std::set< int > pyne::decay_children (char *nuc)
 Returns the decay constant for a nuclide nuc.
 
+
std::set< int > pyne::decay_children (std::string nuc)
 Returns the decay constant for a nuclide nuc.
 
+
template<>
void pyne::_load_data< decay > ()
 Loads the decay data from the nuc_data.h5 file into memory.
 
+
std::vector< int > pyne::decay_data_children (int parent)
 
+
std::pair< double, double > pyne::decay_half_life (std::pair< int, int >)
 
+
std::vector< std::pair< double, double > > pyne::decay_half_lifes (int)
 
+
std::pair< double, double > pyne::decay_branch_ratio (std::pair< int, int >)
 
+
std::vector< double > pyne::decay_branch_ratios (int parent)
 
+
std::pair< double, double > pyne::decay_photon_branch_ratio (std::pair< int, int >)
 
+
std::vector< std::pair< double, double > > pyne::decay_photon_branch_ratios (int parent)
 
+
std::pair< double, double > pyne::decay_beta_branch_ratio (std::pair< int, int >)
 
+
std::vector< std::pair< double, double > > pyne::decay_beta_branch_ratios (int parent)
 
+
template<>
void pyne::_load_data< gamma > ()
 Loads the gamma ray data from the nuc_data.h5 file into memory.
 
+
std::vector< std::pair< double, double > > pyne::gamma_energy (int parent)
 
+
std::vector< std::pair< double, double > > pyne::gamma_energy (double energy, double error)
 
+
std::vector< std::pair< double, double > > pyne::gamma_photon_intensity (int parent)
 
+
std::vector< std::pair< double, double > > pyne::gamma_photon_intensity (double energy, double error)
 
+
std::vector< std::pair< double, double > > pyne::gamma_conversion_intensity (int parent)
 
+
std::vector< std::pair< double, double > > pyne::gamma_total_intensity (int parent)
 
+
std::vector< std::pair< int, int > > pyne::gamma_from_to (int parent)
 
+
std::vector< std::pair< int, int > > pyne::gamma_from_to (double energy, double error)
 
+
std::vector< std::pair< int, int > > pyne::gamma_parent_child (double energy, double error)
 
+
std::vector< int > pyne::gamma_parent (double energy, double error)
 
+
std::vector< int > pyne::gamma_child (double energy, double error)
 
+
std::vector< int > pyne::gamma_child (int parent)
 
+
std::vector< std::pair< double, double > > pyne::gamma_xrays (int parent)
 
std::vector< std::pair< double, double > > pyne::gammas (int parent_state_id)
 Returns a list of energies and intensities normalized to branching ratios. More...
 
+
std::vector< std::pair< double, double > > pyne::alphas (int parent_state_id)
 
+
std::vector< std::pair< double, double > > pyne::betas (int parent_state_id)
 
+
std::vector< std::pair< double, double > > pyne::xrays (int parent)
 
+
template<>
void pyne::_load_data< alpha > ()
 Loads the alpha decay data from the nuc_data.h5 file into memory.
 
+
std::vector< double > pyne::alpha_energy (int parent)
 
+
std::vector< double > pyne::alpha_intensity (int parent)
 
+
std::vector< int > pyne::alpha_parent (double energy, double error)
 
+
std::vector< int > pyne::alpha_child (double energy, double error)
 
+
std::vector< int > pyne::alpha_child (int parent)
 
+
template<>
void pyne::_load_data< beta > ()
 Loads the beta decay data from the nuc_data.h5 file into memory.
 
+
std::vector< double > pyne::beta_endpoint_energy (int parent)
 
+
std::vector< double > pyne::beta_average_energy (int parent)
 
+
std::vector< double > pyne::beta_intensity (int parent)
 
+
std::vector< int > pyne::beta_parent (double energy, double error)
 
+
std::vector< int > pyne::beta_child (double energy, double error)
 
+
std::vector< int > pyne::beta_child (int parent)
 
template<>
 
std::vector< double > pyne::ecbp_endpoint_energy (int parent)
 
+
std::vector< double > pyne::ecbp_average_energy (int parent)
 
+
std::vector< double > pyne::ec_intensity (int parent)
 
+
std::vector< double > pyne::bp_intensity (int parent)
 
+
std::vector< int > pyne::ecbp_parent (double energy, double error)
 
+
std::vector< int > pyne::ecbp_child (double energy, double error)
 
+
std::vector< int > pyne::ecbp_child (int parent)
 
+
std::vector< std::pair< double, double > > pyne::ecbp_xrays (int parent)
 
@@ -812,9 +792,9 @@
diff --git a/cppapi/html/data_8h_source.html b/cppapi/html/data_8h_source.html index 0c637ba1..42bb767d 100644 --- a/cppapi/html/data_8h_source.html +++ b/cppapi/html/data_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/data.h Source File + + +PyNE C++: /root/repo/src/data.h Source File - @@ -31,39 +29,19 @@
- + - - + + + +
data.h
-Go to the documentation of this file.
1 
6 #ifndef PYNE_TEWK4A7VOFFLHDDXD5ZZ7KPXEQ
7 #define PYNE_TEWK4A7VOFFLHDDXD5ZZ7KPXEQ
8 #include <iostream>
9 #include <string>
10 #include <utility>
11 #include <map>
12 #include <set>
13 #include <limits>
14 #include <exception>
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <float.h>
18 #include <math.h>
19 
20 #include "hdf5.h"
21 #include "hdf5_hl.h"
22 
23 #ifndef PYNE_IS_AMALGAMATED
24 #include "h5wrap.h"
25 #include "extra_types.h"
26 #include "utils.h"
27 #include "nucname.h"
28 #include "rxname.h"
29 #endif
30 
31 namespace pyne
32 {
35  extern const double pi;
36  extern const double N_A;
37  extern const double barns_per_cm2;
38  extern const double cm2_per_barn;
39  extern const double sec_per_day;
40  extern const double MeV_per_K;
41  extern const double MeV_per_MJ;
42  extern const double Bq_per_Ci;
43  extern const double Ci_per_Bq;
44 
46  extern std::string NUC_DATA_PATH;
47 
49  extern std::map<std::string, std::string> data_checksums;
50 
53 
55  extern std::map<int, double> atomic_mass_map;
56 
58  typedef struct atomic_mass_data {
59  int nuc;
60  double mass;
61  double error;
62  double abund;
64 
65  // Loads preset dataset hashes into memory.
66  std::map<std::string, std::string> get_data_checksums();
67 
70  void _load_atomic_mass_map();
71 
78  double atomic_mass(int nuc);
80  double atomic_mass(char * nuc);
82  double atomic_mass(std::string nuc);
84 
85 
88 
90  extern std::map<int, double> natural_abund_map;
91 
97  double natural_abund(int nuc);
99  double natural_abund(char * nuc);
101  double natural_abund(std::string nuc);
103 
104 
105 
108 
111  extern std::map<int, double> q_val_map;
112  extern std::map<int, double> gamma_frac_map;
113 
115  typedef struct q_val_data {
116  int nuc;
117  double q_val;
118  double gamma_frac;
119  } q_val_data;
120 
122  void _load_q_val_map();
123 
129  double q_val(int nuc);
130  double q_val(const char * nuc);
131  double q_val(std::string nuc);
132  double gamma_frac(int nuc);
133  double gamma_frac(const char * nuc);
134  double gamma_frac(std::string nuc);
136 
137 
140 
142  typedef struct dose {
143  int nuc;
144  double ext_air_dose;
145  double ratio;
146  double ext_soil_dose;
147  double ingest_dose;
148  double fluid_frac;
149  double inhale_dose;
150  char lung_mod;
151  } dose;
152 
154  extern std::map<int, dose> epa_dose_map;
155  extern std::map<int, dose> doe_dose_map;
156  extern std::map<int, dose> genii_dose_map;
157 
160  void _load_dose_map(std::map<int, dose>& dm, std::string source_path);
161 
167  double ext_air_dose(int nuc, int source);
168  double ext_air_dose(const char * nuc, int source);
169  double ext_air_dose(std::string nuc, int source);
170  double ext_soil_dose(int nuc, int source);
171  double ext_soil_dose(const char * nuc, int source);
172  double ext_soil_dose(std::string nuc, int source);
173  double ingest_dose(int nuc, int source);
174  double ingest_dose(const char * nuc, int source);
175  double ingest_dose(std::string nuc, int source);
176  double inhale_dose(int nuc, int source);
177  double inhale_dose(const char * nuc, int source);
178  double inhale_dose(std::string nuc, int source);
179  double dose_ratio(int nuc, int source);
180  double dose_ratio(const char * nuc, int source);
181  double dose_ratio(std::string nuc, int source);
182  double dose_fluid_frac(int nuc, int source);
183  double dose_fluid_frac(const char * nuc, int source);
184  double dose_fluid_frac(std::string nuc, int source);
185  std::string dose_lung_model(int nuc, int source);
186  std::string dose_lung_model(const char * nuc, int source);
187  std::string dose_lung_model(std::string nuc, int source);
189 
190 
191 
194 
196  extern std::map<int, xd_complex_t> b_coherent_map;
198  extern std::map<int, xd_complex_t> b_incoherent_map;
200  extern std::map<int, double> b_map;
201 
203  typedef struct scattering_lengths {
204  int nuc;
207  double xs_coherent;
208  double xs_incoherent;
209  double xs;
211 
214 
224  xd_complex_t b_coherent(char * nuc);
226  xd_complex_t b_coherent(std::string nuc);
227 
233  xd_complex_t b_incoherent(char * nuc);
235  xd_complex_t b_incoherent(std::string nuc);
236 
238  double b(int nuc);
240  double b(char * nuc);
242  double b(std::string nuc);
244 
245 
248 
250  extern std::map<std::pair<int, int>, double> wimsdfpy_data;
251 
253  typedef struct wimsdfpy {
254  int from_nuc;
255  int to_nuc;
256  double yields;
257  } wimsdfpy;
258 
260  void _load_wimsdfpy();
261 
263  typedef struct ndsfpy {
264  int from_nuc;
265  int to_nuc;
266  double yield_thermal;
268  double yield_fast;
269  double yield_fast_err;
270  double yield_14MeV;
272  } ndsfpy;
273 
275  typedef struct ndsfpysub {
276  double yield_thermal;
278  double yield_fast;
279  double yield_fast_err;
280  double yield_14MeV;
282  } ndsfpysub;
283 
284 
285  extern std::map<std::pair<int, int>, ndsfpysub> ndsfpy_data;
286 
288  void _load_ndsfpy();
289 
298  double fpyield(std::pair<int, int> from_to, int source, bool get_error);
300  double fpyield(int from_nuc, int to_nuc, int source, bool get_error);
302  double fpyield(char * from_nuc, char * to_nuc, int source, bool get_error);
304  double fpyield(std::string from_nuc, std::string to_nuc, int source, bool get_error);
305 
307 
308 
311 
313 
316  public:
318  bool operator()(const std::pair<int, double>& lhs,
319  const std::pair<int, double>& rhs) const;
320  };
321 
325  template<typename T, typename U> std::vector<T> data_access(double emin,
326  double emax, size_t valoffset, std::map<std::pair<int, double>, U> &data);
330  template<typename T, typename U> std::vector<T> data_access(int parent,
331  double min, double max, size_t valoffset,
332  std::map<std::pair<int, double>, U> &data);
336  template<typename T, typename U> T data_access(std::pair<int, int> from_to,
337  size_t valoffset, std::map<std::pair<int, int>, U> &data);
341  template<typename T, typename U> std::vector<T> data_access(int parent,
342  size_t valoffset, std::map<std::pair<int, int>, U> &data);
343  template<typename T, typename U> std::vector<T> data_access(int parent,
344  size_t valoffset, std::map<std::pair<int, unsigned int>, U> &data);
345 
348  template<typename U> double data_access(int parent,
349  size_t valoffset, std::map<int, U> &data);
350 
352  typedef struct atomic{
353  int z;
354  double k_shell_fluor;
356  double l_shell_fluor;
358  double prob;
359  double k_shell_be;
360  double k_shell_be_err;
361  double li_shell_be;
363  double mi_shell_be;
365  double ni_shell_be;
367  double kb_to_ka;
368  double kb_to_ka_err;
369  double ka2_to_ka1;
370  double ka2_to_ka1_err;
371  double k_auger;
372  double l_auger;
373  double ka1_x_ray_en;
375  double ka2_x_ray_en;
377  double kb_x_ray_en;
378  double l_x_ray_en;
379  } atomic;
380 
381  // map of Z to atomic data
382  extern std::map<int, atomic> atomic_data_map;
383 
384  template<typename T> void _load_data();
385  template<> void _load_data<atomic>();
386 
387  // compute X-ray data
388  std::vector<std::pair<double, double> >
389  calculate_xray_data(int z, double k_conv, double l_conv);
390 
391 
393  typedef struct level_data{
394  int nuc_id;
395  unsigned int rx_id;
396  double half_life;
397  double level;
398  double branch_ratio;
400  char special;
401  } level_data;
402 
405  extern std::map<std::pair<int,double>, level_data> level_data_lvl_map;
406  extern std::map<std::pair<int,unsigned int>, level_data> level_data_rx_map;
407 
408  template<> void _load_data<level_data>();
409 
414  int id_from_level(int nuc, double level);
415  int id_from_level(int nuc, double level, std::string special);
420  int metastable_id(int nuc, int m);
422  int metastable_id(int nuc);
423 
429  double half_life(int nuc);
431  double half_life(char * nuc);
433  double half_life(std::string nuc);
434 
440  double decay_const(int nuc);
442  double decay_const(char * nuc);
444  double decay_const(std::string nuc);
445 
451  double branch_ratio(std::pair<int, int> from_to);
453  double branch_ratio(int from_nuc, int to_nuc);
455  double branch_ratio(char * from_nuc, char * to_nuc);
457  double branch_ratio(std::string from_nuc, std::string to_nuc);
458 
464  double state_energy(int nuc);
466  double state_energy(char * nuc);
468  double state_energy(std::string nuc);
469 
475  std::set<int> decay_children(int nuc);
477  std::set<int> decay_children(char * nuc);
479  std::set<int> decay_children(std::string nuc);
480 
482  typedef struct decay{
483  int parent;
484  int child;
485  unsigned int decay;
486  double half_life;
488  double branch_ratio;
490  double photon_branch_ratio;
498  } decay;
499 
501  template<> void _load_data<decay>();
504  extern std::map<std::pair<int, int>, decay> decay_data;
505 
506  //
507  //
508  std::vector<int> decay_data_children(int parent);
509  std::pair<double, double> decay_half_life(std::pair<int,int>);
510  std::vector<std::pair<double, double> > decay_half_lifes(int);
511  std::pair<double, double> decay_branch_ratio(std::pair<int,int>);
512  std::vector<double> decay_branch_ratios(int parent);
513  std::pair<double, double> decay_photon_branch_ratio(std::pair<int,int>);
514  std::vector<std::pair<double, double> >decay_photon_branch_ratios(int parent);
515  std::pair<double, double> decay_beta_branch_ratio(std::pair<int,int>);
516  std::vector<std::pair<double, double> >decay_beta_branch_ratios(int parent);
517 
518 
520  typedef struct gamma{
521  int from_nuc;
522  int to_nuc;
524  int child_nuc;
525  double energy;
526  double energy_err;
529  double conv_intensity;
533  double k_conv_e;
534  double l_conv_e;
535  double m_conv_e;
536  } gamma;
537 
539  template<> void _load_data<gamma>();
540 
541  extern std::map<std::pair<int, double>, gamma> gamma_data;
542 
543  //returns a list of gamma decay energies from input parent nuclide
544  std::vector<std::pair<double, double> > gamma_energy(int parent);
545  std::vector<std::pair<double, double> > gamma_energy(double energy,
546  double error);
547  //returns a list of gamma photon intensities from input parent nuclide
548  std::vector<std::pair<double, double> > gamma_photon_intensity(int parent);
549  std::vector<std::pair<double, double> > gamma_photon_intensity(double energy,
550  double error);
551  //returns a list of gamma conversion intensities from input parent nuclide
552  std::vector<std::pair<double, double> > gamma_conversion_intensity(int parent);
553  //returns a list of gamma total intensities from input parent nuclide
554  std::vector<std::pair<double, double> > gamma_total_intensity(int parent);
555  //returns a list of pairs of excited state transitions from an input parent nuclide
556  std::vector<std::pair<int, int> > gamma_from_to(int parent);
557  //returns a list of pairs of excited state transitions from an decay energy
558  std::vector<std::pair<int, int> > gamma_from_to(double energy, double error);
559  //returns a list of parent/child pairs associated with an input decay energy
560  std::vector<std::pair<int, int> > gamma_parent_child(double energy, double error);
561  //returns a list of parent nuclides associated with an input decay energy
562  std::vector<int> gamma_parent(double energy, double error);
563  // returns a list of child state_id's based on a gamma-ray energy
564  std::vector<int> gamma_child(double energy, double error);
565  // returns a list of child state_id's based on a parent state_id
566  std::vector<int> gamma_child(int parent);
567  //returns an array of arrays of X-ray energies and intesities for a
568  //given parent
569  std::vector<std::pair<double, double> > gamma_xrays(int parent);
570 
572  std::vector<std::pair<double, double> > gammas(int parent_state_id);
573  std::vector<std::pair<double, double> > alphas(int parent_state_id);
574  std::vector<std::pair<double, double> > betas(int parent_state_id);
575  std::vector<std::pair<double, double> > xrays(int parent);
576 
578  typedef struct alpha{
579  int from_nuc;
580  int to_nuc;
581  double energy;
582  double intensity;
583  } alpha;
584 
586  template<> void _load_data<alpha>();
587 
589  extern std::map<std::pair<int, double>, alpha> alpha_data;
590 
591  //returns a list of alpha decay energies from input parent nuclide
592  std::vector<double > alpha_energy(int parent);
593  //returns a list of alpha decay intensities from input parent nuclide
594  std::vector<double> alpha_intensity(int parent);
595  //returns a list of alpha decay parents from input decay energy range
596  std::vector<int> alpha_parent(double energy, double error);
597  //returns a list of alpha decay children from input decay energy range
598  std::vector<int> alpha_child(double energy, double error);
599  //returns a list of alpha decay children from input parent nuclide
600  std::vector<int> alpha_child(int parent);
601 
603  typedef struct beta{
604  int from_nuc;
605  int to_nuc;
607  double avg_energy;
608  double intensity;
609  } beta;
610 
612  template<> void _load_data<beta>();
613 
615  extern std::map<std::pair<int, double>, beta> beta_data;
616  //returns a list of beta decay endpoint energies from input parent nuclide
617  std::vector<double > beta_endpoint_energy(int parent);
618  //returns a list of beta decay average energies from input parent nuclide
619  std::vector<double > beta_average_energy(int parent);
620  //returns a list of beta decay intensities from input parent nuclide
621  std::vector<double> beta_intensity(int parent);
622  //returns a list of beta decay parents from input decay energy range
623  std::vector<int> beta_parent(double energy, double error);
624  //returns a list of beta decay children from input decay energy range
625  std::vector<int> beta_child(double energy, double error);
626  //returns a list of beta decay children from input parent nuclide
627  std::vector<int> beta_child(int parent);
628 
630  typedef struct ecbp{
631  int from_nuc;
632  int to_nuc;
634  double avg_energy;
636  double ec_intensity;
637  double k_conv_e;
638  double l_conv_e;
639  double m_conv_e;
640  } ecbp;
641 
643  extern std::map<std::pair<int, double>, ecbp> ecbp_data;
644 
647  template<> void _load_data<ecbp>();
650  std::vector<double > ecbp_endpoint_energy(int parent);
651  //returns a list of electron capture/ beta plus decay average energies from
652  //input parent nuclide
653  std::vector<double > ecbp_average_energy(int parent);
654  //returns a list of electron capture decay intensities from input parent
655  //nuclide
656  std::vector<double> ec_intensity(int parent);
657  //returns a list of beta plus decay intensities from input parent nuclide
658  std::vector<double> bp_intensity(int parent);
659  //returns a list of electron capture /beta plus decay parents from input
660  //decay energy range
661  std::vector<int> ecbp_parent(double energy, double error);
662  //returns a list of electron capture /beta plus decay children from input
663  //decay energy range
664  std::vector<int> ecbp_child(double energy, double error);
665  //returns a list of electron capture /beta plus decay children from input
666  //parent nuclide
667  std::vector<int> ecbp_child(int parent);
668  //returns an array of arrays of X-ray energies and intesities for a
669  //given parent
670  std::vector<std::pair<double, double> > ecbp_xrays(int parent);
672 
674  extern std::map<std::string, std::map<int, std::map<int, double> > >
676 
681  double simple_xs(int nuc, int rx, std::string energy);
686  double simple_xs(int nuc, std::string rx, std::string energy);
691  double simple_xs(std::string nuc, int rx, std::string energy);
696  double simple_xs(std::string nuc, std::string rx, std::string energy);
697 
699  class InvalidSimpleXS : public std::exception {
700  public:
701  InvalidSimpleXS () {};
702  ~InvalidSimpleXS () throw () {};
704  InvalidSimpleXS(std::string msg) : msg_(msg) {};
706  virtual const char* what() const throw() {
707  return msg_.c_str();
708  };
709 
710  private:
711  std::string msg_;
712  };
713 
714 } // namespace pyne
715 
716 #endif
unsigned int rx_id
rx id of reaction, 0 for basic level data
Definition: data.h:395
+Go to the documentation of this file.
1 
6 #ifndef PYNE_TEWK4A7VOFFLHDDXD5ZZ7KPXEQ
7 #define PYNE_TEWK4A7VOFFLHDDXD5ZZ7KPXEQ
8 #include <iostream>
9 #include <string>
10 #include <utility>
11 #include <map>
12 #include <set>
13 #include <limits>
14 #include <exception>
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <float.h>
18 #include <math.h>
19 
20 #include "hdf5.h"
21 #include "hdf5_hl.h"
22 
23 #ifndef PYNE_IS_AMALGAMATED
24 #include "h5wrap.h"
25 #include "extra_types.h"
26 #include "utils.h"
27 #include "nucname.h"
28 #include "rxname.h"
29 #endif
30 
31 namespace pyne
32 {
35  extern const double pi;
36  extern const double N_A;
37  extern const double barns_per_cm2;
38  extern const double cm2_per_barn;
39  extern const double sec_per_day;
40  extern const double MeV_per_K;
41  extern const double MeV_per_MJ;
42  extern const double Bq_per_Ci;
43  extern const double Ci_per_Bq;
44 
46  extern std::string NUC_DATA_PATH;
47 
49  extern std::map<std::string, std::string> data_checksums;
50 
53 
55  extern std::map<int, double> atomic_mass_map;
56 
58  typedef struct atomic_mass_data {
59  int nuc;
60  double mass;
61  double error;
62  double abund;
64 
65  // Loads preset dataset hashes into memory.
66  std::map<std::string, std::string> get_data_checksums();
67 
70  void _load_atomic_mass_map();
71 
78  double atomic_mass(int nuc);
80  double atomic_mass(char * nuc);
82  double atomic_mass(std::string nuc);
84 
85 
88 
90  extern std::map<int, double> natural_abund_map;
91 
97  double natural_abund(int nuc);
99  double natural_abund(char * nuc);
101  double natural_abund(std::string nuc);
103 
104 
105 
108 
111  extern std::map<int, double> q_val_map;
112  extern std::map<int, double> gamma_frac_map;
113 
115  typedef struct q_val_data {
116  int nuc;
117  double q_val;
118  double gamma_frac;
119  } q_val_data;
120 
122  void _load_q_val_map();
123 
129  double q_val(int nuc);
130  double q_val(const char * nuc);
131  double q_val(std::string nuc);
132  double gamma_frac(int nuc);
133  double gamma_frac(const char * nuc);
134  double gamma_frac(std::string nuc);
136 
137 
140 
142  typedef struct dose {
143  int nuc;
144  double ext_air_dose;
145  double ratio;
146  double ext_soil_dose;
147  double ingest_dose;
148  double fluid_frac;
149  double inhale_dose;
150  char lung_mod;
151  } dose;
152 
154  extern std::map<int, dose> epa_dose_map;
155  extern std::map<int, dose> doe_dose_map;
156  extern std::map<int, dose> genii_dose_map;
157 
160  void _load_dose_map(std::map<int, dose>& dm, std::string source_path);
161 
167  double ext_air_dose(int nuc, int source);
168  double ext_air_dose(const char * nuc, int source);
169  double ext_air_dose(std::string nuc, int source);
170  double ext_soil_dose(int nuc, int source);
171  double ext_soil_dose(const char * nuc, int source);
172  double ext_soil_dose(std::string nuc, int source);
173  double ingest_dose(int nuc, int source);
174  double ingest_dose(const char * nuc, int source);
175  double ingest_dose(std::string nuc, int source);
176  double inhale_dose(int nuc, int source);
177  double inhale_dose(const char * nuc, int source);
178  double inhale_dose(std::string nuc, int source);
179  double dose_ratio(int nuc, int source);
180  double dose_ratio(const char * nuc, int source);
181  double dose_ratio(std::string nuc, int source);
182  double dose_fluid_frac(int nuc, int source);
183  double dose_fluid_frac(const char * nuc, int source);
184  double dose_fluid_frac(std::string nuc, int source);
185  std::string dose_lung_model(int nuc, int source);
186  std::string dose_lung_model(const char * nuc, int source);
187  std::string dose_lung_model(std::string nuc, int source);
189 
190 
191 
194 
196  extern std::map<int, xd_complex_t> b_coherent_map;
198  extern std::map<int, xd_complex_t> b_incoherent_map;
200  extern std::map<int, double> b_map;
201 
203  typedef struct scattering_lengths {
204  int nuc;
207  double xs_coherent;
208  double xs_incoherent;
209  double xs;
211 
214 
224  xd_complex_t b_coherent(char * nuc);
226  xd_complex_t b_coherent(std::string nuc);
227 
233  xd_complex_t b_incoherent(char * nuc);
235  xd_complex_t b_incoherent(std::string nuc);
236 
238  double b(int nuc);
240  double b(char * nuc);
242  double b(std::string nuc);
244 
245 
248 
250  extern std::map<std::pair<int, int>, double> wimsdfpy_data;
251 
253  typedef struct wimsdfpy {
254  int from_nuc;
255  int to_nuc;
256  double yields;
257  } wimsdfpy;
258 
260  void _load_wimsdfpy();
261 
263  typedef struct ndsfpy {
264  int from_nuc;
265  int to_nuc;
266  double yield_thermal;
268  double yield_fast;
269  double yield_fast_err;
270  double yield_14MeV;
272  } ndsfpy;
273 
275  typedef struct ndsfpysub {
276  double yield_thermal;
278  double yield_fast;
279  double yield_fast_err;
280  double yield_14MeV;
282  } ndsfpysub;
283 
284 
285  extern std::map<std::pair<int, int>, ndsfpysub> ndsfpy_data;
286 
288  void _load_ndsfpy();
289 
298  double fpyield(std::pair<int, int> from_to, int source, bool get_error);
300  double fpyield(int from_nuc, int to_nuc, int source, bool get_error);
302  double fpyield(char * from_nuc, char * to_nuc, int source, bool get_error);
304  double fpyield(std::string from_nuc, std::string to_nuc, int source, bool get_error);
305 
307 
308 
311 
313 
316  public:
318  bool operator()(const std::pair<int, double>& lhs,
319  const std::pair<int, double>& rhs) const;
320  };
321 
325  template<typename T, typename U> std::vector<T> data_access(double emin,
326  double emax, size_t valoffset, std::map<std::pair<int, double>, U> &data);
330  template<typename T, typename U> std::vector<T> data_access(int parent,
331  double min, double max, size_t valoffset,
332  std::map<std::pair<int, double>, U> &data);
336  template<typename T, typename U> T data_access(std::pair<int, int> from_to,
337  size_t valoffset, std::map<std::pair<int, int>, U> &data);
341  template<typename T, typename U> std::vector<T> data_access(int parent,
342  size_t valoffset, std::map<std::pair<int, int>, U> &data);
343  template<typename T, typename U> std::vector<T> data_access(int parent,
344  size_t valoffset, std::map<std::pair<int, unsigned int>, U> &data);
345 
348  template<typename U> double data_access(int parent,
349  size_t valoffset, std::map<int, U> &data);
350 
352  typedef struct atomic{
353  int z;
354  double k_shell_fluor;
356  double l_shell_fluor;
358  double prob;
359  double k_shell_be;
360  double k_shell_be_err;
361  double li_shell_be;
363  double mi_shell_be;
365  double ni_shell_be;
367  double kb_to_ka;
368  double kb_to_ka_err;
369  double ka2_to_ka1;
370  double ka2_to_ka1_err;
371  double k_auger;
372  double l_auger;
373  double ka1_x_ray_en;
375  double ka2_x_ray_en;
377  double kb_x_ray_en;
378  double l_x_ray_en;
379  } atomic;
380 
381  // map of Z to atomic data
382  extern std::map<int, atomic> atomic_data_map;
383 
384  template<typename T> void _load_data();
385  template<> void _load_data<atomic>();
386 
387  // compute X-ray data
388  std::vector<std::pair<double, double> >
389  calculate_xray_data(int z, double k_conv, double l_conv);
390 
391 
393  typedef struct level_data{
394  int nuc_id;
395  unsigned int rx_id;
396  double half_life;
397  double level;
398  double branch_ratio;
400  char special;
401  } level_data;
402 
405  extern std::map<std::pair<int,double>, level_data> level_data_lvl_map;
406  extern std::map<std::pair<int,unsigned int>, level_data> level_data_rx_map;
407 
408  template<> void _load_data<level_data>();
409 
414  int id_from_level(int nuc, double level);
415  int id_from_level(int nuc, double level, std::string special);
421  int metastable_id(int nuc, int m);
423  int metastable_id(int nuc);
424 
430  double half_life(int nuc);
432  double half_life(char * nuc);
434  double half_life(std::string nuc);
435 
441  double decay_const(int nuc);
443  double decay_const(char * nuc);
445  double decay_const(std::string nuc);
446 
452  double branch_ratio(std::pair<int, int> from_to);
454  double branch_ratio(int from_nuc, int to_nuc);
456  double branch_ratio(char * from_nuc, char * to_nuc);
458  double branch_ratio(std::string from_nuc, std::string to_nuc);
459 
465  double state_energy(int nuc);
467  double state_energy(char * nuc);
469  double state_energy(std::string nuc);
470 
476  std::set<int> decay_children(int nuc);
478  std::set<int> decay_children(char * nuc);
480  std::set<int> decay_children(std::string nuc);
481 
483  typedef struct decay{
484  int parent;
485  int child;
486  unsigned int decay;
487  double half_life;
489  double branch_ratio;
491  double photon_branch_ratio;
499  } decay;
500 
502  template<> void _load_data<decay>();
505  extern std::map<std::pair<int, int>, decay> decay_data;
506 
507  //
508  //
509  std::vector<int> decay_data_children(int parent);
510  std::pair<double, double> decay_half_life(std::pair<int,int>);
511  std::vector<std::pair<double, double> > decay_half_lifes(int);
512  std::pair<double, double> decay_branch_ratio(std::pair<int,int>);
513  std::vector<double> decay_branch_ratios(int parent);
514  std::pair<double, double> decay_photon_branch_ratio(std::pair<int,int>);
515  std::vector<std::pair<double, double> >decay_photon_branch_ratios(int parent);
516  std::pair<double, double> decay_beta_branch_ratio(std::pair<int,int>);
517  std::vector<std::pair<double, double> >decay_beta_branch_ratios(int parent);
518 
519 
521  typedef struct gamma{
522  int from_nuc;
523  int to_nuc;
525  int child_nuc;
526  double energy;
527  double energy_err;
530  double conv_intensity;
534  double k_conv_e;
535  double l_conv_e;
536  double m_conv_e;
537  } gamma;
538 
540  template<> void _load_data<gamma>();
541 
542  extern std::map<std::pair<int, double>, gamma> gamma_data;
543 
544  //returns a list of gamma decay energies from input parent nuclide
545  std::vector<std::pair<double, double> > gamma_energy(int parent);
546  std::vector<std::pair<double, double> > gamma_energy(double energy,
547  double error);
548  //returns a list of gamma photon intensities from input parent nuclide
549  std::vector<std::pair<double, double> > gamma_photon_intensity(int parent);
550  std::vector<std::pair<double, double> > gamma_photon_intensity(double energy,
551  double error);
552  //returns a list of gamma conversion intensities from input parent nuclide
553  std::vector<std::pair<double, double> > gamma_conversion_intensity(int parent);
554  //returns a list of gamma total intensities from input parent nuclide
555  std::vector<std::pair<double, double> > gamma_total_intensity(int parent);
556  //returns a list of pairs of excited state transitions from an input parent nuclide
557  std::vector<std::pair<int, int> > gamma_from_to(int parent);
558  //returns a list of pairs of excited state transitions from an decay energy
559  std::vector<std::pair<int, int> > gamma_from_to(double energy, double error);
560  //returns a list of parent/child pairs associated with an input decay energy
561  std::vector<std::pair<int, int> > gamma_parent_child(double energy, double error);
562  //returns a list of parent nuclides associated with an input decay energy
563  std::vector<int> gamma_parent(double energy, double error);
564  // returns a list of child state_id's based on a gamma-ray energy
565  std::vector<int> gamma_child(double energy, double error);
566  // returns a list of child state_id's based on a parent state_id
567  std::vector<int> gamma_child(int parent);
568  //returns an array of arrays of X-ray energies and intesities for a
569  //given parent
570  std::vector<std::pair<double, double> > gamma_xrays(int parent);
571 
573  std::vector<std::pair<double, double> > gammas(int parent_state_id);
574  std::vector<std::pair<double, double> > alphas(int parent_state_id);
575  std::vector<std::pair<double, double> > betas(int parent_state_id);
576  std::vector<std::pair<double, double> > xrays(int parent);
577 
579  typedef struct alpha{
580  int from_nuc;
581  int to_nuc;
582  double energy;
583  double intensity;
584  } alpha;
585 
587  template<> void _load_data<alpha>();
588 
590  extern std::map<std::pair<int, double>, alpha> alpha_data;
591 
592  //returns a list of alpha decay energies from input parent nuclide
593  std::vector<double > alpha_energy(int parent);
594  //returns a list of alpha decay intensities from input parent nuclide
595  std::vector<double> alpha_intensity(int parent);
596  //returns a list of alpha decay parents from input decay energy range
597  std::vector<int> alpha_parent(double energy, double error);
598  //returns a list of alpha decay children from input decay energy range
599  std::vector<int> alpha_child(double energy, double error);
600  //returns a list of alpha decay children from input parent nuclide
601  std::vector<int> alpha_child(int parent);
602 
604  typedef struct beta{
605  int from_nuc;
606  int to_nuc;
608  double avg_energy;
609  double intensity;
610  } beta;
611 
613  template<> void _load_data<beta>();
614 
616  extern std::map<std::pair<int, double>, beta> beta_data;
617  //returns a list of beta decay endpoint energies from input parent nuclide
618  std::vector<double > beta_endpoint_energy(int parent);
619  //returns a list of beta decay average energies from input parent nuclide
620  std::vector<double > beta_average_energy(int parent);
621  //returns a list of beta decay intensities from input parent nuclide
622  std::vector<double> beta_intensity(int parent);
623  //returns a list of beta decay parents from input decay energy range
624  std::vector<int> beta_parent(double energy, double error);
625  //returns a list of beta decay children from input decay energy range
626  std::vector<int> beta_child(double energy, double error);
627  //returns a list of beta decay children from input parent nuclide
628  std::vector<int> beta_child(int parent);
629 
631  typedef struct ecbp{
632  int from_nuc;
633  int to_nuc;
635  double avg_energy;
637  double ec_intensity;
638  double k_conv_e;
639  double l_conv_e;
640  double m_conv_e;
641  } ecbp;
642 
644  extern std::map<std::pair<int, double>, ecbp> ecbp_data;
645 
648  template<> void _load_data<ecbp>();
651  std::vector<double > ecbp_endpoint_energy(int parent);
652  //returns a list of electron capture/ beta plus decay average energies from
653  //input parent nuclide
654  std::vector<double > ecbp_average_energy(int parent);
655  //returns a list of electron capture decay intensities from input parent
656  //nuclide
657  std::vector<double> ec_intensity(int parent);
658  //returns a list of beta plus decay intensities from input parent nuclide
659  std::vector<double> bp_intensity(int parent);
660  //returns a list of electron capture /beta plus decay parents from input
661  //decay energy range
662  std::vector<int> ecbp_parent(double energy, double error);
663  //returns a list of electron capture /beta plus decay children from input
664  //decay energy range
665  std::vector<int> ecbp_child(double energy, double error);
666  //returns a list of electron capture /beta plus decay children from input
667  //parent nuclide
668  std::vector<int> ecbp_child(int parent);
669  //returns an array of arrays of X-ray energies and intesities for a
670  //given parent
671  std::vector<std::pair<double, double> > ecbp_xrays(int parent);
673 
675  extern std::map<std::string, std::map<int, std::map<int, double> > >
677 
682  double simple_xs(int nuc, int rx, std::string energy);
687  double simple_xs(int nuc, std::string rx, std::string energy);
692  double simple_xs(std::string nuc, int rx, std::string energy);
697  double simple_xs(std::string nuc, std::string rx, std::string energy);
698 
700  class InvalidSimpleXS : public std::exception {
701  public:
702  InvalidSimpleXS () {};
703  ~InvalidSimpleXS () throw () {};
705  InvalidSimpleXS(std::string msg) : msg_(msg) {};
707  virtual const char* what() const throw() {
708  return msg_.c_str();
709  };
710 
711  private:
712  std::string msg_;
713  };
714 
715 } // namespace pyne
716 
717 #endif
unsigned int rx_id
rx id of reaction, 0 for basic level data
Definition: data.h:395
struct pyne::alpha alpha
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
-
std::map< std::pair< int, int >, decay > decay_data
Definition: data.cpp:1668
+
std::map< std::pair< int, int >, decay > decay_data
Definition: data.cpp:1672
A struct matching the dose factor table in nuc_data.h5.
Definition: data.h:142
xd_complex_t b_incoherent
incoherent scattering length [cm]
Definition: data.h:206
-
std::map< std::string, std::map< int, std::map< int, double > > > simple_xs_map
map<energy, map<nuclide, map<rx, xs> > >
Definition: data.cpp:2516
-
int to_nuc
state id of child nuclide
Definition: data.h:632
-
double k_conv_e
k conversion electron fraction
Definition: data.h:637
+
std::map< std::string, std::map< int, std::map< int, double > > > simple_xs_map
map<energy, map<nuclide, map<rx, xs> > >
Definition: data.cpp:2520
+
int to_nuc
state id of child nuclide
Definition: data.h:633
+
double k_conv_e
k conversion electron fraction
Definition: data.h:638
double yield_fast_err
fast yield error [fraction]
Definition: data.h:269
struct pyne::atomic atomic
Structure for atomic data.
double prob
probability K shell hole is filled by L shell [fraction]
Definition: data.h:358
double yield_thermal
thermal yield [fraction]
Definition: data.h:266
std::map< int, double > q_val_map
Definition: data.cpp:255
struct pyne::ndsfpysub ndsfpysub
a struct for the nds data for fpyield
-
double photon_intensity
photon intensity
Definition: data.h:527
-
int to_nuc
state id of child nuclide
Definition: data.h:605
+
double photon_intensity
photon intensity
Definition: data.h:528
+
int to_nuc
state id of child nuclide
Definition: data.h:606
double ext_soil_dose(int nuc, int source)
Definition: data.cpp:507
double b(int nuc)
Computes the scattering length [cm] from the coherent and incoherent components.
Definition: data.cpp:835
int nuc
nuclide in id form
Definition: data.h:59
-
double branch_ratio(std::pair< int, int > from_to)
Returns the branch ratio for a parent/child nuclide pair.
Definition: data.cpp:1619
+
double branch_ratio(std::pair< int, int > from_to)
Returns the branch ratio for a parent/child nuclide pair.
Definition: data.cpp:1622
int nuc_id
state id of nuclide
Definition: data.h:394
-
double energy
energy of alpha
Definition: data.h:581
+
double energy
energy of alpha
Definition: data.h:582
double dose_ratio(int nuc, int source)
Dose Ratio.
Definition: data.cpp:481
-
double total_intensity
total decay intensity
Definition: data.h:531
+
double total_intensity
total decay intensity
Definition: data.h:532
const double Bq_per_Ci
Becquerel per Curie.
Definition: data.cpp:18
double xs
scattering cross section
Definition: data.h:209
std::string dose_lung_model(int nuc, int source)
Lung Model.
Definition: data.cpp:606
@@ -126,48 +104,48 @@
int nuc
nuclide in id form
Definition: data.h:204
double kb_to_ka_err
error in ratio of Kb to Ka fluorescence [fraction]
Definition: data.h:368
double ni_shell_be
N-shell binding energy [fraction].
Definition: data.h:365
-
double l_conv_e
l conversion electron fraction
Definition: data.h:638
-
double conv_intensity_err
conversion intensity error
Definition: data.h:530
-
int child_nuc
stateless id of the child nucleus
Definition: data.h:524
-
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: data.h:55
-
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: data.h:90
+
double l_conv_e
l conversion electron fraction
Definition: data.h:639
+
double conv_intensity_err
conversion intensity error
Definition: data.h:531
+
int child_nuc
stateless id of the child nucleus
Definition: data.h:525
+
std::map< int, double > atomic_mass_map
Mapping from nuclides in id form to their atomic masses.
Definition: atomic_data.h:35
+
std::map< int, double > natural_abund_map
Mapping from nuclides in id form to their natural abundances.
Definition: atomic_data.h:32
double yield_14MeV
14 MeV yield [fraction]
Definition: data.h:270
const double barns_per_cm2
barns per cm^2
Definition: data.cpp:13
struct pyne::wimsdfpy wimsdfpy
a struct matching the &#39;/neutron/wimsd_fission_product&#39; table in nuc_data.h5.
-
int to_nuc
state id of child nuclide
Definition: data.h:580
-
double avg_energy
beta decay average energy
Definition: data.h:607
-
double half_life_error
half life error of the decay [s]
Definition: data.h:487
+
int to_nuc
state id of child nuclide
Definition: data.h:581
+
double avg_energy
beta decay average energy
Definition: data.h:608
+
double half_life_error
half life error of the decay [s]
Definition: data.h:488
double l_auger
Auger electrons from l shell holes [fraction].
Definition: data.h:372
double yield_fast
fast yield [fraction]
Definition: data.h:278
double yield_thermal_err
thermal yield error [fraction]
Definition: data.h:267
-
double avg_energy
beta decay average energy
Definition: data.h:634
+
double avg_energy
beta decay average energy
Definition: data.h:635
Structure for atomic data.
Definition: data.h:352
struct pyne::ecbp ecbp
A struct matching the &#39;/decay/ecbp&#39; table in nuc_data.h5.
double li_shell_be_err
L-shell binding energy error [fraction].
Definition: data.h:362
-
double m_conv_e
m conversion electron fraction
Definition: data.h:639
-
Custom exception for declaring a simple_xs request invalid.
Definition: data.h:699
+
double m_conv_e
m conversion electron fraction
Definition: data.h:640
+
Custom exception for declaring a simple_xs request invalid.
Definition: data.h:700
void _load_data< decay >()
Loads the decay data from the nuc_data.h5 file into memory.
double mass
nuclide atomic mass [amu]
Definition: data.h:60
std::map< int, double > b_map
Mapping from nuclides in id form to their scattering length.
Definition: data.cpp:634
void _load_q_val_map()
Loads the q_value data from the nuc_data.h5 file into memory.
Definition: data.cpp:213
-
int from_nuc
state id of parent nuclide
Definition: data.h:631
-
int from_nuc
state id of parent nuclide
Definition: data.h:604
+
int from_nuc
state id of parent nuclide
Definition: data.h:632
+
int from_nuc
state id of parent nuclide
Definition: data.h:605
const double N_A
Avogadro&#39;s Number.
Definition: data.cpp:12
double ratio
ratio of external air dose factor to dose factor due to inhalation
Definition: data.h:145
-
std::vector< double > ecbp_endpoint_energy(int parent)
Definition: data.cpp:2280
+
std::vector< double > ecbp_endpoint_energy(int parent)
Definition: data.cpp:2284
xd_complex_t b_coherent(int nuc)
Finds the coherent scattering length [cm] for a nuclide nuc.
Definition: data.cpp:694
int id_from_level(int nuc, double level)
Returns the nuc_id of an energy level.
Definition: data.cpp:1461
-
std::map< std::pair< int, double >, alpha > alpha_data
A vector of structs containing alpha data for access in memory.
Definition: data.cpp:2057
+
std::map< std::pair< int, double >, alpha > alpha_data
A vector of structs containing alpha data for access in memory.
Definition: data.cpp:2061
double dose_fluid_frac(int nuc, int source)
Fluid Fraction.
Definition: data.cpp:557
a struct matching the &#39;/neutron/wimsd_fission_product&#39; table in nuc_data.h5.
Definition: data.h:253
struct pyne::scattering_lengths scattering_lengths
a struct matching the &#39;/neutron/scattering_lengths&#39; table in nuc_data.h5.
-
double branch_ratio_error
Definition: data.h:489
-
double beta_branch_ratio_error
beta branching ratio error of this decay [fraction]
Definition: data.h:497
+
double branch_ratio_error
Definition: data.h:490
+
double beta_branch_ratio_error
beta branching ratio error of this decay [fraction]
Definition: data.h:498
Data access functions.
Definition: data.h:315
-
double energy
energy of the photon [keV]
Definition: data.h:525
-
a struct matching the &#39;/decay/betas&#39; table in nuc_data.h5.
Definition: data.h:603
+
double energy
energy of the photon [keV]
Definition: data.h:526
+
a struct matching the &#39;/decay/betas&#39; table in nuc_data.h5.
Definition: data.h:604
double l_shell_fluor_error
L-shell fluorescence error [fraction].
Definition: data.h:357
-
double conv_intensity
conversion intensity
Definition: data.h:529
+
double conv_intensity
conversion intensity
Definition: data.h:530
double l_x_ray_en
L X-ray energy [keV].
Definition: data.h:378
double ni_shell_be_err
N-shell binding energy error [fraction].
Definition: data.h:366
double level
level energy [keV]
Definition: data.h:397
@@ -175,15 +153,15 @@
std::string NUC_DATA_PATH
Path to the nuc_data.h5 file.
Definition: utils.h:50
a struct matching the q_value table in nuc_data.h5.
Definition: data.h:115
int from_nuc
from nuclide in id form
Definition: data.h:254
-
std::map< std::pair< int, double >, beta > beta_data
A vector of structs containing beta data for access in memory.
Definition: data.cpp:2134
-
double ec_intensity
intensity of electron capture
Definition: data.h:636
-
int child
state id of decay child
Definition: data.h:484
+
std::map< std::pair< int, double >, beta > beta_data
A vector of structs containing beta data for access in memory.
Definition: data.cpp:2138
+
double ec_intensity
intensity of electron capture
Definition: data.h:637
+
int child
state id of decay child
Definition: data.h:485
double yield_fast
fast yield [fraction]
Definition: data.h:268
-
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
Definition: data.h:578
+
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
Definition: data.h:579
-
const double Ci_per_Bq
Definition: data.cpp:19
-
double branch_ratio
branching ratio of this decay [fraction]
Definition: data.h:488
-
double l_conv_e
l conversion electron fraction
Definition: data.h:534
+
const double Ci_per_Bq
Curies per Becquerel.
Definition: data.cpp:19
+
double branch_ratio
branching ratio of this decay [fraction]
Definition: data.h:489
+
double l_conv_e
l conversion electron fraction
Definition: data.h:535
double k_shell_be_err
K-shell binding energy error [fraction].
Definition: data.h:360
double inhale_dose
nuclide dose factor due to inhalation [mrem/pCi]
Definition: data.h:149
double yield_fast_err
fast yield error [fraction]
Definition: data.h:279
@@ -192,30 +170,30 @@
double gamma_frac
fraction of q that comes from gammas
Definition: data.h:118
double k_shell_fluor_error
K-shell fluorescence error [fraction].
Definition: data.h:355
struct pyne::dose dose
A struct matching the dose factor table in nuc_data.h5.
-
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
Definition: data.h:482
-
double state_energy(int nuc)
Returns the excitation energy [MeV] of a nuc in a given state.
Definition: data.cpp:1544
+
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
Definition: data.h:483
+
double state_energy(int nuc)
Returns the excitation energy [MeV] of a nuc in a given state.
Definition: data.cpp:1547
struct pyne::ndsfpy ndsfpy
a struct matching the &#39;/neutron/nds_fission_product&#39; table in nuc_data.h5
-
double m_conv_e
m conversion electron fraction
Definition: data.h:535
+
double m_conv_e
m conversion electron fraction
Definition: data.h:536
double yield_14MeV
14 MeV yield [fraction]
Definition: data.h:280
double inhale_dose(int nuc, int source)
Inhalation.
Definition: data.cpp:584
a struct matching the &#39;/decay/level_list&#39; table in nuc_data.h5.
Definition: data.h:393
void _load_ndsfpy()
Loads the NDS fission product yield data from the nuc_data.h5 file into memory.
Definition: data.cpp:926
-
A struct matching the &#39;/decay/ecbp&#39; table in nuc_data.h5.
Definition: data.h:630
+
A struct matching the &#39;/decay/ecbp&#39; table in nuc_data.h5.
Definition: data.h:631
char special
special high-spin state [character]
Definition: data.h:400
-
int to_nuc
state id of final level
Definition: data.h:522
+
int to_nuc
state id of final level
Definition: data.h:523
double fluid_frac
fraction of activity abosorbed in body fluids
Definition: data.h:148
-
double photon_branch_ratio_error
photon branching ratio error of this decay [fraction]
Definition: data.h:493
-
int from_nuc
state id of starting level
Definition: data.h:521
+
double photon_branch_ratio_error
photon branching ratio error of this decay [fraction]
Definition: data.h:494
+
int from_nuc
state id of starting level
Definition: data.h:522
double k_shell_be
K-shell binding energy [fraction].
Definition: data.h:359
double natural_abund(int nuc)
Returns the natural abundance of a nuclide nuc.
Definition: data.cpp:157
double mi_shell_be_err
M-shell binding energy error [fraction].
Definition: data.h:364
struct pyne::q_val_data q_val_data
a struct matching the q_value table in nuc_data.h5.
double ext_air_dose(int nuc, int source)
Returns the dose factors of a nuclide.
Definition: data.cpp:458
double k_shell_fluor
K-shell fluorescence [fraction].
Definition: data.h:354
-
std::map< std::pair< int, double >, ecbp > ecbp_data
A vector of structs containing ecbp data for access in memory.
Definition: data.cpp:2219
+
std::map< std::pair< int, double >, ecbp > ecbp_data
A vector of structs containing ecbp data for access in memory.
Definition: data.cpp:2223
double ext_air_dose
nuclide ext_air dose factor [mrem/h per Ci/m^3]
Definition: data.h:144
xd_complex_t b_incoherent(int nuc)
Finds the incoherent scattering length [cm] for a nuclide nuc.
Definition: data.cpp:766
-
double intensity
beta intensity
Definition: data.h:608
+
double intensity
beta intensity
Definition: data.h:609
double l_shell_fluor
L-shell fluorescence [fraction].
Definition: data.h:356
struct pyne::decay decay
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
std::map< int, xd_complex_t > b_coherent_map
Mapping from nuclides in id form to their coherent scattering length.
Definition: data.cpp:632
@@ -224,23 +202,24 @@
int to_nuc
from nuclide in id form
Definition: data.h:255
const double MeV_per_MJ
MeV per MJ.
Definition: data.cpp:17
struct pyne::level_data level_data
a struct matching the &#39;/decay/level_list&#39; table in nuc_data.h5.
-
a struct matching the &#39;/decay/gammas&#39; table in nuc_data.h5.
Definition: data.h:520
+
a struct matching the &#39;/decay/gammas&#39; table in nuc_data.h5.
Definition: data.h:521
double abund
natural abundance of nuclide [atom fraction]
Definition: data.h:62
void _load_atomic_mass_map()
Definition: data.cpp:47
-
double intensity
intensity of alpha decay
Definition: data.h:582
+
double intensity
intensity of alpha decay
Definition: data.h:583
int nuc
nuclide in id form
Definition: data.h:143
double k_auger
Auger electrons from k shell holes [fraction].
Definition: data.h:371
-
double endpoint_energy
beta decay endpoint energy
Definition: data.h:633
+
double endpoint_energy
beta decay endpoint energy
Definition: data.h:634
std::map< std::pair< int, double >, level_data > level_data_lvl_map
Definition: data.cpp:1364
std::vector< T > data_access(double emin, double emax, size_t valoffset, std::map< std::pair< int, double >, U > &data)
Definition: data.cpp:1079
Provides some HDF5 helper functionality in its own namespace.
void _load_data< beta >()
Loads the beta decay data from the nuc_data.h5 file into memory.
double yield_14MeV_err
14 MeV yield error [fraction]
Definition: data.h:281
+
virtual const char * what() const
Exception returns the string passed when thrown.
Definition: data.h:707
double q_val
nuclide q_value [MeV/fission]
Definition: data.h:117
double ka1_x_ray_en_err
Ka1 X-ray energy error [keV].
Definition: data.h:374
double yield_14MeV_err
14 MeV yield error [fraction]
Definition: data.h:271
double xs_coherent
coherent scattering cross section
Definition: data.h:207
-
double endpoint_energy
beta decay endpoint energy
Definition: data.h:606
+
double endpoint_energy
beta decay endpoint energy
Definition: data.h:607
double kb_to_ka
ratio of Kb to Ka fluorescence [fraction]
Definition: data.h:367
std::set< int > decay_children(int nuc)
Returns a set of decay children of a nuc.
Definition: data.cpp:1498
const double cm2_per_barn
cm^2 per barn
Definition: data.cpp:14
@@ -250,61 +229,60 @@
struct pyne::atomic_mass_data atomic_mass_data
a struct matching the atomic_mass table in nuc_data.h5.
double yields
fission product yield, fraction [unitless]
Definition: data.h:256
a struct matching the &#39;/neutron/nds_fission_product&#39; table in nuc_data.h5
Definition: data.h:263
-
double energy_err
energy error of the photon [keV]
Definition: data.h:526
+
double energy_err
energy error of the photon [keV]
Definition: data.h:527
double xs_incoherent
incoherent scattering cross section
Definition: data.h:208
-
int from_nuc
state id of parent nuclide
Definition: data.h:579
-
int parent
state id of decay parent
Definition: data.h:483
+
int from_nuc
state id of parent nuclide
Definition: data.h:580
+
int parent
state id of decay parent
Definition: data.h:484
std::map< std::string, std::string > data_checksums
Mapping from nodes in nuc_data.h5 to hashes of nodes.
Definition: data.cpp:39
-
std::vector< std::pair< double, double > > gammas(int parent_state_id)
Returns a list of energies and intensities normalized to branching ratios.
Definition: data.cpp:2358
-
double photon_intensity_err
photon intensity error
Definition: data.h:528
+
std::vector< std::pair< double, double > > gammas(int parent_state_id)
Returns a list of energies and intensities normalized to branching ratios.
Definition: data.cpp:2362
+
double photon_intensity_err
photon intensity error
Definition: data.h:529
double yield_thermal_err
thermal yield error [fraction]
Definition: data.h:277
-
double total_intensity_err
total decay intensity error
Definition: data.h:532
+
double total_intensity_err
total decay intensity error
Definition: data.h:533
const double pi
pi = 3.14159265359
Definition: data.cpp:11
const double MeV_per_K
MeV per Kelvin.
Definition: data.cpp:16
double ka1_x_ray_en
Ka1 X-ray energy [keV].
Definition: data.h:373
-
double half_life(int nuc)
Returns the half life for a nuclide nuc.
Definition: data.cpp:1595
+
double half_life(int nuc)
Returns the half life for a nuclide nuc.
Definition: data.cpp:1598
int z
number of protons [int]
Definition: data.h:353
int from_nuc
id of fissioning nuclide
Definition: data.h:264
-
double decay_const(int nuc)
Returns the decay constant for a nuclide nuc.
Definition: data.cpp:1569
+
double decay_const(int nuc)
Returns the decay constant for a nuclide nuc.
Definition: data.cpp:1572
double yield_thermal
thermal yield [fraction]
Definition: data.h:276
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
double fpyield(std::pair< int, int > from_to, int source, bool get_error)
Returns the fission product yield for a parent/child nuclide pair.
Definition: data.cpp:993
-
double beta_plus_intensity
intensity of beta plus decay
Definition: data.h:635
-
int parent_nuc
state id of the primary decaying nucleus
Definition: data.h:523
+
double beta_plus_intensity
intensity of beta plus decay
Definition: data.h:636
+
int parent_nuc
state id of the primary decaying nucleus
Definition: data.h:524
std::map< int, xd_complex_t > b_incoherent_map
Mapping from nuclides in id form to their incoherent scattering length.
Definition: data.cpp:633
void _load_wimsdfpy()
Loads the WIMSD fission product yield data from the nuc_data.h5 file into memory. ...
Definition: data.cpp:875
-
double simple_xs(int nuc, int rx, std::string energy)
Definition: data.cpp:2594
+
double simple_xs(int nuc, int rx, std::string energy)
Definition: data.cpp:2598
const double sec_per_day
seconds per day
Definition: data.cpp:15
a struct matching the &#39;/neutron/scattering_lengths&#39; table in nuc_data.h5.
Definition: data.h:203
std::map< int, dose > epa_dose_map
Mapping from int to dose for 3 sources.
Definition: data.cpp:448
double atomic_mass(int nuc)
Returns the atomic mass of a nuclide nuc.
Definition: data.cpp:95
double mi_shell_be
M-shell binding energy [fraction].
Definition: data.h:363
int nuc
nuclide in id form
Definition: data.h:116
-
double k_conv_e
k conversion electron fraction
Definition: data.h:533
-
unsigned int decay
rx id of decay
Definition: data.h:485
-
double half_life
half life of the decay [s]
Definition: data.h:486
+
double k_conv_e
k conversion electron fraction
Definition: data.h:534
+
unsigned int decay
rx id of decay
Definition: data.h:486
+
double half_life
half life of the decay [s]
Definition: data.h:487
double ka2_to_ka1
Ka2 to Ka1 fluorescence ratio [fraction].
Definition: data.h:369
int to_nuc
id of fission product
Definition: data.h:265
a struct for the nds data for fpyield
Definition: data.h:275
double error
error in atomic mass [amu]
Definition: data.h:61
double ka2_x_ray_en_err
Ka2 X-ray energy error [keV].
Definition: data.h:376
-
virtual const char * what() const
Exception returns the string passed when thrown.
Definition: data.h:706
int metastable
metastable level [int]
Definition: data.h:399
double kb_x_ray_en
Kb X-ray energy [keV].
Definition: data.h:377
std::map< std::pair< int, int >, double > wimsdfpy_data
Mapping from nuclides in id form to their scattering length.
Definition: data.cpp:872
-
InvalidSimpleXS(std::string msg)
Exception thrown if energy group or rxname are invalid.
Definition: data.h:704
+
InvalidSimpleXS(std::string msg)
Exception thrown if energy group or rxname are invalid.
Definition: data.h:705
double ka2_to_ka1_err
Ka2 to Ka1 fluorescence error [fraction].
Definition: data.h:370
xd_complex_t b_coherent
coherent scattering length [cm]
Definition: data.h:205
char lung_mod
model of lung used (time of biological half life– D, W, or Y)
Definition: data.h:150
-
double beta_branch_ratio
beta branching ratio of this decay [fraction]
Definition: data.h:495
+
double beta_branch_ratio
beta branching ratio of this decay [fraction]
Definition: data.h:496
double half_life
half life [seconds]
Definition: data.h:396
double li_shell_be
L-shell binding energy [fraction].
Definition: data.h:361
diff --git a/cppapi/html/decay_8h_source.html b/cppapi/html/decay_8h_source.html index 7d2e6c55..5f3dc40c 100644 --- a/cppapi/html/decay_8h_source.html +++ b/cppapi/html/decay_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/lucas/opt/gcc-6/pyne-dev/pyne/src/decay.h Source File + + +PyNE C++: /root/repo/src/decay.h Source File - @@ -31,39 +29,19 @@
- + - - + + + +
decay.h
-
1 #ifndef PYNE_DECAY_IS_DUMMY
2 #ifndef PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
3 #define PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
4 
5 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7 // WARNING
8 // This file has been auto generated
9 // Do not modify directly. You have
10 // been warned. This is that warning
11 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13 
14 #include <map>
15 //#include <cmath>
16 
17 #ifndef PYNE_IS_AMALGAMATED
18 #include "data.h"
19 #include "nucname.h"
20 #endif
21 
22 namespace pyne {
23 namespace decayers {
24 
25 extern const int all_nucs[3979];
26 
27 std::map<int, double> decay(std::map<int, double> comp, double t);
28 
29 } // namespace decayers
30 } // namespace pyne
31 
32 #endif // PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
33 #endif // PYNE_DECAY_IS_DUMMY
Implements basic nuclear data functions.
-
struct pyne::decay decay
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
1 #ifndef PYNE_DECAY_IS_DUMMY
2 #ifndef PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
3 #define PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
4 
5 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7 // WARNING
8 // This file has been auto generated
9 // Do not modify directly. You have
10 // been warned. This is that warning
11 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13 
14 // This file was generated with the following command:
15 // ./decaygen.py --spontaneous-fission --tar --gnu-asm
16 
17 #include <map>
18 
19 namespace pyne {
20 namespace decayers {
21 
22 extern const int all_nucs[4141];
23 
24 std::map<int, double> decay(std::map<int, double> comp, double t);
25 
26 } // namespace decayers
27 } // namespace pyne
28 
29 #endif // PYNE_GEUP5PGEJBFGNHGI36TRBB4WGM
30 #endif // PYNE_DECAY_IS_DUMMY
struct pyne::decay decay
a struct matching the &#39;/decay/decays&#39; table in nuc_data.h5.
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/dir_3b35b1e7b2a5d8f72b562719677042e0.html b/cppapi/html/dir_3b35b1e7b2a5d8f72b562719677042e0.html index 257dd5b7..3d30734e 100644 --- a/cppapi/html/dir_3b35b1e7b2a5d8f72b562719677042e0.html +++ b/cppapi/html/dir_3b35b1e7b2a5d8f72b562719677042e0.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/RULER Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/RULER Directory Reference - @@ -31,39 +29,19 @@
- + - - + + + +
RULER Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_46a0060ba5c758dbd18eda533611dddb.html b/cppapi/html/dir_46a0060ba5c758dbd18eda533611dddb.html index fe18375b..35659e14 100644 --- a/cppapi/html/dir_46a0060ba5c758dbd18eda533611dddb.html +++ b/cppapi/html/dir_46a0060ba5c758dbd18eda533611dddb.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/GTOL Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/GTOL Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
GTOL Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_4b9e762d33047c131a582cb448e42600.html b/cppapi/html/dir_4b9e762d33047c131a582cb448e42600.html index 699839c4..81480ef4 100644 --- a/cppapi/html/dir_4b9e762d33047c131a582cb448e42600.html +++ b/cppapi/html/dir_4b9e762d33047c131a582cb448e42600.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d Directory Reference + + +PyNE C++: /root/repo/src/transport_spatial_methods/3d Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
3d Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_4c2a70184230d1b923b9638681943f85.html b/cppapi/html/dir_4c2a70184230d1b923b9638681943f85.html index 31717c74..51e9f66e 100644 --- a/cppapi/html/dir_4c2a70184230d1b923b9638681943f85.html +++ b/cppapi/html/dir_4c2a70184230d1b923b9638681943f85.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/2d Directory Reference + + +PyNE C++: /root/repo/src/transport_spatial_methods/2d Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/dir_62c06c4aa02bc91e5d83c818009ff8f0.html b/cppapi/html/dir_62c06c4aa02bc91e5d83c818009ff8f0.html index c6750c54..f71a658d 100644 --- a/cppapi/html/dir_62c06c4aa02bc91e5d83c818009ff8f0.html +++ b/cppapi/html/dir_62c06c4aa02bc91e5d83c818009ff8f0.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/HSICC Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/HSICC Directory Reference - @@ -31,39 +29,19 @@
- + - - + + + +
HSICC Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/cppapi/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 9ebdd0c9..a3939f55 100644 --- a/cppapi/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/cppapi/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src Directory Reference + + +PyNE C++: /root/repo/src Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +

Directories

+directory  transport_spatial_methods +  @@ -115,9 +95,9 @@ diff --git a/cppapi/html/dir_9c581d67c4afabadc7085b50e92ccc77.html b/cppapi/html/dir_9c581d67c4afabadc7085b50e92ccc77.html index 70671fa6..006ee83c 100644 --- a/cppapi/html/dir_9c581d67c4afabadc7085b50e92ccc77.html +++ b/cppapi/html/dir_9c581d67c4afabadc7085b50e92ccc77.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/2d/src Directory Reference + + +PyNE C++: /root/repo/src/transport_spatial_methods/2d/src Directory Reference - @@ -31,39 +29,19 @@

Files

- + - - + + + +
src Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_c3357068ba34420b66a0b2058be2a46b.html b/cppapi/html/dir_c3357068ba34420b66a0b2058be2a46b.html index 9f79993d..8d010c0c 100644 --- a/cppapi/html/dir_c3357068ba34420b66a0b2058be2a46b.html +++ b/cppapi/html/dir_c3357068ba34420b66a0b2058be2a46b.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/DELTA Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/DELTA Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
DELTA Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_c4767a1bad2e893224425bd26cb25bd1.html b/cppapi/html/dir_c4767a1bad2e893224425bd26cb25bd1.html index 184fbbdf..df46c6be 100644 --- a/cppapi/html/dir_c4767a1bad2e893224425bd26cb25bd1.html +++ b/cppapi/html/dir_c4767a1bad2e893224425bd26cb25bd1.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods Directory Reference + + +PyNE C++: /root/repo/src/transport_spatial_methods Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +

Directories

+directory  2d
diff --git a/cppapi/html/dir_c95b14140a89303d49b1e9e3a5d50b1e.html b/cppapi/html/dir_c95b14140a89303d49b1e9e3a5d50b1e.html index 439abac8..c2f3e2e9 100644 --- a/cppapi/html/dir_c95b14140a89303d49b1e9e3a5d50b1e.html +++ b/cppapi/html/dir_c95b14140a89303d49b1e9e3a5d50b1e.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/LOGFT Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/LOGFT Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
LOGFT Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_d9ba0baaf6127ed86ae856e3bc840ad5.html b/cppapi/html/dir_d9ba0baaf6127ed86ae856e3bc840ad5.html index 94ea0e70..6def13f2 100644 --- a/cppapi/html/dir_d9ba0baaf6127ed86ae856e3bc840ad5.html +++ b/cppapi/html/dir_d9ba0baaf6127ed86ae856e3bc840ad5.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/ALPHAD Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/ALPHAD Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
ALPHAD Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_f016746bcad9ccff08fa6a2a7bc57942.html b/cppapi/html/dir_f016746bcad9ccff08fa6a2a7bc57942.html index c63592e2..73ea6c0b 100644 --- a/cppapi/html/dir_f016746bcad9ccff08fa6a2a7bc57942.html +++ b/cppapi/html/dir_f016746bcad9ccff08fa6a2a7bc57942.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing/RADD Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing/RADD Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +
RADD Directory Reference
- - -

-Files

diff --git a/cppapi/html/dir_f66b4cf0c3b24f0daec414882753a999.html b/cppapi/html/dir_f66b4cf0c3b24f0daec414882753a999.html index 77967f18..f24300eb 100644 --- a/cppapi/html/dir_f66b4cf0c3b24f0daec414882753a999.html +++ b/cppapi/html/dir_f66b4cf0c3b24f0daec414882753a999.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/ensdf_processing Directory Reference + + +PyNE C++: /root/repo/src/ensdf_processing Directory Reference - @@ -31,39 +29,19 @@ - + - - + + + +

Directories

- -

-Files

diff --git a/cppapi/html/doxygen.css b/cppapi/html/doxygen.css index 1425ec53..4f1ab919 100644 --- a/cppapi/html/doxygen.css +++ b/cppapi/html/doxygen.css @@ -1,9 +1,13 @@ -/* The standard CSS for doxygen 1.8.11 */ +/* The standard CSS for doxygen 1.8.13 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + /* @group Heading Levels */ h1.groupheader { @@ -173,7 +177,7 @@ pre.fragment { } div.fragment { - padding: 4px 6px; + padding: 0px; margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; @@ -232,6 +236,15 @@ span.lineno a:hover { background-color: #C8C8C8; } +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + div.ah, span.ah { background-color: black; font-weight: bold; @@ -501,6 +514,29 @@ table.memberdecls { /* Styles for detailed member documentation */ +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + .memtemplate { font-size: 80%; color: #4665A2; @@ -539,7 +575,7 @@ table.memberdecls { } .memname { - font-weight: bold; + font-weight: 400; margin-left: 6px; } @@ -555,24 +591,24 @@ table.memberdecls { color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; + background-color: #DFE5F1; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; - border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; } +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; @@ -914,6 +950,7 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; + font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; @@ -1178,6 +1215,11 @@ dl.section dd { text-align: center; } +.plantumlgraph +{ + text-align: center; +} + .diagraph { text-align: center; @@ -1473,3 +1515,82 @@ tr.heading h2 { } } +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/cppapi/html/enrichment_8h.html b/cppapi/html/enrichment_8h.html index 0adc5c37..c1e8512b 100644 --- a/cppapi/html/enrichment_8h.html +++ b/cppapi/html/enrichment_8h.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/enrichment.h File Reference + + +PyNE C++: /root/repo/src/enrichment.h File Reference - @@ -31,39 +29,19 @@ - + - - + + + +
- @@ -138,7 +116,7 @@ - @@ -173,16 +151,16 @@
Returns
A cascade whose N & M coorespond to the L/F value.
- -

Functions

+
Cascade pyne::enrichment::_fill_default_uranium_cascade ()
 Greates a cascade instance with default values for a uranium enrichment.
 
 
double pyne::enrichment::tail_per_prod (double x_feed, double x_prod, double x_tail)
 
+
double pyne::enrichment::value_func (double x)
 Computes the value or separation potential of an assay x.
 
+
Cascade pyne::enrichment::multicomponent (Cascade &orig_casc, char *solver, double tolerance=1.0E-7, int max_iter=100)
 
+
Cascade pyne::enrichment::multicomponent (Cascade &orig_casc, std::string solver="symbolic", double tolerance=1.0E-7, int max_iter=100)
 
- @@ -193,9 +171,9 @@ diff --git a/cppapi/html/enrichment_8h_source.html b/cppapi/html/enrichment_8h_source.html index 0de3c4fb..7f74b6b4 100644 --- a/cppapi/html/enrichment_8h_source.html +++ b/cppapi/html/enrichment_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/enrichment.h Source File + + +PyNE C++: /root/repo/src/enrichment.h Source File - @@ -31,39 +29,19 @@

Variables

+
Cascade pyne::enrichment::default_uranium_cascade
 a cascade instance with default values for a uranium enrichment.
 
- + - - + + + +
double prod_per_tail(double x_feed, double x_prod, double x_tail)
Definition: enrichment.cpp:45
void _recompute_nm(Cascade &casc, double tolerance=1.0E-7)
Definition: enrichment.cpp:93
double feed_per_prod(double x_feed, double x_prod, double x_tail)
Definition: enrichment.cpp:37
-
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
Definition: data.h:578
+
a struct matching the &#39;/decay/alphas&#39; table in nuc_data.h5.
Definition: data.h:579
void _recompute_prod_tail_mats(Cascade &casc)
Definition: enrichment.cpp:147
double alphastar_i(double alpha, double Mstar, double M_i)
Definition: enrichment.cpp:87
Cascade _fill_default_uranium_cascade()
Greates a cascade instance with default values for a uranium enrichment.
Definition: enrichment.cpp:8
@@ -108,7 +86,7 @@
A multicomponent enrichment cascade solver using a symbolic solution to the mass flow rate equations...
double value_func(double x)
Computes the value or separation potential of an assay x.
Definition: enrichment.cpp:61
double tail_per_prod(double x_feed, double x_prod, double x_tail)
Definition: enrichment.cpp:57
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
double feed_per_tail(double x_feed, double x_prod, double x_tail)
Definition: enrichment.cpp:41
Definition: enrichment.h:135
A set of physical parameters used to specify an enrichment cascade.
Definition: enrichment_cascade.h:21
@@ -116,9 +94,9 @@ diff --git a/cppapi/html/enrichment__cascade_8h_source.html b/cppapi/html/enrichment__cascade_8h_source.html index 1a28a8ef..d97450b5 100644 --- a/cppapi/html/enrichment__cascade_8h_source.html +++ b/cppapi/html/enrichment__cascade_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/enrichment_cascade.h Source File + + +PyNE C++: /root/repo/src/enrichment_cascade.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
double swu_per_prod
This is the SWU for 1 kg of Product material.
Definition: enrichment_cascade.h:52
~Cascade()
default destructor
Definition: enrichment_cascade.cpp:35
pyne::Material mat_prod
product material
Definition: enrichment_cascade.h:47
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
int k
Component to de-enrich, or strip (U-238), id form.
Definition: enrichment_cascade.h:37
double x_feed_j
enrichment of the j-th isotope in the feed stream
Definition: enrichment_cascade.h:42
double swu_per_feed
This is the SWU for 1 kg of Feed material.
Definition: enrichment_cascade.h:51
@@ -113,9 +91,9 @@ diff --git a/cppapi/html/enrichment__symbolic_8h.html b/cppapi/html/enrichment__symbolic_8h.html index 9a56592a..5b5133e3 100644 --- a/cppapi/html/enrichment__symbolic_8h.html +++ b/cppapi/html/enrichment__symbolic_8h.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/enrichment_symbolic.h File Reference + + +PyNE C++: /root/repo/src/enrichment_symbolic.h File Reference - @@ -31,39 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/enrichment__symbolic_8h_source.html b/cppapi/html/enrichment__symbolic_8h_source.html index 308caf53..f3bd4c08 100644 --- a/cppapi/html/enrichment__symbolic_8h_source.html +++ b/cppapi/html/enrichment__symbolic_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/enrichment_symbolic.h Source File + + +PyNE C++: /root/repo/src/enrichment_symbolic.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
Go to the documentation of this file.
1 
7 
8 /*********************************************************/
9 /*** Symbolic Enrichment Functions ***/
10 /*** WARNING: This file is auto-generated. ***/
11 /*** DO NOT MODIFY!!! ***/
12 /*********************************************************/
13 
14 #ifndef PYNE_OU4PO4TJDBDM5PY4VKAVL7JCSM
15 #define PYNE_OU4PO4TJDBDM5PY4VKAVL7JCSM
16 
17 #include <math.h>
18 
19 #ifndef PYNE_IS_AMALGAMATED
20 #include "enrichment_cascade.h"
21 #endif
22 
23 namespace pyne {
24 namespace enrichment {
25 
31  Cascade solve_symbolic(Cascade & orig_casc);
32 
33 // end enrichment
34 }
35 // end pyne
36 }
37 
38 #endif
Cascade solve_symbolic(Cascade &orig_casc)
Definition: enrichment_symbolic05.cpp:11
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
diff --git a/cppapi/html/extra__types_8h.html b/cppapi/html/extra__types_8h.html index 93158036..da38805a 100644 --- a/cppapi/html/extra__types_8h.html +++ b/cppapi/html/extra__types_8h.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/extra_types.h File Reference + + +PyNE C++: /root/repo/src/extra_types.h File Reference - @@ -31,39 +29,19 @@
- + - - + + + +
diff --git a/cppapi/html/extra__types_8h_source.html b/cppapi/html/extra__types_8h_source.html index b51cf637..210a5a84 100644 --- a/cppapi/html/extra__types_8h_source.html +++ b/cppapi/html/extra__types_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/extra_types.h Source File + + +PyNE C++: /root/repo/src/extra_types.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/files.html b/cppapi/html/files.html index 73967a2c..1bf41afe 100644 --- a/cppapi/html/files.html +++ b/cppapi/html/files.html @@ -3,7 +3,8 @@ - + + PyNE C++: File List @@ -11,9 +12,6 @@ - @@ -31,39 +29,19 @@ - + - - + + + +
  src  _atomic_data.h  _decay.h - dagmc_bridge.h - data.hImplements basic nuclear data functions - enrichment.hTop-level enrichment functionality - enrichment_cascade.h - enrichment_symbolic.hA multicomponent enrichment cascade solver using a symbolic solution to the mass flow rate equations - extra_types.h - h5wrap.hProvides some HDF5 helper functionality in its own namespace - json-forwards.h - json.h - jsoncustomwriter.h - material.h - measure.h - nucname.h - particle.h - pyne.h - rxname.h - source_sampling.hMesh-based Monte Carlo source sampling - tally.h - utils.h + atomic_data.h + cram.h + cram.hpp + dagmc_bridge.h + data.hImplements basic nuclear data functions + decay.h + enrichment.hTop-level enrichment functionality + enrichment_cascade.h + enrichment_symbolic.hA multicomponent enrichment cascade solver using a symbolic solution to the mass flow rate equations + extra_types.h + h5wrap.hProvides some HDF5 helper functionality in its own namespace + json-forwards.h + json.h + jsoncustomwriter.h + material.h + measure.h + nucname.h + particle.h + pyne.h + rxname.h + source_sampling.hMesh-based Monte Carlo source sampling + tally.h + transmuters.h + utils.h
diff --git a/cppapi/html/functions.html b/cppapi/html/functions.html index b86b8348..db7983e8 100644 --- a/cppapi/html/functions.html +++ b/cppapi/html/functions.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- _ -

    +

    - _ -

diff --git a/cppapi/html/functions_0x7e.html b/cppapi/html/functions_0x7e.html index 53980864..eb8666f1 100644 --- a/cppapi/html/functions_0x7e.html +++ b/cppapi/html/functions_0x7e.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- ~ -

diff --git a/cppapi/html/functions_a.html b/cppapi/html/functions_a.html index e08a9d2f..8be8dcbc 100644 --- a/cppapi/html/functions_a.html +++ b/cppapi/html/functions_a.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- a -

diff --git a/cppapi/html/functions_b.html b/cppapi/html/functions_b.html index ec3d6d7e..eb7414b7 100644 --- a/cppapi/html/functions_b.html +++ b/cppapi/html/functions_b.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- b -

diff --git a/cppapi/html/functions_c.html b/cppapi/html/functions_c.html index 0440e61d..7a83ffeb 100644 --- a/cppapi/html/functions_c.html +++ b/cppapi/html/functions_c.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- c -

diff --git a/cppapi/html/functions_d.html b/cppapi/html/functions_d.html index 69838b86..44bfae1f 100644 --- a/cppapi/html/functions_d.html +++ b/cppapi/html/functions_d.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- d -

diff --git a/cppapi/html/functions_e.html b/cppapi/html/functions_e.html index afb54108..7b577f3e 100644 --- a/cppapi/html/functions_e.html +++ b/cppapi/html/functions_e.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- e -

diff --git a/cppapi/html/functions_f.html b/cppapi/html/functions_f.html index e8715a54..4f5180be 100644 --- a/cppapi/html/functions_f.html +++ b/cppapi/html/functions_f.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- f -

diff --git a/cppapi/html/functions_func.html b/cppapi/html/functions_func.html index d1bfb4d2..9c72110a 100644 --- a/cppapi/html/functions_func.html +++ b/cppapi/html/functions_func.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members - Functions @@ -11,9 +12,6 @@ - @@ -31,72 +29,19 @@ - + - - - - + + + +
  -

- _ -

diff --git a/cppapi/html/functions_g.html b/cppapi/html/functions_g.html index ae017d94..872e75ab 100644 --- a/cppapi/html/functions_g.html +++ b/cppapi/html/functions_g.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- g -

diff --git a/cppapi/html/functions_h.html b/cppapi/html/functions_h.html index 46aeb5ae..becf39bc 100644 --- a/cppapi/html/functions_h.html +++ b/cppapi/html/functions_h.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- h -

diff --git a/cppapi/html/functions_i.html b/cppapi/html/functions_i.html index 5c9f6c6c..f49ae4eb 100644 --- a/cppapi/html/functions_i.html +++ b/cppapi/html/functions_i.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- i -

diff --git a/cppapi/html/functions_j.html b/cppapi/html/functions_j.html index 8fbd2111..c3f902c4 100644 --- a/cppapi/html/functions_j.html +++ b/cppapi/html/functions_j.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- j -

diff --git a/cppapi/html/functions_k.html b/cppapi/html/functions_k.html index c3197283..abbbc5d2 100644 --- a/cppapi/html/functions_k.html +++ b/cppapi/html/functions_k.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- k -

diff --git a/cppapi/html/functions_l.html b/cppapi/html/functions_l.html index ac7d9c3e..bfdf25be 100644 --- a/cppapi/html/functions_l.html +++ b/cppapi/html/functions_l.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- l -

diff --git a/cppapi/html/functions_m.html b/cppapi/html/functions_m.html index 153593a6..d6adcb58 100644 --- a/cppapi/html/functions_m.html +++ b/cppapi/html/functions_m.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- m -

diff --git a/cppapi/html/functions_n.html b/cppapi/html/functions_n.html index 33e2b3db..42a4023c 100644 --- a/cppapi/html/functions_n.html +++ b/cppapi/html/functions_n.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- n -

diff --git a/cppapi/html/functions_o.html b/cppapi/html/functions_o.html index dafa844a..3adb6151 100644 --- a/cppapi/html/functions_o.html +++ b/cppapi/html/functions_o.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- o -

diff --git a/cppapi/html/functions_p.html b/cppapi/html/functions_p.html index eb183fd7..fc42f40e 100644 --- a/cppapi/html/functions_p.html +++ b/cppapi/html/functions_p.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- p -

diff --git a/cppapi/html/functions_q.html b/cppapi/html/functions_q.html index 704c13ef..9d76e241 100644 --- a/cppapi/html/functions_q.html +++ b/cppapi/html/functions_q.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- q -

diff --git a/cppapi/html/functions_r.html b/cppapi/html/functions_r.html index c77d1325..3fdc7b69 100644 --- a/cppapi/html/functions_r.html +++ b/cppapi/html/functions_r.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- r -

    +

    - r -

diff --git a/cppapi/html/functions_s.html b/cppapi/html/functions_s.html index a61a6633..b41f1e86 100644 --- a/cppapi/html/functions_s.html +++ b/cppapi/html/functions_s.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- s -

diff --git a/cppapi/html/functions_t.html b/cppapi/html/functions_t.html index 9bac1e25..215fbc09 100644 --- a/cppapi/html/functions_t.html +++ b/cppapi/html/functions_t.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- t -

    +

    - t -

diff --git a/cppapi/html/functions_v.html b/cppapi/html/functions_v.html new file mode 100644 index 00000000..d5b0afaf --- /dev/null +++ b/cppapi/html/functions_v.html @@ -0,0 +1,76 @@ + + + + + + + +PyNE C++: Class Members + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/cppapi/html/functions_vars.html b/cppapi/html/functions_vars.html index 02915358..00a216d3 100644 --- a/cppapi/html/functions_vars.html +++ b/cppapi/html/functions_vars.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members - Variables @@ -11,9 +12,6 @@ - @@ -31,75 +29,19 @@ - + - - - - + + + +
  -

- a -

diff --git a/cppapi/html/functions_w.html b/cppapi/html/functions_w.html index 10a08951..9c989766 100644 --- a/cppapi/html/functions_w.html +++ b/cppapi/html/functions_w.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + + diff --git a/cppapi/html/functions_x.html b/cppapi/html/functions_x.html index 8ee589fe..78e62c6e 100644 --- a/cppapi/html/functions_x.html +++ b/cppapi/html/functions_x.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- x -

diff --git a/cppapi/html/functions_y.html b/cppapi/html/functions_y.html index f800aa50..42eea906 100644 --- a/cppapi/html/functions_y.html +++ b/cppapi/html/functions_y.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- y -

diff --git a/cppapi/html/functions_z.html b/cppapi/html/functions_z.html index 2be5082d..230c5f62 100644 --- a/cppapi/html/functions_z.html +++ b/cppapi/html/functions_z.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Members @@ -11,9 +12,6 @@ - @@ -31,79 +29,19 @@ - + - - - - + + + +
Here is a list of all documented class members with links to the class documentation for each member:
-

- z -

diff --git a/cppapi/html/h5wrap_8h.html b/cppapi/html/h5wrap_8h.html index 696c978a..9ff40958 100644 --- a/cppapi/html/h5wrap_8h.html +++ b/cppapi/html/h5wrap_8h.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/h5wrap.h File Reference + + +PyNE C++: /root/repo/src/h5wrap.h File Reference - @@ -31,39 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/h5wrap_8h_source.html b/cppapi/html/h5wrap_8h_source.html index 51fc24c3..5468921c 100644 --- a/cppapi/html/h5wrap_8h_source.html +++ b/cppapi/html/h5wrap_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/h5wrap.h Source File + + +PyNE C++: /root/repo/src/h5wrap.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
h5wrap.h
-Go to the documentation of this file.
1 
6 #ifndef PYNE_MRNAFG5GNZDNPCRPX3UCBZ5MFE
7 #define PYNE_MRNAFG5GNZDNPCRPX3UCBZ5MFE
8 
9 #include <iostream>
10 #include <fstream>
11 #include <string>
12 #include <map>
13 #include <vector>
14 #include <set>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <exception>
18 
19 #include "hdf5.h"
20 
21 #ifndef PYNE_IS_AMALGAMATED
22 #include "extra_types.h"
23 #endif
24 
26 namespace h5wrap
27 {
29  class HDF5BoundsError: public std::exception
30  {
32  virtual const char* what() const throw()
33  {
34  return "Index of point is out of bounds. Cannot handle in HDF5 file.";
35  };
36  };
37 
38 
40  class FileNotHDF5: public std::exception
41  {
42  public:
43 
46 
48  ~FileNotHDF5() throw () {};
49 
51  FileNotHDF5(std::string fname)
52  {
53  filename = fname;
54  };
55 
57  virtual const char* what() const throw()
58  {
59  std::string FNH5str ("Not a valid HDF5 file: ");
60  if (!filename.empty())
61  FNH5str += filename;
62 
63  return (const char *) FNH5str.c_str();
64  };
65 
66  private:
67  std::string filename;
68  };
69 
70 
72  class GroupNotFound: public std::exception
73  {
74  public:
75 
78 
80  ~GroupNotFound() throw () {};
81 
83  GroupNotFound(std::string fname, std::string gname)
84  {
85  filename = fname;
86  };
87 
89  virtual const char* what() const throw()
90  {
91  std::string msg ("the group ");
92  msg += groupname;
93  msg += " not found in the file ";
94  msg += filename;
95  return (const char *) msg.c_str();
96  };
97 
98  private:
99  std::string filename;
100  std::string groupname;
101  };
102 
104  class PathNotFound: public std::exception
105  {
106  public:
107 
110 
112  ~PathNotFound() throw () {};
113 
115  PathNotFound(std::string fname, std::string pname)
116  {
117  filename = fname;
118  path = pname;
119  };
120 
122  virtual const char* what() const throw()
123  {
124  std::string msg ("the path ");
125  msg += path;
126  msg += " was not found in the HDF5 file ";
127  msg += filename;
128  return (const char *) msg.c_str();
129  };
130 
131  private:
132  std::string filename;
133  std::string path;
134  };
135 
136 
137 
138  // Read-in Functions
139 
142  template <typename T>
143  T get_array_index(hid_t dset, int n, hid_t dtype=H5T_NATIVE_DOUBLE)
144  {
145  hsize_t count [1] = {1};
146  hsize_t offset [1] = {static_cast<hsize_t>(n)};
147 
148  hid_t dspace = H5Dget_space(dset);
149  hsize_t npoints = H5Sget_simple_extent_npoints(dspace);
150 
151  //Handle negative indices
152  if (n < 0)
153  offset[0] = offset[0] + npoints;
154 
155  //If still out of range we have a problem
156  if (npoints <= offset[0])
157  throw HDF5BoundsError();
158 
159  H5Sselect_hyperslab(dspace, H5S_SELECT_SET, offset, NULL, count, NULL);
160 
161  //Set memmory hyperspace
162  hsize_t dimsm[1] = {1};
163  hid_t memspace = H5Screate_simple(1, dimsm, NULL);
164 
165  hsize_t count_out [1] = {1};
166  hsize_t offset_out [1] = {0};
167 
168  H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
169  count_out, NULL);
170 
171  T data_out [1];
172  H5Dread(dset, dtype, memspace, dspace, H5P_DEFAULT, data_out);
173 
174  return data_out[0];
175  }
176 
177 
178  // Conversion functions
179 
186  template <typename T>
187  std::set<T> h5_array_to_cpp_set(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
188  {
189  std::set<T> cpp_set = std::set<T>();
190  hsize_t arr_len[1];
191  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
192 
193  // Initilize to dataspace, to find the indices we are looping over
194  hid_t arr_space = H5Dget_space(dset);
195  int arr_dim = H5Sget_simple_extent_dims(arr_space, arr_len, NULL);
196 
197  // Read in data from file to memory
198  T * mem_arr = new T [arr_len[0]];
199  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
200 
201  // Load new values into the set
202  cpp_set.insert(&mem_arr[0], &mem_arr[arr_len[0]]);
203 
204  H5Dclose(dset);
205 
206  delete[] mem_arr;
207  return cpp_set;
208  }
209 
210 
217  template <typename T>
218  std::vector<T> h5_array_to_cpp_vector_1d(hid_t h5file, std::string data_path,
219  hid_t dtype=H5T_NATIVE_DOUBLE)
220  {
221  std::vector<T> cpp_vec;
222  hsize_t arr_dims [1];
223  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
224 
225  // Initilize to dataspace, to find the indices we are looping over
226  hid_t arr_space = H5Dget_space(dset);
227  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
228 
229  // Read in data from file to memory
230  T mem_arr [arr_dims[0]];
231  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
232 
233  // Load new values into the vector
234  cpp_vec.assign(mem_arr, mem_arr+arr_dims[0]);
235 
236  H5Dclose(dset);
237  return cpp_vec;
238  }
239 
240 
247  template <typename T>
248  std::vector< std::vector<T> > h5_array_to_cpp_vector_2d(hid_t h5file, std::string data_path,
249  hid_t dtype=H5T_NATIVE_DOUBLE)
250  {
251  hsize_t arr_dims [2];
252  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
253 
254  // Initilize to dataspace, to find the indices we are looping over
255  hid_t arr_space = H5Dget_space(dset);
256  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
257 
258  // Read in data from file to memory
259  // Have to read in as 1D array to get HDF5 and new keyword
260  // to play nice with each other
261  T mem_arr [arr_dims[0] * arr_dims[1]];
262  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
263 
264  // Load new values into the vector of vectors, using some indexing tricks
265  std::vector< std::vector<T> > cpp_vec (arr_dims[0], std::vector<T>(arr_dims[1]));
266  for(int i = 0; i < arr_dims[0]; i++)
267  {
268  cpp_vec[i].assign(mem_arr+(i*arr_dims[1]), mem_arr+((i+1)*arr_dims[1]));
269  };
270 
271  H5Dclose(dset);
272  return cpp_vec;
273  }
274 
275 
282  template <typename T>
283  std::vector< std::vector< std::vector<T> > > h5_array_to_cpp_vector_3d(hid_t h5file,
284  std::string data_path,
285  hid_t dtype=H5T_NATIVE_DOUBLE)
286  {
287  hsize_t arr_dims [3];
288  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
289 
290  // Initilize to dataspace, to find the indices we are looping over
291  hid_t arr_space = H5Dget_space(dset);
292  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
293 
294  // Read in data from file to memory
295  // Have to read in as 1D array to get HDF5 and new keyword
296  // to play nice with each other
297  T mem_arr [arr_dims[0] * arr_dims[1] * arr_dims[2]];
298  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
299 
300  // Load new values into the vector of vectors of vectors, using some indexing tricks
301  std::vector< std::vector< std::vector<T> > > cpp_vec (arr_dims[0], std::vector< std::vector<T> >(arr_dims[1], std::vector<T>(arr_dims[2])));
302  for(int i = 0; i < arr_dims[0]; i++)
303  {
304  for(int j = 0; j < arr_dims[1]; j++)
305  {
306  cpp_vec[i][j].assign(mem_arr+((i*arr_dims[1]*arr_dims[2]) + (j*arr_dims[2])), mem_arr+((i*arr_dims[1]*arr_dims[2]) + ((j+1)*arr_dims[2])));
307  };
308  };
309 
310  H5Dclose(dset);
311  return cpp_vec;
312  }
313 
314 
315 
316  // Classes
319  template <typename T>
321  {
322  public:
323 
326 
329 
335  HomogenousTypeTable(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
336  {
337  hid_t h5_set = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
338  hid_t h5_space = H5Dget_space(h5_set);
339  hid_t h5_type = H5Dget_type(h5_set);
340 
341  // set path
342  path = data_path;
343 
344  // set shape
345  shape[0] = H5Sget_simple_extent_npoints(h5_space);
346  shape[1] = H5Tget_nmembers(h5_type);
347 
348  // set cols
349  std::string * cols_buf = new std::string [shape[1]];
350  for(int n = 0; n < shape[1]; n++)
351  cols_buf[n] = H5Tget_member_name(h5_type, n);
352  cols.assign(cols_buf, cols_buf+shape[1]);
353 
354  // set data
355  hid_t col_type;
356  T * col_buf = new T [shape[0]];
357 
358  data.clear();
359  for(int n = 0; n < shape[1]; n++)
360  {
361  // Make a compound data type of just this column
362  col_type = H5Tcreate(H5T_COMPOUND, sizeof(T));
363  H5Tinsert(col_type, cols[n].c_str(), 0, dtype);
364 
365  // Read in this column
366  H5Dread(h5_set, col_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, col_buf);
367 
368  // save this column as a vector in out data map
369  data[cols[n]] = std::vector<T>(col_buf, col_buf+shape[0]);
370  };
371  delete[] col_buf;
372  };
373 
374  // Metadata attributes
375  std::string path;
376  int shape [2];
377  std::vector<std::string> cols;
378  std::map<std::string, std::vector<T> > data;
380 
381  //
382  // operator overloads
383  //
385  std::vector<T> operator[] (std::string col_name)
386  {
387  return data[col_name];
388  };
389 
391  std::map<std::string, T> operator[] (int m)
392  {
393  std::map<std::string, T> row = std::map<std::string, T>();
394 
395  for(int n = 0; n < shape[1]; n++)
396  row[cols[n]] = data[cols[n]][m];
397 
398  return row;
399  };
400  };
401 
402 
406  {
407  hid_t ct = H5Tcreate(H5T_COMPOUND, sizeof(xd_complex_t));
408  H5Tinsert(ct, "r", HOFFSET(xd_complex_t, re), H5T_NATIVE_DOUBLE);
409  H5Tinsert(ct, "i", HOFFSET(xd_complex_t, im), H5T_NATIVE_DOUBLE);
410  return ct;
411  }
412 
414  static hid_t PYTABLES_COMPLEX128 = _get_PYTABLES_COMPLEX128();
415 
416 
421  inline bool path_exists(hid_t h5file, std::string path)
422  {
423  bool rtn = false;
424  hid_t ds = H5Dopen2(h5file, path.c_str(), H5P_DEFAULT);
425  if (0 <= ds)
426  {
427  rtn = true;
428  H5Dclose(ds);
429  }
430  else
431  {
432  hid_t grp = H5Gopen2(h5file, path.c_str(), H5P_DEFAULT);
433  if (0 <= grp)
434  {
435  rtn = true;
436  H5Gclose(grp);
437  }
438  }
439  return rtn;
440  }
441 
442 
443 // End namespace h5wrap
444 }
445 
446 
447 
448 #endif
std::vector< std::string > cols
Definition: h5wrap.h:377
+Go to the documentation of this file.
1 
6 #ifndef PYNE_MRNAFG5GNZDNPCRPX3UCBZ5MFE
7 #define PYNE_MRNAFG5GNZDNPCRPX3UCBZ5MFE
8 
9 #include <iostream>
10 #include <fstream>
11 #include <string>
12 #include <map>
13 #include <vector>
14 #include <set>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <exception>
18 
19 #include "hdf5.h"
20 
21 #ifndef PYNE_IS_AMALGAMATED
22 #include "extra_types.h"
23 #endif
24 
26 namespace h5wrap
27 {
29  class HDF5BoundsError: public std::exception
30  {
32  virtual const char* what() const throw()
33  {
34  return "Index of point is out of bounds. Cannot handle in HDF5 file.";
35  };
36  };
37 
38 
40  class FileNotHDF5: public std::exception
41  {
42  public:
43 
46 
48  ~FileNotHDF5() throw () {};
49 
51  FileNotHDF5(std::string fname)
52  {
53  filename = fname;
54  };
55 
57  virtual const char* what() const throw()
58  {
59  std::string FNH5str ("Not a valid HDF5 file: ");
60  if (!filename.empty())
61  FNH5str += filename;
62 
63  return (const char *) FNH5str.c_str();
64  };
65 
66  private:
67  std::string filename;
68  };
69 
70 
72  class GroupNotFound: public std::exception
73  {
74  public:
75 
78 
80  ~GroupNotFound() throw () {};
81 
83  GroupNotFound(std::string fname, std::string gname)
84  {
85  filename = fname;
86  };
87 
89  virtual const char* what() const throw()
90  {
91  std::string msg ("the group ");
92  msg += groupname;
93  msg += " not found in the file ";
94  msg += filename;
95  return (const char *) msg.c_str();
96  };
97 
98  private:
99  std::string filename;
100  std::string groupname;
101  };
102 
104  class PathNotFound: public std::exception
105  {
106  public:
107 
110 
112  ~PathNotFound() throw () {};
113 
115  PathNotFound(std::string fname, std::string pname)
116  {
117  filename = fname;
118  path = pname;
119  };
120 
122  virtual const char* what() const throw()
123  {
124  std::string msg ("the path ");
125  msg += path;
126  msg += " was not found in the HDF5 file ";
127  msg += filename;
128  return (const char *) msg.c_str();
129  };
130 
131  private:
132  std::string filename;
133  std::string path;
134  };
135 
136 
137 
138  // Read-in Functions
139 
142  template <typename T>
143  T get_array_index(hid_t dset, int n, hid_t dtype=H5T_NATIVE_DOUBLE)
144  {
145  hsize_t count [1] = {1};
146  hsize_t offset [1] = {static_cast<hsize_t>(n)};
147 
148  hid_t dspace = H5Dget_space(dset);
149  hsize_t npoints = H5Sget_simple_extent_npoints(dspace);
150 
151  //Handle negative indices
152  if (n < 0)
153  offset[0] = offset[0] + npoints;
154 
155  //If still out of range we have a problem
156  if (npoints <= offset[0])
157  throw HDF5BoundsError();
158 
159  H5Sselect_hyperslab(dspace, H5S_SELECT_SET, offset, NULL, count, NULL);
160 
161  //Set memmory hyperspace
162  hsize_t dimsm[1] = {1};
163  hid_t memspace = H5Screate_simple(1, dimsm, NULL);
164 
165  hsize_t count_out [1] = {1};
166  hsize_t offset_out [1] = {0};
167 
168  H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
169  count_out, NULL);
170 
171  T data_out [1];
172  H5Dread(dset, dtype, memspace, dspace, H5P_DEFAULT, data_out);
173 
174  return data_out[0];
175  }
176 
177 
178  // Conversion functions
179 
186  template <typename T>
187  std::set<T> h5_array_to_cpp_set(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
188  {
189  std::set<T> cpp_set = std::set<T>();
190  hsize_t arr_len[1];
191  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
192 
193  // Initilize to dataspace, to find the indices we are looping over
194  hid_t arr_space = H5Dget_space(dset);
195  int arr_dim = H5Sget_simple_extent_dims(arr_space, arr_len, NULL);
196 
197  // Read in data from file to memory
198  T * mem_arr = new T [arr_len[0]];
199  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
200 
201  // Load new values into the set
202  cpp_set.insert(&mem_arr[0], &mem_arr[arr_len[0]]);
203 
204  H5Dclose(dset);
205 
206  delete[] mem_arr;
207  return cpp_set;
208  }
209 
210 
217  template <typename T>
218  std::vector<T> h5_array_to_cpp_vector_1d(hid_t h5file, std::string data_path,
219  hid_t dtype=H5T_NATIVE_DOUBLE)
220  {
221  std::vector<T> cpp_vec;
222  hsize_t arr_dims [1];
223  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
224 
225  // Initilize to dataspace, to find the indices we are looping over
226  hid_t arr_space = H5Dget_space(dset);
227  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
228 
229  // Read in data from file to memory
230  T mem_arr [arr_dims[0]];
231  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
232 
233  // Load new values into the vector
234  cpp_vec.assign(mem_arr, mem_arr+arr_dims[0]);
235 
236  H5Dclose(dset);
237  return cpp_vec;
238  }
239 
240 
247  template <typename T>
248  std::vector< std::vector<T> > h5_array_to_cpp_vector_2d(hid_t h5file, std::string data_path,
249  hid_t dtype=H5T_NATIVE_DOUBLE)
250  {
251  hsize_t arr_dims [2];
252  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
253 
254  // Initilize to dataspace, to find the indices we are looping over
255  hid_t arr_space = H5Dget_space(dset);
256  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
257 
258  // Read in data from file to memory
259  // Have to read in as 1D array to get HDF5 and new keyword
260  // to play nice with each other
261  T mem_arr [arr_dims[0] * arr_dims[1]];
262  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
263 
264  // Load new values into the vector of vectors, using some indexing tricks
265  std::vector< std::vector<T> > cpp_vec (arr_dims[0], std::vector<T>(arr_dims[1]));
266  for(int i = 0; i < arr_dims[0]; i++)
267  {
268  cpp_vec[i].assign(mem_arr+(i*arr_dims[1]), mem_arr+((i+1)*arr_dims[1]));
269  };
270 
271  H5Dclose(dset);
272  return cpp_vec;
273  }
274 
275 
282  template <typename T>
283  std::vector< std::vector< std::vector<T> > > h5_array_to_cpp_vector_3d(hid_t h5file,
284  std::string data_path,
285  hid_t dtype=H5T_NATIVE_DOUBLE)
286  {
287  hsize_t arr_dims [3];
288  hid_t dset = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
289 
290  // Initilize to dataspace, to find the indices we are looping over
291  hid_t arr_space = H5Dget_space(dset);
292  int arr_ndim = H5Sget_simple_extent_dims(arr_space, arr_dims, NULL);
293 
294  // Read in data from file to memory
295  // Have to read in as 1D array to get HDF5 and new keyword
296  // to play nice with each other
297  T mem_arr [arr_dims[0] * arr_dims[1] * arr_dims[2]];
298  H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, mem_arr);
299 
300  // Load new values into the vector of vectors of vectors, using some indexing tricks
301  std::vector< std::vector< std::vector<T> > > cpp_vec (arr_dims[0], std::vector< std::vector<T> >(arr_dims[1], std::vector<T>(arr_dims[2])));
302  for(int i = 0; i < arr_dims[0]; i++)
303  {
304  for(int j = 0; j < arr_dims[1]; j++)
305  {
306  cpp_vec[i][j].assign(mem_arr+((i*arr_dims[1]*arr_dims[2]) + (j*arr_dims[2])), mem_arr+((i*arr_dims[1]*arr_dims[2]) + ((j+1)*arr_dims[2])));
307  };
308  };
309 
310  H5Dclose(dset);
311  return cpp_vec;
312  }
313 
314 
315 
316  // Classes
319  template <typename T>
321  {
322  public:
323 
326 
329 
335  HomogenousTypeTable(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
336  {
337  hid_t h5_set = H5Dopen2(h5file, data_path.c_str(), H5P_DEFAULT);
338  hid_t h5_space = H5Dget_space(h5_set);
339  hid_t h5_type = H5Dget_type(h5_set);
340 
341  // set path
342  path = data_path;
343 
344  // set shape
345  shape[0] = H5Sget_simple_extent_npoints(h5_space);
346  shape[1] = H5Tget_nmembers(h5_type);
347 
348  // set cols
349  std::string * cols_buf = new std::string [shape[1]];
350  for(int n = 0; n < shape[1]; n++)
351  cols_buf[n] = H5Tget_member_name(h5_type, n);
352  cols.assign(cols_buf, cols_buf+shape[1]);
353 
354  // set data
355  hid_t col_type;
356  T * col_buf = new T [shape[0]];
357 
358  data.clear();
359  for(int n = 0; n < shape[1]; n++)
360  {
361  // Make a compound data type of just this column
362  col_type = H5Tcreate(H5T_COMPOUND, sizeof(T));
363  H5Tinsert(col_type, cols[n].c_str(), 0, dtype);
364 
365  // Read in this column
366  H5Dread(h5_set, col_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, col_buf);
367 
368  // save this column as a vector in out data map
369  data[cols[n]] = std::vector<T>(col_buf, col_buf+shape[0]);
370  };
371  delete[] col_buf;
372  };
373 
374  // Metadata attributes
375  std::string path;
376  int shape [2];
377  std::vector<std::string> cols;
378  std::map<std::string, std::vector<T> > data;
380 
381  //
382  // operator overloads
383  //
385  std::vector<T> operator[] (std::string col_name)
386  {
387  return data[col_name];
388  };
389 
391  std::map<std::string, T> operator[] (int m)
392  {
393  std::map<std::string, T> row = std::map<std::string, T>();
394 
395  for(int n = 0; n < shape[1]; n++)
396  row[cols[n]] = data[cols[n]][m];
397 
398  return row;
399  };
400  };
401 
402 
406  {
407  hid_t ct = H5Tcreate(H5T_COMPOUND, sizeof(xd_complex_t));
408  H5Tinsert(ct, "r", HOFFSET(xd_complex_t, re), H5T_NATIVE_DOUBLE);
409  H5Tinsert(ct, "i", HOFFSET(xd_complex_t, im), H5T_NATIVE_DOUBLE);
410  return ct;
411  }
412 
414  static hid_t PYTABLES_COMPLEX128 = _get_PYTABLES_COMPLEX128();
415 
416 
421  inline bool path_exists(hid_t h5file, std::string path)
422  {
423  bool rtn = false;
424  hid_t ds = H5Dopen2(h5file, path.c_str(), H5P_DEFAULT);
425  if (0 <= ds)
426  {
427  rtn = true;
428  H5Dclose(ds);
429  }
430  else
431  {
432  hid_t grp = H5Gopen2(h5file, path.c_str(), H5P_DEFAULT);
433  if (0 <= grp)
434  {
435  rtn = true;
436  H5Gclose(grp);
437  }
438  }
439  return rtn;
440  }
441 
442 
443 // End namespace h5wrap
444 }
445 
446 
447 
448 #endif
std::vector< std::string > cols
Definition: h5wrap.h:377
~PathNotFound()
default destructor
Definition: h5wrap.h:112
FileNotHDF5(std::string fname)
constructor with the filename
Definition: h5wrap.h:51
PathNotFound()
default constructor
Definition: h5wrap.h:109
-
virtual const char * what() const
helpful error message that includes the filename and the groupname
Definition: h5wrap.h:89
complex type struct, matching PyTables definition
Definition: extra_types.h:56
std::string path
path in file to the data
Definition: h5wrap.h:372
std::set< T > h5_array_to_cpp_set(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
Definition: h5wrap.h:187
@@ -101,6 +78,7 @@
~GroupNotFound()
default destructor
Definition: h5wrap.h:80
GroupNotFound()
default constructor
Definition: h5wrap.h:77
+
virtual const char * what() const
helpful error message that includes the filename and the groupname
Definition: h5wrap.h:89
~HomogenousTypeTable()
default destructor
Definition: h5wrap.h:328
std::vector< T > h5_array_to_cpp_vector_1d(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
Definition: h5wrap.h:218
PathNotFound(std::string fname, std::string pname)
constructor with the filename and the pathname
Definition: h5wrap.h:115
@@ -109,23 +87,23 @@
Custom exception for when an existing file is not in a valid HDF5 format.
Definition: h5wrap.h:40
HomogenousTypeTable()
default constructor
Definition: h5wrap.h:325
Custom exception for when a group cannot be found in an HDF5 file.
Definition: h5wrap.h:72
+
virtual const char * what() const
helpful error message that includes the filename and the pathname
Definition: h5wrap.h:122
std::vector< std::vector< std::vector< T > > > h5_array_to_cpp_vector_3d(hid_t h5file, std::string data_path, hid_t dtype=H5T_NATIVE_DOUBLE)
Definition: h5wrap.h:283
~FileNotHDF5()
default destructor
Definition: h5wrap.h:48
Wrapper for standard HDF5 operations.
Definition: h5wrap.h:26
-
virtual const char * what() const
helpful error message that includes the filename
Definition: h5wrap.h:57
hid_t _get_PYTABLES_COMPLEX128()
Definition: h5wrap.h:405
Custom exception for HDF5 indexing errors.
Definition: h5wrap.h:29
GroupNotFound(std::string fname, std::string gname)
constructor with the filename and the groupname
Definition: h5wrap.h:83
+
virtual const char * what() const
helpful error message that includes the filename
Definition: h5wrap.h:57
Definition: h5wrap.h:320
T get_array_index(hid_t dset, int n, hid_t dtype=H5T_NATIVE_DOUBLE)
Definition: h5wrap.h:143
-
virtual const char * what() const
helpful error message that includes the filename and the pathname
Definition: h5wrap.h:122
bool path_exists(hid_t h5file, std::string path)
Definition: h5wrap.h:421
diff --git a/cppapi/html/hierarchy.html b/cppapi/html/hierarchy.html index 629962c2..3a6046c6 100644 --- a/cppapi/html/hierarchy.html +++ b/cppapi/html/hierarchy.html @@ -3,7 +3,8 @@ - + + PyNE C++: Class Hierarchy @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@
- + - - + + + +
 Cpyne::particle::NotAParticleCustom excpeption for failed particle types  Cpyne::rxname::IndeterminateReactionFormCustom exception for declaring a value not to be of ambiquous reaction form  Cpyne::rxname::NotAReactionCustom exception for declaring a value not to be a valid reaction - Cpyne::gammaStruct matching the '/decay/gammas' table in nuc_data.h5 - Ch5wrap::HomogenousTypeTable< T > - Cpyne::level_dataStruct matching the '/decay/level_list' table in nuc_data.h5 - Cpyne::MaterialMaterial composed of nuclides - Cpyne::material_data - Ctracking_data_structures::meshcell - Cpyne::ndsfpyStruct matching the '/neutron/nds_fission_product' table in nuc_data.h5 - Cpyne::ndsfpysubStruct for the nds data for fpyield - Csct_module::polyhedron - Cpyne::q_val_dataStruct matching the q_value table in nuc_data.h5 - Cpyne::ray_buffers - Cpyne::SamplerMesh based Monte Carlo source sampling - Cpyne::scattering_lengthsStruct matching the '/neutron/scattering_lengths' table in nuc_data.h5 - Csimple_xs - Ctracking_data_structures::singular - Cpyne::swapmapcompareData access functions - Cpyne::Tally - Cpyne::tally_struct - Ctracking_data_structures::trackingunitsc - Ctracking_data_structures::trackingunitsp_r - Cpyne::wimsdfpyStruct matching the '/neutron/wimsd_fission_product' table in nuc_data.h5 - Cxd_complex_tComplex type struct, matching PyTables definition + Cpyne::ValueErrorException representing value errors of all kinds + Cpyne::gammaStruct matching the '/decay/gammas' table in nuc_data.h5 + Ch5wrap::HomogenousTypeTable< T > + Cpyne::level_dataStruct matching the '/decay/level_list' table in nuc_data.h5 + Cpyne::MaterialMaterial composed of nuclides + Cpyne::material_data + Ctracking_data_structures::meshcell + Cpyne::ndsfpyStruct matching the '/neutron/nds_fission_product' table in nuc_data.h5 + Cpyne::ndsfpysubStruct for the nds data for fpyield + Csct_module::polyhedron + Cpyne_cram_transmute_info_tag + Cpyne::q_val_dataStruct matching the q_value table in nuc_data.h5 + Cpyne::ray_buffers + Cpyne::SamplerMesh based Monte Carlo source sampling + Cpyne::scattering_lengthsStruct matching the '/neutron/scattering_lengths' table in nuc_data.h5 + Csimple_xs + Ctracking_data_structures::singular + Cpyne::SourceParticle + Cpyne::swapmapcompareData access functions + Cpyne::Tally + Cpyne::tally_struct + Ctracking_data_structures::trackingunitsc + Ctracking_data_structures::trackingunitsp_r + Cpyne::wimsdfpyStruct matching the '/neutron/wimsd_fission_product' table in nuc_data.h5 + Cxd_complex_tComplex type struct, matching PyTables definition
diff --git a/cppapi/html/index.html b/cppapi/html/index.html index 823ba603..64786234 100644 --- a/cppapi/html/index.html +++ b/cppapi/html/index.html @@ -3,7 +3,8 @@ - + + PyNE C++: Main Page @@ -11,9 +12,6 @@ - @@ -31,34 +29,19 @@ - + - + + + +
diff --git a/cppapi/html/jquery.js b/cppapi/html/jquery.js index d52a1c77..f5343eda 100644 --- a/cppapi/html/jquery.js +++ b/cppapi/html/jquery.js @@ -1,4 +1,4 @@ -/* +/*! * jQuery JavaScript Library v1.7.1 * http://jquery.com/ * @@ -14,13 +14,13 @@ * Date: Mon Nov 21 21:11:03 2011 -0500 */ (function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/* +/*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/* +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/
",""],legend:[1,"
","
"],thead:[1,"
","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -29,7 +29,7 @@ * * http://docs.jquery.com/UI */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/* +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! * jQuery UI Widget 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -38,7 +38,7 @@ * * http://docs.jquery.com/UI/Widget */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/* +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! * jQuery UI Mouse 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -50,7 +50,7 @@ * Depends: * jquery.ui.widget.js */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/* +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * @@ -58,11 +58,30 @@ * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + +
+
+
pyne_cram_transmute_info_tag Member List
+
+
+ +

This is the complete list of members for pyne_cram_transmute_info_tag, including all inherited members.

+
+ + + + + + + +
decay_matrix (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
i (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
j (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
n (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
nnz (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
nucids (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
nucs (defined in pyne_cram_transmute_info_tag)pyne_cram_transmute_info_tag
+ + + + diff --git a/cppapi/html/structpyne__cram__transmute__info__tag.html b/cppapi/html/structpyne__cram__transmute__info__tag.html new file mode 100644 index 00000000..735ec661 --- /dev/null +++ b/cppapi/html/structpyne__cram__transmute__info__tag.html @@ -0,0 +1,105 @@ + + + + + + + +PyNE C++: pyne_cram_transmute_info_tag Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
pyne_cram_transmute_info_tag Struct Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Attributes

+int n
 
+int nnz
 
+int * i
 
+int * j
 
+char ** nucs
 
+int * nucids
 
+double * decay_matrix
 
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/cppapi/html/typesct__module_1_1polyhedron-members.html b/cppapi/html/structsct__module_1_1polyhedron-members.html similarity index 68% rename from cppapi/html/typesct__module_1_1polyhedron-members.html rename to cppapi/html/structsct__module_1_1polyhedron-members.html index 0cd6fdcd..b064d273 100644 --- a/cppapi/html/typesct__module_1_1polyhedron-members.html +++ b/cppapi/html/structsct__module_1_1polyhedron-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structsct__module_1_1polyhedron.html b/cppapi/html/structsct__module_1_1polyhedron.html index f16d51e1..673567f0 100644 --- a/cppapi/html/structsct__module_1_1polyhedron.html +++ b/cppapi/html/structsct__module_1_1polyhedron.html @@ -3,7 +3,8 @@ - + + PyNE C++: sct_module::polyhedron Type Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
sct_module::polyhedron Type Reference
@@ -97,28 +72,28 @@ - - - -

Public Attributes

+
integer, dimension(3) indx
 
+
real(kind=dp) volume
 
+
real(kind=dp), dimension(-3:3) area
 
+
integer(kind=1), dimension(-3:3) area_exist
 

The documentation for this type was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d/sct_module.f90
  • +
  • /root/repo/src/transport_spatial_methods/3d/sct_module.f90
diff --git a/cppapi/html/structsimple__xs-members.html b/cppapi/html/structsimple__xs-members.html index 2c288ee1..77dd7e87 100644 --- a/cppapi/html/structsimple__xs-members.html +++ b/cppapi/html/structsimple__xs-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structsimple__xs.html b/cppapi/html/structsimple__xs.html index bf96498d..473c39e6 100644 --- a/cppapi/html/structsimple__xs.html +++ b/cppapi/html/structsimple__xs.html @@ -3,7 +3,8 @@ - + + PyNE C++: simple_xs Struct Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +

Public Attributes

- + int nuc   - + double sigma_t   - + double sigma_s   - + double sigma_e   - + double sigma_i   - + double sigma_a   - + double sigma_gamma   - + double sigma_f   - + double sigma_alpha   - + double sigma_proton   - + double sigma_deut   - + double sigma_trit   - + double sigma_2n   - + double sigma_3n   - + double sigma_4n  
The documentation for this struct was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/data.cpp
  • +
  • /root/repo/src/data.cpp
diff --git a/cppapi/html/typetracking__data__structures_1_1meshcell-members.html b/cppapi/html/structtracking__data__structures_1_1meshcell-members.html similarity index 74% rename from cppapi/html/typetracking__data__structures_1_1meshcell-members.html rename to cppapi/html/structtracking__data__structures_1_1meshcell-members.html index 5b9a6964..fe871004 100644 --- a/cppapi/html/typetracking__data__structures_1_1meshcell-members.html +++ b/cppapi/html/structtracking__data__structures_1_1meshcell-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structtracking__data__structures_1_1meshcell.html b/cppapi/html/structtracking__data__structures_1_1meshcell.html index 0a57cfc4..f1ac3012 100644 --- a/cppapi/html/structtracking__data__structures_1_1meshcell.html +++ b/cppapi/html/structtracking__data__structures_1_1meshcell.html @@ -3,7 +3,8 @@ - + + PyNE C++: tracking_data_structures::meshcell Type Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
tracking_data_structures::meshcell Type Reference
@@ -97,37 +72,37 @@ - - - - - - -

Public Attributes

+
integer xind
 
+
integer yind
 
+
integer zind
 
+
real(kind=pr), dimension(3, 8) corners
 
+
real(kind=pr), dimension(3, 2, 12) edges
 
+
real(kind=pr), dimension(3, 3, 6) faces
 
+
real(kind=pr) volume
 

The documentation for this type was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d/trackstruct.f90
  • +
  • /root/repo/src/transport_spatial_methods/3d/trackstruct.f90
diff --git a/cppapi/html/typetracking__data__structures_1_1singular-members.html b/cppapi/html/structtracking__data__structures_1_1singular-members.html similarity index 74% rename from cppapi/html/typetracking__data__structures_1_1singular-members.html rename to cppapi/html/structtracking__data__structures_1_1singular-members.html index 7ce2db3e..f7a8426d 100644 --- a/cppapi/html/typetracking__data__structures_1_1singular-members.html +++ b/cppapi/html/structtracking__data__structures_1_1singular-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structtracking__data__structures_1_1singular.html b/cppapi/html/structtracking__data__structures_1_1singular.html index 3ba4d64c..9bf40651 100644 --- a/cppapi/html/structtracking__data__structures_1_1singular.html +++ b/cppapi/html/structtracking__data__structures_1_1singular.html @@ -3,7 +3,8 @@ - + + PyNE C++: tracking_data_structures::singular Type Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
tracking_data_structures::singular Type Reference
@@ -97,37 +72,37 @@ - - - - - - -

Public Attributes

+
real(kind=pr) mu
 
+
real(kind=pr) eta
 
+
real(kind=pr) xi
 
+
real(kind=pr), dimension(3, 2) sc
 
+
real(kind=pr), dimension(3, 3) spx
 
+
real(kind=pr), dimension(3, 3) spy
 
+
real(kind=pr), dimension(3, 3) spz
 

The documentation for this type was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d/trackstruct.f90
  • +
  • /root/repo/src/transport_spatial_methods/3d/trackstruct.f90
diff --git a/cppapi/html/typetracking__data__structures_1_1trackingunitsc-members.html b/cppapi/html/structtracking__data__structures_1_1trackingunitsc-members.html similarity index 87% rename from cppapi/html/typetracking__data__structures_1_1trackingunitsc-members.html rename to cppapi/html/structtracking__data__structures_1_1trackingunitsc-members.html index 9ccf7b7a..44d2705e 100644 --- a/cppapi/html/typetracking__data__structures_1_1trackingunitsc-members.html +++ b/cppapi/html/structtracking__data__structures_1_1trackingunitsc-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structtracking__data__structures_1_1trackingunitsc.html b/cppapi/html/structtracking__data__structures_1_1trackingunitsc.html index b348a448..d33375a2 100644 --- a/cppapi/html/structtracking__data__structures_1_1trackingunitsc.html +++ b/cppapi/html/structtracking__data__structures_1_1trackingunitsc.html @@ -3,7 +3,8 @@ - + + PyNE C++: tracking_data_structures::trackingunitsc Type Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
tracking_data_structures::trackingunitsc Type Reference
@@ -97,91 +72,91 @@ - - - - - - - - - - - - - - - - - - - - - - - - -

Public Attributes

+
integer xindx
 
+
integer yindx
 
+
integer zindx
 
+
integer, dimension(3) incr
 
+
real(kind=pr), dimension(3) enter
 
+
real(kind=pr), dimension(3) leave
 
+
integer nspx
 
+
integer nspy
 
+
integer nspz
 
+
real(kind=pr), dimension(:,:), allocatable isect_x
 
+
real(kind=pr), dimension(:,:), allocatable isect_y
 
+
real(kind=pr), dimension(:,:), allocatable isect_z
 
+
integer nfrba
 
+
integer nleri
 
+
integer nboto
 
+
real(kind=pr), dimension(:,:), allocatable frba
 
+
real(kind=pr), dimension(:,:), allocatable leri
 
+
real(kind=pr), dimension(:,:), allocatable boto
 
+
integer ntfrba
 
+
integer ntleri
 
+
integer ntboto
 
+
integer, dimension(:,:), allocatable tfrba
 
+
integer, dimension(:,:), allocatable tleri
 
+
integer, dimension(:,:), allocatable tboto
 
+
type(trackingunitsc), pointer next
 

The documentation for this type was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d/trackstruct.f90
  • +
  • /root/repo/src/transport_spatial_methods/3d/trackstruct.f90
diff --git a/cppapi/html/typetracking__data__structures_1_1trackingunitsp__r-members.html b/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r-members.html similarity index 83% rename from cppapi/html/typetracking__data__structures_1_1trackingunitsp__r-members.html rename to cppapi/html/structtracking__data__structures_1_1trackingunitsp__r-members.html index 4fcc6909..bebf69a3 100644 --- a/cppapi/html/typetracking__data__structures_1_1trackingunitsp__r-members.html +++ b/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r.html b/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r.html index 1be33183..7112a4ca 100644 --- a/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r.html +++ b/cppapi/html/structtracking__data__structures_1_1trackingunitsp__r.html @@ -3,7 +3,8 @@ - + + PyNE C++: tracking_data_structures::trackingunitsp_r Type Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
tracking_data_structures::trackingunitsp_r Type Reference
@@ -97,67 +72,67 @@ - - - - - - - - - - - - - - - - -

Public Attributes

+
integer tpe
 
+
integer, dimension(2) cindx
 
+
integer, dimension(2) incr
 
+
integer nmbr
 
+
real(kind=pr), dimension(2) enter
 
+
real(kind=pr), dimension(2) leave
 
+
integer npt1
 
+
integer npt2
 
+
real(kind=pr), dimension(:,:), allocatable pt1
 
+
real(kind=pr), dimension(:,:), allocatable pt2
 
+
integer ntpt1
 
+
integer ntpt2
 
+
integer, dimension(:,:), allocatable tpt1
 
+
integer, dimension(:,:), allocatable tpt2
 
+
integer nbranch
 
+
integer, dimension(:), allocatable branch
 
+
type(trackingunitsp_r), pointer next
 

The documentation for this type was generated from the following file:
    -
  • /home/ubuntu/Documents/pyne.github.com/src/transport_spatial_methods/3d/trackstruct.f90
  • +
  • /root/repo/src/transport_spatial_methods/3d/trackstruct.f90
diff --git a/cppapi/html/structxd__complex__t-members.html b/cppapi/html/structxd__complex__t-members.html index 977d3639..640d8514 100644 --- a/cppapi/html/structxd__complex__t-members.html +++ b/cppapi/html/structxd__complex__t-members.html @@ -3,7 +3,8 @@ - + + PyNE C++: Member List @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +
diff --git a/cppapi/html/structxd__complex__t.html b/cppapi/html/structxd__complex__t.html index 1afbda8c..c1ed413b 100644 --- a/cppapi/html/structxd__complex__t.html +++ b/cppapi/html/structxd__complex__t.html @@ -3,7 +3,8 @@ - + + PyNE C++: xd_complex_t Struct Reference @@ -11,9 +12,6 @@ - @@ -31,42 +29,19 @@ - + - - + + + +

Public Attributes

- + double re  real part
  - + double im  imaginary part
  @@ -110,14 +85,14 @@

Detailed Description

complex type struct, matching PyTables definition


The documentation for this struct was generated from the following file:
diff --git a/cppapi/html/tabs.css b/cppapi/html/tabs.css index 9cf578f2..bbde11ed 100644 --- a/cppapi/html/tabs.css +++ b/cppapi/html/tabs.css @@ -1,60 +1 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/cppapi/html/tally_8h_source.html b/cppapi/html/tally_8h_source.html index 191cd761..12b265ef 100644 --- a/cppapi/html/tally_8h_source.html +++ b/cppapi/html/tally_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/tally.h Source File + + +PyNE C++: /root/repo/src/tally.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
Tally()
Tally Constructors.
Definition: tally.cpp:33
Provides some HDF5 helper functionality in its own namespace.
Definition: tally.h:25
-
std::ostream & operator<<(std::ostream &os, Material mat)
Definition: material.cpp:1053
+
std::ostream & operator<<(std::ostream &os, Material mat)
Definition: material.cpp:1172
void write_hdf5(char *filename, char *datapath)
Definition: tally.cpp:154
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
int entity_id
id number of the entity being tallied upon
Definition: tally.h:100
void from_hdf5(char *filename, char *datapath, int row=-1)
Definition: tally.cpp:69
double normalization
the tally normalization
Definition: tally.h:102
@@ -109,9 +87,9 @@ diff --git a/cppapi/html/transmuters_8h_source.html b/cppapi/html/transmuters_8h_source.html new file mode 100644 index 00000000..f570700b --- /dev/null +++ b/cppapi/html/transmuters_8h_source.html @@ -0,0 +1,78 @@ + + + + + + + +PyNE C++: /root/repo/src/transmuters.h Source File + + + + + + + + + +
+
+ + + + + + +
+
PyNE C++ +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
transmuters.h
+
+
+
1 #ifndef PYNE_DQKIQSJ4SNG7VAB5LX36BLIYMA
2 #define PYNE_DQKIQSJ4SNG7VAB5LX36BLIYMA
3 
4 #include <map>
5 #include <vector>
6 
7 namespace pyne {
8 namespace transmuters {
9 
10 
17 std::map<int, double> cram(std::vector<double>& A,
18  const std::map<int, double>& n0,
19  const int order=14);
20 
21 } // namespace transmuters
22 } // namespace pyne
23 #endif // PYNE_DQKIQSJ4SNG7VAB5LX36BLIYMA
A container representing enrichment cascades.
Definition: _atomic_data.h:16
+
+ + + + diff --git a/cppapi/html/utils_8h_source.html b/cppapi/html/utils_8h_source.html index c7399ffa..303764a0 100644 --- a/cppapi/html/utils_8h_source.html +++ b/cppapi/html/utils_8h_source.html @@ -3,17 +3,15 @@ - -PyNE C++: /home/ubuntu/Documents/pyne.github.com/src/utils.h Source File + + +PyNE C++: /root/repo/src/utils.h Source File - @@ -31,39 +29,19 @@ - + - - + + + +
utils.h
-
1 
7 // Header for general library file.
8 
9 #ifndef PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
10 #define PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
11 
12 //standard libraries
13 #include <string>
14 #include <string.h>
15 #include <sstream>
16 #include <cctype>
17 #include <stdlib.h>
18 #include <iostream>
19 #include <cmath>
20 #include <exception>
21 #include <sys/stat.h>
22 #include <sys/types.h>
23 #include <cstdlib>
24 #include <vector>
25 #include <algorithm>
26 
27 #if (__GNUC__ >= 4)
28  #include <cmath>
29  #define isnan(x) std::isnan(x)
30 #else
31  #include <math.h>
32  #define isnan(x) __isnand((double)x)
33 #endif
34 
35 #ifdef __WIN_MSVC__
36  #define isnan(x) ((x) != (x))
37 #endif
38 
39 #ifndef JSON_IS_AMALGAMATION
40  #define JSON_IS_AMALGAMATION
41 #endif
42 
44 namespace pyne {
45 
46  void pyne_start ();
47 
49  extern std::string PYNE_DATA;
50  extern std::string NUC_DATA_PATH;
51 
52  // String Transformations
54  static std::string digits = "0123456789";
56  static std::string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
58  static std::string words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
59 
63  std::string to_str(int t);
64  std::string to_str(unsigned int t);
65  std::string to_str(double t);
66  std::string to_str(bool t);
68 
69  int to_int(std::string s);
70 
71  double to_dbl(std::string s);
72 
75  double endftod_cpp(char * s);
76  double endftod_f(char * s);
77  extern double (*endftod)(char * s);
78 
79  void use_fast_endftod();
80 
82  std::string to_upper(std::string s);
83 
85  std::string to_lower(std::string s);
86 
88  std::string capitalize(std::string s);
89 
94  std::string get_flag(char line[], int max_l);
95 
97  std::string remove_substring(std::string s, std::string substr);
98 
100  std::string remove_characters(std::string s, std::string chars);
101 
103  std::string replace_all_substrings(std::string s, std::string substr,
104  std::string repstr);
105 
107  std::string last_char(std::string s);
108 
111  std::string slice_from_end(std::string s, int n=-1, int l=1);
112 
114  bool ternary_ge(int a, int b, int c);
115 
117  bool contains_substring(std::string s, std::string substr);
118 
121  std::string natural_naming(std::string name);
122 
124  double slope (double x2, double y2, double x1, double y1);
125 
128  double solve_line (double x, double x2, double y2, double x1, double y1);
129 
130  double tanh(double x);
131  double coth(double x);
132 
133 
134  // File Helpers
136  bool file_exists(std::string strfilename);
137 
138  // Message Helpers
139  extern bool USE_WARNINGS;
141  bool toggle_warnings();
142 
144  void warning(std::string s);
145 
148  class FileNotFound : public std::exception
149  {
150  public:
151 
154 
156  ~FileNotFound () throw () {};
157 
159  FileNotFound(std::string fname)
160  {
161  filename = fname;
162  };
163 
165  virtual const char* what() const throw()
166  {
167  std::string FNFstr ("File not found: ");
168  if (!filename.empty())
169  FNFstr += filename;
170 
171  return (const char *) FNFstr.c_str();
172  };
173 
174  private:
175  std::string filename;
176  };
177 
178 
179 // End PyNE namespace
180 }
181 
182 #endif // PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
double to_dbl(std::string s)
Converts a valid string to a float using atof().
Definition: utils.cpp:78
+
1 
7 // Header for general library file.
8 
9 #ifndef PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
10 #define PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
11 
12 //standard libraries
13 #include <string>
14 #include <string.h>
15 #include <sstream>
16 #include <cctype>
17 #include <stdlib.h>
18 #include <iostream>
19 #include <cmath>
20 #include <exception>
21 #include <sys/stat.h>
22 #include <sys/types.h>
23 #include <cstdlib>
24 #include <vector>
25 #include <algorithm>
26 
27 #if (__GNUC__ >= 4)
28  #include <cmath>
29  #define isnan(x) std::isnan(x)
30 #else
31  #include <math.h>
32  #define isnan(x) __isnand((double)x)
33 #endif
34 
35 #ifdef __WIN_MSVC__
36  #define isnan(x) ((x) != (x))
37 #endif
38 
39 #ifndef JSON_IS_AMALGAMATION
40  #define JSON_IS_AMALGAMATION
41 #endif
42 
44 namespace pyne {
45 
46  void pyne_start ();
47 
49  extern std::string PYNE_DATA;
50  extern std::string NUC_DATA_PATH;
51  extern std::string VERSION;
52 
53  // String Transformations
55  static std::string digits = "0123456789";
57  static std::string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
59  static std::string words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
60 
64  std::string to_str(int t);
65  std::string to_str(unsigned int t);
66  std::string to_str(double t);
67  std::string to_str(bool t);
69 
70  int to_int(std::string s);
71 
72  double to_dbl(std::string s);
73 
76  double endftod_cpp(char * s);
77  double endftod_f(char * s);
78  extern double (*endftod)(char * s);
79 
80  void use_fast_endftod();
81 
83  std::string to_upper(std::string s);
84 
86  std::string to_lower(std::string s);
87 
89  std::string capitalize(std::string s);
90 
95  std::string get_flag(char line[], int max_l);
96 
98  std::string remove_substring(std::string s, std::string substr);
99 
101  std::string remove_characters(std::string s, std::string chars);
102 
104  std::string replace_all_substrings(std::string s, std::string substr,
105  std::string repstr);
106 
108  std::string last_char(std::string s);
109 
112  std::string slice_from_end(std::string s, int n=-1, int l=1);
113 
115  bool ternary_ge(int a, int b, int c);
116 
118  bool contains_substring(std::string s, std::string substr);
119 
122  std::string natural_naming(std::string name);
123 
125  double slope (double x2, double y2, double x1, double y1);
126 
129  double solve_line (double x, double x2, double y2, double x1, double y1);
130 
131  double tanh(double x);
132  double coth(double x);
133 
134 
135  // File Helpers
137  bool file_exists(std::string strfilename);
138 
139  // Message Helpers
140  extern bool USE_WARNINGS;
142  bool toggle_warnings();
143 
145  void warning(std::string s);
146 
149  class FileNotFound : public std::exception
150  {
151  public:
152 
155 
157  ~FileNotFound () throw () {};
158 
160  FileNotFound(std::string fname)
161  {
162  FNF_message = "File not found";
163  if (!fname.empty())
164  FNF_message += ": " + fname;
165  };
166 
168  virtual const char* what() const throw()
169  {
170  return FNF_message.c_str();
171  };
172 
173  private:
174  std::string FNF_message;
175  };
176 
178  class ValueError : public std::exception
179  {
180  public:
181 
183  ValueError () {};
184 
186  ~ValueError () throw () {};
187 
189  ValueError(std::string msg)
190  {
191  message = msg;
192  };
193 
195  virtual const char* what() const throw()
196  {
197  std::string msgstr ("ValueError: ");
198  if (!message.empty())
199  msgstr += message;
200 
201  return (const char *) msgstr.c_str();
202  };
203 
204  private:
205  std::string message;
206  };
207 
208 
209 // End PyNE namespace
210 }
211 
212 #endif // PYNE_KMMHYNANYFF5BFMEYIP7TUNLHA
double to_dbl(std::string s)
Converts a valid string to a float using atof().
Definition: utils.cpp:79
double b(int nuc)
Computes the scattering length [cm] from the coherent and incoherent components.
Definition: data.cpp:835
-
std::string get_flag(char line[], int max_l)
Definition: utils.cpp:179
-
std::string natural_naming(std::string name)
Definition: utils.cpp:253
-
std::string last_char(std::string s)
Returns the last character in a string.
Definition: utils.cpp:228
-
double coth(double x)
The hyperbolic cotangent function.
Definition: utils.cpp:303
+
std::string get_flag(char line[], int max_l)
Definition: utils.cpp:180
+
std::string natural_naming(std::string name)
Definition: utils.cpp:254
+
std::string last_char(std::string s)
Returns the last character in a string.
Definition: utils.cpp:229
+
double coth(double x)
The hyperbolic cotangent function.
Definition: utils.cpp:304
std::string PYNE_DATA
Path to the directory containing the PyNE data.
Definition: utils.cpp:13
-
bool ternary_ge(int a, int b, int c)
Returns true if a <= b <= c and flase otherwise.
Definition: utils.cpp:240
-
std::string to_lower(std::string s)
Returns an all lower case copy of the string.
Definition: utils.cpp:158
-
Definition: utils.h:148
-
bool contains_substring(std::string s, std::string substr)
Returns true if substr is in s.
Definition: utils.cpp:246
-
bool toggle_warnings()
Toggles warnings on and off.
Definition: utils.cpp:343
-
double endftod_f(char *s)
Converts a string from ENDF format to a float.
Definition: utils.cpp:137
+
bool ternary_ge(int a, int b, int c)
Returns true if a <= b <= c and flase otherwise.
Definition: utils.cpp:241
+
std::string to_lower(std::string s)
Returns an all lower case copy of the string.
Definition: utils.cpp:159
+
Definition: utils.h:149
+
bool contains_substring(std::string s, std::string substr)
Returns true if substr is in s.
Definition: utils.cpp:247
+
bool toggle_warnings()
Toggles warnings on and off.
Definition: utils.cpp:344
+
double endftod_f(char *s)
Converts a string from ENDF format to a float.
Definition: utils.cpp:138
std::string NUC_DATA_PATH
Path to the nuc_data.h5 file.
Definition: utils.h:50
-
double endftod_cpp(char *s)
Definition: utils.cpp:82
-
~FileNotFound()
default destructor
Definition: utils.h:156
-
std::string slice_from_end(std::string s, int n=-1, int l=1)
Definition: utils.cpp:234
-
FileNotFound()
default constructor
Definition: utils.h:153
-
int to_int(std::string s)
Converts a string of digits to an int using atoi().
Definition: utils.cpp:74
-
virtual const char * what() const
Creates a helpful error message.
Definition: utils.h:165
-
std::string to_upper(std::string s)
switches endftod to fast cpp version
Definition: utils.cpp:151
-
double slope(double x2, double y2, double x1, double y1)
Finds the slope of a line from the points (x1, y1) and (x2, y2).
Definition: utils.cpp:288
-
FileNotFound(std::string fname)
constructor with the filename fname.
Definition: utils.h:159
-
std::string capitalize(std::string s)
Returns a capitalized copy of the string.
Definition: utils.cpp:166
-
void warning(std::string s)
Prints a warning message.
Definition: utils.cpp:348
-
A container representing enrichment cascades.
Definition: _atomic_data.h:7
-
std::string replace_all_substrings(std::string s, std::string substr, std::string repstr)
Replaces all instance of substr in s with repstr.
Definition: utils.cpp:216
-
bool file_exists(std::string strfilename)
Returns true if the file can be found.
Definition: utils.cpp:311
-
void pyne_start()
Initializes PyNE based on environment.
Definition: utils.cpp:16
-
double(* endftod)(char *s)
endftod function pointer. defaults to fortran
Definition: utils.cpp:145
-
std::string remove_characters(std::string s, std::string chars)
Removes all characters in the string chars from s.
Definition: utils.cpp:207
-
double solve_line(double x, double x2, double y2, double x1, double y1)
Definition: utils.cpp:294
-
double tanh(double x)
The hyperbolic tangent function.
Definition: utils.cpp:299
-
std::string remove_substring(std::string s, std::string substr)
Creates a copy of s with all instances of substr taken out.
Definition: utils.cpp:196
+
ValueError(std::string msg)
constructor with the filename fname.
Definition: utils.h:189
+
double endftod_cpp(char *s)
Definition: utils.cpp:83
+
~FileNotFound()
default destructor
Definition: utils.h:157
+
std::string slice_from_end(std::string s, int n=-1, int l=1)
Definition: utils.cpp:235
+
FileNotFound()
default constructor
Definition: utils.h:154
+
int to_int(std::string s)
Converts a string of digits to an int using atoi().
Definition: utils.cpp:75
+
std::string to_upper(std::string s)
switches endftod to fast cpp version
Definition: utils.cpp:152
+
ValueError()
default constructor
Definition: utils.h:183
+
~ValueError()
default destructor
Definition: utils.h:186
+
double slope(double x2, double y2, double x1, double y1)
Finds the slope of a line from the points (x1, y1) and (x2, y2).
Definition: utils.cpp:289
+
FileNotFound(std::string fname)
constructor with the filename fname.
Definition: utils.h:160
+
std::string capitalize(std::string s)
Returns a capitalized copy of the string.
Definition: utils.cpp:167
+
virtual const char * what() const
Creates a helpful error message.
Definition: utils.h:168
+
void warning(std::string s)
Prints a warning message.
Definition: utils.cpp:349
+
A container representing enrichment cascades.
Definition: _atomic_data.h:16
+
std::string replace_all_substrings(std::string s, std::string substr, std::string repstr)
Replaces all instance of substr in s with repstr.
Definition: utils.cpp:217
+
bool file_exists(std::string strfilename)
Returns true if the file can be found.
Definition: utils.cpp:312
+
void pyne_start()
Initializes PyNE based on environment.
Definition: utils.cpp:17
+
double(* endftod)(char *s)
endftod function pointer. defaults to fortran
Definition: utils.cpp:146
+
std::string remove_characters(std::string s, std::string chars)
Removes all characters in the string chars from s.
Definition: utils.cpp:208
+
std::string VERSION
PyNE version number.
Definition: utils.cpp:15
+
virtual const char * what() const
Creates a helpful error message.
Definition: utils.h:195
+
double solve_line(double x, double x2, double y2, double x1, double y1)
Definition: utils.cpp:295
+
double tanh(double x)
The hyperbolic tangent function.
Definition: utils.cpp:300
+
Exception representing value errors of all kinds.
Definition: utils.h:178
+
std::string remove_substring(std::string s, std::string substr)
Creates a copy of s with all instances of substr taken out.
Definition: utils.cpp:197
diff --git a/cppapi/index.html b/cppapi/index.html index f557786b..cad84ba4 100644 --- a/cppapi/index.html +++ b/cppapi/index.html @@ -11,11 +11,14 @@ C++ API — PyNE 0.5.11 - - + + + + + @@ -229,8 +232,8 @@

Navigation

+ + + + + @@ -162,8 +165,8 @@

Navigation

+ + + + + @@ -177,8 +180,8 @@

Navigation

+ + + + + @@ -233,8 +236,8 @@

Navigation

+ + + + + @@ -226,64 +229,64 @@

Integration of Energy Groups -

y=A\ln{x}+B \\ +

+\[\begin{split}y=A\ln{x}+B \\ y_1=A\ln{x_1}+B \\ -y_2=A\ln{x_2}+B

-

With some algebra, we get:

-
-

A(\ln{x_1}-\ln{x_2})=y_1-y_2 \\ +y_2=A\ln{x_2}+B\end{split}\]

+

With some algebra, we get:

+
+\[\begin{split}A(\ln{x_1}-\ln{x_2})=y_1-y_2 \\ A=\frac{y_1-y_2}{\ln{(x_1/x_2)}} \\ -B=y_1-A\ln{x_1}=y_1-\frac{y_1-y_2}{\ln{(x_1/x_2)}}\ln{x_1}

-

Then we can take the integral and plug in A and B:

-
-

\int_{x_1}^{x_2}A\ln{x}+B\mathrm{d}x = A(x\ln{x}-x)|_{x_1}^{x_2}+Bx|_{x_1}^{x_2} = A(x_2\ln{x_2}-x_1\ln{x_1}-x_2+x_1)+B(x_2-x_1)\\ -\int_{x_1}^{x_2}y(x)\mathrm{d}x = \frac{y_1-y_2}{\ln{(x_1/x_2)}}(x_2\ln{x_2}-x_1\ln{x_1}-x_2+x_1) + (y_1-\frac{y_1-y_2}{\ln{(x_1/x_2)}} \ln{x_1})(x_2-x_1) \\

-

When x is linear in ln(y), we have:

-
-

x=A\ln{y}+B

-

Since A and B are arbitrary constants, we can express this relation as:

-
-

\ln{y}=Ax+B\\ +B=y_1-A\ln{x_1}=y_1-\frac{y_1-y_2}{\ln{(x_1/x_2)}}\ln{x_1}\end{split}\]

+

Then we can take the integral and plug in A and B:

+
+\[\begin{split}\int_{x_1}^{x_2}A\ln{x}+B\mathrm{d}x = A(x\ln{x}-x)|_{x_1}^{x_2}+Bx|_{x_1}^{x_2} = A(x_2\ln{x_2}-x_1\ln{x_1}-x_2+x_1)+B(x_2-x_1)\\ +\int_{x_1}^{x_2}y(x)\mathrm{d}x = \frac{y_1-y_2}{\ln{(x_1/x_2)}}(x_2\ln{x_2}-x_1\ln{x_1}-x_2+x_1) + (y_1-\frac{y_1-y_2}{\ln{(x_1/x_2)}} \ln{x_1})(x_2-x_1) \\\end{split}\]
+

When x is linear in ln(y), we have:

+
+\[x=A\ln{y}+B\]
+

Since A and B are arbitrary constants, we can express this relation as:

+
+\[\begin{split}\ln{y}=Ax+B\\ y = e^{Ax+B}\\ y_1 = e^{Ax_1+B}\\ -y_2 = e^{Ax_2+B}

-

So now we can solve for A:

-
-

\frac{y_1}{y_2} = e^{Ax_1+B-Ax_2-B} = e^{A(x_1-x_2)}\\ +y_2 = e^{Ax_2+B}\end{split}\]

+

So now we can solve for A:

+
+\[\begin{split}\frac{y_1}{y_2} = e^{Ax_1+B-Ax_2-B} = e^{A(x_1-x_2)}\\ ln{\frac{y_1}{y_2}} = A(x_1-x_2)\\ -A = \frac{\ln{(y_1/y_2)}}{x_1-x_2}

-

Plug this in to the original relation to solve for B:

-
-

\ln{y_1} = Ax_1+B\\ +A = \frac{\ln{(y_1/y_2)}}{x_1-x_2}\end{split}\]

+

Plug this in to the original relation to solve for B:

+
+\[\begin{split}\ln{y_1} = Ax_1+B\\ B = \ln{y_1}-Ax_1\\ -B = \ln{y_1}-\frac{\ln{(y_1/y_2)}}{x_1-x_2}x_1

-

Now we integrate e^{Ax+B}. We all know this one!

-
-

\int_{x_1}^{x_2} e^{Ax+B} \mathrm{d}x = \frac{1}{A}e^{Ax+B}|_{x_1}^{x_2} = \frac{e^B}{A}(e^{Ax_2}-e^{Ax_1})

-

Factor stuff out and you get:

-
-

\int_{x_1}^{x_2} e^{Ax+B} \mathrm{d}x = \frac{1}{A}(y_2-y_1)

-

When ln(y) is linear in ln(x) we have:

-
-

\ln{y} = A\ln{x}+B

-

Taking e to the power of both sides gives us:

-
-

y = e^Bx^A \\ +B = \ln{y_1}-\frac{\ln{(y_1/y_2)}}{x_1-x_2}x_1\end{split}\]

+

Now we integrate \(e^{Ax+B}\). We all know this one!

+
+\[\int_{x_1}^{x_2} e^{Ax+B} \mathrm{d}x = \frac{1}{A}e^{Ax+B}|_{x_1}^{x_2} = \frac{e^B}{A}(e^{Ax_2}-e^{Ax_1})\]
+

Factor stuff out and you get:

+
+\[\int_{x_1}^{x_2} e^{Ax+B} \mathrm{d}x = \frac{1}{A}(y_2-y_1)\]
+

When ln(y) is linear in ln(x) we have:

+
+\[\ln{y} = A\ln{x}+B\]
+

Taking e to the power of both sides gives us:

+
+\[\begin{split}y = e^Bx^A \\ y_1 = e^Bx_1^A \\ -y_2 = e^Bx_2^A

-

With some algebra we get:

-
-

A = - \frac{\ln{y_2}-\ln{y_1}}{\ln{x_1}-\ln{x_2}} \\ -B = - \frac{\ln{y_1}\ln{x_2} - \ln{y_2}\ln{x_1}}{\ln{x_1}-\ln{x_2}}

-

And finally we can plug A and B into the integral:

-
-

\int_{x_1}^{x_2}e^Bx^A\mathrm{d}x = e^B (\frac{x^{A+1}}{A+1})|_{x_1}^{x_2}

-

The ENDF Manual also mentions a sixth one-dimensional interpolation +y_2 = e^Bx_2^A\end{split}\]

+

With some algebra we get:

+
+\[\begin{split}A = - \frac{\ln{y_2}-\ln{y_1}}{\ln{x_1}-\ln{x_2}} \\ +B = - \frac{\ln{y_1}\ln{x_2} - \ln{y_2}\ln{x_1}}{\ln{x_1}-\ln{x_2}}\end{split}\]
+

And finally we can plug A and B into the integral:

+
+\[\int_{x_1}^{x_2}e^Bx^A\mathrm{d}x = e^B (\frac{x^{A+1}}{A+1})|_{x_1}^{x_2}\]
+

The ENDF Manual also mentions a sixth one-dimensional interpolation law, described in detail on pp. 23-24. From this, I quote:

-
-

\sigma = \frac{A}{E} e^{-\frac{B}{\sqrt{E-T}}}

-

Where T = 0 for exothermic reactions with Q greater than 0 and equal +

+\[\sigma = \frac{A}{E} e^{-\frac{B}{\sqrt{E-T}}}\]
+

Where T = 0 for exothermic reactions with Q greater than 0 and equal to kinematic threshold energy for endothermic reactions with Q less than or equal to 0.

The ENDF Manual also states that this is “for charged-particle cross @@ -363,8 +366,8 @@

Navigation

+ + + + + @@ -200,8 +203,8 @@

Navigation

+ + + + + @@ -148,8 +151,8 @@

Navigation

+ + + + + @@ -255,8 +258,8 @@

Navigation

+ + + + + @@ -178,8 +181,8 @@

Navigation

+ + + + + @@ -209,8 +212,8 @@

Navigation

+ + + + + @@ -703,8 +706,8 @@

Navigation

+ + + + + @@ -196,8 +199,8 @@

Navigation

+ + + + + @@ -171,8 +174,8 @@

Navigation

+ + + + + @@ -63,12 +66,17 @@

Navigation

ACE Reader

-

Download the full notebook.

+

Download the full notebook.

-ace + +ace + + + +