Source code for pyne.dbgen.nuc_data_make

from __future__ import print_function
import os
import argparse
from pyne.utils import QA_warn

try:
    import urllib.request as urllib2
except ImportError:
    import urllib2
import shutil
from distutils.dir_util import mkpath, remove_tree

from pyne.api import nuc_data
from pyne.utils import message
from pyne.dbgen.api import build_dir
from pyne.dbgen.decay import make_decay
from pyne.dbgen.atomic_mass import make_atomic_mass
from pyne.dbgen.materials_library import make_materials_library
from pyne.dbgen.scattering_lengths import make_scattering_lengths
from pyne.dbgen.simple_xs import make_simple_xs
from pyne.dbgen.q_val import make_q_value
from pyne.dbgen.dosefactors import make_dose_factors
from pyne.dbgen.cinder import make_cinder
from pyne.dbgen.eaf import make_eaf
from pyne.dbgen import wimsdfpy
from pyne.dbgen import ndsfpy
from pyne.dbgen.hashtools import check_hashes

QA_warn(__name__)

# Thanks to http://patorjk.com/software/taag/
# and http://www.chris.com/ascii/index.php?art=creatures/dragons (Jeff Ferris)
# for ASCII art inspiration

pyne_logo = """\

                                  /   \
 _                        )      ((   ))     (
(@)                      /|\      ))_((     /|\
|-|                     / | \    (/\|/\)   / | \                      (@)
| | -------------------/--|-voV---\`|'/--Vov-|--\---------------------|-|
|-|                         '^`   (o o)  '^`                          | |
| |                               `\Y/'                               |-|
|-|                                                                   | |
| |        /\             ___           __  __             /\         |-|
|-|       /^~\           / _ \_   _  /\ \ \/__\           /^~\        | |
| |       /^~\          / /_)/ | | |/  \/ /_\             /^~\        |-|
|-|       /^~\         / ___/| |_| / /\  //__             /^~\        | |
| |       ^||`         \/     \__, \_\ \/\__/             ^||`        |-|
|-|        ||                |____/                        ||         | |
| |       ====                                            ====        |-|
|-|                                                                   | |
| |                                                                   |-|
|-|___________________________________________________________________| |
(@)              l   /\ /         ( (       \ /\   l                `\|-|
                 l /   V           \ \       V   \ l                  (@)
                 l/                _) )_          \I
                                   `\ /'
                                     `
"""


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 = "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)
        pnd = urllib2.urlopen(prebuilt_nuc_data_url)
        with open(prebuilt_nuc_data, 'wb') as f:
            f.write(pnd.read())

    if not os.path.exists(nuc_data):
        shutil.copyfile(prebuilt_nuc_data, nuc_data)


[docs]def main(args=None): """Entry point for nuc_data_make utility.""" print(message(pyne_logo)) make_funcs = [('atomic_mass', make_atomic_mass), ('scattering_lengths', make_scattering_lengths), ('decay', make_decay), ('simple_xs', make_simple_xs), ('cinder', make_cinder), ('materials', make_materials_library), ('q_values', make_q_value), ('dose_factors', make_dose_factors), ('eaf', make_eaf), ('wimsd_fpy', wimsdfpy.make_fpy), ('nds_fpy', ndsfpy.make_fpy) ] make_map = dict(make_funcs) make_open = set(['atomic_mass', 'scattering_lengths', 'simple_xs', 'materials', 'wimsd_fpy', 'nds_fpy', 'q_values', 'dose_factors']) # Parse the command line arguments parser = argparse.ArgumentParser(description='Make a nuclear data library.') parser.add_argument('-o', dest='nuc_data', action='store', default=nuc_data, help='path to the output database file.') parser.add_argument('-b', dest='build_dir', action='store', default=build_dir, help='path to the build directory.') parser.add_argument('--datapath', dest='datapath', action='store', default="", help='MCNP DATAPATH.') parser.add_argument('--fetch-prebuilt', dest='fetch_prebuilt', action='store', type=lambda s: 't' in s.lower() or 'y' in s.lower(), default=True, help='grab partially assembled file [y/n].') parser.add_argument('--make-open-only', dest='make_open_only', action='store', type=lambda s: 't' in s.lower() or 'y' in s.lower(), default=False, help='only add open data to file [y/n].') parser.add_argument('-m', dest='make', action='store', default='all', help='comma-separated parts of nuc_data to make: ' + ", ".join([mf[0] for mf in make_funcs]) + ', all, and none.') parser.add_argument('--check', dest='hash_check', action='store_true', help='check hashes against built-in ones') parser.add_argument('--clean', dest='clean', type=int, default=0, help="""level to clean up existing files. 0: no cleaning (default). 1: clean nuc_data. 2: clean nuc_data and build_dir.""") args = parser.parse_args(args=args) # clean nuc data if args.clean in [1, 2]: print("Removing nuc_data from {0}".format(args.nuc_data)) try: os.remove(args.nuc_data) except OSError: pass # Make the build dir if args.clean == 2 and os.path.exists(args.build_dir): print("Removing build_dir from {0}".format(args.build_dir)) remove_tree(args.build_dir) mkpath(args.build_dir) # Determine what to make if args.make == 'none': make_order = [] elif args.make == 'all': make_order = [mf[0] for mf in make_funcs] else: make_order = args.make.replace(' ', "").split(',') if args.make_open_only: make_order = [mo for mo in make_order if mo in make_open] # fetch prebuilt data library if possible if args.fetch_prebuilt: _fetch_prebuilt(args) # Make the various tables print("Making nuc_data at {0}".format(args.nuc_data)) for mo in make_order: make_map[mo](args) if args.hash_check: print("Checking hashes") result = check_hashes(args.nuc_data) print("Results:") badsum = False for name, value in result: if value: print(" node " + name + " checksum matches") else: badsum = True 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 """)
if __name__ == '__main__': main()