diff --git a/docs/Notes/pleiades_config_workflow.md b/docs/Notes/pleiades_config_workflow.md new file mode 100644 index 00000000..0e7d84a4 --- /dev/null +++ b/docs/Notes/pleiades_config_workflow.md @@ -0,0 +1,202 @@ +PLEIADES YAML config + workflow (draft) +====================================== + +Purpose +------- +This note defines the draft YAML structure that instructs PLEIADES how to process data, +configure SAMMY, and execute fitting routines. It reflects the desired directory layout +for multi-fit workflows and serves as a working specification for end-to-end operation. + +Backbone + reproducibility intent +--------------------------------- +The YAML file is intended to be the backbone structure for running PLEIADES. It should: +- Define the complete workspace layout for consistent file placement. +- Declare datasets and fit routines in a single, structured source of truth. +- Record each run as an append-only entry for analysis provenance and reproducibility. +- Capture configuration inputs (fit options, nuclear parameters, data sources) alongside + execution details (backend, paths, outputs) to enable re-running or auditing results. +This makes the config both an operational entry point and a durable record of analysis. + +Directory layout +---------------- +working_dir/ + endf_dir/ + isotope_dir_1/ + results_dir/ + dummy.inp + dummy.par + isotope_dir_2/ + ... + fitting_dir/ + / + results_dir/ + input.inp + params.par + results_dir/ + run_results_*.json + results_map.json + data_dir/ + .dat + image_dir/ + ... + config.yaml + +Notes: +- The SAMMY fit directory is named after the routine_id. +- The data file for a run is keyed by routine_id: data_dir/.dat +- endf_dir should map to PleiadesConfig.nuclear_data_cache_dir so NuclearDataManager + uses it for ENDF caching. +- For the docker backend, ``sammy.docker.image_name`` should be digest-pinned + (``repo/image@sha256:...``) or at least use an explicit non-mutable version + tag (for example ``repo/image:1.2.3``); unpinned or mutable tags are rejected. + +Draft YAML schema (example) +--------------------------- +pleiades_version: 2 + +workspace: + root: /path/to/working_dir + endf_dir: ${workspace.root}/endf_dir + fitting_dir: ${workspace.root}/fitting_dir + results_dir: ${workspace.root}/results_dir + data_dir: ${workspace.root}/data_dir + image_dir: ${workspace.root}/image_dir + +nuclear: + sources: + DIRECT: https://www-nds.iaea.org/public/download-endf + API: https://www-nds.iaea.org/exfor/servlet + default_library: ENDF-B-VIII.0 + isotopes: + - isotope: "U-235" + abundance: 0.0072 + vary_abundance: 0 + endf_library: ENDF-B-VIII.0 + - isotope: "U-238" + abundance: 0.9928 + vary_abundance: 0 + +sammy: + backend: local # local | docker | nova + local: + sammy_executable: /path/to/sammy + shell_path: /bin/bash + env_vars: {} + docker: + # Use a pinned digest when possible; vetted version tags are acceptable fallback. + image_name: kedokudo/sammy-docker:1.0.0 + container_working_dir: /sammy/work + container_data_dir: /sammy/data + nova: + url: ${NOVA_URL} + api_key: ${NOVA_API_KEY} + tool_id: neutrons_imaging_sammy + timeout: 3600 + +datasets: + example_dataset: + description: "Natural Si transmission" + data_kind: raw_imaging # raw_imaging | sammy_dat | sammy_twenty + raw: + facility: ornl + sample_folders: + - /path/to/sample/run_1 + ob_folders: + - /path/to/ob/run_1 + nexus_dir: /path/to/nexus + roi: + x1: 0 + y1: 0 + width: 512 + height: 512 + image_dir: ${workspace.image_dir} + processed: + transmission_files: [] + energy_units: eV + cross_section_units: barn + path_to_data_files: ${workspace.data_dir}/example_fit.dat + metadata: {} + +fit_routines: + example_fit: + dataset_id: example_dataset + mode: fitting # fitting | endf_extraction | multi_isotope + update_from_results: false + fit_config: + fit_title: "SAMMY Fit" + tolerance: null + max_iterations: 1 + i_correlation: 50 + max_cpu_time: null + max_wall_time: null + max_memory: null + max_disk: null + nuclear_params: {} # pleiades.nuclear.models.nuclearParameters + physics_params: {} # pleiades.experimental.models.PhysicsParameters + data_params: {} # pleiades.sammy.data.options.SammyData + options_and_routines: {} # pleiades.sammy.fitting.options.FitOptions +runs: + - run_id: run_001 + routine_id: example_fit + dataset_id: example_dataset + created_at: "2026-01-14T12:00:00Z" + fit_dir: ${workspace.fitting_dir}/example_fit + results_dir: ${workspace.fitting_dir}/example_fit/results_dir + input_files: + inp: ${workspace.fitting_dir}/example_fit/input.inp + par: ${workspace.fitting_dir}/example_fit/params.par + data: ${workspace.data_dir}/example_fit.dat + output_files: + lpt: ${workspace.fitting_dir}/example_fit/results_dir/SAMMY.LPT + lst: ${workspace.fitting_dir}/example_fit/results_dir/SAMMY.LST + sammy_par: ${workspace.fitting_dir}/example_fit/results_dir/SAMMY.PAR + sammy_execution: + backend: local + success: false + console_output: ${workspace.fitting_dir}/example_fit/results_dir/sammy_console.txt + results: + run_results_path: ${workspace.results_dir}/run_results_001.json + summary: + chi_squared: null + dof: null + reduced_chi_squared: null + +results_index: + per_fit: [] + aggregate: ${workspace.results_dir}/results_map.json + +How this config is used +----------------------- +1) Load config.yaml into PleiadesConfig (workspace + nuclear + sammy + datasets + routines). +2) Resolve dataset inputs: + - raw_imaging: run normalization to produce transmission data, then export + to data_dir/.dat (or .twenty). + - sammy_dat/sammy_twenty: use path_to_data_files or input_files.data directly. +3) Cache isotope data with NuclearDataManager: + - Use nuclear.isotopes for FitConfig population. + - If isotopic data is not already cached, download using nuclear.data_cache_dir + (default: ~/.pleiades/nuclear_data) and default_library. +4) Create a run record: + - Append a new entry to runs with run_id, routine_id, dataset_id, and paths. + - Capture runtime metadata (timestamps, user, host, software versions). +5) Build SAMMY inputs: + - Construct FitConfig from fit_routines..fit_config. + - Write input.inp and params.par via InpManager and ParManager into the fit_dir. +6) Execute SAMMY: + - Instantiate SammyRunner via SammyFactory using sammy.backend. + - Run SAMMY with SammyFiles; collect output files in results_dir. +7) Parse outputs: + - LptManager and LstManager create RunResults. + - Serialize RunResults to JSON and store the path in runs[].results. +8) Record provenance and reproducibility: + - Persist config snapshot, SAMMY outputs, and run metadata together. + - Store git commit, environment, and dependency versions for re-running. +9) Optional iteration: + - If update_from_results is true, update FitConfig for the next run. + +ENDF integration +---------------- +- NuclearDataManager uses PleiadesConfig.nuclear_data_cache_dir as its cache root. +- If nuclear.data_cache_dir is omitted, it defaults to ~/.pleiades/nuclear_data. +- When provided, nuclear.data_cache_dir overrides the default and can be placed + under workspace.endf_dir or any other location. diff --git a/docs/api/pleiades.sammy.io.card_formats.inp03_constants.rst b/docs/api/pleiades.sammy.io.card_formats.inp03_constants.rst deleted file mode 100644 index 1b85a46a..00000000 --- a/docs/api/pleiades.sammy.io.card_formats.inp03_constants.rst +++ /dev/null @@ -1,7 +0,0 @@ -pleiades.sammy.io.card\_formats.inp03\_constants module -======================================================= - -.. automodule:: pleiades.sammy.io.card_formats.inp03_constants - :members: - :show-inheritance: - :undoc-members: diff --git a/docs/api/pleiades.sammy.io.card_formats.inp03_density.rst b/docs/api/pleiades.sammy.io.card_formats.inp03_density.rst deleted file mode 100644 index a8762f37..00000000 --- a/docs/api/pleiades.sammy.io.card_formats.inp03_density.rst +++ /dev/null @@ -1,7 +0,0 @@ -pleiades.sammy.io.card\_formats.inp03\_density module -===================================================== - -.. automodule:: pleiades.sammy.io.card_formats.inp03_density - :members: - :show-inheritance: - :undoc-members: diff --git a/docs/api/pleiades.sammy.io.card_formats.inp05_broadening.rst b/docs/api/pleiades.sammy.io.card_formats.inp05_broadening.rst new file mode 100644 index 00000000..20d48788 --- /dev/null +++ b/docs/api/pleiades.sammy.io.card_formats.inp05_broadening.rst @@ -0,0 +1,7 @@ +pleiades.sammy.io.card\_formats.inp05\_broadening module +======================================================== + +.. automodule:: pleiades.sammy.io.card_formats.inp05_broadening + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/api/pleiades.sammy.io.card_formats.inp07_density.rst b/docs/api/pleiades.sammy.io.card_formats.inp07_density.rst new file mode 100644 index 00000000..cfc635ef --- /dev/null +++ b/docs/api/pleiades.sammy.io.card_formats.inp07_density.rst @@ -0,0 +1,7 @@ +pleiades.sammy.io.card\_formats.inp07\_density module +===================================================== + +.. automodule:: pleiades.sammy.io.card_formats.inp07_density + :members: + :show-inheritance: + :undoc-members: diff --git a/docs/api/pleiades.sammy.io.card_formats.rst b/docs/api/pleiades.sammy.io.card_formats.rst index f2eb5c2d..3dc9e007 100644 --- a/docs/api/pleiades.sammy.io.card_formats.rst +++ b/docs/api/pleiades.sammy.io.card_formats.rst @@ -13,8 +13,8 @@ Submodules :maxdepth: 4 pleiades.sammy.io.card_formats.inp02_element - pleiades.sammy.io.card_formats.inp03_constants - pleiades.sammy.io.card_formats.inp03_density + pleiades.sammy.io.card_formats.inp05_broadening + pleiades.sammy.io.card_formats.inp07_density pleiades.sammy.io.card_formats.inp04_particlepairs pleiades.sammy.io.card_formats.inp10_spingroups pleiades.sammy.io.card_formats.par01_resonances diff --git a/docs/guides/input_preparation.rst b/docs/guides/input_preparation.rst index 09238ea2..1490fee7 100644 --- a/docs/guides/input_preparation.rst +++ b/docs/guides/input_preparation.rst @@ -69,24 +69,29 @@ INP File Generation The INP file controls SAMMY execution parameters. PLEIADES generates INP files through :class:`~pleiades.sammy.io.inp_manager.InpManager`. -Material Properties -^^^^^^^^^^^^^^^^^^^ +Dataset Metadata +^^^^^^^^^^^^^^^^ -Define material properties as a dictionary: +Define typed dataset metadata and fit configuration: .. code-block:: python - material_props = { - 'element': 'Au', # Element symbol - 'mass_number': 197, # Isotope mass number - 'density_g_cm3': 19.32, # Material density (g/cm³) - 'thickness_mm': 0.025, # Sample thickness (mm) - 'atomic_mass_amu': 196.966569, # Atomic mass (amu) - 'abundance': 1.0, # Isotopic abundance (0-1) - 'min_energy': 1.0, # Minimum energy (eV) - 'max_energy_eV': 200.0, # Maximum energy (eV) - 'temperature_K': 293.6, # Sample temperature (K) - } + from pleiades.sammy.fitting.config import FitConfig + from pleiades.sammy.io.inp_manager import InpDatasetMetadata + + fit_config = FitConfig() + fit_config.physics_params.broadening_parameters.crfn = 8.0 + + dataset_metadata = InpDatasetMetadata( + element="Au", + mass_number=197, + density_g_cm3=19.32, + thickness_mm=0.025, + atomic_mass_amu=196.966569, + min_energy_eV=1.0, + max_energy_eV=200.0, + temperature_K=293.6, + ) Creating the INP File ^^^^^^^^^^^^^^^^^^^^^ @@ -94,20 +99,21 @@ Creating the INP File .. code-block:: python from pathlib import Path - from pleiades.sammy.io.inp_manager import InpManager - - # Material properties - material_props = { - 'element': 'Au', - 'mass_number': 197, - 'density_g_cm3': 19.32, - 'thickness_mm': 0.025, - 'atomic_mass_amu': 196.966569, - 'abundance': 1.0, - 'min_energy': 1.0, - 'max_energy_eV': 200.0, - 'temperature_K': 293.6, - } + from pleiades.sammy.fitting.config import FitConfig + from pleiades.sammy.io.inp_manager import InpDatasetMetadata, InpManager + + fit_config = FitConfig() + fit_config.physics_params.broadening_parameters.crfn = 8.0 + dataset_metadata = InpDatasetMetadata( + element="Au", + mass_number=197, + density_g_cm3=19.32, + thickness_mm=0.025, + atomic_mass_amu=196.966569, + min_energy_eV=1.0, + max_energy_eV=200.0, + temperature_K=293.6, + ) # Resolution function file (facility-specific) resolution_file = Path("/path/to/resolution_function.dat") @@ -116,8 +122,9 @@ Creating the INP File inp_file = Path("./working/analysis.inp") InpManager.create_multi_isotope_inp( inp_file, + fit_config=fit_config, title="Au-197 neutron transmission analysis", - material_properties=material_props, + dataset_metadata=dataset_metadata, resolution_file_path=resolution_file, ) @@ -261,7 +268,8 @@ Putting it all together: .. code-block:: python from pathlib import Path - from pleiades.sammy.io.inp_manager import InpManager + from pleiades.sammy.fitting.config import FitConfig + from pleiades.sammy.io.inp_manager import InpDatasetMetadata, InpManager from pleiades.sammy.io.json_manager import JsonManager from pleiades.sammy.io.data_manager import convert_csv_to_sammy_twenty from pleiades.sammy.interface import SammyFilesMultiMode @@ -289,24 +297,27 @@ Putting it all together: working_dir=str(working_dir), ) - # 3. Create INP file - material_props = { - 'element': 'Au', - 'mass_number': 197, - 'density_g_cm3': 19.32, - 'thickness_mm': 0.025, - 'atomic_mass_amu': 196.966569, - 'abundance': 1.0, - 'min_energy': 1.0, - 'max_energy_eV': 200.0, - 'temperature_K': 293.6, - } + # 3. Create INP file from FitConfig + typed metadata + fit_config = FitConfig() + fit_config.physics_params.broadening_parameters.crfn = 8.0 + + dataset_metadata = InpDatasetMetadata( + element="Au", + mass_number=197, + density_g_cm3=19.32, + thickness_mm=0.025, + atomic_mass_amu=196.966569, + min_energy_eV=1.0, + max_energy_eV=200.0, + temperature_K=293.6, + ) inp_file = working_dir / "au_fitting.inp" InpManager.create_multi_isotope_inp( inp_file, + fit_config=fit_config, title="Au-197 analysis", - material_properties=material_props, + dataset_metadata=dataset_metadata, resolution_file_path=Path("/path/to/resolution.dat"), ) diff --git a/examples/Notebooks/pleiades_Si_transmission.ipynb b/examples/Notebooks/functionality/pleiades_Si_transmission.ipynb similarity index 100% rename from examples/Notebooks/pleiades_Si_transmission.ipynb rename to examples/Notebooks/functionality/pleiades_Si_transmission.ipynb diff --git a/examples/Notebooks/pleiades_endf_retrieval_caching.ipynb b/examples/Notebooks/functionality/pleiades_endf_retrieval_caching.ipynb similarity index 100% rename from examples/Notebooks/pleiades_endf_retrieval_caching.ipynb rename to examples/Notebooks/functionality/pleiades_endf_retrieval_caching.ipynb diff --git a/examples/Notebooks/pleiades_logging_tutorial.ipynb b/examples/Notebooks/functionality/pleiades_logging_tutorial.ipynb similarity index 100% rename from examples/Notebooks/pleiades_logging_tutorial.ipynb rename to examples/Notebooks/functionality/pleiades_logging_tutorial.ipynb diff --git a/examples/Notebooks/pleiades_sammy_endf.ipynb b/examples/Notebooks/functionality/pleiades_sammy_endf.ipynb similarity index 100% rename from examples/Notebooks/pleiades_sammy_endf.ipynb rename to examples/Notebooks/functionality/pleiades_sammy_endf.ipynb diff --git a/examples/Notebooks/pleiades_sammy_parFile.ipynb b/examples/Notebooks/functionality/pleiades_sammy_parFile.ipynb similarity index 100% rename from examples/Notebooks/pleiades_sammy_parFile.ipynb rename to examples/Notebooks/functionality/pleiades_sammy_parFile.ipynb diff --git a/examples/Notebooks/getting_started/pleiades_config.ipynb b/examples/Notebooks/getting_started/pleiades_config.ipynb new file mode 100644 index 00000000..67c4cb13 --- /dev/null +++ b/examples/Notebooks/getting_started/pleiades_config.ipynb @@ -0,0 +1,172 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "87ea1625", + "metadata": {}, + "source": [ + "# PleiadesConfig\n", + "\n", + "`PleiadesConfig` is the backbone configuration object for PLEIADES. It\n", + "captures **what to run**, **where to run it**, and **what inputs/results\n", + "belong to each fit**. The goal is to keep a single, reproducible record\n", + "of the workflow so a run can be re-created later from the same config.\n", + "\n", + "In practice it: \n", + "- Defines the workspace directory layout used by SAMMY runs.\n", + "- Records nuclear inputs (isotopes + ENDF libraries).\n", + "- Declares datasets and fit routines to run.\n", + "- Serves as the source of record for a given execution of SAMMY with PLEIADES.\n", + "- Tracks run metadata and result locations.\n" + ] + }, + { + "cell_type": "markdown", + "id": "f4778af4", + "metadata": {}, + "source": [ + "## Create a PleiadesConfig from scratch in Python\n", + "\n", + "Below we build a small PleiadesConfig with a workspace, a single isotope (Ta-181), and\n", + "the infomation of the fit routine.\n", + "\n", + "This has the following substructures \n", + "#### PleiadesConfig (overall)\n", + "- A working record of a given PLEIADES run: workspace layout, nuclear inputs, datasets, fit routines, results and metadata are all stored.\n", + "- Designed to make runs reproducible by keeping config + outputs + run metadata together.\n", + "\n", + "\n", + "#### WorkspaceConfig\n", + "- `root`: top-level workspace folder for all run artifacts.\n", + "- `endf_dir`: cache location for ENDF resonance files (defaults to the nuclear cache).\n", + "- `fitting_dir`: per‑routine working directories where `SAMMY` is executed.\n", + "- `results_dir`: top‑level results folder for aggregated outputs across run routines.\n", + "- `data_dir`: location for input data files (e.g., transmission `.dat`/`.twenty`).\n", + "- `image_dir`: optional location where the energy-resolved neutron imaging data is stored.\n", + "\n", + "#### NuclearConfig\n", + "- `data_cache_dir`: root cache for ENDF resonance files (defaults to ~/.pleiades/nuclear_data).\n", + "- `sources`: URLs for ENDF retrieval (DIRECT/API).\n", + "- `default_library`: default ENDF library if not specified per isotope.\n", + "- `isotopes`: list of isotope entries to seed runs; used to populate fit_config.nuclear_params.isotopes (unless overridden per routine).\n", + "\n", + "#### SammyConfig\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63d58d26", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pleiades_version=1 workspace=WorkspaceConfig(root=PosixPath('/tmp/pleiades_workspace'), endf_dir=PosixPath('/Users/alexlong/.pleiades/nuclear_data'), fitting_dir=PosixPath('/tmp/pleiades_workspace/fitting_dir'), results_dir=PosixPath('/tmp/pleiades_workspace/results_dir'), data_dir=PosixPath('/tmp/pleiades_workspace/data_dir'), image_dir=PosixPath('/tmp/pleiades_workspace/image_dir')) nuclear=NuclearConfig(data_cache_dir=PosixPath('/Users/alexlong/.pleiades/nuclear_data'), sources={'DIRECT': 'https://www-nds.iaea.org/public/download-endf', 'API': 'https://www-nds.iaea.org/exfor/servlet'}, default_library=, isotopes=[IsotopeConfig(isotope='Ta-181', abundance=0.016, uncertainty=None, vary_abundance=, endf_library=)]) sammy=None datasets={} fit_routines={'example_fit': {'dataset_id': 'example_dataset'}} runs=[] results_index={} nuclear_data_cache_dir=PosixPath('/Users/alexlong/.pleiades/nuclear_data') nuclear_data_sources={'DIRECT': 'https://www-nds.iaea.org/public/download-endf', 'API': 'https://www-nds.iaea.org/exfor/servlet'}\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "\n", + "from pleiades.utils.config import PleiadesConfig, WorkspaceConfig, NuclearConfig\n", + "\n", + "# Workspace paths for generated files and SAMMY runs\n", + "workspace = WorkspaceConfig(\n", + " root=Path(\"/tmp/pleiades_workspace\"),\n", + " fitting_dir=Path(\"/tmp/pleiades_workspace/fitting_dir\"),\n", + " results_dir=Path(\"/tmp/pleiades_workspace/results_dir\"),\n", + " data_dir=Path(\"/tmp/pleiades_workspace/data_dir\"),\n", + " image_dir=Path(\"/tmp/pleiades_workspace/image_dir\"),\n", + ")\n", + "\n", + "# Minimal nuclear configuration with one isotope\n", + "nuclear = NuclearConfig(\n", + " isotopes=[\n", + " {\"isotope\": \"Ta-181\", \"abundance\": 0.016, \"vary_abundance\": True},\n", + " ]\n", + ")\n", + "\n", + "# Fit routines must be present when loading from YAML\n", + "config = PleiadesConfig(\n", + " pleiades_version=1,\n", + " workspace=workspace,\n", + " nuclear=nuclear,\n", + " fit_routines={\"example_fit\": {\"dataset_id\": \"example_dataset\"}},\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "abba9881", + "metadata": {}, + "source": [ + "## Export to a YAML-friendly dictionary\n", + "\n", + "`to_dict()` converts the Pydantic model into plain Python values that\n", + "can be serialized to YAML.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08cd43b8", + "metadata": {}, + "outputs": [], + "source": [ + "config.to_dict()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load from YAML\n", + "\n", + "The example YAML file lives next to this notebook at\n", + "`examples/Notebooks/getting_started/pleiades_config.yaml`.\n", + "Loading uses the same validation rules as the Python model.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pleiades.utils.config import PleiadesConfig\n", + "\n", + "yaml_path = Path(\"examples/Notebooks/getting_started/pleiades_config.yaml\")\n", + "loaded_config = PleiadesConfig.load(yaml_path)\n", + "\n", + "loaded_config\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Notes\n", + "\n", + "- `fit_routines` is required when loading from YAML.\n", + "- `workspace.endf_dir` defaults to the nuclear data cache if omitted.\n", + "- Isotopes are normalized so a missing `endf_library` defaults to ENDF-B-VIII.0.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "default", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.11.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/Notebooks/getting_started/pleiades_config.yaml b/examples/Notebooks/getting_started/pleiades_config.yaml new file mode 100644 index 00000000..8ddf85fe --- /dev/null +++ b/examples/Notebooks/getting_started/pleiades_config.yaml @@ -0,0 +1,22 @@ +pleiades_version: 1 + +workspace: + root: /tmp/pleiades_workspace + fitting_dir: ${workspace.root}/fitting_dir + results_dir: ${workspace.root}/results_dir + data_dir: ${workspace.root}/data_dir + image_dir: ${workspace.root}/image_dir + +nuclear: + isotopes: + - isotope: Ta-181 + abundance: 0.016 + vary_abundance: true + default_library: ENDF-B-VIII.0 + +fit_routines: + example_fit: + dataset_id: example_dataset + +runs: [] +results_index: {} diff --git a/examples/samexm/ex012/results/SAMMY.PAR b/examples/samexm/ex012/results/SAMMY.PAR deleted file mode 100644 index b2773ccb..00000000 --- a/examples/samexm/ex012/results/SAMMY.PAR +++ /dev/null @@ -1,207 +0,0 @@ --3661600.00 158770.000 4075253.+3 0.0000 0 0 1 0 1 --873730.000 1025.30000 101.510303 0.0000 0 0 1 0 1 --365290.000 1000.00000 30.4060000 0.0000 0 0 0 0 1 --63159.0000 1000.00000 46.8940000 0.0000 0 0 0 0 1 --48801.0000 1000.00000 9.24960000 0.0000 0 0 0 0 1 -31739.99805 1000.00000 15.6670000 0.0000 0.0000 0 0 0 0 0 5 -55676.96094 1580.30000 653310.000 0.0000 0 0 0 0 1 -67732.84375 2500.00000 2658.90000 0.0000 0 0 0 0 3 -70800.00781 1000.00000 29.6170000 0.0000 0.0000 0 0 0 0 0 5 -86797.35938 2500.00000 726.180000 0.0000 0 0 0 0 3 -181617.5000 5600.00000 34894000.0 0.0000 0 0 0 0 1 -298700.0000 1000.00000 9886.00000 0.0000 0.0000 0 0 0 0 0 5 -301310.8125 3600.00000 2354.80000 0.0000 0 0 0 0 1 -354588.6875 1000.00000 14460.0000 0.0000 0.0000 0 0 0 0 0 5 -399675.9375 660.000000 813.610000 0.0000 0 0 0 0 3 -532659.8750 2500.00000 532810.000 0.0000 0 0 0 0 3 -565576.8750 2900.00000 10953000.0 0.0000 0 0 0 0 3 -587165.7500 8800.00000 199160.000 0.0000 0 0 0 0 2 -590290.1250 3600.00000 523660.000 0.0000 0 0 0 0 1 -602467.3125 3400.00000 50491.0000 0.0000 0.0000 0 0 0 0 0 4 -714043.4375 2500.00000 1216.50000 0.0000 0 0 0 0 3 -771711.9375 1000.00000 53139.0000 0.0000 0.0000 0 0 0 0 0 5 -812491.6250 9700.00000 30100000.0 0.0000 0 0 0 0 3 -845233.8750 2000.00000 397910.000 0.0000 0.0000 0 0 0 0 0 4 -872305.8125 1300.00000 32140.0000 0.0000 0.0000 0 0 0 0 0 5 -910043.5625 1130.00000 3673300.00 0.0000 0 0 0 0 3 -962233.0000 16000.0000 76614000.0 0.0000 0 0 0 0 2 -1017777.188 1000.00000 76192.0000 0.0000 0.0000 0 0 0 0 0 5 -1042856.812 1000.00000 933700.000 0.0000 0.0000 0 0 0 0 0 5 -1085169.250 3600.00000 72794.0000 0.0000 0 0 0 0 1 -1148103.625 1000.00000 3146.90000 0.0000 0.0000 0 0 0 0 0 5 -1162663.625 3800.00000 3013600.00 0.0000 0 0 0 0 1 -1199501.375 7600.00000 14914000.0 0.0000 0 0 0 0 2 -1201238.750 3600.00000 4601200.00 0.0000 0 0 0 0 1 -1256447.250 3600.00000 17383000.0 0.0000 0 0 0 0 1 -1264441.750 1000.00000 843640.000 0.0000 0.0000 0 0 0 0 0 5 -1379920.250 2400.00000 65299.0000 0.0000 0.0000 0 0 0 0 0 4 -1408269.750 2700.00000 5198300.00 0.0000 0 0 0 0 3 -1479927.250 1650.00000 3502500.00 0.0000 0.0000 0 0 0 0 0 4 -1482395.375 8800.00000 886.940000 0.0000 0 0 0 0 2 -1512343.875 1000.00000 91493.0000 0.0000 0.0000 0 0 0 0 0 5 -1528742.375 2400.00000 2922500.00 0.0000 0.0000 0 0 0 0 0 4 -1580564.875 2400.00000 1495500.00 0.0000 0.0000 0 0 0 0 0 4 -1592844.250 8800.00000 11199000.0 0.0000 0 0 0 0 2 -1597168.625 2400.00000 4017200.00 0.0000 0.0000 0 0 0 0 0 4 -1639561.500 1000.00000 15293000.0 0.0000 0.0000 0 0 0 0 0 5 -1651146.000 1000.00000 21555000.0 0.0000 0.0000 0 0 0 0 0 5 -1658595.000 8800.00000 1555300.00 0.0000 0 0 0 0 2 -1664961.125 2400.00000 215900.000 0.0000 0.0000 0 0 0 0 0 4 -1784952.750 2400.00000 192940.000 0.0000 0.0000 0 0 0 0 0 4 -1805652.625 2500.00000 1299100.00 0.0000 0 0 0 0 3 -1850667.250 1000.00000 35515000.0 0.0000 0.0000 0 0 0 0 0 5 -1852435.250 2500.00000 70707000.0 0.0000 0 0 0 0 3 -1923655.250 1000.00000 1017100.00 0.0000 0.0000 0 0 0 0 0 5 -2248678.250 3600.00000 444760000. 0.0000 0 0 0 0 1 -1968869.750 1000.00000 5734100.00 0.0000 0.0000 0 0 0 0 0 5 -3007280.500 3600.00000 289960.000 0.0000 0 0 0 0 1 -3067775.250 3600.00000 422290.000 0.0000 0 0 0 0 1 --2179600.00 409080.000 1722200.+3 0 0 0 8 --860240.000 999.970000 34170000.0 0 0 0 8 --431280.000 1005.90000 228510000. 0 0 0 8 -15282.00000 1646.00000 10000.0000 0 0 0 10 -38819.00000 2400.00000 75926.0000 0 0 0 13 -159682.9688 1900.00000 1200300.00 0 0 0 10 -184456.4844 1500.00000 136740.000 0 0 0 10 -336790.2812 800.000000 2512800.00 0 0 0 10 -385764.1875 4670.00000 24133000.0 0 0 0 9 -552241.8125 5700.00000 1298900.00 0 0 0 13 -566558.4375 3000.00000 70820000.0 0 0 0 10 -619664.6250 3000.00000 725960.000 0 0 0 13 -649726.0000 3000.00000 1095900.00 0 0 0 13 -653064.6250 6300.00000 19386000.0 0 0 0 12 -715064.6250 300.000000 978570.000 0 0 0 10 -716771.3125 3000.00000 219300000. 0 0 0 8 -802258.9375 3000.00000 9934900.00 0 0 0 15 -862003.6875 3000.00000 432930000. 0 0 0 8 -872483.5000 300.000000 17335000.0 0 0 0 10 -955891.2500 300.000000 982890.000 0 0 0 13 -1098425.500 3000.00000 57787.0000 0 0 0 15 -1113807.625 300.000000 76533000.0 0 0 0 10 -1122279.500 300.000000 4881600.00 0 0 0 13 -1178601.750 3000.00000 8295900.00 0 0 0 9 -1192267.500 300.000000 375060.000 0 0 0 12 -1207629.500 300.000000 19795000.0 0 0 0 13 -1388859.125 3000.00000 4271400.00 0 0 0 15 -1769072.750 3000.00000 32136.0000 0 0 0 8 -2248487.000 3000.00000 169320.000 0 0 0 8 --1185100.00 118480.000 260570000. 0 0 0 18 --161550.000 650.000000 426400.000 0 0 0 18 -2235.000000 370.000000 932.660000 0 0 0 20 -4977.000000 600.000000 1122.00000 0 0 0 19 -183488.8281 6000.00000 9997600.00 0 0 0 18 -235225.3906 800.000000 115410.000 0 0 0 21 -302839.2188 370.000000 274430.000 0 0 0 20 -413136.1875 600.000000 1580100.00 0 0 0 19 -645239.8125 800.000000 401430.000 0 0 0 21 -704912.0000 800.000000 423190.000 0 0 0 21 -745454.0000 370.000000 14735000.0 0 0 0 20 -796946.1250 600.000000 469320.000 0 0 0 19 -807379.8125 600.000000 274330.000 0 0 0 19 -810796.9375 600.000000 419310.000 0 0 0 19 -844674.6250 370.000000 3315300.00 0 0 0 20 -878822.8125 800.000000 110630.000 0 0 0 21 -979821.3125 600.000000 591820.000 0 0 0 19 -1182175.750 6000.00000 5912400.00 0 0 0 18 -1217821.125 800.000000 1888900.00 0 0 0 21 -1274871.500 600.000000 2225500.00 0 0 0 19 -1302032.875 800.000000 304790.000 0 0 0 21 -1310774.875 370.000000 339710.000 0 0 0 20 -1337984.375 600.000000 4624000.00 0 0 0 19 -1356024.750 370.000000 12271000.0 0 0 0 20 -1383597.625 600.000000 25336000.0 0 0 0 19 -1400981.375 800.000000 1897600.00 0 0 0 21 -1412107.750 370.000000 668620.000 0 0 0 20 -1586007.000 6000.00000 23644000.0 0 0 0 18 -2583249.500 6000.00000 92076000.0 0 0 0 18 --11592000.0 1200.00000 7517400.+3 0 0 0 23 --9192600.00 1200.00000 1435600.+4 0 0 0 23 -433901.3750 1200.00000 43760000.0 0 0 0 25 -999736.9375 1200.00000 96583000.0 0 0 0 26 -1307683.875 1200.00000 42027000.0 0 0 0 25 -1630813.125 1200.00000 71367.0000 0 0 0 25 -1650581.000 1200.00000 3901300.00 0 0 0 29 -1833142.125 1200.00000 7835200.00 0 0 0 26 -1898468.875 1200.00000 28678000.0 0 0 0 24 -2372699.000 1200.00000 155330000. 0 0 0 23 -2888249.750 1200.00000 1885900.00 0 0 0 24 -3004838.500 1200.00000 2333.80000 0 0 0 24 -3181814.500 1200.00000 517690000. 0 0 0 24 -3203037.750 1200.00000 179230000. 0 0 0 23 -3204505.000 1200.00000 310910.000 0 0 0 28 -3239197.250 1200.00000 251410000. 0 0 0 26 -3431828.250 1200.00000 615700.000 0 0 0 27 -3438834.250 1200.00000 1803900.00 0 0 0 28 -3636796.000 1200.00000 701840000. 0 0 0 25 -3763624.250 1200.00000 16031000.0 0 0 0 29 -3853751.500 1200.00000 562450000. 0 0 0 23 -4175216.750 1200.00000 70220000.0 0 0 0 26 -4288830.500 1200.00000 56268000.0 0 0 0 25 -4303685.000 1200.00000 16078000.0 0 0 0 24 -4461693.000 1200.00000 77996000.0 0 0 0 23 -4525253.000 1200.00000 4173300.00 0 0 0 27 -4591673.500 1200.00000 91070.0000 0 0 0 29 -4592562.000 1200.00000 175270.000 0 0 0 28 -4816678.000 1200.00000 47145000.0 0 0 0 25 -5055537.000 1200.00000 52134000.0 0 0 0 26 -5118596.000 1200.00000 17864000.0 0 0 0 29 -5365329.500 1200.00000 980620.000 0 0 0 27 -5617318.000 1200.00000 33197000.0 0 0 0 28 -5666636.000 1200.00000 12687000.0 0 0 0 27 -5912201.500 1200.00000 12942000.0 0 0 0 29 -5986110.000 1200.00000 7106100.00 0 0 0 26 -6076846.000 1200.00000 5166700.00 0 0 0 28 -6116665.000 1200.00000 5549900.00 0 0 0 24 -6389893.000 1200.00000 4935600.00 0 0 0 29 -6813680.500 1200.00000 3262900.00 0 0 0 28 -6833136.500 1200.00000 5140500.00 0 0 0 27 -7373000.000 1200.00000 2400000.00 0 0 0 24 -8820920.000 1200.00000 1123400.+4 0 0 0 25 -10934820.00 1200.00000 276110.000 0 0 0 23 -15050371.00 1200.00000 634990.000 0 0 0 23 -25004488.00 1200.00000 6918.60000 0 0 0 23 - -.100000000 -Channel radii in key-word format -Radii= 4.136420, 4.136420 Flags=0,-1 - Group= 1 Chan= 1, 2, - Group= 4 Chan= 1, 2, 3, - Group= 5 Chan= 1, 2, 3, -Radii= 4.943720, 4.943720 Flags=0,-1 - Group= 2 Chan= 1, 2, - Group= 3 Chan= 1, 2, - Group= 6 Chan= 1, 2, 3, - Group= 7 Chan= 1, 2, 3, -Radii= 4.400000, 4.400000 Flags=0,-1 - Group= 8 Chan= 1, - Group= 9 Chan= 1, - Group= 10 Chan= 1, - Group= 11 Chan= 1, - Group= 12 Chan= 1, - Group= 13 Chan= 1, - Group= 14 Chan= 1, - Group= 15 Chan= 1, - Group= 16 Chan= 1, - Group= 17 Chan= 1, -Radii= 4.200000, 4.200000 Flags=0,-1 - Group= 18 Chan= 1, - Group= 19 Chan= 1, - Group= 20 Chan= 1, - Group= 21 Chan= 1, - Group= 22 Chan= 1, -Radii= 4.200000, 4.200000 Flags=0,-1 - Group= 23 Chan= 1, - Group= 24 Chan= 1, - Group= 25 Chan= 1, - Group= 26 Chan= 1, - Group= 27 Chan= 1, - Group= 28 Chan= 1, - Group= 29 Chan= 1, - -NUCLIDE MASSES AND ABUNDANCES FOLLOW -27.9769290 .93272250 .92000000 1 1 2 3 4 5 6 7 -28.9764960 .03877251 .05000000 1 8 91011121314151617 -29.9737720 .02177828 .02000000 11819202122 -16.0000000 1.0000000 .01000000 023242526272829 - -COVARIANCE MATRIX IS IN BINARY FORM diff --git a/examples/samexm/ex012/results/SAMQUA.PAR b/examples/samexm/ex012/results/SAMQUA.PAR deleted file mode 100644 index 12907ac3..00000000 --- a/examples/samexm/ex012/results/SAMQUA.PAR +++ /dev/null @@ -1,299 +0,0 @@ -PARTICLE PAIR DEFINITIONS -Name=Inc Chan Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa= 0.5 Sb= 0.0 Ma= 1.008664915780000 Mb= 27.976928999999 -Name=PPair #2 Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa=999.0 Sb= 999.0 Ma= 1.008664915780000 Mb= 27.976928999999 - Q= -1779000.8742580006 -Name=PPair #4 Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa= 0.5 Sb= 0.0 Ma= 1.008664915780000 Mb= 27.976928999999 - Q= -1779000.8742580006 -Name=Inc Ch#1 Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa= 0.5 Sb= 0.5 Ma= 1.008664915780000 Mb= 28.976496000000 -Name=Inc Ch#2 Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa= 0.5 Sb= 0.0 Ma= 1.008664915780000 Mb= 29.973772000000 -Name=Inc Ch#3 Particle a=neutron Particle b=Other - Za= 0 Zb= 0 Pent=1 Shift=0 - Sa= 0.5 Sb= 0.0 Ma= 1.008664915780000 Mb= 16.000000000000 - -SPIN GROUPS - 1 1 1 0.5 1.0000000 - 1 Inc Chan 0 0.5 - 2 PPair #2 2 1.5 - 2 1 1 -0.5 1.0000000 - 1 Inc Chan 1 0.5 - 2 PPair #4 1 0.5 - 3 1 1 -1.5 1.0000000 - 1 Inc Chan 1 0.5 - 2 PPair #4 1 0.5 - 4 1 2 1.5 1.0000000 - 1 Inc Chan 2 0.5 - 2 PPair #4 2 0.5 - 3 PPair #2 0 1.5 - 5 1 2 2.5 1.0000000 - 1 Inc Chan 2 0.5 - 2 PPair #4 2 0.5 - 3 PPair #2 0 2.5 - 6 1 2 -2.5 1.0000000 - 1 Inc Chan 3 0.5 - 2 PPair #4 3 0.5 - 3 PPair #2 1 2.5 - 7 1 2 -3.5 1.0000000 - 1 Inc Chan 3 0.5 - 2 PPair #4 3 0.5 - 3 PPair #2 1 2.5 - 8 1 0 0.0 0.0467000 - 1 Inc Ch#1 0 0.0 - 9 1 0 1.0 0.0467000 - 1 Inc Ch#1 0 1.0 - 10 1 0 -1.0 0.0467000 - 1 Inc Ch#1 1 0.0 - 11 1 0 -0.0 0.0467000 - 1 Inc Ch#1 1 1.0 - 12 1 0 -1.0 0.0467000 - 1 Inc Ch#1 1 1.0 - 13 1 0 -2.0 0.0467000 - 1 Inc Ch#1 1 1.0 - 14 1 0 2.0 0.0467000 - 1 Inc Ch#1 2 0.0 - 15 1 0 1.0 0.0467000 - 1 Inc Ch#1 2 1.0 - 16 1 0 2.0 0.0467000 - 1 Inc Ch#1 2 1.0 - 17 1 0 3.0 0.0467000 - 1 Inc Ch#1 2 1.0 - 18 1 0 0.5 0.0310000 - 1 Inc Ch#2 0 0.5 - 19 1 0 -0.5 0.0310000 - 1 Inc Ch#2 1 0.5 - 20 1 0 -1.5 0.0310000 - 1 Inc Ch#2 1 0.5 - 21 1 0 1.5 0.0310000 - 1 Inc Ch#2 2 0.5 - 22 1 0 2.5 0.0310000 - 1 Inc Ch#2 2 0.5 - 23 X 1 0 0.5 1.0000000 - 1 Inc Ch#3 0 0.5 - 24 X 1 0 -0.5 1.0000000 - 1 Inc Ch#3 1 0.5 - 25 X 1 0 -1.5 1.0000000 - 1 Inc Ch#3 1 0.5 - 26 X 1 0 1.5 1.0000000 - 1 Inc Ch#3 2 0.5 - 27 X 1 0 2.5 1.0000000 - 1 Inc Ch#3 2 0.5 - 28 X 1 0 -2.5 1.0000000 - 1 Inc Ch#3 3 0.5 - 29 X 1 0 -3.5 1.0000000 - 1 Inc Ch#3 3 0.5 - -RESONANCES are listed next --3661600.00 158770.000 3698500.+3 0.0000 0 0 1 0 1 --873730.000 1025.30000 101.510000 0.0000 0 0 1 0 1 --365290.000 1000.00000 30.4060000 0.0000 0 0 0 0 1 --63159.0000 1000.00000 46.8940000 0.0000 0 0 0 0 1 --48801.0000 1000.00000 9.24960000 0.0000 0 0 0 0 1 -31739.99805 1000.00000 15.6670000 0.0000 0.0000 0 0 0 0 0 5 -55676.96094 1580.30000 653310.000 0.0000 0 0 0 0 1 -67732.84375 2500.00000 2658.90000 0.0000 0 0 0 0 3 -70800.00781 1000.00000 29.6170000 0.0000 0.0000 0 0 0 0 0 5 -86797.35938 2500.00000 726.180000 0.0000 0 0 0 0 3 -181617.5000 5600.00000 34894000.0 0.0000 0 0 0 0 1 -298700.0000 1000.00000 9886.00000 0.0000 0.0000 0 0 0 0 0 5 -301310.8125 3600.00000 2354.80000 0.0000 0 0 0 0 1 -354588.6875 1000.00000 14460.0000 0.0000 0.0000 0 0 0 0 0 5 -399675.9375 660.000000 813.610000 0.0000 0 0 0 0 3 -532659.8750 2500.00000 532810.000 0.0000 0 0 0 0 3 -565576.8750 2900.00000 10953000.0 0.0000 0 0 0 0 3 -587165.7500 8800.00000 199160.000 0.0000 0 0 0 0 2 -590290.1250 3600.00000 523660.000 0.0000 0 0 0 0 1 -602467.3125 3400.00000 50491.0000 0.0000 0.0000 0 0 0 0 0 4 -714043.4375 2500.00000 1216.50000 0.0000 0 0 0 0 3 -771711.9375 1000.00000 53139.0000 0.0000 0.0000 0 0 0 0 0 5 -812491.6250 9700.00000 30100000.0 0.0000 0 0 0 0 3 -845233.8750 2000.00000 397910.000 0.0000 0.0000 0 0 0 0 0 4 -872305.8125 1300.00000 32140.0000 0.0000 0.0000 0 0 0 0 0 5 -910043.5625 1130.00000 3673300.00 0.0000 0 0 0 0 3 -962233.0000 16000.0000 76614000.0 0.0000 0 0 0 0 2 -1017777.188 1000.00000 76192.0000 0.0000 0.0000 0 0 0 0 0 5 -1042856.812 1000.00000 933700.000 0.0000 0.0000 0 0 0 0 0 5 -1085169.250 3600.00000 72794.0000 0.0000 0 0 0 0 1 -1148103.625 1000.00000 3146.90000 0.0000 0.0000 0 0 0 0 0 5 -1162663.625 3800.00000 3013600.00 0.0000 0 0 0 0 1 -1199501.375 7600.00000 14914000.0 0.0000 0 0 0 0 2 -1201238.750 3600.00000 4601200.00 0.0000 0 0 0 0 1 -1256447.250 3600.00000 17383000.0 0.0000 0 0 0 0 1 -1264441.750 1000.00000 843640.000 0.0000 0.0000 0 0 0 0 0 5 -1379920.250 2400.00000 65299.0000 0.0000 0.0000 0 0 0 0 0 4 -1408269.750 2700.00000 5198300.00 0.0000 0 0 0 0 3 -1479927.250 1650.00000 3502500.00 0.0000 0.0000 0 0 0 0 0 4 -1482395.375 8800.00000 886.940000 0.0000 0 0 0 0 2 -1512343.875 1000.00000 91493.0000 0.0000 0.0000 0 0 0 0 0 5 -1528742.375 2400.00000 2922500.00 0.0000 0.0000 0 0 0 0 0 4 -1580564.875 2400.00000 1495500.00 0.0000 0.0000 0 0 0 0 0 4 -1592844.250 8800.00000 11199000.0 0.0000 0 0 0 0 2 -1597168.625 2400.00000 4017200.00 0.0000 0.0000 0 0 0 0 0 4 -1639561.500 1000.00000 15293000.0 0.0000 0.0000 0 0 0 0 0 5 -1651146.000 1000.00000 21555000.0 0.0000 0.0000 0 0 0 0 0 5 -1658595.000 8800.00000 1555300.00 0.0000 0 0 0 0 2 -1664961.125 2400.00000 215900.000 0.0000 0.0000 0 0 0 0 0 4 -1784952.750 2400.00000 192940.000 0.0000 0.0000 0 0 0 0 0 4 -1805652.625 2500.00000 1299100.00 0.0000 0 0 0 0 3 -1850667.250 1000.00000 35515000.0 0.0000 0.0000 0 0 0 0 0 5 -1852435.250 2500.00000 70707000.0 0.0000 0 0 0 0 3 -1923655.250 1000.00000 1017100.00 0.0000 0.0000 0 0 0 0 0 5 -2248678.250 3600.00000 444760000. 0.0000 0 0 0 0 1 -1968869.750 1000.00000 5734100.00 0.0000 0.0000 0 0 0 0 0 5 -3007280.500 3600.00000 289960.000 0.0000 0 0 0 0 1 -3067775.250 3600.00000 422290.000 0.0000 0 0 0 0 1 --2179600.00 409080.000 1722200.+3 0 0 0 8 --860240.000 999.970000 34170000.0 0 0 0 8 --431280.000 1005.90000 228510000. 0 0 0 8 -15282.00000 1646.00000 10000.0000 0 0 0 10 -38819.00000 2400.00000 75926.0000 0 0 0 13 -159682.9688 1900.00000 1200300.00 0 0 0 10 -184456.4844 1500.00000 136740.000 0 0 0 10 -336790.2812 800.000000 2512800.00 0 0 0 10 -385764.1875 4670.00000 24133000.0 0 0 0 9 -552241.8125 5700.00000 1298900.00 0 0 0 13 -566558.4375 3000.00000 70820000.0 0 0 0 10 -619664.6250 3000.00000 725960.000 0 0 0 13 -649726.0000 3000.00000 1095900.00 0 0 0 13 -653064.6250 6300.00000 19386000.0 0 0 0 12 -715064.6250 300.000000 978570.000 0 0 0 10 -716771.3125 3000.00000 219300000. 0 0 0 8 -802258.9375 3000.00000 9934900.00 0 0 0 15 -862003.6875 3000.00000 432930000. 0 0 0 8 -872483.5000 300.000000 17335000.0 0 0 0 10 -955891.2500 300.000000 982890.000 0 0 0 13 -1098425.500 3000.00000 57787.0000 0 0 0 15 -1113807.625 300.000000 76533000.0 0 0 0 10 -1122279.500 300.000000 4881600.00 0 0 0 13 -1178601.750 3000.00000 8295900.00 0 0 0 9 -1192267.500 300.000000 375060.000 0 0 0 12 -1207629.500 300.000000 19795000.0 0 0 0 13 -1388859.125 3000.00000 4271400.00 0 0 0 15 -1769072.750 3000.00000 32136.0000 0 0 0 8 -2248487.000 3000.00000 169320.000 0 0 0 8 --1185100.00 118480.000 260570000. 0 0 0 18 --161550.000 650.000000 426400.000 0 0 0 18 -2235.000000 370.000000 932.660000 0 0 0 20 -4977.000000 600.000000 1122.00000 0 0 0 19 -183488.8281 6000.00000 9997600.00 0 0 0 18 -235225.3906 800.000000 115410.000 0 0 0 21 -302839.2188 370.000000 274430.000 0 0 0 20 -413136.1875 600.000000 1580100.00 0 0 0 19 -645239.8125 800.000000 401430.000 0 0 0 21 -704912.0000 800.000000 423190.000 0 0 0 21 -745454.0000 370.000000 14735000.0 0 0 0 20 -796946.1250 600.000000 469320.000 0 0 0 19 -807379.8125 600.000000 274330.000 0 0 0 19 -810796.9375 600.000000 419310.000 0 0 0 19 -844674.6250 370.000000 3315300.00 0 0 0 20 -878822.8125 800.000000 110630.000 0 0 0 21 -979821.3125 600.000000 591820.000 0 0 0 19 -1182175.750 6000.00000 5912400.00 0 0 0 18 -1217821.125 800.000000 1888900.00 0 0 0 21 -1274871.500 600.000000 2225500.00 0 0 0 19 -1302032.875 800.000000 304790.000 0 0 0 21 -1310774.875 370.000000 339710.000 0 0 0 20 -1337984.375 600.000000 4624000.00 0 0 0 19 -1356024.750 370.000000 12271000.0 0 0 0 20 -1383597.625 600.000000 25336000.0 0 0 0 19 -1400981.375 800.000000 1897600.00 0 0 0 21 -1412107.750 370.000000 668620.000 0 0 0 20 -1586007.000 6000.00000 23644000.0 0 0 0 18 -2583249.500 6000.00000 92076000.0 0 0 0 18 --11592000.0 1200.00000 7517400.+3 0 0 0 23 --9192600.00 1200.00000 1435600.+4 0 0 0 23 -433901.3750 1200.00000 43760000.0 0 0 0 25 -999736.9375 1200.00000 96583000.0 0 0 0 26 -1307683.875 1200.00000 42027000.0 0 0 0 25 -1630813.125 1200.00000 71367.0000 0 0 0 25 -1650581.000 1200.00000 3901300.00 0 0 0 29 -1833142.125 1200.00000 7835200.00 0 0 0 26 -1898468.875 1200.00000 28678000.0 0 0 0 24 -2372699.000 1200.00000 155330000. 0 0 0 23 -2888249.750 1200.00000 1885900.00 0 0 0 24 -3004838.500 1200.00000 2333.80000 0 0 0 24 -3181814.500 1200.00000 517690000. 0 0 0 24 -3203037.750 1200.00000 179230000. 0 0 0 23 -3204505.000 1200.00000 310910.000 0 0 0 28 -3239197.250 1200.00000 251410000. 0 0 0 26 -3431828.250 1200.00000 615700.000 0 0 0 27 -3438834.250 1200.00000 1803900.00 0 0 0 28 -3636796.000 1200.00000 701840000. 0 0 0 25 -3763624.250 1200.00000 16031000.0 0 0 0 29 -3853751.500 1200.00000 562450000. 0 0 0 23 -4175216.750 1200.00000 70220000.0 0 0 0 26 -4288830.500 1200.00000 56268000.0 0 0 0 25 -4303685.000 1200.00000 16078000.0 0 0 0 24 -4461693.000 1200.00000 77996000.0 0 0 0 23 -4525253.000 1200.00000 4173300.00 0 0 0 27 -4591673.500 1200.00000 91070.0000 0 0 0 29 -4592562.000 1200.00000 175270.000 0 0 0 28 -4816678.000 1200.00000 47145000.0 0 0 0 25 -5055537.000 1200.00000 52134000.0 0 0 0 26 -5118596.000 1200.00000 17864000.0 0 0 0 29 -5365329.500 1200.00000 980620.000 0 0 0 27 -5617318.000 1200.00000 33197000.0 0 0 0 28 -5666636.000 1200.00000 12687000.0 0 0 0 27 -5912201.500 1200.00000 12942000.0 0 0 0 29 -5986110.000 1200.00000 7106100.00 0 0 0 26 -6076846.000 1200.00000 5166700.00 0 0 0 28 -6116665.000 1200.00000 5549900.00 0 0 0 24 -6389893.000 1200.00000 4935600.00 0 0 0 29 -6813680.500 1200.00000 3262900.00 0 0 0 28 -6833136.500 1200.00000 5140500.00 0 0 0 27 -7373000.000 1200.00000 2400000.00 0 0 0 24 -8820920.000 1200.00000 1123400.+4 0 0 0 25 -10934820.00 1200.00000 276110.000 0 0 0 23 -15050371.00 1200.00000 634990.000 0 0 0 23 -25004488.00 1200.00000 6918.60000 0 0 0 23 - -.100000000 -Channel radii in key-word format -Radii= 4.136420, 4.136420 Flags=0,-1 - Group= 1 Chan= 1, 2, - Group= 4 Chan= 1, 2, 3, - Group= 5 Chan= 1, 2, 3, -Radii= 4.943720, 4.943720 Flags=0,-1 - Group= 2 Chan= 1, 2, - Group= 3 Chan= 1, 2, - Group= 6 Chan= 1, 2, 3, - Group= 7 Chan= 1, 2, 3, -Radii= 4.400000, 4.400000 Flags=0,-1 - Group= 8 Chan= 1, - Group= 9 Chan= 1, - Group= 10 Chan= 1, - Group= 11 Chan= 1, - Group= 12 Chan= 1, - Group= 13 Chan= 1, - Group= 14 Chan= 1, - Group= 15 Chan= 1, - Group= 16 Chan= 1, - Group= 17 Chan= 1, -Radii= 4.200000, 4.200000 Flags=0,-1 - Group= 18 Chan= 1, - Group= 19 Chan= 1, - Group= 20 Chan= 1, - Group= 21 Chan= 1, - Group= 22 Chan= 1, -Radii= 4.200000, 4.200000 Flags=0,-1 - Group= 23 Chan= 1, - Group= 24 Chan= 1, - Group= 25 Chan= 1, - Group= 26 Chan= 1, - Group= 27 Chan= 1, - Group= 28 Chan= 1, - Group= 29 Chan= 1, - -NUCLIDE MASSES AND ABUNDANCES FOLLOW -27.9769290 1.0000000 .92000000 1 1 2 3 4 5 6 7 -28.9764960 .04670000 .05000000 1 8 91011121314151617 -29.9737720 .03100000 .02000000 11819202122 -16.0000000 1.0000000 .01000000 023242526272829 diff --git a/examples/samexm/ex027/endf/endf_dummy.dat b/examples/samexm/ex027/endf/endf_dummy.dat deleted file mode 100644 index cb63c2e6..00000000 --- a/examples/samexm/ex027/endf/endf_dummy.dat +++ /dev/null @@ -1,2 +0,0 @@ - 6.0770001411 24.7000007629 2.4700000286 - 90591.0000000000 79.0000000000 7.9000000954 diff --git a/examples/samexm/ex027/endf/ex027a.endf b/examples/samexm/ex027/endf/ex027a.endf deleted file mode 100755 index cf4c80f0..00000000 --- a/examples/samexm/ex027/endf/ex027a.endf +++ /dev/null @@ -1,1790 +0,0 @@ - 9.223800+4 2.360060+2 0 0 1 09237 2151 1 - 9.223800+4 1.000000+0 0 0 2 09237 2151 2 - 1.000000-5 1.000000+4 1 3 0 09237 2151 3 - 0.000000+0 9.428480-1 0 0 2 29237 2151 4 - 2.360060+2 9.428480-1 0 0 3138 5239237 2151 5 --4.405250+3 5.000000-1 1.085500+2 2.300000-2 0.000000+0 0.000000+09237 2151 6 --4.133000+2 5.000000-1 7.072100-2 2.300000-2 0.000000+0 0.000000+09237 2151 7 --3.933000+2 5.000000-1 6.898900-2 2.300000-2 0.000000+0 0.000000+09237 2151 8 --3.733000+2 5.000000-1 6.721200-2 2.300000-2 0.000000+0 0.000000+09237 2151 9 --3.533000+2 5.000000-1 6.538700-2 2.300000-2 0.000000+0 0.000000+09237 2151 10 --3.333000+2 5.000000-1 6.350900-2 2.300000-2 0.000000+0 0.000000+09237 2151 11 --3.133000+2 5.000000-1 6.157400-2 2.300000-2 0.000000+0 0.000000+09237 2151 12 --2.933000+2 5.000000-1 5.957600-2 2.300000-2 0.000000+0 0.000000+09237 2151 13 --2.733000+2 5.000000-1 3.306400-2 2.300000-2 0.000000+0 0.000000+09237 2151 14 --2.533000+2 5.000000-1 3.183100-2 2.300000-2 0.000000+0 0.000000+09237 2151 15 --2.333000+2 5.000000-1 3.054800-2 2.300000-2 0.000000+0 0.000000+09237 2151 16 --2.133000+2 5.000000-1 2.921000-2 2.300000-2 0.000000+0 0.000000+09237 2151 17 --1.933000+2 5.000000-1 2.780600-2 2.300000-2 0.000000+0 0.000000+09237 2151 18 --1.733000+2 5.000000-1 2.632900-2 2.300000-2 0.000000+0 0.000000+09237 2151 19 --1.533000+2 5.000000-1 2.476300-2 2.300000-2 0.000000+0 0.000000+09237 2151 20 --1.333000+2 5.000000-1 2.309100-2 2.300000-2 0.000000+0 0.000000+09237 2151 21 --1.133000+2 5.000000-1 2.128800-2 2.300000-2 0.000000+0 0.000000+09237 2151 22 --9.330000+1 5.000000-1 1.931800-2 2.300000-2 0.000000+0 0.000000+09237 2151 23 --7.330000+1 5.000000-1 1.712300-2 2.300000-2 0.000000+0 0.000000+09237 2151 24 --5.330000+1 5.000000-1 1.460100-2 2.300000-2 0.000000+0 0.000000+09237 2151 25 --3.330000+1 5.000000-1 1.073000-2 2.300000-2 2.010000-6 0.000000+09237 2151 26 - 6.674000+0 5.000000-1 1.493000-3 2.300000-2 0.000000+0 9.990000-99237 2151 27 - 2.087100+1 5.000000-1 1.026000-2 2.291000-2 5.420000-8 0.000000+09237 2151 28 - 3.668200+1 5.000000-1 3.413000-2 2.289000-2 0.000000+0 9.770000-99237 2151 29 - 6.603200+1 5.000000-1 2.460000-2 2.336000-2 5.265000-8 0.000000+09237 2151 30 - 8.074900+1 5.000000-1 1.865000-3 2.300000-2 0.000000+0 6.049000-89237 2151 31 - 1.025600+2 5.000000-1 7.170000-2 2.342000-2 1.286000-8 0.000000+09237 2151 32 - 1.169020+2 5.000000-1 2.549000-2 2.299000-2 0.000000+0 0.000000+09237 2151 33 - 1.456600+2 5.000000-1 8.470000-4 2.300000-2 0.000000+0 0.000000+09237 2151 34 - 1.652900+2 5.000000-1 3.367000-3 2.300000-2 0.000000+0 0.000000+09237 2151 35 - 1.896700+2 5.000000-1 1.732000-1 2.238000-2 0.000000+0 3.573000-89237 2151 36 - 2.085100+2 5.000000-1 5.111000-2 2.394000-2 8.347000-8 0.000000+09237 2151 37 - 2.373800+2 5.000000-1 2.716000-2 2.454000-2 0.000000+0 3.542000-89237 2151 38 - 2.572160+2 5.000000-1 3.400000-5 2.300000-2 0.000000+0 0.000000+09237 2151 39 - 2.736600+2 5.000000-1 2.578000-2 2.210000-2 0.000000+0 0.000000+09237 2151 40 - 2.910000+2 5.000000-1 1.687000-2 2.212000-2 0.000000+0 0.000000+09237 2151 41 - 3.113200+2 5.000000-1 1.089000-3 2.300000-2 0.000000+0 0.000000+09237 2151 42 - 3.477900+2 5.000000-1 8.200000-2 2.251000-2 2.320000-7 0.000000+09237 2151 43 - 3.534500+2 5.000000-1 2.400000-5 2.300000-2 0.000000+0 0.000000+09237 2151 44 - 3.769300+2 5.000000-1 1.129000-3 2.300000-2 0.000000+0 1.400000-79237 2151 45 - 3.976200+2 5.000000-1 6.207000-3 2.300000-2 0.000000+0 0.000000+09237 2151 46 - 4.102400+2 5.000000-1 2.009000-2 2.390000-2 0.000000+0 0.000000+09237 2151 47 - 4.340700+2 5.000000-1 9.787000-3 2.288000-2 0.000000+0 0.000000+09237 2151 48 - 4.631700+2 5.000000-1 5.613000-3 2.280000-2 1.346000-6 0.000000+09237 2151 49 - 4.784300+2 5.000000-1 4.126000-3 2.300000-2 0.000000+0 2.290000-79237 2151 50 - 4.889100+2 5.000000-1 8.840000-4 2.300000-2 0.000000+0 0.000000+09237 2151 51 - 5.183600+2 5.000000-1 5.047000-2 2.312000-2 2.290000-7 0.000000+09237 2151 52 - 5.353000+2 5.000000-1 4.505000-2 2.349000-2 0.000000+0 3.660000-79237 2151 53 - 5.508301+2 5.000000-1 8.200000-5 2.300000-2 0.000000+0 0.000000+09237 2151 54 - 5.801000+2 5.000000-1 4.087000-2 2.465000-2 0.000000+0 0.000000+09237 2151 55 - 5.950301+2 5.000000-1 8.977000-2 2.301000-2 1.002000-6 0.000000+09237 2151 56 - 6.199601+2 5.000000-1 3.028000-2 2.302000-2 0.000000+0 1.440000-79237 2151 57 - 6.285400+2 5.000000-1 6.318000-3 2.300000-2 0.000000+0 0.000000+09237 2151 58 - 6.613000+2 5.000000-1 1.296000-1 2.415000-2 0.000000+0 0.000000+09237 2151 59 - 6.932101+2 5.000000-1 4.175000-2 2.319000-2 0.000000+0 0.000000+09237 2151 60 - 7.083801+2 5.000000-1 2.118000-2 2.282000-2 3.330000-5 0.000000+09237 2151 61 - 7.216930+2 5.000000-1 1.794000-3 4.700000-3 0.000000+0 4.110000-49237 2151 62 - 7.302300+2 5.000000-1 5.100000-4 2.300000-2 1.490000-4 0.000000+09237 2151 63 - 7.651000+2 5.000000-1 8.159000-3 2.300000-2 0.000000+0 0.000000+09237 2151 64 - 7.908600+2 5.000000-1 6.661000-3 2.300000-2 0.000000+0 0.000000+09237 2151 65 - 8.215301+2 5.000000-1 7.034000-2 2.228000-2 0.000000+0 2.350000-79237 2151 66 - 8.511661+2 5.000000-1 6.564000-2 2.376000-2 2.597000-6 0.000000+09237 2151 67 - 8.562601+2 5.000000-1 8.981000-2 2.331000-2 0.000000+0 1.405000-69237 2151 68 - 8.665301+2 5.000000-1 5.593000-3 2.300000-2 0.000000+0 0.000000+09237 2151 69 - 9.051100+2 5.000000-1 5.625000-2 2.300000-2 0.000000+0 0.000000+09237 2151 70 - 9.252300+2 5.000000-1 1.510000-2 2.300000-2 0.000000+0 0.000000+09237 2151 71 - 9.372801+2 5.000000-1 1.557000-1 2.338000-2 0.000000+0 0.000000+09237 2151 72 - 9.587881+2 5.000000-1 2.110000-1 2.340000-2 0.000000+0 0.000000+09237 2151 73 - 9.918101+2 5.000000-1 3.837000-1 2.300000-2 0.000000+0 0.000000+09237 2151 74 - 1.005240+3 5.000000-1 1.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 75 - 1.023080+3 5.000000-1 8.420000-3 2.300000-2 0.000000+0 0.000000+09237 2151 76 - 1.054650+3 5.000000-1 9.670000-2 2.300000-2 0.000000+0 0.000000+09237 2151 77 - 1.057080+3 5.000000-1 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 78 - 1.098710+3 5.000000-1 1.900000-2 2.300000-2 0.000000+0 0.000000+09237 2151 79 - 1.109240+3 5.000000-1 3.350000-2 2.300000-2 0.000000+0 0.000000+09237 2151 80 - 1.140470+3 5.000000-1 2.382000-1 2.300000-2 2.338000-6 0.000000+09237 2151 81 - 1.167810+3 5.000000-1 9.380000-2 2.300000-2 0.000000+0 1.530000-59237 2151 82 - 1.177340+3 5.000000-1 6.830000-2 2.300000-2 0.000000+0 0.000000+09237 2151 83 - 1.194940+3 5.000000-1 9.800000-2 2.300000-2 0.000000+0 0.000000+09237 2151 84 - 1.211360+3 5.000000-1 1.057000-2 1.413000-2 2.360000-4 0.000000+09237 2151 85 - 1.245260+3 5.000000-1 2.546000-1 2.300000-2 0.000000+0 0.000000+09237 2151 86 - 1.267240+3 5.000000-1 2.970000-2 2.300000-2 0.000000+0 0.000000+09237 2151 87 - 1.273170+3 5.000000-1 2.790000-2 2.300000-2 0.000000+0 0.000000+09237 2151 88 - 1.298890+3 5.000000-1 3.900000-3 2.300000-2 0.000000+0 0.000000+09237 2151 89 - 1.325630+3 5.000000-1 1.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 90 - 1.337000+3 5.000000-1 1.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 91 - 1.361020+3 5.000000-1 5.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 92 - 1.393970+3 5.000000-1 2.150000-1 2.300000-2 0.000000+0 0.000000+09237 2151 93 - 1.405550+3 5.000000-1 7.550000-2 2.300000-2 0.000000+0 0.000000+09237 2151 94 - 1.419920+3 5.000000-1 9.690000-3 2.300000-2 0.000000+0 0.000000+09237 2151 95 - 1.428230+3 5.000000-1 2.990000-2 2.300000-2 0.000000+0 0.000000+09237 2151 96 - 1.444200+3 5.000000-1 1.770000-2 2.300000-2 0.000000+0 0.000000+09237 2151 97 - 1.474080+3 5.000000-1 1.249000-1 2.300000-2 0.000000+0 0.000000+09237 2151 98 - 1.493850+3 5.000000-1 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 99 - 1.522840+3 5.000000-1 2.544000-1 2.300000-2 0.000000+0 0.000000+09237 2151 100 - 1.558490+3 5.000000-1 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 101 - 1.565330+3 5.000000-1 6.290000-3 2.300000-2 0.000000+0 0.000000+09237 2151 102 - 1.591490+3 5.000000-1 1.431000-3 2.300000-2 0.000000+0 0.000000+09237 2151 103 - 1.598000+3 5.000000-1 3.875000-1 2.300000-2 0.000000+0 0.000000+09237 2151 104 - 1.622860+3 5.000000-1 1.018000-1 2.300000-2 0.000000+0 0.000000+09237 2151 105 - 1.638050+3 5.000000-1 5.086000-2 2.300000-2 0.000000+0 0.000000+09237 2151 106 - 1.662810+3 5.000000-1 2.295000-1 2.300000-2 0.000000+0 0.000000+09237 2151 107 - 1.688920+3 5.000000-1 1.088000-1 2.300000-2 0.000000+0 0.000000+09237 2151 108 - 1.709930+3 5.000000-1 9.140000-2 2.300000-2 0.000000+0 0.000000+09237 2151 109 - 1.723040+3 5.000000-1 1.820000-2 2.300000-2 0.000000+0 0.000000+09237 2151 110 - 1.756060+3 5.000000-1 1.392000-1 2.300000-2 0.000000+0 0.000000+09237 2151 111 - 1.782560+3 5.000000-1 4.925000-1 2.300000-2 0.000000+0 0.000000+09237 2151 112 - 1.783070+3 5.000000-1 1.632000-1 2.300000-2 0.000000+0 0.000000+09237 2151 113 - 1.808520+3 5.000000-1 1.950000-2 2.300000-2 0.000000+0 0.000000+09237 2151 114 - 1.823900+3 5.000000-1 7.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 115 - 1.846130+3 5.000000-1 1.230000-2 2.300000-2 0.000000+0 0.000000+09237 2151 116 - 1.866700+3 5.000000-1 1.160000-3 2.300000-2 0.000000+0 0.000000+09237 2151 117 - 1.902880+3 5.000000-1 4.830000-2 2.300000-2 0.000000+0 0.000000+09237 2151 118 - 1.917210+3 5.000000-1 4.610000-2 2.300000-2 0.000000+0 0.000000+09237 2151 119 - 1.953820+3 5.000000-1 4.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 120 - 1.969040+3 5.000000-1 8.253000-1 2.300000-2 0.000000+0 0.000000+09237 2151 121 - 1.974970+3 5.000000-1 4.482000-1 2.300000-2 0.000000+0 0.000000+09237 2151 122 - 2.000750+3 5.000000-1 4.900000-4 2.300000-2 0.000000+0 0.000000+09237 2151 123 - 2.023750+3 5.000000-1 2.291000-1 2.300000-2 0.000000+0 0.000000+09237 2151 124 - 2.030540+3 5.000000-1 5.180000-2 2.300000-2 0.000000+0 0.000000+09237 2151 125 - 2.053430+3 5.000000-1 7.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 126 - 2.088740+3 5.000000-1 2.670000-2 2.300000-2 0.000000+0 0.000000+09237 2151 127 - 2.096490+3 5.000000-1 3.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 128 - 2.124230+3 5.000000-1 3.040000-3 2.300000-2 0.000000+0 0.000000+09237 2151 129 - 2.145750+3 5.000000-1 7.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 130 - 2.152840+3 5.000000-1 3.103000-1 2.300000-2 0.000000+0 0.000000+09237 2151 131 - 2.186670+3 5.000000-1 5.934000-1 2.300000-2 0.000000+0 0.000000+09237 2151 132 - 2.201490+3 5.000000-1 1.052000-1 2.300000-2 0.000000+0 0.000000+09237 2151 133 - 2.259810+3 5.000000-1 1.031000-1 2.300000-2 0.000000+0 0.000000+09237 2151 134 - 2.264170+3 5.000000-1 6.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 135 - 2.266730+3 5.000000-1 2.392000-1 2.300000-2 0.000000+0 0.000000+09237 2151 136 - 2.281910+3 5.000000-1 2.036000-1 2.300000-2 0.000000+0 0.000000+09237 2151 137 - 2.316080+3 5.000000-1 2.130000-2 2.300000-2 0.000000+0 0.000000+09237 2151 138 - 2.352860+3 5.000000-1 5.140000-2 2.300000-2 0.000000+0 0.000000+09237 2151 139 - 2.355810+3 5.000000-1 9.350000-2 2.300000-2 0.000000+0 0.000000+09237 2151 140 - 2.392060+3 5.000000-1 3.310000-2 2.300000-2 0.000000+0 0.000000+09237 2151 141 - 2.427020+3 5.000000-1 1.713000-1 2.300000-2 0.000000+0 0.000000+09237 2151 142 - 2.446910+3 5.000000-1 2.281000-1 2.300000-2 0.000000+0 0.000000+09237 2151 143 - 2.455740+3 5.000000-1 1.930000-2 2.300000-2 0.000000+0 0.000000+09237 2151 144 - 2.489270+3 5.000000-1 1.110000-1 2.300000-2 0.000000+0 0.000000+09237 2151 145 - 2.509730+3 5.000000-1 4.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 146 - 2.521560+3 5.000000-1 2.120000-2 2.300000-2 0.000000+0 0.000000+09237 2151 147 - 2.548240+3 5.000000-1 7.550000-1 2.300000-2 0.000000+0 0.000000+09237 2151 148 - 2.559770+3 5.000000-1 3.107000-1 2.300000-2 0.000000+0 0.000000+09237 2151 149 - 2.581200+3 5.000000-1 4.742000-1 2.300000-2 0.000000+0 0.000000+09237 2151 150 - 2.597720+3 5.000000-1 7.840000-1 2.300000-2 0.000000+0 0.000000+09237 2151 151 - 2.620180+3 5.000000-1 4.910000-2 2.300000-2 0.000000+0 0.000000+09237 2151 152 - 2.647550+3 5.000000-1 5.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 153 - 2.672200+3 5.000000-1 3.037000-1 2.300000-2 0.000000+0 0.000000+09237 2151 154 - 2.696580+3 5.000000-1 3.520000-2 2.300000-2 0.000000+0 0.000000+09237 2151 155 - 2.717430+3 5.000000-1 1.876000-1 2.300000-2 0.000000+0 0.000000+09237 2151 156 - 2.750930+3 5.000000-1 4.980000-2 2.300000-2 0.000000+0 0.000000+09237 2151 157 - 2.762800+3 5.000000-1 2.090000-2 2.300000-2 0.000000+0 0.000000+09237 2151 158 - 2.787550+3 5.000000-1 1.930000-2 2.300000-2 0.000000+0 0.000000+09237 2151 159 - 2.806600+3 5.000000-1 1.150000-2 2.300000-2 0.000000+0 0.000000+09237 2151 160 - 2.829610+3 5.000000-1 2.360000-2 2.300000-2 0.000000+0 0.000000+09237 2151 161 - 2.865510+3 5.000000-1 2.370000-1 2.300000-2 0.000000+0 0.000000+09237 2151 162 - 2.882760+3 5.000000-1 6.752000-1 2.300000-2 0.000000+0 0.000000+09237 2151 163 - 2.897210+3 5.000000-1 2.130000-2 2.300000-2 0.000000+0 0.000000+09237 2151 164 - 2.933750+3 5.000000-1 4.660000-2 2.300000-2 0.000000+0 0.000000+09237 2151 165 - 2.957040+3 5.000000-1 2.780000-2 2.300000-2 0.000000+0 0.000000+09237 2151 166 - 2.967900+3 5.000000-1 4.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 167 - 3.003690+3 5.000000-1 1.398000-1 2.300000-2 0.000000+0 0.000000+09237 2151 168 - 3.028630+3 5.000000-1 1.547000-1 2.300000-2 0.000000+0 0.000000+09237 2151 169 - 3.044020+3 5.000000-1 3.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 170 - 3.059750+3 5.000000-1 3.930000-2 2.300000-2 0.000000+0 0.000000+09237 2151 171 - 3.081530+3 5.000000-1 2.760000-3 2.300000-2 0.000000+0 0.000000+09237 2151 172 - 3.109950+3 5.000000-1 2.000000-1 2.300000-2 0.000000+0 0.000000+09237 2151 173 - 3.134820+3 5.000000-1 1.140000-2 2.300000-2 0.000000+0 0.000000+09237 2151 174 - 3.149190+3 5.000000-1 1.319000-1 2.300000-2 0.000000+0 0.000000+09237 2151 175 - 3.178800+3 5.000000-1 9.690000-2 2.300000-2 0.000000+0 0.000000+09237 2151 176 - 3.189080+3 5.000000-1 1.246000-1 2.300000-2 0.000000+0 0.000000+09237 2151 177 - 3.206080+3 5.000000-1 1.140000-1 2.300000-2 0.000000+0 0.000000+09237 2151 178 - 3.226470+3 5.000000-1 2.890000-2 2.300000-2 0.000000+0 0.000000+09237 2151 179 - 3.248940+3 5.000000-1 3.270000-2 2.300000-2 0.000000+0 0.000000+09237 2151 180 - 3.279650+3 5.000000-1 3.089000-1 2.300000-2 0.000000+0 0.000000+09237 2151 181 - 3.312340+3 5.000000-1 1.786000-1 2.300000-2 0.000000+0 0.000000+09237 2151 182 - 3.321800+3 5.000000-1 1.617000-1 2.300000-2 0.000000+0 0.000000+09237 2151 183 - 3.333680+3 5.000000-1 1.289000-1 2.300000-2 0.000000+0 0.000000+09237 2151 184 - 3.355780+3 5.000000-1 1.501000-1 2.300000-2 0.000000+0 0.000000+09237 2151 185 - 3.389670+3 5.000000-1 3.040000-2 2.300000-2 0.000000+0 0.000000+09237 2151 186 - 3.409010+3 5.000000-1 2.639000-1 2.300000-2 0.000000+0 0.000000+09237 2151 187 - 3.413600+3 5.000000-1 2.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 188 - 3.436470+3 5.000000-1 4.551000-1 2.300000-2 0.000000+0 0.000000+09237 2151 189 - 3.457820+3 5.000000-1 7.522000-1 2.300000-2 0.000000+0 0.000000+09237 2151 190 - 3.485750+3 5.000000-1 1.099000-1 2.300000-2 0.000000+0 0.000000+09237 2151 191 - 3.496340+3 5.000000-1 8.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 192 - 3.521950+3 5.000000-1 2.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 193 - 3.542100+3 5.000000-1 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 194 - 3.561700+3 5.000000-1 2.780000-1 2.300000-2 0.000000+0 0.000000+09237 2151 195 - 3.574090+3 5.000000-1 4.540000-1 2.300000-2 0.000000+0 0.000000+09237 2151 196 - 3.594780+3 5.000000-1 5.600000-2 2.300000-2 0.000000+0 0.000000+09237 2151 197 - 3.623380+3 5.000000-1 2.760000-2 2.300000-2 0.000000+0 0.000000+09237 2151 198 - 3.630000+3 5.000000-1 5.532000-1 2.300000-2 0.000000+0 0.000000+09237 2151 199 - 3.661950+3 5.000000-1 3.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 200 - 3.693270+3 5.000000-1 4.206000-1 2.300000-2 0.000000+0 0.000000+09237 2151 201 - 3.716850+3 5.000000-1 1.117000-1 2.300000-2 0.000000+0 0.000000+09237 2151 202 - 3.734280+3 5.000000-1 2.259000-1 2.300000-2 0.000000+0 0.000000+09237 2151 203 - 3.746800+3 5.000000-1 1.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 204 - 3.765180+3 5.000000-1 1.084000-1 2.300000-2 0.000000+0 0.000000+09237 2151 205 - 3.782050+3 5.000000-1 4.904000-1 2.300000-2 0.000000+0 0.000000+09237 2151 206 - 3.807760+3 5.000000-1 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 207 - 3.832000+3 5.000000-1 1.300000-2 2.300000-2 0.000000+0 0.000000+09237 2151 208 - 3.858110+3 5.000000-1 5.840000-1 2.300000-2 0.000000+0 0.000000+09237 2151 209 - 3.873070+3 5.000000-1 1.948000-1 2.300000-2 0.000000+0 0.000000+09237 2151 210 - 3.902280+3 5.000000-1 3.136000-1 2.300000-2 0.000000+0 0.000000+09237 2151 211 - 3.915110+3 5.000000-1 1.216000-1 2.300000-2 0.000000+0 0.000000+09237 2151 212 - 3.940070+3 5.000000-1 1.762000-1 2.300000-2 0.000000+0 0.000000+09237 2151 213 - 3.954870+3 5.000000-1 1.417000-1 2.300000-2 0.000000+0 0.000000+09237 2151 214 - 3.961740+3 5.000000-1 8.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 215 - 3.998530+3 5.000000-1 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 216 - 4.015290+3 5.000000-1 1.803000-3 2.300000-2 0.000000+0 0.000000+09237 2151 217 - 4.037700+3 5.000000-1 1.300000-2 2.300000-2 0.000000+0 0.000000+09237 2151 218 - 4.042080+3 5.000000-1 7.530000-2 2.300000-2 0.000000+0 0.000000+09237 2151 219 - 4.064400+3 5.000000-1 3.460000-2 2.300000-2 0.000000+0 0.000000+09237 2151 220 - 4.090490+3 5.000000-1 1.370000-1 2.300000-2 0.000000+0 0.000000+09237 2151 221 - 4.125690+3 5.000000-1 4.650000-2 2.300000-2 0.000000+0 0.000000+09237 2151 222 - 4.132300+3 5.000000-1 1.310000-2 2.300000-2 0.000000+0 0.000000+09237 2151 223 - 4.169100+3 5.000000-1 1.770000-1 2.300000-2 0.000000+0 0.000000+09237 2151 224 - 4.179180+3 5.000000-1 4.300000-2 2.300000-2 0.000000+0 0.000000+09237 2151 225 - 4.211200+3 5.000000-1 5.990000-2 2.300000-2 0.000000+0 0.000000+09237 2151 226 - 4.226130+3 5.000000-1 9.034600-3 2.300000-2 0.000000+0 0.000000+09237 2151 227 - 4.258440+3 5.000000-1 1.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 228 - 4.260470+3 5.000000-1 2.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 229 - 4.300200+3 5.000000-1 1.650000-1 2.300000-2 0.000000+0 0.000000+09237 2151 230 - 4.307600+3 5.000000-1 1.550000-1 2.300000-2 0.000000+0 0.000000+09237 2151 231 - 4.325900+3 5.000000-1 9.700000-2 2.300000-2 0.000000+0 0.000000+09237 2151 232 - 4.335050+3 5.000000-1 1.189200-2 2.300000-2 0.000000+0 0.000000+09237 2151 233 - 4.370700+3 5.000000-1 1.020000-1 2.300000-2 0.000000+0 0.000000+09237 2151 234 - 4.396210+3 5.000000-1 8.072100-3 2.300000-2 0.000000+0 0.000000+09237 2151 235 - 4.436400+3 5.000000-1 1.180000-1 2.300000-2 0.000000+0 0.000000+09237 2151 236 - 4.459820+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 237 - 4.490230+3 5.000000-1 1.470000-2 2.300000-2 0.000000+0 0.000000+09237 2151 238 - 4.503650+3 5.000000-1 1.014500-2 2.300000-2 0.000000+0 0.000000+09237 2151 239 - 4.512500+3 5.000000-1 6.510000-1 2.300000-2 0.000000+0 0.000000+09237 2151 240 - 4.530500+3 5.000000-1 1.205100-3 2.300000-2 0.000000+0 0.000000+09237 2151 241 - 4.544200+3 5.000000-1 1.250000-1 2.300000-2 0.000000+0 0.000000+09237 2151 242 - 4.568500+3 5.000000-1 5.450000-2 2.300000-2 0.000000+0 0.000000+09237 2151 243 - 4.594900+3 5.000000-1 3.660000-2 2.300000-2 0.000000+0 0.000000+09237 2151 244 - 4.618780+3 5.000000-1 2.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 245 - 4.632650+3 5.000000-1 2.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 246 - 4.663600+3 5.000000-1 1.620000-1 2.300000-2 0.000000+0 0.000000+09237 2151 247 - 4.696000+3 5.000000-1 4.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 248 - 4.706400+3 5.000000-1 3.190000-1 2.300000-2 0.000000+0 0.000000+09237 2151 249 - 4.728570+3 5.000000-1 3.260000-2 2.300000-2 0.000000+0 0.000000+09237 2151 250 - 4.735070+3 5.000000-1 1.129300-3 2.300000-2 0.000000+0 0.000000+09237 2151 251 - 4.766000+3 5.000000-1 3.780000-2 2.300000-2 0.000000+0 0.000000+09237 2151 252 - 4.785430+3 5.000000-1 2.020000-2 2.300000-2 0.000000+0 0.000000+09237 2151 253 - 4.800300+3 5.000000-1 2.050000-1 2.300000-2 0.000000+0 0.000000+09237 2151 254 - 4.812720+3 5.000000-1 5.000400-3 2.300000-2 0.000000+0 0.000000+09237 2151 255 - 4.839800+3 5.000000-1 2.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 256 - 4.859900+3 5.000000-1 2.810000-1 2.300000-2 0.000000+0 0.000000+09237 2151 257 - 4.899300+3 5.000000-1 1.180000-1 2.300000-2 0.000000+0 0.000000+09237 2151 258 - 4.908610+3 5.000000-1 1.500000-1 2.300000-2 0.000000+0 0.000000+09237 2151 259 - 4.921600+3 5.000000-1 2.170000-1 2.300000-2 0.000000+0 0.000000+09237 2151 260 - 4.956080+3 5.000000-1 1.720000-1 2.300000-2 0.000000+0 0.000000+09237 2151 261 - 4.974400+3 5.000000-1 7.900000-2 2.300000-2 0.000000+0 0.000000+09237 2151 262 - 5.007200+3 5.000000-1 5.870000-2 2.300000-2 0.000000+0 0.000000+09237 2151 263 - 5.036500+3 5.000000-1 2.800000-1 2.300000-2 0.000000+0 0.000000+09237 2151 264 - 5.040620+3 5.000000-1 2.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 265 - 5.074900+3 5.000000-1 2.300000-2 2.300000-2 0.000000+0 0.000000+09237 2151 266 - 5.088810+3 5.000000-1 6.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 267 - 5.118950+3 5.000000-1 1.660000-1 2.300000-2 0.000000+0 0.000000+09237 2151 268 - 5.138770+3 5.000000-1 1.368300-2 2.300000-2 0.000000+0 0.000000+09237 2151 269 - 5.164640+3 5.000000-1 1.546700-2 2.300000-2 0.000000+0 0.000000+09237 2151 270 - 5.177900+3 5.000000-1 3.990800-3 2.300000-2 0.000000+0 0.000000+09237 2151 271 - 5.195770+3 5.000000-1 1.037000-2 2.300000-2 0.000000+0 0.000000+09237 2151 272 - 5.214770+3 5.000000-1 9.626300-3 2.300000-2 0.000000+0 0.000000+09237 2151 273 - 5.243490+3 5.000000-1 5.770000-2 2.300000-2 0.000000+0 0.000000+09237 2151 274 - 5.260300+3 5.000000-1 1.900000-1 2.300000-2 0.000000+0 0.000000+09237 2151 275 - 5.279100+3 5.000000-1 1.962300-2 2.300000-2 0.000000+0 0.000000+09237 2151 276 - 5.301510+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 277 - 5.310500+3 5.000000-1 3.860000-2 2.300000-2 0.000000+0 0.000000+09237 2151 278 - 5.345840+3 5.000000-1 7.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 279 - 5.354300+3 5.000000-1 1.230000-1 2.300000-2 0.000000+0 0.000000+09237 2151 280 - 5.366720+3 5.000000-1 2.263300-2 2.300000-2 0.000000+0 0.000000+09237 2151 281 - 5.405200+3 5.000000-1 1.030500-2 2.300000-2 0.000000+0 0.000000+09237 2151 282 - 5.420700+3 5.000000-1 8.280000-2 2.300000-2 0.000000+0 0.000000+09237 2151 283 - 5.431000+3 5.000000-1 4.280000-2 2.300000-2 0.000000+0 0.000000+09237 2151 284 - 5.462980+3 5.000000-1 2.475500-2 2.300000-2 0.000000+0 0.000000+09237 2151 285 - 5.484200+3 5.000000-1 3.730000-1 2.300000-2 0.000000+0 0.000000+09237 2151 286 - 5.489100+3 5.000000-1 2.130000-1 2.300000-2 0.000000+0 0.000000+09237 2151 287 - 5.530500+3 5.000000-1 9.440000-2 2.300000-2 0.000000+0 0.000000+09237 2151 288 - 5.552500+3 5.000000-1 1.890000-1 2.300000-2 0.000000+0 0.000000+09237 2151 289 - 5.578800+3 5.000000-1 8.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 290 - 5.617600+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 291 - 5.638100+3 5.000000-1 4.910000-1 2.300000-2 0.000000+0 0.000000+09237 2151 292 - 5.650400+3 5.000000-1 5.940000-1 2.300000-2 0.000000+0 0.000000+09237 2151 293 - 5.673700+3 5.000000-1 9.750000-2 2.300000-2 0.000000+0 0.000000+09237 2151 294 - 5.683400+3 5.000000-1 1.540000-1 2.300000-2 0.000000+0 0.000000+09237 2151 295 - 5.696700+3 5.000000-1 3.490000-2 2.300000-2 0.000000+0 2.861000-59237 2151 296 - 5.733200+3 5.000000-1 3.860000-2 2.300000-2 2.771000-5 0.000000+09237 2151 297 - 5.757400+3 5.000000-1 1.350000-1 2.300000-2 0.000000+0 0.000000+09237 2151 298 - 5.790000+3 5.000000-1 5.470000-2 2.300000-2 0.000000+0 0.000000+09237 2151 299 - 5.814400+3 5.000000-1 1.200000-1 2.300000-2 0.000000+0 0.000000+09237 2151 300 - 5.827800+3 5.000000-1 1.100000-1 2.300000-2 0.000000+0 0.000000+09237 2151 301 - 5.839190+3 5.000000-1 1.520000-1 2.300000-2 0.000000+0 0.000000+09237 2151 302 - 5.861300+3 5.000000-1 1.930000-1 2.300000-2 0.000000+0 0.000000+09237 2151 303 - 5.873230+3 5.000000-1 5.130000-2 2.300000-2 0.000000+0 0.000000+09237 2151 304 - 5.893900+3 5.000000-1 1.527800-2 2.300000-2 0.000000+0 0.000000+09237 2151 305 - 5.918850+3 5.000000-1 3.940000-1 2.300000-2 0.000000+0 0.000000+09237 2151 306 - 5.944270+3 5.000000-1 6.552400-3 2.300000-2 0.000000+0 0.000000+09237 2151 307 - 5.969200+3 5.000000-1 2.083800-2 2.300000-2 0.000000+0 0.000000+09237 2151 308 - 5.975860+3 5.000000-1 4.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 309 - 5.996930+3 5.000000-1 8.400000-2 2.300000-2 0.000000+0 0.000000+09237 2151 310 - 6.037130+3 5.000000-1 5.702000-1 2.300000-2 0.000000+0 0.000000+09237 2151 311 - 6.050100+3 5.000000-1 1.607000-1 2.300000-2 0.000000+0 0.000000+09237 2151 312 - 6.059760+3 5.000000-1 1.600000-1 2.300000-2 0.000000+0 0.000000+09237 2151 313 - 6.060800+3 5.000000-1 2.000000-1 2.300000-2 0.000000+0 0.000000+09237 2151 314 - 6.091890+3 5.000000-1 5.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 315 - 6.129780+3 5.000000-1 1.038500-3 2.300000-2 0.000000+0 0.000000+09237 2151 316 - 6.169600+3 5.000000-1 1.003000+0 2.300000-2 0.000000+0 0.000000+09237 2151 317 - 6.172200+3 5.000000-1 5.034000-1 2.300000-2 0.000000+0 0.000000+09237 2151 318 - 6.194400+3 5.000000-1 1.244000-1 2.300000-2 0.000000+0 0.000000+09237 2151 319 - 6.199980+3 5.000000-1 9.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 320 - 6.232660+3 5.000000-1 1.300000-1 2.300000-2 0.000000+0 0.000000+09237 2151 321 - 6.248400+3 5.000000-1 2.000000-1 2.300000-2 0.000000+0 0.000000+09237 2151 322 - 6.274920+3 5.000000-1 1.163200-3 2.300000-2 0.000000+0 0.000000+09237 2151 323 - 6.298492+3 5.000000-1 1.266800-2 2.300000-2 0.000000+0 0.000000+09237 2151 324 - 6.321410+3 5.000000-1 6.540000-2 2.300000-2 0.000000+0 0.000000+09237 2151 325 - 6.342810+3 5.000000-1 1.600000-1 2.300000-2 0.000000+0 0.000000+09237 2151 326 - 6.344880+3 5.000000-1 7.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 327 - 6.381780+3 5.000000-1 2.003400-2 2.300000-2 0.000000+0 0.000000+09237 2151 328 - 6.393400+3 5.000000-1 5.649700-3 2.300000-2 0.000000+0 0.000000+09237 2151 329 - 6.415000+3 5.000000-1 2.298800-2 2.300000-2 0.000000+0 0.000000+09237 2151 330 - 6.430070+3 5.000000-1 2.507400-2 2.300000-2 0.000000+0 0.000000+09237 2151 331 - 6.445230+3 5.000000-1 1.075000-1 2.300000-2 0.000000+0 0.000000+09237 2151 332 - 6.460520+3 5.000000-1 8.329000-1 2.300000-2 0.000000+0 0.000000+09237 2151 333 - 6.507060+3 5.000000-1 3.122000-1 2.300000-2 0.000000+0 0.000000+09237 2151 334 - 6.539380+3 5.000000-1 3.998000-1 2.300000-2 0.000000+0 0.000000+09237 2151 335 - 6.549350+3 5.000000-1 1.750000-1 2.300000-2 0.000000+0 0.000000+09237 2151 336 - 6.551670+3 5.000000-1 1.750000-1 2.300000-2 0.000000+0 0.000000+09237 2151 337 - 6.565600+3 5.000000-1 9.942400-3 2.300000-2 0.000000+0 0.000000+09237 2151 338 - 6.594972+3 5.000000-1 1.107900-2 2.300000-2 0.000000+0 0.000000+09237 2151 339 - 6.635170+3 5.000000-1 8.640000-2 2.300000-2 0.000000+0 0.000000+09237 2151 340 - 6.656430+3 5.000000-1 1.276000-2 2.300000-2 0.000000+0 0.000000+09237 2151 341 - 6.667000+3 5.000000-1 3.244000-2 2.300000-2 0.000000+0 0.000000+09237 2151 342 - 6.689400+3 5.000000-1 4.065800-3 2.300000-2 0.000000+0 0.000000+09237 2151 343 - 6.711830+3 5.000000-1 1.000000-1 2.300000-2 0.000000+0 0.000000+09237 2151 344 - 6.713360+3 5.000000-1 4.000000-1 2.300000-2 0.000000+0 0.000000+09237 2151 345 - 6.742510+3 5.000000-1 9.505000-1 2.300000-2 0.000000+0 0.000000+09237 2151 346 - 6.763820+3 5.000000-1 9.939700-2 2.300000-2 0.000000+0 0.000000+09237 2151 347 - 6.782820+3 5.000000-1 4.979300-2 2.300000-2 0.000000+0 0.000000+09237 2151 348 - 6.815190+3 5.000000-1 1.065800-2 2.300000-2 0.000000+0 0.000000+09237 2151 349 - 6.827060+3 5.000000-1 8.149900-2 2.300000-2 0.000000+0 0.000000+09237 2151 350 - 6.861380+3 5.000000-1 7.749900-3 2.300000-2 0.000000+0 0.000000+09237 2151 351 - 6.878201+3 5.000000-1 5.056000-1 2.300000-2 0.000000+0 0.000000+09237 2151 352 - 6.892350+3 5.000000-1 9.339900-2 2.300000-2 0.000000+0 0.000000+09237 2151 353 - 6.894010+3 5.000000-1 9.337500-2 2.300000-2 0.000000+0 0.000000+09237 2151 354 - 6.928510+3 5.000000-1 1.671000-1 2.300000-2 0.000000+0 0.000000+09237 2151 355 - 6.956370+3 5.000000-1 9.916200-2 2.300000-2 0.000000+0 0.000000+09237 2151 356 - 6.968030+3 5.000000-1 3.802000-1 2.300000-2 0.000000+0 0.000000+09237 2151 357 - 6.993050+3 5.000000-1 1.084500-3 2.300000-2 0.000000+0 0.000000+09237 2151 358 - 7.012681+3 5.000000-1 2.656000-2 2.300000-2 0.000000+0 0.000000+09237 2151 359 - 7.025910+3 5.000000-1 1.003700-1 2.300000-2 0.000000+0 0.000000+09237 2151 360 - 7.063960+3 5.000000-1 2.129000-1 2.300000-2 0.000000+0 0.000000+09237 2151 361 - 7.073350+3 5.000000-1 1.160600-1 2.300000-2 0.000000+0 0.000000+09237 2151 362 - 7.092050+3 5.000000-1 2.871600-3 2.300000-2 0.000000+0 5.933000-49237 2151 363 - 7.126110+3 5.000000-1 3.780600-2 2.300000-2 1.042000-4 0.000000+09237 2151 364 - 7.146500+3 5.000000-1 2.634100-2 2.300000-2 0.000000+0 0.000000+09237 2151 365 - 7.160850+3 5.000000-1 5.616900-3 2.300000-2 0.000000+0 0.000000+09237 2151 366 - 7.187723+3 5.000000-1 2.892000-1 2.300000-2 0.000000+0 0.000000+09237 2151 367 - 7.203100+3 5.000000-1 2.759000-1 2.300000-2 0.000000+0 0.000000+09237 2151 368 - 7.218160+3 5.000000-1 1.382600-1 2.300000-2 0.000000+0 0.000000+09237 2151 369 - 7.237600+3 5.000000-1 2.425000-2 2.300000-2 0.000000+0 0.000000+09237 2151 370 - 7.250270+3 5.000000-1 1.102800-1 2.300000-2 0.000000+0 0.000000+09237 2151 371 - 7.286452+3 5.000000-1 6.286000-1 2.300000-2 0.000000+0 0.000000+09237 2151 372 - 7.300510+3 5.000000-1 1.954400-2 2.300000-2 0.000000+0 0.000000+09237 2151 373 - 7.324710+3 5.000000-1 5.066500-3 2.300000-2 0.000000+0 0.000000+09237 2151 374 - 7.352420+3 5.000000-1 2.366400-3 2.300000-2 0.000000+0 0.000000+09237 2151 375 - 7.373280+3 5.000000-1 4.109200-2 2.300000-2 0.000000+0 0.000000+09237 2151 376 - 7.399870+3 5.000000-1 1.571700-2 2.300000-2 0.000000+0 0.000000+09237 2151 377 - 7.418900+3 5.000000-1 2.963000-1 2.300000-2 0.000000+0 3.410000-49237 2151 378 - 7.442290+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 379 - 7.477050+3 5.000000-1 1.096800-3 2.300000-2 0.000000+0 0.000000+09237 2151 380 - 7.502000+3 5.000000-1 8.738400-3 2.300000-2 0.000000+0 0.000000+09237 2151 381 - 7.522640+3 5.000000-1 2.674000-1 2.300000-2 0.000000+0 0.000000+09237 2151 382 - 7.540130+3 5.000000-1 2.038000-1 2.300000-2 0.000000+0 0.000000+09237 2151 383 - 7.561010+3 5.000000-1 1.899000-1 2.300000-2 0.000000+0 0.000000+09237 2151 384 - 7.592250+3 5.000000-1 3.441000-1 2.300000-2 0.000000+0 0.000000+09237 2151 385 - 7.616750+3 5.000000-1 1.342000-1 2.300000-2 0.000000+0 0.000000+09237 2151 386 - 7.624560+3 5.000000-1 5.021500-2 2.300000-2 0.000000+0 0.000000+09237 2151 387 - 7.636610+3 5.000000-1 4.008200-3 2.300000-2 0.000000+0 0.000000+09237 2151 388 - 7.668170+3 5.000000-1 9.793800-3 2.300000-2 0.000000+0 0.000000+09237 2151 389 - 7.681960+3 5.000000-1 9.225400-2 2.300000-2 0.000000+0 0.000000+09237 2151 390 - 7.699060+3 5.000000-1 3.975000-1 2.300000-2 0.000000+0 0.000000+09237 2151 391 - 7.733760+3 5.000000-1 6.395100-2 2.300000-2 0.000000+0 0.000000+09237 2151 392 - 7.753380+3 5.000000-1 6.671300-4 2.300000-2 0.000000+0 0.000000+09237 2151 393 - 7.780770+3 5.000000-1 6.099000-1 2.300000-2 1.583000-4 0.000000+09237 2151 394 - 7.807350+3 5.000000-1 3.242000-1 2.300000-2 0.000000+0 1.640000-49237 2151 395 - 7.810770+3 5.000000-1 9.971300-2 2.300000-2 0.000000+0 0.000000+09237 2151 396 - 7.842370+3 5.000000-1 7.350600-2 2.300000-2 0.000000+0 0.000000+09237 2151 397 - 7.847000+3 5.000000-1 5.874000-2 2.300000-2 0.000000+0 0.000000+09237 2151 398 - 7.909250+3 5.000000-1 7.643400-2 2.300000-2 0.000000+0 0.000000+09237 2151 399 - 7.927320+3 5.000000-1 7.769200-3 2.300000-2 0.000000+0 0.000000+09237 2151 400 - 7.945340+3 5.000000-1 9.443100-3 2.300000-2 0.000000+0 0.000000+09237 2151 401 - 7.960290+3 5.000000-1 7.825300-3 2.300000-2 0.000000+0 0.000000+09237 2151 402 - 7.978880+3 5.000000-1 1.039500-1 2.300000-2 0.000000+0 0.000000+09237 2151 403 - 7.995610+3 5.000000-1 4.990400-3 2.300000-2 0.000000+0 0.000000+09237 2151 404 - 8.035250+3 5.000000-1 2.976000-1 2.300000-2 0.000000+0 0.000000+09237 2151 405 - 8.047440+3 5.000000-1 7.580000-1 2.300000-2 0.000000+0 0.000000+09237 2151 406 - 8.058480+3 5.000000-1 2.272700-3 2.300000-2 0.000000+0 0.000000+09237 2151 407 - 8.088850+3 5.000000-1 2.825800-3 2.300000-2 0.000000+0 0.000000+09237 2151 408 - 8.104090+3 5.000000-1 7.480000-1 2.300000-2 0.000000+0 0.000000+09237 2151 409 - 8.138090+3 5.000000-1 8.022000-2 2.300000-2 0.000000+0 0.000000+09237 2151 410 - 8.140230+3 5.000000-1 8.019300-2 2.300000-2 0.000000+0 0.000000+09237 2151 411 - 8.162210+3 5.000000-1 1.095100-2 2.300000-2 0.000000+0 0.000000+09237 2151 412 - 8.198871+3 5.000000-1 2.177800-3 2.300000-2 0.000000+0 0.000000+09237 2151 413 - 8.204621+3 5.000000-1 4.791000-1 2.300000-2 0.000000+0 0.000000+09237 2151 414 - 8.215770+3 5.000000-1 4.667000-1 2.300000-2 0.000000+0 0.000000+09237 2151 415 - 8.224704+3 5.000000-1 4.929000-1 2.300000-2 0.000000+0 0.000000+09237 2151 416 - 8.262550+3 5.000000-1 6.084000-1 2.300000-2 0.000000+0 0.000000+09237 2151 417 - 8.290000+3 5.000000-1 3.438000-1 2.300000-2 0.000000+0 0.000000+09237 2151 418 - 8.326590+3 5.000000-1 9.489600-2 2.300000-2 0.000000+0 0.000000+09237 2151 419 - 8.328250+3 5.000000-1 2.500000-1 2.300000-2 0.000000+0 0.000000+09237 2151 420 - 8.356621+3 5.000000-1 1.222700-1 2.300000-2 0.000000+0 0.000000+09237 2151 421 - 8.399810+3 5.000000-1 1.069600-1 2.300000-2 0.000000+0 0.000000+09237 2151 422 - 8.409995+3 5.000000-1 9.178500-2 2.300000-2 0.000000+0 0.000000+09237 2151 423 - 8.427960+3 5.000000-1 4.630300-3 2.300000-2 0.000000+0 0.000000+09237 2151 424 - 8.442210+3 5.000000-1 4.618300-3 2.300000-2 0.000000+0 0.000000+09237 2151 425 - 8.462455+3 5.000000-1 1.142700-2 2.300000-2 0.000000+0 0.000000+09237 2151 426 - 8.495995+3 5.000000-1 2.074000-1 2.300000-2 0.000000+0 0.000000+09237 2151 427 - 8.520580+3 5.000000-1 4.552000-3 2.300000-2 0.000000+0 0.000000+09237 2151 428 - 8.530600+3 5.000000-1 4.026000-1 2.300000-2 0.000000+0 0.000000+09237 2151 429 - 8.555340+3 5.000000-1 5.267500-2 2.300000-2 0.000000+0 0.000000+09237 2151 430 - 8.566000+3 5.000000-1 3.599900-3 2.300000-2 0.000000+0 0.000000+09237 2151 431 - 8.593220+3 5.000000-1 2.775100-2 2.300000-2 0.000000+0 0.000000+09237 2151 432 - 8.610930+3 5.000000-1 7.976000-2 2.300000-2 0.000000+0 0.000000+09237 2151 433 - 8.637500+3 5.000000-1 2.900000-1 2.300000-2 0.000000+0 0.000000+09237 2151 434 - 8.652710+3 5.000000-1 3.075400-2 2.300000-2 0.000000+0 0.000000+09237 2151 435 - 8.679750+3 5.000000-1 5.780400-3 2.300000-2 0.000000+0 0.000000+09237 2151 436 - 8.710250+3 5.000000-1 1.047000+0 2.300000-2 0.000000+0 0.000000+09237 2151 437 - 8.731810+3 5.000000-1 3.690700-2 2.300000-2 0.000000+0 0.000000+09237 2151 438 - 8.746330+3 5.000000-1 6.002800-3 2.300000-2 0.000000+0 0.000000+09237 2151 439 - 8.770810+3 5.000000-1 1.239200-1 2.300000-2 0.000000+0 0.000000+09237 2151 440 - 8.786140+3 5.000000-1 5.963800-3 2.300000-2 0.000000+0 0.000000+09237 2151 441 - 8.796250+3 5.000000-1 9.096900-4 2.300000-2 0.000000+0 0.000000+09237 2151 442 - 8.820430+3 5.000000-1 4.042200-2 2.300000-2 0.000000+0 0.000000+09237 2151 443 - 8.844470+3 5.000000-1 3.534000-1 2.300000-2 0.000000+0 0.000000+09237 2151 444 - 8.856140+3 5.000000-1 9.124900-2 2.300000-2 0.000000+0 0.000000+09237 2151 445 - 8.888180+3 5.000000-1 3.100000-1 2.300000-2 0.000000+0 0.000000+09237 2151 446 - 8.896340+3 5.000000-1 9.189800-3 2.300000-2 0.000000+0 0.000000+09237 2151 447 - 8.924340+3 5.000000-1 1.236400-2 2.300000-2 0.000000+0 0.000000+09237 2151 448 - 8.945670+3 5.000000-1 1.180700-1 2.300000-2 0.000000+0 0.000000+09237 2151 449 - 8.963000+3 5.000000-1 3.540000-1 2.300000-2 0.000000+0 0.000000+09237 2151 450 - 8.978205+3 5.000000-1 4.159100-3 2.300000-2 0.000000+0 0.000000+09237 2151 451 - 9.005414+3 5.000000-1 5.248200-3 2.300000-2 0.000000+0 0.000000+09237 2151 452 - 9.017310+3 5.000000-1 5.747500-2 2.300000-2 0.000000+0 0.000000+09237 2151 453 - 9.036290+3 5.000000-1 2.849100-2 2.300000-2 0.000000+0 0.000000+09237 2151 454 - 9.056130+3 5.000000-1 3.742000-1 2.300000-2 0.000000+0 0.000000+09237 2151 455 - 9.091840+3 5.000000-1 4.068800-2 2.300000-2 0.000000+0 0.000000+09237 2151 456 - 9.121790+3 5.000000-1 1.113500-3 2.300000-2 0.000000+0 0.000000+09237 2151 457 - 9.141390+3 5.000000-1 9.782000-2 2.300000-2 0.000000+0 0.000000+09237 2151 458 - 9.165020+3 5.000000-1 7.176000-1 2.300000-2 0.000000+0 0.000000+09237 2151 459 - 9.175010+3 5.000000-1 1.366600-2 2.300000-2 0.000000+0 0.000000+09237 2151 460 - 9.195350+3 5.000000-1 7.195500-3 2.300000-2 0.000000+0 0.000000+09237 2151 461 - 9.215470+3 5.000000-1 1.130500-1 2.300000-2 0.000000+0 0.000000+09237 2151 462 - 9.224831+3 5.000000-1 2.075500-4 2.300000-2 0.000000+0 0.000000+09237 2151 463 - 9.239760+3 5.000000-1 1.560500-2 2.300000-2 0.000000+0 0.000000+09237 2151 464 - 9.285623+3 5.000000-1 1.637600-2 2.300000-2 0.000000+0 0.000000+09237 2151 465 - 9.306340+3 5.000000-1 1.571600-2 2.300000-2 0.000000+0 0.000000+09237 2151 466 - 9.322540+3 5.000000-1 2.213700-3 2.300000-2 0.000000+0 0.000000+09237 2151 467 - 9.345380+3 5.000000-1 2.164700-3 2.300000-2 6.336000-4 0.000000+09237 2151 468 - 9.360873+3 5.000000-1 8.751300-2 2.300000-2 0.000000+0 6.729000-59237 2151 469 - 9.381750+3 5.000000-1 8.656400-2 2.300000-2 0.000000+0 0.000000+09237 2151 470 - 9.415420+3 5.000000-1 5.572500-2 2.300000-2 0.000000+0 0.000000+09237 2151 471 - 9.420415+3 5.000000-1 3.490000-1 2.300000-2 0.000000+0 0.000000+09237 2151 472 - 9.442510+3 5.000000-1 2.246100-2 2.300000-2 0.000000+0 0.000000+09237 2151 473 - 9.453582+3 5.000000-1 1.292200-3 2.300000-2 0.000000+0 0.000000+09237 2151 474 - 9.468810+3 5.000000-1 8.563000-1 2.300000-2 0.000000+0 0.000000+09237 2151 475 - 9.505930+3 5.000000-1 8.117900-3 2.300000-2 0.000000+0 0.000000+09237 2151 476 - 9.528770+3 5.000000-1 1.073700-1 2.300000-2 0.000000+0 0.000000+09237 2151 477 - 9.540540+3 5.000000-1 1.001700-2 2.300000-2 0.000000+0 0.000000+09237 2151 478 - 9.574415+3 5.000000-1 5.611800-2 2.300000-2 0.000000+0 0.000000+09237 2151 479 - 9.586180+3 5.000000-1 5.317400-2 2.300000-2 0.000000+0 0.000000+09237 2151 480 - 9.594720+3 5.000000-1 7.384700-2 2.300000-2 0.000000+0 0.000000+09237 2151 481 - 9.628180+3 5.000000-1 3.680000-1 2.300000-2 0.000000+0 0.000000+09237 2151 482 - 9.631060+3 5.000000-1 7.289000-2 2.300000-2 0.000000+0 0.000000+09237 2151 483 - 9.662624+3 5.000000-1 2.029700-2 2.300000-2 0.000000+0 0.000000+09237 2151 484 - 9.680290+3 5.000000-1 5.144300-2 2.300000-2 0.000000+0 0.000000+09237 2151 485 - 9.698590+3 5.000000-1 9.027400-3 2.300000-2 0.000000+0 0.000000+09237 2151 486 - 9.724874+3 5.000000-1 4.094000-1 2.300000-2 0.000000+0 0.000000+09237 2151 487 - 9.740920+3 5.000000-1 8.748900-2 2.300000-2 0.000000+0 0.000000+09237 2151 488 - 9.765510+3 5.000000-1 2.896600-2 2.300000-2 0.000000+0 0.000000+09237 2151 489 - 9.774380+3 5.000000-1 3.627800-2 2.300000-2 0.000000+0 0.000000+09237 2151 490 - 9.813710+3 5.000000-1 2.625400-3 2.300000-2 0.000000+0 0.000000+09237 2151 491 - 9.831430+3 5.000000-1 3.079100-2 2.300000-2 0.000000+0 0.000000+09237 2151 492 - 9.850680+3 5.000000-1 2.986100-2 2.300000-2 0.000000+0 0.000000+09237 2151 493 - 9.866430+3 5.000000-1 7.890000-1 2.300000-2 0.000000+0 0.000000+09237 2151 494 - 9.903630+3 5.000000-1 3.398600-2 2.300000-2 0.000000+0 0.000000+09237 2151 495 - 9.921510+3 5.000000-1 9.466700-4 2.300000-2 0.000000+0 0.000000+09237 2151 496 - 9.932270+3 5.000000-1 5.901800-2 2.300000-2 0.000000+0 0.000000+09237 2151 497 - 9.956000+3 5.000000-1 9.348700-2 2.300000-2 0.000000+0 0.000000+09237 2151 498 - 9.983630+3 5.000000-1 6.556700-2 2.300000-2 0.000000+0 0.000000+09237 2151 499 - 1.000010+4 5.000000-1 3.990000-2 2.300000-2 0.000000+0 0.000000+09237 2151 500 - 1.000740+4 5.000000-1 4.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 501 - 1.001210+4 5.000000-1 4.620000-2 2.300000-2 0.000000+0 0.000000+09237 2151 502 - 1.002570+4 5.000000-1 1.270000-2 2.300000-2 0.000000+0 0.000000+09237 2151 503 - 1.005430+4 5.000000-1 9.210000-2 2.300000-2 0.000000+0 0.000000+09237 2151 504 - 1.006300+4 5.000000-1 5.855000-1 2.300000-2 0.000000+0 0.000000+09237 2151 505 - 1.008090+4 5.000000-1 2.274000-1 2.300000-2 0.000000+0 0.000000+09237 2151 506 - 1.010450+4 5.000000-1 4.684000-1 2.300000-2 0.000000+0 0.000000+09237 2151 507 - 1.013850+4 5.000000-1 1.434000-1 2.300000-2 0.000000+0 0.000000+09237 2151 508 - 1.016080+4 5.000000-1 4.076000-1 2.300000-2 0.000000+0 0.000000+09237 2151 509 - 1.016880+4 5.000000-1 5.210000-2 2.300000-2 0.000000+0 0.000000+09237 2151 510 - 1.019320+4 5.000000-1 9.620000-2 2.300000-2 0.000000+0 0.000000+09237 2151 511 - 1.019430+4 5.000000-1 9.070000-2 2.300000-2 0.000000+0 0.000000+09237 2151 512 - 1.021860+4 5.000000-1 3.330000-2 2.300000-2 0.000000+0 0.000000+09237 2151 513 - 1.023160+4 5.000000-1 1.180000-2 2.300000-2 0.000000+0 0.000000+09237 2151 514 - 1.024010+4 5.000000-1 2.622000-1 2.300000-2 0.000000+0 0.000000+09237 2151 515 - 1.027990+4 5.000000-1 2.930000-2 2.300000-2 0.000000+0 0.000000+09237 2151 516 - 1.028400+4 5.000000-1 3.658000-1 2.300000-2 0.000000+0 0.000000+09237 2151 517 - 1.030760+4 5.000000-1 8.056000-1 2.300000-2 0.000000+0 0.000000+09237 2151 518 - 1.033580+4 5.000000-1 1.099000-1 2.300000-2 0.000000+0 0.000000+09237 2151 519 - 1.034680+4 5.000000-1 7.068000-1 2.300000-2 0.000000+0 0.000000+09237 2151 520 - 1.037430+4 5.000000-1 2.115000-1 2.300000-2 0.000000+0 0.000000+09237 2151 521 - 1.037750+4 5.000000-1 1.220000-2 2.300000-2 0.000000+0 0.000000+09237 2151 522 - 1.040760+4 5.000000-1 2.205000-1 2.300000-2 0.000000+0 0.000000+09237 2151 523 - 1.041300+4 5.000000-1 4.520000-2 2.300000-2 0.000000+0 0.000000+09237 2151 524 - 1.042640+4 5.000000-1 4.610000-2 2.300000-2 0.000000+0 0.000000+09237 2151 525 - 1.046480+4 5.000000-1 9.600000-2 2.300000-2 0.000000+0 0.000000+09237 2151 526 - 1.049290+4 5.000000-1 8.335000-1 2.300000-2 0.000000+0 0.000000+09237 2151 527 - 1.448490+4 5.000000-1 1.968300+2 2.300000-2 0.000000+0 0.000000+09237 2151 528 - 2.360060+2 9.428480-1 1 0 6780 11309237 2151 529 - 4.393000+0 1.500000+0 5.400000-8 2.300000-2 0.000000+0 0.000000+09237 2151 530 - 7.709000+0 1.500000+0 1.350000-8 2.300000-2 0.000000+0 0.000000+09237 2151 531 - 1.022800+1 5.000000-1 1.680000-6 2.300000-2 0.000000+0 0.000000+09237 2151 532 - 1.134700+1 1.500000+0 2.000000-7 2.300000-2 0.000000+0 0.000000+09237 2151 533 - 1.962790+1 5.000000-1 2.320000-6 2.300000-2 0.000000+0 0.000000+09237 2151 534 - 2.411600+1 1.500000+0 2.300000-7 2.300000-2 0.000000+0 0.000000+09237 2151 535 - 2.691700+1 1.500000+0 3.500000-7 2.300000-2 0.000000+0 0.000000+09237 2151 536 - 4.331000+1 5.000000-1 8.500000-7 2.300000-2 0.000000+0 0.000000+09237 2151 537 - 4.520000+1 1.500000+0 1.050000-6 2.300000-2 0.000000+0 0.000000+09237 2151 538 - 4.675900+1 1.500000+0 1.800000-7 2.300000-2 0.000000+0 0.000000+09237 2151 539 - 4.964100+1 5.000000-1 1.200000-6 2.300000-2 0.000000+0 0.000000+09237 2151 540 - 5.793600+1 1.500000+0 2.400000-7 2.300000-2 0.000000+0 0.000000+09237 2151 541 - 6.350000+1 1.500000+0 6.600000-6 2.300000-2 0.000000+0 0.000000+09237 2151 542 - 6.750000+1 1.500000+0 2.000000-7 2.300000-2 0.000000+0 0.000000+09237 2151 543 - 7.236700+1 5.000000-1 3.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 544 - 8.306000+1 1.500000+0 9.000000-8 2.300000-2 0.000000+0 0.000000+09237 2151 545 - 8.369500+1 5.000000-1 1.230000-5 2.300000-2 0.000000+0 0.000000+09237 2151 546 - 8.922100+1 1.500000+0 4.900000-5 2.300000-2 0.000000+0 0.000000+09237 2151 547 - 9.307500+1 1.500000+0 3.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 548 - 9.800000+1 5.000000-1 4.800000-6 2.300000-2 0.000000+0 0.000000+09237 2151 549 - 1.111510+2 5.000000-1 8.800000-6 2.300000-2 0.000000+0 0.000000+09237 2151 550 - 1.192750+2 1.500000+0 4.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 551 - 1.249940+2 1.500000+0 1.150000-5 2.300000-2 0.000000+0 0.000000+09237 2151 552 - 1.332360+2 5.000000-1 8.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 553 - 1.359500+2 1.500000+0 1.500000-6 2.300000-2 0.000000+0 0.000000+09237 2151 554 - 1.524190+2 5.000000-1 5.300000-5 2.300000-2 0.000000+0 0.000000+09237 2151 555 - 1.589360+2 1.500000+0 9.500000-6 2.300000-2 0.000000+0 0.000000+09237 2151 556 - 1.645000+2 1.500000+0 1.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 557 - 1.731520+2 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 558 - 1.948000+2 1.500000+0 2.500000-6 2.300000-2 0.000000+0 0.000000+09237 2151 559 - 2.007000+2 1.500000+0 3.050000-5 2.300000-2 0.000000+0 0.000000+09237 2151 560 - 2.030730+2 5.000000-1 3.700000-5 2.300000-2 0.000000+0 0.000000+09237 2151 561 - 2.148140+2 1.500000+0 3.600000-5 2.300000-2 0.000000+0 0.000000+09237 2151 562 - 2.182800+2 1.500000+0 1.550000-5 2.300000-2 0.000000+0 0.000000+09237 2151 563 - 2.290560+2 5.000000-1 6.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 564 - 2.427020+2 1.500000+0 9.700000-5 2.300000-2 0.000000+0 0.000000+09237 2151 565 - 2.538800+2 5.000000-1 1.090000-4 2.300000-2 0.000000+0 0.000000+09237 2151 566 - 2.639060+2 5.000000-1 2.760000-4 2.300000-2 0.000000+0 0.000000+09237 2151 567 - 2.752380+2 1.500000+0 1.020000-4 2.300000-2 0.000000+0 0.000000+09237 2151 568 - 2.780840+2 1.500000+0 5.000000-6 2.300000-2 0.000000+0 0.000000+09237 2151 569 - 2.824000+2 1.500000+0 5.350000-5 2.300000-2 0.000000+0 0.000000+09237 2151 570 - 2.855920+2 5.000000-1 2.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 571 - 2.945160+2 1.500000+0 3.800000-5 2.300000-2 0.000000+0 0.000000+09237 2151 572 - 3.078380+2 5.000000-1 1.600000-5 2.300000-2 0.000000+0 0.000000+09237 2151 573 - 3.224680+2 1.500000+0 2.300000-5 2.300000-2 0.000000+0 0.000000+09237 2151 574 - 3.322480+2 1.500000+0 2.800000-5 2.300000-2 0.000000+0 0.000000+09237 2151 575 - 3.375740+2 1.500000+0 5.450000-5 2.300000-2 0.000000+0 0.000000+09237 2151 576 - 3.519960+2 5.000000-1 2.450000-4 2.300000-2 0.000000+0 0.000000+09237 2151 577 - 3.682450+2 1.500000+0 1.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 578 - 3.729280+2 5.000000-1 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 579 - 3.757550+2 1.500000+0 2.200000-5 2.300000-2 0.000000+0 0.000000+09237 2151 580 - 3.902020+2 1.500000+0 1.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 581 - 3.950160+2 1.500000+0 3.600000-5 2.300000-2 0.000000+0 0.000000+09237 2151 582 - 4.080580+2 1.500000+0 4.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 583 - 4.161760+2 1.500000+0 1.200000-5 2.300000-2 0.000000+0 0.000000+09237 2151 584 - 4.398200+2 1.500000+0 1.410000-4 2.300000-2 0.000000+0 0.000000+09237 2151 585 - 4.444700+2 1.500000+0 2.900000-5 2.300000-2 0.000000+0 0.000000+09237 2151 586 - 4.482900+2 1.500000+0 2.300000-5 2.300000-2 0.000000+0 0.000000+09237 2151 587 - 4.542400+2 5.000000-1 4.220000-4 2.300000-2 0.000000+0 0.000000+09237 2151 588 - 4.556250+2 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 589 - 4.855120+2 5.000000-1 1.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 590 - 4.988970+2 1.500000+0 6.100000-5 2.300000-2 0.000000+0 0.000000+09237 2151 591 - 5.234400+2 5.000000-1 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 592 - 5.320201+2 1.500000+0 3.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 593 - 5.424001+2 1.500000+0 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 594 - 5.561501+2 5.000000-1 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 595 - 5.569220+2 1.500000+0 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 596 - 5.846321+2 5.000000-1 1.250000-4 2.300000-2 0.000000+0 0.000000+09237 2151 597 - 6.048301+2 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 598 - 6.068760+2 5.000000-1 2.750000-4 2.300000-2 0.000000+0 0.000000+09237 2151 599 - 6.159700+2 5.000000-1 1.160000-4 2.300000-2 0.000000+0 0.000000+09237 2151 600 - 6.243201+2 1.500000+0 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 601 - 6.332001+2 1.500000+0 9.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 602 - 6.355701+2 1.500000+0 3.400000-5 2.300000-2 0.000000+0 0.000000+09237 2151 603 - 6.472640+2 1.500000+0 3.600000-5 2.300000-2 0.000000+0 0.000000+09237 2151 604 - 6.687001+2 1.500000+0 6.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 605 - 6.711501+2 1.500000+0 2.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 606 - 6.739311+2 1.500000+0 8.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 607 - 6.778801+2 5.000000-1 6.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 608 - 6.892300+2 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 609 - 6.981501+2 1.500000+0 1.850000-4 2.300000-2 0.000000+0 0.000000+09237 2151 610 - 7.106301+2 1.500000+0 6.250000-4 2.300000-2 0.000000+0 0.000000+09237 2151 611 - 7.138721+2 5.000000-1 2.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 612 - 7.161501+2 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 613 - 7.325201+2 5.000000-1 1.985000-3 2.300000-2 0.000000+0 0.000000+09237 2151 614 - 7.348000+2 1.500000+0 9.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 615 - 7.432361+2 5.000000-1 3.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 616 - 7.693801+2 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 617 - 7.723401+2 5.000000-1 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 618 - 7.793701+2 1.500000+0 9.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 619 - 7.859191+2 5.000000-1 1.950000-4 2.300000-2 0.000000+0 0.000000+09237 2151 620 - 7.874401+2 1.500000+0 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 621 - 7.919410+2 1.500000+0 6.610000-4 2.300000-2 0.000000+0 0.000000+09237 2151 622 - 7.951971+2 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 623 - 7.980001+2 5.000000-1 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 624 - 8.010001+2 1.500000+0 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 625 - 8.082001+2 5.000000-1 4.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 626 - 8.238041+2 5.000000-1 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 627 - 8.286821+2 1.500000+0 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 628 - 8.467241+2 5.000000-1 9.490000-4 2.300000-2 0.000000+0 0.000000+09237 2151 629 - 8.585981+2 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 630 - 8.629601+2 1.500000+0 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 631 - 8.913710+2 1.500000+0 3.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 632 - 8.998420+2 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 633 - 9.073751+2 1.500000+0 4.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 634 - 9.101611+2 1.500000+0 7.520000-4 2.300000-2 0.000000+0 0.000000+09237 2151 635 - 9.309100+2 1.500000+0 1.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 636 - 9.334451+2 5.000000-1 3.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 637 - 9.411000+2 1.500000+0 3.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 638 - 9.531000+2 5.000000-1 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 639 - 9.609761+2 1.500000+0 9.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 640 - 9.643911+2 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 641 - 9.773981+2 5.000000-1 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 642 - 9.826600+2 1.500000+0 7.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 643 - 9.841921+2 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 644 - 9.947271+2 1.500000+0 7.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 645 - 9.988281+2 1.500000+0 4.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 646 - 1.000220+3 1.500000+0 4.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 647 - 1.003060+3 5.000000-1 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 648 - 1.011660+3 1.500000+0 9.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 649 - 1.029270+3 5.000000-1 2.670000-3 2.300000-2 0.000000+0 0.000000+09237 2151 650 - 1.033640+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 651 - 1.041680+3 1.500000+0 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 652 - 1.047430+3 1.500000+0 2.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 653 - 1.062810+3 1.500000+0 4.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 654 - 1.067760+3 5.000000-1 1.140000-3 2.300000-2 0.000000+0 0.000000+09237 2151 655 - 1.074230+3 1.500000+0 4.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 656 - 1.081820+3 1.500000+0 7.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 657 - 1.090790+3 1.500000+0 3.600000-5 2.300000-2 0.000000+0 0.000000+09237 2151 658 - 1.095270+3 5.000000-1 2.300000-3 2.300000-2 0.000000+0 0.000000+09237 2151 659 - 1.098910+3 1.500000+0 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 660 - 1.103030+3 1.500000+0 1.060000-3 2.300000-2 0.000000+0 0.000000+09237 2151 661 - 1.111350+3 5.000000-1 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 662 - 1.114060+3 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 663 - 1.118970+3 1.500000+0 2.220000-4 2.300000-2 0.000000+0 0.000000+09237 2151 664 - 1.127000+3 5.000000-1 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 665 - 1.131440+3 1.500000+0 1.790000-3 2.300000-2 0.000000+0 0.000000+09237 2151 666 - 1.135000+3 1.500000+0 1.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 667 - 1.146130+3 5.000000-1 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 668 - 1.148800+3 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 669 - 1.152950+3 1.500000+0 1.540000-4 2.300000-2 0.000000+0 0.000000+09237 2151 670 - 1.155050+3 1.500000+0 3.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 671 - 1.159510+3 5.000000-1 7.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 672 - 1.170150+3 1.500000+0 1.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 673 - 1.175770+3 5.000000-1 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 674 - 1.183570+3 5.000000-1 1.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 675 - 1.186370+3 1.500000+0 6.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 676 - 1.201760+3 1.500000+0 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 677 - 1.214760+3 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 678 - 1.219850+3 5.000000-1 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 679 - 1.230380+3 1.500000+0 2.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 680 - 1.233190+3 1.500000+0 4.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 681 - 1.240330+3 1.500000+0 1.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 682 - 1.251430+3 1.500000+0 3.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 683 - 1.252490+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 684 - 1.261190+3 1.500000+0 5.200000-5 2.300000-2 0.000000+0 0.000000+09237 2151 685 - 1.276460+3 5.000000-1 8.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 686 - 1.278670+3 1.500000+0 2.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 687 - 1.281660+3 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 688 - 1.285770+3 5.000000-1 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 689 - 1.289200+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 690 - 1.296350+3 5.000000-1 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 691 - 1.317210+3 5.000000-1 4.600000-3 2.300000-2 0.000000+0 0.000000+09237 2151 692 - 1.325800+3 1.500000+0 5.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 693 - 1.331510+3 1.500000+0 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 694 - 1.385870+3 1.500000+0 2.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 695 - 1.387370+3 1.500000+0 1.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 696 - 1.399870+3 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 697 - 1.409700+3 1.500000+0 6.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 698 - 1.413760+3 5.000000-1 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 699 - 1.417050+3 1.500000+0 1.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 700 - 1.424890+3 5.000000-1 7.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 701 - 1.447780+3 5.000000-1 1.317000-3 2.300000-2 0.000000+0 0.000000+09237 2151 702 - 1.456270+3 5.000000-1 2.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 703 - 1.466650+3 1.500000+0 5.100000-5 2.300000-2 0.000000+0 0.000000+09237 2151 704 - 1.484960+3 1.500000+0 3.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 705 - 1.487060+3 5.000000-1 2.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 706 - 1.501400+3 1.500000+0 7.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 707 - 1.504310+3 1.500000+0 1.950000-4 2.300000-2 0.000000+0 0.000000+09237 2151 708 - 1.507860+3 1.500000+0 2.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 709 - 1.510710+3 5.000000-1 9.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 710 - 1.513850+3 1.500000+0 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 711 - 1.527990+3 1.500000+0 4.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 712 - 1.529940+3 1.500000+0 9.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 713 - 1.535060+3 5.000000-1 6.960000-4 2.300000-2 0.000000+0 0.000000+09237 2151 714 - 1.539400+3 1.500000+0 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 715 - 1.542920+3 1.500000+0 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 716 - 1.547360+3 1.500000+0 1.550000-3 2.300000-2 0.000000+0 0.000000+09237 2151 717 - 1.550540+3 5.000000-1 4.330000-3 2.300000-2 0.000000+0 0.000000+09237 2151 718 - 1.555330+3 5.000000-1 4.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 719 - 1.562310+3 5.000000-1 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 720 - 1.568440+3 1.500000+0 4.940000-4 2.300000-2 0.000000+0 0.000000+09237 2151 721 - 1.577600+3 1.500000+0 1.700000-5 2.300000-2 0.000000+0 0.000000+09237 2151 722 - 1.594930+3 1.500000+0 2.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 723 - 1.601600+3 1.500000+0 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 724 - 1.607030+3 1.500000+0 4.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 725 - 1.613810+3 5.000000-1 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 726 - 1.615130+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 727 - 1.626680+3 1.500000+0 5.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 728 - 1.643020+3 5.000000-1 1.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 729 - 1.650830+3 5.000000-1 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 730 - 1.658500+3 1.500000+0 2.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 731 - 1.671950+3 1.500000+0 9.300000-5 2.300000-2 0.000000+0 0.000000+09237 2151 732 - 1.672850+3 5.000000-1 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 733 - 1.683180+3 5.000000-1 2.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 734 - 1.691230+3 1.500000+0 2.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 735 - 1.697810+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 736 - 1.700700+3 1.500000+0 2.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 737 - 1.706800+3 5.000000-1 9.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 738 - 1.712130+3 1.500000+0 1.050000-3 2.300000-2 0.000000+0 0.000000+09237 2151 739 - 1.734070+3 5.000000-1 1.200000-5 2.300000-2 0.000000+0 0.000000+09237 2151 740 - 1.739520+3 1.500000+0 7.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 741 - 1.745680+3 1.500000+0 8.380000-4 2.300000-2 0.000000+0 0.000000+09237 2151 742 - 1.758090+3 1.500000+0 1.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 743 - 1.766980+3 1.500000+0 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 744 - 1.776230+3 1.500000+0 5.260000-4 2.300000-2 0.000000+0 0.000000+09237 2151 745 - 1.787620+3 5.000000-1 2.070000-4 2.300000-2 0.000000+0 0.000000+09237 2151 746 - 1.790400+3 1.500000+0 1.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 747 - 1.797800+3 1.500000+0 1.600000-3 2.300000-2 0.000000+0 0.000000+09237 2151 748 - 1.801600+3 5.000000-1 2.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 749 - 1.835240+3 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 750 - 1.869520+3 5.000000-1 1.730000-3 2.300000-2 0.000000+0 0.000000+09237 2151 751 - 1.881130+3 1.500000+0 8.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 752 - 1.890160+3 1.500000+0 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 753 - 1.894000+3 1.500000+0 6.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 754 - 1.895200+3 1.500000+0 3.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 755 - 1.906060+3 1.500000+0 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 756 - 1.908530+3 1.500000+0 9.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 757 - 1.913310+3 1.500000+0 2.355000-3 2.300000-2 0.000000+0 0.000000+09237 2151 758 - 1.925450+3 5.000000-1 9.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 759 - 1.943170+3 1.500000+0 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 760 - 1.965340+3 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 761 - 1.985030+3 1.500000+0 2.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 762 - 1.990510+3 1.500000+0 5.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 763 - 2.004750+3 1.500000+0 2.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 764 - 2.013150+3 1.500000+0 1.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 765 - 2.035160+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 766 - 2.049150+3 5.000000-1 1.780000-3 2.300000-2 0.000000+0 0.000000+09237 2151 767 - 2.063820+3 1.500000+0 2.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 768 - 2.071720+3 5.000000-1 2.520000-3 2.300000-2 0.000000+0 0.000000+09237 2151 769 - 2.080790+3 5.000000-1 1.700000-3 2.300000-2 0.000000+0 0.000000+09237 2151 770 - 2.086060+3 1.500000+0 1.950000-3 2.300000-2 0.000000+0 0.000000+09237 2151 771 - 2.103840+3 1.500000+0 8.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 772 - 2.114170+3 5.000000-1 7.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 773 - 2.126160+3 1.500000+0 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 774 - 2.140590+3 5.000000-1 5.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 775 - 2.156240+3 1.500000+0 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 776 - 2.158510+3 1.500000+0 1.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 777 - 2.172840+3 5.000000-1 2.070000-3 2.300000-2 0.000000+0 0.000000+09237 2151 778 - 2.179380+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 779 - 2.192500+3 1.500000+0 3.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 780 - 2.197220+3 1.500000+0 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 781 - 2.211820+3 5.000000-1 2.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 782 - 2.215150+3 1.500000+0 1.650000-3 2.300000-2 0.000000+0 0.000000+09237 2151 783 - 2.220500+3 1.500000+0 1.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 784 - 2.234110+3 5.000000-1 2.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 785 - 2.241320+3 1.500000+0 6.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 786 - 2.250670+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 787 - 2.271020+3 1.500000+0 1.760000-3 2.300000-2 0.000000+0 0.000000+09237 2151 788 - 2.294520+3 5.000000-1 1.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 789 - 2.297190+3 1.500000+0 1.650000-3 2.300000-2 0.000000+0 0.000000+09237 2151 790 - 2.305430+3 5.000000-1 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 791 - 2.318670+3 1.500000+0 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 792 - 2.328370+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 793 - 2.339070+3 5.000000-1 1.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 794 - 2.362610+3 1.500000+0 1.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 795 - 2.366040+3 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 796 - 2.368890+3 5.000000-1 4.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 797 - 2.370960+3 1.500000+0 7.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 798 - 2.384660+3 1.500000+0 3.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 799 - 2.397910+3 1.500000+0 2.170000-3 2.300000-2 0.000000+0 0.000000+09237 2151 800 - 2.402110+3 5.000000-1 4.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 801 - 2.411350+3 5.000000-1 6.140000-3 2.300000-2 0.000000+0 0.000000+09237 2151 802 - 2.418500+3 1.500000+0 1.300000-3 2.300000-2 0.000000+0 0.000000+09237 2151 803 - 2.431010+3 1.500000+0 1.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 804 - 2.434890+3 5.000000-1 5.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 805 - 2.439640+3 1.500000+0 1.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 806 - 2.452610+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 807 - 2.458980+3 5.000000-1 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 808 - 2.464470+3 1.500000+0 2.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 809 - 2.468040+3 1.500000+0 2.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 810 - 2.470780+3 1.500000+0 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 811 - 2.479700+3 5.000000-1 3.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 812 - 2.501360+3 1.500000+0 1.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 813 - 2.503320+3 1.500000+0 8.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 814 - 2.527220+3 1.500000+0 5.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 815 - 2.534260+3 5.000000-1 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 816 - 2.546850+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 817 - 2.552620+3 5.000000-1 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 818 - 2.565400+3 1.500000+0 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 819 - 2.570740+3 5.000000-1 1.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 820 - 2.575590+3 1.500000+0 3.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 821 - 2.584860+3 5.000000-1 2.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 822 - 2.592300+3 1.500000+0 8.000000-5 2.300000-2 0.000000+0 0.000000+09237 2151 823 - 2.600850+3 1.500000+0 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 824 - 2.604340+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 825 - 2.605770+3 5.000000-1 2.570000-3 2.300000-2 0.000000+0 0.000000+09237 2151 826 - 2.611920+3 5.000000-1 4.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 827 - 2.632850+3 5.000000-1 3.480000-3 2.300000-2 0.000000+0 0.000000+09237 2151 828 - 2.634990+3 1.500000+0 2.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 829 - 2.636880+3 1.500000+0 1.040000-3 2.300000-2 0.000000+0 0.000000+09237 2151 830 - 2.653940+3 1.500000+0 3.900000-4 2.300000-2 0.000000+0 0.000000+09237 2151 831 - 2.658910+3 5.000000-1 5.050000-3 2.300000-2 0.000000+0 0.000000+09237 2151 832 - 2.661590+3 1.500000+0 3.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 833 - 2.682670+3 1.500000+0 1.330000-3 2.300000-2 0.000000+0 0.000000+09237 2151 834 - 2.688090+3 5.000000-1 1.050000-3 2.300000-2 0.000000+0 0.000000+09237 2151 835 - 2.702360+3 1.500000+0 9.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 836 - 2.720750+3 5.000000-1 3.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 837 - 2.732730+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 838 - 2.736700+3 5.000000-1 4.300000-4 2.300000-2 0.000000+0 0.000000+09237 2151 839 - 2.766960+3 5.000000-1 4.770000-3 2.300000-2 0.000000+0 0.000000+09237 2151 840 - 2.774510+3 1.500000+0 8.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 841 - 2.779100+3 1.500000+0 7.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 842 - 2.799620+3 1.500000+0 2.640000-3 2.300000-2 0.000000+0 0.000000+09237 2151 843 - 2.811630+3 1.500000+0 2.340000-3 2.300000-2 0.000000+0 0.000000+09237 2151 844 - 2.816170+3 5.000000-1 1.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 845 - 2.823670+3 1.500000+0 4.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 846 - 2.825250+3 1.500000+0 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 847 - 2.837540+3 5.000000-1 3.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 848 - 2.846400+3 5.000000-1 1.450000-3 2.300000-2 0.000000+0 0.000000+09237 2151 849 - 2.877830+3 1.500000+0 8.900000-4 2.300000-2 0.000000+0 0.000000+09237 2151 850 - 2.885070+3 1.500000+0 6.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 851 - 2.888420+3 1.500000+0 2.100000-4 2.300000-2 0.000000+0 0.000000+09237 2151 852 - 2.898930+3 5.000000-1 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 853 - 2.900210+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 854 - 2.906580+3 1.500000+0 2.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 855 - 2.919000+3 5.000000-1 5.660000-3 2.300000-2 0.000000+0 0.000000+09237 2151 856 - 2.923190+3 1.500000+0 2.050000-3 2.300000-2 0.000000+0 0.000000+09237 2151 857 - 2.925970+3 1.500000+0 2.900000-3 2.300000-2 0.000000+0 0.000000+09237 2151 858 - 2.946100+3 1.500000+0 1.050000-3 2.300000-2 0.000000+0 0.000000+09237 2151 859 - 2.954000+3 1.500000+0 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 860 - 2.989130+3 1.500000+0 3.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 861 - 3.015420+3 5.000000-1 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 862 - 3.024890+3 1.500000+0 1.990000-3 2.300000-2 0.000000+0 0.000000+09237 2151 863 - 3.048500+3 1.500000+0 6.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 864 - 3.062570+3 1.500000+0 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 865 - 3.072740+3 5.000000-1 1.720000-3 2.300000-2 0.000000+0 0.000000+09237 2151 866 - 3.089100+3 1.500000+0 2.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 867 - 3.103100+3 1.500000+0 9.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 868 - 3.109500+3 5.000000-1 1.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 869 - 3.113620+3 1.500000+0 2.250000-3 2.300000-2 0.000000+0 0.000000+09237 2151 870 - 3.121390+3 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 871 - 3.129660+3 5.000000-1 2.510000-3 2.300000-2 0.000000+0 0.000000+09237 2151 872 - 3.133050+3 1.500000+0 6.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 873 - 3.156300+3 5.000000-1 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 874 - 3.170210+3 1.500000+0 4.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 875 - 3.174070+3 1.500000+0 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 876 - 3.181420+3 1.500000+0 7.500000-5 2.300000-2 0.000000+0 0.000000+09237 2151 877 - 3.194700+3 5.000000-1 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 878 - 3.210400+3 5.000000-1 2.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 879 - 3.215140+3 1.500000+0 4.400000-4 2.300000-2 0.000000+0 0.000000+09237 2151 880 - 3.220420+3 1.500000+0 5.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 881 - 3.233100+3 1.500000+0 3.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 882 - 3.239460+3 5.000000-1 1.220000-3 2.300000-2 0.000000+0 0.000000+09237 2151 883 - 3.257780+3 1.500000+0 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 884 - 3.263770+3 1.500000+0 6.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 885 - 3.267440+3 1.500000+0 3.460000-3 2.300000-2 0.000000+0 0.000000+09237 2151 886 - 3.273510+3 1.500000+0 6.450000-3 2.300000-2 0.000000+0 0.000000+09237 2151 887 - 3.297810+3 1.500000+0 4.300000-3 2.300000-2 0.000000+0 0.000000+09237 2151 888 - 3.308080+3 5.000000-1 4.700000-3 2.300000-2 0.000000+0 0.000000+09237 2151 889 - 3.341040+3 1.500000+0 1.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 890 - 3.346730+3 1.500000+0 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 891 - 3.366130+3 5.000000-1 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 892 - 3.373580+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 893 - 3.378860+3 5.000000-1 6.600000-3 2.300000-2 0.000000+0 0.000000+09237 2151 894 - 3.383590+3 1.500000+0 1.750000-3 2.300000-2 0.000000+0 0.000000+09237 2151 895 - 3.399590+3 5.000000-1 9.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 896 - 3.418120+3 1.500000+0 1.950000-3 2.300000-2 0.000000+0 0.000000+09237 2151 897 - 3.446510+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 898 - 3.448500+3 1.500000+0 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 899 - 3.459100+3 1.500000+0 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 900 - 3.463490+3 5.000000-1 6.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 901 - 3.471210+3 1.500000+0 4.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 902 - 3.493740+3 1.500000+0 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 903 - 3.506600+3 1.500000+0 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 904 - 3.512830+3 5.000000-1 2.660000-3 2.300000-2 0.000000+0 0.000000+09237 2151 905 - 3.528900+3 1.500000+0 2.900000-3 2.300000-2 0.000000+0 0.000000+09237 2151 906 - 3.536960+3 1.500000+0 2.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 907 - 3.547700+3 1.500000+0 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 908 - 3.555100+3 1.500000+0 1.800000-4 2.300000-2 0.000000+0 0.000000+09237 2151 909 - 3.566400+3 5.000000-1 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 910 - 3.568500+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 911 - 3.582920+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 912 - 3.584900+3 5.000000-1 7.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 913 - 3.597790+3 1.500000+0 1.900000-3 2.300000-2 0.000000+0 0.000000+09237 2151 914 - 3.603520+3 1.500000+0 7.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 915 - 3.612800+3 5.000000-1 7.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 916 - 3.637700+3 1.500000+0 3.850000-3 2.300000-2 0.000000+0 0.000000+09237 2151 917 - 3.653800+3 5.000000-1 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 918 - 3.654800+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 919 - 3.672490+3 1.500000+0 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 920 - 3.674160+3 1.500000+0 2.700000-3 2.300000-2 0.000000+0 0.000000+09237 2151 921 - 3.683440+3 5.000000-1 3.800000-3 2.300000-2 0.000000+0 0.000000+09237 2151 922 - 3.691020+3 1.500000+0 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 923 - 3.719920+3 1.500000+0 3.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 924 - 3.724200+3 5.000000-1 1.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 925 - 3.726260+3 1.500000+0 1.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 926 - 3.742250+3 5.000000-1 2.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 927 - 3.760230+3 1.500000+0 4.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 928 - 3.768640+3 1.500000+0 3.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 929 - 3.790990+3 1.500000+0 1.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 930 - 3.799490+3 1.500000+0 4.500000-4 2.300000-2 0.000000+0 0.000000+09237 2151 931 - 3.809940+3 1.500000+0 6.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 932 - 3.825620+3 5.000000-1 4.900000-3 2.300000-2 0.000000+0 0.000000+09237 2151 933 - 3.830090+3 1.500000+0 1.250000-3 2.300000-2 0.000000+0 0.000000+09237 2151 934 - 3.842300+3 5.000000-1 5.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 935 - 3.854300+3 1.500000+0 1.200000-4 2.300000-2 0.000000+0 0.000000+09237 2151 936 - 3.857000+3 5.000000-1 4.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 937 - 3.864400+3 5.000000-1 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 938 - 3.870060+3 1.500000+0 3.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 939 - 3.879320+3 1.500000+0 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 940 - 3.880500+3 1.500000+0 9.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 941 - 3.894860+3 5.000000-1 7.200000-3 2.300000-2 0.000000+0 0.000000+09237 2151 942 - 3.903270+3 5.000000-1 3.600000-3 2.300000-2 0.000000+0 0.000000+09237 2151 943 - 3.928200+3 1.500000+0 4.500000-3 2.300000-2 0.000000+0 0.000000+09237 2151 944 - 3.933430+3 5.000000-1 1.050000-2 2.300000-2 0.000000+0 0.000000+09237 2151 945 - 3.935920+3 1.500000+0 1.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 946 - 3.950200+3 1.500000+0 1.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 947 - 3.975340+3 5.000000-1 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 948 - 3.979250+3 1.500000+0 1.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 949 - 3.992740+3 5.000000-1 2.400000-3 2.300000-2 0.000000+0 0.000000+09237 2151 950 - 3.993940+3 1.500000+0 8.000000-4 2.300000-2 0.000000+0 0.000000+09237 2151 951 - 4.008100+3 5.000000-1 5.568700-4 2.300000-2 0.000000+0 0.000000+09237 2151 952 - 4.009290+3 1.500000+0 1.147000-3 2.300000-2 0.000000+0 0.000000+09237 2151 953 - 4.014420+3 5.000000-1 1.073800-3 2.300000-2 0.000000+0 0.000000+09237 2151 954 - 4.024840+3 5.000000-1 6.034200-4 2.300000-2 0.000000+0 0.000000+09237 2151 955 - 4.025590+3 5.000000-1 4.996400-4 2.300000-2 0.000000+0 0.000000+09237 2151 956 - 4.039270+3 5.000000-1 2.390600-3 2.300000-2 0.000000+0 0.000000+09237 2151 957 - 4.051310+3 5.000000-1 1.920800-4 2.300000-2 0.000000+0 0.000000+09237 2151 958 - 4.052490+3 1.500000+0 1.038700-4 2.300000-2 0.000000+0 0.000000+09237 2151 959 - 4.063090+3 1.500000+0 4.428000-4 2.300000-2 0.000000+0 0.000000+09237 2151 960 - 4.072720+3 5.000000-1 4.538900-4 2.300000-2 0.000000+0 0.000000+09237 2151 961 - 4.082050+3 1.500000+0 2.320000-3 2.300000-2 0.000000+0 0.000000+09237 2151 962 - 4.087660+3 1.500000+0 8.126800-4 2.300000-2 0.000000+0 0.000000+09237 2151 963 - 4.098050+3 1.500000+0 7.574900-5 2.300000-2 0.000000+0 0.000000+09237 2151 964 - 4.100820+3 1.500000+0 1.346400-3 2.300000-2 0.000000+0 0.000000+09237 2151 965 - 4.104070+3 5.000000-1 4.234000-4 2.300000-2 0.000000+0 0.000000+09237 2151 966 - 4.105230+3 1.500000+0 3.829200-4 2.300000-2 0.000000+0 0.000000+09237 2151 967 - 4.122600+3 5.000000-1 2.746800-3 2.300000-2 0.000000+0 0.000000+09237 2151 968 - 4.124370+3 5.000000-1 2.704200-3 2.300000-2 0.000000+0 0.000000+09237 2151 969 - 4.130920+3 1.500000+0 6.987800-4 2.300000-2 0.000000+0 0.000000+09237 2151 970 - 4.141070+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 971 - 4.146750+3 1.500000+0 2.700000-4 2.300000-2 0.000000+0 0.000000+09237 2151 972 - 4.149300+3 5.000000-1 3.954300-3 2.300000-2 0.000000+0 0.000000+09237 2151 973 - 4.158140+3 5.000000-1 2.294300-3 2.300000-2 0.000000+0 0.000000+09237 2151 974 - 4.165600+3 1.500000+0 1.630000-2 2.300000-2 0.000000+0 0.000000+09237 2151 975 - 4.175470+3 1.500000+0 6.915100-4 2.300000-2 0.000000+0 0.000000+09237 2151 976 - 4.182900+3 5.000000-1 9.169400-3 2.300000-2 0.000000+0 0.000000+09237 2151 977 - 4.186820+3 1.500000+0 5.510300-4 2.300000-2 0.000000+0 0.000000+09237 2151 978 - 4.199000+3 1.500000+0 1.795800-5 2.300000-2 0.000000+0 0.000000+09237 2151 979 - 4.202540+3 5.000000-1 2.152700-3 2.300000-2 0.000000+0 0.000000+09237 2151 980 - 4.203910+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 981 - 4.217340+3 5.000000-1 9.029600-4 2.300000-2 0.000000+0 0.000000+09237 2151 982 - 4.233950+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 983 - 4.236130+3 1.500000+0 5.430100-4 2.300000-2 0.000000+0 0.000000+09237 2151 984 - 4.237700+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 985 - 4.242810+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 986 - 4.244970+3 1.500000+0 1.060500-4 2.300000-2 0.000000+0 0.000000+09237 2151 987 - 4.246930+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 988 - 4.270090+3 1.500000+0 3.354200-4 2.300000-2 0.000000+0 0.000000+09237 2151 989 - 4.278080+3 5.000000-1 1.533400-3 2.300000-2 0.000000+0 0.000000+09237 2151 990 - 4.278660+3 1.500000+0 1.026600-3 2.300000-2 0.000000+0 0.000000+09237 2151 991 - 4.280110+3 1.500000+0 5.145200-4 2.300000-2 0.000000+0 0.000000+09237 2151 992 - 4.294550+3 5.000000-1 2.600000-4 2.300000-2 0.000000+0 0.000000+09237 2151 993 - 4.313210+3 1.500000+0 7.752400-4 2.300000-2 0.000000+0 0.000000+09237 2151 994 - 4.315810+3 5.000000-1 1.278300-2 2.300000-2 0.000000+0 0.000000+09237 2151 995 - 4.318980+3 1.500000+0 9.876200-4 2.300000-2 0.000000+0 0.000000+09237 2151 996 - 4.334120+3 5.000000-1 1.275700-3 2.300000-2 0.000000+0 0.000000+09237 2151 997 - 4.340800+3 1.500000+0 8.878200-4 2.300000-2 0.000000+0 0.000000+09237 2151 998 - 4.341780+3 5.000000-1 6.551500-4 2.300000-2 0.000000+0 0.000000+09237 2151 999 - 4.348650+3 5.000000-1 7.556200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1000 - 4.351610+3 1.500000+0 7.687200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1001 - 4.363380+3 1.500000+0 3.839200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1002 - 4.364370+3 1.500000+0 6.175200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1003 - 4.365940+3 5.000000-1 3.495700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1004 - 4.375700+3 5.000000-1 4.450000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1005 - 4.378700+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1006 - 4.402450+3 1.500000+0 1.603800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1007 - 4.408000+3 5.000000-1 2.232400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1008 - 4.408860+3 1.500000+0 1.185400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1009 - 4.410730+3 1.500000+0 5.459200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1010 - 4.413340+3 5.000000-1 1.299000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1011 - 4.426790+3 1.500000+0 3.310100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1012 - 4.432130+3 5.000000-1 7.271100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1013 - 4.439780+3 1.500000+0 8.919600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1014 - 4.441750+3 1.500000+0 2.332100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1015 - 4.442530+3 5.000000-1 2.840000-5 2.300000-2 0.000000+0 0.000000+09237 2151 1016 - 4.445430+3 1.500000+0 1.162900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1017 - 4.448670+3 1.500000+0 2.214900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1018 - 4.454320+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1019 - 4.457260+3 1.500000+0 1.143600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1020 - 4.463740+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1021 - 4.466280+3 1.500000+0 2.128100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1022 - 4.467860+3 1.500000+0 1.249500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1023 - 4.472460+3 5.000000-1 1.226200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1024 - 4.473050+3 1.500000+0 6.415300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1025 - 4.481810+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1026 - 4.484170+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1027 - 4.486530+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1028 - 4.495170+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1029 - 4.496540+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1030 - 4.497920+3 5.000000-1 6.020700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1031 - 4.499490+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1032 - 4.509050+3 5.000000-1 7.005200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1033 - 4.519860+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1034 - 4.529140+3 1.500000+0 1.025400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1035 - 4.540450+3 1.500000+0 2.696500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1036 - 4.551600+3 5.000000-1 1.197400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1037 - 4.558400+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1038 - 4.561970+3 1.500000+0 9.022300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1039 - 4.563360+3 5.000000-1 1.891200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1040 - 4.573500+3 5.000000-1 3.830300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1041 - 4.584060+3 1.500000+0 4.103300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1042 - 4.588810+3 1.500000+0 9.262100-5 2.300000-2 0.000000+0 0.000000+09237 2151 1043 - 4.601750+3 5.000000-1 1.179000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1044 - 4.603900+3 1.500000+0 4.069100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1045 - 4.608130+3 1.500000+0 8.938900-5 2.300000-2 0.000000+0 0.000000+09237 2151 1046 - 4.614180+3 5.000000-1 4.997600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1047 - 4.615880+3 1.500000+0 9.350200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1048 - 4.620750+3 1.500000+0 1.434500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1049 - 4.625730+3 1.500000+0 4.031400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1050 - 4.633500+3 1.500000+0 6.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1051 - 4.639860+3 5.000000-1 6.545600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1052 - 4.642130+3 1.500000+0 2.888000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1053 - 4.644870+3 5.000000-1 6.018500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1054 - 4.652190+3 1.500000+0 1.873500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1055 - 4.659130+3 1.500000+0 1.861600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1056 - 4.665720+3 5.000000-1 3.415700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1057 - 4.674680+3 1.500000+0 7.817800-5 2.300000-2 0.000000+0 0.000000+09237 2151 1058 - 4.677260+3 1.500000+0 9.238200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1059 - 4.690790+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1060 - 4.702820+3 5.000000-1 8.518400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1061 - 4.709840+3 1.500000+0 3.812200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1062 - 4.715460+3 1.500000+0 1.129200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1063 - 4.716600+3 5.000000-1 2.261300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1064 - 4.725270+3 1.500000+0 7.559600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1065 - 4.737000+3 5.000000-1 7.159100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1066 - 4.744610+3 5.000000-1 1.082700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1067 - 4.749940+3 1.500000+0 4.019300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1068 - 4.753520+3 1.500000+0 1.122000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1069 - 4.755070+3 1.500000+0 3.477400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1070 - 4.775460+3 1.500000+0 8.950700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1071 - 4.776980+3 5.000000-1 2.646200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1072 - 4.791950+3 1.500000+0 1.029800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1073 - 4.793750+3 5.000000-1 6.779900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1074 - 4.801630+3 1.500000+0 3.790500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1075 - 4.808590+3 5.000000-1 1.227300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1076 - 4.810020+3 1.500000+0 5.818200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1077 - 4.819340+3 1.500000+0 1.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1078 - 4.836520+3 1.500000+0 1.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1079 - 4.847420+3 5.000000-1 4.887400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1080 - 4.850560+3 1.500000+0 4.862400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1081 - 4.870610+3 1.500000+0 2.163600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1082 - 4.872680+3 5.000000-1 4.694500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1083 - 4.880770+3 1.500000+0 2.910700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1084 - 4.885960+3 1.500000+0 2.010900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1085 - 4.887330+3 5.000000-1 4.136600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1086 - 4.914980+3 1.500000+0 3.979100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1087 - 4.925180+3 1.500000+0 1.619600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1088 - 4.938970+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1089 - 4.942450+3 1.500000+0 3.468200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1090 - 4.944510+3 5.000000-1 3.288300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1091 - 4.959770+3 1.500000+0 7.652100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1092 - 4.966500+3 1.500000+0 2.898600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1093 - 4.996050+3 5.000000-1 5.249000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1094 - 4.999080+3 1.500000+0 7.000000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1095 - 5.024540+3 1.500000+0 1.387100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1096 - 5.028910+3 1.500000+0 1.211200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1097 - 5.039630+3 5.000000-1 8.190500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1098 - 5.051510+3 1.500000+0 1.484400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1099 - 5.054450+3 1.500000+0 2.871100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1100 - 5.063330+3 5.000000-1 1.608700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1101 - 5.066730+3 1.500000+0 8.501500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1102 - 5.072100+3 1.500000+0 1.589300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1103 - 5.077980+3 1.500000+0 2.119100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1104 - 5.086810+3 1.500000+0 1.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1105 - 5.094430+3 5.000000-1 7.893800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1106 - 5.096530+3 5.000000-1 1.191300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1107 - 5.101060+3 1.500000+0 1.603200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1108 - 5.103020+3 1.500000+0 1.913800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1109 - 5.110330+3 5.000000-1 5.047900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1110 - 5.129550+3 1.500000+0 7.325300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1111 - 5.138180+3 1.500000+0 8.677500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1112 - 5.150530+3 5.000000-1 2.663800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1113 - 5.152490+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1114 - 5.160630+3 1.500000+0 2.739700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1115 - 5.175640+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1116 - 5.181070+3 1.500000+0 1.672300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1117 - 5.191410+3 1.500000+0 3.748600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1118 - 5.192590+3 5.000000-1 4.505400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1119 - 5.197770+3 1.500000+0 1.035000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1120 - 5.207250+3 5.000000-1 3.975700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1121 - 5.210220+3 1.500000+0 1.085000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1122 - 5.221090+3 1.500000+0 1.825000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1123 - 5.239690+3 1.500000+0 7.108800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1124 - 5.256340+3 1.500000+0 1.550400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1125 - 5.264940+3 5.000000-1 1.114900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1126 - 5.278020+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1127 - 5.284450+3 5.000000-1 3.951800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1128 - 5.286030+3 1.500000+0 4.207100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1129 - 5.293140+3 1.500000+0 7.002500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1130 - 5.295640+3 5.000000-1 6.987900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1131 - 5.323850+3 1.500000+0 3.982500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1132 - 5.328660+3 1.500000+0 1.957600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1133 - 5.350830+3 5.000000-1 1.887800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1134 - 5.356630+3 1.500000+0 3.652700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1135 - 5.378590+3 1.500000+0 5.613800-5 2.300000-2 0.000000+0 0.000000+09237 2151 1136 - 5.383860+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1137 - 5.391710+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1138 - 5.397590+3 1.500000+0 5.251100-5 2.300000-2 0.000000+0 0.000000+09237 2151 1139 - 5.411310+3 1.500000+0 4.280600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1140 - 5.419160+3 5.000000-1 3.865500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1141 - 5.428640+3 5.000000-1 2.854800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1142 - 5.441120+3 1.500000+0 6.703800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1143 - 5.443630+3 1.500000+0 2.143000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1144 - 5.451510+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1145 - 5.454450+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1146 - 5.458500+3 1.500000+0 8.388400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1147 - 5.469400+3 1.500000+0 1.430000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1148 - 5.472020+3 5.000000-1 3.335100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1149 - 5.479350+3 1.500000+0 2.448900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1150 - 5.504700+3 1.500000+0 1.625000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1151 - 5.513520+3 5.000000-1 1.814700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1152 - 5.513800+3 1.500000+0 1.000000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1153 - 5.525570+3 1.500000+0 5.485700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1154 - 5.540170+3 1.500000+0 4.256000-6 2.300000-2 0.000000+0 0.000000+09237 2151 1155 - 5.546250+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1156 - 5.551000+3 1.500000+0 1.425000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1157 - 5.554480+3 1.500000+0 5.420900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1158 - 5.567620+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1159 - 5.569170+3 1.500000+0 1.062400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1160 - 5.570840+3 1.500000+0 9.573200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1161 - 5.582850+3 5.000000-1 1.087700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1162 - 5.597620+3 1.500000+0 3.445900-5 2.300000-2 0.000000+0 0.000000+09237 2151 1163 - 5.599600+3 1.500000+0 4.291100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1164 - 5.601741+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1165 - 5.620560+3 5.000000-1 4.559200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1166 - 5.632330+3 1.500000+0 9.441300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1167 - 5.635270+3 1.500000+0 4.217900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1168 - 5.645880+3 5.000000-1 1.754100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1169 - 5.658210+3 1.500000+0 4.170600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1170 - 5.664870+3 1.500000+0 1.041600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1171 - 5.675750+3 5.000000-1 2.235900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1172 - 5.688140+3 5.000000-1 2.544500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1173 - 5.690020+3 1.500000+0 9.316400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1174 - 5.702110+3 1.500000+0 2.002200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1175 - 5.703680+3 5.000000-1 5.185000-5 2.300000-2 0.000000+0 0.000000+09237 2151 1176 - 5.709450+3 1.500000+0 1.241000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1177 - 5.712800+3 5.000000-1 2.187200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1178 - 5.714170+3 1.500000+0 3.346000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1179 - 5.722270+3 5.000000-1 2.429700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1180 - 5.728090+3 1.500000+0 2.496800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1181 - 5.744090+3 5.000000-1 4.180100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1182 - 5.745200+3 1.500000+0 5.683800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1183 - 5.748620+3 1.500000+0 3.982800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1184 - 5.763250+3 5.000000-1 7.289900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1185 - 5.764400+3 1.500000+0 8.654700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1186 - 5.770310+3 1.500000+0 2.486300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1187 - 5.771530+3 1.500000+0 8.247200-5 2.300000-2 0.000000+0 0.000000+09237 2151 1188 - 5.775380+3 5.000000-1 7.092400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1189 - 5.776730+3 1.500000+0 2.484600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1190 - 5.796410+3 5.000000-1 2.671500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1191 - 5.806840+3 1.500000+0 2.687700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1192 - 5.808000+3 5.000000-1 2.140500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1193 - 5.832330+3 1.500000+0 5.052300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1194 - 5.849320+3 1.500000+0 1.405000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1195 - 5.851741+3 5.000000-1 5.817800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1196 - 5.853530+3 1.500000+0 8.957200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1197 - 5.886270+3 1.500000+0 1.409500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1198 - 5.890890+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1199 - 5.903090+3 5.000000-1 7.516000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1200 - 5.907620+3 1.500000+0 9.580200-5 2.300000-2 0.000000+0 0.000000+09237 2151 1201 - 5.910760+3 1.500000+0 1.777800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1202 - 5.927290+3 5.000000-1 2.604300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1203 - 5.930700+3 1.500000+0 3.498500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1204 - 5.936250+3 1.500000+0 2.087700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1205 - 5.937200+3 5.000000-1 3.368600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1206 - 5.950620+3 1.500000+0 1.082000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1207 - 5.952720+3 1.500000+0 8.735400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1208 - 5.978550+3 5.000000-1 5.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1209 - 5.987700+3 1.500000+0 2.320000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1210 - 6.005550+3 5.000000-1 2.390800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1211 - 6.010060+3 5.000000-1 3.332300-5 2.300000-2 0.000000+0 0.000000+09237 2151 1212 - 6.015130+3 1.500000+0 9.674600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1213 - 6.018790+3 1.500000+0 5.476600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1214 - 6.032110+3 5.000000-1 1.112800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1215 - 6.039200+3 5.000000-1 1.852800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1216 - 6.042620+3 1.500000+0 8.531900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1217 - 6.065260+3 5.000000-1 4.229500-7 2.300000-2 0.000000+0 0.000000+09237 2151 1218 - 6.082060+3 1.500000+0 1.363300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1219 - 6.084230+3 5.000000-1 8.909100-5 2.300000-2 0.000000+0 0.000000+09237 2151 1220 - 6.085380+3 1.500000+0 2.929500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1221 - 6.092890+3 1.500000+0 5.038400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1222 - 6.093890+3 5.000000-1 2.357700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1223 - 6.099870+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1224 - 6.102850+3 5.000000-1 6.145200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1225 - 6.108800+3 1.500000+0 3.211600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1226 - 6.116140+3 1.500000+0 2.164700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1227 - 6.134390+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1228 - 6.140270+3 1.500000+0 3.142500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1229 - 6.143150+3 5.000000-1 1.970100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1230 - 6.145880+3 1.500000+0 5.193600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1231 - 6.162050+3 1.500000+0 1.036000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1232 - 6.170700+3 5.000000-1 1.234300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1233 - 6.185930+3 5.000000-1 4.420600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1234 - 6.187840+3 1.500000+0 1.900000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1235 - 6.201360+3 1.500000+0 1.500000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1236 - 6.202460+3 1.500000+0 4.200000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1237 - 6.207190+3 5.000000-1 1.330300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1238 - 6.216120+3 1.500000+0 5.528600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1239 - 6.226140+3 1.500000+0 2.952400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1240 - 6.231700+3 5.000000-1 1.825200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1241 - 6.236140+3 5.000000-1 2.372300-5 2.300000-2 0.000000+0 0.000000+09237 2151 1242 - 6.243900+3 1.500000+0 2.912900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1243 - 6.246800+3 5.000000-1 1.823000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1244 - 6.258310+3 1.500000+0 5.514200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1245 - 6.265830+3 1.500000+0 4.982200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1246 - 6.283150+3 1.500000+0 3.853500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1247 - 6.286721+3 5.000000-1 8.763700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1248 - 6.292770+3 1.500000+0 1.550000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1249 - 6.300340+3 1.500000+0 4.127700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1250 - 6.312010+3 1.500000+0 7.907700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1251 - 6.316840+3 1.500000+0 7.896300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1252 - 6.329710+3 1.500000+0 1.570000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1253 - 6.332150+3 5.000000-1 3.165000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1254 - 6.333980+3 1.500000+0 2.339500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1255 - 6.356340+3 5.000000-1 1.116200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1256 - 6.364500+3 5.000000-1 2.106600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1257 - 6.369090+3 1.500000+0 1.810900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1258 - 6.390160+3 1.500000+0 4.636700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1259 - 6.400260+3 1.500000+0 2.560700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1260 - 6.403210+3 1.500000+0 6.524000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1261 - 6.431971+3 5.000000-1 3.300500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1262 - 6.440451+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1263 - 6.449060+3 5.000000-1 1.992600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1264 - 6.450570+3 1.500000+0 1.077400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1265 - 6.466830+3 5.000000-1 2.119300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1266 - 6.470242+3 1.500000+0 7.531100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1267 - 6.475030+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1268 - 6.481500+3 1.500000+0 3.307500-5 2.300000-2 0.000000+0 0.000000+09237 2151 1269 - 6.485730+3 1.500000+0 3.212100-5 2.300000-2 0.000000+0 0.000000+09237 2151 1270 - 6.490300+3 5.000000-1 7.149500-6 2.300000-2 0.000000+0 0.000000+09237 2151 1271 - 6.494480+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1272 - 6.502500+3 1.500000+0 5.400200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1273 - 6.507660+3 5.000000-1 3.805100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1274 - 6.516270+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1275 - 6.519340+3 1.500000+0 5.404000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1276 - 6.523180+3 5.000000-1 8.039600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1277 - 6.530090+3 1.500000+0 2.078900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1278 - 6.557830+3 1.500000+0 7.319400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1279 - 6.567920+3 5.000000-1 3.220000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1280 - 6.572590+3 1.500000+0 1.551100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1281 - 6.579570+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1282 - 6.592410+3 1.500000+0 1.237000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1283 - 6.601000+3 5.000000-1 3.367500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1284 - 6.603730+3 1.500000+0 7.207600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1285 - 6.612960+3 1.500000+0 2.573500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1286 - 6.622140+3 1.500000+0 1.229400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1287 - 6.637951+3 5.000000-1 7.979200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1288 - 6.640860+3 1.500000+0 5.788000-5 2.300000-2 0.000000+0 0.000000+09237 2151 1289 - 6.660750+3 1.500000+0 1.670000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1290 - 6.673070+3 1.500000+0 2.556200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1291 - 6.681790+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1292 - 6.688000+3 1.500000+0 1.726500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1293 - 6.700790+3 1.500000+0 1.826000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1294 - 6.703993+3 5.000000-1 9.886500-5 2.300000-2 0.000000+0 0.000000+09237 2151 1295 - 6.719370+3 5.000000-1 5.645400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1296 - 6.721380+3 1.500000+0 2.129400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1297 - 6.729993+3 1.500000+0 2.814000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1298 - 6.731960+3 5.000000-1 7.477000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1299 - 6.741210+3 1.500000+0 9.938100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1300 - 6.754010+3 5.000000-1 6.885800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1301 - 6.768180+3 1.500000+0 1.063800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1302 - 6.775890+3 5.000000-1 4.997400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1303 - 6.778330+3 1.500000+0 1.680800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1304 - 6.791360+3 1.500000+0 2.666800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1305 - 6.795960+3 5.000000-1 4.590400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1306 - 6.816570+3 5.000000-1 1.065700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1307 - 6.819980+3 1.500000+0 1.581400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1308 - 6.834660+3 1.500000+0 1.546300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1309 - 6.836243+3 5.000000-1 1.167100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1310 - 6.848350+3 1.500000+0 4.919800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1311 - 6.858860+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1312 - 6.869870+3 1.500000+0 1.850000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1313 - 6.871550+3 5.000000-1 3.382200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1314 - 6.887760+3 5.000000-1 1.140100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1315 - 6.901110+3 1.500000+0 2.181300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1316 - 6.902870+3 5.000000-1 2.691200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1317 - 6.911140+3 1.500000+0 7.063500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1318 - 6.915743+3 1.500000+0 8.408900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1319 - 6.917420+3 5.000000-1 1.532500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1320 - 6.926650+3 1.500000+0 4.237700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1321 - 6.933790+3 5.000000-1 1.585900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1322 - 6.941370+3 1.500000+0 4.211700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1323 - 6.946420+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1324 - 6.954020+3 5.000000-1 1.245700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1325 - 6.975931+3 1.500000+0 3.231700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1326 - 6.989640+3 1.500000+0 1.643800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1327 - 6.994750+3 1.500000+0 3.181700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1328 - 7.003870+3 5.000000-1 5.170900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1329 - 7.015250+3 1.500000+0 3.175200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1330 - 7.015681+3 1.500000+0 1.126300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1331 - 7.035940+3 5.000000-1 1.805600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1332 - 7.046160+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1333 - 7.048750+3 1.500000+0 3.473400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1334 - 7.054610+3 1.500000+0 1.115900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1335 - 7.076420+3 1.500000+0 4.186300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1336 - 7.086770+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1337 - 7.088570+3 1.500000+0 1.544600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1338 - 7.096410+3 5.000000-1 7.584100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1339 - 7.108610+3 1.500000+0 1.101300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1340 - 7.119980+3 5.000000-1 5.510600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1341 - 7.127860+3 5.000000-1 3.781100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1342 - 7.134000+3 1.500000+0 3.846900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1343 - 7.165980+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1344 - 7.169270+3 5.000000-1 2.222700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1345 - 7.174400+3 5.000000-1 1.501400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1346 - 7.183702+3 1.500000+0 1.738000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1347 - 7.199020+3 1.500000+0 1.791400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1348 - 7.212550+3 1.500000+0 6.207400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1349 - 7.215230+3 5.000000-1 1.893500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1350 - 7.226181+3 1.500000+0 1.576900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1351 - 7.234010+3 1.500000+0 3.590500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1352 - 7.242030+3 5.000000-1 9.319300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1353 - 7.262223+3 1.500000+0 2.584800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1354 - 7.272480+3 1.500000+0 5.561300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1355 - 7.281300+3 5.000000-1 1.854700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1356 - 7.291270+3 5.000000-1 4.628100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1357 - 7.297620+3 1.500000+0 5.442600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1358 - 7.303980+3 1.500000+0 2.571700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1359 - 7.321050+3 1.500000+0 2.770300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1360 - 7.332810+3 1.500000+0 3.072700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1361 - 7.340420+3 1.500000+0 9.359800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1362 - 7.362760+3 1.500000+0 1.537500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1363 - 7.365710+3 5.000000-1 1.748300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1364 - 7.368110+3 5.000000-1 7.343500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1365 - 7.382590+3 1.500000+0 5.217000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1366 - 7.386980+3 1.500000+0 1.328000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1367 - 7.403650+3 1.500000+0 7.175100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1368 - 7.414870+3 5.000000-1 6.379900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1369 - 7.416432+3 1.500000+0 2.028400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1370 - 7.422250+3 1.500000+0 2.026600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1371 - 7.430411+3 1.500000+0 3.270000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1372 - 7.438530+3 1.500000+0 2.520000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1373 - 7.453090+3 1.500000+0 8.180700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1374 - 7.464110+3 5.000000-1 1.419900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1375 - 7.469050+3 1.500000+0 3.639100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1376 - 7.489480+3 1.500000+0 7.946300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1377 - 7.505380+3 5.000000-1 3.488900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1378 - 7.512250+3 1.500000+0 8.595600-5 2.300000-2 0.000000+0 0.000000+09237 2151 1379 - 7.515100+3 1.500000+0 8.521500-5 2.300000-2 0.000000+0 0.000000+09237 2151 1380 - 7.523744+3 5.000000-1 2.625600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1381 - 7.530070+3 1.500000+0 3.210600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1382 - 7.534830+3 5.000000-1 1.629500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1383 - 7.548661+3 1.500000+0 9.792600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1384 - 7.552030+3 5.000000-1 2.356200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1385 - 7.568050+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1386 - 7.583661+3 1.500000+0 4.674700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1387 - 7.601580+3 5.000000-1 3.331800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1388 - 7.603280+3 1.500000+0 9.950900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1389 - 7.631780+3 1.500000+0 3.988500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1390 - 7.639770+3 1.500000+0 4.494900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1391 - 7.660960+3 5.000000-1 3.320300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1392 - 7.677474+3 1.500000+0 1.934100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1393 - 7.685703+3 1.500000+0 1.945100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1394 - 7.695030+3 1.500000+0 4.369400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1395 - 7.706350+3 5.000000-1 2.506700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1396 - 7.707830+3 1.500000+0 3.960600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1397 - 7.713750+3 1.500000+0 4.317700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1398 - 7.722641+3 1.500000+0 4.972300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1399 - 7.724610+3 5.000000-1 1.149300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1400 - 7.739974+3 5.000000-1 1.579600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1401 - 7.745920+3 5.000000-1 1.061100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1402 - 7.756860+3 5.000000-1 2.042900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1403 - 7.769810+3 1.500000+0 1.009500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1404 - 7.773840+3 5.000000-1 2.947200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1405 - 7.789230+3 1.500000+0 4.108400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1406 - 7.793310+3 1.500000+0 9.089300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1407 - 7.795320+3 5.000000-1 3.350400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1408 - 7.819820+3 1.500000+0 4.425700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1409 - 7.836590+3 5.000000-1 1.699500-4 2.300000-2 0.000000+0 0.000000+09237 2151 1410 - 7.851260+3 5.000000-1 6.115000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1411 - 7.863953+3 1.500000+0 1.414200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1412 - 7.865110+3 1.500000+0 2.893200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1413 - 7.876662+3 5.000000-1 1.495600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1414 - 7.881000+3 1.500000+0 2.043700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1415 - 7.882370+3 5.000000-1 5.083100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1416 - 7.884330+3 1.500000+0 8.324400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1417 - 7.889820+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1418 - 7.892370+3 1.500000+0 3.819700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1419 - 7.902170+3 1.500000+0 1.776400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1420 - 7.904170+3 5.000000-1 2.612100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1421 - 7.910891+3 1.500000+0 1.373500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1422 - 7.916530+3 5.000000-1 1.041300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1423 - 7.925770+3 1.500000+0 3.879300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1424 - 7.933480+3 1.500000+0 2.869400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1425 - 7.934954+3 5.000000-1 3.602000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1426 - 7.941210+3 5.000000-1 2.351300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1427 - 7.943270+3 1.500000+0 5.363600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1428 - 7.956183+3 1.500000+0 8.910000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1429 - 7.958250+3 1.500000+0 2.860800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1430 - 7.965530+3 1.500000+0 4.874300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1431 - 7.984170+3 5.000000-1 6.781000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1432 - 7.986933+3 1.500000+0 2.209800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1433 - 7.990412+3 1.500000+0 3.542600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1434 - 8.001860+3 5.000000-1 1.933500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1435 - 8.018570+3 1.500000+0 1.839000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1436 - 8.028704+3 1.500000+0 8.395900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1437 - 8.066380+3 5.000000-1 6.704300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1438 - 8.077480+3 1.500000+0 1.321900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1439 - 8.086204+3 5.000000-1 3.142100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1440 - 8.098662+3 1.500000+0 1.315300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1441 - 8.102912+3 1.500000+0 1.115200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1442 - 8.109820+3 5.000000-1 1.172900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1443 - 8.114080+3 1.500000+0 7.149100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1444 - 8.119940+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1445 - 8.122630+3 1.500000+0 2.303500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1446 - 8.132210+3 1.500000+0 8.085900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1447 - 8.151210+3 5.000000-1 9.260700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1448 - 8.152850+3 1.500000+0 1.552800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1449 - 8.168662+3 1.500000+0 3.286200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1450 - 8.171621+3 5.000000-1 7.484100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1451 - 8.185892+3 1.500000+0 2.381500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1452 - 8.191290+3 5.000000-1 1.957300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1453 - 8.214162+3 5.000000-1 4.017000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1454 - 8.218500+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1455 - 8.233300+3 5.000000-1 4.793600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1456 - 8.267960+3 1.500000+0 4.749200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1457 - 8.273930+3 5.000000-1 7.942700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1458 - 8.284704+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1459 - 8.295413+3 1.500000+0 3.737600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1460 - 8.303830+3 5.000000-1 6.480600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1461 - 8.339060+3 1.500000+0 7.457100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1462 - 8.343220+3 1.500000+0 5.218100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1463 - 8.352954+3 5.000000-1 4.693500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1464 - 8.372163+3 5.000000-1 1.497000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1465 - 8.379140+3 1.500000+0 1.226300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1466 - 8.383050+3 5.000000-1 1.580400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1467 - 8.384745+3 5.000000-1 1.580100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1468 - 8.394250+3 1.500000+0 1.221400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1469 - 8.416140+3 1.500000+0 6.689200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1470 - 8.418670+3 5.000000-1 1.743600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1471 - 8.439250+3 1.500000+0 1.260100-4 2.300000-2 0.000000+0 0.000000+09237 2151 1472 - 8.459180+3 5.000000-1 6.928400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1473 - 8.489163+3 1.500000+0 2.091400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1474 - 8.493413+3 5.000000-1 2.122100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1475 - 8.494290+3 1.500000+0 1.990500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1476 - 8.500000+3 5.000000-1 3.924300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1477 - 8.509130+3 1.500000+0 5.643600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1478 - 8.511371+3 5.000000-1 1.424000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1479 - 8.525670+3 5.000000-1 6.045700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1480 - 8.529000+3 1.500000+0 5.634400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1481 - 8.537500+3 5.000000-1 4.537600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1482 - 8.553913+3 1.500000+0 3.635600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1483 - 8.556500+3 5.000000-1 3.659900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1484 - 8.558220+3 1.500000+0 1.659600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1485 - 8.563710+3 5.000000-1 6.232500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1486 - 8.577580+3 5.000000-1 1.917300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1487 - 8.580180+3 1.500000+0 3.625100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1488 - 8.582790+3 5.000000-1 1.883800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1489 - 8.591495+3 1.500000+0 1.648300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1490 - 8.594080+3 5.000000-1 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1491 - 8.603390+3 1.500000+0 1.749400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1492 - 8.608000+3 5.000000-1 1.500800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1493 - 8.612540+3 1.500000+0 2.817500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1494 - 8.621290+3 1.500000+0 1.638100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1495 - 8.639250+3 5.000000-1 1.454000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1496 - 8.643920+3 1.500000+0 4.588900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1497 - 8.655640+3 1.500000+0 1.870000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1498 - 8.665040+3 5.000000-1 9.954600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1499 - 8.697455+3 1.500000+0 4.565600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1500 - 8.705122+3 1.500000+0 1.00000-10 2.300000-2 0.000000+0 0.000000+09237 2151 1501 - 8.708830+3 5.000000-1 2.511500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1502 - 8.716970+3 5.000000-1 1.857000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1503 - 8.721122+3 1.500000+0 6.263300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1504 - 8.726460+3 5.000000-1 5.259700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1505 - 8.728250+3 1.500000+0 1.601200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1506 - 8.743122+3 1.500000+0 1.596100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1507 - 8.758164+3 1.500000+0 6.145400-4 2.300000-2 0.000000+0 0.000000+09237 2151 1508 - 8.761000+3 5.000000-1 6.042000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1509 - 8.763330+3 1.500000+0 8.175400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1510 - 8.768170+3 1.500000+0 1.587400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1511 - 8.783750+3 1.500000+0 2.531100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1512 - 8.790955+3 1.500000+0 2.166400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1513 - 8.792960+3 5.000000-1 1.617600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1514 - 8.798460+3 1.500000+0 6.498700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1515 - 8.810930+3 1.500000+0 1.572500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1516 - 8.823164+3 1.500000+0 1.178000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1517 - 8.841122+3 5.000000-1 7.641500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1518 - 8.842800+3 1.500000+0 4.502000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1519 - 8.853122+3 1.500000+0 7.461900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1520 - 8.862520+3 1.500000+0 5.811000-4 2.300000-2 0.000000+0 0.000000+09237 2151 1521 - 8.865560+3 5.000000-1 5.044800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1522 - 8.876830+3 5.000000-1 1.707200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1523 - 8.879460+3 1.500000+0 8.406800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1524 - 8.884750+3 1.500000+0 1.059900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1525 - 8.898180+3 1.500000+0 5.429700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1526 - 8.901245+3 1.500000+0 4.476100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1527 - 8.909205+3 1.500000+0 3.491700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1528 - 8.912560+3 5.000000-1 5.839500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1529 - 8.919750+3 5.000000-1 9.214100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1530 - 8.928210+3 1.500000+0 1.531500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1531 - 8.943590+3 1.500000+0 2.793200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1532 - 8.949890+3 1.500000+0 8.399000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1533 - 8.957790+3 5.000000-1 2.204100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1534 - 8.959550+3 1.500000+0 2.113900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1535 - 8.973250+3 1.500000+0 1.515600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1536 - 8.991220+3 1.500000+0 1.023900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1537 - 8.993710+3 1.500000+0 5.415900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1538 - 9.002414+3 1.500000+0 5.902900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1539 - 9.013245+3 5.000000-1 4.285600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1540 - 9.014872+3 1.500000+0 6.388300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1541 - 9.022790+3 1.500000+0 3.416200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1542 - 9.024220+3 5.000000-1 1.112900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1543 - 9.033600+3 1.500000+0 5.396700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1544 - 9.055040+3 5.000000-1 4.092300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1545 - 9.060705+3 1.500000+0 1.130600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1546 - 9.071550+3 5.000000-1 3.671400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1547 - 9.073455+3 1.500000+0 8.292100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1548 - 9.076590+3 1.500000+0 2.449300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1549 - 9.079500+3 5.000000-1 3.595700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1550 - 9.088250+3 1.500000+0 2.444800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1551 - 9.103420+3 1.500000+0 1.469300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1552 - 9.105460+3 5.000000-1 1.198400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1553 - 9.111790+3 1.500000+0 2.047600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1554 - 9.123831+3 1.500000+0 3.402600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1555 - 9.138960+3 5.000000-1 2.355600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1556 - 9.151050+3 1.500000+0 3.877300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1557 - 9.152970+3 5.000000-1 1.765000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1558 - 9.161914+3 1.500000+0 1.738500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1559 - 9.172770+3 1.500000+0 9.251400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1560 - 9.183020+3 5.000000-1 1.763400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1561 - 9.186745+3 1.500000+0 1.815000-2 2.300000-2 0.000000+0 0.000000+09237 2151 1562 - 9.193920+3 1.500000+0 1.920000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1563 - 9.204210+3 5.000000-1 1.473200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1564 - 9.207560+3 1.500000+0 1.914900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1565 - 9.213210+3 1.500000+0 4.665200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1566 - 9.228050+3 1.500000+0 4.615900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1567 - 9.238390+3 1.500000+0 2.870200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1568 - 9.244873+3 5.000000-1 1.443800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1569 - 9.246390+3 1.500000+0 7.552400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1570 - 9.250705+3 1.500000+0 1.031100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1571 - 9.283831+3 1.500000+0 4.304200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1572 - 9.291790+3 5.000000-1 7.144700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1573 - 9.304060+3 1.500000+0 4.294900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1574 - 9.311390+3 1.500000+0 4.291600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1575 - 9.325020+3 1.500000+0 9.089600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1576 - 9.327170+3 5.000000-1 1.403100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1577 - 9.341430+3 1.500000+0 4.237700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1578 - 9.357581+3 1.500000+0 1.377600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1579 - 9.365290+3 1.500000+0 4.266900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1580 - 9.375500+3 1.500000+0 8.583600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1581 - 9.379040+3 5.000000-1 5.433700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1582 - 9.403560+3 1.500000+0 2.802600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1583 - 9.405210+3 5.000000-1 1.383100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1584 - 9.407550+3 1.500000+0 4.015600-4 2.300000-2 0.000000+0 0.000000+09237 2151 1585 - 9.412873+3 5.000000-1 1.332500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1586 - 9.414210+3 1.500000+0 3.279700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1587 - 9.418873+3 1.500000+0 8.119900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1588 - 9.432850+3 1.500000+0 3.930300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1589 - 9.439540+3 5.000000-1 9.366700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1590 - 9.455915+3 5.000000-1 1.393000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1591 - 9.460270+3 1.500000+0 8.614900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1592 - 9.464550+3 1.500000+0 4.879700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1593 - 9.467665+3 5.000000-1 4.538700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1594 - 9.473373+3 1.500000+0 8.568700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1595 - 9.486460+3 1.500000+0 4.211000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1596 - 9.487890+3 5.000000-1 1.659600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1597 - 9.503995+3 1.500000+0 3.241200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1598 - 9.507710+3 5.000000-1 1.252600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1599 - 9.516832+3 1.500000+0 2.755700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1600 - 9.525960+3 5.000000-1 2.867600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1601 - 9.532390+3 1.500000+0 2.270100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1602 - 9.551420+3 1.500000+0 5.142800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1603 - 9.553170+3 5.000000-1 7.823100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1604 - 9.557220+3 1.500000+0 2.593400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1605 - 9.567750+3 1.500000+0 6.097800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1606 - 9.582760+3 5.000000-1 2.010400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1607 - 9.592000+3 5.000000-1 4.100200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1608 - 9.593374+3 1.500000+0 4.161300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1609 - 9.614270+3 1.500000+0 5.111300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1610 - 9.616510+3 5.000000-1 1.768300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1611 - 9.625960+3 1.500000+0 2.232500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1612 - 9.630430+3 1.500000+0 6.108300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1613 - 9.646960+3 5.000000-1 9.095200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1614 - 9.648915+3 1.500000+0 8.027600-2 2.300000-2 0.000000+0 0.000000+09237 2151 1615 - 9.667374+3 1.500000+0 3.170300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1616 - 9.677750+3 1.500000+0 6.999400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1617 - 9.683300+3 5.000000-1 1.662500-2 2.300000-2 0.000000+0 0.000000+09237 2151 1618 - 9.700560+3 5.000000-1 3.342100-2 2.300000-2 0.000000+0 0.000000+09237 2151 1619 - 9.705550+3 1.500000+0 5.843300-4 2.300000-2 0.000000+0 0.000000+09237 2151 1620 - 9.708624+3 5.000000-1 2.432300-2 2.300000-2 0.000000+0 0.000000+09237 2151 1621 - 9.716710+3 1.500000+0 7.700700-4 2.300000-2 0.000000+0 0.000000+09237 2151 1622 - 9.721020+3 1.500000+0 1.718400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1623 - 9.738374+3 5.000000-1 1.127400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1624 - 9.744670+3 1.500000+0 1.044500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1625 - 9.758000+3 1.500000+0 1.229300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1626 - 9.762210+3 1.500000+0 9.832300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1627 - 9.772760+3 5.000000-1 1.644400-2 2.300000-2 0.000000+0 0.000000+09237 2151 1628 - 9.783332+3 1.500000+0 1.219700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1629 - 9.784745+3 1.500000+0 3.118900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1630 - 9.793915+3 1.500000+0 8.057800-5 2.300000-2 0.000000+0 0.000000+09237 2151 1631 - 9.797430+3 5.000000-1 1.840800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1632 - 9.800260+3 1.500000+0 2.104900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1633 - 9.810874+3 1.500000+0 5.469200-4 2.300000-2 0.000000+0 0.000000+09237 2151 1634 - 9.821140+3 1.500000+0 1.205400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1635 - 9.828010+3 1.500000+0 1.202800-3 2.300000-2 0.000000+0 0.000000+09237 2151 1636 - 9.843640+3 5.000000-1 2.021800-4 2.300000-2 0.000000+0 0.000000+09237 2151 1637 - 9.848130+3 1.500000+0 3.185900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1638 - 9.857750+3 1.500000+0 3.181600-3 2.300000-2 0.000000+0 0.000000+09237 2151 1639 - 9.860624+3 1.500000+0 1.274900-2 2.300000-2 0.000000+0 0.000000+09237 2151 1640 - 9.864541+3 5.000000-1 2.675200-2 2.300000-2 0.000000+0 0.000000+09237 2151 1641 - 9.876310+3 1.500000+0 5.454300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1642 - 9.878460+3 1.500000+0 6.405900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1643 - 9.888041+3 5.000000-1 8.777900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1644 - 9.890270+3 1.500000+0 3.072300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1645 - 9.898510+3 1.500000+0 2.121500-3 2.300000-2 0.000000+0 0.000000+09237 2151 1646 - 9.901380+3 5.000000-1 1.102700-2 2.300000-2 0.000000+0 0.000000+09237 2151 1647 - 9.917920+3 1.500000+0 1.452000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1648 - 9.928710+3 1.500000+0 5.046900-4 2.300000-2 0.000000+0 0.000000+09237 2151 1649 - 9.937374+3 1.500000+0 3.051300-3 2.300000-2 0.000000+0 0.000000+09237 2151 1650 - 9.940970+3 5.000000-1 4.087900-3 2.300000-2 0.000000+0 0.000000+09237 2151 1651 - 9.948920+3 1.500000+0 1.723000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1652 - 9.952890+3 1.500000+0 4.939200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1653 - 9.959915+3 1.500000+0 1.064800-2 2.300000-2 0.000000+0 0.000000+09237 2151 1654 - 9.973915+3 5.000000-1 2.489400-3 2.300000-2 0.000000+0 0.000000+09237 2151 1655 - 9.979340+3 1.500000+0 2.088200-3 2.300000-2 0.000000+0 0.000000+09237 2151 1656 - 9.995340+3 1.500000+0 1.139100-3 2.300000-2 0.000000+0 0.000000+09237 2151 1657 - 9.997170+3 5.000000-1 8.633700-3 2.300000-2 0.000000+0 0.000000+09237 2151 1658 - 1.000480+4 1.500000+0 2.100000-3 2.300000-2 0.000000+0 0.000000+09237 2151 1659 - 1.000000+4 1.490290+5 2 2 0 09237 2151 1660 - 0.000000+0 9.433790-1 1 0 3 09237 2151 1661 - 2.360060+2 0.000000+0 0 0 1 09237 2151 1662 - 5.000000-1 0.000000+0 5 0 144 239237 2151 1663 - 0.000000+0 0.000000+0 2.000000+0 1.000000+0 0.000000+0 0.000000+09237 2151 1664 - 1.000000+4 2.249290+1 0.000000+0 2.137130-3 2.270560-2 0.000000+09237 2151 1665 - 1.200000+4 2.239290+1 0.000000+0 2.121350-3 2.272680-2 0.000000+09237 2151 1666 - 1.400000+4 2.229340+1 0.000000+0 2.106200-3 2.274800-2 0.000000+09237 2151 1667 - 1.600000+4 2.219440+1 0.000000+0 2.091550-3 2.276930-2 0.000000+09237 2151 1668 - 1.800000+4 2.209570+1 0.000000+0 2.077320-3 2.279060-2 0.000000+09237 2151 1669 - 2.000000+4 2.199760+1 0.000000+0 2.063460-3 2.281190-2 0.000000+09237 2151 1670 - 2.300000+4 2.185120+1 0.000000+0 2.043260-3 2.284390-2 0.000000+09237 2151 1671 - 2.600000+4 2.170590+1 0.000000+0 2.023690-3 2.287600-2 0.000000+09237 2151 1672 - 3.000000+4 2.151390+1 0.000000+0 1.998440-3 2.291910-2 0.000000+09237 2151 1673 - 3.500000+4 2.127610+1 0.000000+0 1.967970-3 2.297280-2 0.000000+09237 2151 1674 - 4.000000+4 2.104110+1 0.000000+0 1.938570-3 2.302660-2 0.000000+09237 2151 1675 - 4.500000+4 2.080860+1 0.000000+0 1.910100-3 2.308050-2 0.000000+09237 2151 1676 - 4.509020+4 2.080440+1 0.000000+0 1.909600-3 2.308140-2 0.000000+09237 2151 1677 - 5.000000+4 2.057890+1 1.097450-5 1.882470-3 2.313450-2 0.000000+09237 2151 1678 - 5.500000+4 2.035200+1 6.242520-5 1.855610-3 2.318890-2 0.000000+09237 2151 1679 - 6.000000+4 2.012740+1 1.703450-4 1.829400-3 2.324300-2 0.000000+09237 2151 1680 - 7.000000+4 1.968630+1 5.935770-4 1.778900-3 2.335250-2 0.000000+09237 2151 1681 - 8.000000+4 1.925540+1 1.332900-3 1.730620-3 2.346240-2 0.000000+09237 2151 1682 - 9.000000+4 1.883420+1 2.416260-3 1.684330-3 2.357300-2 0.000000+09237 2151 1683 - 1.000000+5 1.842260+1 3.857070-3 1.639840-3 2.368410-2 0.000000+09237 2151 1684 - 1.200000+5 1.762720+1 7.818620-3 1.555690-3 2.390780-2 0.000000+09237 2151 1685 - 1.400000+5 1.686740+1 1.317280-2 1.477270-3 2.424070-2 0.000000+09237 2151 1686 - 1.490290+5 1.653580+1 1.601860-2 1.443570-3 2.434410-2 0.000000+09237 2151 1687 - 2.360060+2 0.000000+0 1 0 2 09237 2151 1688 - 5.000000-1 0.000000+0 5 0 144 239237 2151 1689 - 0.000000+0 0.000000+0 1.000000+0 1.000000+0 0.000000+0 0.000000+09237 2151 1690 - 1.000000+4 2.249290+1 0.000000+0 4.568250-3 2.280610-2 0.000000+09237 2151 1691 - 1.200000+4 2.239290+1 0.000000+0 4.555920-3 2.282740-2 0.000000+09237 2151 1692 - 1.400000+4 2.229340+1 0.000000+0 4.543240-3 2.284870-2 0.000000+09237 2151 1693 - 1.600000+4 2.219440+1 0.000000+0 4.530270-3 2.287010-2 0.000000+09237 2151 1694 - 1.800000+4 2.209570+1 0.000000+0 4.516970-3 2.289140-2 0.000000+09237 2151 1695 - 2.000000+4 2.199760+1 0.000000+0 4.503430-3 2.291280-2 0.000000+09237 2151 1696 - 2.300000+4 2.185120+1 0.000000+0 4.482640-3 2.294500-2 0.000000+09237 2151 1697 - 2.600000+4 2.170590+1 0.000000+0 4.461360-3 2.297720-2 0.000000+09237 2151 1698 - 3.000000+4 2.151390+1 0.000000+0 4.432310-3 2.302050-2 0.000000+09237 2151 1699 - 3.500000+4 2.127610+1 0.000000+0 4.394890-3 2.307440-2 0.000000+09237 2151 1700 - 4.000000+4 2.104110+1 0.000000+0 4.356510-3 2.312850-2 0.000000+09237 2151 1701 - 4.500000+4 2.080860+1 0.000000+0 4.317220-3 2.318260-2 0.000000+09237 2151 1702 - 4.509020+4 2.080440+1 0.000000+0 4.316510-3 2.318350-2 0.000000+09237 2151 1703 - 5.000000+4 2.057890+1 4.778600-3 4.277230-3 2.323690-2 0.000000+09237 2151 1704 - 5.500000+4 2.035200+1 1.339310-2 4.236630-3 2.329150-2 0.000000+09237 2151 1705 - 6.000000+4 2.012740+1 2.415080-2 4.195410-3 2.334580-2 0.000000+09237 2151 1706 - 7.000000+4 1.968630+1 4.976480-2 4.111800-3 2.345590-2 0.000000+09237 2151 1707 - 8.000000+4 1.925540+1 7.874450-2 4.026940-3 2.356620-2 0.000000+09237 2151 1708 - 9.000000+4 1.883420+1 1.095510-1 3.941300-3 2.367730-2 0.000000+09237 2151 1709 - 1.000000+5 1.842260+1 1.411940-1 3.855300-3 2.378890-2 0.000000+09237 2151 1710 - 1.200000+5 1.762720+1 2.044380-1 3.683500-3 2.401360-2 0.000000+09237 2151 1711 - 1.400000+5 1.686740+1 2.649780-1 3.513680-3 2.424070-2 0.000000+09237 2151 1712 - 1.490290+5 1.653580+1 2.908950-1 3.438120-3 2.434410-2 0.000000+09237 2151 1713 - 1.500000+0 0.000000+0 5 0 144 239237 2151 1714 - 0.000000+0 0.000000+0 2.000000+0 1.000000+0 0.000000+0 0.000000+09237 2151 1715 - 1.000000+4 1.168310+1 0.000000+0 2.372820-3 2.280610-2 0.000000+09237 2151 1716 - 1.200000+4 1.163110+1 0.000000+0 2.366400-3 2.282740-2 0.000000+09237 2151 1717 - 1.400000+4 1.157930+1 0.000000+0 2.359790-3 2.284870-2 0.000000+09237 2151 1718 - 1.600000+4 1.152780+1 0.000000+0 2.353030-3 2.287010-2 0.000000+09237 2151 1719 - 1.800000+4 1.147650+1 0.000000+0 2.346110-3 2.289140-2 0.000000+09237 2151 1720 - 2.000000+4 1.142540+1 0.000000+0 2.339050-3 2.291280-2 0.000000+09237 2151 1721 - 2.300000+4 1.134920+1 0.000000+0 2.328220-3 2.294500-2 0.000000+09237 2151 1722 - 2.600000+4 1.127350+1 0.000000+0 2.317130-3 2.297720-2 0.000000+09237 2151 1723 - 3.000000+4 1.117360+1 0.000000+0 2.302000-3 2.302050-2 0.000000+09237 2151 1724 - 3.500000+4 1.104980+1 0.000000+0 2.282510-3 2.307440-2 0.000000+09237 2151 1725 - 4.000000+4 1.092750+1 0.000000+0 2.262530-3 2.312850-2 0.000000+09237 2151 1726 - 4.500000+4 1.080660+1 0.000000+0 2.242080-3 2.318260-2 0.000000+09237 2151 1727 - 4.509020+4 1.080440+1 0.000000+0 2.241700-3 2.318350-2 0.000000+09237 2151 1728 - 5.000000+4 1.068710+1 4.963260-3 2.221260-3 2.323690-2 0.000000+09237 2151 1729 - 5.500000+4 1.056900+1 1.391030-2 2.200120-3 2.329150-2 0.000000+09237 2151 1730 - 6.000000+4 1.045210+1 2.508280-2 2.178670-3 2.334580-2 0.000000+09237 2151 1731 - 7.000000+4 1.022260+1 5.168320-2 2.135160-3 2.345590-2 0.000000+09237 2151 1732 - 8.000000+4 9.998370+0 8.177630-2 2.090990-3 2.356620-2 0.000000+09237 2151 1733 - 9.000000+4 9.779220+0 1.137640-1 2.046430-3 2.367730-2 0.000000+09237 2151 1734 - 1.000000+5 9.565090+0 1.466170-1 2.001690-3 2.378890-2 0.000000+09237 2151 1735 - 1.200000+5 9.151290+0 2.122710-1 1.912320-3 2.401360-2 0.000000+09237 2151 1736 - 1.400000+5 8.756100+0 2.751070-1 1.824000-3 2.424070-2 0.000000+09237 2151 1737 - 1.490290+5 8.583590+0 3.020030-1 1.784700-3 2.434410-2 0.000000+09237 2151 1738 - 2.360060+2 0.000000+0 2 0 2 09237 2151 1739 - 1.500000+0 0.000000+0 5 0 144 239237 2151 1740 - 0.000000+0 0.000000+0 1.000000+0 1.000000+0 0.000000+0 0.000000+09237 2151 1741 - 1.000000+4 1.168310+1 0.000000+0 1.446780-3 2.270560-2 0.000000+09237 2151 1742 - 1.200000+4 1.163110+1 0.000000+0 1.439960-3 2.272680-2 0.000000+09237 2151 1743 - 1.400000+4 1.157930+1 0.000000+0 1.433180-3 2.274800-2 0.000000+09237 2151 1744 - 1.600000+4 1.152780+1 0.000000+0 1.426430-3 2.276930-2 0.000000+09237 2151 1745 - 1.800000+4 1.147650+1 0.000000+0 1.419720-3 2.279060-2 0.000000+09237 2151 1746 - 2.000000+4 1.142540+1 0.000000+0 1.413040-3 2.281190-2 0.000000+09237 2151 1747 - 2.300000+4 1.134920+1 0.000000+0 1.403090-3 2.284390-2 0.000000+09237 2151 1748 - 2.600000+4 1.127350+1 0.000000+0 1.393210-3 2.287600-2 0.000000+09237 2151 1749 - 3.000000+4 1.117360+1 0.000000+0 1.380190-3 2.291910-2 0.000000+09237 2151 1750 - 3.500000+4 1.104980+1 0.000000+0 1.364060-3 2.297280-2 0.000000+09237 2151 1751 - 4.000000+4 1.092750+1 0.000000+0 1.348160-3 2.302660-2 0.000000+09237 2151 1752 - 4.500000+4 1.080660+1 0.000000+0 1.332460-3 2.308050-2 0.000000+09237 2151 1753 - 4.509020+4 1.080440+1 0.000000+0 1.332170-3 2.308140-2 0.000000+09237 2151 1754 - 5.000000+4 1.068710+1 7.183670-2 1.316960-3 2.313450-2 0.000000+09237 2151 1755 - 5.500000+4 1.056900+1 1.000490-1 1.301680-3 2.318890-2 0.000000+09237 2151 1756 - 6.000000+4 1.045210+1 1.205790-1 1.286570-3 2.324300-2 0.000000+09237 2151 1757 - 7.000000+4 1.022260+1 1.509840-1 1.256970-3 2.335250-2 0.000000+09237 2151 1758 - 8.000000+4 9.998370+0 1.736310-1 1.228140-3 2.346240-2 0.000000+09237 2151 1759 - 9.000000+4 9.779220+0 1.916700-1 1.200050-3 2.357300-2 0.000000+09237 2151 1760 - 1.000000+5 9.565090+0 2.065780-1 1.172680-3 2.368410-2 0.000000+09237 2151 1761 - 1.200000+5 9.151290+0 2.300510-1 1.120040-3 2.390780-2 0.000000+09237 2151 1762 - 1.400000+5 8.756100+0 2.478480-1 1.070090-3 2.424070-2 0.000000+09237 2151 1763 - 1.490290+5 8.583590+0 2.545650-1 1.048390-3 2.434410-2 0.000000+09237 2151 1764 - 2.500000+0 0.000000+0 5 0 144 239237 2151 1765 - 0.000000+0 0.000000+0 1.000000+0 1.000000+0 0.000000+0 0.000000+09237 2151 1766 - 1.000000+4 8.299300+0 0.000000+0 1.027740-3 2.270560-2 0.000000+09237 2151 1767 - 1.200000+4 8.262220+0 0.000000+0 1.022880-3 2.272680-2 0.000000+09237 2151 1768 - 1.400000+4 8.225310+0 0.000000+0 1.018050-3 2.274800-2 0.000000+09237 2151 1769 - 1.600000+4 8.188580+0 0.000000+0 1.013240-3 2.276930-2 0.000000+09237 2151 1770 - 1.800000+4 8.151970+0 0.000000+0 1.008450-3 2.279060-2 0.000000+09237 2151 1771 - 2.000000+4 8.115570+0 0.000000+0 1.003700-3 2.281190-2 0.000000+09237 2151 1772 - 2.300000+4 8.061270+0 0.000000+0 9.966050-4 2.284390-2 0.000000+09237 2151 1773 - 2.600000+4 8.007370+0 0.000000+0 9.895700-4 2.287600-2 0.000000+09237 2151 1774 - 3.000000+4 7.936160+0 0.000000+0 9.802870-4 2.291910-2 0.000000+09237 2151 1775 - 3.500000+4 7.847940+0 0.000000+0 9.687990-4 2.297280-2 0.000000+09237 2151 1776 - 4.000000+4 7.760790+0 0.000000+0 9.574700-4 2.302660-2 0.000000+09237 2151 1777 - 4.500000+4 7.674560+0 0.000000+0 9.462760-4 2.308050-2 0.000000+09237 2151 1778 - 4.509020+4 7.673020+0 0.000000+0 9.460770-4 2.308140-2 0.000000+09237 2151 1779 - 5.000000+4 7.589410+0 5.101480-2 9.352400-4 2.313450-2 0.000000+09237 2151 1780 - 5.500000+4 7.505290+0 7.104690-2 9.243510-4 2.318890-2 0.000000+09237 2151 1781 - 6.000000+4 7.421970+0 8.562230-2 9.135850-4 2.324300-2 0.000000+09237 2151 1782 - 7.000000+4 7.258480+0 1.072040-1 8.925030-4 2.335250-2 0.000000+09237 2151 1783 - 8.000000+4 7.098720+0 1.232760-1 8.719630-4 2.346240-2 0.000000+09237 2151 1784 - 9.000000+4 6.942610+0 1.360730-1 8.519550-4 2.357300-2 0.000000+09237 2151 1785 - 1.000000+5 6.790090+0 1.466460-1 8.324640-4 2.368410-2 0.000000+09237 2151 1786 - 1.200000+5 6.495380+0 1.632850-1 7.949810-4 2.390780-2 0.000000+09237 2151 1787 - 1.400000+5 6.213960+0 1.758910-1 7.594130-4 2.424070-2 0.000000+09237 2151 1788 - 1.490290+5 6.091120+0 1.806460-1 7.439600-4 2.434410-2 0.000000+09237 2151 1789 - 0.000000+0 0.000000+0 0 0 0 09237 2 099999 diff --git a/examples/samexm/ex027/endf/ex027a.inp b/examples/samexm/ex027/endf/ex027a.inp deleted file mode 100755 index db85ddf9..00000000 --- a/examples/samexm/ex027/endf/ex027a.inp +++ /dev/null @@ -1,9 +0,0 @@ -U238 dummy case -U 238 238. 0.00001 10000. -twenty -DO NOT SOLVE BAYES EQUATIONS -INPUT IS ENDF/B FILE - -300. - 1.00000 0.3 -capture diff --git a/examples/samexm/ex027/endf/ex027a b/examples/samexm/ex027/ex027 similarity index 59% rename from examples/samexm/ex027/endf/ex027a rename to examples/samexm/ex027/ex027 index 2cfa0c9b..32513217 100755 --- a/examples/samexm/ex027/endf/ex027a +++ b/examples/samexm/ex027/ex027 @@ -1,9 +1,9 @@ #!/bin/bash sammy < bool: try: # Create and validate config - config = DockerSammyConfig(image_name="kedokudo/sammy-docker", working_dir=working_dir, output_dir=output_dir) + config = DockerSammyConfig( + image_name="kedokudo/sammy-docker:1.0.0", working_dir=working_dir, output_dir=output_dir + ) config.validate() # Create files container diff --git a/src/pleiades/sammy/config.py b/src/pleiades/sammy/config.py index d7ee6650..f12795da 100644 --- a/src/pleiades/sammy/config.py +++ b/src/pleiades/sammy/config.py @@ -6,6 +6,7 @@ inheriting from the base configuration defined in the interface module. """ +import re import shutil from dataclasses import dataclass, field from pathlib import Path @@ -48,6 +49,31 @@ class DockerSammyConfig(BaseSammyConfig): container_working_dir: Path = Path("/sammy/work") container_data_dir: Path = Path("/sammy/data") + _MUTABLE_TAGS = {"latest", "stable", "main", "master", "dev", "edge", "nightly"} + + @staticmethod + def _is_digest_pinned_image_reference(image_name: str) -> bool: + """Return True if the image reference uses an immutable sha256 digest.""" + return re.fullmatch(r".+@sha256:[0-9a-f]{64}", image_name) is not None + + @classmethod + def _has_explicit_non_mutable_tag(cls, image_name: str) -> bool: + """Return True if the image reference has an explicit, non-mutable tag.""" + # Docker tags are separated by ":" after the last "/" in the image reference. + last_slash = image_name.rfind("/") + last_colon = image_name.rfind(":") + if last_colon <= last_slash: + return False + tag = image_name[last_colon + 1 :].strip().lower() + if not tag: + return False + return tag not in cls._MUTABLE_TAGS + + @classmethod + def _is_pinned_or_versioned_image_reference(cls, image_name: str) -> bool: + """Return True for digest-pinned references or explicit non-mutable tags.""" + return cls._is_digest_pinned_image_reference(image_name) or cls._has_explicit_non_mutable_tag(image_name) + def validate(self) -> bool: """ Validate Docker SAMMY configuration. @@ -64,6 +90,12 @@ def validate(self) -> bool: # Validate image name if not self.image_name: raise ConfigurationError("Docker image name cannot be empty") + if not self._is_pinned_or_versioned_image_reference(self.image_name): + raise ConfigurationError( + "Docker image name must be pinned to an immutable digest " + "(e.g. repo/image@sha256:) or use an explicit non-mutable version tag " + "(e.g. repo/image:1.2.3)." + ) # Validate container paths are absolute if not self.container_working_dir.is_absolute(): diff --git a/src/pleiades/sammy/factory.py b/src/pleiades/sammy/factory.py index c370937c..8fbfda03 100644 --- a/src/pleiades/sammy/factory.py +++ b/src/pleiades/sammy/factory.py @@ -121,7 +121,9 @@ def create_runner( sammy_executable: Path to SAMMY executable shell_path: Path to shell Docker backend: - image_name: Docker image name + image_name: Docker image name pinned by digest + (repo/image@sha256:...) or explicit non-mutable version tag + (repo/image:1.2.3) container_working_dir: Working directory in container container_data_dir: Data directory in container NOVA backend: @@ -180,7 +182,7 @@ def create_runner( config = DockerSammyConfig( working_dir=working_dir, output_dir=output_dir, - image_name=kwargs.get("image_name", "kedokudo/sammy-docker"), + image_name=kwargs.get("image_name", "kedokudo/sammy-docker:1.0.0"), container_working_dir=Path(kwargs.get("container_working_dir", "/sammy/work")), container_data_dir=Path(kwargs.get("container_data_dir", "/sammy/data")), ) @@ -245,7 +247,7 @@ def from_config(cls, config_path: Union[str, Path]) -> SammyRunner: shell_path: /bin/bash docker: - image_name: kedokudo/sammy-docker + image_name: kedokudo/sammy-docker:1.0.0 container_working_dir: /sammy/work container_data_dir: /sammy/data @@ -351,7 +353,7 @@ def auto_select( >>> runner = SammyFactory.auto_select( ... working_dir="/path/to/work", ... preferred_backend="docker", - ... image_name="custom/sammy:latest" + ... image_name="custom/sammy:1.2.3" ... ) """ # Check available backends @@ -416,7 +418,7 @@ def auto_select( shell_path: /bin/bash docker: - image_name: kedokudo/sammy-docker + image_name: kedokudo/sammy-docker:1.0.0 container_working_dir: /sammy/work container_data_dir: /sammy/data diff --git a/src/pleiades/sammy/fitting/config.py b/src/pleiades/sammy/fitting/config.py index d3a1c348..8967930e 100644 --- a/src/pleiades/sammy/fitting/config.py +++ b/src/pleiades/sammy/fitting/config.py @@ -28,6 +28,16 @@ class FitConfig(BaseModel): max_wall_time: Optional[float] = Field(default=None, description="Maximum wall time allowed") max_memory: Optional[float] = Field(default=None, description="Maximum memory allowed") max_disk: Optional[float] = Field(default=None, description="Maximum disk space allowed") + iptdop: Optional[int] = Field( + default=None, description="Grid enhancement for Doppler broadening (Card Set 2 IPTDOP)" + ) + iptwid: Optional[int] = Field(default=None, description="Grid enhancement for resonance tails (Card Set 2 IPTWID)") + ixxchn: Optional[int] = Field(default=None, description="Special channel skip or ENDF ZA (Card Set 2 IXXCHN)") + ndigit: Optional[int] = Field(default=None, description="Digits for compact covariance output (Card Set 2 NDIGIT)") + idropp: Optional[int] = Field( + default=None, description="Percent threshold for zeroing covariances (Card Set 2 IDROPP)" + ) + matnum: Optional[int] = Field(default=None, description="ENDF material number (Card Set 2 MATNUM)") nuclear_params: nuclearParameters = Field( default_factory=nuclearParameters, description="Nuclear parameters used in SAMMY calculations" diff --git a/src/pleiades/sammy/io/card_formats/inp02_element.py b/src/pleiades/sammy/io/card_formats/inp02_element.py index c363af7d..23824609 100644 --- a/src/pleiades/sammy/io/card_formats/inp02_element.py +++ b/src/pleiades/sammy/io/card_formats/inp02_element.py @@ -12,6 +12,16 @@ 11-20 F AW Atomic weight (amu) 21-30 F EMIN Minimum energy for dataset (eV) 31-40 F EMAX Maximum energy (eV) + 41-45 I NEPNTS Points in artificial energy grid + 46-50 I ITMAX Maximum iterations for Bayes' solution + 51-52 I ICORR Correlation threshold x100 + 53-55 I NXTRA Extra points between experimental points + 56-57 I IPTDOP Grid enhancement for Doppler broadening + 59-60 I IPTWID Grid enhancement for resonance tails + 61-70 I IXXCHN Channel skip or ZA for ENDF output + 71-72 I NDIGIT Digits for compact covariance output + 73-74 I IDROPP Percent threshold for zeroing covariances + 75-80 I MATNUM ENDF material number Example: Si 27.976928 300000. 1800000. @@ -31,6 +41,16 @@ "atomic_weight": slice(10, 20), "min_energy": slice(20, 30), "max_energy": slice(30, 40), + "nepnts": slice(40, 45), + "itmax": slice(45, 50), + "icorr": slice(50, 52), + "nxtra": slice(52, 55), + "iptdop": slice(55, 57), + "iptwid": slice(58, 60), + "ixxchn": slice(60, 70), + "ndigit": slice(70, 72), + "idropp": slice(72, 74), + "matnum": slice(74, 80), } @@ -42,12 +62,32 @@ class ElementInfo(BaseModel): atomic_weight: Atomic weight in amu min_energy: Minimum energy for dataset in eV max_energy: Maximum energy in eV + nepnts: Points in artificial energy grid + itmax: Maximum iterations for Bayes' solution + icorr: Correlation threshold x100 + nxtra: Extra points between experimental points + iptdop: Grid enhancement for Doppler broadening + iptwid: Grid enhancement for resonance tails + ixxchn: Channel skip or ZA for ENDF output + ndigit: Digits for compact covariance output + idropp: Percent threshold for zeroing covariances + matnum: ENDF material number """ element: str = Field(..., description="Sample element's name", max_length=10) atomic_weight: float = Field(..., description="Atomic weight (amu)", gt=0) min_energy: float = Field(..., description="Minimum energy (eV)", ge=0) max_energy: float = Field(..., description="Maximum energy (eV)", gt=0) + nepnts: int | None = Field(default=None, description="Points in artificial energy grid") + itmax: int | None = Field(default=None, description="Maximum iterations for Bayes' solution") + icorr: int | None = Field(default=None, description="Correlation threshold x100") + nxtra: int | None = Field(default=None, description="Extra points between experimental points") + iptdop: int | None = Field(default=None, description="Grid enhancement for Doppler broadening") + iptwid: int | None = Field(default=None, description="Grid enhancement for resonance tails") + ixxchn: int | None = Field(default=None, description="Channel skip or ZA for ENDF output") + ndigit: int | None = Field(default=None, description="Digits for compact covariance output") + idropp: int | None = Field(default=None, description="Percent threshold for zeroing covariances") + matnum: int | None = Field(default=None, description="ENDF material number") def model_post_init(self, __context) -> None: """Validate that max_energy > min_energy.""" @@ -81,14 +121,29 @@ def from_lines(cls, lines: List[str]) -> ElementInfo: raise ValueError(message) line = lines[0] - if len(line) < 40: - line = f"{line:<40}" + if len(line) < 80: + line = f"{line:<80}" try: element = line[CARD02_FORMAT["element"]].strip() atomic_weight = float(line[CARD02_FORMAT["atomic_weight"]].strip()) min_energy = float(line[CARD02_FORMAT["min_energy"]].strip()) max_energy = float(line[CARD02_FORMAT["max_energy"]].strip()) + + def parse_int(value: str) -> int | None: + stripped = value.strip() + return int(stripped) if stripped else None + + nepnts = parse_int(line[CARD02_FORMAT["nepnts"]]) + itmax = parse_int(line[CARD02_FORMAT["itmax"]]) + icorr = parse_int(line[CARD02_FORMAT["icorr"]]) + nxtra = parse_int(line[CARD02_FORMAT["nxtra"]]) + iptdop = parse_int(line[CARD02_FORMAT["iptdop"]]) + iptwid = parse_int(line[CARD02_FORMAT["iptwid"]]) + ixxchn = parse_int(line[CARD02_FORMAT["ixxchn"]]) + ndigit = parse_int(line[CARD02_FORMAT["ndigit"]]) + idropp = parse_int(line[CARD02_FORMAT["idropp"]]) + matnum = parse_int(line[CARD02_FORMAT["matnum"]]) except (ValueError, IndexError) as e: message = f"Failed to parse Card 2 line: {e}" logger.error(message) @@ -104,6 +159,16 @@ def from_lines(cls, lines: List[str]) -> ElementInfo: atomic_weight=atomic_weight, min_energy=min_energy, max_energy=max_energy, + nepnts=nepnts, + itmax=itmax, + icorr=icorr, + nxtra=nxtra, + iptdop=iptdop, + iptwid=iptwid, + ixxchn=ixxchn, + ndigit=ndigit, + idropp=idropp, + matnum=matnum, ) @classmethod @@ -121,11 +186,47 @@ def to_lines(cls, element_info: ElementInfo) -> List[str]: logger.error(message) raise ValueError(message) - line = ( - f"{element_info.element:<10s}" - f"{element_info.atomic_weight:10.6f}" - f"{element_info.min_energy:10.3f}" - f"{element_info.max_energy:10.1f}" + line = f"{element_info.element:<10s}{element_info.atomic_weight:10.6f}" + + def format_energy(value: float, fixed_format: str) -> str: + if value != 0.0 and abs(value) < 1.0e-3: + return f"{value:10.3E}" + return format(value, fixed_format) + + line += format_energy(element_info.min_energy, "10.3f") + format_energy(element_info.max_energy, "10.1f") + + extra_fields = ( + element_info.nepnts, + element_info.itmax, + element_info.icorr, + element_info.nxtra, + element_info.iptdop, + element_info.iptwid, + element_info.ixxchn, + element_info.ndigit, + element_info.idropp, + element_info.matnum, ) + if any(value is not None for value in extra_fields): + + def fmt_int(value: int | None, width: int) -> str: + if value is None: + return " " * width + return f"{value:>{width}d}" + + line += ( + f"{fmt_int(element_info.nepnts, 5)}" + f"{fmt_int(element_info.itmax, 5)}" + f"{fmt_int(element_info.icorr, 2)}" + f"{fmt_int(element_info.nxtra, 3)}" + f"{fmt_int(element_info.iptdop, 2)}" + f" " + f"{fmt_int(element_info.iptwid, 2)}" + f"{fmt_int(element_info.ixxchn, 10)}" + f"{fmt_int(element_info.ndigit, 2)}" + f"{fmt_int(element_info.idropp, 2)}" + f"{fmt_int(element_info.matnum, 6)}" + ) + return [line] diff --git a/src/pleiades/sammy/io/card_formats/inp03_density.py b/src/pleiades/sammy/io/card_formats/inp03_density.py deleted file mode 100644 index 602f5b6b..00000000 --- a/src/pleiades/sammy/io/card_formats/inp03_density.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python -""" -Sample Density for SAMMY INP files. - -This module provides the Card03Density class for parsing and generating the sample -density line in SAMMY input files. This line appears after the physical constants -and defines the material density and number density. - -Format specification (Sample Density): - The line contains two floating-point values: - - Density: Material density (g/cm³) - - Number density: Number density (atoms/barn-cm) - -Example: - 4.20000 0.347162 -""" - -from typing import List - -from pydantic import BaseModel, Field - -from pleiades.utils.logger import loguru_logger - -logger = loguru_logger.bind(name=__name__) - - -class SampleDensity(BaseModel): - """Pydantic model for sample density parameters. - - Attributes: - density: Material density in g/cm³ - number_density: Number density in atoms/barn-cm - """ - - density: float = Field(..., description="Material density (g/cm³)", gt=0) - number_density: float = Field(..., description="Number density (atoms/barn-cm)", gt=0) - - -class Card03Density(BaseModel): - """ - Class representing sample density line in SAMMY INP files. - - This line defines the material density and number density for the sample. - """ - - @classmethod - def from_lines(cls, lines: List[str]) -> SampleDensity: - """Parse sample density from density line. - - Args: - lines: List of input lines (expects single line) - - Returns: - SampleDensity: Parsed sample density parameters - - Raises: - ValueError: If format is invalid or required values missing - """ - if not lines or not lines[0].strip(): - message = "No valid density line provided" - logger.error(message) - raise ValueError(message) - - line = lines[0].strip() - fields = line.split() - - if len(fields) < 2: - message = f"Density line must have 2 fields (density, number_density), got {len(fields)}" - logger.error(message) - raise ValueError(message) - - try: - density = float(fields[0]) - number_density = float(fields[1]) - except (ValueError, IndexError) as e: - message = f"Failed to parse density line: {e}" - logger.error(message) - raise ValueError(message) - - return SampleDensity( - density=density, - number_density=number_density, - ) - - @classmethod - def to_lines(cls, sample_density: SampleDensity) -> List[str]: - """Convert sample density to formatted line. - - Args: - sample_density: SampleDensity object containing density data - - Returns: - List containing single formatted line - """ - if not isinstance(sample_density, SampleDensity): - message = "sample_density must be an instance of SampleDensity" - logger.error(message) - raise ValueError(message) - - line = f" {sample_density.density:8.6f} {sample_density.number_density:.6e}" - - return [line] diff --git a/src/pleiades/sammy/io/card_formats/inp03_constants.py b/src/pleiades/sammy/io/card_formats/inp05_broadening.py similarity index 76% rename from src/pleiades/sammy/io/card_formats/inp03_constants.py rename to src/pleiades/sammy/io/card_formats/inp05_broadening.py index 6fd5228c..c37051e0 100644 --- a/src/pleiades/sammy/io/card_formats/inp03_constants.py +++ b/src/pleiades/sammy/io/card_formats/inp05_broadening.py @@ -1,12 +1,12 @@ #!/usr/bin/env python """ -Card Set 3 (Physical Constants) for SAMMY INP files. +Card Set 5 (Broadening/Resolution Parameters) for SAMMY INP files. -This module provides the Card03 class for parsing and generating the physical -constants line in SAMMY input files. This card appears after the element information -and defines temperature, flight path, and resolution parameters. +This module provides the Card05 class for parsing and generating the broadening +constants line in SAMMY input files. This card appears after the alphanumeric +command block and defines temperature, flight path, and resolution parameters. -Format specification (Card Set 3 - Physical Constants): +Format specification (Card Set 5 - Broadening/Resolution): The line contains five floating-point values with variable spacing: - TEMP: Temperature (K) - FPL: Flight path length (m) @@ -28,7 +28,7 @@ class PhysicalConstants(BaseModel): - """Pydantic model for physical constants in Card Set 3. + """Pydantic model for broadening constants in Card Set 5. Attributes: temperature: Temperature in Kelvin @@ -45,47 +45,47 @@ class PhysicalConstants(BaseModel): delta_e: float = Field(default=0.0, description="e-folding width of exponential resolution (μs)", ge=0) -class Card03(BaseModel): +class Card05(BaseModel): """ - Class representing Card Set 3 (physical constants) in SAMMY INP files. + Class representing Card Set 5 (broadening constants) in SAMMY INP files. This card defines temperature, flight path, and resolution parameters for the analysis. """ @classmethod def from_lines(cls, lines: List[str]) -> PhysicalConstants: - """Parse physical constants from Card Set 3 line. + """Parse broadening constants from Card Set 5 line. Args: - lines: List of input lines (expects single line for Card 3) + lines: List of input lines (expects single line for Card 5) Returns: - PhysicalConstants: Parsed physical constants + PhysicalConstants: Parsed broadening constants Raises: ValueError: If format is invalid or required values missing """ if not lines or not lines[0].strip(): - message = "No valid Card 3 line provided" + message = "No valid Card 5 line provided" logger.error(message) raise ValueError(message) line = lines[0].strip() fields = line.split() - if len(fields) < 2: - message = f"Card 3 line must have at least 2 fields (TEMP, FPL), got {len(fields)}" + if len(fields) < 1: + message = f"Card 5 line must have at least 1 field (TEMP), got {len(fields)}" logger.error(message) raise ValueError(message) try: temperature = float(fields[0]) - flight_path_length = float(fields[1]) + flight_path_length = float(fields[1]) if len(fields) > 1 else 25.0 delta_l = float(fields[2]) if len(fields) > 2 else 0.0 delta_g = float(fields[3]) if len(fields) > 3 else 0.0 delta_e = float(fields[4]) if len(fields) > 4 else 0.0 except (ValueError, IndexError) as e: - message = f"Failed to parse Card 3 line: {e}" + message = f"Failed to parse Card 5 line: {e}" logger.error(message) raise ValueError(message) @@ -99,13 +99,13 @@ def from_lines(cls, lines: List[str]) -> PhysicalConstants: @classmethod def to_lines(cls, constants: PhysicalConstants) -> List[str]: - """Convert physical constants to Card Set 3 formatted line. + """Convert broadening constants to Card Set 5 formatted line. Args: constants: PhysicalConstants object containing parameter data Returns: - List containing single formatted line for Card Set 3 + List containing single formatted line for Card Set 5 """ if not isinstance(constants, PhysicalConstants): message = "constants must be an instance of PhysicalConstants" diff --git a/src/pleiades/sammy/io/card_formats/inp07_density.py b/src/pleiades/sammy/io/card_formats/inp07_density.py new file mode 100644 index 00000000..ade877fe --- /dev/null +++ b/src/pleiades/sammy/io/card_formats/inp07_density.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +""" +Card Set 7 (Sample Thickness) for SAMMY INP files. + +This module provides the Card07 class for parsing and generating the Card Set 7 +line in SAMMY input files. This line appears after the broadening constants and +defines the matching radius and sample thickness. + +Format specification (Card Set 7): + The line contains two floating-point values: + - CRFN: Matching radius (F) + - THICK: Sample thickness (atoms/barn) + +Example: + 4.20000 0.347162 +""" + +from typing import List + +from pydantic import BaseModel, Field + +from pleiades.utils.logger import loguru_logger + +logger = loguru_logger.bind(name=__name__) + + +class Card07Parameters(BaseModel): + """Pydantic model for Card Set 7 parameters.""" + + crfn: float = Field(..., description="Matching radius (F)", ge=0) + thick: float = Field(..., description="Sample thickness (atoms/barn)", ge=0) + + +class Card07(BaseModel): + """Class representing Card Set 7 line in SAMMY INP files.""" + + @classmethod + def from_lines(cls, lines: List[str]) -> Card07Parameters: + """Parse Card Set 7 parameters from line. + + Args: + lines: List of input lines (expects single line) + + Returns: + Card07Parameters: Parsed Card Set 7 parameters + + Raises: + ValueError: If format is invalid or required values missing + """ + if not lines or not lines[0].strip(): + message = "No valid Card 7 line provided" + logger.error(message) + raise ValueError(message) + + line = lines[0].strip() + fields = line.split() + + if len(fields) < 2: + message = f"Card 7 line must have at least 2 fields (CRFN, THICK), got {len(fields)}" + logger.error(message) + raise ValueError(message) + + try: + crfn = float(fields[0]) + thick = float(fields[1]) + except (ValueError, IndexError) as e: + message = f"Failed to parse Card 7 line: {e}" + logger.error(message) + raise ValueError(message) + + return Card07Parameters( + crfn=crfn, + thick=thick, + ) + + @classmethod + def to_lines(cls, params: Card07Parameters) -> List[str]: + """Convert Card Set 7 parameters to formatted line. + + Args: + params: Card07Parameters object containing CRFN/THICK values + + Returns: + List containing single formatted line + """ + if not isinstance(params, Card07Parameters): + message = "params must be an instance of Card07Parameters" + logger.error(message) + raise ValueError(message) + + line = f" {params.crfn:8.6f} {params.thick:.6e}" + + return [line] diff --git a/src/pleiades/sammy/io/inp_manager.py b/src/pleiades/sammy/io/inp_manager.py index bb1a04eb..108cd836 100644 --- a/src/pleiades/sammy/io/inp_manager.py +++ b/src/pleiades/sammy/io/inp_manager.py @@ -6,13 +6,22 @@ through the refactored FitOptions class and its factory methods. """ +from functools import lru_cache from pathlib import Path -from typing import Dict, List, Optional +from typing import Dict, List, Optional, Tuple, Union, get_args, get_origin +from pydantic import BaseModel, Field + +from pleiades.nuclear.isotopes.models import IsotopeInfo, IsotopeMassData +from pleiades.nuclear.models import IsotopeParameters +from pleiades.sammy.data.options import DataTypeOptions +from pleiades.sammy.fitting.config import FitConfig from pleiades.sammy.fitting.options import FitOptions from pleiades.sammy.io.card_formats.inp02_element import Card02, ElementInfo -from pleiades.sammy.io.card_formats.inp03_constants import Card03, PhysicalConstants -from pleiades.sammy.io.card_formats.inp03_density import Card03Density, SampleDensity +from pleiades.sammy.io.card_formats.inp04_particlepairs import Card04 +from pleiades.sammy.io.card_formats.inp05_broadening import Card05, PhysicalConstants +from pleiades.sammy.io.card_formats.inp07_density import Card07, Card07Parameters +from pleiades.sammy.io.card_formats.inp10_spingroups import Card10p2 from pleiades.utils.logger import loguru_logger logger = loguru_logger.bind(name=__name__) @@ -28,6 +37,23 @@ DEFAULT_L0_UNCERTAINTY = 2.00000e-5 # Uncertainty on L₀ +class InpDatasetMetadata(BaseModel): + """Optional typed dataset metadata used to seed INP generation. + + These values are dataset-level hints and should only be used when the + corresponding value is not already provided in ``FitConfig``. + """ + + element: Optional[str] = Field(default=None, description="Element symbol (e.g. Au, Ta)") + mass_number: Optional[int] = Field(default=None, description="Mass number for isotope name composition") + atomic_mass_amu: Optional[float] = Field(default=None, description="Atomic mass (amu)") + min_energy_eV: Optional[float] = Field(default=None, description="Minimum fit energy (eV)") + max_energy_eV: Optional[float] = Field(default=None, description="Maximum fit energy (eV)") + temperature_K: Optional[float] = Field(default=None, description="Sample temperature (K)") + density_g_cm3: Optional[float] = Field(default=None, description="Material density (g/cm^3)") + thickness_mm: Optional[float] = Field(default=None, description="Sample thickness (mm)") + + class InpManager: """ Manages creation and writing of SAMMY input (.inp) files. @@ -50,6 +76,7 @@ def __init__( isotope_info: Optional[Dict] = None, physical_constants: Optional[Dict] = None, reaction_type: str = None, + fit_config: FitConfig = None, ): """ Initialize with optional FitOptions and section information. @@ -61,10 +88,22 @@ def __init__( physical_constants: Physical constants (temperature, flight path, etc.) reaction_type: Reaction type (transmission, capture, etc.) """ - self.options = options or FitOptions() + self.fit_config = fit_config if fit_config else FitConfig() + self._fit_config_provided = fit_config is not None + + self.options = options or (self.fit_config.options_and_routines if self._fit_config_provided else FitOptions()) + if self._fit_config_provided and options is not None: + self.fit_config.options_and_routines = options + + if title is None and self._fit_config_provided: + title = self.fit_config.fit_title self.title = title + self.isotope_info = isotope_info self.physical_constants = physical_constants + + if reaction_type is None and self._fit_config_provided: + reaction_type = self.fit_config.data_params.data_type.value self.reaction_type = reaction_type def set_options(self, options: FitOptions) -> None: @@ -75,6 +114,188 @@ def set_options(self, options: FitOptions) -> None: options: FitOptions instance to use """ self.options = options + if self._fit_config_provided: + self.fit_config.options_and_routines = options + + @staticmethod + def _normalize_command(command: str) -> str: + return " ".join(command.upper().split()) + + @staticmethod + def _option_class_for_field(field_info) -> Optional[type]: + annotation = field_info.annotation + origin = get_origin(annotation) + if origin is Union: + args = [arg for arg in get_args(annotation) if arg is not type(None)] # noqa: E721 + return args[0] if args else None + return annotation + + @classmethod + @lru_cache + def _alphanumeric_command_map(cls) -> Dict[str, Tuple[str, str]]: + mapping: Dict[str, Tuple[str, str]] = {} + + for section_name, field_info in FitOptions.model_fields.items(): + option_class = cls._option_class_for_field(field_info) + if option_class is None or not hasattr(option_class, "get_alphanumeric_commands"): + continue + + bool_fields = {name: field for name, field in option_class.model_fields.items() if field.annotation is bool} + + for field_name in bool_fields: + data = {name: False for name in bool_fields} + data[field_name] = True + try: + instance = option_class(**data) + except Exception: + continue + for command in instance.get_alphanumeric_commands(): + normalized = cls._normalize_command(command) + mapping[normalized] = (section_name, field_name) + + return mapping + + def _apply_alphanumeric_commands(self, commands: List[str]) -> None: + if not commands: + return + + command_map = self._alphanumeric_command_map() + aliases = { + "CSISRS": "USE CSISRS FORMAT FOR DATA", + "TWENTY": "USE TWENTY SIGNIFICANT DIGITS", + "GENERATE ODF FILE AUTOMATICALLY": "GENERATE PLOT FILE AUTOMATICALLY", + "DO NOT SUPPRESS ANY INTERMEDIATE RESULTS": "DO NOT SUPPRESS ANY INTERMEDIATE PRINTOUT", + } + sections: Dict[str, Dict[str, bool]] = {} + unknown = [] + + for command in commands: + normalized = self._normalize_command(command) + if normalized in aliases: + normalized = self._normalize_command(aliases[normalized]) + if normalized in command_map: + section_name, field_name = command_map[normalized] + sections.setdefault(section_name, {})[field_name] = True + else: + unknown.append(command) + + if unknown: + logger.warning(f"Unmapped alphanumeric commands: {unknown}") + + options = FitOptions() + for section_name, fields in sections.items(): + field_info = FitOptions.model_fields[section_name] + option_class = self._option_class_for_field(field_info) + if option_class is None: + continue + try: + section_instance = option_class(**fields) + except Exception as exc: + logger.warning(f"Failed to parse commands for {section_name}: {exc}") + continue + setattr(options, section_name, section_instance) + + self.fit_config.options_and_routines = options + self.options = options + + def _element_name_from_fit_config(self) -> str: + isotopes = self.fit_config.nuclear_params.isotopes + if not isotopes: + return "Sample" + + isotope = isotopes[0] + info = isotope.isotope_information + if info and info.element and info.mass_number: + return f"{info.element}{info.mass_number}" + if info and info.name: + return info.name.replace("-", "") + return "Sample" + + def _atomic_mass_from_fit_config(self) -> float: + isotopes = self.fit_config.nuclear_params.isotopes + if not isotopes: + return 1.0 + + info = isotopes[0].isotope_information + if info and info.mass_data and info.mass_data.atomic_mass: + return info.mass_data.atomic_mass + if info and info.mass_number: + return float(info.mass_number) + return 1.0 + + @staticmethod + def _isotope_info_from_element(element_info: ElementInfo) -> IsotopeInfo: + raw = element_info.element.strip() + letters = "".join(ch for ch in raw if ch.isalpha()) + digits = "".join(ch for ch in raw if ch.isdigit()) + info = None + + if letters and digits: + try: + info = IsotopeInfo.from_string(f"{letters}-{digits}") + except ValueError: + info = None + + if info is None and letters: + info = IsotopeInfo(name=raw or letters, element=letters) + if digits: + info.mass_number = int(digits) + + if info is None: + info = IsotopeInfo(name=raw or "UNK", element=letters or None) + if digits: + info.mass_number = int(digits) + + if element_info.atomic_weight is not None: + info.mass_data = IsotopeMassData(atomic_mass=element_info.atomic_weight) + + return info + + def _element_info_from_fit_config(self) -> ElementInfo: + energy = self.fit_config.physics_params.energy_parameters + # Preserve legacy-safe defaults when FitConfig energy bounds are unset. + min_energy = energy.min_energy if energy.min_energy is not None and energy.min_energy > 0 else 0.001 + max_energy = energy.max_energy if energy.max_energy is not None and energy.max_energy > 0 else 1000.0 + element_info = ElementInfo( + element=self._element_name_from_fit_config(), + atomic_weight=self._atomic_mass_from_fit_config(), + min_energy=min_energy, + max_energy=max_energy, + nepnts=energy.number_of_energy_points, + itmax=self.fit_config.max_iterations, + icorr=self.fit_config.i_correlation, + nxtra=energy.number_of_extra_points, + iptdop=self.fit_config.iptdop, + iptwid=self.fit_config.iptwid, + ixxchn=self.fit_config.ixxchn, + ndigit=self.fit_config.ndigit, + idropp=self.fit_config.idropp, + matnum=self.fit_config.matnum, + ) + return element_info + + def _element_info_from_dict(self, isotope_info: Dict) -> ElementInfo: + element = isotope_info.get("element", "Sample") + atomic_mass = isotope_info.get("atomic_mass_amu", 1.0) + min_energy = isotope_info.get("min_energy_eV", 0.001) + max_energy = isotope_info.get("max_energy_eV", 1000.0) + + return ElementInfo( + element=element, + atomic_weight=atomic_mass, + min_energy=min_energy, + max_energy=max_energy, + nepnts=isotope_info.get("nepnts", isotope_info.get("number_of_energy_points")), + itmax=isotope_info.get("itmax", isotope_info.get("max_iterations")), + icorr=isotope_info.get("icorr", isotope_info.get("i_correlation")), + nxtra=isotope_info.get("nxtra", isotope_info.get("number_of_extra_points")), + iptdop=isotope_info.get("iptdop"), + iptwid=isotope_info.get("iptwid"), + ixxchn=isotope_info.get("ixxchn"), + ndigit=isotope_info.get("ndigit"), + idropp=isotope_info.get("idropp"), + matnum=isotope_info.get("matnum"), + ) def generate_commands(self) -> List[str]: """ @@ -104,17 +325,9 @@ def generate_isotope_section(self) -> str: str: Properly formatted Card Set 2 element information line """ if self.isotope_info: - element = self.isotope_info.get("element", "Sample") - atomic_mass = self.isotope_info.get("atomic_mass_amu", 1.0) - min_energy = self.isotope_info.get("min_energy_eV", 0.001) - max_energy = self.isotope_info.get("max_energy_eV", 1000.0) - - element_info = ElementInfo( - element=element, - atomic_weight=atomic_mass, - min_energy=min_energy, - max_energy=max_energy, - ) + element_info = self._element_info_from_dict(self.isotope_info) + elif self._fit_config_provided: + element_info = self._element_info_from_fit_config() else: element_info = ElementInfo( element="Sample", @@ -126,72 +339,93 @@ def generate_isotope_section(self) -> str: lines = Card02.to_lines(element_info) return lines[0] - def generate_physical_constants_section(self, material_properties: Dict = None) -> str: + def _number_density_from_dataset_metadata(self, dataset_metadata: Optional[InpDatasetMetadata]) -> Optional[float]: + """Derive number density from typed dataset metadata. + + Number density derivation is all-or-nothing: if any of the required + inputs are provided, all three must be present to avoid silently + generating inconsistent values. + """ + if dataset_metadata is None: + return None + + density = dataset_metadata.density_g_cm3 + thickness = dataset_metadata.thickness_mm + atomic_mass = dataset_metadata.atomic_mass_amu + + has_any_density_input = any(value is not None for value in (density, thickness, atomic_mass)) + if not has_any_density_input: + return None + if density is None or thickness is None or atomic_mass is None: + raise ValueError( + "dataset_metadata must include density_g_cm3, thickness_mm, and atomic_mass_amu to derive THICK" + ) + + from pleiades.utils.units import calculate_number_density + + return calculate_number_density(density, thickness, atomic_mass) + + def generate_physical_constants_section(self, dataset_metadata: Optional[InpDatasetMetadata] = None) -> str: """ - Generate the physical constants section for multi-isotope mode. + Generate Card Set 5 physical constants from FitConfig. Args: - material_properties: Dict with material properties + dataset_metadata: Optional typed metadata used only as a fallback + source for temperature when FitConfig does not define one. Returns: str: Physical constants line """ - if material_properties: - temperature = material_properties.get("temperature_K", 293.6) - flight_path = material_properties.get("flight_path_m", 25.0) - delta_l = material_properties.get("delta_l", 0.0) - delta_g = material_properties.get("delta_g", 0.0) - delta_e = material_properties.get("delta_e", 0.0) - - constants = PhysicalConstants( - temperature=temperature, - flight_path_length=flight_path, - delta_l=delta_l, - delta_g=delta_g, - delta_e=delta_e, - ) - else: - constants = PhysicalConstants( - temperature=293.6, - flight_path_length=25.0, - delta_l=0.0, - delta_g=0.0, - delta_e=0.0, - ) + broadening = self.fit_config.physics_params.broadening_parameters + + temperature = broadening.temp + if temperature is None and dataset_metadata is not None: + temperature = dataset_metadata.temperature_K + temperature = 293.6 if temperature is None else temperature + + flight_path = broadening.dist + flight_path = 25.0 if flight_path is None else flight_path + + delta_l = broadening.deltal + delta_l = 0.0 if delta_l is None else delta_l + delta_g = broadening.deltag + delta_g = 0.0 if delta_g is None else delta_g + delta_e = broadening.deltae + delta_e = 0.0 if delta_e is None else delta_e + + constants = PhysicalConstants( + temperature=temperature, + flight_path_length=flight_path, + delta_l=delta_l, + delta_g=delta_g, + delta_e=delta_e, + ) - lines = Card03.to_lines(constants) + lines = Card05.to_lines(constants) return "\n" + lines[0] - def generate_sample_density_section(self, material_properties: Dict = None) -> str: + def generate_card_7_section(self, dataset_metadata: Optional[InpDatasetMetadata] = None) -> str: """ - Generate the sample density section. + Generate Card Set 7 (CRFN, THICK) from FitConfig. Args: - material_properties: Dict with material properties + dataset_metadata: Optional typed metadata used to derive THICK when + broadening.thick is not already defined in FitConfig. Returns: - str: Sample density line with density (g/cm3) and number density (atoms/barn) + str: Card Set 7 line or empty string if unavailable """ - if material_properties: - from pleiades.utils.units import calculate_number_density - - density = material_properties.get("density_g_cm3", 9.0) - thickness_mm = material_properties.get("thickness_mm", 5.0) - atomic_mass = material_properties.get("atomic_mass_amu", 28.0) + broadening = self.fit_config.physics_params.broadening_parameters + crfn = broadening.crfn + thick = broadening.thick + if thick is None: + thick = self._number_density_from_dataset_metadata(dataset_metadata) - number_density = calculate_number_density(density, thickness_mm, atomic_mass) - - sample_density = SampleDensity( - density=density, - number_density=number_density, - ) - else: - sample_density = SampleDensity( - density=DEFAULT_DENSITY, - number_density=DEFAULT_NUMBER_DENSITY, - ) + if crfn is None or thick is None: + return "" - lines = Card03Density.to_lines(sample_density) + params = Card07Parameters(crfn=crfn, thick=thick) + lines = Card07.to_lines(params) return lines[0] def generate_reaction_type_section(self) -> str: @@ -205,7 +439,7 @@ def generate_reaction_type_section(self) -> str: return self.reaction_type return "transmission" - def generate_card_set_2_element_info(self, material_properties: Dict = None) -> str: + def generate_card_set_2_element_info(self, dataset_metadata: Optional[InpDatasetMetadata] = None) -> str: """ Generate Card Set 2 (element information) according to SAMMY documentation. @@ -213,88 +447,78 @@ def generate_card_set_2_element_info(self, material_properties: Dict = None) -> according to SAMMY Card Set 2 specification. Args: - material_properties: Dict with material properties including element info + dataset_metadata: Optional typed metadata used to override selected + Card 2 values after reading defaults from FitConfig. Returns: str: Properly formatted Card Set 2 element information line """ - if material_properties: - element = material_properties.get("element", "Au") - mass_number = material_properties.get("mass_number", 197) - atomic_mass = material_properties.get("atomic_mass_amu", 196.966569) - min_energy = material_properties.get("min_energy_eV", 0.001) - max_energy = material_properties.get("max_energy_eV", 1000.0) - - element_name = f"{element}{mass_number}" - - element_info = ElementInfo( - element=element_name, - atomic_weight=atomic_mass, - min_energy=min_energy, - max_energy=max_energy, - ) - else: - element_info = ElementInfo( - element="Au197", - atomic_weight=196.96657, - min_energy=0.001, - max_energy=1000.0, - ) + element_info = self._element_info_from_fit_config() + if dataset_metadata: + if dataset_metadata.element: + if dataset_metadata.mass_number is not None: + element_info.element = f"{dataset_metadata.element}{dataset_metadata.mass_number}" + else: + element_info.element = dataset_metadata.element + if dataset_metadata.atomic_mass_amu is not None: + element_info.atomic_weight = dataset_metadata.atomic_mass_amu + if dataset_metadata.min_energy_eV is not None: + element_info.min_energy = dataset_metadata.min_energy_eV + if dataset_metadata.max_energy_eV is not None: + element_info.max_energy = dataset_metadata.max_energy_eV lines = Card02.to_lines(element_info) return lines[0] - def generate_broadening_parameters_section(self, material_properties: Dict = None) -> str: + def generate_broadening_parameters_section(self, dataset_metadata: Optional[InpDatasetMetadata] = None) -> str: """ - Generate broadening parameters section for multi-isotope mode. + Generate broadening parameters section from FitConfig. Args: - material_properties: Dict with material properties for calculations + dataset_metadata: Optional typed metadata used to fill temperature + and derive THICK when these are not defined in FitConfig. Returns: str: Broadening parameters section with required blank line before it """ - if material_properties: - from pleiades.experimental.models import BroadeningParameters - from pleiades.sammy.fitting.config import FitConfig - from pleiades.sammy.io.card_formats.par04_broadening import Card04 - from pleiades.utils.helper import VaryFlag - from pleiades.utils.units import calculate_number_density - - # Extract and validate material properties - density = material_properties.get("density_g_cm3") - thickness = material_properties.get("thickness_mm", 5.0) - atomic_mass = material_properties.get("atomic_mass_amu") - temperature = material_properties.get("temperature_K", 293.6) - - if density is None or atomic_mass is None: - raise ValueError("material_properties must contain 'density_g_cm3' and 'atomic_mass_amu'") - - # Calculate number density - number_density = calculate_number_density(density, thickness, atomic_mass) - - # Create FitConfig with broadening parameters using proper Card04 - fit_config = FitConfig() - - # Create BroadeningParameters object - broadening_params = BroadeningParameters( - crfn=8.0, # Matching radius - temp=temperature, # Temperature - thick=number_density, # Calculated number density - deltal=0.0, # Flight path spread - deltag=0.0, # Gaussian resolution - deltae=0.0, # Exponential resolution - flag_thick=VaryFlag.YES, # Allow SAMMY to vary thickness - ) - - # Add to fit_config - fit_config.physics_params.broadening_parameters = broadening_params + from pleiades.sammy.fitting.config import FitConfig + from pleiades.sammy.io.card_formats.par04_broadening import Card04 + from pleiades.utils.helper import VaryFlag - # Generate proper Card04 output with required blank line before it - lines = [""] + Card04.to_lines(fit_config) # Add blank line before broadening section - return "\n".join(lines) + broadening_params = self.fit_config.physics_params.broadening_parameters.model_copy(deep=True) + + if ( + broadening_params.temp is None + and dataset_metadata is not None + and dataset_metadata.temperature_K is not None + ): + broadening_params.temp = dataset_metadata.temperature_K + + if broadening_params.thick is None: + derived_thick = self._number_density_from_dataset_metadata(dataset_metadata) + if derived_thick is not None: + broadening_params.thick = derived_thick + broadening_params.flag_thick = VaryFlag.YES + + # Skip Card 4 generation when no primary broadening values exist. + has_primary_broadening_values = any( + value is not None + for value in ( + broadening_params.crfn, + broadening_params.temp, + broadening_params.thick, + broadening_params.deltal, + broadening_params.deltag, + broadening_params.deltae, + ) + ) + if not has_primary_broadening_values: + return "" - return "" # Return empty string when no broadening parameters + fit_config = FitConfig() + fit_config.physics_params.broadening_parameters = broadening_params + lines = [""] + Card04.to_lines(fit_config) + return "\n".join(lines) def generate_misc_parameters_section(self, flight_path_m: float = 25.0) -> str: """ @@ -389,27 +613,32 @@ def generate_resolution_function_section(self, resolution_file: str = "venus_res return "\n" + "\n".join(lines) def generate_multi_isotope_inp_content( - self, material_properties: Dict = None, resolution_file_path: Path = None + self, + dataset_metadata: Optional[InpDatasetMetadata] = None, + resolution_file_path: Path = None, ) -> str: """ Generate complete multi-isotope INP content with parameter sections. Args: - material_properties: Dict with material properties for parameter calculations + dataset_metadata: Optional typed metadata with dataset-level hints resolution_file_path: Optional absolute path to resolution function file Returns: str: Complete multi-isotope INP file content """ + broadening = self.fit_config.physics_params.broadening_parameters + flight_path_m = broadening.dist if broadening.dist is not None else 25.0 + sections = [ self.generate_title_section(), - self.generate_card_set_2_element_info(material_properties), # Use Card Set 2 for element info + self.generate_card_set_2_element_info(dataset_metadata), "\n".join(self.generate_commands()), - self.generate_physical_constants_section(material_properties), - self.generate_sample_density_section(material_properties), + self.generate_physical_constants_section(dataset_metadata), + self.generate_card_7_section(dataset_metadata), self.generate_reaction_type_section(), - self.generate_broadening_parameters_section(material_properties), - self.generate_misc_parameters_section(), + self.generate_broadening_parameters_section(dataset_metadata), + self.generate_misc_parameters_section(flight_path_m=flight_path_m), self.generate_normalization_parameters_section(), self.generate_resolution_function_section( str(resolution_file_path.resolve()) if resolution_file_path else None @@ -424,14 +653,17 @@ def generate_inp_content(self) -> str: Returns: str: Complete content for SAMMY input file """ + card_7 = self.generate_card_7_section() sections = [ self.generate_title_section(), self.generate_isotope_section(), "\n".join(self.generate_commands()), "", # Empty line for readability self.generate_physical_constants_section(), - self.generate_reaction_type_section(), ] + if card_7: + sections.append(card_7) + sections.append(self.generate_reaction_type_section()) return "\n".join(sections) def write_inp_file(self, file_path: Path) -> Path: @@ -462,6 +694,216 @@ def write_inp_file(self, file_path: Path) -> Path: logger.error(f"Failed to write SAMMY input file: {str(e)}") raise IOError(f"Failed to write SAMMY input file: {str(e)}") + def read_inp_file(self, file_path: Path, fit_config: FitConfig = None) -> FitConfig: + """ + Read a SAMMY input file and populate a FitConfig instance. + + Args: + file_path: Path to the input file + fit_config: Optional FitConfig to populate + + Returns: + FitConfig: Populated FitConfig instance + """ + file_path = Path(file_path) + if not file_path.exists(): + raise FileNotFoundError(f"Input file not found: {file_path}") + + target_config = fit_config if fit_config else self.fit_config + if target_config is None or not isinstance(target_config, FitConfig): + raise ValueError("fit_config must be an instance of FitConfig") + + self.fit_config = target_config + self._fit_config_provided = True + + lines = [line.rstrip("\n") for line in file_path.read_text().splitlines()] + idx = 0 + + def next_nonempty(start: int) -> int: + while start < len(lines) and not lines[start].strip(): + start += 1 + return start + + def is_numeric_line(line: str) -> bool: + parts = line.split() + if not parts: + return False + for part in parts: + try: + float(part) + except ValueError: + return False + return True + + def parse_reaction_type(line: str) -> Optional[DataTypeOptions]: + candidate = line.strip().upper() + for option in DataTypeOptions: + if candidate == option.value.upper(): + return option + return None + + # Title line + idx = next_nonempty(idx) + if idx >= len(lines): + raise ValueError("Input file is empty") + self.fit_config.fit_title = lines[idx].strip() + idx += 1 + + # Card Set 2 element line + idx = next_nonempty(idx) + if idx >= len(lines): + raise ValueError("Missing Card Set 2 element line") + element_info = Card02.from_lines([lines[idx]]) + idx += 1 + + if not self.fit_config.nuclear_params.isotopes: + isotope_info = self._isotope_info_from_element(element_info) + self.fit_config.nuclear_params.isotopes.append(IsotopeParameters(isotope_information=isotope_info)) + + energy = self.fit_config.physics_params.energy_parameters + energy.min_energy = element_info.min_energy + energy.max_energy = element_info.max_energy + if element_info.nepnts is not None: + energy.number_of_energy_points = element_info.nepnts + if element_info.nxtra is not None: + energy.number_of_extra_points = element_info.nxtra + if element_info.itmax is not None: + self.fit_config.max_iterations = element_info.itmax + if element_info.icorr is not None: + self.fit_config.i_correlation = element_info.icorr + + self.fit_config.iptdop = element_info.iptdop + self.fit_config.iptwid = element_info.iptwid + self.fit_config.ixxchn = element_info.ixxchn + self.fit_config.ndigit = element_info.ndigit + self.fit_config.idropp = element_info.idropp + self.fit_config.matnum = element_info.matnum + + # Alphanumeric command lines + commands = [] + while idx < len(lines): + line = lines[idx].strip() + if not line: + idx += 1 + continue + if line.startswith("#") or set(line) == {"-"}: + idx += 1 + continue + if is_numeric_line(line): + break + commands.append(lines[idx]) + idx += 1 + self._apply_alphanumeric_commands(commands) + + # Physical constants line + if idx < len(lines) and is_numeric_line(lines[idx]): + try: + constants = Card05.from_lines([lines[idx]]) + broadening = self.fit_config.physics_params.broadening_parameters + broadening.temp = constants.temperature + broadening.dist = constants.flight_path_length + broadening.deltal = constants.delta_l + broadening.deltag = constants.delta_g + broadening.deltae = constants.delta_e + except ValueError: + logger.warning("Failed to parse Card Set 5 constants line") + idx += 1 + + # Card Set 7 line (CRFN, THICK) + idx = next_nonempty(idx) + if idx < len(lines) and is_numeric_line(lines[idx]): + try: + card_7 = Card07.from_lines([lines[idx]]) + broadening = self.fit_config.physics_params.broadening_parameters + broadening.crfn = card_7.crfn + broadening.thick = card_7.thick + except ValueError: + logger.warning("Failed to parse Card Set 7 line") + idx += 1 + + # Reaction type line + idx = next_nonempty(idx) + if idx < len(lines): + reaction_type = parse_reaction_type(lines[idx]) + if reaction_type: + self.fit_config.data_params.data_type = reaction_type + idx += 1 + + # Particle pair definitions (Card 4) + remaining_lines = lines[idx:] + skip_indices = set() + for line_idx, line in enumerate(remaining_lines): + if Card04.is_header_line(line): + block_indices = [line_idx] + cursor = line_idx + 1 + while cursor < len(remaining_lines) and remaining_lines[cursor].strip(): + block_indices.append(cursor) + cursor += 1 + skip_indices.update(block_indices) + block = [remaining_lines[i] for i in block_indices] + try: + Card04.from_lines(block, self.fit_config) + except ValueError: + logger.warning("Failed to parse particle pair definitions from input file") + + # Spin group lines + spin_group_lines = [line for i, line in enumerate(remaining_lines) if line.strip() and i not in skip_indices] + if spin_group_lines: + try: + Card10p2.from_lines(spin_group_lines, self.fit_config) + except ValueError: + logger.warning("Failed to parse spin group lines from input file") + + return self.fit_config + + @classmethod + def from_fit_config( + cls, + fit_config: FitConfig, + isotope_info: Optional[Dict] = None, + physical_constants: Optional[Dict] = None, + reaction_type: Optional[str] = None, + options: Optional[FitOptions] = None, + title: Optional[str] = None, + ) -> "InpManager": + """ + Create an InpManager instance backed by a FitConfig. + + Args: + fit_config: FitConfig object to read defaults from + isotope_info: Optional dict to override Card Set 2 element info + physical_constants: Optional dict to override Card Set 5 constants + reaction_type: Optional reaction type override + options: Optional FitOptions override + title: Optional title override + """ + if fit_config is None or not isinstance(fit_config, FitConfig): + raise ValueError("fit_config must be an instance of FitConfig") + + return cls( + fit_config=fit_config, + isotope_info=isotope_info, + physical_constants=physical_constants, + reaction_type=reaction_type, + options=options, + title=title, + ) + + @classmethod + def parse_inp_file(cls, file_path: Path, fit_config: FitConfig = None) -> FitConfig: + """ + Parse an input file into a FitConfig instance. + + Args: + file_path: Path to the input file + fit_config: Optional FitConfig to populate + + Returns: + FitConfig: Populated FitConfig + """ + manager = cls(fit_config=fit_config if fit_config else FitConfig()) + return manager.read_inp_file(file_path, manager.fit_config) + @classmethod def create_endf_inp(cls, output_path: Path, title: str = None) -> Path: """ @@ -496,7 +938,12 @@ def create_fitting_inp(cls, output_path: Path, title: str = None) -> Path: @classmethod def create_multi_isotope_inp( - cls, output_path: Path, title: str = None, material_properties: Dict = None, resolution_file_path: Path = None + cls, + output_path: Path, + fit_config: FitConfig, + title: str = None, + dataset_metadata: Optional[InpDatasetMetadata] = None, + resolution_file_path: Path = None, ) -> Path: """ Create input file for multi-isotope JSON mode fitting. @@ -506,19 +953,29 @@ def create_multi_isotope_inp( Args: output_path: Path to write the input file + fit_config: Typed fit configuration used as the source of INP values title: Optional title for the inp file - material_properties: Optional dict with material properties for parameter calculations + raise ValueError("fit_config is required and must be an instance of FitConfig") + values (for example, Card 2 overrides or THICK derivation inputs) resolution_file_path: Optional absolute path to resolution function file Returns: Path: Path to the created file """ + if fit_config is None or not isinstance(fit_config, FitConfig): + raise ValueError("fit_config must be an instance of FitConfig") + options = FitOptions.from_multi_isotope_config() - manager = cls(options, title=title or "Multi-isotope JSON mode fitting", reaction_type="transmission") + manager = cls( + options=options, + fit_config=fit_config, + title=title or "Multi-isotope JSON mode fitting", + reaction_type="transmission", + ) # Use specialized multi-isotope content generation try: - content = manager.generate_multi_isotope_inp_content(material_properties, resolution_file_path) + content = manager.generate_multi_isotope_inp_content(dataset_metadata, resolution_file_path) output_path = Path(output_path) output_path.parent.mkdir(parents=True, exist_ok=True) diff --git a/src/pleiades/utils/config.py b/src/pleiades/utils/config.py index 93d4b6b4..f935711e 100644 --- a/src/pleiades/utils/config.py +++ b/src/pleiades/utils/config.py @@ -2,47 +2,635 @@ """Global configuration management for PLEIADES.""" import os -from dataclasses import dataclass, field +from datetime import datetime from pathlib import Path -from typing import Any, Dict, Optional +from typing import Any, Dict, List, Optional import yaml +from pydantic import BaseModel, ConfigDict, Field, model_validator + +from pleiades.nuclear.models import DataRetrievalMethod, EndfLibrary, IsotopeParameters, nuclearParameters +from pleiades.sammy.fitting.config import FitConfig +from pleiades.utils.helper import VaryFlag +from pleiades.utils.logger import loguru_logger + +logger = loguru_logger.bind(name=__name__) + +DEFAULT_NUCLEAR_SOURCES = { + "DIRECT": "https://www-nds.iaea.org/public/download-endf", + "API": "https://www-nds.iaea.org/exfor/servlet", +} + + +def _expand_path(value: Optional[Any], workspace: Optional["WorkspaceConfig"] = None) -> Optional[Path]: + """Expand a path-like value into an absolute/relative ``Path`` object. + + Expansion behavior: + - Accepts ``Path`` or string-like inputs. + - Expands ``~`` and environment variables (e.g. ``$HOME``). + - When ``workspace`` is provided, replaces supported + ``${workspace.}`` tokens. + - Returns ``None`` when tokens cannot be resolved or when a circular + token reference is detected. + + Args: + value: Raw value from config (string/Path/None). + workspace: Workspace model used for token substitution. + + Returns: + Expanded ``Path`` or ``None`` if unresolved. + """ + if value is None: + return None + + raw = str(value) + if workspace is not None: + mapping = { + "${workspace.root}": workspace.root, + "${workspace.endf_dir}": workspace.endf_dir, + "${workspace.fitting_dir}": workspace.fitting_dir, + "${workspace.results_dir}": workspace.results_dir, + "${workspace.data_dir}": workspace.data_dir, + "${workspace.image_dir}": workspace.image_dir, + } + + # Handle the simple case where the value is exactly one workspace token. + # If the replacement is None or does not actually change the value, + # treat this as an unresolved or self-referential path and return None. + if raw in mapping: + replacement = mapping[raw] + if replacement is None: + return None + replacement_str = str(replacement) + if replacement_str == raw: + return None + raw = replacement_str + + # Perform iterative substitution of workspace tokens, tracking which + # tokens have already been expanded to detect circular references, + # including multi-level indirections (e.g., A -> B -> C -> A). + visited_tokens = set() + changed = True + while changed: + changed = False + for token, path in mapping.items(): + if path is None: + continue + if token in raw: + if token in visited_tokens: + # Circular reference detected (token reappeared after expansion). + return None + visited_tokens.add(token) + raw = raw.replace(token, str(path)) + changed = True + + raw = os.path.expandvars(os.path.expanduser(raw)) + # If any workspace tokens remain at this point, the path could not be + # resolved (possibly due to an indirect circular reference); return None. + if "${workspace." in raw: + return None + return Path(raw) + + +class WorkspaceConfig(BaseModel): + """Workspace directory configuration for PLEIADES.""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + # Working root directory for PLEIADES. This is the base path that other workspace-relative paths can reference. + root: Optional[Path] = None + + # Optional subdirectory for ENDF cache files. If not set, defaults to the same path as nuclear_data_cache_dir in NuclearConfig. + endf_dir: Optional[Path] = None + + # Optional subdirectory for fit routine working directories. Each routine gets its own subdirectory here with a specific routine_id name. + fitting_dir: Optional[Path] = None + + # Optional subdirectory for aggregate results across routines (e.g., combined CSVs, summary reports). This is separate from the per-routine fit_results_dir. + results_dir: Optional[Path] = None + + # Optional subdirectory for input data files (e.g., transmission .dat/.twenty). This is separate from the fitting and results directories. + # Each fit_routine sub directory should have a symlink to the relevant data files from this directory to avoid duplication. + data_dir: Optional[Path] = None + + # Optional subdirectory for generated images/plots. This is separate from the fitting and results directories. + image_dir: Optional[Path] = None + + @model_validator(mode="after") + def _expand_paths(self) -> "WorkspaceConfig": + """Normalize workspace paths after model construction. + + This is intentionally ordered in two phases: + 1. Expand ``root`` first. + 2. Expand all other fields that may reference ``${workspace.root}`` + or other workspace tokens. + + The explicit ordering keeps token substitution deterministic and makes + field dependencies easy to reason about during maintenance. + """ + # Pass 1: resolve root so dependent fields can reference it. + self._expand_root_path() + + # Pass 2: resolve fields that may contain workspace token references. + self._expand_dependent_paths() + return self + + def _expand_root_path(self) -> None: + """Pass 1: normalize only ``workspace.root``. + + ``root`` is treated as the anchor for other workspace paths, so it must + be expanded before token-based expansion of dependent fields. + """ + self.root = _expand_path(self.root) + + def _expand_dependent_paths(self) -> None: + """Pass 2: normalize fields that may reference ``${workspace.*}`` tokens. + + This uses the already-expanded ``self.root`` (and any other resolved + workspace fields) as the substitution source. + """ + for field_name in ("endf_dir", "fitting_dir", "results_dir", "data_dir", "image_dir"): + # Resolve each field independently so unresolved/circular references + # in one field do not prevent expansion of the others. + raw_value = getattr(self, field_name) + setattr(self, field_name, _expand_path(raw_value, self)) + + +class NuclearConfig(BaseModel): + """Nuclear data configuration for PLEIADES. + + This is the global/default nuclear configuration. Per-fit overrides live in + FitRoutineConfig.nuclear and are used when present. + """ + + model_config = ConfigDict(arbitrary_types_allowed=True) + + data_cache_dir: Optional[Path] = None + sources: Dict[str, str] = Field(default_factory=lambda: dict(DEFAULT_NUCLEAR_SOURCES)) + default_library: Optional[EndfLibrary] = None + isotopes: List["IsotopeConfig"] = Field(default_factory=list) + + @model_validator(mode="after") + def _expand_paths(self) -> "NuclearConfig": + self.data_cache_dir = _expand_path(self.data_cache_dir) + return self + + +class SammyConfig(BaseModel): + """SAMMY backend configuration for PLEIADES. + + This captures how to execute SAMMY (local, docker, nova) and the backend-specific + settings required to launch it. + """ + + model_config = ConfigDict(arbitrary_types_allowed=True) + + backend: Optional[str] = None + local: Dict[str, Any] = Field(default_factory=dict) + docker: Dict[str, Any] = Field(default_factory=dict) + nova: Dict[str, Any] = Field(default_factory=dict) + + +class DatasetMetadata(BaseModel): + """Metadata for a dataset entry to be used in DatasetConfig. + + These fields are used to seed INP generation (energy bounds, element hints, etc.) + and can be extended without changing the core schema. + """ + model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow", populate_by_name=True) -@dataclass -class PleiadesConfig: - """Global configuration for PLEIADES.""" + # Facility where the data was collected (e.g., LANSCE, SNS). + facility: Optional[str] = None + # Instrument or beamline identifier. + instrument: Optional[str] = None + # General timestamp for when the data was recorded (UTC recommended). + recorded_date: Optional[datetime] = Field(default=None, alias="RecordedDate") + + # Energy bounds for the dataset (in eV). + min_energy_eV: Optional[float] = None + max_energy_eV: Optional[float] = None + + +class DatasetConfig(BaseModel): + """Configuration for a dataset entry. + + A dataset represents an input data file (e.g. transmission .dat/.twenty) + plus optional metadata for building a FitConfig/INP. + """ + + model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow") + + # brief description of the dataset + description: Optional[str] = None + + # Kind of data (e.g., transmission, capture) + data_kind: Optional[str] = None + + # Path to the data file/files + path_to_data_files: Optional[Path] = None + + # Metadata for the given dataset + metadata: Optional[DatasetMetadata] = None + + +class FitRoutineConfig(BaseModel): + """Configuration for a single fit routine. + + A routine defines how a specific fit should be run (dataset selection, + fit mode, and optional FitConfig overrides). + """ + + model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow") + + dataset_id: Optional[str] = None + mode: Optional[str] = None + update_from_results: Optional[bool] = None + fit_config: Optional[FitConfig] = None + + +class PleiadesConfig(BaseModel): + """Global configuration for PLEIADES. + + High-level intent: + - workspace: where PLEIADES writes files + - nuclear: global isotope defaults and ENDF cache + - sammy: how to execute SAMMY + - datasets: input data definitions + - fit_routines: per-run configurations (including FitConfig) + - runs/results_index: execution records and outputs + """ + + model_config = ConfigDict(arbitrary_types_allowed=True) + + pleiades_version: Optional[int] = None + + workspace: Optional[WorkspaceConfig] = None + nuclear: Optional[NuclearConfig] = None + sammy: Optional[SammyConfig] = None + + datasets: Dict[str, DatasetConfig] = Field(default_factory=dict) + fit_routines: Dict[str, FitRoutineConfig] = Field(default_factory=dict) + runs: list[Dict[str, Any]] = Field(default_factory=list) + results_index: Dict[str, Any] = Field(default_factory=dict) # Nuclear data configuration - nuclear_data_cache_dir: Path = field(default_factory=lambda: Path(os.path.expanduser("~/.pleiades/nuclear_data"))) + nuclear_data_cache_dir: Path = Field(default_factory=lambda: Path(os.path.expanduser("~/.pleiades/nuclear_data"))) # Nuclear data retrieval methods and URLs - nuclear_data_sources: Dict[str, str] = field( - default_factory=lambda: { - "DIRECT": "https://www-nds.iaea.org/public/download-endf", # IAEA direct file download - "API": "https://www-nds.iaea.org/exfor/servlet", # IAEA EXFOR API for section retrieval - } - ) + nuclear_data_sources: Dict[str, str] = Field(default_factory=lambda: dict(DEFAULT_NUCLEAR_SOURCES)) # Other configuration sections can be added here as needed - def __post_init__(self): - """Ensure Path objects for all directory configurations.""" - self.nuclear_data_cache_dir = Path(self.nuclear_data_cache_dir) + @model_validator(mode="after") + def _normalize_config(self) -> "PleiadesConfig": + """Normalize paths and keep nuclear fields in sync. + + This also normalizes routine-level isotope entries (fills defaults for + endf_library) so downstream code can rely on consistent types. + """ + if self.workspace: + self.nuclear_data_cache_dir = _expand_path(self.nuclear_data_cache_dir, self.workspace) + else: + self.nuclear_data_cache_dir = _expand_path(self.nuclear_data_cache_dir) + self.workspace = WorkspaceConfig(endf_dir=self.nuclear_data_cache_dir) + + if self.nuclear is None: + self.nuclear = NuclearConfig( + data_cache_dir=self.nuclear_data_cache_dir, + sources=dict(self.nuclear_data_sources), + ) + else: + if self.workspace: + self.nuclear.data_cache_dir = _expand_path(self.nuclear.data_cache_dir, self.workspace) + else: + self.nuclear.data_cache_dir = _expand_path(self.nuclear.data_cache_dir) + + if self.nuclear.data_cache_dir is None: + self.nuclear.data_cache_dir = self.nuclear_data_cache_dir + else: + self.nuclear_data_cache_dir = self.nuclear.data_cache_dir + + if not self.nuclear.sources: + self.nuclear.sources = dict(self.nuclear_data_sources) + else: + self.nuclear_data_sources = dict(self.nuclear.sources) + if self.nuclear.default_library is None: + self.nuclear.default_library = EndfLibrary.ENDF_B_VIII_0 + if self.workspace and self.workspace.endf_dir is None: + self.workspace.endf_dir = self.nuclear_data_cache_dir + + default_library = self.nuclear.default_library or EndfLibrary.ENDF_B_VIII_0 + self.nuclear.isotopes = [ + IsotopeConfig(**entry) if isinstance(entry, dict) else entry for entry in self.nuclear.isotopes + ] + for entry in self.nuclear.isotopes: + if entry.endf_library is None: + entry.endf_library = default_library + + # Normalize fit_routines into typed models. + new_fit_routines: Dict[str, FitRoutineConfig] = {} + for routine_id, routine in self.fit_routines.items(): + if isinstance(routine, dict): + routine = FitRoutineConfig.model_validate(routine) + new_fit_routines[routine_id] = routine + + self.fit_routines = new_fit_routines + return self + + @model_validator(mode="after") + def _require_fit_routines(self, info) -> "PleiadesConfig": + """Require fit_routines when loading from a user config.""" + if info.context and info.context.get("require_fit_routines"): + if not self.fit_routines: + raise ValueError("fit_routines must be defined in the config file") + return self + + def build_nuclear_params(self, routine_id: Optional[str] = None) -> nuclearParameters: + """Build nuclearParameters from configured isotope entries. + + This method converts configuration-level isotope entries + (``self.nuclear.isotopes``) into concrete ``IsotopeParameters`` objects + used by SAMMY fit execution. + + The implementation intentionally applies two safeguards: + 1. Duplicate isotope identifiers are detected early and logged as + warnings so users can correct accidental duplicate entries in + configuration files. + 2. Objects returned by ``IsotopeManager`` are deep-copied before + mutation (abundance, uncertainty, vary flag, library) to avoid + mutating shared/cached manager state across runs. + + Args: + routine_id: Optional routine identifier. Currently unused but kept + for API compatibility with routine-aware workflows. + + Returns: + ``nuclearParameters`` populated with per-isotope values from config. + + Raises: + ValueError: If no isotopes are configured. + ValueError: If any isotope string cannot be resolved by + ``IsotopeManager``. + """ + isotope_entries = None + isotope_entries = self.nuclear.isotopes + if not isotope_entries: + raise ValueError("No isotopes configured. Set nuclear.isotopes.") + from pleiades.nuclear.isotopes.manager import IsotopeManager + + manager = IsotopeManager() + isotopes: List[IsotopeParameters] = [] + seen_isotopes: set[str] = set() + retrieved_instance_ids: Dict[str, int] = {} + + default_library = self.nuclear.default_library or EndfLibrary.ENDF_B_VIII_0 + + for entry in isotope_entries: + # Normalize plain dict entries into the typed isotope model. + if isinstance(entry, dict): + entry = IsotopeConfig(**entry) + + # Warn on duplicate config entries before final nuclearParameters + # validation. Validation still rejects duplicate isotope names, but + # this warning points users to the root config issue sooner. + if entry.isotope in seen_isotopes: + logger.warning( + f"Duplicate isotope entry detected in config for '{entry.isotope}'. " + "This may trigger duplicate isotope validation errors." + ) + else: + seen_isotopes.add(entry.isotope) + + # Fetch baseline isotope parameters from the isotope manager. + retrieved_isotope_params = manager.get_isotope_parameters_from_isotope_string(entry.isotope) + if retrieved_isotope_params is None: + raise ValueError(f"Isotope not found: {entry.isotope}") + + # If the manager returns the same object instance for repeated + # lookups, warn that we are about to isolate mutation via copying. + previous_instance_id = retrieved_instance_ids.get(entry.isotope) + current_instance_id = id(retrieved_isotope_params) + if previous_instance_id == current_instance_id: + logger.warning( + f"IsotopeManager returned a reused IsotopeParameters instance for '{entry.isotope}'; " + "applying changes to a deep copy to prevent shared-state mutation." + ) + retrieved_instance_ids[entry.isotope] = current_instance_id + + # Apply config-specific overrides on a deep copy to avoid mutating + # manager-owned/cached instances. + isotope_params = retrieved_isotope_params.model_copy(deep=True) + isotope_params.abundance = entry.abundance + isotope_params.uncertainty = entry.uncertainty + isotope_params.vary_abundance = entry.vary_abundance + isotope_params.endf_library = entry.endf_library or default_library + + # Collect per-entry isotope params; nuclearParameters validates + # aggregate constraints (including duplicate isotope names). + isotopes.append(isotope_params) + + return nuclearParameters(isotopes=isotopes) + + def populate_fit_config_isotopes(self, fit_config: Any, routine_id: Optional[str] = None) -> Any: + """Populate fit_config.nuclear_params.isotopes from config if missing. + + This is the bridge that ensures a FitConfig has isotopes before INP/PAR + generation or SAMMY execution. + """ + if not hasattr(fit_config, "nuclear_params"): + raise ValueError("fit_config must have a nuclear_params attribute") + if not fit_config.nuclear_params.isotopes: + fit_config.nuclear_params = self.build_nuclear_params(routine_id) + return fit_config + + def ensure_endf_cache( + self, + routine_id: Optional[str] = None, + method: DataRetrievalMethod = DataRetrievalMethod.DIRECT, + endf_cache_dir: Optional[Path] = None, + use_cache: bool = True, + update_config: bool = True, + ) -> List[Path]: + """Ensure ENDF cache files exist for configured isotopes. + + This method validates configured isotopes, resolves a target output + directory, and delegates file retrieval to ``NuclearDataManager``. + For each isotope entry, it requests the resonance file and returns the + list of resulting file paths. + + Args: + routine_id: Optional routine identifier (reserved for future routine-specific + behavior). + method: Nuclear data retrieval method. + endf_cache_dir: Optional override for the ENDF cache/output directory. + use_cache: If True, reuse existing cached artifacts when available. + update_config: If True, update module-global config via ``set_config(self)`` + before constructing ``NuclearDataManager``. + + Returns: + List of output paths, one per configured isotope, in the same order + as ``self.nuclear.isotopes``. + + Raises: + ValueError: If no isotopes are configured. + ValueError: If an isotope identifier cannot be resolved by the + isotope manager. + + Side Effects: + - Creates ``endf_cache_dir`` (or resolved default cache directory) + if it does not exist. + - Optionally updates module-global config state when + ``update_config=True``. + """ + isotope_entries = self.nuclear.isotopes + + if not isotope_entries: + raise ValueError("No isotopes configured. Set nuclear.isotopes.") + + from pleiades.nuclear.manager import NuclearDataManager + + endf_cache_dir = ( + Path(endf_cache_dir) + if endf_cache_dir is not None + else ( + self.workspace.endf_dir if self.workspace and self.workspace.endf_dir else self.nuclear_data_cache_dir + ) + ) + # Ensure download destination exists before any retrieval calls. + endf_cache_dir.mkdir(parents=True, exist_ok=True) + + # Keep this side effect opt-in/explicit for callers that need global + # configuration state synchronized for downstream manager behavior. + if update_config: + set_config(self) + manager = NuclearDataManager() + default_library = self.nuclear.default_library or EndfLibrary.ENDF_B_VIII_0 + + outputs: List[Path] = [] + for entry in isotope_entries: + if isinstance(entry, dict): + entry = IsotopeConfig(**entry) + # Resolve isotope metadata used by the download manager. + isotope_info = manager.isotope_manager.get_isotope_info(entry.isotope) + if isotope_info is None: + raise ValueError(f"Isotope not found: {entry.isotope}") + # Apply per-isotope library override when present; otherwise use + # the config default library. + library = entry.endf_library or default_library + output_path = manager.download_endf_resonance_file( + isotope=isotope_info, + library=library, + output_dir=str(endf_cache_dir), + method=method, + use_cache=use_cache, + ) + outputs.append(output_path) + + return outputs def ensure_directories(self): """Ensure all configured directories exist.""" self.nuclear_data_cache_dir.mkdir(parents=True, exist_ok=True) + if self.workspace: + for path in ( + self.workspace.root, + self.workspace.endf_dir, + self.workspace.fitting_dir, + self.workspace.results_dir, + self.workspace.data_dir, + self.workspace.image_dir, + ): + if path is not None: + path.mkdir(parents=True, exist_ok=True) + + def create_routine_dirs( + self, + base_routine_ids: Optional[List[str]] = None, + timestamp: Optional[str] = None, + ) -> List[Dict[str, str | Path]]: + """Create per-routine fit directories and a per-fit results subdirectory. + + Directory layout produced by this method: + // + //fit_results_dir/ + + Where ``routine_id`` is built as ``_``. + + Args: + base_routine_ids: Optional list of base routine names. If omitted, all keys + from ``self.fit_routines`` are used. + timestamp: Optional UTC timestamp string to make routine directories unique. + If omitted, a timestamp in ``YYYYMMDDTHHMMSSZ`` format is generated. + + Returns: + A list of dictionaries, one per created routine directory, each containing: + - ``routine_id`` (str): The final timestamped routine identifier. + - ``fit_dir`` (Path): The routine working directory under ``fitting_dir``. + - ``fit_results_dir`` (Path): Subdirectory for SAMMY outputs for that routine. + + Raises: + ValueError: If ``workspace.fitting_dir`` is not configured. + ValueError: If no routine ids are available to create. + """ + # The fitting root is required because each routine directory is created under it. + if not self.workspace or not self.workspace.fitting_dir: + raise ValueError("workspace.fitting_dir is required to create routine directories") + + # If explicit routine ids are not provided, use configured fit routine keys. + routine_ids = base_routine_ids or list(self.fit_routines.keys()) + if not routine_ids: + raise ValueError("No fit_routines defined to create routine directories") + + # Generate a UTC timestamp once so all routines created in this call share it. + if timestamp is None: + from datetime import datetime, timezone + + timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") + + created: List[Dict[str, str | Path]] = [] + fitting_dir = self.workspace.fitting_dir + + for base_routine_id in routine_ids: + # Compose a run-unique routine id and derive both routine directories. + routine_id = f"{base_routine_id}_{timestamp}" + fit_dir = fitting_dir / routine_id + fit_results_dir = fit_dir / "fit_results_dir" + + # Ensure both the routine root and its SAMMY output subdirectory exist. + fit_dir.mkdir(parents=True, exist_ok=True) + fit_results_dir.mkdir(parents=True, exist_ok=True) + + created.append( + { + "routine_id": routine_id, + "fit_dir": fit_dir, + "fit_results_dir": fit_results_dir, + } + ) + + # Ensure workspace-level aggregate results directory exists (if configured). + if self.workspace.results_dir: + self.workspace.results_dir.mkdir(parents=True, exist_ok=True) + + return created def to_dict(self) -> Dict[str, Any]: """Convert configuration to a dictionary.""" - result = {} - for key, value in self.__dict__.items(): - if isinstance(value, Path): - result[key] = str(value) - else: - result[key] = value - return result + return self.model_dump(mode="json") + + @classmethod + def _normalize_config_for_io(cls, config_dict: Dict[str, Any]) -> Dict[str, Any]: + """Normalize config payload before save/load validation. + + Enforces strict IO requirements so save/load behavior is consistent: + ``fit_routines`` must be present and non-empty. + """ + normalized = dict(config_dict or {}) + fit_routines = normalized.get("fit_routines") + if not fit_routines: + raise ValueError("fit_routines must be defined in the config file") + return normalized def save(self, path: Optional[Path] = None) -> Path: """ @@ -60,9 +648,11 @@ def save(self, path: Optional[Path] = None) -> Path: # Ensure directory exists path.parent.mkdir(parents=True, exist_ok=True) + normalized = self._normalize_config_for_io(self.to_dict()) + # Save config as YAML with open(path, "w") as f: - yaml.dump(self.to_dict(), f) + yaml.safe_dump(normalized, f, sort_keys=False) return path @@ -89,11 +679,28 @@ def load(cls, path: Optional[Path] = None) -> "PleiadesConfig": if not config_dict: return cls() - # Convert string paths back to Path objects - if "nuclear_data_cache_dir" in config_dict: - config_dict["nuclear_data_cache_dir"] = Path(config_dict["nuclear_data_cache_dir"]) + return cls.from_dict(config_dict) + + @classmethod + def from_dict(cls, config_dict: Dict[str, Any]) -> "PleiadesConfig": + """Build a configuration from a dictionary.""" + normalized = cls._normalize_config_for_io(config_dict) + return cls.model_validate(normalized, context={"require_fit_routines": True}) + + +class IsotopeConfig(BaseModel): + """Configuration for a single isotope entry.""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + isotope: str + abundance: Optional[float] = None + uncertainty: Optional[float] = None + vary_abundance: Optional[VaryFlag] = None + endf_library: Optional[EndfLibrary] = None + - return cls(**config_dict) +NuclearConfig.model_rebuild() # Global configuration instance diff --git a/tests/data/config/sammy_runner.yaml b/tests/data/config/sammy_runner.yaml index 55b73e20..749dcd99 100644 --- a/tests/data/config/sammy_runner.yaml +++ b/tests/data/config/sammy_runner.yaml @@ -7,7 +7,7 @@ local: shell_path: /bin/bash docker: - image_name: kedokudo/sammy-docker + image_name: kedokudo/sammy-docker:1.0.0 container_working_dir: /sammy/work container_data_dir: /sammy/data diff --git a/tests/unit/pleiades/sammy/backends/test_docker.py b/tests/unit/pleiades/sammy/backends/test_docker.py index 76f0591d..d0f510de 100644 --- a/tests/unit/pleiades/sammy/backends/test_docker.py +++ b/tests/unit/pleiades/sammy/backends/test_docker.py @@ -67,7 +67,7 @@ def docker_config(temp_working_dir): config = DockerSammyConfig( working_dir=temp_working_dir, output_dir=temp_working_dir / "output", - image_name="kedokudo/sammy-docker", + image_name="kedokudo/sammy-docker:1.0.0", container_working_dir=Path("/sammy/work"), container_data_dir=Path("/sammy/data"), ) diff --git a/tests/unit/pleiades/sammy/io/card_formats/test_inp02_element.py b/tests/unit/pleiades/sammy/io/card_formats/test_inp02_element.py index 8cc47ca9..e4348975 100644 --- a/tests/unit/pleiades/sammy/io/card_formats/test_inp02_element.py +++ b/tests/unit/pleiades/sammy/io/card_formats/test_inp02_element.py @@ -23,6 +23,12 @@ def minimal_line(): return ["H 1.00794 0.001 10.0"] +@pytest.fixture +def full_line(): + """Example with extended Card Set 2 fields.""" + return ["U 238 238.050972 0.0000 100.0 0 0 0 0 0 0 0"] + + def test_parse_silicon_line(silicon_line): """Test parsing silicon element line.""" element_info = Card02.from_lines(silicon_line) @@ -53,6 +59,26 @@ def test_parse_minimal_line(minimal_line): assert pytest.approx(element_info.max_energy, rel=1e-3) == 10.0 +def test_parse_full_line(full_line): + """Test parsing extended Card Set 2 line.""" + element_info = Card02.from_lines(full_line) + + assert element_info.element == "U 238" + assert pytest.approx(element_info.atomic_weight, rel=1e-6) == 238.050972 + assert pytest.approx(element_info.min_energy, rel=1e-4) == 0.0 + assert pytest.approx(element_info.max_energy, rel=1e-3) == 100.0 + assert element_info.nepnts == 0 + assert element_info.itmax == 0 + assert element_info.icorr == 0 + assert element_info.nxtra == 0 + assert element_info.iptdop == 0 + assert element_info.iptwid == 0 + assert element_info.ixxchn == 0 + assert element_info.ndigit is None + assert element_info.idropp is None + assert element_info.matnum is None + + def test_parse_empty_line(): """Test that empty line raises ValueError.""" with pytest.raises(ValueError, match="No valid Card 2 line"): @@ -110,6 +136,34 @@ def test_roundtrip_silicon(silicon_line): assert pytest.approx(reparsed_info.max_energy, rel=1e-3) == element_info.max_energy +def test_to_lines_with_extras(): + """Test generating line with extended Card Set 2 fields.""" + element_info = ElementInfo( + element="U 238", + atomic_weight=238.050972, + min_energy=0.0, + max_energy=100.0, + nepnts=10001, + itmax=2, + icorr=50, + nxtra=0, + iptdop=9, + iptwid=5, + ixxchn=0, + ndigit=2, + idropp=2, + matnum=92238, + ) + + lines = Card02.to_lines(element_info) + + assert len(lines) == 1 + assert "10001" in lines[0] + assert " 2" in lines[0] + assert "50" in lines[0] + assert "92238" in lines[0] + + def test_element_info_validation_max_less_than_min(): """Test that max_energy must be greater than min_energy.""" with pytest.raises(ValueError, match="max_energy.*must be greater than min_energy"): diff --git a/tests/unit/pleiades/sammy/io/card_formats/test_inp03_density.py b/tests/unit/pleiades/sammy/io/card_formats/test_inp03_density.py deleted file mode 100644 index 3406387f..00000000 --- a/tests/unit/pleiades/sammy/io/card_formats/test_inp03_density.py +++ /dev/null @@ -1,164 +0,0 @@ -"""Unit tests for SAMMY INP file - Sample Density class.""" - -import pytest - -from pleiades.sammy.io.card_formats.inp03_density import Card03Density, SampleDensity - - -@pytest.fixture -def ex012_line(): - """Example from SAMMY ex012a.inp line 9.""" - return [" 4.20000 0.347162"] - - -@pytest.fixture -def default_line(): - """Default configuration.""" - return [" 9.000000 1.797e-03"] - - -@pytest.fixture -def scientific_notation_line(): - """Line with scientific notation.""" - return [" 19.300000 3.456789e-02"] - - -def test_parse_ex012_line(ex012_line): - """Test parsing ex012 density line.""" - density = Card03Density.from_lines(ex012_line) - - assert pytest.approx(density.density, rel=1e-5) == 4.20000 - assert pytest.approx(density.number_density, rel=1e-6) == 0.347162 - - -def test_parse_default_line(default_line): - """Test parsing default density line.""" - density = Card03Density.from_lines(default_line) - - assert pytest.approx(density.density, rel=1e-6) == 9.0 - assert pytest.approx(density.number_density, rel=1e-6) == 1.797e-03 - - -def test_parse_scientific_notation_line(scientific_notation_line): - """Test parsing line with scientific notation.""" - density = Card03Density.from_lines(scientific_notation_line) - - assert pytest.approx(density.density, rel=1e-5) == 19.3 - assert pytest.approx(density.number_density, rel=1e-6) == 3.456789e-02 - - -def test_parse_empty_line(): - """Test that empty line raises ValueError.""" - with pytest.raises(ValueError, match="No valid density line"): - Card03Density.from_lines([""]) - - -def test_parse_no_lines(): - """Test that empty list raises ValueError.""" - with pytest.raises(ValueError, match="No valid density line"): - Card03Density.from_lines([]) - - -def test_parse_insufficient_fields(): - """Test that line with only one field raises ValueError.""" - with pytest.raises(ValueError, match="Density line must have 2 fields"): - Card03Density.from_lines(["4.2"]) - - -def test_parse_invalid_format(): - """Test that invalid numeric format raises ValueError.""" - with pytest.raises(ValueError, match="Failed to parse density line"): - Card03Density.from_lines(["InvalidData MoreInvalidData"]) - - -def test_to_lines_ex012(): - """Test generating ex012-style line.""" - density = SampleDensity(density=4.20000, number_density=0.347162) - - lines = Card03Density.to_lines(density) - - assert len(lines) == 1 - assert "4.200000" in lines[0] - assert "3.471620e-01" in lines[0] or "3.47162e-01" in lines[0] - - -def test_to_lines_default(): - """Test generating default line.""" - density = SampleDensity(density=9.0, number_density=1.797e-03) - - lines = Card03Density.to_lines(density) - - assert len(lines) == 1 - assert "9.000000" in lines[0] - assert "1.797" in lines[0] - assert "e-03" in lines[0] - - -def test_to_lines_scientific(): - """Test generating line with scientific notation.""" - density = SampleDensity(density=19.3, number_density=3.456789e-02) - - lines = Card03Density.to_lines(density) - - assert len(lines) == 1 - assert "19.300000" in lines[0] - assert "3.456789e-02" in lines[0] or "3.45678" in lines[0] - - -def test_roundtrip_ex012(ex012_line): - """Test parse and regenerate produces consistent result.""" - density = Card03Density.from_lines(ex012_line) - regenerated_lines = Card03Density.to_lines(density) - - reparsed_density = Card03Density.from_lines(regenerated_lines) - - assert pytest.approx(reparsed_density.density, rel=1e-5) == density.density - assert pytest.approx(reparsed_density.number_density, rel=1e-5) == density.number_density - - -def test_sample_density_validation_negative_density(): - """Test that density must be positive.""" - with pytest.raises(ValueError): - SampleDensity(density=-9.0, number_density=0.001) - - -def test_sample_density_validation_zero_density(): - """Test that density must be positive (not zero).""" - with pytest.raises(ValueError): - SampleDensity(density=0.0, number_density=0.001) - - -def test_sample_density_validation_negative_number_density(): - """Test that number_density must be positive.""" - with pytest.raises(ValueError): - SampleDensity(density=9.0, number_density=-0.001) - - -def test_sample_density_validation_zero_number_density(): - """Test that number_density must be positive (not zero).""" - with pytest.raises(ValueError): - SampleDensity(density=9.0, number_density=0.0) - - -def test_to_lines_invalid_input(): - """Test that to_lines rejects non-SampleDensity input.""" - with pytest.raises(ValueError, match="sample_density must be an instance of SampleDensity"): - Card03Density.to_lines("not a SampleDensity object") - - -def test_typical_values(): - """Test typical material density values.""" - gold_density = SampleDensity(density=19.3, number_density=0.059) - - assert gold_density.density == 19.3 - assert gold_density.number_density == 0.059 - - -def test_small_number_density(): - """Test very small number density values.""" - density = SampleDensity(density=0.001, number_density=1e-10) - - lines = Card03Density.to_lines(density) - assert len(lines) == 1 - assert "0.001000" in lines[0] - assert "e-10" in lines[0] diff --git a/tests/unit/pleiades/sammy/io/card_formats/test_inp03_constants.py b/tests/unit/pleiades/sammy/io/card_formats/test_inp05_broadening.py similarity index 80% rename from tests/unit/pleiades/sammy/io/card_formats/test_inp03_constants.py rename to tests/unit/pleiades/sammy/io/card_formats/test_inp05_broadening.py index 73542849..db46e9f7 100644 --- a/tests/unit/pleiades/sammy/io/card_formats/test_inp03_constants.py +++ b/tests/unit/pleiades/sammy/io/card_formats/test_inp05_broadening.py @@ -1,8 +1,8 @@ -"""Unit tests for SAMMY INP file - Card 3 (physical constants) class.""" +"""Unit tests for SAMMY INP file - Card 5 (broadening constants) class.""" import pytest -from pleiades.sammy.io.card_formats.inp03_constants import Card03, PhysicalConstants +from pleiades.sammy.io.card_formats.inp05_broadening import Card05, PhysicalConstants @pytest.fixture @@ -20,12 +20,12 @@ def venus_default_line(): @pytest.fixture def minimal_line(): """Minimal valid example with only required fields.""" - return ["300.0 25.0"] + return ["300.0"] def test_parse_ex012_line(ex012_line): """Test parsing ex012 physical constants line.""" - constants = Card03.from_lines(ex012_line) + constants = Card05.from_lines(ex012_line) assert pytest.approx(constants.temperature, rel=1e-3) == 300.0 assert pytest.approx(constants.flight_path_length, rel=1e-4) == 200.0 @@ -36,7 +36,7 @@ def test_parse_ex012_line(ex012_line): def test_parse_venus_default_line(venus_default_line): """Test parsing VENUS default configuration.""" - constants = Card03.from_lines(venus_default_line) + constants = Card05.from_lines(venus_default_line) assert pytest.approx(constants.temperature, rel=1e-3) == 293.6 assert pytest.approx(constants.flight_path_length, rel=1e-3) == 25.0 @@ -46,8 +46,8 @@ def test_parse_venus_default_line(venus_default_line): def test_parse_minimal_line(minimal_line): - """Test parsing minimal valid line (only TEMP and FPL).""" - constants = Card03.from_lines(minimal_line) + """Test parsing minimal valid line (TEMP only).""" + constants = Card05.from_lines(minimal_line) assert pytest.approx(constants.temperature, rel=1e-3) == 300.0 assert pytest.approx(constants.flight_path_length, rel=1e-3) == 25.0 @@ -58,26 +58,20 @@ def test_parse_minimal_line(minimal_line): def test_parse_empty_line(): """Test that empty line raises ValueError.""" - with pytest.raises(ValueError, match="No valid Card 3 line"): - Card03.from_lines([""]) + with pytest.raises(ValueError, match="No valid Card 5 line"): + Card05.from_lines([""]) def test_parse_no_lines(): """Test that empty list raises ValueError.""" - with pytest.raises(ValueError, match="No valid Card 3 line"): - Card03.from_lines([]) - - -def test_parse_insufficient_fields(): - """Test that line with only one field raises ValueError.""" - with pytest.raises(ValueError, match="Card 3 line must have at least 2 fields"): - Card03.from_lines(["300.0"]) + with pytest.raises(ValueError, match="No valid Card 5 line"): + Card05.from_lines([]) def test_parse_invalid_format(): """Test that invalid numeric format raises ValueError.""" - with pytest.raises(ValueError, match="Failed to parse Card 3 line"): - Card03.from_lines(["InvalidData MoreInvalidData"]) + with pytest.raises(ValueError, match="Failed to parse Card 5 line"): + Card05.from_lines(["InvalidData MoreInvalidData"]) def test_to_lines_ex012(): @@ -86,7 +80,7 @@ def test_to_lines_ex012(): temperature=300.0, flight_path_length=200.0, delta_l=0.182233, delta_g=0.0, delta_e=0.002518 ) - lines = Card03.to_lines(constants) + lines = Card05.to_lines(constants) assert len(lines) == 1 assert "300.0" in lines[0] @@ -100,7 +94,7 @@ def test_to_lines_venus_default(): """Test generating VENUS default line.""" constants = PhysicalConstants(temperature=293.6, flight_path_length=25.0, delta_l=0.0, delta_g=0.0, delta_e=0.0) - lines = Card03.to_lines(constants) + lines = Card05.to_lines(constants) assert len(lines) == 1 assert "293.6" in lines[0] @@ -112,7 +106,7 @@ def test_to_lines_minimal(): """Test generating minimal line with defaults.""" constants = PhysicalConstants(temperature=300.0, flight_path_length=25.0) - lines = Card03.to_lines(constants) + lines = Card05.to_lines(constants) assert len(lines) == 1 assert "300.0" in lines[0] @@ -121,10 +115,10 @@ def test_to_lines_minimal(): def test_roundtrip_ex012(ex012_line): """Test parse and regenerate produces consistent result.""" - constants = Card03.from_lines(ex012_line) - regenerated_lines = Card03.to_lines(constants) + constants = Card05.from_lines(ex012_line) + regenerated_lines = Card05.to_lines(constants) - reparsed_constants = Card03.from_lines(regenerated_lines) + reparsed_constants = Card05.from_lines(regenerated_lines) assert pytest.approx(reparsed_constants.temperature, rel=1e-3) == constants.temperature assert pytest.approx(reparsed_constants.flight_path_length, rel=1e-3) == constants.flight_path_length @@ -172,7 +166,7 @@ def test_physical_constants_validation_negative_delta_e(): def test_to_lines_invalid_input(): """Test that to_lines rejects non-PhysicalConstants input.""" with pytest.raises(ValueError, match="constants must be an instance of PhysicalConstants"): - Card03.to_lines("not a PhysicalConstants object") + Card05.to_lines("not a PhysicalConstants object") def test_default_values(): diff --git a/tests/unit/pleiades/sammy/io/card_formats/test_inp07_density.py b/tests/unit/pleiades/sammy/io/card_formats/test_inp07_density.py new file mode 100644 index 00000000..39153da8 --- /dev/null +++ b/tests/unit/pleiades/sammy/io/card_formats/test_inp07_density.py @@ -0,0 +1,152 @@ +"""Unit tests for SAMMY INP file - Card Set 7 class.""" + +import pytest + +from pleiades.sammy.io.card_formats.inp07_density import Card07, Card07Parameters + + +@pytest.fixture +def ex012_line(): + """Example from SAMMY ex012a.inp line 9.""" + return [" 4.20000 0.347162"] + + +@pytest.fixture +def default_line(): + """Default configuration.""" + return [" 9.000000 1.797e-03"] + + +@pytest.fixture +def scientific_notation_line(): + """Line with scientific notation.""" + return [" 19.300000 3.456789e-02"] + + +def test_parse_ex012_line(ex012_line): + """Test parsing ex012 Card 7 line.""" + params = Card07.from_lines(ex012_line) + + assert pytest.approx(params.crfn, rel=1e-5) == 4.20000 + assert pytest.approx(params.thick, rel=1e-6) == 0.347162 + + +def test_parse_default_line(default_line): + """Test parsing default Card 7 line.""" + params = Card07.from_lines(default_line) + + assert pytest.approx(params.crfn, rel=1e-6) == 9.0 + assert pytest.approx(params.thick, rel=1e-6) == 1.797e-03 + + +def test_parse_scientific_notation_line(scientific_notation_line): + """Test parsing line with scientific notation.""" + params = Card07.from_lines(scientific_notation_line) + + assert pytest.approx(params.crfn, rel=1e-5) == 19.3 + assert pytest.approx(params.thick, rel=1e-6) == 3.456789e-02 + + +def test_parse_empty_line(): + """Test that empty line raises ValueError.""" + with pytest.raises(ValueError, match="No valid Card 7 line"): + Card07.from_lines([""]) + + +def test_parse_no_lines(): + """Test that empty list raises ValueError.""" + with pytest.raises(ValueError, match="No valid Card 7 line"): + Card07.from_lines([]) + + +def test_parse_insufficient_fields(): + """Test that line with only one field raises ValueError.""" + with pytest.raises(ValueError, match="Card 7 line must have at least 2 fields"): + Card07.from_lines(["4.2"]) + + +def test_parse_invalid_format(): + """Test that invalid numeric format raises ValueError.""" + with pytest.raises(ValueError, match="Failed to parse Card 7 line"): + Card07.from_lines(["InvalidData MoreInvalidData"]) + + +def test_to_lines_ex012(): + """Test generating ex012-style line.""" + params = Card07Parameters(crfn=4.20000, thick=0.347162) + + lines = Card07.to_lines(params) + + assert len(lines) == 1 + assert "4.200000" in lines[0] + assert "3.471620e-01" in lines[0] or "3.47162e-01" in lines[0] + + +def test_to_lines_default(): + """Test generating default line.""" + params = Card07Parameters(crfn=9.0, thick=1.797e-03) + + lines = Card07.to_lines(params) + + assert len(lines) == 1 + assert "9.000000" in lines[0] + assert "1.797" in lines[0] + assert "e-03" in lines[0] + + +def test_to_lines_scientific(): + """Test generating line with scientific notation.""" + params = Card07Parameters(crfn=19.3, thick=3.456789e-02) + + lines = Card07.to_lines(params) + + assert len(lines) == 1 + assert "19.300000" in lines[0] + assert "3.456789e-02" in lines[0] or "3.45678" in lines[0] + + +def test_roundtrip_ex012(ex012_line): + """Test parse and regenerate produces consistent result.""" + params = Card07.from_lines(ex012_line) + regenerated_lines = Card07.to_lines(params) + + reparsed = Card07.from_lines(regenerated_lines) + + assert pytest.approx(reparsed.crfn, rel=1e-5) == params.crfn + assert pytest.approx(reparsed.thick, rel=1e-5) == params.thick + + +def test_card07_validation_negative_crfn(): + """Test that CRFN must be non-negative.""" + with pytest.raises(ValueError): + Card07Parameters(crfn=-9.0, thick=0.001) + + +def test_card07_validation_negative_thick(): + """Test that THICK must be non-negative.""" + with pytest.raises(ValueError): + Card07Parameters(crfn=9.0, thick=-0.001) + + +def test_to_lines_invalid_input(): + """Test that to_lines rejects non-Card07Parameters input.""" + with pytest.raises(ValueError, match="params must be an instance of Card07Parameters"): + Card07.to_lines("not a Card07Parameters object") + + +def test_typical_values(): + """Test typical material density values.""" + params = Card07Parameters(crfn=19.3, thick=0.059) + + assert params.crfn == 19.3 + assert params.thick == 0.059 + + +def test_small_number_density(): + """Test very small number density values.""" + params = Card07Parameters(crfn=0.001, thick=1e-10) + + lines = Card07.to_lines(params) + assert len(lines) == 1 + assert "0.001000" in lines[0] + assert "e-10" in lines[0] diff --git a/tests/unit/pleiades/sammy/io/test_inp_manager.py b/tests/unit/pleiades/sammy/io/test_inp_manager.py index 819ded8b..4311b417 100644 --- a/tests/unit/pleiades/sammy/io/test_inp_manager.py +++ b/tests/unit/pleiades/sammy/io/test_inp_manager.py @@ -12,8 +12,11 @@ import pytest +from pleiades.sammy.fitting.config import FitConfig from pleiades.sammy.fitting.options import FitOptions -from pleiades.sammy.io.inp_manager import InpManager +from pleiades.sammy.io.card_formats.inp02_element import Card02, ElementInfo +from pleiades.sammy.io.card_formats.inp05_broadening import Card05, PhysicalConstants +from pleiades.sammy.io.inp_manager import InpDatasetMetadata, InpManager @pytest.fixture @@ -57,7 +60,7 @@ def test_init_with_all_parameters(): options = FitOptions() title = "Test Title" isotope_info = {"name": "Fe56", "mass": 55.934} - physical_constants = {"temperature": 300, "flight_path": 200} + physical_constants = {"temperature_K": 300, "flight_path_m": 200} reaction_type = "TRANSMISSION" inp_manager = InpManager( @@ -248,6 +251,7 @@ def test_custom_inp_creation(temp_dir): def test_create_multi_isotope_inp(temp_dir): """Test creating input file for multi-isotope JSON mode using class method.""" output_path = temp_dir / "multi_isotope.inp" + fit_config = FitConfig() with patch.object(FitOptions, "from_multi_isotope_config") as mock_from_multi: mock_options = MagicMock(spec=FitOptions) @@ -261,7 +265,9 @@ def test_create_multi_isotope_inp(temp_dir): ] mock_from_multi.return_value = mock_options - result_path = InpManager.create_multi_isotope_inp(output_path, title="Multi-isotope test") + result_path = InpManager.create_multi_isotope_inp( + output_path, fit_config=fit_config, title="Multi-isotope test" + ) assert result_path == output_path assert output_path.exists() @@ -280,9 +286,12 @@ def test_create_multi_isotope_inp(temp_dir): def test_multi_isotope_config_integration(temp_dir): """Test multi-isotope configuration integration without mocking.""" output_path = temp_dir / "multi_isotope_real.inp" + fit_config = FitConfig() # Test real implementation without mocking - result_path = InpManager.create_multi_isotope_inp(output_path, title="Real multi-isotope integration test") + result_path = InpManager.create_multi_isotope_inp( + output_path, fit_config=fit_config, title="Real multi-isotope integration test" + ) assert result_path == output_path assert output_path.exists() @@ -312,15 +321,24 @@ def test_multi_isotope_config_integration(temp_dir): ) -def test_multi_isotope_with_material_properties(temp_dir): - """Test multi-isotope INP generation with material properties.""" +def test_multi_isotope_with_dataset_metadata(temp_dir): + """Test multi-isotope INP generation with typed dataset metadata.""" output_path = temp_dir / "multi_isotope_with_materials.inp" - - # Test with Hafnium material properties - material_props = {"density_g_cm3": 13.31, "thickness_mm": 5.0, "atomic_mass_amu": 178.49, "temperature_K": 293.6} + fit_config = FitConfig() + fit_config.physics_params.broadening_parameters.crfn = 8.0 + + dataset_metadata = InpDatasetMetadata( + density_g_cm3=13.31, + thickness_mm=5.0, + atomic_mass_amu=178.49, + temperature_K=293.6, + ) result_path = InpManager.create_multi_isotope_inp( - output_path, title="Hafnium multi-isotope test", material_properties=material_props + output_path, + fit_config=fit_config, + title="Hafnium multi-isotope test", + dataset_metadata=dataset_metadata, ) assert result_path == output_path @@ -339,12 +357,86 @@ def test_multi_isotope_with_material_properties(temp_dir): # No resolution function expected when no resolution_file_path provided -def test_multi_isotope_missing_required_properties(temp_dir): - """Test multi-isotope INP generation with missing required properties.""" +def test_multi_isotope_missing_required_dataset_metadata_fields(temp_dir): + """Typed metadata should require all THICK derivation inputs when any are provided.""" output_path = temp_dir / "multi_isotope_missing.inp" + fit_config = FitConfig() + + incomplete_metadata = InpDatasetMetadata(thickness_mm=5.0, atomic_mass_amu=178.49) + + with pytest.raises( + ValueError, match="dataset_metadata must include density_g_cm3, thickness_mm, and atomic_mass_amu" + ): + InpManager.create_multi_isotope_inp( + output_path, + fit_config=fit_config, + title="Should fail", + dataset_metadata=incomplete_metadata, + ) + + +def test_generate_physical_constants_section_uses_fit_config_dist(): + """Card 5 generation should preserve fit_config broadening.dist as flight path.""" + fit_config = FitConfig() + broadening = fit_config.physics_params.broadening_parameters + broadening.temp = 300.0 + broadening.dist = 123.4 + broadening.deltal = 0.2 + broadening.deltag = 0.1 + broadening.deltae = 0.01 + + manager = InpManager(fit_config=fit_config) + section = manager.generate_physical_constants_section() + constants = Card05.from_lines([section.strip()]) + + assert constants.temperature == pytest.approx(300.0) + assert constants.flight_path_length == pytest.approx(123.4) + assert constants.delta_l == pytest.approx(0.2) + assert constants.delta_g == pytest.approx(0.1) + assert constants.delta_e == pytest.approx(0.01) + + +def test_generate_physical_constants_section_uses_dataset_metadata_temperature_fallback(): + """Card 5 generation should use dataset metadata temperature when FitConfig temp is unset.""" + fit_config = FitConfig() + broadening = fit_config.physics_params.broadening_parameters + broadening.temp = None + broadening.dist = 40.0 + broadening.deltal = 0.4 + broadening.deltag = 0.3 + broadening.deltae = 0.2 + + manager = InpManager(fit_config=fit_config) + section = manager.generate_physical_constants_section(dataset_metadata=InpDatasetMetadata(temperature_K=310.0)) + constants = Card05.from_lines([section.strip()]) + + assert constants.temperature == pytest.approx(310.0) + assert constants.flight_path_length == pytest.approx(40.0) + assert constants.delta_l == pytest.approx(0.4) + assert constants.delta_g == pytest.approx(0.3) + assert constants.delta_e == pytest.approx(0.2) + + +def test_read_inp_file_sets_broadening_dist_from_card5(temp_dir): + """Card 5 parsing should map flight path length back to broadening.dist.""" + fit_config = FitConfig() + manager = InpManager(fit_config=fit_config) + output_path = temp_dir / "roundtrip_card5.inp" + + card2_line = Card02.to_lines(ElementInfo(element="Au", atomic_weight=196.966569, min_energy=0.001, max_energy=1.0))[ + 0 + ] + card5_line = Card05.to_lines( + PhysicalConstants(temperature=296.0, flight_path_length=48.5, delta_l=0.3, delta_g=0.2, delta_e=0.1) + )[0] + + output_path.write_text(f"Card5 Parse Test\n{card2_line}\n{card5_line}\ntransmission\n") - # Missing required density - incomplete_props = {"thickness_mm": 5.0, "atomic_mass_amu": 178.49} + loaded = manager.read_inp_file(output_path, fit_config=fit_config) + broadening = loaded.physics_params.broadening_parameters - with pytest.raises(ValueError, match="must contain 'density_g_cm3' and 'atomic_mass_amu'"): - InpManager.create_multi_isotope_inp(output_path, title="Should fail", material_properties=incomplete_props) + assert broadening.temp == pytest.approx(296.0) + assert broadening.dist == pytest.approx(48.5) + assert broadening.deltal == pytest.approx(0.3) + assert broadening.deltag == pytest.approx(0.2) + assert broadening.deltae == pytest.approx(0.1) diff --git a/tests/unit/pleiades/sammy/test_config.py b/tests/unit/pleiades/sammy/test_config.py index 516aa6fe..b45f6176 100644 --- a/tests/unit/pleiades/sammy/test_config.py +++ b/tests/unit/pleiades/sammy/test_config.py @@ -74,16 +74,27 @@ def test_create_with_valid_config(self, temp_working_dir): config = DockerSammyConfig( working_dir=temp_working_dir, output_dir=temp_working_dir / "output", - image_name="kedokudo/sammy-docker", + image_name="kedokudo/sammy-docker:1.0.0", container_working_dir=Path("/sammy/work"), container_data_dir=Path("/sammy/data"), ) - assert config.image_name == "kedokudo/sammy-docker" + assert config.image_name == "kedokudo/sammy-docker:1.0.0" assert config.container_working_dir == Path("/sammy/work") assert config.container_data_dir == Path("/sammy/data") # call validate assert config.validate() + def test_validate_digest_pinned_image_name(self, temp_working_dir): + """Should accept immutable digest-pinned image references.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + assert config.validate() + def test_validate_empty_image_name(self, temp_working_dir): """Should raise error for empty image name.""" config = DockerSammyConfig( @@ -97,12 +108,38 @@ def test_validate_empty_image_name(self, temp_working_dir): config.validate() assert "image name cannot be empty" in str(exc.value) + def test_validate_rejects_unpinned_image_name(self, temp_working_dir): + """Should reject image references with no tag and no digest.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "must be pinned to an immutable digest" in str(exc.value) + + def test_validate_rejects_mutable_latest_tag(self, temp_working_dir): + """Should reject mutable tags such as :latest.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker:latest", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "must be pinned to an immutable digest" in str(exc.value) + def test_validate_relative_container_paths(self, temp_working_dir): """Should raise error for relative container paths.""" config = DockerSammyConfig( working_dir=temp_working_dir, output_dir=temp_working_dir / "output", - image_name="kedokudo/sammy-docker", + image_name="kedokudo/sammy-docker:1.0.0", container_working_dir=Path("relative/path"), container_data_dir=Path("/sammy/data"), ) @@ -115,7 +152,7 @@ def test_validate_relative_data_dir(self, temp_working_dir): config = DockerSammyConfig( working_dir=temp_working_dir, output_dir=temp_working_dir / "output", - image_name="kedokudo/sammy-docker", + image_name="kedokudo/sammy-docker:1.0.0", container_working_dir=Path("/sammy/work"), container_data_dir=Path("relative/path"), ) @@ -129,7 +166,7 @@ def test_validate_same_container_dirs(self, temp_working_dir): config = DockerSammyConfig( working_dir=temp_working_dir, output_dir=temp_working_dir / "output", - image_name="kedokudo/sammy-docker", + image_name="kedokudo/sammy-docker:1.0.0", container_working_dir=same_path, container_data_dir=same_path, ) diff --git a/tests/unit/pleiades/utils/test_utils_config.py b/tests/unit/pleiades/utils/test_utils_config.py index c160c243..e94a43ae 100644 --- a/tests/unit/pleiades/utils/test_utils_config.py +++ b/tests/unit/pleiades/utils/test_utils_config.py @@ -7,8 +7,19 @@ import pytest import yaml +from pydantic import ValidationError -from pleiades.utils.config import PleiadesConfig, get_config, reset_config, set_config +from pleiades.nuclear.isotopes.models import IsotopeInfo, IsotopeMassData +from pleiades.nuclear.models import DataRetrievalMethod, EndfLibrary, IsotopeParameters +from pleiades.utils.config import ( + FitRoutineConfig, + IsotopeConfig, + PleiadesConfig, + get_config, + reset_config, + set_config, +) +from pleiades.utils.helper import VaryFlag class TestPleiadesConfig: @@ -27,6 +38,9 @@ def test_default_initialization(self): assert "API" in config.nuclear_data_sources assert config.nuclear_data_sources["DIRECT"] == "https://www-nds.iaea.org/public/download-endf" assert config.nuclear_data_sources["API"] == "https://www-nds.iaea.org/exfor/servlet" + assert config.nuclear is not None + assert config.nuclear.data_cache_dir == expected_path + assert config.nuclear.sources == config.nuclear_data_sources def test_custom_initialization(self): """Test custom initialization of PleiadesConfig.""" @@ -37,13 +51,18 @@ def test_custom_initialization(self): assert config.nuclear_data_cache_dir == custom_path assert config.nuclear_data_sources == custom_sources + assert config.nuclear is not None + assert config.nuclear.data_cache_dir == custom_path + assert config.nuclear.sources == custom_sources def test_post_init_conversion(self): - """Test __post_init__ conversion of string paths to Path objects.""" + """Test conversion of string paths to Path objects.""" config = PleiadesConfig(nuclear_data_cache_dir="/test/string/path") assert isinstance(config.nuclear_data_cache_dir, Path) assert config.nuclear_data_cache_dir == Path("/test/string/path") + assert config.nuclear is not None + assert config.nuclear.data_cache_dir == Path("/test/string/path") def test_ensure_directories(self, monkeypatch): """Test directory creation functionality.""" @@ -83,7 +102,11 @@ def test_save_and_load(self): temp_path = Path(tmpdir) / "nuclear_data" custom_sources = {"TEST": "https://test.com"} - config = PleiadesConfig(nuclear_data_cache_dir=temp_path, nuclear_data_sources=custom_sources) + config = PleiadesConfig( + nuclear_data_cache_dir=temp_path, + nuclear_data_sources=custom_sources, + fit_routines={"example_fit": {"dataset_id": "example_dataset"}}, + ) # Save to temp file save_path = Path(tmpdir) / "config.yaml" @@ -102,9 +125,14 @@ def test_save_and_load(self): # Load config from saved file loaded_config = PleiadesConfig.load(save_path) - # Verify loaded config matches original - assert loaded_config.nuclear_data_cache_dir == temp_path - assert loaded_config.nuclear_data_sources == custom_sources + # Verify loaded config matches original + assert loaded_config.nuclear_data_cache_dir == temp_path + assert loaded_config.nuclear_data_sources == custom_sources + assert loaded_config.nuclear is not None + assert loaded_config.nuclear.data_cache_dir == temp_path + assert loaded_config.nuclear.sources == custom_sources + assert "example_fit" in loaded_config.fit_routines + assert loaded_config.fit_routines["example_fit"].dataset_id == "example_dataset" def test_load_nonexistent_file(self): """Test loading from nonexistent file returns default config.""" @@ -138,6 +166,378 @@ def test_load_empty_file(self): assert "DIRECT" in config.nuclear_data_sources assert "API" in config.nuclear_data_sources + def test_workspace_path_expansion_from_workspace_tokens(self, tmp_path): + """Workspace fields should expand ${workspace.*} tokens consistently.""" + config = PleiadesConfig( + workspace={ + "root": tmp_path, + "endf_dir": "${workspace.root}/endf_dir", + "fitting_dir": "${workspace.root}/fitting_dir", + "results_dir": "${workspace.root}/results_dir", + "data_dir": "${workspace.root}/data_dir", + "image_dir": "${workspace.root}/image_dir", + }, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + assert config.workspace is not None + assert config.workspace.root == tmp_path + assert config.workspace.endf_dir == tmp_path / "endf_dir" + assert config.workspace.fitting_dir == tmp_path / "fitting_dir" + assert config.workspace.results_dir == tmp_path / "results_dir" + assert config.workspace.data_dir == tmp_path / "data_dir" + assert config.workspace.image_dir == tmp_path / "image_dir" + + def test_workspace_expands_root_first_then_dependent_tokens(self, tmp_path, monkeypatch): + """Dependent workspace tokens should resolve against expanded root values.""" + monkeypatch.setenv("PLEIADES_WORK_ROOT", str(tmp_path)) + config = PleiadesConfig( + workspace={ + "root": "$PLEIADES_WORK_ROOT", + "fitting_dir": "${workspace.root}/fitting_dir", + }, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + assert config.workspace is not None + assert config.workspace.root == tmp_path + assert config.workspace.fitting_dir == tmp_path / "fitting_dir" + + def test_workspace_unresolved_token_results_in_none(self, tmp_path): + """Unresolved workspace tokens should produce None after expansion.""" + config = PleiadesConfig( + workspace={ + "root": tmp_path, + "fitting_dir": "${workspace.missing_dir}/fits", + }, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + assert config.workspace is not None + assert config.workspace.fitting_dir is None + + def test_fit_routines_are_normalized_to_typed_models(self): + """fit_routines entries provided as dicts should be normalized to FitRoutineConfig.""" + pre_typed = FitRoutineConfig(dataset_id="dataset_2") + config = PleiadesConfig( + fit_routines={ + "fit_1": {"dataset_id": "dataset_1", "mode": "sammy"}, + "fit_2": pre_typed, + } + ) + + assert isinstance(config.fit_routines["fit_1"], FitRoutineConfig) + assert isinstance(config.fit_routines["fit_2"], FitRoutineConfig) + assert config.fit_routines["fit_1"].dataset_id == "dataset_1" + assert config.fit_routines["fit_2"].dataset_id == "dataset_2" + + def test_from_dict_requires_fit_routines(self): + """Loading from user payload should fail when fit_routines are missing.""" + with pytest.raises(ValueError, match="fit_routines must be defined"): + PleiadesConfig.from_dict({"workspace": {"root": "/tmp/pleiades"}}) + + def test_save_requires_fit_routines(self, tmp_path): + """Saving config with empty fit_routines should fail.""" + config = PleiadesConfig() + save_path = tmp_path / "config.yaml" + with pytest.raises(ValueError, match="fit_routines must be defined"): + config.save(save_path) + + def test_isotope_config_normalization_and_defaults(self): + """Isotope dicts should normalize to IsotopeConfig with default library applied.""" + config = PleiadesConfig( + nuclear={ + "default_library": EndfLibrary.JEFF_3_3, + "isotopes": [ + { + "isotope": "Ta-181", + "abundance": 0.6, + "uncertainty": 0.01, + "vary_abundance": VaryFlag.YES, + } + ], + }, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + assert len(config.nuclear.isotopes) == 1 + isotope = config.nuclear.isotopes[0] + assert isinstance(isotope, IsotopeConfig) + assert isotope.endf_library == EndfLibrary.JEFF_3_3 + assert isotope.vary_abundance == VaryFlag.YES + + def test_isotope_config_validation_rejects_invalid_library(self): + """Invalid enum values in isotope config should raise validation errors.""" + with pytest.raises(ValidationError): + PleiadesConfig( + nuclear={"isotopes": [{"isotope": "Ta-181", "endf_library": "NOT_A_LIBRARY"}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + def test_build_nuclear_params_uses_configured_isotopes(self, monkeypatch): + """build_nuclear_params should map config isotopes into nuclearParameters.""" + + class FakeIsotopeManager: + def get_isotope_parameters_from_isotope_string(self, isotope: str): + if isotope != "Ta-181": + return None + return IsotopeParameters( + isotope_information=IsotopeInfo( + name="Ta-181", + element="Ta", + mass_number=181, + atomic_number=73, + mass_data=IsotopeMassData(atomic_mass=180.9479958), + spin=3.5, + ) + ) + + monkeypatch.setattr("pleiades.nuclear.isotopes.manager.IsotopeManager", FakeIsotopeManager) + + config = PleiadesConfig( + nuclear={ + "default_library": EndfLibrary.JEFF_3_3, + "isotopes": [ + { + "isotope": "Ta-181", + "abundance": 0.8, + "uncertainty": 0.05, + "vary_abundance": VaryFlag.NO, + } + ], + }, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + nuclear_params = config.build_nuclear_params() + assert len(nuclear_params.isotopes) == 1 + isotope = nuclear_params.isotopes[0] + assert isotope.isotope_information.name == "Ta-181" + assert isotope.abundance == pytest.approx(0.8) + assert isotope.uncertainty == pytest.approx(0.05) + assert isotope.vary_abundance == VaryFlag.NO + assert isotope.endf_library == EndfLibrary.JEFF_3_3 + + def test_build_nuclear_params_raises_when_isotope_not_found(self, monkeypatch): + """Unknown isotopes should raise a clear error.""" + + class FakeIsotopeManager: + def get_isotope_parameters_from_isotope_string(self, isotope: str): + return None + + monkeypatch.setattr("pleiades.nuclear.isotopes.manager.IsotopeManager", FakeIsotopeManager) + + config = PleiadesConfig( + nuclear={"isotopes": [{"isotope": "Unknown-999"}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + with pytest.raises(ValueError, match="Isotope not found"): + config.build_nuclear_params() + + def test_build_nuclear_params_copies_retrieved_isotope_before_mutation(self, monkeypatch): + """Mutations should be applied to a copy, not to manager-owned isotope objects.""" + shared_isotope_params = IsotopeParameters( + isotope_information=IsotopeInfo( + name="Ta-181", + element="Ta", + mass_number=181, + atomic_number=73, + mass_data=IsotopeMassData(atomic_mass=180.9479958), + spin=3.5, + ) + ) + + class FakeIsotopeManager: + def get_isotope_parameters_from_isotope_string(self, isotope: str): + if isotope != "Ta-181": + return None + return shared_isotope_params + + monkeypatch.setattr("pleiades.nuclear.isotopes.manager.IsotopeManager", FakeIsotopeManager) + + config = PleiadesConfig( + nuclear={"isotopes": [{"isotope": "Ta-181", "abundance": 0.8, "uncertainty": 0.05}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + nuclear_params = config.build_nuclear_params() + + assert len(nuclear_params.isotopes) == 1 + built = nuclear_params.isotopes[0] + assert built is not shared_isotope_params + assert built.abundance == pytest.approx(0.8) + assert built.uncertainty == pytest.approx(0.05) + assert shared_isotope_params.abundance is None + assert shared_isotope_params.uncertainty is None + + def test_build_nuclear_params_warns_on_duplicate_isotope_entries(self, monkeypatch): + """Duplicate isotope entries should emit a warning before validation fails.""" + warnings_seen = [] + + class FakeIsotopeManager: + def get_isotope_parameters_from_isotope_string(self, isotope: str): + if isotope != "Ta-181": + return None + return IsotopeParameters( + isotope_information=IsotopeInfo( + name="Ta-181", + element="Ta", + mass_number=181, + atomic_number=73, + mass_data=IsotopeMassData(atomic_mass=180.9479958), + spin=3.5, + ) + ) + + monkeypatch.setattr("pleiades.nuclear.isotopes.manager.IsotopeManager", FakeIsotopeManager) + monkeypatch.setattr("pleiades.utils.config.logger.warning", lambda message: warnings_seen.append(message)) + + config = PleiadesConfig( + nuclear={"isotopes": [{"isotope": "Ta-181"}, {"isotope": "Ta-181"}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + with pytest.raises(ValueError, match="Duplicate isotope names found"): + config.build_nuclear_params() + + assert any("Duplicate isotope entry detected in config for 'Ta-181'" in message for message in warnings_seen) + + def test_ensure_endf_cache_downloads_to_workspace_endf_dir(self, monkeypatch, tmp_path): + """ensure_endf_cache should call downloader for each isotope and return output paths.""" + calls = [] + set_config_calls = {"count": 0} + + class FakeIsotopeManager: + def get_isotope_info(self, isotope: str): + return IsotopeInfo(name=isotope, element="Ta", mass_number=181, atomic_number=73) + + class FakeNuclearDataManager: + def __init__(self): + self.isotope_manager = FakeIsotopeManager() + + def download_endf_resonance_file(self, isotope, library, output_dir, method, use_cache): + calls.append( + { + "isotope": isotope.name, + "library": library, + "output_dir": output_dir, + "method": method, + "use_cache": use_cache, + } + ) + return Path(output_dir) / f"{isotope.name}.endf" + + monkeypatch.setattr( + "pleiades.utils.config.set_config", + lambda cfg: set_config_calls.__setitem__("count", set_config_calls["count"] + 1), + ) + monkeypatch.setattr("pleiades.nuclear.manager.NuclearDataManager", FakeNuclearDataManager) + + config = PleiadesConfig( + workspace={"root": tmp_path, "endf_dir": "${workspace.root}/endf_dir"}, + nuclear={"isotopes": [{"isotope": "Ta-181"}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + outputs = config.ensure_endf_cache(method=DataRetrievalMethod.API, use_cache=False) + + expected_dir = tmp_path / "endf_dir" + assert expected_dir.exists() + assert outputs == [expected_dir / "Ta-181.endf"] + assert calls == [ + { + "isotope": "Ta-181", + "library": EndfLibrary.ENDF_B_VIII_0, + "output_dir": str(expected_dir), + "method": DataRetrievalMethod.API, + "use_cache": False, + } + ] + assert set_config_calls["count"] == 1 + + def test_ensure_endf_cache_can_skip_global_config_update(self, monkeypatch, tmp_path): + """ensure_endf_cache should not touch global config when update_config is False.""" + set_config_calls = {"count": 0} + + class FakeIsotopeManager: + def get_isotope_info(self, isotope: str): + return IsotopeInfo(name=isotope, element="Ta", mass_number=181, atomic_number=73) + + class FakeNuclearDataManager: + def __init__(self): + self.isotope_manager = FakeIsotopeManager() + + def download_endf_resonance_file(self, isotope, library, output_dir, method, use_cache): + return Path(output_dir) / f"{isotope.name}.endf" + + monkeypatch.setattr( + "pleiades.utils.config.set_config", + lambda cfg: set_config_calls.__setitem__("count", set_config_calls["count"] + 1), + ) + monkeypatch.setattr("pleiades.nuclear.manager.NuclearDataManager", FakeNuclearDataManager) + + config = PleiadesConfig( + workspace={"root": tmp_path, "endf_dir": "${workspace.root}/endf_dir"}, + nuclear={"isotopes": [{"isotope": "Ta-181"}]}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + custom_endf_cache_dir = tmp_path / "custom_endf_cache_dir" + outputs = config.ensure_endf_cache(endf_cache_dir=custom_endf_cache_dir, update_config=False) + + assert outputs == [custom_endf_cache_dir / "Ta-181.endf"] + assert set_config_calls["count"] == 0 + + def test_create_routine_dirs_creates_fit_and_fit_results_dirs(self, tmp_path): + """create_routine_dirs should create timestamped routine dirs and fit_results_dir.""" + config = PleiadesConfig( + workspace={ + "root": tmp_path, + "fitting_dir": "${workspace.root}/fitting_dir", + "results_dir": "${workspace.root}/results_dir", + }, + fit_routines={ + "fit_1": {"dataset_id": "dataset_1"}, + "fit_2": {"dataset_id": "dataset_2"}, + }, + ) + + timestamp = "20260101T000000Z" + created = config.create_routine_dirs(timestamp=timestamp) + + assert len(created) == 2 + routine_ids = {entry["routine_id"] for entry in created} + assert routine_ids == {f"fit_1_{timestamp}", f"fit_2_{timestamp}"} + for entry in created: + assert entry["fit_dir"].exists() + assert entry["fit_dir"].is_dir() + assert entry["fit_results_dir"].exists() + assert entry["fit_results_dir"].is_dir() + + assert config.workspace is not None + assert config.workspace.results_dir is not None + assert config.workspace.results_dir.exists() + + def test_create_routine_dirs_requires_fitting_dir(self, tmp_path): + """create_routine_dirs should fail when workspace.fitting_dir is not configured.""" + config = PleiadesConfig( + workspace={"root": tmp_path}, + fit_routines={"fit_1": {"dataset_id": "dataset_1"}}, + ) + + with pytest.raises(ValueError, match="workspace.fitting_dir is required"): + config.create_routine_dirs() + + def test_create_routine_dirs_requires_fit_routines(self, tmp_path): + """create_routine_dirs should fail when no fit routines are available.""" + config = PleiadesConfig( + workspace={"root": tmp_path, "fitting_dir": "${workspace.root}/fitting_dir"}, + ) + + with pytest.raises(ValueError, match="No fit_routines defined"): + config.create_routine_dirs() + class TestGlobalConfigFunctions: """Test suite for global configuration functions."""