diff --git a/.travis.yml b/.travis.yml index bf8ae94d1ca..8487864eef6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,98 +8,80 @@ python: virtualenv: system_site_packages: true -cache: - apt: true +addons: + apt: + packages: + - clang + - gdb sudo: true env: global: - COMPILER=gcc - - PANDAS_VERSION=0.16 - ASTROPY_USE_SYSTEM_PYTEST=1 - SETUP_CMD='test' - TEST_MODE='normal' - - TARDIS_REF_DATA_URL='https://github.com/tardis-sn/tardis-refdata.git' + - REF_DATA_HOME=$HOME/tardis-refdata + - REF_DATA_GITHUB_URL='https://github.com/tardis-sn/tardis-refdata.git' - MINICONDA_URL='http://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh' - SAVE_COVERAGE=false + - GIT_LFS_SKIP_SMUDGE=1 + - TARDIS_BUILD_DIR=$TRAVIS_BUILD_DIR + # Doctr deploy key for tardis-sn/tardis + - secure: "LrhEnB3RgZ/ZA4PruYSF7pkzlY+LrfF1GKpeU+wcG5v/BMIsoTGySO9C1T7XJfsCFMaKMiJoa7ZhJEXPlss9i9PzxFsvbBrBfwb5lPurTbQwqBN4qW/+u2V1kSLAwtVJIHzenVB25PevjkCz8TeAv6DWyHgBWBmImJaTC3d+1/Q=" -matrix: - include: - - python: 2.7 - env: - - COMPILER=gcc - - SETUP_CMD='test --coverage --args="--tardis-refdata=$HOME/tardis-refdata/"' - - TEST_MODE='spectrum' - - SAVE_COVERAGE=true - - - python: 2.7 - env: - - COMPILER=clang - - SETUP_CMD='test --args="--tardis-refdata=$HOME/tardis-refdata/"' - - TEST_MODE='spectrum' - -#trouble with osx building due to segfault at cython (https://github.com/cython/cython/issues/2199) - - os: osx - language: generic - env: - - COMPILER=clang - - SETUP_CMD='test --args="--tardis-refdata=$HOME/tardis-refdata/"' - - TEST_MODE='spectrum' - - MINICONDA_URL='http://repo.continuum.io/miniconda/Miniconda2-latest-MacOSX-x86_64.sh' - - - - python: 2.7 - env: SETUP_CMD='test' - -addons: - apt: - packages: - - clang - - gdb - - +cache: + apt: true + directories: + - $HOME/miniconda + #- $REF_DATA_HOME before_install: # We do this to make sure we get the dependencies so pip works below - - export PYTHONIOENCODING=UTF8 - - wget $MINICONDA_URL -O miniconda.sh - - chmod +x miniconda.sh - - bash miniconda.sh -b -p $HOME/miniconda - - export PATH=$HOME/miniconda/bin:$PATH - - hash -r - - conda update --yes conda - - if [[ $TEST_MODE == 'spectrum' ]]; then conda install -c conda-forge git-lfs=2.2.1 -y; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git lfs install --skip-smudge; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git clone $TARDIS_REF_DATA_URL $HOME/tardis-refdata; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then cd $HOME/tardis-refdata; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin pull/3/head:carsus-ref; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git checkout carsus-ref; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git lfs pull --include="atom_data/kurucz_cd23_chianti_H_He.h5" origin; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git lfs pull --include="atom_data/chianti_He.h5" origin; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git lfs pull --include="plasma_reference/" origin; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then git lfs pull --include="unit_test_data.h5" origin; fi - - if [[ $TEST_MODE == 'spectrum' ]]; then cd $TRAVIS_BUILD_DIR; fi + - source ci-helpers/install_miniconda.sh +#- source ci-helpers/fetch_reference_data.sh install: - - cd $TRAVIS_BUILD_DIR - - conda env create -f tardis_env27.yml + - source ci-helpers/install_tardis_env.sh - source activate tardis - #trouble with building due to segfault at cython (https://github.com/cython/cython/issues/2199) - #remove if we can get normal cython through conda - - git clone https://github.com/cython/cython - - cd cython - - CFLAGS="$CFLAGS -D CYTHON_CLINE_IN_TRACEBACK=0" python setup.py install - - cd .. + - source ci-helpers/fetch_reference_data.sh script: - echo CC=$COMPILER python setup.py $SETUP_CMD - CC=$COMPILER python setup.py $SETUP_CMD + - set -e + - python setup.py build_docs + - pip install doctr + - git lfs uninstall + - ls docs/_build/html/_images + - doctr deploy --built-docs docs/_build/html . + after_success: - - if [[ "$SAVE_COVERAGE" = true ]]; then coveralls; fi + - if [[ "$SAVE_COVERAGE" = true ]]; then codecov -t a876d307-9ed5-4f5d-a6c4-e58291ac4111; fi + after_failure: - cat /home/travis/.pip/pip.log + +stages: + - test + - integration + +jobs: + include: + - stage: test + python: 2.7 + env: + - COMPILER=gcc + - SETUP_CMD='test --coverage --args="--tardis-refdata=$REF_DATA_HOME"' + - TEST_MODE='spectrum' + - SAVE_COVERAGE=true + - stage: integration + if: type = cron + script: + - echo $COMPILER + - echo TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE diff --git a/.zenodo.json b/.zenodo.json index 16488e34086..61421a3169a 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1 +1 @@ -{"creators": [{"orcid": "0000-0002-0479-7235", "affiliation": "European Southern Observatory", "name": "Kerzendorf, Wolfgang"}, {"name": "N\u00f6bauer, Ulrich"}, {"orcid": "0000-0002-9774-1192", "name": "Sim, Stuart"}, {"name": "Lietzau, Stefan"}, {"orcid": "0000-0002-6051-210X", "name": "Jan\u010dauskas, Vytautas"}, {"name": "Vogl, Christian"}, {"name": "Mishin, Mikhail"}, {"orcid": "0000-0003-4875-1623", "affiliation": "National Observatory of Athens", "name": "Tsamis, Fotis"}, {"name": "Boyle, Aoife"}, {"name": "Gupta, Vaibhav"}, {"name": "Desai, Karan"}, {"name": "Klauser, Michael"}, {"orcid": "0000-0001-9901-8785", "affiliation": "Ludwig-Maximilians-Universit\u00e4t M\u00fcnchen Fakult\u00e4t f\u00fcr Physik", "name": "Beaujean, Frederik"}, {"name": "Suban-Loewen, Adam"}, {"orcid": "0000-0002-1502-9127", "affiliation": "University of Toronto", "name": "Heringer, Epson"}, {"name": "Shingles, Luke"}, {"name": "Barna, Barnabas"}, {"name": "Gautam, Gaurav"}, {"name": "Patel, Maryam"}, {"name": "Barbosa, Talytha"}, {"name": "Varanasi, Kaushik"}, {"name": "Reinecke, Martin"}, {"name": "Bylund, Tomas"}, {"name": "Bentil, Laud"}, {"name": "Rajagopalan, Srinath"}, {"name": "Jain, Rinkle"}, {"name": "Singh, Sourav"}, {"name": "Talegaonkar, Chinmay"}, {"name": "Sofiatti, Caroline"}, {"name": "Patel, Pratik"}, {"name": "Yap, Kevin"}, {"name": "Wahi, Ujjwal"}, {"name": "Gupta, Suyash"}]} \ No newline at end of file +{"creators": [{"orcid": "0000-0002-0479-7235", "affiliation": "European Southern Observatory", "name": "Kerzendorf, Wolfgang"}, {"orcid": "0000-0002-2453-853X", "affiliation": "Max-Planck-Institut f\u00fcr Astrophysik", "name": "N\u00f6bauer, Ulrich"}, {"orcid": "0000-0002-9774-1192", "name": "Sim, Stuart"}, {"name": "Lietzau, Stefan"}, {"orcid": "0000-0002-6051-210X", "name": "Jan\u010dauskas, Vytautas"}, {"name": "Vogl, Christian"}, {"name": "Mishin, Mikhail"}, {"orcid": "0000-0003-4875-1623", "affiliation": "National Observatory of Athens", "name": "Tsamis, Fotis"}, {"name": "Boyle, Aoife"}, {"name": "Gupta, Vaibhav"}, {"name": "Desai, Karan"}, {"name": "Klauser, Michael"}, {"orcid": "0000-0001-9901-8785", "affiliation": "Ludwig-Maximilians-Universit\u00e4t M\u00fcnchen Fakult\u00e4t f\u00fcr Physik", "name": "Beaujean, Frederik"}, {"name": "Suban-Loewen, Adam"}, {"orcid": "0000-0002-1502-9127", "affiliation": "University of Toronto", "name": "Heringer, Epson"}, {"name": "Shingles, Luke"}, {"name": "Barna, Barnabas"}, {"name": "Gautam, Gaurav"}, {"name": "Patel, Maryam"}, {"name": "Barbosa, Talytha"}, {"name": "Varanasi, Kaushik"}, {"name": "Reinecke, Martin"}, {"name": "Bylund, Tomas"}, {"name": "Bentil, Laud"}, {"name": "Rajagopalan, Srinath"}, {"name": "Jain, Rinkle"}, {"name": "Singh, Sourav"}, {"name": "Talegaonkar, Chinmay"}, {"name": "Sofiatti, Caroline"}, {"name": "Patel, Pratik"}, {"name": "Yap, Kevin"}, {"name": "Wahi, Ujjwal"}, {"name": "Gupta, Suyash"}]} \ No newline at end of file diff --git a/README.rst b/README.rst index 7ce0a641244..6a45bcfc626 100644 --- a/README.rst +++ b/README.rst @@ -4,10 +4,10 @@ TARDIS TARDIS is a tool that creates synthetic observations (spectra) for exploding stars (supernovae). Documentation can be found at -http://tardis.readthedocs.org. +https://tardis-sn.github.io/tardis/. -.. image:: https://img.shields.io/travis/tardis-sn/tardis/master.svg - :target: https://travis-ci.org/tardis-sn/tardis +.. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master + :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master .. image:: https://img.shields.io/coveralls/tardis-sn/tardis.svg :target: https://coveralls.io/r/tardis-sn/tardis @@ -15,10 +15,6 @@ http://tardis.readthedocs.org. .. image:: https://zenodo.org/badge/5756/tardis-sn/tardis.svg :target: http://dx.doi.org/10.5281/zenodo.17630 -.. image:: https://readthedocs.org/projects/tardis/badge/?version=latest - :target: http://tardis.readthedocs.org/en/latest/?badge=latest - :alt: Documentation Status - .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/tardis-sn/tardis diff --git a/ah_bootstrap.py b/ah_bootstrap.py index 623f11d557a..ece5aa98f06 100644 --- a/ah_bootstrap.py +++ b/ah_bootstrap.py @@ -1,241 +1,487 @@ +""" +This bootstrap module contains code for ensuring that the astropy_helpers +package will be importable by the time the setup.py script runs. It also +includes some workarounds to ensure that a recent-enough version of setuptools +is being used for the installation. + +This module should be the first thing imported in the setup.py of distributions +that make use of the utilities in astropy_helpers. If the distribution ships +with its own copy of astropy_helpers, this module will first attempt to import +from the shipped copy. However, it will also check PyPI to see if there are +any bug-fix releases on top of the current version that may be useful to get +past platform-specific bugs that have been fixed. When running setup.py, use +the ``--offline`` command-line option to disable the auto-upgrade checks. + +When this module is imported or otherwise executed it automatically calls a +main function that attempts to read the project's setup.cfg file, which it +checks for a configuration section called ``[ah_bootstrap]`` the presences of +that section, and options therein, determine the next step taken: If it +contains an option called ``auto_use`` with a value of ``True``, it will +automatically call the main function of this module called +`use_astropy_helpers` (see that function's docstring for full details). +Otherwise no further action is taken and by default the system-installed version +of astropy-helpers will be used (however, ``ah_bootstrap.use_astropy_helpers`` +may be called manually from within the setup.py script). + +This behavior can also be controlled using the ``--auto-use`` and +``--no-auto-use`` command-line flags. For clarity, an alias for +``--no-auto-use`` is ``--use-system-astropy-helpers``, and we recommend using +the latter if needed. + +Additional options in the ``[ah_boostrap]`` section of setup.cfg have the same +names as the arguments to `use_astropy_helpers`, and can be used to configure +the bootstrap script when ``auto_use = True``. + +See https://github.com/astropy/astropy-helpers for more details, and for the +latest version of this module. +""" + import contextlib import errno -import imp +import io +import locale import os import re import subprocess as sp import sys +__minimum_python_version__ = (3, 5) + +if sys.version_info < __minimum_python_version__: + print("ERROR: Python {} or later is required by astropy-helpers".format( + __minimum_python_version__)) + sys.exit(1) + +try: + from ConfigParser import ConfigParser, RawConfigParser +except ImportError: + from configparser import ConfigParser, RawConfigParser + + +_str_types = (str, bytes) + + +# What follows are several import statements meant to deal with install-time +# issues with either missing or misbehaving pacakges (including making sure +# setuptools itself is installed): + +# Check that setuptools 1.0 or later is present +from distutils.version import LooseVersion + +try: + import setuptools + assert LooseVersion(setuptools.__version__) >= LooseVersion('1.0') +except (ImportError, AssertionError): + print("ERROR: setuptools 1.0 or later is required by astropy-helpers") + sys.exit(1) + +# typing as a dependency for 1.6.1+ Sphinx causes issues when imported after +# initializing submodule with ah_boostrap.py +# See discussion and references in +# https://github.com/astropy/astropy-helpers/issues/302 + try: - from ConfigParser import ConfigParser + import typing # noqa except ImportError: - from configparser import ConfigParser + pass + +# Note: The following import is required as a workaround to +# https://github.com/astropy/astropy-helpers/issues/89; if we don't import this +# module now, it will get cleaned up after `run_setup` is called, but that will +# later cause the TemporaryDirectory class defined in it to stop working when +# used later on by setuptools +try: + import setuptools.py31compat # noqa +except ImportError: + pass -if sys.version_info[0] < 3: - _str_types = (str, unicode) -else: - _str_types = (str, bytes) -# Some pre-setuptools checks to ensure that either distribute or setuptools >= -# 0.7 is used (over pre-distribute setuptools) if it is available on the path; -# otherwise the latest setuptools will be downloaded and bootstrapped with -# ``ez_setup.py``. This used to be included in a separate file called -# setuptools_bootstrap.py; but it was combined into ah_bootstrap.py +# matplotlib can cause problems if it is imported from within a call of +# run_setup(), because in some circumstances it will try to write to the user's +# home directory, resulting in a SandboxViolation. See +# https://github.com/matplotlib/matplotlib/pull/4165 +# Making sure matplotlib, if it is available, is imported early in the setup +# process can mitigate this (note importing matplotlib.pyplot has the same +# issue) try: - import pkg_resources - _setuptools_req = pkg_resources.Requirement.parse('setuptools>=0.7') - # This may raise a DistributionNotFound in which case no version of - # setuptools or distribute is properly instlaled - _setuptools = pkg_resources.get_distribution('setuptools') - if _setuptools not in _setuptools_req: - # Older version of setuptools; check if we have distribute; again if - # this results in DistributionNotFound we want to give up - _distribute = pkg_resources.get_distribution('distribute') - if _setuptools != _distribute: - # It's possible on some pathological systems to have an old version - # of setuptools and distribute on sys.path simultaneously; make - # sure distribute is the one that's used - sys.path.insert(1, _distribute.location) - _distribute.activate() - imp.reload(pkg_resources) + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot except: - # There are several types of exceptions that can occur here; if all else - # fails bootstrap and use the bootstrapped version - from ez_setup import use_setuptools - use_setuptools() + # Ignore if this fails for *any* reason* + pass + + +# End compatibility imports... -from distutils import log -from distutils.debug import DEBUG # In case it didn't successfully import before the ez_setup checks import pkg_resources from setuptools import Distribution from setuptools.package_index import PackageIndex -from setuptools.sandbox import run_setup + +from distutils import log +from distutils.debug import DEBUG + # TODO: Maybe enable checking for a specific version of astropy_helpers? DIST_NAME = 'astropy-helpers' PACKAGE_NAME = 'astropy_helpers' +UPPER_VERSION_EXCLUSIVE = None # Defaults for other options DOWNLOAD_IF_NEEDED = True INDEX_URL = 'https://pypi.python.org/simple' USE_GIT = True +OFFLINE = False AUTO_UPGRADE = True +# A list of all the configuration options and their required types +CFG_OPTIONS = [ + ('auto_use', bool), ('path', str), ('download_if_needed', bool), + ('index_url', str), ('use_git', bool), ('offline', bool), + ('auto_upgrade', bool) +] -def use_astropy_helpers(path=None, download_if_needed=None, index_url=None, - use_git=None, auto_upgrade=None): + +class _Bootstrapper(object): + """ + Bootstrapper implementation. See ``use_astropy_helpers`` for parameter + documentation. """ - Ensure that the `astropy_helpers` module is available and is importable. - This supports automatic submodule initialization if astropy_helpers is - included in a project as a git submodule, or will download it from PyPI if - necessary. - Parameters - ---------- + def __init__(self, path=None, index_url=None, use_git=None, offline=None, + download_if_needed=None, auto_upgrade=None): - path : str or None, optional - A filesystem path relative to the root of the project's source code - that should be added to `sys.path` so that `astropy_helpers` can be - imported from that path. + if path is None: + path = PACKAGE_NAME - If the path is a git submodule it will automatically be initialzed - and/or updated. + if not (isinstance(path, _str_types) or path is False): + raise TypeError('path must be a string or False') - The path may also be to a ``.tar.gz`` archive of the astropy_helpers - source distribution. In this case the archive is automatically - unpacked and made temporarily available on `sys.path` as a ``.egg`` - archive. + if not isinstance(path, str): + fs_encoding = sys.getfilesystemencoding() + path = path.decode(fs_encoding) # path to unicode - If `None` skip straight to downloading. + self.path = path - download_if_needed : bool, optional - If the provided filesystem path is not found an attempt will be made to - download astropy_helpers from PyPI. It will then be made temporarily - available on `sys.path` as a ``.egg`` archive (using the - ``setup_requires`` feature of setuptools. + # Set other option attributes, using defaults where necessary + self.index_url = index_url if index_url is not None else INDEX_URL + self.offline = offline if offline is not None else OFFLINE - index_url : str, optional - If provided, use a different URL for the Python package index than the - main PyPI server. + # If offline=True, override download and auto-upgrade + if self.offline: + download_if_needed = False + auto_upgrade = False - use_git : bool, optional - If `False` no git commands will be used--this effectively disables - support for git submodules. + self.download = (download_if_needed + if download_if_needed is not None + else DOWNLOAD_IF_NEEDED) + self.auto_upgrade = (auto_upgrade + if auto_upgrade is not None else AUTO_UPGRADE) - auto_upgrade : bool, optional - By default, when installing a package from a non-development source - distribution ah_boostrap will try to automatically check for patch - releases to astropy-helpers on PyPI and use the patched version over - any bundled versions. Setting this to `False` will disable that - functionality. - """ + # If this is a release then the .git directory will not exist so we + # should not use git. + git_dir_exists = os.path.exists(os.path.join(os.path.dirname(__file__), '.git')) + if use_git is None and not git_dir_exists: + use_git = False - # True by default, unless the --offline option was provided on the command - # line - if '--offline' in sys.argv: - download_if_needed = False - auto_upgrade = False - sys.argv.remove('--offline') + self.use_git = use_git if use_git is not None else USE_GIT + # Declared as False by default--later we check if astropy-helpers can be + # upgraded from PyPI, but only if not using a source distribution (as in + # the case of import from a git submodule) + self.is_submodule = False - if path is None: - path = PACKAGE_NAME + @classmethod + def main(cls, argv=None): + if argv is None: + argv = sys.argv - if download_if_needed is None: - download_if_needed = DOWNLOAD_IF_NEEDED + config = cls.parse_config() + config.update(cls.parse_command_line(argv)) - if index_url is None: - index_url = INDEX_URL + auto_use = config.pop('auto_use', False) + bootstrapper = cls(**config) - if use_git is None: - use_git = USE_GIT + if auto_use: + # Run the bootstrapper, otherwise the setup.py is using the old + # use_astropy_helpers() interface, in which case it will run the + # bootstrapper manually after reconfiguring it. + bootstrapper.run() - if auto_upgrade is None: - auto_upgrade = AUTO_UPGRADE + return bootstrapper - # Declared as False by default--later we check if astropy-helpers can be - # upgraded from PyPI, but only if not using a source distribution (as in - # the case of import from a git submodule) - is_submodule = False + @classmethod + def parse_config(cls): + if not os.path.exists('setup.cfg'): + return {} - if not isinstance(path, _str_types): - if path is not None: - raise TypeError('path must be a string or None') + cfg = ConfigParser() - if not download_if_needed: - log.debug('a path was not given and download from PyPI was not ' - 'allowed so this is effectively a no-op') - return - elif not os.path.exists(path) or os.path.isdir(path): - # Even if the given path does not exist on the filesystem, if it *is* a - # submodule, `git submodule init` will create it - is_submodule = use_git and _check_submodule(path) - - if is_submodule or os.path.isdir(path): - log.info( - 'Attempting to import astropy_helpers from {0} {1!r}'.format( - 'submodule' if is_submodule else 'directory', path)) - dist = _directory_import(path) + try: + cfg.read('setup.cfg') + except Exception as e: + if DEBUG: + raise + + log.error( + "Error reading setup.cfg: {0!r}\n{1} will not be " + "automatically bootstrapped and package installation may fail." + "\n{2}".format(e, PACKAGE_NAME, _err_help_msg)) + return {} + + if not cfg.has_section('ah_bootstrap'): + return {} + + config = {} + + for option, type_ in CFG_OPTIONS: + if not cfg.has_option('ah_bootstrap', option): + continue + + if type_ is bool: + value = cfg.getboolean('ah_bootstrap', option) + else: + value = cfg.get('ah_bootstrap', option) + + config[option] = value + + return config + + @classmethod + def parse_command_line(cls, argv=None): + if argv is None: + argv = sys.argv + + config = {} + + # For now we just pop recognized ah_bootstrap options out of the + # arg list. This is imperfect; in the unlikely case that a setup.py + # custom command or even custom Distribution class defines an argument + # of the same name then we will break that. However there's a catch22 + # here that we can't just do full argument parsing right here, because + # we don't yet know *how* to parse all possible command-line arguments. + if '--no-git' in argv: + config['use_git'] = False + argv.remove('--no-git') + + if '--offline' in argv: + config['offline'] = True + argv.remove('--offline') + + if '--auto-use' in argv: + config['auto_use'] = True + argv.remove('--auto-use') + + if '--no-auto-use' in argv: + config['auto_use'] = False + argv.remove('--no-auto-use') + + if '--use-system-astropy-helpers' in argv: + config['auto_use'] = False + argv.remove('--use-system-astropy-helpers') + + return config + + def run(self): + strategies = ['local_directory', 'local_file', 'index'] + dist = None + + # First, remove any previously imported versions of astropy_helpers; + # this is necessary for nested installs where one package's installer + # is installing another package via setuptools.sandbox.run_setup, as in + # the case of setup_requires + for key in list(sys.modules): + try: + if key == PACKAGE_NAME or key.startswith(PACKAGE_NAME + '.'): + del sys.modules[key] + except AttributeError: + # Sometimes mysterious non-string things can turn up in + # sys.modules + continue + + # Check to see if the path is a submodule + self.is_submodule = self._check_submodule() + + for strategy in strategies: + method = getattr(self, 'get_{0}_dist'.format(strategy)) + dist = method() + if dist is not None: + break else: - dist = None + raise _AHBootstrapSystemExit( + "No source found for the {0!r} package; {0} must be " + "available and importable as a prerequisite to building " + "or installing this package.".format(PACKAGE_NAME)) + + # This is a bit hacky, but if astropy_helpers was loaded from a + # directory/submodule its Distribution object gets a "precedence" of + # "DEVELOP_DIST". However, in other cases it gets a precedence of + # "EGG_DIST". However, when activing the distribution it will only be + # placed early on sys.path if it is treated as an EGG_DIST, so always + # do that + dist = dist.clone(precedence=pkg_resources.EGG_DIST) + + # Otherwise we found a version of astropy-helpers, so we're done + # Just active the found distribution on sys.path--if we did a + # download this usually happens automatically but it doesn't hurt to + # do it again + # Note: Adding the dist to the global working set also activates it + # (makes it importable on sys.path) by default. + + try: + pkg_resources.working_set.add(dist, replace=True) + except TypeError: + # Some (much) older versions of setuptools do not have the + # replace=True option here. These versions are old enough that all + # bets may be off anyways, but it's easy enough to work around just + # in case... + if dist.key in pkg_resources.working_set.by_key: + del pkg_resources.working_set.by_key[dist.key] + pkg_resources.working_set.add(dist) + + @property + def config(self): + """ + A `dict` containing the options this `_Bootstrapper` was configured + with. + """ + + return dict((optname, getattr(self, optname)) + for optname, _ in CFG_OPTIONS if hasattr(self, optname)) + + def get_local_directory_dist(self): + """ + Handle importing a vendored package from a subdirectory of the source + distribution. + """ + + if not os.path.isdir(self.path): + return + + log.info('Attempting to import astropy_helpers from {0} {1!r}'.format( + 'submodule' if self.is_submodule else 'directory', + self.path)) + + dist = self._directory_import() if dist is None: - msg = ( + log.warn( 'The requested path {0!r} for importing {1} does not ' - 'exist, or does not contain a copy of the {1} pacakge. ' - 'Attempting download instead.'.format(path, PACKAGE_NAME)) - if download_if_needed: - log.warn(msg) - else: - raise _AHBootstrapSystemExit(msg) - elif os.path.isfile(path): - # Handle importing from a source archive; this also uses setup_requires - # but points easy_install directly to the source archive + 'exist, or does not contain a copy of the {1} ' + 'package.'.format(self.path, PACKAGE_NAME)) + elif self.auto_upgrade and not self.is_submodule: + # A version of astropy-helpers was found on the available path, but + # check to see if a bugfix release is available on PyPI + upgrade = self._do_upgrade(dist) + if upgrade is not None: + dist = upgrade + + return dist + + def get_local_file_dist(self): + """ + Handle importing from a source archive; this also uses setup_requires + but points easy_install directly to the source archive. + """ + + if not os.path.isfile(self.path): + return + + log.info('Attempting to unpack and import astropy_helpers from ' + '{0!r}'.format(self.path)) + try: - dist = _do_download(find_links=[path]) + dist = self._do_download(find_links=[self.path]) except Exception as e: - if download_if_needed: - log.warn('{0}\nWill attempt to download astropy_helpers from ' - 'PyPI instead.'.format(str(e))) - dist = None - else: - raise _AHBootstrapSystemExit(e.args[0]) - else: - msg = ('{0!r} is not a valid file or directory (it could be a ' - 'symlink?)'.format(path)) - if download_if_needed: - log.warn(msg) + if DEBUG: + raise + + log.warn( + 'Failed to import {0} from the specified archive {1!r}: ' + '{2}'.format(PACKAGE_NAME, self.path, str(e))) dist = None - else: - raise _AHBootstrapSystemExit(msg) - if dist is not None and auto_upgrade and not is_submodule: - # A version of astropy-helpers was found on the available path, but - # check to see if a bugfix release is available on PyPI - upgrade = _do_upgrade(dist, index_url) - if upgrade is not None: - dist = upgrade - elif dist is None: - # Last resort--go ahead and try to download the latest version from - # PyPI + if dist is not None and self.auto_upgrade: + # A version of astropy-helpers was found on the available path, but + # check to see if a bugfix release is available on PyPI + upgrade = self._do_upgrade(dist) + if upgrade is not None: + dist = upgrade + + return dist + + def get_index_dist(self): + if not self.download: + log.warn('Downloading {0!r} disabled.'.format(DIST_NAME)) + return None + + log.warn( + "Downloading {0!r}; run setup.py with the --offline option to " + "force offline installation.".format(DIST_NAME)) + try: - if download_if_needed: - log.warn( - "Downloading astropy_helpers; run setup.py with the " - "--offline option to force offline installation.") - dist = _do_download(index_url=index_url) - else: - raise _AHBootstrapSystemExit( - "No source for the astropy_helpers package; " - "astropy_helpers must be available as a prerequisite to " - "installing this package.") + dist = self._do_download() except Exception as e: if DEBUG: raise - else: - raise _AHBootstrapSystemExit(e.args[0]) + log.warn( + 'Failed to download and/or install {0!r} from {1!r}:\n' + '{2}'.format(DIST_NAME, self.index_url, str(e))) + dist = None - if dist is not None: - # Otherwise we found a version of astropy-helpers so we're done - # Just activate the found distribibution on sys.path--if we did a - # download this usually happens automatically but do it again just to - # be sure - return dist.activate() + # No need to run auto-upgrade here since we've already presumably + # gotten the most up-to-date version from the package index + return dist + def _directory_import(self): + """ + Import astropy_helpers from the given path, which will be added to + sys.path. -def _do_download(version='', find_links=None, index_url=None): - try: + Must return True if the import succeeded, and False otherwise. + """ + + # Return True on success, False on failure but download is allowed, and + # otherwise raise SystemExit + path = os.path.abspath(self.path) + + # Use an empty WorkingSet rather than the man + # pkg_resources.working_set, since on older versions of setuptools this + # will invoke a VersionConflict when trying to install an upgrade + ws = pkg_resources.WorkingSet([]) + ws.add_entry(path) + dist = ws.by_key.get(DIST_NAME) + + if dist is None: + # We didn't find an egg-info/dist-info in the given path, but if a + # setup.py exists we can generate it + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + # We use subprocess instead of run_setup from setuptools to + # avoid segmentation faults - see the following for more details: + # https://github.com/cython/cython/issues/2104 + sp.check_output([sys.executable, 'setup.py', 'egg_info'], cwd=path) + + for dist in pkg_resources.find_distributions(path, True): + # There should be only one... + return dist + + return dist + + def _do_download(self, version='', find_links=None): if find_links: allow_hosts = '' index_url = None else: allow_hosts = None + index_url = self.index_url + # Annoyingly, setuptools will not handle other arguments to # Distribution (such as options) before handling setup_requires, so it - # is not straightfoward to programmatically augment the arguments which + # is not straightforward to programmatically augment the arguments which # are passed to easy_install class _Distribution(Distribution): def get_option_dict(self, command_name): @@ -252,168 +498,359 @@ def get_option_dict(self, command_name): if version: req = '{0}=={1}'.format(DIST_NAME, version) else: - req = DIST_NAME + if UPPER_VERSION_EXCLUSIVE is None: + req = DIST_NAME + else: + req = '{0}<{1}'.format(DIST_NAME, UPPER_VERSION_EXCLUSIVE) attrs = {'setup_requires': [req]} - if DEBUG: - dist = _Distribution(attrs=attrs) - else: - with _silence(): - dist = _Distribution(attrs=attrs) - return pkg_resources.working_set.by_key.get(DIST_NAME) - except Exception as e: - if DEBUG: - raise + # NOTE: we need to parse the config file (e.g. setup.cfg) to make sure + # it honours the options set in the [easy_install] section, and we need + # to explicitly fetch the requirement eggs as setup_requires does not + # get honored in recent versions of setuptools: + # https://github.com/pypa/setuptools/issues/1273 - msg = 'Error retrieving astropy helpers from {0}:\n{1}' - if find_links: - source = find_links[0] - elif index_url: - source = index_url - else: - source = 'PyPI' + try: - raise Exception(msg.format(source, repr(e))) + context = _verbose if DEBUG else _silence + with context(): + dist = _Distribution(attrs=attrs) + try: + dist.parse_config_files(ignore_option_errors=True) + dist.fetch_build_eggs(req) + except TypeError: + # On older versions of setuptools, ignore_option_errors + # doesn't exist, and the above two lines are not needed + # so we can just continue + pass + + # If the setup_requires succeeded it will have added the new dist to + # the main working_set + return pkg_resources.working_set.by_key.get(DIST_NAME) + except Exception as e: + if DEBUG: + raise + msg = 'Error retrieving {0} from {1}:\n{2}' + if find_links: + source = find_links[0] + elif index_url != INDEX_URL: + source = index_url + else: + source = 'PyPI' -def _do_upgrade(dist, index_url): - # Build up a requirement for a higher bugfix release but a lower minor - # release (so API compatibility is guaranteed) - # sketchy version parsing--maybe come up with something a bit more - # robust for this - major, minor = (int(part) for part in dist.parsed_version[:2]) - next_minor = '.'.join([str(major), str(minor + 1), '0']) - req = pkg_resources.Requirement.parse( - '{0}>{1},<{2}'.format(DIST_NAME, dist.version, next_minor)) + raise Exception(msg.format(DIST_NAME, source, repr(e))) - package_index = PackageIndex(index_url=index_url) + def _do_upgrade(self, dist): + # Build up a requirement for a higher bugfix release but a lower minor + # release (so API compatibility is guaranteed) + next_version = _next_version(dist.parsed_version) - upgrade = package_index.obtain(req) + req = pkg_resources.Requirement.parse( + '{0}>{1},<{2}'.format(DIST_NAME, dist.version, next_version)) - if upgrade is not None: - return _do_download(version=upgrade.version, index_url=index_url) + package_index = PackageIndex(index_url=self.index_url) + upgrade = package_index.obtain(req) -def _directory_import(path): - """ - Import astropy_helpers from the given path, which will be added to - sys.path. + if upgrade is not None: + return self._do_download(version=upgrade.version) - Must return True if the import succeeded, and False otherwise. - """ + def _check_submodule(self): + """ + Check if the given path is a git submodule. - # Return True on success, False on failure but download is allowed, and - # otherwise raise SystemExit - path = os.path.abspath(path) - pkg_resources.working_set.add_entry(path) - dist = pkg_resources.working_set.by_key.get(DIST_NAME) - - if dist is None: - # We didn't find an egg-info/dist-info in the given path, but if a - # setup.py exists we can generate it - setup_py = os.path.join(path, 'setup.py') - if os.path.isfile(setup_py): - with _silence(): - run_setup(os.path.join(path, 'setup.py'), ['egg_info']) - - for dist in pkg_resources.find_distributions(path, True): - # There should be only one... - pkg_resources.working_set.add(dist, path, False) - break + See the docstrings for ``_check_submodule_using_git`` and + ``_check_submodule_no_git`` for further details. + """ - return dist + if (self.path is None or + (os.path.exists(self.path) and not os.path.isdir(self.path))): + return False + if self.use_git: + return self._check_submodule_using_git() + else: + return self._check_submodule_no_git() -def _check_submodule(path): - try: - p = sp.Popen(['git', 'submodule', 'status', '--', path], - stdout=sp.PIPE, stderr=sp.PIPE) - stdout, stderr = p.communicate() - except OSError as e: - if DEBUG: - raise + def _check_submodule_using_git(self): + """ + Check if the given path is a git submodule. If so, attempt to initialize + and/or update the submodule if needed. - if e.errno == errno.ENOENT: + This function makes calls to the ``git`` command in subprocesses. The + ``_check_submodule_no_git`` option uses pure Python to check if the given + path looks like a git submodule, but it cannot perform updates. + """ + + cmd = ['git', 'submodule', 'status', '--', self.path] + + try: + log.info('Running `{0}`; use the --no-git option to disable git ' + 'commands'.format(' '.join(cmd))) + returncode, stdout, stderr = run_cmd(cmd) + except _CommandNotFound: # The git command simply wasn't found; this is most likely the # case on user systems that don't have git and are simply # trying to install the package from PyPI or a source # distribution. Silently ignore this case and simply don't try # to use submodules return False - else: - raise _AHBoostrapSystemExit( - 'An unexpected error occurred when running the ' - '`git submodule status` command:\n{0}'.format(str(e))) + stderr = stderr.strip() + + if returncode != 0 and stderr: + # Unfortunately the return code alone cannot be relied on, as + # earlier versions of git returned 0 even if the requested submodule + # does not exist + + # This is a warning that occurs in perl (from running git submodule) + # which only occurs with a malformatted locale setting which can + # happen sometimes on OSX. See again + # https://github.com/astropy/astropy/issues/2749 + perl_warning = ('perl: warning: Falling back to the standard locale ' + '("C").') + if not stderr.strip().endswith(perl_warning): + # Some other unknown error condition occurred + log.warn('git submodule command failed ' + 'unexpectedly:\n{0}'.format(stderr)) + return False + + # Output of `git submodule status` is as follows: + # + # 1: Status indicator: '-' for submodule is uninitialized, '+' if + # submodule is initialized but is not at the commit currently indicated + # in .gitmodules (and thus needs to be updated), or 'U' if the + # submodule is in an unstable state (i.e. has merge conflicts) + # + # 2. SHA-1 hash of the current commit of the submodule (we don't really + # need this information but it's useful for checking that the output is + # correct) + # + # 3. The output of `git describe` for the submodule's current commit + # hash (this includes for example what branches the commit is on) but + # only if the submodule is initialized. We ignore this information for + # now + _git_submodule_status_re = re.compile( + '^(?P[+-U ])(?P[0-9a-f]{40}) ' + '(?P\S+)( .*)?$') - if p.returncode != 0 or stderr: - # Unfortunately the return code alone cannot be relied on, as - # earler versions of git returned 0 even if the requested submodule - # does not exist - log.debug('git submodule command failed ' - 'unexpectedly:\n{0}'.format(stderr)) - return False - else: # The stdout should only contain one line--the status of the # requested submodule m = _git_submodule_status_re.match(stdout) if m: # Yes, the path *is* a git submodule - _update_submodule(m.group('submodule'), m.group('status')) + self._update_submodule(m.group('submodule'), m.group('status')) return True else: log.warn( - 'Unexected output from `git submodule status`:\n{0}\n' + 'Unexpected output from `git submodule status`:\n{0}\n' 'Will attempt import from {1!r} regardless.'.format( - stdout, path)) + stdout, self.path)) return False + def _check_submodule_no_git(self): + """ + Like ``_check_submodule_using_git``, but simply parses the .gitmodules file + to determine if the supplied path is a git submodule, and does not exec any + subprocesses. + + This can only determine if a path is a submodule--it does not perform + updates, etc. This function may need to be updated if the format of the + .gitmodules file is changed between git versions. + """ + + gitmodules_path = os.path.abspath('.gitmodules') + + if not os.path.isfile(gitmodules_path): + return False + + # This is a minimal reader for gitconfig-style files. It handles a few of + # the quirks that make gitconfig files incompatible with ConfigParser-style + # files, but does not support the full gitconfig syntax (just enough + # needed to read a .gitmodules file). + gitmodules_fileobj = io.StringIO() + + # Must use io.open for cross-Python-compatible behavior wrt unicode + with io.open(gitmodules_path) as f: + for line in f: + # gitconfig files are more flexible with leading whitespace; just + # go ahead and remove it + line = line.lstrip() + + # comments can start with either # or ; + if line and line[0] in (':', ';'): + continue + + gitmodules_fileobj.write(line) + + gitmodules_fileobj.seek(0) + + cfg = RawConfigParser() + + try: + cfg.readfp(gitmodules_fileobj) + except Exception as exc: + log.warn('Malformatted .gitmodules file: {0}\n' + '{1} cannot be assumed to be a git submodule.'.format( + exc, self.path)) + return False + + for section in cfg.sections(): + if not cfg.has_option(section, 'path'): + continue + + submodule_path = cfg.get(section, 'path').rstrip(os.sep) + + if submodule_path == self.path.rstrip(os.sep): + return True + + return False + + def _update_submodule(self, submodule, status): + if status == ' ': + # The submodule is up to date; no action necessary + return + elif status == '-': + if self.offline: + raise _AHBootstrapSystemExit( + "Cannot initialize the {0} submodule in --offline mode; " + "this requires being able to clone the submodule from an " + "online repository.".format(submodule)) + cmd = ['update', '--init'] + action = 'Initializing' + elif status == '+': + cmd = ['update'] + action = 'Updating' + if self.offline: + cmd.append('--no-fetch') + elif status == 'U': + raise _AHBootstrapSystemExit( + 'Error: Submodule {0} contains unresolved merge conflicts. ' + 'Please complete or abandon any changes in the submodule so that ' + 'it is in a usable state, then try again.'.format(submodule)) + else: + log.warn('Unknown status {0!r} for git submodule {1!r}. Will ' + 'attempt to use the submodule as-is, but try to ensure ' + 'that the submodule is in a clean state and contains no ' + 'conflicts or errors.\n{2}'.format(status, submodule, + _err_help_msg)) + return + + err_msg = None + cmd = ['git', 'submodule'] + cmd + ['--', submodule] + log.warn('{0} {1} submodule with: `{2}`'.format( + action, submodule, ' '.join(cmd))) + + try: + log.info('Running `{0}`; use the --no-git option to disable git ' + 'commands'.format(' '.join(cmd))) + returncode, stdout, stderr = run_cmd(cmd) + except OSError as e: + err_msg = str(e) + else: + if returncode != 0: + err_msg = stderr + + if err_msg is not None: + log.warn('An unexpected error occurred updating the git submodule ' + '{0!r}:\n{1}\n{2}'.format(submodule, err_msg, + _err_help_msg)) + +class _CommandNotFound(OSError): + """ + An exception raised when a command run with run_cmd is not found on the + system. + """ -def _update_submodule(submodule, status): - if status == b' ': - # The submodule is up to date; no action necessary - return - elif status == b'-': - cmd = ['update', '--init'] - log.info('Initializing submodule {0!r}'.format(submodule)) - elif status == b'+': - cmd = ['update'] - log.info('Updating submodule {0!r}'.format(submodule)) - elif status == b'U': - raise _AHBoostrapSystemExit( - 'Error: Submodule {0} contains unresolved merge conflicts. ' - 'Please complete or abandon any changes in the submodule so that ' - 'it is in a usable state, then try again.'.format(submodule)) - else: - log.warn('Unknown status {0!r} for git submodule {1!r}. Will ' - 'attempt to use the submodule as-is, but try to ensure ' - 'that the submodule is in a clean state and contains no ' - 'conflicts or errors.\n{2}'.format(status, submodule, - _err_help_msg)) - return - err_msg = None +def run_cmd(cmd): + """ + Run a command in a subprocess, given as a list of command-line + arguments. + + Returns a ``(returncode, stdout, stderr)`` tuple. + """ try: - p = sp.Popen(['git', 'submodule'] + cmd + ['--', submodule], - stdout=sp.PIPE, stderr=sp.PIPE) + p = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE) + # XXX: May block if either stdout or stderr fill their buffers; + # however for the commands this is currently used for that is + # unlikely (they should have very brief output) stdout, stderr = p.communicate() except OSError as e: - err_msg = str(e) + if DEBUG: + raise + + if e.errno == errno.ENOENT: + msg = 'Command not found: `{0}`'.format(' '.join(cmd)) + raise _CommandNotFound(msg, cmd) + else: + raise _AHBootstrapSystemExit( + 'An unexpected error occurred when running the ' + '`{0}` command:\n{1}'.format(' '.join(cmd), str(e))) + + + # Can fail of the default locale is not configured properly. See + # https://github.com/astropy/astropy/issues/2749. For the purposes under + # consideration 'latin1' is an acceptable fallback. + try: + stdio_encoding = locale.getdefaultlocale()[1] or 'latin1' + except ValueError: + # Due to an OSX oddity locale.getdefaultlocale() can also crash + # depending on the user's locale/language settings. See: + # http://bugs.python.org/issue18378 + stdio_encoding = 'latin1' + + # Unlikely to fail at this point but even then let's be flexible + if not isinstance(stdout, str): + stdout = stdout.decode(stdio_encoding, 'replace') + if not isinstance(stderr, str): + stderr = stderr.decode(stdio_encoding, 'replace') + + return (p.returncode, stdout, stderr) + + +def _next_version(version): + """ + Given a parsed version from pkg_resources.parse_version, returns a new + version string with the next minor version. + + Examples + ======== + >>> _next_version(pkg_resources.parse_version('1.2.3')) + '1.3.0' + """ + + if hasattr(version, 'base_version'): + # New version parsing from setuptools >= 8.0 + if version.base_version: + parts = version.base_version.split('.') + else: + parts = [] else: - if p.returncode != 0: - err_msg = stderr + parts = [] + for part in version: + if part.startswith('*'): + break + parts.append(part) + + parts = [int(p) for p in parts] + + if len(parts) < 3: + parts += [0] * (3 - len(parts)) - if err_msg: - log.warn('An unexpected error occurred updating the git submodule ' - '{0!r}:\n{1}\n{2}'.format(submodule, err_msg, _err_help_msg)) + major, minor, micro = parts[:3] + + return '{0}.{1}.{2}'.format(major, minor + 1, 0) class _DummyFile(object): """A noop writeable object.""" errors = '' # Required for Python 3.x + encoding = 'utf-8' def write(self, s): pass @@ -422,6 +859,10 @@ def flush(self): pass +@contextlib.contextmanager +def _verbose(): + yield + @contextlib.contextmanager def _silence(): """A context manager that silences sys.stdout and sys.stderr.""" @@ -465,66 +906,70 @@ def __init__(self, *args): super(_AHBootstrapSystemExit, self).__init__(msg, *args[1:]) -# Output of `git submodule status` is as follows: -# -# 1: Status indicator: '-' for submodule is uninitialized, '+' if submodule is -# initialized but is not at the commit currently indicated in .gitmodules (and -# thus needs to be updated), or 'U' if the submodule is in an unstable state -# (i.e. has merge conflicts) -# -# 2. SHA-1 hash of the current commit of the submodule (we don't really need -# this information but it's useful for checking that the output is correct) -# -# 3. The output of `git describe` for the submodule's current commit hash (this -# includes for example what branches the commit is on) but only if the -# submodule is initialized. We ignore this information for now -_git_submodule_status_re = re.compile( - b'^(?P[+-U ])(?P[0-9a-f]{40}) (?P\S+)( .*)?$') - - -# Implement the auto-use feature; this allows use_astropy_helpers() to be used -# at import-time automatically so long as the correct options are specified in -# setup.cfg -_CFG_OPTIONS = [('auto_use', bool), ('path', str), - ('download_if_needed', bool), ('index_ur', str), - ('use_git', bool), ('auto_upgrade', bool)] - -def _main(): - if not os.path.exists('setup.cfg'): - return - - cfg = ConfigParser() +BOOTSTRAPPER = _Bootstrapper.main() - try: - cfg.read('setup.cfg') - except Exception as e: - if DEBUG: - raise - log.error( - "Error reading setup.cfg: {0!r}\nastropy_helpers will not be " - "automatically bootstrapped and package installation may fail." - "\n{1}".format(e, _err_help_msg)) - return +def use_astropy_helpers(**kwargs): + """ + Ensure that the `astropy_helpers` module is available and is importable. + This supports automatic submodule initialization if astropy_helpers is + included in a project as a git submodule, or will download it from PyPI if + necessary. - if not cfg.has_section('ah_bootstrap'): - return + Parameters + ---------- - kwargs = {} + path : str or None, optional + A filesystem path relative to the root of the project's source code + that should be added to `sys.path` so that `astropy_helpers` can be + imported from that path. - for option, type_ in _CFG_OPTIONS: - if not cfg.has_option('ah_bootstrap', option): - continue + If the path is a git submodule it will automatically be initialized + and/or updated. - if type_ is bool: - value = cfg.getboolean('ah_bootstrap', option) - else: - value = cfg.get('ah_bootstrap', option) + The path may also be to a ``.tar.gz`` archive of the astropy_helpers + source distribution. In this case the archive is automatically + unpacked and made temporarily available on `sys.path` as a ``.egg`` + archive. + + If `None` skip straight to downloading. + + download_if_needed : bool, optional + If the provided filesystem path is not found an attempt will be made to + download astropy_helpers from PyPI. It will then be made temporarily + available on `sys.path` as a ``.egg`` archive (using the + ``setup_requires`` feature of setuptools. If the ``--offline`` option + is given at the command line the value of this argument is overridden + to `False`. - kwargs[option] = value + index_url : str, optional + If provided, use a different URL for the Python package index than the + main PyPI server. + + use_git : bool, optional + If `False` no git commands will be used--this effectively disables + support for git submodules. If the ``--no-git`` option is given at the + command line the value of this argument is overridden to `False`. + + auto_upgrade : bool, optional + By default, when installing a package from a non-development source + distribution ah_boostrap will try to automatically check for patch + releases to astropy-helpers on PyPI and use the patched version over + any bundled versions. Setting this to `False` will disable that + functionality. If the ``--offline`` option is given at the command line + the value of this argument is overridden to `False`. + + offline : bool, optional + If `False` disable all actions that require an internet connection, + including downloading packages from the package index and fetching + updates to any git submodule. Defaults to `True`. + """ - if kwargs.pop('auto_use', False): - use_astropy_helpers(**kwargs) + global BOOTSTRAPPER + config = BOOTSTRAPPER.config + config.update(**kwargs) -_main() + # Create a new bootstrapper with the updated configuration and run it + BOOTSTRAPPER = _Bootstrapper(**config) + BOOTSTRAPPER.run() diff --git a/astropy_helpers b/astropy_helpers index 2732e3a5dad..9f82aac6c21 160000 --- a/astropy_helpers +++ b/astropy_helpers @@ -1 +1 @@ -Subproject commit 2732e3a5dadc60169aef90ac887e5726526e253e +Subproject commit 9f82aac6c2141b425e2d639560f7260189d90b54 diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 00000000000..90764c51277 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,76 @@ +# Python package +# Create and test a Python package on multiple Python versions. +# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/python + + +trigger: +- master + +variables: + system.debug: 'true' + ref.data.home: '$(Agent.BuildDirectory)/tardis-refdata' + + ref.data.github.url: 'https://github.com/tardis-sn/tardis-refdata.git' + tardis.build.dir: $(Build.Repository.LocalPath) + + + +jobs: + +- job: 'Test' + pool: + vmImage: $[variables.vm_Image] + + strategy: + matrix: + linux: + vm_Image: 'Ubuntu-16.04' + conda: '/usr/share/miniconda' + mac: + vm_Image: 'macOS-10.13' + miniconda.url: 'http://repo.continuum.io/miniconda/Miniconda2-latest-mac-x86_64.sh' + maxParallel: 4 + + steps: + - bash: | + echo "##vso[task.prependpath]$CONDA/bin" + displayName: Add conda to PATH + + - bash: | + sudo chown -R $USER $CONDA + conda update -y conda + displayName: updating conda and activating + + - bash: | + sh ci-helpers/install_tardis_env.sh + displayName: 'Install TARDIS env' + + - bash: | + sh ci-helpers/fetch_reference_data.sh + displayName: 'Fetch Reference Data' + + - bash: | + source activate tardis + python setup.py build_ext --inplace + displayName: 'TARDIS build' + + - bash: | + source activate tardis + conda install -y pytest-cov + pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git + pytest tardis --tardis-refdata=$(ref.data.home) --test-run-title="TARDIS test $(vm_Image)" --cov=tardis --cov-report=xml --cov-report=html + displayName: 'TARDIS test' + + +# - task: PublishTestResults@2 +# condition: succeededOrFailed() +# inputs: +# testResultsFiles: '**/test-*.xml' +# testRunTitle: 'Test results for TARDIS on $(vm_Image)' + +# - task: PublishCodeCoverageResults@1 +# inputs: +# codeCoverageTool: Cobertura +# summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' +# reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' diff --git a/ci-helpers/fetch_reference_data.sh b/ci-helpers/fetch_reference_data.sh new file mode 100644 index 00000000000..e7e3edfe521 --- /dev/null +++ b/ci-helpers/fetch_reference_data.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +git lfs install --skip-smudge + +if test -e $REF_DATA_HOME; then + echo "Ref data available" +else + echo git clone $REF_DATA_GITHUB_URL $REF_DATA_HOME + git clone $REF_DATA_GITHUB_URL $REF_DATA_HOME + +cd $REF_DATA_HOME +# Use the following to get the ref-data from the master; +git fetch origin +git checkout origin/master +# Use the following to get the ref-data from a specific pull request +#git fetch origin pull/20/head:update-ref +#git checkout update-ref +git lfs pull --include="atom_data/kurucz_cd23_chianti_H_He.h5" origin +git lfs pull --include="atom_data/chianti_He.h5" origin +git lfs pull --include="plasma_reference/" origin +git lfs pull --include="unit_test_data.h5" origin +echo MD5 `md5sum unit_test_data.h5`; fi +cd $TARDIS_BUILD_DIR diff --git a/ci-helpers/install_miniconda.sh b/ci-helpers/install_miniconda.sh new file mode 100644 index 00000000000..2048d3b845c --- /dev/null +++ b/ci-helpers/install_miniconda.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +export PYTHONIOENCODING=UTF8 +if test -e $HOME/miniconda/bin; then + echo "miniconda already installed."; + export PATH=$HOME/miniconda/bin:$PATH + hash -r + #conda update --yes conda + +else + wget $MINICONDA_URL -O miniconda.sh + chmod +x miniconda.sh + rm -r $HOME/miniconda + bash miniconda.sh -b -p $HOME/miniconda + + export PATH=$HOME/miniconda/bin:$PATH + hash -r + conda update --yes conda +fi + +source $HOME/miniconda/etc/profile.d/conda.sh \ No newline at end of file diff --git a/ci-helpers/install_tardis_env.sh b/ci-helpers/install_tardis_env.sh new file mode 100644 index 00000000000..c125887abf0 --- /dev/null +++ b/ci-helpers/install_tardis_env.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +cd $TARDIS_BUILD_DIR +if test -e $HOME/miniconda/envs/tardis; then + echo "TARDIS env already installed."; + # Also check for tardis_env3.yml change +else + conda env create -f tardis_env3.yml + #trouble with building due to segfault at cython (https://github.com/cython/cython/issues/2199) + #remove if we can get normal cython through conda +fi diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000000..e688bb918b8 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1,5 @@ +downloads +_static +_sources +_images + diff --git a/docs/_static/tardis.css b/docs/_static/tardis.css new file mode 100644 index 00000000000..579fe077d82 --- /dev/null +++ b/docs/_static/tardis.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: none; +} \ No newline at end of file diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index ef35a9140db..9bc5acc27d2 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -7,3 +7,6 @@ {{ super() }} Fork me on GitHub {% endblock %} +{% block extrahead %} + +{% endblock %} diff --git a/docs/atomic/atomic_data.rst b/docs/atomic/atomic_data.rst index 6a30f8f494d..8ac87a7aa72 100644 --- a/docs/atomic/atomic_data.rst +++ b/docs/atomic/atomic_data.rst @@ -4,6 +4,6 @@ Atomic Data for TARDIS ********************** -For a detailed description of the datasets go to :doc:`atomic_data_description` - -.. include:: current_public_table.rst +.. toctree:: + atomic_data_description + current_public_table.rst diff --git a/docs/changelog.rst b/docs/changelog.rst index 6a75ddba9b6..76888fe1bf1 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,7 +1,3 @@ .. _changelog: -********* -Changelog -********* - .. include:: ../CHANGELOG.rst diff --git a/docs/conf.py b/docs/conf.py index 5665f78addc..4eeb17d705e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -50,6 +50,8 @@ 'sphinx.ext.graphviz', 'numpydoc', 'nbsphinx', + 'sphinx.ext.autodoc', + 'sphinx-jsonschema' ] source_suffix = '.rst' @@ -59,7 +61,11 @@ 'sphinxcontrib.bibtex'] - +nbsphinx_prolog = """ +This notebook is available at +https://github.com/tardis-sn/tardis/tree/master/docs/{{ env.doc2path(env.docname, base=None) }} +---- +""" # -- General configuration ---------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. @@ -117,6 +123,7 @@ # Custom sidebar templates, maps document names to template names. #html_sidebars = {} +html_static_path = ['_static'] # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 diff --git a/docs/configuration/configuration.rst b/docs/configuration/configuration.rst index 9aba121c805..77db778ec7c 100644 --- a/docs/configuration/configuration.rst +++ b/docs/configuration/configuration.rst @@ -1,6 +1,161 @@ +.. _config-file: + ****************** Configuration File ****************** +TARDIS uses the `YAML markup language `_ +for its configuration files. There are several sections which allow different +settings for the different aspects of the TARDIS calculation. An example +configuration file (with a small subset of the options that can be specified) can be downloaded :download:`here +<../examples/tardis_example.yml>`. + +.. warning:: + One should note that currently floats in YAML need to be specified in a special format: + any pure floats need to have a +/- after the e e.g. 2e+5 + + +The TARDIS configuration consists of multiple sections that pertain to certain parts of the code. We will use the +schemas to show what options are available. Our schema mark-up defines names in bold-fat as required. +can be seen here: + .. note:: - This page is Work in Progress. + + The following shows all the options (and their default settings) that are available for TARDIS. No other options + are allowed or available + +Configuration Schema +==================== + +.. jsonschema:: schemas/base.yml + + +The base schema links to several other configuration parts + + +Supernova +--------- + +.. jsonschema:: schemas/supernova.yml + + +Model +----- + +The next sections, describing the model, are very hierarchical. The base level is ``model`` and contains two subsections: +``structure`` and ``abundances``. Both sections can either contain a ``file`` subsection which specifies a file and +file type where the information is stored or a number of other sections. + +.. jsonschema:: schemas/model.yml + +All types of ``structure`` definitions have two keywords in common ``v_inner_boundary`` and ``v_outer_boundary``. +In the ``structure`` section, one can specify a ``file`` section containing a ``type`` parameter +(currently only ``artis`` is supported``) and a ``name`` parameter giving a path top a file. + +If one doesn't specify a ``file`` section, the code requires two sections (``velocities`` and ``densities``) and a +parameter ``no_of_shells``. ``no_of_shells`` is the requested number of shells for a model. The ``velocity`` section +requires a ``type``. Currently, only ``linear`` is supported. + +In the ``densities`` section the ``type`` parameter again decides on the parameters. The type ``uniform`` only needs a + ``value`` parameter with a density compatible quantity. The type ``branch85_w7`` uses a seven order polynomial fit to + the W7 model and is parametrised by time since explosion. The parameters ``time_0`` and ``density_coefficient`` are set + to sensible defaults and should not be changed. + +The ``abundance`` section again has a possible ``file`` parameter with ``type`` (currently only ``artis`` is allowed) +and a ``name`` parameter giving a path to a file containing the abundance information. + +.. warning:: + In contrast to the ``structure`` section, the ``abundance`` section will not ignore abundances set in the rest of + the section, but merely will overwrite the abundances given in the file section. + +The rest of the section can be used to configure uniform abundances for all shells, by giving the atom name and a +relative abundance fraction. If it does not add up to 1., TARDIS will warn - but normalize the numbers. + + + +Plasma +------ + +.. jsonschema:: schemas/plasma.yml + +``inital_t_inner`` is initial temperature (will be updated for most modes of TARDIS - see convergence section) of the black-body on the inner +boundary. ``initial_t_rad`` is the initial radiation temperature (will be updated for most modes of TARDIS - see convergence section). For debugging purposes and to compare to +:term:`synapps` calculations one can disable the electron scattering. TARDIS will issue a warning that this is not physical. +There are currently two ``plasma_type`` options available: ``nebular`` and ``lte`` which tell TARDIS how to run the +ionization equilibrium and level population calculations (see :ref:`plasmas` for more information). +The radiative rates describe how to calculate the :math:`J_\textrm{blue}` needed for the :ref:`nlte` calculations and +:ref:`macroatom` calculations. There are three options for ``radiative_rates_type``: 1) ``lte`` in which +:math:`J_\textrm{blue} = \textrm{Blackbody}(T_\textrm{rad})`, 2) ``nebular`` in which +:math:`J_\textrm{blue} = W \times \textrm{Blackbody}(T_\textrm{rad})`, 3) ``detailed`` in which the :math:`J_\textrm{blue}` +are calculated using an estimator (this is described in ??????). + +TARDIS currently supports three different kinds of line interaction: ``scatter`` - a resonance scattering implementation, +``macroatom`` - the most complex form of line interaction described in :ref:`macroatom` and ``downbranch`` a simplified +version of ``macroatom`` in which only downward transitions are allowed. + +Finally, ``w_epsilon`` describes the dilution factor to use to calculate :math:`J_\textrm{blue}` that are 0, which +causes problem with the code (so :math:`J_\textrm{blue}` are set to a very small number). + +NLTE +^^^^ + +.. code-block:: yaml + + nlte: + coronal_approximation: True + classical_nebular: False + +The NLTE configuration currently allows setting ``coronal_approximation`` which sets all :math:`J_\textrm{blue}` to 0. +This is useful for debugging with :term:`chianti` for example. Furthermore one can enable 'classical_nebular' to set all +:math:`\beta_\textrm{Sobolev}` to 1. Both options are used for checking with other codes and should not be enabled in +normal operations. + + + +Monte Carlo +----------- + +The ``montecarlo`` section describes the parameters for the Monte Carlo radiation transport and convergence criteria: + +.. jsonschema:: schemas/montecarlo.yml + +The ``seed`` parameter seeds the random number generator first for the creation of the packets +(:math:`\nu` and :math:`\mu`) and then the interactions in the actual Monte Carlo process. +The ``no_of_packets`` parameter can take a float number for input convenience and gives the number of packets normally +used in each Monte Carlo loop. The parameters ``last_no_of_packets`` and ``no_of_virtual_packets`` influence the last run +of the Monte Carlo loop (which calculates the final spectrum!) when the radiation field should have converged. ``last_no_of_packets`` is normally higher than +``no_of_packets`` to create a less noisy output spectrum. ``no_of_virtual_packets`` can also be set to greater than 0 (a useful number is 3) to +use the Virtual Packet formalism. Increasing this number drasitcally increases computational costs(and memory requirements if they are logged) +The ``iterations`` parameter describes the maximum number of Monte Carlo loops executed in a simulation before it ends. Convergence criteria can be used to make the simulation stop +sooner when the convergence threshold has been reached. + +The ``convergence_criteria`` section again has a ``type`` keyword. Currently, one type is allowed: ``damped``. +All convergence criteria can be specified separately for the three variables for which convergence can be checked +(``t_inner``, ``t_rad``, ``ws``) by specifying subsections in the ``convergence_criteria`` of the same name. These +override then the defaults. + + +#. ``damped`` only has one parameter ``damping-constant`` and does not check for convergence. This can be used to fix the + temperature of the inner boundary (by increasing the ``convergence_criteria`` and + + + +Spectrum +-------- + +.. jsonschema:: schemas/spectrum.yml + +Start and end are given as Quantities with units. If they are given in +frequency space they are switched around if necessary. The number of bins is +just an integer. Finally, the method option selects the final spectral synthesis mode. Currently, there are three options: + +* real: construct spectrum from the real packet population alone +* virtual: use the :doc:`virtual packet scheme <../montecarlo/virtualpackets>` for spectral synthesis +* integrated: use the :doc:`formal integral method <../montecarlo/sourceintegration>` of Lucy 1999 + +.. warning:: + + Currently, the "integrated" mode only works with the downbranching line + interaction mode. Note also the limitations listed at the bottom of the + dedicated page. + diff --git a/docs/configuration/configuration_old.rst b/docs/configuration/configuration_old.rst deleted file mode 100644 index dda27c5372b..00000000000 --- a/docs/configuration/configuration_old.rst +++ /dev/null @@ -1,280 +0,0 @@ -.. _config-file: - -****************** -Configuration File -****************** - -.. :currentmodule:: tardis.config_reader - -TARDIS uses the `YAML markup language `_ -for its configuration files. There are several sections which allow different -settings for the different aspects of the TARDIS calculation. An example -configuration file can be downloaded :download:`here -<../examples/tardis_example.yml>`. - -.. warning:: - One should note that currently floats in YAML need to be specified in a special format: - any pure floats need to have a +/- after the e e.g. 2e+5 - -Every configuration file begins with the most basic settings for the model: - -.. code-block:: yaml - - --- - #Currently only simple1d is allowed - config_type: simple1d - - #luminosity any astropy.unit convertible to erg/s - #special unit log_lsun(log(luminosity) - log(L_sun) - luminosity: 9.44 log_lsun - - #time since explosion - time_explosion: 13 day - - atom_data: ../atom_data/kurucz_atom_chianti_many.h5 - -The ``config_type`` currently only allows ``simple1d``, but might be expanded in future versions of TARDIS. Many -parameters in the TARDIS configuration files make use of units. One can use any unit that is supported by -`astropy units `_ as well as the unit ``log_lsun`` -which is :math:`\log(L) - \log(L_\odot)`. Time since explosion just takes a normal time quantity. ``atom_data`` requires -the path to the HDF5 file that contains the atomic data (more information about the HDF5 file can be found -here :ref:`atomic-data`). - -Plasma -^^^^^^ - -The next configuration block describes the plasma parameters: - -.. code-block:: yaml - - plasma: - initial_t_inner: 10000 K - initial_t_rad: 10000 K - disable_electron_scattering: no - plasma_type: nebular - #radiative_rates_type - currently supported are lte, nebular and detailed - radiative_rates_type: detailed - #line interaction type - currently supported are scatter, downbranch and macroatom - line_interaction_type : macroatom - w_epsilon : 1.0e-10 - - -``inital_t_inner`` is temperature of the black-body on the inner boundary. ``initial_t_rad`` is the -radiation temperature for all cells. For debugging purposes and to compare to :term:`synapps` calculations one can -disable the electron scattering. TARDIS will issue a warning that this is not physical. -There are currently two ``plasma_type`` options available: ``nebular`` and ``lte`` which tell TARDIS how to run the -ionization equilibrium and level population calculations (see :ref:`plasmas` for more information). -The radiative rates describe how to calculate the :math:`J_\textrm{blue}` needed for the :ref:`nlte` calculations and -:ref:`macroatom` calculations. There are three options for ``radiative_rates_type``: 1) ``lte`` in which -:math:`J_\textrm{blue} = \textrm{Blackbody}(T_\textrm{rad})`, 2) ``nebular`` in which -:math:`J_\textrm{blue} = W \times \textrm{Blackbody}(T_\textrm{rad})`, 3) ``detailed`` in which the :math:`J_\textrm{blue}` -are calculated using an estimator (this is described in ??????). - -TARDIS currently supports three different kinds of line interaction: ``scatter`` - a resonance scattering implementation, -``macroatom`` - the most complex form of line interaction described in :ref:`macroatom` and ``downbranch`` a simplified -version of ``macroatom`` in which only downward transitions are allowed. - -Finally, ``w_epsilon`` describes the dilution factor to use to calculate :math:`J_\textrm{blue}` that are 0, which -causes problem with the code (so :math:`J_\textrm{blue}` are set to a very small number). - - -**NLTE**: - -.. code-block:: yaml - - nlte: - coronal_approximation: True - classical_nebular: False - -The NLTE configuration currently allows setting ``coronal_approximation`` which sets all :math:`J_\textrm{blue}` to 0. -This is useful for debugging with :term:`chianti` for example. Furthermore one can enable 'classical_nebular' to set all -:math:`\beta_\textrm{Sobolev}` to 1. Both options are used for checking with other codes and should not be enabled in -normal operations. - -Model -^^^^^ - -The next sections, describing the model, are very hierarchical. The base level is ``model`` and contains two subsections: -``structure`` and ``abundances``. Both sections can either contain a ``file`` subsection which specifies a file and -file type where the information is stored or a number of other sections. - - -.. code-block:: yaml - - model: - structure: - no_of_shells : 20 - - velocity: - type : linear - v_inner : 1.1e4 km/s - v_outer : 2e4 km/s - - - density: - #showing different configuration options separated by comments - #simple uniform: - #--------------- - # type : uniform - # value : 1e-12 g/cm^3 - #--------------- - - #branch85_w7 - fit of seven order polynomial to W7 (like Branch 85): - #--------------- - type : branch85_w7 - #value : 1e-12 - # default, no need to change! - #time_0 : 19.9999584 s - # default, no need to change! - #density_coefficient : 3e29 - #--------------- - - - # file: - # type : artis - # name : artis_model.dat - # v_lowest: 10000.0 km/s - # v_highest: 20000.0 km/s - - -In the ``structure`` section, one can specify a ``file`` section containing a ``type`` parameter -(currently only ``artis`` is supported``) and a ``name`` parameter giving a path top a file. For the ``artis`` type, -one can specify the inner and outermost shell by giving a ``v_lowest`` and ``v_highest`` parameter. This will result in -the selection of certain shells which will be obeyed in the abundance section as well if ``artis`` is selected there as -well. - -.. warning:: - If a ``file`` section is given, all other parameters and sections in the ``structure`` section are ignored! - -If one doesn't specify a ``file`` section, the code requires two sections (``velocities`` and ``densities``) and a -parameter ``no_of_shells``. ``no_of_shells`` is the requested number of shells for a model. The ``velocity`` section -requires a ``type``. Currently, only ``linear`` is supported and needs two parameters ``v_inner`` and ``v_outer`` with -velocity values for the inner most and outer most shell. - -In the ``densities`` section the ``type`` parameter again decides on the parameters. The type ``uniform`` only needs a - ``value`` parameter with a density compatible quantity. The type ``branch85_w7`` uses a seven order polynomial fit to - the W7 model and is parametrised by time since explosion. The parameters ``time_0`` and ``density_coefficient`` are set - to sensible defaults and should not be changed. - - -.. code-block:: yaml - - #-- continued from model block before -- - abundances: - #file: - # type : artis - # name : artis_abundances.dat - - nlte_species : [Si2] - C: 0.01 - O: 0.01 - Ne: 0.01 - Mg: 0.01 - Si: 0.45 - S: 0.35 - Ar: 0.04 - Ca: 0.03 - Fe: 0.07 - Co: 0.01 - Ni: 0.01 - - -The ``abundance`` section again has a possible ``file`` parameter with ``type`` (currently only ``artis`` is allowed) -and a ``name`` parameter giving a path to a file containing the abundance information. - -.. warning:: - In contrast to the ``structure`` section, the ``abundance`` section will not ignore abundances set in the rest of - the section, but merely will overwrite the abundances given in the file section. - -In this section we also specify the species that will be calculated with our :ref:`nlte` formalism using the -``nlte_species`` parameter (they are specified in a list using astrophysical notation, e.g. [Si2, Ca2, Mg2, H1]). -The rest of the section can be used to configure uniform abundances for all shells, by giving the atom name and a -relative abundance fraction. If it does not add up to 1., TARDIS will warn - but normalize the numbers. - -MonteCarlo -^^^^^^^^^^ - -The ``montecarlo`` section describes the parameters for the MonteCarlo radiation transport and convergence criteria: - -.. code-block:: yaml - - montecarlo: - seed: 23111963171620 - no_of_packets : 2.e+4 - iterations: 100 - - convergence_criteria: - type: specific - damping_constant: 0.5 - threshold: 0.05 - fraction: 0.8 - hold: 3 - - # convergence_criteria: - # type: damped - # damping_constant: 0.5 - # t_inner: - # damping_constant: 0.7 - - - -The ``seed`` parameter seeds the random number generator first for the creation of the packets -(:math:`\nu` and :math:`\mu`) and then the interactions in the actual MonteCarlo process. -The ``no_of_packets`` parameter can take a float number for input convenience and gives the number of packets normally -used in each MonteCarlo loop. The parameters ``last_no_of_packets`` and ``no_of_virtual_packets`` influence the last run -of the MonteCarlo loop when the radiation field should have converged. ``last_no_of_packets`` is normally higher than -``no_of_packets`` to create a less noisy output spectrum. ``no_of_virtual_packets`` can also be set to greater than 0 to -use the Virtual Packet formalism (reference missing ?????). The ``iterations`` parameter describes the maximum number of -MonteCarlo loops executed in a simulation before it ends. Convergence criteria can be used to make the simulation stop -sooner when the convergence threshold has been reached. - -The ``convergence_criteria`` section again has a ``type`` keyword. Two types are allowed: ``damped`` and ``specific``. -All convergence criteria can be specified separately for the three variables for which convergence can be checked -(``t_inner``, ``t_rad``, ``ws``) by specifying subsections in the ``convergence_criteria`` of the same name. These -override then the defaults. - - -#. ``damped`` only has one parameter ``damping-constant`` and does not check for convergence. - -#. ``specific`` checks for the convergence threshold specified in ``threshold``. For ``t_rad`` and ``w`` only a given - fraction (specified in ``fraction``) has to cross the ``threshold``. Once a convergence threshold is read, the simulation - needs to hold this state for ``hold`` number of iterations. - -Spectrum -^^^^^^^^ - -The spectrum section defines the - -.. code-block:: yaml - - spectrum: - start : 500 angstrom - stop : 20000 angstrom - num : 1000 - method: virtual - -Start and end are given as Quantities with units. If they are given in -frequency space they are switched around if necessary. The number of bins is -just an integer. Finally, the method option selects the final spectral synthesis mode. Currently, there are three options: - -* real: construct spectrum from the real packet population alone -* virtual: use the :doc:`virtual packet scheme <../montecarlo/virtualpackets>` for spectral synthesis -* integrated: use the :doc:`formal integral method <../montecarlo/sourceintegration>` of Lucy 1999 - -.. warning:: - - Currently, the "integrated" mode only works with the downbranching line - interaction mode. Note also the limitations listed at the bottom of the - dedicated page. - - -Config Reader -^^^^^^^^^^^^^ - -The YAML file is read by using a classmethod of the :meth:`~tardis.config_reader.Configuration.from_yaml`. - - - -.. automodapi:: tardis.config_reader - - diff --git a/docs/configuration/index.rst b/docs/configuration/index.rst index 1ad2302a81b..0dfbed67cfb 100644 --- a/docs/configuration/index.rst +++ b/docs/configuration/index.rst @@ -1,9 +1,7 @@ -******************** -TARDIS Configuration -******************** +************* +Configuration +************* -Overview -======== The bulk of the parameters for a TARDIS simulation are provided via a YAML configuration file. In a first step, the integrity of the specified @@ -11,29 +9,10 @@ configuration file is checked by a configuration validator. During this process, missing entries are replaced by default values. The following sections and pages provide more details concerning the TARDIS configuration process. -Configuration Details -===================== -* :doc:`In depth description of config options ` -* :doc:`Validation Process ` -* :doc:`Example Configuration with Default Values ` +.. toctree:: + :maxdepth: 3 - -.. warning:: - We are currently in the process of overhauling the configuration system. - See `TEP 006 `_ - and stay tuned! - -.. - Most of the configuration for TARDIS uses the YAML format. If a YAML file is - handed to TARDIS it is first checked using a configuration validator to - see if the required keywords of the required type exist and produces a dictionary - with that has the validated types as well as sensible defaults for missing values - built-in. This validator uses a default validation file that already explains - a lot about the required configuration items. - - .. toctree:: - :maxdepth: 1 - - configuration - config_validator + configuration + config_validator + read_configuration.ipynb diff --git a/docs/configuration/read_configuration.ipynb b/docs/configuration/read_configuration.ipynb new file mode 100644 index 00000000000..e664998a6b0 --- /dev/null +++ b/docs/configuration/read_configuration.ipynb @@ -0,0 +1,128 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reading the Configuration Files ###" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2018-07-18T16:56:52.848130Z", + "start_time": "2018-07-18T16:56:52.844292Z" + } + }, + "outputs": [], + "source": [ + "from tardis.io.config_reader import Configuration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The configuration can be read this way. It will be validated by the json-schema schemas (including filling out default configuration options that had not been specified)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2018-07-18T16:59:08.589550Z", + "start_time": "2018-07-18T16:59:08.305384Z" + } + }, + "outputs": [], + "source": [ + "conf = Configuration.from_yaml('tardis_example.yml')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Despite the very simple nature of tardis_example.yml the output does contain all the default values" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2018-07-18T17:02:54.736144Z", + "start_time": "2018-07-18T17:02:54.729478Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'disable_electron_scattering': False,\n", + " 'excitation': 'lte',\n", + " 'heating_rate_data_file': 'none',\n", + " 'helium_treatment': 'none',\n", + " 'initial_t_inner': ,\n", + " 'initial_t_rad': ,\n", + " 'ionization': 'lte',\n", + " 'line_interaction_type': 'macroatom',\n", + " 'nlte': {'classical_nebular': False,\n", + " 'coronal_approximation': False,\n", + " 'species': []},\n", + " 'radiative_rates_type': 'dilute-blackbody',\n", + " 'w_epsilon': 1e-10}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "conf.plasma" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.13" + }, + "toc": { + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "toc_cell": false, + "toc_position": {}, + "toc_section_display": "block", + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/docs/configuration/schemas/base.yml b/docs/configuration/schemas/base.yml new file mode 120000 index 00000000000..86d21969b04 --- /dev/null +++ b/docs/configuration/schemas/base.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/base.yml \ No newline at end of file diff --git a/docs/configuration/schemas/model.yml b/docs/configuration/schemas/model.yml new file mode 120000 index 00000000000..d0141ba515a --- /dev/null +++ b/docs/configuration/schemas/model.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/model.yml \ No newline at end of file diff --git a/docs/configuration/schemas/montecarlo.yml b/docs/configuration/schemas/montecarlo.yml new file mode 120000 index 00000000000..72bdd903650 --- /dev/null +++ b/docs/configuration/schemas/montecarlo.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/montecarlo.yml \ No newline at end of file diff --git a/docs/configuration/schemas/plasma.yml b/docs/configuration/schemas/plasma.yml new file mode 120000 index 00000000000..989d5be8b71 --- /dev/null +++ b/docs/configuration/schemas/plasma.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/plasma.yml \ No newline at end of file diff --git a/docs/configuration/schemas/spectrum.yml b/docs/configuration/schemas/spectrum.yml new file mode 120000 index 00000000000..3cc32e4b316 --- /dev/null +++ b/docs/configuration/schemas/spectrum.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/spectrum.yml \ No newline at end of file diff --git a/docs/configuration/schemas/supernova.yml b/docs/configuration/schemas/supernova.yml new file mode 120000 index 00000000000..d157db4f384 --- /dev/null +++ b/docs/configuration/schemas/supernova.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/supernova.yml \ No newline at end of file diff --git a/docs/developer_faq.rst b/docs/developer_faq.rst new file mode 100644 index 00000000000..fc1e373c425 --- /dev/null +++ b/docs/developer_faq.rst @@ -0,0 +1,7 @@ +************* +Developer FAQ +************* + + +Constants in TARDIS are all taken from astropy. The module tardis.constants import all constants currently +from astropy.constants.astropy13constants diff --git a/docs/examples/abundancecust.rst b/docs/examples/abundancecust.rst index 19e340647de..12d6c5769a9 100644 --- a/docs/examples/abundancecust.rst +++ b/docs/examples/abundancecust.rst @@ -64,15 +64,23 @@ In this format, both elemental and isotopic abundances may be specified on a per-cell basis via an external csv file. A csv file that could work on a mesh with ten cells should be formatted like this: -.. csv-table:: Example - :file: tardis_model_abund.csv - :delim: space - :header-rows: 1 +.. literalinclude:: tardis_model_abund.csv + +.. note:: + + The file should always contain the cell index as a running index in the + first column. + +.. danger:: + + The header line for the isotopic abundance structure can under no + circumstances start with a '#' In this file: - Header row contains element and isotopes symbol - the remaining entries in each row give the set of elemental and isotopic abundances. +- the first column contains a running index The abundances are specified as mass fractions (i.e. the sum of columns in each row should be 1.0). The mass fractions specified will be adopted directly in @@ -92,6 +100,13 @@ The example file shown here has three simple layers: :code:`Ni` and :code:`Ni56`. Here, Ni will refer to the stable Nickel, i.e. (Z=26, A=58). + +.. note:: + + As with the custom density file, the first row will be ignored. It is + supposed to give the composition below the photosphere. Thus, the first row + (after the header) can be filled with dummy values + .. warning:: The example given here is to show the format only. It is not a @@ -118,4 +133,4 @@ If you want to convert an ASCII abundance file(say "abund.dat") to CSV format, y from tardis.util import convert_abundances_format df = convert_abundances_format('abund.dat') - df.to_csv('converted_abund.csv', index=False, sep=' ') \ No newline at end of file + df.to_csv('converted_abund.csv', index=False, sep=' ') diff --git a/docs/examples/index.rst b/docs/examples/index.rst new file mode 100644 index 00000000000..bcf9b7673c6 --- /dev/null +++ b/docs/examples/index.rst @@ -0,0 +1,43 @@ +************** +Example Models +************** + +The following provides some example setups for a number of typical TARDIS use +cases. You can use these examples as blueprints for your own TARDIS +applications. + + + +.. toctree:: + :maxdepth: 2 + + modelconfig + tardis_example + stella_to_tardis + +Simple Parametrized Models +========================== + +These setups specify the ejecta solely via the YAML configuration file: + +.. toctree:: + :maxdepth: 2 + + tardis_example + + +API demonstrations +========================= + +An example on how to use the formal integrator with tardis: + +.. toctree:: + :maxdepth: 2 + + integrator.ipynb + + +Detailed Explosion Models +========================= + +Coming soon diff --git a/docs/notebooks/integrator.ipynb b/docs/examples/integrator.ipynb similarity index 100% rename from docs/notebooks/integrator.ipynb rename to docs/examples/integrator.ipynb diff --git a/docs/examples/mesa.stella.dat b/docs/examples/mesa.stella.dat new file mode 100644 index 00000000000..0e0b4e74ca0 --- /dev/null +++ b/docs/examples/mesa.stella.dat @@ -0,0 +1,407 @@ + days post max Lbol 50.0 + zones 400 + inner boundary mass 5.190242521200000E+33 2.609211000000000E+00 + total mass 2.618867335600000E+34 1.316543000000000E+01 + + mass of cell (g) cell center m (g) cell center R (cm) cell center v (cm/s) avg density radiation pressure avg temperature radiation temperature avg opacity tau outer edge m (g) outer edge r (cm) h1 he3 he4 c12 n14 o16 ne20 na23 mg24 si28 s32 ar36 ca40 ti44 cr48 cr60 fe52 fe54 fe56 co56 ni56 luminosity n_bar n_e + + 1 6.006769337200000E+29 5.190242521200000E+33 2.517208995922069E+13 3.930633463858500E+06 1.005529258105087E-11 1.123795450558407E+04 4.594345302259182E+04 4.594345302259182E+04 1.627115175247000E-01 5.403504880532457E+03 5.190874092200000E+33 2.743917483671189E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 7.648868494018999E+38 6.055413236609000E+12 2.412188329693000E+12 + 2 1.262405996000000E+30 5.191505663200000E+33 2.970625971420310E+13 5.050403113364500E+06 2.928088214842606E-11 1.123654402180205E+04 4.594218222923182E+04 4.594218222923182E+04 1.644115175247000E-01 5.381678444417913E+03 5.192138228800000E+33 3.084752490934893E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 9.609214019760001E+38 1.762303504940000E+13 6.969789895995001E+12 + 3 1.264623556160000E+30 5.192770794400000E+33 3.198879010449477E+13 5.680287938117499E+06 4.619658874727153E-11 1.113352676699529E+04 4.583651814225193E+04 4.583651814225193E+04 1.650115175247000E-01 5.364280083814479E+03 5.193402365400000E+33 3.278004423770521E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.050921401976000E+39 2.783915958398000E+13 1.091727628705000E+13 + 4 1.263066609320000E+30 5.194033936400000E+33 3.357129837091565E+13 6.135230350494000E+06 5.896887289487248E-11 1.113352676699529E+04 4.583651814225193E+04 4.583651814225193E+04 1.653103657722300E-01 5.348854703681713E+03 5.194663518200000E+33 3.418884043776321E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.100921401976000E+39 3.545182886115000E+13 1.392188329693000E+13 + 5 1.259386589320000E+30 5.195293099999999E+33 3.480638250461077E+13 6.495172762870502E+06 6.912716624103450E-11 1.103283871960936E+04 4.573236203052331E+04 4.573236203052331E+04 1.655103657722300E-01 5.334724892605372E+03 5.195921687200000E+33 3.532044191895871E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.140921401976000E+39 4.166219463338000E+13 1.632649030681000E+13 + 6 1.258090625520000E+30 5.196550274400000E+33 3.583450133330666E+13 6.805057587623500E+06 7.774308348390722E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.657092140197600E-01 5.321480960330699E+03 5.197178861599999E+33 3.627898123396824E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.180921401976000E+39 4.687025690067000E+13 1.832994556422000E+13 + 7 1.256430439200000E+30 5.197807448800000E+33 3.672346113462982E+13 7.075000000000001E+06 8.524104279923777E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.658092140197600E-01 5.308917604293943E+03 5.198434046800000E+33 3.711764413413297E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.210921401976000E+39 5.127831916796000E+13 2.013224906916000E+13 + 8 1.253971390160000E+30 5.199060644800000E+33 3.751182713363612E+13 7.310000000000000E+06 9.155071951057609E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.658195797919900E-01 5.296950387933184E+03 5.199687242800000E+33 3.786859739423271E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.240806226729000E+39 5.518407793031001E+13 2.153570432657000E+13 + 9 1.253772669080000E+30 5.200313840800000E+33 3.822536765482929E+13 7.520000000000000E+06 9.719899216272520E-11 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.659357043265700E-01 5.285442617217990E+03 5.200940438800000E+33 3.855369204840971E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274957000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.260806226729000E+39 5.848983669266000E+13 2.283800783151000E+13 + 10 1.252727742320000E+30 5.201567036800000E+33 3.888201644199014E+13 7.715000000000000E+06 1.017798395353652E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.664437665938600E-01 5.274319277721415E+03 5.202192640200000E+33 3.918782933873763E+13 4.154752000000000E-05 0.000000000000000E+00 5.841201000000000E-01 1.185549000000000E-01 7.856926000000000E-07 2.431931000000000E-01 6.325444000000000E-03 3.662477000000000E-08 7.302489000000000E-03 3.071376000000000E-02 5.003070000000000E-03 4.767893000000000E-04 1.676314000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.068415000000000E-05 0.000000000000000E+00 4.079380000000000E-03 1.290806226729000E+39 6.129444370254000E+13 2.403915958398000E+13 + 11 1.251315410320000E+30 5.202818243600000E+33 3.949364223548514E+13 7.899942412376500E+06 1.056026457897539E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.674426148413900E-01 5.263504963307480E+03 5.203442852400000E+33 3.977928982114709E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.310806226729000E+39 6.359789895995000E+13 2.504031133645000E+13 + 12 1.248464886720000E+30 5.204067461200000E+33 4.006493740680905E+13 8.069884824752999E+06 1.095624567086472E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.683437665938600E-01 5.252968552114717E+03 5.204689086199999E+33 4.033329407405283E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.330806226729000E+39 6.600135421736000E+13 2.594261484139000E+13 + 13 1.243739144280000E+30 5.205310711199999E+33 4.060165074129662E+13 8.224884824752999E+06 1.128950237403584E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.691426148413900E-01 5.242720454634525E+03 5.205932336200000E+33 4.085623968553272E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.350806226729000E+39 6.810365772230000E+13 2.674376659386000E+13 + 14 1.243958553040000E+30 5.206553961200000E+33 4.111082862976883E+13 8.374827237129501E+06 1.160579243824636E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.699414630889200E-01 5.232678533393097E+03 5.207176580799999E+33 4.135370636711265E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.380691051482000E+39 6.990711297971000E+13 2.744491834633000E+13 + 15 1.245056989280000E+30 5.207799200400000E+33 4.159658410445648E+13 8.514827237129500E+06 1.190314603547098E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.705414630889200E-01 5.222818388644689E+03 5.208415852400000E+33 4.182664731424838E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.400691051482000E+39 7.160941648465000E+13 2.814491834633000E+13 + 16 1.231934037960000E+30 5.209032504400000E+33 4.205671052404027E+13 8.644827237129500E+06 1.215239176795085E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.711414630889200E-01 5.213249349513649E+03 5.209640204999999E+33 4.227500312466951E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.420806226729000E+39 7.311171998959000E+13 2.864722185127000E+13 + 17 1.216115123880000E+30 5.210247905599999E+33 4.249329572529875E+13 8.769769649505999E+06 1.237832159909449E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.729414630889200E-01 5.203903812287533E+03 5.210856600800000E+33 4.270402303205376E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.440806226729000E+39 7.451402349453000E+13 2.924722185127000E+13 + 18 1.218288523800000E+30 5.211465296000000E+33 4.291475033880877E+13 8.889769649506001E+06 1.257945314501287E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.734414630889200E-01 5.194709057985139E+03 5.212075980400000E+33 4.311874033771442E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.470691051482000E+39 7.571632699947000E+13 2.974837360374000E+13 + 19 1.220635183040000E+30 5.212686664799999E+33 4.332273033662008E+13 9.009712061882500E+06 1.275483366087455E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.738414630889200E-01 5.185663371177895E+03 5.213296354599999E+33 4.351994817559711E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.490691051482000E+39 7.691747875194000E+13 3.014952535621000E+13 + 20 1.218599236840000E+30 5.213906044400000E+33 4.371716601457414E+13 9.119712061882500E+06 1.293227107193817E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.742403113364500E-01 5.176775981758805E+03 5.214514739599999E+33 4.390853926203266E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.510691051482000E+39 7.791978225688000E+13 3.054952535621000E+13 + 21 1.218527028880000E+30 5.215123434800000E+33 4.409991250949117E+13 9.224712061882501E+06 1.311178326528333E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.745414630889200E-01 5.168017132132754E+03 5.215732129999999E+33 4.428561489357539E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.530691051482000E+39 7.891978225688000E+13 3.094952535621000E+13 + 22 1.216195089720000E+30 5.216340825200000E+33 4.447131727765959E+13 9.329654474259000E+06 1.323350236218943E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.748403113364500E-01 5.159424248458041E+03 5.216947531200000E+33 4.465185383237795E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.560575876235000E+39 7.982093400935000E+13 3.125067710868000E+13 + 23 1.213956046200000E+30 5.217554237200000E+33 4.483239038709634E+13 9.429654474259000E+06 1.338633723734536E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.751403113364500E-01 5.150959409129642E+03 5.218160943200000E+33 4.500852584959350E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.580691051482000E+39 8.062208576182000E+13 3.155182886115000E+13 + 24 1.214387901520000E+30 5.218767649200000E+33 4.518466131209066E+13 9.524654474259000E+06 1.351019949078659E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.754403113364500E-01 5.142610227304026E+03 5.219374355200000E+33 4.535644726691923E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.600691051482000E+39 8.132323751429000E+13 3.185182886115000E+13 + 25 1.212674802480000E+30 5.219981061200000E+33 4.552823322174780E+13 9.619654474259000E+06 1.360384771977854E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.756403113364500E-01 5.134401424854060E+03 5.220586772599999E+33 4.569609344188388E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.630575876235000E+39 8.202438926676000E+13 3.215182886115000E+13 + 26 1.210646614160000E+30 5.221192483999999E+33 4.586395366201997E+13 9.714654474258998E+06 1.369814508728242E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.758391595839800E-01 5.126315469650785E+03 5.221797200799999E+33 4.602932945875839E+13 5.448374000000000E-05 0.000000000000000E+00 5.911859000000000E-01 1.177102000000000E-01 9.409300000000000E-07 2.379806000000000E-01 6.311451000000000E-03 4.386111000000000E-08 7.151046000000000E-03 2.998848000000000E-02 4.886803000000000E-03 4.659575000000000E-04 1.640276000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.063923000000000E-05 0.000000000000000E+00 4.079156000000000E-03 1.650575876235000E+39 8.252554101923000E+13 3.235182886115000E+13 + 27 1.209411122040000E+30 5.222401917599999E+33 4.619470525549680E+13 9.799654474259000E+06 1.369814508728242E-10 1.063111310274632E+04 4.531058138304271E+04 4.531058138304271E+04 1.758391595839800E-01 5.118349188692644E+03 5.223003650600000E+33 4.635613851833191E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.670691051482000E+39 8.242554101923000E+13 3.255182886115000E+13 + 28 1.204719593840000E+30 5.223605383600000E+33 4.651757178116701E+13 9.884654474259000E+06 1.379268297413249E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.759403113364500E-01 5.110514634938473E+03 5.224207116600000E+33 4.667574501850436E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.690691051482000E+39 8.292669277170000E+13 3.275182886115000E+13 + 29 1.203252558840000E+30 5.224808849600000E+33 4.683391825584172E+13 9.969654474259000E+06 1.385676213176606E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.761391595839800E-01 5.102793921722409E+03 5.225411577199999E+33 4.698937388624833E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.720575876235000E+39 8.342669277170000E+13 3.285298061362000E+13 + 30 1.204574382240000E+30 5.226014304799999E+33 4.714482951665495E+13 1.005459688663550E+07 1.392072203970389E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.762403113364500E-01 5.095166449759044E+03 5.226616037799999E+33 4.729740091630819E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.740575876235000E+39 8.382669277170000E+13 3.305298061362000E+13 + 31 1.203128432760000E+30 5.227217770799999E+33 4.744997231596144E+13 1.013953929901200E+07 1.398497717316301E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.764391595839800E-01 5.087637455379388E+03 5.227818509200000E+33 4.759995299724170E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.770575876235000E+39 8.422669277170000E+13 3.315413236609000E+13 + 32 1.202779527080000E+30 5.228419247600000E+33 4.774993367852195E+13 1.021459688663550E+07 1.404910809561199E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.765391595839800E-01 5.080198143859343E+03 5.229019985999999E+33 4.789736173632684E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.790575876235000E+39 8.452784452417000E+13 3.335298061362000E+13 + 33 1.201842613880000E+30 5.229620724400000E+33 4.804478979413171E+13 1.028959688663550E+07 1.408191640382741E-10 1.053364647196917E+04 4.520636993769876E+04 4.520636993769876E+04 1.781391595839800E-01 5.072801943519852E+03 5.230221462800000E+33 4.818968421482151E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.810575876235000E+39 8.492784452417000E+13 3.345413236609000E+13 + 34 1.200077198880000E+30 5.230822201200000E+33 4.833457863551130E+13 1.036953929901200E+07 1.414691557666537E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.782391595839800E-01 5.065495196509356E+03 5.231419955800001E+33 4.847689391639477E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.840575876235000E+39 8.522784452417000E+13 3.355413236609000E+13 + 35 1.197014626560000E+30 5.232017710400000E+33 4.861920919727826E+13 1.044453929901200E+07 1.421178910019751E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.783391595839800E-01 5.058281546805312E+03 5.232615465000000E+33 4.875906400136149E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.860575876235000E+39 8.552784452417000E+13 3.365413236609000E+13 + 36 1.193635174680000E+30 5.233213219599999E+33 4.889891880544473E+13 1.051453929901200E+07 1.424455065758637E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.784391595839800E-01 5.051172285322529E+03 5.233809979600000E+33 4.903694050540465E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.890575876235000E+39 8.572899627664000E+13 3.375413236609000E+13 + 37 1.194906074560000E+30 5.234406739599999E+33 4.917496220536456E+13 1.058453929901200E+07 1.427738773816480E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.784391595839800E-01 5.044140029764931E+03 5.235004494199999E+33 4.931113897068456E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.910575876235000E+39 8.602899627664000E+13 3.385413236609000E+13 + 38 1.195203261040000E+30 5.235602248800000E+33 4.944731573600456E+13 1.065453929901200E+07 1.431072913850401E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.785391595839800E-01 5.037181678880548E+03 5.236197019599999E+33 4.958097907713568E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.940460700988000E+39 8.622899627664000E+13 3.395413236609000E+13 + 39 1.188840804840000E+30 5.236791790399999E+33 4.971464241826679E+13 1.072453929901200E+07 1.434371877623661E-10 1.043707342063402E+04 4.510239817202799E+04 4.510239817202799E+04 1.786391595839800E-01 5.030332176822147E+03 5.237383577400001E+33 4.984615165492705E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.960575876235000E+39 8.643014802911000E+13 3.405413236609000E+13 + 40 1.184461581040000E+30 5.237975364400000E+33 4.997766089158733E+13 1.079448171138850E+07 1.437635386203457E-10 1.043707342063402E+04 4.510239817202799E+04 4.510239817202799E+04 1.786391595839800E-01 5.023577721732046E+03 5.238568146000000E+33 5.010769736884806E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.990460700988000E+39 8.663014802911000E+13 3.415413236609000E+13 + 41 1.185873117360000E+30 5.239160927599999E+33 5.023773384610881E+13 1.085948171138850E+07 1.440949478037869E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.787391595839800E-01 5.016879763521018E+03 5.239753709200000E+33 5.036605223094619E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.010575876235000E+39 8.682899627664000E+13 3.415413236609000E+13 + 42 1.184179512480000E+30 5.240346490800000E+33 5.049437061578358E+13 1.092448171138850E+07 1.444271209642971E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.787391595839800E-01 5.010255063402822E+03 5.240937283200000E+33 5.062099608921266E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.030575876235000E+39 8.693014802911000E+13 3.425413236609000E+13 + 43 1.182131432160000E+30 5.241528075600000E+33 5.074762156264175E+13 1.098942412376500E+07 1.444314468489687E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.788391595839800E-01 5.003713913943664E+03 5.242118868000000E+33 5.087283925525538E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.060575876235000E+39 8.703014802911000E+13 3.425528411856000E+13 + 44 1.181971898320000E+30 5.242709660400000E+33 5.099805694786903E+13 1.104948171138850E+07 1.447600598630256E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.788391595839800E-01 4.997230762822934E+03 5.243298463599999E+33 5.112242343664109E+13 7.645219000000001E-05 0.000000000000000E+00 6.002724000000000E-01 1.166218000000000E-01 1.200780000000000E-06 2.312747000000000E-01 6.293340000000000E-03 5.597394000000000E-08 6.956230000000000E-03 2.905549000000000E-02 4.737240000000000E-03 4.520234000000000E-04 1.593916000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058142000000000E-05 0.000000000000000E+00 4.078777000000000E-03 2.080575876235000E+39 8.713129978158000E+13 3.435413236609000E+13 + 45 1.177439506120000E+30 5.243887266800000E+33 5.124678992541316E+13 1.111448171138850E+07 1.437635386203457E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.786391595839800E-01 4.990843161622332E+03 5.244487010600000E+33 5.137223749160197E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467000000000E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.110460700988000E+39 8.662899627664000E+13 3.435413236609000E+13 + 46 1.199910901760000E+30 5.245086754400000E+33 5.149768505779078E+13 1.118448171138850E+07 1.440949478037869E-10 1.034138575635538E+04 4.499866553478249E+04 4.499866553478249E+04 1.787391595839800E-01 4.984381565669059E+03 5.245802866400000E+33 5.164555467485615E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.130575876235000E+39 8.672899627664000E+13 3.435413236609000E+13 + 47 1.431021926440000E+30 5.246518978399999E+33 5.179342429192152E+13 1.125953929901200E+07 1.440949478037869E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.787391595839800E-01 4.976765045074344E+03 5.247321620600000E+33 5.195673752387437E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.160575876235000E+39 8.673014802911000E+13 3.435528411856000E+13 + 48 1.605304093080000E+30 5.248124262800000E+33 5.212005075582720E+13 1.134448171138850E+07 1.440949478037869E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.787391595839800E-01 4.968353047774323E+03 5.248919942799999E+33 5.228001093056375E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.200460700988000E+39 8.683014802911000E+13 3.445413236609000E+13 + 49 1.591239454480000E+30 5.249715622800000E+33 5.243997110530028E+13 1.142448171138850E+07 1.444271209642971E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.802391595839800E-01 4.960025463010164E+03 5.250509313600000E+33 5.259754858899822E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.230460700988000E+39 8.693014802911000E+13 3.445413236609000E+13 + 50 1.588995835800000E+30 5.251303004400000E+33 5.275512607269612E+13 1.149948171138850E+07 1.444271209642971E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.802391595839800E-01 4.951821920693121E+03 5.252094706000000E+33 5.291016854880295E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.260575876235000E+39 8.703014802911000E+13 3.445528411856000E+13 + 51 1.583069810080000E+30 5.252886407599999E+33 5.306521102490976E+13 1.157942412376500E+07 1.447600598630256E-10 1.024657536185602E+04 4.489517147598229E+04 4.489517147598229E+04 1.802391595839800E-01 4.943731743053600E+03 5.253678109199999E+33 5.321828932275423E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.290575876235000E+39 8.713014802911000E+13 3.445528411856000E+13 + 52 1.582185212840000E+30 5.254469810800000E+33 5.337136762059868E+13 1.165936653614150E+07 1.447600598630256E-10 1.024657536185602E+04 4.489517147598229E+04 4.489517147598229E+04 1.802391595839800E-01 4.935744056310312E+03 5.255261512400000E+33 5.352284510113288E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.330460700988000E+39 8.713014802911000E+13 3.455413236609000E+13 + 53 1.584359010600000E+30 5.256053214000000E+33 5.367432258166705E+13 1.173436653614150E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.927835515134628E+03 5.256841931799999E+33 5.382336686823468E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.360460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 54 1.576955009280000E+30 5.257630649600000E+33 5.397241115480229E+13 1.180442412376500E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.920054007770228E+03 5.258414394399999E+33 5.411895969861387E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.390460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 55 1.567575334520000E+30 5.259198139200000E+33 5.426550824242547E+13 1.187442412376500E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.912402800337659E+03 5.259981884000000E+33 5.441052263858226E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.420460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 56 1.568038221360000E+30 5.260765628800000E+33 5.455553703473905E+13 1.194936653614150E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.904831688572423E+03 5.261549373600000E+33 5.469905356014048E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.460460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 57 1.568036630000000E+30 5.262333118400000E+33 5.484257008554189E+13 1.202430894851800E+07 1.447600598630256E-10 1.015263419427808E+04 4.479191544691196E+04 4.479191544691196E+04 1.803391595839800E-01 4.897338779498666E+03 5.263115868600000E+33 5.498521058187249E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.490460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 58 1.564241037480000E+30 5.263898618800000E+33 5.512785107820308E+13 1.209430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.801391595839800E-01 4.889951075962655E+03 5.264680374400000E+33 5.526915409637256E+13 1.404520000000000E-04 0.000000000000000E+00 6.172320000000000E-01 1.145812000000000E-01 1.941466000000000E-06 2.187470000000000E-01 6.259039000000000E-03 9.050075000000000E-08 6.592341000000000E-03 2.731282000000000E-02 4.457879000000000E-03 4.259968000000000E-04 1.507322000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.047331000000000E-05 0.000000000000000E+00 4.077687000000000E-03 2.520460700988000E+39 8.662899627664000E+13 3.445528411856000E+13 + 59 1.563356241320000E+30 5.265462130000000E+33 5.541045711454202E+13 1.216430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800403113364500E-01 4.882636654893881E+03 5.266242891000000E+33 5.555019577534471E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.550460700988000E+39 8.652899627664000E+13 3.445528411856000E+13 + 60 1.561216458880000E+30 5.267023652000001E+33 5.568993443614738E+13 1.223430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800391595839800E-01 4.875403260484462E+03 5.267802423799999E+33 5.582808433626166E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.580460700988000E+39 8.652899627664000E+13 3.445413236609000E+13 + 61 1.557930300480000E+30 5.268581195600000E+33 5.596623423637595E+13 1.229936653614150E+07 1.434328916568751E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800391595839800E-01 4.868268552030053E+03 5.269355988999999E+33 5.610240846638455E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.610460700988000E+39 8.642899627664000E+13 3.445413236609000E+13 + 62 1.549748919800000E+30 5.270130782400000E+33 5.623858269639318E+13 1.236436653614150E+07 1.434328916568751E-10 1.005955428450142E+04 4.468889690011853E+04 4.468889690011853E+04 1.800391595839800E-01 4.861235876775526E+03 5.270902592000000E+33 5.637313643491681E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.640460700988000E+39 8.632899627664000E+13 3.445413236609000E+13 + 63 1.543620791360000E+30 5.271674401600000E+33 5.650769017344044E+13 1.242936653614150E+07 1.434328916568751E-10 1.005955428450142E+04 4.468889690011853E+04 4.468889690011853E+04 1.800391595839800E-01 4.854286889229287E+03 5.272448200399999E+33 5.664163933331418E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.680345525741000E+39 8.632899627664000E+13 3.435413236609000E+13 + 64 1.547183647480000E+30 5.273221999200000E+33 5.677558849318790E+13 1.249436653614150E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.799403113364500E-01 4.847388821374890E+03 5.273994803399999E+33 5.690904996241377E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.710345525741000E+39 8.622899627664000E+13 3.435413236609000E+13 + 65 1.545456425120000E+30 5.274767607600000E+33 5.704251143163963E+13 1.256430894851800E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.813391595839800E-01 4.840462441372802E+03 5.275536433399999E+33 5.717611876567019E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.740345525741001E+39 8.612899627664000E+13 3.435413236609000E+13 + 66 1.539180499120000E+30 5.276305259200000E+33 5.730972609970071E+13 1.262930894851800E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.812403113364500E-01 4.833532267264272E+03 5.277074085000001E+33 5.744505981274482E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.770345525741000E+39 8.612784452417000E+13 3.425413236609000E+13 + 67 1.537342677240000E+30 5.277842910800000E+33 5.758039352578892E+13 1.269430894851800E+07 1.427738773816480E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.812403113364500E-01 4.826528690524168E+03 5.278610742000001E+33 5.771789858118911E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.800345525741000E+39 8.602899627664000E+13 3.425413236609000E+13 + 68 1.535467458400000E+30 5.279378573200000E+33 5.785540363658930E+13 1.276430894851800E+07 1.427738773816480E-10 9.967327736466885E+03 4.458611528940774E+04 4.458611528940774E+04 1.812391595839800E-01 4.819412792704015E+03 5.280144415199999E+33 5.799421470062543E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.840345525741000E+39 8.592899627664000E+13 3.425413236609000E+13 + 69 1.531762971240000E+30 5.280910257200000E+33 5.813302576466156E+13 1.283430894851800E+07 1.427696108503392E-10 9.967327736466885E+03 4.458611528940774E+04 4.458611528940774E+04 1.812391595839800E-01 4.812229517714191E+03 5.281675104600000E+33 5.827219387386395E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.870345525741000E+39 8.592784452417000E+13 3.425298061362000E+13 + 70 1.529602898960000E+30 5.282439952000000E+33 5.841136198306632E+13 1.289930894851800E+07 1.424455065758637E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.811403113364500E-01 4.805048033443673E+03 5.283203804800000E+33 5.854999383667591E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333390000000000E-08 6.566352000000000E-03 2.718836000000000E-02 4.437927000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.900345525741001E+39 8.582784452417000E+13 3.415413236609000E+13 + 71 1.527372210080000E+30 5.283967657599999E+33 5.868862569028551E+13 1.296430894851800E+07 1.421178910019751E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.810403113364500E-01 4.797914614522894E+03 5.284689737199999E+33 5.882193552394690E+13 1.617690000000000E-04 0.000000000000000E+00 6.212834000000000E-01 1.140913000000000E-01 2.184485000000000E-06 2.157513000000000E-01 6.250716000000000E-03 1.018290000000000E-07 6.505341000000000E-03 2.689618000000000E-02 4.391089000000000E-03 4.197743000000000E-04 1.486619000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.044743000000000E-05 0.000000000000000E+00 4.077327000000000E-03 2.940345525741000E+39 8.552669277170000E+13 3.415298061362000E+13 + 72 1.444053772400000E+30 5.285411816799999E+33 5.895524535760829E+13 1.304430894851800E+07 1.411395583217985E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.809391595839800E-01 4.791106075222792E+03 5.286478028000000E+33 5.913839382719280E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 2.970345525741000E+39 8.502669277170000E+13 3.405413236609000E+13 + 73 2.132957494800000E+30 5.287544239200000E+33 5.932154229677730E+13 1.317425136089450E+07 1.411395583217985E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.821391595839800E-01 4.781690088472412E+03 5.289480725399999E+33 5.967177557194812E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.020230350494000E+39 8.492669277170000E+13 3.405298061362000E+13 + 74 3.872498970400000E+30 5.291417211600000E+33 6.002200884711894E+13 1.336425136089450E+07 1.408149463455453E-10 9.875946726507078E+03 4.448357006984179E+04 4.448357006984179E+04 1.820403113364500E-01 4.763735122348797E+03 5.294179215800000E+33 6.047501614317666E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.110230350494000E+39 8.482554101923000E+13 3.395298061362000E+13 + 75 5.523815447599999E+30 5.296941220000000E+33 6.092802343923437E+13 1.359430894851800E+07 1.404868826419289E-10 9.786620719928278E+03 4.438248552525961E+04 4.438248552525961E+04 1.819403113364500E-01 4.740578174939372E+03 5.300310924800001E+33 6.146142505868634E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.230230350494000E+39 8.452554101923000E+13 3.385298061362000E+13 + 76 6.740623012000000E+30 5.303680629600000E+33 6.199482667813830E+13 1.383430894851800E+07 1.391988911600244E-10 9.696896441854366E+03 4.428040864115504E+04 4.428040864115504E+04 1.816403113364500E-01 4.713606120725508E+03 5.306958831200000E+33 6.248086763553174E+13 2.310003000000000E-04 0.000000000000000E+00 6.320732000000000E-01 1.127819000000000E-01 2.966680000000000E-06 2.077668000000000E-01 6.228286000000000E-03 1.382907000000000E-07 6.273485000000000E-03 2.578586000000000E-02 4.213098000000000E-03 4.031917000000000E-04 1.431445000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.037838000000000E-05 0.000000000000000E+00 4.076165000000000E-03 3.370230350494000E+39 8.372438926676000E+13 3.365298061362000E+13 + 77 6.554716358399999E+30 5.310237032800000E+33 6.296690859292517E+13 1.405430894851800E+07 1.379268297413249E-10 9.695690384123296E+03 4.427918663065678E+04 4.427918663065678E+04 1.814403113364500E-01 4.689280321573676E+03 5.313381958000000E+33 6.342191948155235E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.510230350494000E+39 8.312208576182000E+13 3.345182886115000E+13 + 78 6.290646079999999E+30 5.316526883200000E+33 6.387693037017954E+13 1.426425136089450E+07 1.372890107737439E-10 9.607994760906291E+03 4.417856652736908E+04 4.417856652736908E+04 1.812403113364500E-01 4.666637806655718E+03 5.319657884000000E+33 6.432207350048184E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.650230350494000E+39 8.262208576182000E+13 3.325182886115000E+13 + 79 6.261371023599999E+30 5.322788884800000E+33 6.476721663078414E+13 1.446919377327100E+07 1.366582250670168E-10 9.519908135468348E+03 4.407695864394511E+04 4.407695864394511E+04 1.810414630889200E-01 4.644612281024952E+03 5.325898999000000E+33 6.520195926556188E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.790115175247000E+39 8.222093400935000E+13 3.305182886115000E+13 + 80 6.221901317200000E+30 5.329009113200000E+33 6.563670190033962E+13 1.466419377327100E+07 1.347832039263715E-10 9.518724090771706E+03 4.407574224807508E+04 4.407574224807508E+04 1.807403113364500E-01 4.623431801878862E+03 5.332098340800000E+33 6.605898452070074E+13 3.172061000000000E-04 0.000000000000000E+00 6.421076000000000E-01 1.115556000000000E-01 3.927966000000000E-06 2.003302000000000E-01 6.206966000000000E-03 1.831007000000000E-07 6.057593000000000E-03 2.475201000000000E-02 4.047364000000000E-03 3.877510000000000E-04 1.380071000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031397000000000E-05 0.000000000000000E+00 4.074730000000000E-03 3.930115175247000E+39 8.121863050441000E+13 3.285067710868000E+13 + 81 6.177024965200000E+30 5.335187568399999E+33 6.648126714106186E+13 1.484919377327100E+07 1.341639313563057E-10 9.432629093066556E+03 4.397558445216805E+04 4.397558445216805E+04 1.830403113364500E-01 4.602692288220763E+03 5.338209163200000E+33 6.688486768582183E+13 3.225396000000000E-04 0.000000000000000E+00 6.426989000000000E-01 1.114833000000000E-01 3.987320000000000E-06 1.998918000000000E-01 6.205704000000000E-03 1.858675000000000E-07 6.044866000000000E-03 2.469107000000000E-02 4.037594000000000E-03 3.868408000000000E-04 1.377042000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031017000000000E-05 0.000000000000000E+00 4.074642000000000E-03 4.070115175247000E+39 8.081863050441000E+13 3.274952535621000E+13 + 82 6.044098664399999E+30 5.341230758000000E+33 6.728846823058180E+13 1.507419377327100E+07 1.338553628768709E-10 9.431455903756942E+03 4.397437085393089E+04 4.397437085393089E+04 1.829414630889200E-01 4.582926557609838E+03 5.345722371600000E+33 6.787697651928216E+13 3.225396000000000E-04 0.000000000000000E+00 6.426990000000000E-01 1.114833000000000E-01 3.987320000000000E-06 1.998918000000000E-01 6.205704000000000E-03 1.858675000000000E-07 6.044866000000000E-03 2.469106000000000E-02 4.037594000000000E-03 3.868408000000000E-04 1.377042000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031017000000000E-05 0.000000000000000E+00 4.074642000000000E-03 4.210115175247000E+39 8.061747875194000E+13 3.264952535621000E+13 + 83 8.982473293199999E+30 5.350213985199999E+33 6.846548480798253E+13 1.535919377327100E+07 1.323231332083583E-10 9.346150229735285E+03 4.387444341456219E+04 4.387444341456219E+04 1.826403113364500E-01 4.554482071520186E+03 5.355504262599999E+33 6.913981640587820E+13 4.184927000000000E-04 0.000000000000000E+00 6.510960000000000E-01 1.104480000000000E-01 5.043425000000000E-06 1.936565000000000E-01 6.187366000000000E-03 2.350974000000000E-07 5.863903000000000E-03 2.382451000000000E-02 3.898680000000000E-03 3.738986000000000E-04 1.333980000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.025605000000000E-05 0.000000000000000E+00 4.073059000000000E-03 4.410115175247000E+39 7.981517524700000E+13 3.244952535621000E+13 + 84 1.058142010200000E+31 5.360794540000000E+33 6.981414800377385E+13 1.562419377327100E+07 1.320187984471793E-10 9.260464209388570E+03 4.377353499488768E+04 4.377353499488768E+04 1.824414630889200E-01 4.521999809188801E+03 5.364870410799999E+33 7.032218559271389E+13 4.189031000000000E-04 0.000000000000000E+00 6.511261000000000E-01 1.104443000000000E-01 5.047903000000000E-06 1.936341000000000E-01 6.187299000000000E-03 2.353062000000000E-07 5.863254000000000E-03 2.382140000000000E-02 3.898181000000000E-03 3.738521000000000E-04 1.333826000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.025586000000000E-05 0.000000000000000E+00 4.073053000000000E-03 4.650115175247000E+39 7.941632699947000E+13 3.234952535621000E+13 + 85 8.151805254399998E+30 5.368946281599999E+33 7.083022318165394E+13 1.583913618564750E+07 1.308045427350605E-10 9.175563763198314E+03 4.367285865813818E+04 4.367285865813818E+04 1.821426148413900E-01 4.497792630441830E+03 5.372548722799999E+33 7.126633581034194E+13 5.311735000000000E-04 0.000000000000000E+00 6.589526999999999E-01 1.094707000000000E-01 6.270084000000000E-06 1.878108000000000E-01 6.169733000000000E-03 2.922777000000000E-07 5.694297000000000E-03 2.301237000000000E-02 3.768487000000000E-03 3.617689000000000E-04 1.293621000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020521000000000E-05 0.000000000000000E+00 4.071215000000000E-03 4.840000000000000E+39 7.871402349453000E+13 3.224837360374000E+13 + 86 7.203625225599999E+30 5.376151163999999E+33 7.170244843902994E+13 1.603907859802400E+07 1.305075917578498E-10 9.174422546554422E+03 4.367165341425251E+04 4.367165341425251E+04 1.821414630889200E-01 4.477059888143435E+03 5.379953519799999E+33 7.215192974099116E+13 5.311736000000000E-04 0.000000000000000E+00 6.589526999999999E-01 1.094707000000000E-01 6.270085000000000E-06 1.878108000000000E-01 6.169733000000000E-03 2.922777000000000E-07 5.694297000000000E-03 2.301237000000000E-02 3.768487000000000E-03 3.617689000000000E-04 1.293621000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020521000000000E-05 0.000000000000000E+00 4.071215000000000E-03 5.000000000000000E+39 7.851517524700000E+13 3.214837360374000E+13 + 87 7.605654480799999E+30 5.383755875600000E+33 7.260141104295234E+13 1.628407859802400E+07 1.302074326261344E-10 9.090310935070620E+03 4.357121139863622E+04 4.357121139863622E+04 1.820426148413900E-01 4.455752304968317E+03 5.389323646400000E+33 7.324829639490162E+13 5.432076000000000E-04 0.000000000000000E+00 6.596257000000000E-01 1.093860000000000E-01 6.399654000000000E-06 1.873088000000000E-01 6.168174000000000E-03 2.983176000000000E-07 5.679739000000000E-03 2.294267000000000E-02 3.757312000000000E-03 3.607278000000000E-04 1.290157000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020083000000000E-05 0.000000000000000E+00 4.071020000000000E-03 5.170000000000000E+39 7.841402349453000E+13 3.204952535621000E+13 + 88 1.113508209480000E+31 5.394891417199999E+33 7.389518174685091E+13 1.657407859802400E+07 1.293072355159299E-10 9.008090850568675E+03 4.347220009953831E+04 4.347220009953831E+04 1.818414630889200E-01 4.425332475484333E+03 5.400617329399999E+33 7.453583937816650E+13 6.761233000000000E-04 0.000000000000000E+00 6.670584000000001E-01 1.084515000000000E-01 7.830749000000000E-06 1.817650000000000E-01 6.150954000000000E-03 3.650275000000000E-07 5.518951000000000E-03 2.217279000000000E-02 3.633893000000000E-03 3.492292000000000E-04 1.251897000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.015249000000000E-05 0.000000000000000E+00 4.068862000000000E-03 5.419884824753000E+39 7.781287174206000E+13 3.204837360374000E+13 + 89 1.145252857680000E+31 5.406343241599999E+33 7.517649700948211E+13 1.684407859802400E+07 1.293072355159299E-10 8.925504177239673E+03 4.337221681381614E+04 4.337221681381614E+04 1.858426148413900E-01 4.394542601582139E+03 5.411463442400000E+33 7.572927364979686E+13 7.069149000000000E-04 0.000000000000000E+00 6.684466000000000E-01 1.082748000000000E-01 8.158566000000000E-06 1.807264000000000E-01 6.147616000000000E-03 3.803086000000000E-07 5.488843000000000E-03 2.202863000000000E-02 3.610783000000000E-03 3.470761000000000E-04 1.244733000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.014341000000000E-05 0.000000000000000E+00 4.068367000000000E-03 5.669884824753001E+39 7.781287174206000E+13 3.204837360374000E+13 + 90 1.024059654160000E+31 5.416583643199999E+33 7.628205029011159E+13 1.710907859802400E+07 1.290136837084467E-10 8.843674663082953E+03 4.327246348327003E+04 4.327246348327003E+04 1.857437665938600E-01 4.368050679101013E+03 5.422712368400000E+33 7.692508203098175E+13 8.430807000000000E-04 0.000000000000000E+00 6.745857000000000E-01 1.074930000000000E-01 9.608229000000000E-06 1.761337000000000E-01 6.132855000000000E-03 4.478841000000000E-07 5.355699000000000E-03 2.139114000000000E-02 3.508588000000000E-03 3.375547000000000E-04 1.213051000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.010324000000000E-05 0.000000000000000E+00 4.066174000000000E-03 5.889884824753000E+39 7.781287174206000E+13 3.214952535621000E+13 + 91 1.225635832920000E+31 5.428841093600000E+33 7.756811377185191E+13 1.738402101040050E+07 1.296053194789891E-10 8.762595366421345E+03 4.317293957901759E+04 4.317293957901759E+04 1.858437665938600E-01 4.337075252784402E+03 5.434534183999999E+33 7.814918886970233E+13 9.157210000000000E-04 0.000000000000000E+00 6.772203000000000E-01 1.071523000000000E-01 1.037254000000000E-05 1.741554000000000E-01 6.126235000000000E-03 4.835122000000000E-07 5.298377000000000E-03 2.111670000000000E-02 3.464593000000000E-03 3.334557000000000E-04 1.199411000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.008587000000000E-05 0.000000000000000E+00 4.065015000000000E-03 6.159769649505999E+39 7.801287174206000E+13 3.224952535621000E+13 + 92 1.138593413920000E+31 5.440227274399999E+33 7.873026396755275E+13 1.763402101040050E+07 1.293110909647017E-10 8.682259409219656E+03 4.307364457339315E+04 4.307364457339315E+04 1.858437665938600E-01 4.309147895216154E+03 5.445573249400000E+33 7.925785615445247E+13 1.076355000000000E-03 0.000000000000000E+00 6.830464000000001E-01 1.063988000000000E-01 1.206272000000000E-05 1.697806000000000E-01 6.111593000000000E-03 5.622991000000000E-07 5.171616000000000E-03 2.050982000000000E-02 3.367302000000000E-03 3.243912000000000E-04 1.169249000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.004747000000000E-05 0.000000000000000E+00 4.062451000000000E-03 6.399769649506000E+39 7.791402349453000E+13 3.244837360374000E+13 + 93 1.069159592240000E+31 5.450919224400000E+33 7.978544834135217E+13 1.785907859802400E+07 1.299079638412652E-10 8.602659976500619E+03 4.297457793994428E+04 4.297457793994428E+04 1.860426148413900E-01 4.283646721204081E+03 5.456043403600000E+33 8.027889465273700E+13 1.076355000000000E-03 0.000000000000000E+00 6.830464000000001E-01 1.063988000000000E-01 1.206272000000000E-05 1.697806000000000E-01 6.111593000000000E-03 5.622992000000000E-07 5.171616000000000E-03 2.050982000000000E-02 3.367302000000000E-03 3.243912000000000E-04 1.169249000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.004747000000000E-05 0.000000000000000E+00 4.062451000000000E-03 6.629654474259000E+39 7.821402349453000E+13 3.254952535621000E+13 + 94 1.024980653760000E+31 5.461167582799999E+33 8.077234096412186E+13 1.807402101040050E+07 1.299040905965504E-10 8.601590015133635E+03 4.297339196657564E+04 4.297339196657564E+04 1.859437665938600E-01 4.259809348045044E+03 5.465973489999999E+33 8.122463914107541E+13 1.234700000000000E-03 0.000000000000000E+00 6.876067000000000E-01 1.057970000000000E-01 1.370700000000000E-05 1.663392000000000E-01 6.099482000000000E-03 6.389467000000000E-07 5.071970000000000E-03 2.003279000000000E-02 3.290827000000000E-03 3.172660000000000E-04 1.145539000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.001711000000000E-05 0.000000000000000E+00 4.059948000000000E-03 6.849539299012001E+39 7.821287174206000E+13 3.264837360374000E+13 + 95 9.611633382799999E+30 5.470779397199999E+33 8.167693731802897E+13 1.827896342277700E+07 1.296091838154882E-10 8.522730163865044E+03 4.287455590772408E+04 4.287455590772408E+04 1.859437665938600E-01 4.238009376691649E+03 5.475703661799999E+33 8.212981295721180E+13 1.377559000000000E-03 0.000000000000000E+00 6.917210000000000E-01 1.052540000000000E-01 1.519048000000000E-05 1.632343000000000E-01 6.088555000000000E-03 7.080989000000000E-07 4.982068000000000E-03 1.960240000000000E-02 3.221832000000000E-03 3.108376000000000E-04 1.124147000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.998972000000000E-05 0.000000000000000E+00 4.057690000000000E-03 7.049539299012001E+39 7.801402349453000E+13 3.264952535621000E+13 + 96 9.848634627600001E+30 5.480627926400000E+33 8.258268859639461E+13 1.848402101040050E+07 1.299079638412652E-10 8.444593304058699E+03 4.277594716550000E+04 4.277594716550000E+04 1.860437665938600E-01 4.216119489748159E+03 5.485834657400000E+33 8.305097870039655E+13 1.377559000000000E-03 0.000000000000000E+00 6.917210000000000E-01 1.052540000000000E-01 1.519048000000000E-05 1.632343000000000E-01 6.088555000000000E-03 7.080989000000000E-07 4.982068000000000E-03 1.960240000000000E-02 3.221832000000000E-03 3.108376000000000E-04 1.124147000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.998972000000000E-05 0.000000000000000E+00 4.057690000000000E-03 7.249539299012000E+39 7.821402349453000E+13 3.274952535621000E+13 + 97 1.041222272840000E+31 5.491041388399999E+33 8.351926880439848E+13 1.869902101040050E+07 1.296091838154882E-10 8.367172807288900E+03 4.267756521708949E+04 4.267756521708949E+04 1.907437665938600E-01 4.192966106242700E+03 5.496493785600001E+33 8.399613709889031E+13 1.612118000000000E-03 0.000000000000000E+00 6.971712000000000E-01 1.045183000000000E-01 1.759459000000000E-05 1.590975000000000E-01 6.073186000000000E-03 8.201656000000000E-07 4.862380000000000E-03 1.902948000000000E-02 3.129983000000000E-03 3.022799000000000E-04 1.095669000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.995303000000000E-05 0.000000000000000E+00 4.054019000000000E-03 7.459424123764999E+39 7.811402349453000E+13 3.275067710868000E+13 + 98 1.090650909040000E+31 5.501946182800000E+33 8.447300539338214E+13 1.891396342277700E+07 1.302074326261344E-10 8.291493365719571E+03 4.258058464118079E+04 4.258058464118079E+04 1.908449183463300E-01 4.169267197763668E+03 5.507478148000000E+33 8.494632917688588E+13 1.696406000000000E-03 0.000000000000000E+00 6.991298000000000E-01 1.042539000000000E-01 1.845851000000000E-05 1.576110000000000E-01 6.067663000000000E-03 8.604365000000000E-07 4.819370000000000E-03 1.882360000000000E-02 3.096978000000000E-03 2.992048000000000E-04 1.085436000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.993985000000000E-05 0.000000000000000E+00 4.052699000000000E-03 7.669424123765000E+39 7.841517524700000E+13 3.295067710868000E+13 + 99 1.106322224480000E+31 5.513010113200000E+33 8.541965296038961E+13 1.912890583515350E+07 1.302074326261344E-10 8.215476497621437E+03 4.248265201410775E+04 4.248265201410775E+04 1.908449183463300E-01 4.145744445554332E+03 5.518576889400000E+33 8.588450999222605E+13 2.010318000000000E-03 0.000000000000000E+00 7.051430000000000E-01 1.034223000000000E-01 2.163681000000000E-05 1.530178000000000E-01 6.049629000000000E-03 1.008592000000000E-06 4.686586000000000E-03 1.818804000000000E-02 2.995089000000000E-03 2.897114000000000E-04 1.053843000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989887000000000E-05 0.000000000000000E+00 4.047831000000000E-03 7.889308948517999E+39 7.841402349453000E+13 3.314952535621000E+13 + 100 1.113388459640000E+31 5.524143665600000E+33 8.634936702406248E+13 1.933890583515350E+07 1.305075917578498E-10 8.214454692448639E+03 4.248147961646399E+04 4.248147961646399E+04 1.910437665938600E-01 4.122565097205196E+03 5.529738290599999E+33 8.680570888908288E+13 2.063620000000000E-03 0.000000000000000E+00 7.061640000000000E-01 1.032810000000000E-01 2.217648000000000E-05 1.522378000000000E-01 6.046566000000000E-03 1.033749000000000E-06 4.664040000000000E-03 1.808013000000000E-02 2.977788000000000E-03 2.880994000000000E-04 1.048478000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989192000000000E-05 0.000000000000000E+00 4.047004000000000E-03 8.099308948518000E+39 7.861517524700000E+13 3.325067710868000E+13 + 101 1.118831507600000E+31 5.535332915600000E+33 8.726205075410327E+13 1.954390583515350E+07 1.308084428278250E-10 8.139144119152385E+03 4.238377492462259E+04 4.238377492462259E+04 1.911449183463300E-01 4.099745802612503E+03 5.540853940200000E+33 8.770407201133533E+13 2.063620000000000E-03 0.000000000000000E+00 7.061640000000000E-01 1.032810000000000E-01 2.217648000000000E-05 1.522378000000000E-01 6.046566000000000E-03 1.033749000000000E-06 4.664040000000000E-03 1.808013000000000E-02 2.977788000000000E-03 2.880994000000000E-04 1.048478000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989192000000000E-05 0.000000000000000E+00 4.047004000000000E-03 8.309308948517999E+39 7.881632699947000E+13 3.335067710868000E+13 + 102 1.104339588840000E+31 5.546374964800001E+33 8.814609326856742E+13 1.979884824753000E+07 1.302113237489345E-10 8.064523997342329E+03 4.228629494733676E+04 4.228629494733676E+04 1.909449183463300E-01 4.077766543323558E+03 5.554758448200001E+33 8.881339908434250E+13 2.468878000000000E-03 0.000000000000000E+00 7.126200000000000E-01 1.023637000000000E-01 2.622973000000000E-05 1.472702000000000E-01 6.025883000000000E-03 1.222689000000000E-06 4.520567000000000E-03 1.739349000000000E-02 2.867708000000000E-03 2.778427000000000E-04 1.014343000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.984731000000000E-05 0.000000000000000E+00 4.040776000000000E-03 8.519193773271000E+39 7.851517524700000E+13 3.335067710868000E+13 + 103 1.676635412640000E+31 5.563141931600000E+33 8.948070490011761E+13 2.010384824753000E+07 1.305075917578498E-10 7.990587996921068E+03 4.218903916777715E+04 4.218903916777715E+04 1.910449183463300E-01 4.044492204600503E+03 5.571970995800000E+33 9.014876518513588E+13 2.479266000000000E-03 0.000000000000000E+00 7.127855000000000E-01 1.023402000000000E-01 2.633363000000000E-05 1.471429000000000E-01 6.025352000000000E-03 1.227532000000000E-06 4.516889000000000E-03 1.737589000000000E-02 2.864886000000000E-03 2.775798000000000E-04 1.013468000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.984617000000000E-05 0.000000000000000E+00 4.040617000000000E-03 8.829193773270999E+39 7.851517524700000E+13 3.335067710868000E+13 + 104 1.765824775200000E+31 5.580800060000000E+33 9.081682547015412E+13 2.037384824753000E+07 1.290136837084467E-10 7.845719145861835E+03 4.199635711778005E+04 4.199635711778005E+04 1.906460700988000E-01 4.011630304094290E+03 5.587589199600000E+33 9.132762899555362E+13 3.104324000000000E-03 0.000000000000000E+00 7.209510000000000E-01 1.011400000000000E-01 3.250084000000000E-05 1.407998000000000E-01 5.997034000000000E-03 1.515015000000000E-06 4.333908000000000E-03 1.650030000000000E-02 2.724511000000000E-03 2.645000000000000E-04 9.699353999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.978875000000000E-05 0.000000000000000E+00 4.031108000000000E-03 9.149078598024000E+39 7.771402349453000E+13 3.324952535621000E+13 + 105 1.357841645480000E+31 5.594378339199999E+33 9.183843252095312E+13 2.060890583515350E+07 1.290136837084467E-10 7.772822290350505E+03 4.189861186497885E+04 4.189861186497885E+04 1.949460700988000E-01 3.985937150326271E+03 5.601584216200000E+33 9.237463883877405E+13 3.109868000000000E-03 0.000000000000000E+00 7.210095000000000E-01 1.011310000000000E-01 3.255470000000000E-05 1.407538000000000E-01 5.996811000000000E-03 1.517525000000000E-06 4.332584000000000E-03 1.649397000000000E-02 2.723495000000000E-03 2.644053000000000E-04 9.696204000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.978833000000000E-05 0.000000000000000E+00 4.031025000000000E-03 9.388963422777000E+39 7.761402349453000E+13 3.315067710868000E+13 + 106 1.441209614240000E+31 5.608790093200000E+33 9.291084515659494E+13 2.084390583515350E+07 1.278308791466206E-10 7.701560627253885E+03 4.180224773176583E+04 4.180224773176583E+04 1.946472218512700E-01 3.959254470192826E+03 5.615874629000000E+33 9.341743288535817E+13 3.827858000000000E-03 0.000000000000000E+00 7.285775000000000E-01 9.996972000000000E-02 3.952863000000000E-05 1.348006000000000E-01 5.967939000000000E-03 1.842613000000000E-06 4.161109000000000E-03 1.567359000000000E-02 2.591968000000000E-03 2.521496000000000E-04 9.288269000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.973388000000000E-05 0.000000000000000E+00 4.020231000000000E-03 9.648963422777000E+39 7.701287174206000E+13 3.314952535621000E+13 + 107 1.416737282320000E+31 5.622959164800000E+33 9.392402061412142E+13 2.107884824753000E+07 1.275368762830766E-10 7.630952295011509E+03 4.170610522990892E+04 4.170610522990892E+04 1.946460700988000E-01 3.934103798727329E+03 5.630376891600000E+33 9.444025484297742E+13 3.876744000000000E-03 0.000000000000000E+00 7.289979000000000E-01 9.990208000000000E-02 3.999612000000000E-05 1.344651000000000E-01 5.966167000000000E-03 1.864404000000000E-06 4.151461000000000E-03 1.562744000000000E-02 2.584569000000000E-03 2.514601000000000E-04 9.265317999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.973077000000000E-05 0.000000000000000E+00 4.019504000000000E-03 9.898848247530000E+39 7.691171998959000E+13 3.304952535621000E+13 + 108 1.483683410480000E+31 5.637794618400000E+33 9.495648907183342E+13 2.134884824753000E+07 1.263676111731090E-10 7.560991303850158E+03 4.161018384967023E+04 4.161018384967023E+04 1.942472218512700E-01 3.908761194612620E+03 5.647585460800000E+33 9.563428143411222E+13 4.647231000000000E-03 0.000000000000000E+00 7.356234000000000E-01 9.883594000000000E-02 4.736410000000000E-05 1.291769000000000E-01 5.938235000000000E-03 2.207860000000000E-06 3.999400000000000E-03 1.490009000000000E-02 2.467954000000000E-03 2.405935000000000E-04 8.903590000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.968184000000000E-05 0.000000000000000E+00 4.008055000000000E-03 1.019884824753000E+40 7.611056823712000E+13 3.294952535621000E+13 + 109 1.958178823840000E+31 5.657376303199999E+33 9.631207379639103E+13 2.169379065990650E+07 1.254977026566311E-10 7.491671718911192E+03 4.151448308248421E+04 4.151448308248421E+04 1.940472218512700E-01 3.875750554708823E+03 5.669947052600000E+33 9.717152639215859E+13 4.745619000000000E-03 0.000000000000000E+00 7.363452000000000E-01 9.871479000000000E-02 4.829347000000000E-05 1.285930000000000E-01 5.934924000000000E-03 2.251183000000000E-06 3.982635000000000E-03 1.481991000000000E-02 2.455099000000000E-03 2.393956000000000E-04 8.863710000000001E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.967638000000000E-05 0.000000000000000E+00 4.006606000000000E-03 1.049884824753000E+40 7.561056823712000E+13 3.274837360374000E+13 + 110 2.514036495600000E+31 5.682517802000000E+33 9.803097898792614E+13 2.206379065990650E+07 1.232071114368812E-10 7.354933299822008E+03 4.132374135885304E+04 4.132374135885304E+04 1.933472218512700E-01 3.834804700495653E+03 5.694537543000000E+33 9.884307790984673E+13 5.851036000000000E-03 0.000000000000000E+00 7.439444000000000E-01 9.741540999999999E-02 5.867489000000000E-05 1.224075000000000E-01 5.898792000000000E-03 2.735109000000000E-06 3.805162000000000E-03 1.397123000000000E-02 2.319027000000000E-03 2.267154000000000E-04 8.441565000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.961830000000000E-05 0.000000000000000E+00 3.990400000000000E-03 1.099884824753000E+40 7.420826473218000E+13 3.234837360374000E+13 + 111 2.403944221600000E+31 5.706557284000000E+33 9.965517683176734E+13 2.240379065990650E+07 1.204025751825707E-10 7.220690638149455E+03 4.113387601383569E+04 4.113387601383569E+04 1.925472218512700E-01 3.797151969990961E+03 5.717522749000000E+33 1.003891763589626E+14 6.905274000000000E-03 0.000000000000000E+00 7.498231000000000E-01 9.634212000000000E-02 6.840493000000000E-05 1.175142000000000E-01 5.867210000000000E-03 3.188671000000000E-06 3.665098000000000E-03 1.330164000000000E-02 2.211667000000000E-03 2.167103000000000E-04 8.108433999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.957162000000000E-05 0.000000000000000E+00 3.975142000000000E-03 1.139884824753000E+40 7.260480947477000E+13 3.174837360374000E+13 + 112 2.193234233200000E+31 5.728488214000000E+33 1.011231758861579E+14 2.273379065990650E+07 1.179331166087460E-10 7.154490948466661E+03 4.103927072427291E+04 4.103927072427291E+04 1.917472218512700E-01 3.763956766237455E+03 5.740098179800000E+33 1.018894008516455E+14 7.452147000000000E-03 0.000000000000000E+00 7.525421000000000E-01 9.582557000000000E-02 7.340433000000000E-05 1.152186000000000E-01 5.851531000000000E-03 3.421716000000000E-06 3.599488000000000E-03 1.298803000000000E-02 2.161383000000000E-03 2.120241000000000E-04 7.952391000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.954951000000000E-05 0.000000000000000E+00 3.967282000000000E-03 1.179884824753000E+40 7.100365772230000E+13 3.114722185127000E+13 + 113 2.321851926800000E+31 5.751708145600000E+33 1.026556258171332E+14 2.307379065990650E+07 1.160474964800288E-10 7.023906772012197E+03 4.085071240309712E+04 4.085071240309712E+04 1.981506771086800E-01 3.728719447765625E+03 5.763955650000000E+33 1.034526524697013E+14 7.948410000000000E-03 0.000000000000000E+00 7.546819000000000E-01 9.539681000000000E-02 7.788402000000000E-05 1.133758000000000E-01 5.838012000000000E-03 3.630535000000000E-06 3.546923000000000E-03 1.273685000000000E-02 2.121106000000000E-03 2.082703000000000E-04 7.827384000000001E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.953153000000000E-05 0.000000000000000E+00 3.960217000000000E-03 1.219884824753000E+40 6.990135421736000E+13 3.074607009880000E+13 + 114 2.449550610000000E+31 5.776203154400000E+33 1.042496791222696E+14 2.340373307228300E+07 1.141886206628069E-10 6.895706025387131E+03 4.066302042871210E+04 4.066302042871210E+04 1.975506771086800E-01 3.692761920380701E+03 5.787420253199999E+33 1.049692320923227E+14 9.420783000000000E-03 0.000000000000000E+00 7.607274000000001E-01 9.416192000000000E-02 9.111489000000000E-05 1.081309000000000E-01 5.798569000000000E-03 4.247287000000000E-06 3.397424000000000E-03 1.202252000000000E-02 2.006564000000000E-03 1.975950000000000E-04 7.471864000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.948012000000000E-05 0.000000000000000E+00 3.939323000000000E-03 1.269884824753000E+40 6.879905071242000E+13 3.044491834633000E+13 + 115 2.243342181200000E+31 5.798637352000000E+33 1.056887850623758E+14 2.370373307228300E+07 1.126218940522507E-10 6.832485812543085E+03 4.056949807694383E+04 4.056949807694383E+04 1.969506771086800E-01 3.660842213317558E+03 5.809325323600000E+33 1.063672136232389E+14 1.027863000000000E-02 0.000000000000000E+00 7.636500000000001E-01 9.351605000000000E-02 9.869933999999999E-05 1.055150000000000E-01 5.776913000000000E-03 4.600834000000000E-06 3.323081000000000E-03 1.166743000000000E-02 1.949624000000000E-03 1.922879000000000E-04 7.295090999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.945399000000000E-05 0.000000000000000E+00 3.927295000000000E-03 1.309884824753000E+40 6.779789895995000E+13 3.014376659386000E+13 + 116 2.137650017600000E+31 5.820013295200001E+33 1.070456421841019E+14 2.399873307228300E+07 1.108211944992684E-10 6.707778892177413E+03 4.038309816502227E+04 4.038309816502227E+04 1.963506771086800E-01 3.631318201673040E+03 5.831021527999999E+33 1.077377627573395E+14 1.124199000000000E-02 0.000000000000000E+00 7.666495000000000E-01 9.282565000000000E-02 1.071455000000000E-04 1.027843000000000E-01 5.753234000000000E-03 4.994550000000000E-06 3.245597000000000E-03 1.129740000000000E-02 1.890287000000000E-03 1.867572000000000E-04 7.110858000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.942646000000000E-05 0.000000000000000E+00 3.913869000000000E-03 1.349884824753000E+40 6.669559545501000E+13 2.974376659386000E+13 + 117 2.201736074000000E+31 5.842029760799999E+33 1.084298833305770E+14 2.429373307228300E+07 1.090492861409947E-10 6.646281605646833E+03 4.029021961659520E+04 4.029021961659520E+04 1.957506771086800E-01 3.601770476668473E+03 5.852897755000000E+33 1.091093482276184E+14 1.220706000000000E-02 0.000000000000000E+00 7.693859000000000E-01 9.216728000000000E-02 1.155352000000000E-04 1.002455000000000E-01 5.730127000000000E-03 5.385629000000000E-06 3.173679000000000E-03 1.095403000000000E-02 1.835223000000000E-03 1.816245000000000E-04 6.939869000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.940059000000000E-05 0.000000000000000E+00 3.900502000000000E-03 1.389884824753000E+40 6.569329195007000E+13 2.934376659386000E+13 + 118 2.173491423200000E+31 5.863765749200000E+33 1.097888131246597E+14 2.457373307228300E+07 1.068126836910720E-10 6.524973295075297E+03 4.010510287264155E+04 4.010510287264155E+04 1.949506771086800E-01 3.573474095902363E+03 5.874152357000000E+33 1.104352268676465E+14 1.393432000000000E-02 0.000000000000000E+00 7.735661000000000E-01 9.107830000000000E-02 1.303309000000000E-04 9.622664000000000E-02 5.690449000000000E-03 6.075325000000000E-06 3.060179000000000E-03 1.041232000000000E-02 1.748351000000000E-03 1.735265000000000E-04 6.670049000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.935888000000000E-05 0.000000000000000E+00 3.876834000000000E-03 1.420000000000000E+40 6.439214019760000E+13 2.894261484139000E+13 + 119 2.077440912000000E+31 5.884538964800000E+33 1.110816406106332E+14 2.484367548465950E+07 1.048631325021542E-10 6.465151980332862E+03 4.001286369564460E+04 4.001286369564460E+04 1.941506771086800E-01 3.547153926456088E+03 5.894486954000000E+33 1.116988529514433E+14 1.542783000000000E-02 0.000000000000000E+00 7.767676999999999E-01 9.018849000000000E-02 1.429776000000000E-04 9.305350000000000E-02 5.657132000000000E-03 6.664851000000000E-06 2.970785000000000E-03 9.985805000000000E-03 1.679948000000000E-03 1.671498000000000E-04 6.457553999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.932546000000000E-05 0.000000000000000E+00 3.856539000000000E-03 1.460000000000000E+40 6.309098844513000E+13 2.844261484139000E+13 + 120 1.989448650000000E+31 5.904434943200000E+33 1.123160652922535E+14 2.510867548465950E+07 1.027123881244455E-10 6.347149658003325E+03 3.982902128639281E+04 3.982902128639281E+04 1.933518288611500E-01 3.522639461932865E+03 5.914711150400000E+33 1.129485715944968E+14 1.676063000000000E-02 0.000000000000000E+00 7.792340000000000E-01 8.944371000000000E-02 1.541106000000000E-04 9.050738000000000E-02 5.628358000000000E-03 7.183808000000000E-06 2.899282000000000E-03 9.644784000000000E-03 1.625254000000000E-03 1.620507000000000E-04 6.287607000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.929814000000000E-05 0.000000000000000E+00 3.838606000000000E-03 1.500000000000000E+40 6.188868494019000E+13 2.804146308892000E+13 + 121 2.055321008000000E+31 5.924987357600000E+33 1.135810778967401E+14 2.537873307228300E+07 1.013031213273312E-10 6.288958640164933E+03 3.973741707942399E+04 3.973741707942399E+04 2.009518288611500E-01 3.496888342366021E+03 5.936038358199999E+33 1.142512930007579E+14 1.818130000000000E-02 0.000000000000000E+00 7.815797000000000E-01 8.868582000000000E-02 1.658527000000000E-04 8.800015999999999E-02 5.598398000000000E-03 7.731164000000000E-06 2.829051000000000E-03 9.309939999999999E-03 1.571549000000000E-03 1.570436000000000E-04 6.120701000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.927084000000000E-05 0.000000000000000E+00 3.819635000000000E-03 1.530000000000000E+40 6.098753318772000E+13 2.774146308892000E+13 + 122 2.210162325200000E+31 5.947089358799999E+33 1.149215081047756E+14 2.565873307228300E+07 1.003743687284676E-10 6.174172208719695E+03 3.955484023241576E+04 3.955484023241576E+04 2.007506771086800E-01 3.469879211809458E+03 5.958328338800000E+33 1.155942272067774E+14 1.968343000000000E-02 0.000000000000000E+00 7.837777000000000E-01 8.792052000000000E-02 1.781317000000000E-04 8.555490000000000E-02 5.567447000000000E-03 8.303543000000000E-06 2.760748000000000E-03 8.984400999999999E-03 1.519334000000000E-03 1.521751000000000E-04 5.958391000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.924379000000000E-05 0.000000000000000E+00 3.799734000000000E-03 1.570000000000000E+40 6.048638143525000E+13 2.764031133645000E+13 + 123 2.247907395200000E+31 5.969567318800000E+33 1.162669463087793E+14 2.593873307228300E+07 9.945117246169967E-11 6.117567057668589E+03 3.946386662437207E+04 3.946386662437207E+04 2.007449183463300E-01 3.443019321327713E+03 5.981057932600000E+33 1.169478284810355E+14 2.119060000000000E-02 0.000000000000000E+00 7.857351000000000E-01 8.718457000000000E-02 1.903194000000000E-04 8.328209000000000E-02 5.537045000000000E-03 8.871669000000000E-06 2.697443000000000E-03 8.682791000000000E-03 1.470956000000000E-03 1.476640000000000E-04 5.807975000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.921824000000000E-05 0.000000000000000E+00 3.779919000000000E-03 1.610115175247000E+40 5.988522968278000E+13 2.744031133645000E+13 + 124 2.298017332400000E+31 5.992548546400000E+33 1.176287106532918E+14 2.621873307228300E+07 9.808665122094592E-11 6.005908875152966E+03 3.928254662753809E+04 3.928254662753809E+04 2.007391595839800E-01 3.416207318677828E+03 6.004265929000000E+33 1.183208576164509E+14 2.275471000000000E-02 0.000000000000000E+00 7.875404000000000E-01 8.645012000000001E-02 2.028350000000000E-04 8.108795000000001E-02 5.506106000000000E-03 9.455079000000000E-06 2.636504000000000E-03 8.392564000000000E-03 1.424401000000000E-03 1.433227000000000E-04 5.663197000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.919319000000000E-05 0.000000000000000E+00 3.759510000000000E-03 1.650115175247000E+40 5.908292617784000E+13 2.714031133645000E+13 + 125 2.343566034000000E+31 6.015983311599999E+33 1.190130045796100E+14 2.650867548465950E+07 9.629636807388228E-11 5.950846371616532E+03 3.919219927740716E+04 3.919219927740716E+04 2.006299455642200E-01 3.389463845521448E+03 6.028557044799999E+33 1.197483035010838E+14 2.557572000000000E-02 0.000000000000000E+00 7.902967000000000E-01 8.519079000000000E-02 2.250861000000000E-04 7.749369000000000E-02 5.451693000000000E-03 1.049231000000000E-05 2.537091000000000E-03 7.919351999999999E-03 1.348489000000000E-03 1.362432000000000E-04 5.427050000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.915124000000000E-05 0.000000000000000E+00 3.723072000000000E-03 1.690115175247000E+40 5.788177442537001E+13 2.673915958398000E+13 + 126 2.514581536400000E+31 6.041130777999999E+33 1.204836024225574E+14 2.681861789703600E+07 9.497231350278104E-11 5.842231184562477E+03 3.901212747865170E+04 3.901212747865170E+04 2.005241868018700E-01 3.361458481157182E+03 6.055142702800000E+33 1.213047756675378E+14 2.560439000000000E-02 0.000000000000000E+00 7.903208000000000E-01 8.517851000000000E-02 2.253095000000000E-04 7.746003999999999E-02 5.451151000000000E-03 1.050272000000000E-05 2.536164000000000E-03 7.914941000000000E-03 1.347781000000000E-03 1.361772000000000E-04 5.424848000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.915084000000000E-05 0.000000000000000E+00 3.722705000000000E-03 1.740115175247000E+40 5.717947092043001E+13 2.633915958398000E+13 + 127 2.802396895200000E+31 6.069154627600000E+33 1.221259489125182E+14 2.712861789703600E+07 9.217431260754641E-11 5.787955829630898E+03 3.892133037109394E+04 3.892133037109394E+04 2.002138210296400E-01 3.331150939603086E+03 6.082745836600000E+33 1.229274163000014E+14 2.908491000000000E-02 0.000000000000000E+00 7.929967000000000E-01 8.372093999999999E-02 2.522158000000000E-04 7.355112000000000E-02 5.386137000000000E-03 1.175695000000000E-05 2.428692000000000E-03 7.403758000000000E-03 1.265770000000000E-03 1.285280000000000E-04 5.169613000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.910379000000000E-05 0.000000000000000E+00 3.678381000000000E-03 1.800115175247000E+40 5.557601566302001E+13 2.583685607904000E+13 + 128 2.718371098000000E+31 6.096337045600000E+33 1.237288836874846E+14 2.741861789703600E+07 8.924769685681600E-11 5.682313730030672E+03 3.874250310191543E+04 3.874250310191543E+04 1.998023035049400E-01 3.302568838557565E+03 6.109156444999999E+33 1.244810099768240E+14 3.227876000000000E-02 0.000000000000000E+00 7.949190000000000E-01 8.245515000000000E-02 2.764491000000000E-04 7.034996000000000E-02 5.328108000000000E-03 1.288657000000000E-05 2.341205000000000E-03 6.987962000000000E-03 1.199057000000000E-03 1.223047000000000E-04 4.961890000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.906408000000000E-05 0.000000000000000E+00 3.638236000000000E-03 1.860115175247000E+40 5.377371215808001E+13 2.513570432657000E+13 + 129 2.563852031200000E+31 6.121975844400000E+33 1.252331362661634E+14 2.769861789703600E+07 8.741722529204262E-11 5.579287467080402E+03 3.856555934817215E+04 3.856555934817215E+04 2.079953929901200E-01 3.275219201706874E+03 6.135006098999999E+33 1.259955068141417E+14 3.276228000000000E-02 0.000000000000000E+00 7.951362000000000E-01 8.227365000000000E-02 2.800437000000000E-04 6.991855000000000E-02 5.319563000000000E-03 1.305413000000000E-05 2.329494000000000E-03 6.932355000000000E-03 1.190134000000000E-03 1.214722000000000E-04 4.934093000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.905855000000000E-05 0.000000000000000E+00 3.632244000000000E-03 1.920000000000000E+40 5.267140865314001E+13 2.463570432657000E+13 + 130 2.606094682400000E+31 6.148036353600000E+33 1.267578773621201E+14 2.799361789703600E+07 8.562176115967057E-11 5.477453994323332E+03 3.838836669836233E+04 3.838836669836233E+04 2.076988482475300E-01 3.248105061688262E+03 6.163032932399999E+33 1.276275927951725E+14 3.627512000000000E-02 0.000000000000000E+00 7.967144000000000E-01 8.095498000000000E-02 3.061585000000000E-04 6.678436000000000E-02 5.257480000000000E-03 1.427147000000000E-05 2.244417000000000E-03 6.528368000000000E-03 1.125309000000000E-03 1.154242000000000E-04 4.732142000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.901837000000000E-05 0.000000000000000E+00 3.588711000000000E-03 1.980000000000000E+40 5.156910514820000E+13 2.433340082163000E+13 + 131 2.999204364800000E+31 6.178029511200000E+33 1.284973082282249E+14 2.831856030941250E+07 8.425276387594302E-11 5.377479191913539E+03 3.821198817482682E+04 3.821198817482682E+04 2.072069105148200E-01 3.217739687664980E+03 6.194417535400000E+33 1.294492662437318E+14 3.693887000000000E-02 0.000000000000000E+00 7.969398000000000E-01 8.071597000000000E-02 3.110112000000000E-04 6.624457000000000E-02 5.245998000000000E-03 1.449767000000000E-05 2.229850000000000E-03 6.459256000000000E-03 1.114218000000000E-03 1.143893000000000E-04 4.697574000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.901126000000000E-05 0.000000000000000E+00 3.580580000000000E-03 2.050115175247000E+40 5.076680164326000E+13 2.393340082163000E+13 + 132 3.277608818400000E+31 6.210805559600000E+33 1.304012242592388E+14 2.865350272178900E+07 8.176573123192848E-11 5.279329135293896E+03 3.803642003699514E+04 3.803642003699514E+04 2.066172762870500E-01 3.185575603360326E+03 6.227016544999999E+33 1.313493766652959E+14 4.177754000000000E-02 0.000000000000000E+00 7.983396000000000E-01 7.900826000000000E-02 3.460681000000000E-04 6.248373000000000E-02 5.163178000000000E-03 1.613184000000000E-05 2.128674000000000E-03 5.979402000000000E-03 1.037207000000000E-03 1.072030000000000E-04 4.457496000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.896100000000000E-05 0.000000000000000E+00 3.521671000000000E-03 2.140000000000000E+40 4.926449813832000E+13 2.343224906916000E+13 + 133 3.242236864000000E+31 6.243227530399999E+33 1.322975290713529E+14 2.898344513416550E+07 7.880818489916962E-11 5.182970519100263E+03 3.786165856148314E+04 3.786165856148314E+04 2.058276420592800E-01 3.154816708328172E+03 6.259019789200000E+33 1.332380518190313E+14 4.611983000000000E-02 0.000000000000000E+00 7.990718000000000E-01 7.755078000000000E-02 3.768126000000000E-04 5.948398000000000E-02 5.090785000000000E-03 1.756498000000000E-05 2.048664000000000E-03 5.600384000000000E-03 9.763716000000000E-04 1.015249000000000E-04 4.267707000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.891930000000000E-05 0.000000000000000E+00 3.469617000000000E-03 2.220000000000000E+40 4.746334638585000E+13 2.273109731669000E+13 + 134 3.158491543999999E+31 6.274812048000000E+33 1.341785745667097E+14 2.929844513416550E+07 7.526123229651355E-11 5.088370645859877E+03 3.768770004201408E+04 3.768770004201408E+04 2.048368560790400E-01 3.125818722379553E+03 6.289504279200000E+33 1.350691359952914E+14 5.100808000000000E-02 0.000000000000000E+00 7.993958000000000E-01 7.598470000000000E-02 4.106305000000000E-04 5.646283000000000E-02 5.011359000000000E-03 1.914139000000000E-05 1.968804000000000E-03 5.222492000000000E-03 9.157088000000001E-04 9.586191000000001E-05 4.078336000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.887590000000000E-05 0.000000000000000E+00 3.411978000000000E-03 2.300000000000000E+40 4.535989112844000E+13 2.183109731669000E+13 + 135 2.938497959200000E+31 6.304196510399999E+33 1.359596974238731E+14 2.958344513416550E+07 7.203960535256682E-11 4.995497414896212E+03 3.751454078934020E+04 3.751454078934020E+04 2.039449183463300E-01 3.099650828684737E+03 6.316817984400000E+33 1.367387225435791E+14 5.283310000000000E-02 0.000000000000000E+00 7.994297000000000E-01 7.541258000000001E-02 4.231045000000000E-04 5.539719000000000E-02 4.982030000000000E-03 1.972286000000000E-05 1.940772000000000E-03 5.089967000000000E-03 8.944324000000000E-04 9.387541000000001E-05 4.011881000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.886014000000000E-05 0.000000000000000E+00 3.390602000000000E-03 2.380000000000000E+40 4.335643587103000E+13 2.092879381175000E+13 + 136 2.524211253600000E+31 6.329439458399999E+33 1.375177476632850E+14 2.982838754654200E+07 6.895588314189727E-11 4.904319311436017E+03 3.734217713116410E+04 3.734217713116410E+04 2.030506771086800E-01 3.077836132257430E+03 6.339606259600001E+33 1.381546476905256E+14 5.491474000000000E-02 0.000000000000000E+00 7.993630000000000E-01 7.477646000000000E-02 4.371351000000000E-04 5.425598000000000E-02 4.949068000000000E-03 2.037689000000000E-05 1.910925000000000E-03 4.948957000000000E-03 8.717920000000000E-04 9.176133000000000E-05 3.941139000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.884297000000000E-05 0.000000000000000E+00 3.366468000000000E-03 2.449884824753000E+40 4.155413236609000E+13 2.012764205928000E+13 + 137 2.033286639600000E+31 6.349773060800000E+33 1.387915477177660E+14 3.003838754654200E+07 6.661292782166749E-11 4.858757322716815E+03 3.725526667811908E+04 3.725526667811908E+04 2.166403113364500E-01 3.059454293487160E+03 6.359265523200000E+33 1.393820592796068E+14 6.099373000000000E-02 0.000000000000000E+00 7.988717000000000E-01 7.296538000000000E-02 4.774821000000000E-04 5.113221000000000E-02 4.854200000000000E-03 2.225766000000000E-05 1.829733000000000E-03 4.565692000000000E-03 8.102493000000000E-04 8.601385000000000E-05 3.748745000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.879482000000000E-05 0.000000000000000E+00 3.296711000000000E-03 2.500000000000000E+40 4.015182886115000E+13 1.962649030681000E+13 + 138 1.898495662720000E+31 6.368757985600000E+33 1.399725708414476E+14 3.024338754654200E+07 6.585235716307236E-11 4.770662994715138E+03 3.708511539193623E+04 3.708511539193623E+04 2.161449183463300E-01 3.042644398606498E+03 6.378414557000000E+33 1.405724598881985E+14 6.216291000000000E-02 0.000000000000000E+00 7.987320000000000E-01 7.262414000000000E-02 4.851466000000000E-04 5.056325000000000E-02 4.836166000000000E-03 2.261493000000000E-05 1.815027000000000E-03 4.496327000000000E-03 7.991099000000000E-04 8.497340000000000E-05 3.713905000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.878586000000000E-05 0.000000000000000E+00 3.283404000000000E-03 2.550000000000000E+40 3.965182886115000E+13 1.942649030681000E+13 + 139 1.931450341280000E+31 6.388071128400000E+33 1.411723489349493E+14 3.045338754654200E+07 6.494691436414201E-11 4.726342696678775E+03 3.699880322624170E+04 3.699880322624170E+04 2.155495253562100E-01 3.025848727078071E+03 6.397776435200000E+33 1.417703787452311E+14 6.599466000000000E-02 0.000000000000000E+00 7.980983000000000E-01 7.153442000000000E-02 5.098399000000000E-04 4.882179000000000E-02 4.777960000000000E-03 2.376600000000000E-05 1.770340000000000E-03 4.285770000000000E-03 7.652925000000001E-04 8.181423000000000E-05 3.608073000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875771000000000E-05 0.000000000000000E+00 3.240282000000000E-03 2.599884824753000E+40 3.905182886115000E+13 1.922649030681000E+13 + 140 1.940982985520000E+31 6.407481741999999E+33 1.423684085555129E+14 3.065838754654200E+07 6.435147747420681E-11 4.683011326379982E+03 3.691370834017947E+04 3.691370834017947E+04 2.150541323660900E-01 3.009296721324107E+03 6.416994096400000E+33 1.429501341561412E+14 6.702814999999999E-02 0.000000000000000E+00 7.979274000000000E-01 7.124050000000000E-02 5.165000000000000E-04 4.835209000000000E-02 4.762260000000000E-03 2.407646000000000E-05 1.758288000000000E-03 4.228979000000000E-03 7.561714000000000E-04 8.096215000000000E-05 3.579528000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875011000000000E-05 0.000000000000000E+00 3.228651000000000E-03 2.649884824753000E+40 3.875067710868000E+13 1.902764205928000E+13 + 141 1.902494352560000E+31 6.426506450800000E+33 1.435318597567695E+14 3.089838754654200E+07 6.376337922360991E-11 4.598103456235316E+03 3.674511701036492E+04 3.674511701036492E+04 2.145575876235000E-01 2.993379934626356E+03 6.439469072600000E+33 1.443276237698998E+14 6.702824000000000E-02 0.000000000000000E+00 7.979273000000000E-01 7.124047999999999E-02 5.165006000000000E-04 4.835205000000000E-02 4.762259000000000E-03 2.407649000000000E-05 1.758287000000000E-03 4.228974000000000E-03 7.561707000000000E-04 8.096207999999999E-05 3.579526000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875011000000000E-05 0.000000000000000E+00 3.228650000000000E-03 2.699884824753000E+40 3.844952535621000E+13 1.892649030681000E+13 + 142 2.592554198000000E+31 6.452431694399999E+33 1.451233877830302E+14 3.118338754654200E+07 6.231011065596897E-11 4.555386266652208E+03 3.665959615936189E+04 3.665959615936189E+04 2.137621946333800E-01 2.972181840677508E+03 6.466560981999999E+33 1.460011184081916E+14 7.134930000000000E-02 0.000000000000000E+00 7.969986999999999E-01 7.004705000000000E-02 5.437908000000000E-04 4.653740000000000E-02 4.697759000000000E-03 2.534861000000000E-05 1.712139000000000E-03 4.011812000000000E-03 7.212872000000000E-04 7.770260000000000E-05 3.470273000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.871983000000000E-05 0.000000000000000E+00 3.180658000000000E-03 2.769884824753000E+40 3.754837360374000E+13 1.852649030681000E+13 + 143 2.825861498400000E+31 6.480690269599999E+33 1.468788490333530E+14 3.144838754654200E+07 6.019473716915143E-11 4.472792371692168E+03 3.649116061494809E+04 3.649216540409844E+04 2.127668016432600E-01 2.949699174664599E+03 6.491704469999999E+33 1.475667805494754E+14 7.671566000000000E-02 0.000000000000000E+00 7.956231000000000E-01 6.860292000000000E-02 5.770397999999999E-04 4.443776000000000E-02 4.618924000000000E-03 2.689850000000000E-05 1.659199000000000E-03 3.762993000000000E-03 6.813126000000000E-04 7.396663999999999E-05 3.344984000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.868376000000000E-05 0.000000000000000E+00 3.121793000000000E-03 2.839884824753000E+40 3.624607009880000E+13 1.802533855434000E+13 + 144 2.202834112400000E+31 6.502718670399999E+33 1.482547120655979E+14 3.168338754654200E+07 5.855426346727620E-11 4.431239344117645E+03 3.632449913412750E+04 3.640723327449273E+04 2.118702569006700E-01 2.932630552983685E+03 6.513588653800000E+33 1.489376985005082E+14 7.680555000000000E-02 0.000000000000000E+00 7.955985000000000E-01 6.857899000000001E-02 5.775923000000000E-04 4.440366000000000E-02 4.617612000000000E-03 2.692425000000000E-05 1.658342000000000E-03 3.758970000000000E-03 6.806662000000000E-04 7.390623000000000E-05 3.342958000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.868316000000000E-05 0.000000000000000E+00 3.120812000000000E-03 2.889884824753000E+40 3.524607009880000E+13 1.752533855434000E+13 + 145 2.173905176800000E+31 6.524458637200000E+33 1.496206849354185E+14 3.191838754654200E+07 5.708980012476803E-11 4.350360111116731E+03 3.623995723221085E+04 3.623995723221085E+04 2.207656498907900E-01 2.915414815751107E+03 6.535382328999999E+33 1.503058411154404E+14 8.155376000000000E-02 0.000000000000000E+00 7.941809000000000E-01 6.733628000000000E-02 6.063864000000000E-04 4.268408000000000E-02 4.549060000000000E-03 2.826648000000000E-05 1.615415000000000E-03 3.557508000000000E-03 6.482945000000000E-04 7.088006000000000E-05 3.241410000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.865264000000000E-05 0.000000000000000E+00 3.069442000000000E-03 2.949884824753000E+40 3.444376659386000E+13 1.722418680187000E+13 + 146 2.184726424800000E+31 6.546306020800000E+33 1.509909972954624E+14 3.215338754654200E+07 5.617699734845503E-11 4.310475769881692E+03 3.607344975353034E+04 3.615660764350333E+04 2.200691051482000E-01 2.898474126830089E+03 6.556998965400000E+33 1.516544127560026E+14 8.640918000000000E-02 0.000000000000000E+00 7.925651000000000E-01 6.609545999999999E-02 6.352623000000000E-04 4.103949000000000E-02 4.480023000000000E-03 2.961252000000000E-05 1.574734000000000E-03 3.366848000000000E-03 6.176535000000000E-04 6.801503999999999E-05 3.145213000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.862259000000000E-05 0.000000000000000E+00 3.017562000000000E-03 2.999884824753000E+40 3.384376659386000E+13 1.702418680187000E+13 + 147 2.138746066800000E+31 6.567691909999999E+33 1.523178282165428E+14 3.238338754654200E+07 5.579192227433288E-11 4.231800720518845E+03 3.599048312139686E+04 3.599048312139686E+04 2.193725604056100E-01 2.882234972936995E+03 6.578518131000000E+33 1.529885409593302E+14 8.652701000000000E-02 0.000000000000000E+00 7.925222000000000E-01 6.606604000000001E-02 6.359493000000000E-04 4.100212000000000E-02 4.478372000000000E-03 2.964454000000000E-05 1.573819000000000E-03 3.362562000000000E-03 6.169646000000000E-04 6.795061000000000E-05 3.143049000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.862189000000000E-05 0.000000000000000E+00 3.016319000000000E-03 3.049884824753000E+40 3.364261484139000E+13 1.692418680187000E+13 + 148 2.165154686000000E+31 6.589344351999999E+33 1.536592537021174E+14 3.266338754654200E+07 5.489825277044616E-11 4.193003338310288E+03 3.582512187213715E+04 3.590770730722213E+04 2.186748639105500E-01 2.866131538724314E+03 6.604585602400000E+33 1.545936343358670E+14 9.140109000000000E-02 0.000000000000000E+00 7.907458000000001E-01 6.484906999999999E-02 6.643641000000000E-04 3.945624000000000E-02 4.410113000000000E-03 3.096909000000000E-05 1.535941000000000E-03 3.185296000000000E-03 5.884712000000000E-04 6.528574999999999E-05 3.053519000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.859281000000000E-05 0.000000000000000E+00 2.964893000000000E-03 3.099769649506000E+40 3.304261484139000E+13 1.672418680187000E+13 + 149 3.048321691200000E+31 6.619826852799999E+33 1.555280149696166E+14 3.303338754654200E+07 5.439494256375599E-11 4.116472402462064E+03 3.574272637828196E+04 3.574272637828196E+04 2.177783191679600E-01 2.843994351112019E+03 6.638970913600000E+33 1.567131481651797E+14 9.203222000000000E-02 0.000000000000000E+00 7.904938000000000E-01 6.469571000000000E-02 6.679543000000000E-04 3.927094000000000E-02 4.401433000000000E-03 3.113644000000000E-05 1.531455000000000E-03 3.164336000000000E-03 5.851014000000000E-04 6.497049000000000E-05 3.042920000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.858920000000000E-05 0.000000000000000E+00 2.958335000000000E-03 3.169769649506000E+40 3.274261484139000E+13 1.652418680187000E+13 + 150 3.828674905200000E+31 6.658114974400000E+33 1.578982813607428E+14 3.346838754654200E+07 5.242742438130689E-11 4.041338313615670E+03 3.549667518059003E+04 3.557850346785519E+04 2.164817744253700E-01 2.817093081436883E+03 6.678750935199999E+33 1.591798876739961E+14 1.015930000000000E-01 0.000000000000000E+00 7.866173000000000E-01 6.238402000000000E-02 7.220810000000000E-04 3.650304000000000E-02 4.270395000000000E-03 3.365955000000000E-05 1.464581000000000E-03 2.852040000000000E-03 5.348910000000000E-04 6.027282000000000E-05 2.884952000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.853497000000000E-05 0.000000000000000E+00 2.859297000000000E-03 3.249769649506000E+40 3.154146308892000E+13 1.612303504940000E+13 + 151 4.127220008800000E+31 6.699386896000000E+33 1.604614939872492E+14 3.394844513416550E+07 5.064905245874492E-11 3.931200624913121E+03 3.533358277272683E+04 3.533358277272683E+04 2.149852296827800E-01 2.789183048052343E+03 6.721064203000000E+33 1.618283864881679E+14 1.059462000000000E-01 0.000000000000000E+00 7.846845000000000E-01 6.136488000000000E-02 7.459755000000000E-04 3.535512000000000E-02 4.212032000000000E-03 3.477338000000000E-05 1.437277000000000E-03 2.724840000000000E-03 5.144341000000000E-04 5.835810000000000E-05 2.820500000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.851149000000000E-05 0.000000000000000E+00 2.815058000000000E-03 3.329769649505999E+40 3.053915958398000E+13 1.562303504940000E+13 + 152 4.335507151600000E+31 6.742741509999999E+33 1.631952789890866E+14 3.444844513416550E+07 4.825822289412489E-11 3.858976750423353E+03 3.509034809980444E+04 3.517027348882672E+04 2.132886849401900E-01 2.761044662276931E+03 6.763535612200000E+33 1.645053435472222E+14 1.120057000000000E-01 0.000000000000000E+00 7.818510000000000E-01 5.997625000000000E-02 7.785096000000000E-04 3.385155000000000E-02 4.132015000000000E-03 3.628994000000000E-05 1.401895000000000E-03 2.560285000000000E-03 4.879643000000000E-04 5.587986000000000E-05 2.737019000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.847986000000000E-05 0.000000000000000E+00 2.754305000000000E-03 3.399654474259000E+40 2.913685607904000E+13 1.502188329693000E+13 + 153 4.158842321199999E+31 6.784329714399999E+33 1.658154081053578E+14 3.492838754654200E+07 4.683370569783407E-11 3.753808920594169E+03 3.484878784259279E+04 3.492816302910712E+04 2.292829261778400E-01 2.732909692656315E+03 6.804430580399999E+33 1.670505265620634E+14 1.201035000000000E-01 0.000000000000000E+00 7.778897000000000E-01 5.815804000000000E-02 8.210504000000000E-04 3.195683000000000E-02 4.026637000000000E-03 3.827296000000000E-05 1.357791000000000E-03 2.355532000000000E-03 4.550216000000000E-04 5.279466000000000E-05 2.633016000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.843887000000000E-05 0.000000000000000E+00 2.674181000000000E-03 3.459654474259000E+40 2.813685607904000E+13 1.462188329693000E+13 + 154 4.020077718400000E+31 6.824531446399999E+33 1.682856450187690E+14 3.537838754654200E+07 4.651267585387234E-11 3.651953240232571E+03 3.468771924606901E+04 3.468867220665093E+04 2.279875331877200E-01 2.706714870125322E+03 6.844311056599999E+33 1.694831822278011E+14 1.258656000000000E-01 0.000000000000000E+00 7.749068000000000E-01 5.690068000000000E-02 8.503748000000000E-04 3.071526000000000E-02 3.953202000000000E-03 3.963991000000000E-05 1.329357000000000E-03 2.223873000000000E-03 4.338322000000000E-04 5.080931000000000E-05 2.566013000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.841093000000000E-05 0.000000000000000E+00 2.618243000000000E-03 3.509654474259000E+40 2.803570432657000E+13 1.462188329693000E+13 + 155 3.955918061600000E+31 6.864090666800000E+33 1.706807194368331E+14 3.581838754654200E+07 4.587314571060675E-11 3.584859688508562E+03 3.444987706683823E+04 3.452834365310592E+04 2.266898366926600E-01 2.681808831784585E+03 6.883840439000000E+33 1.718658858811367E+14 1.321229000000000E-01 0.000000000000000E+00 7.715537000000000E-01 5.556171000000000E-02 8.814964000000000E-04 2.943997000000000E-02 3.874616000000000E-03 4.109064000000000E-05 1.300484000000000E-03 2.090442000000000E-03 4.123527000000000E-04 4.879612000000000E-05 2.498016000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.838146000000000E-05 0.000000000000000E+00 2.558316000000000E-03 3.569539299012000E+40 2.763570432657000E+13 1.452073154446000E+13 + 156 3.949954440000000E+31 6.903590211200000E+33 1.730510523254402E+14 3.625844513416550E+07 4.503586644124420E-11 3.487588268919068E+03 3.429065220729257E+04 3.429159425942491E+04 2.253909884451300E-01 2.657748606091394E+03 6.923667206799999E+33 1.742484711603998E+14 1.384956000000000E-01 0.000000000000000E+00 7.680220000000000E-01 5.422596000000000E-02 9.124067000000000E-04 2.821537000000000E-02 3.795827000000000E-03 4.253151000000000E-05 1.273109000000000E-03 1.964209000000000E-03 3.920267000000000E-04 4.689034000000000E-05 2.433588000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.835233000000000E-05 0.000000000000000E+00 2.498175000000000E-03 3.619424123765000E+40 2.713455257410000E+13 1.432073154446000E+13 + 157 4.015520461200000E+31 6.943744202399999E+33 1.754458899953592E+14 3.670850272178900E+07 4.401202236749542E-11 3.423514424452794E+03 3.405553258497405E+04 3.413310097165615E+04 2.239932919500700E-01 2.634139588252838E+03 6.964041999200000E+33 1.766519254095804E+14 1.446613000000000E-01 0.000000000000000E+00 7.644993000000000E-01 5.295966000000000E-02 9.415554000000000E-04 2.709698000000000E-02 3.720785000000000E-03 4.389026000000000E-05 1.248435000000000E-03 1.850680000000000E-03 3.737414000000000E-04 4.517524000000000E-05 2.375551000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.832497000000000E-05 0.000000000000000E+00 2.440845000000000E-03 3.669424123765000E+40 2.653455257410000E+13 1.402188329693000E+13 + 158 4.059443986399999E+31 6.984339796000000E+33 1.778579608238015E+14 3.717356030941250E+07 4.301018642705622E-11 3.330620939913048E+03 3.389813035732389E+04 3.389906162587464E+04 2.225944437025400E-01 2.611047084721103E+03 7.004882264399999E+33 1.790791738601122E+14 1.508140000000000E-01 0.000000000000000E+00 7.608883000000000E-01 5.172048000000000E-02 9.699104000000000E-04 2.604053000000000E-02 3.647038000000000E-03 4.521202000000000E-05 1.225427000000000E-03 1.745062000000000E-03 3.567256000000000E-04 4.357859000000000E-05 2.321470000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.829842000000000E-05 0.000000000000000E+00 2.384465000000000E-03 3.709308948518000E+40 2.593340082163000E+13 1.382073154446000E+13 + 159 4.108607064400000E+31 7.025424732799999E+33 1.803003868964227E+14 3.764856030941250E+07 4.183803944104868E-11 3.269430893489841E+03 3.374238259576839E+04 3.374238259576839E+04 2.210967472074800E-01 2.588454276549428E+03 7.045090958600000E+33 1.814827104287751E+14 1.568987000000000E-01 0.000000000000000E+00 7.572327000000000E-01 5.051714000000000E-02 9.972711999999999E-04 2.504762000000000E-02 3.575152000000000E-03 4.648743000000000E-05 1.204072000000000E-03 1.647254000000000E-03 3.409637000000000E-04 4.209904000000000E-05 2.271308000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.827283000000000E-05 0.000000000000000E+00 2.329476000000000E-03 3.739193773271000E+40 2.523224906916000E+13 1.342073154446000E+13 + 160 3.933229246399999E+31 7.064757184400000E+33 1.826650339611274E+14 3.810856030941250E+07 4.032471670480713E-11 3.209757054529648E+03 3.351102227622466E+04 3.358735043017575E+04 2.194978989599500E-01 2.567524602230071E+03 7.082957369800001E+33 1.837582202985689E+14 1.641927000000000E-01 0.000000000000000E+00 7.527416000000000E-01 4.910427000000000E-02 1.029136000000000E-03 2.392377000000000E-02 3.490402000000000E-03 4.797281000000000E-05 1.180255000000000E-03 1.538455000000000E-03 3.234251000000000E-04 4.045194000000000E-05 2.215403000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.824302000000000E-05 0.000000000000000E+00 2.264614000000000E-03 3.749193773271000E+40 2.423224906916000E+13 1.302073154446000E+13 + 161 3.640009231200000E+31 7.101157555200000E+33 1.848514066360103E+14 3.853861789703600E+07 3.931734258011370E-11 3.151172385878372E+03 3.335613673614529E+04 3.343303057268111E+04 2.418944437025400E-01 2.546731149044072E+03 7.119229437200000E+33 1.859025247333717E+14 1.743337000000000E-01 0.000000000000000E+00 7.463168000000000E-01 4.719094000000000E-02 1.071777000000000E-03 2.246938000000000E-02 3.375078000000000E-03 4.996051000000000E-05 1.150019000000000E-03 1.400834000000000E-03 3.012306000000000E-04 3.836633000000000E-05 2.144506000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.820306000000000E-05 0.000000000000000E+00 2.176307000000000E-03 3.759193773270999E+40 2.363224906916000E+13 1.282073154446000E+13 + 162 3.614300810400000E+31 7.137301319200000E+33 1.869536428307330E+14 3.895861789703600E+07 3.967996907420166E-11 3.093657007937474E+03 3.320287920907732E+04 3.327941975052601E+04 2.410955954550100E-01 2.526620077452808E+03 7.155644727000000E+33 1.880033967764116E+14 1.751725000000000E-01 0.000000000000000E+00 7.457808000000000E-01 4.703396000000000E-02 1.075263000000000E-03 2.235178000000000E-02 3.365601000000000E-03 5.012297000000000E-05 1.147590000000000E-03 1.389790000000000E-03 2.994493000000000E-04 3.819890000000000E-05 2.138812000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.819979000000000E-05 0.000000000000000E+00 2.169050000000000E-03 3.778963422777000E+40 2.393109731669000E+13 1.292073154446000E+13 + 163 3.668705430400000E+31 7.173988134799999E+33 1.890531507220902E+14 3.935861789703599E+07 3.940681408843601E-11 3.037191403951955E+03 3.305032583638396E+04 3.312651470598895E+04 2.400967472074800E-01 2.506755988215771E+03 7.191124098200000E+33 1.900279680764703E+14 1.813811000000000E-01 0.000000000000000E+00 7.417450000000000E-01 4.589270000000000E-02 1.100359000000000E-03 2.152164000000000E-02 3.296504000000000E-03 5.129283000000000E-05 1.130671000000000E-03 1.313070000000000E-03 2.870709000000000E-04 3.703494000000000E-05 2.099182000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.817617000000000E-05 0.000000000000000E+00 2.116124000000000E-03 3.788963422776999E+40 2.373109731669000E+13 1.282073154446000E+13 + 164 3.427228485600000E+31 7.208260061600000E+33 1.910027854308503E+14 3.972361789703600E+07 3.886613232950746E-11 2.981756413387817E+03 3.289847338276975E+04 3.297431219631644E+04 2.388978989599500E-01 2.488653816092414E+03 7.223970763200000E+33 1.918830467300176E+14 1.905900000000000E-01 0.000000000000000E+00 7.356394000000001E-01 4.423652000000000E-02 1.136323000000000E-03 2.035931000000000E-02 3.195879000000000E-03 5.296927000000000E-05 1.107381000000000E-03 1.207813000000000E-03 2.700811000000000E-04 3.543645000000000E-05 2.044680000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.814214000000000E-05 0.000000000000000E+00 2.039038000000000E-03 3.808848247530000E+40 2.333109731669000E+13 1.272073154446000E+13 + 165 3.142060752000000E+31 7.239681464800000E+33 1.927633080291849E+14 4.007367548465951E+07 3.868755867229300E-11 2.927333225430140E+03 3.282280899365392E+04 3.282280899365392E+04 2.379990507124200E-01 2.472443849575888E+03 7.255489637199999E+33 1.936506270282799E+14 1.907013000000000E-01 0.000000000000000E+00 7.355653000000000E-01 4.421664000000000E-02 1.136753000000000E-03 2.034552000000000E-02 3.194670000000000E-03 5.298931000000000E-05 1.107106000000000E-03 1.206572000000000E-03 2.698808000000000E-04 3.541760000000000E-05 2.044037000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.814173000000000E-05 0.000000000000000E+00 2.038112000000000E-03 3.818733072282999E+40 2.323109731669000E+13 1.262073154446000E+13 + 166 3.161674264000000E+31 7.271297809599999E+33 1.945379460273747E+14 4.042867548465950E+07 3.789407627942249E-11 2.873903372600103E+03 3.267200188497755E+04 3.267200188497755E+04 2.369002024648900E-01 2.456512943132645E+03 7.287210414999999E+33 1.954224687526801E+14 2.002177000000000E-01 0.000000000000000E+00 7.291125000000001E-01 4.255070000000000E-02 1.172313000000000E-03 1.922597000000000E-02 3.093040000000000E-03 5.464695000000000E-05 1.085155000000000E-03 1.107802000000000E-03 2.539297000000000E-04 3.391571000000000E-05 1.992734000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.810779000000000E-05 0.000000000000000E+00 1.960254000000000E-03 3.818848247529999E+40 2.282994556422000E+13 1.251957979199000E+13 + 167 3.182525058400000E+31 7.303123020400000E+33 1.963069914779856E+14 4.077867548465950E+07 3.754777066607345E-11 2.847555268107235E+03 3.252188767202591E+04 3.259685836585266E+04 2.360002024648900E-01 2.440837157779554E+03 7.318076831400000E+33 1.971439188407680E+14 2.003215000000000E-01 0.000000000000000E+00 7.290407000000000E-01 4.253299000000000E-02 1.172684000000000E-03 1.921454000000000E-02 3.091956000000000E-03 5.466424000000000E-05 1.084936000000000E-03 1.106820000000000E-03 2.537711000000000E-04 3.390076000000000E-05 1.992223000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.810743000000000E-05 0.000000000000000E+00 1.959424000000000E-03 3.828733072283000E+40 2.262994556422000E+13 1.232073154446000E+13 + 168 2.990716448400000E+31 7.333030642400000E+33 1.979808462035505E+14 4.111373307228300E+07 3.669199494483945E-11 2.795581527100004E+03 3.244708940601019E+04 3.244708940601019E+04 2.348013542173600E-01 2.426416563481115E+03 7.347420515200000E+33 1.987758877250738E+14 2.093136000000000E-01 0.000000000000000E+00 7.228200000000000E-01 4.099979000000000E-02 1.204804000000000E-03 1.822537000000000E-02 2.998083000000000E-03 5.616151000000000E-05 1.065958000000000E-03 1.021805000000000E-03 2.400338000000000E-04 3.260630000000000E-05 1.947922000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.807643000000000E-05 0.000000000000000E+00 1.887517000000000E-03 3.828617897036000E+40 2.202994556422000E+13 1.212073154446000E+13 + 169 2.878068052400000E+31 7.361810387999999E+33 1.995709292465971E+14 4.146873307228300E+07 3.652448967443715E-11 2.769616232135107E+03 3.229800857203190E+04 3.237157586212960E+04 2.492002024648900E-01 2.411944023395182E+03 7.378975194799999E+33 2.005078508271629E+14 2.096028000000000E-01 0.000000000000000E+00 7.226175000000000E-01 4.095135000000000E-02 1.205805000000000E-03 1.819494000000000E-02 2.995110000000000E-03 5.620817000000000E-05 1.065382000000000E-03 1.019237000000000E-03 2.396186000000000E-04 3.256715000000000E-05 1.946580000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.807546000000000E-05 0.000000000000000E+00 1.885240000000000E-03 3.828617897036000E+40 2.202879381175000E+13 1.202073154446000E+13 + 170 3.432947435600000E+31 7.396140001599999E+33 2.014447724077288E+14 4.187373307228300E+07 3.635560071319082E-11 2.719394169328694E+03 3.222372521365758E+04 3.222372521365758E+04 2.483025059698300E-01 2.395028760773990E+03 7.415661015800000E+33 2.024974386675272E+14 2.167377000000000E-01 0.000000000000000E+00 7.175992000000000E-01 3.976332000000000E-02 1.230237000000000E-03 1.745504000000000E-02 2.922149000000000E-03 5.734705000000000E-05 1.051464000000000E-03 9.571516000000000E-04 2.295813000000000E-04 3.162064000000000E-05 1.914130000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.805159000000000E-05 0.000000000000000E+00 1.829366000000000E-03 3.828502721789000E+40 2.182994556422000E+13 1.202073154446000E+13 + 171 3.904290364800000E+31 7.435182030000000E+33 2.035501049273257E+14 4.230373307228300E+07 3.610533051825342E-11 2.669759631998991E+03 3.207567064492176E+04 3.207567064492176E+04 2.474013542173600E-01 2.376223163150142E+03 7.455147630400000E+33 2.046135828140216E+14 2.230957000000000E-01 0.000000000000000E+00 7.130716000000000E-01 3.872439000000000E-02 1.251267000000000E-03 1.682560000000000E-02 2.858199000000000E-03 5.832737000000000E-05 1.039813000000000E-03 9.053658000000000E-04 2.212054000000000E-04 3.083032000000000E-05 1.886993000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.803082000000000E-05 0.000000000000000E+00 1.780404000000000E-03 3.828502721789000E+40 2.172879381175000E+13 1.201957979199000E+13 + 172 3.993010674000000E+31 7.475113230800000E+33 2.056770607007173E+14 4.273373307228300E+07 3.577537185827460E-11 2.621031027072784E+03 3.192829632513842E+04 3.192829632513842E+04 2.463025059698300E-01 2.357481649630084E+03 7.494960473799999E+33 2.067262896615550E+14 2.289140000000000E-01 0.000000000000000E+00 7.088852000000000E-01 3.778936000000000E-02 1.269916000000000E-03 1.627242000000000E-02 2.800531000000000E-03 5.919669000000000E-05 1.029721000000000E-03 8.606510000000000E-04 2.139703000000000E-04 3.014725000000000E-05 1.863508000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.801220000000000E-05 0.000000000000000E+00 1.736266000000000E-03 3.828387546542000E+40 2.152879381175000E+13 1.192073154446000E+13 + 173 3.969516232800000E+31 7.514807716800000E+33 2.077755186223927E+14 4.315873307228300E+07 3.528451535464433E-11 2.596686953015093E+03 3.178159912884765E+04 3.185399015932460E+04 2.452036577223000E-01 2.339326297626568E+03 7.534052232200000E+33 2.087915988230191E+14 2.362806000000000E-01 0.000000000000000E+00 7.035187000000001E-01 3.663032000000000E-02 1.292572000000000E-03 1.560658000000000E-02 2.728883000000000E-03 6.025277000000000E-05 1.017796000000000E-03 8.080418000000001E-04 2.054534000000000E-04 2.934257000000000E-05 1.835791000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.798923000000000E-05 0.000000000000000E+00 1.681449000000000E-03 3.828272371295000E+40 2.122879381175000E+13 1.181957979199000E+13 + 174 3.848915015200000E+31 7.553296747599999E+33 2.098076790236454E+14 4.357379065990650E+07 3.464050036987914E-11 2.549600655018355E+03 3.163557594494953E+04 3.170850347923414E+04 2.440036577223000E-01 2.322149917071926E+03 7.572245866800000E+33 2.108009164941545E+14 2.465423000000000E-01 0.000000000000000E+00 6.959542000000000E-01 3.504994000000000E-02 1.322797000000000E-03 1.472446000000000E-02 2.630972000000000E-03 6.166170000000000E-05 1.002294000000000E-03 7.399556000000000E-04 1.944247000000000E-04 2.829977000000000E-05 1.799804000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.795806000000000E-05 0.000000000000000E+00 1.606578000000000E-03 3.828157196048000E+40 2.082879381175000E+13 1.162073154446000E+13 + 175 3.789762174800000E+31 7.591194986000000E+33 2.117941539646637E+14 4.399884824753000E+07 3.424397384110886E-11 2.503065198586660E+03 3.156281613933936E+04 3.156281613933936E+04 2.429048094747700E-01 2.305626628046094E+03 7.611124780799999E+33 2.128343299947375E+14 2.499970000000000E-01 0.000000000000000E+00 6.933799000000000E-01 3.452878000000000E-02 1.332543000000000E-03 1.444144000000000E-02 2.598618000000000E-03 6.211600000000000E-05 9.974134000000001E-04 7.186165000000000E-04 1.909663000000000E-04 2.797249000000000E-05 1.788488000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.794783000000000E-05 0.000000000000000E+00 1.581850000000000E-03 3.818157196047999E+40 2.062764205928000E+13 1.151957979199000E+13 + 176 3.986026592800000E+31 7.631054575600000E+33 2.138745060248115E+14 4.448390583515351E+07 3.377412890597745E-11 2.457379109957367E+03 3.141779817196862E+04 3.141779817196862E+04 2.419048094747700E-01 2.288630183194427E+03 7.655350664399999E+33 2.151351100913571E+14 2.526643000000000E-01 0.000000000000000E+00 6.913824000000000E-01 3.413038000000000E-02 1.339909000000000E-03 1.422785000000000E-02 2.573862000000000E-03 6.245938000000001E-05 9.937628999999999E-04 7.026914000000000E-04 1.883845000000000E-04 2.772808000000000E-05 1.780030000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.794002000000000E-05 0.000000000000000E+00 1.562935000000000E-03 3.808042020801000E+40 2.032764205928000E+13 1.132073154446000E+13 + 177 4.859243619599999E+31 7.679646753200000E+33 2.163957141579028E+14 4.503390583515351E+07 3.323411793088997E-11 2.434555031027088E+03 3.127344650163449E+04 3.134468007958130E+04 2.633059612272400E-01 2.266568174195589E+03 7.706242357200000E+33 2.177466330563875E+14 2.635643000000000E-01 0.000000000000000E+00 6.831423000000000E-01 3.253444000000000E-02 1.368717000000000E-03 1.339286000000000E-02 2.474518000000000E-03 6.380225000000000E-05 9.797428999999999E-04 6.418021000000001E-04 1.785077000000000E-04 2.679234000000000E-05 1.747585000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.790886000000000E-05 0.000000000000000E+00 1.487076000000000E-03 3.797926845554000E+40 2.002649030681000E+13 1.122073154446000E+13 + 178 5.318941771999999E+31 7.732837961200000E+33 2.190975519548722E+14 4.557890583515350E+07 3.315768158073515E-11 2.368493308224161E+03 3.112975806698014E+04 3.112975806698014E+04 2.622071129797100E-01 2.243078333426027E+03 7.757958573400000E+33 2.203498852529793E+14 2.726322000000000E-01 0.000000000000000E+00 6.762099000000000E-01 3.123925000000000E-02 1.391363000000000E-03 1.273538000000000E-02 2.393723000000000E-03 6.485790000000000E-05 9.689520000000000E-04 5.952130000000000E-04 1.709449000000000E-04 2.607508000000000E-05 1.722653000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.788369000000000E-05 0.000000000000000E+00 1.425434000000000E-03 3.777926845554000E+40 1.992764205928000E+13 1.122073154446000E+13 + 179 5.024200018800000E+31 7.783079185599999E+33 2.216022185510864E+14 4.611896342277700E+07 3.300533587228073E-11 2.325263433405654E+03 3.098672982071438E+04 3.098672982071438E+04 2.611071129797100E-01 2.221493679164357E+03 7.810541086200001E+33 2.229526341250234E+14 2.796552000000000E-01 0.000000000000000E+00 6.707786999999999E-01 3.026306000000000E-02 1.407796000000000E-03 1.225539000000000E-02 2.332696000000000E-03 6.562390000000000E-05 9.612705000000000E-04 5.622723000000000E-04 1.655930000000000E-04 2.556689000000000E-05 1.704938000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.786480000000000E-05 0.000000000000000E+00 1.378920000000000E-03 3.777696495060000E+40 1.982764205928000E+13 1.121957979199000E+13 + 180 5.492489526000000E+31 7.838002986799999E+33 2.243030496989604E+14 4.670896342277700E+07 3.262752691673481E-11 2.282822592725591E+03 3.084351330483774E+04 3.084435872954722E+04 2.598082647321800E-01 2.198599396813334E+03 7.868165226399999E+33 2.257625150420634E+14 2.882217000000000E-01 0.000000000000000E+00 6.640920000000000E-01 2.910002000000000E-02 1.426690000000000E-03 1.169844000000000E-02 2.259861000000000E-03 6.650463000000000E-05 9.525491000000001E-04 5.250987000000000E-04 1.595488000000000E-04 2.499234000000000E-05 1.684858000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.784238000000000E-05 0.000000000000000E+00 1.323459000000000E-03 3.767581319813000E+40 1.962649030681000E+13 1.111957979199000E+13 + 181 6.032334535600000E+31 7.898327466000000E+33 2.272219803851664E+14 4.727896342277700E+07 3.225404270454077E-11 2.241156384687901E+03 3.063202765756566E+04 3.070264177412518E+04 2.585094164846500E-01 2.174261846047819E+03 7.924131368399999E+33 2.284592715478133E+14 2.958529000000000E-01 0.000000000000000E+00 6.580852000000000E-01 2.808688000000000E-02 1.442560000000000E-03 1.122491000000000E-02 2.196313000000000E-03 6.724442000000000E-05 9.452866000000000E-04 4.943279000000000E-04 1.545417000000000E-04 2.451588000000000E-05 1.668164000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.782291000000000E-05 0.000000000000000E+00 1.275115000000000E-03 3.757581319813000E+40 1.942649030681000E+13 1.101957979199000E+13 + 182 5.160824242400000E+31 7.949935270799999E+33 2.296965627104602E+14 4.774396342277700E+07 3.188483373077085E-11 2.199984372535606E+03 3.049128627480268E+04 3.056073827515835E+04 2.572094164846500E-01 2.153967952848229E+03 7.970194278199999E+33 2.306637726855662E+14 3.023868000000000E-01 0.000000000000000E+00 6.529015000000000E-01 2.723836000000000E-02 1.455348000000000E-03 1.083746000000000E-02 2.143013000000000E-03 6.784050000000000E-05 9.394660000000000E-04 4.698173000000000E-04 1.505502000000000E-04 2.413562000000000E-05 1.654806000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.780665000000000E-05 0.000000000000000E+00 1.234608000000000E-03 3.747466144566000E+40 1.922533855434000E+13 1.082073154446000E+13 + 183 4.051729868800000E+31 7.990453285600001E+33 2.316309826606721E+14 4.814896342277700E+07 3.137595962311826E-11 2.160091570042359E+03 3.042032443735474E+04 3.042115826240235E+04 2.560105682371200E-01 2.138429846977682E+03 8.009469043000001E+33 2.325427213126917E+14 3.086414000000000E-01 0.000000000000000E+00 6.479082000000000E-01 2.644098000000000E-02 1.466957000000000E-03 1.048018000000000E-02 2.092865000000000E-03 6.838165000000000E-05 9.341906000000000E-04 4.477196000000000E-04 1.469491000000000E-04 2.379224000000000E-05 1.642717000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.779141000000000E-05 0.000000000000000E+00 1.196529000000000E-03 3.747350969319000E+40 1.892533855434000E+13 1.071957979199000E+13 + 184 3.803292713200000E+31 8.028484800400000E+33 2.334544599647112E+14 4.853896342277700E+07 3.073243823343201E-11 2.140028690736717E+03 3.028138573650349E+04 3.035035963265165E+04 2.549105682371200E-01 2.124144952078650E+03 8.046662110000001E+33 2.343257349798942E+14 3.174309000000000E-01 0.000000000000000E+00 6.408373000000001E-01 2.534648000000000E-02 1.482155000000000E-03 1.000116000000000E-02 2.023934000000000E-03 6.909012000000000E-05 9.272728000000000E-04 4.189447000000000E-04 1.422556000000000E-04 2.334413000000000E-05 1.626894000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.777056000000000E-05 0.000000000000000E+00 1.144248000000000E-03 3.727350969319000E+40 1.852533855434000E+13 1.052073154446000E+13 + 185 3.635396276400000E+31 8.064839419599999E+33 2.351970099950772E+14 4.897402101040050E+07 3.031077337306225E-11 2.101223077862745E+03 3.021174048194492E+04 3.021174048194492E+04 2.807128717420601E-01 2.109318569594972E+03 8.089663640999999E+33 2.363553741671267E+14 3.284786000000000E-01 0.000000000000000E+00 6.318639000000000E-01 2.401336000000000E-02 1.499421000000000E-03 9.434947000000001E-03 1.939824000000000E-03 6.989495000000000E-05 9.193330999999999E-04 3.862378000000000E-04 1.369140000000000E-04 2.283324000000000E-05 1.608780000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.774524000000000E-05 0.000000000000000E+00 1.080557000000000E-03 3.717235794072000E+40 1.822533855434000E+13 1.051957979199000E+13 + 186 4.964846269200000E+31 8.114487862399998E+33 2.375137383391761E+14 4.949902101040050E+07 3.059032961708208E-11 2.081958948892304E+03 3.007293014334636E+04 3.014225540702684E+04 2.802128717420600E-01 2.089460423852349E+03 8.142578350199998E+33 2.388052974644507E+14 3.285587000000000E-01 0.000000000000000E+00 6.317987000000000E-01 2.400376000000000E-02 1.499543000000000E-03 9.430902999999999E-03 1.939218000000000E-03 6.990062999999999E-05 9.192768000000000E-04 3.860066000000000E-04 1.368762000000000E-04 2.282962000000000E-05 1.608652000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.774506000000000E-05 0.000000000000000E+00 1.080099000000000E-03 3.707120618825000E+40 1.842533855434000E+13 1.051957979199000E+13 + 187 5.618165192799999E+31 8.170668838000000E+33 2.400968565897253E+14 5.001902101040050E+07 3.044977981941233E-11 2.043958915527073E+03 2.993475758032101E+04 3.000376432334789E+04 2.791140234945300E-01 2.067507027895304E+03 8.195617384400000E+33 2.412288971736790E+14 3.367099000000000E-01 0.000000000000000E+00 6.251180000000000E-01 2.305077000000000E-02 1.510948000000000E-03 9.037599000000000E-03 1.878991000000000E-03 7.043230000000000E-05 9.139213000000000E-04 3.641672000000000E-04 1.333047000000000E-04 2.248739000000000E-05 1.596466000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.772703000000000E-05 0.000000000000000E+00 1.034572000000000E-03 3.697120618825000E+40 1.832533855434000E+13 1.051957979199000E+13 + 188 4.989613798400000E+31 8.220565930800000E+33 2.423609377576327E+14 5.054907859802401E+07 3.024016500954232E-11 2.006652460936049E+03 2.979721986255624E+04 2.986590954839891E+04 2.780151752470000E-01 2.048472746436417E+03 8.251147891600001E+33 2.437334746874475E+14 3.448435000000000E-01 0.000000000000000E+00 6.184041000000000E-01 2.212454000000000E-02 1.521246000000000E-03 8.664065000000000E-03 1.820378000000000E-03 7.091234000000000E-05 9.089581000000000E-04 3.441061000000000E-04 1.300200000000000E-04 2.217215000000000E-05 1.585200000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.770954000000000E-05 0.000000000000000E+00 9.903310999999999E-04 3.697005443578000E+40 1.822418680187000E+13 1.041957979199000E+13 + 189 6.116396138399999E+31 8.281729852399999E+33 2.451060116172623E+14 5.111413618564750E+07 2.989489397146802E-11 1.970026925879961E+03 2.972868815860699E+04 2.972868815860699E+04 2.769151752470000E-01 2.025748492150856E+03 8.310707523400000E+33 2.463958186332162E+14 3.526365000000000E-01 0.000000000000000E+00 6.119274000000000E-01 2.126046000000000E-02 1.530083000000000E-03 8.323373000000000E-03 1.765628000000000E-03 7.132424000000000E-05 9.045418000000000E-04 3.264211000000000E-04 1.271208000000000E-04 2.189341000000000E-05 1.575199000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.769327000000000E-05 0.000000000000000E+00 9.490719000000000E-04 3.696890268331000E+40 1.802418680187000E+13 1.041957979199000E+13 + 190 5.795526243200000E+31 8.339685194400000E+33 2.476856256491700E+14 5.161913618564750E+07 2.955181481517024E-11 1.934069882176638E+03 2.959209724383160E+04 2.959209724383160E+04 2.756163269994700E-01 2.004738018938811E+03 8.363612286599999E+33 2.487445995121197E+14 3.607977000000000E-01 0.000000000000000E+00 6.051005000000000E-01 2.037936000000000E-02 1.538281000000000E-03 7.983463000000000E-03 1.709733000000000E-03 7.170638999999999E-05 9.002427000000000E-04 3.093711000000000E-04 1.243220000000000E-04 2.162385000000000E-05 1.565488000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.767672000000000E-05 0.000000000000000E+00 9.070182000000000E-04 3.687005443578000E+40 1.782418680187000E+13 1.031842803952000E+13 + 191 4.785390591200000E+31 8.387539378799999E+33 2.498035733750696E+14 5.210907859802400E+07 2.908017511585227E-11 1.898769128483822E+03 2.945613390730318E+04 2.945613390730318E+04 2.744163269994700E-01 1.987836953383178E+03 8.414414465399999E+33 2.509911545995441E+14 3.687201000000000E-01 0.000000000000000E+00 5.984316000000000E-01 1.954684000000000E-02 1.545222000000000E-03 7.669092000000000E-03 1.656859000000000E-03 7.202995000000000E-05 8.963641000000000E-04 2.941446000000000E-04 1.218191000000000E-04 2.138232000000000E-05 1.556749000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.766111000000000E-05 0.000000000000000E+00 8.673055000000000E-04 3.686890268331000E+40 1.752418680187000E+13 1.021842803952000E+13 + 192 5.375100866400000E+31 8.441289552000001E+33 2.521787358240187E+14 5.260907859802400E+07 2.868033082831565E-11 1.881361108477964E+03 2.932079526556154E+04 2.938838667928204E+04 2.733163269994700E-01 1.969218882843580E+03 8.466466856400001E+33 2.532843230702261E+14 3.754587000000000E-01 0.000000000000000E+00 5.927264000000000E-01 1.885710000000000E-02 1.550303000000000E-03 7.413807000000000E-03 1.613006000000000E-03 7.226682000000001E-05 8.932889000000000E-04 2.821948000000000E-04 1.198520000000000E-04 2.119214000000000E-05 1.549839000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.764820000000000E-05 0.000000000000000E+00 8.344246000000000E-04 3.686775093084000E+40 1.722418680187000E+13 1.001957979199000E+13 + 193 5.035331582000000E+31 8.491644160800001E+33 2.543899103164334E+14 5.304413618564750E+07 2.828765961089325E-11 1.847022398326044E+03 2.925335930777881E+04 2.925335930777881E+04 2.947197822568799E-01 1.950784857141653E+03 8.512806265000000E+33 2.553058705460522E+14 3.837656000000000E-01 0.000000000000000E+00 5.856491000000000E-01 1.803177000000000E-02 1.555444000000000E-03 7.114954000000000E-03 1.560471000000000E-03 7.250643000000000E-05 8.897836000000000E-04 2.687363000000000E-04 1.176328000000000E-04 2.097710000000000E-05 1.541986000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.763279000000000E-05 0.000000000000000E+00 7.951140000000000E-04 3.676890268331000E+40 1.702418680187000E+13 9.978888740508000E+12 + 194 4.232581965200000E+31 8.533968369199999E+33 2.562218307756709E+14 5.344419377327100E+07 2.828682193708408E-11 1.813531937395176E+03 2.911895233069376E+04 2.911975230297101E+04 2.940186305044100E-01 1.935549355907934E+03 8.556263322799999E+33 2.571726767209158E+14 3.894723000000000E-01 0.000000000000000E+00 5.807690000000000E-01 1.747523000000000E-02 1.558504000000000E-03 6.916159000000000E-03 1.525020000000000E-03 7.264908999999999E-05 8.874914000000000E-04 2.600056000000000E-04 1.161916000000000E-04 2.083724000000000E-05 1.536861000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.762241000000000E-05 0.000000000000000E+00 7.686209000000000E-04 3.676890268331000E+40 1.702303504940000E+13 9.988773565261000E+12 + 195 4.458877335600000E+31 8.578558276399998E+33 2.581235226661608E+14 5.392413618564750E+07 2.828682193708408E-11 1.796685910225529E+03 2.905198059877902E+04 2.905198059877902E+04 2.933197822568800E-01 1.919771169231472E+03 8.608564363799999E+33 2.593914699913083E+14 3.913060000000000E-01 0.000000000000000E+00 5.791940000000000E-01 1.730035000000000E-02 1.559308000000000E-03 6.854655000000000E-03 1.513871000000000E-03 7.268658000000000E-05 8.867961000000000E-04 2.573819000000000E-04 1.157579000000000E-04 2.079507000000000E-05 1.535309000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.761915000000000E-05 0.000000000000000E+00 7.603025000000000E-04 3.686775093084000E+40 1.702303504940000E+13 9.969003915755000E+12 + 196 6.001241350400000E+31 8.638570451200001E+33 2.606594173164560E+14 5.450913618564750E+07 2.802831678872598E-11 1.764108157332016E+03 2.891849887281612E+04 2.891929333812295E+04 2.923197822568800E-01 1.898994409179315E+03 8.673181536599999E+33 2.621065678566468E+14 3.990280000000000E-01 0.000000000000000E+00 5.725468000000000E-01 1.657266000000000E-02 1.562296000000000E-03 6.600793000000000E-03 1.467462000000000E-03 7.282586000000000E-05 8.839551000000000E-04 2.467182000000000E-04 1.139940000000000E-04 2.062341000000000E-05 1.528981000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.760560000000000E-05 0.000000000000000E+00 7.257047000000000E-04 3.686775093084000E+40 1.692303504940000E+13 9.938197689026000E+12 + 197 6.922246918000000E+31 8.707792621999999E+33 2.635537183968376E+14 5.509413618564750E+07 2.777135163584394E-11 1.731909554725471E+03 2.878642125474546E+04 2.878642125474546E+04 2.911209340093500E-01 1.875594955406849E+03 8.738380550400000E+33 2.648257280822462E+14 4.061505000000000E-01 0.000000000000000E+00 5.663854000000000E-01 1.591916000000000E-02 1.564245000000000E-03 6.376940000000000E-03 1.425745000000000E-03 7.291673000000000E-05 8.815089000000000E-04 2.376478000000000E-04 1.124909000000000E-04 2.047679000000000E-05 1.523547000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.759346000000000E-05 0.000000000000000E+00 6.946666999999999E-04 3.696775093084000E+40 1.672303504940000E+13 9.877736988038000E+12 + 198 6.117585680000000E+31 8.768968478800000E+33 2.660977377676547E+14 5.562407859802400E+07 2.732731843166808E-11 1.700298642848392E+03 2.865415966313679E+04 2.865415966313679E+04 2.898209340093500E-01 1.855446639640847E+03 8.797192242999999E+33 2.672726648229918E+14 4.167992000000000E-01 0.000000000000000E+00 5.571147000000000E-01 1.497743000000000E-02 1.565521000000000E-03 6.061913000000000E-03 1.365556000000000E-03 7.297618000000000E-05 8.781718000000000E-04 2.254833000000000E-04 1.104701000000000E-04 2.027902000000000E-05 1.516166000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.757599000000000E-05 0.000000000000000E+00 6.500095000000000E-04 3.706775093084000E+40 1.652188329693000E+13 9.807391462297000E+12 + 199 5.644762786000000E+31 8.825416007199999E+33 2.684475918783290E+14 5.613413618564750E+07 2.682853865854225E-11 1.684504447806503E+03 2.852250575834198E+04 2.858747155355558E+04 2.884220857618200E-01 1.837263955072767E+03 8.853782993799999E+33 2.696209814652094E+14 4.301206000000000E-01 0.000000000000000E+00 5.454359000000000E-01 1.384858000000000E-02 1.564930000000000E-03 5.694214000000000E-03 1.293311000000000E-03 7.294867000000000E-05 8.744130000000000E-04 2.120647000000000E-04 1.082341000000000E-04 2.005928000000000E-05 1.507894000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.755508000000000E-05 0.000000000000000E+00 5.965876000000000E-04 3.716775093084000E+40 1.612303504940000E+13 9.737045936556000E+12 + 200 5.673321730400000E+31 8.882149980400001E+33 2.707943710520899E+14 5.664919377327099E+07 2.652143491602527E-11 1.653960784422513E+03 2.845690581547691E+04 2.845690581547691E+04 2.874209340093500E-01 1.819375249207921E+03 8.911385252800000E+33 2.719935229450998E+14 4.325248000000000E-01 0.000000000000000E+00 5.433194000000000E-01 1.365018000000000E-02 1.564554000000000E-03 5.630679000000000E-03 1.280603000000000E-03 7.293114000000001E-05 8.737787000000000E-04 2.098331000000000E-04 1.078614000000000E-04 2.002256000000000E-05 1.506503000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.755141000000000E-05 0.000000000000000E+00 5.872109000000000E-04 3.726659917837000E+40 1.592303504940000E+13 9.627161111803000E+12 + 201 5.847149961600000E+31 8.940620525200000E+33 2.731926748381096E+14 5.716413618564750E+07 2.627828493919224E-11 1.638597025043724E+03 2.832615820978790E+04 2.839067678361296E+04 3.084243892667600E-01 1.799937740515323E+03 8.968931814200001E+33 2.743444274719005E+14 4.383960000000000E-01 0.000000000000000E+00 5.381312000000000E-01 1.317793000000000E-02 1.563108000000000E-03 5.481648000000000E-03 1.250332000000000E-03 7.286371000000001E-05 8.723198000000000E-04 2.047666000000000E-04 1.070136000000000E-04 1.993879000000000E-05 1.503313000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.754269000000000E-05 0.000000000000000E+00 5.649227000000000E-04 3.726775093084000E+40 1.582188329693000E+13 9.566700410815000E+12 + 202 5.662223983599999E+31 8.997243103200000E+33 2.754961801056915E+14 5.763913618564750E+07 2.603736417474620E-11 1.608885761282969E+03 2.819601133477933E+04 2.826100985375312E+04 3.073255410192300E-01 1.781505594878050E+03 9.023096735599998E+33 2.765319401721838E+14 4.497146000000000E-01 0.000000000000000E+00 5.280824000000000E-01 1.229687000000000E-02 1.558955000000000E-03 5.208781000000000E-03 1.193804000000000E-03 7.267014000000000E-05 8.697157000000000E-04 1.958825000000000E-04 1.055230000000000E-04 1.979098000000000E-05 1.497642000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.752643000000000E-05 0.000000000000000E+00 5.234181000000000E-04 3.736775093084000E+40 1.572073154446000E+13 9.576585235568000E+12 + 203 5.170710566400000E+31 9.048950367999999E+33 2.775677002386762E+14 5.812919377327099E+07 2.603736417474620E-11 1.579520286693699E+03 2.813116230825074E+04 2.813116230825074E+04 3.066255410192300E-01 1.764967492239559E+03 9.079834687199998E+33 2.787950140433432E+14 4.506236000000000E-01 0.000000000000000E+00 5.272735000000000E-01 1.222730000000000E-02 1.558567000000000E-03 5.187451000000000E-03 1.189339000000000E-03 7.265203000000000E-05 8.695150000000000E-04 1.952047000000000E-04 1.054091000000000E-04 1.977966000000000E-05 1.497206000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.752514000000000E-05 0.000000000000000E+00 5.201441000000000E-04 3.746890268331000E+40 1.572073154446000E+13 9.556815586062000E+12 + 204 6.176891688800000E+31 9.110719006399999E+33 2.800223278480102E+14 5.866919377327100E+07 2.579865218514502E-11 1.565039157662309E+03 2.800191135802790E+04 2.806646243034441E+04 3.056255410192300E-01 1.745613816347865E+03 9.142631742000001E+33 2.812825148628689E+14 4.577203000000000E-01 0.000000000000000E+00 5.209354000000000E-01 1.169868000000000E-02 1.554855000000000E-03 5.027789000000000E-03 1.155381000000000E-03 7.247900000000000E-05 8.680428000000000E-04 1.903096000000000E-04 1.045844000000000E-04 1.969746000000000E-05 1.494019000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.751540000000000E-05 0.000000000000000E+00 4.953082000000000E-04 3.766890268331000E+40 1.552188329693000E+13 9.535894184086000E+12 + 205 6.382441692399999E+31 9.174544477600000E+33 2.825427018777276E+14 5.916419377327099E+07 2.550333745560311E-11 1.536473973780691E+03 2.793750874905789E+04 2.793750874905789E+04 3.044266927717000E-01 1.726046283188175E+03 9.200909334400000E+33 2.835792616795426E+14 4.653237000000000E-01 0.000000000000000E+00 5.141195000000000E-01 1.114847000000000E-02 1.550124000000000E-03 4.864226000000000E-03 1.120010000000000E-03 7.225845000000000E-05 8.665668000000000E-04 1.854857000000000E-04 1.037695000000000E-04 1.961595000000000E-05 1.490836000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.750527000000000E-05 0.000000000000000E+00 4.695058000000000E-04 3.786890268331000E+40 1.532188329693000E+13 9.486470060321000E+12 + 206 5.273007165599999E+31 9.227274191199999E+33 2.846158214813576E+14 5.962919377327101E+07 2.521140316581668E-11 1.508430163262938E+03 2.780914755611791E+04 2.780914755611791E+04 3.033266927717000E-01 1.710192848208575E+03 9.255074255799999E+33 2.857061039801252E+14 4.724433000000000E-01 0.000000000000000E+00 5.077119000000000E-01 1.064964000000000E-02 1.544927000000000E-03 4.718524000000000E-03 1.087914000000000E-03 7.201619000000000E-05 8.652828000000000E-04 1.813740000000000E-04 1.030726000000000E-04 1.954595000000000E-05 1.488079000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.749609000000000E-05 0.000000000000000E+00 4.461636000000000E-04 3.797005443578000E+40 1.522073154446000E+13 9.435894184086000E+12 + 207 5.560050714799999E+31 9.282874320399999E+33 2.867963864788928E+14 6.009919377327100E+07 2.492281062021183E-11 1.494600792400727E+03 2.774518829158963E+04 2.774518829158963E+04 3.023255410192300E-01 1.693763056292718E+03 9.309844888600000E+33 2.878544671004866E+14 4.788850000000000E-01 0.000000000000000E+00 5.018942000000000E-01 1.021149000000000E-02 1.539606000000000E-03 4.592560000000000E-03 1.059701000000000E-03 7.176817000000001E-05 8.641960000000000E-04 1.779600000000000E-04 1.024922000000000E-04 1.948741000000000E-05 1.485756000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.748803000000000E-05 0.000000000000000E+00 4.257029000000000E-04 3.816890268331000E+40 1.502073154446000E+13 9.365548658345000E+12 + 208 5.394185251200000E+31 9.336815456800000E+33 2.889125477220807E+14 6.054919377327099E+07 2.452432243707000E-11 1.467502124224457E+03 2.761771073088649E+04 2.761847118836804E+04 3.012266927717000E-01 1.678130487613816E+03 9.362087248200000E+33 2.899005512994345E+14 4.853653000000000E-01 0.000000000000000E+00 4.960222000000000E-01 9.783355000000001E-03 1.533659000000000E-03 4.471355000000000E-03 1.032112000000000E-03 7.149095999999999E-05 8.631711000000000E-04 1.748034000000000E-04 1.019537000000000E-04 1.943288000000000E-05 1.483574000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.748017000000000E-05 0.000000000000000E+00 4.057520000000000E-04 3.827005443578000E+40 1.472073154446000E+13 9.275433483098000E+12 + 209 5.054290647200000E+31 9.387359039599999E+33 2.908885548767885E+14 6.107425136089450E+07 2.424431441265883E-11 1.453868771462670E+03 2.755419175883830E+04 2.755419175883830E+04 3.219289962766400E-01 1.662708199476468E+03 9.424141336799999E+33 2.923010109332738E+14 4.925473000000000E-01 0.000000000000000E+00 4.894930000000000E-01 9.323039999999999E-03 1.526400000000000E-03 4.343102000000000E-03 1.002427000000000E-03 7.115260000000000E-05 8.621088000000000E-04 1.716006000000000E-04 1.014053000000000E-04 1.937710000000000E-05 1.481322000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.747171000000000E-05 0.000000000000000E+00 3.843502000000000E-04 3.837120618825000E+40 1.461957979199000E+13 9.234742431616000E+12 + 210 7.356481321199999E+31 9.460923633999999E+33 2.937134669897591E+14 6.173925136089449E+07 2.429948209749937E-11 1.427508617226139E+03 2.742759174749040E+04 2.742834697001947E+04 3.212289962766400E-01 1.640658256058198E+03 9.503599930800000E+33 2.953474063746973E+14 4.932429000000000E-01 0.000000000000000E+00 4.888577000000000E-01 9.280359000000000E-03 1.525607000000000E-03 4.331475000000000E-03 9.996711000000000E-04 7.111564000000000E-05 8.620152000000000E-04 1.713270000000000E-04 1.013582000000000E-04 1.937228000000000E-05 1.481125000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.747093000000000E-05 0.000000000000000E+00 3.823726000000000E-04 3.867120618825000E+40 1.462073154446000E+13 9.244627256369000E+12 + 211 8.535261349200000E+31 9.546276227599999E+33 2.969813457596356E+14 6.242425136089450E+07 2.391096024818325E-11 1.401453648605067E+03 2.730157341035800E+04 2.730232516295474E+04 3.197289962766400E-01 1.615675764080929E+03 9.586134822599999E+33 2.984902371661744E+14 5.091103000000000E-01 0.000000000000000E+00 4.743557000000000E-01 8.314439000000000E-03 1.507156000000000E-03 4.069378000000000E-03 9.372998000000000E-04 7.025553999999999E-05 8.599138000000000E-04 1.652235000000000E-04 1.003064000000000E-04 1.926442000000000E-05 1.476706000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.745321000000000E-05 0.000000000000000E+00 3.376453000000000E-04 3.897120618825000E+40 1.441957979199000E+13 9.234742431616000E+12 + 212 7.971643410399999E+31 9.625993417599998E+33 2.999991285727131E+14 6.305930894851801E+07 2.363725374956060E-11 1.375704659307207E+03 2.717613407489077E+04 2.717613407489077E+04 3.183301480291100E-01 1.592969077508994E+03 9.663883699199999E+33 3.014248229750180E+14 5.160446000000000E-01 0.000000000000000E+00 4.679810000000000E-01 7.917176000000000E-03 1.497915000000000E-03 3.964921000000000E-03 9.116090000000000E-04 6.982474000000000E-05 8.591071000000000E-04 1.629912000000000E-04 9.991832000000000E-05 1.922420000000000E-05 1.475025000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.744592000000000E-05 0.000000000000000E+00 3.193431000000000E-04 3.927235794072000E+40 1.421957979199000E+13 9.194051380134000E+12 + 213 7.578070244400000E+31 9.701773980799999E+33 3.028505173773229E+14 6.363930894851801E+07 2.331293846985102E-11 1.350595219477862E+03 2.705127108081770E+04 2.705127108081770E+04 3.170289962766400E-01 1.571895253271309E+03 9.734507261399999E+33 3.040799855648864E+14 5.238021000000000E-01 0.000000000000000E+00 4.608293000000000E-01 7.486444000000000E-03 1.486923000000000E-03 3.853442000000000E-03 8.837326000000000E-04 6.931239000000000E-05 8.582607000000000E-04 1.607078000000000E-04 9.951946000000000E-05 1.918263000000000E-05 1.473271000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.743803000000000E-05 0.000000000000000E+00 2.995536000000000E-04 3.947350969319000E+40 1.401957979199000E+13 9.134742431616000E+12 + 214 6.546759558400000E+31 9.767240542000000E+33 3.053094537524498E+14 6.415925136089449E+07 2.294019036225940E-11 1.326107522241790E+03 2.692698178009060E+04 2.692772321825504E+04 3.157289962766400E-01 1.554085839113259E+03 9.797614631399999E+33 3.064465662015442E+14 5.326811000000000E-01 0.000000000000000E+00 4.526158000000000E-01 7.012569000000000E-03 1.473432000000000E-03 3.733254000000000E-03 8.530344000000000E-04 6.868351000000000E-05 8.573671000000000E-04 1.583776000000000E-04 9.910980000000000E-05 1.913961000000000E-05 1.471430000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742935000000000E-05 0.000000000000000E+00 2.778603000000000E-04 3.977350969319000E+40 1.381957979199000E+13 9.074281730628000E+12 + 215 6.074758203999999E+31 9.827988720799999E+33 3.075836786506388E+14 6.464919377327101E+07 2.267759617463081E-11 1.313787750193529E+03 2.680400156839357E+04 2.686505144054516E+04 3.146289962766400E-01 1.537859520728443E+03 9.857006175799999E+33 3.086678388606638E+14 5.368676999999999E-01 0.000000000000000E+00 4.487335000000000E-01 6.795559000000000E-03 1.466764000000000E-03 3.679041000000000E-03 8.389660000000000E-04 6.837265999999999E-05 8.569701000000000E-04 1.573695000000000E-04 9.893165000000000E-05 1.912079000000000E-05 1.470617000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742537000000000E-05 0.000000000000000E+00 2.679532000000000E-04 3.997466144566000E+40 1.361957979199000E+13 8.994051380134000E+12 + 216 5.803524816400000E+31 9.886023630799999E+33 3.097519990706887E+14 6.513919377327099E+07 2.236711174807544E-11 1.289967410690450E+03 2.674161774134605E+04 2.674235407548606E+04 3.136289962766400E-01 1.522649135190839E+03 9.916307211599999E+33 3.108837040597112E+14 5.391420000000000E-01 0.000000000000000E+00 4.466206000000000E-01 6.680304000000000E-03 1.463015000000000E-03 3.650584000000000E-03 8.314901000000000E-04 6.819793000000000E-05 8.567640000000000E-04 1.568570000000000E-04 9.884068000000000E-05 1.911113000000000E-05 1.470196000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742326000000000E-05 0.000000000000000E+00 2.627030000000000E-04 4.017466144566000E+40 1.351842803952000E+13 8.903936204887000E+12 + 217 6.056742019600000E+31 9.946590792399999E+33 3.120154090487338E+14 6.567919377327101E+07 2.206022346994764E-11 1.277983386632940E+03 2.661948411947152E+04 2.668011372725932E+04 3.349312997815800E-01 1.505925959115650E+03 9.981998552400000E+33 3.133277895214568E+14 5.488554000000000E-01 0.000000000000000E+00 4.375801000000000E-01 6.199632000000000E-03 1.446452000000000E-03 3.533342000000000E-03 8.002935000000001E-04 6.742582000000000E-05 8.559234000000000E-04 1.548122000000000E-04 9.847618000000000E-05 1.907224000000000E-05 1.468486000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.741446000000000E-05 0.000000000000000E+00 2.408583000000000E-04 4.037581319813000E+40 1.331842803952000E+13 8.863245153405000E+12 + 218 7.081402809999999E+31 1.001740631240000E+34 3.146401699941796E+14 6.625425136089450E+07 2.190771171787810E-11 1.254812217511904E+03 2.655752973966878E+04 2.655826100492022E+04 3.339301480291100E-01 1.486724575771445E+03 1.005318107980000E+34 3.159595363155311E+14 5.569014000000000E-01 0.000000000000000E+00 4.300686000000000E-01 5.817343000000000E-03 1.431970000000000E-03 3.442075000000000E-03 7.754570000000000E-04 6.675078000000000E-05 8.552806000000000E-04 1.533101000000000E-04 9.820616000000000E-05 1.904315000000000E-05 1.467187000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.740746000000000E-05 0.000000000000000E+00 2.235566000000000E-04 4.067581319813000E+40 1.321842803952000E+13 8.863245153405000E+12 + 219 7.155035037200000E+31 1.008895584720000E+34 3.172789026368824E+14 6.680930894851799E+07 2.165693621556048E-11 1.231909313418649E+03 2.643623687973336E+04 2.643623687973336E+04 3.327301480291100E-01 1.467710521613271E+03 1.012260913280000E+34 3.185080385014461E+14 5.659152000000000E-01 0.000000000000000E+00 4.216237000000000E-01 5.409869000000000E-03 1.414748000000000E-03 3.347347000000000E-03 7.489511000000000E-04 6.594796000000000E-05 8.546257000000000E-04 1.518566000000000E-04 9.794197000000000E-05 1.901435000000000E-05 1.465876000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.740000000000000E-05 0.000000000000000E+00 2.052123000000000E-04 4.097696495060000E+40 1.301842803952000E+13 8.843245153405000E+12 + 220 6.730679001200000E+31 1.015626241840000E+34 3.197371743660096E+14 6.735430894851801E+07 2.150785091530163E-11 1.209424434435922E+03 2.631477340447482E+04 2.631477340447482E+04 3.317301480291101E-01 1.450171629653339E+03 1.019098489900000E+34 3.209980553683335E+14 5.681956000000000E-01 0.000000000000000E+00 4.194850000000000E-01 5.308380000000000E-03 1.410314000000000E-03 3.323955000000000E-03 7.423467000000000E-04 6.574128000000000E-05 8.544649000000000E-04 1.515059000000000E-04 9.787798000000000E-05 1.900734000000000E-05 1.465555000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.739814000000000E-05 0.000000000000000E+00 2.006512000000000E-04 4.117811670307000E+40 1.291842803952000E+13 8.803129978158000E+12 + 221 6.944468271200000E+31 1.022570737960000E+34 3.222589363706574E+14 6.792930894851799E+07 2.131066575287203E-11 1.198188668789505E+03 2.619386800319213E+04 2.625352821059321E+04 3.306312997815800E-01 1.432403752922488E+03 1.026320479420000E+34 3.236211379614162E+14 5.724045000000000E-01 0.000000000000000E+00 4.155305000000000E-01 5.125972000000000E-03 1.401894000000000E-03 3.282518000000000E-03 7.304684000000000E-04 6.534876000000000E-05 8.541825000000001E-04 1.509073000000000E-04 9.776805000000001E-05 1.899523000000000E-05 1.464993000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.739480000000000E-05 0.000000000000000E+00 1.924775000000000E-04 4.147811670307000E+40 1.281727628705000E+13 8.752899627664000E+12 + 222 7.499530660799999E+31 1.030070220880000E+34 3.249833395521750E+14 6.854925136089450E+07 2.092232324344214E-11 1.176464260965569E+03 2.613290420541563E+04 2.613362377854431E+04 3.293301480291100E-01 1.413632078794795E+03 1.034035193780000E+34 3.264241549556559E+14 5.817262000000000E-01 0.000000000000000E+00 4.067542000000000E-01 4.734644000000000E-03 1.382633000000000E-03 3.195183000000000E-03 7.049644000000000E-04 6.445093000000001E-05 8.535926000000000E-04 1.497010000000000E-04 9.754466000000001E-05 1.897038000000000E-05 1.463827000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.738764000000000E-05 0.000000000000000E+00 1.750060000000000E-04 4.177926845554000E+40 1.261727628705000E+13 8.692784452417000E+12 + 223 7.929913972800000E+31 1.038000166680000E+34 3.278649703591366E+14 6.917919377327099E+07 2.058718738242011E-11 1.154991368239475E+03 2.601355068418970E+04 2.601355068418970E+04 3.279301480291100E-01 1.394178164950054E+03 1.041856131420000E+34 3.292689854729484E+14 5.895354000000000E-01 0.000000000000000E+00 3.993833000000000E-01 4.419856000000000E-03 1.365867000000000E-03 3.126542000000000E-03 6.844267000000000E-04 6.366937000000000E-05 8.531336000000000E-04 1.488061000000000E-04 9.737705000000000E-05 1.895152000000000E-05 1.462926000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.738187000000000E-05 0.000000000000000E+00 1.610189000000000E-04 4.217926845554000E+40 1.241727628705000E+13 8.602669277170000E+12 + 224 7.711913566399999E+31 1.045712096160000E+34 3.306730005867601E+14 6.982425136089450E+07 2.016554238367194E-11 1.133910399974945E+03 2.589402927559096E+04 2.589402927559096E+04 3.265289962766400E-01 1.375688737084307E+03 1.049910302760000E+34 3.321937012676724E+14 5.960254000000000E-01 0.000000000000000E+00 3.932443000000000E-01 4.167774000000000E-03 1.351471000000000E-03 3.072761000000000E-03 6.679639000000000E-04 6.299834000000001E-05 8.527766000000000E-04 1.481412000000000E-04 9.725110000000000E-05 1.893718000000000E-05 1.462230000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.737726000000000E-05 0.000000000000000E+00 1.498687000000000E-04 4.238042020800999E+40 1.211727628705000E+13 8.492438926676000E+12 + 225 8.396486800399999E+31 1.054108509360000E+34 3.337144019485849E+14 7.048930894851801E+07 1.993470932881456E-11 1.113214202744363E+03 2.577505701798224E+04 2.577505701798224E+04 3.463312997815800E-01 1.354691367319666E+03 1.058289608840000E+34 3.352211803107348E+14 6.021489000000000E-01 0.000000000000000E+00 3.874418000000000E-01 3.936974000000000E-03 1.337547000000000E-03 3.024410000000000E-03 6.528784000000000E-04 6.234924000000000E-05 8.524573000000000E-04 1.475689000000000E-04 9.714162000000000E-05 1.892460000000000E-05 1.461610000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.737303000000000E-05 0.000000000000000E+00 1.396984000000000E-04 4.278042020801000E+40 1.201612453458000E+13 8.442208576182000E+12 + 226 8.362069662000000E+31 1.062470708320000E+34 3.367279586728845E+14 7.114925136089450E+07 1.966119486303091E-11 1.092895753684913E+03 2.565663138824403E+04 2.565663138824403E+04 3.450312997815800E-01 1.334248700865107E+03 1.066627738480000E+34 3.382213171503693E+14 6.133421000000000E-01 0.000000000000000E+00 3.768092000000000E-01 3.533883000000000E-03 1.311179000000000E-03 2.942329000000000E-03 6.264984000000000E-04 6.112014999999999E-05 8.519176000000000E-04 1.466578000000000E-04 9.696455000000000E-05 1.890393000000000E-05 1.460571000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736564000000000E-05 0.000000000000000E+00 1.220407000000000E-04 4.308157196048000E+40 1.181727628705000E+13 8.422208576182000E+12 + 227 8.314092147200000E+31 1.070784768640000E+34 3.397146756278541E+14 7.179925136089449E+07 1.939085761716782E-11 1.072948158115442E+03 2.553874987484935E+04 2.553874987484935E+04 3.436312997815800E-01 1.314347754487391E+03 1.074945080980000E+34 3.411950055392686E+14 6.221870000000000E-01 0.000000000000000E+00 3.683858000000000E-01 3.230725000000000E-03 1.289595000000000E-03 2.882563000000000E-03 6.066304000000000E-04 6.011401000000000E-05 8.515254000000000E-04 1.460399000000000E-04 9.684213000000000E-05 1.888939000000000E-05 1.459823000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736008000000000E-05 0.000000000000000E+00 1.088491000000000E-04 4.338387546542000E+40 1.171612453458000E+13 8.372093400935000E+12 + 228 8.320744032000000E+31 1.079105393320000E+34 3.426753354506832E+14 7.245430894851799E+07 1.921365142861900E-11 1.053364647196917E+03 2.542140997781069E+04 2.542140997781069E+04 3.425301480291100E-01 1.294863352340860E+03 1.083377498700000E+34 3.441976978427451E+14 6.222059000000000E-01 0.000000000000000E+00 3.683678000000000E-01 3.230095000000000E-03 1.289548000000000E-03 2.882441000000000E-03 6.065890000000000E-04 6.011182000000000E-05 8.515246000000000E-04 1.460386000000000E-04 9.684188000000000E-05 1.888936000000000E-05 1.459821000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736007000000000E-05 0.000000000000000E+00 1.088218000000000E-04 4.378387546542001E+40 1.161612453458000E+13 8.301863050441000E+12 + 229 8.544149094800001E+31 1.087649604080000E+34 3.457200602348072E+14 7.312930894851801E+07 1.886240291375443E-11 1.034138575635538E+03 2.530460920862688E+04 2.530460920862688E+04 3.410301480291100E-01 1.275278163251045E+03 1.092005753160000E+34 3.472772308854994E+14 6.315137000000000E-01 0.000000000000000E+00 3.594836000000000E-01 2.925351000000000E-03 1.266136000000000E-03 2.824224000000000E-03 5.865900000000000E-04 5.902046000000000E-05 8.511420000000000E-04 1.454744000000000E-04 9.672792999999999E-05 1.887558000000000E-05 1.459097000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.735448000000000E-05 0.000000000000000E+00 9.564623000000000E-05 4.408502721789001E+40 1.131612453458000E+13 8.221747875194000E+12 + 230 8.712314073599999E+31 1.096361902240000E+34 3.488344015361914E+14 7.375930894851801E+07 1.847553475476631E-11 1.015263419427808E+03 2.518834509023054E+04 2.518834509023054E+04 3.395278445241700E-01 1.255742493856027E+03 1.100044806580000E+34 3.501526795478544E+14 6.410123000000000E-01 0.000000000000000E+00 3.503990000000000E-01 2.627530000000000E-03 1.241598000000000E-03 2.769086000000000E-03 5.670196000000000E-04 5.787663000000000E-05 8.507780000000000E-04 1.449719000000000E-04 9.662437000000000E-05 1.886284000000000E-05 1.458413000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734901000000000E-05 0.000000000000000E+00 8.285100000000000E-05 4.438733072283000E+40 1.111497278211000E+13 8.131517524700000E+12 + 231 7.365750993199999E+31 1.103727710920000E+34 3.514709575595176E+14 7.432430894851799E+07 1.813885660435431E-11 9.967327736466888E+02 2.507261515693523E+04 2.507261515693523E+04 3.389186305044100E-01 1.239534435902340E+03 1.107210899580000E+34 3.527186956226874E+14 6.453530000000000E-01 0.000000000000000E+00 3.462408000000000E-01 2.496177000000000E-03 1.230150000000000E-03 2.745413000000000E-03 5.583784000000000E-04 5.734301000000000E-05 8.506207000000000E-04 1.447664000000000E-04 9.658129000000000E-05 1.885747000000000E-05 1.458119000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734660000000000E-05 0.000000000000000E+00 7.723773000000000E-05 4.458848247530000E+40 1.091497278211000E+13 8.021402349453000E+12 + 232 6.966385276800001E+31 1.110694088240000E+34 3.539664336858574E+14 7.486930894851799E+07 1.784883634449336E-11 9.875946726507083E+02 2.495741695438334E+04 2.501494974227258E+04 3.388059612272400E-01 1.224444005666920E+03 1.114047481600000E+34 3.551704232522126E+14 6.458310000000000E-01 0.000000000000000E+00 3.457826000000000E-01 2.481948000000000E-03 1.228878000000000E-03 2.742882000000000E-03 5.574419000000000E-04 5.728371000000000E-05 8.506039000000000E-04 1.447450000000000E-04 9.657674000000000E-05 1.885690000000000E-05 1.458087000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734634000000000E-05 0.000000000000000E+00 7.663120000000001E-05 4.479078598024000E+40 1.071497278211000E+13 7.901287174206000E+12 + 233 6.706812579599999E+31 1.117400874960000E+34 3.563744128185679E+14 7.541930894851799E+07 1.756345318789439E-11 9.695690384123294E+02 2.490001648823432E+04 2.490001648823432E+04 3.582955954550101E-01 1.209291316766330E+03 1.120939761220000E+34 3.576395184293712E+14 6.522447000000000E-01 0.000000000000000E+00 3.396321000000000E-01 2.292655000000000E-03 1.211728000000000E-03 2.709434000000000E-03 5.449793000000000E-04 5.648426000000000E-05 8.503804000000000E-04 1.444644000000000E-04 9.651713000000001E-05 1.884937000000000E-05 1.457671000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734286000000000E-05 0.000000000000000E+00 6.857296999999999E-05 4.499193773271001E+40 1.061497278211000E+13 7.821171998959000E+12 + 234 7.077710854799999E+31 1.124478647480000E+34 3.589046240401746E+14 7.607425136089450E+07 1.740243048119449E-11 9.518724090771702E+02 2.478561130453079E+04 2.478561130453079E+04 3.582829261778400E-01 1.193516026606575E+03 1.129251533960000E+34 3.606052493543639E+14 6.575171000000000E-01 0.000000000000000E+00 3.345703000000000E-01 2.141209000000000E-03 1.197424000000000E-03 2.683261000000000E-03 5.349995000000000E-04 5.581750000000000E-05 8.502040999999999E-04 1.442529000000000E-04 9.647150000000000E-05 1.884355000000000E-05 1.457345000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734008000000000E-05 0.000000000000000E+00 6.215334000000000E-05 4.519308948518000E+40 1.051382102964000E+13 7.791056823712000E+12 + 235 9.545802798000000E+31 1.134024420440000E+34 3.623058746685530E+14 7.689919377327099E+07 1.716366018372540E-11 9.344987796289915E+02 2.467173176489921E+04 2.467173176489921E+04 3.582679533957300E-01 1.172601901684187E+03 1.139769826800000E+34 3.643506688356004E+14 6.625532000000000E-01 0.000000000000000E+00 3.297307000000000E-01 1.999882000000000E-03 1.183596000000000E-03 2.659316000000000E-03 5.256795000000000E-04 5.517290000000000E-05 8.500417000000000E-04 1.440654000000000E-04 9.643050000000000E-05 1.883826000000000E-05 1.457045000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.733748000000000E-05 0.000000000000000E+00 5.618510000000000E-05 4.549424123765000E+40 1.031497278211000E+13 7.720941648465000E+12 + 236 1.149091615840000E+32 1.145515233160000E+34 3.663954630026479E+14 7.779425136089449E+07 1.684988795924370E-11 9.174422546554421E+02 2.455837545422439E+04 2.455837545422439E+04 3.580506771086800E-01 1.147929976036930E+03 1.151219960380000E+34 3.684290430069325E+14 6.699675000000000E-01 0.000000000000000E+00 3.225961000000000E-01 1.798817000000000E-03 1.162889000000000E-03 2.626266000000000E-03 5.124043000000000E-04 5.420765000000000E-05 8.498144000000000E-04 1.438179000000000E-04 9.637524000000000E-05 1.883101000000000E-05 1.456627000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.733378000000000E-05 0.000000000000000E+00 4.774151000000000E-05 4.589654474258999E+40 1.011497278211000E+13 7.630711297971000E+12 + 237 1.140938282880000E+32 1.156924687600000E+34 3.704626230112170E+14 7.859430894851799E+07 1.642895376958133E-11 8.924394061917601E+02 2.438931678673697E+04 2.438931678673697E+04 3.575334008216300E-01 1.124040990077102E+03 1.161427639640000E+34 3.720703969933085E+14 6.778850000000000E-01 0.000000000000000E+00 3.149699000000000E-01 1.589514000000000E-03 1.140506000000000E-03 2.592668000000000E-03 4.985730000000000E-04 5.316429000000000E-05 8.495807000000000E-04 1.435745000000000E-04 9.631998000000000E-05 1.882368000000000E-05 1.456200000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732993000000000E-05 0.000000000000000E+00 3.898958000000000E-05 4.629654474259000E+40 9.903936204887000E+12 7.500596122724000E+12 + 238 9.005866285199999E+31 1.165930591680000E+34 3.736781709753998E+14 7.924930894851801E+07 1.609199568804743E-11 8.761505512987387E+02 2.427725805502053E+04 2.427725805502053E+04 3.571184280395200E-01 1.105562959141177E+03 1.169743390780000E+34 3.750450014830845E+14 6.821310000000000E-01 0.000000000000000E+00 3.108743000000000E-01 1.481447000000000E-03 1.128293000000000E-03 2.575954000000000E-03 4.914219000000000E-04 5.259495000000000E-05 8.494621000000000E-04 1.434593000000000E-04 9.629311000000000E-05 1.882005000000000E-05 1.455984000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732794000000000E-05 0.000000000000000E+00 3.450024000000000E-05 4.659769649506000E+40 9.694051380134000E+12 7.380365772230000E+12 + 239 7.625685724799999E+31 1.173556189880000E+34 3.764118319907692E+14 7.985930894851799E+07 1.576194862168240E-11 8.601590015133634E+02 2.416571418640844E+04 2.416571418640844E+04 3.566092140197600E-01 1.090198237103616E+03 1.177418221680000E+34 3.778042866560389E+14 6.862576000000000E-01 0.000000000000000E+00 3.068916000000000E-01 1.378129000000000E-03 1.116336000000000E-03 2.560241000000000E-03 4.845810000000000E-04 5.203757000000000E-05 8.493494000000000E-04 1.433529000000000E-04 9.626803000000000E-05 1.881664000000000E-05 1.455779000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732604000000000E-05 0.000000000000000E+00 3.022042000000000E-05 4.689654474259000E+40 9.502784452417000E+12 7.260250596983001E+12 + 240 7.723906453200000E+31 1.181280253480000E+34 3.791967413213085E+14 8.049430894851799E+07 1.547380136006970E-11 8.444593304058700E+02 2.405468281531963E+04 2.405468281531963E+04 3.561115175247000E-01 1.074853048469460E+03 1.185302316420000E+34 3.806459458135744E+14 6.904162000000000E-01 0.000000000000000E+00 3.028751000000000E-01 1.276091000000000E-03 1.104179000000000E-03 2.545051000000000E-03 4.778197000000000E-04 5.147089000000000E-05 8.492391000000000E-04 1.432525000000000E-04 9.624400000000000E-05 1.881333000000000E-05 1.455579000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732415000000000E-05 0.000000000000000E+00 2.600873000000000E-05 4.719654474259000E+40 9.312669277170000E+12 7.140135421736001E+12 + 241 8.044243242800000E+31 1.189324379360000E+34 3.820951503058405E+14 8.114930894851801E+07 1.522684432056858E-11 8.291493365719568E+02 2.394416158704180E+04 2.394482239450142E+04 3.706184280395200E-01 1.058497133142399E+03 1.193512043200000E+34 3.835978171596117E+14 6.912295000000001E-01 0.000000000000000E+00 3.020894000000000E-01 1.256315000000000E-03 1.101792000000000E-03 2.542136000000000E-03 4.765088000000000E-04 5.135964000000000E-05 8.492178000000000E-04 1.432334000000000E-04 9.623941000000000E-05 1.881270000000000E-05 1.455541000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732379000000000E-05 0.000000000000000E+00 2.519374000000000E-05 4.739654474259001E+40 9.173129978158000E+12 7.049905071242001E+12 + 242 8.375311766400000E+31 1.197699707040000E+34 3.851004840133828E+14 8.181430894851799E+07 1.505254407495747E-11 8.214454692448643E+02 2.383414815768176E+04 2.388909154356916E+04 3.703218832969300E-01 1.041745361029582E+03 1.201936205740000E+34 3.866174276468321E+14 6.934696000000000E-01 0.000000000000000E+00 2.999244000000000E-01 1.202392000000000E-03 1.095190000000000E-03 2.534277000000000E-03 4.729332000000000E-04 5.105187000000000E-05 8.491599000000000E-04 1.431826000000000E-04 9.622706000000000E-05 1.881098000000000E-05 1.455436000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732280000000000E-05 0.000000000000000E+00 2.297564000000000E-05 4.779654474259000E+40 9.073129978158000E+12 6.979789895995001E+12 + 243 8.472963583599999E+31 1.206172704440000E+34 3.881343712802814E+14 8.249930894851801E+07 1.484601542769020E-11 8.064523997342328E+02 2.372529494325576E+04 2.377933113807531E+04 3.699253385543400E-01 1.025084305635298E+03 1.210631894080000E+34 3.897299337527776E+14 6.969554000000000E-01 0.000000000000000E+00 2.965544000000000E-01 1.119336000000000E-03 1.084871000000000E-03 2.522310000000000E-03 4.674235000000000E-04 5.057085000000000E-05 8.490711000000000E-04 1.431059000000000E-04 9.620831000000001E-05 1.880837000000000E-05 1.455276000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732126000000000E-05 0.000000000000000E+00 1.956536000000000E-05 4.809654474259000E+40 8.952208576182000E+12 6.909789895995001E+12 + 244 8.918343474400001E+31 1.215091083720000E+34 3.913254962252736E+14 8.320936653614150E+07 1.464232045969530E-11 7.917329845826085E+02 2.361628711477958E+04 2.367007503583597E+04 3.695276420592800E-01 1.007818771828737E+03 1.219707917460000E+34 3.929794692899618E+14 6.998077000000000E-01 0.000000000000000E+00 2.937956000000000E-01 1.052322000000000E-03 1.076376000000000E-03 2.512812000000000E-03 4.629755000000000E-04 5.017487000000000E-05 8.489998000000000E-04 1.430460000000000E-04 9.619349000000000E-05 1.880629000000000E-05 1.455148000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732003000000000E-05 0.000000000000000E+00 1.682075000000000E-05 4.849539299012000E+40 8.812323751429000E+12 6.819674720748001E+12 + 245 9.233697318000000E+31 1.224324751200000E+34 3.946334423546500E+14 8.393936653614148E+07 1.437506799234529E-11 7.772822290350507E+02 2.350778013178068E+04 2.356132091978828E+04 3.689310973166900E-01 9.902761984792165E+02 1.229000564720000E+34 3.963122105871650E+14 7.025153000000000E-01 0.000000000000000E+00 2.911757000000000E-01 9.894436000000000E-04 1.068271000000000E-03 2.504024000000000E-03 4.588001000000000E-04 4.979706000000000E-05 8.489332000000000E-04 1.429912000000000E-04 9.617980000000000E-05 1.880435000000000E-05 1.455028000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731887000000000E-05 0.000000000000000E+00 1.425087000000000E-05 4.889539299012000E+40 8.661978225688000E+12 6.719444370254001E+12 + 246 9.351617093999999E+31 1.233676378240000E+34 3.979909788196799E+14 8.467936653614150E+07 1.411227456642378E-11 7.630952295011507E+02 2.339977169308304E+04 2.345306648351514E+04 3.682345525741000E-01 9.728291197203004E+02 1.238366016700000E+34 3.996801473435335E+14 7.047778000000000E-01 0.000000000000000E+00 2.889858000000000E-01 9.373879000000000E-04 1.061470000000000E-03 2.496833000000000E-03 4.553420000000000E-04 4.948003000000000E-05 8.488782000000000E-04 1.429466000000000E-04 9.616860000000001E-05 1.880276000000000E-05 1.454929000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731790000000000E-05 0.000000000000000E+00 1.212680000000000E-05 4.929539299012000E+40 8.491863050441000E+12 6.609214019760001E+12 + 247 9.379374390799999E+31 1.243055655160000E+34 4.013693158673870E+14 8.542436653614150E+07 1.382324188403924E-11 7.491671718911190E+02 2.329161670946199E+04 2.334530943119650E+04 3.674380078315100E-01 9.556707001888642E+02 1.247746089300000E+34 4.030659254228943E+14 7.068238000000000E-01 0.000000000000000E+00 2.870050000000000E-01 8.906546000000000E-04 1.055297000000000E-03 2.490438000000000E-03 4.522366000000000E-04 4.919229000000000E-05 8.488289999999999E-04 1.429072000000000E-04 9.615865000000000E-05 1.880135000000000E-05 1.454841000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731704000000000E-05 0.000000000000000E+00 1.022226000000000E-05 4.969539299012000E+40 8.321632699947000E+12 6.489098844513000E+12 + 248 9.380760863200000E+31 1.252436523440000E+34 4.047625349784017E+14 8.617430894851799E+07 1.353972699129853E-11 7.354933299822009E+02 2.318460145147382E+04 2.323804747756066E+04 3.666414630889200E-01 9.388267476990470E+02 1.257113132640000E+34 4.064584498149532E+14 7.085965000000000E-01 0.000000000000000E+00 2.852884000000000E-01 8.503577000000000E-04 1.049933000000000E-03 2.484961000000000E-03 4.495582000000000E-04 4.894225000000000E-05 8.487866000000000E-04 1.428736000000000E-04 9.615011000000000E-05 1.880013000000000E-05 1.454765000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731630000000000E-05 0.000000000000000E+00 8.581220999999999E-06 5.009539299012000E+40 8.151402349453000E+12 6.358983669266000E+12 + 249 9.353299957199999E+31 1.261789741840000E+34 4.081543646515048E+14 8.691936653614150E+07 1.326202699314475E-11 7.220690638149455E+02 2.307807788393312E+04 2.313127834783587E+04 3.727460700988000E-01 9.220604197870732E+02 1.266462173720000E+34 4.098496143693998E+14 7.100779000000000E-01 0.000000000000000E+00 2.838539000000000E-01 8.167643000000000E-04 1.045441000000000E-03 2.480413000000000E-03 4.473251000000000E-04 4.873285000000000E-05 8.487513000000000E-04 1.428456000000000E-04 9.614301000000000E-05 1.879912000000000E-05 1.454701000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731568000000000E-05 0.000000000000000E+00 7.213488000000000E-06 5.049424123765000E+40 7.991171998959000E+12 6.248753318772000E+12 + 250 9.344897576399999E+31 1.271134605600000E+34 4.115448640872948E+14 8.768436653614150E+07 1.304998184615838E-11 7.024780483602514E+02 2.297204374772747E+04 2.297267772682154E+04 3.720483736037400E-01 9.055994966207302E+02 1.276021473240000E+34 4.133201352887822E+14 7.113110000000000E-01 0.000000000000000E+00 2.826598000000000E-01 7.888246999999999E-04 1.041697000000000E-03 2.476638000000000E-03 4.454677000000000E-04 4.855832000000000E-05 8.487219000000000E-04 1.428223000000000E-04 9.613710000000000E-05 1.879827000000000E-05 1.454649000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731516000000000E-05 0.000000000000000E+00 6.075935000000000E-06 5.089424123765001E+40 7.860941648465000E+12 6.148638143525000E+12 + 251 9.773603992799999E+31 1.280908340880000E+34 4.150954064902696E+14 8.847430894851799E+07 1.281179283391412E-11 6.896563789943712E+02 2.286649679412420E+04 2.286712786034893E+04 3.712506771086800E-01 8.887124654293394E+02 1.285879749520000E+34 4.169022398643529E+14 7.121910000000000E-01 0.000000000000000E+00 2.818077000000000E-01 7.688989000000000E-04 1.039022000000000E-03 2.473949000000000E-03 4.441430000000000E-04 4.843362000000000E-05 8.487009000000000E-04 1.428058000000000E-04 9.613289000000000E-05 1.879767000000000E-05 1.454611000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731479000000000E-05 0.000000000000000E+00 5.264615000000000E-06 5.139424123765000E+40 7.710826473218000E+12 6.048407793031000E+12 + 252 9.942851096399998E+31 1.290851158160000E+34 4.187090732384364E+14 8.926936653614150E+07 1.257795126109337E-11 6.770687314683361E+02 2.276143478472257E+04 2.276206295146137E+04 3.704529806136200E-01 8.718751513659852E+02 1.295894178000000E+34 4.205459336427036E+14 7.123015000000000E-01 0.000000000000000E+00 2.817006000000000E-01 7.663976000000000E-04 1.038685000000000E-03 2.473612000000000E-03 4.439766000000000E-04 4.841792000000000E-05 8.486983000000000E-04 1.428037000000000E-04 9.613236000000001E-05 1.879760000000000E-05 1.454606000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731475000000000E-05 0.000000000000000E+00 5.162762000000000E-06 5.189308948518000E+40 7.580596122724000E+12 5.938292617784000E+12 + 253 1.008613914000000E+32 1.300937197840000E+34 4.223827940469708E+14 9.008942412376499E+07 1.234801127717562E-11 6.646281605646834E+02 2.265685549140634E+04 2.265685549140634E+04 3.694564358710300E-01 8.551161242662977E+02 1.306207483780000E+34 4.243021541441114E+14 7.139290000000000E-01 0.000000000000000E+00 2.801245000000000E-01 7.295869000000000E-04 1.033726000000000E-03 2.468659000000000E-03 4.415291000000000E-04 4.818675000000000E-05 8.486596000000000E-04 1.427730000000000E-04 9.612458000000000E-05 1.879649000000000E-05 1.454537000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731407000000000E-05 0.000000000000000E+00 3.663779000000000E-06 5.239308948518000E+40 7.430365772230000E+12 5.828177442537000E+12 + 254 1.054049231200000E+32 1.311477769720000E+34 4.262215142412522E+14 9.093442412376499E+07 1.209511236957868E-11 6.524973295075300E+02 2.255275669629653E+04 2.255275669629653E+04 3.686587393759700E-01 8.380000858665966E+02 1.316825535000000E+34 4.281664399251511E+14 7.143630000000000E-01 0.000000000000000E+00 2.797042000000000E-01 7.197876000000000E-04 1.032399000000000E-03 2.467346000000000E-03 4.408775000000000E-04 4.812491000000000E-05 8.486492000000000E-04 1.427649000000000E-04 9.612250999999999E-05 1.879619000000000E-05 1.454518000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731388000000000E-05 0.000000000000000E+00 3.264681000000000E-06 5.289308948518001E+40 7.290250596983000E+12 5.727947092043000E+12 + 255 1.069560217120000E+32 1.322173300280000E+34 4.301113656090499E+14 9.178942412376499E+07 1.190137165297795E-11 6.405879110700516E+02 2.239812273427200E+04 2.244913619170450E+04 3.677610428809100E-01 8.209754173099211E+02 1.327563534980000E+34 4.320754400061088E+14 7.144941000000000E-01 0.000000000000000E+00 2.795772000000000E-01 7.168303000000000E-04 1.031997000000000E-03 2.466951000000000E-03 4.406808000000000E-04 4.810618000000000E-05 8.486461000000000E-04 1.427624000000000E-04 9.612188000000000E-05 1.879610000000000E-05 1.454513000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731383000000000E-05 0.000000000000000E+00 3.144227000000000E-06 5.349308948517999E+40 7.160020246489001E+12 5.627831916796000E+12 + 256 1.078040574560000E+32 1.332953769680000E+34 4.340395144031679E+14 9.263942412376501E+07 1.168449393611205E-11 6.288958640164931E+02 2.229521270819876E+04 2.234599178008490E+04 3.668633463858501E-01 8.041376317678265E+02 1.338211523660000E+34 4.359589050204124E+14 7.152517000000000E-01 0.000000000000000E+00 2.788434000000000E-01 6.997552000000000E-04 1.029673000000000E-03 2.464674000000000E-03 4.395451000000000E-04 4.799781000000000E-05 8.486282000000000E-04 1.427482000000000E-04 9.611827000000000E-05 1.879559000000000E-05 1.454481000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731351000000000E-05 0.000000000000000E+00 2.448683000000000E-06 5.399308948518000E+40 7.039789895995001E+12 5.527716741549000E+12 + 257 1.051554575480000E+32 1.343469277640000E+34 4.378782956376571E+14 9.344442412376501E+07 1.149767179833287E-11 6.118328028651875E+02 2.219216305468458E+04 2.219277551074567E+04 3.678668016432600E-01 7.879017099516722E+02 1.348273195640000E+34 4.396278372659986E+14 7.157514000000000E-01 0.000000000000000E+00 2.783594000000000E-01 6.885145000000001E-04 1.028133000000000E-03 2.463182000000000E-03 4.387973000000000E-04 4.792606000000000E-05 8.486162999999999E-04 1.427388000000000E-04 9.611590000000001E-05 1.879525000000000E-05 1.454459000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731331000000000E-05 0.000000000000000E+00 1.990718000000000E-06 5.459193773271001E+40 6.929674720748001E+12 5.447601566302000E+12 + 258 9.607754442800000E+31 1.353077113640000E+34 4.413773788943402E+14 9.422436653614150E+07 1.136605903759177E-11 6.006655956850504E+02 2.209019932738144E+04 2.209080896946254E+04 3.671679533957300E-01 7.732997180521191E+02 1.358024552420000E+34 4.431749660164828E+14 7.161302000000001E-01 0.000000000000000E+00 2.779925000000000E-01 6.800033000000000E-04 1.026964000000000E-03 2.462056000000000E-03 4.382311000000000E-04 4.787154000000000E-05 8.486073999999999E-04 1.427317000000000E-04 9.611409000000000E-05 1.879499000000000E-05 1.454443000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731315000000000E-05 0.000000000000000E+00 1.643922000000000E-06 5.509193773270999E+40 6.839559545501001E+12 5.377486391055000E+12 + 259 9.895008847200001E+31 1.362971991200000E+34 4.449725531386256E+14 9.507436653614150E+07 1.123595283566481E-11 5.897022130066688E+02 2.198870408085052E+04 2.198931092188069E+04 3.664702569006700E-01 7.584966420572293E+02 1.368699793140000E+34 4.470417100702391E+14 7.164443000000000E-01 0.000000000000000E+00 2.776883000000000E-01 6.729566000000000E-04 1.025991000000000E-03 2.461127000000000E-03 4.377622000000000E-04 4.782622000000000E-05 8.486000000000000E-04 1.427259000000000E-04 9.611260000000001E-05 1.879478000000000E-05 1.454430000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731302000000000E-05 0.000000000000000E+00 1.356763000000000E-06 5.559193773271000E+40 6.759444370254001E+12 5.317486391055000E+12 + 260 1.145552829040000E+32 1.374427595080000E+34 4.491108670018527E+14 9.600442412376501E+07 1.110733594711586E-11 5.788669287113199E+02 2.188767516261825E+04 2.188767516261825E+04 3.657714086531400E-01 7.416843663945709E+02 1.380485405300000E+34 4.512727581603205E+14 7.167148000000000E-01 0.000000000000000E+00 2.774263000000000E-01 6.669033000000000E-04 1.025150000000000E-03 2.460335000000000E-03 4.373593000000000E-04 4.778698000000000E-05 8.485936000000000E-04 1.427208000000000E-04 9.611132000000000E-05 1.879459000000000E-05 1.454419000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731291000000000E-05 0.000000000000000E+00 1.110027000000000E-06 5.619078598024000E+40 6.689444370254001E+12 5.267371215808000E+12 + 261 1.211562640760000E+32 1.386543215520000E+34 4.534346493187884E+14 9.693442412376501E+07 1.098019132391565E-11 5.683014165446356E+02 2.173760136119878E+04 2.178711043010067E+04 3.649737121580800E-01 7.243575418540745E+02 1.392450343840000E+34 4.555244014445642E+14 7.169436000000000E-01 0.000000000000000E+00 2.772046000000000E-01 6.618034000000000E-04 1.024432000000000E-03 2.459674000000000E-03 4.370198000000000E-04 4.775353000000000E-05 8.485882000000000E-04 1.427166000000000E-04 9.611024000000000E-05 1.879444000000000E-05 1.454409000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731281000000000E-05 0.000000000000000E+00 9.020737000000000E-07 5.679078598024000E+40 6.609329195007001E+12 5.207256040561000E+12 + 262 1.181420492080000E+32 1.398357472160000E+34 4.576141535703402E+14 9.782942412376499E+07 1.085450211318209E-11 5.528823903151667E+02 2.163712901685209E+04 2.163772615516521E+04 3.642748639105500E-01 7.078323051598793E+02 1.404011275860000E+34 4.596027186993189E+14 7.171308000000000E-01 0.000000000000000E+00 2.770232000000000E-01 6.576497000000000E-04 1.023840000000000E-03 2.459142000000000E-03 4.367431000000000E-04 4.772592000000000E-05 8.485838000000000E-04 1.427131000000000E-04 9.610936000000000E-05 1.879431000000000E-05 1.454401000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731274000000000E-05 0.000000000000000E+00 7.326300000000000E-07 5.748963422776999E+40 6.539098844513001E+12 5.147140865314000E+12 + 263 1.130753578880000E+32 1.409665079560000E+34 4.615912838282977E+14 9.870942412376501E+07 1.073025165494644E-11 5.427236394256072E+02 2.153771543930850E+04 2.153771543930850E+04 3.634771674154900E-01 6.923212642873295E+02 1.415413270800000E+34 4.636013681815554E+14 7.172980000000000E-01 0.000000000000000E+00 2.768611000000000E-01 6.539620000000000E-04 1.023305000000000E-03 2.458678000000000E-03 4.364974000000000E-04 4.770100000000000E-05 8.485800000000000E-04 1.427100000000000E-04 9.610858000000000E-05 1.879420000000000E-05 1.454394000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731267000000000E-05 0.000000000000000E+00 5.821201000000000E-07 5.808963422776999E+40 6.459098844513000E+12 5.087140865314000E+12 + 264 1.149642823160000E+32 1.421161462040000E+34 4.656114525348131E+14 9.960942412376499E+07 1.060742347994504E-11 5.328178166344106E+02 2.139004115202795E+04 2.143875862566331E+04 3.626783191679600E-01 6.768559041466203E+02 1.427253685420000E+34 4.677291987957923E+14 7.173144000000000E-01 0.000000000000000E+00 2.768452000000000E-01 6.535998000000000E-04 1.023252000000000E-03 2.458632000000000E-03 4.364732000000000E-04 4.769853000000000E-05 8.485796000000000E-04 1.427097000000000E-04 9.610851000000000E-05 1.879419000000000E-05 1.454394000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731266000000000E-05 0.000000000000000E+00 5.673323000000000E-07 5.868848247530000E+40 6.388983669266000E+12 5.027025690067000E+12 + 265 1.218446665200000E+32 1.433345908800000E+34 4.698469450567716E+14 1.005544241237650E+08 1.048600130743632E-11 5.183615234578670E+02 2.129117524936895E+04 2.129176284010073E+04 3.623806226729000E-01 6.607619307050865E+02 1.439725372660000E+34 4.720552546429557E+14 7.174173000000000E-01 0.000000000000000E+00 2.767455000000000E-01 6.513470000000000E-04 1.022919000000000E-03 2.458354000000000E-03 4.363230000000000E-04 4.768301000000000E-05 8.485771999999999E-04 1.427079000000000E-04 9.610803000000000E-05 1.879412000000000E-05 1.454389000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731262000000000E-05 0.000000000000000E+00 4.753239000000000E-07 5.928963422777001E+40 6.318753318772000E+12 4.976910514820000E+12 + 266 1.275890186040000E+32 1.446104836520000E+34 4.742635642291398E+14 1.015294817113885E+08 1.036596904304289E-11 5.088370645859875E+02 2.119335118500257E+04 2.119335118500257E+04 3.615817744253700E-01 6.442083854369852E+02 1.452631302260000E+34 4.765158905810857E+14 7.175408000000000E-01 0.000000000000000E+00 2.766257000000000E-01 6.486583000000000E-04 1.022514000000000E-03 2.458028000000000E-03 4.361436000000000E-04 4.766412999999999E-05 8.485744000000000E-04 1.427056000000000E-04 9.610746000000000E-05 1.879404000000000E-05 1.454384000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731257000000000E-05 0.000000000000000E+00 3.654475000000000E-07 5.998848247530000E+40 6.238753318772000E+12 4.916910514820000E+12 + 267 1.305295733960000E+32 1.459157768000000E+34 4.787682169330318E+14 1.025144817113885E+08 1.024731077661808E-11 4.950314117810404E+02 2.104745718164690E+04 2.104803804628320E+04 3.606829261778400E-01 6.275596394068161E+02 1.465727697760000E+34 4.810187333875044E+14 7.176290000000000E-01 0.000000000000000E+00 2.765402000000000E-01 6.467575000000000E-04 1.022220000000000E-03 2.457804000000000E-03 4.360167000000000E-04 4.765041000000000E-05 8.485724000000000E-04 1.427040000000000E-04 9.610706000000000E-05 1.879398000000000E-05 1.454381000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731253000000000E-05 0.000000000000000E+00 2.876958000000000E-07 6.068848247530000E+40 6.168638143525000E+12 4.856795339573000E+12 + 268 1.313991919600000E+32 1.472297627520000E+34 4.832692498419772E+14 1.034994241237650E+08 1.013001078013720E-11 4.859356241725292E+02 2.090314437153824E+04 2.095075290008560E+04 3.598829261778400E-01 6.111511709172478E+02 1.478862385360000E+34 4.854957182082341E+14 7.177021000000000E-01 0.000000000000000E+00 2.764693000000000E-01 6.452014000000000E-04 1.021971000000000E-03 2.457627000000000E-03 4.359126000000000E-04 4.763879000000000E-05 8.485707000000000E-04 1.427027000000000E-04 9.610673000000000E-05 1.879394000000000E-05 1.454378000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731251000000000E-05 0.000000000000000E+00 2.239705000000000E-07 6.138848247530000E+40 6.098522968278000E+12 4.796795339573000E+12 + 269 1.312958530200000E+32 1.485427143200000E+34 4.877221865744911E+14 1.044994817113885E+08 1.001405350561279E-11 4.727513280986146E+02 2.080652893157643E+04 2.080710314711021E+04 3.589852296827800E-01 5.951438764122993E+02 1.492366865240000E+34 4.900603652702952E+14 7.177601000000000E-01 0.000000000000000E+00 2.764130000000000E-01 6.439877000000000E-04 1.021768000000000E-03 2.457496000000000E-03 4.358313000000000E-04 4.762935000000000E-05 8.485694000000000E-04 1.427017000000000E-04 9.610647000000000E-05 1.879390000000000E-05 1.454375000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731248000000000E-05 0.000000000000000E+00 1.741930000000000E-07 6.208848247529999E+40 6.028407793031000E+12 4.746680164326000E+12 + 270 1.387936650120000E+32 1.499306587280000E+34 4.923985439660991E+14 1.055294817113885E+08 9.876655540599195E-12 4.640649183684646E+02 2.066386805654490E+04 2.071093161477246E+04 3.585806226729000E-01 5.785827868468149E+02 1.506397786900000E+34 4.947660114515760E+14 7.178049000000000E-01 0.000000000000000E+00 2.763695000000000E-01 6.430662000000000E-04 1.021607000000000E-03 2.457404000000000E-03 4.357695000000000E-04 4.762182000000000E-05 8.485685000000000E-04 1.427009000000000E-04 9.610627000000000E-05 1.879387000000000E-05 1.454374000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731247000000000E-05 0.000000000000000E+00 1.363253000000000E-07 6.278848247530000E+40 5.948407793031000E+12 4.686564989079000E+12 + 271 1.418238332640000E+32 1.513488986520000E+34 4.971334789370529E+14 1.065694241237650E+08 9.763598399519936E-12 4.514178609952075E+02 2.056835856437901E+04 2.056835856437901E+04 3.581748639105499E-01 5.620249718599633E+02 1.520652394100000E+34 4.995160300575345E+14 7.178403000000000E-01 0.000000000000000E+00 2.763351000000000E-01 6.423552000000000E-04 1.021474000000000E-03 2.457338000000000E-03 4.357217000000000E-04 4.761565000000000E-05 8.485677000000000E-04 1.427003000000000E-04 9.610612000000000E-05 1.879385000000000E-05 1.454372000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731245000000000E-05 0.000000000000000E+00 1.070375000000000E-07 6.348963422776999E+40 5.878292617784000E+12 4.626564989079000E+12 + 272 1.432689074960000E+32 1.527815801680000E+34 5.018985811780163E+14 1.076344241237650E+08 9.629636807388227E-12 4.391700931091861E+02 2.042676697996094E+04 2.042733071488009E+04 3.577691051482000E-01 5.456089283359837E+02 1.535357455640000E+34 5.043887473690821E+14 7.178681000000000E-01 0.000000000000000E+00 2.763081000000000E-01 6.418140000000000E-04 1.021366000000000E-03 2.457295000000000E-03 4.356852000000000E-04 4.761061000000000E-05 8.485671000000000E-04 1.426999000000000E-04 9.610600000000000E-05 1.879383000000000E-05 1.454371000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731244000000000E-05 0.000000000000000E+00 8.468129000000000E-08 6.428963422777000E+40 5.798177442537000E+12 4.566449813832000E+12 + 273 1.508331189840000E+32 1.542899109600000E+34 5.068789135601477E+14 1.087244817113885E+08 9.519124729621375E-12 4.272014888378351E+02 2.028670995934933E+04 2.028670995934933E+04 3.575621946333800E-01 5.286581309434148E+02 1.550563895040000E+34 5.093973290676037E+14 7.178907000000000E-01 0.000000000000000E+00 2.762860000000000E-01 6.413881000000000E-04 1.021274000000000E-03 2.457267000000000E-03 4.356563000000000E-04 4.760631000000000E-05 8.485666999999999E-04 1.426995000000000E-04 9.610591000000000E-05 1.879382000000000E-05 1.454370000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731243000000000E-05 0.000000000000000E+00 6.701723000000000E-08 6.509078598024000E+40 5.728062267290000E+12 4.506334638585000E+12 + 274 1.532953109600000E+32 1.558228680480000E+34 5.119157445750596E+14 1.098194817113885E+08 9.367202470367385E-12 4.155590622603898E+02 2.014705723029059E+04 2.014705723029059E+04 3.571552841185600E-01 5.118078680473429E+02 1.565908484380000E+34 5.144317491908804E+14 7.179103999999999E-01 0.000000000000000E+00 2.762669000000000E-01 6.410340000000000E-04 1.021189000000000E-03 2.457249000000000E-03 4.356323000000000E-04 4.760237000000000E-05 8.485663000000000E-04 1.426992000000000E-04 9.610583999999999E-05 1.879381000000000E-05 1.454370000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731243000000000E-05 0.000000000000000E+00 5.226638000000000E-08 6.599078598024000E+40 5.637947092043000E+12 4.446219463338000E+12 + 275 1.535948248040000E+32 1.573588288280000E+34 5.169477538067012E+14 1.109094817113885E+08 9.217431260754642E-12 4.042339241291529E+02 2.000836586385659E+04 2.000836586385659E+04 3.566472218512700E-01 4.952664868968365E+02 1.581213090800000E+34 5.194390331774114E+14 7.179265000000000E-01 0.000000000000000E+00 2.762511000000000E-01 6.407602000000001E-04 1.021116000000000E-03 2.457244000000000E-03 4.356135000000000E-04 4.759893000000000E-05 8.485660000000000E-04 1.426990000000000E-04 9.610578000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 4.077885000000000E-08 6.698963422777000E+40 5.547716741549000E+12 4.366104288091000E+12 + 276 1.524970847840000E+32 1.588837893320000E+34 5.219303125481217E+14 1.119945392990120E+08 9.049194180173971E-12 3.968064643144239E+02 1.987062924207356E+04 1.991588613752964E+04 3.562391595839800E-01 4.792050338992606E+02 1.596534605420000E+34 5.244402051334036E+14 7.179348000000000E-01 0.000000000000000E+00 2.762431000000000E-01 6.406262000000000E-04 1.021076000000000E-03 2.457243000000000E-03 4.356043000000000E-04 4.759709000000000E-05 8.485659000000000E-04 1.426989000000000E-04 9.610575000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 3.512459000000000E-08 6.788963422777000E+40 5.447716741549000E+12 4.295989112844000E+12 + 277 1.539340430800000E+32 1.604231317520000E+34 5.269500977186855E+14 1.131044817113885E+08 8.904507571480193E-12 3.859923865386089E+02 1.973384079252554E+04 1.977878614170469E+04 3.558310973166900E-01 4.633005705358127E+02 1.612192593220000E+34 5.295419582251905E+14 7.179386000000000E-01 0.000000000000000E+00 2.762394000000000E-01 6.405676000000000E-04 1.021057000000000E-03 2.457244000000000E-03 4.356002000000000E-04 4.759621000000000E-05 8.485658000000000E-04 1.426988000000000E-04 9.610573000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 3.263970000000000E-08 6.898848247530000E+40 5.357486391055000E+12 4.225873937597000E+12 + 278 1.592252355120000E+32 1.620153868920000E+34 5.321338187316951E+14 1.142294817113885E+08 8.741981991906559E-12 3.754730224044765E+02 1.959799398804079E+04 1.964262993561248E+04 3.554299455642200E-01 4.471946500249896E+02 1.628141402060000E+34 5.347308857409688E+14 7.179541000000000E-01 0.000000000000000E+00 2.762242000000000E-01 6.403365000000000E-04 1.020978000000000E-03 2.457253000000000E-03 4.355841000000000E-04 4.759252000000000E-05 8.485655000000000E-04 1.426986000000000E-04 9.610568000000000E-05 1.879379000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 2.279044000000000E-08 7.008733072283001E+40 5.267371215808000E+12 4.145758762350000E+12 + 279 1.597501257160000E+32 1.636128935200000E+34 5.373279527502424E+14 1.153645392990120E+08 8.582422838472009E-12 3.619368127050897E+02 1.946308234638028E+04 1.946308234638028E+04 3.550299455642200E-01 4.313687623315765E+02 1.644282566540000E+34 5.399781066275983E+14 7.179643999999999E-01 0.000000000000000E+00 2.762141000000000E-01 6.401971000000000E-04 1.020921000000000E-03 2.457267000000000E-03 4.355743000000000E-04 4.758985000000000E-05 8.485654000000000E-04 1.426985000000000E-04 9.610564999999999E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.676256000000000E-08 7.118733072282999E+40 5.167256040561000E+12 4.065758762350000E+12 + 280 1.630734423720000E+32 1.652436197880000E+34 5.426282605049542E+14 1.165294817113885E+08 8.425775967797631E-12 3.520730297415591E+02 1.932909942992841E+04 1.932909942992841E+04 3.546287938117501E-01 4.155320535069220E+02 1.660812122320000E+34 5.453485330189642E+14 7.179726000000000E-01 0.000000000000000E+00 2.762060000000000E-01 6.400988000000000E-04 1.020872000000000E-03 2.457283000000000E-03 4.355672000000000E-04 4.758757000000000E-05 8.485653000000000E-04 1.426984000000000E-04 9.610563000000001E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.243567000000000E-08 7.248617897036000E+40 5.067140865314000E+12 3.995528411856000E+12 + 281 1.675186479360000E+32 1.669188046760000E+34 5.480688055329746E+14 1.177044817113885E+08 8.252963179755076E-12 3.424780622478486E+02 1.919603884538586E+04 1.919603884538586E+04 3.543276420592800E-01 3.996232616068646E+02 1.677587543220000E+34 5.507962804364869E+14 7.179797999999999E-01 0.000000000000000E+00 2.761990000000000E-01 6.400256000000000E-04 1.020826000000000E-03 2.457303000000000E-03 4.355618000000000E-04 4.758545000000000E-05 8.485652000000000E-04 1.426983000000000E-04 9.610561000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 9.132207000000000E-09 7.388502721788999E+40 4.967025690067000E+12 3.915528411856000E+12 + 282 1.679905259600000E+32 1.685987039680000E+34 5.535237553399992E+14 1.188745392990120E+08 8.102089147773675E-12 3.331445842561093E+02 1.902004850341077E+04 1.906389424346434E+04 3.539264903068100E-01 3.839816664470689E+02 1.694306073000000E+34 5.562232907014179E+14 7.179858000000000E-01 0.000000000000000E+00 2.761931000000000E-01 6.399740000000000E-04 1.020785000000000E-03 2.457324000000000E-03 4.355579000000000E-04 4.758353000000000E-05 8.485651000000001E-04 1.426983000000000E-04 9.610560000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.719011000000000E-09 7.538387546541999E+40 4.876795339573000E+12 3.835413236609000E+12 + 283 1.663794927720000E+32 1.702625106320000E+34 5.589228260628365E+14 1.200545392990120E+08 7.936150726700768E-12 3.211347252203488E+02 1.888911541048179E+04 1.888963789681733E+04 3.535264903068100E-01 3.688345241832790E+02 1.711117200040000E+34 5.616832642158431E+14 7.179911000000000E-01 0.000000000000000E+00 2.761878000000000E-01 6.399383000000000E-04 1.020746000000000E-03 2.457348000000000E-03 4.355550000000000E-04 4.758171000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610559000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.953204000000000E-09 7.688272371295001E+40 4.776680164326000E+12 3.765298061362000E+12 + 284 1.698418545080000E+32 1.719609293760000E+34 5.644437023688498E+14 1.212495392990120E+08 7.773380159497364E-12 3.123437050116443E+02 1.875908365462464E+04 1.875908365462464E+04 3.532253385543400E-01 3.536762580376234E+02 1.728226408700000E+34 5.672438808798751E+14 7.179958000000000E-01 0.000000000000000E+00 2.761832000000000E-01 6.399138000000000E-04 1.020710000000000E-03 2.457372000000000E-03 4.355529000000000E-04 4.758001000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610559000000000E-05 1.879378000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.650244000000000E-09 7.858157196048000E+40 4.686449813832000E+12 3.685182886115000E+12 + 285 1.723418213920000E+32 1.736843523640000E+34 5.700440593909004E+14 1.224494817113885E+08 7.613722036435702E-12 3.038314719142880E+02 1.858761347427467E+04 1.862994703107855E+04 3.528241868018700E-01 3.386326775058995E+02 1.745420158360000E+34 5.728372953709040E+14 7.180008000000000E-01 0.000000000000000E+00 2.761782000000000E-01 6.398946000000000E-04 1.020669000000000E-03 2.457401000000000E-03 4.355510000000000E-04 4.757812000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.523076000000000E-09 8.038042020801000E+40 4.576449813832000E+12 3.605067710868000E+12 + 286 1.715326944000000E+32 1.753996793080000E+34 5.756305313509074E+14 1.236594241237650E+08 7.440412564016443E-12 2.928415909213830E+02 1.845914665005282E+04 1.845914665005282E+04 3.525230350494000E-01 3.239804982314289E+02 1.762732961640000E+34 5.784834021067052E+14 7.180042000000000E-01 0.000000000000000E+00 2.761749000000000E-01 6.398845999999999E-04 1.020641000000000E-03 2.457423000000000E-03 4.355500000000000E-04 4.757679000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.872279000000000E-09 8.237926845554000E+40 4.476219463338000E+12 3.524952535621000E+12 + 287 1.747241270960000E+32 1.771469130200000E+34 5.813362728625030E+14 1.249694817113885E+08 7.271263908499836E-12 2.822846544049850E+02 1.829041808828153E+04 1.829041808828153E+04 3.521230350494000E-01 3.093723161892444E+02 1.781542637920000E+34 5.846394379033002E+14 7.180071000000000E-01 0.000000000000000E+00 2.761719000000000E-01 6.398790000000000E-04 1.020615000000000E-03 2.457443000000000E-03 4.355492000000000E-04 4.757558000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.412427000000000E-09 8.457581319813000E+40 4.376104288091000E+12 3.444837360374000E+12 + 288 2.014693587200000E+32 1.791616145640000E+34 5.879426029440971E+14 1.263745392990120E+08 7.105538835576439E-12 2.720741428391879E+02 1.812273052731387E+04 1.812273052731387E+04 3.518207315444600E-01 2.928580712103561E+02 1.801768724060000E+34 5.912654434450636E+14 7.180103000000000E-01 0.000000000000000E+00 2.761687000000000E-01 6.398766000000000E-04 1.020586000000000E-03 2.457466000000000E-03 4.355487000000000E-04 4.757426000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.059694000000000E-09 8.727350969319000E+40 4.275989112844000E+12 3.364722185127000E+12 + 289 2.030515684000000E+32 1.811921302480000E+34 5.945882839460300E+14 1.276995392990120E+08 6.943797025072309E-12 2.622329554460218E+02 1.795608365713073E+04 1.795658033514591E+04 3.515195797919899E-01 2.766375047269992E+02 1.820891798800000E+34 5.975240627866030E+14 7.180136000000000E-01 0.000000000000000E+00 2.761655000000000E-01 6.398764000000000E-04 1.020556000000000E-03 2.457491000000000E-03 4.355482000000000E-04 4.757286000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 7.784835000000000E-10 9.017120618825001E+40 4.175873937597000E+12 3.294491834633000E+12 + 290 1.794100457520000E+32 1.829862295120000E+34 6.004598416271758E+14 1.289544817113885E+08 6.817058446113028E-12 2.527477334095684E+02 1.775103305976443E+04 1.779195341709587E+04 3.513184280395200E-01 2.625760183627920E+02 1.839053592640000E+34 6.034586835597544E+14 7.180166000000000E-01 0.000000000000000E+00 2.761625000000000E-01 6.398778000000000E-04 1.020528000000000E-03 2.457514000000000E-03 4.355479000000000E-04 4.757155000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.767057000000000E-10 9.296775093084000E+40 4.105643587103000E+12 3.234491834633000E+12 + 291 1.838271439200000E+32 1.848244890160000E+34 6.064575254923330E+14 1.302244817113885E+08 6.708260321283613E-12 2.414027866547013E+02 1.758829061046222E+04 1.758877822308198E+04 3.511172762870500E-01 2.484498256109301E+02 1.857545892060000E+34 6.094768038206372E+14 7.180195000000000E-01 0.000000000000000E+00 2.761596000000000E-01 6.398803000000000E-04 1.020501000000000E-03 2.457538000000000E-03 4.355476000000000E-04 4.757028000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.282668000000000E-10 9.606429567343000E+40 4.045528411856000E+12 3.184376659386000E+12 + 292 1.860188842640000E+32 1.866846893960000E+34 6.124960821489414E+14 1.314844817113885E+08 6.616219539155870E-12 2.326415429784213E+02 1.742704019290347E+04 1.742704019290347E+04 3.509161245345800E-01 2.344305439387714E+02 1.876067233800000E+34 6.154593366678572E+14 7.180225000000000E-01 0.000000000000000E+00 2.761566000000000E-01 6.398839000000000E-04 1.020473000000000E-03 2.457562000000000E-03 4.355474000000000E-04 4.756896000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.103360000000000E-10 9.945853691108001E+40 3.985528411856000E+12 3.144261484139000E+12 + 293 1.844079306440000E+32 1.885287573640000E+34 6.184225911867729E+14 1.327194241237650E+08 6.540484300362243E-12 2.221990915963413E+02 1.722803212508339E+04 1.722803212508339E+04 3.508138210296400E-01 2.208328646026258E+02 1.894462161880000E+34 6.213361003800755E+14 7.180252000000000E-01 0.000000000000000E+00 2.761539000000000E-01 6.398878000000000E-04 1.020447000000000E-03 2.457585000000000E-03 4.355473000000000E-04 4.756776000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.306589000000000E-10 1.029539299012000E+41 3.945413236609000E+12 3.104261484139000E+12 + 294 1.834904320360000E+32 1.903636750120000E+34 6.242496095733781E+14 1.339544241237650E+08 6.480328437510080E-12 2.121984850952040E+02 1.703082447210035E+04 1.703082447210035E+04 3.508126692771700E-01 2.075864521064225E+02 1.913178246300000E+34 6.272505049824996E+14 7.180279000000001E-01 0.000000000000000E+00 2.761512000000000E-01 6.398924000000000E-04 1.020420000000000E-03 2.457608000000000E-03 4.355472000000000E-04 4.756652000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.686132000000000E-10 1.069424123765000E+41 3.905413236609000E+12 3.074261484139000E+12 + 295 1.908313359320000E+32 1.922719742480000E+34 6.302514003916211E+14 1.351944241237650E+08 6.421107008235134E-12 2.026738841063838E+02 1.683587423645393E+04 1.683634205230926E+04 3.508103657722300E-01 1.940675256478968E+02 1.932263625700000E+34 6.332117823110782E+14 7.180306000000000E-01 0.000000000000000E+00 2.761485000000000E-01 6.398972000000000E-04 1.020394000000000E-03 2.457630000000000E-03 4.355471000000000E-04 4.756532000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.237472000000000E-10 1.109424123765000E+41 3.875298061362000E+12 3.044261484139000E+12 + 296 1.908780423480000E+32 1.941807508920000E+34 6.361721642305352E+14 1.364244241237650E+08 6.376904418506439E-12 1.935520567017644E+02 1.664315557770157E+04 1.664361803851308E+04 3.509080622672900E-01 1.808192348969561E+02 1.951421710360000E+34 6.391159295675016E+14 7.180331000000000E-01 0.000000000000000E+00 2.761459000000000E-01 6.399021000000000E-04 1.020370000000000E-03 2.457652000000000E-03 4.355471000000000E-04 4.756416000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 9.119423000000000E-11 1.159308948518000E+41 3.845298061362000E+12 3.024261484139000E+12 + 297 1.922824772240000E+32 1.961035911800000E+34 6.420596949044679E+14 1.376594241237650E+08 6.347416806700321E-12 1.831697735076128E+02 1.641525903806701E+04 1.641571620513339E+04 3.511057587623501E-01 1.676988290078251E+02 1.970950780820000E+34 6.450444302576451E+14 7.180356000000000E-01 0.000000000000000E+00 2.761435000000000E-01 6.399070000000000E-04 1.020346000000000E-03 2.457673000000000E-03 4.355470000000000E-04 4.756305000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.794119000000000E-11 1.209193773271000E+41 3.825298061362000E+12 3.014146308892000E+12 + 298 1.982986534880000E+32 1.980865649840000E+34 6.480291656108222E+14 1.388894241237650E+08 6.332818153153265E-12 1.733220465318584E+02 1.615369794937336E+04 1.619048413506687E+04 3.514034552574100E-01 1.544151689131915E+02 1.990737850520000E+34 6.509494901774670E+14 7.180380000000000E-01 0.000000000000000E+00 2.761411000000000E-01 6.399121000000000E-04 1.020322000000000E-03 2.457694000000000E-03 4.355470000000000E-04 4.756194000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.034039000000000E-11 1.259078598024000E+41 3.815298061362000E+12 3.004146308892000E+12 + 299 1.974439141400000E+32 2.000610051200000E+34 6.538698147441118E+14 1.400894241237650E+08 6.332818153153265E-12 1.625213186022966E+02 1.593206090454988E+04 1.593206090454988E+04 3.519000000000000E-01 1.413998182294097E+02 2.010289498400000E+34 6.566869668888408E+14 7.180404000000000E-01 0.000000000000000E+00 2.761387000000000E-01 6.399171000000000E-04 1.020299000000000E-03 2.457715000000000E-03 4.355470000000000E-04 4.756085000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.702245000000000E-11 1.318963422777000E+41 3.815182886115000E+12 2.994261484139000E+12 + 300 1.935817033120000E+32 2.019968945600000E+34 6.595041190335699E+14 1.412793665361415E+08 6.318253075577632E-12 1.523938292132111E+02 1.564170561871649E+04 1.567776347411206E+04 3.560539299012001E-01 1.287254281593345E+02 2.029691160600000E+34 6.623025700470149E+14 7.180427000000000E-01 0.000000000000000E+00 2.761364000000000E-01 6.399220000000000E-04 1.020277000000000E-03 2.457735000000000E-03 4.355470000000000E-04 4.755982000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.754423000000000E-11 1.388733072283000E+41 3.805182886115000E+12 2.994146308892000E+12 + 301 1.944548228680000E+32 2.039413375600000E+34 6.651010210604600E+14 1.424893089485180E+08 6.274944768187573E-12 1.415875107355482E+02 1.535707451094404E+04 1.539204363540466E+04 3.615940387727600E-01 1.160271059317083E+02 2.049250964200000E+34 6.679197265219762E+14 7.180449000000000E-01 0.000000000000000E+00 2.761342000000000E-01 6.399269000000000E-04 1.020255000000000E-03 2.457754000000000E-03 4.355470000000000E-04 4.755880000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.032567000000000E-11 1.448617897036000E+41 3.785182886115000E+12 2.974146308892000E+12 + 302 1.967451280720000E+32 2.059088552800000E+34 6.707384319834926E+14 1.437143089485180E+08 6.202931960428030E-12 1.303591906024036E+02 1.504252440471625E+04 1.507720100476176E+04 3.671329958918500E-01 1.031901290023247E+02 2.068758054000000E+34 6.735282113548548E+14 7.180471000000000E-01 0.000000000000000E+00 2.761320000000000E-01 6.399317000000000E-04 1.020233000000000E-03 2.457773000000000E-03 4.355470000000000E-04 4.755780000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.504142000000000E-11 1.528387546542000E+41 3.735182886115000E+12 2.934146308892000E+12 + 303 1.933972646880000E+32 2.078427555200000E+34 6.763179907262170E+14 1.449692513608945E+08 6.047973889216569E-12 1.189215337263576E+02 1.470094575345497E+04 1.473483493338698E+04 3.727995950702200E-01 9.061119604247229E+01 2.088179608200000E+34 6.791798741008835E+14 7.180492000000001E-01 0.000000000000000E+00 2.761299000000000E-01 6.399363000000000E-04 1.020213000000000E-03 2.457791000000000E-03 4.355470000000000E-04 4.755684000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.120674000000000E-11 1.618042020801000E+41 3.645182886115000E+12 2.864031133645000E+12 + 304 1.950389514480000E+32 2.097931661200000E+34 6.820417574755498E+14 1.462791361856475E+08 5.856119192174639E-12 1.065228711469277E+02 1.433449212815466E+04 1.433449212815466E+04 3.786007468226900E-01 7.792205889014323E+01 2.107687692600000E+34 6.849812994935079E+14 7.180512999999999E-01 0.000000000000000E+00 2.761278000000000E-01 6.399410000000000E-04 1.020192000000000E-03 2.457810000000000E-03 4.355470000000000E-04 4.755588000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 8.283237999999999E-12 1.717811670307000E+41 3.524952535621000E+12 2.754146308892000E+12 + 305 1.951231343920000E+32 2.117443724000000E+34 6.879208415114660E+14 1.476290785980240E+08 5.592716781354092E-12 9.454319066698343E+01 1.388136218457989E+04 1.391296201549524E+04 3.844007468226900E-01 6.528416979971308E+01 2.126988900200000E+34 6.908945774357339E+14 7.180534000000000E-01 0.000000000000000E+00 2.761257000000000E-01 6.399458000000000E-04 1.020171000000000E-03 2.457828000000000E-03 4.355470000000000E-04 4.755490000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.066939000000000E-12 1.847350969319000E+41 3.374722185127000E+12 2.624031133645000E+12 + 306 1.909035240000000E+32 2.136534076400000E+34 6.938683133600018E+14 1.490240785980240E+08 5.316463381917126E-12 8.164961140831559E+01 1.338119639355952E+04 1.341165322773734E+04 3.903972915652800E-01 5.294119955913597E+01 2.146122020400000E+34 6.969755708548940E+14 7.180550999999999E-01 0.000000000000000E+00 2.761240000000000E-01 6.399496000000000E-04 1.020154000000000E-03 2.457843000000000E-03 4.355470000000000E-04 4.755413000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.696671000000000E-12 2.006775093084000E+41 3.204491834633000E+12 2.474031133645000E+12 + 307 1.917465270680000E+32 2.155709964400000E+34 7.000828283497861E+14 1.505189634227770E+08 5.019065079074712E-12 6.799919985071759E+01 1.278156863974641E+04 1.281103319847005E+04 3.969869257930500E-01 4.055998588969702E+01 2.165571423400000E+34 7.034215879713440E+14 7.180567000000000E-01 0.000000000000000E+00 2.761224000000000E-01 6.399531000000000E-04 1.020139000000000E-03 2.457857000000000E-03 4.355470000000000E-04 4.755341000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.653197000000000E-12 2.166544742590000E+41 3.024261484139000E+12 2.284376659386000E+12 + 308 1.972342723520000E+32 2.175432882400000E+34 7.067603475929019E+14 1.520238482475300E+08 4.716532452047452E-12 5.312850394451197E+01 1.204279368370835E+04 1.204279368370835E+04 4.045684977535300E-01 2.781950894975513E+01 2.184238076200000E+34 7.098679434427529E+14 7.180586000000000E-01 0.000000000000000E+00 2.761205000000000E-01 6.399574000000001E-04 1.020120000000000E-03 2.457873000000000E-03 4.355469000000000E-04 4.755253000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.648717000000000E-12 2.860555629746000E+41 2.834146308892000E+12 2.084607009880000E+12 + 309 1.761064420680000E+32 2.193043270000000E+34 7.129755392926038E+14 1.534037906599065E+08 4.432235490223580E-12 3.466037809777733E+01 1.081702981253829E+04 1.081702981253829E+04 4.177890268331000E-01 1.631192501085550E+01 2.200666879000000E+34 7.157803137081032E+14 7.180606000000000E-01 0.000000000000000E+00 2.761185000000000E-01 6.399619000000000E-04 1.020101000000000E-03 2.457891000000000E-03 4.355469000000000E-04 4.755162000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.895124000000000E-12 2.803435010920999E+41 2.663915958398000E+12 1.914491834633000E+12 + 310 1.524716429160000E+32 2.208290488000000E+34 7.185850881236028E+14 1.547988482475300E+08 4.193945928773884E-12 2.070776236116316E+01 9.497719359226794E+03 9.498052076185006E+03 3.260350205407500E-01 8.640493463721265E+00 2.216722706800000E+34 7.218076149864162E+14 7.180624000000000E-01 0.000000000000000E+00 2.761167000000000E-01 6.399661000000000E-04 1.020082000000000E-03 2.457907000000000E-03 4.355469000000000E-04 4.755077000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.377684000000000E-12 3.250670804993000E+41 2.523685607904000E+12 1.793915958398000E+12 + 311 1.686442168640000E+32 2.225154925600000E+34 7.250301418492299E+14 1.563741937732710E+08 3.968467490564625E-12 1.123664980038017E+01 8.151527054482564E+03 8.133090287839122E+03 1.475083774516401E-01 4.861891442668658E+00 2.234373872999999E+34 7.286968430810096E+14 7.180641000000001E-01 0.000000000000000E+00 2.761150000000000E-01 6.399699000000000E-04 1.020066000000000E-03 2.457922000000000E-03 4.355469000000000E-04 4.754999000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.025219000000000E-12 3.471131505981000E+41 2.383455257410000E+12 1.406334638585000E+12 + 312 1.843730002920000E+32 2.243592820400000E+34 7.323635443127894E+14 1.580895392990120E+08 3.720684344873885E-12 6.617527539387686E+00 7.151380913080701E+03 7.119079981914502E+03 7.539840362836311E-02 2.796232455648177E+00 2.252754081000000E+34 7.362159092498396E+14 7.180664000000000E-01 0.000000000000000E+00 2.761127000000000E-01 6.399751000000000E-04 1.020043000000000E-03 2.457942000000000E-03 4.355469000000000E-04 4.754895000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.815712000000000E-13 3.621477031722000E+41 2.243224906916000E+12 5.951550378563004E+11 + 313 1.832238792360000E+32 2.261915341600000E+34 7.400682741868899E+14 1.599097696495060E+08 3.472344666761586E-12 4.244903021195637E+00 6.426316784073801E+03 6.382784968453208E+03 4.310897261238907E-02 1.638192090342143E+00 2.271233749000000E+34 7.441875006301536E+14 7.180679000000000E-01 0.000000000000000E+00 2.761112000000000E-01 6.399785000000000E-04 1.020029000000000E-03 2.457955000000000E-03 4.355469000000000E-04 4.754827000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.263846000000000E-13 3.685738515861000E+41 2.092994556422000E+12 1.936197881421005E+11 + 314 1.863733994880000E+32 2.280552156400000E+34 7.483067270734172E+14 1.620449424123765E+08 3.233127465560434E-12 3.088948821626517E+00 5.974584253250002E+03 5.906985590889662E+03 2.178420037121902E-02 1.056131415585039E+00 2.291721514400000E+34 7.535203028750996E+14 7.180695000000000E-01 0.000000000000000E+00 2.761096000000000E-01 6.399821000000000E-04 1.020013000000000E-03 2.457969000000000E-03 4.355469000000000E-04 4.754754000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.009097000000000E-13 3.708157196048000E+41 1.952764205928000E+12 7.811137436215028E+10 + 315 2.233871600000000E+32 2.302890872400000E+34 7.587338786767820E+14 1.644249424123765E+08 2.982791020075351E-12 2.346457652120346E+00 5.646683924755707E+03 5.519516399238341E+03 1.179564721993401E-02 6.882933167623022E-01 2.313416724200000E+34 7.638992304394555E+14 7.180714000000000E-01 0.000000000000000E+00 2.761077000000000E-01 6.399864000000000E-04 1.019994000000000E-03 2.457985000000000E-03 4.355470000000000E-04 4.754666000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.869702000000000E-13 3.719193773271000E+41 1.792649030681000E+12 3.285052432638007E+10 + 316 2.105182295200000E+32 2.323942576000000E+34 7.690645822021290E+14 1.667149424123765E+08 2.726608767989430E-12 1.791313726928461E+00 5.377070728418233E+03 5.160609090703876E+03 6.614509484956605E-03 5.016061690230696E-01 2.333175447800000E+34 7.739192242723935E+14 7.180728000000000E-01 0.000000000000000E+00 2.761063000000000E-01 6.399897000000000E-04 1.019980000000000E-03 2.457998000000000E-03 4.355470000000000E-04 4.754601000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.261538000000000E-13 3.739308948517999E+41 1.642303504940000E+12 1.470697355169002E+10 + 317 1.846659298840000E+32 2.342408319600000E+34 7.787738663426581E+14 1.691600000000000E+08 2.492429179128024E-12 1.571172926593511E+00 5.252846523612103E+03 4.994971385964735E+03 4.965018318037602E-03 3.813028784017606E-01 2.352849630400000E+34 7.846334109305780E+14 7.180742000000000E-01 0.000000000000000E+00 2.761049000000000E-01 6.399928000000000E-04 1.019967000000000E-03 2.458010000000000E-03 4.355470000000000E-04 4.754538000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.784437000000000E-13 3.739424123764999E+41 1.502188329693000E+12 9.547626781050007E+09 + 318 2.088224365200000E+32 2.363290941200000E+34 7.904929555184979E+14 1.717450000000000E+08 2.257474362966191E-12 1.366967041975215E+00 5.120454264721783E+03 4.824414348480403E+03 3.650885818404802E-03 2.846266036563404E-01 2.372344785000000E+34 7.959667976478009E+14 7.180761000000000E-01 0.000000000000000E+00 2.761029000000000E-01 6.399972000000000E-04 1.019947000000000E-03 2.458027000000000E-03 4.355470000000000E-04 4.754448000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.291385000000000E-13 3.749424123765001E+41 1.361957979199000E+12 6.007593927187004E+09 + 319 1.810734346840000E+32 2.381398628800000E+34 8.014406397771036E+14 1.740950000000000E+08 2.030592729854148E-12 1.211492523831826E+00 5.003337917278094E+03 4.681204265869916E+03 2.825252488089101E-03 2.217744540987975E-01 2.388803425800000E+34 8.062923915935224E+14 7.180784000000000E-01 0.000000000000000E+00 2.761007000000000E-01 6.400024000000000E-04 1.019925000000000E-03 2.458047000000000E-03 4.355470000000000E-04 4.754343000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 8.474055000000000E-14 3.749539299012001E+41 1.221727628705000E+12 3.992194633380002E+09 + 320 1.480897138040000E+32 2.396208222800000E+34 8.111441434099412E+14 1.763550000000000E+08 1.839174034575773E-12 1.094462306253461E+00 4.922929686298422E+03 4.563867065135245E+03 2.323052010502701E-03 1.802903949040595E-01 2.403423051200000E+34 8.162092941496832E+14 7.180795000000000E-01 0.000000000000000E+00 2.760996000000000E-01 6.400050000000000E-04 1.019914000000000E-03 2.458057000000000E-03 4.355470000000000E-04 4.754292000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 7.018866000000000E-14 3.759424123765001E+41 1.111497278211000E+12 2.888929233486001E+09 + 321 1.443066532440000E+32 2.410637879600000E+34 8.212744448894254E+14 1.787100000000000E+08 1.673488864741103E-12 1.016307069212987E+00 4.855116268346998E+03 4.480188489160044E+03 1.967110992406400E-03 1.469237604231093E-01 2.417631906800000E+34 8.265525091352436E+14 7.180807000000000E-01 0.000000000000000E+00 2.760984000000000E-01 6.400076000000000E-04 1.019903000000000E-03 2.458067000000000E-03 4.355470000000000E-04 4.754239000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.735616000000000E-14 3.759424123765001E+41 1.011382102964000E+12 2.166144781069001E+09 + 322 1.398794897240000E+32 2.424625934000000E+34 8.318305733810616E+14 1.811300000000000E+08 1.512247331903430E-12 9.524754890990977E-01 4.788369727402838E+03 4.408185233296133E+03 1.692632699947000E-03 1.198903523557817E-01 2.431201234600000E+34 8.371915200030125E+14 7.180825000000000E-01 0.000000000000000E+00 2.760966000000000E-01 6.400117000000000E-04 1.019885000000000E-03 2.458083000000000E-03 4.355470000000000E-04 4.754156000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.232309000000000E-14 3.759424123765001E+41 9.102784452417001E+11 1.657852163285001E+09 + 323 1.315132924720000E+32 2.437776535200000E+34 8.425524666249631E+14 1.836249424123765E+08 1.363398547365749E-12 9.009221604475486E-01 4.733427672991682E+03 4.347340257143995E+03 1.477179467185900E-03 9.828725947664393E-02 2.444083293800000E+34 8.481477091898645E+14 7.180839999999999E-01 0.000000000000000E+00 2.760951000000000E-01 6.400152000000000E-04 1.019870000000000E-03 2.458096000000000E-03 4.355470000000000E-04 4.754085000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.180035000000000E-14 3.759424123765001E+41 8.201747875194000E+11 1.282669277170000E+09 + 324 1.261212277080000E+32 2.450390052400000E+34 8.537429517547658E+14 1.862199424123765E+08 1.217967712946713E-12 8.523790315767288E-01 4.679116319284102E+03 4.287573915342970E+03 1.304405768382100E-03 8.050147204398442E-02 2.456394452600000E+34 8.595655119515219E+14 7.180849000000000E-01 0.000000000000000E+00 2.760942000000000E-01 6.400171000000000E-04 1.019861000000000E-03 2.458104000000000E-03 4.355470000000000E-04 4.754046000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.736099000000000E-14 3.759424123765001E+41 7.340596122724000E+11 1.005029739364800E+09 + 325 1.201005558520000E+32 2.462398852800000E+34 8.653880721482779E+14 1.888950000000000E+08 1.085482501830630E-12 8.138140964025817E-01 4.635964640494632E+03 4.238260791365670E+03 1.161092770566300E-03 6.581934205527994E-02 2.467994472400000E+34 8.713365083580791E+14 7.180862000000000E-01 0.000000000000000E+00 2.760929000000000E-01 6.400201000000000E-04 1.019848000000000E-03 2.458115000000000E-03 4.355470000000000E-04 4.753986000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.169155000000000E-14 3.759424123765001E+41 6.539329195007001E+11 7.926110591778002E+08 + 326 1.118946284440000E+32 2.473590092000000E+34 8.772849445678804E+14 1.916550000000000E+08 9.629923274610492E-13 7.841869231103412E-01 4.593336813717459E+03 4.199173717743914E+03 1.045044675818600E-03 5.384280398933856E-02 2.478899266800000E+34 8.834624172867055E+14 7.180871000000000E-01 0.000000000000000E+00 2.760920000000000E-01 6.400221000000000E-04 1.019840000000000E-03 2.458123000000000E-03 4.355470000000000E-04 4.753946000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.836719000000000E-14 3.769308948518001E+41 5.798407793031001E+11 6.279179830469000E+08 + 327 1.061848088720000E+32 2.484208441600000E+34 8.896398900055305E+14 1.947150000000000E+08 8.523595411831024E-13 7.557314663799076E-01 4.540757322002038E+03 4.160561679334914E+03 9.534774062086902E-04 4.379896695510757E-02 2.489843845200000E+34 8.969250422749346E+14 7.180879000000000E-01 0.000000000000000E+00 2.760912000000000E-01 6.400240000000000E-04 1.019832000000000E-03 2.458130000000000E-03 4.355470000000000E-04 4.753908000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.584723000000000E-14 3.769308948518001E+41 5.137371215808000E+11 4.987201604781001E+08 + 328 1.127071768600000E+32 2.495479248800000E+34 9.042101945443388E+14 1.980350000000000E+08 7.475423057241531E-13 5.949386204049487E-01 4.427311860729904E+03 3.919004349352575E+03 6.934938095993101E-04 3.624309455596839E-02 2.500701893400000E+34 9.115336327476921E+14 7.180889000000000E-01 0.000000000000000E+00 2.760902000000000E-01 6.400262000000000E-04 1.019822000000000E-03 2.458139000000000E-03 4.355470000000000E-04 4.753862000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.309853000000000E-14 3.769308948518001E+41 4.506449813832001E+11 2.973150224647000E+08 + 329 1.044576064040000E+32 2.505924538000000E+34 9.188570709510455E+14 2.018300000000000E+08 6.570869271882204E-13 5.526779805534254E-01 4.386602602199499E+03 3.847474458663262E+03 6.241206417990301E-04 3.023458280883156E-02 2.511818537600000E+34 9.282280942570271E+14 7.181248000000000E-01 0.000000000000000E+00 2.760543000000000E-01 6.401174000000000E-04 1.019429000000000E-03 2.458487000000000E-03 4.355470000000000E-04 4.752032000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.109708000000000E-14 3.769308948518001E+41 3.955758762350000E+11 2.297621812791001E+08 + 330 1.178778436640000E+32 2.517712537200000E+34 9.375991175630090E+14 2.060300000000000E+08 5.722987890170614E-13 5.181698766314115E-01 4.336271796515957E+03 3.785957596456954E+03 5.543255907018202E-04 2.428713951862263E-02 2.523370816600000E+34 9.467450195556308E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769308948518001E+41 3.444952535621000E+11 1.742899627664000E+08 + 331 1.131731071760000E+32 2.529029096000000E+34 9.558909215482526E+14 2.087150000000000E+08 5.124314493491822E-13 4.858163894630835E-01 4.286634903719452E+03 3.725424320854375E+03 4.893800649608201E-04 1.969870975170847E-02 2.531236113400000E+34 9.587332720235661E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.084491834633000E+11 1.349674720748000E+08 + 332 4.414544035200000E+31 2.533443130800000E+34 9.615756224988799E+14 2.095350000000000E+08 5.112224384636575E-13 4.640077220471925E-01 4.257125916605112E+03 3.682880916692415E+03 4.456566249816400E-04 1.840321005844155E-02 2.534083653200000E+34 9.624480823641351E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.074376659386000E+11 1.198407793031000E+08 + 333 1.281317917160000E+31 2.534724175600000E+34 9.633205422293902E+14 2.099300000000000E+08 5.207577905869433E-13 4.596975213105257E-01 4.247334798697568E+03 3.674309582930252E+03 4.289621812791000E-04 1.801331468198611E-02 2.535389563000000E+34 9.642033899771960E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.134607009880000E+11 1.168177442537000E+08 + 334 1.329459143120000E+31 2.536054950400000E+34 9.650862377250020E+14 2.103449424123765E+08 5.019065079074713E-13 4.596975213105257E-01 4.247334798697568E+03 3.674309582930252E+03 4.281598777741601E-04 1.763376761114505E-02 2.536718348600000E+34 9.660835786742610E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.024261484139000E+11 1.117831916796000E+08 + 335 1.327689152960000E+31 2.537381746800000E+34 9.670809196235200E+14 2.108749424123765E+08 4.641120313497488E-13 4.554829891024932E-01 4.237566199736310E+03 3.665858905393333E+03 4.327783058136801E-04 1.723301100808722E-02 2.538148583400000E+34 9.684117642718200E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.794031133645000E+11 1.057371215808000E+08 + 336 1.532393746560000E+31 2.538915420000000E+34 9.697426089201201E+14 2.115400000000000E+08 4.422173479894812E-13 4.513070959579950E-01 4.237566199736310E+03 3.657427663875406E+03 4.313656365365100E-04 1.672513727997803E-02 2.539739943400000E+34 9.712457320393340E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.663915958398000E+11 1.006037207591700E+08 + 337 1.650637364320000E+31 2.540564466800000E+34 9.727488551585478E+14 2.122350000000000E+08 4.442585305252693E-13 4.471694876319656E-01 4.227820067929213E+03 3.649015813674861E+03 4.210103524179501E-04 1.616270838178665E-02 2.541358157600000E+34 9.742048674237604E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.673915958398000E+11 9.797607869989002E+07 + 338 1.586029540760000E+31 2.542151848400000E+34 9.756608796889730E+14 2.128850000000000E+08 4.473379835434599E-13 4.431239344117643E-01 4.218096351603249E+03 3.640723327449272E+03 4.102562200518601E-04 1.562814205282929E-02 2.542905755200000E+34 9.770421773702744E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.693915958398000E+11 9.555765066037001E+07 + 339 1.507508655640000E+31 2.543659662000000E+34 9.784234750515756E+14 2.134950000000000E+08 4.412002763125461E-13 4.390613497617441E-01 4.218096351603249E+03 3.632349896156398E+03 4.030193639728200E-04 1.513678730127732E-02 2.544340963000000E+34 9.797005916432176E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.653915958398000E+11 9.232540159121002E+07 + 340 1.364045562440000E+31 2.545022264000000E+34 9.809777082348596E+14 2.140650000000000E+08 4.311573319086086E-13 4.390077246639834E-01 4.208394999204243E+03 3.632250108933348E+03 3.976917219135401E-04 1.469870217499807E-02 2.545658808000000E+34 9.822025740710122E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.593800783151000E+11 8.890697355169003E+07 + 341 1.272877144800000E+31 2.546295352000000E+34 9.834274399071648E+14 2.146099424123765E+08 4.213429928290901E-13 4.349828776517639E-01 4.198715959296587E+03 3.623896165502279E+03 3.929675351116701E-04 1.429298096706840E-02 2.546915982400000E+34 9.846213195262530E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.543570432657000E+11 8.578509025476001E+07 + 342 1.241096293160000E+31 2.547536612800000E+34 9.858151991453412E+14 2.151198848247530E+08 4.193945928773884E-13 4.310475769881694E-01 4.198715959296587E+03 3.615660764350333E+03 3.863341342900400E-04 1.390599997059347E-02 2.548089610399999E+34 9.868696632514985E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.523685607904000E+11 8.366320695783001E+07 + 343 1.106063628480000E+31 2.548642608000000E+34 9.879241273576560E+14 2.155599424123765E+08 4.108050519331948E-13 4.309949306587486E-01 4.189059180562976E+03 3.615561435607927E+03 3.822122509931100E-04 1.357477968482643E-02 2.549089183400000E+34 9.888124151449882E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.473570432657000E+11 8.104708242325000E+07 + 344 8.937149371200000E+30 2.549535758800000E+34 9.897007029323206E+14 2.159450000000000E+08 4.023794343238645E-13 4.270435453835317E-01 4.189059180562976E+03 3.607245875060392E+03 3.792961264585301E-04 1.330356534975704E-02 2.549942550200001E+34 9.905315819656952E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.423455257410000E+11 7.872750263126001E+07 + 345 8.127562874000000E+30 2.550349341600000E+34 9.913624609990702E+14 2.163100000000000E+08 3.887074164428044E-13 4.231800720518846E-01 4.188945659895257E+03 3.599048312139686E+03 3.785915194486501E-04 1.305895576740995E-02 2.550743203200000E+34 9.921749583043410E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.343340082163000E+11 7.601252984915002E+07 + 346 7.877216086400000E+30 2.551137064800000E+34 9.929874556096119E+14 2.166699424123765E+08 3.798593554094787E-13 4.231283866262681E-01 4.179424611804135E+03 3.598949439771396E+03 3.766823054288901E-04 1.282638129227595E-02 2.551515012800000E+34 9.937820488015009E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.293224906916000E+11 7.398949479975002E+07 + 347 7.567085882000000E+30 2.551892960800000E+34 9.945766419933896E+14 2.170249424123765E+08 3.703589353142477E-13 4.231283866262681E-01 4.179311352226708E+03 3.598949439771396E+03 3.752753949140700E-04 1.260544859705386E-02 2.552255989800000E+34 9.953677995844050E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.233224906916000E+11 7.187912902752002E+07 + 348 7.251851390399999E+30 2.552619018800000E+34 9.961589571754204E+14 2.173850000000000E+08 3.553225964280579E-13 4.193003338310305E-01 4.179311352226708E+03 3.590770730722218E+03 3.758765466665400E-04 1.239406476746585E-02 2.552966134200000E+34 9.969558470183338E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.142994556422000E+11 6.926300449294001E+07 + 349 6.936895386799999E+30 2.553313249600000E+34 9.977527368612472E+14 2.177499424123765E+08 3.432699413000219E-13 4.192491222602444E-01 4.169812201938536E+03 3.590672085754065E+03 3.753730914091300E-04 1.218864618817734E-02 2.553643456800000E+34 9.985216774521931E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.072994556422000E+11 6.704227294848001E+07 + 350 6.610433850400000E+30 2.553973664000000E+34 9.992906180431390E+14 2.180849424123765E+08 3.285759526661101E-13 4.154561652639854E-01 4.169699202850908E+03 3.582512187213712E+03 3.763765466665400E-04 1.199841005153422E-02 2.554268065600000E+34 1.000014214291593E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.982879381175000E+11 6.452499666143002E+07 + 351 5.890251947200001E+30 2.554562467200000E+34 1.000737810540048E+15 2.184000000000000E+08 3.137782430701549E-13 4.154054232037024E-01 4.169699202850908E+03 3.582413769122689E+03 3.777869124387700E-04 1.182681288812837E-02 2.554842944400000E+34 1.001462336776328E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.892649030681000E+11 6.211117563179001E+07 + 352 5.600192770799999E+30 2.555123421600000E+34 1.002186863012606E+15 2.187450000000000E+08 3.024285776527524E-13 4.116472402462065E-01 4.160221900002141E+03 3.574272637828196E+03 3.781892159437101E-04 1.166103391593160E-02 2.555400915000000E+34 1.002983371966567E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.822533855434000E+11 6.009735460215002E+07 + 353 5.551526992799999E+30 2.555678408400000E+34 1.003779880920528E+15 2.191200000000000E+08 2.829018423636236E-13 4.116472402462065E-01 4.160109160805202E+03 3.574272637828196E+03 3.816030369733501E-04 1.148901329021685E-02 2.555956896400000E+34 1.004585290261620E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.702533855434000E+11 5.708007831510001E+07 + 354 5.568043320400000E+30 2.556235384400000E+34 1.005390699602712E+15 2.194700000000000E+08 2.628063023139226E-13 4.115969633919283E-01 4.150653655148115E+03 3.574174446092502E+03 3.858249202702801E-04 1.132563885600747E-02 2.556480056000000E+34 1.006114421481604E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.582303504940000E+11 5.406049852311001E+07 + 355 4.909649947599999E+30 2.556724727600000E+34 1.006838143360495E+15 2.197900000000000E+08 2.527102322860231E-13 4.078732356628893E-01 4.150653655148115E+03 3.566052038880398E+03 3.863318307851000E-04 1.118428772077487E-02 2.556929615200000E+34 1.007558959062400E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.522188329693000E+11 5.224667749347001E+07 + 356 4.087262948400000E+30 2.557134502800000E+34 1.008279774764306E+15 2.201099424123765E+08 2.073112293237860E-13 4.078732356628893E-01 4.150541175244135E+03 3.566052038880398E+03 4.045251227351700E-04 1.106335654913741E-02 2.557334417400000E+34 1.009002556414888E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.251727628705000E+11 4.610982141443001E+07 + 357 3.999425844000000E+30 2.557534332000000E+34 1.009725338065470E+15 2.204399424123765E+08 2.304744710610029E-13 4.040355654928787E-01 4.150428954036755E+03 3.557655090411331E+03 3.892774959541201E-04 1.093363283117413E-02 2.557736235800000E+34 1.010506665954772E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.391957979199000E+11 4.849139337491001E+07 + 358 4.037505099599999E+30 2.557938139600000E+34 1.011287993844075E+15 2.207899424123765E+08 2.262678378827585E-13 4.037055458294341E-01 4.140660078053656E+03 3.556978730930489E+03 3.856707248673200E-04 1.079725062192903E-02 2.558151978600000E+34 1.012047773287162E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.361957979199000E+11 4.709925317731000E+07 + 359 4.274174148000000E+30 2.558365817600000E+34 1.012807552730251E+15 2.211299424123765E+08 2.136169823610041E-13 3.822221808938244E-01 4.112488785024660E+03 3.508650540080422E+03 3.494957215287500E-04 1.068377602767335E-02 2.558481191200000E+34 1.013524112683844E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.281957979199000E+11 3.974877853352001E+07 + 360 2.318766677600000E+30 2.558596564800000E+34 1.014240672637436E+15 2.220500000000000E+08 1.320187984471793E-13 3.787629630000272E-01 4.103030323288639E+03 3.500676383507568E+03 3.914134027455801E-04 1.060970190902630E-02 2.559346493200000E+34 1.017474231379480E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 7.951517524700000E+10 2.959119091002000E+07 + 361 1.498211134840000E+31 2.560096421600000E+34 1.020707790121523E+15 2.235150000000000E+08 1.780884589095935E-13 3.752458398691255E-01 4.093593615410948E+03 3.492529755189415E+03 3.481991767861600E-04 1.020857863181285E-02 2.560845355400000E+34 1.023824381521423E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.071612453458000E+11 3.361077070201001E+07 + 362 1.498866377320000E+31 2.561594289200000E+34 1.026940972921324E+15 2.249900000000000E+08 1.826513249576277E-13 3.683534435716284E-01 4.084178611359100E+03 3.476388398532203E+03 3.297197058657300E-04 9.833104600149427E-03 2.562344217600000E+34 1.030509968919181E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.101612453458000E+11 3.219925317731001E+07 + 363 1.499495362360000E+31 2.563094146000000E+34 1.034078964917039E+15 2.267100000000000E+08 1.572616496167565E-13 3.583569950104007E-01 4.065413515178083E+03 3.452551097673934E+03 3.263162506083200E-04 9.466712446745148E-03 2.563844074400000E+34 1.038426847625309E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 9.483014802911002E+10 2.787161111803000E+07 + 364 1.500099681320000E+31 2.564594002800000E+34 1.042774730333579E+15 2.287550000000000E+08 1.272397558029455E-13 3.517748076463706E-01 4.046734636782381E+03 3.436594509598488E+03 3.257266163805500E-04 9.106223494100422E-03 2.565343931200000E+34 1.047622626046609E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 7.670941648465001E+10 2.304281730628001E+07 + 365 1.500680527720000E+31 2.566093859600000E+34 1.052470521759639E+15 2.309950000000000E+08 1.123628708837473E-13 3.422282733838536E-01 4.037318242522787E+03 3.413030072066779E+03 3.163978225688001E-04 8.761440672906622E-03 2.566844782600000E+34 1.057502536088263E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.759789895995000E+10 1.992438926676000E+07 + 366 1.501239294000000E+31 2.567595705600000E+34 1.062534550416887E+15 2.333100000000000E+08 1.060805531718667E-13 3.329016028321276E-01 4.018877111489439E+03 3.389534938312775E+03 3.019425384502400E-04 8.439007022637664E-03 2.568346628600000E+34 1.067644073052840E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.389329195007000E+10 1.801171998959000E+07 + 367 1.501777571520000E+31 2.569097551600000E+34 1.072753595688792E+15 2.356600000000000E+08 1.027123881244455E-13 3.267869720194562E-01 4.000412048446643E+03 3.373869590792089E+03 2.868849508267400E-04 8.137813513513992E-03 2.569848474599999E+34 1.077938447309927E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.178983669266000E+10 1.650135421736000E+07 + 368 1.502295957040000E+31 2.570599397600000E+34 1.083123298931064E+15 2.380450000000000E+08 9.922835135367518E-14 3.178811197984065E-01 3.991103442760817E+03 3.350644035894991E+03 2.729296667081800E-04 7.856907668860611E-03 2.571351315199999E+34 1.088404986365225E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.978638143525000E+10 1.509214019760000E+07 + 369 1.502795843000000E+31 2.572103232800000E+34 1.093686673799387E+15 2.404800000000000E+08 9.563631349077967E-14 3.092179767750123E-01 3.972873405608826E+03 3.327578364593202E+03 2.699626626000300E-04 7.584126709382917E-03 2.572855150400000E+34 1.099080651212797E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.758292617784000E+10 1.368522968278000E+07 + 370 1.503278224000000E+31 2.573607068000000E+34 1.104474628626208E+15 2.429600000000000E+08 9.175627529964367E-14 3.008263582005635E-01 3.954619710394833E+03 3.304761441536000E+03 2.725449813832000E-04 7.314308281344222E-03 2.574357991000000E+34 1.109986664445421E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.528062267290000E+10 1.237947092043000E+07 + 371 1.503743895720000E+31 2.575108914000000E+34 1.115498700264632E+15 2.454950000000000E+08 8.803102846802799E-14 2.953008752846858E-01 3.936449883292145E+03 3.289487890032086E+03 2.752376659386001E-04 7.047181874350868E-03 2.575861826200000E+34 1.121129571971708E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.307716741549000E+10 1.117371215808000E+07 + 372 1.504193653840000E+31 2.576614738400000E+34 1.126760443678784E+15 2.480850000000000E+08 8.464919393736427E-14 2.872531066120855E-01 3.918469726838503E+03 3.266843214677180E+03 2.779453232761100E-04 6.782213804415191E-03 2.577366656000000E+34 1.132507657870873E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.097371215808000E+10 1.016680164326000E+07 + 373 1.504628492960000E+31 2.578118573600000E+34 1.138254872062962E+15 2.507250000000000E+08 8.121491156765013E-14 2.794246619782156E-01 3.900465993823005E+03 3.244354424170943E+03 2.806322490691600E-04 6.520250894766141E-03 2.578871485800000E+34 1.144116979528632E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 4.887140865314000E+10 9.161042880910002E+06 + 374 1.505049009840000E+31 2.579624398000000E+34 1.149979086994301E+15 2.534200000000000E+08 7.809492765829459E-14 2.692861674145481E-01 3.864706306647749E+03 3.214522691821607E+03 2.816539299012000E-04 6.262385941706158E-03 2.580376315600000E+34 1.155958828702688E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.696910514820000E+10 7.638488778987001E+06 + 375 1.505455801240000E+31 2.581128233200000E+34 1.161938570411075E+15 2.561650000000000E+08 7.492655687121483E-14 2.643405658281265E-01 3.846949594109780E+03 3.199666590490461E+03 2.844527781487299E-04 6.007510773828205E-03 2.581881145400000E+34 1.168037678672284E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.516564989079000E+10 6.863536243366001E+06 + 376 1.505849861760000E+31 2.582634057600000E+34 1.174136786933494E+15 2.589650000000000E+08 7.204814886326081E-14 2.571365515409419E-01 3.829170695509592E+03 3.177640240612367E+03 2.871527781487300E-04 5.755161484819180E-03 2.583387964400000E+34 1.180359485232374E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.336334638585000E+10 6.169274759227001E+06 + 377 1.506231390320000E+31 2.584141871200000E+34 1.186582183531252E+15 2.618250000000000E+08 6.912510050446933E-14 2.501288666430345E-01 3.811577254273961E+03 3.155765519060302E+03 2.899527781487300E-04 5.505735857974970E-03 2.584894783400000E+34 1.192933797938704E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.165989112844000E+10 5.535128450335001E+06 + 378 1.506601182600000E+31 2.585647695600000E+34 1.199285412346158E+15 2.647400000000000E+08 6.631866507759012E-14 2.433403034648518E-01 3.794064647558162E+03 3.134126314733467E+03 2.928516263962600E-04 5.259037229043527E-03 2.586401602400000E+34 1.205773689956506E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.995758762350000E+10 4.971327667184002E+06 + 379 1.506959835360000E+31 2.587155509200000E+34 1.212261967566853E+15 2.677200000000000E+08 6.362427212351011E-14 2.367086046284786E-01 3.768048601802589E+03 3.112551140940164E+03 2.958516263962600E-04 5.014791960806864E-03 2.587908421400000E+34 1.218897344791497E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.825528411856000E+10 4.457872409774001E+06 + 380 1.507307746440000E+31 2.588661333600000E+34 1.225532722016141E+15 2.707700000000000E+08 6.090077606707370E-14 2.302576379964725E-01 3.750735991078142E+03 3.091124489598567E+03 2.990504746437900E-04 4.773116342440520E-03 2.589415240400000E+34 1.232326610585579E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.665298061362000E+10 3.994762678105000E+06 + 381 1.507645313680000E+31 2.590169147200000E+34 1.239120499155016E+15 2.738900000000000E+08 5.816152373019628E-14 2.239824781145097E-01 3.733502924574532E+03 3.069845338287304E+03 3.023504746437900E-04 4.534189954376939E-03 2.590923054000000E+34 1.246083479886240E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759424123765001E+41 3.505067710868000E+10 3.581883296930001E+06 + 382 1.507972934920000E+31 2.591676960800000E+34 1.253046460617465E+15 2.770850000000000E+08 5.554216789835819E-14 2.198689058886164E-01 3.707801671221458E+03 3.055657871658875E+03 3.058493228913200E-04 4.297638593014210E-03 2.592431862200000E+34 1.260193032124745E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759424123765001E+41 3.344837360374000E+10 3.209349441496001E+06 + 383 1.508291405840000E+31 2.593186763600000E+34 1.267339603632024E+15 2.803650000000000E+08 5.292036451511330E-14 2.119160328878958E-01 3.682277344051988E+03 3.027643431902659E+03 3.085470193863800E-04 4.064270418105689E-03 2.593940670400000E+34 1.274687684734534E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 3.184607009880000E+10 2.765894184086001E+06 + 384 1.508600925360000E+31 2.594694577200000E+34 1.282035765837046E+15 2.837450000000000E+08 5.030635219010445E-14 2.061407326655292E-01 3.656928725114845E+03 3.006801281118765E+03 3.123470193863800E-04 3.833365101164820E-03 2.595449478600000E+34 1.289606587860471E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 3.024491834633000E+10 2.463821029640000E+06 + 385 1.508901692400000E+31 2.596204380000000E+34 1.297177409883896E+15 2.872300000000000E+08 4.771147323841262E-14 2.005228254077430E-01 3.640028018879575E+03 2.986102606691668E+03 3.164458676339100E-04 3.604770980512346E-03 2.596958286800000E+34 1.305001768992681E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.874146308892000E+10 2.201978225688000E+06 + 386 1.509194104800000E+31 2.597712193600000E+34 1.312826128101464E+15 2.908350000000000E+08 4.504387823102161E-14 1.950580217192948E-01 3.615068208152130E+03 2.965546420937078E+03 3.209458676339100E-04 3.378559056102412E-03 2.598467095000000E+34 1.320941628815841E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.713915958398000E+10 1.960250596983000E+06 + 387 1.509478759320000E+31 2.599221996400000E+34 1.329057129530218E+15 2.945800000000000E+08 4.242636029284096E-14 1.897421491028708E-01 3.590182253652192E+03 2.945131742969874E+03 3.259447158814400E-04 3.154122187924910E-03 2.599976897800000E+34 1.337514507623818E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.553685607904000E+10 1.738753318772000E+06 + 388 1.509755854880000E+31 2.600731799200000E+34 1.345971885717417E+15 2.984900000000000E+08 3.968585815135184E-14 1.845711487732931E-01 3.565467612858027E+03 2.924857598657301E+03 3.316435641289700E-04 2.931513426239800E-03 2.601486700600000E+34 1.354831053873126E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.393455257410000E+10 1.537486391055000E+06 + 389 1.510025391480000E+31 2.602241602000000E+34 1.363690222028836E+15 3.025900000000000E+08 3.695181506942291E-14 1.778950301113177E-01 3.540923106454382E+03 2.898042343012003E+03 3.379435641289699E-04 2.710269084492001E-03 2.602996503400000E+34 1.373014938430472E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 2.223224906916000E+10 1.366104288091000E+06 + 390 1.510288164800000E+31 2.603751404800000E+34 1.382339654832108E+15 3.069150000000000E+08 3.416927591839826E-14 1.730468966645038E-01 3.508555024342128E+03 2.878092359848625E+03 3.451412606240300E-04 2.490347691406686E-03 2.604507300800000E+34 1.392217757277160E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 2.062994556422000E+10 1.205067710868000E+06 + 391 1.510543975920000E+31 2.605263196800000E+34 1.402095859722212E+15 3.115150000000000E+08 3.137875987410658E-14 1.667876214533067E-01 3.468392927087563E+03 2.851705850489828E+03 3.520378053666199E-04 2.272126169972158E-03 2.606018098200000E+34 1.412651719900646E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 1.892764205928000E+10 1.033915958398000E+06 + 392 1.510793421600000E+31 2.606772999600000E+34 1.423207580079080E+15 3.164600000000000E+08 2.855109880327627E-14 1.607547503379050E-01 3.436594509598488E+03 2.825561254102919E+03 3.612366536141500E-04 2.054401319616167E-03 2.607528895600000E+34 1.434632413248157E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739539299011999E+41 1.722418680187000E+10 9.080521440455001E+05 + 393 1.511036700760000E+31 2.608284791600000E+34 1.446057246417233E+15 3.218649424123765E+08 2.556441009669583E-14 1.549400940610981E-01 3.405087621753278E+03 2.799656352816443E+03 3.723343501092100E-04 1.836922105872225E-03 2.609040687600000E+34 1.458651333533087E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739539299011999E+41 1.542188329693000E+10 7.863841276129001E+05 + 394 1.511273813400000E+31 2.609796583600000E+34 1.471245420648942E+15 3.279099424123764E+08 2.242000864685485E-14 1.493357595791144E-01 3.366109906062239E+03 2.773988949092508E+03 3.863320466042700E-04 1.618768572289873E-03 2.610552479600000E+34 1.485540339291884E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 1.351957979199000E+10 6.707967338532001E+05 + 395 1.511505157360000E+31 2.611308375600000E+34 1.499835257934825E+15 3.349250000000000E+08 1.908195322507025E-14 1.439176437480407E-01 3.319925146729186E+03 2.748482550804782E+03 4.051262878419200E-04 1.397767447833027E-03 2.612063277000000E+34 1.516795473637614E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 1.151612453458000E+10 5.573014802911000E+05 + 396 1.511730931560000E+31 2.612818178400000E+34 1.533755689340404E+15 3.435050000000001E+08 1.540408036610017E-14 1.361958314396001E-01 3.259329683781698E+03 2.710845251573292E+03 4.302170738221600E-04 1.172989726748741E-03 2.613575069000000E+34 1.555029522904940E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 9.283014802910999E+09 4.408753318772000E+05 + 397 1.511951334920000E+31 2.614331959600000E+34 1.576303356469476E+15 3.545750000000000E+08 1.168518992967093E-14 1.288735569312615E-01 3.192480784409476E+03 2.673651060347517E+03 4.673044045449900E-04 9.406735456725225E-04 2.615087855600000E+34 1.604329886377402E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.719769649506000E+41 7.040250596983000E+09 3.305758762350000E+05 + 398 1.512166566360000E+31 2.615843751600000E+34 1.632356416285329E+15 3.682800000000000E+08 8.348776345564017E-15 1.197192025339124E-01 3.126918024237526E+03 2.624851428849374E+03 5.250249336245600E-04 6.949954691487124E-04 2.616599647600000E+34 1.665210963424940E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.719654474258999E+41 5.027256040561001E+09 2.333800783151000E+05 + 399 1.512376824800000E+31 2.617355543600000E+34 1.698065510564550E+15 4.244849999999999E+08 6.601395848975489E-15 1.101828597281630E-01 3.055657871658875E+03 2.570946173318331E+03 5.690972915652800E-04 4.481584120613199E-04 2.618111439600000E+34 1.912169359734609E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.709769649506000E+41 3.975758762350000E+09 1.842764205928000E+05 + 400 1.512582110240000E+31 2.618867335600000E+34 2.126273208904668E+15 4.732800000000000E+08 7.649548028809211E-16 7.623665194026311E-02 2.780233476424581E+03 2.344794175376322E+03 1.368308948518000E-03 0.000000000000000E+00 2.618867335600000E+34 2.126273208904668E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.679884824753000E+41 4.606795339573000E+08 2.123224906916000E+04 diff --git a/docs/examples/modelconfig.rst b/docs/examples/modelconfig.rst index 12cd64fe2da..649504f583c 100644 --- a/docs/examples/modelconfig.rst +++ b/docs/examples/modelconfig.rst @@ -17,12 +17,15 @@ The density and composition may be specified independently in the following ways Specifying the density ====================== -* :doc:`using a power-law density profile ` -* :doc:`using an exponential density profile ` -* :doc:`using a custom density profile ` +.. toctree:: + densitypow + densityexp + densitycust + Specifying the composition ========================== -* :doc:`using a uniform composition ` -* :doc:`using a custom stratified composition ` +.. toctree:: + abundanceuni + abundancecust diff --git a/docs/examples/stella_to_tardis.ipynb b/docs/examples/stella_to_tardis.ipynb new file mode 100644 index 00000000000..2f587513756 --- /dev/null +++ b/docs/examples/stella_to_tardis.ipynb @@ -0,0 +1,1877 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### STELLA Files to TARDIS ###" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.io.parsers import stella\n", + "from astropy import units as u" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "data = stella.read_stella_data('mesa.stella.dat')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mass_of_cellcell_center_mcell_center_Rcell_center_vavg_densityradiation_pressureavg_temperatureradiation_temperatureavg_opacitytau...cr48cr60fe52fe54fe56co56ni56luminosityn_barn_e
16.006769e+295.190243e+332.517209e+133.930633e+061.005529e-1111237.95450645943.45302345943.4530230.1627125403.504881...0.00.00.00.00.0000210.04.079500e-037.648868e+386.055413e+122.412188e+12
21.262406e+305.191506e+332.970626e+135.050403e+062.928088e-1111236.54402245942.18222945942.1822290.1644125381.678444...0.00.00.00.00.0000210.04.079500e-039.609214e+381.762304e+136.969790e+12
31.264624e+305.192771e+333.198879e+135.680288e+064.619659e-1111133.52676745836.51814245836.5181420.1650125364.280084...0.00.00.00.00.0000210.04.079500e-031.050921e+392.783916e+131.091728e+13
41.263067e+305.194034e+333.357130e+136.135230e+065.896887e-1111133.52676745836.51814245836.5181420.1653105348.854704...0.00.00.00.00.0000210.04.079500e-031.100921e+393.545183e+131.392188e+13
51.259387e+305.195293e+333.480638e+136.495173e+066.912717e-1111032.83872045732.36203145732.3620310.1655105334.724893...0.00.00.00.00.0000210.04.079500e-031.140921e+394.166219e+131.632649e+13
61.258091e+305.196550e+333.583450e+136.805058e+067.774308e-1111031.45398045731.09707645731.0970760.1657095321.480960...0.00.00.00.00.0000210.04.079500e-031.180921e+394.687026e+131.832995e+13
71.256430e+305.197807e+333.672346e+137.075000e+068.524104e-1111031.45398045731.09707645731.0970760.1658095308.917604...0.00.00.00.00.0000210.04.079500e-031.210921e+395.127832e+132.013225e+13
81.253971e+305.199061e+333.751183e+137.310000e+069.155072e-1111031.45398045731.09707645731.0970760.1658205296.950388...0.00.00.00.00.0000210.04.079500e-031.240806e+395.518408e+132.153570e+13
91.253773e+305.200314e+333.822537e+137.520000e+069.719899e-1110930.31700245625.91847145625.9184710.1659365285.442617...0.00.00.00.00.0000210.04.079500e-031.260806e+395.848984e+132.283801e+13
101.252728e+305.201567e+333.888202e+137.715000e+061.017798e-1010930.31700245625.91847145625.9184710.1664445274.319278...0.00.00.00.00.0000210.04.079380e-031.290806e+396.129444e+132.403916e+13
111.251315e+305.202818e+333.949364e+137.899942e+061.056026e-1010930.31700245625.91847145625.9184710.1674435263.504963...0.00.00.00.00.0000210.04.079205e-031.310806e+396.359790e+132.504031e+13
121.248465e+305.204067e+334.006494e+138.069885e+061.095625e-1010930.31700245625.91847145625.9184710.1683445252.968552...0.00.00.00.00.0000210.04.079205e-031.330806e+396.600135e+132.594261e+13
131.243739e+305.205311e+334.060165e+138.224885e+061.128950e-1010830.10725345520.98177145520.9817710.1691435242.720455...0.00.00.00.00.0000210.04.079205e-031.350806e+396.810366e+132.674377e+13
141.243959e+305.206554e+334.111083e+138.374827e+061.160579e-1010830.10725345520.98177145520.9817710.1699415232.678533...0.00.00.00.00.0000210.04.079205e-031.380691e+396.990711e+132.744492e+13
151.245057e+305.207799e+334.159658e+138.514827e+061.190315e-1010830.10725345520.98177145520.9817710.1705415222.818389...0.00.00.00.00.0000210.04.079205e-031.400691e+397.160942e+132.814492e+13
161.231934e+305.209033e+334.205671e+138.644827e+061.215239e-1010830.10725345520.98177145520.9817710.1711415213.249350...0.00.00.00.00.0000210.04.079205e-031.420806e+397.311172e+132.864722e+13
171.216115e+305.210248e+334.249330e+138.769770e+061.237832e-1010730.81623345416.28641845416.2864180.1729415203.903812...0.00.00.00.00.0000210.04.079205e-031.440806e+397.451402e+132.924722e+13
181.218289e+305.211465e+334.291475e+138.889770e+061.257945e-1010730.81623345416.28641845416.2864180.1734415194.709058...0.00.00.00.00.0000210.04.079205e-031.470691e+397.571633e+132.974837e+13
191.220635e+305.212687e+334.332273e+139.009712e+061.275483e-1010730.81623345416.28641845416.2864180.1738415185.663371...0.00.00.00.00.0000210.04.079205e-031.490691e+397.691748e+133.014953e+13
201.218599e+305.213906e+334.371717e+139.119712e+061.293227e-1010730.81623345416.28641845416.2864180.1742405176.775982...0.00.00.00.00.0000210.04.079205e-031.510691e+397.791978e+133.054953e+13
211.218527e+305.215123e+334.409991e+139.224712e+061.311178e-1010730.81623345416.28641845416.2864180.1745415168.017132...0.00.00.00.00.0000210.04.079205e-031.530691e+397.891978e+133.094953e+13
221.216195e+305.216341e+334.447132e+139.329654e+061.323350e-1010632.43551945311.83185845311.8318580.1748405159.424248...0.00.00.00.00.0000210.04.079205e-031.560576e+397.982093e+133.125068e+13
231.213956e+305.217554e+334.483239e+139.429654e+061.338634e-1010632.43551945311.83185845311.8318580.1751405150.959409...0.00.00.00.00.0000210.04.079205e-031.580691e+398.062209e+133.155183e+13
241.214388e+305.218768e+334.518466e+139.524654e+061.351020e-1010632.43551945311.83185845311.8318580.1754405142.610227...0.00.00.00.00.0000210.04.079205e-031.600691e+398.132324e+133.185183e+13
251.212675e+305.219981e+334.552823e+139.619654e+061.360385e-1010632.43551945311.83185845311.8318580.1756405134.401425...0.00.00.00.00.0000210.04.079205e-031.630576e+398.202439e+133.215183e+13
261.210647e+305.221192e+334.586395e+139.714654e+061.369815e-1010632.43551945311.83185845311.8318580.1758395126.315470...0.00.00.00.00.0000210.04.079156e-031.650576e+398.252554e+133.235183e+13
271.209411e+305.222402e+334.619471e+139.799654e+061.369815e-1010631.11310345310.58138345310.5813830.1758395118.349189...0.00.00.00.00.0000210.04.078789e-031.670691e+398.242554e+133.255183e+13
281.204720e+305.223605e+334.651757e+139.884654e+061.379268e-1010534.95676445207.61753645207.6175360.1759405110.514635...0.00.00.00.00.0000210.04.078789e-031.690691e+398.292669e+133.275183e+13
291.203253e+305.224809e+334.683392e+139.969654e+061.385676e-1010534.95676445207.61753645207.6175360.1761395102.793922...0.00.00.00.00.0000210.04.078789e-031.720576e+398.342669e+133.285298e+13
301.204574e+305.226014e+334.714483e+131.005460e+071.392072e-1010534.95676445207.61753645207.6175360.1762405095.166450...0.00.00.00.00.0000210.04.078789e-031.740576e+398.382669e+133.305298e+13
..................................................................
3701.503278e+312.573607e+341.104475e+152.429600e+089.175628e-140.3008263954.6197103304.7614420.0002730.007314...0.00.00.00.00.0000170.01.108306e-143.769424e+415.528062e+101.237947e+07
3711.503744e+312.575109e+341.115499e+152.454950e+088.803103e-140.2953013936.4498833289.4878900.0002750.007047...0.00.00.00.00.0000170.01.108306e-143.769424e+415.307717e+101.117371e+07
3721.504194e+312.576615e+341.126760e+152.480850e+088.464919e-140.2872533918.4697273266.8432150.0002780.006782...0.00.00.00.00.0000170.01.108306e-143.769424e+415.097371e+101.016680e+07
3731.504628e+312.578119e+341.138255e+152.507250e+088.121491e-140.2794253900.4659943244.3544240.0002810.006520...0.00.00.00.00.0000170.01.108306e-143.769424e+414.887141e+109.161043e+06
3741.505049e+312.579624e+341.149979e+152.534200e+087.809493e-140.2692863864.7063073214.5226920.0002820.006262...0.00.00.00.00.0000170.01.108306e-143.759539e+414.696911e+107.638489e+06
3751.505456e+312.581128e+341.161939e+152.561650e+087.492656e-140.2643413846.9495943199.6665900.0002840.006008...0.00.00.00.00.0000170.01.108306e-143.759539e+414.516565e+106.863536e+06
3761.505850e+312.582634e+341.174137e+152.589650e+087.204815e-140.2571373829.1706963177.6402410.0002870.005755...0.00.00.00.00.0000170.01.108306e-143.759539e+414.336335e+106.169275e+06
3771.506231e+312.584142e+341.186582e+152.618250e+086.912510e-140.2501293811.5772543155.7655190.0002900.005506...0.00.00.00.00.0000170.01.108306e-143.759539e+414.165989e+105.535128e+06
3781.506601e+312.585648e+341.199285e+152.647400e+086.631867e-140.2433403794.0646483134.1263150.0002930.005259...0.00.00.00.00.0000170.01.108306e-143.759539e+413.995759e+104.971328e+06
3791.506960e+312.587156e+341.212262e+152.677200e+086.362427e-140.2367093768.0486023112.5511410.0002960.005015...0.00.00.00.00.0000170.01.108306e-143.759539e+413.825528e+104.457872e+06
3801.507308e+312.588661e+341.225533e+152.707700e+086.090078e-140.2302583750.7359913091.1244900.0002990.004773...0.00.00.00.00.0000170.01.108306e-143.759539e+413.665298e+103.994763e+06
3811.507645e+312.590169e+341.239120e+152.738900e+085.816152e-140.2239823733.5029253069.8453380.0003020.004534...0.00.00.00.00.0000170.01.108306e-143.759424e+413.505068e+103.581883e+06
3821.507973e+312.591677e+341.253046e+152.770850e+085.554217e-140.2198693707.8016713055.6578720.0003060.004298...0.00.00.00.00.0000170.01.108306e-143.759424e+413.344837e+103.209349e+06
3831.508291e+312.593187e+341.267340e+152.803650e+085.292036e-140.2119163682.2773443027.6434320.0003090.004064...0.00.00.00.00.0000170.01.108306e-143.749539e+413.184607e+102.765894e+06
3841.508601e+312.594695e+341.282036e+152.837450e+085.030635e-140.2061413656.9287253006.8012810.0003120.003833...0.00.00.00.00.0000170.01.108306e-143.749539e+413.024492e+102.463821e+06
3851.508902e+312.596204e+341.297177e+152.872300e+084.771147e-140.2005233640.0280192986.1026070.0003160.003605...0.00.00.00.00.0000170.01.108306e-143.749539e+412.874146e+102.201978e+06
3861.509194e+312.597712e+341.312826e+152.908350e+084.504388e-140.1950583615.0682082965.5464210.0003210.003379...0.00.00.00.00.0000170.01.108306e-143.749539e+412.713916e+101.960251e+06
3871.509479e+312.599222e+341.329057e+152.945800e+084.242636e-140.1897423590.1822542945.1317430.0003260.003154...0.00.00.00.00.0000170.01.108306e-143.749539e+412.553686e+101.738753e+06
3881.509756e+312.600732e+341.345972e+152.984900e+083.968586e-140.1845713565.4676132924.8575990.0003320.002932...0.00.00.00.00.0000170.01.108306e-143.749539e+412.393455e+101.537486e+06
3891.510025e+312.602242e+341.363690e+153.025900e+083.695182e-140.1778953540.9231062898.0423430.0003380.002710...0.00.00.00.00.0000170.01.108306e-143.739654e+412.223225e+101.366104e+06
3901.510288e+312.603751e+341.382340e+153.069150e+083.416928e-140.1730473508.5550242878.0923600.0003450.002490...0.00.00.00.00.0000170.01.108306e-143.739654e+412.062995e+101.205068e+06
3911.510544e+312.605263e+341.402096e+153.115150e+083.137876e-140.1667883468.3929272851.7058500.0003520.002272...0.00.00.00.00.0000170.01.108306e-143.739654e+411.892764e+101.033916e+06
3921.510793e+312.606773e+341.423208e+153.164600e+082.855110e-140.1607553436.5945102825.5612540.0003610.002054...0.00.00.00.00.0000170.01.108306e-143.739539e+411.722419e+109.080521e+05
3931.511037e+312.608285e+341.446057e+153.218649e+082.556441e-140.1549403405.0876222799.6563530.0003720.001837...0.00.00.00.00.0000170.01.108306e-143.739539e+411.542188e+107.863841e+05
3941.511274e+312.609797e+341.471245e+153.279099e+082.242001e-140.1493363366.1099062773.9889490.0003860.001619...0.00.00.00.00.0000170.01.108306e-143.729654e+411.351958e+106.707967e+05
3951.511505e+312.611308e+341.499835e+153.349250e+081.908195e-140.1439183319.9251472748.4825510.0004050.001398...0.00.00.00.00.0000170.01.108306e-143.729654e+411.151612e+105.573015e+05
3961.511731e+312.612818e+341.533756e+153.435050e+081.540408e-140.1361963259.3296842710.8452520.0004300.001173...0.00.00.00.00.0000170.01.108306e-143.729654e+419.283015e+094.408753e+05
3971.511951e+312.614332e+341.576303e+153.545750e+081.168519e-140.1288743192.4807842673.6510600.0004670.000941...0.00.00.00.00.0000170.01.108306e-143.719770e+417.040251e+093.305759e+05
3981.512167e+312.615844e+341.632356e+153.682800e+088.348776e-150.1197193126.9180242624.8514290.0005250.000695...0.00.00.00.00.0000170.01.108306e-143.719654e+415.027256e+092.333801e+05
3991.512377e+312.617356e+341.698066e+154.244850e+086.601396e-150.1101833055.6578722570.9461730.0005690.000448...0.00.00.00.00.0000170.01.108306e-143.709770e+413.975759e+091.842764e+05
\n", + "

399 rows × 36 columns

\n", + "
" + ], + "text/plain": [ + " mass_of_cell cell_center_m cell_center_R cell_center_v avg_density \\\n", + "1 6.006769e+29 5.190243e+33 2.517209e+13 3.930633e+06 1.005529e-11 \n", + "2 1.262406e+30 5.191506e+33 2.970626e+13 5.050403e+06 2.928088e-11 \n", + "3 1.264624e+30 5.192771e+33 3.198879e+13 5.680288e+06 4.619659e-11 \n", + "4 1.263067e+30 5.194034e+33 3.357130e+13 6.135230e+06 5.896887e-11 \n", + "5 1.259387e+30 5.195293e+33 3.480638e+13 6.495173e+06 6.912717e-11 \n", + "6 1.258091e+30 5.196550e+33 3.583450e+13 6.805058e+06 7.774308e-11 \n", + "7 1.256430e+30 5.197807e+33 3.672346e+13 7.075000e+06 8.524104e-11 \n", + "8 1.253971e+30 5.199061e+33 3.751183e+13 7.310000e+06 9.155072e-11 \n", + "9 1.253773e+30 5.200314e+33 3.822537e+13 7.520000e+06 9.719899e-11 \n", + "10 1.252728e+30 5.201567e+33 3.888202e+13 7.715000e+06 1.017798e-10 \n", + "11 1.251315e+30 5.202818e+33 3.949364e+13 7.899942e+06 1.056026e-10 \n", + "12 1.248465e+30 5.204067e+33 4.006494e+13 8.069885e+06 1.095625e-10 \n", + "13 1.243739e+30 5.205311e+33 4.060165e+13 8.224885e+06 1.128950e-10 \n", + "14 1.243959e+30 5.206554e+33 4.111083e+13 8.374827e+06 1.160579e-10 \n", + "15 1.245057e+30 5.207799e+33 4.159658e+13 8.514827e+06 1.190315e-10 \n", + "16 1.231934e+30 5.209033e+33 4.205671e+13 8.644827e+06 1.215239e-10 \n", + "17 1.216115e+30 5.210248e+33 4.249330e+13 8.769770e+06 1.237832e-10 \n", + "18 1.218289e+30 5.211465e+33 4.291475e+13 8.889770e+06 1.257945e-10 \n", + "19 1.220635e+30 5.212687e+33 4.332273e+13 9.009712e+06 1.275483e-10 \n", + "20 1.218599e+30 5.213906e+33 4.371717e+13 9.119712e+06 1.293227e-10 \n", + "21 1.218527e+30 5.215123e+33 4.409991e+13 9.224712e+06 1.311178e-10 \n", + "22 1.216195e+30 5.216341e+33 4.447132e+13 9.329654e+06 1.323350e-10 \n", + "23 1.213956e+30 5.217554e+33 4.483239e+13 9.429654e+06 1.338634e-10 \n", + "24 1.214388e+30 5.218768e+33 4.518466e+13 9.524654e+06 1.351020e-10 \n", + "25 1.212675e+30 5.219981e+33 4.552823e+13 9.619654e+06 1.360385e-10 \n", + "26 1.210647e+30 5.221192e+33 4.586395e+13 9.714654e+06 1.369815e-10 \n", + "27 1.209411e+30 5.222402e+33 4.619471e+13 9.799654e+06 1.369815e-10 \n", + "28 1.204720e+30 5.223605e+33 4.651757e+13 9.884654e+06 1.379268e-10 \n", + "29 1.203253e+30 5.224809e+33 4.683392e+13 9.969654e+06 1.385676e-10 \n", + "30 1.204574e+30 5.226014e+33 4.714483e+13 1.005460e+07 1.392072e-10 \n", + ".. ... ... ... ... ... \n", + "370 1.503278e+31 2.573607e+34 1.104475e+15 2.429600e+08 9.175628e-14 \n", + "371 1.503744e+31 2.575109e+34 1.115499e+15 2.454950e+08 8.803103e-14 \n", + "372 1.504194e+31 2.576615e+34 1.126760e+15 2.480850e+08 8.464919e-14 \n", + "373 1.504628e+31 2.578119e+34 1.138255e+15 2.507250e+08 8.121491e-14 \n", + "374 1.505049e+31 2.579624e+34 1.149979e+15 2.534200e+08 7.809493e-14 \n", + "375 1.505456e+31 2.581128e+34 1.161939e+15 2.561650e+08 7.492656e-14 \n", + "376 1.505850e+31 2.582634e+34 1.174137e+15 2.589650e+08 7.204815e-14 \n", + "377 1.506231e+31 2.584142e+34 1.186582e+15 2.618250e+08 6.912510e-14 \n", + "378 1.506601e+31 2.585648e+34 1.199285e+15 2.647400e+08 6.631867e-14 \n", + "379 1.506960e+31 2.587156e+34 1.212262e+15 2.677200e+08 6.362427e-14 \n", + "380 1.507308e+31 2.588661e+34 1.225533e+15 2.707700e+08 6.090078e-14 \n", + "381 1.507645e+31 2.590169e+34 1.239120e+15 2.738900e+08 5.816152e-14 \n", + "382 1.507973e+31 2.591677e+34 1.253046e+15 2.770850e+08 5.554217e-14 \n", + "383 1.508291e+31 2.593187e+34 1.267340e+15 2.803650e+08 5.292036e-14 \n", + "384 1.508601e+31 2.594695e+34 1.282036e+15 2.837450e+08 5.030635e-14 \n", + "385 1.508902e+31 2.596204e+34 1.297177e+15 2.872300e+08 4.771147e-14 \n", + "386 1.509194e+31 2.597712e+34 1.312826e+15 2.908350e+08 4.504388e-14 \n", + "387 1.509479e+31 2.599222e+34 1.329057e+15 2.945800e+08 4.242636e-14 \n", + "388 1.509756e+31 2.600732e+34 1.345972e+15 2.984900e+08 3.968586e-14 \n", + "389 1.510025e+31 2.602242e+34 1.363690e+15 3.025900e+08 3.695182e-14 \n", + "390 1.510288e+31 2.603751e+34 1.382340e+15 3.069150e+08 3.416928e-14 \n", + "391 1.510544e+31 2.605263e+34 1.402096e+15 3.115150e+08 3.137876e-14 \n", + "392 1.510793e+31 2.606773e+34 1.423208e+15 3.164600e+08 2.855110e-14 \n", + "393 1.511037e+31 2.608285e+34 1.446057e+15 3.218649e+08 2.556441e-14 \n", + "394 1.511274e+31 2.609797e+34 1.471245e+15 3.279099e+08 2.242001e-14 \n", + "395 1.511505e+31 2.611308e+34 1.499835e+15 3.349250e+08 1.908195e-14 \n", + "396 1.511731e+31 2.612818e+34 1.533756e+15 3.435050e+08 1.540408e-14 \n", + "397 1.511951e+31 2.614332e+34 1.576303e+15 3.545750e+08 1.168519e-14 \n", + "398 1.512167e+31 2.615844e+34 1.632356e+15 3.682800e+08 8.348776e-15 \n", + "399 1.512377e+31 2.617356e+34 1.698066e+15 4.244850e+08 6.601396e-15 \n", + "\n", + " radiation_pressure avg_temperature radiation_temperature avg_opacity \\\n", + "1 11237.954506 45943.453023 45943.453023 0.162712 \n", + "2 11236.544022 45942.182229 45942.182229 0.164412 \n", + "3 11133.526767 45836.518142 45836.518142 0.165012 \n", + "4 11133.526767 45836.518142 45836.518142 0.165310 \n", + "5 11032.838720 45732.362031 45732.362031 0.165510 \n", + "6 11031.453980 45731.097076 45731.097076 0.165709 \n", + "7 11031.453980 45731.097076 45731.097076 0.165809 \n", + "8 11031.453980 45731.097076 45731.097076 0.165820 \n", + "9 10930.317002 45625.918471 45625.918471 0.165936 \n", + "10 10930.317002 45625.918471 45625.918471 0.166444 \n", + "11 10930.317002 45625.918471 45625.918471 0.167443 \n", + "12 10930.317002 45625.918471 45625.918471 0.168344 \n", + "13 10830.107253 45520.981771 45520.981771 0.169143 \n", + "14 10830.107253 45520.981771 45520.981771 0.169941 \n", + "15 10830.107253 45520.981771 45520.981771 0.170541 \n", + "16 10830.107253 45520.981771 45520.981771 0.171141 \n", + "17 10730.816233 45416.286418 45416.286418 0.172941 \n", + "18 10730.816233 45416.286418 45416.286418 0.173441 \n", + "19 10730.816233 45416.286418 45416.286418 0.173841 \n", + "20 10730.816233 45416.286418 45416.286418 0.174240 \n", + "21 10730.816233 45416.286418 45416.286418 0.174541 \n", + "22 10632.435519 45311.831858 45311.831858 0.174840 \n", + "23 10632.435519 45311.831858 45311.831858 0.175140 \n", + "24 10632.435519 45311.831858 45311.831858 0.175440 \n", + "25 10632.435519 45311.831858 45311.831858 0.175640 \n", + "26 10632.435519 45311.831858 45311.831858 0.175839 \n", + "27 10631.113103 45310.581383 45310.581383 0.175839 \n", + "28 10534.956764 45207.617536 45207.617536 0.175940 \n", + "29 10534.956764 45207.617536 45207.617536 0.176139 \n", + "30 10534.956764 45207.617536 45207.617536 0.176240 \n", + ".. ... ... ... ... \n", + "370 0.300826 3954.619710 3304.761442 0.000273 \n", + "371 0.295301 3936.449883 3289.487890 0.000275 \n", + "372 0.287253 3918.469727 3266.843215 0.000278 \n", + "373 0.279425 3900.465994 3244.354424 0.000281 \n", + "374 0.269286 3864.706307 3214.522692 0.000282 \n", + "375 0.264341 3846.949594 3199.666590 0.000284 \n", + "376 0.257137 3829.170696 3177.640241 0.000287 \n", + "377 0.250129 3811.577254 3155.765519 0.000290 \n", + "378 0.243340 3794.064648 3134.126315 0.000293 \n", + "379 0.236709 3768.048602 3112.551141 0.000296 \n", + "380 0.230258 3750.735991 3091.124490 0.000299 \n", + "381 0.223982 3733.502925 3069.845338 0.000302 \n", + "382 0.219869 3707.801671 3055.657872 0.000306 \n", + "383 0.211916 3682.277344 3027.643432 0.000309 \n", + "384 0.206141 3656.928725 3006.801281 0.000312 \n", + "385 0.200523 3640.028019 2986.102607 0.000316 \n", + "386 0.195058 3615.068208 2965.546421 0.000321 \n", + "387 0.189742 3590.182254 2945.131743 0.000326 \n", + "388 0.184571 3565.467613 2924.857599 0.000332 \n", + "389 0.177895 3540.923106 2898.042343 0.000338 \n", + "390 0.173047 3508.555024 2878.092360 0.000345 \n", + "391 0.166788 3468.392927 2851.705850 0.000352 \n", + "392 0.160755 3436.594510 2825.561254 0.000361 \n", + "393 0.154940 3405.087622 2799.656353 0.000372 \n", + "394 0.149336 3366.109906 2773.988949 0.000386 \n", + "395 0.143918 3319.925147 2748.482551 0.000405 \n", + "396 0.136196 3259.329684 2710.845252 0.000430 \n", + "397 0.128874 3192.480784 2673.651060 0.000467 \n", + "398 0.119719 3126.918024 2624.851429 0.000525 \n", + "399 0.110183 3055.657872 2570.946173 0.000569 \n", + "\n", + " tau ... cr48 cr60 fe52 fe54 fe56 co56 ni56 \\\n", + "1 5403.504881 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "2 5381.678444 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "3 5364.280084 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "4 5348.854704 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "5 5334.724893 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "6 5321.480960 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "7 5308.917604 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "8 5296.950388 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "9 5285.442617 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "10 5274.319278 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079380e-03 \n", + "11 5263.504963 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "12 5252.968552 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "13 5242.720455 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "14 5232.678533 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "15 5222.818389 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "16 5213.249350 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "17 5203.903812 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "18 5194.709058 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "19 5185.663371 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "20 5176.775982 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "21 5168.017132 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "22 5159.424248 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "23 5150.959409 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "24 5142.610227 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "25 5134.401425 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "26 5126.315470 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079156e-03 \n", + "27 5118.349189 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "28 5110.514635 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "29 5102.793922 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "30 5095.166450 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + ".. ... ... ... ... ... ... ... ... ... \n", + "370 0.007314 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "371 0.007047 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "372 0.006782 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "373 0.006520 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "374 0.006262 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "375 0.006008 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "376 0.005755 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "377 0.005506 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "378 0.005259 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "379 0.005015 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "380 0.004773 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "381 0.004534 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "382 0.004298 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "383 0.004064 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "384 0.003833 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "385 0.003605 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "386 0.003379 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "387 0.003154 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "388 0.002932 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "389 0.002710 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "390 0.002490 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "391 0.002272 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "392 0.002054 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "393 0.001837 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "394 0.001619 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "395 0.001398 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "396 0.001173 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "397 0.000941 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "398 0.000695 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "399 0.000448 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "\n", + " luminosity n_bar n_e \n", + "1 7.648868e+38 6.055413e+12 2.412188e+12 \n", + "2 9.609214e+38 1.762304e+13 6.969790e+12 \n", + "3 1.050921e+39 2.783916e+13 1.091728e+13 \n", + "4 1.100921e+39 3.545183e+13 1.392188e+13 \n", + "5 1.140921e+39 4.166219e+13 1.632649e+13 \n", + "6 1.180921e+39 4.687026e+13 1.832995e+13 \n", + "7 1.210921e+39 5.127832e+13 2.013225e+13 \n", + "8 1.240806e+39 5.518408e+13 2.153570e+13 \n", + "9 1.260806e+39 5.848984e+13 2.283801e+13 \n", + "10 1.290806e+39 6.129444e+13 2.403916e+13 \n", + "11 1.310806e+39 6.359790e+13 2.504031e+13 \n", + "12 1.330806e+39 6.600135e+13 2.594261e+13 \n", + "13 1.350806e+39 6.810366e+13 2.674377e+13 \n", + "14 1.380691e+39 6.990711e+13 2.744492e+13 \n", + "15 1.400691e+39 7.160942e+13 2.814492e+13 \n", + "16 1.420806e+39 7.311172e+13 2.864722e+13 \n", + "17 1.440806e+39 7.451402e+13 2.924722e+13 \n", + "18 1.470691e+39 7.571633e+13 2.974837e+13 \n", + "19 1.490691e+39 7.691748e+13 3.014953e+13 \n", + "20 1.510691e+39 7.791978e+13 3.054953e+13 \n", + "21 1.530691e+39 7.891978e+13 3.094953e+13 \n", + "22 1.560576e+39 7.982093e+13 3.125068e+13 \n", + "23 1.580691e+39 8.062209e+13 3.155183e+13 \n", + "24 1.600691e+39 8.132324e+13 3.185183e+13 \n", + "25 1.630576e+39 8.202439e+13 3.215183e+13 \n", + "26 1.650576e+39 8.252554e+13 3.235183e+13 \n", + "27 1.670691e+39 8.242554e+13 3.255183e+13 \n", + "28 1.690691e+39 8.292669e+13 3.275183e+13 \n", + "29 1.720576e+39 8.342669e+13 3.285298e+13 \n", + "30 1.740576e+39 8.382669e+13 3.305298e+13 \n", + ".. ... ... ... \n", + "370 3.769424e+41 5.528062e+10 1.237947e+07 \n", + "371 3.769424e+41 5.307717e+10 1.117371e+07 \n", + "372 3.769424e+41 5.097371e+10 1.016680e+07 \n", + "373 3.769424e+41 4.887141e+10 9.161043e+06 \n", + "374 3.759539e+41 4.696911e+10 7.638489e+06 \n", + "375 3.759539e+41 4.516565e+10 6.863536e+06 \n", + "376 3.759539e+41 4.336335e+10 6.169275e+06 \n", + "377 3.759539e+41 4.165989e+10 5.535128e+06 \n", + "378 3.759539e+41 3.995759e+10 4.971328e+06 \n", + "379 3.759539e+41 3.825528e+10 4.457872e+06 \n", + "380 3.759539e+41 3.665298e+10 3.994763e+06 \n", + "381 3.759424e+41 3.505068e+10 3.581883e+06 \n", + "382 3.759424e+41 3.344837e+10 3.209349e+06 \n", + "383 3.749539e+41 3.184607e+10 2.765894e+06 \n", + "384 3.749539e+41 3.024492e+10 2.463821e+06 \n", + "385 3.749539e+41 2.874146e+10 2.201978e+06 \n", + "386 3.749539e+41 2.713916e+10 1.960251e+06 \n", + "387 3.749539e+41 2.553686e+10 1.738753e+06 \n", + "388 3.749539e+41 2.393455e+10 1.537486e+06 \n", + "389 3.739654e+41 2.223225e+10 1.366104e+06 \n", + "390 3.739654e+41 2.062995e+10 1.205068e+06 \n", + "391 3.739654e+41 1.892764e+10 1.033916e+06 \n", + "392 3.739539e+41 1.722419e+10 9.080521e+05 \n", + "393 3.739539e+41 1.542188e+10 7.863841e+05 \n", + "394 3.729654e+41 1.351958e+10 6.707967e+05 \n", + "395 3.729654e+41 1.151612e+10 5.573015e+05 \n", + "396 3.729654e+41 9.283015e+09 4.408753e+05 \n", + "397 3.719770e+41 7.040251e+09 3.305759e+05 \n", + "398 3.719654e+41 5.027256e+09 2.333801e+05 \n", + "399 3.709770e+41 3.975759e+09 1.842764e+05 \n", + "\n", + "[399 rows x 36 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# extract outer radius boundaries \n", + "radius = data.loc[:,'outer_edge_r'].values * u.cm\n", + "\n", + "# calculate t_expl_s\n", + "t_expl = 50 * u.day #days\n", + "\n", + "# calculate outer velocities of each zone assuming homologous expansion (d =v*t) \n", + "\n", + "vel = (radius/t_expl).to(u.km/u.s) \n", + "\n", + "# create a new column of our velocities (OPTIONAL)\n", + "data['velocity'] = vel" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "density_dat = data[['velocity', 'avg_density']].reset_index(drop=True)\n", + "density_dat.to_csv('density_parse.csv', sep = ' ')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# import all elements and isotopes and export to TARDIS\n", + "\n", + "data_elements = data.iloc[12:33].reset_index(drop=True)\n", + "abund = data_elements.to_csv('abund_parse.csv', sep = ' ')" + ] + } + ], + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/examples/tardis_configv1_isotope_abundance_cust_example.yml b/docs/examples/tardis_configv1_isotope_abundance_cust_example.yml index 740d4148ae4..cfb1de22621 100644 --- a/docs/examples/tardis_configv1_isotope_abundance_cust_example.yml +++ b/docs/examples/tardis_configv1_isotope_abundance_cust_example.yml @@ -2,4 +2,4 @@ model: abundances: type: file filename: tardis_model_abund.csv - filetype: tardis_model \ No newline at end of file + filetype: custom_composition diff --git a/docs/examples/tardis_example.rst b/docs/examples/tardis_example.rst index 37e7cd45b76..fd493c546ef 100644 --- a/docs/examples/tardis_example.rst +++ b/docs/examples/tardis_example.rst @@ -2,9 +2,9 @@ tardis_example -------------- The simple and fast TARDIS setup is provided by ``tardis_example.yml`` which -may be obtained from `tardis-refdata -`_ repository. It is located in -the ``configs/example`` subfolder. We suggest every new user of TARDIS to run this +may be obtained from `tardis-setups +`_ repository. It is located in +the ``tardis-setups/2014/2014_kerzendorf_sim/appendix_A1`` subfolder. We suggest every new user of TARDIS to run this setup first. It calculates a spectrum for a Type Ia supernova model 13 days after explosion, diff --git a/docs/examples/tardis_example.yml b/docs/examples/tardis_example.yml index be72b3586d9..929af7fdfbf 100644 --- a/docs/examples/tardis_example.yml +++ b/docs/examples/tardis_example.yml @@ -1,4 +1,6 @@ +# Example YAML configuration for TARDIS tardis_config_version: v1.0 + supernova: luminosity_requested: 9.44 log_lsun time_explosion: 13 day @@ -14,6 +16,7 @@ model: num: 20 density: type: branch85_w7 + abundances: type: uniform O: 0.19 @@ -34,13 +37,20 @@ montecarlo: seed: 23111963 no_of_packets: 4.0e+4 iterations: 20 - black_body_sampling: - start: 1 angstrom - stop: 1000000 angstrom - num: 1.e+6 + nthreads: 1 + last_no_of_packets: 1.e+5 no_of_virtual_packets: 10 + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + spectrum: start: 500 angstrom stop: 20000 angstrom diff --git a/docs/examples/tardis_model_abund.csv b/docs/examples/tardis_model_abund.csv index 46200ee5b77..96a7b973be0 100644 --- a/docs/examples/tardis_model_abund.csv +++ b/docs/examples/tardis_model_abund.csv @@ -1,11 +1,11 @@ -C O Mg Si Ni56 Ni58 -0 0 0 0.6 0.4 0 -0 0 0 0.1 0.5 0.4 -0 0 0 0.3 0 0.7 -0 0.2 0.8 0 0 0 -0 0.3 0.7 0 0 0 -0 0.2 0.8 0 0 0 -0 0.2 0.8 0 0 0 -0 0.2 0.8 0 0 0 -0.5 0.5 0 0 0 0 -0.5 0.5 0 0 0 0 +Index C O Mg Si Ni56 Ni58 +0 0 0 0 0.6 0.4 0 +1 0 0 0 0.1 0.5 0.4 +2 0 0 0 0.3 0 0.7 +3 0 0.2 0.8 0 0 0 +4 0 0.3 0.7 0 0 0 +5 0 0.2 0.8 0 0 0 +6 0 0.2 0.8 0 0 0 +7 0 0.2 0.8 0 0 0 +8 0.5 0.5 0 0 0 0 +9 0.5 0.5 0 0 0 0 diff --git a/docs/index.rst b/docs/index.rst index 37235b3ba67..d91c7b8991e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,11 +2,11 @@ .. image:: graphics/tardis_logo.jpg .. the "raw" directive below is used to hide the title in favor of just the logo being visible -.. raw:: html +.. .. raw:: html - +.. ################################## Tardis Core Package Documentation @@ -25,44 +25,51 @@ for 1D models of supernova ejecta. It is designed for rapid spectral modelling of supernovae. If you use this code for any publications or presentations please acknowledge it by citing :cite:`Kerzendorf2014`. -.. note:: - This documentation is still under construction! - ============ Using Tardis ============ -* :doc:`Installation ` -* :doc:`Quickstart Guide ` -* :doc:`Ejecta Model Setup ` -* :doc:`TARDIS Configuration ` -* :doc:`Examples ` -* :doc:`Storing simulations to HDF ` -* :doc:`Helper Scripts ` -* :doc:`Credit & Publication Policies ` +.. toctree:: + :maxdepth: 2 + + installation + quickstart + running/index + examples/index + scripts/index + credits ====================== Looking under the hood ====================== -* :doc:`Physics behind TARDIS ` -* :doc:`Monte Carlo Primer ` +.. toctree:: + :maxdepth: 2 + + atomic/atomic_data + physics/index + montecarlo/index + ================= Developing Tardis ================= -* :doc:`Reporting Issues ` -* :doc:`How to contribute ` -* :doc:`Running tests ` -* :doc:`Changelog ` +.. toctree:: + :maxdepth: 2 + + issues + workflow/development_workflow + runnints_tests + changelog ========== References ========== -* :doc:`Studies using TARDIS and TARDIS references ` +.. toctree:: + zreferences ==== News diff --git a/docs/installation.rst b/docs/installation.rst index 18e82c829ed..91e1d10406d 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -13,6 +13,11 @@ simple TARDIS calculations. .. _requirements_label: + +.. warning:: + + TARDIS is currently only compatbile with Python 2.7. + .. note:: We strongly recommond to install TARDIS within an Anaconda environment and to always use the lastest github development version. @@ -46,12 +51,16 @@ First, download the `environment definition file ` -* :doc:`Monte Carlo discretization ` -* :doc:`Propagation of Monte Carlo quanta ` -* :doc:`Line Interaction Modes ` -* :doc:`Reconstructing the Radiation Field - Volume-based Monte Carlo Estimators ` -* :doc:`Spectrum calculation - Virtual Packet scheme ` -* :doc:`Spectrum calculation - Radiation field integration ` -* :doc:`Random Sampling Basics ` +.. toctree:: + basicprinciples + discretization + propagation + lineinteraction + estimators + virtualpackets + sourceintegration + randomsampling \ No newline at end of file diff --git a/docs/montecarlo/sourceintegration.rst b/docs/montecarlo/sourceintegration.rst index 1c6871af5dc..ba151a01641 100644 --- a/docs/montecarlo/sourceintegration.rst +++ b/docs/montecarlo/sourceintegration.rst @@ -178,7 +178,6 @@ Current Limitations The current implementation of the formal integral has some limitations: -* it only works with the downbranching line interaction mode * once electron scattering is included, the scheme only produces accurate results when multiple resonances occur on the rays. This is simply because otherwise the :math:`J^b` and :math:`J^r` do not provide an accurate diff --git a/docs/physics/index.rst b/docs/physics/index.rst index 3f932165171..0a4697f2472 100644 --- a/docs/physics/index.rst +++ b/docs/physics/index.rst @@ -21,7 +21,8 @@ Eventually, information about the following topics will be provided Currently some information are available for -* :doc:`Plasma State Calculation ` +.. toctree:: + new_plasma Old Physics Section of the TARDIS Docu (Outdated) @@ -33,8 +34,10 @@ Old Physics Section of the TARDIS Docu (Outdated) outdated, many basic concepts are still applicable to the current TARDIS version. -* :doc:`physical_quantities` -* :doc:`montecarlo` -* :doc:`new_plasma` -* :doc:`plasma/index` + +.. toctree:: + physical_quantities + montecarlo + new_plasma + plasma/index diff --git a/docs/physics/plasma/lte_plasma.rst b/docs/physics/plasma/lte_plasma.rst index 6a9597cfdef..8f773b45933 100644 --- a/docs/physics/plasma/lte_plasma.rst +++ b/docs/physics/plasma/lte_plasma.rst @@ -45,6 +45,6 @@ the quantities calculated here. Example Calculations ^^^^^^^^^^^^^^^^^^^^ -.. plot:: physics/plasma/plasma_plots/lte_ionization_balance.py +.. .. plot:: physics/plasma/plasma_plots/lte_ionization_balance.py :include-source: diff --git a/docs/physics/plasma/nebular_plasma.rst b/docs/physics/plasma/nebular_plasma.rst index b0f8d2e478a..51c729c26ed 100644 --- a/docs/physics/plasma/nebular_plasma.rst +++ b/docs/physics/plasma/nebular_plasma.rst @@ -84,6 +84,6 @@ the quantities calculated here. Example Calculations ^^^^^^^^^^^^^^^^^^^^ -.. plot:: physics/plasma/plasma_plots/nebular_ionization_balance.py +.. .. plot:: physics/plasma/plasma_plots/nebular_ionization_balance.py :include-source: diff --git a/docs/physics/plasma.rst b/docs/physics/plasma/plasma.rst similarity index 100% rename from docs/physics/plasma.rst rename to docs/physics/plasma/plasma.rst diff --git a/docs/physics/plasma/plasma_plots/lte_ionization_balance.py b/docs/physics/plasma/plasma_plots/lte_ionization_balance.py index 3b510008798..7a8e1951bce 100644 --- a/docs/physics/plasma/plasma_plots/lte_ionization_balance.py +++ b/docs/physics/plasma/plasma_plots/lte_ionization_balance.py @@ -1,6 +1,8 @@ import os from matplotlib import pyplot as plt from matplotlib import colors + +import tardis.util.base from tardis import util from tardis.io import atomic import numpy as np @@ -63,7 +65,7 @@ for ion_number in [0, 1, 2, 3]: current_ion_density = ion_number_densities.ix[14, ion_number] ax1.plot(current_ion_density.index, current_ion_density.values, '%s-' % ion_colors[ion_number], - label='Si %s W=1.0' % util.int_to_roman(ion_number + 1).upper()) + label='Si %s W=1.0' % tardis.util.base.int_to_roman(ion_number + 1).upper()) #only plotting every 5th radiation temperature diff --git a/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py b/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py index 4b22cea808c..428f9125e24 100644 --- a/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py +++ b/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py @@ -1,6 +1,8 @@ import os from matplotlib import colors + +import tardis.util.base from tardis import util from tardis.io import atomic from matplotlib import pyplot as plt @@ -58,7 +60,7 @@ for ion_number in [0, 1, 2, 3]: current_ion_density = ion_number_densities.ix[14, ion_number] ax1.plot(current_ion_density.index, current_ion_density.values, '%s-' % ion_colors[ion_number], - label='Si %s W=1.0' % util.int_to_roman(ion_number + 1).upper()) + label='Si %s W=1.0' % tardis.util.base.int_to_roman(ion_number + 1).upper()) #only plotting every 5th radiation temperature @@ -92,7 +94,7 @@ print "w=0.5" current_ion_density = ion_number_densities.ix[14, ion_number] ax1.plot(current_ion_density.index, current_ion_density.values, '%s--' % ion_colors[ion_number], - label='Si %s W=0.5' % util.int_to_roman(ion_number + 1).upper()) + label='Si %s W=0.5' % tardis.util.base.int_to_roman(ion_number + 1).upper()) for t_rad in t_rads[::5]: ax2.plot(level_populations[t_rad].index, level_populations[t_rad].values, color=t_rad_color_map.to_rgba(t_rad), diff --git a/docs/running.rst b/docs/quickstart.rst similarity index 91% rename from docs/running.rst rename to docs/quickstart.rst index 645f40612f4..b0aab0bcdf0 100644 --- a/docs/running.rst +++ b/docs/quickstart.rst @@ -14,7 +14,8 @@ To run TARDIS requires two files. The atomic database (for more info refer to Running TARDIS in the commandline ================================= -After installing TARDIS just download the configuration file and the standard +After installing TARDIS just download the configuration file from the +`tardis-setups `_ and the standard atomic data set from the `tardis-refdata `_ repository and run TARDIS. Assuming you have ``wget``, you could follow the procedure: @@ -24,7 +25,7 @@ Assuming you have ``wget``, you could follow the procedure: mkdir tardis_example cd tardis_example - wget https://github.com/tardis-sn/tardis-refdata/raw/master/configs/examples/tardis_example.yml + wget https://raw.githubusercontent.com/tardis-sn/tardis-setups/master/2014/2014_kerzendorf_sim/appendix_A1/tardis_example.yml wget https://github.com/tardis-sn/tardis-refdata/raw/master/atom_data/kurucz_cd23_chianti_H_He.h5 tardis tardis_example.yml output_spectrum.dat diff --git a/docs/running/access.rst b/docs/running/access.rst new file mode 100644 index 00000000000..ee0e7539759 --- /dev/null +++ b/docs/running/access.rst @@ -0,0 +1,15 @@ +****************************** +Accessing Physical Information +****************************** + +Various information about numerical and physical properties of a Tardis +simulation are stored during a run and can be accessed afterwards. Here, we +describe how some of this information, which we deem most useful for typical +use cases, can be accessed. + +.. toctree:: + + access_spectra + access_final_plasma + access_model + access_iterations diff --git a/docs/running/access_iterations.rst b/docs/running/access_iterations.rst new file mode 100644 index 00000000000..e87a75d1723 --- /dev/null +++ b/docs/running/access_iterations.rst @@ -0,0 +1,24 @@ +********************************************** +Access information about individual iterations +********************************************** + +Currently we store information about the plasma state and the inner boundary +for each iteration. This is saved in the simulation object and can be accessed +via + +.. code-block:: python + + import tardis + mdl = tardis.run_tardis("tardis_config.yml") + mdl.iterations_w + +in case of the dilution factor. + +Currently, the following properties are available: + +.. code-block:: python + + mdl.iterations_w # dilution factor in each cell + mdl.iterations_t_rads # radiation temperature in each cell + mdl.iterations_electron_densities # electron density in each cell + mdl.iterations_t_inner # inner boundary temperature diff --git a/docs/running/access_model.rst b/docs/running/access_model.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/running/access_plasma.rst b/docs/running/access_plasma.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/running/access_spectra.rst b/docs/running/access_spectra.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/running/index.rst b/docs/running/index.rst new file mode 100644 index 00000000000..5a28b578858 --- /dev/null +++ b/docs/running/index.rst @@ -0,0 +1,12 @@ +************** +Running Tardis +************** + +Information regarding running and operating Tardis. + +.. toctree:: + + ../configuration/index + access + using_formal_integral + diff --git a/docs/running/using_formal_integral.rst b/docs/running/using_formal_integral.rst new file mode 100644 index 00000000000..3e58cbd6735 --- /dev/null +++ b/docs/running/using_formal_integral.rst @@ -0,0 +1,26 @@ +************************************************** +Spectral Synthesis with the Formal Integral Method +************************************************** + +In addition to generating the final Monte Carlo spectrum from the population of +Monte Carlo packets and the implemented variant of the "peeling-off" technique +(see :doc:`../montecarlo/virtualpackets`), TARDIS supports spectral synthesis with +so-called formal integral method by :cite:`Lucy1999a` (see a detailed +description of the method at :doc:`../montecarlo/sourceintegration`) + +Using the Formal Integral Method +================================ + +The formal integral spectral synthesis mode is activated by setting the + +.. code-block:: none + + method: integrated + +configuration option in the ``spectrum`` block of the yml file. + +Note that the integrated spectrum (``simulation.runner.spectrum_integrated``) +is a lazy property so it will be only generated (and then cached) once it is +accessed. The spectrum integration routine is Open-MP parallelized, so this +process may be significantly sped-up if TARDIS is built with the +``--with-openmp`` option and more then one threas is used. diff --git a/docs/workflow/development_workflow.rst b/docs/workflow/development_workflow.rst index f137dcb166c..cf07e3bb92b 100644 --- a/docs/workflow/development_workflow.rst +++ b/docs/workflow/development_workflow.rst @@ -8,39 +8,16 @@ workflow is taken from `Astropy `_ and credit belongs to the Astropy team for designing it. -Preparation and Working with Git -================================ - -The first step is to setup up a python environment. We recommend to use -Anaconda for this purpose and refer to our :doc:`Installation guide -<../installation>` which covers this topic. Once the python environment is -running consult :doc:`git_workflow` to learn about interacting with git and -github for the purpose of developing TARDIS. - - -General Workflow to add a new feature -===================================== - -In TARDIS we aim to stick to a test driven development. This uses the testing -framework extensively starting with a test that shows this feature lacking via -the implementation of the feature until the merging of the code to the main -repository. - -In most cases we try to break down big features into small, quantifiable goals -which are then acted upon. - -* Document feature to be added in an issue and maybe ask the mailing - list if this feature exists -* Write a test that demonstrates what feature will be added. -* Run the test to verify that it fails in the way you think it should. -* If it fails in an unexpected way, your test may be wrong. This is a - great time to ask the group for guidance -* If it passes, you are done! You just added test coverage to an - already existing feature, and that is great! (unlikely) -* Add the feature (also known as "a simple matter of programming"). -* Run the test to verify that it passes. -* Write documentation about your feature. -* close issue/partial PR and add to changelog. - - -.. include:: release_workflow.rst + + + +.. toctree:: + + git_workflow + release_workflow + +.. toctree:: + + update_refdata + + diff --git a/docs/workflow/git_workflow.rst b/docs/workflow/git_workflow.rst index 2daaa748d17..be1bcb2c98e 100644 --- a/docs/workflow/git_workflow.rst +++ b/docs/workflow/git_workflow.rst @@ -1,15 +1,40 @@ .. _development-workflow: -======================= -Workflow for Developers -======================= +General Workflow to add a new feature +===================================== -In this document, we refer to the Tardis ``master`` branch as the *trunk*. +In TARDIS we aim to stick to a test driven development. This uses the testing +framework extensively starting with a test that shows this feature lacking via +the implementation of the feature until the merging of the code to the main +repository. + +In most cases we try to break down big features into small, quantifiable goals +which are then acted upon. + +* Document feature to be added in an issue and maybe ask the mailing + list if this feature exists +* Write a test that demonstrates what feature will be added. +* Run the test to verify that it fails in the way you think it should. +* If it fails in an unexpected way, your test may be wrong. This is a + great time to ask the group for guidance +* If it passes, you are done! You just added test coverage to an + already existing feature, and that is great! (unlikely) +* Add the feature (also known as "a simple matter of programming"). +* Run the test to verify that it passes. +* Write documentation about your feature. +* close issue/partial PR and add to changelog. + + +Preparation and Working with Git +================================ + +In this document, we refer to the Tardis ``master`` branch as the *trunk*. The first step is to setup up a python environment. We recommend to use +Anaconda for this purpose and refer to our :doc:`Installation guide <../installation>` which covers this topic. .. _forking: Creating a fork -=============== +--------------- You need to do this only once for each package you want to contribute to. The instructions here are very similar to the instructions at @@ -110,7 +135,7 @@ In detail Your fork is now set up correctly, and you are ready to hack away. Installing TARDIS in develop mode -================================== +--------------------------------- TARDIS is designed so that it can generally be used directly out of the source tree by using ``import `` when running Python in the source of an @@ -127,7 +152,7 @@ TARDIS repository clone. interpreter and ``import tardis``. Workflow summary -================ +---------------- This section gives a summary of the workflow to follow once you have successfully forked the repository. The details for each of these steps are @@ -174,7 +199,7 @@ see what you've done, and why you did it. See `linux git workflow`_ and `ipython git workflow`_ for some explanation. Deleting your master branch -=========================== +--------------------------- It may sound strange, but deleting your own ``master`` branch can help reduce confusion about which branch you are on. @@ -182,7 +207,7 @@ confusion about which branch you are on. .. _update-mirror-trunk: Updating the mirror of trunk -============================ +---------------------------- From time to time you should fetch the upstream (trunk) changes from GitHub:: @@ -196,7 +221,7 @@ you last checked, ``upstream/master`` will change after you do the fetch. .. _make-feature-branch: Making a new feature branch -=========================== +--------------------------- When you are ready to make some changes to the code, you should start a new branch. Branches that are for a collection of related edits are often called @@ -237,10 +262,10 @@ From now on git will know that ``my-new-feature`` is related to the .. _edit-flow: The editing workflow -==================== +-------------------- Overview --------- +^^^^^^^^ Make changes, test, and:: @@ -249,7 +274,7 @@ Make changes, test, and:: git push In more detail --------------- +^^^^^^^^^^^^^^ #. Make some changes @@ -307,7 +332,7 @@ In more detail `git push`_). Asking for your changes to be reviewed and/or merged -==================================================== +---------------------------------------------------- When you are ready to ask for someone to review your code and consider a merge: @@ -335,7 +360,7 @@ When you are ready to ask for someone to review your code and consider a merge: .. _using-virtualenv: Making sure your Pull request stays up-to-date -============================================== +---------------------------------------------- More often then not it will take a few days until a Pull Request is merged as the community gives feedback and/or you add new fixes. During this @@ -345,7 +370,7 @@ To make sure that your changes are still working on the new master you want to Rebasing on trunk ------------------ +^^^^^^^^^^^^^^^^^ Let's say you thought of some work you'd like to do. You :ref:`update-mirror-trunk` and :ref:`make-feature-branch` called @@ -423,7 +448,7 @@ this would re-write commit history and thus cause problems for all others. .. _recovering-from-mess-up: Recovering from mess-ups ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ Sometimes, you mess up merges or rebases. Luckily, in git it is relatively straightforward to recover from such mistakes. @@ -452,7 +477,7 @@ If you forgot to make a backup branch:: Reviewing and helping others with Pull Requests -=============================================== +----------------------------------------------- Github offers an extensive array of tools to comment on Pull Requests (line based, normal forum-like discussion, etc.). This system is described here in diff --git a/docs/workflow/update_refdata.rst b/docs/workflow/update_refdata.rst new file mode 100644 index 00000000000..48fb9ae3564 --- /dev/null +++ b/docs/workflow/update_refdata.rst @@ -0,0 +1,45 @@ +************************************** +Procedure to update the reference data +************************************** + +We asume that you have added the necessary changes to TARDIS and have a +PR open. + +#. clone tardis-refdata (`git clone tardis-refdata`; you need to have git lfs installed) then make a new branch named + the same as your new tardis feature branch. +#. Generate new reference data (in your tardis directory and right branch) offline using + + .. code-block:: None + + python setup.py test --args="--tardis-refdata= --generate-reference" + +#. Rerun the tests and see if it does not fail using + + .. code-block:: None + + python setup.py test --args="--tardis-refdata=" + +#. Switch to tardis-refdata. Commit the changed ref-data and open a PR on tardis-refdata +#. Make a copy of the refdata comparer notebook provided in TARDIS-refdata to check if there are + any unexpected changes in the updated reference data and the previous reference data +#. Switch back to the TARDIS directory. Open `.travis.yml` + +#. Change the following lines + + .. code-block:: None + + - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin pull//head:; fi + - if [[ $TEST_MODE == 'spectrum' ]]; then git checkout ; fi``` + +#. Commit the `.travis.yml` to your Pull request +#. Make sure that your TARDIS PR now passes on TRAVIS. +#. Then merge the PR on tardis-refdata. +#. Then change `.travis.yml` to + + .. code-block:: None + + - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin; fi + - if [[ $TEST_MODE == 'spectrum' ]]; then git checkout origin/master; fi``` +#. Then make sure that your TARDIS PR passes again. +#. Then merge your PR to TARDIS master +#. Congratulations - you updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan) diff --git a/github_deploy_key_tardis_sn_tardis.enc b/github_deploy_key_tardis_sn_tardis.enc new file mode 100644 index 00000000000..904cdfff1c1 --- /dev/null +++ b/github_deploy_key_tardis_sn_tardis.enc @@ -0,0 +1 @@ +gAAAAABcfB7pt9M6aY6K7YVRkGvTRaTCXPW-p16uLzKMHAWVFciaNw3HuJHJty80jSEKWOssAyxr3R4zbZ71bZ8sj7-05Vt5nc-Nrv10In-017x-TmR-uatOjpr-QUoWFed6YXm4MbHdmb5v5GnXLi9IbIo58gz2wAR5ljqiBMGdeNjCJXehQssLdI5oqPckz57YYbQnpNUH1QrR29RTkL_gQduFMuOO4CtOXmFQ-GGhgoqhYgch5Y3ddYJ12VsoNUknaYSiT7TJlXr-seZxPVIxRSGK3EP18dX4rhzPout_r2LxirnSouZOtTULMSnPqpXRSw3LhspB-VOvAq-7QrR0aKoCPPiyOFgkBrVOL3UEej7F3rJbjksoNBCodIHz3-LqI93QN4kZBp-nD56FLC706-y7tb8Vwwl-oQpfzDMDa0T0dpFpcJZgEwIGG_CdECwLfQ8Tkl8ThYDQrngS0b3_C3IQGa1-wU1OHoetL0we5Tzu5rlfyPknWuQP5pSsfoUKEEAMLY-q5Aq70P5WPACZvzG6rXoep9nK1O3uTxnk1HMurgKJrLASNr1GQPb3Y3cAa8gPby-sY56uF3_KrX5MJPN0A0M4xa6ALvoIzD--L32N8gj1JIk6cMruKxRGXjK8ktGPmKO_TXQ6ghgyw4Tn39n9oNexrugRmBWCq-T7FWcamDlOjFMk4hmFogfmhrWG0ccXpTHSP7rF8LkquJ_-jaXlh2n8380VL-SZHEi9NvAtyg4IJxA-BjhFbtaYA7xW_IZACyp5RyPcvLnSExlyA4iELZOze0AYv8GnUG8i1IeT4mmk0etQu9twit9oxleVtJnX5L-noRCalDy79hPbM1FsiPZOLFxFeOS0z3m0Q0a-irXcTWrt_c1pqkNexyDAO1R7G0NrrW4TAjsuGzrFCDGMi8fdvE2-P18-Sx0n4FHrMwZ3_8I94AoWPf70_Jeo_fW6QFyC9G0cuHi503gclm-x063C1jJ4LC73w4YuKO0WFVROtX5DDfZJxw8eBjWvosCp2rTmHmqIBMr3HYuFk-BOjQSS92MADec8n5czxlWMIObVfOXRhpJu4fFzenYicNkCCWFpA281Owr7dA8jGeFtZzlPw3xq5llH7BSn9meuCmq2ejISAAocwTqvGfdMzcJdEGZLlQjFF6j3Bpm22_E4XQ9an2nVouO5SYYR-tgQ8qPYByM2u6f6EmCiKscLX6eKpDpJzbzbdwoI0GgJt4KXbc8SQarLeZrRNlq6beTYIRzEl1RQDu31-6v7L6X5XCIPyjupVD6dcA5qavcER1qGMGCf7sgc-TXJXrIbc6nTfDRaDk9TrvF9T0q0cUY2zUywU5P2x1wS3HiOKHCXB-vCeBKeVnVvHotfUZYPQxNL90Zvx-aMJm9GnGSkmzf3H-RWWJjo5u8DhXMVOUeGNH2tr4cXimU-a7zkJZlhJDgyLKRWWaZAFRURPW9XL6MTHwvMFHOSLBG3UgK81xdriuxcxE84VUyYiJEKDtI49rq1RvUpRwIP4SY_jFW9gDRBcAqGyeaB6s-dSUzVzvGwLG_5BCHll_qo1HMuTBXyYWWzNEbg67jYqRnLStftP8WPunGWKpdcO_yJv519nEjrzYdAFz1nE8bJSKBCT16AJe8JnclVPc-pHVBp_MnopL423RNnb_I2ymrsMUZksHXTJHQ_IrELbUxt8pOLIf4Cu4OTpwrGBoPqD1u5xvlRa53U4SvJmWUdVJs2GOeXm702z0vqkOaFLk_LaWKCY3l26w8rq1CBisc6MHrcoFtqsXuJT6sZ7ac0uhiJJCijffwjVqMIzJEkL0ezqf4_ZvHyklfxWChYl5kt-TS79C_j6uKR8PFIQYVk69GLLvMlffPVUBkQYtHp2t8aSCqPLCLc_lXmNE2px5Bw9306tjoxakWCF1AiqrOval3X7HuJLiqIns4aV691CLJlX4tnoBTBH8xYtACsIFkyRgk7WZtrUfpm7VqauXmbPMOF0cNoDZ6fs4eQI6l0rfY6C5Jk2NkGhAwcbxIvukZ-SM8NDxsqhRi3YE-ixLYXIgTpGEUupqME6xvv7oHQHMRRZ6Gin0hMEWjOcZ5H4oR1e2VjgJBu1Ob4qTH9qnwU835cRf0n0Nfk0t544tESXqU-0dO8DLkM-7P77laYa8dvkEymHc1i3blMaufcyUHjceppOdKZu4xKZ-9aeVmhWangTlGw8rpTIUnYwaIizKwpALhFQ_LkhiNnDsVu63NPEvwOtpphkwB3U_1_3zBsHxV2rWLR6UnPmEB18vHFVk4pq0FaBRcguz-NsIx9xA1dcuwM0prKD-Yifui5BIAiIWBlWwcHCyV7MakXQzQCrSKIov_sc_v7N5_dSbQ25yX9B8CTTvlksnkxwgRXQyuWD1SONn7NulE-DnyZLqXefjHic6g30HffP4p_i5A1FEQAOfDbWs3rHvlymjvIGyWpSEMc2no5gug3HCgXGYjlE-OTZssi-LJ2E7oaCTaKbQMhFMO213enKaX7lOUgAdkEvQInGe5KLS67gUNugyh9WjVLsiPhT3Azsh6ITOmQwHS24mX4NI02k2wvzEp5lg3U9CTMD5qPgy1-8OvSJ--X45jlm0GwbbCa8Q5mCnhWf8psIRYZjOFSO_30cbSQe2BNkGTqxKz0WyHrwhD5rNnOOoZC_pnPFvcLf2W-EH-n8TY-D-8gZN4nZ8JL0Vy2YR6HnkC4eB2MSncu51tIlh4tx2nPRrGxmG-SIUWpzUTC51bpw9hIThnGaGljbRu945z1byav_qUG4ttFPzaT2DVbanHci06hfm9gJWuWm74efWQ4oIYlYW2DHnRVIkeaPgCuTZuqVa9YjaLdD5PrUaqYzqKRfToUmuncDwBv9JiCXQLQNyH4aHmI3NOnBUQwR2Ypnw54tmHlaBoGIpBnxY2smgZSG4eilTTWLxM93K_ggorgae5_8alGLyxDioXMbsZ9hSDMElpNVLL4Jyx0PlV7YwZkJEIYDL021_zp69Mlh1M4crwejNiChp6guPUFiidWJq4qjUV0L6sNeTduvIv1SGCgjh8HgqFZ4CRC4XTMpqNzbmrtq46NAShWAtKM8Fd-P8pVqnnOaJu7O5BtiQiz14pMfKSjk50PECwAtDcPhvDlIGtL7fE0vG941RSe8_xSZiCAyQAEjg6M3KALWaVpP4Vag1TBTCpeLpHeLfRmoelP2qfLyRWVbGDk0IbzPX6-WjaWtQGYtBRbLRNkMKCWJ3m368D9cefJbc3gkSiPXVhSHoRZMJZh282tY0tOFE8tbBBJ7iVtnnGQYOOd9eEPP5ln9I9UyJ2sIYGiXjjvSCuupn6RDSIjaxHBPqLP7Ve0xd6Wi5qkcRkrEB3kTR1l8Qy3uNIW6L3_Na0sAVEVD9l63lAw7DcSQ_RDvQwv-mKwpLW8-a2KwULVwJATTYEWpzUvs1DIFvEYMlQbjNJRR79hpKIV0DTPRkF6SVB40OC7--a21mCGAL1I149LRfbIVCFWzHAYKJiv5-YY9cY85RL7RpbV0tYt3sEE2daQWtUZpdkaz07gEod4DO5ofUbJoRog0glJDsIgg4oL8gey_mDIGK5MPYEnUAlvREcJWkZDj_aNzsva-shriGSFuezt1_PCa-4uRFURNNrlyawD05aN8-zWtHM_8TWhkY_V3um3BM_g1Md4VqKmQehazQFZU5Wr9KkN9JO64Lz6TXzt9STtD4yXxGVuhiIWSR5ywd7fzx_eH2mQpB_zo4FNt-X2SkLUr5vmzW0QIKgc8gcNnLih3_fIeYkCEbSHLXWeQECOu7Zee2OlgHb6lwrwrPY_123Qrq_5q3sJmTPC7JKkEk14o3BGMCdKc8AAwUDnWHoNBIyfu86z2F2rTxDP4ilk1MjKRmrN5bl6HsOi9VUHKm5Fa2hsVzUb63uz0i0OucLMK6m_EeI7Sl7rJMcqqy6wn2FW4jpFEhsFuWDgR6qBh4ltGgQcJ8l_aFUcncqtWgSOhYzJds_eE9Xc27sAaaIw2HA7PotIr4NIBWb6PVux5ljkBA2n10Nb58naJHYDQFWaMUMOzrgHVh1EnR6NVIuKmD-DFT3GLul9p96_GJqlDNpyc0i4gBpEoTdY6iDn7H5nxR6s7JO-TA93cRJY_j8Mv8E_d8YLdpJnWGIwU2VXMT4cRdQ6ICND3XdY68Y6MGKaM7Zh6xjPTbHB99C5O12gMh9jt5mgd-t2JuyxUxS2bIU5Z6dk_uPFH-Tbi2TohzrCZchWK-IB-wppo_r1e6TcQah83hjpRegv1n9lN8L5IyPUv1iHOqYawVXZjrcvJm089R09OhtfSxKJRsssnccIEzSPNcWDZcy-QqFriUBgw2V10eyLvSB7UF8A7tae6RCnxOJEUvZWeqmz8Tp5_8cQgiJYbGrVfPyQaxTZMl0lzHuAj0K3TFRautXUrF-XDpsKzg== \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 8ecf124df68..9b1ec97d44d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,24 +3,49 @@ source-dir = docs build-dir = docs/_build all_files = 1 -[upload_docs] -upload-dir = docs/_build/html -show-response = 1 +[build_docs] +source-dir = docs +build-dir = docs/_build +all_files = 1 + [tool:pytest] -minversion = 2.2 +minversion = 3.0 norecursedirs = build docs/_build +addopts = -p no:warnings [ah_bootstrap] auto_use = True +auto_upgrade = False + +[upload_docs] +upload-dir = docs/_build/html +show-response = 1 + +[flake8] +exclude = extern,sphinx,*parsetab.py + +[pycodestyle] +exclude = extern,sphinx,*parsetab.py + [metadata] package_name = tardis description = TARDIS - Temperature And Radiative Diffusion In Supernovae -long_description = TARDIS - Temperature And Radiative Diffusion In Supernovae -author = TARDIS Team +author = TARDIS Collaboration author_email = wkerzendorf@gmail.com license = BSD (3 clause) url = http://tardis.readthedocs.org/ edit_on_github = False github_project = tardis-sn/tardis +version = 3.0.dev +minimum_python_version = 3.6 +install_requires = astropy + + + + + + + + diff --git a/setup.py b/setup.py index 14ac28ed7cc..0ae7988eb92 100755 --- a/setup.py +++ b/setup.py @@ -1,54 +1,74 @@ -#!/usr/bin/env python -# Licensed under a 3-clause BSD style license - see LICENSE.rst - import glob import os import sys +try: + from configparser import ConfigParser +except ImportError: + from ConfigParser import ConfigParser + +# Get some values from the setup.cfg +conf = ConfigParser() +conf.read(['setup.cfg']) +metadata = dict(conf.items('metadata')) + +PACKAGENAME = metadata.get('package_name', 'packagename') +DESCRIPTION = metadata.get('description', 'Astropy Package Template') +AUTHOR = metadata.get('author', 'Astropy Developers') +AUTHOR_EMAIL = metadata.get('author_email', '') +LICENSE = metadata.get('license', 'unknown') +URL = metadata.get('url', 'http://docs.astropy.org/projects/package-template/') +__minimum_python_version__ = metadata.get("minimum_python_version", "3.6") + +# Enforce Python version check - this is the same check as in __init__.py but +# this one has to happen before importing ah_bootstrap. +if sys.version_info < tuple((int(val) for val in __minimum_python_version__.split('.'))): + sys.stderr.write("ERROR: packagename requires Python {} or later\n".format(__minimum_python_version__)) + sys.exit(1) + +# Import ah_bootstrap after the python version validation import ah_bootstrap from setuptools import setup -#A dirty hack to get around some early import/configurations ambiguities -if sys.version_info[0] >= 3: - import builtins -else: - import __builtin__ as builtins +import builtins builtins._ASTROPY_SETUP_ = True -from astropy_helpers.setup_helpers import (register_commands, adjust_compiler, - get_debug_option, get_package_info, - add_command_option) +from astropy_helpers.setup_helpers import (register_commands, get_debug_option, + get_package_info, add_command_option) from astropy_helpers.git_helpers import get_git_devstr from astropy_helpers.version_helpers import generate_version_py -# Get some values from the setup.cfg -try: - from ConfigParser import ConfigParser -except ImportError: - from configparser import ConfigParser -conf = ConfigParser() -conf.read(['setup.cfg']) -metadata = dict(conf.items('metadata')) +# order of priority for long_description: +# (1) set in setup.cfg, +# (2) load LONG_DESCRIPTION.rst, +# (3) load README.rst, +# (4) package docstring +readme_glob = 'README*' +_cfg_long_description = metadata.get('long_description', '') +if _cfg_long_description: + LONG_DESCRIPTION = _cfg_long_description -PACKAGENAME = metadata.get('package_name', 'packagename') -DESCRIPTION = metadata.get('description', 'Astropy affiliated package') -AUTHOR = metadata.get('author', '') -AUTHOR_EMAIL = metadata.get('author_email', '') -LICENSE = metadata.get('license', 'unknown') -URL = metadata.get('url', 'http://astropy.org') +elif os.path.exists('LONG_DESCRIPTION.rst'): + with open('LONG_DESCRIPTION.rst') as f: + LONG_DESCRIPTION = f.read() -# Get the long description from the package's docstring -#__import__(PACKAGENAME) -#package = sys.modules[PACKAGENAME] -LONG_DESCRIPTION = "" #package.__doc__ +elif len(glob.glob(readme_glob)) > 0: + with open(glob.glob(readme_glob)[0]) as f: + LONG_DESCRIPTION = f.read() + +else: + # Get the long description from the package's docstring + __import__(PACKAGENAME) + package = sys.modules[PACKAGENAME] + LONG_DESCRIPTION = package.__doc__ # Store the package name in a built-in variable so it's easy # to get from other parts of the setup infrastructure builtins._ASTROPY_PACKAGE_NAME_ = PACKAGENAME -# VERSION should be PEP386 compatible (http://www.python.org/dev/peps/pep-0386) -VERSION = '1.5.dev' +# VERSION should be PEP440 compatible (http://www.python.org/dev/peps/pep-0440) +VERSION = metadata.get('version', '0.0.dev') # Indicates if this version is a release version RELEASE = 'dev' not in VERSION @@ -56,15 +76,17 @@ if not RELEASE: VERSION += get_git_devstr(False) + # Populate the dict of setup command overrides; this should be done before # invoking any other functionality from distutils since it can potentially # modify distutils' behavior. cmdclassd = register_commands(PACKAGENAME, VERSION, RELEASE) -add_command_option('install', 'with-openmp', 'compile TARDIS without OpenMP', - is_bool=True) -add_command_option('build', 'with-openmp', 'compile TARDIS without OpenMP', + +add_command_option('install', 'with-openmp', 'compile TARDIS with OpenMP', + is_bool=True, ) +add_command_option('build', 'with-openmp', 'compile TARDIS with OpenMP', is_bool=True) -add_command_option('develop', 'with-openmp', 'compile TARDIS without OpenMP', +add_command_option('develop', 'with-openmp', 'compile TARDIS with OpenMP', is_bool=True) add_command_option('install', 'with-vpacket-logging', 'compile TARDIS with virtual packet logging', is_bool=True) @@ -95,12 +117,6 @@ # Define entry points for command-line scripts entry_points = {} -for hook in [('prereleaser', 'middle'), ('releaser', 'middle'), - ('postreleaser', 'before'), ('postreleaser', 'middle')]: - hook_ep = 'zest.releaser.' + '.'.join(hook) - hook_name = 'astropy.release.' + '.'.join(hook) - hook_func = 'astropy.utils.release:' + '_'.join(hook) - entry_points[hook_ep] = ['%s = %s' % (hook_name, hook_func)] entry_points['console_scripts'] = [ 'tardis_test_runner = tardis.tests.integration_tests.runner:run_tests', @@ -119,6 +135,7 @@ c_files.append( os.path.join( os.path.relpath(root, PACKAGENAME), filename)) + package_info['package_data'][PACKAGENAME].extend(c_files) setup(name=PACKAGENAME + '-sn', @@ -133,7 +150,7 @@ long_description=LONG_DESCRIPTION, cmdclass=cmdclassd, zip_safe=False, - use_2to3=True, + use_2to3=False, entry_points=entry_points, **package_info ) diff --git a/tardis/__init__.py b/tardis/__init__.py index 5027acb3fb7..9e2722557f2 100644 --- a/tardis/__init__.py +++ b/tardis/__init__.py @@ -1,6 +1,6 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst -import logging -from tardis.io.util import ColoredLogger +import logging, sys +from tardis.util.colored_logger import ColoredFormatter, formatter_message # Affiliated packages may add whatever they like to this file, but # should keep this content at the top. # ---------------------------------------------------------------------------- @@ -10,12 +10,16 @@ from tardis.base import run_tardis from tardis.io.util import yaml_load_config_file as yaml_load +FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s] %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)" +COLOR_FORMAT = formatter_message(FORMAT, True) + logging.captureWarnings(True) logger = logging.getLogger('tardis') -logging.setLoggerClass(ColoredLogger) logger.setLevel(logging.INFO) -console_handler = logging.StreamHandler() -console_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s') + +console_handler = logging.StreamHandler(sys.stdout) +console_formatter = ColoredFormatter(COLOR_FORMAT) console_handler.setFormatter(console_formatter) + logger.addHandler(console_handler) logging.getLogger('py.warnings').addHandler(console_handler) diff --git a/tardis/analysis.py b/tardis/analysis.py index 98911129cf3..fc3360f31e0 100644 --- a/tardis/analysis.py +++ b/tardis/analysis.py @@ -3,7 +3,8 @@ import re import os -from astropy import units as u, constants +from astropy import units as u +from tardis import constants import numpy as np import pandas as pd @@ -134,13 +135,15 @@ def plot_wave_in_out(self, fig, do_clf=True, plot_resonance=True): ax.set_ylabel('Last interaction Wave out') def onpick(event): - print "-" * 80 - print "Line_in (%d/%d):\n%s" % ( - len(event.ind), self.current_no_packets, self.last_line_list_in.ix[event.ind]) - print "\n\n" - print "Line_out (%d/%d):\n%s" % ( - len(event.ind), self.current_no_packets, self.last_line_list_in.ix[event.ind]) - print "^" * 80 + print("-" * 80) + print("Line_in (%d/%d):\n%s" % ( + len(event.ind), self.current_no_packets, + self.last_line_list_in.ix[event.ind])) + print("\n\n") + print("Line_out (%d/%d):\n%s" % ( + len(event.ind), self.current_no_packets, + self.last_line_list_in.ix[event.ind])) + print("^" * 80) def onpress(event): pass diff --git a/tardis/base.py b/tardis/base.py index 58a8a539c6d..8e771362926 100644 --- a/tardis/base.py +++ b/tardis/base.py @@ -1,6 +1,6 @@ # functions that are important for the general usage of TARDIS -def run_tardis(config, atom_data=None): +def run_tardis(config, atom_data=None, simulation_callbacks=[]): """ This function is one of the core functions to run TARDIS from a given config object. @@ -35,6 +35,9 @@ def run_tardis(config, atom_data=None): tardis_config = Configuration.from_config_dict(config) simulation = Simulation.from_config(tardis_config, atom_data=atom_data) + for cb in simulation_callbacks: + simulation.add_callback(cb) + simulation.run() return simulation diff --git a/tardis/conftest.py b/tardis/conftest.py index 6c0de744eee..3028372a815 100644 --- a/tardis/conftest.py +++ b/tardis/conftest.py @@ -2,18 +2,71 @@ # by importing them here in conftest.py they are discoverable by py.test # no matter how it is invoked within the source tree. -from astropy.tests.pytest_plugins import * -from astropy.tests.pytest_plugins import ( - pytest_addoption as _pytest_add_option - ) +# This file is used to configure the behavior of pytest when using the Astropy +# test infrastructure. + +from astropy.version import version as astropy_version +if astropy_version < '3.0': + # With older versions of Astropy, we actually need to import the pytest + # plugins themselves in order to make them discoverable by pytest. + from astropy.tests.pytest_plugins import * +else: + # As of Astropy 3.0, the pytest plugins provided by Astropy are + # automatically made available when Astropy is installed. This means it's + # not necessary to import them here, but we still need to import global + # variables that are used for configuration. + from astropy.tests.plugins.display import PYTEST_HEADER_MODULES, TESTED_VERSIONS + +from astropy.tests.helper import enable_deprecations_as_exceptions + +## Uncomment the following line to treat all DeprecationWarnings as +## exceptions. For Astropy v2.0 or later, there are 2 additional keywords, +## as follow (although default should work for most cases). +## To ignore some packages that produce deprecation warnings on import +## (in addition to 'compiler', 'scipy', 'pygments', 'ipykernel', and +## 'setuptools'), add: +## modules_to_ignore_on_import=['module_1', 'module_2'] +## To ignore some specific deprecation warning messages for Python version +## MAJOR.MINOR or later, add: +## warnings_to_ignore_by_pyver={(MAJOR, MINOR): ['Message to ignore']} +# enable_deprecations_as_exceptions() + +## Uncomment and customize the following lines to add/remove entries from +## the list of packages for which version numbers are displayed when running +## the tests. Making it pass for KeyError is essential in some cases when +## the package uses other astropy affiliated packages. +# try: +# PYTEST_HEADER_MODULES['Astropy'] = 'astropy' +# PYTEST_HEADER_MODULES['scikit-image'] = 'skimage' +# del PYTEST_HEADER_MODULES['h5py'] +# except (NameError, KeyError): # NameError is needed to support Astropy < 1.0 +# pass + +## Uncomment the following lines to display the version number of the +## package rather than the version number of Astropy in the top line when +## running the tests. +# import os +# +## This is to figure out the package version, rather than +## using Astropy's +# try: +# from .version import version +# except ImportError: +# version = 'dev' +# +# try: +# packagename = os.path.basename(os.path.dirname(__file__)) +# TESTED_VERSIONS[packagename] = version +# except NameError: # Needed to support Astropy <= 1.0.0 +# pass + +### XXX #### Here the TARDIS testing stuff begins ### XXX #### import pytest -from tardis.io.atomic import AtomData from tardis.io.util import yaml_load_config_file from tardis.io.config_reader import Configuration from tardis.simulation import Simulation -from copy import deepcopy import pandas as pd ### @@ -60,7 +113,7 @@ except NameError: # Needed to support Astropy <= 1.0.0 pass -DEFAULT_UUID = '864f1753714343c41f99cb065710cace' + # ------------------------------------------------------------------------- # Initialization @@ -68,7 +121,6 @@ def pytest_addoption(parser): - _pytest_add_option(parser) parser.addoption("--tardis-refdata", default=None, help="Path to Tardis Reference Folder") parser.addoption("--integration-tests", @@ -103,6 +155,7 @@ def tardis_ref_path(): else: return os.path.expandvars(os.path.expanduser(tardis_ref_path)) +from tardis.tests.fixtures.atom_data import * @pytest.yield_fixture(scope="session") def tardis_ref_data(tardis_ref_path, generate_reference): @@ -119,35 +172,6 @@ def tardis_ref_data(tardis_ref_path, generate_reference): yield store -@pytest.fixture(scope="session") -def atomic_data_fname(tardis_ref_path): - atomic_data_fname = os.path.join( - tardis_ref_path, 'atom_data', 'kurucz_cd23_chianti_H_He.h5') - - assert os.path.exists(atomic_data_fname), ("{0} atomic datafiles" - " does not seem to " - "exist".format( - atomic_data_fname)) - return atomic_data_fname - - -@pytest.fixture(scope="session") -def atomic_dataset(atomic_data_fname): - atomic_data = AtomData.from_hdf(atomic_data_fname) - - if atomic_data.md5 != DEFAULT_UUID: - pytest.skip( - 'Need default Kurucz atomic dataset (md5="{}"'.format( - DEFAULT_UUID)) - else: - return atomic_data - - -@pytest.fixture -def kurucz_atomic_data(atomic_dataset): - atomic_data = deepcopy(atomic_dataset) - return atomic_data - @pytest.fixture def tardis_config_verysimple(): diff --git a/tardis/constants.py b/tardis/constants.py new file mode 100644 index 00000000000..269d599b5fc --- /dev/null +++ b/tardis/constants.py @@ -0,0 +1 @@ +from astropy.constants.astropyconst13 import * \ No newline at end of file diff --git a/tardis/gui/datahandler.py b/tardis/gui/datahandler.py index 7d3a2a4a7a7..1c6215e6ab5 100644 --- a/tardis/gui/datahandler.py +++ b/tardis/gui/datahandler.py @@ -1,6 +1,5 @@ import os from pkg_resources import parse_version -import exceptions import numpy as np import matplotlib @@ -24,7 +23,7 @@ if (parse_version(matplotlib.__version__) >= parse_version('1.4')): matplotlib.style.use('fivethirtyeight') else: - print "Please upgrade matplotlib to a version >=1.4 for best results!" + print("Please upgrade matplotlib to a version >=1.4 for best results!") matplotlib.rcParams['font.family'] = 'serif' matplotlib.rcParams['font.size'] = 10.0 matplotlib.rcParams['lines.linewidth'] = 1.0 diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index e819af68c6a..514e8f32d9e 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -1,4 +1,7 @@ import os + +import tardis.util.base + if os.environ.get('QT_API', None)=='pyqt': from PyQt4 import QtGui, QtCore elif os.environ.get('QT_API', None)=='pyside': @@ -373,11 +376,11 @@ def match_dicts(self, dict1, dict2): #dict1<=dict2 else: - print 'The selected and available options' - print optionselected - print options - raise exceptions.IOError("An invalid option was"+ - " provided in the input file") + print('The selected and available options') + print(optionselected) + print(options) + raise IOError("An invalid option was" + " provided in the input file") else: dict2[key] = dict1[key] @@ -969,7 +972,7 @@ def __init__(self, line_interaction_analysis, atom_data, lines_data, description 'ion_number']) self.species_selected = sorted( line_interaction_species_group.groups.keys()) - species_symbols = [util.species_tuple_to_string(item) for item in self.species_selected] + species_symbols = [tardis.util.base.species_tuple_to_string(item) for item in self.species_selected] species_table_model = self.createTable([species_symbols, ['Species']]) species_abundances = ( line_interaction_species_group.wavelength.count().astype(float) / diff --git a/tardis/io/__init__.py b/tardis/io/__init__.py index 841ab3a7343..583d361a6b4 100644 --- a/tardis/io/__init__.py +++ b/tardis/io/__init__.py @@ -1,4 +1,4 @@ #readin model_data from tardis.io.model_reader import read_simple_ascii_density, read_simple_ascii_abundances, read_density_file -from util import parse_abundance_dict_to_dataframe +from tardis.io.util import parse_abundance_dict_to_dataframe diff --git a/tardis/io/atomic.py b/tardis/io/atomic.py index c62ea261b70..3ab59be373a 100644 --- a/tardis/io/atomic.py +++ b/tardis/io/atomic.py @@ -8,7 +8,7 @@ from scipy import interpolate from collections import OrderedDict from astropy import units as u -from astropy import constants as const +from tardis import constants as const from astropy.units import Quantity @@ -152,12 +152,12 @@ def from_hdf(cls, fname): atom_data = cls(**dataframes) try: - atom_data.uuid1 = store.root._v_attrs['uuid1'] + atom_data.uuid1 = store.root._v_attrs['uuid1'].decode('ascii') except KeyError: atom_data.uuid1 = None try: - atom_data.md5 = store.root._v_attrs['md5'] + atom_data.md5 = store.root._v_attrs['md5'].decode('ascii') except KeyError: atom_data.md5 = None @@ -306,13 +306,13 @@ def prepare_atom_data( tmp_lines_lower2level_idx = self.lines.index.droplevel('level_number_upper') self.lines_lower2level_idx = ( - self.levels_index.ix[tmp_lines_lower2level_idx]. + self.levels_index.loc[tmp_lines_lower2level_idx]. astype(np.int64).values) tmp_lines_upper2level_idx = self.lines.index.droplevel('level_number_lower') self.lines_upper2level_idx = ( - self.levels_index.ix[tmp_lines_upper2level_idx]. + self.levels_index.loc[tmp_lines_upper2level_idx]. astype(np.int64).values) self.atom_ion_index = None @@ -351,11 +351,11 @@ def prepare_atom_data( self.macro_atom_references.loc[:, "references_idx"] = np.arange(len(self.macro_atom_references)) - self.macro_atom_data.loc[:, "lines_idx"] = self.lines_index.ix[ + self.macro_atom_data.loc[:, "lines_idx"] = self.lines_index.loc[ self.macro_atom_data['transition_line_id'] ].values - self.lines_upper2macro_reference_idx = self.macro_atom_references.ix[ + self.lines_upper2macro_reference_idx = self.macro_atom_references.loc[ tmp_lines_upper2level_idx, 'references_idx' ].astype(np.int64).values @@ -367,9 +367,19 @@ def prepare_atom_data( self.macro_atom_data['destination_level_number'] ]) + tmp_macro_source_level_idx = pd.MultiIndex.from_arrays([ + self.macro_atom_data['atomic_number'], + self.macro_atom_data['ion_number'], + self.macro_atom_data['source_level_number'] + ]) + self.macro_atom_data.loc[:, 'destination_level_idx'] = self.macro_atom_references.loc[ tmp_macro_destination_level_idx, "references_idx" - ].astype(np.int64).values # why it is named `destination_level_idx` ?! It is reference index + ].astype(np.int64).values + + self.macro_atom_data.loc[:, 'source_level_idx'] = self.macro_atom_references.loc[ + tmp_macro_source_level_idx, "references_idx" + ].astype(np.int64).values elif line_interaction_type == 'downbranch': # Sets all the destination levels to -1 to indicate that they @@ -422,7 +432,7 @@ def _create_collision_coefficient_matrix(self): self.g_ratio_matrices = {} collision_group = self.atom_data.collision_data.groupby(level=['atomic_number', 'ion_number']) for species in self.nlte_species: - no_of_levels = self.atom_data.levels.ix[species].energy.count() + no_of_levels = self.atom_data.levels.loc[species].energy.count() C_ul_matrix = np.zeros( ( no_of_levels, diff --git a/tardis/io/config_reader.py b/tardis/io/config_reader.py index 3be41bec68b..9ceeaf2920c 100644 --- a/tardis/io/config_reader.py +++ b/tardis/io/config_reader.py @@ -30,9 +30,7 @@ def parse_convergence_section(convergence_section_dict): dictionary """ - - convergence_parameters = ['damping_constant', 'threshold', 'fraction', - 'hold_iterations'] + convergence_parameters = ['damping_constant', 'threshold'] for convergence_variable in ['t_inner', 't_rad', 'w']: if convergence_variable not in convergence_section_dict: @@ -116,7 +114,7 @@ def __init__(self, value=None): for key in value: self.__setitem__(key, value[key]) else: - raise TypeError, 'expected dict' + raise (TypeError, 'expected dict') def __setitem__(self, key, value): if isinstance(value, dict) and not isinstance(value, @@ -260,9 +258,29 @@ def from_config_dict(cls, config_dict, validate=True, config_dirname=''): validated_config_dict['config_dirname'] = config_dirname montecarlo_section = validated_config_dict['montecarlo'] - montecarlo_section['convergence_strategy'] = ( - parse_convergence_section( - montecarlo_section['convergence_strategy'])) + if montecarlo_section['convergence_strategy']['type'] == "damped": + montecarlo_section['convergence_strategy'] = ( + parse_convergence_section( + montecarlo_section['convergence_strategy'])) + elif montecarlo_section['convergence_strategy']['type'] == "custom": + raise NotImplementedError( + 'convergence_strategy is set to "custom"; ' + 'you need to implement your specific convergence treatment') + else: + raise ValueError('convergence_strategy is not "damped" ' + 'or "custom"') + + enable_full_relativity = montecarlo_section['enable_full_relativity'] + spectrum_integrated = ( + validated_config_dict['spectrum']['method'] == 'integrated' + ) + if enable_full_relativity and spectrum_integrated: + raise NotImplementedError( + "The spectrum method is set to 'integrated' and " + "enable_full_relativity to 'True'.\n" + "The FormalIntegrator is not yet implemented for the full " + "relativity mode. " + ) return cls(validated_config_dict) diff --git a/tardis/io/config_validator.py b/tardis/io/config_validator.py index 754a9bd1280..fa1584e1755 100644 --- a/tardis/io/config_validator.py +++ b/tardis/io/config_validator.py @@ -34,7 +34,7 @@ def set_defaults(validator, properties, instance, schema): # values on schemas that use the oneOf keyword if not list( validate_properties(validator, properties, instance, schema)): - for property, subschema in properties.iteritems(): + for property, subschema in properties.items(): if 'default' in subschema: instance.setdefault(property, subschema['default']) diff --git a/tardis/io/decay.py b/tardis/io/decay.py index 51d96c4a50e..18dae0539cc 100644 --- a/tardis/io/decay.py +++ b/tardis/io/decay.py @@ -9,11 +9,11 @@ def _constructor(self): return IsotopeAbundances def _update_material(self): - self.comp_dicts = [dict() for i in xrange(len(self.columns))] + self.comp_dicts = [dict() for i in range(len(self.columns))] for (atomic_number, mass_number), abundances in self.iterrows(): nuclear_symbol = '%s%d'.format(nucname.name(atomic_number), mass_number) - for i in xrange(len(self.columns)): + for i in range(len(self.columns)): self.comp_dicts[i][nuclear_symbol] = abundances[i] @classmethod @@ -27,7 +27,7 @@ def from_materials(cls, materials): multi_index_tuples, names=['atomic_number', 'mass_number']) - abundances = pd.DataFrame(data=0.0, index=index, columns=xrange(len(materials))) + abundances = pd.DataFrame(data=0.0, index=index, columns=range(len(materials))) for i, material in enumerate(materials): for key, value in material.items(): @@ -55,11 +55,11 @@ def to_materials(self): :return: """ - comp_dicts = [dict() for i in xrange(len(self.columns))] + comp_dicts = [dict() for i in range(len(self.columns))] for (atomic_number, mass_number), abundances in self.iterrows(): nuclear_symbol = '{0:s}{1:d}'.format(nucname.name(atomic_number), mass_number) - for i in xrange(len(self.columns)): + for i in range(len(self.columns)): comp_dicts[i][nuclear_symbol] = abundances[i] return [material.Material(comp_dict) for comp_dict in comp_dicts] diff --git a/tardis/io/model_reader.py b/tardis/io/model_reader.py index 4c95ae842b6..0f322c0a246 100644 --- a/tardis/io/model_reader.py +++ b/tardis/io/model_reader.py @@ -1,5 +1,6 @@ #reading different model files +import warnings import numpy as np from numpy import recfromtxt, genfromtxt import pandas as pd @@ -10,7 +11,8 @@ # Adding logging support logger = logging.getLogger(__name__) -from tardis.util import parse_quantity +from tardis.util.base import parse_quantity + class ConfigurationError(Exception): pass @@ -43,11 +45,11 @@ def read_density_file(filename, filetype): """ file_parsers = {'artis': read_artis_density, 'simple_ascii': read_simple_ascii_density, - 'tardis_model': read_cmfgen_density} + 'cmfgen_model': read_cmfgen_density} electron_densities = None temperature = None - if filetype == 'tardis_model': + if filetype == 'cmfgen_model': (time_of_model, velocity, unscaled_mean_densities, electron_densities, temperature) = read_cmfgen_density(filename) else: @@ -95,11 +97,12 @@ def read_abundances_file(abundance_filename, abundance_filetype, file_parsers = {'simple_ascii': read_simple_ascii_abundances, 'artis': read_simple_ascii_abundances, - 'tardis_model': read_simple_isotope_abundances} + 'cmfgen_model': read_cmfgen_composition, + 'custom_composition': read_csv_composition} isotope_abundance = pd.DataFrame() - if abundance_filetype == 'tardis_model': - index, abundances, isotope_abundance = read_simple_isotope_abundances( + if abundance_filetype in ["cmfgen_model", "custom_composition"]: + index, abundances, isotope_abundance = file_parsers[abundance_filetype]( abundance_filename) else: index, abundances = file_parsers[abundance_filetype]( @@ -110,7 +113,7 @@ def read_abundances_file(abundance_filename, abundance_filetype, else: outer_boundary_index_m1 = None index = index[inner_boundary_index:outer_boundary_index] - abundances = abundances.ix[:, slice(inner_boundary_index, outer_boundary_index_m1)] + abundances = abundances.loc[:, slice(inner_boundary_index, outer_boundary_index_m1)] abundances.columns = np.arange(len(abundances.columns)) return index, abundances, isotope_abundance @@ -145,7 +148,7 @@ def read_uniform_abundances(abundances_section, no_of_shells): try: if element_symbol_string in nucname.name_zz: z = nucname.name_zz[element_symbol_string] - abundance.ix[z] = float( + abundance.loc[z] = float( abundances_section[element_symbol_string]) else: mass_no = nucname.anum(element_symbol_string) @@ -224,7 +227,7 @@ def read_artis_density(fname): """ with open(fname) as fh: - for i, line in enumerate(file(fname)): + for i, line in enumerate(open(fname)): if i == 0: no_of_shells = np.int64(line.strip()) elif i == 1: @@ -249,10 +252,14 @@ def read_cmfgen_density(fname): Reading a density file of the following structure (example; lines starting with a hash will be ignored): The first density describes the mean density in the center of the model and is not used. The file consists of a header row and next row contains unit of the respective attributes - velocity densities electron_densities temperature - km/s g/cm^3 /cm^3 K - 871.66905 4.2537191e-09 2.5953807e+14 7.6395577 - 877.44269 4.2537191e-09 2.5953807e+14 7.6395577 + Note that the first column has to contain a running index + + Example: + + index velocity densities electron_densities temperature + - km/s g/cm^3 /cm^3 K + 0 871.66905 4.2537191e-09 2.5953807e+14 7.6395577 + 1 877.44269 4.2537191e-09 2.5953807e+14 7.6395577 Rest columns contain abundances of elements and isotopes @@ -275,6 +282,9 @@ def read_cmfgen_density(fname): temperature: ~np.ndarray """ + warnings.warn("The current CMFGEN model parser is deprecated", + DeprecationWarning) + df = pd.read_csv(fname, comment='#', delimiter='\s+', skiprows=[0, 2]) with open(fname) as fh: @@ -285,11 +295,11 @@ def read_cmfgen_density(fname): elif row_index == 2: quantities = line.split() - velocity = u.Quantity(df['velocity'].values, quantities[0]).to('cm/s') - temperature = u.Quantity(df['temperature'].values, quantities[1])[1:] - mean_density = u.Quantity(df['densities'].values, quantities[2])[1:] + velocity = u.Quantity(df['velocity'].values, quantities[1]).to('cm/s') + temperature = u.Quantity(df['temperature'].values, quantities[2])[1:] + mean_density = u.Quantity(df['densities'].values, quantities[3])[1:] electron_densities = u.Quantity( - df['electron_densities'].values, quantities[3])[1:] + df['electron_densities'].values, quantities[4])[1:] return time_of_model, velocity, mean_density, electron_densities, temperature @@ -323,18 +333,71 @@ def read_simple_ascii_abundances(fname): return index, abundances -def read_simple_isotope_abundances(fname, delimiter='\s+'): +def read_cmfgen_composition(fname, delimiter='\s+'): + """Read composition from a CMFGEN model file + + The CMFGEN file format contains information about the ejecta state in the + first four columns and the following ones contain elemental and isotopic + abundances. + + WARNING: deprecated + + fname: str + filename of the csv file """ - Reading an abundance file of the following structure (example; lines starting with hash will be ignored): - The first line of abundances describe the abundances in the center of the model and are not used. - First 4 columns contain values related to velocity, density, electron_density and temperature. - From 5th column onwards, abundances of elements and isotopes begin. - The file consists of a header row and next row contains unit of the respective attributes - Since abundance fractions are unitless , its unit row is filled with ones - Example - velocity...temperature C O Ni56 - km/s.........K 1 1 1 - ...................... 0.4 0.3 0.2 + + warnings.warn("The current CMFGEN model parser is deprecated", + DeprecationWarning) + + return read_csv_isotope_abundances(fname, delimiter=delimiter, + skip_columns=4, skip_rows=[0, 2, 3]) + + +def read_csv_composition(fname, delimiter='\s+'): + """Read composition from a simple CSV file + + The CSV file can contain specific isotopes or elemental abundances in the + different columns. The first row must contain the header in which the + contents of each column is specified by the elemental symbol (for elemental + abundances) or by the symbol plus mass number (for isotopic abundances). + + Example: C O Fe Ni56 Co + + The i-th row specifies the composition in the i-th shell + + fname: str + filename of the csv file + """ + + return read_csv_isotope_abundances(fname, delimiter=delimiter, + skip_columns=0, skip_rows=[1]) + + +def read_csv_isotope_abundances(fname, delimiter='\s+', skip_columns=0, + skip_rows=[1]): + """ + A generic parser for a TARDIS composition stored as a CSV file + + The parser can read in both elemental and isotopic abundances. The first + column is always expected to contain a running index, labelling the grid + cells. The parser also allows for additional information to be stored in + the first skip_columns columns. These will be ignored if skip_columns > 0. + Note that the first column, containing the cell index is not taken into + account here. + + Specific header lines can be skipped by the skip_rows keyword argument + + It is expected that the first row of the date block (after skipping the + rows specified in skip_rows) specifies the different elements and isotopes. + Each row after contains the composition in the corresponding grid shell. + The first composition row describes the composition of the photosphere and + is essentially ignored (for the default value of skip_rows). + + Example: + + Index C O Ni56 + 0 1 1 1 + 1 0.4 0.3 0.2 Parameters ---------- @@ -347,32 +410,32 @@ def read_simple_isotope_abundances(fname, delimiter='\s+'): index: ~np.ndarray abundances: ~pandas.DataFrame - isotope_abundance: ~pandas.MultiIndex + isotope_abundance: ~pandas.MultiIndex """ + df = pd.read_csv(fname, comment='#', - delimiter=delimiter, skiprows=[0, 2]) + sep=delimiter, skiprows=skip_rows, index_col=0) df = df.transpose() - abundance = pd.DataFrame(columns=np.arange(df.shape[1] - 1), + abundance = pd.DataFrame(columns=np.arange(df.shape[1]), index=pd.Index([], name='atomic_number'), dtype=np.float64) isotope_index = pd.MultiIndex( [[]] * 2, [[]] * 2, names=['atomic_number', 'mass_number']) - isotope_abundance = pd.DataFrame(columns=np.arange(df.shape[1] - 1), + isotope_abundance = pd.DataFrame(columns=np.arange(df.shape[1]), index=isotope_index, dtype=np.float64) - - #First 4 columns related to density parser (e.g. velocity) - for element_symbol_string in df.index[4:]: + + for element_symbol_string in df.index[skip_columns:]: if element_symbol_string in nucname.name_zz: z = nucname.name_zz[element_symbol_string] - abundance.loc[z, :] = df.loc[element_symbol_string].tolist()[1:] + abundance.loc[z, :] = df.loc[element_symbol_string].tolist() else: z = nucname.znum(element_symbol_string) mass_no = nucname.anum(element_symbol_string) isotope_abundance.loc[( - z, mass_no), :] = df.loc[element_symbol_string].tolist()[1:] + z, mass_no), :] = df.loc[element_symbol_string].tolist() return abundance.index, abundance, isotope_abundance diff --git a/tardis/io/parsers/__init__.py b/tardis/io/parsers/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/io/parsers/stella.py b/tardis/io/parsers/stella.py new file mode 100644 index 00000000000..5265d3d2730 --- /dev/null +++ b/tardis/io/parsers/stella.py @@ -0,0 +1,14 @@ +import re +import pandas as pd +from astropy import units as u +import numpy as np + +def read_stella_data(filename): + with open(filename) as fh: + col = fh.readlines()[5] + col_names = re.split('\s{3,}', col.strip()) + col_names = [re.sub('\s\(.+\)', '', col_name).replace(' ', '_') for col_name in col_names] + data = pd.read_csv(filename, skiprows=7, delim_whitespace=True, names = col_names) + # drop last row of data + data = data.iloc[0:-1] + return data diff --git a/tardis/io/schemas/base.yml b/tardis/io/schemas/base.yml index 4f05948ae76..db471d95479 100644 --- a/tardis/io/schemas/base.yml +++ b/tardis/io/schemas/base.yml @@ -4,20 +4,25 @@ additionalProperties: false properties: tardis_config_version: type: string - description: Version of the configuration file + description: Version of the configuration file. The current version is 1.0 and no other versions are allowed supernova: $ref: supernova.yml + description: a section pertaining to observations of the supernova atom_data: type: string description: path or filename to the Atomic Data HDF5 file plasma: $ref: plasma.yml + description: configuration of the plasma microphysics model: $ref: model.yml + description: defining the model montecarlo: $ref: montecarlo.yml + description: configuring the physics of the monte carlo radiative transfer spectrum: $ref: spectrum.yml + description: Final spectrum sampling required: - tardis_config_version - atom_data diff --git a/tardis/io/schemas/model.yml b/tardis/io/schemas/model.yml index c6e76ed0b65..59f83bed856 100644 --- a/tardis/io/schemas/model.yml +++ b/tardis/io/schemas/model.yml @@ -1,3 +1,4 @@ +$$target: model.yml type: object additionalProperties: false properties: @@ -104,7 +105,7 @@ definitions: enum: - simple_ascii - artis - - tardis_model + - cmfgen_model description: file type v_inner_boundary: type: quantity diff --git a/tardis/io/schemas/montecarlo.yml b/tardis/io/schemas/montecarlo.yml index 7fed6027f9f..b0638270e6c 100644 --- a/tardis/io/schemas/montecarlo.yml +++ b/tardis/io/schemas/montecarlo.yml @@ -1,3 +1,4 @@ +$$target: montecarlo.yml type: object additionalProperties: false properties: @@ -21,22 +22,6 @@ properties: type: number multipleOf: 1.0 description: Number of maximum iterations - black_body_sampling: - type: object - default: {} - properties: - start: - type: quantity - default: 50 angstrom - stop: - type: quantity - default: 200000 angstrom - num: - type: number - multipleOf: 1.0 - default: 1000000 - description: Sampling of the black-body for energy packet creation (giving maximum - and minimum packet frequency) last_no_of_packets: type: number multipleOf: 1.0 @@ -75,9 +60,15 @@ properties: convergence_strategy: oneOf: - $ref: '#/definitions/convergence_strategy/damped' - - $ref: '#/definitions/convergence_strategy/specific' + - $ref: '#/definitions/convergence_strategy/custom' default: type: 'damped' + enable_full_relativity: + type: boolean + default: false + description: Enables a more complete treatment of relativitic effects. This includes + angle aberration as well as use of the fully general Doppler formula. + required: - no_of_packets - iterations @@ -88,75 +79,17 @@ definitions: type: object additionalProperties: false properties: - type: - enum: - - damped - damping_constant: - type: number - default: 0.5 - description: damping constant - t_inner: - type: object - additionalProperties: false - properties: - damping_constant: - type: number - default: 0.5 - description: damping constant - threshold: - type: number - description: specifies the threshold that is taken as convergence (i.e. - 0.05 means that the value does not change more than 5%) - t_rad: - type: object - additionalProperties: false - properties: - damping_constant: - type: number - default: 0.5 - description: damping constant - threshold: - type: number - description: specifies the threshold that is taken as convergence (i.e. - 0.05 means that the value does not change more than 5%) - required: - - threshold - w: - type: object - additionalProperties: false - properties: - damping_constant: - type: number - default: 0.5 - description: damping constant - threshold: - type: number - description: specifies the threshold that is taken as convergence (i.e. - 0.05 means that the value does not change more than 5%) - required: - - threshold - lock_t_inner_cycles: - type: number - multipleOf: 1.0 - default: 1 - description: The number of cycles to lock the update of the inner boundary - temperature. This process helps with convergence. The default is to switch - it off (1 cycle) - t_inner_update_exponent: - type: number - default: -0.5 - description: L=4*pi*r**2*T^y - specific: - type: object - additionalProperties: false properties: type: enum: - - specific - threshold: - type: number - description: specifies the threshold that is taken as convergence (i.e. - 0.05 means that the value does not change more than 5%) + - damped + default: damped + stop_if_converged: + type: boolean + default: false + description: stop plasma iterations before number of specified + iterations are reached if the simulation is plasma and inner + boundary state is converged fraction: type: number default: 0.8 @@ -169,6 +102,15 @@ definitions: default: 3 description: the number of iterations that the convergence criteria need to be fulfilled before TARDIS accepts the simulation as converged + damping_constant: + type: number + default: 1.0 + description: damping constant + threshold: + type: number + default: 0.05 + description: specifies the threshold that is taken as convergence (i.e. + 0.05 means that the value does not change more than 5%) t_inner: type: object additionalProperties: false @@ -216,15 +158,21 @@ definitions: description: The number of cycles to lock the update of the inner boundary temperature. This process helps with convergence. The default is to switch it off (1 cycle) - damping_constant: - type: number - default: 0.5 - description: damping constant t_inner_update_exponent: type: number default: -0.5 description: L=4*pi*r**2*T^y - required: - - threshold - - fraction - - hold_iterations + custom: + type: object + additionalProperties: false + properties: + type: + enum: + - custom + description: Use this convergence_strategy for your specific needs. You + need to change the codebase accordingly + required: + - fraction + - damping_constant + - threshold + - hold_iterations diff --git a/tardis/io/schemas/plasma.yml b/tardis/io/schemas/plasma.yml index ac78f07d4bc..8d368bf372d 100644 --- a/tardis/io/schemas/plasma.yml +++ b/tardis/io/schemas/plasma.yml @@ -1,3 +1,4 @@ +$$target: plasma.yml type: object additionalProperties: false properties: diff --git a/tardis/io/schemas/spectrum.yml b/tardis/io/schemas/spectrum.yml index 85061bdf137..0987b995b4f 100644 --- a/tardis/io/schemas/spectrum.yml +++ b/tardis/io/schemas/spectrum.yml @@ -1,3 +1,4 @@ +$$target: spectrum.yml type: object properties: start: @@ -15,4 +16,32 @@ properties: - real default: virtual description: The method to generate the final spectrum - description: Final spectrum sampling + integrated: + type: object + default: {} + additionalProperties: false + properties: + points: + type: number + default: 1000 + description: Number of impact parameters p used in + the calculation of the integrated spectrum + interpolate_shells: + type: number + default: -1 + description: Number of shells on which the formal + integral quantities are interpolated + virtual: + type: object + default: {} + additionalProperties: false + properties: + tau_russian: + type: number + default: 10. + description: For optical depths greater tau_russian russian rouletting + is used for the v-packets + survival_probability: + type: number + default: 0.0 + description: Probability for not terminating the packet path diff --git a/tardis/io/schemas/supernova.yml b/tardis/io/schemas/supernova.yml index f6b929e9106..45131b614fe 100644 --- a/tardis/io/schemas/supernova.yml +++ b/tardis/io/schemas/supernova.yml @@ -1,3 +1,4 @@ +$$target: supernova.yml type: object additionalProperties: false properties: @@ -10,7 +11,7 @@ properties: description: time since explosion distance: type: quantity - description: distance to supernova + description: distance to supernova - **THIS IS DEPRECATED AND NOT IN USE** luminosity_wavelength_start: type: quantity default: 0 angstrom diff --git a/tardis/io/tests/data/cmfgen_model.csv b/tardis/io/tests/data/cmfgen_model.csv new file mode 100644 index 00000000000..517f5f7ace7 --- /dev/null +++ b/tardis/io/tests/data/cmfgen_model.csv @@ -0,0 +1,13 @@ +t0: 0.976 day +Index velocity temperature densities electron_densities C O Mg Si Ni56 Ni58 +- km/s K g/cm^3 /cm^3 1 1 1 1 1 1 +0 871.66905 76395.577 4.2537191E-09 2.60E+14 0 0 0 0.6 0.4 0 +1 877.44269 76395.577 4.2537191E-09 2.60E+14 0 0 0 0.1 0.5 0.4 +2 894.99407 76395.631 4.2537191E-09 2.60E+14 0 0 0 0.3 0 0.7 +3 931.1571 76396.057 4.2537191E-09 2.60E+14 0 0.2 0.8 0 0 0 +4 990.30752 76399.042 4.2537271E-09 2.60E+14 0 0.3 0.7 0 0 0 +5 1050.8676 76411.983 4.2539537E-09 2.60E+14 0 0.2 0.8 0 0 0 +6 1115.1545 76459.592 4.2563604E-09 2.60E+14 0 0.2 0.8 0 0 0 +7 1183.3741 76633.367 4.2683079E-09 2.61E+14 0 0.2 0.8 0 0 0 +8 1255.767 77312.12 4.290997E-09 2.64E+14 0.5 0.5 0 0 0 0 +9 1332.5886 79602.375 4.3396835E-09 2.72E+14 0.5 0.5 0 0 0 0 diff --git a/tardis/io/tests/data/csv_composition.csv b/tardis/io/tests/data/csv_composition.csv new file mode 100644 index 00000000000..6ea3cb40efc --- /dev/null +++ b/tardis/io/tests/data/csv_composition.csv @@ -0,0 +1,12 @@ +Index C O Mg Si Ni56 Ni58 +0 1 1 1 1 1 1 +1 0 0 0 0.6 0.4 0 +2 0 0 0 0.1 0.5 0.4 +3 0 0 0 0.3 0 0.7 +4 0 0.2 0.8 0 0 0 +5 0 0.3 0.7 0 0 0 +6 0 0.2 0.8 0 0 0 +7 0 0.2 0.8 0 0 0 +8 0 0.2 0.8 0 0 0 +9 0.5 0.5 0 0 0 0 +10 0.5 0.5 0 0 0 0 diff --git a/tardis/io/tests/data/tardis_configv1_ascii_density_abund.yml b/tardis/io/tests/data/tardis_configv1_ascii_density_abund.yml index f922dbaf0a8..988f284614d 100644 --- a/tardis/io/tests/data/tardis_configv1_ascii_density_abund.yml +++ b/tardis/io/tests/data/tardis_configv1_ascii_density_abund.yml @@ -11,7 +11,7 @@ supernova: atom_data: kurucz_atom_pure_simple.h5 model: - + structure: type: file filename: density.dat @@ -35,37 +35,19 @@ montecarlo: seed: 23111963 no_of_packets : 1.0e+5 iterations: 20 - - black_body_sampling: - start: 1 angstrom - stop: 1000000 angstrom - num: 1.e+6 last_no_of_packets: 1.e+5 no_of_virtual_packets: 5 convergence_strategy: - type: specific + type: damped damping_constant: 1.0 threshold: 0.05 fraction: 0.8 hold_iterations: 3 t_inner: damping_constant: 1.0 - + spectrum: start : 500 angstrom stop : 20000 angstrom num: 10000 - - - - - - - - - - - - - diff --git a/tardis/io/tests/data/tardis_configv1_ascii_density_uniabund.yml b/tardis/io/tests/data/tardis_configv1_ascii_density_uniabund.yml index 2968a22b9c0..3dbf1b1dd2f 100644 --- a/tardis/io/tests/data/tardis_configv1_ascii_density_uniabund.yml +++ b/tardis/io/tests/data/tardis_configv1_ascii_density_uniabund.yml @@ -39,11 +39,6 @@ montecarlo: seed: 23111963 no_of_packets : 1.0e+5 iterations: 20 - - black_body_sampling: - start: 1 angstrom - stop: 1000000 angstrom - num: 1.e+6 last_no_of_packets: 1.e+5 no_of_virtual_packets: 5 diff --git a/tardis/io/tests/data/tardis_configv1_tardis_model_format.yml b/tardis/io/tests/data/tardis_configv1_tardis_model_format.yml index b3b6a54f6c3..9a5723b731b 100755 --- a/tardis/io/tests/data/tardis_configv1_tardis_model_format.yml +++ b/tardis/io/tests/data/tardis_configv1_tardis_model_format.yml @@ -9,13 +9,13 @@ model: structure: type: file - filename: tardis_model_format.csv - filetype: tardis_model + filename: cmfgen_model.csv + filetype: cmfgen_model abundances: type: file - filename: tardis_model_format.csv - filetype: tardis_model + filename: cmfgen_model.csv + filetype: cmfgen_model plasma: ionization: lte diff --git a/tardis/io/tests/data/tardis_configv1_uniform_density.yml b/tardis/io/tests/data/tardis_configv1_uniform_density.yml index 675c3f2784b..18163a57d92 100644 --- a/tardis/io/tests/data/tardis_configv1_uniform_density.yml +++ b/tardis/io/tests/data/tardis_configv1_uniform_density.yml @@ -39,16 +39,11 @@ montecarlo: seed: 23111963 no_of_packets : 1.0e+5 iterations: 10 - - black_body_sampling: - start: 1 angstrom - stop: 1000000 angstrom - num: 1.e+6 last_no_of_packets: 1.e+5 no_of_virtual_packets: 10 convergence_strategy: - type: specific + type: damped damping_constant: 1.0 threshold: 0.05 fraction: 0.8 diff --git a/tardis/io/tests/data/tardis_configv1_verysimple.yml b/tardis/io/tests/data/tardis_configv1_verysimple.yml index 7d1fea5e3ba..996f35434f6 100644 --- a/tardis/io/tests/data/tardis_configv1_verysimple.yml +++ b/tardis/io/tests/data/tardis_configv1_verysimple.yml @@ -39,6 +39,12 @@ montecarlo: iterations: 5 last_no_of_packets: 5.0e+5 no_of_virtual_packets: 5 + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + lock_t_inner_cycles: 1 + t_inner_update_exponent: -0.5 spectrum: start: 500 angstrom diff --git a/tardis/io/tests/data/tardis_model_format.csv b/tardis/io/tests/data/tardis_model_format.csv deleted file mode 100644 index 4e7dffee474..00000000000 --- a/tardis/io/tests/data/tardis_model_format.csv +++ /dev/null @@ -1,13 +0,0 @@ -t0: 0.976 day -velocity temperature densities electron_densities C O Mg Si Ni56 Ni58 -km/s K g/cm^3 /cm^3 1 1 1 1 1 1 -871.66905 76395.577 4.2537191E-09 2.60E+14 0 0 0 0.6 0.4 0 -877.44269 76395.577 4.2537191E-09 2.60E+14 0 0 0 0.1 0.5 0.4 -894.99407 76395.631 4.2537191E-09 2.60E+14 0 0 0 0.3 0 0.7 -931.1571 76396.057 4.2537191E-09 2.60E+14 0 0.2 0.8 0 0 0 -990.30752 76399.042 4.2537271E-09 2.60E+14 0 0.3 0.7 0 0 0 -1050.8676 76411.983 4.2539537E-09 2.60E+14 0 0.2 0.8 0 0 0 -1115.1545 76459.592 4.2563604E-09 2.60E+14 0 0.2 0.8 0 0 0 -1183.3741 76633.367 4.2683079E-09 2.61E+14 0 0.2 0.8 0 0 0 -1255.767 77312.12 4.290997E-09 2.64E+14 0.5 0.5 0 0 0 0 -1332.5886 79602.375 4.3396835E-09 2.72E+14 0.5 0.5 0 0 0 0 diff --git a/tardis/io/tests/test_ascii_readers.py b/tardis/io/tests/test_ascii_readers.py index 3050191f449..0e420291dbe 100644 --- a/tardis/io/tests/test_ascii_readers.py +++ b/tardis/io/tests/test_ascii_readers.py @@ -32,8 +32,8 @@ def test_simple_ascii_density_reader_data(): def test_simple_ascii_abundance_reader(): index, abundances = io.read_simple_ascii_abundances(data_path('artis_abundances.dat')) - npt.assert_almost_equal(abundances.ix[1, 0], 1.542953e-08) - npt.assert_almost_equal(abundances.ix[14, 54], 0.21864420000000001) + npt.assert_almost_equal(abundances.loc[1, 0], 1.542953e-08) + npt.assert_almost_equal(abundances.loc[14, 54], 0.21864420000000001) def test_ascii_reader_invalid_volumes(): diff --git a/tardis/io/tests/test_atomic.py b/tardis/io/tests/test_atomic.py index 3d1b1080211..75f77ded901 100644 --- a/tardis/io/tests/test_atomic.py +++ b/tardis/io/tests/test_atomic.py @@ -2,7 +2,7 @@ from astropy.tests.helper import assert_quantity_allclose from astropy import units as u -from astropy import constants as const +from tardis import constants as const @pytest.fixture diff --git a/tardis/io/tests/test_decay.py b/tardis/io/tests/test_decay.py index 0cd1ef5bef4..09c5abf4601 100644 --- a/tardis/io/tests/test_decay.py +++ b/tardis/io/tests/test_decay.py @@ -12,12 +12,12 @@ def simple_abundance_model(): def test_simple_decay(simple_abundance_model): decayed_abundance = simple_abundance_model.decay(100) - assert_almost_equal(decayed_abundance.ix[26, 56][0], 0.55752) - assert_almost_equal(decayed_abundance.ix[26, 56][1], 0.55752) - assert_almost_equal(decayed_abundance.ix[27, 56][0], 0.4423791) - assert_almost_equal(decayed_abundance.ix[27, 56][1], 0.4423791) - assert_almost_equal(decayed_abundance.ix[28, 56][0], 1.1086e-05) - assert_almost_equal(decayed_abundance.ix[28, 56][1], 1.1086e-05) + assert_almost_equal(decayed_abundance.loc[26, 56][0], 0.55752) + assert_almost_equal(decayed_abundance.loc[26, 56][1], 0.55752) + assert_almost_equal(decayed_abundance.loc[27, 56][0], 0.4423791) + assert_almost_equal(decayed_abundance.loc[27, 56][1], 0.4423791) + assert_almost_equal(decayed_abundance.loc[28, 56][0], 1.1086e-05) + assert_almost_equal(decayed_abundance.loc[28, 56][1], 1.1086e-05) @pytest.fixture def raw_abundance_simple(): diff --git a/tardis/io/tests/test_model_reader.py b/tardis/io/tests/test_model_reader.py index 8bb7f08517e..aa0b646716d 100644 --- a/tardis/io/tests/test_model_reader.py +++ b/tardis/io/tests/test_model_reader.py @@ -7,7 +7,7 @@ import tardis from tardis.io.config_reader import Configuration from tardis.io.model_reader import ( - read_artis_density, read_simple_ascii_abundances, read_simple_isotope_abundances, read_uniform_abundances, read_cmfgen_density) + read_artis_density, read_simple_ascii_abundances, read_csv_composition, read_uniform_abundances, read_cmfgen_density, read_cmfgen_composition) data_path = os.path.join(tardis.__path__[0], 'io', 'tests', 'data') @@ -19,10 +19,13 @@ def artis_density_fname(): def artis_abundances_fname(): return os.path.join(data_path, 'artis_abundances.dat') +@pytest.fixture +def cmfgen_fname(): + return os.path.join(data_path, 'cmfgen_model.csv') @pytest.fixture -def tardis_model_fname(): - return os.path.join(data_path, 'tardis_model_format.csv') +def csv_composition_fname(): + return os.path.join(data_path, 'csv_composition.csv') @pytest.fixture @@ -45,17 +48,31 @@ def test_simple_read_artis_density(artis_density_fname): def test_read_simple_ascii_abundances(artis_abundances_fname): index, abundances = read_simple_ascii_abundances(artis_abundances_fname) assert len(abundances.columns) == 69 - assert np.isclose(abundances[23].ix[2], 2.672351e-08 , atol=1.e-12) + assert np.isclose(abundances[23].loc[2], 2.672351e-08 , atol=1.e-12) + + +def test_read_simple_isotope_abundances(csv_composition_fname): + index, abundances, isotope_abundance = read_csv_composition( + csv_composition_fname) + assert np.isclose(abundances.loc[6, 8], 0.5, atol=1.e-12) + assert np.isclose(abundances.loc[12, 5], 0.8, atol=1.e-12) + assert np.isclose(abundances.loc[14, 1], 0.1, atol=1.e-12) + assert np.isclose(isotope_abundance.loc[(28, 56), 0], 0.4, atol=1.e-12) + assert np.isclose(isotope_abundance.loc[(28, 58), 2], 0.7, atol=1.e-12) + assert abundances.shape == (4, 10) + assert isotope_abundance.shape == (2, 10) -def test_read_simple_isotope_abundances(tardis_model_fname): - index, abundances, isotope_abundance = read_simple_isotope_abundances( - tardis_model_fname) +def test_read_cmfgen_isotope_abundances(cmfgen_fname): + index, abundances, isotope_abundance = read_cmfgen_composition( + cmfgen_fname) assert np.isclose(abundances.loc[6, 8], 0.5, atol=1.e-12) assert np.isclose(abundances.loc[12, 5], 0.8, atol=1.e-12) assert np.isclose(abundances.loc[14, 1], 0.3, atol=1.e-12) assert np.isclose(isotope_abundance.loc[(28, 56), 0], 0.5, atol=1.e-12) assert np.isclose(isotope_abundance.loc[(28, 58), 1], 0.7, atol=1.e-12) + assert abundances.shape == (4, 9) + assert isotope_abundance.shape == (2, 9) def test_read_uniform_abundances(isotope_uniform_abundance): @@ -67,9 +84,9 @@ def test_read_uniform_abundances(isotope_uniform_abundance): assert np.isclose(isotope_abundance.loc[(28, 58), 2], 0.05, atol=1.e-12) -def test_simple_read_cmfgen_density(tardis_model_fname): +def test_simple_read_cmfgen_density(cmfgen_fname): time_of_model, velocity, mean_density, electron_densities, temperature = read_cmfgen_density( - tardis_model_fname) + cmfgen_fname) assert np.isclose(0.976 * u.day, time_of_model, atol=1e-7 * u.day) assert np.isclose(mean_density[4], 4.2539537e-09 * u.g / u.cm**3, atol=1.e-6 diff --git a/tardis/io/util.py b/tardis/io/util.py index 6bdc3d5a388..80df111a3ae 100644 --- a/tardis/io/util.py +++ b/tardis/io/util.py @@ -7,8 +7,9 @@ import collections from collections import OrderedDict import yaml -from astropy import constants, units as u -from tardis.util import element_symbol2atomic_number +from tardis import constants +from astropy import units as u +from tardis.util.base import element_symbol2atomic_number import logging logger = logging.getLogger(__name__) @@ -25,12 +26,17 @@ def quantity_from_str(text): ------- `astropy.units.Quantity` """ - value_str, unit = text.split(None, 1) + value_str, unit_str = text.split(None, 1) value = float(value_str) - if unit.strip() == 'log_lsun': + if unit_str.strip() == 'log_lsun': value = 10 ** (value + np.log10(constants.L_sun.cgs.value)) - unit = 'erg/s' - return u.Quantity(value, unit) + unit_str = 'erg/s' + + unit = u.Unit(unit_str) + if unit == u.L_sun: + return value * constants.L_sun + + return u.Quantity(value, unit_str) class MockRegexPattern(object): @@ -98,13 +104,16 @@ def mapping_constructor(self, node): YAMLLoader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, YAMLLoader.mapping_constructor) + def yaml_load_file(filename, loader=yaml.Loader): with open(filename) as stream: return yaml.load(stream, loader) + def yaml_load_config_file(filename): return yaml_load_file(filename, YAMLLoader) + def parse_abundance_dict_to_dataframe(abundance_dict): atomic_number_dict = dict([(element_symbol2atomic_number(symbol), abundance_dict[symbol]) for symbol in abundance_dict]) @@ -114,7 +123,7 @@ def parse_abundance_dict_to_dataframe(abundance_dict): abundance_norm = abundances.sum() if abs(abundance_norm - 1) > 1e-12: - logger.warn('Given abundances don\'t add up to 1 (value = %g) - normalizing', abundance_norm) + logger.warning('Given abundances don\'t add up to 1 (value = %g) - normalizing', abundance_norm) abundances /= abundance_norm return abundances @@ -216,7 +225,7 @@ def to_hdf_util(path_or_buf, path, elements, complevel=9, complib='blosc'): we_opened = True scalars = {} - for key, value in elements.iteritems(): + for key, value in elements.items(): if value is None: value = 'none' if hasattr(value, 'cgs'): @@ -338,67 +347,5 @@ def to_hdf(self, file_path, path='', name=None, collection=None): super(PlasmaWriterMixin, self).to_hdf(file_path, path, name) -''' -Code for Custom Logger Classes (ColoredFormatter and ColorLogger) and its helper function -(formatter_message) is used from this thread -http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output -''' -def formatter_message(message, use_color=True): - ''' - Helper Function used for Coloring Log Output - ''' - #These are the sequences need to get colored ouput - RESET_SEQ = "\033[0m" - BOLD_SEQ = "\033[1m" - if use_color: - message = message.replace( - "$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ) - else: - message = message.replace("$RESET", "").replace("$BOLD", "") - return message - - -class ColoredFormatter(logging.Formatter): - ''' - Custom logger class for changing levels color - ''' - def __init__(self, msg, use_color=True): - logging.Formatter.__init__(self, msg) - self.use_color = use_color - - def format(self, record): - COLOR_SEQ = "\033[1;%dm" - RESET_SEQ = "\033[0m" - BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) - COLORS = { - 'WARNING': YELLOW, - 'INFO': WHITE, - 'DEBUG': BLUE, - 'CRITICAL': YELLOW, - 'ERROR': RED - } - levelname = record.levelname - if self.use_color and levelname in COLORS: - levelname_color = COLOR_SEQ % ( - 30 + COLORS[levelname]) + levelname + RESET_SEQ - record.levelname = levelname_color - return logging.Formatter.format(self, record) - - -class ColoredLogger(logging.Logger): - ''' - Custom logger class with multiple destinations - ''' - FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s] %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)" - COLOR_FORMAT = formatter_message(FORMAT, True) - - def __init__(self, name): - logging.Logger.__init__(self, name, logging.DEBUG) - - color_formatter = ColoredFormatter(self.COLOR_FORMAT) - - console = logging.StreamHandler() - console.setFormatter(color_formatter) - - self.addHandler(console) - return + + diff --git a/tardis/model/__init__.py b/tardis/model/__init__.py index f7a77b2d695..66f102eba18 100644 --- a/tardis/model/__init__.py +++ b/tardis/model/__init__.py @@ -1 +1 @@ -from base import * +from tardis.model.base import * diff --git a/tardis/model/base.py b/tardis/model/base.py index 43a36058e8f..64574f85e88 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -2,13 +2,14 @@ import logging import numpy as np import pandas as pd -from astropy import constants, units as u +from astropy import units as u +from tardis import constants -from tardis.util import quantity_linspace +from tardis.util.base import quantity_linspace from tardis.io.model_reader import read_density_file, read_abundances_file, read_uniform_abundances from tardis.io.util import HDFWriterMixin from tardis.io.decay import IsotopeAbundances -from density import HomologousDensity +from tardis.model.density import HomologousDensity logger = logging.getLogger(__name__) @@ -25,39 +26,47 @@ class Radial1DModel(HDFWriterMixin): .. note:: To access the entire, "uncut", velocity array, use `raw_velocity` homologous_density : HomologousDensity - density : astropy.units.quantity.Quantity abundance : pd.DataFrame time_explosion : astropy.units.Quantity Time since explosion t_inner : astropy.units.Quantity + luminosity_requested : astropy.units.quantity.Quantity t_radiative : astropy.units.Quantity Radiative temperature for the shells dilution_factor : np.ndarray If None, the dilution_factor will be initialized with the geometric dilution factor. - v_inner : astropy.units.Quantity - v_middle : astropy.units.Quantity - v_outer : astropy.units.Quantity - r_inner : astropy.units.Quantity - r_middle : astropy.units.Quantity - r_outer : astropy.units.Quantity - radius : astropy.units.Quantity - volume : astropy.units.Quantity - no_of_shells : int - The number of shells as formed by `v_boundary_inner` and - `v_boundary_outer` - no_of_raw_shells : int v_boundary_inner : astropy.units.Quantity v_boundary_outer : astropy.units.Quantity raw_velocity : np.ndarray The complete array of the velocities, without being cut by `v_boundary_inner` and `v_boundary_outer` - w : np.ndarray + electron_densities : astropy.units.quantity.Quantity + + Attributes + ---------- + + w : numpy.ndarray Shortcut for `dilution_factor` - t_rad : astropy.units.Quantity + t_rad : astropy.units.quantity.Quantity Shortcut for `t_radiative` + radius : astropy.units.quantity.Quantity + r_inner : astropy.units.quantity.Quantity + r_outer : astropy.units.quantity.Quantity + r_middle : astropy.units.quantity.Quantity + v_inner : astropy.units.quantity.Quantity + v_outer : astropy.units.quantity.Quantity + v_middle : astropy.units.quantity.Quantity + density : astropy.units.quantity.Quantity + volume : astropy.units.quantity.Quantity + no_of_shells : int + The number of shells as formed by `v_boundary_inner` and + `v_boundary_outer` + no_of_raw_shells : int + """ + hdf_properties = ['t_inner', 'w', 't_radiative', 'v_inner', 'v_outer', 'homologous_density'] hdf_name = 'model' @@ -104,7 +113,6 @@ def __init__(self, velocity, homologous_density, abundance, isotope_abundance, @property def w(self): - """Shortcut for `dilution_factor`""" return self.dilution_factor @w.setter @@ -113,7 +121,6 @@ def w(self, value): @property def t_rad(self): - """Shortcut for `t_radiative`""" return self.t_radiative @t_rad.setter @@ -193,7 +200,7 @@ def abundance(self): if not self.raw_isotope_abundance.empty: self._abundance = self.raw_isotope_abundance.decay( self.time_explosion).merge(self.raw_abundance) - abundance = self._abundance.ix[:, start:stop] + abundance = self._abundance.loc[:, start:stop] abundance.columns = range(len(abundance.columns)) return abundance diff --git a/tardis/model/density.py b/tardis/model/density.py index a7676a6d5c6..5031fa696b1 100644 --- a/tardis/model/density.py +++ b/tardis/model/density.py @@ -1,6 +1,6 @@ import numpy as np -from tardis.util import quantity_linspace +from tardis.util.base import quantity_linspace from tardis.io.util import HDFWriterMixin class HomologousDensity(HDFWriterMixin): diff --git a/tardis/model/tests/test_base.py b/tardis/model/tests/test_base.py index 06122c78ff0..faf72e5dae2 100644 --- a/tardis/model/tests/test_base.py +++ b/tardis/model/tests/test_base.py @@ -21,7 +21,7 @@ def setup(self): def test_abundances(self): oxygen_abundance = self.config.model.abundances.O assert_array_almost_equal(oxygen_abundance, - self.model.abundance.ix[8].values) + self.model.abundance.loc[8].values) def test_velocities(self): velocity = self.config.model.structure.velocity @@ -54,7 +54,7 @@ def test_velocities(self): def test_abundances(self): oxygen_abundance = self.config.model.abundances.O assert_array_almost_equal(oxygen_abundance, - self.model.abundance.ix[8].values) + self.model.abundance.loc[8].values) class TestModelFromArtisDensity: @@ -70,7 +70,7 @@ def test_velocities(self): def test_abundances(self): oxygen_abundance = self.config.model.abundances.O assert_array_almost_equal(oxygen_abundance, - self.model.abundance.ix[8].values) + self.model.abundance.loc[8].values) class TestModelFromArtisDensityAbundances: @@ -87,7 +87,7 @@ def test_velocities(self): assert_almost_equal(self.model.v_inner[0].value, 1.259375e+03 * 1e5) def test_abundances(self): - assert_almost_equal(self.model.abundance.ix[14, 54], + assert_almost_equal(self.model.abundance.loc[14, 54], 0.21864420000000001) @@ -105,7 +105,7 @@ def test_velocities(self): assert_almost_equal(self.model.v_inner[0].to(u.km / u.s).value, 9000) def test_abundances(self): - assert_almost_equal(self.model.abundance.ix[14, 31], 2.156751e-01) + assert_almost_equal(self.model.abundance.loc[14, 31], 2.156751e-01) class TestModelFromUniformDensity: @@ -142,20 +142,20 @@ def test_velocities(self): assert_almost_equal(self.model.v_inner[0].to(u.km / u.s).value, 11000) def test_abundances(self): - assert_almost_equal(self.model.abundance.ix[14, 0], 0.1) - assert_almost_equal(self.model.abundance.ix[14, 1], 0.2) - assert_almost_equal(self.model.abundance.ix[14, 2], 0.2) - assert_almost_equal(self.model.abundance.ix[14, 3], 0.2) - assert_almost_equal(self.model.abundance.ix[14, 4], 0.2) - assert_almost_equal(self.model.abundance.ix[14, 5], 0.2) - assert_almost_equal(self.model.abundance.ix[14, 6], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 0], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 1], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 2], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 3], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 4], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 5], 0.0) - assert_almost_equal(self.model.abundance.ix[6, 6], 0.5) + assert_almost_equal(self.model.abundance.loc[14, 0], 0.1) + assert_almost_equal(self.model.abundance.loc[14, 1], 0.2) + assert_almost_equal(self.model.abundance.loc[14, 2], 0.2) + assert_almost_equal(self.model.abundance.loc[14, 3], 0.2) + assert_almost_equal(self.model.abundance.loc[14, 4], 0.2) + assert_almost_equal(self.model.abundance.loc[14, 5], 0.2) + assert_almost_equal(self.model.abundance.loc[14, 6], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 0], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 1], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 2], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 3], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 4], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 5], 0.0) + assert_almost_equal(self.model.abundance.loc[6, 6], 0.5) def test_densities(self): assert_almost_equal(self.model.density[0].to(u.Unit('g/cm3')).value, 9.7656229e-11 / 13.0**3) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index a12bf64bff2..b9a6d0b57dd 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -2,12 +2,13 @@ import logging import warnings -from astropy import units as u, constants as const +from astropy import units as u +from tardis import constants as const from scipy.special import zeta -from spectrum import TARDISSpectrum +from tardis.montecarlo.spectrum import TARDISSpectrum -from tardis.util import quantity_linspace +from tardis.util.base import quantity_linspace from tardis.io.util import HDFWriterMixin from tardis.montecarlo import montecarlo, packet_source from tardis.montecarlo.formal_integral import FormalIntegrator @@ -41,7 +42,9 @@ class MontecarloRunner(HDFWriterMixin): def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, sigma_thomson, enable_reflective_inner_boundary, - inner_boundary_albedo, line_interaction_type): + enable_full_relativity, inner_boundary_albedo, + line_interaction_type, integrator_settings, + v_packet_settings): self.seed = seed self.packet_source = packet_source.BlackBodySimpleSource(seed) @@ -50,7 +53,10 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, self.sigma_thomson = sigma_thomson self.enable_reflective_inner_boundary = enable_reflective_inner_boundary self.inner_boundary_albedo = inner_boundary_albedo + self.enable_full_relativity = enable_full_relativity self.line_interaction_type = line_interaction_type + self.integrator_settings = integrator_settings + self.v_packet_settings = v_packet_settings self._integrator = None self._spectrum_integrated = None @@ -138,7 +144,7 @@ def spectrum_virtual(self): def spectrum_integrated(self): if self._spectrum_integrated is None: self._spectrum_integrated = self.integrator.calculate_spectrum( - self.spectrum_frequency[:-1]) + self.spectrum_frequency[:-1], **self.integrator_settings) return self._spectrum_integrated @property @@ -149,6 +155,13 @@ def integrator(self): "The FormalIntegrator is not yet available." "Please run the montecarlo simulation at least once.", UserWarning) + if self.enable_full_relativity: + raise NotImplementedError( + "The FormalIntegrator is not yet implemented for the full " + "relativity mode. " + "Please run with config option enable_full_relativity: " + "False." + ) return self._integrator def run(self, model, plasma, no_of_packets, @@ -391,10 +404,10 @@ def from_config(cls, config): """ if config.plasma.disable_electron_scattering: logger.warn('Disabling electron scattering - this is not physical') - sigma_thomson = 1e-200 / (u.cm ** 2) + sigma_thomson = 1e-200 * (u.cm ** 2) else: logger.debug("Electron scattering switched on") - sigma_thomson = 6.652486e-25 / (u.cm ** 2) + sigma_thomson = const.sigma_T.cgs spectrum_frequency = quantity_linspace( config.spectrum.stop.to('Hz', u.spectral()), @@ -407,5 +420,7 @@ def from_config(cls, config): sigma_thomson=sigma_thomson, enable_reflective_inner_boundary=config.montecarlo.enable_reflective_inner_boundary, inner_boundary_albedo=config.montecarlo.inner_boundary_albedo, - line_interaction_type=config.plasma.line_interaction_type - ) + enable_full_relativity=config.montecarlo.enable_full_relativity, + line_interaction_type=config.plasma.line_interaction_type, + integrator_settings=config.spectrum.integrated, + v_packet_settings=config.spectrum.virtual) diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index d2972131a12..72231b538f9 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -1,8 +1,10 @@ import warnings import numpy as np import pandas as pd +import scipy.sparse as sp +from scipy.interpolate import interp1d from astropy import units as u -from astropy import constants as const +from tardis import constants as const from tardis.montecarlo.montecarlo import formal_integral from tardis.montecarlo.spectrum import TARDISSpectrum @@ -44,20 +46,23 @@ def raise_or_return(message): 'FormalIntegrator.' ) - if not self.runner.line_interaction_type == 'downbranch': + if not self.runner.line_interaction_type in ['downbranch', 'macroatom']: return raise_or_return( 'The FormalIntegrator currently only works for ' 'line_interaction_type == "downbranch"' + 'and line_interaction_type == "macroatom"' ) return True - def calculate_spectrum(self, frequency, points=None, raises=True): + def calculate_spectrum(self, frequency, points=None, + interpolate_shells=-1, raises=True): # Very crude implementation # The c extension needs bin centers (or something similar) # while TARDISSpectrum needs bin edges self.check(raises) N = points or self.points + self.interpolate_shells = interpolate_shells frequency = frequency.to('Hz', u.spectral()) luminosity = u.Quantity( @@ -101,6 +106,19 @@ def make_source_function(self): plasma = self.plasma runner = self.runner atomic_data = self.plasma.atomic_data + macro_ref = atomic_data.macro_atom_references + macro_data = atomic_data.macro_atom_data + + no_lvls = len(atomic_data.levels) + no_shells = len(model.w) + + if runner.line_interaction_type == 'macroatom': + internal_jump_mask = (macro_data.transition_type >= 0).values + ma_int_data = macro_data[internal_jump_mask] + internal = plasma.transition_probabilities[internal_jump_mask] + + source_level_idx = ma_int_data.source_level_idx.values + destination_level_idx = ma_int_data.destination_level_idx.values Edotlu_norm_factor = (1 / (runner.time_of_simulation * model.volume)) exptau = 1 - np.exp(- plasma.tau_sobolevs) @@ -115,22 +133,81 @@ def make_source_function(self): # the transition l->u Jbluelu = runner.j_blue_estimator * Jbluelu_norm_factor - upper_level_index = atomic_data.lines.set_index(['atomic_number', 'ion_number', 'level_number_upper']).index.copy() + upper_level_index = atomic_data.lines.index.droplevel('level_number_lower') e_dot_lu = pd.DataFrame(Edotlu, index=upper_level_index) e_dot_u = e_dot_lu.groupby(level=[0, 1, 2]).sum() + e_dot_u_src_idx = macro_ref.loc[e_dot_u.index].references_idx.values + + if runner.line_interaction_type == 'macroatom': + C_frame = pd.DataFrame( + columns=np.arange(no_shells), index=macro_ref.index + ) + q_indices = (source_level_idx, destination_level_idx) + for shell in range(no_shells): + Q = sp.coo_matrix( + (internal[shell], q_indices), shape=(no_lvls, no_lvls) + ) + inv_N = sp.identity(no_lvls) - Q + e_dot_u_vec = np.zeros(no_lvls) + e_dot_u_vec[e_dot_u_src_idx] = e_dot_u[shell].values + C_frame[shell] = sp.linalg.spsolve(inv_N.T, e_dot_u_vec) + e_dot_u.index.names = ['atomic_number', 'ion_number', 'source_level_number'] # To make the q_ul e_dot_u product work, could be cleaner transitions = atomic_data.macro_atom_data[atomic_data.macro_atom_data.transition_type == -1].copy() transitions_index = transitions.set_index(['atomic_number', 'ion_number', 'source_level_number']).index.copy() tmp = plasma.transition_probabilities[(atomic_data.macro_atom_data.transition_type == -1).values] q_ul = tmp.set_index(transitions_index) t = model.time_explosion.value - wave = atomic_data.lines.wavelength_cm[transitions.transition_line_id].values.reshape(-1,1) - att_S_ul = ( wave * (q_ul * e_dot_u) * t / (4*np.pi) ) + lines = atomic_data.lines.set_index('line_id') + wave = lines.wavelength_cm.loc[transitions.transition_line_id].values.reshape(-1,1) + if runner.line_interaction_type == 'macroatom': + e_dot_u = C_frame.loc[e_dot_u.index] + att_S_ul = (wave * (q_ul * e_dot_u) * t / (4 * np.pi)) result = pd.DataFrame(att_S_ul.as_matrix(), index=transitions.transition_line_id.values) - att_S_ul = result.ix[atomic_data.lines.index.values].values + att_S_ul = result.loc[lines.index.values].values # Jredlu should already by in the correct order, i.e. by wavelength of # the transition l->u (similar to Jbluelu) Jredlu = Jbluelu * np.exp(-plasma.tau_sobolevs.values) + att_S_ul + if self.interpolate_shells > 0: + att_S_ul, Jredlu, Jbluelu, e_dot_u = self.interpolate_integrator_quantities( + att_S_ul, Jredlu, Jbluelu, e_dot_u) + else: + runner.r_inner_i = runner.r_inner_cgs + runner.r_outer_i = runner.r_outer_cgs + runner.tau_sobolevs_integ = plasma.tau_sobolevs.values + runner.electron_densities_integ = plasma.electron_densities.values + + return att_S_ul, Jredlu, Jbluelu, e_dot_u + + def interpolate_integrator_quantities(self, att_S_ul, Jredlu, + Jbluelu, e_dot_u): + runner = self.runner + plasma = self.plasma + nshells = self.interpolate_shells + r_middle = (runner.r_inner_cgs + runner.r_outer_cgs) / 2. + + r_integ = np.linspace( + runner.r_inner_cgs[0], runner.r_outer_cgs[-1], nshells + ) + runner.r_inner_i = r_integ[:-1] + runner.r_outer_i = r_integ[1:] + + r_middle_integ = (r_integ[:-1] + r_integ[1:]) / 2. + + runner.electron_densities_integ = interp1d( + r_middle, plasma.electron_densities, + fill_value='extrapolate', kind='nearest')(r_middle_integ) + runner.tau_sobolevs_integ = interp1d( + r_middle, plasma.tau_sobolevs, + fill_value='extrapolate')(r_middle_integ) + att_S_ul = interp1d( + r_middle, att_S_ul, fill_value='extrapolate')(r_middle_integ) + Jredlu = interp1d( + r_middle, Jredlu, fill_value='extrapolate')(r_middle_integ) + Jbluelu = interp1d( + r_middle, Jbluelu, fill_value='extrapolate')(r_middle_integ) + e_dot_u = interp1d( + r_middle, e_dot_u, fill_value='extrapolate')(r_middle_integ) return att_S_ul, Jredlu, Jbluelu, e_dot_u diff --git a/tardis/montecarlo/montecarlo.pyx b/tardis/montecarlo/montecarlo.pyx index b95123cefb6..81663e1b657 100644 --- a/tardis/montecarlo/montecarlo.pyx +++ b/tardis/montecarlo/montecarlo.pyx @@ -2,13 +2,15 @@ # cython: boundscheck=False # cython: wraparound=False # cython: cdivision=True +# cython: cdivision=True +# cython: language_level=3 import numpy as np cimport numpy as np from numpy cimport PyArray_DATA -from astropy import constants +from tardis import constants from astropy import units from libc.stdlib cimport free @@ -52,15 +54,20 @@ cdef extern from "src/cmontecarlo.h": int_type_t *last_interaction_out_type int_type_t no_of_packets int_type_t no_of_shells + int_type_t no_of_shells_i double *r_inner double *r_outer + double *r_inner_i + double *r_outer_i double *v_inner double time_explosion double inverse_time_explosion double *electron_densities + double *electron_densities_i double *inverse_electron_densities double *line_list_nu double *line_lists_tau_sobolevs + double *line_lists_tau_sobolevs_i double *continuum_list_nu int_type_t line_lists_tau_sobolevs_nd double *line_lists_j_blues @@ -110,6 +117,9 @@ cdef extern from "src/cmontecarlo.h": double *bf_heating_estimator double *ff_heating_estimator double *stim_recomb_cooling_estimator + int full_relativity + double survival_probability + double tau_russian void montecarlo_main_loop(storage_model_t * storage, int_type_t virtual_packet_flag, int nthreads, unsigned long seed) @@ -245,6 +255,11 @@ cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): storage.inverse_sigma_thomson = 1.0 / storage.sigma_thomson storage.reflective_inner_boundary = runner.enable_reflective_inner_boundary storage.inner_boundary_albedo = runner.inner_boundary_albedo + storage.full_relativity = runner.enable_full_relativity + + storage.tau_russian = runner.v_packet_settings['tau_russian'] + storage.survival_probability = runner.v_packet_settings['survival_probability'] + # Data for continuum implementation cdef np.ndarray[double, ndim=1] t_electrons = plasma.t_electrons storage.t_electrons = t_electrons.data @@ -310,6 +325,20 @@ def formal_integral(self, nu, N): initialize_storage_model(self.model, self.plasma, self.runner, &storage) res = self.make_source_function() + + storage.no_of_shells_i = len(self.runner.r_inner_i) + storage.r_inner_i = PyArray_DATA(self.runner.r_inner_i) + storage.r_outer_i = PyArray_DATA(self.runner.r_outer_i) + + storage.electron_densities_i = PyArray_DATA( + self.runner.electron_densities_integ) + self.runner.line_lists_tau_sobolevs_i = ( + self.runner.tau_sobolevs_integ.flatten(order='F') + ) + storage.line_lists_tau_sobolevs_i = PyArray_DATA( + self.runner.line_lists_tau_sobolevs_i + ) + att_S_ul = res[0].flatten(order='F') Jred_lu = res[1].flatten(order='F') Jblue_lu = res[2].flatten(order='F') diff --git a/tardis/montecarlo/packet_source.py b/tardis/montecarlo/packet_source.py index 1cf75500f57..033e88e91e3 100644 --- a/tardis/montecarlo/packet_source.py +++ b/tardis/montecarlo/packet_source.py @@ -1,6 +1,6 @@ import numpy as np import numexpr as ne -from astropy import constants as const +from tardis import constants as const class BlackBodySimpleSource(object): """ diff --git a/tardis/montecarlo/setup_package.py b/tardis/montecarlo/setup_package.py index df517ebd98f..6f0a2e58bc2 100644 --- a/tardis/montecarlo/setup_package.py +++ b/tardis/montecarlo/setup_package.py @@ -1,12 +1,12 @@ #setting the right include from setuptools import Extension -import numpy as np import os -from astropy_helpers.setup_helpers import get_distutils_option +from astropy_helpers.distutils_helpers import get_distutils_option from Cython.Build import cythonize from glob import glob + if get_distutils_option('with_openmp', ['build', 'install', 'develop']) is not None: compile_args = ['-fopenmp', '-W', '-Wall', '-Wmissing-prototypes', '-std=c99'] link_args = ['-fopenmp'] @@ -16,6 +16,7 @@ link_args = [] define_macros = [] + if get_distutils_option('with_vpacket_logging', ['build', 'install', 'develop']) is not None: define_macros.append(('WITH_VPACKET_LOGGING', None)) diff --git a/tardis/montecarlo/spectrum.py b/tardis/montecarlo/spectrum.py index 1b3c00cdc61..0e8f62aa9d9 100644 --- a/tardis/montecarlo/spectrum.py +++ b/tardis/montecarlo/spectrum.py @@ -115,9 +115,9 @@ def plot(self, ax=None, mode='wavelength'): def to_ascii(self, fname, mode='luminosity_density'): if mode == 'luminosity_density': np.savetxt( - fname, zip( + fname, list(zip( self.wavelength.value, - self.luminosity_density_lambda.value)) + self.luminosity_density_lambda.value))) elif mode == 'flux': np.savetxt( fname, diff --git a/tardis/montecarlo/src/cmontecarlo.c b/tardis/montecarlo/src/cmontecarlo.c index e65cce459c3..06cf29e53bf 100644 --- a/tardis/montecarlo/src/cmontecarlo.c +++ b/tardis/montecarlo/src/cmontecarlo.c @@ -139,12 +139,58 @@ binary_search (const double *x, double x_insert, int64_t imin, return ret_val; } +void +angle_aberration_CMF_to_LF (rpacket_t *packet, const storage_model_t *storage) +{ + if (storage->full_relativity) + { + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + double mu_0 = rpacket_get_mu (packet); + rpacket_set_mu (packet, (mu_0 + beta) / (1.0 + beta * mu_0)); + } +} + +/** Transform the lab frame direction cosine to the CMF + * + * @param packet + * @param storage + * @param mu lab frame direction cosine + * + * @return CMF direction cosine + */ +double +angle_aberration_LF_to_CMF (rpacket_t *packet, const storage_model_t *storage, double mu) +{ + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + return (mu - beta) / (1.0 - beta * mu); +} + double rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) { - return 1.0 - - rpacket_get_mu (packet) * rpacket_get_r (packet) * - storage->inverse_time_explosion * INVERSE_C; + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + if (!storage->full_relativity) + { + return 1.0 - rpacket_get_mu (packet) * beta; + } + else + { + return (1.0 - rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); + } +} + +double +rpacket_inverse_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) +{ + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + if (!storage->full_relativity) + { + return 1.0 / (1.0 - rpacket_get_mu (packet) * beta); + } + else + { + return (1.0 + rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); + } } double @@ -218,7 +264,7 @@ void calculate_chi_bf (rpacket_t * packet, storage_model_t * storage) packet->chi_bf_tmp_partial[i] = bf_helper; } - rpacket_set_chi_boundfree(packet, bf_helper); + rpacket_set_chi_boundfree (packet, bf_helper); } void calculate_chi_ff (rpacket_t * packet, const storage_model_t * storage) @@ -274,14 +320,21 @@ compute_distance2line (rpacket_t * packet, const storage_model_t * storage) double nu = rpacket_get_nu (packet); double nu_line = rpacket_get_nu_line (packet); double distance, nu_diff; - double t_exp = storage->time_explosion; - double inverse_t_exp = storage->inverse_time_explosion; - int64_t cur_zone_id = rpacket_get_current_shell_id (packet); - double doppler_factor = 1.0 - mu * r * inverse_t_exp * INVERSE_C; + double ct = storage->time_explosion * C; + double doppler_factor = rpacket_doppler_factor (packet, storage); double comov_nu = nu * doppler_factor; if ( (nu_diff = comov_nu - nu_line) >= 0) { - distance = (nu_diff / nu) * C * t_exp; + if (!storage->full_relativity) + { + distance = (nu_diff / nu) * ct; + } + else + { + double nu_r = nu_line / nu; + distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - + (1 + r * r * (1 - mu * mu) * (1 + pow (nu_r, -2))))) / (1 + nu_r * nu_r); + } rpacket_set_d_line (packet, distance); return TARDIS_ERROR_OK; } @@ -319,7 +372,7 @@ compute_distance2line (rpacket_t * packet, const storage_model_t * storage) fprintf (stderr, "mu = %f\n", mu); fprintf (stderr, "nu = %f\n", nu); fprintf (stderr, "doppler_factor = %f\n", doppler_factor); - fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", cur_zone_id); + fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; } } @@ -334,7 +387,12 @@ void compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) { double chi_continuum, d_continuum; - double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * storage->sigma_thomson; + double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * + storage->sigma_thomson; + if (storage->full_relativity) + { + chi_electron *= rpacket_doppler_factor (packet, storage); + } if (storage->cont_status == CONTINUUM_ON) { @@ -347,7 +405,6 @@ compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) { packet->compute_chi_bf=true; } - chi_electron *= rpacket_doppler_factor (packet, storage); chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; d_continuum = rpacket_get_tau_event (packet) / chi_continuum; } @@ -448,6 +505,10 @@ move_packet (rpacket_t * packet, storage_model_t * storage, double distance) { double comov_energy = rpacket_get_energy (packet) * doppler_factor; double comov_nu = rpacket_get_nu (packet) * doppler_factor; + if (storage->full_relativity) + { + distance *= doppler_factor; + } #ifdef WITHOPENMP #pragma omp atomic #endif @@ -525,45 +586,58 @@ increment_continuum_estimators (const rpacket_t * packet, storage_model_t * stor } } -void -increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx) +double +get_increment_j_blue_estimator_energy (const rpacket_t * packet, + const storage_model_t * storage, + double d_line) { - if (storage->line_lists_j_blues != NULL) + double energy; + if (storage->full_relativity) + { + // Accurate up to a factor 1 / gamma + energy = rpacket_get_energy (packet); + } + else { double r = rpacket_get_r (packet); - double r_interaction = - sqrt (r * r + d_line * d_line + - 2.0 * r * d_line * rpacket_get_mu (packet)); + double r_interaction = sqrt (r * r + d_line * d_line + + 2.0 * r * d_line * rpacket_get_mu (packet)); double mu_interaction = (rpacket_get_mu (packet) * r + d_line) / r_interaction; double doppler_factor = 1.0 - mu_interaction * r_interaction * storage->inverse_time_explosion * INVERSE_C; - double comov_energy = rpacket_get_energy (packet) * doppler_factor; -#ifdef WITHOPENMP -#pragma omp atomic -#endif + energy = rpacket_get_energy (packet) * doppler_factor; + } + return energy; +} + +void +increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, + double d_line, int64_t j_blue_idx) +{ + if (storage->line_lists_j_blues != NULL) + { + double energy = get_increment_j_blue_estimator_energy (packet, storage, + d_line); + #ifdef WITHOPENMP + #pragma omp atomic + #endif storage->line_lists_j_blues[j_blue_idx] += - comov_energy / rpacket_get_nu (packet); + energy / rpacket_get_nu (packet); } } void -increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, double d_line, int64_t line_idx) +increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, + double d_line, int64_t line_idx) { if (storage->line_lists_Edotlu != NULL) { - double r = rpacket_get_r (packet); - double r_interaction = - sqrt (r * r + d_line * d_line + - 2.0 * r * d_line * rpacket_get_mu (packet)); - double mu_interaction = (rpacket_get_mu (packet) * r + d_line) / r_interaction; - double doppler_factor = 1.0 - mu_interaction * r_interaction * - storage->inverse_time_explosion * INVERSE_C; - double comov_energy = rpacket_get_energy (packet) * doppler_factor; -#ifdef WITHOPENMP -#pragma omp atomic -#endif - storage->line_lists_Edotlu[line_idx] += comov_energy; //rpacket_get_energy (packet); + double energy = get_increment_j_blue_estimator_energy (packet, storage, + d_line); + #ifdef WITHOPENMP + #pragma omp atomic + #endif + storage->line_lists_Edotlu[line_idx] += energy; } } @@ -592,6 +666,12 @@ montecarlo_one_packet (storage_model_t * storage, rpacket_t * packet, -1.0 * sqrt (1.0 - (storage->r_inner[0] / rpacket_get_r(&virt_packet)) * (storage->r_inner[0] / rpacket_get_r(&virt_packet))); + + if (storage->full_relativity) + { + // Need to transform the angular size of the photosphere into the CMF + mu_min = angle_aberration_LF_to_CMF (&virt_packet, storage, mu_min); + } } else { @@ -620,6 +700,7 @@ montecarlo_one_packet (storage_model_t * storage, rpacket_t * packet, // I'm adding an exit() here to inform the compiler about the impossible path exit(1); } + angle_aberration_CMF_to_LF (&virt_packet, storage); double doppler_factor_ratio = rpacket_doppler_factor (packet, storage) / rpacket_doppler_factor (&virt_packet, storage); @@ -720,8 +801,9 @@ move_packet_across_shell_boundary (rpacket_t * packet, double doppler_factor = rpacket_doppler_factor (packet, storage); double comov_nu = rpacket_get_nu (packet) * doppler_factor; double comov_energy = rpacket_get_energy (packet) * doppler_factor; + // TODO: correct rpacket_set_mu (packet, rk_double (mt_state)); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); if (rpacket_get_virtual_packet_flag (packet) > 0) @@ -740,11 +822,14 @@ montecarlo_thomson_scatter (rpacket_t * packet, storage_model_t * storage, double comov_nu = rpacket_get_nu (packet) * doppler_factor; double comov_energy = rpacket_get_energy (packet) * doppler_factor; rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); rpacket_reset_tau_event (packet, mt_state); storage->last_interaction_type[rpacket_get_id (packet)] = 1; + + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { montecarlo_one_packet (storage, packet, 1, mt_state); @@ -777,7 +862,7 @@ montecarlo_bound_free_scatter (rpacket_t * packet, storage_model_t * storage, do move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_type[rpacket_get_id (packet)] = 3; // last interaction was a bf-absorption @@ -800,7 +885,7 @@ montecarlo_free_free_scatter (rpacket_t * packet, storage_model_t * storage, dou move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_type[rpacket_get_id (packet)] = 4; // last interaction was a ff-absorption @@ -864,7 +949,7 @@ montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_in_nu[rpacket_get_id (packet)] = @@ -898,7 +983,7 @@ montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, void line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_line_id, rk_state *mt_state) { - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); storage->last_line_interaction_out_id[rpacket_get_id (packet)] = emission_line_id; if (storage->cont_status == CONTINUUM_ON) { @@ -910,6 +995,9 @@ line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_l rpacket_set_nu_line (packet, storage->line_list_nu[emission_line_id]); rpacket_set_next_line_id (packet, emission_line_id + 1); rpacket_reset_tau_event (packet, mt_state); + + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { bool virtual_close_line = false; @@ -945,7 +1033,7 @@ void continuum_emission (rpacket_t * packet, storage_model_t * storage, rk_state *mt_state, pt2sample_nu sample_nu_continuum, int64_t emission_type_id) { - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double nu_comov = sample_nu_continuum (packet, storage, mt_state); rpacket_set_nu (packet, nu_comov * inverse_doppler_factor); rpacket_reset_tau_event (packet, mt_state); @@ -960,6 +1048,8 @@ continuum_emission (rpacket_t * packet, storage_model_t * storage, rk_state *mt_ rpacket_set_last_line (packet, last_line); rpacket_set_next_line_id (packet, current_line_id); + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { montecarlo_one_packet (storage, packet, 1, mt_state); @@ -1068,11 +1158,22 @@ montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, double distance; get_event_handler (packet, storage, &distance, mt_state) (packet, storage, distance, mt_state); - if (virtual_packet > 0 && rpacket_get_tau_event (packet) > 10.0) + if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) { - rpacket_set_tau_event (packet, 100.0); - rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); - } + double event_random = rk_double (mt_state); + if (event_random > storage->survival_probability) + { + rpacket_set_energy(packet, 0.0); + rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); + } + else + { + rpacket_set_energy(packet, + rpacket_get_energy (packet) / storage->survival_probability * + exp (-1.0 * rpacket_get_tau_event (packet))); + rpacket_set_tau_event (packet, 0.0); + } + } } if (virtual_packet > 0) { diff --git a/tardis/montecarlo/src/cmontecarlo.h b/tardis/montecarlo/src/cmontecarlo.h index 6196440344a..c4521ca28eb 100644 --- a/tardis/montecarlo/src/cmontecarlo.h +++ b/tardis/montecarlo/src/cmontecarlo.h @@ -34,7 +34,15 @@ tardis_error_t binary_search (const double *x, double x_insert, int64_t imin, int64_t imax, int64_t * result); -double rpacket_doppler_factor(const rpacket_t *packet, const storage_model_t *storage); +double rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage); + +double rpacket_inverse_doppler_factor (const rpacket_t *packet, const storage_model_t *storage); + +void +angle_aberration_CMF_to_LF (rpacket_t * packet, const storage_model_t * storage); + +double +angle_aberration_LF_to_CMF (rpacket_t *packet, const storage_model_t *storage, double mu); /** Calculate the distance to shell boundary. * @@ -73,11 +81,17 @@ void move_packet (rpacket_t * packet, storage_model_t * storage, void increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx); + double d_line, + int64_t j_blue_idx); void increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx); + double d_line, + int64_t j_blue_idx); + +double get_increment_j_blue_estimator_energy (const rpacket_t * packet, + const storage_model_t * storage, + double d_line); void increment_continuum_estimators (const rpacket_t * packet, storage_model_t * storage, double distance, diff --git a/tardis/montecarlo/src/integrator.c b/tardis/montecarlo/src/integrator.c index f8f9230dbc3..3d7f5bf6c86 100644 --- a/tardis/montecarlo/src/integrator.c +++ b/tardis/montecarlo/src/integrator.c @@ -86,14 +86,14 @@ populate_z(const storage_model_t *storage, const double p, double *oz, int64_t * { // Abbreviations - double *r = storage->r_outer; - const int64_t N = storage->no_of_shells; + double *r = storage->r_outer_i; + const int64_t N = storage->no_of_shells_i; double inv_t = storage->inverse_time_explosion; double z = 0; int64_t i = 0, offset = N, i_low, i_up; - if (p <= storage->r_inner[0]) + if (p <= storage->r_inner_i[0]) { // Intersect the photosphere for(i = 0; i < N; ++i) @@ -160,12 +160,12 @@ _formal_integral( // global read-only values int64_t size_line = storage->no_of_lines, - size_shell = storage->no_of_shells, + size_shell = storage->no_of_shells_i, size_tau = size_line * size_shell, finished_nus = 0; - double R_ph = storage->r_inner[0]; - double R_max = storage->r_outer[size_shell - 1]; + double R_ph = storage->r_inner_i[0]; + double R_max = storage->r_outer_i[size_shell - 1]; double pp[N]; double *exp_tau = calloc(size_tau, sizeof(double)); #pragma omp parallel firstprivate(L, exp_tau) @@ -191,7 +191,7 @@ _formal_integral( double I_nu[N], //I_nu_b[N], //I_nu_r[N], - z[2 * storage->no_of_shells], + z[2 * storage->no_of_shells_i], p = 0, nu_start, nu_end, @@ -201,16 +201,16 @@ _formal_integral( escat_contrib, escat_op, Jkkp; - int64_t shell_id[2 * storage->no_of_shells]; + int64_t shell_id[2 * storage->no_of_shells_i]; double *pexp_tau, *patt_S_ul, *pline, *pJred_lu, *pJblue_lu; // Prepare exp_tau #pragma omp for for (i = 0; i < size_tau; ++i) { - exp_tau[i] = exp( -storage->line_lists_tau_sobolevs[i]); + exp_tau[i] = exp( -storage->line_lists_tau_sobolevs_i[i]); } - calculate_p_values(storage->r_outer[storage->no_of_shells - 1], N, pp); + calculate_p_values(storage->r_outer_i[storage->no_of_shells_i - 1], N, pp); // Done with the initialization // Loop over wavelengths in spectrum @@ -230,7 +230,7 @@ _formal_integral( // initialize I_nu if (p <= R_ph) - I_nu[p_idx] = intensity_black_body(nu, iT); + I_nu[p_idx] = intensity_black_body(nu * z[0], iT); else I_nu[p_idx] = 0; @@ -263,7 +263,7 @@ _formal_integral( // TODO: replace by number of intersections and remove break for (i = 0; i < size_z - 1; ++i) { - escat_op = storage->electron_densities[shell_id[i]] * storage->sigma_thomson; + escat_op = storage->electron_densities_i[shell_id[i]] * storage->sigma_thomson; nu_end = nu * z[i+1]; // TODO: e-scattering: in principle we also have to check diff --git a/tardis/montecarlo/src/rpacket.c b/tardis/montecarlo/src/rpacket.c index 3e273397d8c..0ca33211af4 100644 --- a/tardis/montecarlo/src/rpacket.c +++ b/tardis/montecarlo/src/rpacket.c @@ -15,23 +15,22 @@ rpacket_init (rpacket_t * packet, storage_model_t * storage, int packet_index, double current_nu = storage->packet_nus[packet_index]; double current_energy = storage->packet_energies[packet_index]; double current_mu = storage->packet_mus[packet_index]; + double comov_current_nu = current_nu; int current_shell_id = 0; double current_r = storage->r_inner[0]; - double comov_current_nu = current_nu; -/* WARNING/TODO: THIS IS NOT FINAL - * For an exact reconstruction of the BlackBody we need to initialize the packets differently - * This initialization was assumed by Lucy (insert exact reference) - * For this 'convention' it is required to comment the next two lines (current_nu and current_energy calculation) - double comov_current_nu = current_nu * (1 - (current_mu * current_r * storage->inverse_time_explosion * INVERSE_C)); - */ - current_nu = - current_nu / (1 - - (current_mu * current_r * storage->inverse_time_explosion * - INVERSE_C)); - current_energy = - current_energy / (1 - - (current_mu * current_r * - storage->inverse_time_explosion * INVERSE_C)); + double beta = current_r * storage->inverse_time_explosion * INVERSE_C; + + if (storage->full_relativity) + { + current_nu = current_nu * (1 + beta * current_mu) / sqrt(1 - beta * beta); + current_energy = current_energy * (1 + beta * current_mu) / sqrt(1 - beta * beta); + current_mu = (current_mu + beta) / (1 + beta * current_mu); + } + else + { + current_nu = current_nu / (1 - beta * current_mu); + current_energy = current_energy / (1 - beta * current_mu); + } if ((ret_val = line_search (storage->line_list_nu, comov_current_nu, storage->no_of_lines, diff --git a/tardis/montecarlo/src/storage.h b/tardis/montecarlo/src/storage.h index 473dd4a574b..b47f7af6b20 100644 --- a/tardis/montecarlo/src/storage.h +++ b/tardis/montecarlo/src/storage.h @@ -27,16 +27,21 @@ typedef struct StorageModel int64_t *last_interaction_out_type; int64_t no_of_packets; int64_t no_of_shells; + int64_t no_of_shells_i; double *r_inner; double *r_outer; + double *r_inner_i; + double *r_outer_i; double *v_inner; double time_explosion; double inverse_time_explosion; double *electron_densities; + double *electron_densities_i; double *inverse_electron_densities; double *line_list_nu; double *continuum_list_nu; double *line_lists_tau_sobolevs; + double *line_lists_tau_sobolevs_i; int64_t line_lists_tau_sobolevs_nd; double *line_lists_j_blues; int64_t line_lists_j_blues_nd; @@ -87,6 +92,9 @@ typedef struct StorageModel double *bf_heating_estimator; double *ff_heating_estimator; double *stim_recomb_cooling_estimator; + int full_relativity; + double survival_probability; + double tau_russian; } storage_model_t; #endif // TARDIS_STORAGE_H diff --git a/tardis/montecarlo/struct.py b/tardis/montecarlo/struct.py index fe9d8c2019d..9e3054aa039 100644 --- a/tardis/montecarlo/struct.py +++ b/tardis/montecarlo/struct.py @@ -61,16 +61,21 @@ class StorageModel(Structure): ('last_interaction_out_type', POINTER(c_int64)), ('no_of_packets', c_int64), ('no_of_shells', c_int64), + ('no_of_shells_i', c_int64), ('r_inner', POINTER(c_double)), ('r_outer', POINTER(c_double)), + ('r_inner_i', POINTER(c_double)), + ('r_outer_i', POINTER(c_double)), ('v_inner', POINTER(c_double)), ('time_explosion', c_double), ('inverse_time_explosion', c_double), ('electron_densities', POINTER(c_double)), + ('electron_densities_i', POINTER(c_double)), ('inverse_electron_densities', POINTER(c_double)), ('line_list_nu', POINTER(c_double)), ('continuum_list_nu', POINTER(c_double)), ('line_lists_tau_sobolevs', POINTER(c_double)), + ('line_lists_tau_sobolevs_i', POINTER(c_double)), ('line_lists_tau_sobolevs_nd', c_int64), ('line_lists_j_blues', POINTER(c_double)), ('line_lists_j_blues_nd', c_int64), @@ -120,7 +125,8 @@ class StorageModel(Structure): ('photo_ion_estimator_statistics', POINTER(c_int64)), ('bf_heating_estimator', POINTER(c_double)), ('ff_heating_estimator', POINTER(c_double)), - ('stim_recomb_cooling_estimator', POINTER(c_double)) + ('stim_recomb_cooling_estimator', POINTER(c_double)), + ('full_relativity', c_int) ] diff --git a/tardis/montecarlo/tests/conftest.py b/tardis/montecarlo/tests/conftest.py index 1b3fc376098..792cb35a8ce 100644 --- a/tardis/montecarlo/tests/conftest.py +++ b/tardis/montecarlo/tests/conftest.py @@ -9,7 +9,7 @@ c_ulong, ) -from tardis import __path__ as path +from tardis.montecarlo import montecarlo from tardis.montecarlo.struct import ( RPacket, StorageModel, RKState, TARDIS_PACKET_STATUS_IN_PROCESS, @@ -21,7 +21,7 @@ # Wrap the shared object containing C methods, which are tested here. @pytest.fixture(scope='session') def clib(): - return CDLL(os.path.join(path[0], 'montecarlo', 'montecarlo.so')) + return CDLL(os.path.join(montecarlo.__file__)) @pytest.fixture(scope="function") diff --git a/tardis/montecarlo/tests/data/continuum_compare_data.hdf b/tardis/montecarlo/tests/data/continuum_compare_data.hdf index b098e7b728b..eedacfd5e5b 100644 Binary files a/tardis/montecarlo/tests/data/continuum_compare_data.hdf and b/tardis/montecarlo/tests/data/continuum_compare_data.hdf differ diff --git a/tardis/montecarlo/tests/test_cmontecarlo.py b/tardis/montecarlo/tests/test_cmontecarlo.py index ca14ff3dfde..ff7519e251a 100644 --- a/tardis/montecarlo/tests/test_cmontecarlo.py +++ b/tardis/montecarlo/tests/test_cmontecarlo.py @@ -43,10 +43,13 @@ - Refer to method `test_rpacket_doppler_factor` below for description. """ + import os import pytest import numpy as np import pandas as pd + + from ctypes import ( CDLL, byref, @@ -84,10 +87,6 @@ BoundFreeTreatment ) -# Wrap the shared object containing C methods, which are tested here. -cmontecarlo_filepath = os.path.join(path[0], 'montecarlo', 'montecarlo.so') -cmontecarlo_methods = CDLL(cmontecarlo_filepath) - @pytest.fixture(scope='module') def continuum_compare_data_fname(): @@ -122,11 +121,12 @@ def ff_emissivity(t_electron): @pytest.fixture(scope='module') def get_rkstate(continuum_compare_data): - data = continuum_compare_data['z2rkstate'] + data = continuum_compare_data['z2rkstate_key'] + pos_data = continuum_compare_data['z2rkstate_pos'] def z2rkstate(z_random): - key = (c_ulong * 624)(*data.loc[z_random, 'key']) - pos = data.loc[z_random, 'pos'] + key = (c_ulong * 624)(*data.loc[z_random].values) + pos = pos_data.loc[z_random] return RKState( key=key, pos=pos, @@ -143,7 +143,7 @@ def model_w_edges(ion_edges, model): for i, edge in enumerate(ion_edges): x_sect_1level = PhotoXsect1level() - for key, value in edge.iteritems(): + for key, value in edge.items(): if key in ['nu', 'x_sect']: value = (c_double * len(value))(*value) setattr(x_sect_1level, key, value) @@ -157,7 +157,9 @@ def model_w_edges(ion_edges, model): model.no_of_edges = no_of_edges estimator_size = model.no_of_shells * no_of_edges - estims = ['photo_ion_estimator', 'stim_recomb_estimator', 'bf_heating_estimator', 'stim_recomb_cooling_estimator'] + estims = ['photo_ion_estimator', 'stim_recomb_estimator', + 'bf_heating_estimator', 'stim_recomb_cooling_estimator' + ] for estimator in estims: setattr(model, estimator, (c_double * estimator_size)(*[0] * estimator_size)) @@ -168,15 +170,19 @@ def model_w_edges(ion_edges, model): @pytest.fixture(scope='module') def ion_edges(): return [ - {'nu': [4.0e14, 4.1e14, 4.2e14, 4.3e14], 'x_sect': [1.0, 0.9, 0.8, 0.7], 'no_of_points': 4}, - {'nu': [3.0e14, 3.1e14, 3.2e14, 3.3e14, 3.4e14], 'x_sect': [1.0, 0.9, 0.8, 0.7, 0.6], 'no_of_points': 5}, - {'nu': [2.8e14, 3.0e14, 3.2e14, 3.4e14], 'x_sect': [2.0, 1.8, 1.6, 1.4], 'no_of_points': 4} + {'nu': [4.0e14, 4.1e14, 4.2e14, 4.3e14], + 'x_sect': [1.0, 0.9, 0.8, 0.7], 'no_of_points': 4}, + {'nu': [3.0e14, 3.1e14, 3.2e14, 3.3e14, 3.4e14], + 'x_sect': [1.0, 0.9, 0.8, 0.7, 0.6], 'no_of_points': 5}, + {'nu': [2.8e14, 3.0e14, 3.2e14, 3.4e14], + 'x_sect': [2.0, 1.8, 1.6, 1.4], 'no_of_points': 4} ] @pytest.fixture(scope='module') def mock_sample_nu(): - SAMPLE_NUFUNC = CFUNCTYPE(c_double, POINTER(RPacket), POINTER(StorageModel), POINTER(RKState)) + SAMPLE_NUFUNC = CFUNCTYPE(c_double, POINTER(RPacket), + POINTER(StorageModel), POINTER(RKState)) def sample_nu_simple(packet, model, mt_state): return packet.contents.nu @@ -194,7 +200,7 @@ def model_3lvlatom(model): 0.0, 0.0, 1.00, 0.00, 0.0, 0.00, 0.0, 1.00, 0.0 # shell_id = 1 ] - nd = len(transition_probabilities)/2 + nd = len(transition_probabilities)//2 model.transition_type = (c_int64 * nd)(*[1, 1, -1, 1, 0, 0, -1, -1, 0]) model.destination_level_id = (c_int64 * nd)(*[1, 2, 0, 2, 0, 1, 1, 0, 0]) model.transition_line_id = (c_int64 * nd)(*[0, 1, 1, 2, 1, 2, 2, 0, 0]) @@ -231,6 +237,8 @@ def d_boundary_setter(d_boundary, model, packet): packet.r = r + + """ Important Tests: ---------------- @@ -402,6 +410,7 @@ def test_compute_distance2continuum(clib, packet_params, expected_params, packet assert_almost_equal(packet.d_cont, expected_params['d_cont']) +@pytest.mark.parametrize('full_relativity', [1, 0]) @pytest.mark.parametrize( ['packet_params', 'expected_params'], [({'nu': 0.4, 'mu': 0.3, 'energy': 0.9, 'r': 7.5e14}, @@ -412,19 +421,53 @@ def test_compute_distance2continuum(clib, packet_params, expected_params, packet {'mu': -.4906548373534084, 'r': 805046582503149.2, 'j': 5001298975563.031, 'nubar': 3001558973156.1387})] ) -def test_move_packet(clib, packet_params, expected_params, packet, model): +def test_move_packet(clib, packet_params, expected_params, + packet, model, full_relativity): packet.nu = packet_params['nu'] packet.mu = packet_params['mu'] packet.energy = packet_params['energy'] packet.r = packet_params['r'] + model.full_relativity = full_relativity + clib.rpacket_doppler_factor.restype = c_double + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) clib.move_packet(byref(packet), byref(model), c_double(1.e13)) assert_almost_equal(packet.mu, expected_params['mu']) assert_almost_equal(packet.r, expected_params['r']) - assert_almost_equal(model.js[packet.current_shell_id], expected_params['j']) - assert_almost_equal(model.nubars[packet.current_shell_id], expected_params['nubar']) + expected_j = expected_params['j'] + expected_nubar = expected_params['nubar'] + if full_relativity: + expected_j *= doppler_factor + expected_nubar *= doppler_factor + + assert_allclose(model.js[packet.current_shell_id], + expected_j, rtol=5e-7) + assert_allclose(model.nubars[packet.current_shell_id], + expected_nubar, rtol=5e-7) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['packet_params', 'j_blue_idx', 'expected'], + [({'nu': 0.30, 'energy': 0.30}, 0, 1.0), + ({'nu': 0.20, 'energy': 1.e5}, 0, 5e5), + ({'nu': 2e15, 'energy': 0.50}, 1, 2.5e-16), + ({'nu': 0.40, 'energy': 1e-7}, 1, 2.5e-7)], +) +def test_increment_j_blue_estimator_full_relativity(clib, packet_params, + j_blue_idx, expected, + packet, model): + packet.nu = packet_params['nu'] + packet.energy = packet_params['energy'] + model.full_relativity = True + + clib.increment_j_blue_estimator(byref(packet), byref(model), + c_double(packet.d_line), + c_int64(j_blue_idx)) + + assert_almost_equal(model.line_lists_j_blues[j_blue_idx], expected) @pytest.mark.parametrize( @@ -579,6 +622,7 @@ def test_macro_atom(clib, model_3lvlatom, packet, z_random, packet_params, get_r assert_equal(obtained_line_id, expected) + """ Simple Tests: ---------------- @@ -599,6 +643,7 @@ def test_increment_Edotlu_estimator(clib, packet_params, line_idx, expected, pac assert_almost_equal(model.line_lists_Edotlu[line_idx], expected) + """ Difficult Tests: ---------------- @@ -608,6 +653,7 @@ def test_increment_Edotlu_estimator(clib, packet_params, line_idx, expected, pac """ + @pytest.mark.skipif(True, reason="Yet to be written.") def test_montecarlo_one_packet(packet, model, mt_state): pass @@ -623,6 +669,7 @@ def test_montecarlo_main_loop(packet, model, mt_state): pass + """ Continuum Tests: ---------------- @@ -631,6 +678,7 @@ def test_montecarlo_main_loop(packet, model, mt_state): """ + @pytest.mark.continuumtest @pytest.mark.parametrize( 't_electron', [2500., 15000.] @@ -642,13 +690,13 @@ def test_sample_nu_free_free(clib, t_electron, packet, model, mt_state_seeded, e nu_bins, expected_emissivity = expected_ff_emissivity(t_electron) nus = [] - for _ in xrange(int(1e5)): + for _ in range(int(1e5)): nu = clib.sample_nu_free_free(byref(packet), byref(model), byref(mt_state_seeded)) nus.append(nu) - obtained_emissivity, _ = np.histogram(nus, normed=True, bins=nu_bins) + obtained_emissivity, _ = np.histogram(nus, density=True, bins=nu_bins) - assert_equal(obtained_emissivity, expected_emissivity) + assert_allclose(obtained_emissivity, expected_emissivity, rtol=1e-10) @pytest.mark.continuumtest @@ -721,9 +769,8 @@ def test_montecarlo_continuum_event_handler(clib, continuum_status, expected, z_ (3.25e14, 1, 0.75, BoundFreeTreatment.LIN_INTERPOLATION), (4.03e14, 0, 0.97, BoundFreeTreatment.LIN_INTERPOLATION), (4.10e14 + 1e-1, 0, 0.90, BoundFreeTreatment.LIN_INTERPOLATION), - pytest.mark.xfail(reason="nu coincides with a supporting point")( - (4.1e14, 0, 0.90, BoundFreeTreatment.LIN_INTERPOLATION)), - + pytest.param(4.1e14, 0, 0.90, BoundFreeTreatment.LIN_INTERPOLATION, + marks=pytest.mark.xfail), (6.50e14, 0, 0.23304506144742834, BoundFreeTreatment.HYDROGENIC), (3.40e14, 2, 1.1170364339507428, BoundFreeTreatment.HYDROGENIC)] ) @@ -835,7 +882,7 @@ def test_increment_continuum_estimators_bf_estimators(clib, packet, model_w_edge no_of_edges = model_w_edges.no_of_edges no_of_shells = model_w_edges.no_of_shells - for estim_name, expected_value in expected.iteritems(): + for estim_name, expected_value in expected.items(): obtained = np.ctypeslib.as_array(getattr(model_w_edges, estim_name + "_estimator"), shape=(no_of_edges * no_of_shells,)) obtained = np.reshape(obtained, newshape=(no_of_shells, no_of_edges), order='F') @@ -920,6 +967,91 @@ def test_montecarlo_bound_free_scatter_continuum_selection(clib, packet, model_3 assert_equal(model_3lvlatom.last_line_interaction_in_id[packet.id], expected) +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['mu', 'r', 'inv_t_exp', 'full_relativity'], + [(0.8, 7.5e14, 1 / 5.2e5, 1), + (-0.7, 7.5e14, 1 / 5.2e5, 1), + (0.3, 7.5e14, 1 / 2.2e5, 1), + (0.0, 7.5e14, 1 / 2.2e5, 1), + (-0.7, 7.5e14, 1 / 5.2e5, 0)] +) +def test_frame_transformations(clib, packet, model, mu, r, + inv_t_exp, full_relativity): + packet.r = r + packet.mu = mu + model.inverse_time_explosion = inv_t_exp + model.full_relativity = full_relativity + clib.rpacket_doppler_factor.restype = c_double + clib.rpacket_inverse_doppler_factor.restype = c_double + + inverse_doppler_factor = clib.rpacket_inverse_doppler_factor(byref(packet), byref(model)) + clib.angle_aberration_CMF_to_LF(byref(packet), byref(model)) + + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) + + assert_almost_equal(doppler_factor * inverse_doppler_factor, 1.0) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['mu', 'r', 'inv_t_exp'], + [(0.8, 7.5e14, 1 / 5.2e5), + (-0.7, 7.5e14, 1 / 5.2e5), + (0.3, 7.5e14, 1 / 2.2e5), + (0.0, 7.5e14, 1 / 2.2e5), + (-0.7, 7.5e14, 1 / 5.2e5)] +) +def test_angle_transformation_invariance(clib, packet, model, + mu, r, inv_t_exp): + packet.r = r + packet.mu = mu + model.inverse_time_explosion = inv_t_exp + model.full_relativity = 1 + clib.angle_aberration_LF_to_CMF.restype = c_double + + clib.angle_aberration_CMF_to_LF(byref(packet), byref(model)) + mu_obtained = clib.angle_aberration_LF_to_CMF( + byref(packet), byref(model), c_double(packet.mu)) + + assert_almost_equal(mu_obtained, mu) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + 'full_relativity', + [1, 0] +) +@pytest.mark.parametrize( + ['mu', 'r', 't_exp', 'nu', 'nu_line'], + [(0.8, 7.5e14, 5.2e5, 1.0e15, 9.4e14), + (0.0, 6.3e14, 2.2e5, 6.0e12, 5.8e12), + (1.0, 9.0e14, 2.2e5, 4.0e8, 3.4e8), + (0.9, 9.0e14, 0.5e5, 1.0e15, 4.5e14), + (-0.7, 7.5e14, 5.2e5, 1.0e15, 9.8e14), + (-1.0, 6.3e14, 2.2e5, 6.0e12, 6.55e12)] +) +def test_compute_distance2line_relativistic(clib, mu, r, t_exp, nu, nu_line, + full_relativity, packet, model): + packet.r = r + packet.mu = mu + packet.nu = nu + packet.nu_line = nu_line + model.inverse_time_explosion = 1 / t_exp + model.time_explosion = t_exp + model.full_relativity = full_relativity + + clib.rpacket_doppler_factor.restype = c_double + + clib.compute_distance2line(byref(packet), byref(model)) + clib.move_packet(byref(packet), byref(model), c_double(packet.d_line)) + + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) + comov_nu = packet.nu * doppler_factor + + assert_allclose(comov_nu, nu_line, rtol=1e-14) + + @pytest.mark.continuumtest @pytest.mark.skipif(True, reason="Yet to be written.") def test_montecarlo_free_free_scatter(packet, model, mt_state): diff --git a/tardis/montecarlo/tests/test_formal_integral.py b/tardis/montecarlo/tests/test_formal_integral.py index dbd8385124d..616de0d2d7d 100644 --- a/tardis/montecarlo/tests/test_formal_integral.py +++ b/tardis/montecarlo/tests/test_formal_integral.py @@ -1,6 +1,6 @@ import pytest import numpy as np -from astropy import constants as c +from tardis import constants as c import ctypes from ctypes import ( @@ -17,7 +17,7 @@ import numpy.testing as ntest -from tardis.util import intensity_black_body +from tardis.util.base import intensity_black_body from tardis.montecarlo.struct import StorageModel @@ -96,10 +96,10 @@ def calculate_z(r, p): params=TESTDATA) def formal_integral_model(request, model): r = request.param['r'] - model.no_of_shells = r.shape[0] - 1 + model.no_of_shells_i = r.shape[0] - 1 model.inverse_time_explosion = c.c.cgs.value - model.r_outer.contents = as_ctypes(r[1:]) - model.r_inner.contents = as_ctypes(r[:-1]) + model.r_outer_i.contents = as_ctypes(r[1:]) + model.r_inner_i.contents = as_ctypes(r[:-1]) return model @@ -121,9 +121,9 @@ def test_populate_z_photosphere(clib, formal_integral_model, p): ndpointer(dtype=np.int64) # oshell_id ] - size = formal_integral_model.no_of_shells - r_inner = as_array(formal_integral_model.r_inner, (size,)) - r_outer = as_array(formal_integral_model.r_outer, (size,)) + size = formal_integral_model.no_of_shells_i + r_inner = as_array(formal_integral_model.r_inner_i, (size,)) + r_outer = as_array(formal_integral_model.r_outer_i, (size,)) p = r_inner[0] * p oz = np.zeros_like(r_inner) @@ -166,9 +166,9 @@ def test_populate_z_shells(clib, formal_integral_model, p): ndpointer(dtype=np.int64) # oshell_id ] - size = formal_integral_model.no_of_shells - r_inner = as_array(formal_integral_model.r_inner, (size,)) - r_outer = as_array(formal_integral_model.r_outer, (size,)) + size = formal_integral_model.no_of_shells_i + r_inner = as_array(formal_integral_model.r_inner_i, (size,)) + r_outer = as_array(formal_integral_model.r_outer_i, (size,)) p = r_inner[0] + (r_outer[-1] - r_inner[0]) * p idx = np.searchsorted(r_outer, p, side='right') diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index 9c53458aace..ebae6b27516 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -242,11 +242,11 @@ def write_to_tex(self, fname_graph): texmode='raw')) for line in fileinput.input(fname_graph, inplace = 1): - print line.replace('\documentclass{article}', - '\documentclass[class=minimal,border=20pt]{standalone}'), + print(line.replace('\documentclass{article}', + '\documentclass[class=minimal,border=20pt]{standalone}'), end='') for line in fileinput.input(fname_graph, inplace = 1): - print line.replace('\enlargethispage{100cm}', ''), + print(line.replace('\enlargethispage{100cm}', ''), end='') def remove_hidden_properties(self, print_graph): for item in self.plasma_properties_dict.values(): diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index 85349934d89..15bb291f3d3 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -76,7 +76,7 @@ def calculate(self, levels, lines): levels_index = pd.Series(np.arange(len(levels), dtype=np.int64), index=levels) lines_index = lines.index.droplevel('level_number_upper') - return np.array(levels_index.ix[lines_index]) + return np.array(levels_index.loc[lines_index]) class LinesUpperLevelIndex(HiddenPlasmaProperty): """ @@ -90,7 +90,7 @@ def calculate(self, levels, lines): levels_index = pd.Series(np.arange(len(levels), dtype=np.int64), index=levels) lines_index = lines.index.droplevel('level_number_lower') - return np.array(levels_index.ix[lines_index]) + return np.array(levels_index.loc[lines_index]) class IonCXData(BaseAtomicDataProperty): outputs = ('ion_cx_data',) @@ -117,7 +117,7 @@ def calculate(self, atomic_data, selected_atoms): if getattr(self, self.outputs[0]) is not None: return getattr(self, self.outputs[0]), else: - return atomic_data.atom_data.ix[selected_atoms].mass + return atomic_data.atom_data.loc[selected_atoms].mass class IonizationData(BaseAtomicDataProperty): """ @@ -165,7 +165,7 @@ def _filter_atomic_property(self, zeta_data, selected_atoms): zeta_data['ion_number'] = zeta_data.index.labels[1] + 1 zeta_data = zeta_data[zeta_data.atomic_number.isin(selected_atoms)] zeta_data_check = counter(zeta_data.atomic_number.values) - keys = np.array(zeta_data_check.keys()) + keys = np.array(list(zeta_data_check.keys())) values = np.array(zeta_data_check.values()) if np.alltrue(keys + 1 == values): return zeta_data @@ -187,9 +187,9 @@ def _filter_atomic_property(self, zeta_data, selected_atoms): updated_index.transpose().astype(int)), columns=zeta_data.columns) for value in range(len(zeta_data)): - updated_dataframe.ix[zeta_data.atomic_number.values[value]].ix[ + updated_dataframe.loc[zeta_data.atomic_number.values[value], zeta_data.ion_number.values[value]] = \ - zeta_data.ix[zeta_data.atomic_number.values[value]].ix[ + zeta_data.loc[zeta_data.atomic_number.values[value], zeta_data.ion_number.values[value]] updated_dataframe = updated_dataframe.astype(float) updated_index = pd.DataFrame(updated_index) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index a4ede360f8f..e38dd2f5b5f 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -13,7 +13,7 @@ import os -class BasePlasmaProperty(object): +class BasePlasmaProperty(object, metaclass=ABCMeta): """ Attributes ---------- @@ -24,7 +24,6 @@ class BasePlasmaProperty(object): latex_name : String Used to label nodes when plotting graphs """ - __metaclass__ = ABCMeta @abstractproperty def outputs(self): @@ -67,14 +66,13 @@ def get_latex_label(self): -class ProcessingPlasmaProperty(BasePlasmaProperty): +class ProcessingPlasmaProperty(BasePlasmaProperty, metaclass=ABCMeta): """ Attributes ---------- inputs : Tuple (strings) List of input parameters required to create the property """ - __metaclass__ = ABCMeta def __init__(self, plasma_parent): super(ProcessingPlasmaProperty, self).__init__() @@ -86,8 +84,8 @@ def _update_inputs(self): This function uses the CPython API to read the variable names from the `calculate`-function and makes the plasma routines easily programmable. """ - calculate_call_signature = self.calculate.func_code.co_varnames[ - :self.calculate.func_code.co_argcount] + calculate_call_signature = self.calculate.__code__.co_varnames[ + :self.calculate.__code__.co_argcount] self.inputs = [ item for item in calculate_call_signature if item != 'self'] @@ -116,24 +114,22 @@ def calculate(self, *args, **kwargs): 'processing plasma modules') -class HiddenPlasmaProperty(ProcessingPlasmaProperty): +class HiddenPlasmaProperty(ProcessingPlasmaProperty, metaclass=ABCMeta): """ Used for plasma properties that should not be displayed in the final graph (e.g. lines_lower_level_index). The code will automatically remove these property names from the graph and instead connect their inputs directly to their outputs. """ - __metaclass__ = ABCMeta def __init__(self, plasma_parent): super(HiddenPlasmaProperty, self).__init__(plasma_parent) -class BaseAtomicDataProperty(ProcessingPlasmaProperty): +class BaseAtomicDataProperty(ProcessingPlasmaProperty, metaclass=ABCMeta): """ Used for atomic data properties. Main feature is the ability to filter atomic data by the elements required for the simulation. """ - __metaclass__ = ABCMeta inputs = ['atomic_data', 'selected_atoms'] diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index b49d0dd8c2d..388526d7a1a 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -1,7 +1,8 @@ import logging import numpy as np -from astropy import constants as const, units as u +from astropy import units as u +from tardis import constants as const from tardis.plasma.properties.base import ProcessingPlasmaProperty @@ -56,7 +57,7 @@ class NumberDensity(ProcessingPlasmaProperty): @staticmethod def calculate(atomic_mass, abundance, density): number_densities = (abundance * density) - return number_densities.div(atomic_mass.ix[abundance.index], axis=0) + return number_densities.div(atomic_mass.loc[abundance.index], axis=0) class SelectedAtoms(ProcessingPlasmaProperty): """ diff --git a/tardis/plasma/properties/ion_population.py b/tardis/plasma/properties/ion_population.py index 2a3f8d12ba1..d4ac016f764 100644 --- a/tardis/plasma/properties/ion_population.py +++ b/tardis/plasma/properties/ion_population.py @@ -95,7 +95,7 @@ def calculate(t_rad, w, zeta_data, t_electrons, delta, @staticmethod def get_zeta_values(zeta_data, ion_index, t_rad): zeta_t_rad = zeta_data.columns.values.astype(np.float64) - zeta_values = zeta_data.ix[ion_index].values.astype(np.float64) + zeta_values = zeta_data.loc[ion_index].values.astype(np.float64) zeta = interpolate.interp1d(zeta_t_rad, zeta_values, bounds_error=False, fill_value=np.nan)(t_rad) zeta = zeta.astype(float) @@ -288,13 +288,13 @@ def __init__(self, plasma_parent, ion_zero_threshold=1e-20, electron_densities=N def update_he_population(self, helium_population, n_electron, number_density): helium_population_updated = helium_population.copy() - he_one_population = helium_population_updated.ix[0].mul(n_electron) - he_three_population = helium_population_updated.ix[2].mul( + he_one_population = helium_population_updated.loc[0].mul(n_electron) + he_three_population = helium_population_updated.loc[2].mul( 1./n_electron) - helium_population_updated.ix[0].update(he_one_population) - helium_population_updated.ix[2].update(he_three_population) + helium_population_updated.loc[0].update(he_one_population) + helium_population_updated.loc[2].update(he_three_population) unnormalised = helium_population_updated.sum() - normalised = helium_population_updated.mul(number_density.ix[2] / + normalised = helium_population_updated.mul(number_density.loc[2] / unnormalised) helium_population_updated.update(normalised) return helium_population_updated @@ -312,12 +312,12 @@ def calculate(self, phi, partition_function, number_density, self.block_ids, self.ion_zero_threshold) helium_population_updated = self.update_he_population( helium_population, n_electron, number_density) - ion_number_density.ix[2].ix[0].update(helium_population_updated.ix[ + ion_number_density.loc[2, 0].update(helium_population_updated.loc[ 0].sum(axis=0)) - ion_number_density.ix[2].ix[1].update(helium_population_updated.ix[ + ion_number_density.loc[2, 1].update(helium_population_updated.loc[ 1].sum(axis=0)) - ion_number_density.ix[2].ix[2].update(helium_population_updated.ix[ - 2].ix[0]) + ion_number_density.loc[2, 2].update(helium_population_updated.loc[ + 2, 0]) ion_numbers = ion_number_density.index.get_level_values(1).values ion_numbers = ion_numbers.reshape((ion_numbers.shape[0], 1)) new_n_electron = (ion_number_density.values * ion_numbers).sum( @@ -343,10 +343,10 @@ def calculate(self, phi, partition_function, number_density, helium_population_updated = self.update_he_population( helium_population, n_electron, number_density) - ion_number_density.ix[2].ix[0].update(helium_population_updated.ix[ + ion_number_density.loc[2, 0].update(helium_population_updated.loc[ 0].sum(axis=0)) - ion_number_density.ix[2].ix[1].update(helium_population_updated.ix[ + ion_number_density.loc[2, 1].update(helium_population_updated.loc[ 1].sum(axis=0)) - ion_number_density.ix[2].ix[2].update(helium_population_updated.ix[ - 2].ix[0]) + ion_number_density.loc[2, 2].update(helium_population_updated.loc[ + 2, 0]) return ion_number_density, n_electron, helium_population_updated diff --git a/tardis/plasma/properties/j_blues.py b/tardis/plasma/properties/j_blues.py index c0cea96e23b..b85fe5b551e 100644 --- a/tardis/plasma/properties/j_blues.py +++ b/tardis/plasma/properties/j_blues.py @@ -1,10 +1,10 @@ import numpy as np import pandas as pd -from astropy import constants as const +from tardis import constants as const -from tardis.plasma.properties.base import ProcessingPlasmaProperty, \ - DataFrameInput -from tardis.util import intensity_black_body +from tardis.plasma.properties.base import (ProcessingPlasmaProperty, + DataFrameInput) +from tardis.util.base import intensity_black_body class JBluesBlackBody(ProcessingPlasmaProperty): @@ -57,7 +57,7 @@ def calculate(self, lines, nu, t_rad, w, j_blues_norm_factor, index=lines.index, columns=np.arange(len(t_rad))) - for i in xrange(len(t_rad)): + for i in range(len(t_rad)): zero_j_blues = j_blues[i] == 0.0 j_blues[i][zero_j_blues] = ( self.w_epsilon * diff --git a/tardis/plasma/properties/level_population.py b/tardis/plasma/properties/level_population.py index 5d15d267dbc..a35a25d3192 100644 --- a/tardis/plasma/properties/level_population.py +++ b/tardis/plasma/properties/level_population.py @@ -30,7 +30,7 @@ def __init__(self, plasma_parent): def _initialize_indices(self, levels, partition_function): indexer = pd.Series(np.arange(partition_function.shape[0]), index=partition_function.index) - self._ion2level_idx = indexer.ix[levels.droplevel(2)].values + self._ion2level_idx = indexer.loc[levels.droplevel(2)].values def _calculate_dilute_lte( self, level_boltzmann_factor, ion_number_density, @@ -77,5 +77,5 @@ def calculate( level_boltzmann_factor, ion_number_density, levels, partition_function) if helium_population_updated is not None: - level_number_density.ix[2].update(helium_population_updated) + level_number_density.loc[2].update(helium_population_updated) return level_number_density diff --git a/tardis/plasma/properties/nlte.py b/tardis/plasma/properties/nlte.py index b87cac8860b..e319e5bd8d6 100644 --- a/tardis/plasma/properties/nlte.py +++ b/tardis/plasma/properties/nlte.py @@ -54,21 +54,21 @@ def calculate(level_boltzmann_factor, """ Updates all of the helium level populations according to the helium NLTE recomb approximation. """ - helium_population = level_boltzmann_factor.ix[2].copy() + helium_population = level_boltzmann_factor.loc[2].copy() # He I excited states he_one_population = HeliumNLTE.calculate_helium_one(g_electron, beta_rad, ionization_data, level_boltzmann_factor, g, w) - helium_population.ix[0].update(he_one_population) + helium_population.loc[0].update(he_one_population) #He I ground state - helium_population.ix[0,0] = 0.0 + helium_population.loc[0, 0] = 0.0 #He II excited states - he_two_population = level_boltzmann_factor.ix[2,1].mul( - (g.ix[2,1].ix[0]**(-1.0))) - helium_population.ix[1].update(he_two_population) + he_two_population = level_boltzmann_factor.loc[2, 1].mul( + (g.loc[2, 1, 0]**(-1.0))) + helium_population.loc[1].update(he_two_population) #He II ground state - helium_population.ix[1,0] = 1.0 + helium_population.loc[1, 0] = 1.0 #He III states - helium_population.ix[2,0] = HeliumNLTE.calculate_helium_three(t_rad, w, + helium_population.loc[2, 0] = HeliumNLTE.calculate_helium_three(t_rad, w, zeta_data, t_electrons, delta, g_electron, beta_rad, ionization_data, g) # unnormalised = helium_population.sum() @@ -83,7 +83,7 @@ def calculate_helium_one(g_electron, beta_rad, ionization_data, """ Calculates the He I level population values, in equilibrium with the He II ground state. """ - return level_boltzmann_factor.ix[2,0] * (1./(2*g.ix[2,1,0])) * \ + return level_boltzmann_factor.loc[2,0] * (1./(2*g.loc[2, 1, 0])) * \ (1/g_electron) * (1/(w**2.)) * np.exp( ionization_data.loc[2,1] * beta_rad) @@ -95,9 +95,9 @@ def calculate_helium_three(t_rad, w, zeta_data, t_electrons, delta, """ zeta = PhiSahaNebular.get_zeta_values(zeta_data, 2, t_rad)[1] he_three_population = 2 * \ - (float(g.ix[2,2,0])/g.ix[2,1,0]) * g_electron * \ - np.exp(-ionization_data.loc[2,2] * beta_rad) \ - * w * (delta.ix[2,2] * zeta + w * (1. - zeta)) * \ + (float(g.loc[2, 2, 0]) / g.loc[2, 1, 0]) * g_electron * \ + np.exp(-ionization_data.loc[2, 2] * beta_rad) \ + * w * (delta.loc[2, 2] * zeta + w * (1. - zeta)) * \ (t_electrons / t_rad) ** 0.5 return he_three_population @@ -126,7 +126,7 @@ def calculate(self, ion_number_density, electron_densities, t_electrons, w, for zone, _ in enumerate(electron_densities): with open('He_NLTE_Files/shellconditions_{}.txt'.format(zone), 'w') as output_file: - output_file.write(ion_number_density.ix[2].sum()[zone]) + output_file.write(ion_number_density.loc[2].sum()[zone]) output_file.write(electron_densities[zone]) output_file.write(t_electrons[zone]) output_file.write(self.heating_rate_data[zone]) @@ -141,7 +141,7 @@ def calculate(self, ion_number_density, electron_densities, t_electrons, w, output_file: for element in range(1,31): try: - number_density = ion_number_density[zone].ix[ + number_density = ion_number_density[zone].loc[ element].sum() except: number_density = 0.0 @@ -153,13 +153,13 @@ def calculate(self, ion_number_density, electron_densities, t_electrons, w, with open('He_NLTE_Files/discradfield_{}.txt'.format(zone), 'w') \ as output_file: j_blues = pd.DataFrame(j_blues, index=lines.index) - helium_j_blues = j_blues[zone].ix[helium_lines.index] + helium_j_blues = j_blues[zone].loc[helium_lines.index] for value in helium_lines.index: - if (helium_lines.level_number_lower.ix[value]<35): + if (helium_lines.level_number_lower.loc[value]<35): output_file.write( - int(helium_lines.level_number_lower.ix[value]+1), - int(helium_lines.level_number_upper.ix[value]+1), - j_blues[zone].ix[value]) + int(helium_lines.level_number_lower.loc[value]+1), + int(helium_lines.level_number_upper.loc[value]+1), + j_blues[zone].loc[value]) #Running numerical simulations for zone, _ in enumerate(electron_densities): os.rename('He_NLTE_Files/abundances{}.txt'.format(zone), @@ -177,15 +177,15 @@ def calculate(self, ion_number_density, electron_densities, t_electrons, w, 'He_NLTE_Files/discradfield{}.txt'.format(zone)) os.rename('debug_occs.dat', 'He_NLTE_Files/occs{}.txt'.format(zone)) #Reading in populations from files - helium_population = level_boltzmann_factor.ix[2].copy() + helium_population = level_boltzmann_factor.loc[2].copy() for zone, _ in enumerate(electron_densities): with open('He_NLTE_Files/discradfield{}.txt'.format(zone), 'r') as \ read_file: for level in range(0, 35): level_population = read_file.readline() level_population = float(level_population) - helium_population[zone].ix[0][level] = level_population - helium_population[zone].ix[1].ix[0] = float( + helium_population[zone].loc[0, level] = level_population + helium_population[zone].loc[1, 0] = float( read_file.readline()) #Performing He LTE level populations (upper two energy levels, #He II excited states, He III) @@ -193,18 +193,18 @@ def calculate(self, ion_number_density, electron_densities, t_electrons, w, beta_rad, partition_function, ionization_data, level_boltzmann_factor, electron_densities, g, w, t_rad, t_electrons) - helium_population.ix[0].ix[35].update(he_one_population.ix[35]) - helium_population.ix[0].ix[36].update(he_one_population.ix[36]) + helium_population.loc[0, 35].update(he_one_population.loc[35]) + helium_population.loc[0, 36].update(he_one_population.loc[36]) - he_two_population = level_boltzmann_factor.ix[2].ix[1].ix[1:].mul( - (g.ix[2,1,0]**(-1)) * helium_population.ix[s1,0]) - helium_population.ix[1].ix[1:].update(he_two_population) + he_two_population = level_boltzmann_factor.loc[2, 1, 1:].mul( + (g.loc[2, 1, 0] ** (-1)) * helium_population.loc[s1, 0]) + helium_population.loc[1, 1:].update(he_two_population) - helium_population.ix[2].ix[0] = HeliumNLTE.calculate_helium_three( + helium_population.loc[2, 0] = HeliumNLTE.calculate_helium_three( t_rad, w, zeta_data, t_electrons, delta, g_electron, beta_rad, partition_function, ionization_data, electron_densities) unnormalised = helium_population.sum() - normalised = helium_population.mul(ion_number_density.ix[2].sum() + normalised = helium_population.mul(ion_number_density.loc[2].sum() / unnormalised) helium_population.update(normalised) return helium_population diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index 8a07949f7cf..cb209a123b2 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -131,7 +131,7 @@ def _main_nlte_calculation( """ for species in nlte_data.nlte_species: logger.info('Calculating rates for species %s', species) - number_of_levels = atomic_data.levels.energy.ix[species].count() + number_of_levels = atomic_data.levels.energy.loc[species].count() lnl = nlte_data.lines_level_number_lower[species] lnu = nlte_data.lines_level_number_upper[species] lines_index, = nlte_data.lines_idx[species] @@ -172,12 +172,12 @@ def _main_nlte_calculation( species, t_electrons ) * previous_electron_densities.values rates_matrix = r_lu_matrix + r_ul_matrix + collision_matrix - for i in xrange(number_of_levels): + for i in range(number_of_levels): rates_matrix[i, i] = -rates_matrix[:, i].sum(axis=0) rates_matrix[0, :, :] = 1.0 x = np.zeros(rates_matrix.shape[0]) x[0] = 1.0 - for i in xrange(len(t_electrons)): + for i in range(len(t_electrons)): try: level_boltzmann_factor = np.linalg.solve( rates_matrix[:, :, i], x) diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index 34c307480d7..c9eb98428aa 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -3,7 +3,8 @@ import numpy as np import pandas as pd import numexpr as ne -from astropy import units as u, constants as const +from astropy import units as u +from tardis import constants as const from tardis.plasma.properties.base import ProcessingPlasmaProperty from tardis.plasma.properties.util import macro_atom @@ -31,14 +32,14 @@ def __init__(self, plasma_parent=None, nlte_species=None): def get_g_lower(self, g, lines_lower_level_index): if self._g_lower is None: - g_lower = np.array(g.ix[lines_lower_level_index], + g_lower = np.array(g.iloc[lines_lower_level_index], dtype=np.float64) self._g_lower = g_lower[np.newaxis].T return self._g_lower def get_g_upper(self, g, lines_upper_level_index): if self._g_upper is None: - g_upper = np.array(g.ix[lines_upper_level_index], + g_upper = np.array(g.iloc[lines_upper_level_index], dtype=np.float64) self._g_upper = g_upper[np.newaxis].T return self._g_upper diff --git a/tardis/plasma/properties/util/macro_atom.pyx b/tardis/plasma/properties/util/macro_atom.pyx index 63e42a028f2..61c7f0e371d 100644 --- a/tardis/plasma/properties/util/macro_atom.pyx +++ b/tardis/plasma/properties/util/macro_atom.pyx @@ -4,6 +4,7 @@ # cython: boundscheck=False # cython: cdivision=True # cython: wraparound=False +# cython: language_level=3 import numpy as np diff --git a/tardis/plasma/setup_package.py b/tardis/plasma/setup_package.py index 95793cee454..27d17b1d1a8 100644 --- a/tardis/plasma/setup_package.py +++ b/tardis/plasma/setup_package.py @@ -1,6 +1,6 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst from setuptools import Extension -from astropy_helpers.setup_helpers import get_distutils_option +from astropy_helpers.distutils_helpers import get_distutils_option import numpy as np def get_package_data(): diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index cc7cb7c0978..7744bf5934e 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -5,7 +5,7 @@ import numpy as np from tardis.io import atomic -from tardis.util import species_string_to_tuple +from tardis.util.base import species_string_to_tuple from tardis.plasma import BasePlasma from tardis.plasma.properties.property_collections import (basic_inputs, basic_properties, lte_excitation_properties, lte_ionization_properties, @@ -79,7 +79,7 @@ def assemble_plasma(config, model, atom_data=None): try: atom_data = atomic.AtomData.from_hdf(atom_data_fname) except TypeError as e: - print (e, 'Error might be from the use of an old-format of the atomic database, \n' + print(e, 'Error might be from the use of an old-format of the atomic database, \n' 'please see https://github.com/tardis-sn/tardis-refdata/tree/master/atom_data' ',for the most recent version.') raise @@ -135,11 +135,12 @@ def assemble_plasma(config, model, atom_data=None): if config.plasma.line_interaction_type in ('downbranch', 'macroatom'): plasma_modules += macro_atom_properties + if 'delta_treatment' in config.plasma: + property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=config.plasma.delta_treatment) + if config.plasma.helium_treatment == 'recomb-nlte': plasma_modules += helium_nlte_properties - if 'delta_treatment' in config.plasma: - property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment) elif config.plasma.helium_treatment == 'numerical-nlte': plasma_modules += helium_numerical_nlte_properties # TODO: See issue #633 diff --git a/tardis/plasma/tests/data/plasma_ref.dot b/tardis/plasma/tests/data/plasma_ref.dot deleted file mode 100644 index df19e35d7b9..00000000000 --- a/tardis/plasma/tests/data/plasma_ref.dot +++ /dev/null @@ -1,81 +0,0 @@ -strict digraph { - node [label="\N"]; - Density [label=Density]; - NumberDensity [label=NumberDensity]; - Density -> NumberDensity [label="$\\rho$"]; - ElectronTemperature [label="ElectronTemperature\n$\\textrm{const.}\\times T_{\\textrm{rad}}$"]; - BetaSobolev [label=BetaSobolev]; - TransitionProbabilities [label=TransitionProbabilities]; - BetaSobolev -> TransitionProbabilities [label="$\\beta_{\\textrm{sobolev}}$"]; - JBluesDiluteBlackBody [label=JBluesDiluteBlackBody]; - JBluesDiluteBlackBody -> TransitionProbabilities [label="$J$"]; - TauSobolev [label="TauSobolev\n$\\dfrac{\\pi e^{2}}{m_{e} c}f_{lu}\\lambda t_{exp} n_{lower} \\Big(1-\\dfrac{g_{lower}n_{upper}}{g_{upper}n_{\ -lower}}\\Big)$"]; - JBluesDiluteBlackBody -> TauSobolev [label="$J$"]; - BetaRadiation [label="BetaRadiation\n$\\dfrac{1}{k_{B} T_{\\textrm{rad}}}$"]; - PhiSahaLTE [label="PhiSahaLTE\n$\\dfrac{2Z_{i,j+1}}{Z_{i,j}}\\Big( \\dfrac{2\\pi m_{e}/\\beta_{\\textrm{rad}}}{h^2} \\Big)^{\ -3/2}e^{\\dfrac{-\\chi_{i,j}}{kT_{ \\textrm{rad}}}}$"]; - BetaRadiation -> PhiSahaLTE [label="$\\beta_{\\textrm{rad}}$"]; - LevelBoltzmannFactorLTE [label="LevelBoltzmannFactorLTE\n$g_{i,j,k}e^{\\dfrac{-\\epsilon_{i,j,k}}{k_{ \\textrm{B}}T_{\\textrm{rad}}}}$"]; - BetaRadiation -> LevelBoltzmannFactorLTE [label="$\\beta_{\\textrm{rad}}$"]; - GElectron [label="GElectron\n$\\Big(\\dfrac{2\\pi m_{e}/ \\beta_{\\textrm{rad}}}{h^2}\\Big)^{3/2}$"]; - BetaRadiation -> GElectron [label="$\\beta_{\\textrm{rad}}$"]; - PartitionFunction [label="PartitionFunction\n$\\sum_{k}bf_{i,j,k}$"]; - PartitionFunction -> PhiSahaLTE [label="$Z_{i,j}$"]; - LevelNumberDensity [label="LevelNumberDensity\n$N_{i,j}\\dfrac{bf_{i,j,k}}{Z_{i,j}}$"]; - PartitionFunction -> LevelNumberDensity [label="$Z_{i,j}$"]; - IonNumberDensity [label=IonNumberDensity]; - PartitionFunction -> IonNumberDensity [label="$Z_{i,j}$"]; - TauSobolev -> BetaSobolev [label="$\\tau_{\\textrm{sobolev}}$"]; - TauSobolev -> TransitionProbabilities [label="$\\tau_{\\textrm{sobolev}}$"]; - PhiSahaLTE -> IonNumberDensity [label="$\\Phi$"]; - StimulatedEmissionFactor [label="StimulatedEmissionFactor\n$1-\\dfrac{g_{lower}n_{upper}}{g_{upper}n_{lower}}$"]; - StimulatedEmissionFactor -> TransitionProbabilities [label="stimulated-emission-factor"]; - StimulatedEmissionFactor -> TauSobolev [label="stimulated-emission-factor"]; - Levels [label=Levels]; - Levels -> StimulatedEmissionFactor [label="$\\textrm{metastability}$"]; - Levels -> LevelBoltzmannFactorLTE [label="$\\textrm{levels}$"]; - Levels -> LevelNumberDensity [label="$\\textrm{levels}$"]; - DilutionFactor [label=DilutionFactor]; - DilutionFactor -> JBluesDiluteBlackBody [label="$W$"]; - Abundance [label=Abundance]; - Abundance -> NumberDensity [label=abundance]; - SelectedAtoms [label=SelectedAtoms]; - Abundance -> SelectedAtoms [label=abundance]; - NumberDensity -> IonNumberDensity [label="$N_{i}$"]; - Lines [label=Lines]; - Lines -> JBluesDiluteBlackBody [label=nu]; - Lines -> TauSobolev [label="wavelength-cm"]; - Lines -> StimulatedEmissionFactor [label=lines]; - IonizationData [label=IonizationData]; - IonizationData -> PhiSahaLTE [label="ionization-data"]; - AtomicMass [label=AtomicMass]; - AtomicMass -> NumberDensity [label="atomic-mass"]; - TRadiative [label=TRadiative]; - TRadiative -> ElectronTemperature [label="$T_{\\textrm{rad}}$"]; - TRadiative -> JBluesDiluteBlackBody [label="$T_{\\textrm{rad}}$"]; - TRadiative -> BetaRadiation [label="$T_{\\textrm{rad}}$"]; - HeliumTreatment [label=HeliumTreatment]; - LinkTRadTElectron [label=LinkTRadTElectron]; - LinkTRadTElectron -> ElectronTemperature [label="$T_{\\textrm{electron}}/T_{\\textrm{rad}}$"]; - AtomicData [label=AtomicData]; - AtomicData -> TransitionProbabilities [label="atomic-data"]; - AtomicData -> Levels [label="atomic-data"]; - AtomicData -> Lines [label="atomic-data"]; - AtomicData -> IonizationData [label="atomic-data"]; - AtomicData -> AtomicMass [label="atomic-data"]; - LevelBoltzmannFactorNoNLTE [label=LevelBoltzmannFactorNoNLTE]; - LevelBoltzmannFactorLTE -> LevelBoltzmannFactorNoNLTE [label="$bf_{i,j,k}$"]; - LevelBoltzmannFactorNoNLTE -> PartitionFunction [label="level-boltzmann-factor"]; - LevelBoltzmannFactorNoNLTE -> LevelNumberDensity [label="level-boltzmann-factor"]; - LevelNumberDensity -> TauSobolev [label="$N_{i,j,k}$"]; - LevelNumberDensity -> StimulatedEmissionFactor [label="$N_{i,j,k}$"]; - TimeExplosion [label=TimeExplosion]; - TimeExplosion -> TauSobolev [label="$t_{\\textrm{exp}}$"]; - GElectron -> PhiSahaLTE [label="$g_{\\textrm{electron}}$"]; - SelectedAtoms -> Levels [label="selected-atoms"]; - SelectedAtoms -> Lines [label="selected-atoms"]; - SelectedAtoms -> IonizationData [label="selected-atoms"]; - SelectedAtoms -> AtomicMass [label="selected-atoms"]; - IonNumberDensity -> LevelNumberDensity [label="$N_{i,j}$"]; -} diff --git a/tardis/plasma/tests/data/plasma_ref.tex b/tardis/plasma/tests/data/plasma_ref.tex deleted file mode 100644 index 2cfe038f6db..00000000000 --- a/tardis/plasma/tests/data/plasma_ref.tex +++ /dev/null @@ -1,361 +0,0 @@ -\documentclass[class=minimal,border=20pt]{standalone} -\usepackage[x11names, rgb]{xcolor} -\usepackage[utf8]{inputenc} -\usepackage{tikz} -\usetikzlibrary{snakes,arrows,shapes} -\usepackage{amsmath} -% -% - -% - -% - -\begin{document} -\pagestyle{empty} -% -% -% - - -% Start of code -% \begin{tikzpicture}[anchor=mid,>=latex',line join=bevel,] -\begin{tikzpicture}[>=latex',line join=bevel,] - \pgfsetlinewidth{1bp} -%% -\pgfsetcolor{black} - % Edge: PhiSahaLTE -> IonNumberDensity - \draw [->] (2001.4bp,575.44bp) .. controls (1934.8bp,558.52bp) and (1849.9bp,536.91bp) .. (1783.8bp,520.1bp); - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1947.2bp,549.72bp) node {$\Phi$}; - % Edge: NumberDensity -> IonNumberDensity - \draw [->] (2633.0bp,934.24bp) .. controls (2718.9bp,927.6bp) and (2857.2bp,901.69bp) .. (2857.2bp,803.7bp) .. controls (2857.2bp,803.7bp) and (2857.2bp,803.7bp) .. (2857.2bp,601.09bp) .. controls (2857.2bp,586.82bp) and (2850.7bp,582.05bp) .. (2838.2bp,575.22bp) .. controls (2750.0bp,527.13bp) and (2069.5bp,512.24bp) .. (1812.4bp,508.24bp); - \draw (2881.2bp,706.83bp) node {$N_{i}$}; - % Edge: LevelBoltzmannFactorLTE -> LevelBoltzmannFactorNoNLTE - \draw [->] (1352.3bp,910.43bp) .. controls (1341.6bp,887.21bp) and (1326.0bp,853.31bp) .. (1311.0bp,820.68bp); - \draw (1376.7bp,865.57bp) node {$bf_{i,j,k}$}; - % Edge: Levels -> LevelNumberDensity - \draw [->] (859.35bp,1024.2bp) .. controls (866.17bp,1004.1bp) and (876.19bp,969.2bp) .. (876.19bp,938.31bp) .. controls (876.19bp,938.31bp) and (876.19bp,938.31bp) .. (876.19bp,758.2bp) .. controls (876.19bp,722.87bp) and (868.1bp,707.52bp) .. (890.19bp,679.96bp) .. controls (903.15bp,663.79bp) and (916.38bp,674.07bp) .. (933.19bp,661.96bp) .. controls (1032.3bp,590.6bp) and (1011.4bp,521.21bp) .. (1114.2bp,455.22bp) .. controls (1126.7bp,447.19bp) and (1140.7bp,440.58bp) .. (1164.5bp,431.75bp); - \draw (940.69bp,706.83bp) node {$\textrm{levels}$}; - % Edge: BetaRadiation -> LevelBoltzmannFactorLTE - \draw [->] (1364.2bp,1015.1bp) .. controls (1364.2bp,1002.8bp) and (1364.2bp,987.95bp) .. (1364.2bp,964.23bp); - \draw (1429.7bp,989.68bp) node {$\beta_{\textrm{rad}}$}; - % Edge: PartitionFunction -> IonNumberDensity - \draw [->] (1296.5bp,679.88bp) .. controls (1290.6bp,650.58bp) and (1286.5bp,603.34bp) .. (1312.2bp,575.22bp) .. controls (1355.6bp,527.69bp) and (1534.1bp,513.36bp) .. (1654.4bp,508.68bp); - \draw (1339.2bp,602.09bp) node {$Z_{i,j}$}; - % Edge: TRadiative -> BetaRadiation - \draw [->] (517.35bp,1126.6bp) .. controls (562.87bp,1114.9bp) and (640.42bp,1096.5bp) .. (708.19bp,1086.9bp) .. controls (799.1bp,1074.1bp) and (1034.8bp,1060.0bp) .. (1207.6bp,1050.9bp); - \draw (764.69bp,1094.4bp) node {$T_{\textrm{rad}}$}; - % Edge: StimulatedEmissionFactor -> TauSobolev - \draw [->] (1009.4bp,279.13bp) .. controls (1028.9bp,268.26bp) and (1052.4bp,255.8bp) .. (1074.2bp,245.74bp) .. controls (1084.9bp,240.81bp) and (1096.3bp,235.94bp) .. (1117.0bp,227.55bp); - \draw (1147.7bp,253.24bp) node {stimulated-emission-factor}; - % Edge: TauSobolev -> TransitionProbabilities - \draw [->] (1085.1bp,174.42bp) .. controls (1031.0bp,160.36bp) and (963.61bp,141.95bp) .. (904.19bp,123.0bp) .. controls (820.69bp,96.371bp) and (725.34bp,60.083bp) .. (659.73bp,34.377bp); - \draw (979.19bp,105.0bp) node {$\tau_{\textrm{sobolev}}$}; - % Edge: AtomicData -> AtomicMass - \draw [->] (879.91bp,1135.6bp) .. controls (1059.6bp,1131.1bp) and (1630.3bp,1115.6bp) .. (1667.2bp,1101.9bp) .. controls (1677.3bp,1098.2bp) and (1677.1bp,1092.6bp) .. (1686.2bp,1086.9bp) .. controls (1701.5bp,1077.4bp) and (1719.1bp,1068.4bp) .. (1744.3bp,1056.8bp); - \draw (1718.7bp,1094.4bp) node {atomic-data}; - % Edge: BetaRadiation -> GElectron - \draw [->] (1480.8bp,1022.9bp) .. controls (1500.3bp,1020.1bp) and (1520.3bp,1017.4bp) .. (1539.2bp,1015.2bp) .. controls (1627.8bp,1004.7bp) and (1652.4bp,1017.9bp) .. (1739.2bp,997.18bp) .. controls (1836.6bp,973.97bp) and (1943.4bp,927.38bp) .. (2017.3bp,892.15bp); - \draw (1858.7bp,989.68bp) node {$\beta_{\textrm{rad}}$}; - % Edge: LevelBoltzmannFactorNoNLTE -> LevelNumberDensity - \draw [->] (1204.3bp,791.57bp) .. controls (1154.3bp,780.38bp) and (1104.2bp,756.92bp) .. (1104.2bp,707.83bp) .. controls (1104.2bp,707.83bp) and (1104.2bp,707.83bp) .. (1104.2bp,505.22bp) .. controls (1104.2bp,472.13bp) and (1130.2bp,450.42bp) .. (1170.3bp,432.36bp); - \draw (1166.7bp,602.09bp) node {level-boltzmann-factor}; - % Edge: PartitionFunction -> PhiSahaLTE - \draw [->] (1382.1bp,691.17bp) .. controls (1453.6bp,678.23bp) and (1562.2bp,659.52bp) .. (1657.2bp,646.96bp) .. controls (1709.7bp,640.01bp) and (1765.9bp,633.65bp) .. (1830.1bp,627.02bp); - \draw (1684.2bp,654.46bp) node {$Z_{i,j}$}; - % Edge: AtomicMass -> NumberDensity - \draw [->] (1833.4bp,1039.5bp) .. controls (1969.0bp,1035.5bp) and (2310.9bp,1023.0bp) .. (2422.2bp,997.18bp) .. controls (2442.2bp,992.55bp) and (2489.0bp,972.73bp) .. (2533.4bp,953.14bp); - \draw (2499.2bp,989.68bp) node {atomic-mass}; - % Edge: BetaSobolev -> TransitionProbabilities - \draw [->] (1075.8bp,93.538bp) .. controls (1029.3bp,82.6bp) and (953.37bp,65.465bp) .. (887.19bp,54.0bp) .. controls (827.92bp,43.732bp) and (760.76bp,34.916bp) .. (698.56bp,27.493bp); - \draw (1042.2bp,61.5bp) node {$\beta_{\textrm{sobolev}}$}; - % Edge: PartitionFunction -> LevelNumberDensity - \draw [->] (1294.0bp,680.08bp) .. controls (1292.2bp,674.18bp) and (1290.5bp,667.9bp) .. (1289.2bp,661.96bp) .. controls (1273.1bp,586.57bp) and (1265.9bp,496.33bp) .. (1262.4bp,437.23bp); - \draw (1300.2bp,549.72bp) node {$Z_{i,j}$}; - % Edge: AtomicData -> Lines - \draw [->] (775.65bp,1131.3bp) .. controls (736.25bp,1125.9bp) and (685.86bp,1116.4bp) .. (671.19bp,1101.9bp) .. controls (652.07bp,1083.0bp) and (657.19bp,1069.9bp) .. (657.19bp,1043.1bp) .. controls (657.19bp,1043.1bp) and (657.19bp,1043.1bp) .. (657.19bp,653.46bp) .. controls (657.19bp,517.0bp) and (846.37bp,445.73bp) .. (937.86bp,418.46bp); - \draw (689.69bp,759.2bp) node {atomic-data}; - % Edge: AtomicData -> TransitionProbabilities - \draw [->] (772.88bp,1135.1bp) .. controls (711.55bp,1129.7bp) and (619.19bp,1110.5bp) .. (619.19bp,1043.1bp) .. controls (619.19bp,1043.1bp) and (619.19bp,1043.1bp) .. (619.19bp,758.2bp) .. controls (619.19bp,566.38bp) and (455.19bp,550.8bp) .. (455.19bp,358.98bp) .. controls (455.19bp,358.98bp) and (455.19bp,358.98bp) .. (455.19bp,104.0bp) .. controls (455.19bp,63.084bp) and (495.64bp,41.851bp) .. (546.45bp,28.382bp); - \draw (568.69bp,549.72bp) node {atomic-data}; - % Edge: StimulatedEmissionFactor -> TransitionProbabilities - \draw [->] (778.27bp,289.44bp) .. controls (710.63bp,282.09bp) and (648.03bp,272.33bp) .. (637.19bp,260.74bp) .. controls (608.78bp,230.37bp) and (614.72bp,102.67bp) .. (619.66bp,36.131bp); - \draw (689.69bp,148.5bp) node {stimulated-emission-factor}; - % Edge: AtomicData -> Levels - \draw [->] (824.38bp,1119.5bp) .. controls (823.9bp,1109.7bp) and (824.19bp,1097.4bp) .. (827.19bp,1086.9bp) .. controls (829.04bp,1080.4bp) and (832.08bp,1073.9bp) .. (840.89bp,1059.2bp); - \draw (859.69bp,1094.4bp) node {atomic-data}; - % Edge: Density -> NumberDensity - \draw [->] (2532.9bp,1024.0bp) .. controls (2535.8bp,1012.1bp) and (2540.1bp,995.98bp) .. (2545.2bp,982.18bp) .. controls (2547.3bp,976.4bp) and (2550.0bp,970.35bp) .. (2557.1bp,955.5bp); - \draw (2563.2bp,989.68bp) node {$\rho$}; - % Edge: DilutionFactor -> JBluesDiluteBlackBody - \draw [->] (582.51bp,391.92bp) .. controls (581.89bp,376.03bp) and (580.97bp,352.3bp) .. (579.86bp,323.78bp); - \draw (596.19bp,357.98bp) node {$W$}; - % Edge: JBluesDiluteBlackBody -> TauSobolev - \draw [->] (598.64bp,287.94bp) .. controls (616.12bp,274.01bp) and (643.13bp,254.99bp) .. (670.19bp,245.74bp) .. controls (699.91bp,235.58bp) and (751.81bp,227.7bp) .. (821.65bp,220.61bp); - \draw (679.69bp,253.24bp) node {$J$}; - % Edge: Abundance -> SelectedAtoms - \draw [->] (2276.8bp,1218.5bp) .. controls (2149.8bp,1203.9bp) and (1801.4bp,1163.9bp) .. (1642.5bp,1145.6bp); - \draw (2027.2bp,1181.4bp) node {abundance}; - % Edge: TRadiative -> ElectronTemperature - \draw [->] (435.29bp,1128.6bp) .. controls (410.13bp,1122.8bp) and (378.09bp,1114.0bp) .. (351.19bp,1101.9bp) .. controls (340.06bp,1096.9bp) and (339.28bp,1092.0bp) .. (328.19bp,1086.9bp) .. controls (312.84bp,1079.9bp) and (296.08bp,1073.6bp) .. (269.78bp,1065.2bp); - \draw (407.69bp,1094.4bp) node {$T_{\textrm{rad}}$}; - % Edge: LinkTRadTElectron -> ElectronTemperature - \draw [->] (81.295bp,1119.9bp) .. controls (79.907bp,1109.5bp) and (79.978bp,1096.6bp) .. (86.191bp,1086.9bp) .. controls (89.509bp,1081.8bp) and (93.611bp,1077.2bp) .. (106.42bp,1066.9bp); - \draw (207.19bp,1094.4bp) node {$T_{\textrm{electron}}/T_{\textrm{rad}}$}; - % Edge: SelectedAtoms -> AtomicMass - \draw [->] (1643.8bp,1130.9bp) .. controls (1686.2bp,1125.5bp) and (1738.6bp,1116.2bp) .. (1755.2bp,1101.9bp) .. controls (1764.5bp,1093.9bp) and (1769.9bp,1081.6bp) .. (1775.3bp,1060.3bp); - \draw (1808.2bp,1094.4bp) node {selected-atoms}; - % Edge: GElectron -> PhiSahaLTE - \draw [->] (2071.6bp,838.54bp) .. controls (2077.7bp,791.56bp) and (2090.6bp,692.49bp) .. (2098.8bp,629.01bp); - \draw (2151.2bp,759.2bp) node {$g_{\textrm{electron}}$}; - % Edge: IonNumberDensity -> LevelNumberDensity - \draw [->] (1675.3bp,493.71bp) .. controls (1599.8bp,478.7bp) and (1466.2bp,452.12bp) .. (1361.2bp,431.25bp); - \draw (1581.7bp,462.72bp) node {$N_{i,j}$}; - % Edge: TauSobolev -> BetaSobolev - \draw [->] (1168.4bp,173.97bp) .. controls (1158.7bp,160.53bp) and (1146.8bp,144.18bp) .. (1131.3bp,122.65bp); - \draw (1231.2bp,148.5bp) node {$\tau_{\textrm{sobolev}}$}; - % Edge: IonizationData -> PhiSahaLTE - \draw [->] (1653.2bp,1028.5bp) .. controls (1670.9bp,1023.6bp) and (1691.9bp,1018.4bp) .. (1711.2bp,1015.2bp) .. controls (1788.3bp,1002.1bp) and (2411.2bp,1016.6bp) .. (2411.2bp,938.31bp) .. controls (2411.2bp,938.31bp) and (2411.2bp,938.31bp) .. (2411.2bp,705.83bp) .. controls (2411.2bp,671.95bp) and (2343.5bp,647.27bp) .. (2261.2bp,628.31bp); - \draw (2452.2bp,802.7bp) node {ionization-data}; - % Edge: Abundance -> NumberDensity - \draw [->] (2362.1bp,1212.9bp) .. controls (2419.7bp,1194.0bp) and (2527.5bp,1149.3bp) .. (2576.2bp,1068.9bp) .. controls (2595.4bp,1037.2bp) and (2586.1bp,992.94bp) .. (2573.4bp,955.43bp); - \draw (2593.2bp,1094.4bp) node {abundance}; - % Edge: SelectedAtoms -> Lines - \draw [->] (1521.5bp,1133.5bp) .. controls (1442.1bp,1127.6bp) and (1302.1bp,1111.6bp) .. (1190.2bp,1068.9bp) .. controls (1169.6bp,1061.1bp) and (1033.8bp,982.84bp) .. (1022.2bp,964.18bp) .. controls (1015.1bp,952.87bp) and (977.73bp,548.52bp) .. (966.74bp,428.41bp); - \draw (1040.2bp,759.2bp) node {selected-atoms}; - % Edge: LevelNumberDensity -> TauSobolev - \draw [->] (1347.4bp,387.79bp) .. controls (1375.5bp,376.21bp) and (1403.7bp,358.71bp) .. (1420.2bp,332.48bp) .. controls (1432.9bp,312.25bp) and (1428.6bp,301.09bp) .. (1420.2bp,278.74bp) .. controls (1413.3bp,260.47bp) and (1408.0bp,255.62bp) .. (1391.2bp,245.74bp) .. controls (1381.0bp,239.76bp) and (1370.1bp,234.59bp) .. (1349.3bp,226.53bp); - \draw (1461.2bp,305.61bp) node {$N_{i,j,k}$}; - % Edge: Lines -> JBluesDiluteBlackBody - \draw [->] (937.74bp,402.04bp) .. controls (876.44bp,385.73bp) and (727.11bp,345.98bp) .. (631.93bp,320.65bp); - \draw (803.19bp,357.98bp) node {nu}; - % Edge: TRadiative -> JBluesDiluteBlackBody - \draw [->] (478.19bp,1119.6bp) .. controls (478.19bp,1100.8bp) and (478.19bp,1069.8bp) .. (478.19bp,1043.1bp) .. controls (478.19bp,1043.1bp) and (478.19bp,1043.1bp) .. (478.19bp,758.2bp) .. controls (478.19bp,590.97bp) and (446.5bp,537.26bp) .. (512.19bp,383.48bp) .. controls (520.87bp,363.15bp) and (537.03bp,344.36bp) .. (558.97bp,323.25bp); - \draw (534.69bp,706.83bp) node {$T_{\textrm{rad}}$}; - % Edge: AtomicData -> IonizationData - \draw [->] (880.03bp,1136.3bp) .. controls (999.77bp,1133.8bp) and (1296.6bp,1122.4bp) .. (1538.2bp,1068.9bp) .. controls (1547.7bp,1066.8bp) and (1557.8bp,1063.8bp) .. (1576.8bp,1057.2bp); - \draw (1475.7bp,1094.4bp) node {atomic-data}; - % Edge: SelectedAtoms -> IonizationData - \draw [->] (1582.4bp,1119.5bp) .. controls (1581.9bp,1109.7bp) and (1582.2bp,1097.4bp) .. (1585.2bp,1086.9bp) .. controls (1587.0bp,1080.7bp) and (1589.9bp,1074.4bp) .. (1598.3bp,1060.0bp); - \draw (1626.2bp,1094.4bp) node {selected-atoms}; - % Edge: JBluesDiluteBlackBody -> TransitionProbabilities - \draw [->] (577.64bp,287.28bp) .. controls (575.31bp,257.27bp) and (572.03bp,193.77bp) .. (580.19bp,141.0bp) .. controls (586.38bp,100.99bp) and (593.66bp,92.159bp) .. (607.19bp,54.0bp) .. controls (608.18bp,51.224bp) and (609.25bp,48.343bp) .. (614.08bp,35.986bp); - \draw (589.69bp,148.5bp) node {$J$}; - % Edge: Lines -> TauSobolev - \draw [->] (994.26bp,404.03bp) .. controls (1052.3bp,392.8bp) and (1179.5bp,365.03bp) .. (1208.2bp,332.48bp) .. controls (1233.9bp,303.22bp) and (1233.8bp,282.62bp) .. (1221.2bp,245.74bp) .. controls (1220.1bp,242.64bp) and (1218.8bp,239.59bp) .. (1211.8bp,228.07bp); - \draw (1243.2bp,305.61bp) node {lines}; - % Edge: BetaRadiation -> PhiSahaLTE - \draw [->] (1483.5bp,1023.3bp) .. controls (1567.0bp,1009.3bp) and (1669.7bp,988.04bp) .. (1706.2bp,964.18bp) .. controls (1718.1bp,956.37bp) and (1725.2bp,952.58bp) .. (1725.2bp,938.31bp) .. controls (1725.2bp,938.31bp) and (1725.2bp,938.31bp) .. (1725.2bp,705.83bp) .. controls (1725.2bp,669.2bp) and (1792.3bp,645.19bp) .. (1879.9bp,627.72bp); - \draw (1790.7bp,802.7bp) node {$\beta_{\textrm{rad}}$}; - % Edge: LevelNumberDensity -> StimulatedEmissionFactor - \draw [->] (1194.0bp,386.04bp) .. controls (1150.1bp,370.78bp) and (1092.4bp,350.76bp) .. (1036.2bp,331.26bp); - \draw (1164.2bp,357.98bp) node {$N_{i,j,k}$}; - % Edge: Levels -> StimulatedEmissionFactor - \draw [->] (847.03bp,1024.2bp) .. controls (840.21bp,1004.1bp) and (830.19bp,969.2bp) .. (830.19bp,938.31bp) .. controls (830.19bp,938.31bp) and (830.19bp,938.31bp) .. (830.19bp,409.35bp) .. controls (830.19bp,376.25bp) and (856.2bp,352.42bp) .. (894.53bp,331.26bp); - \draw (879.69bp,654.46bp) node {$\textrm{levels}$}; - % Edge: LevelBoltzmannFactorNoNLTE -> PartitionFunction - \draw [->] (1303.2bp,784.48bp) .. controls (1303.2bp,773.18bp) and (1303.2bp,757.97bp) .. (1303.2bp,733.8bp); - \draw (1365.7bp,759.2bp) node {level-boltzmann-factor}; - % Edge: Levels -> TauSobolev - \draw [->] (844.03bp,1024.3bp) .. controls (811.47bp,962.9bp) and (703.19bp,744.34bp) .. (703.19bp,550.72bp) .. controls (703.19bp,550.72bp) and (703.19bp,550.72bp) .. (703.19bp,304.61bp) .. controls (703.19bp,263.71bp) and (770.17bp,239.02bp) .. (864.36bp,222.42bp); - \draw (758.69bp,602.09bp) node {$\textrm{levels}$}; - % Edge: TimeExplosion -> TauSobolev - \draw [->] (1320.8bp,288.78bp) .. controls (1298.2bp,274.04bp) and (1263.7bp,251.64bp) .. (1226.9bp,227.71bp); - \draw (1331.7bp,253.24bp) node {$t_{\textrm{exp}}$}; - % Edge: Lines -> StimulatedEmissionFactor - \draw [->] (965.19bp,391.92bp) .. controls (965.19bp,378.46bp) and (965.19bp,359.36bp) .. (965.19bp,332.62bp); - \draw (978.19bp,357.98bp) node {lines}; - % Edge: Levels -> LevelBoltzmannFactorLTE - \draw [->] (884.77bp,1034.7bp) .. controls (952.91bp,1021.0bp) and (1117.0bp,988.01bp) .. (1244.3bp,962.41bp); - \draw (1189.7bp,989.68bp) node {$\textrm{levels}$}; - % Edge: SelectedAtoms -> Levels - \draw [->] (1519.9bp,1136.1bp) .. controls (1363.1bp,1133.7bp) and (969.75bp,1125.4bp) .. (915.19bp,1101.9bp) .. controls (905.67bp,1097.8bp) and (888.08bp,1080.7bp) .. (867.12bp,1058.5bp); - \draw (956.19bp,1094.4bp) node {selected-atoms}; - % Node: Density -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2529.2bp,1042.1bp) node {Density}; -\end{scope} - % Node: ElectronTemperature -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (178.19bp,1045.85bp) node {ElectronTemperature}; - \draw (178.19bp,1030.85bp) node {$\textrm{const.}\times T_{\textrm{rad}}$}; -\end{scope} - % Node: BetaSobolev -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1119.2bp,105.0bp) node {BetaSobolev}; -\end{scope} - % Node: JBluesDiluteBlackBody -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (579.19bp,305.61bp) node {JBluesDiluteBlackBody}; -\end{scope} - % Node: BetaRadiation -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1364.19bp,1045.85bp) node {BetaRadiation}; - \draw (1364.19bp,1030.85bp) node {$\dfrac{1}{k_{B} T_{\textrm{rad}}}$}; -\end{scope} - % Node: PartitionFunction -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1303.19bp,710.63bp) node {PartitionFunction}; - \draw (1303.19bp,695.63bp) node {$\sum_{k}bf_{i,j,k}$}; -\end{scope} - % Node: TauSobolev -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1187.19bp,204.67bp) node {TauSobolev}; - \draw (1187.19bp,189.67bp) node {$\dfrac{\pi e^{2}}{m_{e} c}f_{lu}\lambda t_{exp} n_{lower} \Big(1-\dfrac{g_{lower}n_{upper}}{g_{upper}n_{lower}}\Big)$}; -\end{scope} - % Node: PhiSahaLTE -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2102.19bp,605.89bp) node {PhiSahaLTE}; - \draw (2102.19bp,590.89bp) node {$\dfrac{2Z_{i,j+1}}{Z_{i,j}}\Big( \dfrac{2\pi m_{e}/\beta_{\textrm{rad}}}{h^2} \Big)^{3/2}e^{\dfrac{-\chi_{i,j}}{kT_{ \textrm{rad}}}}$}; -\end{scope} - % Node: StimulatedEmissionFactor -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (965.19bp,309.41bp) node {StimulatedEmissionFactor}; - \draw (965.19bp,294.41bp) node {$1-\dfrac{g_{lower}n_{upper}}{g_{upper}n_{lower}}$}; -\end{scope} - % Node: Levels -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (853.19bp,1042.1bp) node {Levels}; -\end{scope} - % Node: DilutionFactor -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (583.19bp,410.35bp) node {DilutionFactor}; -\end{scope} - % Node: Abundance -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2324.2bp,1224.9bp) node {Abundance}; -\end{scope} - % Node: NumberDensity -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2566.2bp,937.31bp) node {NumberDensity}; -\end{scope} - % Node: Lines -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (965.19bp,410.35bp) node {Lines}; -\end{scope} - % Node: IonizationData -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1611.2bp,1042.1bp) node {IonizationData}; -\end{scope} - % Node: TransitionProbabilities -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (621.19bp,18.0bp) node {TransitionProbabilities}; -\end{scope} - % Node: TRadiative -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (478.19bp,1137.9bp) node {TRadiative}; -\end{scope} - % Node: HeliumTreatment -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2467.2bp,1224.9bp) node {HeliumTreatment}; -\end{scope} - % Node: LinkTRadTElectron -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (85.191bp,1137.9bp) node {LinkTRadTElectron}; -\end{scope} - % Node: AtomicData -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (826.19bp,1137.9bp) node {AtomicData}; -\end{scope} - % Node: LevelBoltzmannFactorLTE -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1364.19bp,941.11bp) node {LevelBoltzmannFactorLTE}; - \draw (1364.19bp,926.11bp) node {$g_{i,j,k}e^{\dfrac{-\epsilon_{i,j,k}}{k_{ \textrm{B}}T_{\textrm{rad}}}}$}; -\end{scope} - % Node: LevelBoltzmannFactorNoNLTE -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1303.2bp,802.7bp) node {LevelBoltzmannFactorNoNLTE}; -\end{scope} - % Node: LevelNumberDensity -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1261.19bp,414.15bp) node {LevelNumberDensity}; - \draw (1261.19bp,399.15bp) node {$N_{i,j}\dfrac{bf_{i,j,k}}{Z_{i,j}}$}; -\end{scope} - % Node: TimeExplosion -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1345.2bp,305.61bp) node {TimeExplosion}; -\end{scope} - % Node: AtomicMass -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1777.2bp,1042.1bp) node {AtomicMass}; -\end{scope} - % Node: GElectron -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (2068.19bp,869.37bp) node {GElectron}; - \draw (2068.19bp,854.37bp) node {$\Big(\dfrac{2\pi m_{e}/ \beta_{\textrm{rad}}}{h^2}\Big)^{3/2}$}; -\end{scope} - % Node: SelectedAtoms -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1584.2bp,1137.9bp) node {SelectedAtoms}; -\end{scope} - % Node: IonNumberDensity -\begin{scope} - \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; - \pgfsetstrokecolor{strokecol} - \draw (1733.2bp,506.22bp) node {IonNumberDensity}; -\end{scope} -% -\end{tikzpicture} -% End of code - -% -\end{document} -% - - diff --git a/tardis/plasma/tests/data/plasma_test_config_lte.yml b/tardis/plasma/tests/data/plasma_test_config_lte.yml index 1e0d9e8b2af..c0bee588022 100644 --- a/tardis/plasma/tests/data/plasma_test_config_lte.yml +++ b/tardis/plasma/tests/data/plasma_test_config_lte.yml @@ -40,6 +40,12 @@ montecarlo: iterations: 10 last_no_of_packets: 1.0e+5 no_of_virtual_packets: 5 + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + lock_t_inner_cycles: 1 + t_inner_update_exponent: -0.5 spectrum: start: 500 angstrom diff --git a/tardis/plasma/tests/data/plasma_test_config_nlte.yml b/tardis/plasma/tests/data/plasma_test_config_nlte.yml index 35a844cd9cf..ab6417b08cb 100644 --- a/tardis/plasma/tests/data/plasma_test_config_nlte.yml +++ b/tardis/plasma/tests/data/plasma_test_config_nlte.yml @@ -42,6 +42,12 @@ montecarlo: iterations: 10 last_no_of_packets: 1.0e+5 no_of_virtual_packets: 5 + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + lock_t_inner_cycles: 1 + t_inner_update_exponent: -0.5 spectrum: start: 500 angstrom diff --git a/tardis/plasma/tests/test_complete_plasmas.py b/tardis/plasma/tests/test_complete_plasmas.py index 5f2ffeb1d4e..ffbc25bc160 100644 --- a/tardis/plasma/tests/test_complete_plasmas.py +++ b/tardis/plasma/tests/test_complete_plasmas.py @@ -100,16 +100,6 @@ def chianti_he_db_fpath(self, tardis_ref_path): return os.path.abspath(os.path.join( tardis_ref_path, 'atom_data', 'chianti_He.h5')) - @pytest.fixture(scope="class") - def reference_fpath(self, tardis_ref_path): - path = os.path.join( - tardis_ref_path, 'plasma_reference', 'reference_data.h5') - if pytest.config.getvalue("--generate-reference"): - if os.path.exists(path): - pytest.skip('Reference data {0} does exist and tests will not ' - 'proceed generating new data'.format(path)) - return path - @pytest.fixture( scope="class", params=config_list, @@ -130,68 +120,61 @@ def config(self, request): else: config.plasma[prop] = value hash_string = '_'.join((hash_string, str(value))) + hash_string = os.path.join("plasma_unittest", hash_string) setattr(config.plasma, 'save_path', hash_string) return config - @pytest.yield_fixture(scope="class") - def reference(self, reference_fpath, generate_reference): - if generate_reference: - mode = 'w' - else: - mode = 'r' - with pd.HDFStore( - reference_fpath, - mode=mode - ) as store: - yield store - @pytest.fixture(scope="class") - def plasma(self, chianti_he_db_fpath, config, reference_fpath, reference): + def plasma(self, chianti_he_db_fpath, config, tardis_ref_data): config['atom_data'] = chianti_he_db_fpath sim = Simulation.from_config(config) if pytest.config.getvalue("--generate-reference"): - sim.plasma.to_hdf(reference_fpath, path=config.plasma.save_path) - pytest.skip("Reference data saved at {0}".format(reference_fpath)) + sim.plasma.to_hdf(tardis_ref_data, path=config.plasma.save_path) + pytest.skip("Reference data saved at {0}".format(tardis_ref_data)) return sim.plasma @pytest.mark.parametrize("attr", combined_properties) - def test_plasma_properties(self, plasma, reference, config, attr): + def test_plasma_properties(self, plasma, tardis_ref_data, config, attr): if hasattr(plasma, attr): actual = getattr(plasma, attr) if actual.ndim == 1: actual = pd.Series(actual) else: actual = pd.DataFrame(actual) - expected = reference.select(os.path.join( - config.plasma.save_path, 'plasma', attr)) + key = os.path.join(config.plasma.save_path, 'plasma', attr) + expected = tardis_ref_data[key] pdt.assert_almost_equal(actual, expected) else: warnings.warn('Property "{}" not found'.format(attr)) - def test_levels(self, plasma, reference, config): + def test_levels(self, plasma, tardis_ref_data, config): actual = pd.DataFrame(plasma.levels) - expected = reference.select(os.path.join( - config.plasma.save_path, 'plasma', 'levels')) + key = os.path.join( + config.plasma.save_path, 'plasma', 'levels') + expected = tardis_ref_data[key] pdt.assert_almost_equal(actual, expected) @pytest.mark.parametrize("attr", scalars_properties) - def test_scalars_properties(self, plasma, reference, config, attr): + def test_scalars_properties(self, plasma, tardis_ref_data, config, attr): actual = getattr(plasma, attr) if hasattr(actual, 'cgs'): actual = actual.cgs.value - expected = reference.select(os.path.join( - config.plasma.save_path, 'plasma', 'scalars'))[attr] + key = os.path.join( + config.plasma.save_path, 'plasma', 'scalars') + expected = tardis_ref_data[key][attr] pdt.assert_almost_equal(actual, expected) - def test_helium_treatment(self, plasma, reference, config): + def test_helium_treatment(self, plasma, tardis_ref_data, config): actual = plasma.helium_treatment - expected = reference.select(os.path.join( - config.plasma.save_path, 'plasma', 'scalars'))['helium_treatment'] + key = os.path.join( + config.plasma.save_path, 'plasma', 'scalars') + expected = tardis_ref_data[key]['helium_treatment'] assert actual == expected - def test_zeta_data(self, plasma, reference, config): + def test_zeta_data(self, plasma, tardis_ref_data, config): if hasattr(plasma, 'zeta_data'): actual = plasma.zeta_data - expected = reference.select(os.path.join( - config.plasma.save_path, 'plasma', 'zeta_data')) + key = os.path.join( + config.plasma.save_path, 'plasma', 'zeta_data') + expected = tardis_ref_data[key] assert_almost_equal(actual, expected.values) diff --git a/tardis/plasma/tests/test_plasma_dot_tex.py b/tardis/plasma/tests/test_plasma_dot_tex.py deleted file mode 100644 index d51fd0ad538..00000000000 --- a/tardis/plasma/tests/test_plasma_dot_tex.py +++ /dev/null @@ -1,26 +0,0 @@ -import os -import pygraphviz as pgv -import pytest -from datetime import datetime - -data_path = os.path.join('tardis', 'plasma', 'tests', 'data') - -@pytest.mark.skipif(datetime.now() < datetime(2018, 10, 1), - reason="graphviz had trouble being installed via conda in " - "March 2018") -def test_write_dot(tmpdir, simulation_verysimple): - fname = str(tmpdir.mkdir('test_dot').join('plasma.dot')) - simulation_verysimple.plasma.write_to_dot(fname) - actual = pgv.AGraph(fname).to_string() - expected = pgv.AGraph(os.path.join(data_path, 'plasma_ref.dot')).to_string() - assert actual == expected - -@pytest.mark.skipif(datetime.now() < datetime(2018, 10, 1), - reason="graphviz had trouble being installed via conda in " - "March 2018") -def test_write_tex(tmpdir, simulation_verysimple): - fname = str(tmpdir.mkdir('test_tex').join('plasma.tex')) - simulation_verysimple.plasma.write_to_tex(fname) - with open(fname, 'r') as fp1, open( - os.path.join(data_path, 'plasma_ref.tex'), 'r') as fp2: - assert fp1.readline() ==fp2.readline() diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 011e29ae9a9..32f54e3fc2a 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -13,7 +13,67 @@ logger = logging.getLogger(__name__) -class Simulation(HDFWriterMixin): +class PlasmaStateStorerMixin(object): + """Mixin class to provide the capability to the simulation object of + storing plasma information and the inner boundary temperature during each + MC iteration. + + Currently, storage for the dilution factor, the radiation temperature and + the electron density in each cell is provided. Additionally, the + temperature at the inner boundary is saved. + """ + def __init__(self, iterations, no_of_shells): + + self.iterations_w = np.zeros( + (iterations, no_of_shells)) + self.iterations_t_rad = np.zeros( + (iterations, no_of_shells)) * u.K + self.iterations_electron_densities = np.zeros( + (iterations, no_of_shells)) + self.iterations_t_inner = np.zeros(iterations) * u.K + + def store_plasma_state(self, i, w, t_rad, electron_densities, t_inner): + """Store current plasma information and inner boundary temperature + used in iterated i. + + Parameters + ---------- + i : int + current iteration index (0 for the first) + w : np.ndarray + dilution factor + t_rad : astropy.units.Quantity + radiation temperature + electron_densities : np.ndarray + electron density + t_inner : astropy.units.Quantity + temperature of inner boundary + """ + self.iterations_w[i, :] = w + self.iterations_t_rad[i, :] = t_rad + self.iterations_electron_densities[i, :] = \ + electron_densities.values + self.iterations_t_inner[i] = t_inner + + def reshape_plasma_state_store(self, executed_iterations): + """Reshapes the storage arrays in case convergence was reached before + all specified iterations were executed. + + Parameters + ---------- + executed_iterations : int + iteration index, i.e. number of iterations executed minus one! + """ + self.iterations_w = self.iterations_w[:executed_iterations+1, :] + self.iterations_t_rad = \ + self.iterations_t_rad[:executed_iterations+1, :] + self.iterations_electron_densities = \ + self.iterations_electron_densities[:executed_iterations+1, :] + self.iterations_t_inner = \ + self.iterations_t_inner[:executed_iterations+1] + + +class Simulation(PlasmaStateStorerMixin, HDFWriterMixin): """A composite object containing all the required information for a simulation. @@ -36,13 +96,18 @@ class Simulation(HDFWriterMixin): .. note:: TARDIS must be built with OpenMP support in order for `nthreads` to have effect. """ - hdf_properties = ['model', 'plasma', 'runner'] + hdf_properties = ['model', 'plasma', 'runner', 'iterations_w', + 'iterations_t_rad', 'iterations_electron_densities', + 'iterations_t_inner'] hdf_name = 'simulation' def __init__(self, iterations, model, plasma, runner, no_of_packets, no_of_virtual_packets, luminosity_nu_start, luminosity_nu_end, last_no_of_packets, luminosity_requested, convergence_strategy, nthreads): + + super(Simulation, self).__init__(iterations, model.no_of_shells) + self.converged = False self.iterations = iterations self.iterations_executed = 0 @@ -56,14 +121,19 @@ def __init__(self, iterations, model, plasma, runner, self.luminosity_nu_end = luminosity_nu_end self.luminosity_requested = luminosity_requested self.nthreads = nthreads - if convergence_strategy.type in ('damped', 'specific'): + if convergence_strategy.type in ('damped'): self.convergence_strategy = convergence_strategy self.converged = False self.consecutive_converges_count = 0 + elif convergence_strategy.type in ('custom'): + raise NotImplementedError( + 'Convergence strategy type is custom; ' + 'you need to implement your specific treatment!' + ) else: raise ValueError( 'Convergence strategy type is ' - 'neither damped nor specific ' + 'not damped or custom ' '- input is {0}'.format(convergence_strategy.type)) self._callbacks = OrderedDict() @@ -97,41 +167,37 @@ def _get_convergence_status(self, t_rad, w, t_inner, estimated_t_rad, convergence_t_inner = (abs(t_inner - estimated_t_inner) / estimated_t_inner).value - if self.convergence_strategy.type == 'specific': - fraction_t_rad_converged = ( - np.count_nonzero( - convergence_t_rad < self.convergence_strategy.t_rad.threshold) - / no_of_shells) - - t_rad_converged = ( - fraction_t_rad_converged > self.convergence_strategy.t_rad.threshold) - - fraction_w_converged = ( - np.count_nonzero( - convergence_w < self.convergence_strategy.w.threshold) - / no_of_shells) - - w_converged = ( - fraction_w_converged > self.convergence_strategy.w.threshold) - - t_inner_converged = ( - convergence_t_inner < self.convergence_strategy.t_inner.threshold) - - if np.all([t_rad_converged, w_converged, t_inner_converged]): - hold_iterations = self.convergence_strategy.hold_iterations - self.consecutive_converges_count += 1 - logger.info("Iteration converged {0:d}/{1:d} consecutive " - "times.".format(self.consecutive_converges_count, - hold_iterations + 1)) - # If an iteration has converged, require hold_iterations more - # iterations to converge before we conclude that the Simulation - # is converged. - return self.consecutive_converges_count == hold_iterations + 1 - else: - self.consecutive_converges_count = 0 - return False - + fraction_t_rad_converged = ( + np.count_nonzero( + convergence_t_rad < self.convergence_strategy.t_rad.threshold) + / no_of_shells) + + t_rad_converged = ( + fraction_t_rad_converged > self.convergence_strategy.fraction) + + fraction_w_converged = ( + np.count_nonzero( + convergence_w < self.convergence_strategy.w.threshold) + / no_of_shells) + + w_converged = ( + fraction_w_converged > self.convergence_strategy.fraction) + + t_inner_converged = ( + convergence_t_inner < self.convergence_strategy.t_inner.threshold) + + if np.all([t_rad_converged, w_converged, t_inner_converged]): + hold_iterations = self.convergence_strategy.hold_iterations + self.consecutive_converges_count += 1 + logger.info("Iteration converged {0:d}/{1:d} consecutive " + "times.".format(self.consecutive_converges_count, + hold_iterations + 1)) + # If an iteration has converged, require hold_iterations more + # iterations to converge before we conclude that the Simulation + # is converged. + return self.consecutive_converges_count == hold_iterations + 1 else: + self.consecutive_converges_count = 0 return False def advance_state(self): @@ -147,7 +213,8 @@ def advance_state(self): estimated_t_rad, estimated_w = ( self.runner.calculate_radiationfield_properties()) estimated_t_inner = self.estimate_t_inner( - self.model.t_inner, self.luminosity_requested) + self.model.t_inner, self.luminosity_requested, + t_inner_update_exponent=self.convergence_strategy.t_inner_update_exponent) converged = self._get_convergence_status(self.model.t_rad, self.model.w, @@ -163,9 +230,12 @@ def advance_state(self): self.convergence_strategy.t_rad.damping_constant) next_w = self.damped_converge( self.model.w, estimated_w, self.convergence_strategy.w.damping_constant) - next_t_inner = self.damped_converge( - self.model.t_inner, estimated_t_inner, - self.convergence_strategy.t_inner.damping_constant) + if (self.iterations_executed + 1) % self.convergence_strategy.lock_t_inner_cycles == 0: + next_t_inner = self.damped_converge( + self.model.t_inner, estimated_t_inner, + self.convergence_strategy.t_inner.damping_constant) + else: + next_t_inner = self.model.t_inner self.log_plasma_state(self.model.t_rad, self.model.w, self.model.t_inner, next_t_rad, next_w, @@ -211,18 +281,32 @@ def iterate(self, no_of_packets, no_of_virtual_packets=0, last_run=False): def run(self): start_time = time.time() - while self.iterations_executed < self.iterations-1 and not self.converged: + while self.iterations_executed < self.iterations-1: + self.store_plasma_state(self.iterations_executed, self.model.w, + self.model.t_rad, + self.plasma.electron_densities, + self.model.t_inner) self.iterate(self.no_of_packets) self.converged = self.advance_state() self._call_back() + if self.converged: + if self.convergence_strategy.stop_if_converged: + break # Last iteration + self.store_plasma_state(self.iterations_executed, self.model.w, + self.model.t_rad, + self.plasma.electron_densities, + self.model.t_inner) self.iterate(self.last_no_of_packets, self.no_of_virtual_packets, True) + self.reshape_plasma_state_store(self.iterations_executed) + logger.info("Simulation finished in {0:d} iterations " "and took {1:.2f} s".format( self.iterations_executed, time.time() - start_time)) self._call_back() + def log_plasma_state(self, t_rad, w, t_inner, next_t_rad, next_w, next_t_inner, log_sampling=5): """ diff --git a/tardis/simulation/setup_package.py b/tardis/simulation/setup_package.py index 173e10b849a..fbaa4b0ee0e 100644 --- a/tardis/simulation/setup_package.py +++ b/tardis/simulation/setup_package.py @@ -1,6 +1,6 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst from setuptools import Extension -from astropy_helpers.setup_helpers import get_distutils_option +from astropy_helpers.distutils_helpers import get_distutils_option import numpy as np def get_package_data(): diff --git a/tardis/simulation/tests/test_simulation.py b/tardis/simulation/tests/test_simulation.py index 10d8bbf9c72..e9eff0b0574 100644 --- a/tardis/simulation/tests/test_simulation.py +++ b/tardis/simulation/tests/test_simulation.py @@ -4,8 +4,10 @@ from tardis.io.config_reader import Configuration from tardis.simulation import Simulation +import numpy as np import pandas as pd import pandas.util.testing as pdt +import astropy.units as u @pytest.fixture(scope='module') @@ -37,6 +39,12 @@ def simulation_one_loop( if not generate_reference: return simulation else: + simulation.hdf_properties = [ + 'iterations_w', + 'iterations_t_rad', + 'iterations_electron_densities', + 'iterations_t_inner', + ] simulation.model.hdf_properties = [ 't_radiative', 'dilution_factor' @@ -47,6 +55,11 @@ def simulation_one_loop( 'output_nu', 'output_energy' ] + simulation.to_hdf( + tardis_ref_data, + '', + 'test_simulation' + ) simulation.model.to_hdf( tardis_ref_data, '', @@ -79,5 +92,66 @@ def test_plasma_estimates( refdata(name) ) + +@pytest.mark.parametrize('name', [ + 'iterations_w', 'iterations_t_rad', + 'iterations_electron_densities', 'iterations_t_inner' + ]) +def test_plasma_state_iterations( + simulation_one_loop, refdata, name): + actual = getattr( + simulation_one_loop, name) + + try: + actual = pd.Series(actual) + except Exception: + actual = pd.DataFrame(actual) + + pdt.assert_almost_equal( + actual, + refdata(name) + ) + + +@pytest.fixture(scope="module") +def simulation_without_loop(atomic_data_fname, config): + + config.atom_data = atomic_data_fname + config.montecarlo.iterations = 2 + return Simulation.from_config(config) + + +def test_plasma_state_storer_store(atomic_data_fname, config, + simulation_without_loop): + + simulation = simulation_without_loop + + w_test = np.linspace(0, 1, 20) + t_rad_test = np.linspace(12000, 9000, 20) * u.K + electron_densities_test = pd.Series(np.linspace(1e7, 1e6, 20)) + t_inner_test = 12500 * u.K + + simulation.store_plasma_state(1, w_test, t_rad_test, + electron_densities_test, t_inner_test) + + np.testing.assert_allclose(simulation.iterations_w[1, :], w_test) + np.testing.assert_allclose(simulation.iterations_t_rad[1, :], t_rad_test) + np.testing.assert_allclose(simulation.iterations_electron_densities[1, :], + electron_densities_test) + np.testing.assert_allclose(simulation.iterations_t_inner[1], t_inner_test) + + +def test_plasma_state_storer_reshape(atomic_data_fname, config, + simulation_without_loop): + + simulation = simulation_without_loop + simulation.reshape_plasma_state_store(0) + + assert simulation.iterations_t_rad.shape == (1, 20) + assert simulation.iterations_w.shape == (1, 20) + assert simulation.iterations_electron_densities.shape == (1, 20) + assert simulation.iterations_t_inner.shape == (1,) + + # assert_quantity_allclose( # t_rad, simulation_compare_data['test1/t_rad'] * u.Unit('K'), atol=0.0 * u.Unit('K')) diff --git a/tardis/tests/fixtures/__init__.py b/tardis/tests/fixtures/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/tests/fixtures/atom_data.py b/tardis/tests/fixtures/atom_data.py new file mode 100644 index 00000000000..9cee0b62c83 --- /dev/null +++ b/tardis/tests/fixtures/atom_data.py @@ -0,0 +1,39 @@ +import os +from copy import deepcopy + +import pytest + +from tardis.io.atomic import AtomData + +DEFAULT_ATOM_DATA_UUID = '864f1753714343c41f99cb065710cace' + +@pytest.fixture(scope="session") +def atomic_data_fname(tardis_ref_path): + atomic_data_fname = os.path.join( + tardis_ref_path, 'atom_data', 'kurucz_cd23_chianti_H_He.h5') + + atom_data_missing_str = ("{0} atomic datafiles " + "does not seem to exist".format(atomic_data_fname)) + + if not os.path.exists(atomic_data_fname): + pytest.exit(atom_data_missing_str) + + return atomic_data_fname + + +@pytest.fixture(scope="session") +def atomic_dataset(atomic_data_fname): + atomic_data = AtomData.from_hdf(atomic_data_fname) + + if atomic_data.md5 != DEFAULT_ATOM_DATA_UUID: + pytest.skip( + 'Need default Kurucz atomic dataset (md5="{}"'.format( + DEFAULT_ATOM_DATA_UUID)) + else: + return atomic_data + + +@pytest.fixture +def kurucz_atomic_data(atomic_dataset): + atomic_data = deepcopy(atomic_dataset) + return atomic_data diff --git a/tardis/tests/test_tardis_full_formal_integral.py b/tardis/tests/test_tardis_full_formal_integral.py new file mode 100644 index 00000000000..acd150487d2 --- /dev/null +++ b/tardis/tests/test_tardis_full_formal_integral.py @@ -0,0 +1,97 @@ +import os +import pytest +import numpy as np +import numpy.testing as npt +from astropy import units as u +from astropy.tests.helper import assert_quantity_allclose + +from tardis.simulation.base import Simulation +from tardis.io.config_reader import Configuration + + +config_line_modes = ['downbranch', 'macroatom'] +interpolate_shells = [-1, 30] + + +@pytest.fixture(scope='module', params=config_line_modes) +def base_config(request): + config = Configuration.from_yaml( + 'tardis/io/tests/data/tardis_configv1_verysimple.yml') + + config["plasma"]["line_interaction_type"] = request.param + config["montecarlo"]["no_of_packets"] = 4.0e+4 + config["montecarlo"]["last_no_of_packets"] = 1.0e+5 + config["montecarlo"]["no_of_virtual_packets"] = 0 + config["spectrum"]["method"] = "integrated" + config["spectrum"]["integrated"]["points"] = 200 + + return config + +@pytest.fixture(scope='module', params=interpolate_shells) +def config(base_config, request): + base_config["spectrum"]["integrated"]["interpolate_shells"] = request.param + return base_config + +class TestRunnerSimpleFormalInegral(): + """ + Very simple run with the formal integral spectral synthesis method + """ + _name = 'test_runner_simple_integral' + + @pytest.fixture(scope="class") + def runner( + self, config, atomic_data_fname, + tardis_ref_data, generate_reference): + config.atom_data = atomic_data_fname + + self.name = (self._name + + "_{:s}".format(config.plasma.line_interaction_type)) + if config.spectrum.integrated.interpolate_shells > 0: + self.name += '_interp' + + simulation = Simulation.from_config(config) + simulation.run() + + if not generate_reference: + return simulation.runner + else: + simulation.runner.hdf_properties = [ + 'j_blue_estimator', + 'spectrum', + 'spectrum_integrated' + ] + simulation.runner.to_hdf( + tardis_ref_data, + '', + self.name) + pytest.skip( + 'Reference data was generated during this run.') + + @pytest.fixture(scope='class') + def refdata(self, tardis_ref_data): + def get_ref_data(key): + return tardis_ref_data[os.path.join( + self.name, key)] + return get_ref_data + + def test_j_blue_estimators(self, runner, refdata): + j_blue_estimator = refdata('j_blue_estimator').values + + npt.assert_allclose( + runner.j_blue_estimator, + j_blue_estimator) + + def test_spectrum(self, runner, refdata): + luminosity = u.Quantity(refdata('spectrum/luminosity'), 'erg /s') + + assert_quantity_allclose( + runner.spectrum.luminosity, + luminosity) + + def test_spectrum_integrated(self, runner, refdata): + luminosity = u.Quantity( + refdata('spectrum_integrated/luminosity'), 'erg /s') + + assert_quantity_allclose( + runner.spectrum_integrated.luminosity, + luminosity) diff --git a/tardis/tests/test_util.py b/tardis/tests/test_util.py index a027a4ffdd0..0e6bbd0d44f 100644 --- a/tardis/tests/test_util.py +++ b/tardis/tests/test_util.py @@ -1,15 +1,14 @@ import pytest import numpy as np +import numpy.testing as npt import os from astropy import units as u from io import StringIO -from tardis.util import MalformedSpeciesError, MalformedElementSymbolError, MalformedQuantityError -from tardis.util import (int_to_roman, roman_to_int, create_synpp_yaml, - calculate_luminosity, intensity_black_body, savitzky_golay, - species_tuple_to_string, species_string_to_tuple, parse_quantity, - element_symbol2atomic_number, atomic_number2element_symbol, - reformat_element_symbol, quantity_linspace, convert_abundances_format) +from tardis.util.base import MalformedSpeciesError, MalformedElementSymbolError, MalformedQuantityError, int_to_roman, \ + roman_to_int, calculate_luminosity, create_synpp_yaml, intensity_black_body, \ + species_tuple_to_string, species_string_to_tuple, parse_quantity, element_symbol2atomic_number, \ + atomic_number2element_symbol, reformat_element_symbol, quantity_linspace, convert_abundances_format data_path = os.path.join('tardis', 'io', 'tests', 'data') @@ -51,12 +50,6 @@ def test_int_to_roman(test_input, expected_result): with pytest.raises(TypeError): int_to_roman(1.5) - with pytest.raises(ValueError): - int_to_roman(0) - - with pytest.raises(ValueError): - int_to_roman(4000) - @pytest.mark.parametrize(['test_input', 'expected_result'], [ ('I', 1), @@ -70,11 +63,9 @@ def test_int_to_roman(test_input, expected_result): def test_roman_to_int(test_input, expected_result): assert roman_to_int(test_input) == expected_result - with pytest.raises(TypeError): + with pytest.raises(AttributeError): roman_to_int(1) - with pytest.raises(ValueError): - roman_to_int('IIV') @pytest.mark.parametrize(['string_io', 'distance', 'result'], [ @@ -92,36 +83,8 @@ def test_calculate_luminosity(string_io, distance, result): (10**8, 300, 1.846869480674048e-24), ]) def test_intensity_black_body(nu, t, i): - assert float(intensity_black_body(nu, t)) == i - - -def test_savitzky_golay(): - # simple testcase: - # time axis sampled into 5 values between 0 and 0.5 - t = np.linspace(0, 0.5, 5) - # y axis represent signal values - time complexed - # provided undisturbed signal is ramp input, some disturbances are added randomly - y = np.exp(t) + np.array([0.00016543, -0.00011681, -0.00060518, -0.00020232, 0.0006262]) + assert np.isclose(intensity_black_body(nu, t), i) - # applying the filter - ysg = savitzky_golay(y, window_size=21, order=5) - - # expected result on application of filter - result = np.array([0.62999136, 0.6976977, 0.93429473, 1.23388831, 1.51577056, - 1.72441978, 1.82950054, 1.82586363, 1.73354608]) - assert ysg.all() == result.all() - - with pytest.raises(ValueError): - # window_size and order have to be of type int - savitzky_golay(y, window_size='a', order='b') - - with pytest.raises(TypeError): - # window_size size must be a positive odd number - savitzky_golay(y, window_size=10, order=4) - - with pytest.raises(TypeError): - # window_size is too small for the polynomials order - savitzky_golay(y, window_size=1, order=4) @pytest.mark.parametrize(['species_tuple', 'roman_numerals', 'species_string'], [ diff --git a/tardis/util/__init__.py b/tardis/util/__init__.py new file mode 100644 index 00000000000..0d1b60fa94c --- /dev/null +++ b/tardis/util/__init__.py @@ -0,0 +1,3 @@ +# Utilities for TARDIS + + diff --git a/tardis/util.py b/tardis/util/base.py similarity index 53% rename from tardis/util.py rename to tardis/util/base.py index 6dd260bb0ef..45304340877 100644 --- a/tardis/util.py +++ b/tardis/util/base.py @@ -1,18 +1,17 @@ -# Utilities for TARDIS +import logging +import os +import re +from collections import OrderedDict -from astropy import units as u, constants -from pyne import nucname import numexpr as ne import numpy as np import pandas as pd -import os import yaml -import re -import tardis -import logging - -from collections import OrderedDict +from tardis import constants +from astropy import units as u +from pyne import nucname +import tardis k_B_cgs = constants.k_B.cgs.value c_cgs = constants.c.cgs.value @@ -20,9 +19,11 @@ m_e_cgs = constants.m_e.cgs.value e_charge_gauss = constants.e.gauss.value + class MalformedError(Exception): pass + class MalformedSpeciesError(MalformedError): def __init__(self, malformed_element_symbol): @@ -51,7 +52,6 @@ def __str__(self): logger = logging.getLogger(__name__) - tardis_dir = os.path.realpath(tardis.__path__[0]) @@ -63,123 +63,53 @@ def get_tests_data_path(fname): return os.path.join(tardis_dir, 'tests', 'data', fname) -atomic_symbols_data = np.recfromtxt(get_data_path('atomic_symbols.dat'), - names=['atomic_number', 'symbol']) -symbol2atomic_number = OrderedDict(zip(atomic_symbols_data['symbol'], - atomic_symbols_data['atomic_number'])) -atomic_number2symbol = OrderedDict(atomic_symbols_data) +ATOMIC_SYMBOLS_DATA = pd.read_csv(get_data_path('atomic_symbols.dat'), delim_whitespace=True, + names=['atomic_number', 'symbol']).set_index('atomic_number').squeeze() +ATOMIC_NUMBER2SYMBOL = OrderedDict(ATOMIC_SYMBOLS_DATA.to_dict()) +SYMBOL2ATOMIC_NUMBER = OrderedDict((y, x) for x, y in ATOMIC_NUMBER2SYMBOL.items()) synpp_default_yaml_fname = get_data_path('synpp_default.yaml') -def int_to_roman(int_input): - """ - from http://code.activestate.com/recipes/81611-roman-numerals/ - Convert an integer to Roman numerals. - - :param int_input: an integer between 1 and 3999 - :returns result: roman equivalent string of passed :param{int_input} - - Examples: - >>> int_to_roman(0) - Traceback (most recent call last): - ValueError: Argument must be between 1 and 3999 - - >>> int_to_roman(-1) - Traceback (most recent call last): - ValueError: Argument must be between 1 and 3999 - - >>> int_to_roman(1.5) - Traceback (most recent call last): - TypeError: expected integer, got - - >>> for i in range(1, 21): print int_to_roman(i), - ... - I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX - >>> print int_to_roman(2000) - MM - >>> print int_to_roman(1999) - MCMXCIX - """ - if not isinstance(int_input, int): - raise TypeError("Expected integer, got %s" % type(int_input)) - if not 0 < int_input < 4000: - raise ValueError("Argument must be between 1 and 3999") - - int_roman_tuples = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), - (100 , 'C'), (90 , 'XC'), (50 , 'L'), (40 , 'XL'), - (10 , 'X'), (9 , 'IX'), (5 , 'V'), (4 , 'IV'), (1, 'I')] - - result = '' - for (integer, roman) in int_roman_tuples: - count = int(int_input / integer) - result += roman * count - int_input -= integer * count - return result +NUMERAL_MAP = tuple(zip( + (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1), + ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I') +)) +def int_to_roman(i): + result = [] + for integer, numeral in NUMERAL_MAP: + count = i // integer + result.append(numeral * count) + i -= integer * count + return ''.join(result) -def roman_to_int(roman_input): +def roman_to_int(roman_string): """ - from http://code.activestate.com/recipes/81611-roman-numerals/ - Convert a roman numeral to an integer. - - :param roman_input: a valid roman numeral string - :returns sum: equivalent integer of passed :param{roman_input} - - >>> r = range(1, 4000) - >>> nums = [int_to_roman(i) for i in r] - >>> ints = [roman_to_int(n) for n in nums] - >>> print r == ints - 1 - - >>> roman_to_int('VVVIV') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: VVVIV - >>> roman_to_int(1) - Traceback (most recent call last): - ... - TypeError: expected string, got - >>> roman_to_int('a') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: A - >>> roman_to_int('IL') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: IL + + Parameters + ---------- + roman_string: str + + Returns + ------- + : int + """ - if not isinstance(roman_input, str): - raise TypeError("expected string, got %s" % type(roman_input)) - - roman_input = roman_input.upper() - nums = ['M', 'D', 'C', 'L', 'X', 'V', 'I'] - ints = [1000, 500, 100, 50, 10, 5, 1] - places = [] - for c in roman_input: - if not c in nums: - raise ValueError("input is not a valid roman numeral: %s" % roman_input) - for i in range(len(roman_input)): - c = roman_input[i] - value = ints[nums.index(c)] - # If the next place holds a larger number, this value is negative. - try: - nextvalue = ints[nums.index(roman_input[i +1])] - if nextvalue > value: - value *= -1 - except IndexError: - # there is no next place. - pass - places.append(value) - result = 0 - for n in places: - result += n - # Easiest test for validity... - if int_to_roman(result) == roman_input: - return result - else: - raise ValueError('input is not a valid roman numeral: %s' % roman_input) + + NUMERALS_SET = set(list(zip(*NUMERAL_MAP))[1]) + roman_string = roman_string.upper() + if len(set(list(roman_string.upper())) - NUMERALS_SET) != 0: + raise ValueError('{0} does not seem to be a roman numeral'.format(roman_string)) + i = result = 0 + for integer, numeral in NUMERAL_MAP: + while roman_string[i:i + len(numeral)] == numeral: + result += integer + i += len(numeral) + if result < 1: + raise ValueError('Can not interpret Roman Numeral {0}'.format(roman_string)) + return result def calculate_luminosity(spec_fname, distance, wavelength_column=0, wavelength_unit=u.angstrom, flux_column=1, @@ -195,6 +125,7 @@ def calculate_luminosity(spec_fname, distance, wavelength_column=0, wavelength_u return luminosity.value, wavelength.min(), wavelength.max() + def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): logger.warning('Currently only works with Si and a special setup') if radial1d_mdl.atom_data.synpp_refs is not None: @@ -204,8 +135,8 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): radial1d_mdl.atom_data.synpp_refs['ref_log_tau'] = -99.0 for key, value in radial1d_mdl.atom_data.synpp_refs.iterrows(): try: - radial1d_mdl.atom_data.synpp_refs['ref_log_tau'].ix[key] = np.log10( - radial1d_mdl.plasma.tau_sobolevs[0].ix[value['line_id']]) + radial1d_mdl.atom_data.synpp_refs['ref_log_tau'].loc[key] = np.log10( + radial1d_mdl.plasma.tau_sobolevs[0].loc[value['line_id']]) except KeyError: pass @@ -266,87 +197,15 @@ def intensity_black_body(nu, T): '(exp(h_cgs * nu * beta_rad) -1 )') return intensity -def savitzky_golay(y, window_size, order, deriv=0, rate=1): - r"""Smooth (and optionally differentiate) data with a Savitzky-Golay filter. - The Savitzky-Golay filter removes high frequency noise from data. - It has the advantage of preserving the original shape and - features of the signal better than other types of filtering - approaches, such as moving averages techniques. - Parameters - ---------- - y : array_like, shape (N,) - the values of the time history of the signal. - window_size : int - the length of the window. Must be an odd integer number. - order : int - the order of the polynomial used in the filtering. - Must be less then `window_size` - 1. - deriv: int - the order of the derivative to compute (default = 0 means only smoothing) - Returns - ------- - ys : ndarray, shape (N) - the smoothed signal (or it's n-th derivative). - Notes - ----- - The Savitzky-Golay is a type of low-pass filter, particularly - suited for smoothing noisy data. The main idea behind this - approach is to make for each point a least-square fit with a - polynomial of high order over a odd-sized window centered at - the point. - Examples - -------- - t = np.linspace(-4, 4, 500) - y = np.exp( -t**2 ) + np.random.normal(0, 0.05, t.shape) - ysg = savitzky_golay(y, window_size=31, order=4) - import matplotlib.pyplot as plt - plt.plot(t, y, label='Noisy signal') - plt.plot(t, np.exp(-t**2), 'k', lw=1.5, label='Original signal') - plt.plot(t, ysg, 'r', label='Filtered signal') - plt.legend() - plt.show() - References - ---------- - .. [1] A. Savitzky, M. J. E. Golay, Smoothing and Differentiation of - Data by Simplified Least Squares Procedures. Analytical - Chemistry, 1964, 36 (8), pp 1627-1639. - .. [2] Numerical Recipes 3rd Edition: The Art of Scientific Computing - W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery - Cambridge University Press ISBN-13: 9780521880688 - """ - import numpy as np - from math import factorial - - try: - window_size = np.abs(np.int(window_size)) - order = np.abs(np.int(order)) - except ValueError, msg: - raise ValueError("window_size and order have to be of type int") - if window_size % 2 != 1 or window_size < 1: - raise TypeError("window_size size must be a positive odd number") - if window_size < order + 2: - raise TypeError("window_size is too small for the polynomials order") - order_range = range(order+1) - half_window = (window_size -1) // 2 - # precompute coefficients - b = np.mat([[k**i for i in order_range] for k in range(-half_window, half_window+1)]) - m = np.linalg.pinv(b).A[deriv] * rate**deriv * factorial(deriv) - # pad the signal at the extremes with - # values taken from the signal itself - firstvals = y[0] - np.abs( y[1:half_window+1][::-1] - y[0] ) - lastvals = y[-1] + np.abs(y[-half_window-1:-1][::-1] - y[-1]) - y = np.concatenate((firstvals, y, lastvals)) - return np.convolve( m[::-1], y, mode='valid') - def species_tuple_to_string(species_tuple, roman_numerals=True): atomic_number, ion_number = species_tuple - element_symbol = atomic_number2symbol[atomic_number] + element_symbol = ATOMIC_NUMBER2SYMBOL[atomic_number] if roman_numerals: roman_ion_number = int_to_roman(ion_number+1) - return '%s %s' % (element_symbol, roman_ion_number) + return '{0} {1}'.format(str(element_symbol), roman_ion_number) else: - return '%s %d' % (element_symbol, ion_number) + return '{0} {1:d}'.format(element_symbol, ion_number) def species_string_to_tuple(species_string): @@ -378,7 +237,7 @@ def species_string_to_tuple(species_string): def parse_quantity(quantity_string): - if not isinstance(quantity_string, basestring): + if not isinstance(quantity_string, str): raise MalformedQuantityError(quantity_string) try: @@ -401,15 +260,17 @@ def parse_quantity(quantity_string): def element_symbol2atomic_number(element_string): reformatted_element_string = reformat_element_symbol(element_string) - if reformatted_element_string not in symbol2atomic_number: + if reformatted_element_string not in SYMBOL2ATOMIC_NUMBER: raise MalformedElementSymbolError(element_string) - return symbol2atomic_number[reformatted_element_string] + return SYMBOL2ATOMIC_NUMBER[reformatted_element_string] + def atomic_number2element_symbol(atomic_number): """ Convert atomic number to string symbol """ - return atomic_number2symbol[atomic_number] + return ATOMIC_NUMBER2SYMBOL[atomic_number] + def reformat_element_symbol(element_string): """ @@ -458,4 +319,4 @@ def convert_abundances_format(fname, delimiter='\s+'): #Assign header row df.columns = [nucname.name(i) for i in range(1, df.shape[1] + 1)] - return df + return df \ No newline at end of file diff --git a/tardis/util/colored_logger.py b/tardis/util/colored_logger.py new file mode 100644 index 00000000000..37130295345 --- /dev/null +++ b/tardis/util/colored_logger.py @@ -0,0 +1,66 @@ +import logging +''' +Code for Custom Logger Classes (ColoredFormatter and ColorLogger) and its helper function +(formatter_message) is used from this thread +http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output +''' + +def formatter_message(message, use_color=True): + ''' + Helper Function used for Coloring Log Output + ''' + #These are the sequences need to get colored ouput + RESET_SEQ = "\033[0m" + BOLD_SEQ = "\033[1m" + if use_color: + message = message.replace( + "$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ) + else: + message = message.replace("$RESET", "").replace("$BOLD", "") + return message + + +class ColoredFormatter(logging.Formatter): + ''' + Custom logger class for changing levels color + ''' + def __init__(self, msg, use_color=True): + logging.Formatter.__init__(self, msg) + self.use_color = use_color + + def format(self, record): + COLOR_SEQ = "\033[1;%dm" + RESET_SEQ = "\033[0m" + BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) + COLORS = { + 'WARNING': YELLOW, + 'INFO': WHITE, + 'DEBUG': BLUE, + 'CRITICAL': YELLOW, + 'ERROR': RED + } + levelname = record.levelname + if self.use_color and levelname in COLORS: + levelname_color = COLOR_SEQ % ( + 30 + COLORS[levelname]) + levelname + RESET_SEQ + record.levelname = levelname_color + return logging.Formatter.format(self, record) + + +class ColoredLogger(logging.Logger): + ''' + Custom logger class with multiple destinations + ''' + FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s] %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)" + COLOR_FORMAT = formatter_message(FORMAT, True) + + def __init__(self, name): + logging.Logger.__init__(self, name, logging.DEBUG) + + color_formatter = ColoredFormatter(self.COLOR_FORMAT) + + console = logging.StreamHandler() + console.setFormatter(color_formatter) + + self.addHandler(console) + return \ No newline at end of file diff --git a/tardis_env27.yml b/tardis_env27.yml index 000d7cda80b..a5e219f647a 100644 --- a/tardis_env27.yml +++ b/tardis_env27.yml @@ -1,9 +1,7 @@ name: tardis channels: - - defaults - conda-forge - - bioconda dependencies: - python=2.7 @@ -15,7 +13,7 @@ dependencies: - matplotlib=2.0 - astropy=1.3 - numexpr=2.6 -#- Cython=0.28 +- Cython=0.28.4 - networkx=1.10 - pytest=3.0 - pyyaml=3.12 @@ -26,22 +24,25 @@ dependencies: # RTD requirements - sphinx=1.5.1 -- nbconvert=4.2.0 +- nbconvert - numpydoc=0.8 - docutils=0.13.1 -- nbformat=4.0.1 +- nbformat - nbsphinx +- jupyter #Coverage requirements - coverage=3.7.1 - requests=2.9.1 - docopt=0.6.2 - pytest-cov=2.2.1 - +- codecov +#testing requirements +- git-lfs=2.4 - pip: - sphinx_bootstrap_theme - sphinxcontrib-bibtex - sphinxcontrib-tikz - - coveralls - pytest-html==1.10.0 - dokuwiki - dot2tex + - sphinx-jsonschema diff --git a/tardis_env3.yml b/tardis_env3.yml new file mode 100644 index 00000000000..c757e460d5b --- /dev/null +++ b/tardis_env3.yml @@ -0,0 +1,63 @@ +name: tardis + +channels: + - conda-forge + - main + +dependencies: +- python=3 +- numpy=1.15 +- scipy=1.1 +- pandas=0.24 +- astropy=3 + +- numexpr +- Cython=0.29 + +# Plasma +- networkx + +# I/O +- pyyaml +- jsonschema +- pyne=0.5 +- pytables +- h5py + +# Analysis +- jupyter +- notebook +- matplotlib +- graphviz +- pygraphviz + +# Documentation +- sphinx +- nbconvert +- numpydoc +- docutils +- nbformat +- nbsphinx +- sphinx_bootstrap_theme +- sphinxcontrib-bibtex +- sphinx_rtd_theme + +#Test/Coverage requirements +- git-lfs +- pytest +- pytest-html +- requests +- coverage +- docopt +- pytest-cov +- codecov + + +- pip: + # Documentation + - sphinxcontrib-tikz + + - dokuwiki + - dot2tex + - sphinx-jsonschema + - git+https://github.com/Naereen/dot2tex.git