From 1625ec750ce6f4282142624b017a43bc94ace52a Mon Sep 17 00:00:00 2001 From: Roy Kid Date: Thu, 17 Feb 2022 19:12:47 +0800 Subject: [PATCH] magrate admp; update .gitignore; replace abnormal water1024.pdb --- .gitignore | 649 +++- dmff/admp/README.md | 68 + dmff/admp/admp/api.py | 515 +++ dmff/admp/admp/disp_pme.py | 363 ++ dmff/admp/admp/forcefield.py | 0 dmff/admp/admp/multipole.py | 202 ++ dmff/admp/admp/pairwise.py | 217 ++ dmff/admp/admp/parser.py | 477 +++ dmff/admp/admp/pme.py | 850 +++++ dmff/admp/admp/recip.py | 552 +++ dmff/admp/admp/settings.py | 30 + dmff/admp/admp/spatial.py | 179 + dmff/admp/examples/openmm_api/admp | 1 + dmff/admp/examples/openmm_api/dipole_1024 | 3072 ++++++++++++++++ dmff/admp/examples/openmm_api/forcefield.xml | 44 + dmff/admp/examples/openmm_api/ref_out | 3 + dmff/admp/examples/openmm_api/residues.xml | 6 + dmff/admp/examples/openmm_api/run.py | 48 + dmff/admp/examples/water_1024/mpidwater.xml | 46 + dmff/admp/examples/water_1024/ref_out | 6 + dmff/admp/examples/water_1024/run_admp.py | 140 + dmff/admp/examples/water_pol_1024/admp | 1 + dmff/admp/examples/water_pol_1024/dipole_1024 | 3072 ++++++++++++++++ dmff/admp/examples/water_pol_1024/dipole_2 | 6 + .../examples/water_pol_1024/mpidwater.xml | 46 + dmff/admp/examples/water_pol_1024/ref_out | 3073 +++++++++++++++++ dmff/admp/examples/water_pol_1024/run_admp.py | 146 + dmff/admp/tests/__init__.py | 0 dmff/admp/tests/conftest.py | 0 dmff/admp/tests/test_multipole.py | 189 + dmff/admp/tests/test_sptial.py | 143 + 31 files changed, 14139 insertions(+), 5 deletions(-) create mode 100644 dmff/admp/README.md create mode 100644 dmff/admp/admp/api.py create mode 100755 dmff/admp/admp/disp_pme.py create mode 100644 dmff/admp/admp/forcefield.py create mode 100644 dmff/admp/admp/multipole.py create mode 100755 dmff/admp/admp/pairwise.py create mode 100644 dmff/admp/admp/parser.py create mode 100755 dmff/admp/admp/pme.py create mode 100755 dmff/admp/admp/recip.py create mode 100644 dmff/admp/admp/settings.py create mode 100644 dmff/admp/admp/spatial.py create mode 120000 dmff/admp/examples/openmm_api/admp create mode 100644 dmff/admp/examples/openmm_api/dipole_1024 create mode 100644 dmff/admp/examples/openmm_api/forcefield.xml create mode 100644 dmff/admp/examples/openmm_api/ref_out create mode 100644 dmff/admp/examples/openmm_api/residues.xml create mode 100755 dmff/admp/examples/openmm_api/run.py create mode 100644 dmff/admp/examples/water_1024/mpidwater.xml create mode 100644 dmff/admp/examples/water_1024/ref_out create mode 100755 dmff/admp/examples/water_1024/run_admp.py create mode 120000 dmff/admp/examples/water_pol_1024/admp create mode 100644 dmff/admp/examples/water_pol_1024/dipole_1024 create mode 100644 dmff/admp/examples/water_pol_1024/dipole_2 create mode 100644 dmff/admp/examples/water_pol_1024/mpidwater.xml create mode 100644 dmff/admp/examples/water_pol_1024/ref_out create mode 100755 dmff/admp/examples/water_pol_1024/run_admp.py create mode 100644 dmff/admp/tests/__init__.py create mode 100644 dmff/admp/tests/conftest.py create mode 100644 dmff/admp/tests/test_multipole.py create mode 100644 dmff/admp/tests/test_sptial.py diff --git a/.gitignore b/.gitignore index 91aa94e85..7df232a6f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,197 @@ +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions -*.so # Distribution / packaging .Python @@ -20,7 +207,6 @@ parts/ sdist/ var/ wheels/ -pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg @@ -50,6 +236,7 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ +cover/ # Translations *.mo @@ -72,6 +259,7 @@ instance/ docs/_build/ # PyBuilder +.pybuilder/ target/ # Jupyter Notebook @@ -82,7 +270,9 @@ profile_default/ ipython_config.py # pyenv -.python-version +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -91,6 +281,13 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ @@ -128,5 +325,447 @@ dmypy.json # Pyre type checker .pyre/ -# gitkeep -.gitkeep +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# Support for Project snippet scope + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.iobj +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +*.code-workspace + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs + +# JetBrains Rider +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio diff --git a/dmff/admp/README.md b/dmff/admp/README.md new file mode 100644 index 000000000..9ca538f1a --- /dev/null +++ b/dmff/admp/README.md @@ -0,0 +1,68 @@ +# ADMP + +Automatic Differentiable Multipolar Polarizable (ADMP) force field calculator. + +This module provides an auto-differentiable implementation of multipolar polarizable force fields, that resembles the behavior of [MPID](https://github.com/andysim/MPIDOpenMMPlugin) plugin of OpenMM. Supposedly, this module is developed for the following purposes: + +1. Achieving an easy calculation of force and virial of the multipolar polarizable forcefield. +2. Allowing fluctuating (geometric-dependent) multipoles/polarizabilities in multipolar polarizable potentials. +3. Allowing the calculation of derivatives of various force field parameters, thus achieving a more systematic and automatic parameter optimization scheme. + +The module is based on [JAX](https://github.com/google/jax) and [JAX-MD](https://github.com/google/jax-md) projects. + + + +## Installation + +### Dependencies + +ADMP module depends on the following packages, install them before using ADMP: + +1. Install [jax](https://github.com/google/jax) (pick the correct cuda version, see more details on their installation guide): + + ```bash + pip install jax[cuda11_cudnn82] -f https://storage.googleapis.com/jax-releases/jax_releases.html + ``` + +2. Install [jax-md](https://github.com/google/jax-md) : + + ```bash + pip install jax-md --upgrade + ``` + + ADMP currently relies on the space and partition modules to provide neighbor list + +3. Install ADMP: + + ADMP is a pure python module, just simply put it in your $PYTHONPATH. + + ```bash + export PYTHONPATH=$PYTHONPATH:/path/to/admp + ``` + + + +## Settings + +In `admp/settings.py`, you can modify some global settings, including: + +**PRECISION**: single or double precision + +**DO_JIT**: whether do jit or not. + + + +## Example + +We provide a MPID 1024 water box example. In water_1024 and water_pol_1024, we show both the nonpolarizable and the polarizable cases. + +```bash +cd ./examples/water_1024 +./run_admp.py + +cd ./examples/water_pol_1024 +./run_admp.py +``` + +if `DO_JIT = True`, then the first run would be a bit slow, since it tries to do the jit compilation. Further executions of `get_forces` or `get_energy` should be much faster. + diff --git a/dmff/admp/admp/api.py b/dmff/admp/admp/api.py new file mode 100644 index 000000000..10a6e4ce8 --- /dev/null +++ b/dmff/admp/admp/api.py @@ -0,0 +1,515 @@ +#!/usr/bin/env python +import sys +import openmm +import openmm.app as app +import openmm.unit as unit +import numpy as np +import jax.numpy as jnp +from collections import defaultdict +from admp.disp_pme import ADMPDispPmeForce +from admp.multipole import convert_cart2harm, rot_local2global +from admp.pairwise import TT_damping_qq_c6_kernel, generate_pairwise_interaction +from admp.pme import ADMPPmeForce +from admp.spatial import generate_construct_local_frames +from admp.recip import Ck_1, generate_pme_recip +from jax_md import space, partition +from jax import grad +import linecache + + +def get_line_context(file_path, line_number): + return linecache.getline(file_path,line_number).strip() + + +def build_covalent_map(data, max_neighbor): + n_atoms = len(data.atoms) + covalent_map = np.zeros((n_atoms, n_atoms), dtype=int) + for bond in data.bonds: + covalent_map[bond.atom1, bond.atom2] = 1 + covalent_map[bond.atom2, bond.atom1] = 1 + for n_curr in range(1, max_neighbor): + for i in range(n_atoms): + # current neighbors + j_list = np.where( + np.logical_and(covalent_map[i] <= n_curr, covalent_map[i] > 0) + )[0] + for j in j_list: + k_list = np.where(covalent_map[j] == 1)[0] + for k in k_list: + if k != i and k not in j_list: + covalent_map[i, k] = n_curr + 1 + covalent_map[k, i] = n_curr + 1 + return covalent_map + + +def set_axis_type(map_atomtypes, types, params): + + ZThenX = 0 + Bisector = 1 + ZBisect = 2 + ThreeFold = 3 + Zonly = 4 + NoAxisType = 5 + LastAxisTypeIndex = 6 + kStrings = ["kz", "kx", "ky"] + axisIndices = [] + axisTypes = [] + + for i in map_atomtypes: + atomType = types[i] + + kIndices = [atomType] + + for kString in kStrings: + kString_value = params[kString][i] + if kString_value != "": + kIndices.append(kString_value) + axisIndices.append(kIndices) + + # set axis type + + kIndicesLen = len(kIndices) + + if kIndicesLen > 3: + ky = kIndices[3] + kyNegative = False + if ky.startswith("-"): + ky = kIndices[3] = ky[1:] + kyNegative = True + else: + ky = "" + + if kIndicesLen > 2: + kx = kIndices[2] + kxNegative = False + if kx.startswith("-"): + kx = kIndices[2] = kx[1:] + kxNegative = True + else: + kx = "" + + if kIndicesLen > 1: + kz = kIndices[1] + kzNegative = False + if kz.startswith("-"): + kz = kIndices[1] = kz[1:] + kzNegative = True + else: + kz = "" + + while len(kIndices) < 4: + kIndices.append("") + + axisType = ZThenX + if not kz: + axisType = NoAxisType + if kz and not kx: + axisType = Zonly + if kz and kzNegative or kx and kxNegative: + axisType = Bisector + if kx and kxNegative and ky and kyNegative: + axisType = ZBisect + if kz and kzNegative and kx and kxNegative and ky and kyNegative: + axisType = ThreeFold + + axisTypes.append(axisType) + + return np.array(axisTypes), np.array(axisIndices) + + +class ADMPDispGenerator: + def __init__(self, hamiltonian): + self.ff = hamiltonian + self.params = {"A": [], "B": [], "Q": [], "C6": [], "C8": [], "C10": []} + self._jaxPotential = None + self.types = [] + self.ethresh = 1.0e-5 + self.pmax = 10 + + def registerAtomType(self, atom): + self.types.append(atom["type"]) + self.params["A"].append(float(atom["A"])) + self.params["B"].append(float(atom["B"])) + self.params["Q"].append(float(atom["Q"])) + self.params["C6"].append(float(atom["C6"])) + self.params["C8"].append(float(atom["C8"])) + self.params["C10"].append(float(atom["C10"])) + + @staticmethod + def parseElement(element, hamiltonian): + generator = ADMPDispGenerator(hamiltonian) + hamiltonian.registerGenerator(generator) + # covalent scales + mScales = [] + for i in range(2, 7): + mScales.append(float(element.attrib["mScale1%d" % i])) + generator.params["mScales"] = mScales + for atomtype in element.findall("Atom"): + generator.registerAtomType(atomtype.attrib) + # jax it! + for k in generator.params.keys(): + generator.params[k] = jnp.array(generator.params[k]) + generator.types = np.array(generator.types) + + def createForce(self, system, data, nonbondedMethod, nonbondedCutoff, args): + + n_atoms = len(data.atoms) + # build index map + map_atomtype = np.zeros(n_atoms, dtype=int) + for i in range(n_atoms): + atype = data.atomType[data.atoms[i]] + map_atomtype[i] = np.where(self.types == atype)[0][0] + # build covalent map + covalent_map = build_covalent_map(data, 6) + + # here box is only used to setup ewald parameters, no need to be differentiable + a, b, c = system.getDefaultPeriodicBoxVectors() + box = jnp.array([a._value, b._value, c._value]) * 10 + # get the admp calculator + rc = nonbondedCutoff.value_in_unit(unit.angstrom) + + # get calculator + Force_DispPME = ADMPDispPmeForce(box, covalent_map, rc, self.ethresh, self.pmax) + # debugging + # Force_DispPME.update_env('kappa', 0.657065221219616) + # Force_DispPME.update_env('K1', 96) + # Force_DispPME.update_env('K2', 96) + # Force_DispPME.update_env('K3', 96) + pot_fn_lr = Force_DispPME.get_energy + pot_fn_sr = generate_pairwise_interaction( + TT_damping_qq_c6_kernel, covalent_map, static_args={} + ) + + def potential_fn(positions, box, pairs, params): + mScales = params["mScales"] + a_list = ( + params["A"][map_atomtype] / 2625.5 + ) # kj/mol to au, as expected by TT_damping kernel + b_list = params["B"][map_atomtype] * 0.0529177249 # nm^-1 to au + q_list = params["Q"][map_atomtype] + c6_list = jnp.sqrt(params["C6"][map_atomtype] * 1e6) + c8_list = jnp.sqrt(params["C8"][map_atomtype] * 1e8) + c10_list = jnp.sqrt(params["C10"][map_atomtype] * 1e10) + c_list = jnp.vstack((c6_list, c8_list, c10_list)) + + E_sr = pot_fn_sr( + positions, box, pairs, mScales, a_list, b_list, q_list, c_list[0] + ) + E_lr = pot_fn_lr(positions, box, pairs, c_list.T, mScales) + return E_sr - E_lr + + self._jaxPotential = potential_fn + # self._top_data = data + + def getJaxPotential(self): + return self._jaxPotential + + def renderXML(self): + # generate xml force field file + pass + + +# register all parsers +app.forcefield.parsers["ADMPDispForce"] = ADMPDispGenerator.parseElement + + +class ADMPPmeGenerator: + def __init__(self, hamiltonian): + self.ff = hamiltonian + self.kStrings = { + "kz": [], + "kx": [], + "ky": [], + } + self._input_params = { + "c0": [], + "dX": [], + "dY": [], + "dZ": [], + "qXX": [], + "qXY": [], + "qYY": [], + "qXZ": [], + "qYZ": [], + "qZZ": [], + "oXXX": [], + "oXXY": [], + "oXYY": [], + "oYYY": [], + "oXXZ": [], + "oXYZ": [], + "oYYZ": [], + "oXZZ": [], + "oYZZ": [], + "oZZZ": [], + "thole": [], + "polarizabilityXX": [], + "polarizabilityYY": [], + "polarizabilityZZ": [] + } + # if more or optional input params + # self._input_params = defaultDict(list) + self._jaxPotential = None + self.types = [] + self.ethresh = 1.0e-5 + self.params = {} + self.lpol = False + self.ref_dip = '' + + def registerAtomType(self, atom:dict): + + self.types.append(atom.pop("type")) + + kStrings = ["kz", "kx", "ky"] + for kString in kStrings: + if kString in atom: + self.kStrings[kString].append(atom.pop(kString)) + else: + self.kStrings[kString].append("") + + for k, v in atom.items(): + self._input_params[k].append(float(v)) + + @staticmethod + def parseElement(element, hamiltonian): + generator = ADMPPmeGenerator(hamiltonian) + generator.lmax = int(element.attrib.get('lmax')) + generator.pmax = int(element.attrib.get('pmax')) + + hamiltonian.registerGenerator(generator) + + mScales = [] + pScales = [] + dScales = [] + for i in range(2, 7): + mScales.append(float(element.attrib["mScale1%d" % i])) + pScales.append(float(element.attrib["pScale1%d" % i])) + dScales.append(float(element.attrib["dScale1%d" % i])) + generator.params["mScales"] = jnp.array(mScales) + generator.params["pScales"] = jnp.array(pScales) + generator.params["dScales"] = jnp.array(dScales) + + if element.findall('Polarize'): + generator.lpol = True + + for atomType in element.findall("Atom"): + atomAttrib = atomType.attrib + for polarInfo in element.findall("Polarize"): + polarAttrib = polarInfo.attrib + if polarInfo.attrib['type'] == atomAttrib['type']: + atomAttrib.update(polarAttrib) + break + generator.registerAtomType(atomAttrib) + + for k in generator._input_params.keys(): + generator._input_params[k] = jnp.array(generator._input_params[k]) + generator.types = np.array(generator.types) + + def createForce(self, system, data, nonbondedMethod, nonbondedCutoff, args): + + n_atoms = len(data.atoms) + # build index map + map_atomtype = np.zeros(n_atoms, dtype=int) + for i in range(n_atoms): + atype = data.atomType[data.atoms[i]] + map_atomtype[i] = np.where(self.types == atype)[0][0] + + # map atom multipole moments + p = self._input_params + Q = np.zeros((n_atoms, 10)) + Q[:, 0] = p["c0"][map_atomtype] + Q[:, 1] = p["dX"][map_atomtype] * 10 + Q[:, 2] = p["dY"][map_atomtype] * 10 + Q[:, 3] = p["dZ"][map_atomtype] * 10 + Q[:, 4] = p["qXX"][map_atomtype] * 300 + Q[:, 5] = p["qYY"][map_atomtype] * 300 + Q[:, 6] = p["qZZ"][map_atomtype] * 300 + Q[:, 7] = p["qXY"][map_atomtype] * 300 + Q[:, 8] = p["qXZ"][map_atomtype] * 300 + Q[:, 9] = p["qYZ"][map_atomtype] * 300 + + # map polarization-related params + pol = jnp.vstack((p['polarizabilityXX'][map_atomtype], p['polarizabilityYY'][map_atomtype], p['polarizabilityZZ'][map_atomtype])).T.astype(jnp.float32) + pol = 1000*jnp.mean(pol,axis=1) + self.params['pol'] = pol + + tholes = jnp.array(p['thole'][map_atomtype]).astype(jnp.float32) + tholes = jnp.mean(jnp.atleast_2d(tholes), axis=1) + self.params['tholes'] = tholes + + # defaultTholeWidth = 8 + Uind_global = jnp.zeros([n_atoms,3]) + ref_dip = self.ref_dip + for i in range(n_atoms): + a = get_line_context(ref_dip, i+1) + b = a.split() + t = np.array([10*float(b[0]),10*float(b[1]),10*float(b[2])]) + Uind_global = Uind_global.at[i].set(t) + + # construct the C list + c_list = np.zeros((3, n_atoms)) + a_list = np.zeros(n_atoms) + q_list = np.zeros(n_atoms) + b_list = np.zeros(n_atoms) + + + nmol=int(n_atoms/3) # WARNING: HARD CODE! + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + # dispersion coeff + c_list[0][a]=37.19677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + # q + q_list[a] = -0.741706 + q_list[b] = 0.370853 + q_list[c] = 0.370853 + # b, Bohr^-1 + b_list[a] = 2.00095977 + b_list[b] = 1.999519942 + b_list[c] = 1.999519942 + # a, Hartree + a_list[a] = 458.3777 + a_list[b] = 0.0317 + a_list[c] = 0.0317 + + # add all differentiable params to self.params + Q = jnp.array(Q) + Q_local = convert_cart2harm(Q, 2) + self.params["Q_local"] = Q_local + # here box is only used to setup ewald parameters, no need to be differentiable + a, b, c = system.getDefaultPeriodicBoxVectors() + box = jnp.array([a._value, b._value, c._value]) * 10 + + # get the admp calculator + rc = nonbondedCutoff.value_in_unit(unit.angstrom) + + # build covalent map + covalent_map = build_covalent_map(data, 6) + + # build intra-molecule axis + self.axis_types, self.axis_indices = set_axis_type( + map_atomtype, self.types, self.kStrings + ) + map_axis_indices = [] + # map axis_indices + for i in range(n_atoms): + catom = data.atoms[i] + residue = catom.residue._atoms + atom_indices = [ + index if index != "" else -1 for index in self.axis_indices[i][1:] + ] + for atom in residue: + if atom == catom: + continue + for i in range(len(atom_indices)): + if atom_indices[i] == data.atomType[atom]: + atom_indices[i] = atom.index + break + map_axis_indices.append(atom_indices) + + self.axis_indices = np.array(map_axis_indices) + + # Finish data preparation + # ------------------------------------------------------------------------------------- + # parameters should be ready: + # geometric variables: positions, box + # atomic parameters: Q_local, c_list + # topological parameters: covalent_map, mScales, pScales, dScales + # general force field setting parameters: rc, ethresh, lmax, pmax + + pme_force = ADMPPmeForce( + box, + self.axis_types, + self.axis_indices, + covalent_map, + rc, + self.ethresh, + self.lmax, + self.lpol + ) + self.params['U_ind'] = pme_force.U_ind + + + def potential_fn(positions, box, pairs, params): + + mScales = params["mScales"] + Q_local = params["Q_local"] + + + # positions, box, pairs, Q_local, mScales + if self.lpol: + pScales = params["pScales"] + dScales = params["dScales"] + U_ind = params["U_ind"] + return pme_force.get_energy(positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales, U_init=U_ind) + else: + return pme_force.get_energy(positions, box, pairs, Q_local, mScales) + + self._jaxPotential = potential_fn + + def getJaxPotential(self): + return self._jaxPotential + + def renderXML(self): + pass + + +app.forcefield.parsers["ADMPPmeForce"] = ADMPPmeGenerator.parseElement + + +class Hamiltonian(app.forcefield.ForceField): + def __init__(self, xmlname): + super().__init__(xmlname) + self._potentials = [] + + def createPotential( + self, + topology, + nonbondedMethod=app.NoCutoff, + nonbondedCutoff=1.0 * unit.nanometer, + ): + system = self.createSystem( + topology, nonbondedMethod=nonbondedMethod, nonbondedCutoff=nonbondedCutoff + ) + # load_constraints_from_system_if_needed + # create potentials + for generator in self._forces: + potentialImpl = generator.getJaxPotential() + self._potentials.append(potentialImpl) + return [p for p in self._potentials] + + +if __name__ == "__main__": + H = Hamiltonian("forcefield.xml") + generator = H.getGenerators()[0] + app.Topology.loadBondDefinitions("residues.xml") + pdb = app.PDBFile("../water1024.pdb") + rc = 4.0 + potentials = H.createPotential(pdb.topology, nonbondedCutoff=rc * unit.angstrom) + pot_disp = potentials[0] + + positions = jnp.array(pdb.positions._value) * 10 + a, b, c = pdb.topology.getPeriodicBoxVectors() + box = jnp.array([a._value, b._value, c._value]) * 10 + + # neighbor list + displacement_fn, shift_fn = space.periodic_general( + box, fractional_coordinates=False + ) + neighbor_list_fn = partition.neighbor_list( + displacement_fn, box, rc, 0, format=partition.OrderedSparse + ) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + param_grad = grad(pot_disp, argnums=3)(positions, box, pairs, generator.params) + print(param_grad) diff --git a/dmff/admp/admp/disp_pme.py b/dmff/admp/admp/disp_pme.py new file mode 100755 index 000000000..0704d21dd --- /dev/null +++ b/dmff/admp/admp/disp_pme.py @@ -0,0 +1,363 @@ +#!/usr/bin/env python +import jax +import jax.numpy as jnp +from jax import vmap, value_and_grad +import admp.settings +from admp.settings import DO_JIT, jit_condition +from admp.spatial import pbc_shift, v_pbc_shift +from admp.pme import setup_ewald_parameters +from admp.recip import generate_pme_recip, Ck_6, Ck_8, Ck_10 +from admp.pairwise import distribute_scalar, distribute_v3, distribute_dispcoeff +from functools import partial + +# debug +# from jax_md import partition, space +# from admp.parser import * +# from admp.multipole import * +# from jax import grad, value_and_grad +# from admp.pme import * + +class ADMPDispPmeForce: + ''' + This is a convenient wrapper for dispersion PME calculations + It wrapps all the environment parameters of multipolar PME calculation + The so called "environment paramters" means parameters that do not need to be differentiable + ''' + + def __init__(self, box, covalent_map, rc, ethresh, pmax): + self.covalent_map = covalent_map + self.rc = rc + self.ethresh = ethresh + self.pmax = pmax + # Need a different function for dispersion ??? Need tests + kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + self.kappa = kappa + self.K1 = K1 + self.K2 = K2 + self.K3 = K3 + self.pme_order = 6 + # setup calculators + self.refresh_calculators() + return + + + def generate_get_energy(self): + def get_energy(positions, box, pairs, c_list, mScales): + return energy_disp_pme(positions, box, pairs, + c_list, mScales, self.covalent_map, + self.kappa, self.K1, self.K2, self.K3, self.pmax, + self.d6_recip, self.d8_recip, self.d10_recip) + return get_energy + + + def update_env(self, attr, val): + ''' + Update the environment of the calculator + ''' + setattr(self, attr, val) + self.refresh_calculators() + + + def refresh_calculators(self): + ''' + refresh the energy and force calculator according to the current environment + ''' + self.d6_recip = generate_pme_recip(Ck_6, self.kappa, True, self.pme_order, self.K1, self.K2, self.K3, 0) + if self.pmax >= 8: + self.d8_recip = generate_pme_recip(Ck_8, self.kappa, True, self.pme_order, self.K1, self.K2, self.K3, 0) + else: + self.d8_recip = None + if self.pmax >= 10: + self.d10_recip = generate_pme_recip(Ck_10, self.kappa, True, self.pme_order, self.K1, self.K2, self.K3, 0) + else: + self.d10_recip = None + # create the energy calculator according to PME environment + self.get_energy = self.generate_get_energy() + self.get_forces = value_and_grad(self.get_energy) + return + + +def energy_disp_pme(positions, box, pairs, + c_list, mScales, covalent_map, + kappa, K1, K2, K3, pmax, + recip_fn6, recip_fn8, recip_fn10): + ''' + Top level wrapper for dispersion pme + + Input: + positions: + Na * 3: positions + box: + 3 * 3: box, axes arranged in row + pairs: + Np * 2: interacting pair indices + c_list: + Na * (pmax-4)/2: atomic dispersion coefficients + mScales: + (Nexcl,): permanent multipole-multipole interaction exclusion scalings: 1-2, 1-3 ... + covalent_map: + Na * Na: topological distances between atoms, if i, j are topologically distant, then covalent_map[i, j] == 0 + disp_pme_recip_fn: + function: the reciprocal calculator, see recip.py + kappa: + float: kappa in A^-1 + K1, K2, K3: + int: max K for reciprocal calculations + pmax: + int array: maximal exponents (p) to compute, e.g., (6, 8, 10) + + Output: + energy: total dispersion pme energy + ''' + + ene_real = disp_pme_real(positions, box, pairs, c_list, mScales, covalent_map, kappa, pmax) + + ene_recip = recip_fn6(positions, box, c_list[:, 0, jnp.newaxis]) + if pmax >= 8: + ene_recip += recip_fn8(positions, box, c_list[:, 1, jnp.newaxis]) + if pmax >= 10: + ene_recip += recip_fn10(positions, box, c_list[:, 2, jnp.newaxis]) + + ene_self = disp_pme_self(c_list, kappa, pmax) + + return ene_real + ene_recip + ene_self + + +def disp_pme_real(positions, box, pairs, + c_list, + mScales, covalent_map, + kappa, pmax): + ''' + This function calculates the dispersion real space energy + It expands the atomic parameters to pairwise parameters + + Input: + positions: + Na * 3: positions + box: + 3 * 3: box, axes arranged in row + pairs: + Np * 2: interacting pair indices + c_list: + Na * (pmax-4)/2: atomic dispersion coefficients + mScales: + (Nexcl,): permanent multipole-multipole interaction exclusion scalings: 1-2, 1-3 ... + covalent_map: + Na * Na: topological distances between atoms, if i, j are topologically distant, then covalent_map[i, j] == 0 + kappa: + float: kappa in A^-1 + pmax: + int array: maximal exponents (p) to compute, e.g., (6, 8, 10) + + Output: + ene: dispersion pme realspace energy + ''' + + # expand pairwise parameters + pairs = pairs[pairs[:, 0] < pairs[:, 1]] + + box_inv = jnp.linalg.inv(box) + + ri = distribute_v3(positions, pairs[:, 0]) + rj = distribute_v3(positions, pairs[:, 1]) + # ri = positions[pairs[:, 0]] + # rj = positions[pairs[:, 1]] + nbonds = covalent_map[pairs[:, 0], pairs[:, 1]] + mscales = distribute_scalar(mScales, nbonds-1) + # mscales = mScales[nbonds-1] + + ci = distribute_dispcoeff(c_list, pairs[:, 0]) + cj = distribute_dispcoeff(c_list, pairs[:, 1]) + # ci = c_list[pairs[:, 0], :] + # cj = c_list[pairs[:, 1], :] + + ene_real = jnp.sum(disp_pme_real_kernel(ri, rj, ci, cj, box, box_inv, mscales, kappa, pmax)) + + return jnp.sum(ene_real) + + +@partial(vmap, in_axes=(0, 0, 0, 0, None, None, 0, None, None), out_axes=(0)) +@jit_condition(static_argnums=(8)) +def disp_pme_real_kernel(ri, rj, ci, cj, box, box_inv, mscales, kappa, pmax): + ''' + The kernel to calculate the realspace dispersion energy + + Inputs: + ri: + Np * 3: position i + rj: + Np * 3: position j + ci: + Np * (pmax-4)/2: dispersion coeffs of i, c6, c8, c10 etc + cj: + Np * (pmax-4)/2: dispersion coeffs of j, c6, c8, c10 etc + kappa: + float: kappa + pmax: + int: largest p in 1/r^p, assume starting from 6 with increment of 2 + + Output: + energy: + float: the dispersion pme energy + ''' + dr = ri - rj + dr = pbc_shift(dr, box, box_inv) + dr2 = jnp.dot(dr, dr) + x2 = kappa * kappa * dr2 + g = g_p(x2, pmax) + dr6 = dr2 * dr2 * dr2 + ene = (mscales + g[0] - 1) * ci[0] * cj[0] / dr6 + if pmax >= 8: + dr8 = dr6 * dr2 + ene += (mscales + g[1] - 1) * ci[1] * cj[1] / dr8 + if pmax >= 10: + dr10 = dr8 * dr2 + ene += (mscales + g[2] - 1) * ci[2] * cj[2] / dr10 + return ene + + +def g_p(x2, pmax): + ''' + Compute the g(x, p) function + + Inputs: + x: + float: the input variable + pmax: + int: the maximal powers of dispersion, here we assume evenly spacing even powers starting from 6 + e.g., (6,), (6, 8) or (6, 8, 10) + + Outputs: + g: + (p-4)//2: g(x, p) + ''' + + x4 = x2 * x2 + x8 = x4 * x4 + exp_x2 = jnp.exp(-x2) + g6 = 1 + x2 + 0.5*x4 + if pmax >= 8: + g8 = g6 + x4*x2/6 + if pmax >= 10: + g10 = g8 + x8/24 + + if pmax == 6: + g = jnp.array([g6]) + elif pmax == 8: + g = jnp.array([g6, g8]) + elif pmax == 10: + g = jnp.array([g6, g8, g10]) + + return g * exp_x2 + + +@jit_condition(static_argnums=(2)) +def disp_pme_self(c_list, kappa, pmax): + ''' + This function calculates the dispersion self energy + + Inputs: + c_list: + Na * 3: dispersion susceptibilities C_6, C_8, C_10 + kappa: + float: kappa used in dispersion + + Output: + ene_self: + float: the self energy + ''' + E_6 = -kappa**6/12 * jnp.sum(c_list[:, 0]**2) + if pmax >= 8: + E_8 = -kappa**8/48 * jnp.sum(c_list[:, 1]**2) + if pmax >= 10: + E_10 = -kappa**10/240 * jnp.sum(c_list[:, 2]**2) + E = E_6 + if pmax >= 8: + E += E_8 + if pmax >= 10: + E += E_10 + return E + + +def validation(pdb): + xml = 'mpidwater.xml' + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + mScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + pScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + dScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + covalent_map = assemble_covalent(residueDicts, n_atoms) + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + pmax = 10 + kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + kappa = 0.657065221219616 + + # construct the C list + c_list = np.zeros((3,n_atoms)) + nmol=int(n_atoms/3) + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + c_list[0][a]=37.19677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + c_list = jnp.array(c_list.T) + + + # Finish data preparation + # ------------------------------------------------------------------------------------- + # pme_order = 6 + # d6_recip = generate_pme_recip(Ck_6, kappa, True, pme_order, K1, K2, K3, 0) + # d8_recip = generate_pme_recip(Ck_8, kappa, True, pme_order, K1, K2, K3, 0) + # d10_recip = generate_pme_recip(Ck_10, kappa, True, pme_order, K1, K2, K3, 0) + # disp_pme_recip_fns = [d6_recip, d8_recip, d10_recip] + # energy_force_disp_pme = value_and_grad(energy_disp_pme) + # e, f = energy_force_disp_pme(positions, box, pairs, c_list, mScales, covalent_map, kappa, K1, K2, K3, pmax, *disp_pme_recip_fns) + # print('ok') + # e, f = energy_force_disp_pme(positions, box, pairs, c_list, mScales, covalent_map, kappa, K1, K2, K3, pmax, *disp_pme_recip_fns) + # print(e) + + disp_pme_force = ADMPDispPmeForce(box, covalent_map, rc, ethresh, pmax) + disp_pme_force.update_env('kappa', 0.657065221219616) + + print(c_list[:4]) + E, F = disp_pme_force.get_forces(positions, box, pairs, c_list, mScales) + print('ok') + E, F = disp_pme_force.get_forces(positions, box, pairs, c_list, mScales) + print(E) + return + + +# below is the validation code +if __name__ == '__main__': + validation(sys.argv[1]) diff --git a/dmff/admp/admp/forcefield.py b/dmff/admp/admp/forcefield.py new file mode 100644 index 000000000..e69de29bb diff --git a/dmff/admp/admp/multipole.py b/dmff/admp/admp/multipole.py new file mode 100644 index 000000000..cb0922045 --- /dev/null +++ b/dmff/admp/admp/multipole.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python +import sys +import numpy as np +import jax.numpy as jnp +from jax import vmap +import admp.settings +from admp.settings import DO_JIT, jit_condition +from functools import partial + +# This module deals with the transformations and rotations of multipoles + + +# The important conversion matrices used in multipoles +rt3 = 1.73205080757 +inv_rt3 = 1.0/rt3 +# the dipole conversion matrices, cart2harm and harm2cart +C1_h2c = jnp.array([[0, 1, 0], + [0, 0, 1], + [1, 0, 0]]) +C1_c2h = C1_h2c.T +# the quadrupole conversion matrices +C2_c2h = jnp.array([[ 0, 0, 1, 0, 0, 0], + [ 0, 0, 0, 0, 2*inv_rt3, 0], + [ 0, 0, 0, 0, 0, 2*inv_rt3], + [inv_rt3, -inv_rt3, 0, 0, 0, 0], + [ 0, 0, 0, 2*inv_rt3, 0, 0]]) + +C2_h2c = jnp.array([[-0.5, 0, 0, rt3/2, 0], + [-0.5, 0, 0, -rt3/2, 0], + [ 1, 0, 0, 0, 0], + [ 0, 0, 0, 0, rt3/2], + [ 0, rt3/2, 0, 0, 0], + [ 0, 0, rt3/2, 0, 0]]) + + +@partial(vmap, in_axes=(0, None), out_axes=0) +@jit_condition(static_argnums=(1)) +def convert_cart2harm(Theta, lmax): + ''' + Convert the multipole moments in cartesian repr to spherical harmonic repr + Essentially, implementing the equations in Appendix E in Anthony's book + + Inputs: + Theta: + n * N_cart: stores the cartesian multipoles of each site + lmax: + integer, the maximum L, currently only supports up to quadrupole + + Outputs: + Q: + n * (l+1)^2, stores the spherical multipoles + ''' + if lmax > 2: + sys.exit('l > 2 (beyond quadrupole) not supported') + + # n_sites = Theta.shape[0] + n_harm = (lmax + 1)**2 + # Q = jnp.zeros((n_sites, n_harm)) + Q_mono = Theta[0:1] + + # dipole + if lmax >= 1: + dipoles_cart = Theta[1:4].T + Q_dip = C1_c2h.dot(dipoles_cart).T + # quadrupole + if lmax >= 2: + quad_cart = Theta[4:10].T + Q_quad = C2_c2h.dot(quad_cart).T + + if lmax == 0: + Q = Q_mono + elif lmax == 1: + Q = jnp.hstack([Q_mono, Q_dip]) + else: + Q = jnp.hstack([Q_mono, Q_dip, Q_quad]) + + return Q + + +@partial(vmap, in_axes=(0, 0), out_axes=0) +@jit_condition(static_argnums=()) +def rot_ind_global2local(U_g, localframes): + ''' + A special rotation function for just dipoles, aim for applying on induced dipoles + ''' + zxy = jnp.array([2,0,1]) + R1 = localframes[zxy][:,zxy] + U_l = jnp.dot(R1, U_g) + return U_l + + +@partial(vmap, in_axes=(0, 0, None), out_axes=0) +@jit_condition(static_argnums=(2)) +def rot_global2local(Q_gh, localframes, lmax=2): + ''' + This function rotates harmonic moments Q from global frame to local frame + + Input: + Q_gh: + n * (l+1)^2, stores the global harmonic multipole moments of each site + localframes: + n * 3 * 3, stores the Rotation matrix for each site, the R is defined as: + [r1, r2, r3]^T, with r1, r2, r3 being the local frame axes + lmax: + integer, the maximum multipole order + + Output: + Q_lh: + n * (l+1)^2, stores the local harmonic multipole moments + ''' + if lmax > 2: + raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + + # monopole + Q_lh_0 = Q_gh[0:1] + # for dipole + if lmax >= 1: + zxy = jnp.array([2,0,1]) + # the rotation matrix + R1 = localframes[zxy][:,zxy] + # rotate + Q_lh_1 = jnp.dot(R1, Q_gh[1:4]) + if lmax >= 2: + xx = localframes[0, 0] + xy = localframes[0, 1] + xz = localframes[0, 2] + yx = localframes[1, 0] + yy = localframes[1, 1] + yz = localframes[1, 2] + zx = localframes[2, 0] + zy = localframes[2, 1] + zz = localframes[2, 2] + quadrupoles = Q_gh[4:9] + # construct the local->global transformation matrix + # this is copied directly from the convert_mom_to_xml.py code + C2_gl_00 = (3*zz**2-1)/2 + C2_gl_01 = rt3*zx*zz + C2_gl_02 = rt3*zy*zz + C2_gl_03 = (rt3*(-2*zy**2-zz**2+1))/2 + C2_gl_04 = rt3*zx*zy + C2_gl_10 = rt3*xz*zz + C2_gl_11 = 2*xx*zz-yy + C2_gl_12 = yx+2*xy*zz + C2_gl_13 = -2*xy*zy-xz*zz + C2_gl_14 = xx*zy+zx*xy + C2_gl_20 = rt3*yz*zz + C2_gl_21 = 2*yx*zz+xy + C2_gl_22 = -xx+2*yy*zz + C2_gl_23 = -2*yy*zy-yz*zz + C2_gl_24 = yx*zy+zx*yy + C2_gl_30 = rt3*(-2*yz**2-zz**2+1)/2 + C2_gl_31 = -2*yx*yz-zx*zz + C2_gl_32 = -2*yy*yz-zy*zz + C2_gl_33 = (4*yy**2+2*zy**2+2*yz**2+zz**2-3)/2 + C2_gl_34 = -2*yx*yy-zx*zy + C2_gl_40 = rt3*xz*yz + C2_gl_41 = xx*yz+yx*xz + C2_gl_42 = xy*yz+yy*xz + C2_gl_43 = -2*xy*yy-xz*yz + C2_gl_44 = xx*yy+yx*xy + # rotate + C2_gl = jnp.array( + [ + [C2_gl_00, C2_gl_10, C2_gl_20, C2_gl_30, C2_gl_40], + [C2_gl_01, C2_gl_11, C2_gl_21, C2_gl_31, C2_gl_41], + [C2_gl_02, C2_gl_12, C2_gl_22, C2_gl_32, C2_gl_42], + [C2_gl_03, C2_gl_13, C2_gl_23, C2_gl_33, C2_gl_43], + [C2_gl_04, C2_gl_14, C2_gl_24, C2_gl_34, C2_gl_44] + ] + ).swapaxes(0,1) + Q_lh_2 = jnp.einsum('jk,k->j', C2_gl, quadrupoles) + if lmax == 0: + Q_lh = Q_lh_0 + elif lmax == 1: + Q_lh = jnp.hstack([Q_lh_0, Q_lh_1]) + elif lmax == 2: + Q_lh = jnp.hstack([Q_lh_0, Q_lh_1, Q_lh_2]) + + return Q_lh + + +# @jit_condition(static_argnums=(2)) +def rot_local2global(Q_lh, localframes, lmax=2): + ''' + This function rotates harmonic moments Q from global frame to local frame + Simply use the rot_global2local, and localframe^-1 + + Input: + Q_lh: + n * (l+1)^2, stores the local harmonic multipole moments of each site + localframes: + n * 3 * 3, stores the Rotation matrix for each site, the R is defined as: + [r1, r2, r3]^T, with r1, r2, r3 being the local frame axes + lmax: + integer, the maximum multipole order + + Output: + Q_gh: + n * (l+1)^2, stores the rotated global harmonic multipole moments + ''' + return rot_global2local(Q_lh, jnp.swapaxes(localframes, -2, -1), lmax) + diff --git a/dmff/admp/admp/pairwise.py b/dmff/admp/admp/pairwise.py new file mode 100755 index 000000000..349e1d19a --- /dev/null +++ b/dmff/admp/admp/pairwise.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python +import sys +import jax +from jax import vmap +import jax.numpy as jnp +import admp.settings +from admp.settings import DO_JIT, jit_condition +from admp.spatial import v_pbc_shift +from functools import partial + +# for debug +# from jax_md import partition, space +# from admp.parser import * +# from admp.multipole import * +# from jax import grad, value_and_grad +# from admp.pme import * + +# jitted and vmapped parameter distributors +# all three look identical, but they assume different input shapes +# you should use different functions for different inputs, to avoid recompiling +@partial(vmap, in_axes=(None, 0), out_axes=(0)) +@jit_condition(static_argnums=()) +def distribute_scalar(params, index): + return params[index] + + +@partial(vmap, in_axes=(None, 0), out_axes=(0)) +@jit_condition(static_argnums=()) +def distribute_v3(pos, index): + return pos[index] + + +@partial(vmap, in_axes=(None, 0), out_axes=(0)) +@jit_condition(static_argnums=()) +def distribute_multipoles(multipoles, index): + return multipoles[index] + + +@partial(vmap, in_axes=(None, 0), out_axes=(0)) +@jit_condition(static_argnums=()) +def distribute_dispcoeff(c_list, index): + return c_list[index] + + +def generate_pairwise_interaction(pair_int_kernel, covalent_map, static_args): + ''' + This is a calculator generator for pairwise interaction + + Input: + pair_int_kernel: + function type (dr, m, p1i, p1j, p2i, p2j) -> energy : the vectorized kernel function, + dr is the distance, m is the topological scaling factor, p1i, p1j, p2i, p2j are pairwise parameters + + covalent_map: + Na * Na, int: the covalent_map matrix that marks the topological distances between atoms + + static_args: + dict: a dictionary that stores all static global parameters (such as lmax, kappa, etc) + + Output: + pair_int: + function type (positions, box, pairs, mScales, p1, p2, ...) -> energy + The pair interaction calculator. p1, p2 ... involved atomic parameters, the order should be consistent + with the order in kernel + ''' + + def pair_int(positions, box, pairs, mScales, *atomic_params): + pairs = pairs[pairs[:, 0] < pairs[:, 1]] + ri = distribute_v3(positions, pairs[:, 0]) + rj = distribute_v3(positions, pairs[:, 1]) + # ri = positions[pairs[:, 0]] + # rj = positions[pairs[:, 1]] + nbonds = covalent_map[pairs[:, 0], pairs[:, 1]] + mscales = distribute_scalar(mScales, nbonds-1) + # mscales = mScales[nbonds-1] + box_inv = jnp.linalg.inv(box) + dr = ri - rj + dr = v_pbc_shift(dr, box, box_inv) + dr = jnp.linalg.norm(dr, axis=1) + + pair_params = [] + for i, param in enumerate(atomic_params): + pair_params.append(distribute_scalar(param, pairs[:, 0])) + pair_params.append(distribute_scalar(param, pairs[:, 1])) + # pair_params.append(param[pairs[:, 0]]) + # pair_params.append(param[pairs[:, 1]]) + + energy = jnp.sum(pair_int_kernel(dr, mscales, *pair_params)) + return energy + + return pair_int + + +@vmap +@jit_condition(static_argnums={}) +def TT_damping_qq_c6_kernel(dr, m, ai, aj, bi, bj, qi, qj, ci, cj): + a = jnp.sqrt(ai * aj) + b = jnp.sqrt(bi * bj) + c = ci * cj + q = qi * qj + r = dr * 1.889726878 # convert to bohr + br = b * r + br2 = br * br + br3 = br2 * br + br4 = br3 * br + br5 = br4 * br + br6 = br5 * br + exp_br = jnp.exp(-br) + f = 2625.5 * a * exp_br \ + + (-2625.5) * exp_br * (1+br) * q / br \ + + exp_br*(1+br+br2/2+br3/6+br4/24+br5/120+br6/720) * c / dr**6 + + return f * m + + +def validation(pdb): + xml = 'mpidwater.xml' + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + mScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + pScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + dScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + covalent_map = assemble_covalent(residueDicts, n_atoms) + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + pmax = 10 + kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + kappa = 0.657065221219616 + + # construct the C list + c_list = np.zeros((3, n_atoms)) + a_list = np.zeros(n_atoms) + q_list = np.zeros(n_atoms) + b_list = np.zeros(n_atoms) + nmol=int(n_atoms/3) + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + # dispersion coeff + c_list[0][a]=37.199677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + # q + q_list[a] = -0.741706 + q_list[b] = 0.370853 + q_list[c] = 0.370853 + # b, Bohr^-1 + b_list[a] = 2.00095977 + b_list[b] = 1.999519942 + b_list[c] = 1.999519942 + # a, Hartree + a_list[a] = 458.3777 + a_list[b] = 0.0317 + a_list[c] = 0.0317 + + + c_list = jnp.array(c_list) + +# @partial(vmap, in_axes=(0, 0, 0, 0), out_axes=(0)) +# @jit_condition(static_argnums=()) +# def disp6_pme_real_kernel(dr, m, ci, cj): +# # unpack static arguments +# kappa = static_args['kappa'] +# # calculate distance +# dr2 = dr ** 2 +# dr6 = dr2 ** 3 +# # do calculation +# x2 = kappa**2 * dr2 +# exp_x2 = jnp.exp(-x2) +# x4 = x2 * x2 +# g = (1 + x2 + 0.5*x4) * exp_x2 +# return (m + g - 1) * ci * cj / dr6 + +# static_args = {'kappa': kappa} +# disp6_pme_real = generate_pairwise_interaction(disp6_pme_real_kernel, covalent_map, static_args) +# print(disp6_pme_real(positions, box, pairs, mScales, c_list[0, :])) + + TT_damping_qq_c6 = generate_pairwise_interaction(TT_damping_qq_c6_kernel, covalent_map, static_args={}) + + TT_damping_qq_c6(positions, box, pairs, mScales, a_list, b_list, q_list, c_list[0]) + print('ok') + print(TT_damping_qq_c6(positions, box, pairs, mScales, a_list, b_list, q_list, c_list[0])) + return + + +# below is the validation code +if __name__ == '__main__': + validation(sys.argv[1]) diff --git a/dmff/admp/admp/parser.py b/dmff/admp/admp/parser.py new file mode 100644 index 000000000..771b262ee --- /dev/null +++ b/dmff/admp/admp/parser.py @@ -0,0 +1,477 @@ +from operator import index +from xml.dom import minidom +import numpy as np +import warnings +from collections import defaultdict + +def read_atom_line(line_full): + """ + Read atom line from pdb format + HETATM 1 H14 ORTE 0 6.301 0.693 1.919 1.00 0.00 H + + 1-6 7-11 13-16 17 18-20 22 23-26 27 28-30 31-38 39-46 47-54 55-60 61-66 67-72 73-76 77-78 79-80 + ATOM serial name altLoc resName chainID resSeq iCode _ x y z occupancy tempFactor _ segID element charge + """ + + line = line_full.rstrip("\n") + type_atm = line[0:6] + if type_atm == "ATOM " or type_atm == "HETATM": + + # Roy + serial = line[7:12].strip() + + name = line[12:16].strip() + + altLoc = line[16] + resName = line[17:21] + chainID = line[21] # Not used + + resSeq = int(line[22:26].split()[0]) # sequence identifier + iCode = line[26] # insertion code, not used + + # atomic coordinates + try: + coord = np.array( + [float(line[30:38]), float(line[38:46]), float(line[46:54])], + dtype=np.float64, + ) + except ValueError: + raise ValueError("Invalid or missing coordinate(s)") + + # occupancy & B factor + try: + occupancy = float(line[54:60]) + except ValueError: + occupancy = None # Rather than arbitrary zero or one + + if occupancy is not None and occupancy < 0: + warnings.warn("Negative occupancy in one or more atoms") + + try: + bfactor = float(line[60:66]) + except ValueError: + # The PDB use a default of zero if the data is missing + bfactor = 0.0 + + segid = line[72:76] # not used + element = line[76:78].strip().upper() + charge = line[79:81] + + else: + raise ValueError("Only ATOM and HETATM supported") + + return ( + type_atm, + serial, + name, + altLoc, + resName.strip(), + chainID, + resSeq, + iCode, + coord, + occupancy, + bfactor, + segid, + element, + charge, + ) + +def read_pdb(file): + """Read PDB files.""" + fileobj = open(file, 'r') + orig = np.identity(3) + trans = np.zeros(3) + serials = [] + names = [] + altLocs = [] + resNames = [] + chainIDs = [] + resSeqs = [] + iCodes = [] + positions = [] + occupancies = [] + tempFactors = [] + segId = [] + elements = [] + charges = [] + cell = None + pbc = None + cellpar = [] + conects = {} + # make sure that only one frame is read + continue_read_atoms_flag = True + # serial starts at 1 and we need to discard it and just keep align with positions + id = 0 + + for line in fileobj.readlines(): + if line.startswith('CRYST1'): + cellpar = [float(line[6:15]), # a + float(line[15:24]), # b + float(line[24:33]), # c + float(line[33:40]), # alpha + float(line[40:47]), # beta + float(line[47:54])] # gamma + + for c in range(3): + if line.startswith('ORIGX' + '123'[c]): + orig[c] = [float(line[10:20]), + float(line[20:30]), + float(line[30:40])] + trans[c] = float(line[45:55]) + + if ( + line.startswith("ATOM") + or line.startswith("HETATM") + and continue_read_atoms_flag + ): + # Atom name is arbitrary and does not necessarily + # contain the element symbol. The specification + # requires the element symbol to be in columns 77+78. + # Fall back to Atom name for files that do not follow + # the spec, e.g. packmol. + + # line_info = type_atm, serial, name, altLoc, resName, chainID, resSeq, iCode, coord, occupancy, tempFactor, segid, element, charge + line_info = read_atom_line(line) + + # serials.append(int(line_info[1])) + serials.append(id) + id += 1 + names.append(line_info[2]) + resNames.append(line_info[4]) + resSeqs.append(line_info[6]) + position = np.dot(orig, line_info[8]) + trans + positions.append(position) + if line_info[9] is not None: + occupancies.append(line_info[9]) + tempFactors.append(line_info[10]) + elements.append(line_info[-2]) + charges.append(line_info[-1] or 0) + + if line.startswith("END"): + # End of configuration reached + # According to the latest PDB file format (v3.30), + # this line should start with 'ENDMDL' (not 'END'), + # but in this way PDB trajectories from e.g. CP2K + # are supported (also VMD supports this format). + continue_read_atoms_flag = False + pass + + if line.startswith("CONECT"): + l = line.split() + center_atom_idx = int(l[1]) + bonded_atom_idx = [int(i) for i in l[2:]] + + conects[center_atom_idx] = bonded_atom_idx + fileobj.close() + + return {'serials': serials, + 'names': names, + 'resNames': resNames, + 'resSeqs': resSeqs, + 'positions': np.vstack(positions), + 'charges': charges, + 'connects': conects, + 'box': cellpar} + +def set_axis_type(atoms): + ZThenX = 0 + Bisector = 1 + ZBisect = 2 + ThreeFold = 3 + Zonly = 4 + NoAxisType = 5 + LastAxisTypeIndex = 6 + kStrings = ['kz', 'kx', 'ky'] + + for atom in atoms: + atomType = atom['type'] + kIndices = [atomType] + + for kString in kStrings: + + if kString in atom and atom[kString] != '': + kIndices.append(atom[kString]) + atom['axis_indices'] = kIndices + + # set axis type + + kIndicesLen = len(kIndices) + + if (kIndicesLen > 3): + ky = kIndices[3] + kyNegative = False + if ky.startswith('-'): + ky = kIndices[3] = ky[1:] + kyNegative = True + else: + ky = "" + + if (kIndicesLen > 2): + kx = kIndices[2] + kxNegative = False + if kx.startswith('-'): + kx = kIndices[2] = kx[1:] + kxNegative = True + else: + kx = "" + + if (kIndicesLen > 1): + kz = kIndices[1] + kzNegative = False + if kz.startswith('-'): + kz = kIndices[1] = kz[1:] + kzNegative = True + else: + kz = "" + + while(len(kIndices) < 4): + kIndices.append("") + + axisType = ZThenX + if (not kz): + axisType = NoAxisType + if (kz and not kx): + axisType = Zonly + if (kz and kzNegative or kx and kxNegative): + axisType = Bisector + if (kx and kxNegative and ky and kyNegative): + axisType = ZBisect + if (kz and kzNegative and kx and kxNegative and ky and kyNegative): + axisType = ThreeFold + + atom['axisType'] = axisType + + return atoms + +def read_xml(fileobj): + + fileobj = minidom.parse(fileobj) + + multipoles = fileobj.getElementsByTagName("Multipole") + + residueTemplates = [] + atomTemplates = [] + + for r in fileobj.getElementsByTagName('Residue'): + + resName = r.getAttribute("name") + residueTemplate = {'resName': resName, 'atoms': [], } + + + for a in r.getElementsByTagName('Atom'): + atomName = a.getAttribute('name') + atomType = a.getAttribute('type') + atomTemplate = {'name': atomName, 'type': atomType} + + residueTemplate['atoms'].append(atomTemplate) + atomTemplates.append(atomTemplate) + + topo = defaultdict(list) + for b in r.getElementsByTagName('Bond'): + + from_ = b.getAttribute('from') + to_ = b.getAttribute('to') + topo[from_].append(to_) + # topo[to_].append(from_) + + residueTemplate['topo'] = dict(topo) + residueTemplates.append(residueTemplate) + + for i, multipole in enumerate(multipoles): + + multiDict = { + "c0": float(multipole.getAttribute("c0")), + "dX": float(multipole.getAttribute("dX")), + "dY": float(multipole.getAttribute("dY")), + "dZ": float(multipole.getAttribute("dZ")), + "qXX": float(multipole.getAttribute("qXX")), + "qXY": float(multipole.getAttribute("qXY")), + "qYY": float(multipole.getAttribute("qYY")), + "qXZ": float(multipole.getAttribute("qXZ")), + "qYZ": float(multipole.getAttribute("qYZ")), + "qZZ": float(multipole.getAttribute("qZZ")), + "oXXX": float(multipole.getAttribute("oXXX")), + "oXXY": float(multipole.getAttribute("oXXY")), + "oXYY": float(multipole.getAttribute("oXYY")), + "oYYY": float(multipole.getAttribute("oYYY")), + "oXXZ": float(multipole.getAttribute("oXXZ")), + "oXYZ": float(multipole.getAttribute("oXYZ")), + "oYYZ": float(multipole.getAttribute("oYYZ")), + "oXZZ": float(multipole.getAttribute("oXZZ")), + "oYZZ": float(multipole.getAttribute("oYZZ")), + "oZZZ": float(multipole.getAttribute("oZZZ")), + "kx": multipole.getAttribute("kx"), + "kz": multipole.getAttribute("kz"), + "ky": multipole.getAttribute("ky") + } + + for template in atomTemplates: + if template['type'] == multipole.getAttribute("type"): + template.update(multiDict) + + + for p in fileobj.getElementsByTagName('Polarize'): + + pxx = p.getAttribute('polarizabilityXX') + pyy = p.getAttribute('polarizabilityYY') + pzz = p.getAttribute('polarizabilityZZ') + thole = p.getAttribute('thole') + polarDict = {'polarizabilityXX': pxx, 'polarizabilityYY': pyy, 'polarizabilityZZ':pzz, 'thole': thole} + + for template in atomTemplates: + if template['type'] == p.getAttribute('type'): + template.update(polarDict) + + set_axis_type(atomTemplates) + + return atomTemplates, residueTemplates + +class Atom: + + def __init__(self, serial, name, resName, resSeq, position, charge, ) -> None: + self.serial = serial + self.name = name + self.position = position + self.charge = charge + self.resName = resName + self.charge = charge + self.linkAtom = [] + self.resSeq = resSeq + + def __eq__(self, o): + return o.serial == self.serial + + def link(self, atom): + if atom not in self.linkAtom: + self.linkAtom.append(atom) + if self not in atom.linkAtom: + atom.linkAtom.append(self) + + def __repr__(self) -> str: + return f'< Atom{self.serial}: {self.name} >' + +class Residue: + + def __init__(self, resName, resSeq) -> None: + self.resName = resName + self.resSeq = resSeq + self.atoms = {} + self.topo = [] + self.covalent_map = {} + + def add(self, serial, atom): + self.atoms[serial] = atom + + def __next__(self): + return next(self.atoms) + + def __getitem__(self, name): + for atom in self.atoms.values(): + if atom.name == name: + return atom + + def __repr__(self) -> str: + return f'< Residue{self.resSeq}: {self.resName} >' + +def init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplates, residueTemplates): + + residueDicts = {} + atomDicts = {} + + for name, seq in zip(resNames, resSeqs): + if seq not in residueDicts: + residueDicts[seq] = Residue(name, seq) + + + # build up residue + for serial, name, resName, resSeq, position, charge in zip(serials, names, resNames, resSeqs, positions, charges): + + atom = Atom(serial, name, resName, resSeq, position, charge) + + for a in atomTemplates: + if name == a['name']: + for k, v in a.items(): + setattr(atom, k, v) + atomDicts[serial] = atom + + residueDicts[resSeq].add(atom.serial, atom) + + + # build up topo + for residue in residueDicts.values(): + + for residueTemplate in residueTemplates: + if residueTemplate['resName'] == residue.resName: + template = residueTemplate + + for c, p in template['topo'].items(): + ctemp = template['atoms'][int(c)] + catom = residue[ctemp['name']] + + for pp in p: + ptemp = template['atoms'][int(pp)] + patom = residue[ptemp['name']] + catom.link(patom) + + # build up axis indices + for residue in residueDicts.values(): + + for atom in residue.atoms.values(): + indices = [index if index != '' else -1 for index in atom.axis_indices[1: ]] + + for patom in residue.atoms.values(): + if patom.serial == atom.serial: + continue + for i in range(len(indices)): + if indices[i] == patom.type: + indices[i] = patom.serial + break + + atom.axis_indices = indices + + + # build up covalent map in residue + for i in residue.atoms.values(): + visited = [i.serial] + residue.covalent_map[i.serial] = {} + for j in i.linkAtom: + residue.covalent_map[i.serial][j.serial] = 1 + visited.append(j.serial) + for k in j.linkAtom: + if k.serial not in visited: + residue.covalent_map[i.serial][k.serial] = 2 + visited.append(k.serial) + else: + continue + for l in k.linkAtom: + if l.serial not in visited: + residue.covalent_map[i.serial][l.serial] = 3 + visited.append(l.serial) + else: + continue + for m in l.linkAtom: + if m.serial not in visited: + residue.covalent_map[i.serial][m.serial] = 4 + visited.append(m.serial) + else: + continue + + return atomDicts, residueDicts + +def assemble_covalent(residueDicts, natoms): + + covalents = [c.covalent_map for c in residueDicts.values()] + + covalent_map = np.zeros((natoms, natoms), dtype=int) + + for covalent in covalents: + + for c, p in covalent.items(): + + for pp, dr in p.items(): + + covalent_map[c][pp] = dr + + return covalent_map + \ No newline at end of file diff --git a/dmff/admp/admp/pme.py b/dmff/admp/admp/pme.py new file mode 100755 index 000000000..02caabdd6 --- /dev/null +++ b/dmff/admp/admp/pme.py @@ -0,0 +1,850 @@ +#!/usr/bin/env python +import sys +import numpy as np +import jax +import jax.numpy as jnp +from jax import grad, value_and_grad, vmap, jit +from jax.scipy.special import erf +import admp.settings +from admp.settings import DO_JIT, jit_condition, POL_CONV, MAX_N_POL +from admp.multipole import C1_c2h, convert_cart2harm +from admp.multipole import rot_ind_global2local, rot_global2local, rot_local2global +from admp.spatial import v_pbc_shift, generate_construct_local_frames, build_quasi_internal +from admp.pairwise import distribute_scalar, distribute_v3, distribute_multipoles +from functools import partial + +DIELECTRIC = 1389.35455846 +DEFAULT_THOLE_WIDTH = 0.3 + +from admp.recip import generate_pme_recip, Ck_1 + +# for debugging use only +# from jax_md import partition, space +# from admp.parser import * + +# from jax.config import config +# config.update("jax_enable_x64", True) + +# Functions that are related to electrostatic pme + +class ADMPPmeForce: + ''' + This is a convenient wrapper for multipolar PME calculations + It wrapps all the environment parameters of multipolar PME calculation + The so called "environment paramters" means parameters that do not need to be differentiable + ''' + + def __init__(self, box, axis_type, axis_indices, covalent_map, rc, ethresh, lmax, lpol=False): + self.axis_type = axis_type + self.axis_indices = axis_indices + self.rc = rc + self.ethresh = ethresh + self.lmax = int(lmax) # jichen: type checking + kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + self.kappa = kappa + self.K1 = K1 + self.K2 = K2 + self.K3 = K3 + self.pme_order = 6 + self.covalent_map = covalent_map + self.lpol = lpol + self.n_atoms = int(covalent_map.shape[0]) # len(axis_type) + + # setup calculators + self.refresh_calculators() + return + + + def generate_get_energy(self): + # if the force field is not polarizable + if not self.lpol: + def get_energy(positions, box, pairs, Q_local, mScales): + return energy_pme(positions, box, pairs, + Q_local, None, None, None, + mScales, None, None, self.covalent_map, + self.construct_local_frames, self.pme_recip, + self.kappa, self.K1, self.K2, self.K3, self.lmax, False) + return get_energy + else: + # this is the bare energy calculator, with Uind as explicit input + def energy_fn(positions, box, pairs, Q_local, Uind_global, pol, tholes, mScales, pScales, dScales): + return energy_pme(positions, box, pairs, + Q_local, Uind_global, pol, tholes, + mScales, pScales, dScales, self.covalent_map, + self.construct_local_frames, self.pme_recip, + self.kappa, self.K1, self.K2, self.K3, self.lmax, True) + self.energy_fn = energy_fn + self.grad_U_fn = grad(self.energy_fn, argnums=(4)) + self.grad_pos_fn = grad(self.energy_fn, argnums=(0)) + self.U_ind = jnp.zeros((self.n_atoms, 3)) + # this is the wrapper that include a Uind optimizer + def get_energy(positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales, U_init=self.U_ind): + self.U_ind, self.lconverg, self.n_cycle = self.optimize_Uind(positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales, U_init=U_init) + # here we rely on Feynman-Hellman theorem, drop the term dV/dU*dU/dr ! + # self.U_ind = jax.lax.stop_gradient(U_ind) + return self.energy_fn(positions, box, pairs, Q_local, self.U_ind, pol, tholes, mScales, pScales, dScales) + return get_energy + + + def update_env(self, attr, val): + ''' + Update the environment of the calculator + ''' + setattr(self, attr, val) + self.refresh_calculators() + + + def refresh_calculators(self): + ''' + refresh the energy and force calculators according to the current environment + ''' + if self.lmax > 0: + self.construct_local_frames = generate_construct_local_frames(self.axis_type, self.axis_indices) + else: + self.construct_local_frames = None + self.pme_recip = generate_pme_recip(Ck_1, self.kappa, False, self.pme_order, self.K1, self.K2, self.K3, self.lmax) + # generate the force calculator + self.get_energy = self.generate_get_energy() + self.get_forces = value_and_grad(self.get_energy) + return + + def optimize_Uind(self, positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales, U_init=None, maxiter=MAX_N_POL, thresh=POL_CONV): + ''' + This function converges the induced dipole + Note that we cut all the gradient chain passing through this function as we assume Feynman-Hellman theorem + Gradients related to Uind should be dropped + ''' + # Do not track gradient in Uind optimization + positions = jax.lax.stop_gradient(positions) + box = jax.lax.stop_gradient(box) + Q_local = jax.lax.stop_gradient(Q_local) + pol = jax.lax.stop_gradient(pol) + tholes = jax.lax.stop_gradient(tholes) + mScales = jax.lax.stop_gradient(mScales) + pScales = jax.lax.stop_gradient(pScales) + dScales = jax.lax.stop_gradient(dScales) + if U_init is None: + U = jnp.zeros((self.n_atoms, 3)) + else: + U = U_init + site_filter = (pol>0.001) # focus on the actual polarizable sites + + for i in range(maxiter): + field = self.grad_U_fn(positions, box, pairs, Q_local, U, pol, tholes, mScales, pScales, dScales) + E = self.energy_fn(positions, box, pairs, Q_local, U, pol, tholes, mScales, pScales, dScales) + # print(i, E, jnp.max(jnp.abs(field[site_filter]))) + if jnp.max(jnp.abs(field[site_filter])) < thresh: + break + U = U - field * pol[:, jnp.newaxis] / DIELECTRIC + if i == maxiter-1: + flag = False + else: # converged + flag = True + return U, flag, i + + +def setup_ewald_parameters(rc, ethresh, box): + ''' + Given the cutoff distance, and the required precision, determine the parameters used in + Ewald sum, including: kappa, K1, K2, and K3. + The algorithm is exactly the same as OpenMM, see: + http://docs.openmm.org/latest/userguide/theory.html + + Input: + rc: + float, the cutoff distance + ethresh: + float, required energy precision + box: + 3*3 matrix, box size, a, b, c arranged in rows + + Output: + kappa: + float, the attenuation factor + K1, K2, K3: + integers, sizes of the k-points mesh + ''' + kappa = jnp.sqrt(-jnp.log(2*ethresh))/rc + K1 = jnp.ceil(2 * kappa * box[0, 0] / 3 / ethresh**0.2) + K2 = jnp.ceil(2 * kappa * box[1, 1] / 3 / ethresh**0.2) + K3 = jnp.ceil(2 * kappa * box[2, 2] / 3 / ethresh**0.2) + + return kappa, int(K1), int(K2), int(K3) + + +# @jit_condition(static_argnums=()) +def energy_pme(positions, box, pairs, + Q_local, Uind_global, pol, tholes, + mScales, pScales, dScales, covalent_map, + construct_local_frame_fn, pme_recip_fn, kappa, K1, K2, K3, lmax, lpol): + ''' + This is the top-level wrapper for multipole PME + + Input: + positions: + Na * 3: positions + box: + 3 * 3: box + Q_local: + Na * (lmax+1)^2: harmonic multipoles of each site in local frame + Uind_global: + Na * 3: the induced dipole moment, in GLOBAL CARTESIAN! + pol: + (Na,) float: the polarizability of each site, unit in A**3 + tholes: + (Na,) float: the thole damping widths for each atom, it's dimensionless, default is 8 according to MPID paper + mScales, pScale, dScale: + (Nexcl,): multipole-multipole interaction exclusion scalings: 1-2, 1-3 ... + for permanent-permanent, permanent-induced, induced-induced interactions + pairs: + Np * 2: interacting pair indices + covalent_map: + Na * Na: topological distances between atoms, if i, j are topologically distant, then covalent_map[i, j] == 0 + construct_local_frame_fn: + function: local frame constructors, from generate_local_frame_constructor + pme_recip: + function: see recip.py, a reciprocal space calculator + kappa: + float: kappa in A^-1 + K1, K2, K3: + int: max K for reciprocal calculations + lmax: + int: maximum L + bool: + int: if polarizable or not? if yes, 1, otherwise 0 + + Output: + energy: total pme energy + ''' + # if doing a multipolar calculation + if lmax > 0: + local_frames = construct_local_frame_fn(positions, box) + Q_global = rot_local2global(Q_local, local_frames, lmax) + else: + if lpol: + # if fixed multipole only contains charge, and it's polarizable, then expand Q matrix + dips = jnp.zeros((Q_local.shape[0], 3)) + Q_global = jnp.hstack((Q_global, dips)) + lmax = 1 + else: + Q_global = Q_local + + # note we assume when lpol is True, lmax should be >= 1 + if lpol: + # convert Uind to global harmonics, in accord with Q_global + U_ind = C1_c2h.dot(Uind_global.T).T + Q_global_tot = Q_global.at[:, 1:4].add(U_ind) + else: + Q_global_tot = Q_global + + if lpol: + ene_real = pme_real(positions, box, pairs, Q_global, U_ind, pol, tholes, + mScales, pScales, dScales, covalent_map, kappa, lmax, True) + else: + ene_real = pme_real(positions, box, pairs, Q_global, None, None, None, + mScales, None, None, covalent_map, kappa, lmax, False) + + ene_recip = pme_recip_fn(positions, box, Q_global_tot) + + ene_self = pme_self(Q_global_tot, kappa, lmax) + + if lpol: + ene_self += pol_penalty(U_ind, pol) + + return ene_real + ene_recip + ene_self + + +# @partial(vmap, in_axes=(0, 0, None, None), out_axes=0) +@jit_condition(static_argnums=(3)) +def calc_e_perm(dr, mscales, kappa, lmax=2): + + ''' + This function calculates the ePermCoefs at once + ePermCoefs is basically the interaction tensor between permanent multipole components + Everything should be done in the so called quasi-internal (qi) frame + Energy = \sum_ij qiQI * ePermCoeff_ij * qiQJ + + Inputs: + dr: + float: distance between one pair of particles + mscales: + float: scaling factor between permanent - permanent multipole interactions, for each pair + kappa: + float: \kappa in PME, unit in A^-1 + lmax: + int: max L + + Output: + cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2: + n * 1 array: ePermCoefs + ''' + + # be aware of unit and dimension !! + rInv = 1 / dr + rInvVec = jnp.array([DIELECTRIC*(rInv**i) for i in range(0, 9)]) + alphaRVec = jnp.array([(kappa*dr)**i for i in range(0, 10)]) + X = 2 * jnp.exp(-alphaRVec[2]) / jnp.sqrt(np.pi) + tmp = jnp.array(alphaRVec[1]) + doubleFactorial = 1 + facCount = 1 + erfAlphaR = erf(alphaRVec[1]) + + # bVec = jnp.empty((6, len(erfAlphaR))) + bVec = jnp.empty(6) + + bVec = bVec.at[1].set(-erfAlphaR) + for i in range(2, 6): + bVec = bVec.at[i].set((bVec[i-1]+(tmp*X/doubleFactorial))) + facCount += 2 + doubleFactorial *= facCount + tmp *= 2 * alphaRVec[2] + + # C-C: 1 + cc = rInvVec[1] * (mscales + bVec[2] - alphaRVec[1]*X) + if lmax >= 1: + # C-D + cd = rInvVec[2] * (mscales + bVec[2]) + # D-D: 2 + dd_m0 = -2/3 * rInvVec[3] * (3*(mscales + bVec[3]) + alphaRVec[3]*X) + dd_m1 = rInvVec[3] * (mscales + bVec[3] - (2/3)*alphaRVec[3]*X) + else: + cd = 0 + dd_m0 = 0 + dd_m1 = 0 + + if lmax >= 2: + ## C-Q: 1 + cq = (mscales + bVec[3]) * rInvVec[3] + ## D-Q: 2 + dq_m0 = rInvVec[4] * (3* (mscales + bVec[3]) + (4/3) * alphaRVec[5]*X) + dq_m1 = -jnp.sqrt(3) * rInvVec[4] * (mscales + bVec[3]) + ## Q-Q + qq_m0 = rInvVec[5] * (6* (mscales + bVec[4]) + (4/45)* (-3 + 10*alphaRVec[2]) * alphaRVec[5]*X) + qq_m1 = - (4/15) * rInvVec[5] * (15*(mscales+bVec[4]) + alphaRVec[5]*X) + qq_m2 = rInvVec[5] * (mscales + bVec[4] - (4/15)*alphaRVec[5]*X) + else: + cq = 0 + dq_m0 = 0 + dq_m1 = 0 + qq_m0 = 0 + qq_m1 = 0 + qq_m1 = 0 + qq_m2 = 0 + + return cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2 + + +@jit_condition(static_argnums=()) +def switch_val(x, x0, sigma, y0, y1): + ''' + This is a Fermi function switches between y0 and y1, according to the value of x + y = y0 when x << x0 + y = y1 when x >> x1 + sigma control sthe switch width + ''' + u = (x-x0) / sigma + w0 = 1 / (jnp.exp(u) + 1) + w1 = 1 - w0 + return w0*y0 + w1*y1 + + +def gen_trim_val_0(thresh): + ''' + Trim the value at zero point to avoid singularity + ''' + def trim_val_0(x): + return jnp.piecewise(x, [x=thresh], [lambda x: jnp.array(thresh), lambda x: x]) + if DO_JIT: + return jit(trim_val_0) + else: + return trim_val_0 + +trim_val_0 = gen_trim_val_0(1e-8) + + +def gen_trim_val_infty(thresh): + ''' + Trime the value at infinity to avoid divergence + ''' + def trim_val_infty(x): + return jnp.piecewise(x, [x=thresh], [lambda x: x, lambda x: jnp.array(thresh)]) + if DO_JIT: + return jit(trim_val_infty) + else: + return trim_val_infty + +trim_val_infty = gen_trim_val_infty(1e8) + + +@jit_condition(static_argnums=(7)) +def calc_e_ind(dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax=2): + + ''' + This function calculates the eUindCoefs at once + ## compute the Thole damping factors for energies + eUindCoefs is basically the interaction tensor between permanent multipole components and induced dipoles + Everything should be done in the so called quasi-internal (qi) frame + + + Inputs: + dr: + float: distance between one pair of particles + dmp + float: damping factors between one pair of particles + mscales: + float: scaling factor between permanent - permanent multipole interactions, for each pair + pscales: + float: scaling factor between permanent - induced multipole interactions, for each pair + au: + float: for damping factors + kappa: + float: \kappa in PME, unit in A^-1 + lmax: + int: max L + + Output: + Interaction tensors components + ''' + ## switch function + + # a = 1/(jnp.exp((pscales-0.001)*10000)+1) * (thole1 + thole2) + 8/(jnp.exp((-pscales+0.01)*10000)+1) + a = switch_val(pscales, 1e-3, 1e-5, DEFAULT_THOLE_WIDTH, thole1+thole2) + + dmp = trim_val_0(dmp) + u = trim_val_infty(dr/dmp) + + ## au <= 50 aupi = au ;au> 50 aupi = 50 + au = a * u + expau = jnp.piecewise(au, [au<50, au>=50], [lambda au: jnp.exp(-au), lambda au: jnp.array(0)]) + + ## compute the Thole damping factors for energies + au2 = trim_val_infty(au*au) + au3 = trim_val_infty(au2*au) + au4 = trim_val_infty(au3*au) + au5 = trim_val_infty(au4*au) + au6 = trim_val_infty(au5*au) + + ## Thole damping factors for energies + thole_c = 1.0 - expau*(1.0 + au + 0.5*au2) + thole_d0 = 1.0 - expau*(1.0 + au + 0.5*au2 + au3/4.0) + thole_d1 = 1.0 - expau*(1.0 + au + 0.5*au2) + thole_q0 = 1.0 - expau*(1.0 + au + 0.5*au2 + au3/6.0 + au4/18.0) + thole_q1 = 1.0 - expau*(1.0 + au + 0.5*au2 + au3/6.0) + # copied from calc_e_perm + # be aware of unit and dimension !! + rInv = 1 / dr + rInvVec = jnp.array([DIELECTRIC*(rInv**i) for i in range(0, 9)]) + alphaRVec = jnp.array([(kappa*dr)**i for i in range(0, 10)]) + X = 2 * jnp.exp(-alphaRVec[2]) / jnp.sqrt(np.pi) + tmp = jnp.array(alphaRVec[1]) + doubleFactorial = 1 + facCount = 1 + erfAlphaR = erf(alphaRVec[1]) + + #bVec = jnp.empty((6, len(erfAlphaR))) + bVec = jnp.empty(6) + + bVec = bVec.at[1].set(-erfAlphaR) + for i in range(2, 6): + bVec = bVec.at[i].set((bVec[i-1]+(tmp*X/doubleFactorial))) + facCount += 2 + doubleFactorial *= facCount + tmp *= 2 * alphaRVec[2] + + ## C-Uind + cud = 2.0*rInvVec[2]*(pscales*thole_c + bVec[2]) + if lmax >= 1: + ## D-Uind terms + dud_m0 = -2.0*2.0/3.0*rInvVec[3]*(3.0*(pscales*thole_d0 + bVec[3]) + alphaRVec[3]*X) + dud_m1 = 2.0*rInvVec[3]*(pscales*thole_d1 + bVec[3] - 2.0/3.0*alphaRVec[3]*X) + else: + dud_m0 = 0.0 + dud_m1 = 0.0 + + if lmax >= 2: + ## Uind-Q + udq_m0 = 2.0*rInvVec[4]*(3.0*(pscales*thole_q0 + bVec[3]) + 4/3*alphaRVec[5]*X) + udq_m1 = -2.0*jnp.sqrt(3)*rInvVec[4]*(pscales*thole_q1 + bVec[3]) + else: + udq_m0 = 0.0 + udq_m1 = 0.0 + ## Uind-Uind + uscales = 1 + udud_m0 = -2.0/3.0*rInvVec[3]*(3.0*(uscales*thole_d0 + bVec[3]) + alphaRVec[3]*X) + udud_m1 = rInvVec[3]*(uscales*thole_d1 + bVec[3] - 2.0/3.0*alphaRVec[3]*X) + return cud, dud_m0, dud_m1, udq_m0, udq_m1, udud_m0, udud_m1 + + + +@partial(vmap, in_axes=(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, None, None, None), out_axes=0) +@jit_condition(static_argnums=(12, 13)) +def pme_real_kernel(dr, qiQI, qiQJ, qiUindI, qiUindJ, thole1, thole2, dmp, mscales, pscales, dscales, kappa, lmax=2, lpol=False): + ''' + This is the heavy-lifting kernel function to compute the realspace multipolar PME + Vectorized over interacting pairs + + Input: + dr: + float, the interatomic distances, (np) array if vectorized + qiQI: + [(lmax+1)^2] float array, the harmonic multipoles of site i in quasi-internal frame + qiQJ: + [(lmax+1)^2] float array, the harmonic multipoles of site j in quasi-internal frame + qiUindI + (3,) float array, the harmonic dipoles of site i in QI frame + qiUindJ + (3,) float array, the harmonic dipoles of site j in QI frame + thole1 + float: thole damping coeff of site i + thole2 + float: thole damping coeff of site j + dmp: + float: (pol1 * pol2)**1/6, distance rescaling params used in thole damping + mscale: + float, scaling factor between interacting sites (permanent-permanent) + pscale: + float, scaling factor between perm-ind interaction + dscale: + float, scaling factor between ind-ind interaction + kappa: + float, kappa in unit A^1 + lmax: + int, maximum angular momentum + lpol: + bool, doing polarization? + + Output: + energy: + float, realspace interaction energy between the sites + ''' + + cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2 = calc_e_perm(dr, mscales, kappa, lmax) + if lpol: + cud, dud_m0, dud_m1, udq_m0, udq_m1, udud_m0, udud_m1 = calc_e_ind(dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax) + + Vij0 = cc*qiQI[0] + Vji0 = cc*qiQJ[0] + # C-Uind + if lpol: + Vij0 -= cud * qiUindI[0] + Vji0 += cud * qiUindJ[0] + + if lmax >= 1: + # C-D + Vij0 = Vij0 - cd*qiQI[1] + Vji1 = -cd*qiQJ[0] + Vij1 = cd*qiQI[0] + Vji0 = Vji0 + cd*qiQJ[1] + # D-D m0 + Vij1 += dd_m0 * qiQI[1] + Vji1 += dd_m0 * qiQJ[1] + # D-D m1 + Vij2 = dd_m1*qiQI[2] + Vji2 = dd_m1*qiQJ[2] + Vij3 = dd_m1*qiQI[3] + Vji3 = dd_m1*qiQJ[3] + # D-Uind + if lpol: + Vij1 += dud_m0 * qiUindI[0] + Vji1 += dud_m0 * qiUindJ[0] + Vij2 += dud_m1 * qiUindI[1] + Vji2 += dud_m1 * qiUindJ[1] + Vij3 += dud_m1 * qiUindI[2] + Vji3 += dud_m1 * qiUindJ[2] + + if lmax >= 2: + # C-Q + Vij0 = Vij0 + cq*qiQI[4] + Vji4 = cq*qiQJ[0] + Vij4 = cq*qiQI[0] + Vji0 = Vji0 + cq*qiQJ[4] + # D-Q m0 + Vij1 += dq_m0*qiQI[4] + Vji4 += dq_m0*qiQJ[1] + # Q-D m0 + Vij4 -= dq_m0*qiQI[1] + Vji1 -= dq_m0*qiQJ[4] + # D-Q m1 + Vij2 = Vij2 + dq_m1*qiQI[5] + Vji5 = dq_m1*qiQJ[2] + Vij3 += dq_m1*qiQI[6] + Vji6 = dq_m1*qiQJ[3] + Vij5 = -(dq_m1*qiQI[2]) + Vji2 += -(dq_m1*qiQJ[5]) + Vij6 = -(dq_m1*qiQI[3]) + Vji3 += -(dq_m1*qiQJ[6]) + # Q-Q m0 + Vij4 += qq_m0*qiQI[4] + Vji4 += qq_m0*qiQJ[4] + # Q-Q m1 + Vij5 += qq_m1*qiQI[5] + Vji5 += qq_m1*qiQJ[5] + Vij6 += qq_m1*qiQI[6] + Vji6 += qq_m1*qiQJ[6] + # Q-Q m2 + Vij7 = qq_m2*qiQI[7] + Vji7 = qq_m2*qiQJ[7] + Vij8 = qq_m2*qiQI[8] + Vji8 = qq_m2*qiQJ[8] + # Q-Uind + if lpol: + Vji4 += udq_m0*qiUindJ[0] + Vij4 -= udq_m0*qiUindI[0] + Vji5 += udq_m1*qiUindJ[1] + Vji6 += udq_m1*qiUindJ[2] + Vij5 -= udq_m1*qiUindI[1] + Vij6 -= udq_m1*qiUindI[2] + + # Uind - Uind + if lpol: + Vij1dd = udud_m0 * qiUindI[0] + Vji1dd = udud_m0 * qiUindJ[0] + Vij2dd = udud_m1 * qiUindI[1] + Vji2dd = udud_m1 * qiUindJ[1] + Vij3dd = udud_m1 * qiUindI[2] + Vji3dd = udud_m1 * qiUindJ[2] + Vijdd = jnp.stack(( Vij1dd, Vij2dd, Vij3dd)) + Vjidd = jnp.stack(( Vji1dd, Vji2dd, Vji3dd)) + + if lmax == 0: + Vij = Vij0 + Vji = Vji0 + elif lmax == 1: + Vij = jnp.stack((Vij0, Vij1, Vij2, Vij3)) + Vji = jnp.stack((Vji0, Vji1, Vji2, Vji3)) + elif lmax == 2: + Vij = jnp.stack((Vij0, Vij1, Vij2, Vij3, Vij4, Vij5, Vij6, Vij7, Vij8)) + Vji = jnp.stack((Vji0, Vji1, Vji2, Vji3, Vji4, Vji5, Vji6, Vji7, Vji8)) + else: + print('Error: Lmax must <= 2') + + if lpol: + return jnp.array(0.5) * (jnp.sum(qiQJ*Vij) + jnp.sum(qiQI*Vji)) + jnp.array(0.5) * (jnp.sum(qiUindJ*Vijdd) + jnp.sum(qiUindI*Vjidd)) + else: + return jnp.array(0.5) * (jnp.sum(qiQJ*Vij) + jnp.sum(qiQI*Vji)) + + +# @jit_condition(static_argnums=(7)) +def pme_real(positions, box, pairs, + Q_global, Uind_global, pol, tholes, + mScales, pScales, dScales, covalent_map, + kappa, lmax, lpol): + ''' + This is the real space PME calculate function + NOTE: only deals with permanent-permanent multipole interactions + It expands the pairwise parameters, and then invoke pme_real_kernel + It seems pointless to jit it: + 1. the heavy-lifting kernel function is jitted and vmapped + 2. len(pairs) keeps changing throughout the simulation, the function would just recompile everytime + + Input: + positions: + Na * 3: positions + box: + 3 * 3: box, axes arranged in row + pairs: + Np * 2: interacting pair indices + Q_global: + Na * (l+1)**2: harmonics multipoles of each atom, in global frame + Uind_global: + Na * 3: harmonic induced dipoles, in global frame + pol: + (Na,): polarizabilities + tholes: + (Na,): thole damping parameters + mScales: + (Nexcl,): permanent multipole-multipole interaction exclusion scalings: 1-2, 1-3 ... + covalent_map: + Na * Na: topological distances between atoms, if i, j are topologically distant, then covalent_map[i, j] == 0 + kappa: + float: kappa in A^-1 + lmax: + int: maximum L + lpol: + Bool: whether do a polarizable calculation? + + Output: + ene: pme realspace energy + ''' + + # expand pairwise parameters, from atomic parameters + pairs = pairs[pairs[:, 0] < pairs[:, 1]] + box_inv = jnp.linalg.inv(box) + r1 = distribute_v3(positions, pairs[:, 0]) + r2 = distribute_v3(positions, pairs[:, 1]) + # r1 = positions[pairs[:, 0]] + # r2 = positions[pairs[:, 1]] + Q_extendi = distribute_multipoles(Q_global, pairs[:, 0]) + Q_extendj = distribute_multipoles(Q_global, pairs[:, 1]) + # Q_extendi = Q_global[pairs[:, 0]] + # Q_extendj = Q_global[pairs[:, 1]] + nbonds = covalent_map[pairs[:, 0], pairs[:, 1]] + indices = nbonds-1 + mscales = distribute_scalar(mScales, indices) + # mscales = mScales[nbonds-1] + if lpol: + pol1 = distribute_scalar(pol, pairs[:, 0]) + pol2 = distribute_scalar(pol, pairs[:, 1]) + thole1 = distribute_scalar(tholes, pairs[:, 0]) + thole2 = distribute_scalar(tholes, pairs[:, 1]) + Uind_extendi = distribute_v3(Uind_global, pairs[:, 0]) + Uind_extendj = distribute_v3(Uind_global, pairs[:, 1]) + pscales = distribute_scalar(pScales, indices) + dscales = distribute_scalar(dScales, indices) + # pol1 = pol[pairs[:,0]] + # pol2 = pol[pairs[:,1]] + # thole1 = tholes[pairs[:,0]] + # thole2 = tholes[pairs[:,1]] + # Uind_extendi = Uind_global[pairs[:, 0]] + # Uind_extendj = Uind_global[pairs[:, 1]] + # pscales = pScales[nbonds-1] + # dscales = dScales[nbonds-1] + dmp = get_pair_dmp(pol1, pol2) + else: + Uind_extendi = None + Uind_extendj = None + pscales = None + dscales = None + thole1 = None + thole2 = None + dmp = None + + # deals with geometries + dr = r1 - r2 + dr = v_pbc_shift(dr, box, box_inv) + norm_dr = jnp.linalg.norm(dr, axis=-1) + Ri = build_quasi_internal(r1, r2, dr, norm_dr) + qiQI = rot_global2local(Q_extendi, Ri, lmax) + qiQJ = rot_global2local(Q_extendj, Ri, lmax) + if lpol: + qiUindI = rot_ind_global2local(Uind_extendi, Ri) + qiUindJ = rot_ind_global2local(Uind_extendj, Ri) + else: + qiUindI = None + qiUindJ = None + + # everything should be pair-specific now + ene = jnp.sum(pme_real_kernel(norm_dr, qiQI, qiQJ, qiUindI, qiUindJ, thole1, thole2, dmp, mscales, pscales, dscales, kappa, lmax, lpol)) + + return ene + + +@partial(vmap, in_axes=(0, 0), out_axes=(0)) +@jit_condition(static_argnums=()) +def get_pair_dmp(pol1, pol2): + return (pol1*pol2) ** (1/6) + + +@jit_condition(static_argnums=(2)) +def pme_self(Q_h, kappa, lmax=2): + ''' + This function calculates the PME self energy + + Inputs: + Q: + Na * (lmax+1)^2: harmonic multipoles, local or global does not matter + kappa: + float: kappa used in PME + + Output: + ene_self: + float: the self energy + ''' + n_harms = (lmax + 1) ** 2 + l_list = np.array([0] + [1,]*3 + [2,]*5)[:n_harms] + l_fac2 = np.array([1] + [3,]*3 + [15,]*5)[:n_harms] + factor = kappa/np.sqrt(np.pi) * (2*kappa**2)**l_list / l_fac2 + return - jnp.sum(factor[np.newaxis] * Q_h**2) * DIELECTRIC + + +@jit_condition(static_argnums=()) +def pol_penalty(U_ind, pol): + ''' + The energy penalty for polarization of each site, currently only supports isotropic polarization: + + Inputs: + U_ind: + Na * 3 float: induced dipoles, in isotropic polarization case, cartesian or harmonic does not matter + pol: + (Na,) float: polarizability + ''' + # this is to remove the singularity when pol=0 + pol_pi = trim_val_0(pol) + # pol_pi = pol/(jnp.exp((-pol+1e-08)*1e10)+1) + 1e-08/(jnp.exp((pol-1e-08)*1e10)+1) + return jnp.sum(0.5/pol_pi*(U_ind**2).T) * DIELECTRIC + + +def validation(pdb): + xml = 'mpidwater.xml' + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + mScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + pScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + dScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + Q = np.vstack( + [(atom.c0, atom.dX*10, atom.dY*10, atom.dZ*10, atom.qXX*300, atom.qYY*300, atom.qZZ*300, atom.qXY*300, atom.qXZ*300, atom.qYZ*300) for atom in atomDicts.values()] + ) + Q = jnp.array(Q) + Q_local = convert_cart2harm(Q, 2) + axis_type = np.array( + [atom.axisType for atom in atomDicts.values()] + ) + axis_indices = np.vstack( + [atom.axis_indices for atom in atomDicts.values()] + ) + covalent_map = assemble_covalent(residueDicts, n_atoms) + + + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + # pairs = pairs[pairs[:, 0] < pairs[:, 1]] + + lmax = 2 + + + # Finish data preparation + # ------------------------------------------------------------------------------------- + # kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + # # for debugging + # kappa = 0.657065221219616 + # construct_local_frames_fn = generate_construct_local_frames(axis_type, axis_indices) + # energy_force_pme = value_and_grad(energy_pme) + # e, f = energy_force_pme(positions, box, pairs, Q_local, mScales, pScales, dScales, covalent_map, construct_local_frames_fn, kappa, K1, K2, K3, lmax) + # print('ok') + # e, f = energy_force_pme(positions, box, pairs, Q_local, mScales, pScales, dScales, covalent_map, construct_local_frames_fn, kappa, K1, K2, K3, lmax) + # print(e) + + pme_force = ADMPPmeForce(box, axis_type, axis_indices, covalent_map, rc, ethresh, lmax) + pme_force.update_env('kappa', 0.657065221219616) + + E, F = pme_force.get_forces(positions, box, pairs, Q_local, mScales) + print('ok') + E, F = pme_force.get_forces(positions, box, pairs, Q_local, mScales) + print(E) + return + + +# below is the validation code +if __name__ == '__main__': + validation(sys.argv[1]) diff --git a/dmff/admp/admp/recip.py b/dmff/admp/admp/recip.py new file mode 100755 index 000000000..e0265cfdd --- /dev/null +++ b/dmff/admp/admp/recip.py @@ -0,0 +1,552 @@ +#!/usr/bin/env python +import sys +import numpy as np +import jax.numpy as jnp +import jax.scipy as jsp +from jax import jit, grad, value_and_grad +import admp.settings +from admp.settings import DO_JIT, jit_condition +from admp.pme import DIELECTRIC + +# for debug +# from admp.parser import * +# from admp.multipole import * +# from admp.spatial import * +# from admp.pme import * +# from jax.config import config +# config.update("jax_enable_x64", True) + +sqrt_pi = 1.7724538509055159 + +def generate_pme_recip(Ck_fn, kappa, gamma, pme_order, K1, K2, K3, lmax): + + # Currently only supports pme_order=6 + # Because only the 6-th order spline function is hard implemented + pme_order = 6 + # global variables for the reciprocal module, all related to pme_order + bspline_range = jnp.arange(-pme_order//2, pme_order//2) + n_mesh = pme_order**3 + shifts = jnp.array(jnp.meshgrid(bspline_range, bspline_range, bspline_range)).T.reshape((1, n_mesh, 3)) + + def pme_recip(positions, box, Q): + ''' + The generated pme_recip space calculator + kappa, pme_order, K1, K2, K3, and lmax are passed and fixed when the calculator is generated + ''' + + def get_recip_vectors(N, box): + """ + Computes reciprocal lattice vectors of the grid + + Input: + N: + (3,)-shaped array, (K1, K2, K3) + box: + 3 x 3 matrix, box parallelepiped vectors arranged in TODO rows or columns? + + Output: + Nj_Aji_star: + 3 x 3 matrix, the first index denotes reciprocal lattice vector, the second index is the component xyz. + (lattice vectors arranged in rows) + """ + Nj_Aji_star = (N.reshape((1, 3)) * jnp.linalg.inv(box)).T + return Nj_Aji_star + + + def u_reference(R_a, Nj_Aji_star): + """ + Each atom is meshed to dispersion_ORDER**3 points on the m-meshgrid. + This function computes the xyz-index of the reference point, which is the point on the meshgrid just above atomic coordinates, + and the corresponding values of xyz fractional displacements from real coordinate to the reference point. + + Inputs: + R_a: + N_a * 3 matrix containing positions of sites + Nj_Aji_star: + 3 x 3 matrix, the first index denotes reciprocal lattice vector, the second index is the component xyz. + (lattice vectors arranged in rows) + + Outputs: + m_u0: + N_a * 3 matrix, positions of the reference points of R_a on the m-meshgrid + u0: + N_a * 3 matrix, (R_a - R_m)*a_star values + """ + R_in_m_basis = jnp.einsum("ij,kj->ki", Nj_Aji_star, R_a) + m_u0 = jnp.ceil(R_in_m_basis).astype(int) + u0 = (m_u0 - R_in_m_basis) + pme_order/2 + return m_u0, u0 + + def bspline(u, order=pme_order): + """ + Computes the cardinal B-spline function + """ + if order == 6: + return jnp.piecewise(u, + [jnp.logical_and(u>=0, u<1.), + jnp.logical_and(u>=1, u<2.), + jnp.logical_and(u>=2, u<3.), + jnp.logical_and(u>=3, u<4.), + jnp.logical_and(u>=4, u<5.), + jnp.logical_and(u>=5, u<6.)], + [lambda u: u**5/120, + lambda u: u**5/120 - (u - 1)**5/20, + lambda u: u**5/120 + (u - 2)**5/8 - (u - 1)**5/20, + lambda u: u**5/120 - (u - 3)**5/6 + (u - 2)**5/8 - (u - 1)**5/20, + lambda u: u**5/24 - u**4 + 19*u**3/2 - 89*u**2/2 + 409*u/4 - 1829/20, + lambda u: -u**5/120 + u**4/4 - 3*u**3 + 18*u**2 - 54*u + 324/5] ) + + + def bspline_prime(u, order=pme_order): + """ + Computes first derivative of the cardinal B-spline function + """ + if order == 6: + return jnp.piecewise(u, + [jnp.logical_and(u>=0., u<1.), + jnp.logical_and(u>=1., u<2.), + jnp.logical_and(u>=2., u<3.), + jnp.logical_and(u>=3., u<4.), + jnp.logical_and(u>=4., u<5.), + jnp.logical_and(u>=5., u<6.)], + [lambda u: u**4/24, + lambda u: u**4/24 - (u - 1)**4/4, + lambda u: u**4/24 + 5*(u - 2)**4/8 - (u - 1)**4/4, + lambda u: -5*u**4/12 + 6*u**3 - 63*u**2/2 + 71*u - 231/4, + lambda u: 5*u**4/24 - 4*u**3 + 57*u**2/2 - 89*u + 409/4, + lambda u: -u**4/24 + u**3 - 9*u**2 + 36*u - 54] ) + + + def bspline_prime2(u, order=pme_order): + """ + Computes second derivate of the cardinal B-spline function + """ + if order == 6: + return jnp.piecewise(u, + [jnp.logical_and(u>=0., u<1.), + jnp.logical_and(u>=1., u<2.), + jnp.logical_and(u>=2., u<3.), + jnp.logical_and(u>=3., u<4.), + jnp.logical_and(u>=4., u<5.), + jnp.logical_and(u>=5., u<6.)], + [lambda u: u**3/6, + lambda u: u**3/6 - (u - 1)**3, + lambda u: 5*u**3/3 - 12*u**2 + 27*u - 19, + lambda u: -5*u**3/3 + 18*u**2 - 63*u + 71, + lambda u: 5*u**3/6 - 12*u**2 + 57*u - 89, + lambda u: -u**3/6 + 3*u**2 - 18*u + 36,] ) + + + def theta_eval(u, M_u): + """ + Evaluates the value of theta given 3D u values at ... points + + Input: + u: + ... x 3 matrix + + Output: + theta: + ... matrix + """ + theta = jnp.prod(M_u, axis = -1) + return theta + + + def thetaprime_eval(u, Nj_Aji_star, M_u, Mprime_u): + """ + First derivative of theta with respect to x,y,z directions + + Input: + u + Nj_Aji_star: + reciprocal lattice vectors + + Output: + N_a * 3 matrix + """ + + div = jnp.array([ + Mprime_u[:, 0] * M_u[:, 1] * M_u[:, 2], + Mprime_u[:, 1] * M_u[:, 2] * M_u[:, 0], + Mprime_u[:, 2] * M_u[:, 0] * M_u[:, 1], + ]).T + + # Notice that u = m_u0 - R_in_m_basis + 6/2 + # therefore the Jacobian du_j/dx_i = - Nj_Aji_star + return jnp.einsum("ij,kj->ki", -Nj_Aji_star, div) + + + def theta2prime_eval(u, Nj_Aji_star, M_u, Mprime_u, M2prime_u): + """ + compute the 3 x 3 second derivatives of theta with respect to xyz + + Input: + u + Nj_Aji_star + + Output: + N_A * 3 * 3 + """ + + div_00 = M2prime_u[:, 0] * M_u[:, 1] * M_u[:, 2] + div_11 = M2prime_u[:, 1] * M_u[:, 0] * M_u[:, 2] + div_22 = M2prime_u[:, 2] * M_u[:, 0] * M_u[:, 1] + + div_01 = Mprime_u[:, 0] * Mprime_u[:, 1] * M_u[:, 2] + div_02 = Mprime_u[:, 0] * Mprime_u[:, 2] * M_u[:, 1] + div_12 = Mprime_u[:, 1] * Mprime_u[:, 2] * M_u[:, 0] + + div_10 = div_01 + div_20 = div_02 + div_21 = div_12 + + div = jnp.array([ + [div_00, div_01, div_02], + [div_10, div_11, div_12], + [div_20, div_21, div_22], + ]).swapaxes(0, 2) + + # Notice that u = m_u0 - R_in_m_basis + 6/2 + # therefore the Jacobian du_j/dx_i = - Nj_Aji_star + return jnp.einsum("im,jn,kmn->kij", -Nj_Aji_star, -Nj_Aji_star, div) + + + def sph_harmonics_GO(u0, Nj_Aji_star): + ''' + Find out the value of spherical harmonics GRADIENT OPERATORS, assume the order is: + 00, 10, 11c, 11s, 20, 21c, 21s, 22c, 22s, ... + Currently supports lmax <= 2 + + Inputs: + u0: + a N_a * 3 matrix containing all positions + Nj_Aji_star: + reciprocal lattice vectors in the m-grid + lmax: + int: max L + + Output: + harmonics: + a Na * (6**3) * (l+1)^2 matrix, STGO operated on theta, + evaluated at 6*6*6 integer points about reference points m_u0 + ''' + + n_harm = int((lmax + 1)**2) + + N_a = u0.shape[0] + # mesh points around each site + u = (u0[:, jnp.newaxis, :] + shifts).reshape((N_a*n_mesh, 3)) + + M_u = bspline(u) + theta = theta_eval(u, M_u) + if lmax == 0: + return theta.reshape(N_a, n_mesh, n_harm) + + # dipole + Mprime_u = bspline_prime(u) + thetaprime = thetaprime_eval(u, Nj_Aji_star, M_u, Mprime_u) + harmonics_1 = jnp.stack( + [theta, + thetaprime[:, 2], + thetaprime[:, 0], + thetaprime[:, 1]], + axis = -1 + ) + + if lmax == 1: + return harmonics_1.reshape(N_a, n_mesh, n_harm) + + # quadrapole + M2prime_u = bspline_prime2(u) + theta2prime = theta2prime_eval(u, Nj_Aji_star, M_u, Mprime_u, M2prime_u) + rt3 = jnp.sqrt(3) + harmonics_2 = jnp.hstack( + [harmonics_1, + jnp.stack([(3*theta2prime[:,2,2] - jnp.trace(theta2prime, axis1=1, axis2=2)) / 2, + rt3 * theta2prime[:, 0, 2], + rt3 * theta2prime[:, 1, 2], + rt3/2 * (theta2prime[:, 0, 0] - theta2prime[:, 1, 1]), + rt3 * theta2prime[:, 0, 1]], axis = 1)] + ) + if lmax == 2: + return harmonics_2.reshape(N_a, n_mesh, n_harm) + else: + raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + + + def Q_m_peratom(Q, sph_harms): + """ + Computes . See eq. (49) of https://doi.org/10.1021/ct5007983 + + Inputs: + Q: + N_a * (l+1)**2 matrix containing global frame multipole moments up to lmax, + sph_harms: + N_a, 216, (l+1)**2 + lmax: + int: maximal L + + Output: + Q_m_pera: + N_a * 216 matrix, values of theta evaluated on a 6 * 6 block about the atoms + """ + + N_a = sph_harms.shape[0] + + if lmax > 2: + raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + + Q_dbf = Q[:, 0:1] + + if lmax >= 1: + Q_dbf = jnp.hstack([Q_dbf, Q[:,1:4]]) + if lmax >= 2: + Q_dbf = jnp.hstack([Q_dbf, Q[:,4:9]/3]) + + Q_m_pera = jnp.sum(Q_dbf[:,jnp.newaxis,:]* sph_harms, axis=2) + + assert Q_m_pera.shape == (N_a, n_mesh) + return Q_m_pera + + + def Q_mesh_on_m(Q_mesh_pera, m_u0, N): + """ + Reduce the local Q_m_peratom into the global mesh + + Input: + Q_mesh_pera, m_u0, N + + Output: + Q_mesh: + Nx * Ny * Nz matrix + """ + indices_arr = jnp.mod(m_u0[:,np.newaxis,:]+shifts, N[np.newaxis, np.newaxis, :]) + ### jax trick implementation without using for loop + ### NOTICE: this implementation does not work with numpy! + Q_mesh = jnp.zeros((N[0], N[1], N[2])) + Q_mesh = Q_mesh.at[indices_arr[:, :, 0], indices_arr[:, :, 1], indices_arr[:, :, 2]].add(Q_mesh_pera) + return Q_mesh + + + def setup_kpts_integer(N): + """ + Outputs: + kpts_int: + n_k * 3 matrix, n_k = N[0] * N[1] * N[2] + """ + N_half = N.reshape(3) + kx, ky, kz = [jnp.roll(jnp.arange(- (N_half[i] - 1) // 2, (N_half[i] + 1) // 2 ), - (N_half[i] - 1) // 2) for i in range(3)] + kpts_int = jnp.hstack([ki.flatten()[:,jnp.newaxis] for ki in jnp.meshgrid(kz, kx, ky)]) + return kpts_int + + + def setup_kpts(box, kpts_int): + ''' + This function sets up the k-points used for reciprocal space calculations + + Input: + box: + 3 * 3, three axis arranged in rows + kpts_int: + n_k * 3 matrix + + Output: + kpts: + 4 * K, K=K1*K2*K3, contains kx, ky, kz, k^2 for each kpoint + ''' + # in this array, a*, b*, c* (without 2*pi) are arranged in column + box_inv = jnp.linalg.inv(box) + # K * 3, coordinate in reciprocal space + kpts = 2 * jnp.pi * kpts_int.dot(box_inv) + ksq = jnp.sum(kpts**2, axis=1) + # 4 * K + kpts = jnp.hstack((kpts, ksq[:, jnp.newaxis])).T + return kpts + + + def spread_Q(positions, box, Q): + ''' + This is the high level wrapper function, in charge of spreading the charges/multipoles on grid + + Input: + positions: + Na * 3: positions of each site + box: + 3 * 3: box + Q: + Na * (lmax+1)**2: the multipole of each site in global frame + + Output: + Q_mesh: + K1 * K2 * K3: the meshed multipoles + + ''' + Nj_Aji_star = get_recip_vectors(N, box) + # For each atom, find the reference mesh point, and u position of the site + m_u0, u0 = u_reference(positions, Nj_Aji_star) + # find out the STGO values of each grid point + sph_harms = sph_harmonics_GO(u0, Nj_Aji_star) + # find out the local meshed values for each site + Q_mesh_pera = Q_m_peratom(Q, sph_harms) + return Q_mesh_on_m(Q_mesh_pera, m_u0, N) + + # spread Q + N = np.array([K1, K2, K3]) + Q_mesh = spread_Q(positions, box, Q) + N = N.reshape(1, 1, 3) + kpts_int = setup_kpts_integer(N) + kpts = setup_kpts(box, kpts_int) + m = jnp.linspace(-pme_order//2+1, pme_order//2-1, pme_order-1).reshape(pme_order-1, 1, 1) + # m = jnp.linspace(-2,2,5).reshape(5, 1, 1) + theta_k = jnp.prod( + jnp.sum( + bspline(m + pme_order/2) * jnp.cos(2*jnp.pi*m*kpts_int[jnp.newaxis] / N), + axis = 0 + ), + axis = 1 + ) + V = jnp.linalg.det(box) + S_k = jnp.fft.fftn(Q_mesh).flatten() + # for electrostatic, need to exclude gamma point + # for dispersion, need to include gamma point + if not gamma: + C_k = Ck_fn(kpts[3, 1:], kappa, V) + E_k = C_k * jnp.abs(S_k[1:] / theta_k[1:])**2 + else: + C_k = Ck_fn(kpts[3, :], kappa, V) + # debug + # for i in range(1000): + # print('%15.8f%15.8f'%(jnp.real(C_k[i]), jnp.imag(C_k[i]))) + E_k = C_k * jnp.abs(S_k / theta_k)**2 + + if not gamma: # doing electrics + return jnp.sum(E_k) * DIELECTRIC + else: + return jnp.sum(E_k) + + if DO_JIT: + return jit(pme_recip, static_argnums=()) + else: + return pme_recip + + +def Ck_1(ksq, kappa, V): + return 2*jnp.pi/V/ksq * jnp.exp(-ksq/4/kappa**2) + +def Ck_6(ksq, kappa, V): + x2 = ksq / 4 / kappa**2 + x = jnp.sqrt(x2) + x3 = x2 * x + exp_x2 = jnp.exp(-x2) + f = (1 - 2*x2)*exp_x2 + 2*x3*sqrt_pi*jsp.special.erfc(x) + return sqrt_pi*jnp.pi/2/V*kappa**3 * f / 3 + +def Ck_8(ksq, kappa, V): + x2 = ksq / 4 / kappa**2 + x = jnp.sqrt(x2) + x4 = x2 * x2 + x5 = x4 * x + exp_x2 = jnp.exp(-x2) + f = (3 - 2*x2 + 4*x4)*exp_x2 - 4*x5*sqrt_pi*jsp.special.erfc(x) + return sqrt_pi*jnp.pi/2/V*kappa**5 * f / 45 + +def Ck_10(ksq, kappa, V): + x2 = ksq / 4 / kappa**2 + x = jnp.sqrt(x2) + x4 = x2 * x2 + x6 = x4 * x2 + x7 = x6 * x + exp_x2 = jnp.exp(-x2) + f = (15 - 6*x2 + 4*x4 - 8*x6)*exp_x2 + 8*x7*sqrt_pi*jsp.special.erfc(x) + return sqrt_pi*jnp.pi/2/V*kappa**7 * f / 1260 + + +def validation(pdb): + jnp.set_printoptions(precision=32, suppress=True) + xml = 'mpidwater.xml' + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + Q = np.vstack( + [(atom.c0, atom.dX*10, atom.dY*10, atom.dZ*10, atom.qXX*300, atom.qYY*300, atom.qZZ*300, atom.qXY*300, atom.qXZ*300, atom.qYZ*300) for atom in atomDicts.values()] + ) + Q = jnp.array(Q) + Q_local = convert_cart2harm(Q, 2) + axis_type = np.array( + [atom.axisType for atom in atomDicts.values()] + ) + axis_indices = np.vstack( + [atom.axis_indices for atom in atomDicts.values()] + ) + covalent_map = assemble_covalent(residueDicts, n_atoms) + + + # invoke pme energy calculator + # energy_pme(positions, box, Q_local, axis_type, axis_indices, nbr.idx, 2) + lmax = 2 + kappa, K1, K2, K3 = setup_ewald_parameters(rc, ethresh, box) + # for debugging + kappa = 0.657065221219616 + construct_local_frames_fn = generate_construct_local_frames(axis_type, axis_indices) + local_frames = construct_local_frames_fn(positions, box) + Q_global = rot_local2global(Q_local, local_frames, lmax) + + pme_order = 6 + energy_force_pme_recip = value_and_grad(generate_pme_recip(Ck_1, kappa, False, pme_order, K1, K2, K3, lmax)) + energy_force_pme_recip(positions, box, Q_global) + print('ok') + E, F = energy_force_pme_recip(positions, box, Q_global) + print(E) + + # construct the C list + c_list = np.zeros((3,n_atoms)) + nmol=int(n_atoms/3) + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + c_list[0][a]=37.19677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + energy_force_d6_recip = value_and_grad(generate_pme_recip(Ck_6, kappa, True, pme_order, K1, K2, K3, 0)) + energy_force_d8_recip = value_and_grad(generate_pme_recip(Ck_8, kappa, True, pme_order, K1, K2, K3, 0)) + energy_force_d10_recip = value_and_grad(generate_pme_recip(Ck_10, kappa, True, pme_order, K1, K2, K3, 0)) + E6, F6 = energy_force_d6_recip(positions, box, c_list[0, :, jnp.newaxis]) + E8, F6 = energy_force_d8_recip(positions, box, c_list[1, :, jnp.newaxis]) + E10, F10 = energy_force_d10_recip(positions, box, c_list[2, :, jnp.newaxis]) + print('ok') + E6, F6 = energy_force_d6_recip(positions, box, c_list[0, :, jnp.newaxis]) + E8, F6 = energy_force_d8_recip(positions, box, c_list[1, :, jnp.newaxis]) + E10, F10 = energy_force_d10_recip(positions, box, c_list[2, :, jnp.newaxis]) + print(E6, E8, E10) + print(E6 + E8 + E10) + return + + +# validation code +if __name__ == '__main__': + validation(sys.argv[1]) diff --git a/dmff/admp/admp/settings.py b/dmff/admp/admp/settings.py new file mode 100644 index 000000000..2f5ce65d2 --- /dev/null +++ b/dmff/admp/admp/settings.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +from jax import jit +from jax.config import config + +PRECISION = 'double' # 'double' + +DO_JIT = True + +if PRECISION == 'double': + config.update("jax_enable_x64", True) + +def jit_condition(*args, **kwargs): + def jit_deco(func): + if DO_JIT: + return jit(func, *args, **kwargs) + else: + return func + return jit_deco + +# def conditional_decorator(dec, condition): +# def decorator(func): +# if not condition: +# # Return the function unchanged, not decorated. +# return func +# return dec(func) +# return decorator + +# DEFAULT THRESHOLDS +POL_CONV = 10.0 # gradient convergence thresh for induced dipoles +MAX_N_POL = 30 # maximum number of cyles for optimizing induced dipole diff --git a/dmff/admp/admp/spatial.py b/dmff/admp/admp/spatial.py new file mode 100644 index 000000000..63a2d8b5e --- /dev/null +++ b/dmff/admp/admp/spatial.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +import jax.numpy as jnp +from jax import vmap, jit +import numpy as np +from functools import partial +import admp.settings +from admp.settings import DO_JIT, jit_condition + +# This module deals with spatial geometric operations, mainly including: +# 1. PBC related operations +# 2. Local frame rotation operations + +@jit_condition(static_argnums=()) +def pbc_shift(drvecs, box, box_inv): + ''' + Dealing with the pbc shifts of vectors + + Inputs: + rvecs: + N * 3, a list of real space vectors in Cartesian + box: + 3 * 3, box matrix, with axes arranged in rows + box_inv: + 3 * 3, inverse of box matrix + + Outputs: + rvecs: + N * 3, vectors that have been shifted, in Cartesian + ''' + unshifted_dsvecs = drvecs.dot(box_inv) + dsvecs = unshifted_dsvecs - jnp.floor(unshifted_dsvecs + 0.5) + return dsvecs.dot(box) + +v_pbc_shift = vmap(pbc_shift, in_axes=(0, None, None), out_axes=0) + +def normalize(matrix, axis=1, ord=2): + ''' + Normalise a matrix along one dimension + ''' + normalised = matrix / jnp.linalg.norm(matrix, axis=axis, keepdims=True, ord=ord) + return normalised + + +def generate_construct_local_frames(axis_types, axis_indices): + """ + Generates the local frame constructor, common to the same physical system + + inputs: + axis_types: + N, a len(N) integer array, labels the types of localframe transformation rules for each atom. + axis_indices: + N * 3, indices of z,x,y atoms of the localframe of each atom. + + outputs: + construct_local_frames: + function type (positions, box) -> local_frames + """ + ZThenX = 0 + Bisector = 1 + ZBisect = 2 + ThreeFold = 3 + Zonly = 4 + NoAxisType = 5 + LastAxisTypeIndex = 6 + + z_atoms = jnp.array(axis_indices[:, 0]) + x_atoms = jnp.array(axis_indices[:, 1]) + y_atoms = jnp.array(axis_indices[:, 2]) + + Zonly_filter = (axis_types == Zonly) + not_Zonly_filter = jnp.logical_not(Zonly_filter) + Bisector_filter = (axis_types == Bisector) + ZBisect_filter = (axis_types == ZBisect) + ThreeFold_filter = (axis_types == ThreeFold) + + def construct_local_frames(positions, box): + ''' + This function constructs the local frames for each site + + Inputs: + positions: + N * 3: the positions matrix + box: + Outputs: + #jichen: + #NOTE: It doesn't seem to return Q + Q: + N*(lmax+1)^2, the multipole moments in global harmonics. + local_frames: + N*3*3, the local frames, axes arranged in rows + ''' + + positions = jnp.array(positions) + n_sites = positions.shape[0] + box_inv = jnp.linalg.inv(box) + + ### Process the x, y, z vectors according to local axis rules + vec_z = pbc_shift(positions[z_atoms] - positions, box, box_inv) + vec_z = normalize(vec_z) + vec_x = jnp.zeros((n_sites, 3)) + vec_y = jnp.zeros((n_sites, 3)) + # Z-Only + x_of_vec_z = jnp.round(jnp.abs(vec_z[:,0])) + vec_x_Zonly = jnp.array([1.-x_of_vec_z, x_of_vec_z, jnp.zeros_like(x_of_vec_z)]).T + vec_x = vec_x.at[Zonly_filter].set(vec_x_Zonly) + # for those that are not Z-Only, get normalized vecX + vec_x_not_Zonly = positions[x_atoms[not_Zonly_filter]] - positions[not_Zonly_filter] + vec_x_not_Zonly = pbc_shift(vec_x_not_Zonly, box, box_inv) + + vec_x = vec_x.at[not_Zonly_filter].set(normalize(vec_x_not_Zonly, axis=1)) + # Bisector + if np.sum(Bisector_filter) > 0: + vec_z_Bisector = vec_z[Bisector_filter] + vec_x[Bisector_filter] + vec_z = vec_z.at[Bisector_filter].set(normalize(vec_z_Bisector, axis=1)) + # z-bisector + if np.sum(ZBisect_filter) > 0: + vec_y_ZBisect = positions[y_atoms[ZBisect_filter]] - positions[ZBisect_filter] + vec_y_ZBisect = pbc_shift(vec_y_ZBisect, box, box_inv) + vec_y_ZBisect = normalize(vec_y_ZBisect, axis=1) + vec_x_ZBisect = vec_x[ZBisect_filter] + vec_y_ZBisect + vec_x = vec_x.at[ZBisect_filter].set(normalize(vec_x_ZBisect, axis=1)) + # ThreeFold + if np.sum(ThreeFold_filter) > 0: + vec_x_threeFold = vec_x[ThreeFold_filter] + vec_z_threeFold = vec_z[ThreeFold_filter] + + vec_y_threeFold = positions[y_atoms[ThreeFold_filter]] - positions[ThreeFold_filter] + vec_y_threeFold = pbc_shift(vec_y_threeFold, box, box_inv) + vec_y_threeFold = normalize(vec_y_threeFold, axis=1) + vec_z_threeFold += (vec_x_threeFold + vec_y_threeFold) + vec_z_threeFold = normalize(vec_z_threeFold) + + vec_y = vec_y.at[ThreeFold_filter].set(vec_y_threeFold) + vec_z = vec_z.at[ThreeFold_filter].set(vec_z_threeFold) + + # up to this point, z-axis should already be set up and normalized + xz_projection = jnp.sum(vec_x*vec_z, axis = 1, keepdims=True) + vec_x = normalize(vec_x - vec_z * xz_projection, axis=1) + # up to this point, x-axis should be ready + vec_y = jnp.cross(vec_z, vec_x) + + return jnp.stack((vec_x, vec_y, vec_z), axis=1) + + if DO_JIT: + return jit(construct_local_frames) + else: + return construct_local_frames + +@partial(vmap, in_axes=(0, 0, 0, 0), out_axes=0) +@jit_condition(static_argnums=()) +def build_quasi_internal(r1, r2, dr, norm_dr): + ''' + Build the quasi-internal frame between a pair of sites + In this frame, the z-axis is pointing from r2 to r1 + + Input: + r1: + N * 3, positions of the first vector + r2: + N * 3, positions of the second vector + dr: + N * 3, vector pointing from r1 to r2 + norm_dr: + (N,), distances between r1 and r2 + + Output: + local_frames: + N * 3 * 3: local frames, three axes arranged in rows + ''' + vectorZ = dr/norm_dr + # vectorX = jnp.where(jnp.logical_or(r1[:, 1] != r2[:, 1], r1[:, 2]!=r2[:, 2]).reshape((-1, 1)), vectorZ+jnp.array([1., 0., 0.]), vectorZ + jnp.array([0., 1., 0.])) + vectorX = jnp.where(jnp.logical_or(r1[1]!=r2[1], r1[2]!=r2[2]), vectorZ + jnp.array([1., 0., 0.]), vectorZ + jnp.array([0., 1., 0.])) + # dot = jnp.sum(vectorZ * vectorX, axis=1) + dot_xz = jnp.dot(vectorZ, vectorX) + vectorX -= vectorZ * dot_xz + vectorX = vectorX / jnp.linalg.norm(vectorX) + vectorY = jnp.cross(vectorZ, vectorX) + return jnp.stack([vectorX, vectorY, vectorZ]) + diff --git a/dmff/admp/examples/openmm_api/admp b/dmff/admp/examples/openmm_api/admp new file mode 120000 index 000000000..be76fddb2 --- /dev/null +++ b/dmff/admp/examples/openmm_api/admp @@ -0,0 +1 @@ +../../admp/ \ No newline at end of file diff --git a/dmff/admp/examples/openmm_api/dipole_1024 b/dmff/admp/examples/openmm_api/dipole_1024 new file mode 100644 index 000000000..e1de509e9 --- /dev/null +++ b/dmff/admp/examples/openmm_api/dipole_1024 @@ -0,0 +1,3072 @@ +-9.78037e-05 -0.0102743 -0.00835381 +0 0 0 +0 0 0 +0.0016815 0.00104498 0.00955635 +0 0 0 +0 0 0 +0.0104807 0.0153637 -0.00934142 +0 0 0 +0 0 0 +0.00268184 0.00663563 -0.00085569 +0 0 0 +0 0 0 +0.000439397 0.0120955 -0.00798317 +0 0 0 +0 0 0 +0.00757021 0.00274864 -0.00405105 +0 0 0 +0 0 0 +-0.00374424 -0.00805664 0.00310999 +0 0 0 +0 0 0 +0.00300064 0.00103427 -0.00607688 +0 0 0 +0 0 0 +-0.00513748 0.00259173 0.0138984 +0 0 0 +0 0 0 +0.00611206 0.00178956 0.00330758 +0 0 0 +0 0 0 +0.00309779 -0.0123237 -0.00151633 +0 0 0 +0 0 0 +0.0112893 -0.000925505 -0.00345641 +0 0 0 +0 0 0 +-0.00823225 0.00481008 -0.00517028 +0 0 0 +0 0 0 +0.0105862 -0.0173504 0.00505209 +0 0 0 +0 0 0 +0.00507972 0.00427566 0.00207499 +0 0 0 +0 0 0 +-0.0160562 -0.00375995 -0.000162321 +0 0 0 +0 0 0 +-0.00232523 0.00223238 -0.00650886 +0 0 0 +0 0 0 +0.00907927 0.00168353 -0.00335751 +0 0 0 +0 0 0 +0.000391106 -0.00560563 0.0039132 +0 0 0 +0 0 0 +-0.00129292 -0.0139697 -0.0130065 +0 0 0 +0 0 0 +0.00253837 -0.0116289 -0.00520366 +0 0 0 +0 0 0 +-0.00331825 -0.00396823 -0.00218062 +0 0 0 +0 0 0 +0.0009465 -0.00202349 -0.00330577 +0 0 0 +0 0 0 +-0.0110558 -0.000308164 -0.00228239 +0 0 0 +0 0 0 +0.0124406 -0.00204707 -0.00693733 +0 0 0 +0 0 0 +-0.00173319 -0.00331657 0.00166376 +0 0 0 +0 0 0 +-0.00273922 0.00197408 -0.00392151 +0 0 0 +0 0 0 +-0.00667702 0.00334124 -0.0126923 +0 0 0 +0 0 0 +0.00498793 0.00726738 0.00236643 +0 0 0 +0 0 0 +-0.0100955 -0.0112588 0.0042185 +0 0 0 +0 0 0 +0.0026019 0.000417779 -0.00626278 +0 0 0 +0 0 0 +0.00249888 -0.00228331 0.00721147 +0 0 0 +0 0 0 +0.00445673 0.000574593 -0.00796422 +0 0 0 +0 0 0 +-0.000312778 3.41629e-05 0.000317727 +0 0 0 +0 0 0 +-0.00392655 0.00947377 -0.0015633 +0 0 0 +0 0 0 +-0.00386247 -0.0115072 -0.00401078 +0 0 0 +0 0 0 +-0.00888192 0.00884608 -0.000281786 +0 0 0 +0 0 0 +0.00827756 0.00138916 0.000213653 +0 0 0 +0 0 0 +-0.00314245 0.00726788 -0.000613722 +0 0 0 +0 0 0 +0.00755656 0.00489949 -0.00309753 +0 0 0 +0 0 0 +-0.00633686 0.0115392 0.000473853 +0 0 0 +0 0 0 +0.00195559 0.00604159 -0.00785683 +0 0 0 +0 0 0 +0.00611166 -0.00239653 0.00120471 +0 0 0 +0 0 0 +-0.00724835 -0.00466115 -0.00739829 +0 0 0 +0 0 0 +0.00293285 0.000757116 -0.00542986 +0 0 0 +0 0 0 +-0.00321717 0.00587291 -0.00449816 +0 0 0 +0 0 0 +0.00852951 -0.0073382 0.000909686 +0 0 0 +0 0 0 +0.00462385 0.00435736 0.00220974 +0 0 0 +0 0 0 +-0.000210808 -0.0099051 -0.00681186 +0 0 0 +0 0 0 +0.00519537 0.00774189 0.00934357 +0 0 0 +0 0 0 +-0.00791618 -0.00701282 -0.00573458 +0 0 0 +0 0 0 +-0.00353672 0.00218662 0.00116191 +0 0 0 +0 0 0 +-0.000824194 0.00763499 0.0101212 +0 0 0 +0 0 0 +-0.00582191 0.00637928 0.00340626 +0 0 0 +0 0 0 +0.00135849 0.000574534 0.00486814 +0 0 0 +0 0 0 +0.00672225 0.00484596 0.00758249 +0 0 0 +0 0 0 +0.000442829 0.00999001 -0.00079784 +0 0 0 +0 0 0 +-0.00374611 -0.0162288 0.0117805 +0 0 0 +0 0 0 +-0.00257662 0.00363066 -0.00124877 +0 0 0 +0 0 0 +-0.000491337 -0.00467918 0.0066654 +0 0 0 +0 0 0 +-0.00798403 0.00187673 -0.000592901 +0 0 0 +0 0 0 +0.000873825 -0.00367945 -0.00136084 +0 0 0 +0 0 0 +-0.0124228 -0.00596143 -0.0102283 +0 0 0 +0 0 0 +-0.000180247 0.000531004 -0.00128713 +0 0 0 +0 0 0 +-0.00415982 -0.0141561 0.00939265 +0 0 0 +0 0 0 +-0.0100344 0.0038062 0.00366314 +0 0 0 +0 0 0 +0.00392728 -0.00100683 0.00206949 +0 0 0 +0 0 0 +0.0115188 0.00717167 -0.00074889 +0 0 0 +0 0 0 +0.00628949 0.00640248 0.000293654 +0 0 0 +0 0 0 +-0.00909805 -0.000491437 0.00161602 +0 0 0 +0 0 0 +-0.00177572 0.00675042 0.00826887 +0 0 0 +0 0 0 +-0.00197614 0.0110562 -0.00612657 +0 0 0 +0 0 0 +0.00971752 -0.00739067 0.00357604 +0 0 0 +0 0 0 +0.000195267 -0.00786269 0.00607746 +0 0 0 +0 0 0 +-0.0103708 0.00245087 -0.00041738 +0 0 0 +0 0 0 +0.00256772 0.00215356 -0.000762005 +0 0 0 +0 0 0 +0.00379047 -0.000474574 -0.00298218 +0 0 0 +0 0 0 +-0.000165421 -0.00055532 0.0148757 +0 0 0 +0 0 0 +0.0111802 0.0136549 -0.0320468 +0 0 0 +0 0 0 +0.0153225 -0.0103171 -0.00227375 +0 0 0 +0 0 0 +-0.00212336 0.00274542 -0.00933705 +0 0 0 +0 0 0 +0.00616534 0.0130132 5.47625e-05 +0 0 0 +0 0 0 +-0.00929046 0.00852819 -0.00192719 +0 0 0 +0 0 0 +-0.00241705 0.00226907 -0.00449038 +0 0 0 +0 0 0 +-0.00920485 -0.00746917 0.000557805 +0 0 0 +0 0 0 +-0.0058951 0.00506319 0.00270818 +0 0 0 +0 0 0 +0.00583662 -0.0012291 0.00289874 +0 0 0 +0 0 0 +0.0094816 0.0109469 0.00114495 +0 0 0 +0 0 0 +-0.00838529 -0.00821476 -0.00669953 +0 0 0 +0 0 0 +0.00484815 -0.00317928 0.00731462 +0 0 0 +0 0 0 +0.00497919 0.00490789 -0.00180653 +0 0 0 +0 0 0 +0.00854981 0.010314 -0.00320549 +0 0 0 +0 0 0 +-0.00415836 -0.00892292 -0.00167608 +0 0 0 +0 0 0 +-0.00813587 0.0118199 0.00557071 +0 0 0 +0 0 0 +-0.00374275 0.000783917 0.0064928 +0 0 0 +0 0 0 +0.00324764 0.00810909 0.00293951 +0 0 0 +0 0 0 +-0.00546086 -0.00241054 0.0110425 +0 0 0 +0 0 0 +-0.0138394 0.00240158 0.00286925 +0 0 0 +0 0 0 +0.00511851 -0.000957279 -0.00176611 +0 0 0 +0 0 0 +0.0115771 -0.00931405 0.00416637 +0 0 0 +0 0 0 +-0.00225243 0.00246387 -0.00268514 +0 0 0 +0 0 0 +0.00691816 -0.00831442 -0.00121352 +0 0 0 +0 0 0 +-0.0063306 -7.31156e-05 0.00572808 +0 0 0 +0 0 0 +0.00167653 0.000132109 0.00343913 +0 0 0 +0 0 0 +-0.0070473 -1.97325e-05 -0.00325234 +0 0 0 +0 0 0 +-0.00632247 0.00179402 -0.000831321 +0 0 0 +0 0 0 +0.0011576 0.00842738 0.0113516 +0 0 0 +0 0 0 +-0.00183084 -0.00155541 0.00883301 +0 0 0 +0 0 0 +0.00855752 0.00973545 -0.00203578 +0 0 0 +0 0 0 +0.00460251 -0.00150441 0.00506528 +0 0 0 +0 0 0 +0.00819739 -0.00207966 -0.0023709 +0 0 0 +0 0 0 +0.000726014 0.00133864 -0.00837828 +0 0 0 +0 0 0 +0.00369728 0.000264355 0.00346401 +0 0 0 +0 0 0 +-0.00573303 -3.45729e-05 -0.00555133 +0 0 0 +0 0 0 +-0.00605226 -0.00217764 -0.000867023 +0 0 0 +0 0 0 +0.00851709 0.00977362 0.00438207 +0 0 0 +0 0 0 +-0.00262633 0.00541108 -0.000277135 +0 0 0 +0 0 0 +-0.00421868 -0.00682932 -0.00906488 +0 0 0 +0 0 0 +-0.00142311 -0.0044121 -0.00267245 +0 0 0 +0 0 0 +0.000599986 -0.00220729 0.00549257 +0 0 0 +0 0 0 +0.00717203 -0.00041221 0.000839776 +0 0 0 +0 0 0 +0.00742294 0.00505202 -0.0103032 +0 0 0 +0 0 0 +-0.0111505 0.00713828 0.00812535 +0 0 0 +0 0 0 +-0.00696046 0.00317351 0.0191618 +0 0 0 +0 0 0 +-0.00271005 -0.00500413 -0.00472108 +0 0 0 +0 0 0 +0.00053514 0.00124973 0.00329028 +0 0 0 +0 0 0 +0.00563814 0.00313616 -0.00026369 +0 0 0 +0 0 0 +0.00595883 -0.00569338 -0.00611885 +0 0 0 +0 0 0 +0.00934765 -0.00487378 -0.00983422 +0 0 0 +0 0 0 +0.00666574 0.000534592 0.00150635 +0 0 0 +0 0 0 +-0.00220394 4.45494e-05 0.00307866 +0 0 0 +0 0 0 +-0.00300268 -0.00505015 -0.00646803 +0 0 0 +0 0 0 +-0.00426093 0.00399821 0.00430969 +0 0 0 +0 0 0 +1.48552e-05 -0.00805093 0.00708488 +0 0 0 +0 0 0 +0.00200509 -0.00705536 0.00506572 +0 0 0 +0 0 0 +-0.00122102 0.00183551 0.00300795 +0 0 0 +0 0 0 +0.00216416 -0.000855585 0.00626019 +0 0 0 +0 0 0 +-0.00305724 -0.00194739 -0.00753175 +0 0 0 +0 0 0 +0.00749589 -0.00599059 -0.00142094 +0 0 0 +0 0 0 +-0.0120168 -0.000174821 0.0115427 +0 0 0 +0 0 0 +-0.00466727 0.00351428 0.000158967 +0 0 0 +0 0 0 +0.00485732 0.00239818 0.00676465 +0 0 0 +0 0 0 +-0.00503949 0.006335 -0.00551739 +0 0 0 +0 0 0 +0.00171117 -0.00296434 -0.00286245 +0 0 0 +0 0 0 +0.0122505 0.00883528 0.000622401 +0 0 0 +0 0 0 +-0.00164902 0.0044269 -0.000943952 +0 0 0 +0 0 0 +-0.00284898 -0.0144255 0.00235835 +0 0 0 +0 0 0 +-0.0165456 0.00239321 0.00289284 +0 0 0 +0 0 0 +-0.00349088 0.018868 0.00731126 +0 0 0 +0 0 0 +0.0026674 0.00167464 0.00127276 +0 0 0 +0 0 0 +0.000301781 -0.00243539 0.00916902 +0 0 0 +0 0 0 +0.00395351 0.0048905 0.00153711 +0 0 0 +0 0 0 +0.0173634 -0.0051964 -0.00931404 +0 0 0 +0 0 0 +-0.000329681 0.00648045 -0.0215546 +0 0 0 +0 0 0 +-0.00381817 -0.00415355 -0.00564167 +0 0 0 +0 0 0 +-0.00607825 0.0247509 -0.00142847 +0 0 0 +0 0 0 +0.0127189 0.00414365 -0.00481488 +0 0 0 +0 0 0 +0.0091679 -0.000535909 0.0127363 +0 0 0 +0 0 0 +-0.00545698 0.00499536 0.00473193 +0 0 0 +0 0 0 +0.01518 0.0142544 0.0123285 +0 0 0 +0 0 0 +-0.000168485 -0.00438238 0.00517892 +0 0 0 +0 0 0 +0.0123714 0.0058073 -0.00344789 +0 0 0 +0 0 0 +-0.00534167 0.00642355 -0.00244599 +0 0 0 +0 0 0 +-5.04759e-05 -0.00515571 0.00720749 +0 0 0 +0 0 0 +-0.00191556 -0.000748099 0.00149025 +0 0 0 +0 0 0 +0.00661331 0.000687613 -0.010089 +0 0 0 +0 0 0 +-1.26257e-05 -0.00515542 0.00494464 +0 0 0 +0 0 0 +0.00789357 -0.00877575 0.0132735 +0 0 0 +0 0 0 +-0.00507882 0.00816196 0.00899426 +0 0 0 +0 0 0 +-0.00772275 -0.0129865 -0.00602754 +0 0 0 +0 0 0 +-0.000565926 0.00545582 -5.91464e-05 +0 0 0 +0 0 0 +0.00109049 0.000202086 -0.00667453 +0 0 0 +0 0 0 +-0.0109158 -0.0123817 0.0094091 +0 0 0 +0 0 0 +0.00406096 0.00660004 -0.00386767 +0 0 0 +0 0 0 +0.00138359 0.00457259 0.00378496 +0 0 0 +0 0 0 +-0.00281692 0.00027646 -5.7857e-05 +0 0 0 +0 0 0 +0.00209406 0.00231404 0.0101979 +0 0 0 +0 0 0 +0.00367972 0.000890963 0.00273223 +0 0 0 +0 0 0 +-0.0111618 -0.00342381 -0.0123016 +0 0 0 +0 0 0 +-0.00486201 0.00574302 -0.0151186 +0 0 0 +0 0 0 +0.00497567 -0.000638303 -0.00333819 +0 0 0 +0 0 0 +-0.00292046 0.00976949 -0.00699919 +0 0 0 +0 0 0 +-0.00674894 0.00165761 0.0147542 +0 0 0 +0 0 0 +-0.00782643 -0.0077367 -0.00260987 +0 0 0 +0 0 0 +-0.00358134 -0.00303959 0.00114245 +0 0 0 +0 0 0 +0.000642828 -0.000335948 -0.000605209 +0 0 0 +0 0 0 +0.000740505 -0.00511259 -0.00503279 +0 0 0 +0 0 0 +-0.0054111 0.00134348 0.000486883 +0 0 0 +0 0 0 +-0.00516649 0.00567091 0.00305135 +0 0 0 +0 0 0 +0.000676043 0.00485579 0.000172391 +0 0 0 +0 0 0 +-0.00582053 -0.00402091 0.00033397 +0 0 0 +0 0 0 +0.00448973 0.00281377 -0.000227784 +0 0 0 +0 0 0 +0.00336178 0.00764535 -0.003802 +0 0 0 +0 0 0 +-0.00186275 0.00400589 0.00343895 +0 0 0 +0 0 0 +-0.00556406 -0.00528317 -0.00993338 +0 0 0 +0 0 0 +0.00199889 0.00195948 0.00458751 +0 0 0 +0 0 0 +-0.00353912 0.00494606 0.00680142 +0 0 0 +0 0 0 +0.00122442 0.0020615 0.00264405 +0 0 0 +0 0 0 +0.00721288 -0.00291954 0.00214669 +0 0 0 +0 0 0 +0.000453011 -0.00715159 0.00695737 +0 0 0 +0 0 0 +-0.00772907 -0.00301497 -0.0167101 +0 0 0 +0 0 0 +0.00840813 0.00133569 0.00613421 +0 0 0 +0 0 0 +0.00380602 0.0068309 0.00171629 +0 0 0 +0 0 0 +-0.000842832 0.00536671 -0.00349201 +0 0 0 +0 0 0 +-0.00930383 -0.000269109 0.00486243 +0 0 0 +0 0 0 +-0.00586819 0.00280701 -0.00832121 +0 0 0 +0 0 0 +0.00453673 -0.00212405 -0.00713174 +0 0 0 +0 0 0 +0.00378363 -0.00642744 -0.0019263 +0 0 0 +0 0 0 +-0.0017643 -0.000354975 0.00164927 +0 0 0 +0 0 0 +-0.00384344 -0.0118822 -0.00289207 +0 0 0 +0 0 0 +0.00653117 0.00974485 0.000399904 +0 0 0 +0 0 0 +0.00616974 -0.00482934 -0.0105603 +0 0 0 +0 0 0 +0.00487945 0.00496005 0.00550319 +0 0 0 +0 0 0 +-0.001882 0.00272243 -0.00392331 +0 0 0 +0 0 0 +-0.000258219 -0.00482456 -0.00125412 +0 0 0 +0 0 0 +0.0116988 0.00129067 -0.00170155 +0 0 0 +0 0 0 +0.0134901 -0.00518862 -0.000939032 +0 0 0 +0 0 0 +-0.00691896 0.0112497 -0.00346503 +0 0 0 +0 0 0 +-0.00223103 0.00535906 -4.1665e-05 +0 0 0 +0 0 0 +-2.84113e-05 -0.00198621 0.00316068 +0 0 0 +0 0 0 +0.00370225 0.0021758 -0.00100787 +0 0 0 +0 0 0 +0.000723029 -0.00813053 -0.0028756 +0 0 0 +0 0 0 +-0.00868476 0.00874568 -0.000411086 +0 0 0 +0 0 0 +0.00474037 0.0105608 0.008347 +0 0 0 +0 0 0 +0.00105959 -0.000831815 -0.00437098 +0 0 0 +0 0 0 +-0.0180633 0.000180752 0.00379154 +0 0 0 +0 0 0 +0.00180955 -0.00641551 -0.00596799 +0 0 0 +0 0 0 +0.00783451 0.00619785 -0.00527733 +0 0 0 +0 0 0 +0.00328143 0.00140044 0.0101086 +0 0 0 +0 0 0 +-0.00395973 0.000926564 -0.00639365 +0 0 0 +0 0 0 +0.0116767 0.00177171 0.00991388 +0 0 0 +0 0 0 +0.00125404 0.00278407 -0.00472855 +0 0 0 +0 0 0 +-0.00125579 0.000624749 0.0060266 +0 0 0 +0 0 0 +0.00024747 -0.000230718 0.00470209 +0 0 0 +0 0 0 +-0.0153942 0.00410741 -0.00831551 +0 0 0 +0 0 0 +0.0131303 0.00158128 0.00383424 +0 0 0 +0 0 0 +-0.00726297 -0.0099383 0.00170768 +0 0 0 +0 0 0 +0.0173814 0.00807743 0.00770488 +0 0 0 +0 0 0 +-0.00765138 -0.000946928 -0.0102351 +0 0 0 +0 0 0 +-0.00219384 0.00179744 -0.00375232 +0 0 0 +0 0 0 +-0.00690129 0.0079468 0.00535078 +0 0 0 +0 0 0 +0.00017198 -0.00910768 0.00467808 +0 0 0 +0 0 0 +-0.00634841 -0.00477623 -0.00380467 +0 0 0 +0 0 0 +0.00133153 -0.0059827 -0.00504477 +0 0 0 +0 0 0 +-0.00430244 0.0129161 0.00239997 +0 0 0 +0 0 0 +-0.00653367 0.00107805 -0.0130591 +0 0 0 +0 0 0 +-0.00474991 -0.0090749 -0.0041393 +0 0 0 +0 0 0 +-0.00241338 -0.00945678 0.00421321 +0 0 0 +0 0 0 +-0.00949361 -0.00939561 4.8179e-05 +0 0 0 +0 0 0 +0.00626106 0.00213605 -0.00219957 +0 0 0 +0 0 0 +-0.00376815 0.0090755 0.00511605 +0 0 0 +0 0 0 +-0.00447132 -0.000220265 -0.00298141 +0 0 0 +0 0 0 +0.000745011 0.00206621 0.00441078 +0 0 0 +0 0 0 +0.0102733 -0.00412785 0.00410222 +0 0 0 +0 0 0 +0.00360848 -0.00402273 -0.000746735 +0 0 0 +0 0 0 +0.00746014 0.00899694 -0.0134584 +0 0 0 +0 0 0 +0.00539365 -0.00126786 -0.00533281 +0 0 0 +0 0 0 +0.000201233 -0.00723488 0.00651435 +0 0 0 +0 0 0 +-0.00173645 0.0153581 0.00261489 +0 0 0 +0 0 0 +-0.00599782 -0.00428004 -0.000143669 +0 0 0 +0 0 0 +-0.00385636 0.0049054 0.00167299 +0 0 0 +0 0 0 +-0.000259804 -0.00526562 -0.00875804 +0 0 0 +0 0 0 +-0.0043669 0.00533465 0.00619663 +0 0 0 +0 0 0 +-1.55116e-05 -0.00285167 0.00319511 +0 0 0 +0 0 0 +-0.00521923 0.00560276 0.00942748 +0 0 0 +0 0 0 +0.0108202 0.000175836 -0.000185343 +0 0 0 +0 0 0 +-0.00212986 -0.00169513 0.00530598 +0 0 0 +0 0 0 +0.000363441 -0.0060767 -0.005465 +0 0 0 +0 0 0 +0.0101713 0.00244951 -0.00713465 +0 0 0 +0 0 0 +-0.00838637 0.0039302 -0.00185564 +0 0 0 +0 0 0 +0.00141554 -0.00437349 0.00569813 +0 0 0 +0 0 0 +-0.0039811 -0.00280294 0.00262114 +0 0 0 +0 0 0 +-0.00400322 0.00542208 0.00508549 +0 0 0 +0 0 0 +0.0100751 -0.00585201 -0.00463947 +0 0 0 +0 0 0 +-0.00199921 -0.0060068 -0.00381233 +0 0 0 +0 0 0 +-0.0110949 -0.00229428 -0.00284215 +0 0 0 +0 0 0 +0.00213449 0.00121657 0.00413121 +0 0 0 +0 0 0 +0.00383646 0.00514739 -0.0042205 +0 0 0 +0 0 0 +-0.0138627 0.00386019 -0.00174507 +0 0 0 +0 0 0 +0.000985244 -0.00173199 -0.0027879 +0 0 0 +0 0 0 +-0.00414753 0.00159845 0.0140703 +0 0 0 +0 0 0 +0.00521038 0.00703491 0.00261242 +0 0 0 +0 0 0 +0.00171624 0.00334721 -0.00399361 +0 0 0 +0 0 0 +-0.00341361 0.00249506 -0.00875424 +0 0 0 +0 0 0 +-0.00151917 -0.0129792 -0.000948598 +0 0 0 +0 0 0 +-0.000554986 0.00239804 0.00680182 +0 0 0 +0 0 0 +0.0113353 -0.0015979 -0.004464 +0 0 0 +0 0 0 +-0.00748076 -0.00433667 -0.00525681 +0 0 0 +0 0 0 +0.00349191 0.00795602 -0.000800224 +0 0 0 +0 0 0 +-0.00531439 0.00216725 0.00226485 +0 0 0 +0 0 0 +0.0136866 0.00306299 -0.00109613 +0 0 0 +0 0 0 +0.00598406 -0.00392106 0.0170531 +0 0 0 +0 0 0 +0.00403592 -0.00368901 0.00320945 +0 0 0 +0 0 0 +0.0036205 -0.00556539 -0.00198205 +0 0 0 +0 0 0 +-0.000840349 0.00848007 -0.0040412 +0 0 0 +0 0 0 +-0.00480765 0.00815207 -0.00245005 +0 0 0 +0 0 0 +-0.000278064 -0.00232045 0.00779664 +0 0 0 +0 0 0 +-0.00176203 -0.00320255 0.00373226 +0 0 0 +0 0 0 +0.00444392 -0.00370352 0.00473972 +0 0 0 +0 0 0 +0.000131495 0.0020028 -0.00140803 +0 0 0 +0 0 0 +-0.00755526 0.000769954 0.00504113 +0 0 0 +0 0 0 +-0.0122574 0.0074683 0.00139079 +0 0 0 +0 0 0 +0.00523569 0.00256379 0.011097 +0 0 0 +0 0 0 +-0.000944271 0.00510882 -0.00305778 +0 0 0 +0 0 0 +0.00380519 0.000803686 0.0139614 +0 0 0 +0 0 0 +0.00473881 0.00692148 -0.00141251 +0 0 0 +0 0 0 +0.00197562 0.00833919 -0.000823374 +0 0 0 +0 0 0 +-0.00923064 -0.00456113 -0.00523267 +0 0 0 +0 0 0 +0.007301 0.00165144 -0.00250631 +0 0 0 +0 0 0 +-0.00477963 0.0067898 -0.00160161 +0 0 0 +0 0 0 +-0.012516 -0.0052418 0.00839902 +0 0 0 +0 0 0 +0.00444699 -0.0102143 -0.00771269 +0 0 0 +0 0 0 +0.00409276 0.00234007 0.000916312 +0 0 0 +0 0 0 +0.00526719 -0.0185264 0.00325041 +0 0 0 +0 0 0 +0.00880466 0.00115263 -0.00446445 +0 0 0 +0 0 0 +-0.00670686 -0.00806671 0.00145852 +0 0 0 +0 0 0 +-0.00474324 -0.00648036 -0.00467019 +0 0 0 +0 0 0 +-0.00273532 -0.00396023 0.0137113 +0 0 0 +0 0 0 +0.0106414 0.00195623 -0.00958807 +0 0 0 +0 0 0 +-0.00208171 0.00647457 0.0136989 +0 0 0 +0 0 0 +-0.00277054 0.00697185 -0.000786607 +0 0 0 +0 0 0 +0.00443445 -7.24378e-05 0.012928 +0 0 0 +0 0 0 +-0.00665372 0.00161258 -0.00438756 +0 0 0 +0 0 0 +0.00491655 0.000643814 -0.00301866 +0 0 0 +0 0 0 +0.00497501 0.00911598 -0.00288485 +0 0 0 +0 0 0 +0.0137355 -0.000897699 0.00214739 +0 0 0 +0 0 0 +-0.00992127 -0.0115933 0.00142412 +0 0 0 +0 0 0 +0.010838 0.00745001 0.00533567 +0 0 0 +0 0 0 +0.00487711 -0.00411243 0.00792683 +0 0 0 +0 0 0 +-0.00617018 0.00341602 0.00568542 +0 0 0 +0 0 0 +-0.00648836 0.00118417 0.000778898 +0 0 0 +0 0 0 +0.0116769 -0.00494425 -0.0060414 +0 0 0 +0 0 0 +-0.00154938 -0.00822016 -0.0050833 +0 0 0 +0 0 0 +-0.00104108 0.00444053 -0.00407523 +0 0 0 +0 0 0 +-0.00423669 -0.00203121 0.00542422 +0 0 0 +0 0 0 +-0.00225517 0.00356842 -0.00501592 +0 0 0 +0 0 0 +0.00742022 -0.00558255 0.00207504 +0 0 0 +0 0 0 +0.00255928 -0.00463011 0.00157302 +0 0 0 +0 0 0 +-0.003772 -0.0144524 0.00145796 +0 0 0 +0 0 0 +0.00647517 -0.0100065 0.00908599 +0 0 0 +0 0 0 +-0.00513477 0.0070015 -0.00977665 +0 0 0 +0 0 0 +0.00615323 0.00135278 -0.000273292 +0 0 0 +0 0 0 +3.05568e-05 -0.00373847 -0.00697973 +0 0 0 +0 0 0 +-0.006153 0.00864248 0.00112156 +0 0 0 +0 0 0 +-0.00568615 -0.00401322 -0.0124605 +0 0 0 +0 0 0 +-0.00137967 0.0132382 -0.00871058 +0 0 0 +0 0 0 +0.00749187 0.00809359 0.0027655 +0 0 0 +0 0 0 +0.00344337 -0.000858053 -0.00261067 +0 0 0 +0 0 0 +0.00408897 -0.000775449 -0.00265952 +0 0 0 +0 0 0 +-0.00655454 -4.75993e-05 -0.00105503 +0 0 0 +0 0 0 +0.00816401 0.0113557 0.00755355 +0 0 0 +0 0 0 +0.00593666 0.00975993 0.00388305 +0 0 0 +0 0 0 +0.00275357 0.00385358 -0.00277543 +0 0 0 +0 0 0 +4.33332e-05 -0.00510193 0.008179 +0 0 0 +0 0 0 +-0.00872919 0.000734027 -0.00378913 +0 0 0 +0 0 0 +0.00617901 0.00769192 0.00419363 +0 0 0 +0 0 0 +-0.00109342 0.00751958 -0.00120446 +0 0 0 +0 0 0 +-0.00048848 -0.00316227 -0.00100535 +0 0 0 +0 0 0 +0.0071404 0.00331869 0.00237351 +0 0 0 +0 0 0 +-0.00528961 -0.00181138 0.00689482 +0 0 0 +0 0 0 +-0.00155324 0.00337207 -0.00375005 +0 0 0 +0 0 0 +-0.00495499 -0.000730756 -0.00124974 +0 0 0 +0 0 0 +0.00398968 0.0038799 0.0151003 +0 0 0 +0 0 0 +-0.00112601 -0.01042 -0.00604923 +0 0 0 +0 0 0 +0.00749994 0.016104 0.00779907 +0 0 0 +0 0 0 +-0.000534727 0.0124048 -0.00376745 +0 0 0 +0 0 0 +-0.00622813 0.00463624 0.00581452 +0 0 0 +0 0 0 +-0.00890926 -0.00442707 0.000775332 +0 0 0 +0 0 0 +-0.0026075 0.00403578 -0.00156429 +0 0 0 +0 0 0 +-0.00890408 0.00562807 -0.00448763 +0 0 0 +0 0 0 +0.00216716 -0.000597816 -3.25555e-05 +0 0 0 +0 0 0 +0.0106718 -0.00254772 0.00601397 +0 0 0 +0 0 0 +-0.00210315 0.010036 -0.00683073 +0 0 0 +0 0 0 +-0.00412363 -0.00501735 2.39248e-05 +0 0 0 +0 0 0 +0.00380111 0.00617459 -0.00894091 +0 0 0 +0 0 0 +2.74765e-05 0.00231631 0.00269336 +0 0 0 +0 0 0 +0.00811216 0.00334474 -0.00424563 +0 0 0 +0 0 0 +0.00523019 0.00516382 0.00493048 +0 0 0 +0 0 0 +-0.00872068 -0.00338244 -0.00143776 +0 0 0 +0 0 0 +-0.00513753 0.000501527 0.00871178 +0 0 0 +0 0 0 +0.00268232 0.00785662 -0.0110786 +0 0 0 +0 0 0 +-0.00708066 -0.00182925 0.00255259 +0 0 0 +0 0 0 +0.00574471 -0.00937093 0.00195592 +0 0 0 +0 0 0 +-0.0207558 0.00424519 -0.00411212 +0 0 0 +0 0 0 +-0.00269112 -5.50584e-05 0.0090933 +0 0 0 +0 0 0 +0.00649523 -0.00522534 0.0119984 +0 0 0 +0 0 0 +0.00184653 -0.00156135 0.00531749 +0 0 0 +0 0 0 +0.00455145 0.00165888 0.00475326 +0 0 0 +0 0 0 +0.00134256 -0.00393319 0.00145788 +0 0 0 +0 0 0 +-0.00820249 -0.00236175 0.00256002 +0 0 0 +0 0 0 +-0.00193078 -0.00184435 0.005038 +0 0 0 +0 0 0 +-0.0090793 0.0147179 0.00467211 +0 0 0 +0 0 0 +-0.0116564 0.00360824 -0.00770429 +0 0 0 +0 0 0 +0.00311589 0.00840098 0.0109078 +0 0 0 +0 0 0 +0.00716835 -0.00385999 -0.00127767 +0 0 0 +0 0 0 +0.00258053 -0.00080086 -0.00473543 +0 0 0 +0 0 0 +-0.00123194 0.00359063 -0.00066747 +0 0 0 +0 0 0 +-0.00951223 0.00627194 -0.0150627 +0 0 0 +0 0 0 +0.00486615 -0.00159079 -0.00148924 +0 0 0 +0 0 0 +0.00314454 -0.00596072 0.00406933 +0 0 0 +0 0 0 +0.00486675 0.00491107 -0.00886611 +0 0 0 +0 0 0 +0.000734497 0.000297587 -0.00596506 +0 0 0 +0 0 0 +-0.00161904 -0.00142299 0.00634615 +0 0 0 +0 0 0 +0.00675008 -0.0109899 0.000388379 +0 0 0 +0 0 0 +0.00144554 0.00213518 0.00559968 +0 0 0 +0 0 0 +-0.000720239 0.0134748 -0.00869992 +0 0 0 +0 0 0 +0.00717222 0.00113444 0.0055613 +0 0 0 +0 0 0 +0.00781443 0.000444542 0.0030511 +0 0 0 +0 0 0 +0.00221679 -0.000130216 -0.00548201 +0 0 0 +0 0 0 +0.00171526 0.00734596 0.00203386 +0 0 0 +0 0 0 +-0.0039064 -0.0104554 0.000399374 +0 0 0 +0 0 0 +0.00584727 0.00144045 0.000274483 +0 0 0 +0 0 0 +0.00516783 0.00426457 -0.0143043 +0 0 0 +0 0 0 +-0.00474601 -0.00235291 0.000397881 +0 0 0 +0 0 0 +0.00755857 0.00188103 0.00320434 +0 0 0 +0 0 0 +-0.00426726 -0.00109589 0.0165226 +0 0 0 +0 0 0 +0.00713365 -4.55887e-05 0.00195486 +0 0 0 +0 0 0 +0.00158311 -0.00927924 -0.00230793 +0 0 0 +0 0 0 +0.00620242 0.011783 -0.00438166 +0 0 0 +0 0 0 +-0.00539693 -0.00421021 -0.00527274 +0 0 0 +0 0 0 +0.000164041 0.00265239 0.00169114 +0 0 0 +0 0 0 +0.0119003 -0.000456783 -0.00861385 +0 0 0 +0 0 0 +0.00273708 -0.00317232 0.000571188 +0 0 0 +0 0 0 +-0.00277059 0.00613508 0.00955964 +0 0 0 +0 0 0 +6.20349e-05 0.000759368 -0.0112123 +0 0 0 +0 0 0 +0.00179608 -0.00155297 0.00512596 +0 0 0 +0 0 0 +0.000420892 0.0150032 -0.00647116 +0 0 0 +0 0 0 +0.00518406 -0.000423618 0.00292132 +0 0 0 +0 0 0 +-0.00573205 0.00112254 -0.000273207 +0 0 0 +0 0 0 +-3.81649e-05 0.00337933 -0.004071 +0 0 0 +0 0 0 +-0.000274954 0.00571913 -0.00981177 +0 0 0 +0 0 0 +-0.00359237 0.000524398 -0.000719584 +0 0 0 +0 0 0 +-0.00982088 0.00729321 -0.00721955 +0 0 0 +0 0 0 +-0.0113816 0.000116968 0.0111103 +0 0 0 +0 0 0 +0.00536528 -0.00558504 0.0092849 +0 0 0 +0 0 0 +0.00240374 0.000793927 -0.000829274 +0 0 0 +0 0 0 +0.0003959 0.0161029 -0.0123399 +0 0 0 +0 0 0 +0.00659893 -0.00457911 0.00316985 +0 0 0 +0 0 0 +-0.00396848 -0.00862119 -0.00176495 +0 0 0 +0 0 0 +-0.00423259 0.00311431 0.00191266 +0 0 0 +0 0 0 +-6.71786e-05 0.00323088 -0.00127701 +0 0 0 +0 0 0 +-0.00126559 0.000966813 -0.00750536 +0 0 0 +0 0 0 +-0.000425813 -0.00600583 -0.00668664 +0 0 0 +0 0 0 +0.000993072 -3.30014e-05 -0.00281287 +0 0 0 +0 0 0 +-0.00388765 0.00208246 -0.00637908 +0 0 0 +0 0 0 +-0.0102478 0.00383845 -0.00605035 +0 0 0 +0 0 0 +-0.00145633 -0.00272743 -0.00330614 +0 0 0 +0 0 0 +0.0038254 0.00343765 -0.00924427 +0 0 0 +0 0 0 +0.0029194 -0.00173355 0.0082147 +0 0 0 +0 0 0 +0.00389164 -0.00281645 0.00401902 +0 0 0 +0 0 0 +0.00132406 0.00645971 -0.00193459 +0 0 0 +0 0 0 +-0.00443555 -0.00367306 0.00211401 +0 0 0 +0 0 0 +0.00361644 -0.00554034 -0.000556487 +0 0 0 +0 0 0 +-0.00816652 -0.00301106 0.00159141 +0 0 0 +0 0 0 +0.000922533 0.00551613 -0.0034803 +0 0 0 +0 0 0 +-0.00448133 -0.00768579 -0.00542865 +0 0 0 +0 0 0 +-0.00897442 -0.00813054 0.00343739 +0 0 0 +0 0 0 +0.0112315 -0.00526866 -0.00205654 +0 0 0 +0 0 0 +0.00598647 -0.00469249 0.0135034 +0 0 0 +0 0 0 +0.00238385 0.00263148 0.00488815 +0 0 0 +0 0 0 +0.000201851 -0.00658192 -0.00837458 +0 0 0 +0 0 0 +-0.0129833 0.00404143 -0.0103602 +0 0 0 +0 0 0 +-0.00353081 0.00654926 -0.000838028 +0 0 0 +0 0 0 +-0.00206083 0.00264097 -0.00883039 +0 0 0 +0 0 0 +-0.0199792 0.00615182 -0.00858546 +0 0 0 +0 0 0 +0.0131274 0.00202401 -0.000880445 +0 0 0 +0 0 0 +-0.00237159 -0.00948707 0.00149959 +0 0 0 +0 0 0 +0.00241635 0.00267771 -0.000176131 +0 0 0 +0 0 0 +0.00466032 0.00565396 -0.00435013 +0 0 0 +0 0 0 +0.000495749 0.00112638 0.00391566 +0 0 0 +0 0 0 +0.00235042 0.00579774 0.00742377 +0 0 0 +0 0 0 +0.00335742 0.00318086 8.41622e-05 +0 0 0 +0 0 0 +-0.00426161 0.00155765 -0.00239891 +0 0 0 +0 0 0 +-0.00645769 -0.00152078 -0.00508459 +0 0 0 +0 0 0 +0.00171664 0.00734575 0.00876927 +0 0 0 +0 0 0 +-0.00683414 -0.012482 0.00482593 +0 0 0 +0 0 0 +-0.0087467 0.00263012 -0.00581131 +0 0 0 +0 0 0 +-0.00326845 -0.00187102 0.00124958 +0 0 0 +0 0 0 +-0.00513068 -0.000512351 0.000603066 +0 0 0 +0 0 0 +-0.00508731 -0.0020882 -0.00178493 +0 0 0 +0 0 0 +-0.00647826 -0.00178114 -0.0034949 +0 0 0 +0 0 0 +0.00400768 0.00141598 -0.00496786 +0 0 0 +0 0 0 +-0.00716939 0.00236964 -0.00102244 +0 0 0 +0 0 0 +-0.000564689 0.000163341 0.00357506 +0 0 0 +0 0 0 +-0.0111344 -0.00589656 0.00855062 +0 0 0 +0 0 0 +0.0103814 0.000813909 -0.013441 +0 0 0 +0 0 0 +0.0012136 0.0121394 0.00982309 +0 0 0 +0 0 0 +-0.00287196 0.00225899 -0.00108555 +0 0 0 +0 0 0 +-0.00196389 0.00432086 0.00501563 +0 0 0 +0 0 0 +-0.00299923 -0.00102258 -0.00351208 +0 0 0 +0 0 0 +0.00140759 -0.00436262 0.00199213 +0 0 0 +0 0 0 +-0.00274136 -0.00299786 -0.000191826 +0 0 0 +0 0 0 +0.00477441 -0.0100246 0.00471075 +0 0 0 +0 0 0 +0.00389904 0.00182929 -0.00386228 +0 0 0 +0 0 0 +0.000922772 -0.00512827 0.004667 +0 0 0 +0 0 0 +-0.00445715 0.00794886 -0.00728157 +0 0 0 +0 0 0 +0.00881122 -0.0161461 -0.00140791 +0 0 0 +0 0 0 +-0.00815015 0.00822859 -0.0128629 +0 0 0 +0 0 0 +-6.82674e-06 -0.00306171 0.00621439 +0 0 0 +0 0 0 +0.00369373 -0.0010271 0.00799434 +0 0 0 +0 0 0 +0.0132349 -0.000776803 -0.00606303 +0 0 0 +0 0 0 +0.000634928 -0.000281338 -0.012283 +0 0 0 +0 0 0 +-0.00644853 0.00306387 -0.010262 +0 0 0 +0 0 0 +-0.00212269 0.0036937 0.00533351 +0 0 0 +0 0 0 +0.00762542 -0.0021037 -0.00886201 +0 0 0 +0 0 0 +-0.0063626 -0.00563334 -0.0159235 +0 0 0 +0 0 0 +-0.00671488 0.00303675 0.0056239 +0 0 0 +0 0 0 +0.00750959 7.6692e-05 -0.00090799 +0 0 0 +0 0 0 +-0.0104471 0.00626451 -0.00326013 +0 0 0 +0 0 0 +-0.00836174 -0.001506 0.0021701 +0 0 0 +0 0 0 +-0.00440654 -0.00706568 -0.00848981 +0 0 0 +0 0 0 +-0.0100327 0.00672638 0.000298856 +0 0 0 +0 0 0 +0.009307 -0.00452801 -0.00688817 +0 0 0 +0 0 0 +0.00039989 0.00138093 -0.0193926 +0 0 0 +0 0 0 +0.0065403 -0.000380169 0.00320791 +0 0 0 +0 0 0 +-0.00315648 0.0072228 -0.0003275 +0 0 0 +0 0 0 +-0.0117857 -0.00589439 0.00195353 +0 0 0 +0 0 0 +0.00580987 -0.00343652 0.000966513 +0 0 0 +0 0 0 +-0.00448846 0.00277202 0.00742759 +0 0 0 +0 0 0 +-0.0114456 -0.00549094 -0.00280814 +0 0 0 +0 0 0 +-0.00327284 -0.00379359 0.0230008 +0 0 0 +0 0 0 +0.00614033 0.0127026 -0.00418378 +0 0 0 +0 0 0 +0.00554789 0.00184763 0.00266543 +0 0 0 +0 0 0 +0.00096221 0.00180696 0.00193641 +0 0 0 +0 0 0 +0.0140344 -0.00313163 0.000820456 +0 0 0 +0 0 0 +0.000117658 -0.0121214 -0.0054652 +0 0 0 +0 0 0 +-0.00183439 -0.00668513 0.00617271 +0 0 0 +0 0 0 +-0.00175261 0.0049828 -0.00995336 +0 0 0 +0 0 0 +-0.0056706 -0.00145515 -0.00606375 +0 0 0 +0 0 0 +0.00234411 -0.0118614 -0.00432863 +0 0 0 +0 0 0 +0.00998704 -0.00989919 0.00802651 +0 0 0 +0 0 0 +0.00486571 -0.0127314 0.0025783 +0 0 0 +0 0 0 +-0.00474719 0.00615223 0.00521325 +0 0 0 +0 0 0 +-0.00652802 0.0058852 0.00376914 +0 0 0 +0 0 0 +0.0091372 0.00450637 -0.00687716 +0 0 0 +0 0 0 +0.0041062 -0.00828464 0.00900524 +0 0 0 +0 0 0 +-0.00607062 -0.000622962 0.00315057 +0 0 0 +0 0 0 +0.00845301 -0.0065166 0.0018492 +0 0 0 +0 0 0 +0.0047877 0.00854886 0.00139394 +0 0 0 +0 0 0 +-0.0158224 -0.00143655 -0.00611237 +0 0 0 +0 0 0 +0.0043129 -0.00301445 0.00440395 +0 0 0 +0 0 0 +-0.00806805 0.00203253 0.00719313 +0 0 0 +0 0 0 +-0.00524786 -0.0130403 0.00655455 +0 0 0 +0 0 0 +-0.000175413 -0.00964908 0.00232741 +0 0 0 +0 0 0 +0.00368534 0.00590777 0.00288669 +0 0 0 +0 0 0 +0.00443607 -0.013501 0.00850765 +0 0 0 +0 0 0 +-0.00993035 0.00983662 0.00363892 +0 0 0 +0 0 0 +-0.00996917 -0.00152383 -0.00135017 +0 0 0 +0 0 0 +0.00526837 0.00607015 -0.0013118 +0 0 0 +0 0 0 +0.00609916 -0.0082983 -0.000264844 +0 0 0 +0 0 0 +-0.00387733 0.00590646 0.00393398 +0 0 0 +0 0 0 +-0.00846331 0.00206114 0.00653824 +0 0 0 +0 0 0 +0.00113531 -0.00612903 -0.00840422 +0 0 0 +0 0 0 +-0.00672038 -0.00109449 -0.000930985 +0 0 0 +0 0 0 +-0.000268656 0.00556976 0.0101456 +0 0 0 +0 0 0 +-0.00513066 -0.000557194 0.00731675 +0 0 0 +0 0 0 +-0.00906247 0.0105676 -0.00155757 +0 0 0 +0 0 0 +0.00179599 -0.0147625 0.00343308 +0 0 0 +0 0 0 +-0.0120912 -0.00666447 -0.0157528 +0 0 0 +0 0 0 +0.00373289 -0.00131986 0.00374035 +0 0 0 +0 0 0 +-0.00406617 -0.00176933 -0.00446159 +0 0 0 +0 0 0 +0.00102568 -0.00358104 0.0010095 +0 0 0 +0 0 0 +0.00415779 -0.00189882 0.00129712 +0 0 0 +0 0 0 +0.00426023 0.00663336 0.00123081 +0 0 0 +0 0 0 +-0.00660598 -0.00805062 0.00335618 +0 0 0 +0 0 0 +9.70251e-05 0.00534526 0.0105646 +0 0 0 +0 0 0 +-0.00764076 7.84859e-05 0.000601265 +0 0 0 +0 0 0 +-0.00578001 0.00734675 -0.0111852 +0 0 0 +0 0 0 +-0.0137841 0.0086404 0.0041699 +0 0 0 +0 0 0 +-0.000640876 0.00462616 -0.00215098 +0 0 0 +0 0 0 +-0.00431746 -0.00526841 -0.00733081 +0 0 0 +0 0 0 +0.00568041 -0.00135586 -0.00337801 +0 0 0 +0 0 0 +-0.00466626 -0.00185631 -0.000236038 +0 0 0 +0 0 0 +0.000291314 -0.0096219 -0.00859722 +0 0 0 +0 0 0 +-0.00680453 0.000138534 -0.00281652 +0 0 0 +0 0 0 +0.00259367 -0.00481295 -0.00671646 +0 0 0 +0 0 0 +0.00967184 -0.00861731 -0.00200471 +0 0 0 +0 0 0 +-0.00249749 -0.000653724 0.0102747 +0 0 0 +0 0 0 +-0.00141921 -0.00746222 -0.000300505 +0 0 0 +0 0 0 +0.014133 -0.00140395 0.00618404 +0 0 0 +0 0 0 +-0.00627151 -0.000221657 0.00293184 +0 0 0 +0 0 0 +0.00283671 0.00444701 0.0118262 +0 0 0 +0 0 0 +-0.00194982 0.00503133 -0.00311647 +0 0 0 +0 0 0 +0.00683718 -0.0020753 -0.00837432 +0 0 0 +0 0 0 +-0.0039261 -0.00339169 -0.00228657 +0 0 0 +0 0 0 +0.00891401 -0.0122539 0.00349816 +0 0 0 +0 0 0 +-0.00657787 0.011347 -0.00660283 +0 0 0 +0 0 0 +-0.00360846 -0.00227785 0.00821676 +0 0 0 +0 0 0 +0.000577046 0.00478593 0.00807533 +0 0 0 +0 0 0 +0.000932683 -0.00611472 0.00246673 +0 0 0 +0 0 0 +0.000135176 -0.0050431 -0.00584669 +0 0 0 +0 0 0 +0.00353952 0.0116529 0.00986702 +0 0 0 +0 0 0 +-0.00202005 -0.00421147 0.00344777 +0 0 0 +0 0 0 +-0.00844195 -0.0027405 0.00230446 +0 0 0 +0 0 0 +0.0108843 0.00743999 0.00408008 +0 0 0 +0 0 0 +-0.00648177 0.00332184 -0.013516 +0 0 0 +0 0 0 +0.0020348 -0.0019706 0.00143609 +0 0 0 +0 0 0 +-0.00894585 -0.00826925 -0.00178079 +0 0 0 +0 0 0 +0.00553935 -0.00267986 -0.00253104 +0 0 0 +0 0 0 +-0.00305134 0.00583623 -0.00739897 +0 0 0 +0 0 0 +-0.00394194 -1.32329e-05 -0.00999173 +0 0 0 +0 0 0 +0.00893717 0.00478107 0.00887741 +0 0 0 +0 0 0 +-0.00696607 0.0129804 0.00478155 +0 0 0 +0 0 0 +0.0125157 0.00775603 -0.00541937 +0 0 0 +0 0 0 +0.00614587 0.000334967 -0.00582479 +0 0 0 +0 0 0 +0.00444609 -0.00452177 -0.0024907 +0 0 0 +0 0 0 +0.00568596 0.00355087 0.00307766 +0 0 0 +0 0 0 +-0.000212521 -0.000481007 -0.0120924 +0 0 0 +0 0 0 +-0.00856549 0.016597 -0.0106743 +0 0 0 +0 0 0 +-0.00512974 -0.000323899 -0.00282713 +0 0 0 +0 0 0 +-0.00806675 0.00163984 0.00195218 +0 0 0 +0 0 0 +-0.00391853 0.00907969 0.0101102 +0 0 0 +0 0 0 +-0.0117093 0.00218797 -0.00634259 +0 0 0 +0 0 0 +-0.00666481 -0.0023475 -0.00114939 +0 0 0 +0 0 0 +-0.000952004 -0.0081216 -0.00373511 +0 0 0 +0 0 0 +0.00418 0.00620319 0.00874108 +0 0 0 +0 0 0 +-7.3767e-05 -0.0119971 -0.00115849 +0 0 0 +0 0 0 +-0.000935112 0.0157036 0.0039211 +0 0 0 +0 0 0 +0.00816722 0.000493054 0.000442144 +0 0 0 +0 0 0 +-0.005006 -0.00687349 0.00381331 +0 0 0 +0 0 0 +0.000310294 -0.00275964 0.00844087 +0 0 0 +0 0 0 +-0.00473476 0.00293338 0.000272867 +0 0 0 +0 0 0 +0.00329065 0.00126441 -0.0105791 +0 0 0 +0 0 0 +-0.00923369 -0.000577163 0.0135639 +0 0 0 +0 0 0 +0.00360204 -0.00329445 0.00371009 +0 0 0 +0 0 0 +0.00146911 -0.0030003 -0.000371737 +0 0 0 +0 0 0 +-0.00593852 0.00952163 -0.00246423 +0 0 0 +0 0 0 +-0.00163578 -0.00898604 -0.00119719 +0 0 0 +0 0 0 +-0.00508426 -0.00863963 -0.0139428 +0 0 0 +0 0 0 +0.0044922 0.00527153 0.00707722 +0 0 0 +0 0 0 +0.00728348 0.00751253 -0.0099345 +0 0 0 +0 0 0 +8.86933e-05 0.0100147 0.00144436 +0 0 0 +0 0 0 +-0.00548055 0.00521455 -0.00424488 +0 0 0 +0 0 0 +-0.00677277 0.00641124 0.00166722 +0 0 0 +0 0 0 +-0.00591776 -0.00591525 -0.00190804 +0 0 0 +0 0 0 +-0.010253 -0.00353694 0.0116582 +0 0 0 +0 0 0 +-0.00499866 0.000927067 -0.0141683 +0 0 0 +0 0 0 +-0.00109298 0.0137397 0.000236658 +0 0 0 +0 0 0 +0.00156093 -0.0074586 -0.00435637 +0 0 0 +0 0 0 +0.00327797 0.00453993 0.00278183 +0 0 0 +0 0 0 +0.00847486 0.000165894 0.00423954 +0 0 0 +0 0 0 +-0.00545126 -0.00682817 -0.00616332 +0 0 0 +0 0 0 +-0.0052267 0.00262957 -0.00801376 +0 0 0 +0 0 0 +0.00153231 0.0077808 -0.000502868 +0 0 0 +0 0 0 +0.013594 -0.00233411 0.00275977 +0 0 0 +0 0 0 +-0.00144232 -0.00147976 0.00287727 +0 0 0 +0 0 0 +0.00292824 0.00278037 0.0104937 +0 0 0 +0 0 0 +-0.00122869 -0.00234407 0.000856831 +0 0 0 +0 0 0 +-0.00244242 -0.00868411 0.00718042 +0 0 0 +0 0 0 +-0.00457629 -0.0017378 0.01069 +0 0 0 +0 0 0 +-0.00628042 0.00138652 -0.00337252 +0 0 0 +0 0 0 +0.00218209 0.00152358 0.00909022 +0 0 0 +0 0 0 +0.00454225 -0.00382933 0.008091 +0 0 0 +0 0 0 +-0.00472447 0.00667049 -0.0103612 +0 0 0 +0 0 0 +-0.0049081 -5.49436e-05 0.00439868 +0 0 0 +0 0 0 +-0.00954798 -0.000201512 0.0065845 +0 0 0 +0 0 0 +-0.00324526 0.000595447 -0.00381746 +0 0 0 +0 0 0 +-0.00763434 -0.00090205 -0.00194541 +0 0 0 +0 0 0 +0.00198814 0.00578744 -0.000779862 +0 0 0 +0 0 0 +-0.000688198 0.0114949 0.00414261 +0 0 0 +0 0 0 +-0.00108493 -0.00313957 -0.00620111 +0 0 0 +0 0 0 +0.00245007 -0.00596181 -0.00800479 +0 0 0 +0 0 0 +-0.00721706 0.00712942 -0.00672955 +0 0 0 +0 0 0 +-0.000701501 0.00887472 0.00321059 +0 0 0 +0 0 0 +-0.0032013 -0.00177762 -0.0021149 +0 0 0 +0 0 0 +-0.000538408 0.00312436 -0.00860098 +0 0 0 +0 0 0 +0.0103738 -0.00722214 0.00250009 +0 0 0 +0 0 0 +0.013557 0.00157096 0.00472307 +0 0 0 +0 0 0 +-0.00963088 -0.00358138 -0.000814807 +0 0 0 +0 0 0 +0.0068548 -0.0082624 -0.00229619 +0 0 0 +0 0 0 +0.00126239 0.00171394 -0.00198714 +0 0 0 +0 0 0 +-0.0122449 -0.00594919 -0.0113161 +0 0 0 +0 0 0 +0.0069462 -0.000991259 0.00430971 +0 0 0 +0 0 0 +0.00169472 -0.00382775 0.00688429 +0 0 0 +0 0 0 +-0.00374482 0.0041494 -0.00349341 +0 0 0 +0 0 0 +0.00264077 0.0153205 0.00356993 +0 0 0 +0 0 0 +-0.0106711 0.00333664 0.00207975 +0 0 0 +0 0 0 +0.00625512 -0.00722697 0.00975507 +0 0 0 +0 0 0 +0.00179893 -0.00375372 0.0045664 +0 0 0 +0 0 0 +0.00585751 -0.00985737 -0.00727691 +0 0 0 +0 0 0 +0.00721199 0.00517744 0.00515994 +0 0 0 +0 0 0 +0.00205052 -0.000386251 -0.00486549 +0 0 0 +0 0 0 +0.00105364 0.0160452 -0.0113438 +0 0 0 +0 0 0 +-0.00785129 -0.00560388 0.00536809 +0 0 0 +0 0 0 +-0.00642731 0.00201075 0.00106536 +0 0 0 +0 0 0 +-0.00355987 -0.00454537 -0.00620665 +0 0 0 +0 0 0 +-0.00272062 0.00612653 -0.00733389 +0 0 0 +0 0 0 +0.000837009 0.00405052 0.00204501 +0 0 0 +0 0 0 +-0.00418927 0.00105216 0.0122133 +0 0 0 +0 0 0 +0.000370949 -0.00971165 -0.00541682 +0 0 0 +0 0 0 +0.00161635 -0.00208605 0.00673349 +0 0 0 +0 0 0 +-0.00633673 -0.00565576 0.00532704 +0 0 0 +0 0 0 +-0.00299303 -0.00601764 0.00182298 +0 0 0 +0 0 0 +-0.00267721 -0.00125627 0.000978926 +0 0 0 +0 0 0 +0.00413449 0.0102757 0.0098778 +0 0 0 +0 0 0 +-0.00425208 0.00382595 -0.00677453 +0 0 0 +0 0 0 +0.00368786 0.00387968 -0.000680429 +0 0 0 +0 0 0 +-0.000685776 -0.0101526 -0.00606549 +0 0 0 +0 0 0 +-0.00527371 0.00606997 -0.00407649 +0 0 0 +0 0 0 +-0.00258942 0.00450496 -0.00198127 +0 0 0 +0 0 0 +0.00653295 0.00131165 -0.00270486 +0 0 0 +0 0 0 +0.00493812 0.00132769 0.000128465 +0 0 0 +0 0 0 +0.00075122 -0.00602458 -0.00201613 +0 0 0 +0 0 0 +-0.00189207 -0.00687412 0.00115203 +0 0 0 +0 0 0 +-0.00651757 0.00568151 -0.0165829 +0 0 0 +0 0 0 +-0.00961899 0.0117321 -0.0069444 +0 0 0 +0 0 0 +-0.00758893 -0.00520547 -0.0091916 +0 0 0 +0 0 0 +0.00906655 -0.00257775 -0.00258799 +0 0 0 +0 0 0 +0.0016406 0.00645168 0.00414394 +0 0 0 +0 0 0 +0.00725697 -0.00285952 0.00654003 +0 0 0 +0 0 0 +-0.00124541 -0.0105508 -0.000232969 +0 0 0 +0 0 0 +-0.0113455 0.00627594 -0.00212383 +0 0 0 +0 0 0 +-0.00913005 0.000598554 0.00108706 +0 0 0 +0 0 0 +0.00247467 0.00681867 -0.0201172 +0 0 0 +0 0 0 +0.00445474 0.000621027 0.00108281 +0 0 0 +0 0 0 +0.00444071 0.00681441 0.00261679 +0 0 0 +0 0 0 +0.0104057 -0.00192148 -0.0061863 +0 0 0 +0 0 0 +-0.0100562 -0.0174935 -0.00504894 +0 0 0 +0 0 0 +-0.000868037 0.0109987 0.00378853 +0 0 0 +0 0 0 +-0.00153837 -0.00645715 0.00337686 +0 0 0 +0 0 0 +0.000652098 -0.00717923 -0.000676504 +0 0 0 +0 0 0 +0.000768651 0.00294557 0.0124985 +0 0 0 +0 0 0 +0.00208068 -0.000570303 0.00543658 +0 0 0 +0 0 0 +0.0047356 -1.66905e-05 0.00314702 +0 0 0 +0 0 0 +-0.0142203 -0.00441478 0.00502748 +0 0 0 +0 0 0 +0.00088405 -0.00368142 -0.0116246 +0 0 0 +0 0 0 +-0.0030213 0.00258623 -0.00522554 +0 0 0 +0 0 0 +0.00104885 -0.0044973 0.000401285 +0 0 0 +0 0 0 +0.00403851 0.00431153 -0.00274422 +0 0 0 +0 0 0 +0.00668549 -0.00486322 -0.000175412 +0 0 0 +0 0 0 +-0.00856369 -0.0082385 -0.00214151 +0 0 0 +0 0 0 +0.00205549 1.6055e-05 0.000233047 +0 0 0 +0 0 0 +0.000879169 -0.00332036 0.00987067 +0 0 0 +0 0 0 +0.00650941 -0.0113659 0.00203311 +0 0 0 +0 0 0 +0.00993201 0.00348225 -0.00291356 +0 0 0 +0 0 0 +0.00635113 -0.00217627 0.0135891 +0 0 0 +0 0 0 +-0.00970261 0.00374055 0.000610234 +0 0 0 +0 0 0 +-0.00896266 0.00239459 -0.00431661 +0 0 0 +0 0 0 +0.00518756 0.00775965 -0.00282974 +0 0 0 +0 0 0 +0.00559174 0.00554503 -0.00120576 +0 0 0 +0 0 0 +0.00849337 0.0080557 0.00380591 +0 0 0 +0 0 0 +0.000540323 -0.00643334 -0.0105604 +0 0 0 +0 0 0 +-0.00156245 -0.00758462 0.0125086 +0 0 0 +0 0 0 +-0.00794204 -0.00250733 -0.00542299 +0 0 0 +0 0 0 +-0.00355442 -0.00290071 0.00246224 +0 0 0 +0 0 0 +0.00155884 0.0142457 0.00301892 +0 0 0 +0 0 0 +-0.00353128 -0.0034646 -0.0076479 +0 0 0 +0 0 0 +0.00685036 0.0069627 -0.000990677 +0 0 0 +0 0 0 +0.00496553 0.00213154 0.00553894 +0 0 0 +0 0 0 +0.0040824 -0.00511406 -0.00680455 +0 0 0 +0 0 0 +0.00133804 0.00170121 0.00385896 +0 0 0 +0 0 0 +-0.00530041 0.00241698 0.00141916 +0 0 0 +0 0 0 +-0.00402113 -5.69676e-05 -0.013654 +0 0 0 +0 0 0 +0.00518423 -0.000940459 -0.00482009 +0 0 0 +0 0 0 +-0.000447888 0.0113943 0.00594572 +0 0 0 +0 0 0 +0.0103079 -0.00855626 0.00113081 +0 0 0 +0 0 0 +-0.00154618 -0.0033909 0.00952552 +0 0 0 +0 0 0 +0.00294382 0.0113649 0.00235659 +0 0 0 +0 0 0 +0.011293 0.0023728 -0.00162058 +0 0 0 +0 0 0 +0.00667087 0.00673575 0.00830204 +0 0 0 +0 0 0 +-0.00457327 0.00738199 -0.00752211 +0 0 0 +0 0 0 +0.00240177 0.00386395 -0.00885774 +0 0 0 +0 0 0 +0.00179201 -0.0039175 0.011268 +0 0 0 +0 0 0 +-0.00550549 -0.00299643 -0.0141434 +0 0 0 +0 0 0 +0.0110754 -0.0107651 -0.00455432 +0 0 0 +0 0 0 +-0.0012042 0.0109416 0.0073278 +0 0 0 +0 0 0 +-0.00462405 0.00272162 -0.00563186 +0 0 0 +0 0 0 +-0.00446361 0.00305647 -0.00557687 +0 0 0 +0 0 0 +-0.00479249 -0.0023906 -0.00537644 +0 0 0 +0 0 0 +0.000218472 -7.79049e-05 0.00022778 +0 0 0 +0 0 0 +0.00126681 0.0043772 0.00223408 +0 0 0 +0 0 0 +0.00266291 0.0121499 0.00253468 +0 0 0 +0 0 0 +0.00377818 -0.00403103 -0.00662095 +0 0 0 +0 0 0 +0.00405306 -0.010958 0.000944912 +0 0 0 +0 0 0 +0.00623464 0.0055801 0.00221952 +0 0 0 +0 0 0 +0.00134412 -0.00560573 -0.012621 +0 0 0 +0 0 0 +-0.00265205 0.000862359 -0.00481339 +0 0 0 +0 0 0 +-0.00283012 -0.00196254 0.000205237 +0 0 0 +0 0 0 +0.0022089 -0.0122849 0.00789778 +0 0 0 +0 0 0 +-0.00402984 -0.00335158 0.00521635 +0 0 0 +0 0 0 +0.0031057 0.00584977 -0.00154202 +0 0 0 +0 0 0 +-0.00725435 0.00117917 0.00998382 +0 0 0 +0 0 0 +-0.00247647 0.0105986 -0.00100717 +0 0 0 +0 0 0 +0.00435314 -0.00189825 -0.00404794 +0 0 0 +0 0 0 +-0.00423777 -0.00447855 0.00218047 +0 0 0 +0 0 0 +-0.00463711 -0.0064934 0.00910422 +0 0 0 +0 0 0 +-0.00489351 0.00603709 -0.00850901 +0 0 0 +0 0 0 +0.00913155 -0.00641446 -0.00127634 +0 0 0 +0 0 0 +-0.0116451 -0.00531628 1.97697e-05 +0 0 0 +0 0 0 +0.00114345 0.00287383 0.000625807 +0 0 0 +0 0 0 +-0.00984348 0.00225724 0.00653502 +0 0 0 +0 0 0 +0.0104313 0.000975994 0.00900033 +0 0 0 +0 0 0 +0.00412859 -0.00696284 -0.00344809 +0 0 0 +0 0 0 +0.00959936 -2.24428e-05 -0.00563236 +0 0 0 +0 0 0 +-0.00542279 0.00593008 -0.00736143 +0 0 0 +0 0 0 +-0.00701754 0.00746588 -0.00270905 +0 0 0 +0 0 0 +0.00366143 0.0146677 -0.00151267 +0 0 0 +0 0 0 +-0.00199028 0.000338197 -0.0089612 +0 0 0 +0 0 0 +0.00734889 0.0127305 0.00299241 +0 0 0 +0 0 0 +-0.00370063 -0.00702647 0.00105398 +0 0 0 +0 0 0 +-0.0064799 0.00426535 -0.00660373 +0 0 0 +0 0 0 +0.00861007 0.00490722 0.00809692 +0 0 0 +0 0 0 +-0.00848755 -0.00619738 8.01654e-05 +0 0 0 +0 0 0 +-0.00122198 0.00320425 0.00112039 +0 0 0 +0 0 0 +0.000434575 -0.0117803 0.000588467 +0 0 0 +0 0 0 +-0.00429954 -0.00424946 0.00588094 +0 0 0 +0 0 0 +-0.00461824 -0.00575993 0.00395219 +0 0 0 +0 0 0 +0.00156002 -0.00364309 0.00287154 +0 0 0 +0 0 0 +-0.0135449 0.00692636 -9.61048e-05 +0 0 0 +0 0 0 +0.00301329 -0.00522957 4.33841e-05 +0 0 0 +0 0 0 +-0.00904321 -0.000580172 0.0102671 +0 0 0 +0 0 0 +0.00608885 -0.00260786 -0.00779211 +0 0 0 +0 0 0 +-0.0109682 -0.00622208 0.00550355 +0 0 0 +0 0 0 +-0.00584322 -0.00192433 0.00412798 +0 0 0 +0 0 0 +0.00193331 -0.00661704 -0.00897714 +0 0 0 +0 0 0 +-0.00626029 -0.000182871 0.00196085 +0 0 0 +0 0 0 +-0.0111207 0.00524003 -0.00665566 +0 0 0 +0 0 0 +-0.00203529 -0.00437267 -0.0111891 +0 0 0 +0 0 0 +-0.0125389 -0.00695139 -0.0177612 +0 0 0 +0 0 0 +0.0004607 0.000634291 -0.00501973 +0 0 0 +0 0 0 +0.0125397 -0.00189651 0.0100675 +0 0 0 +0 0 0 +0.00744698 0.000593423 0.00318608 +0 0 0 +0 0 0 +0.00596042 0.00660071 -0.000200972 +0 0 0 +0 0 0 +-0.000684264 -0.00357128 0.00573146 +0 0 0 +0 0 0 +-0.00714149 -0.00380266 -0.0105187 +0 0 0 +0 0 0 +-0.00324607 -3.62298e-05 -0.0119682 +0 0 0 +0 0 0 +-0.000248704 0.00558754 -0.00294958 +0 0 0 +0 0 0 +-0.00101406 -0.00137475 -0.00399083 +0 0 0 +0 0 0 +0.00235001 -0.00549346 0.00546981 +0 0 0 +0 0 0 +0.00333524 0.00497436 0.00746926 +0 0 0 +0 0 0 +-0.00289261 -0.0117721 0.00207717 +0 0 0 +0 0 0 +-0.000553619 -0.00352906 0.00206203 +0 0 0 +0 0 0 +0.0033346 -0.0108761 0.00297936 +0 0 0 +0 0 0 +0.00129912 0.00127006 -0.00603469 +0 0 0 +0 0 0 +-0.003248 0.00948256 0.0102724 +0 0 0 +0 0 0 +0.00504204 0.000582048 0.00231035 +0 0 0 +0 0 0 +-3.21583e-05 0.00332244 -0.00738979 +0 0 0 +0 0 0 +0.00404996 0.00528683 0.00549738 +0 0 0 +0 0 0 +0.00557042 0.00010409 0.00102332 +0 0 0 +0 0 0 +-0.000978292 -0.00942745 -0.0102206 +0 0 0 +0 0 0 +-0.00247267 0.00139915 -0.00120953 +0 0 0 +0 0 0 +0.00750863 -0.00548896 -0.0052133 +0 0 0 +0 0 0 +-0.00950094 -0.00880348 -0.0122136 +0 0 0 +0 0 0 +0.0127548 0.00111406 0.00105907 +0 0 0 +0 0 0 +0.00065762 -0.00351666 0.00697727 +0 0 0 +0 0 0 +0.00126355 -0.0073842 0.00410429 +0 0 0 +0 0 0 +0.0109397 -0.000316843 0.00137756 +0 0 0 +0 0 0 +-0.00307203 0.00134143 0.00646261 +0 0 0 +0 0 0 +-0.00574242 -0.00884047 4.17237e-05 +0 0 0 +0 0 0 +-0.00982327 0.000547087 0.00466283 +0 0 0 +0 0 0 +0.00752131 -0.00193961 0.00157548 +0 0 0 +0 0 0 +4.92052e-05 -0.00519096 -0.000872564 +0 0 0 +0 0 0 +0.00351649 -0.000915721 0.000970035 +0 0 0 +0 0 0 +-0.00372029 -8.73932e-05 -0.0251831 +0 0 0 +0 0 0 +-0.00400627 0.00625105 0.00251951 +0 0 0 +0 0 0 +-0.000110909 0.00508744 0.00839358 +0 0 0 +0 0 0 +0.00611326 -0.00306524 -0.00142923 +0 0 0 +0 0 0 +0.00782981 -0.00340906 -0.00406922 +0 0 0 +0 0 0 +-0.000190903 -0.00154263 0.00536751 +0 0 0 +0 0 0 +-9.94415e-05 0.00185335 0.0155899 +0 0 0 +0 0 0 +0.00893775 -0.0111177 0.00320353 +0 0 0 +0 0 0 +0.00184548 0.00450993 0.00755911 +0 0 0 +0 0 0 +-0.00626532 0.0015126 -0.0110263 +0 0 0 +0 0 0 +-0.00035839 -0.0115278 0.00671803 +0 0 0 +0 0 0 +0.00852357 0.00775893 0.010656 +0 0 0 +0 0 0 +-0.000584206 0.000401975 -0.00237751 +0 0 0 +0 0 0 +-0.00940081 0.00181776 -0.00437106 +0 0 0 +0 0 0 +-0.00440958 -0.0045427 -0.00257425 +0 0 0 +0 0 0 +0.00571874 -0.00294865 0.000157917 +0 0 0 +0 0 0 +-0.00579852 0.0107731 -0.0143884 +0 0 0 +0 0 0 +0.00233874 -0.00914445 -0.00207198 +0 0 0 +0 0 0 +-0.0033589 0.000132715 0.000128613 +0 0 0 +0 0 0 +0.000811778 0.00193113 0.00242102 +0 0 0 +0 0 0 +-0.0104932 0.0121363 0.0043542 +0 0 0 +0 0 0 +0.00363498 -0.000453257 -0.00337384 +0 0 0 +0 0 0 +0.000497956 -0.00385239 0.00251496 +0 0 0 +0 0 0 +-0.0101862 0.00296493 0.00487328 +0 0 0 +0 0 0 +-0.00505561 -0.00775103 -0.00768213 +0 0 0 +0 0 0 +0.00885604 0.00566288 -0.00328645 +0 0 0 +0 0 0 +0.0062952 0.00830102 0.00216781 +0 0 0 +0 0 0 +0.00579276 -0.017033 -0.00568634 +0 0 0 +0 0 0 +-0.00612657 0.00302543 -0.00770251 +0 0 0 +0 0 0 +0.00724789 -0.00588417 0.00484509 +0 0 0 +0 0 0 +0.0109628 0.00160406 -6.15701e-05 +0 0 0 +0 0 0 +-0.0123403 0.00423709 0.0112484 +0 0 0 +0 0 0 +-0.0130442 -0.0040637 0.00195937 +0 0 0 +0 0 0 +-0.00541778 -0.00486646 -0.00326898 +0 0 0 +0 0 0 +0.00679057 -0.0118113 -0.00518252 +0 0 0 +0 0 0 +0.00691046 -0.00670298 0.00687358 +0 0 0 +0 0 0 +0.012726 0.00195975 0.00763887 +0 0 0 +0 0 0 +-0.000351368 0.000794639 -0.000284427 +0 0 0 +0 0 0 +0.00474338 -0.0021102 -0.00328862 +0 0 0 +0 0 0 +0.00992445 0.00399988 -0.0100021 +0 0 0 +0 0 0 +0.00158099 -0.00380202 0.00174893 +0 0 0 +0 0 0 +-0.00917731 0.00298031 -0.000751761 +0 0 0 +0 0 0 +-0.00622 -0.00997059 -0.0030176 +0 0 0 +0 0 0 +0.00353776 -0.00753062 0.00108322 +0 0 0 +0 0 0 +-0.00213755 -0.00172107 0.00208727 +0 0 0 +0 0 0 +-0.00536599 0.00249697 0.00304377 +0 0 0 +0 0 0 +-0.0105118 0.00646966 -0.00959603 +0 0 0 +0 0 0 +0.0093702 -0.00629446 -0.00262255 +0 0 0 +0 0 0 +-0.000617183 0.00415869 -0.0036036 +0 0 0 +0 0 0 +-0.00223882 0.00326023 -0.00867628 +0 0 0 +0 0 0 +-0.00954368 0.00272875 0.00128662 +0 0 0 +0 0 0 +-0.00305069 -0.0092019 -0.00149377 +0 0 0 +0 0 0 +-0.00625916 -0.000305357 0.00722146 +0 0 0 +0 0 0 +-0.000873512 -0.00531736 -0.00484429 +0 0 0 +0 0 0 +-0.00855271 0.00148357 -0.00456348 +0 0 0 +0 0 0 +0.00114646 -0.00586984 -0.00397302 +0 0 0 +0 0 0 +-0.00250203 -0.0131919 -0.00736948 +0 0 0 +0 0 0 +-0.0110194 0.00211562 0.00727081 +0 0 0 +0 0 0 +0.00369183 0.00723357 -0.0017431 +0 0 0 +0 0 0 +0.000749892 0.0050456 0.00258543 +0 0 0 +0 0 0 +-0.0112303 0.00520155 0.00358491 +0 0 0 +0 0 0 +0.00349427 0.00795006 -0.00104609 +0 0 0 +0 0 0 +-0.00359159 -0.000510004 -0.00498805 +0 0 0 +0 0 0 +0.00578254 -0.00257889 -0.014409 +0 0 0 +0 0 0 +-0.00148936 -0.0171766 0.00489431 +0 0 0 +0 0 0 +0.0019544 -0.00401692 0.00123856 +0 0 0 +0 0 0 +-0.00792634 0.00296971 0.00345211 +0 0 0 +0 0 0 +-0.00900034 0.00162356 -0.00402187 +0 0 0 +0 0 0 +-0.00700408 0.00223818 0.000530966 +0 0 0 +0 0 0 +0.00751505 0.000119458 -0.00816129 +0 0 0 +0 0 0 +-0.0095314 -0.00361229 0.00538326 +0 0 0 +0 0 0 +0.00527518 -0.00670344 0.0123899 +0 0 0 +0 0 0 +-0.00414731 0.00463389 0.00481318 +0 0 0 +0 0 0 +0.00472485 -0.00412876 0.00242349 +0 0 0 +0 0 0 +0.00296657 -0.00213154 0.00303298 +0 0 0 +0 0 0 +0.00570969 -0.00609129 0.00413249 +0 0 0 +0 0 0 +0.00554785 -0.013248 0.00513741 +0 0 0 +0 0 0 +-0.00488045 0.0166785 0.0029506 +0 0 0 +0 0 0 +0.00596813 -0.00338202 -0.00889505 +0 0 0 +0 0 0 +-0.00881893 0.0234853 -0.00535284 +0 0 0 +0 0 0 +0.0024038 0.00235989 -0.00685012 +0 0 0 +0 0 0 +-0.00727718 0.00232433 -2.60207e-06 +0 0 0 +0 0 0 +0.0084121 -0.00505206 0.0114788 +0 0 0 +0 0 0 +-0.00408904 0.00101735 0.0021195 +0 0 0 +0 0 0 +-0.00492968 -0.00517093 -0.0034694 +0 0 0 +0 0 0 +0.00301953 -0.00856948 -0.0132677 +0 0 0 +0 0 0 +-0.00860963 -0.00217475 0.00292601 +0 0 0 +0 0 0 +0.0118756 -0.00375922 0.005592 +0 0 0 +0 0 0 +0.00793046 -0.00574258 -0.00316797 +0 0 0 +0 0 0 +-0.0123175 -0.0049586 0.00328871 +0 0 0 +0 0 0 +0.00589391 -0.00322245 -0.00328059 +0 0 0 +0 0 0 +0.00248801 0.0140689 0.00646859 +0 0 0 +0 0 0 +0.00244885 0.00148219 0.00724338 +0 0 0 +0 0 0 +-0.00644078 0.0069158 -0.00199153 +0 0 0 +0 0 0 +-0.00398382 -0.00100592 -0.0019101 +0 0 0 +0 0 0 +-0.000372825 0.00539226 -0.0030465 +0 0 0 +0 0 0 +-0.00615474 0.00218696 -0.00520429 +0 0 0 +0 0 0 +-0.00496496 0.00461637 0.00695779 +0 0 0 +0 0 0 +-0.00446577 0.00867272 0.00969173 +0 0 0 +0 0 0 +0.0031874 0.00615275 0.000261091 +0 0 0 +0 0 0 +-0.0124846 0.00719755 0.00172262 +0 0 0 +0 0 0 +0.00257773 0.00186176 0.010667 +0 0 0 +0 0 0 +0.00358038 -0.00473701 -0.00720138 +0 0 0 +0 0 0 +-0.0149694 -0.00185727 -0.00021333 +0 0 0 +0 0 0 +0.0116844 -0.00221036 -0.0105606 +0 0 0 +0 0 0 +-0.00495932 -0.00154283 0.00216972 +0 0 0 +0 0 0 +-0.0023859 0.00727233 0.000235702 +0 0 0 +0 0 0 +-0.00249437 -0.00441815 -0.00785604 +0 0 0 +0 0 0 +-0.00214143 0.00261316 0.005559 +0 0 0 +0 0 0 +-0.00894323 0.000187232 -0.00144013 +0 0 0 +0 0 0 +0.00220571 0.00042063 0.00377518 +0 0 0 +0 0 0 +0.000226757 -0.00167648 0.002453 +0 0 0 +0 0 0 +0.00376075 0.00355444 -0.00431163 +0 0 0 +0 0 0 +-0.000292835 -0.00119434 -0.00421732 +0 0 0 +0 0 0 +0.00607477 0.00739131 0.00211148 +0 0 0 +0 0 0 +-0.00285813 -0.00306359 0.00456848 +0 0 0 +0 0 0 +0.00457272 -0.00281938 0.00479818 +0 0 0 +0 0 0 +0.00525762 -0.00558723 -0.000263422 +0 0 0 +0 0 0 +0.00389116 -0.00061085 -0.00276716 +0 0 0 +0 0 0 +-0.000212171 0.00988596 0.0175778 +0 0 0 +0 0 0 +-0.00442928 0.00553819 0.00148617 +0 0 0 +0 0 0 +-0.000714365 0.00504897 0.00576845 +0 0 0 +0 0 0 +-6.04871e-05 -0.00401287 -0.00390048 +0 0 0 +0 0 0 +-0.000119989 -0.00251285 -0.00211363 +0 0 0 +0 0 0 +0.00391689 -0.00839261 0.00620425 +0 0 0 +0 0 0 +0.00326177 -0.00306444 -0.00790892 +0 0 0 +0 0 0 +-0.0107716 0.00878749 0.012136 +0 0 0 +0 0 0 +-0.000174977 0.00726454 -0.00845691 +0 0 0 +0 0 0 +0.0116929 -0.00381197 -0.00468123 +0 0 0 +0 0 0 +0.00240735 -0.0022603 0.00534874 +0 0 0 +0 0 0 +-0.00828426 0.0003366 0.000778236 +0 0 0 +0 0 0 +-0.00643031 0.00514468 0.00716998 +0 0 0 +0 0 0 +-0.00257209 0.00243096 -0.00225184 +0 0 0 +0 0 0 +0.0031409 0.00401869 -0.01195 +0 0 0 +0 0 0 +0.00165168 -0.00240414 -0.00373725 +0 0 0 +0 0 0 +-0.00407697 0.00332421 -0.000754158 +0 0 0 +0 0 0 +0.00199188 0.00663597 0.00688589 +0 0 0 +0 0 0 +0.00133673 0.00971044 0.0102803 +0 0 0 +0 0 0 +0.000938547 0.0160236 -0.00305169 +0 0 0 +0 0 0 +0.00747672 -0.0137858 -0.0151276 +0 0 0 +0 0 0 +0.00633957 -0.00224037 0.00392073 +0 0 0 +0 0 0 +0.00309508 0.00174343 -0.00101037 +0 0 0 +0 0 0 +0.00264439 -0.00576956 -0.00187585 +0 0 0 +0 0 0 +0.000205381 -0.00875209 -0.00415406 +0 0 0 +0 0 0 +-0.00277195 -0.00183453 -0.00107621 +0 0 0 +0 0 0 +-0.00120731 -0.00337214 0.0065902 +0 0 0 +0 0 0 +-0.0060859 0.0042336 0.0139527 +0 0 0 +0 0 0 +-0.00509155 0.00983039 0.00234542 +0 0 0 +0 0 0 +-0.00737223 0.00103777 -0.00631613 +0 0 0 +0 0 0 +-0.00367747 -0.00449546 0.00223596 +0 0 0 +0 0 0 +-0.00701202 0.0065699 0.00406277 +0 0 0 +0 0 0 +7.08958e-05 0.00213618 0.00202368 +0 0 0 +0 0 0 +0.00605811 -0.00302957 -0.00282395 +0 0 0 +0 0 0 +0.000540788 0.00650348 0.00448111 +0 0 0 +0 0 0 +0.00838991 0.00442437 -0.00348422 +0 0 0 +0 0 0 +0.000188726 0.00879206 0.00882294 +0 0 0 +0 0 0 +0.00152177 0.00773133 0.00158863 +0 0 0 +0 0 0 +0.0109321 0.000773107 0.00115965 +0 0 0 +0 0 0 +0.00170535 -0.00666294 -0.000112783 +0 0 0 +0 0 0 +-0.000355585 0.00518209 0.00322796 +0 0 0 +0 0 0 +-0.00471169 -0.0013209 0.00756496 +0 0 0 +0 0 0 +-0.00276636 -0.0086318 -0.00649012 +0 0 0 +0 0 0 +-0.00540162 0.0025303 -0.00997197 +0 0 0 +0 0 0 +0.00455967 0.000484408 -0.0125834 +0 0 0 +0 0 0 +0.00393133 -0.00620661 -0.00901512 +0 0 0 +0 0 0 +0.00485128 -0.00020091 -0.00435046 +0 0 0 +0 0 0 +0.0013977 -0.00814448 -0.00348025 +0 0 0 +0 0 0 +-0.00160682 -0.00519595 0.00168266 +0 0 0 +0 0 0 +0.000349327 -0.00199939 0.00643739 +0 0 0 +0 0 0 +-0.000660999 -0.00343742 0.00659076 +0 0 0 +0 0 0 +-0.00754331 0.0143451 -0.0101802 +0 0 0 +0 0 0 diff --git a/dmff/admp/examples/openmm_api/forcefield.xml b/dmff/admp/examples/openmm_api/forcefield.xml new file mode 100644 index 000000000..f3e9c3f3d --- /dev/null +++ b/dmff/admp/examples/openmm_api/forcefield.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dmff/admp/examples/openmm_api/ref_out b/dmff/admp/examples/openmm_api/ref_out new file mode 100644 index 000000000..0ce55e4e2 --- /dev/null +++ b/dmff/admp/examples/openmm_api/ref_out @@ -0,0 +1,3 @@ +166834.94 +[-8.7891670e+06 -1.6102563e+08 0.0000000e+00 0.0000000e+00 + 1.7047870e+05] diff --git a/dmff/admp/examples/openmm_api/residues.xml b/dmff/admp/examples/openmm_api/residues.xml new file mode 100644 index 000000000..3d4f36fb8 --- /dev/null +++ b/dmff/admp/examples/openmm_api/residues.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/dmff/admp/examples/openmm_api/run.py b/dmff/admp/examples/openmm_api/run.py new file mode 100755 index 000000000..a1c391baa --- /dev/null +++ b/dmff/admp/examples/openmm_api/run.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +import sys +import openmm +import openmm.app as app +import openmm.unit as unit +import numpy as np +import jax.numpy as jnp +from collections import defaultdict +from admp.api import Hamiltonian +from jax_md import space, partition +from jax import grad + + +if __name__ == '__main__': + + H = Hamiltonian('forcefield.xml') + app.Topology.loadBondDefinitions("residues.xml") + pdb = app.PDBFile("water1024.pdb") + rc = 4.0 + # generator stores all force field parameters + generator = H.getGenerators() + disp_generator = generator[0] + pme_generator = generator[1] + pme_generator.ref_dip = 'dipole_1024' + potentials = H.createPotential(pdb.topology, nonbondedCutoff=rc*unit.angstrom) + # pot_fn is the actual energy calculator + pot_disp = potentials[0] + pot_pme = potentials[1] + + # construct inputs + positions = jnp.array(pdb.positions._value) * 10 + a, b, c = pdb.topology.getPeriodicBoxVectors() + box = jnp.array([a._value, b._value, c._value]) * 10 + # neighbor list + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + print(pot_disp(positions, box, pairs, disp_generator.params)) + param_grad = grad(pot_disp, argnums=3)(positions, box, pairs, generator[0].params) + print(param_grad['mScales']) + + print(pot_pme(positions, box, pairs, pme_generator.params)) + param_grad = grad(pot_pme, argnums=3)(positions, box, pairs, generator[1].params) + print(param_grad['mScales']) + + diff --git a/dmff/admp/examples/water_1024/mpidwater.xml b/dmff/admp/examples/water_1024/mpidwater.xml new file mode 100644 index 000000000..4d0c677b8 --- /dev/null +++ b/dmff/admp/examples/water_1024/mpidwater.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dmff/admp/examples/water_1024/ref_out b/dmff/admp/examples/water_1024/ref_out new file mode 100644 index 000000000..d47bf8938 --- /dev/null +++ b/dmff/admp/examples/water_1024/ref_out @@ -0,0 +1,6 @@ +Electrostatic Energy (kJ/mol) +-133.75 +Dispersion Energy (kJ/mol) +54660.043 +Tang-Tonnies Damping (kJ/mol) +221523.0 diff --git a/dmff/admp/examples/water_1024/run_admp.py b/dmff/admp/examples/water_1024/run_admp.py new file mode 100755 index 000000000..987a497ef --- /dev/null +++ b/dmff/admp/examples/water_1024/run_admp.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +import sys +import numpy as np +import jax.numpy as jnp +from jax import grad, value_and_grad +from jax_md import partition, space +# from admp.settings import * +# from admp.multipole import * +# from admp.parser import * +# from admp.pme import * +# from admp.disp_pme import * +# from admp.pairwise import * +import admp.settings +from admp.multipole import convert_cart2harm +from admp.pme import ADMPPmeForce +from admp.disp_pme import ADMPDispPmeForce +from admp.pairwise import generate_pairwise_interaction, TT_damping_qq_c6_kernel +from admp.parser import * + + +# below is the validation code +if __name__ == '__main__': + pdb = 'water1024.pdb' + xml = 'mpidwater.xml' + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + mScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + pScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + dScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + Q = np.vstack( + [(atom.c0, atom.dX*10, atom.dY*10, atom.dZ*10, atom.qXX*300, atom.qYY*300, atom.qZZ*300, atom.qXY*300, atom.qXZ*300, atom.qYZ*300) for atom in atomDicts.values()] + ) + Q = jnp.array(Q) + Q_local = convert_cart2harm(Q, 2) + axis_type = np.array( + [atom.axisType for atom in atomDicts.values()] + ) + axis_indices = np.vstack( + [atom.axis_indices for atom in atomDicts.values()] + ) + covalent_map = assemble_covalent(residueDicts, n_atoms) + + + lmax = 2 + pmax = 10 + + # construct the C list + c_list = np.zeros((3, n_atoms)) + a_list = np.zeros(n_atoms) + q_list = np.zeros(n_atoms) + b_list = np.zeros(n_atoms) + nmol=int(n_atoms/3) + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + # dispersion coeff + c_list[0][a]=37.19677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + # q + q_list[a] = -0.741706 + q_list[b] = 0.370853 + q_list[c] = 0.370853 + # b, Bohr^-1 + b_list[a] = 2.00095977 + b_list[b] = 1.999519942 + b_list[c] = 1.999519942 + # a, Hartree + a_list[a] = 458.3777 + a_list[b] = 0.0317 + a_list[c] = 0.0317 + + # Finish data preparation + # ------------------------------------------------------------------------------------- + # parameters should be ready: + # geometric variables: positions, box + # atomic parameters: Q_local, c_list + # topological parameters: covalent_map, mScales, pScales, dScales + # general force field setting parameters: rc, ethresh, lmax, pmax + + + # get neighbor list using jax_md + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + # electrostatic + pme_force = ADMPPmeForce(box, axis_type, axis_indices, covalent_map, rc, ethresh, lmax) + pme_force.update_env('kappa', 0.657065221219616) + E, F = pme_force.get_forces(positions, box, pairs, Q_local, mScales) + print('Electrostatic Energy (kJ/mol)') + # E = pme_force.get_energy(positions, box, pairs, Q_local, mScales, pScales, dScales) + E, F = pme_force.get_forces(positions, box, pairs, Q_local, mScales) + print(E) + + + # dispersion + disp_pme_force = ADMPDispPmeForce(box, covalent_map, rc, ethresh, pmax) + disp_pme_force.update_env('kappa', 0.657065221219616) + E, F = disp_pme_force.get_forces(positions, box, pairs, c_list.T, mScales) + print('Dispersion Energy (kJ/mol)') + # E = disp_pme_force.get_energy(positions, box, pairs, c_list.T, mScales) + E, F = disp_pme_force.get_forces(positions, box, pairs, c_list.T, mScales) + print(E) + + + # short range damping + TT_damping_qq_c6 = value_and_grad(generate_pairwise_interaction(TT_damping_qq_c6_kernel, covalent_map, static_args={})) + TT_damping_qq_c6(positions, box, pairs, mScales, a_list, b_list, q_list, c_list[0]) + print('Tang-Tonnies Damping (kJ/mol)') + E, F = TT_damping_qq_c6(positions, box, pairs, mScales, a_list, b_list, q_list, c_list[0]) + print(E) + diff --git a/dmff/admp/examples/water_pol_1024/admp b/dmff/admp/examples/water_pol_1024/admp new file mode 120000 index 000000000..be76fddb2 --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/admp @@ -0,0 +1 @@ +../../admp/ \ No newline at end of file diff --git a/dmff/admp/examples/water_pol_1024/dipole_1024 b/dmff/admp/examples/water_pol_1024/dipole_1024 new file mode 100644 index 000000000..e1de509e9 --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/dipole_1024 @@ -0,0 +1,3072 @@ +-9.78037e-05 -0.0102743 -0.00835381 +0 0 0 +0 0 0 +0.0016815 0.00104498 0.00955635 +0 0 0 +0 0 0 +0.0104807 0.0153637 -0.00934142 +0 0 0 +0 0 0 +0.00268184 0.00663563 -0.00085569 +0 0 0 +0 0 0 +0.000439397 0.0120955 -0.00798317 +0 0 0 +0 0 0 +0.00757021 0.00274864 -0.00405105 +0 0 0 +0 0 0 +-0.00374424 -0.00805664 0.00310999 +0 0 0 +0 0 0 +0.00300064 0.00103427 -0.00607688 +0 0 0 +0 0 0 +-0.00513748 0.00259173 0.0138984 +0 0 0 +0 0 0 +0.00611206 0.00178956 0.00330758 +0 0 0 +0 0 0 +0.00309779 -0.0123237 -0.00151633 +0 0 0 +0 0 0 +0.0112893 -0.000925505 -0.00345641 +0 0 0 +0 0 0 +-0.00823225 0.00481008 -0.00517028 +0 0 0 +0 0 0 +0.0105862 -0.0173504 0.00505209 +0 0 0 +0 0 0 +0.00507972 0.00427566 0.00207499 +0 0 0 +0 0 0 +-0.0160562 -0.00375995 -0.000162321 +0 0 0 +0 0 0 +-0.00232523 0.00223238 -0.00650886 +0 0 0 +0 0 0 +0.00907927 0.00168353 -0.00335751 +0 0 0 +0 0 0 +0.000391106 -0.00560563 0.0039132 +0 0 0 +0 0 0 +-0.00129292 -0.0139697 -0.0130065 +0 0 0 +0 0 0 +0.00253837 -0.0116289 -0.00520366 +0 0 0 +0 0 0 +-0.00331825 -0.00396823 -0.00218062 +0 0 0 +0 0 0 +0.0009465 -0.00202349 -0.00330577 +0 0 0 +0 0 0 +-0.0110558 -0.000308164 -0.00228239 +0 0 0 +0 0 0 +0.0124406 -0.00204707 -0.00693733 +0 0 0 +0 0 0 +-0.00173319 -0.00331657 0.00166376 +0 0 0 +0 0 0 +-0.00273922 0.00197408 -0.00392151 +0 0 0 +0 0 0 +-0.00667702 0.00334124 -0.0126923 +0 0 0 +0 0 0 +0.00498793 0.00726738 0.00236643 +0 0 0 +0 0 0 +-0.0100955 -0.0112588 0.0042185 +0 0 0 +0 0 0 +0.0026019 0.000417779 -0.00626278 +0 0 0 +0 0 0 +0.00249888 -0.00228331 0.00721147 +0 0 0 +0 0 0 +0.00445673 0.000574593 -0.00796422 +0 0 0 +0 0 0 +-0.000312778 3.41629e-05 0.000317727 +0 0 0 +0 0 0 +-0.00392655 0.00947377 -0.0015633 +0 0 0 +0 0 0 +-0.00386247 -0.0115072 -0.00401078 +0 0 0 +0 0 0 +-0.00888192 0.00884608 -0.000281786 +0 0 0 +0 0 0 +0.00827756 0.00138916 0.000213653 +0 0 0 +0 0 0 +-0.00314245 0.00726788 -0.000613722 +0 0 0 +0 0 0 +0.00755656 0.00489949 -0.00309753 +0 0 0 +0 0 0 +-0.00633686 0.0115392 0.000473853 +0 0 0 +0 0 0 +0.00195559 0.00604159 -0.00785683 +0 0 0 +0 0 0 +0.00611166 -0.00239653 0.00120471 +0 0 0 +0 0 0 +-0.00724835 -0.00466115 -0.00739829 +0 0 0 +0 0 0 +0.00293285 0.000757116 -0.00542986 +0 0 0 +0 0 0 +-0.00321717 0.00587291 -0.00449816 +0 0 0 +0 0 0 +0.00852951 -0.0073382 0.000909686 +0 0 0 +0 0 0 +0.00462385 0.00435736 0.00220974 +0 0 0 +0 0 0 +-0.000210808 -0.0099051 -0.00681186 +0 0 0 +0 0 0 +0.00519537 0.00774189 0.00934357 +0 0 0 +0 0 0 +-0.00791618 -0.00701282 -0.00573458 +0 0 0 +0 0 0 +-0.00353672 0.00218662 0.00116191 +0 0 0 +0 0 0 +-0.000824194 0.00763499 0.0101212 +0 0 0 +0 0 0 +-0.00582191 0.00637928 0.00340626 +0 0 0 +0 0 0 +0.00135849 0.000574534 0.00486814 +0 0 0 +0 0 0 +0.00672225 0.00484596 0.00758249 +0 0 0 +0 0 0 +0.000442829 0.00999001 -0.00079784 +0 0 0 +0 0 0 +-0.00374611 -0.0162288 0.0117805 +0 0 0 +0 0 0 +-0.00257662 0.00363066 -0.00124877 +0 0 0 +0 0 0 +-0.000491337 -0.00467918 0.0066654 +0 0 0 +0 0 0 +-0.00798403 0.00187673 -0.000592901 +0 0 0 +0 0 0 +0.000873825 -0.00367945 -0.00136084 +0 0 0 +0 0 0 +-0.0124228 -0.00596143 -0.0102283 +0 0 0 +0 0 0 +-0.000180247 0.000531004 -0.00128713 +0 0 0 +0 0 0 +-0.00415982 -0.0141561 0.00939265 +0 0 0 +0 0 0 +-0.0100344 0.0038062 0.00366314 +0 0 0 +0 0 0 +0.00392728 -0.00100683 0.00206949 +0 0 0 +0 0 0 +0.0115188 0.00717167 -0.00074889 +0 0 0 +0 0 0 +0.00628949 0.00640248 0.000293654 +0 0 0 +0 0 0 +-0.00909805 -0.000491437 0.00161602 +0 0 0 +0 0 0 +-0.00177572 0.00675042 0.00826887 +0 0 0 +0 0 0 +-0.00197614 0.0110562 -0.00612657 +0 0 0 +0 0 0 +0.00971752 -0.00739067 0.00357604 +0 0 0 +0 0 0 +0.000195267 -0.00786269 0.00607746 +0 0 0 +0 0 0 +-0.0103708 0.00245087 -0.00041738 +0 0 0 +0 0 0 +0.00256772 0.00215356 -0.000762005 +0 0 0 +0 0 0 +0.00379047 -0.000474574 -0.00298218 +0 0 0 +0 0 0 +-0.000165421 -0.00055532 0.0148757 +0 0 0 +0 0 0 +0.0111802 0.0136549 -0.0320468 +0 0 0 +0 0 0 +0.0153225 -0.0103171 -0.00227375 +0 0 0 +0 0 0 +-0.00212336 0.00274542 -0.00933705 +0 0 0 +0 0 0 +0.00616534 0.0130132 5.47625e-05 +0 0 0 +0 0 0 +-0.00929046 0.00852819 -0.00192719 +0 0 0 +0 0 0 +-0.00241705 0.00226907 -0.00449038 +0 0 0 +0 0 0 +-0.00920485 -0.00746917 0.000557805 +0 0 0 +0 0 0 +-0.0058951 0.00506319 0.00270818 +0 0 0 +0 0 0 +0.00583662 -0.0012291 0.00289874 +0 0 0 +0 0 0 +0.0094816 0.0109469 0.00114495 +0 0 0 +0 0 0 +-0.00838529 -0.00821476 -0.00669953 +0 0 0 +0 0 0 +0.00484815 -0.00317928 0.00731462 +0 0 0 +0 0 0 +0.00497919 0.00490789 -0.00180653 +0 0 0 +0 0 0 +0.00854981 0.010314 -0.00320549 +0 0 0 +0 0 0 +-0.00415836 -0.00892292 -0.00167608 +0 0 0 +0 0 0 +-0.00813587 0.0118199 0.00557071 +0 0 0 +0 0 0 +-0.00374275 0.000783917 0.0064928 +0 0 0 +0 0 0 +0.00324764 0.00810909 0.00293951 +0 0 0 +0 0 0 +-0.00546086 -0.00241054 0.0110425 +0 0 0 +0 0 0 +-0.0138394 0.00240158 0.00286925 +0 0 0 +0 0 0 +0.00511851 -0.000957279 -0.00176611 +0 0 0 +0 0 0 +0.0115771 -0.00931405 0.00416637 +0 0 0 +0 0 0 +-0.00225243 0.00246387 -0.00268514 +0 0 0 +0 0 0 +0.00691816 -0.00831442 -0.00121352 +0 0 0 +0 0 0 +-0.0063306 -7.31156e-05 0.00572808 +0 0 0 +0 0 0 +0.00167653 0.000132109 0.00343913 +0 0 0 +0 0 0 +-0.0070473 -1.97325e-05 -0.00325234 +0 0 0 +0 0 0 +-0.00632247 0.00179402 -0.000831321 +0 0 0 +0 0 0 +0.0011576 0.00842738 0.0113516 +0 0 0 +0 0 0 +-0.00183084 -0.00155541 0.00883301 +0 0 0 +0 0 0 +0.00855752 0.00973545 -0.00203578 +0 0 0 +0 0 0 +0.00460251 -0.00150441 0.00506528 +0 0 0 +0 0 0 +0.00819739 -0.00207966 -0.0023709 +0 0 0 +0 0 0 +0.000726014 0.00133864 -0.00837828 +0 0 0 +0 0 0 +0.00369728 0.000264355 0.00346401 +0 0 0 +0 0 0 +-0.00573303 -3.45729e-05 -0.00555133 +0 0 0 +0 0 0 +-0.00605226 -0.00217764 -0.000867023 +0 0 0 +0 0 0 +0.00851709 0.00977362 0.00438207 +0 0 0 +0 0 0 +-0.00262633 0.00541108 -0.000277135 +0 0 0 +0 0 0 +-0.00421868 -0.00682932 -0.00906488 +0 0 0 +0 0 0 +-0.00142311 -0.0044121 -0.00267245 +0 0 0 +0 0 0 +0.000599986 -0.00220729 0.00549257 +0 0 0 +0 0 0 +0.00717203 -0.00041221 0.000839776 +0 0 0 +0 0 0 +0.00742294 0.00505202 -0.0103032 +0 0 0 +0 0 0 +-0.0111505 0.00713828 0.00812535 +0 0 0 +0 0 0 +-0.00696046 0.00317351 0.0191618 +0 0 0 +0 0 0 +-0.00271005 -0.00500413 -0.00472108 +0 0 0 +0 0 0 +0.00053514 0.00124973 0.00329028 +0 0 0 +0 0 0 +0.00563814 0.00313616 -0.00026369 +0 0 0 +0 0 0 +0.00595883 -0.00569338 -0.00611885 +0 0 0 +0 0 0 +0.00934765 -0.00487378 -0.00983422 +0 0 0 +0 0 0 +0.00666574 0.000534592 0.00150635 +0 0 0 +0 0 0 +-0.00220394 4.45494e-05 0.00307866 +0 0 0 +0 0 0 +-0.00300268 -0.00505015 -0.00646803 +0 0 0 +0 0 0 +-0.00426093 0.00399821 0.00430969 +0 0 0 +0 0 0 +1.48552e-05 -0.00805093 0.00708488 +0 0 0 +0 0 0 +0.00200509 -0.00705536 0.00506572 +0 0 0 +0 0 0 +-0.00122102 0.00183551 0.00300795 +0 0 0 +0 0 0 +0.00216416 -0.000855585 0.00626019 +0 0 0 +0 0 0 +-0.00305724 -0.00194739 -0.00753175 +0 0 0 +0 0 0 +0.00749589 -0.00599059 -0.00142094 +0 0 0 +0 0 0 +-0.0120168 -0.000174821 0.0115427 +0 0 0 +0 0 0 +-0.00466727 0.00351428 0.000158967 +0 0 0 +0 0 0 +0.00485732 0.00239818 0.00676465 +0 0 0 +0 0 0 +-0.00503949 0.006335 -0.00551739 +0 0 0 +0 0 0 +0.00171117 -0.00296434 -0.00286245 +0 0 0 +0 0 0 +0.0122505 0.00883528 0.000622401 +0 0 0 +0 0 0 +-0.00164902 0.0044269 -0.000943952 +0 0 0 +0 0 0 +-0.00284898 -0.0144255 0.00235835 +0 0 0 +0 0 0 +-0.0165456 0.00239321 0.00289284 +0 0 0 +0 0 0 +-0.00349088 0.018868 0.00731126 +0 0 0 +0 0 0 +0.0026674 0.00167464 0.00127276 +0 0 0 +0 0 0 +0.000301781 -0.00243539 0.00916902 +0 0 0 +0 0 0 +0.00395351 0.0048905 0.00153711 +0 0 0 +0 0 0 +0.0173634 -0.0051964 -0.00931404 +0 0 0 +0 0 0 +-0.000329681 0.00648045 -0.0215546 +0 0 0 +0 0 0 +-0.00381817 -0.00415355 -0.00564167 +0 0 0 +0 0 0 +-0.00607825 0.0247509 -0.00142847 +0 0 0 +0 0 0 +0.0127189 0.00414365 -0.00481488 +0 0 0 +0 0 0 +0.0091679 -0.000535909 0.0127363 +0 0 0 +0 0 0 +-0.00545698 0.00499536 0.00473193 +0 0 0 +0 0 0 +0.01518 0.0142544 0.0123285 +0 0 0 +0 0 0 +-0.000168485 -0.00438238 0.00517892 +0 0 0 +0 0 0 +0.0123714 0.0058073 -0.00344789 +0 0 0 +0 0 0 +-0.00534167 0.00642355 -0.00244599 +0 0 0 +0 0 0 +-5.04759e-05 -0.00515571 0.00720749 +0 0 0 +0 0 0 +-0.00191556 -0.000748099 0.00149025 +0 0 0 +0 0 0 +0.00661331 0.000687613 -0.010089 +0 0 0 +0 0 0 +-1.26257e-05 -0.00515542 0.00494464 +0 0 0 +0 0 0 +0.00789357 -0.00877575 0.0132735 +0 0 0 +0 0 0 +-0.00507882 0.00816196 0.00899426 +0 0 0 +0 0 0 +-0.00772275 -0.0129865 -0.00602754 +0 0 0 +0 0 0 +-0.000565926 0.00545582 -5.91464e-05 +0 0 0 +0 0 0 +0.00109049 0.000202086 -0.00667453 +0 0 0 +0 0 0 +-0.0109158 -0.0123817 0.0094091 +0 0 0 +0 0 0 +0.00406096 0.00660004 -0.00386767 +0 0 0 +0 0 0 +0.00138359 0.00457259 0.00378496 +0 0 0 +0 0 0 +-0.00281692 0.00027646 -5.7857e-05 +0 0 0 +0 0 0 +0.00209406 0.00231404 0.0101979 +0 0 0 +0 0 0 +0.00367972 0.000890963 0.00273223 +0 0 0 +0 0 0 +-0.0111618 -0.00342381 -0.0123016 +0 0 0 +0 0 0 +-0.00486201 0.00574302 -0.0151186 +0 0 0 +0 0 0 +0.00497567 -0.000638303 -0.00333819 +0 0 0 +0 0 0 +-0.00292046 0.00976949 -0.00699919 +0 0 0 +0 0 0 +-0.00674894 0.00165761 0.0147542 +0 0 0 +0 0 0 +-0.00782643 -0.0077367 -0.00260987 +0 0 0 +0 0 0 +-0.00358134 -0.00303959 0.00114245 +0 0 0 +0 0 0 +0.000642828 -0.000335948 -0.000605209 +0 0 0 +0 0 0 +0.000740505 -0.00511259 -0.00503279 +0 0 0 +0 0 0 +-0.0054111 0.00134348 0.000486883 +0 0 0 +0 0 0 +-0.00516649 0.00567091 0.00305135 +0 0 0 +0 0 0 +0.000676043 0.00485579 0.000172391 +0 0 0 +0 0 0 +-0.00582053 -0.00402091 0.00033397 +0 0 0 +0 0 0 +0.00448973 0.00281377 -0.000227784 +0 0 0 +0 0 0 +0.00336178 0.00764535 -0.003802 +0 0 0 +0 0 0 +-0.00186275 0.00400589 0.00343895 +0 0 0 +0 0 0 +-0.00556406 -0.00528317 -0.00993338 +0 0 0 +0 0 0 +0.00199889 0.00195948 0.00458751 +0 0 0 +0 0 0 +-0.00353912 0.00494606 0.00680142 +0 0 0 +0 0 0 +0.00122442 0.0020615 0.00264405 +0 0 0 +0 0 0 +0.00721288 -0.00291954 0.00214669 +0 0 0 +0 0 0 +0.000453011 -0.00715159 0.00695737 +0 0 0 +0 0 0 +-0.00772907 -0.00301497 -0.0167101 +0 0 0 +0 0 0 +0.00840813 0.00133569 0.00613421 +0 0 0 +0 0 0 +0.00380602 0.0068309 0.00171629 +0 0 0 +0 0 0 +-0.000842832 0.00536671 -0.00349201 +0 0 0 +0 0 0 +-0.00930383 -0.000269109 0.00486243 +0 0 0 +0 0 0 +-0.00586819 0.00280701 -0.00832121 +0 0 0 +0 0 0 +0.00453673 -0.00212405 -0.00713174 +0 0 0 +0 0 0 +0.00378363 -0.00642744 -0.0019263 +0 0 0 +0 0 0 +-0.0017643 -0.000354975 0.00164927 +0 0 0 +0 0 0 +-0.00384344 -0.0118822 -0.00289207 +0 0 0 +0 0 0 +0.00653117 0.00974485 0.000399904 +0 0 0 +0 0 0 +0.00616974 -0.00482934 -0.0105603 +0 0 0 +0 0 0 +0.00487945 0.00496005 0.00550319 +0 0 0 +0 0 0 +-0.001882 0.00272243 -0.00392331 +0 0 0 +0 0 0 +-0.000258219 -0.00482456 -0.00125412 +0 0 0 +0 0 0 +0.0116988 0.00129067 -0.00170155 +0 0 0 +0 0 0 +0.0134901 -0.00518862 -0.000939032 +0 0 0 +0 0 0 +-0.00691896 0.0112497 -0.00346503 +0 0 0 +0 0 0 +-0.00223103 0.00535906 -4.1665e-05 +0 0 0 +0 0 0 +-2.84113e-05 -0.00198621 0.00316068 +0 0 0 +0 0 0 +0.00370225 0.0021758 -0.00100787 +0 0 0 +0 0 0 +0.000723029 -0.00813053 -0.0028756 +0 0 0 +0 0 0 +-0.00868476 0.00874568 -0.000411086 +0 0 0 +0 0 0 +0.00474037 0.0105608 0.008347 +0 0 0 +0 0 0 +0.00105959 -0.000831815 -0.00437098 +0 0 0 +0 0 0 +-0.0180633 0.000180752 0.00379154 +0 0 0 +0 0 0 +0.00180955 -0.00641551 -0.00596799 +0 0 0 +0 0 0 +0.00783451 0.00619785 -0.00527733 +0 0 0 +0 0 0 +0.00328143 0.00140044 0.0101086 +0 0 0 +0 0 0 +-0.00395973 0.000926564 -0.00639365 +0 0 0 +0 0 0 +0.0116767 0.00177171 0.00991388 +0 0 0 +0 0 0 +0.00125404 0.00278407 -0.00472855 +0 0 0 +0 0 0 +-0.00125579 0.000624749 0.0060266 +0 0 0 +0 0 0 +0.00024747 -0.000230718 0.00470209 +0 0 0 +0 0 0 +-0.0153942 0.00410741 -0.00831551 +0 0 0 +0 0 0 +0.0131303 0.00158128 0.00383424 +0 0 0 +0 0 0 +-0.00726297 -0.0099383 0.00170768 +0 0 0 +0 0 0 +0.0173814 0.00807743 0.00770488 +0 0 0 +0 0 0 +-0.00765138 -0.000946928 -0.0102351 +0 0 0 +0 0 0 +-0.00219384 0.00179744 -0.00375232 +0 0 0 +0 0 0 +-0.00690129 0.0079468 0.00535078 +0 0 0 +0 0 0 +0.00017198 -0.00910768 0.00467808 +0 0 0 +0 0 0 +-0.00634841 -0.00477623 -0.00380467 +0 0 0 +0 0 0 +0.00133153 -0.0059827 -0.00504477 +0 0 0 +0 0 0 +-0.00430244 0.0129161 0.00239997 +0 0 0 +0 0 0 +-0.00653367 0.00107805 -0.0130591 +0 0 0 +0 0 0 +-0.00474991 -0.0090749 -0.0041393 +0 0 0 +0 0 0 +-0.00241338 -0.00945678 0.00421321 +0 0 0 +0 0 0 +-0.00949361 -0.00939561 4.8179e-05 +0 0 0 +0 0 0 +0.00626106 0.00213605 -0.00219957 +0 0 0 +0 0 0 +-0.00376815 0.0090755 0.00511605 +0 0 0 +0 0 0 +-0.00447132 -0.000220265 -0.00298141 +0 0 0 +0 0 0 +0.000745011 0.00206621 0.00441078 +0 0 0 +0 0 0 +0.0102733 -0.00412785 0.00410222 +0 0 0 +0 0 0 +0.00360848 -0.00402273 -0.000746735 +0 0 0 +0 0 0 +0.00746014 0.00899694 -0.0134584 +0 0 0 +0 0 0 +0.00539365 -0.00126786 -0.00533281 +0 0 0 +0 0 0 +0.000201233 -0.00723488 0.00651435 +0 0 0 +0 0 0 +-0.00173645 0.0153581 0.00261489 +0 0 0 +0 0 0 +-0.00599782 -0.00428004 -0.000143669 +0 0 0 +0 0 0 +-0.00385636 0.0049054 0.00167299 +0 0 0 +0 0 0 +-0.000259804 -0.00526562 -0.00875804 +0 0 0 +0 0 0 +-0.0043669 0.00533465 0.00619663 +0 0 0 +0 0 0 +-1.55116e-05 -0.00285167 0.00319511 +0 0 0 +0 0 0 +-0.00521923 0.00560276 0.00942748 +0 0 0 +0 0 0 +0.0108202 0.000175836 -0.000185343 +0 0 0 +0 0 0 +-0.00212986 -0.00169513 0.00530598 +0 0 0 +0 0 0 +0.000363441 -0.0060767 -0.005465 +0 0 0 +0 0 0 +0.0101713 0.00244951 -0.00713465 +0 0 0 +0 0 0 +-0.00838637 0.0039302 -0.00185564 +0 0 0 +0 0 0 +0.00141554 -0.00437349 0.00569813 +0 0 0 +0 0 0 +-0.0039811 -0.00280294 0.00262114 +0 0 0 +0 0 0 +-0.00400322 0.00542208 0.00508549 +0 0 0 +0 0 0 +0.0100751 -0.00585201 -0.00463947 +0 0 0 +0 0 0 +-0.00199921 -0.0060068 -0.00381233 +0 0 0 +0 0 0 +-0.0110949 -0.00229428 -0.00284215 +0 0 0 +0 0 0 +0.00213449 0.00121657 0.00413121 +0 0 0 +0 0 0 +0.00383646 0.00514739 -0.0042205 +0 0 0 +0 0 0 +-0.0138627 0.00386019 -0.00174507 +0 0 0 +0 0 0 +0.000985244 -0.00173199 -0.0027879 +0 0 0 +0 0 0 +-0.00414753 0.00159845 0.0140703 +0 0 0 +0 0 0 +0.00521038 0.00703491 0.00261242 +0 0 0 +0 0 0 +0.00171624 0.00334721 -0.00399361 +0 0 0 +0 0 0 +-0.00341361 0.00249506 -0.00875424 +0 0 0 +0 0 0 +-0.00151917 -0.0129792 -0.000948598 +0 0 0 +0 0 0 +-0.000554986 0.00239804 0.00680182 +0 0 0 +0 0 0 +0.0113353 -0.0015979 -0.004464 +0 0 0 +0 0 0 +-0.00748076 -0.00433667 -0.00525681 +0 0 0 +0 0 0 +0.00349191 0.00795602 -0.000800224 +0 0 0 +0 0 0 +-0.00531439 0.00216725 0.00226485 +0 0 0 +0 0 0 +0.0136866 0.00306299 -0.00109613 +0 0 0 +0 0 0 +0.00598406 -0.00392106 0.0170531 +0 0 0 +0 0 0 +0.00403592 -0.00368901 0.00320945 +0 0 0 +0 0 0 +0.0036205 -0.00556539 -0.00198205 +0 0 0 +0 0 0 +-0.000840349 0.00848007 -0.0040412 +0 0 0 +0 0 0 +-0.00480765 0.00815207 -0.00245005 +0 0 0 +0 0 0 +-0.000278064 -0.00232045 0.00779664 +0 0 0 +0 0 0 +-0.00176203 -0.00320255 0.00373226 +0 0 0 +0 0 0 +0.00444392 -0.00370352 0.00473972 +0 0 0 +0 0 0 +0.000131495 0.0020028 -0.00140803 +0 0 0 +0 0 0 +-0.00755526 0.000769954 0.00504113 +0 0 0 +0 0 0 +-0.0122574 0.0074683 0.00139079 +0 0 0 +0 0 0 +0.00523569 0.00256379 0.011097 +0 0 0 +0 0 0 +-0.000944271 0.00510882 -0.00305778 +0 0 0 +0 0 0 +0.00380519 0.000803686 0.0139614 +0 0 0 +0 0 0 +0.00473881 0.00692148 -0.00141251 +0 0 0 +0 0 0 +0.00197562 0.00833919 -0.000823374 +0 0 0 +0 0 0 +-0.00923064 -0.00456113 -0.00523267 +0 0 0 +0 0 0 +0.007301 0.00165144 -0.00250631 +0 0 0 +0 0 0 +-0.00477963 0.0067898 -0.00160161 +0 0 0 +0 0 0 +-0.012516 -0.0052418 0.00839902 +0 0 0 +0 0 0 +0.00444699 -0.0102143 -0.00771269 +0 0 0 +0 0 0 +0.00409276 0.00234007 0.000916312 +0 0 0 +0 0 0 +0.00526719 -0.0185264 0.00325041 +0 0 0 +0 0 0 +0.00880466 0.00115263 -0.00446445 +0 0 0 +0 0 0 +-0.00670686 -0.00806671 0.00145852 +0 0 0 +0 0 0 +-0.00474324 -0.00648036 -0.00467019 +0 0 0 +0 0 0 +-0.00273532 -0.00396023 0.0137113 +0 0 0 +0 0 0 +0.0106414 0.00195623 -0.00958807 +0 0 0 +0 0 0 +-0.00208171 0.00647457 0.0136989 +0 0 0 +0 0 0 +-0.00277054 0.00697185 -0.000786607 +0 0 0 +0 0 0 +0.00443445 -7.24378e-05 0.012928 +0 0 0 +0 0 0 +-0.00665372 0.00161258 -0.00438756 +0 0 0 +0 0 0 +0.00491655 0.000643814 -0.00301866 +0 0 0 +0 0 0 +0.00497501 0.00911598 -0.00288485 +0 0 0 +0 0 0 +0.0137355 -0.000897699 0.00214739 +0 0 0 +0 0 0 +-0.00992127 -0.0115933 0.00142412 +0 0 0 +0 0 0 +0.010838 0.00745001 0.00533567 +0 0 0 +0 0 0 +0.00487711 -0.00411243 0.00792683 +0 0 0 +0 0 0 +-0.00617018 0.00341602 0.00568542 +0 0 0 +0 0 0 +-0.00648836 0.00118417 0.000778898 +0 0 0 +0 0 0 +0.0116769 -0.00494425 -0.0060414 +0 0 0 +0 0 0 +-0.00154938 -0.00822016 -0.0050833 +0 0 0 +0 0 0 +-0.00104108 0.00444053 -0.00407523 +0 0 0 +0 0 0 +-0.00423669 -0.00203121 0.00542422 +0 0 0 +0 0 0 +-0.00225517 0.00356842 -0.00501592 +0 0 0 +0 0 0 +0.00742022 -0.00558255 0.00207504 +0 0 0 +0 0 0 +0.00255928 -0.00463011 0.00157302 +0 0 0 +0 0 0 +-0.003772 -0.0144524 0.00145796 +0 0 0 +0 0 0 +0.00647517 -0.0100065 0.00908599 +0 0 0 +0 0 0 +-0.00513477 0.0070015 -0.00977665 +0 0 0 +0 0 0 +0.00615323 0.00135278 -0.000273292 +0 0 0 +0 0 0 +3.05568e-05 -0.00373847 -0.00697973 +0 0 0 +0 0 0 +-0.006153 0.00864248 0.00112156 +0 0 0 +0 0 0 +-0.00568615 -0.00401322 -0.0124605 +0 0 0 +0 0 0 +-0.00137967 0.0132382 -0.00871058 +0 0 0 +0 0 0 +0.00749187 0.00809359 0.0027655 +0 0 0 +0 0 0 +0.00344337 -0.000858053 -0.00261067 +0 0 0 +0 0 0 +0.00408897 -0.000775449 -0.00265952 +0 0 0 +0 0 0 +-0.00655454 -4.75993e-05 -0.00105503 +0 0 0 +0 0 0 +0.00816401 0.0113557 0.00755355 +0 0 0 +0 0 0 +0.00593666 0.00975993 0.00388305 +0 0 0 +0 0 0 +0.00275357 0.00385358 -0.00277543 +0 0 0 +0 0 0 +4.33332e-05 -0.00510193 0.008179 +0 0 0 +0 0 0 +-0.00872919 0.000734027 -0.00378913 +0 0 0 +0 0 0 +0.00617901 0.00769192 0.00419363 +0 0 0 +0 0 0 +-0.00109342 0.00751958 -0.00120446 +0 0 0 +0 0 0 +-0.00048848 -0.00316227 -0.00100535 +0 0 0 +0 0 0 +0.0071404 0.00331869 0.00237351 +0 0 0 +0 0 0 +-0.00528961 -0.00181138 0.00689482 +0 0 0 +0 0 0 +-0.00155324 0.00337207 -0.00375005 +0 0 0 +0 0 0 +-0.00495499 -0.000730756 -0.00124974 +0 0 0 +0 0 0 +0.00398968 0.0038799 0.0151003 +0 0 0 +0 0 0 +-0.00112601 -0.01042 -0.00604923 +0 0 0 +0 0 0 +0.00749994 0.016104 0.00779907 +0 0 0 +0 0 0 +-0.000534727 0.0124048 -0.00376745 +0 0 0 +0 0 0 +-0.00622813 0.00463624 0.00581452 +0 0 0 +0 0 0 +-0.00890926 -0.00442707 0.000775332 +0 0 0 +0 0 0 +-0.0026075 0.00403578 -0.00156429 +0 0 0 +0 0 0 +-0.00890408 0.00562807 -0.00448763 +0 0 0 +0 0 0 +0.00216716 -0.000597816 -3.25555e-05 +0 0 0 +0 0 0 +0.0106718 -0.00254772 0.00601397 +0 0 0 +0 0 0 +-0.00210315 0.010036 -0.00683073 +0 0 0 +0 0 0 +-0.00412363 -0.00501735 2.39248e-05 +0 0 0 +0 0 0 +0.00380111 0.00617459 -0.00894091 +0 0 0 +0 0 0 +2.74765e-05 0.00231631 0.00269336 +0 0 0 +0 0 0 +0.00811216 0.00334474 -0.00424563 +0 0 0 +0 0 0 +0.00523019 0.00516382 0.00493048 +0 0 0 +0 0 0 +-0.00872068 -0.00338244 -0.00143776 +0 0 0 +0 0 0 +-0.00513753 0.000501527 0.00871178 +0 0 0 +0 0 0 +0.00268232 0.00785662 -0.0110786 +0 0 0 +0 0 0 +-0.00708066 -0.00182925 0.00255259 +0 0 0 +0 0 0 +0.00574471 -0.00937093 0.00195592 +0 0 0 +0 0 0 +-0.0207558 0.00424519 -0.00411212 +0 0 0 +0 0 0 +-0.00269112 -5.50584e-05 0.0090933 +0 0 0 +0 0 0 +0.00649523 -0.00522534 0.0119984 +0 0 0 +0 0 0 +0.00184653 -0.00156135 0.00531749 +0 0 0 +0 0 0 +0.00455145 0.00165888 0.00475326 +0 0 0 +0 0 0 +0.00134256 -0.00393319 0.00145788 +0 0 0 +0 0 0 +-0.00820249 -0.00236175 0.00256002 +0 0 0 +0 0 0 +-0.00193078 -0.00184435 0.005038 +0 0 0 +0 0 0 +-0.0090793 0.0147179 0.00467211 +0 0 0 +0 0 0 +-0.0116564 0.00360824 -0.00770429 +0 0 0 +0 0 0 +0.00311589 0.00840098 0.0109078 +0 0 0 +0 0 0 +0.00716835 -0.00385999 -0.00127767 +0 0 0 +0 0 0 +0.00258053 -0.00080086 -0.00473543 +0 0 0 +0 0 0 +-0.00123194 0.00359063 -0.00066747 +0 0 0 +0 0 0 +-0.00951223 0.00627194 -0.0150627 +0 0 0 +0 0 0 +0.00486615 -0.00159079 -0.00148924 +0 0 0 +0 0 0 +0.00314454 -0.00596072 0.00406933 +0 0 0 +0 0 0 +0.00486675 0.00491107 -0.00886611 +0 0 0 +0 0 0 +0.000734497 0.000297587 -0.00596506 +0 0 0 +0 0 0 +-0.00161904 -0.00142299 0.00634615 +0 0 0 +0 0 0 +0.00675008 -0.0109899 0.000388379 +0 0 0 +0 0 0 +0.00144554 0.00213518 0.00559968 +0 0 0 +0 0 0 +-0.000720239 0.0134748 -0.00869992 +0 0 0 +0 0 0 +0.00717222 0.00113444 0.0055613 +0 0 0 +0 0 0 +0.00781443 0.000444542 0.0030511 +0 0 0 +0 0 0 +0.00221679 -0.000130216 -0.00548201 +0 0 0 +0 0 0 +0.00171526 0.00734596 0.00203386 +0 0 0 +0 0 0 +-0.0039064 -0.0104554 0.000399374 +0 0 0 +0 0 0 +0.00584727 0.00144045 0.000274483 +0 0 0 +0 0 0 +0.00516783 0.00426457 -0.0143043 +0 0 0 +0 0 0 +-0.00474601 -0.00235291 0.000397881 +0 0 0 +0 0 0 +0.00755857 0.00188103 0.00320434 +0 0 0 +0 0 0 +-0.00426726 -0.00109589 0.0165226 +0 0 0 +0 0 0 +0.00713365 -4.55887e-05 0.00195486 +0 0 0 +0 0 0 +0.00158311 -0.00927924 -0.00230793 +0 0 0 +0 0 0 +0.00620242 0.011783 -0.00438166 +0 0 0 +0 0 0 +-0.00539693 -0.00421021 -0.00527274 +0 0 0 +0 0 0 +0.000164041 0.00265239 0.00169114 +0 0 0 +0 0 0 +0.0119003 -0.000456783 -0.00861385 +0 0 0 +0 0 0 +0.00273708 -0.00317232 0.000571188 +0 0 0 +0 0 0 +-0.00277059 0.00613508 0.00955964 +0 0 0 +0 0 0 +6.20349e-05 0.000759368 -0.0112123 +0 0 0 +0 0 0 +0.00179608 -0.00155297 0.00512596 +0 0 0 +0 0 0 +0.000420892 0.0150032 -0.00647116 +0 0 0 +0 0 0 +0.00518406 -0.000423618 0.00292132 +0 0 0 +0 0 0 +-0.00573205 0.00112254 -0.000273207 +0 0 0 +0 0 0 +-3.81649e-05 0.00337933 -0.004071 +0 0 0 +0 0 0 +-0.000274954 0.00571913 -0.00981177 +0 0 0 +0 0 0 +-0.00359237 0.000524398 -0.000719584 +0 0 0 +0 0 0 +-0.00982088 0.00729321 -0.00721955 +0 0 0 +0 0 0 +-0.0113816 0.000116968 0.0111103 +0 0 0 +0 0 0 +0.00536528 -0.00558504 0.0092849 +0 0 0 +0 0 0 +0.00240374 0.000793927 -0.000829274 +0 0 0 +0 0 0 +0.0003959 0.0161029 -0.0123399 +0 0 0 +0 0 0 +0.00659893 -0.00457911 0.00316985 +0 0 0 +0 0 0 +-0.00396848 -0.00862119 -0.00176495 +0 0 0 +0 0 0 +-0.00423259 0.00311431 0.00191266 +0 0 0 +0 0 0 +-6.71786e-05 0.00323088 -0.00127701 +0 0 0 +0 0 0 +-0.00126559 0.000966813 -0.00750536 +0 0 0 +0 0 0 +-0.000425813 -0.00600583 -0.00668664 +0 0 0 +0 0 0 +0.000993072 -3.30014e-05 -0.00281287 +0 0 0 +0 0 0 +-0.00388765 0.00208246 -0.00637908 +0 0 0 +0 0 0 +-0.0102478 0.00383845 -0.00605035 +0 0 0 +0 0 0 +-0.00145633 -0.00272743 -0.00330614 +0 0 0 +0 0 0 +0.0038254 0.00343765 -0.00924427 +0 0 0 +0 0 0 +0.0029194 -0.00173355 0.0082147 +0 0 0 +0 0 0 +0.00389164 -0.00281645 0.00401902 +0 0 0 +0 0 0 +0.00132406 0.00645971 -0.00193459 +0 0 0 +0 0 0 +-0.00443555 -0.00367306 0.00211401 +0 0 0 +0 0 0 +0.00361644 -0.00554034 -0.000556487 +0 0 0 +0 0 0 +-0.00816652 -0.00301106 0.00159141 +0 0 0 +0 0 0 +0.000922533 0.00551613 -0.0034803 +0 0 0 +0 0 0 +-0.00448133 -0.00768579 -0.00542865 +0 0 0 +0 0 0 +-0.00897442 -0.00813054 0.00343739 +0 0 0 +0 0 0 +0.0112315 -0.00526866 -0.00205654 +0 0 0 +0 0 0 +0.00598647 -0.00469249 0.0135034 +0 0 0 +0 0 0 +0.00238385 0.00263148 0.00488815 +0 0 0 +0 0 0 +0.000201851 -0.00658192 -0.00837458 +0 0 0 +0 0 0 +-0.0129833 0.00404143 -0.0103602 +0 0 0 +0 0 0 +-0.00353081 0.00654926 -0.000838028 +0 0 0 +0 0 0 +-0.00206083 0.00264097 -0.00883039 +0 0 0 +0 0 0 +-0.0199792 0.00615182 -0.00858546 +0 0 0 +0 0 0 +0.0131274 0.00202401 -0.000880445 +0 0 0 +0 0 0 +-0.00237159 -0.00948707 0.00149959 +0 0 0 +0 0 0 +0.00241635 0.00267771 -0.000176131 +0 0 0 +0 0 0 +0.00466032 0.00565396 -0.00435013 +0 0 0 +0 0 0 +0.000495749 0.00112638 0.00391566 +0 0 0 +0 0 0 +0.00235042 0.00579774 0.00742377 +0 0 0 +0 0 0 +0.00335742 0.00318086 8.41622e-05 +0 0 0 +0 0 0 +-0.00426161 0.00155765 -0.00239891 +0 0 0 +0 0 0 +-0.00645769 -0.00152078 -0.00508459 +0 0 0 +0 0 0 +0.00171664 0.00734575 0.00876927 +0 0 0 +0 0 0 +-0.00683414 -0.012482 0.00482593 +0 0 0 +0 0 0 +-0.0087467 0.00263012 -0.00581131 +0 0 0 +0 0 0 +-0.00326845 -0.00187102 0.00124958 +0 0 0 +0 0 0 +-0.00513068 -0.000512351 0.000603066 +0 0 0 +0 0 0 +-0.00508731 -0.0020882 -0.00178493 +0 0 0 +0 0 0 +-0.00647826 -0.00178114 -0.0034949 +0 0 0 +0 0 0 +0.00400768 0.00141598 -0.00496786 +0 0 0 +0 0 0 +-0.00716939 0.00236964 -0.00102244 +0 0 0 +0 0 0 +-0.000564689 0.000163341 0.00357506 +0 0 0 +0 0 0 +-0.0111344 -0.00589656 0.00855062 +0 0 0 +0 0 0 +0.0103814 0.000813909 -0.013441 +0 0 0 +0 0 0 +0.0012136 0.0121394 0.00982309 +0 0 0 +0 0 0 +-0.00287196 0.00225899 -0.00108555 +0 0 0 +0 0 0 +-0.00196389 0.00432086 0.00501563 +0 0 0 +0 0 0 +-0.00299923 -0.00102258 -0.00351208 +0 0 0 +0 0 0 +0.00140759 -0.00436262 0.00199213 +0 0 0 +0 0 0 +-0.00274136 -0.00299786 -0.000191826 +0 0 0 +0 0 0 +0.00477441 -0.0100246 0.00471075 +0 0 0 +0 0 0 +0.00389904 0.00182929 -0.00386228 +0 0 0 +0 0 0 +0.000922772 -0.00512827 0.004667 +0 0 0 +0 0 0 +-0.00445715 0.00794886 -0.00728157 +0 0 0 +0 0 0 +0.00881122 -0.0161461 -0.00140791 +0 0 0 +0 0 0 +-0.00815015 0.00822859 -0.0128629 +0 0 0 +0 0 0 +-6.82674e-06 -0.00306171 0.00621439 +0 0 0 +0 0 0 +0.00369373 -0.0010271 0.00799434 +0 0 0 +0 0 0 +0.0132349 -0.000776803 -0.00606303 +0 0 0 +0 0 0 +0.000634928 -0.000281338 -0.012283 +0 0 0 +0 0 0 +-0.00644853 0.00306387 -0.010262 +0 0 0 +0 0 0 +-0.00212269 0.0036937 0.00533351 +0 0 0 +0 0 0 +0.00762542 -0.0021037 -0.00886201 +0 0 0 +0 0 0 +-0.0063626 -0.00563334 -0.0159235 +0 0 0 +0 0 0 +-0.00671488 0.00303675 0.0056239 +0 0 0 +0 0 0 +0.00750959 7.6692e-05 -0.00090799 +0 0 0 +0 0 0 +-0.0104471 0.00626451 -0.00326013 +0 0 0 +0 0 0 +-0.00836174 -0.001506 0.0021701 +0 0 0 +0 0 0 +-0.00440654 -0.00706568 -0.00848981 +0 0 0 +0 0 0 +-0.0100327 0.00672638 0.000298856 +0 0 0 +0 0 0 +0.009307 -0.00452801 -0.00688817 +0 0 0 +0 0 0 +0.00039989 0.00138093 -0.0193926 +0 0 0 +0 0 0 +0.0065403 -0.000380169 0.00320791 +0 0 0 +0 0 0 +-0.00315648 0.0072228 -0.0003275 +0 0 0 +0 0 0 +-0.0117857 -0.00589439 0.00195353 +0 0 0 +0 0 0 +0.00580987 -0.00343652 0.000966513 +0 0 0 +0 0 0 +-0.00448846 0.00277202 0.00742759 +0 0 0 +0 0 0 +-0.0114456 -0.00549094 -0.00280814 +0 0 0 +0 0 0 +-0.00327284 -0.00379359 0.0230008 +0 0 0 +0 0 0 +0.00614033 0.0127026 -0.00418378 +0 0 0 +0 0 0 +0.00554789 0.00184763 0.00266543 +0 0 0 +0 0 0 +0.00096221 0.00180696 0.00193641 +0 0 0 +0 0 0 +0.0140344 -0.00313163 0.000820456 +0 0 0 +0 0 0 +0.000117658 -0.0121214 -0.0054652 +0 0 0 +0 0 0 +-0.00183439 -0.00668513 0.00617271 +0 0 0 +0 0 0 +-0.00175261 0.0049828 -0.00995336 +0 0 0 +0 0 0 +-0.0056706 -0.00145515 -0.00606375 +0 0 0 +0 0 0 +0.00234411 -0.0118614 -0.00432863 +0 0 0 +0 0 0 +0.00998704 -0.00989919 0.00802651 +0 0 0 +0 0 0 +0.00486571 -0.0127314 0.0025783 +0 0 0 +0 0 0 +-0.00474719 0.00615223 0.00521325 +0 0 0 +0 0 0 +-0.00652802 0.0058852 0.00376914 +0 0 0 +0 0 0 +0.0091372 0.00450637 -0.00687716 +0 0 0 +0 0 0 +0.0041062 -0.00828464 0.00900524 +0 0 0 +0 0 0 +-0.00607062 -0.000622962 0.00315057 +0 0 0 +0 0 0 +0.00845301 -0.0065166 0.0018492 +0 0 0 +0 0 0 +0.0047877 0.00854886 0.00139394 +0 0 0 +0 0 0 +-0.0158224 -0.00143655 -0.00611237 +0 0 0 +0 0 0 +0.0043129 -0.00301445 0.00440395 +0 0 0 +0 0 0 +-0.00806805 0.00203253 0.00719313 +0 0 0 +0 0 0 +-0.00524786 -0.0130403 0.00655455 +0 0 0 +0 0 0 +-0.000175413 -0.00964908 0.00232741 +0 0 0 +0 0 0 +0.00368534 0.00590777 0.00288669 +0 0 0 +0 0 0 +0.00443607 -0.013501 0.00850765 +0 0 0 +0 0 0 +-0.00993035 0.00983662 0.00363892 +0 0 0 +0 0 0 +-0.00996917 -0.00152383 -0.00135017 +0 0 0 +0 0 0 +0.00526837 0.00607015 -0.0013118 +0 0 0 +0 0 0 +0.00609916 -0.0082983 -0.000264844 +0 0 0 +0 0 0 +-0.00387733 0.00590646 0.00393398 +0 0 0 +0 0 0 +-0.00846331 0.00206114 0.00653824 +0 0 0 +0 0 0 +0.00113531 -0.00612903 -0.00840422 +0 0 0 +0 0 0 +-0.00672038 -0.00109449 -0.000930985 +0 0 0 +0 0 0 +-0.000268656 0.00556976 0.0101456 +0 0 0 +0 0 0 +-0.00513066 -0.000557194 0.00731675 +0 0 0 +0 0 0 +-0.00906247 0.0105676 -0.00155757 +0 0 0 +0 0 0 +0.00179599 -0.0147625 0.00343308 +0 0 0 +0 0 0 +-0.0120912 -0.00666447 -0.0157528 +0 0 0 +0 0 0 +0.00373289 -0.00131986 0.00374035 +0 0 0 +0 0 0 +-0.00406617 -0.00176933 -0.00446159 +0 0 0 +0 0 0 +0.00102568 -0.00358104 0.0010095 +0 0 0 +0 0 0 +0.00415779 -0.00189882 0.00129712 +0 0 0 +0 0 0 +0.00426023 0.00663336 0.00123081 +0 0 0 +0 0 0 +-0.00660598 -0.00805062 0.00335618 +0 0 0 +0 0 0 +9.70251e-05 0.00534526 0.0105646 +0 0 0 +0 0 0 +-0.00764076 7.84859e-05 0.000601265 +0 0 0 +0 0 0 +-0.00578001 0.00734675 -0.0111852 +0 0 0 +0 0 0 +-0.0137841 0.0086404 0.0041699 +0 0 0 +0 0 0 +-0.000640876 0.00462616 -0.00215098 +0 0 0 +0 0 0 +-0.00431746 -0.00526841 -0.00733081 +0 0 0 +0 0 0 +0.00568041 -0.00135586 -0.00337801 +0 0 0 +0 0 0 +-0.00466626 -0.00185631 -0.000236038 +0 0 0 +0 0 0 +0.000291314 -0.0096219 -0.00859722 +0 0 0 +0 0 0 +-0.00680453 0.000138534 -0.00281652 +0 0 0 +0 0 0 +0.00259367 -0.00481295 -0.00671646 +0 0 0 +0 0 0 +0.00967184 -0.00861731 -0.00200471 +0 0 0 +0 0 0 +-0.00249749 -0.000653724 0.0102747 +0 0 0 +0 0 0 +-0.00141921 -0.00746222 -0.000300505 +0 0 0 +0 0 0 +0.014133 -0.00140395 0.00618404 +0 0 0 +0 0 0 +-0.00627151 -0.000221657 0.00293184 +0 0 0 +0 0 0 +0.00283671 0.00444701 0.0118262 +0 0 0 +0 0 0 +-0.00194982 0.00503133 -0.00311647 +0 0 0 +0 0 0 +0.00683718 -0.0020753 -0.00837432 +0 0 0 +0 0 0 +-0.0039261 -0.00339169 -0.00228657 +0 0 0 +0 0 0 +0.00891401 -0.0122539 0.00349816 +0 0 0 +0 0 0 +-0.00657787 0.011347 -0.00660283 +0 0 0 +0 0 0 +-0.00360846 -0.00227785 0.00821676 +0 0 0 +0 0 0 +0.000577046 0.00478593 0.00807533 +0 0 0 +0 0 0 +0.000932683 -0.00611472 0.00246673 +0 0 0 +0 0 0 +0.000135176 -0.0050431 -0.00584669 +0 0 0 +0 0 0 +0.00353952 0.0116529 0.00986702 +0 0 0 +0 0 0 +-0.00202005 -0.00421147 0.00344777 +0 0 0 +0 0 0 +-0.00844195 -0.0027405 0.00230446 +0 0 0 +0 0 0 +0.0108843 0.00743999 0.00408008 +0 0 0 +0 0 0 +-0.00648177 0.00332184 -0.013516 +0 0 0 +0 0 0 +0.0020348 -0.0019706 0.00143609 +0 0 0 +0 0 0 +-0.00894585 -0.00826925 -0.00178079 +0 0 0 +0 0 0 +0.00553935 -0.00267986 -0.00253104 +0 0 0 +0 0 0 +-0.00305134 0.00583623 -0.00739897 +0 0 0 +0 0 0 +-0.00394194 -1.32329e-05 -0.00999173 +0 0 0 +0 0 0 +0.00893717 0.00478107 0.00887741 +0 0 0 +0 0 0 +-0.00696607 0.0129804 0.00478155 +0 0 0 +0 0 0 +0.0125157 0.00775603 -0.00541937 +0 0 0 +0 0 0 +0.00614587 0.000334967 -0.00582479 +0 0 0 +0 0 0 +0.00444609 -0.00452177 -0.0024907 +0 0 0 +0 0 0 +0.00568596 0.00355087 0.00307766 +0 0 0 +0 0 0 +-0.000212521 -0.000481007 -0.0120924 +0 0 0 +0 0 0 +-0.00856549 0.016597 -0.0106743 +0 0 0 +0 0 0 +-0.00512974 -0.000323899 -0.00282713 +0 0 0 +0 0 0 +-0.00806675 0.00163984 0.00195218 +0 0 0 +0 0 0 +-0.00391853 0.00907969 0.0101102 +0 0 0 +0 0 0 +-0.0117093 0.00218797 -0.00634259 +0 0 0 +0 0 0 +-0.00666481 -0.0023475 -0.00114939 +0 0 0 +0 0 0 +-0.000952004 -0.0081216 -0.00373511 +0 0 0 +0 0 0 +0.00418 0.00620319 0.00874108 +0 0 0 +0 0 0 +-7.3767e-05 -0.0119971 -0.00115849 +0 0 0 +0 0 0 +-0.000935112 0.0157036 0.0039211 +0 0 0 +0 0 0 +0.00816722 0.000493054 0.000442144 +0 0 0 +0 0 0 +-0.005006 -0.00687349 0.00381331 +0 0 0 +0 0 0 +0.000310294 -0.00275964 0.00844087 +0 0 0 +0 0 0 +-0.00473476 0.00293338 0.000272867 +0 0 0 +0 0 0 +0.00329065 0.00126441 -0.0105791 +0 0 0 +0 0 0 +-0.00923369 -0.000577163 0.0135639 +0 0 0 +0 0 0 +0.00360204 -0.00329445 0.00371009 +0 0 0 +0 0 0 +0.00146911 -0.0030003 -0.000371737 +0 0 0 +0 0 0 +-0.00593852 0.00952163 -0.00246423 +0 0 0 +0 0 0 +-0.00163578 -0.00898604 -0.00119719 +0 0 0 +0 0 0 +-0.00508426 -0.00863963 -0.0139428 +0 0 0 +0 0 0 +0.0044922 0.00527153 0.00707722 +0 0 0 +0 0 0 +0.00728348 0.00751253 -0.0099345 +0 0 0 +0 0 0 +8.86933e-05 0.0100147 0.00144436 +0 0 0 +0 0 0 +-0.00548055 0.00521455 -0.00424488 +0 0 0 +0 0 0 +-0.00677277 0.00641124 0.00166722 +0 0 0 +0 0 0 +-0.00591776 -0.00591525 -0.00190804 +0 0 0 +0 0 0 +-0.010253 -0.00353694 0.0116582 +0 0 0 +0 0 0 +-0.00499866 0.000927067 -0.0141683 +0 0 0 +0 0 0 +-0.00109298 0.0137397 0.000236658 +0 0 0 +0 0 0 +0.00156093 -0.0074586 -0.00435637 +0 0 0 +0 0 0 +0.00327797 0.00453993 0.00278183 +0 0 0 +0 0 0 +0.00847486 0.000165894 0.00423954 +0 0 0 +0 0 0 +-0.00545126 -0.00682817 -0.00616332 +0 0 0 +0 0 0 +-0.0052267 0.00262957 -0.00801376 +0 0 0 +0 0 0 +0.00153231 0.0077808 -0.000502868 +0 0 0 +0 0 0 +0.013594 -0.00233411 0.00275977 +0 0 0 +0 0 0 +-0.00144232 -0.00147976 0.00287727 +0 0 0 +0 0 0 +0.00292824 0.00278037 0.0104937 +0 0 0 +0 0 0 +-0.00122869 -0.00234407 0.000856831 +0 0 0 +0 0 0 +-0.00244242 -0.00868411 0.00718042 +0 0 0 +0 0 0 +-0.00457629 -0.0017378 0.01069 +0 0 0 +0 0 0 +-0.00628042 0.00138652 -0.00337252 +0 0 0 +0 0 0 +0.00218209 0.00152358 0.00909022 +0 0 0 +0 0 0 +0.00454225 -0.00382933 0.008091 +0 0 0 +0 0 0 +-0.00472447 0.00667049 -0.0103612 +0 0 0 +0 0 0 +-0.0049081 -5.49436e-05 0.00439868 +0 0 0 +0 0 0 +-0.00954798 -0.000201512 0.0065845 +0 0 0 +0 0 0 +-0.00324526 0.000595447 -0.00381746 +0 0 0 +0 0 0 +-0.00763434 -0.00090205 -0.00194541 +0 0 0 +0 0 0 +0.00198814 0.00578744 -0.000779862 +0 0 0 +0 0 0 +-0.000688198 0.0114949 0.00414261 +0 0 0 +0 0 0 +-0.00108493 -0.00313957 -0.00620111 +0 0 0 +0 0 0 +0.00245007 -0.00596181 -0.00800479 +0 0 0 +0 0 0 +-0.00721706 0.00712942 -0.00672955 +0 0 0 +0 0 0 +-0.000701501 0.00887472 0.00321059 +0 0 0 +0 0 0 +-0.0032013 -0.00177762 -0.0021149 +0 0 0 +0 0 0 +-0.000538408 0.00312436 -0.00860098 +0 0 0 +0 0 0 +0.0103738 -0.00722214 0.00250009 +0 0 0 +0 0 0 +0.013557 0.00157096 0.00472307 +0 0 0 +0 0 0 +-0.00963088 -0.00358138 -0.000814807 +0 0 0 +0 0 0 +0.0068548 -0.0082624 -0.00229619 +0 0 0 +0 0 0 +0.00126239 0.00171394 -0.00198714 +0 0 0 +0 0 0 +-0.0122449 -0.00594919 -0.0113161 +0 0 0 +0 0 0 +0.0069462 -0.000991259 0.00430971 +0 0 0 +0 0 0 +0.00169472 -0.00382775 0.00688429 +0 0 0 +0 0 0 +-0.00374482 0.0041494 -0.00349341 +0 0 0 +0 0 0 +0.00264077 0.0153205 0.00356993 +0 0 0 +0 0 0 +-0.0106711 0.00333664 0.00207975 +0 0 0 +0 0 0 +0.00625512 -0.00722697 0.00975507 +0 0 0 +0 0 0 +0.00179893 -0.00375372 0.0045664 +0 0 0 +0 0 0 +0.00585751 -0.00985737 -0.00727691 +0 0 0 +0 0 0 +0.00721199 0.00517744 0.00515994 +0 0 0 +0 0 0 +0.00205052 -0.000386251 -0.00486549 +0 0 0 +0 0 0 +0.00105364 0.0160452 -0.0113438 +0 0 0 +0 0 0 +-0.00785129 -0.00560388 0.00536809 +0 0 0 +0 0 0 +-0.00642731 0.00201075 0.00106536 +0 0 0 +0 0 0 +-0.00355987 -0.00454537 -0.00620665 +0 0 0 +0 0 0 +-0.00272062 0.00612653 -0.00733389 +0 0 0 +0 0 0 +0.000837009 0.00405052 0.00204501 +0 0 0 +0 0 0 +-0.00418927 0.00105216 0.0122133 +0 0 0 +0 0 0 +0.000370949 -0.00971165 -0.00541682 +0 0 0 +0 0 0 +0.00161635 -0.00208605 0.00673349 +0 0 0 +0 0 0 +-0.00633673 -0.00565576 0.00532704 +0 0 0 +0 0 0 +-0.00299303 -0.00601764 0.00182298 +0 0 0 +0 0 0 +-0.00267721 -0.00125627 0.000978926 +0 0 0 +0 0 0 +0.00413449 0.0102757 0.0098778 +0 0 0 +0 0 0 +-0.00425208 0.00382595 -0.00677453 +0 0 0 +0 0 0 +0.00368786 0.00387968 -0.000680429 +0 0 0 +0 0 0 +-0.000685776 -0.0101526 -0.00606549 +0 0 0 +0 0 0 +-0.00527371 0.00606997 -0.00407649 +0 0 0 +0 0 0 +-0.00258942 0.00450496 -0.00198127 +0 0 0 +0 0 0 +0.00653295 0.00131165 -0.00270486 +0 0 0 +0 0 0 +0.00493812 0.00132769 0.000128465 +0 0 0 +0 0 0 +0.00075122 -0.00602458 -0.00201613 +0 0 0 +0 0 0 +-0.00189207 -0.00687412 0.00115203 +0 0 0 +0 0 0 +-0.00651757 0.00568151 -0.0165829 +0 0 0 +0 0 0 +-0.00961899 0.0117321 -0.0069444 +0 0 0 +0 0 0 +-0.00758893 -0.00520547 -0.0091916 +0 0 0 +0 0 0 +0.00906655 -0.00257775 -0.00258799 +0 0 0 +0 0 0 +0.0016406 0.00645168 0.00414394 +0 0 0 +0 0 0 +0.00725697 -0.00285952 0.00654003 +0 0 0 +0 0 0 +-0.00124541 -0.0105508 -0.000232969 +0 0 0 +0 0 0 +-0.0113455 0.00627594 -0.00212383 +0 0 0 +0 0 0 +-0.00913005 0.000598554 0.00108706 +0 0 0 +0 0 0 +0.00247467 0.00681867 -0.0201172 +0 0 0 +0 0 0 +0.00445474 0.000621027 0.00108281 +0 0 0 +0 0 0 +0.00444071 0.00681441 0.00261679 +0 0 0 +0 0 0 +0.0104057 -0.00192148 -0.0061863 +0 0 0 +0 0 0 +-0.0100562 -0.0174935 -0.00504894 +0 0 0 +0 0 0 +-0.000868037 0.0109987 0.00378853 +0 0 0 +0 0 0 +-0.00153837 -0.00645715 0.00337686 +0 0 0 +0 0 0 +0.000652098 -0.00717923 -0.000676504 +0 0 0 +0 0 0 +0.000768651 0.00294557 0.0124985 +0 0 0 +0 0 0 +0.00208068 -0.000570303 0.00543658 +0 0 0 +0 0 0 +0.0047356 -1.66905e-05 0.00314702 +0 0 0 +0 0 0 +-0.0142203 -0.00441478 0.00502748 +0 0 0 +0 0 0 +0.00088405 -0.00368142 -0.0116246 +0 0 0 +0 0 0 +-0.0030213 0.00258623 -0.00522554 +0 0 0 +0 0 0 +0.00104885 -0.0044973 0.000401285 +0 0 0 +0 0 0 +0.00403851 0.00431153 -0.00274422 +0 0 0 +0 0 0 +0.00668549 -0.00486322 -0.000175412 +0 0 0 +0 0 0 +-0.00856369 -0.0082385 -0.00214151 +0 0 0 +0 0 0 +0.00205549 1.6055e-05 0.000233047 +0 0 0 +0 0 0 +0.000879169 -0.00332036 0.00987067 +0 0 0 +0 0 0 +0.00650941 -0.0113659 0.00203311 +0 0 0 +0 0 0 +0.00993201 0.00348225 -0.00291356 +0 0 0 +0 0 0 +0.00635113 -0.00217627 0.0135891 +0 0 0 +0 0 0 +-0.00970261 0.00374055 0.000610234 +0 0 0 +0 0 0 +-0.00896266 0.00239459 -0.00431661 +0 0 0 +0 0 0 +0.00518756 0.00775965 -0.00282974 +0 0 0 +0 0 0 +0.00559174 0.00554503 -0.00120576 +0 0 0 +0 0 0 +0.00849337 0.0080557 0.00380591 +0 0 0 +0 0 0 +0.000540323 -0.00643334 -0.0105604 +0 0 0 +0 0 0 +-0.00156245 -0.00758462 0.0125086 +0 0 0 +0 0 0 +-0.00794204 -0.00250733 -0.00542299 +0 0 0 +0 0 0 +-0.00355442 -0.00290071 0.00246224 +0 0 0 +0 0 0 +0.00155884 0.0142457 0.00301892 +0 0 0 +0 0 0 +-0.00353128 -0.0034646 -0.0076479 +0 0 0 +0 0 0 +0.00685036 0.0069627 -0.000990677 +0 0 0 +0 0 0 +0.00496553 0.00213154 0.00553894 +0 0 0 +0 0 0 +0.0040824 -0.00511406 -0.00680455 +0 0 0 +0 0 0 +0.00133804 0.00170121 0.00385896 +0 0 0 +0 0 0 +-0.00530041 0.00241698 0.00141916 +0 0 0 +0 0 0 +-0.00402113 -5.69676e-05 -0.013654 +0 0 0 +0 0 0 +0.00518423 -0.000940459 -0.00482009 +0 0 0 +0 0 0 +-0.000447888 0.0113943 0.00594572 +0 0 0 +0 0 0 +0.0103079 -0.00855626 0.00113081 +0 0 0 +0 0 0 +-0.00154618 -0.0033909 0.00952552 +0 0 0 +0 0 0 +0.00294382 0.0113649 0.00235659 +0 0 0 +0 0 0 +0.011293 0.0023728 -0.00162058 +0 0 0 +0 0 0 +0.00667087 0.00673575 0.00830204 +0 0 0 +0 0 0 +-0.00457327 0.00738199 -0.00752211 +0 0 0 +0 0 0 +0.00240177 0.00386395 -0.00885774 +0 0 0 +0 0 0 +0.00179201 -0.0039175 0.011268 +0 0 0 +0 0 0 +-0.00550549 -0.00299643 -0.0141434 +0 0 0 +0 0 0 +0.0110754 -0.0107651 -0.00455432 +0 0 0 +0 0 0 +-0.0012042 0.0109416 0.0073278 +0 0 0 +0 0 0 +-0.00462405 0.00272162 -0.00563186 +0 0 0 +0 0 0 +-0.00446361 0.00305647 -0.00557687 +0 0 0 +0 0 0 +-0.00479249 -0.0023906 -0.00537644 +0 0 0 +0 0 0 +0.000218472 -7.79049e-05 0.00022778 +0 0 0 +0 0 0 +0.00126681 0.0043772 0.00223408 +0 0 0 +0 0 0 +0.00266291 0.0121499 0.00253468 +0 0 0 +0 0 0 +0.00377818 -0.00403103 -0.00662095 +0 0 0 +0 0 0 +0.00405306 -0.010958 0.000944912 +0 0 0 +0 0 0 +0.00623464 0.0055801 0.00221952 +0 0 0 +0 0 0 +0.00134412 -0.00560573 -0.012621 +0 0 0 +0 0 0 +-0.00265205 0.000862359 -0.00481339 +0 0 0 +0 0 0 +-0.00283012 -0.00196254 0.000205237 +0 0 0 +0 0 0 +0.0022089 -0.0122849 0.00789778 +0 0 0 +0 0 0 +-0.00402984 -0.00335158 0.00521635 +0 0 0 +0 0 0 +0.0031057 0.00584977 -0.00154202 +0 0 0 +0 0 0 +-0.00725435 0.00117917 0.00998382 +0 0 0 +0 0 0 +-0.00247647 0.0105986 -0.00100717 +0 0 0 +0 0 0 +0.00435314 -0.00189825 -0.00404794 +0 0 0 +0 0 0 +-0.00423777 -0.00447855 0.00218047 +0 0 0 +0 0 0 +-0.00463711 -0.0064934 0.00910422 +0 0 0 +0 0 0 +-0.00489351 0.00603709 -0.00850901 +0 0 0 +0 0 0 +0.00913155 -0.00641446 -0.00127634 +0 0 0 +0 0 0 +-0.0116451 -0.00531628 1.97697e-05 +0 0 0 +0 0 0 +0.00114345 0.00287383 0.000625807 +0 0 0 +0 0 0 +-0.00984348 0.00225724 0.00653502 +0 0 0 +0 0 0 +0.0104313 0.000975994 0.00900033 +0 0 0 +0 0 0 +0.00412859 -0.00696284 -0.00344809 +0 0 0 +0 0 0 +0.00959936 -2.24428e-05 -0.00563236 +0 0 0 +0 0 0 +-0.00542279 0.00593008 -0.00736143 +0 0 0 +0 0 0 +-0.00701754 0.00746588 -0.00270905 +0 0 0 +0 0 0 +0.00366143 0.0146677 -0.00151267 +0 0 0 +0 0 0 +-0.00199028 0.000338197 -0.0089612 +0 0 0 +0 0 0 +0.00734889 0.0127305 0.00299241 +0 0 0 +0 0 0 +-0.00370063 -0.00702647 0.00105398 +0 0 0 +0 0 0 +-0.0064799 0.00426535 -0.00660373 +0 0 0 +0 0 0 +0.00861007 0.00490722 0.00809692 +0 0 0 +0 0 0 +-0.00848755 -0.00619738 8.01654e-05 +0 0 0 +0 0 0 +-0.00122198 0.00320425 0.00112039 +0 0 0 +0 0 0 +0.000434575 -0.0117803 0.000588467 +0 0 0 +0 0 0 +-0.00429954 -0.00424946 0.00588094 +0 0 0 +0 0 0 +-0.00461824 -0.00575993 0.00395219 +0 0 0 +0 0 0 +0.00156002 -0.00364309 0.00287154 +0 0 0 +0 0 0 +-0.0135449 0.00692636 -9.61048e-05 +0 0 0 +0 0 0 +0.00301329 -0.00522957 4.33841e-05 +0 0 0 +0 0 0 +-0.00904321 -0.000580172 0.0102671 +0 0 0 +0 0 0 +0.00608885 -0.00260786 -0.00779211 +0 0 0 +0 0 0 +-0.0109682 -0.00622208 0.00550355 +0 0 0 +0 0 0 +-0.00584322 -0.00192433 0.00412798 +0 0 0 +0 0 0 +0.00193331 -0.00661704 -0.00897714 +0 0 0 +0 0 0 +-0.00626029 -0.000182871 0.00196085 +0 0 0 +0 0 0 +-0.0111207 0.00524003 -0.00665566 +0 0 0 +0 0 0 +-0.00203529 -0.00437267 -0.0111891 +0 0 0 +0 0 0 +-0.0125389 -0.00695139 -0.0177612 +0 0 0 +0 0 0 +0.0004607 0.000634291 -0.00501973 +0 0 0 +0 0 0 +0.0125397 -0.00189651 0.0100675 +0 0 0 +0 0 0 +0.00744698 0.000593423 0.00318608 +0 0 0 +0 0 0 +0.00596042 0.00660071 -0.000200972 +0 0 0 +0 0 0 +-0.000684264 -0.00357128 0.00573146 +0 0 0 +0 0 0 +-0.00714149 -0.00380266 -0.0105187 +0 0 0 +0 0 0 +-0.00324607 -3.62298e-05 -0.0119682 +0 0 0 +0 0 0 +-0.000248704 0.00558754 -0.00294958 +0 0 0 +0 0 0 +-0.00101406 -0.00137475 -0.00399083 +0 0 0 +0 0 0 +0.00235001 -0.00549346 0.00546981 +0 0 0 +0 0 0 +0.00333524 0.00497436 0.00746926 +0 0 0 +0 0 0 +-0.00289261 -0.0117721 0.00207717 +0 0 0 +0 0 0 +-0.000553619 -0.00352906 0.00206203 +0 0 0 +0 0 0 +0.0033346 -0.0108761 0.00297936 +0 0 0 +0 0 0 +0.00129912 0.00127006 -0.00603469 +0 0 0 +0 0 0 +-0.003248 0.00948256 0.0102724 +0 0 0 +0 0 0 +0.00504204 0.000582048 0.00231035 +0 0 0 +0 0 0 +-3.21583e-05 0.00332244 -0.00738979 +0 0 0 +0 0 0 +0.00404996 0.00528683 0.00549738 +0 0 0 +0 0 0 +0.00557042 0.00010409 0.00102332 +0 0 0 +0 0 0 +-0.000978292 -0.00942745 -0.0102206 +0 0 0 +0 0 0 +-0.00247267 0.00139915 -0.00120953 +0 0 0 +0 0 0 +0.00750863 -0.00548896 -0.0052133 +0 0 0 +0 0 0 +-0.00950094 -0.00880348 -0.0122136 +0 0 0 +0 0 0 +0.0127548 0.00111406 0.00105907 +0 0 0 +0 0 0 +0.00065762 -0.00351666 0.00697727 +0 0 0 +0 0 0 +0.00126355 -0.0073842 0.00410429 +0 0 0 +0 0 0 +0.0109397 -0.000316843 0.00137756 +0 0 0 +0 0 0 +-0.00307203 0.00134143 0.00646261 +0 0 0 +0 0 0 +-0.00574242 -0.00884047 4.17237e-05 +0 0 0 +0 0 0 +-0.00982327 0.000547087 0.00466283 +0 0 0 +0 0 0 +0.00752131 -0.00193961 0.00157548 +0 0 0 +0 0 0 +4.92052e-05 -0.00519096 -0.000872564 +0 0 0 +0 0 0 +0.00351649 -0.000915721 0.000970035 +0 0 0 +0 0 0 +-0.00372029 -8.73932e-05 -0.0251831 +0 0 0 +0 0 0 +-0.00400627 0.00625105 0.00251951 +0 0 0 +0 0 0 +-0.000110909 0.00508744 0.00839358 +0 0 0 +0 0 0 +0.00611326 -0.00306524 -0.00142923 +0 0 0 +0 0 0 +0.00782981 -0.00340906 -0.00406922 +0 0 0 +0 0 0 +-0.000190903 -0.00154263 0.00536751 +0 0 0 +0 0 0 +-9.94415e-05 0.00185335 0.0155899 +0 0 0 +0 0 0 +0.00893775 -0.0111177 0.00320353 +0 0 0 +0 0 0 +0.00184548 0.00450993 0.00755911 +0 0 0 +0 0 0 +-0.00626532 0.0015126 -0.0110263 +0 0 0 +0 0 0 +-0.00035839 -0.0115278 0.00671803 +0 0 0 +0 0 0 +0.00852357 0.00775893 0.010656 +0 0 0 +0 0 0 +-0.000584206 0.000401975 -0.00237751 +0 0 0 +0 0 0 +-0.00940081 0.00181776 -0.00437106 +0 0 0 +0 0 0 +-0.00440958 -0.0045427 -0.00257425 +0 0 0 +0 0 0 +0.00571874 -0.00294865 0.000157917 +0 0 0 +0 0 0 +-0.00579852 0.0107731 -0.0143884 +0 0 0 +0 0 0 +0.00233874 -0.00914445 -0.00207198 +0 0 0 +0 0 0 +-0.0033589 0.000132715 0.000128613 +0 0 0 +0 0 0 +0.000811778 0.00193113 0.00242102 +0 0 0 +0 0 0 +-0.0104932 0.0121363 0.0043542 +0 0 0 +0 0 0 +0.00363498 -0.000453257 -0.00337384 +0 0 0 +0 0 0 +0.000497956 -0.00385239 0.00251496 +0 0 0 +0 0 0 +-0.0101862 0.00296493 0.00487328 +0 0 0 +0 0 0 +-0.00505561 -0.00775103 -0.00768213 +0 0 0 +0 0 0 +0.00885604 0.00566288 -0.00328645 +0 0 0 +0 0 0 +0.0062952 0.00830102 0.00216781 +0 0 0 +0 0 0 +0.00579276 -0.017033 -0.00568634 +0 0 0 +0 0 0 +-0.00612657 0.00302543 -0.00770251 +0 0 0 +0 0 0 +0.00724789 -0.00588417 0.00484509 +0 0 0 +0 0 0 +0.0109628 0.00160406 -6.15701e-05 +0 0 0 +0 0 0 +-0.0123403 0.00423709 0.0112484 +0 0 0 +0 0 0 +-0.0130442 -0.0040637 0.00195937 +0 0 0 +0 0 0 +-0.00541778 -0.00486646 -0.00326898 +0 0 0 +0 0 0 +0.00679057 -0.0118113 -0.00518252 +0 0 0 +0 0 0 +0.00691046 -0.00670298 0.00687358 +0 0 0 +0 0 0 +0.012726 0.00195975 0.00763887 +0 0 0 +0 0 0 +-0.000351368 0.000794639 -0.000284427 +0 0 0 +0 0 0 +0.00474338 -0.0021102 -0.00328862 +0 0 0 +0 0 0 +0.00992445 0.00399988 -0.0100021 +0 0 0 +0 0 0 +0.00158099 -0.00380202 0.00174893 +0 0 0 +0 0 0 +-0.00917731 0.00298031 -0.000751761 +0 0 0 +0 0 0 +-0.00622 -0.00997059 -0.0030176 +0 0 0 +0 0 0 +0.00353776 -0.00753062 0.00108322 +0 0 0 +0 0 0 +-0.00213755 -0.00172107 0.00208727 +0 0 0 +0 0 0 +-0.00536599 0.00249697 0.00304377 +0 0 0 +0 0 0 +-0.0105118 0.00646966 -0.00959603 +0 0 0 +0 0 0 +0.0093702 -0.00629446 -0.00262255 +0 0 0 +0 0 0 +-0.000617183 0.00415869 -0.0036036 +0 0 0 +0 0 0 +-0.00223882 0.00326023 -0.00867628 +0 0 0 +0 0 0 +-0.00954368 0.00272875 0.00128662 +0 0 0 +0 0 0 +-0.00305069 -0.0092019 -0.00149377 +0 0 0 +0 0 0 +-0.00625916 -0.000305357 0.00722146 +0 0 0 +0 0 0 +-0.000873512 -0.00531736 -0.00484429 +0 0 0 +0 0 0 +-0.00855271 0.00148357 -0.00456348 +0 0 0 +0 0 0 +0.00114646 -0.00586984 -0.00397302 +0 0 0 +0 0 0 +-0.00250203 -0.0131919 -0.00736948 +0 0 0 +0 0 0 +-0.0110194 0.00211562 0.00727081 +0 0 0 +0 0 0 +0.00369183 0.00723357 -0.0017431 +0 0 0 +0 0 0 +0.000749892 0.0050456 0.00258543 +0 0 0 +0 0 0 +-0.0112303 0.00520155 0.00358491 +0 0 0 +0 0 0 +0.00349427 0.00795006 -0.00104609 +0 0 0 +0 0 0 +-0.00359159 -0.000510004 -0.00498805 +0 0 0 +0 0 0 +0.00578254 -0.00257889 -0.014409 +0 0 0 +0 0 0 +-0.00148936 -0.0171766 0.00489431 +0 0 0 +0 0 0 +0.0019544 -0.00401692 0.00123856 +0 0 0 +0 0 0 +-0.00792634 0.00296971 0.00345211 +0 0 0 +0 0 0 +-0.00900034 0.00162356 -0.00402187 +0 0 0 +0 0 0 +-0.00700408 0.00223818 0.000530966 +0 0 0 +0 0 0 +0.00751505 0.000119458 -0.00816129 +0 0 0 +0 0 0 +-0.0095314 -0.00361229 0.00538326 +0 0 0 +0 0 0 +0.00527518 -0.00670344 0.0123899 +0 0 0 +0 0 0 +-0.00414731 0.00463389 0.00481318 +0 0 0 +0 0 0 +0.00472485 -0.00412876 0.00242349 +0 0 0 +0 0 0 +0.00296657 -0.00213154 0.00303298 +0 0 0 +0 0 0 +0.00570969 -0.00609129 0.00413249 +0 0 0 +0 0 0 +0.00554785 -0.013248 0.00513741 +0 0 0 +0 0 0 +-0.00488045 0.0166785 0.0029506 +0 0 0 +0 0 0 +0.00596813 -0.00338202 -0.00889505 +0 0 0 +0 0 0 +-0.00881893 0.0234853 -0.00535284 +0 0 0 +0 0 0 +0.0024038 0.00235989 -0.00685012 +0 0 0 +0 0 0 +-0.00727718 0.00232433 -2.60207e-06 +0 0 0 +0 0 0 +0.0084121 -0.00505206 0.0114788 +0 0 0 +0 0 0 +-0.00408904 0.00101735 0.0021195 +0 0 0 +0 0 0 +-0.00492968 -0.00517093 -0.0034694 +0 0 0 +0 0 0 +0.00301953 -0.00856948 -0.0132677 +0 0 0 +0 0 0 +-0.00860963 -0.00217475 0.00292601 +0 0 0 +0 0 0 +0.0118756 -0.00375922 0.005592 +0 0 0 +0 0 0 +0.00793046 -0.00574258 -0.00316797 +0 0 0 +0 0 0 +-0.0123175 -0.0049586 0.00328871 +0 0 0 +0 0 0 +0.00589391 -0.00322245 -0.00328059 +0 0 0 +0 0 0 +0.00248801 0.0140689 0.00646859 +0 0 0 +0 0 0 +0.00244885 0.00148219 0.00724338 +0 0 0 +0 0 0 +-0.00644078 0.0069158 -0.00199153 +0 0 0 +0 0 0 +-0.00398382 -0.00100592 -0.0019101 +0 0 0 +0 0 0 +-0.000372825 0.00539226 -0.0030465 +0 0 0 +0 0 0 +-0.00615474 0.00218696 -0.00520429 +0 0 0 +0 0 0 +-0.00496496 0.00461637 0.00695779 +0 0 0 +0 0 0 +-0.00446577 0.00867272 0.00969173 +0 0 0 +0 0 0 +0.0031874 0.00615275 0.000261091 +0 0 0 +0 0 0 +-0.0124846 0.00719755 0.00172262 +0 0 0 +0 0 0 +0.00257773 0.00186176 0.010667 +0 0 0 +0 0 0 +0.00358038 -0.00473701 -0.00720138 +0 0 0 +0 0 0 +-0.0149694 -0.00185727 -0.00021333 +0 0 0 +0 0 0 +0.0116844 -0.00221036 -0.0105606 +0 0 0 +0 0 0 +-0.00495932 -0.00154283 0.00216972 +0 0 0 +0 0 0 +-0.0023859 0.00727233 0.000235702 +0 0 0 +0 0 0 +-0.00249437 -0.00441815 -0.00785604 +0 0 0 +0 0 0 +-0.00214143 0.00261316 0.005559 +0 0 0 +0 0 0 +-0.00894323 0.000187232 -0.00144013 +0 0 0 +0 0 0 +0.00220571 0.00042063 0.00377518 +0 0 0 +0 0 0 +0.000226757 -0.00167648 0.002453 +0 0 0 +0 0 0 +0.00376075 0.00355444 -0.00431163 +0 0 0 +0 0 0 +-0.000292835 -0.00119434 -0.00421732 +0 0 0 +0 0 0 +0.00607477 0.00739131 0.00211148 +0 0 0 +0 0 0 +-0.00285813 -0.00306359 0.00456848 +0 0 0 +0 0 0 +0.00457272 -0.00281938 0.00479818 +0 0 0 +0 0 0 +0.00525762 -0.00558723 -0.000263422 +0 0 0 +0 0 0 +0.00389116 -0.00061085 -0.00276716 +0 0 0 +0 0 0 +-0.000212171 0.00988596 0.0175778 +0 0 0 +0 0 0 +-0.00442928 0.00553819 0.00148617 +0 0 0 +0 0 0 +-0.000714365 0.00504897 0.00576845 +0 0 0 +0 0 0 +-6.04871e-05 -0.00401287 -0.00390048 +0 0 0 +0 0 0 +-0.000119989 -0.00251285 -0.00211363 +0 0 0 +0 0 0 +0.00391689 -0.00839261 0.00620425 +0 0 0 +0 0 0 +0.00326177 -0.00306444 -0.00790892 +0 0 0 +0 0 0 +-0.0107716 0.00878749 0.012136 +0 0 0 +0 0 0 +-0.000174977 0.00726454 -0.00845691 +0 0 0 +0 0 0 +0.0116929 -0.00381197 -0.00468123 +0 0 0 +0 0 0 +0.00240735 -0.0022603 0.00534874 +0 0 0 +0 0 0 +-0.00828426 0.0003366 0.000778236 +0 0 0 +0 0 0 +-0.00643031 0.00514468 0.00716998 +0 0 0 +0 0 0 +-0.00257209 0.00243096 -0.00225184 +0 0 0 +0 0 0 +0.0031409 0.00401869 -0.01195 +0 0 0 +0 0 0 +0.00165168 -0.00240414 -0.00373725 +0 0 0 +0 0 0 +-0.00407697 0.00332421 -0.000754158 +0 0 0 +0 0 0 +0.00199188 0.00663597 0.00688589 +0 0 0 +0 0 0 +0.00133673 0.00971044 0.0102803 +0 0 0 +0 0 0 +0.000938547 0.0160236 -0.00305169 +0 0 0 +0 0 0 +0.00747672 -0.0137858 -0.0151276 +0 0 0 +0 0 0 +0.00633957 -0.00224037 0.00392073 +0 0 0 +0 0 0 +0.00309508 0.00174343 -0.00101037 +0 0 0 +0 0 0 +0.00264439 -0.00576956 -0.00187585 +0 0 0 +0 0 0 +0.000205381 -0.00875209 -0.00415406 +0 0 0 +0 0 0 +-0.00277195 -0.00183453 -0.00107621 +0 0 0 +0 0 0 +-0.00120731 -0.00337214 0.0065902 +0 0 0 +0 0 0 +-0.0060859 0.0042336 0.0139527 +0 0 0 +0 0 0 +-0.00509155 0.00983039 0.00234542 +0 0 0 +0 0 0 +-0.00737223 0.00103777 -0.00631613 +0 0 0 +0 0 0 +-0.00367747 -0.00449546 0.00223596 +0 0 0 +0 0 0 +-0.00701202 0.0065699 0.00406277 +0 0 0 +0 0 0 +7.08958e-05 0.00213618 0.00202368 +0 0 0 +0 0 0 +0.00605811 -0.00302957 -0.00282395 +0 0 0 +0 0 0 +0.000540788 0.00650348 0.00448111 +0 0 0 +0 0 0 +0.00838991 0.00442437 -0.00348422 +0 0 0 +0 0 0 +0.000188726 0.00879206 0.00882294 +0 0 0 +0 0 0 +0.00152177 0.00773133 0.00158863 +0 0 0 +0 0 0 +0.0109321 0.000773107 0.00115965 +0 0 0 +0 0 0 +0.00170535 -0.00666294 -0.000112783 +0 0 0 +0 0 0 +-0.000355585 0.00518209 0.00322796 +0 0 0 +0 0 0 +-0.00471169 -0.0013209 0.00756496 +0 0 0 +0 0 0 +-0.00276636 -0.0086318 -0.00649012 +0 0 0 +0 0 0 +-0.00540162 0.0025303 -0.00997197 +0 0 0 +0 0 0 +0.00455967 0.000484408 -0.0125834 +0 0 0 +0 0 0 +0.00393133 -0.00620661 -0.00901512 +0 0 0 +0 0 0 +0.00485128 -0.00020091 -0.00435046 +0 0 0 +0 0 0 +0.0013977 -0.00814448 -0.00348025 +0 0 0 +0 0 0 +-0.00160682 -0.00519595 0.00168266 +0 0 0 +0 0 0 +0.000349327 -0.00199939 0.00643739 +0 0 0 +0 0 0 +-0.000660999 -0.00343742 0.00659076 +0 0 0 +0 0 0 +-0.00754331 0.0143451 -0.0101802 +0 0 0 +0 0 0 diff --git a/dmff/admp/examples/water_pol_1024/dipole_2 b/dmff/admp/examples/water_pol_1024/dipole_2 new file mode 100644 index 000000000..42502a4ad --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/dipole_2 @@ -0,0 +1,6 @@ +2.01895e-05 6.37427e-06 3.93395e-06 +0 0 0 +0 0 0 +4.695950802904462e-06 5.065391118436792e-06 4.843786768364899e-05 +0 0 0 +0 0 0 diff --git a/dmff/admp/examples/water_pol_1024/mpidwater.xml b/dmff/admp/examples/water_pol_1024/mpidwater.xml new file mode 100644 index 000000000..a5a77c819 --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/mpidwater.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dmff/admp/examples/water_pol_1024/ref_out b/dmff/admp/examples/water_pol_1024/ref_out new file mode 100644 index 000000000..91dc38b55 --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/ref_out @@ -0,0 +1,3073 @@ +# Electrostatic Energy (kJ/mol) +-0.000978037 -0.000978037 -0.0009246344 +-0.102743 -0.102743 -0.10276242 +-0.0835381 -0.0835381 -0.083497904 +0.016815 0.016815 0.016769728 +0.0104498 0.0104498 0.010405844 +0.0955635 0.0955635 0.09559388 +0.104807 0.104807 0.10483148 +0.153637 0.153637 0.15365247 +-0.0934142 -0.0934142 -0.09342755 +0.0268184 0.0268184 0.026805144 +0.0663563 0.0663563 0.06643988 +-0.0085569 -0.0085569 -0.008542149 +0.00439397 0.00439397 0.0043884227 +0.120955 0.120955 0.120904334 +-0.0798317 -0.0798317 -0.07980968 +0.0757021 0.0757021 0.07567475 +0.0274864 0.0274864 0.027549084 +-0.0405105 -0.0405105 -0.040603403 +-0.0374424 -0.0374424 -0.03742649 +-0.0805664 -0.0805664 -0.08054199 +0.0310999 0.0310999 0.031121153 +0.0300064 0.0300064 0.030048737 +0.0103427 0.0103427 0.010275945 +-0.0607688 -0.0607688 -0.06081114 +-0.0513748 -0.0513748 -0.051406108 +0.0259173 0.0259173 0.025934193 +0.138984 0.138984 0.13898748 +0.0611206 0.0611206 0.06107753 +0.0178956 0.0178956 0.017873581 +0.0330758 0.0330758 0.03311796 +0.0309779 0.0309779 0.030901458 +-0.123237 -0.123237 -0.123242036 +-0.0151633 -0.0151633 -0.015105004 +0.112893 0.112893 0.112837195 +-0.00925505 -0.00925505 -0.009250057 +-0.0345641 -0.0345641 -0.034557477 +-0.0823225 -0.0823225 -0.082265384 +0.0481008 0.0481008 0.048090007 +-0.0517028 -0.0517028 -0.051708378 +0.105862 0.105862 0.105848126 +-0.173504 -0.173504 -0.17351273 +0.0505209 0.0505209 0.050505754 +0.0507972 0.0507972 0.050819334 +0.0427566 0.0427566 0.042736936 +0.0207499 0.0207499 0.020860381 +-0.160562 -0.160562 -0.160556 +-0.0375995 -0.0375995 -0.037627235 +-0.00162321 -0.00162321 -0.0016356776 +-0.0232523 -0.0232523 -0.0232629 +0.0223238 0.0223238 0.022284439 +-0.0650886 -0.0650886 -0.0650988 +0.0907927 0.0907927 0.09082768 +0.0168353 0.0168353 0.016714016 +-0.0335751 -0.0335751 -0.033563048 +0.00391106 0.00391106 0.0038506608 +-0.0560563 -0.0560563 -0.056059826 +0.039132 0.039132 0.03908429 +-0.0129292 -0.0129292 -0.01287703 +-0.139697 -0.139697 -0.13972948 +-0.130065 -0.130065 -0.13009194 +0.0253837 0.0253837 0.025352951 +-0.116289 -0.116289 -0.116327606 +-0.0520366 -0.0520366 -0.052090168 +-0.0331825 -0.0331825 -0.033208787 +-0.0396823 -0.0396823 -0.039764084 +-0.0218062 -0.0218062 -0.021800652 +0.009465 0.009465 0.00946171 +-0.0202349 -0.0202349 -0.02020945 +-0.0330577 -0.0330577 -0.033009358 +-0.110558 -0.110558 -0.110641055 +-0.00308164 -0.00308164 -0.0032061008 +-0.0228239 -0.0228239 -0.022786988 +0.124406 0.124406 0.1244152 +-0.0204707 -0.0204707 -0.020548275 +-0.0693733 -0.0693733 -0.06936826 +-0.0173319 -0.0173319 -0.017314244 +-0.0331657 -0.0331657 -0.033111963 +0.0166376 0.0166376 0.016573595 +-0.0273922 -0.0273922 -0.027289782 +0.0197408 0.0197408 0.01972867 +-0.0392151 -0.0392151 -0.039176192 +-0.0667702 -0.0667702 -0.06685412 +0.0334124 0.0334124 0.033450983 +-0.126923 -0.126923 -0.12693891 +0.0498793 0.0498793 0.049883366 +0.0726738 0.0726738 0.07270083 +0.0236643 0.0236643 0.02365815 +-0.100955 -0.100955 -0.10097964 +-0.112588 -0.112588 -0.11249905 +0.042185 0.042185 0.04217768 +0.026019 0.026019 0.026027782 +0.00417779 0.00417779 0.0040939604 +-0.0626278 -0.0626278 -0.06261677 +0.0249888 0.0249888 0.024839833 +-0.0228331 -0.0228331 -0.02278179 +0.0721147 0.0721147 0.07204127 +0.0445673 0.0445673 0.044642683 +0.00574593 0.00574593 0.0056889006 +-0.0796422 -0.0796422 -0.07966513 +-0.00312778 -0.00312778 -0.00310903 +0.000341629 0.000341629 0.00032416594 +0.00317727 0.00317727 0.0032193258 +-0.0392655 -0.0392655 -0.039211046 +0.0947377 0.0947377 0.094688065 +-0.015633 -0.015633 -0.015599208 +-0.0386247 -0.0386247 -0.038676944 +-0.115072 -0.115072 -0.11509355 +-0.0401078 -0.0401078 -0.040103845 +-0.0888192 -0.0888192 -0.08882104 +0.0884608 0.0884608 0.088482276 +-0.00281786 -0.00281786 -0.0027755555 +0.0827756 0.0827756 0.082758315 +0.0138916 0.0138916 0.013870654 +0.00213653 0.00213653 0.0021471833 +-0.0314245 -0.0314245 -0.031465173 +0.0726788 0.0726788 0.072577395 +-0.00613722 -0.00613722 -0.0061118966 +0.0755656 0.0755656 0.075477205 +0.0489949 0.0489949 0.048945636 +-0.0309753 -0.0309753 -0.030980904 +-0.0633686 -0.0633686 -0.063331515 +0.115392 0.115392 0.11540095 +0.00473853 0.00473853 0.004746145 +0.0195559 0.0195559 0.0195736 +0.0604159 0.0604159 0.060439475 +-0.0785683 -0.0785683 -0.078627884 +0.0611166 0.0611166 0.061059937 +-0.0239653 -0.0239653 -0.023952626 +0.0120471 0.0120471 0.011997648 +-0.0724835 -0.0724835 -0.072497904 +-0.0466115 -0.0466115 -0.04660019 +-0.0739829 -0.0739829 -0.074007384 +0.0293285 0.0293285 0.02935563 +0.00757116 0.00757116 0.007629278 +-0.0542986 -0.0542986 -0.054337583 +-0.0321717 -0.0321717 -0.03217816 +0.0587291 0.0587291 0.058676615 +-0.0449816 -0.0449816 -0.045017943 +0.0852951 0.0852951 0.08532782 +-0.073382 -0.073382 -0.07333848 +0.00909686 0.00909686 0.009140668 +0.0462385 0.0462385 0.046188693 +0.0435736 0.0435736 0.043652207 +0.0220974 0.0220974 0.022020265 +-0.00210808 -0.00210808 -0.002062888 +-0.099051 -0.099051 -0.099001996 +-0.0681186 -0.0681186 -0.06808492 +0.0519537 0.0519537 0.051970724 +0.0774189 0.0774189 0.07739804 +0.0934357 0.0934357 0.093465924 +-0.0791618 -0.0791618 -0.07919154 +-0.0701282 -0.0701282 -0.07018024 +-0.0573458 -0.0573458 -0.05735159 +-0.0353672 -0.0353672 -0.03540227 +0.0218662 0.0218662 0.02181031 +0.0116191 0.0116191 0.011622794 +-0.00824194 -0.00824194 -0.008287224 +0.0763499 0.0763499 0.076203 +0.101212 0.101212 0.10113292 +-0.0582191 -0.0582191 -0.05811282 +0.0637928 0.0637928 0.06371929 +0.0340626 0.0340626 0.034065444 +0.0135849 0.0135849 0.013641203 +0.00574534 0.00574534 0.0057200785 +0.0486814 0.0486814 0.048708744 +0.0672225 0.0672225 0.0671852 +0.0484596 0.0484596 0.048546817 +0.0758249 0.0758249 0.07579618 +0.00442829 0.00442829 0.004520492 +0.0999001 0.0999001 0.09987887 +-0.0079784 -0.0079784 -0.007969893 +-0.0374611 -0.0374611 -0.037525218 +-0.162288 -0.162288 -0.1623232 +0.117805 0.117805 0.11780985 +-0.0257662 -0.0257662 -0.025942147 +0.0363066 0.0363066 0.036364634 +-0.0124877 -0.0124877 -0.012436032 +-0.00491337 -0.00491337 -0.0049312925 +-0.0467918 -0.0467918 -0.046847787 +0.066654 0.066654 0.06670604 +-0.0798403 -0.0798403 -0.07975273 +0.0187673 0.0187673 0.018869242 +-0.00592901 -0.00592901 -0.0059065702 +0.00873825 0.00873825 0.0087352665 +-0.0367945 -0.0367945 -0.036789756 +-0.0136084 -0.0136084 -0.013591378 +-0.124228 -0.124228 -0.12422042 +-0.0596143 -0.0596143 -0.059556626 +-0.102283 -0.102283 -0.1022434 +-0.00180247 -0.00180247 -0.0017969046 +0.00531004 0.00531004 0.0053812126 +-0.0128713 -0.0128713 -0.0128396 +-0.0415982 -0.0415982 -0.041574072 +-0.141561 -0.141561 -0.14159442 +0.0939265 0.0939265 0.093931176 +-0.100344 -0.100344 -0.100434124 +0.038062 0.038062 0.038143303 +0.0366314 0.0366314 0.03660018 +0.0392728 0.0392728 0.03925713 +-0.0100683 -0.0100683 -0.010067229 +0.0206949 0.0206949 0.020763243 +0.115188 0.115188 0.115222864 +0.0717167 0.0717167 0.07169772 +-0.0074889 -0.0074889 -0.0074028266 +0.0628949 0.0628949 0.062811285 +0.0640248 0.0640248 0.063950494 +0.00293654 0.00293654 0.0029404445 +-0.0909805 -0.0909805 -0.09095735 +-0.00491437 -0.00491437 -0.004932307 +0.0161602 0.0161602 0.016175274 +-0.0177572 -0.0177572 -0.017717754 +0.0675042 0.0675042 0.06759375 +0.0826887 0.0826887 0.08271368 +-0.0197614 -0.0197614 -0.019786801 +0.110562 0.110562 0.11055801 +-0.0612657 -0.0612657 -0.06124725 +0.0971752 0.0971752 0.09724281 +-0.0739067 -0.0739067 -0.073933385 +0.0357604 0.0357604 0.035735052 +0.00195267 0.00195267 0.0018636361 +-0.0786269 -0.0786269 -0.078644186 +0.0607746 0.0607746 0.060787506 +-0.103708 -0.103708 -0.10375059 +0.0245087 0.0245087 0.024471499 +-0.0041738 -0.0041738 -0.0041777147 +0.0256772 0.0256772 0.025716968 +0.0215356 0.0215356 0.021548763 +-0.00762005 -0.00762005 -0.0075874007 +0.0379047 0.0379047 0.037899196 +-0.00474574 -0.00474574 -0.004721765 +-0.0298218 -0.0298218 -0.02978809 +-0.00165421 -0.00165421 -0.001588367 +-0.0055532 -0.0055532 -0.005577109 +0.148757 0.148757 0.14871967 +0.111802 0.111802 0.1117918 +0.136549 0.136549 0.13650532 +-0.320468 -0.320468 -0.320462 +0.153225 0.153225 0.1532618 +-0.103171 -0.103171 -0.103167646 +-0.0227375 -0.0227375 -0.022724075 +-0.0212336 -0.0212336 -0.02118464 +0.0274542 0.0274542 0.0274457 +-0.0933705 -0.0933705 -0.093353316 +0.0616534 0.0616534 0.061680783 +0.130132 0.130132 0.13006534 +0.000547625 0.000547625 0.0005443875 +-0.0929046 -0.0929046 -0.0928586 +0.0852819 0.0852819 0.08526703 +-0.0192719 -0.0192719 -0.019286837 +-0.0241705 -0.0241705 -0.02414068 +0.0226907 0.0226907 0.022724058 +-0.0449038 -0.0449038 -0.04484582 +-0.0920485 -0.0920485 -0.092061274 +-0.0746917 -0.0746917 -0.07470347 +0.00557805 0.00557805 0.0055826753 +-0.058951 -0.058951 -0.058880307 +0.0506319 0.0506319 0.050631188 +0.0270818 0.0270818 0.027078094 +0.0583662 0.0583662 0.058420297 +-0.012291 -0.012291 -0.012270804 +0.0289874 0.0289874 0.028918037 +0.094816 0.094816 0.09479927 +0.109469 0.109469 0.10941394 +0.0114495 0.0114495 0.011429634 +-0.0838529 -0.0838529 -0.08382618 +-0.0821476 -0.0821476 -0.08226805 +-0.0669953 -0.0669953 -0.06700538 +0.0484815 0.0484815 0.048445 +-0.0317928 -0.0317928 -0.031828027 +0.0731462 0.0731462 0.07308662 +0.0497919 0.0497919 0.049735937 +0.0490789 0.0490789 0.04901715 +-0.0180653 -0.0180653 -0.018020714 +0.0854981 0.0854981 0.085526675 +0.10314 0.10314 0.10313643 +-0.0320549 -0.0320549 -0.032034438 +-0.0415836 -0.0415836 -0.041452892 +-0.0892292 -0.0892292 -0.08931292 +-0.0167608 -0.0167608 -0.016893212 +-0.0813587 -0.0813587 -0.08136736 +0.118199 0.118199 0.11820802 +0.0557071 0.0557071 0.055674415 +-0.0374275 -0.0374275 -0.037347678 +0.00783917 0.00783917 0.007890913 +0.064928 0.064928 0.06490861 +0.0324764 0.0324764 0.032358546 +0.0810909 0.0810909 0.081053086 +0.0293951 0.0293951 0.029413521 +-0.0546086 -0.0546086 -0.054644782 +-0.0241054 -0.0241054 -0.024175035 +0.110425 0.110425 0.11037773 +-0.138394 -0.138394 -0.13835248 +0.0240158 0.0240158 0.024092274 +0.0286925 0.0286925 0.028710723 +0.0511851 0.0511851 0.05115573 +-0.00957279 -0.00957279 -0.009556607 +-0.0176611 -0.0176611 -0.017636163 +0.115771 0.115771 0.115647905 +-0.0931405 -0.0931405 -0.0932004 +0.0416637 0.0416637 0.04166412 +-0.0225243 -0.0225243 -0.022508865 +0.0246387 0.0246387 0.024664078 +-0.0268514 -0.0268514 -0.026871089 +0.0691816 0.0691816 0.06925517 +-0.0831442 -0.0831442 -0.083175905 +-0.0121352 -0.0121352 -0.012140918 +-0.063306 -0.063306 -0.063314565 +-0.000731156 -0.000731156 -0.0007906423 +0.0572808 0.0572808 0.05725406 +0.0167653 0.0167653 0.016748115 +0.00132109 0.00132109 0.0013432668 +0.0343913 0.0343913 0.03439927 +-0.070473 -0.070473 -0.07034348 +-0.000197325 -0.000197325 -0.00022306282 +-0.0325234 -0.0325234 -0.03252341 +-0.0632247 -0.0632247 -0.063233584 +0.0179402 0.0179402 0.018001547 +-0.00831321 -0.00831321 -0.008367036 +0.011576 0.011576 0.011544401 +0.0842738 0.0842738 0.08426384 +0.113516 0.113516 0.113547295 +-0.0183084 -0.0183084 -0.01828569 +-0.0155541 -0.0155541 -0.015506277 +0.0883301 0.0883301 0.08831494 +0.0855752 0.0855752 0.08555199 +0.0973545 0.0973545 0.097332194 +-0.0203578 -0.0203578 -0.02033434 +0.0460251 0.0460251 0.04597338 +-0.0150441 -0.0150441 -0.015036516 +0.0506528 0.0506528 0.05069877 +0.0819739 0.0819739 0.08200692 +-0.0207966 -0.0207966 -0.02084392 +-0.023709 -0.023709 -0.023692662 +0.00726014 0.00726014 0.0072076796 +0.0133864 0.0133864 0.013446498 +-0.0837828 -0.0837828 -0.083746195 +0.0369728 0.0369728 0.037029732 +0.00264355 0.00264355 0.0025497533 +0.0346401 0.0346401 0.034631062 +-0.0573303 -0.0573303 -0.057336174 +-0.000345729 -0.000345729 -0.00031636766 +-0.0555133 -0.0555133 -0.05546037 +-0.0605226 -0.0605226 -0.060453672 +-0.0217764 -0.0217764 -0.021712417 +-0.00867023 -0.00867023 -0.00864398 +0.0851709 0.0851709 0.08517248 +0.0977362 0.0977362 0.0977924 +0.0438207 0.0438207 0.043830406 +-0.0262633 -0.0262633 -0.02630143 +0.0541108 0.0541108 0.054002594 +-0.00277135 -0.00277135 -0.0027500156 +-0.0421868 -0.0421868 -0.042181313 +-0.0682932 -0.0682932 -0.06830339 +-0.0906488 -0.0906488 -0.090633914 +-0.0142311 -0.0142311 -0.014231458 +-0.044121 -0.044121 -0.04405326 +-0.0267245 -0.0267245 -0.026804943 +0.00599986 0.00599986 0.006063796 +-0.0220729 -0.0220729 -0.022104705 +0.0549257 0.0549257 0.054954786 +0.0717203 0.0717203 0.071416795 +-0.0041221 -0.0041221 -0.0045175864 +0.00839776 0.00839776 0.008010078 +0.0742294 0.0742294 0.074223205 +0.0505202 0.0505202 0.050530117 +-0.103032 -0.103032 -0.10296632 +-0.111505 -0.111505 -0.1114385 +0.0713828 0.0713828 0.07128953 +0.0812535 0.0812535 0.08125133 +-0.0696046 -0.0696046 -0.06953201 +0.0317351 0.0317351 0.031725746 +0.191618 0.191618 0.19170819 +-0.0271005 -0.0271005 -0.027154604 +-0.0500413 -0.0500413 -0.05005042 +-0.0472108 -0.0472108 -0.04719324 +0.0053514 0.0053514 0.0053838626 +0.0124973 0.0124973 0.0124764675 +0.0329028 0.0329028 0.032932777 +0.0563814 0.0563814 0.05650941 +0.0313616 0.0313616 0.03134748 +-0.0026369 -0.0026369 -0.0026502088 +0.0595883 0.0595883 0.059607018 +-0.0569338 -0.0569338 -0.05686537 +-0.0611885 -0.0611885 -0.0611406 +0.0934765 0.0934765 0.093386136 +-0.0487378 -0.0487378 -0.04873834 +-0.0983422 -0.0983422 -0.09837132 +0.0666574 0.0666574 0.06668272 +0.00534592 0.00534592 0.0053037493 +0.0150635 0.0150635 0.015073055 +-0.0220394 -0.0220394 -0.022029564 +0.000445494 0.000445494 0.0003903388 +0.0307866 0.0307866 0.030863453 +-0.0300268 -0.0300268 -0.030039322 +-0.0505015 -0.0505015 -0.050498396 +-0.0646803 -0.0646803 -0.06464473 +-0.0426093 -0.0426093 -0.04255173 +0.0399821 0.0399821 0.04000971 +0.0430969 0.0430969 0.043079548 +0.000148552 0.000148552 0.00017447675 +-0.0805093 -0.0805093 -0.08046747 +0.0708488 0.0708488 0.07086003 +0.0200509 0.0200509 0.020118237 +-0.0705536 -0.0705536 -0.07058954 +0.0506572 0.0506572 0.050692085 +-0.0122102 -0.0122102 -0.012164909 +0.0183551 0.0183551 0.01833989 +0.0300795 0.0300795 0.030003676 +0.0216416 0.0216416 0.021638526 +-0.00855585 -0.00855585 -0.008507666 +0.0626019 0.0626019 0.06259921 +-0.0305724 -0.0305724 -0.030623136 +-0.0194739 -0.0194739 -0.019429276 +-0.0753175 -0.0753175 -0.075274296 +0.0749589 0.0749589 0.07486764 +-0.0599059 -0.0599059 -0.05999522 +-0.0142094 -0.0142094 -0.014298606 +-0.120168 -0.120168 -0.12021608 +-0.00174821 -0.00174821 -0.0017270832 +0.115427 0.115427 0.1154785 +-0.0466727 -0.0466727 -0.046653453 +0.0351428 0.0351428 0.035201807 +0.00158967 0.00158967 0.0015880888 +0.0485732 0.0485732 0.048497256 +0.0239818 0.0239818 0.024035318 +0.0676465 0.0676465 0.06762412 +-0.0503949 -0.0503949 -0.050405674 +0.06335 0.06335 0.06344261 +-0.0551739 -0.0551739 -0.05515479 +0.0171117 0.0171117 0.01710396 +-0.0296434 -0.0296434 -0.029561397 +-0.0286245 -0.0286245 -0.028648516 +0.122505 0.122505 0.122483484 +0.0883528 0.0883528 0.08828129 +0.00622401 0.00622401 0.006211636 +-0.0164902 -0.0164902 -0.016565526 +0.044269 0.044269 0.044243645 +-0.00943952 -0.00943952 -0.009446201 +-0.0284898 -0.0284898 -0.028470602 +-0.144255 -0.144255 -0.14422207 +0.0235835 0.0235835 0.023642592 +-0.165456 -0.165456 -0.16543144 +0.0239321 0.0239321 0.02401142 +0.0289284 0.0289284 0.028922588 +-0.0349088 -0.0349088 -0.034977466 +0.18868 0.18868 0.1886104 +0.0731126 0.0731126 0.073079534 +0.026674 0.026674 0.026653694 +0.0167464 0.0167464 0.016700147 +0.0127276 0.0127276 0.012732642 +0.00301781 0.00301781 0.002982808 +-0.0243539 -0.0243539 -0.024304384 +0.0916902 0.0916902 0.09165049 +0.0395351 0.0395351 0.039512184 +0.048905 0.048905 0.04893874 +0.0153711 0.0153711 0.015392842 +0.173634 0.173634 0.17356655 +-0.051964 -0.051964 -0.05194865 +-0.0931404 -0.0931404 -0.09315098 +-0.00329681 -0.00329681 -0.0033676748 +0.0648045 0.0648045 0.06490087 +-0.215546 -0.215546 -0.2155796 +-0.0381817 -0.0381817 -0.038123492 +-0.0415355 -0.0415355 -0.04153915 +-0.0564167 -0.0564167 -0.0564277 +-0.0607825 -0.0607825 -0.060738847 +0.247509 0.247509 0.2474871 +-0.0142847 -0.0142847 -0.0142726395 +0.127189 0.127189 0.12717684 +0.0414365 0.0414365 0.041432805 +-0.0481488 -0.0481488 -0.048198383 +0.091679 0.091679 0.09170518 +-0.00535909 -0.00535909 -0.0053386516 +0.127363 0.127363 0.12732728 +-0.0545698 -0.0545698 -0.054447155 +0.0499536 0.0499536 0.049858663 +0.0473193 0.0473193 0.047307327 +0.1518 0.1518 0.15178397 +0.142544 0.142544 0.14255878 +0.123285 0.123285 0.12326857 +-0.00168485 -0.00168485 -0.0016656278 +-0.0438238 -0.0438238 -0.043788813 +0.0517892 0.0517892 0.051851828 +0.123714 0.123714 0.12371712 +0.058073 0.058073 0.058191456 +-0.0344789 -0.0344789 -0.034499742 +-0.0534167 -0.0534167 -0.05344029 +0.0642355 0.0642355 0.064225726 +-0.0244599 -0.0244599 -0.024514249 +-0.000504759 -0.000504759 -0.0004750383 +-0.0515571 -0.0515571 -0.0516359 +0.0720749 0.0720749 0.07213558 +-0.0191556 -0.0191556 -0.019135823 +-0.00748099 -0.00748099 -0.0074171904 +0.0149025 0.0149025 0.014971369 +0.0661331 0.0661331 0.06616049 +0.00687613 0.00687613 0.0068635982 +-0.10089 -0.10089 -0.10087709 +-0.000126257 -0.000126257 -5.8867907e-05 +-0.0515542 -0.0515542 -0.05158547 +0.0494464 0.0494464 0.049372014 +0.0789357 0.0789357 0.07894717 +-0.0877575 -0.0877575 -0.08772386 +0.132735 0.132735 0.13276571 +-0.0507882 -0.0507882 -0.050832137 +0.0816196 0.0816196 0.08164445 +0.0899426 0.0899426 0.08990606 +-0.0772275 -0.0772275 -0.077208914 +-0.129865 -0.129865 -0.12986654 +-0.0602754 -0.0602754 -0.06026847 +-0.00565926 -0.00565926 -0.005628257 +0.0545582 0.0545582 0.05456818 +-0.000591464 -0.000591464 -0.000547855 +0.0109049 0.0109049 0.010935737 +0.00202086 0.00202086 0.0019697614 +-0.0667453 -0.0667453 -0.06673539 +-0.109158 -0.109158 -0.10911136 +-0.123817 -0.123817 -0.12378063 +0.094091 0.094091 0.09409644 +0.0406096 0.0406096 0.040673077 +0.0660004 0.0660004 0.065971866 +-0.0386767 -0.0386767 -0.03864897 +0.0138359 0.0138359 0.013837757 +0.0457259 0.0457259 0.045742396 +0.0378496 0.0378496 0.037902102 +-0.0281692 -0.0281692 -0.028176215 +0.0027646 0.0027646 0.0028850376 +-0.00057857 -0.00057857 -0.00048496103 +0.0209406 0.0209406 0.02092412 +0.0231404 0.0231404 0.023189994 +0.101979 0.101979 0.10201614 +0.0367972 0.0367972 0.03673919 +0.00890963 0.00890963 0.008917613 +0.0273223 0.0273223 0.027303418 +-0.111618 -0.111618 -0.11158279 +-0.0342381 -0.0342381 -0.034251023 +-0.123016 -0.123016 -0.12299197 +-0.0486201 -0.0486201 -0.04865022 +0.0574302 0.0574302 0.057468362 +-0.151186 -0.151186 -0.15108526 +0.0497567 0.0497567 0.04978037 +-0.00638303 -0.00638303 -0.006367388 +-0.0333819 -0.0333819 -0.033373326 +-0.0292046 -0.0292046 -0.029315235 +0.0976949 0.0976949 0.09771331 +-0.0699919 -0.0699919 -0.069950856 +-0.0674894 -0.0674894 -0.06751139 +0.0165761 0.0165761 0.016496163 +0.147542 0.147542 0.14754157 +-0.0782643 -0.0782643 -0.07828735 +-0.077367 -0.077367 -0.07732352 +-0.0260987 -0.0260987 -0.02612918 +-0.0358134 -0.0358134 -0.035857227 +-0.0303959 -0.0303959 -0.030399794 +0.0114245 0.0114245 0.011449049 +0.00642828 0.00642828 0.0063042156 +-0.00335948 -0.00335948 -0.0033678 +-0.00605209 -0.00605209 -0.0060780626 +0.00740505 0.00740505 0.0073841615 +-0.0511259 -0.0511259 -0.051108476 +-0.0503279 -0.0503279 -0.050352864 +-0.054111 -0.054111 -0.05406063 +0.0134348 0.0134348 0.01349147 +0.00486883 0.00486883 0.0048382413 +-0.0516649 -0.0516649 -0.051658496 +0.0567091 0.0567091 0.056750327 +0.0305135 0.0305135 0.03045678 +0.00676043 0.00676043 0.0067658816 +0.0485579 0.0485579 0.048576593 +0.00172391 0.00172391 0.0017526016 +-0.0582053 -0.0582053 -0.058226902 +-0.0402091 -0.0402091 -0.040189646 +0.0033397 0.0033397 0.0033619627 +0.0448973 0.0448973 0.04495632 +0.0281377 0.0281377 0.02821355 +-0.00227784 -0.00227784 -0.0022286046 +0.0336178 0.0336178 0.033550844 +0.0764535 0.0764535 0.07646347 +-0.03802 -0.03802 -0.03802947 +-0.0186275 -0.0186275 -0.018704426 +0.0400589 0.0400589 0.040103953 +0.0343895 0.0343895 0.034432862 +-0.0556406 -0.0556406 -0.055633236 +-0.0528317 -0.0528317 -0.052845314 +-0.0993338 -0.0993338 -0.09935563 +0.0199889 0.0199889 0.019997537 +0.0195948 0.0195948 0.019483626 +0.0458751 0.0458751 0.045930494 +-0.0353912 -0.0353912 -0.035378076 +0.0494606 0.0494606 0.049478162 +0.0680142 0.0680142 0.067981705 +0.0122442 0.0122442 0.012223012 +0.020615 0.020615 0.020558702 +0.0264405 0.0264405 0.02637688 +0.0721288 0.0721288 0.07221041 +-0.0291954 -0.0291954 -0.02912812 +0.0214669 0.0214669 0.02144871 +0.00453011 0.00453011 0.004514062 +-0.0715159 -0.0715159 -0.07163367 +0.0695737 0.0695737 0.06956942 +-0.0772907 -0.0772907 -0.077249974 +-0.0301497 -0.0301497 -0.030114504 +-0.167101 -0.167101 -0.16704655 +0.0840813 0.0840813 0.084006295 +0.0133569 0.0133569 0.013344025 +0.0613421 0.0613421 0.061376873 +0.0380602 0.0380602 0.038032543 +0.068309 0.068309 0.06829414 +0.0171629 0.0171629 0.017126132 +-0.00842832 -0.00842832 -0.00833476 +0.0536671 0.0536671 0.05371084 +-0.0349201 -0.0349201 -0.034962937 +-0.0930383 -0.0930383 -0.093111895 +-0.00269109 -0.00269109 -0.0026276987 +0.0486243 0.0486243 0.048629157 +-0.0586819 -0.0586819 -0.058664754 +0.0280701 0.0280701 0.028171837 +-0.0832121 -0.0832121 -0.083201714 +0.0453673 0.0453673 0.045281235 +-0.0212405 -0.0212405 -0.021267701 +-0.0713174 -0.0713174 -0.07131481 +0.0378363 0.0378363 0.03787766 +-0.0642744 -0.0642744 -0.06435213 +-0.019263 -0.019263 -0.019242104 +-0.017643 -0.017643 -0.017635528 +-0.00354975 -0.00354975 -0.0036338123 +0.0164927 0.0164927 0.01642857 +-0.0384344 -0.0384344 -0.038522836 +-0.118822 -0.118822 -0.11873856 +-0.0289207 -0.0289207 -0.028928017 +0.0653117 0.0653117 0.06524595 +0.0974485 0.0974485 0.0975431 +0.00399904 0.00399904 0.0039572134 +0.0616974 0.0616974 0.061706454 +-0.0482934 -0.0482934 -0.04830551 +-0.105603 -0.105603 -0.10562928 +0.0487945 0.0487945 0.048828475 +0.0496005 0.0496005 0.049598396 +0.0550319 0.0550319 0.055021226 +-0.01882 -0.01882 -0.018827742 +0.0272243 0.0272243 0.027290192 +-0.0392331 -0.0392331 -0.03919644 +-0.00258219 -0.00258219 -0.0026215166 +-0.0482456 -0.0482456 -0.048237372 +-0.0125412 -0.0125412 -0.012498348 +0.116988 0.116988 0.117036074 +0.0129067 0.0129067 0.012946096 +-0.0170155 -0.0170155 -0.017046172 +0.134901 0.134901 0.13491307 +-0.0518862 -0.0518862 -0.051802173 +-0.00939032 -0.00939032 -0.009417973 +-0.0691896 -0.0691896 -0.06922547 +0.112497 0.112497 0.11242077 +-0.0346503 -0.0346503 -0.034687042 +-0.0223103 -0.0223103 -0.022289256 +0.0535906 0.0535906 0.053550642 +-0.00041665 -0.00041665 -0.00045859633 +-0.000284113 -0.000284113 -0.00023498808 +-0.0198621 -0.0198621 -0.019939108 +0.0316068 0.0316068 0.031546198 +0.0370225 0.0370225 0.0370861 +0.021758 0.021758 0.02172047 +-0.0100787 -0.0100787 -0.010078262 +0.00723029 0.00723029 0.007237036 +-0.0813053 -0.0813053 -0.08130844 +-0.028756 -0.028756 -0.028813183 +-0.0868476 -0.0868476 -0.086828455 +0.0874568 0.0874568 0.08743954 +-0.00411086 -0.00411086 -0.0041121477 +0.0474037 0.0474037 0.047444735 +0.105608 0.105608 0.1054752 +0.08347 0.08347 0.08344441 +0.0105959 0.0105959 0.010661325 +-0.00831815 -0.00831815 -0.008238073 +-0.0437098 -0.0437098 -0.04363599 +-0.180633 -0.180633 -0.18064776 +0.00180752 0.00180752 0.0018405609 +0.0379154 0.0379154 0.0379527 +0.0180955 0.0180955 0.018181404 +-0.0641551 -0.0641551 -0.06419607 +-0.0596799 -0.0596799 -0.059718557 +0.0783451 0.0783451 0.07825375 +0.0619785 0.0619785 0.06200181 +-0.0527733 -0.0527733 -0.052714422 +0.0328143 0.0328143 0.032752816 +0.0140044 0.0140044 0.014086648 +0.101086 0.101086 0.10117824 +-0.0395973 -0.0395973 -0.039591826 +0.00926564 0.00926564 0.009366283 +-0.0639365 -0.0639365 -0.063931786 +0.116767 0.116767 0.11681646 +0.0177171 0.0177171 0.017741183 +0.0991388 0.0991388 0.09915266 +0.0125404 0.0125404 0.012597302 +0.0278407 0.0278407 0.027890783 +-0.0472855 -0.0472855 -0.047250323 +-0.0125579 -0.0125579 -0.012456636 +0.00624749 0.00624749 0.006312309 +0.060266 0.060266 0.060302492 +0.0024747 0.0024747 0.0024431287 +-0.00230718 -0.00230718 -0.0023275912 +0.0470209 0.0470209 0.04702269 +-0.153942 -0.153942 -0.14941238 +0.0410741 0.0410741 0.04174838 +-0.0831551 -0.0831551 -0.08160383 +0.131303 0.131303 0.13129333 +0.0158128 0.0158128 0.01576147 +0.0383424 0.0383424 0.038375523 +-0.0726297 -0.0726297 -0.072602056 +-0.099383 -0.099383 -0.099393 +0.0170768 0.0170768 0.01708737 +0.173814 0.173814 0.17382908 +0.0807743 0.0807743 0.08081902 +0.0770488 0.0770488 0.07708429 +-0.0765138 -0.0765138 -0.07657379 +-0.00946928 -0.00946928 -0.009490019 +-0.102351 -0.102351 -0.10236798 +-0.0219384 -0.0219384 -0.021976773 +0.0179744 0.0179744 0.018017422 +-0.0375232 -0.0375232 -0.037506413 +-0.0690129 -0.0690129 -0.06899768 +0.079468 0.079468 0.07944785 +0.0535078 0.0535078 0.053501338 +0.0017198 0.0017198 0.0017013837 +-0.0910768 -0.0910768 -0.0910576 +0.0467808 0.0467808 0.046825644 +-0.0634841 -0.0634841 -0.063488625 +-0.0477623 -0.0477623 -0.047782123 +-0.0380467 -0.0380467 -0.037982993 +0.0133153 0.0133153 0.013313786 +-0.059827 -0.059827 -0.05982348 +-0.0504477 -0.0504477 -0.050439376 +-0.0430244 -0.0430244 -0.04306354 +0.129161 0.129161 0.1290939 +0.0239997 0.0239997 0.023976618 +-0.0653367 -0.0653367 -0.0653571 +0.0107805 0.0107805 0.010740332 +-0.130591 -0.130591 -0.13058831 +-0.0474991 -0.0474991 -0.047475643 +-0.090749 -0.090749 -0.09077105 +-0.041393 -0.041393 -0.041361053 +-0.0241338 -0.0241338 -0.024113169 +-0.0945678 -0.0945678 -0.09451697 +0.0421321 0.0421321 0.042132944 +-0.0949361 -0.0949361 -0.094967954 +-0.0939561 -0.0939561 -0.093949415 +0.00048179 0.00048179 0.00044340367 +0.0626106 0.0626106 0.06271468 +0.0213605 0.0213605 0.021386068 +-0.0219957 -0.0219957 -0.021999482 +-0.0376815 -0.0376815 -0.03767361 +0.090755 0.090755 0.09067855 +0.0511605 0.0511605 0.0511636 +-0.0447132 -0.0447132 -0.04469984 +-0.00220265 -0.00220265 -0.0022478804 +-0.0298141 -0.0298141 -0.029827833 +0.00745011 0.00745011 0.0073990375 +0.0206621 0.0206621 0.020619877 +0.0441078 0.0441078 0.04410012 +0.102733 0.102733 0.102646105 +-0.0412785 -0.0412785 -0.04124272 +0.0410222 0.0410222 0.040997718 +0.0360848 0.0360848 0.036148906 +-0.0402273 -0.0402273 -0.04025776 +-0.00746735 -0.00746735 -0.0073620225 +0.0746014 0.0746014 0.074619174 +0.0899694 0.0899694 0.09001647 +-0.134584 -0.134584 -0.13458636 +0.0539365 0.0539365 0.053968243 +-0.0126786 -0.0126786 -0.01270712 +-0.0533281 -0.0533281 -0.05332347 +0.00201233 0.00201233 0.002049239 +-0.0723488 -0.0723488 -0.072312616 +0.0651435 0.0651435 0.06515518 +-0.0173645 -0.0173645 -0.017332995 +0.153581 0.153581 0.15354158 +0.0261489 0.0261489 0.026170699 +-0.0599782 -0.0599782 -0.059936535 +-0.0428004 -0.0428004 -0.04278651 +-0.00143669 -0.00143669 -0.0014251182 +-0.0385636 -0.0385636 -0.038541146 +0.049054 0.049054 0.049017347 +0.0167299 0.0167299 0.016696198 +-0.00259804 -0.00259804 -0.00256729 +-0.0526562 -0.0526562 -0.052690446 +-0.0875804 -0.0875804 -0.08759451 +-0.043669 -0.043669 -0.043737266 +0.0533465 0.0533465 0.053258117 +0.0619663 0.0619663 0.061994318 +-0.000155116 -0.000155116 -0.00018958788 +-0.0285167 -0.0285167 -0.028569937 +0.0319511 0.0319511 0.031990714 +-0.0521923 -0.0521923 -0.05218167 +0.0560276 0.0560276 0.05603425 +0.0942748 0.0942748 0.0942532 +0.108202 0.108202 0.10816768 +0.00175836 0.00175836 0.0017989136 +-0.00185343 -0.00185343 -0.0018708399 +-0.0212986 -0.0212986 -0.021323772 +-0.0169513 -0.0169513 -0.016944367 +0.0530598 0.0530598 0.05311359 +0.00363441 0.00363441 0.003649728 +-0.060767 -0.060767 -0.06063083 +-0.05465 -0.05465 -0.054605987 +0.101713 0.101713 0.10164195 +0.0244951 0.0244951 0.02444864 +-0.0713465 -0.0713465 -0.07133801 +-0.0838637 -0.0838637 -0.08388545 +0.039302 0.039302 0.03940227 +-0.0185564 -0.0185564 -0.01851858 +0.0141554 0.0141554 0.0141757205 +-0.0437349 -0.0437349 -0.043808535 +0.0569813 0.0569813 0.05694466 +-0.039811 -0.039811 -0.039831873 +-0.0280294 -0.0280294 -0.028057078 +0.0262114 0.0262114 0.026181499 +-0.0400322 -0.0400322 -0.0400995 +0.0542208 0.0542208 0.054288052 +0.0508549 0.0508549 0.050866865 +0.100751 0.100751 0.10076652 +-0.0585201 -0.0585201 -0.058498852 +-0.0463947 -0.0463947 -0.04642066 +-0.0199921 -0.0199921 -0.02005236 +-0.060068 -0.060068 -0.060039457 +-0.0381233 -0.0381233 -0.03814983 +-0.110949 -0.110949 -0.11096546 +-0.0229428 -0.0229428 -0.022922106 +-0.0284215 -0.0284215 -0.028453194 +0.0213449 0.0213449 0.021391315 +0.0121657 0.0121657 0.012169787 +0.0413121 0.0413121 0.041325983 +0.0383646 0.0383646 0.03837806 +0.0514739 0.0514739 0.051489245 +-0.042205 -0.042205 -0.042261016 +-0.138627 -0.138627 -0.13855985 +0.0386019 0.0386019 0.038608484 +-0.0174507 -0.0174507 -0.01736189 +0.00985244 0.00985244 0.009901398 +-0.0173199 -0.0173199 -0.017261585 +-0.027879 -0.027879 -0.027932368 +-0.0414753 -0.0414753 -0.04147169 +0.0159845 0.0159845 0.015926508 +0.140703 0.140703 0.14063962 +0.0521038 0.0521038 0.05207543 +0.0703491 0.0703491 0.07023953 +0.0261242 0.0261242 0.026175078 +0.0171624 0.0171624 0.017182127 +0.0334721 0.0334721 0.03345795 +-0.0399361 -0.0399361 -0.039986953 +-0.0341361 -0.0341361 -0.034084707 +0.0249506 0.0249506 0.024856536 +-0.0875424 -0.0875424 -0.087542124 +-0.0151917 -0.0151917 -0.015210526 +-0.129792 -0.129792 -0.12975551 +-0.00948598 -0.00948598 -0.009451041 +-0.00554986 -0.00554986 -0.0055829585 +0.0239804 0.0239804 0.023937197 +0.0680182 0.0680182 0.06802007 +0.113353 0.113353 0.11337092 +-0.015979 -0.015979 -0.016067434 +-0.04464 -0.04464 -0.044643786 +-0.0748076 -0.0748076 -0.074832015 +-0.0433667 -0.0433667 -0.04338265 +-0.0525681 -0.0525681 -0.0525122 +0.0349191 0.0349191 0.03488914 +0.0795602 0.0795602 0.079538286 +-0.00800224 -0.00800224 -0.008007131 +-0.0531439 -0.0531439 -0.053129774 +0.0216725 0.0216725 0.021665614 +0.0226485 0.0226485 0.022623993 +0.136866 0.136866 0.13681646 +0.0306299 0.0306299 0.030607369 +-0.0109613 -0.0109613 -0.01096969 +0.0598406 0.0598406 0.059798375 +-0.0392106 -0.0392106 -0.039235845 +0.170531 0.170531 0.17058675 +0.0403592 0.0403592 0.040356684 +-0.0368901 -0.0368901 -0.03690076 +0.0320945 0.0320945 0.032156706 +0.036205 0.036205 0.03618427 +-0.0556539 -0.0556539 -0.055787712 +-0.0198205 -0.0198205 -0.019840155 +-0.00840349 -0.00840349 -0.008454934 +0.0848007 0.0848007 0.084692314 +-0.040412 -0.040412 -0.040426068 +-0.0480765 -0.0480765 -0.048184805 +0.0815207 0.0815207 0.081417546 +-0.0245005 -0.0245005 -0.024445947 +-0.00278064 -0.00278064 -0.0027197222 +-0.0232045 -0.0232045 -0.02311829 +0.0779664 0.0779664 0.07799131 +-0.0176203 -0.0176203 -0.017530745 +-0.0320255 -0.0320255 -0.032014526 +0.0373226 0.0373226 0.03730119 +0.0444392 0.0444392 0.044160523 +-0.0370352 -0.0370352 -0.037072603 +0.0473972 0.0473972 0.047261633 +0.00131495 0.00131495 0.0013093955 +0.020028 0.020028 0.020076625 +-0.0140803 -0.0140803 -0.0140895685 +-0.0755526 -0.0755526 -0.075480975 +0.00769954 0.00769954 0.0076996163 +0.0504113 0.0504113 0.050469782 +-0.122574 -0.122574 -0.12259985 +0.074683 0.074683 0.07464443 +0.0139079 0.0139079 0.013928779 +0.0523569 0.0523569 0.052397538 +0.0256379 0.0256379 0.025603013 +0.11097 0.11097 0.110913895 +-0.00944271 -0.00944271 -0.009409368 +0.0510882 0.0510882 0.051079348 +-0.0305778 -0.0305778 -0.030532341 +0.0380519 0.0380519 0.038017124 +0.00803686 0.00803686 0.008103841 +0.139614 0.139614 0.139666 +0.0473881 0.0473881 0.047331274 +0.0692148 0.0692148 0.06908636 +-0.0141251 -0.0141251 -0.014022274 +0.0197562 0.0197562 0.01986622 +0.0833919 0.0833919 0.083416685 +-0.00823374 -0.00823374 -0.00824355 +-0.0923064 -0.0923064 -0.09226588 +-0.0456113 -0.0456113 -0.045557547 +-0.0523267 -0.0523267 -0.052353363 +0.07301 0.07301 0.07308669 +0.0165144 0.0165144 0.016584579 +-0.0250631 -0.0250631 -0.025074998 +-0.0477963 -0.0477963 -0.047825575 +0.067898 0.067898 0.067909576 +-0.0160161 -0.0160161 -0.015992677 +-0.12516 -0.12516 -0.12519102 +-0.052418 -0.052418 -0.052500203 +0.0839902 0.0839902 0.08397679 +0.0444699 0.0444699 0.04445716 +-0.102143 -0.102143 -0.10206411 +-0.0771269 -0.0771269 -0.07715754 +0.0409276 0.0409276 0.041005667 +0.0234007 0.0234007 0.02346379 +0.00916312 0.00916312 0.009180912 +0.0526719 0.0526719 0.05269781 +-0.185264 -0.185264 -0.1853373 +0.0325041 0.0325041 0.032511465 +0.0880466 0.0880466 0.08805812 +0.0115263 0.0115263 0.011483652 +-0.0446445 -0.0446445 -0.04464499 +-0.0670686 -0.0670686 -0.06708262 +-0.0806671 -0.0806671 -0.0807302 +0.0145852 0.0145852 0.014546666 +-0.0474324 -0.0474324 -0.04743393 +-0.0648036 -0.0648036 -0.06486718 +-0.0467019 -0.0467019 -0.046696067 +-0.0273532 -0.0273532 -0.027354473 +-0.0396023 -0.0396023 -0.039656006 +0.137113 0.137113 0.13710736 +0.106414 0.106414 0.10633078 +0.0195623 0.0195623 0.019489774 +-0.0958807 -0.0958807 -0.095848605 +-0.0208171 -0.0208171 -0.020769956 +0.0647457 0.0647457 0.064704835 +0.136989 0.136989 0.13697861 +-0.0277054 -0.0277054 -0.027706884 +0.0697185 0.0697185 0.06971711 +-0.00786607 -0.00786607 -0.007843345 +0.0443445 0.0443445 0.044354465 +-0.000724378 -0.000724378 -0.0006966809 +0.12928 0.12928 0.12922756 +-0.0665372 -0.0665372 -0.0664408 +0.0161258 0.0161258 0.016123328 +-0.0438756 -0.0438756 -0.043888 +0.0491655 0.0491655 0.04917484 +0.00643814 0.00643814 0.006436539 +-0.0301866 -0.0301866 -0.030207396 +0.0497501 0.0497501 0.049746018 +0.0911598 0.0911598 0.09129677 +-0.0288485 -0.0288485 -0.0288151 +0.137355 0.137355 0.13742389 +-0.00897699 -0.00897699 -0.008921055 +0.0214739 0.0214739 0.021497447 +-0.0992127 -0.0992127 -0.09919841 +-0.115933 -0.115933 -0.115954794 +0.0142412 0.0142412 0.014269172 +0.10838 0.10838 0.10842157 +0.0745001 0.0745001 0.07450687 +0.0533567 0.0533567 0.053341635 +0.0487711 0.0487711 0.048766572 +-0.0411243 -0.0411243 -0.041141193 +0.0792683 0.0792683 0.07926304 +-0.0617018 -0.0617018 -0.061770804 +0.0341602 0.0341602 0.034173157 +0.0568542 0.0568542 0.05683252 +-0.0648836 -0.0648836 -0.064922616 +0.0118417 0.0118417 0.011902964 +0.00778898 0.00778898 0.007805857 +0.116769 0.116769 0.11675959 +-0.0494425 -0.0494425 -0.049448144 +-0.060414 -0.060414 -0.060450204 +-0.0154938 -0.0154938 -0.01555047 +-0.0822016 -0.0822016 -0.0821788 +-0.050833 -0.050833 -0.05081562 +-0.0104108 -0.0104108 -0.010440993 +0.0444053 0.0444053 0.044453043 +-0.0407523 -0.0407523 -0.040710375 +-0.0423669 -0.0423669 -0.042472072 +-0.0203121 -0.0203121 -0.020339439 +0.0542422 0.0542422 0.054191798 +-0.0225517 -0.0225517 -0.022570185 +0.0356842 0.0356842 0.035777383 +-0.0501592 -0.0501592 -0.05010812 +0.0742022 0.0742022 0.074233465 +-0.0558255 -0.0558255 -0.055790745 +0.0207504 0.0207504 0.020712063 +0.0255928 0.0255928 0.025600003 +-0.0463011 -0.0463011 -0.046288423 +0.0157302 0.0157302 0.01574946 +-0.03772 -0.03772 -0.0376623 +-0.144524 -0.144524 -0.14443612 +0.0145796 0.0145796 0.01455948 +0.0647517 0.0647517 0.06478271 +-0.100065 -0.100065 -0.10003655 +0.0908599 0.0908599 0.09084611 +-0.0513477 -0.0513477 -0.05126509 +0.070015 0.070015 0.069919266 +-0.0977665 -0.0977665 -0.09774943 +0.0615323 0.0615323 0.061486278 +0.0135278 0.0135278 0.013600254 +-0.00273292 -0.00273292 -0.0026968557 +0.000305568 0.000305568 0.0004334638 +-0.0373847 -0.0373847 -0.03735422 +-0.0697973 -0.0697973 -0.069791906 +-0.06153 -0.06153 -0.06142717 +0.0864248 0.0864248 0.08640939 +0.0112156 0.0112156 0.011226344 +-0.0568615 -0.0568615 -0.056853984 +-0.0401322 -0.0401322 -0.040051904 +-0.124605 -0.124605 -0.12458015 +-0.0137967 -0.0137967 -0.013783445 +0.132382 0.132382 0.1322967 +-0.0871058 -0.0871058 -0.08707982 +0.0749187 0.0749187 0.07486181 +0.0809359 0.0809359 0.08096662 +0.027655 0.027655 0.027661249 +0.0344337 0.0344337 0.03446527 +-0.00858053 -0.00858053 -0.008621932 +-0.0261067 -0.0261067 -0.026145086 +0.0408897 0.0408897 0.040963758 +-0.00775449 -0.00775449 -0.007682222 +-0.0265952 -0.0265952 -0.026583867 +-0.0655454 -0.0655454 -0.0655132 +-0.000475993 -0.000475993 -0.0005172427 +-0.0105503 -0.0105503 -0.0105624935 +0.0816401 0.0816401 0.08163104 +0.113557 0.113557 0.1135213 +0.0755355 0.0755355 0.07550894 +0.0593666 0.0593666 0.059311528 +0.0975993 0.0975993 0.09757025 +0.0388305 0.0388305 0.038741373 +0.0275357 0.0275357 0.02757709 +0.0385358 0.0385358 0.038590584 +-0.0277543 -0.0277543 -0.02780062 +0.000433332 0.000433332 0.0005050111 +-0.0510193 -0.0510193 -0.05098515 +0.08179 0.08179 0.081870966 +-0.0872919 -0.0872919 -0.08731402 +0.00734027 0.00734027 0.007283832 +-0.0378913 -0.0378913 -0.037871283 +0.0617901 0.0617901 0.061830785 +0.0769192 0.0769192 0.076927505 +0.0419363 0.0419363 0.04189387 +-0.0109342 -0.0109342 -0.011022599 +0.0751958 0.0751958 0.07508607 +-0.0120446 -0.0120446 -0.012070233 +-0.0048848 -0.0048848 -0.0048766434 +-0.0316227 -0.0316227 -0.03164348 +-0.0100535 -0.0100535 -0.010017975 +0.071404 0.071404 0.07144815 +0.0331869 0.0331869 0.03314915 +0.0237351 0.0237351 0.023749892 +-0.0528961 -0.0528961 -0.052953366 +-0.0181138 -0.0181138 -0.018151224 +0.0689482 0.0689482 0.06903739 +-0.0155324 -0.0155324 -0.015537909 +0.0337207 0.0337207 0.03369353 +-0.0375005 -0.0375005 -0.037492804 +-0.0495499 -0.0495499 -0.04956788 +-0.00730756 -0.00730756 -0.0072928295 +-0.0124974 -0.0124974 -0.012574386 +0.0398968 0.0398968 0.039862573 +0.038799 0.038799 0.038736943 +0.151003 0.151003 0.15101038 +-0.0112601 -0.0112601 -0.011323404 +-0.1042 -0.1042 -0.104242064 +-0.0604923 -0.0604923 -0.060413133 +0.0749994 0.0749994 0.07502918 +0.16104 0.16104 0.16100053 +0.0779907 0.0779907 0.07801083 +-0.00534727 -0.00534727 -0.005313203 +0.124048 0.124048 0.12399019 +-0.0376745 -0.0376745 -0.037678078 +-0.0622813 -0.0622813 -0.062343113 +0.0463624 0.0463624 0.046315737 +0.0581452 0.0581452 0.058161546 +-0.0890926 -0.0890926 -0.089063056 +-0.0442707 -0.0442707 -0.044269502 +0.00775332 0.00775332 0.0077869114 +-0.026075 -0.026075 -0.026068013 +0.0403578 0.0403578 0.040286373 +-0.0156429 -0.0156429 -0.015584711 +-0.0890408 -0.0890408 -0.08902721 +0.0562807 0.0562807 0.056332454 +-0.0448763 -0.0448763 -0.04486762 +0.0216716 0.0216716 0.021678286 +-0.00597816 -0.00597816 -0.006024822 +-0.000325555 -0.000325555 -0.00034543182 +0.106718 0.106718 0.10671521 +-0.0254772 -0.0254772 -0.025506947 +0.0601397 0.0601397 0.060183443 +-0.0210315 -0.0210315 -0.021034297 +0.10036 0.10036 0.10027193 +-0.0683073 -0.0683073 -0.06831659 +-0.0412363 -0.0412363 -0.04133351 +-0.0501735 -0.0501735 -0.0501235 +0.000239248 0.000239248 0.00020345644 +0.0380111 0.0380111 0.038072057 +0.0617459 0.0617459 0.061797332 +-0.0894091 -0.0894091 -0.089405455 +0.000274765 0.000274765 0.00028201865 +0.0231631 0.0231631 0.023166372 +0.0269336 0.0269336 0.026971841 +0.0811216 0.0811216 0.081153125 +0.0334474 0.0334474 0.033439014 +-0.0424563 -0.0424563 -0.042408127 +0.0523019 0.0523019 0.052323677 +0.0516382 0.0516382 0.051646903 +0.0493048 0.0493048 0.04933305 +-0.0872068 -0.0872068 -0.08726056 +-0.0338244 -0.0338244 -0.033791926 +-0.0143776 -0.0143776 -0.014422964 +-0.0513753 -0.0513753 -0.051365256 +0.00501527 0.00501527 0.0050571556 +0.0871178 0.0871178 0.08712342 +0.0268232 0.0268232 0.026858715 +0.0785662 0.0785662 0.078585334 +-0.110786 -0.110786 -0.11078214 +-0.0708066 -0.0708066 -0.070812985 +-0.0182925 -0.0182925 -0.018236343 +0.0255259 0.0255259 0.025540547 +0.0574471 0.0574471 0.057518225 +-0.0937093 -0.0937093 -0.093632124 +0.0195592 0.0195592 0.019553041 +-0.207558 -0.207558 -0.2076023 +0.0424519 0.0424519 0.04240585 +-0.0411212 -0.0411212 -0.041080788 +-0.0269112 -0.0269112 -0.027022915 +-0.000550584 -0.000550584 -0.0005307989 +0.090933 0.090933 0.0909548 +0.0649523 0.0649523 0.06497167 +-0.0522534 -0.0522534 -0.052297693 +0.119984 0.119984 0.120004125 +0.0184653 0.0184653 0.018556928 +-0.0156135 -0.0156135 -0.015525621 +0.0531749 0.0531749 0.05332741 +0.0455145 0.0455145 0.045554027 +0.0165888 0.0165888 0.016504792 +0.0475326 0.0475326 0.047550064 +0.0134256 0.0134256 0.013461235 +-0.0393319 -0.0393319 -0.039233167 +0.0145788 0.0145788 0.014608827 +-0.0820249 -0.0820249 -0.082045294 +-0.0236175 -0.0236175 -0.02357322 +0.0256002 0.0256002 0.025584953 +-0.0193078 -0.0193078 -0.019229753 +-0.0184435 -0.0184435 -0.018457899 +0.05038 0.05038 0.05040062 +-0.090793 -0.090793 -0.09082028 +0.147179 0.147179 0.14715964 +0.0467211 0.0467211 0.0467787 +-0.116564 -0.116564 -0.11653443 +0.0360824 0.0360824 0.036051434 +-0.0770429 -0.0770429 -0.07708202 +0.0311589 0.0311589 0.031215755 +0.0840098 0.0840098 0.08411211 +0.109078 0.109078 0.109117694 +0.0716835 0.0716835 0.071794905 +-0.0385999 -0.0385999 -0.038598366 +-0.0127767 -0.0127767 -0.01275059 +0.0258053 0.0258053 0.025800923 +-0.0080086 -0.0080086 -0.007990382 +-0.0473543 -0.0473543 -0.047363013 +-0.0123194 -0.0123194 -0.012281261 +0.0359063 0.0359063 0.03589811 +-0.0066747 -0.0066747 -0.0066737444 +-0.0951223 -0.0951223 -0.095197864 +0.0627194 0.0627194 0.062763415 +-0.150627 -0.150627 -0.1506041 +0.0486615 0.0486615 0.048683893 +-0.0159079 -0.0159079 -0.015838148 +-0.0148924 -0.0148924 -0.014852185 +0.0314454 0.0314454 0.031347603 +-0.0596072 -0.0596072 -0.05970118 +0.0406933 0.0406933 0.040636886 +0.0486675 0.0486675 0.04870105 +0.0491107 0.0491107 0.049104676 +-0.0886611 -0.0886611 -0.08861704 +0.00734497 0.00734497 0.0073537463 +0.00297587 0.00297587 0.0029524455 +-0.0596506 -0.0596506 -0.05967608 +-0.0161904 -0.0161904 -0.01623508 +-0.0142299 -0.0142299 -0.014221735 +0.0634615 0.0634615 0.06347761 +0.0675008 0.0675008 0.06757233 +-0.109899 -0.109899 -0.10987822 +0.00388379 0.00388379 0.0038508626 +0.0144554 0.0144554 0.0144366985 +0.0213518 0.0213518 0.021355735 +0.0559968 0.0559968 0.056067683 +-0.00720239 -0.00720239 -0.0071361414 +0.134748 0.134748 0.13473086 +-0.0869992 -0.0869992 -0.08700988 +0.0717222 0.0717222 0.07176838 +0.0113444 0.0113444 0.0112238135 +0.055613 0.055613 0.055615775 +0.0781443 0.0781443 0.078150816 +0.00444542 0.00444542 0.0045172456 +0.030511 0.030511 0.030529171 +0.0221679 0.0221679 0.022236308 +-0.00130216 -0.00130216 -0.0013423365 +-0.0548201 -0.0548201 -0.0548323 +0.0171526 0.0171526 0.017174084 +0.0734596 0.0734596 0.0734516 +0.0203386 0.0203386 0.020319328 +-0.039064 -0.039064 -0.039055705 +-0.104554 -0.104554 -0.10455625 +0.00399374 0.00399374 0.0039675776 +0.0584727 0.0584727 0.058427267 +0.0144045 0.0144045 0.01449256 +0.00274483 0.00274483 0.002729416 +0.0516783 0.0516783 0.05165551 +0.0426457 0.0426457 0.04265496 +-0.143043 -0.143043 -0.14302076 +-0.0474601 -0.0474601 -0.047424827 +-0.0235291 -0.0235291 -0.02351799 +0.00397881 0.00397881 0.003913895 +0.0755857 0.0755857 0.0756445 +0.0188103 0.0188103 0.018742964 +0.0320434 0.0320434 0.03202454 +-0.0426726 -0.0426726 -0.04270244 +-0.0109589 -0.0109589 -0.010922261 +0.165226 0.165226 0.16524918 +0.0713365 0.0713365 0.07134113 +-0.000455887 -0.000455887 -0.0004992221 +0.0195486 0.0195486 0.019565431 +0.0158311 0.0158311 0.015893696 +-0.0927924 -0.0927924 -0.09278986 +-0.0230793 -0.0230793 -0.02308256 +0.0620242 0.0620242 0.06195776 +0.11783 0.11783 0.11786229 +-0.0438166 -0.0438166 -0.043845788 +-0.0539693 -0.0539693 -0.05397217 +-0.0421021 -0.0421021 -0.042201944 +-0.0527274 -0.0527274 -0.052726027 +0.00164041 0.00164041 0.0016074675 +0.0265239 0.0265239 0.02655601 +0.0169114 0.0169114 0.016954185 +0.119003 0.119003 0.11900151 +-0.00456783 -0.00456783 -0.0045542903 +-0.0861385 -0.0861385 -0.08613362 +0.0273708 0.0273708 0.02730675 +-0.0317232 -0.0317232 -0.031739496 +0.00571188 0.00571188 0.0057490584 +-0.0277059 -0.0277059 -0.027689464 +0.0613508 0.0613508 0.06136403 +0.0955964 0.0955964 0.09558663 +0.000620349 0.000620349 0.0006069185 +0.00759368 0.00759368 0.007588307 +-0.112123 -0.112123 -0.112107225 +0.0179608 0.0179608 0.017896688 +-0.0155297 -0.0155297 -0.015496184 +0.0512596 0.0512596 0.051313594 +0.00420892 0.00420892 0.004255999 +0.150032 0.150032 0.14998835 +-0.0647116 -0.0647116 -0.064711146 +0.0518406 0.0518406 0.051811345 +-0.00423618 -0.00423618 -0.004319561 +0.0292132 0.0292132 0.029273052 +-0.0573205 -0.0573205 -0.0573938 +0.0112254 0.0112254 0.011255282 +-0.00273207 -0.00273207 -0.002748545 +-0.000381649 -0.000381649 -0.00078121125 +0.0337933 0.0337933 0.03390094 +-0.04071 -0.04071 -0.04049545 +-0.00274954 -0.00274954 -0.0027571002 +0.0571913 0.0571913 0.05718805 +-0.0981177 -0.0981177 -0.09813824 +-0.0359237 -0.0359237 -0.035857517 +0.00524398 0.00524398 0.005161849 +-0.00719584 -0.00719584 -0.007141306 +-0.0982088 -0.0982088 -0.098246105 +0.0729321 0.0729321 0.07283468 +-0.0721955 -0.0721955 -0.072167754 +-0.113816 -0.113816 -0.113866515 +0.00116968 0.00116968 0.0011724827 +0.111103 0.111103 0.111069 +0.0536528 0.0536528 0.0536314 +-0.0558504 -0.0558504 -0.05580376 +0.092849 0.092849 0.09285073 +0.0240374 0.0240374 0.02410394 +0.00793927 0.00793927 0.007952023 +-0.00829274 -0.00829274 -0.008257631 +0.003959 0.003959 0.003999776 +0.161029 0.161029 0.16097423 +-0.123399 -0.123399 -0.12344682 +0.0659893 0.0659893 0.066055946 +-0.0457911 -0.0457911 -0.045815084 +0.0316985 0.0316985 0.031727917 +-0.0396848 -0.0396848 -0.039680943 +-0.0862119 -0.0862119 -0.086265296 +-0.0176495 -0.0176495 -0.017664384 +-0.0423259 -0.0423259 -0.0422841 +0.0311431 0.0311431 0.031191206 +0.0191266 0.0191266 0.019137109 +-0.000671786 -0.000671786 -0.00075043936 +0.0323088 0.0323088 0.032332174 +-0.0127701 -0.0127701 -0.012820452 +-0.0126559 -0.0126559 -0.012688624 +0.00966813 0.00966813 0.009648792 +-0.0750536 -0.0750536 -0.07504255 +-0.00425813 -0.00425813 -0.004273076 +-0.0600583 -0.0600583 -0.06002048 +-0.0668664 -0.0668664 -0.066844516 +0.00993072 0.00993072 0.009870558 +-0.000330014 -0.000330014 -0.00027225073 +-0.0281287 -0.0281287 -0.028092688 +-0.0388765 -0.0388765 -0.03881945 +0.0208246 0.0208246 0.020855004 +-0.0637908 -0.0637908 -0.06382004 +-0.102478 -0.102478 -0.10253476 +0.0383845 0.0383845 0.038464714 +-0.0605035 -0.0605035 -0.060505584 +-0.0145633 -0.0145633 -0.01454383 +-0.0272743 -0.0272743 -0.027192399 +-0.0330614 -0.0330614 -0.033045962 +0.038254 0.038254 0.03822874 +0.0343765 0.0343765 0.034469415 +-0.0924427 -0.0924427 -0.09244162 +0.029194 0.029194 0.029161932 +-0.0173355 -0.0173355 -0.01729626 +0.082147 0.082147 0.08215476 +0.0389164 0.0389164 0.03889167 +-0.0281645 -0.0281645 -0.028199483 +0.0401902 0.0401902 0.040175337 +0.0132406 0.0132406 0.013250682 +0.0645971 0.0645971 0.06450971 +-0.0193459 -0.0193459 -0.019391602 +-0.0443555 -0.0443555 -0.044417556 +-0.0367306 -0.0367306 -0.036630932 +0.0211401 0.0211401 0.021158393 +0.0361644 0.0361644 0.036200695 +-0.0554034 -0.0554034 -0.05540141 +-0.00556487 -0.00556487 -0.005577911 +-0.0816652 -0.0816652 -0.081669025 +-0.0301106 -0.0301106 -0.03010537 +0.0159141 0.0159141 0.015895613 +0.00922533 0.00922533 0.009307846 +0.0551613 0.0551613 0.055167414 +-0.034803 -0.034803 -0.034776025 +-0.0448133 -0.0448133 -0.04477542 +-0.0768579 -0.0768579 -0.07682061 +-0.0542865 -0.0542865 -0.054314945 +-0.0897442 -0.0897442 -0.08979361 +-0.0813054 -0.0813054 -0.081378244 +0.0343739 0.0343739 0.034351412 +0.112315 0.112315 0.11229557 +-0.0526866 -0.0526866 -0.052671067 +-0.0205654 -0.0205654 -0.02058297 +0.0598647 0.0598647 0.05985919 +-0.0469249 -0.0469249 -0.0469533 +0.135034 0.135034 0.13502136 +0.0238385 0.0238385 0.02389685 +0.0263148 0.0263148 0.026215438 +0.0488815 0.0488815 0.04893545 +0.00201851 0.00201851 0.0019801678 +-0.0658192 -0.0658192 -0.06580696 +-0.0837458 -0.0837458 -0.08373445 +-0.129833 -0.129833 -0.12979588 +0.0404143 0.0404143 0.040343504 +-0.103602 -0.103602 -0.10357632 +-0.0353081 -0.0353081 -0.03527155 +0.0654926 0.0654926 0.06546452 +-0.00838028 -0.00838028 -0.008370963 +-0.0206083 -0.0206083 -0.020615673 +0.0264097 0.0264097 0.02638662 +-0.0883039 -0.0883039 -0.08819907 +-0.199792 -0.199792 -0.19988258 +0.0615182 0.0615182 0.061526734 +-0.0858546 -0.0858546 -0.08583875 +0.131274 0.131274 0.1313016 +0.0202401 0.0202401 0.020275258 +-0.00880445 -0.00880445 -0.008783383 +-0.0237159 -0.0237159 -0.023654938 +-0.0948707 -0.0948707 -0.09487982 +0.0149959 0.0149959 0.015040154 +0.0241635 0.0241635 0.024163842 +0.0267771 0.0267771 0.026896823 +-0.00176131 -0.00176131 -0.0017794454 +0.0466032 0.0466032 0.046693534 +0.0565396 0.0565396 0.05651203 +-0.0435013 -0.0435013 -0.04349548 +0.00495749 0.00495749 0.0049449718 +0.0112638 0.0112638 0.01133373 +0.0391566 0.0391566 0.039178696 +0.0235042 0.0235042 0.023554733 +0.0579774 0.0579774 0.058005024 +0.0742377 0.0742377 0.07424889 +0.0335742 0.0335742 0.03350042 +0.0318086 0.0318086 0.031804264 +0.000841622 0.000841622 0.0008667805 +-0.0426161 -0.0426161 -0.04272762 +0.0155765 0.0155765 0.015654849 +-0.0239891 -0.0239891 -0.02398827 +-0.0645769 -0.0645769 -0.06470475 +-0.0152078 -0.0152078 -0.015206831 +-0.0508459 -0.0508459 -0.050899737 +0.0171664 0.0171664 0.01720979 +0.0734575 0.0734575 0.07349155 +0.0876927 0.0876927 0.0877091 +-0.0683414 -0.0683414 -0.0683125 +-0.12482 -0.12482 -0.124821916 +0.0482593 0.0482593 0.048256755 +-0.087467 -0.087467 -0.08742404 +0.0263012 0.0263012 0.026281873 +-0.0581131 -0.0581131 -0.058089986 +-0.0326845 -0.0326845 -0.032694906 +-0.0187102 -0.0187102 -0.018689863 +0.0124958 0.0124958 0.012533374 +-0.0513068 -0.0513068 -0.051281895 +-0.00512351 -0.00512351 -0.005046563 +0.00603066 0.00603066 0.0060560983 +-0.0508731 -0.0508731 -0.050895084 +-0.020882 -0.020882 -0.020893747 +-0.0178493 -0.0178493 -0.017849311 +-0.0647826 -0.0647826 -0.06485125 +-0.0178114 -0.0178114 -0.017806234 +-0.034949 -0.034949 -0.03495108 +0.0400768 0.0400768 0.04003734 +0.0141598 0.0141598 0.014080052 +-0.0496786 -0.0496786 -0.049678817 +-0.0716939 -0.0716939 -0.07164615 +0.0236964 0.0236964 0.023652755 +-0.0102244 -0.0102244 -0.010178352 +-0.00564689 -0.00564689 -0.005616271 +0.00163341 0.00163341 0.001709497 +0.0357506 0.0357506 0.03574455 +-0.111344 -0.111344 -0.11121674 +-0.0589656 -0.0589656 -0.058812346 +0.0855062 0.0855062 0.08519821 +0.103814 0.103814 0.10378334 +0.00813909 0.00813909 0.008057803 +-0.13441 -0.13441 -0.13441874 +0.012136 0.012136 0.012152014 +0.121394 0.121394 0.12139798 +0.0982309 0.0982309 0.098144636 +-0.0287196 -0.0287196 -0.028812345 +0.0225899 0.0225899 0.02262093 +-0.0108555 -0.0108555 -0.010835968 +-0.0196389 -0.0196389 -0.019675482 +0.0432086 0.0432086 0.043277442 +0.0501563 0.0501563 0.05015038 +-0.0299923 -0.0299923 -0.029977538 +-0.0102258 -0.0102258 -0.010287727 +-0.0351208 -0.0351208 -0.035162047 +0.0140759 0.0140759 0.014032644 +-0.0436262 -0.0436262 -0.0436738 +0.0199213 0.0199213 0.019941702 +-0.0274136 -0.0274136 -0.027426517 +-0.0299786 -0.0299786 -0.030004429 +-0.00191826 -0.00191826 -0.0019297563 +0.0477441 0.0477441 0.047761485 +-0.100246 -0.100246 -0.10026969 +0.0471075 0.0471075 0.047084637 +0.0389904 0.0389904 0.038887408 +0.0182929 0.0182929 0.018220112 +-0.0386228 -0.0386228 -0.038701266 +0.00922772 0.00922772 0.009217131 +-0.0512827 -0.0512827 -0.051297177 +0.04667 0.04667 0.04663697 +-0.0445715 -0.0445715 -0.044575337 +0.0794886 0.0794886 0.07954514 +-0.0728157 -0.0728157 -0.07286434 +0.0881122 0.0881122 0.08809336 +-0.161461 -0.161461 -0.16142757 +-0.0140791 -0.0140791 -0.014112079 +-0.0815015 -0.0815015 -0.081449136 +0.0822859 0.0822859 0.08233692 +-0.128629 -0.128629 -0.12857832 +-6.82674e-05 -6.82674e-05 -0.000114556424 +-0.0306171 -0.0306171 -0.030729007 +0.0621439 0.0621439 0.062120523 +0.0369373 0.0369373 0.03697083 +-0.010271 -0.010271 -0.010301267 +0.0799434 0.0799434 0.07995286 +0.132349 0.132349 0.13244738 +-0.00776803 -0.00776803 -0.0077290824 +-0.0606303 -0.0606303 -0.0606329 +0.00634928 0.00634928 0.0063524023 +-0.00281338 -0.00281338 -0.0027983356 +-0.12283 -0.12283 -0.12279041 +-0.0644853 -0.0644853 -0.06452653 +0.0306387 0.0306387 0.03071631 +-0.10262 -0.10262 -0.1026218 +-0.0212269 -0.0212269 -0.021314966 +0.036937 0.036937 0.036907673 +0.0533351 0.0533351 0.05334275 +0.0762542 0.0762542 0.07620977 +-0.021037 -0.021037 -0.020976562 +-0.0886201 -0.0886201 -0.08866313 +-0.063626 -0.063626 -0.063586384 +-0.0563334 -0.0563334 -0.056299675 +-0.159235 -0.159235 -0.15921143 +-0.0671488 -0.0671488 -0.06711692 +0.0303675 0.0303675 0.030342413 +0.056239 0.056239 0.056213394 +0.0750959 0.0750959 0.07507753 +0.00076692 0.00076692 0.00069061195 +-0.0090799 -0.0090799 -0.009135325 +-0.104471 -0.104471 -0.104425825 +0.0626451 0.0626451 0.06263234 +-0.0326013 -0.0326013 -0.032657877 +-0.0836174 -0.0836174 -0.08361447 +-0.01506 -0.01506 -0.014996768 +0.021701 0.021701 0.021741824 +-0.0440654 -0.0440654 -0.044102028 +-0.0706568 -0.0706568 -0.07058154 +-0.0848981 -0.0848981 -0.084884256 +-0.100327 -0.100327 -0.10035988 +0.0672638 0.0672638 0.06728508 +0.00298856 0.00298856 0.0029561291 +0.09307 0.09307 0.093101025 +-0.0452801 -0.0452801 -0.04519128 +-0.0688817 -0.0688817 -0.06888905 +0.0039989 0.0039989 0.0039989534 +0.0138093 0.0138093 0.01385549 +-0.193926 -0.193926 -0.19389978 +0.065403 0.065403 0.06538664 +-0.00380169 -0.00380169 -0.0037977188 +0.0320791 0.0320791 0.032068092 +-0.0315648 -0.0315648 -0.031609956 +0.072228 0.072228 0.072157554 +-0.003275 -0.003275 -0.0032727774 +-0.117857 -0.117857 -0.11794696 +-0.0589439 -0.0589439 -0.058971595 +0.0195353 0.0195353 0.019517032 +0.0580987 0.0580987 0.058089506 +-0.0343652 -0.0343652 -0.034322165 +0.00966513 0.00966513 0.0096585 +-0.0448846 -0.0448846 -0.04486057 +0.0277202 0.0277202 0.027755534 +0.0742759 0.0742759 0.07431889 +-0.114456 -0.114456 -0.114478245 +-0.0549094 -0.0549094 -0.05491402 +-0.0280814 -0.0280814 -0.02808397 +-0.0327284 -0.0327284 -0.03271479 +-0.0379359 -0.0379359 -0.03788582 +0.230008 0.230008 0.22999278 +0.0614033 0.0614033 0.061309237 +0.127026 0.127026 0.12697268 +-0.0418378 -0.0418378 -0.04177747 +0.0554789 0.0554789 0.05556076 +0.0184763 0.0184763 0.01854224 +0.0266543 0.0266543 0.026558159 +0.0096221 0.0096221 0.009683125 +0.0180696 0.0180696 0.018050022 +0.0193641 0.0193641 0.019365229 +0.140344 0.140344 0.14032614 +-0.0313163 -0.0313163 -0.031341642 +0.00820456 0.00820456 0.008143307 +0.00117658 0.00117658 0.0012545312 +-0.121214 -0.121214 -0.12126723 +-0.054652 -0.054652 -0.05454728 +-0.0183439 -0.0183439 -0.018348662 +-0.0668513 -0.0668513 -0.06688733 +0.0617271 0.0617271 0.06174377 +-0.0175261 -0.0175261 -0.01754248 +0.049828 0.049828 0.049749084 +-0.0995336 -0.0995336 -0.099573776 +-0.056706 -0.056706 -0.056798417 +-0.0145515 -0.0145515 -0.014601551 +-0.0606375 -0.0606375 -0.060668863 +0.0234411 0.0234411 0.02351543 +-0.118614 -0.118614 -0.11859751 +-0.0432863 -0.0432863 -0.043216094 +0.0998704 0.0998704 0.099800766 +-0.0989919 -0.0989919 -0.09887356 +0.0802651 0.0802651 0.08021362 +0.0486571 0.0486571 0.048675306 +-0.127314 -0.127314 -0.12727097 +0.025783 0.025783 0.025711646 +-0.0474719 -0.0474719 -0.047420226 +0.0615223 0.0615223 0.061460312 +0.0521325 0.0521325 0.05216102 +-0.0652802 -0.0652802 -0.06531856 +0.058852 0.058852 0.05894792 +0.0376914 0.0376914 0.03763494 +0.091372 0.091372 0.09136017 +0.0450637 0.0450637 0.045024093 +-0.0687716 -0.0687716 -0.06871038 +0.041062 0.041062 0.041034967 +-0.0828464 -0.0828464 -0.08284562 +0.0900524 0.0900524 0.08997067 +-0.0607062 -0.0607062 -0.060673963 +-0.00622962 -0.00622962 -0.0062628295 +0.0315057 0.0315057 0.03152907 +0.0845301 0.0845301 0.08456287 +-0.065166 -0.065166 -0.06520025 +0.018492 0.018492 0.01848135 +0.047877 0.047877 0.048017174 +0.0854886 0.0854886 0.08556354 +0.0139394 0.0139394 0.01397255 +-0.158224 -0.158224 -0.15822797 +-0.0143655 -0.0143655 -0.014380796 +-0.0611237 -0.0611237 -0.061114848 +0.043129 0.043129 0.043206405 +-0.0301445 -0.0301445 -0.030163478 +0.0440395 0.0440395 0.044018544 +-0.0806805 -0.0806805 -0.08064959 +0.0203253 0.0203253 0.020401672 +0.0719313 0.0719313 0.07195835 +-0.0524786 -0.0524786 -0.05248842 +-0.130403 -0.130403 -0.13034025 +0.0655455 0.0655455 0.065547325 +-0.00175413 -0.00175413 -0.0017687901 +-0.0964908 -0.0964908 -0.09645052 +0.0232741 0.0232741 0.02321953 +0.0368534 0.0368534 0.036894366 +0.0590777 0.0590777 0.05914649 +0.0288669 0.0288669 0.028831113 +0.0443607 0.0443607 0.04437453 +-0.13501 -0.13501 -0.1349884 +0.0850765 0.0850765 0.085042216 +-0.0993035 -0.0993035 -0.09931085 +0.0983662 0.0983662 0.09844103 +0.0363892 0.0363892 0.036404476 +-0.0996917 -0.0996917 -0.09966904 +-0.0152383 -0.0152383 -0.015259713 +-0.0135017 -0.0135017 -0.013541313 +0.0526837 0.0526837 0.05267212 +0.0607015 0.0607015 0.0606642 +-0.013118 -0.013118 -0.01317117 +0.0609916 0.0609916 0.061044846 +-0.082983 -0.082983 -0.08290163 +-0.00264844 -0.00264844 -0.002654505 +-0.0387733 -0.0387733 -0.038805258 +0.0590646 0.0590646 0.05901609 +0.0393398 0.0393398 0.039366633 +-0.0846331 -0.0846331 -0.0846397 +0.0206114 0.0206114 0.02055374 +0.0653824 0.0653824 0.06539393 +0.0113531 0.0113531 0.011392293 +-0.0612903 -0.0612903 -0.061375264 +-0.0840422 -0.0840422 -0.08402338 +-0.0672038 -0.0672038 -0.06719546 +-0.0109449 -0.0109449 -0.010888741 +-0.00930985 -0.00930985 -0.009308281 +-0.00268656 -0.00268656 -0.0026164842 +0.0556976 0.0556976 0.055620726 +0.101456 0.101456 0.10142655 +-0.0513066 -0.0513066 -0.05130399 +-0.00557194 -0.00557194 -0.0055165407 +0.0731675 0.0731675 0.0731653 +-0.0906247 -0.0906247 -0.09069344 +0.105676 0.105676 0.10558644 +-0.0155757 -0.0155757 -0.015627323 +0.0179599 0.0179599 0.017960785 +-0.147625 -0.147625 -0.14769003 +0.0343308 0.0343308 0.034371924 +-0.120912 -0.120912 -0.12091128 +-0.0666447 -0.0666447 -0.06659279 +-0.157528 -0.157528 -0.15753032 +0.0373289 0.0373289 0.037273873 +-0.0131986 -0.0131986 -0.013159553 +0.0374035 0.0374035 0.03741687 +-0.0406617 -0.0406617 -0.04062675 +-0.0176933 -0.0176933 -0.017679889 +-0.0446159 -0.0446159 -0.04464699 +0.0102568 0.0102568 0.010273402 +-0.0358104 -0.0358104 -0.035783704 +0.010095 0.010095 0.010063791 +0.0415779 0.0415779 0.04161036 +-0.0189882 -0.0189882 -0.018946502 +0.0129712 0.0129712 0.012975148 +0.0426023 0.0426023 0.04260588 +0.0663336 0.0663336 0.066292696 +0.0123081 0.0123081 0.012390993 +-0.0660598 -0.0660598 -0.06601224 +-0.0805062 -0.0805062 -0.08059793 +0.0335618 0.0335618 0.033618756 +0.000970251 0.000970251 0.00091493997 +0.0534526 0.0534526 0.053552486 +0.105646 0.105646 0.105677426 +-0.0764076 -0.0764076 -0.076404534 +0.000784859 0.000784859 0.00078725006 +0.00601265 0.00601265 0.006034782 +-0.0578001 -0.0578001 -0.05783107 +0.0734675 0.0734675 0.07345792 +-0.111852 -0.111852 -0.111881465 +-0.137841 -0.137841 -0.13775137 +0.086404 0.086404 0.08631717 +0.041699 0.041699 0.04170403 +-0.00640876 -0.00640876 -0.006344748 +0.0462616 0.0462616 0.046323333 +-0.0215098 -0.0215098 -0.021477466 +-0.0431746 -0.0431746 -0.043161098 +-0.0526841 -0.0526841 -0.05263645 +-0.0733081 -0.0733081 -0.073295034 +0.0568041 0.0568041 0.056755748 +-0.0135586 -0.0135586 -0.013578153 +-0.0337801 -0.0337801 -0.033748943 +-0.0466626 -0.0466626 -0.046600584 +-0.0185631 -0.0185631 -0.01854749 +-0.00236038 -0.00236038 -0.002371483 +0.00291314 0.00291314 0.0029367215 +-0.096219 -0.096219 -0.09612156 +-0.0859722 -0.0859722 -0.085985176 +-0.0680453 -0.0680453 -0.06808266 +0.00138534 0.00138534 0.0014156506 +-0.0281652 -0.0281652 -0.028207613 +0.0259367 0.0259367 0.02593799 +-0.0481295 -0.0481295 -0.048088223 +-0.0671646 -0.0671646 -0.067200944 +0.0967184 0.0967184 0.0966916 +-0.0861731 -0.0861731 -0.08626476 +-0.0200471 -0.0200471 -0.019995403 +-0.0249749 -0.0249749 -0.024907606 +-0.00653724 -0.00653724 -0.00649345 +0.102747 0.102747 0.102711625 +-0.0141921 -0.0141921 -0.014188153 +-0.0746222 -0.0746222 -0.07469667 +-0.00300505 -0.00300505 -0.0029975518 +0.14133 0.14133 0.14126514 +-0.0140395 -0.0140395 -0.014053917 +0.0618404 0.0618404 0.06182529 +-0.0627151 -0.0627151 -0.06268016 +-0.00221657 -0.00221657 -0.0021621466 +0.0293184 0.0293184 0.029342268 +0.0283671 0.0283671 0.028355274 +0.0444701 0.0444701 0.04444345 +0.118262 0.118262 0.118225 +-0.0194982 -0.0194982 -0.01947501 +0.0503133 0.0503133 0.050353765 +-0.0311647 -0.0311647 -0.031208083 +0.0683718 0.0683718 0.06838112 +-0.020753 -0.020753 -0.020374948 +-0.0837432 -0.0837432 -0.08361723 +-0.039261 -0.039261 -0.039310083 +-0.0339169 -0.0339169 -0.033909325 +-0.0228657 -0.0228657 -0.022813471 +0.0891401 0.0891401 0.08913361 +-0.122539 -0.122539 -0.12257277 +0.0349816 0.0349816 0.034994505 +-0.0657787 -0.0657787 -0.06570944 +0.11347 0.11347 0.11355097 +-0.0660283 -0.0660283 -0.06608495 +-0.0360846 -0.0360846 -0.036073253 +-0.0227785 -0.0227785 -0.022784114 +0.0821676 0.0821676 0.08216841 +0.00577046 0.00577046 0.0057925642 +0.0478593 0.0478593 0.047872875 +0.0807533 0.0807533 0.08074302 +0.00932683 0.00932683 0.009287417 +-0.0611472 -0.0611472 -0.061109465 +0.0246673 0.0246673 0.024710834 +0.00135176 0.00135176 0.0013805972 +-0.050431 -0.050431 -0.050438702 +-0.0584669 -0.0584669 -0.058450762 +0.0353952 0.0353952 0.035427768 +0.116529 0.116529 0.11641231 +0.0986702 0.0986702 0.09864399 +-0.0202005 -0.0202005 -0.0202289 +-0.0421147 -0.0421147 -0.04210291 +0.0344777 0.0344777 0.034470968 +-0.0844195 -0.0844195 -0.08442584 +-0.027405 -0.027405 -0.02737937 +0.0230446 0.0230446 0.02308166 +0.108843 0.108843 0.108843684 +0.0743999 0.0743999 0.07441694 +0.0408008 0.0408008 0.040758323 +-0.0648177 -0.0648177 -0.06478075 +0.0332184 0.0332184 0.033217184 +-0.13516 -0.13516 -0.13516635 +0.020348 0.020348 0.020325523 +-0.019706 -0.019706 -0.019689381 +0.0143609 0.0143609 0.014394265 +-0.0894585 -0.0894585 -0.08946538 +-0.0826925 -0.0826925 -0.08271616 +-0.0178079 -0.0178079 -0.017774826 +0.0553935 0.0553935 0.055414107 +-0.0267986 -0.0267986 -0.026737604 +-0.0253104 -0.0253104 -0.025286786 +-0.0305134 -0.0305134 -0.03044664 +0.0583623 0.0583623 0.058239717 +-0.0739897 -0.0739897 -0.07397549 +-0.0394194 -0.0394194 -0.039450143 +-0.000132329 -0.000132329 -0.00015328724 +-0.0999173 -0.0999173 -0.0999704 +0.0893717 0.0893717 0.08944228 +0.0478107 0.0478107 0.04776287 +0.0887741 0.0887741 0.08878326 +-0.0696607 -0.0696607 -0.06958674 +0.129804 0.129804 0.1297302 +0.0478155 0.0478155 0.04775043 +0.125157 0.125157 0.12519418 +0.0775603 0.0775603 0.07753955 +-0.0541937 -0.0541937 -0.054195408 +0.0614587 0.0614587 0.06153245 +0.00334967 0.00334967 0.0033751328 +-0.0582479 -0.0582479 -0.058207035 +0.0444609 0.0444609 0.044414658 +-0.0452177 -0.0452177 -0.045146216 +-0.024907 -0.024907 -0.024937047 +0.0568596 0.0568596 0.05683513 +0.0355087 0.0355087 0.035511367 +0.0307766 0.0307766 0.030797122 +-0.00212521 -0.00212521 -0.0020298092 +-0.00481007 -0.00481007 -0.0048410916 +-0.120924 -0.120924 -0.12094744 +-0.0856549 -0.0856549 -0.08565664 +0.16597 0.16597 0.1659452 +-0.106743 -0.106743 -0.10668079 +-0.0512974 -0.0512974 -0.05125545 +-0.00323899 -0.00323899 -0.0031625642 +-0.0282713 -0.0282713 -0.028228128 +-0.0806675 -0.0806675 -0.08066508 +0.0163984 0.0163984 0.01638767 +0.0195218 0.0195218 0.01946576 +-0.0391853 -0.0391853 -0.039197374 +0.0907969 0.0907969 0.09079135 +0.101102 0.101102 0.101091355 +-0.117093 -0.117093 -0.11710716 +0.0218797 0.0218797 0.022054927 +-0.0634259 -0.0634259 -0.06343277 +-0.0666481 -0.0666481 -0.06656244 +-0.023475 -0.023475 -0.023497976 +-0.0114939 -0.0114939 -0.011538402 +-0.00952004 -0.00952004 -0.009535399 +-0.081216 -0.081216 -0.08127379 +-0.0373511 -0.0373511 -0.037335366 +0.0418 0.0418 0.04177978 +0.0620319 0.0620319 0.06208473 +0.0874108 0.0874108 0.08738615 +-0.00073767 -0.00073767 -0.00080882123 +-0.119971 -0.119971 -0.11997311 +-0.0115849 -0.0115849 -0.011538207 +-0.00935112 -0.00935112 -0.0093574505 +0.157036 0.157036 0.15695307 +0.039211 0.039211 0.039215673 +0.0816722 0.0816722 0.081654474 +0.00493054 0.00493054 0.004860576 +0.00442144 0.00442144 0.004434237 +-0.05006 -0.05006 -0.050047968 +-0.0687349 -0.0687349 -0.06868344 +0.0381331 0.0381331 0.03813907 +0.00310294 0.00310294 0.0030840726 +-0.0275964 -0.0275964 -0.027565658 +0.0844087 0.0844087 0.08444983 +-0.0473476 -0.0473476 -0.04737299 +0.0293338 0.0293338 0.029398927 +0.00272867 0.00272867 0.0027301218 +0.0329065 0.0329065 0.03288811 +0.0126441 0.0126441 0.012627144 +-0.105791 -0.105791 -0.105803624 +-0.0923369 -0.0923369 -0.092287466 +-0.00577163 -0.00577163 -0.0058081266 +0.135639 0.135639 0.13562426 +0.0360204 0.0360204 0.035972465 +-0.0329445 -0.0329445 -0.032870665 +0.0371009 0.0371009 0.037076972 +0.0146911 0.0146911 0.01470151 +-0.030003 -0.030003 -0.029953975 +-0.00371737 -0.00371737 -0.0036859924 +-0.0593852 -0.0593852 -0.05931457 +0.0952163 0.0952163 0.095210396 +-0.0246423 -0.0246423 -0.024598423 +-0.0163578 -0.0163578 -0.016338982 +-0.0898604 -0.0898604 -0.08990089 +-0.0119719 -0.0119719 -0.01193727 +-0.0508426 -0.0508426 -0.050880272 +-0.0863963 -0.0863963 -0.08638418 +-0.139428 -0.139428 -0.13939841 +0.044922 0.044922 0.044963956 +0.0527153 0.0527153 0.052735124 +0.0707722 0.0707722 0.07078028 +0.0728348 0.0728348 0.072717845 +0.0751253 0.0751253 0.07516432 +-0.099345 -0.099345 -0.09936808 +0.000886933 0.000886933 0.0008535402 +0.100147 0.100147 0.10002974 +0.0144436 0.0144436 0.014406132 +-0.0548055 -0.0548055 -0.054791737 +0.0521455 0.0521455 0.05205637 +-0.0424488 -0.0424488 -0.04238053 +-0.0677277 -0.0677277 -0.06771327 +0.0641124 0.0641124 0.064183824 +0.0166722 0.0166722 0.016757583 +-0.0591776 -0.0591776 -0.059138272 +-0.0591525 -0.0591525 -0.05912139 +-0.0190804 -0.0190804 -0.019084536 +-0.10253 -0.10253 -0.10247874 +-0.0353694 -0.0353694 -0.03544923 +0.116582 0.116582 0.11647328 +-0.0499866 -0.0499866 -0.049947012 +0.00927067 0.00927067 0.009411542 +-0.141683 -0.141683 -0.14174482 +-0.0109298 -0.0109298 -0.010858529 +0.137397 0.137397 0.13739519 +0.00236658 0.00236658 0.002402675 +0.0156093 0.0156093 0.015648007 +-0.074586 -0.074586 -0.07454647 +-0.0435637 -0.0435637 -0.04357019 +0.0327797 0.0327797 0.032780796 +0.0453993 0.0453993 0.04542561 +0.0278183 0.0278183 0.02783575 +0.0847486 0.0847486 0.08473176 +0.00165894 0.00165894 0.0017167843 +0.0423954 0.0423954 0.042386282 +-0.0545126 -0.0545126 -0.05447223 +-0.0682817 -0.0682817 -0.068182796 +-0.0616332 -0.0616332 -0.06163884 +-0.052267 -0.052267 -0.05231152 +0.0262957 0.0262957 0.026332106 +-0.0801376 -0.0801376 -0.08010776 +0.0153231 0.0153231 0.015409228 +0.077808 0.077808 0.07786243 +-0.00502868 -0.00502868 -0.005022384 +0.13594 0.13594 0.13589193 +-0.0233411 -0.0233411 -0.023414833 +0.0275977 0.0275977 0.027610838 +-0.0144232 -0.0144232 -0.014375772 +-0.0147976 -0.0147976 -0.014871436 +0.0287727 0.0287727 0.028799146 +0.0292824 0.0292824 0.029300544 +0.0278037 0.0278037 0.02793182 +0.104937 0.104937 0.104922645 +-0.0122869 -0.0122869 -0.012254082 +-0.0234407 -0.0234407 -0.023480596 +0.00856831 0.00856831 0.008537365 +-0.0244242 -0.0244242 -0.02441801 +-0.0868411 -0.0868411 -0.08684312 +0.0718042 0.0718042 0.071875304 +-0.0457629 -0.0457629 -0.045794476 +-0.017378 -0.017378 -0.017362481 +0.1069 0.1069 0.10684584 +-0.0628042 -0.0628042 -0.06271363 +0.0138652 0.0138652 0.013929314 +-0.0337252 -0.0337252 -0.03367596 +0.0218209 0.0218209 0.021786034 +0.0152358 0.0152358 0.015164762 +0.0909022 0.0909022 0.0909644 +0.0454225 0.0454225 0.04539511 +-0.0382933 -0.0382933 -0.038292896 +0.08091 0.08091 0.08094908 +-0.0472447 -0.0472447 -0.04726853 +0.0667049 0.0667049 0.06668231 +-0.103612 -0.103612 -0.10359235 +-0.049081 -0.049081 -0.04907777 +-0.000549436 -0.000549436 -0.0004916626 +0.0439868 0.0439868 0.044015534 +-0.0954798 -0.0954798 -0.09561605 +-0.00201512 -0.00201512 -0.0019462825 +0.065845 0.065845 0.06593018 +-0.0324526 -0.0324526 -0.03246917 +0.00595447 0.00595447 0.005847421 +-0.0381746 -0.0381746 -0.038145147 +-0.0763434 -0.0763434 -0.076285325 +-0.0090205 -0.0090205 -0.008988769 +-0.0194541 -0.0194541 -0.019486977 +0.0198814 0.0198814 0.019945333 +0.0578744 0.0578744 0.057843234 +-0.00779862 -0.00779862 -0.007828754 +-0.00688198 -0.00688198 -0.0068542785 +0.114949 0.114949 0.114938736 +0.0414261 0.0414261 0.041446954 +-0.0108493 -0.0108493 -0.010900693 +-0.0313957 -0.0313957 -0.03139675 +-0.0620111 -0.0620111 -0.061976742 +0.0245007 0.0245007 0.024535123 +-0.0596181 -0.0596181 -0.059675917 +-0.0800479 -0.0800479 -0.08004785 +-0.0721706 -0.0721706 -0.07228958 +0.0712942 0.0712942 0.07136295 +-0.0672955 -0.0672955 -0.06730062 +-0.00701501 -0.00701501 -0.0070987646 +0.0887472 0.0887472 0.08871434 +0.0321059 0.0321059 0.032125935 +-0.032013 -0.032013 -0.032000996 +-0.0177762 -0.0177762 -0.017772123 +-0.021149 -0.021149 -0.021079823 +-0.00538408 -0.00538408 -0.0054166135 +0.0312436 0.0312436 0.031240718 +-0.0860098 -0.0860098 -0.08601078 +0.103738 0.103738 0.10376508 +-0.0722214 -0.0722214 -0.07231265 +0.0250009 0.0250009 0.024923565 +0.13557 0.13557 0.13558029 +0.0157096 0.0157096 0.015778916 +0.0472307 0.0472307 0.0472252 +-0.0963088 -0.0963088 -0.096369356 +-0.0358138 -0.0358138 -0.035886716 +-0.00814807 -0.00814807 -0.008090855 +0.068548 0.068548 0.0685595 +-0.082624 -0.082624 -0.082615964 +-0.0229619 -0.0229619 -0.02293562 +0.0126239 0.0126239 0.012654734 +0.0171394 0.0171394 0.017105896 +-0.0198714 -0.0198714 -0.019911509 +-0.122449 -0.122449 -0.12242488 +-0.0594919 -0.0594919 -0.0595273 +-0.113161 -0.113161 -0.11316117 +0.069462 0.069462 0.069519006 +-0.00991259 -0.00991259 -0.009877172 +0.0430971 0.0430971 0.0430664 +0.0169472 0.0169472 0.016898643 +-0.0382775 -0.0382775 -0.0382272 +0.0688429 0.0688429 0.06884726 +-0.0374482 -0.0374482 -0.037465066 +0.041494 0.041494 0.04143241 +-0.0349341 -0.0349341 -0.034972917 +0.0264077 0.0264077 0.026458204 +0.153205 0.153205 0.15322417 +0.0356993 0.0356993 0.03568475 +-0.106711 -0.106711 -0.10678004 +0.0333664 0.0333664 0.033271328 +0.0207975 0.0207975 0.020805744 +0.0625512 0.0625512 0.062596366 +-0.0722697 -0.0722697 -0.07226944 +0.0975507 0.0975507 0.09749513 +0.0179893 0.0179893 0.0179676 +-0.0375372 -0.0375372 -0.03756214 +0.045664 0.045664 0.045679647 +0.0585751 0.0585751 0.058555666 +-0.0985737 -0.0985737 -0.09858013 +-0.0727691 -0.0727691 -0.07272761 +0.0721199 0.0721199 0.07218393 +0.0517744 0.0517744 0.051673066 +0.0515994 0.0515994 0.05160527 +0.0205052 0.0205052 0.020445772 +-0.00386251 -0.00386251 -0.003795895 +-0.0486549 -0.0486549 -0.048673753 +0.0105364 0.0105364 0.0105583565 +0.160452 0.160452 0.16044924 +-0.113438 -0.113438 -0.11343136 +-0.0785129 -0.0785129 -0.078465946 +-0.0560388 -0.0560388 -0.056093283 +0.0536809 0.0536809 0.053691704 +-0.0642731 -0.0642731 -0.064265 +0.0201075 0.0201075 0.020157829 +0.0106536 0.0106536 0.010642538 +-0.0355987 -0.0355987 -0.035565346 +-0.0454537 -0.0454537 -0.045440912 +-0.0620665 -0.0620665 -0.06206365 +-0.0272062 -0.0272062 -0.027187437 +0.0612653 0.0612653 0.061301578 +-0.0733389 -0.0733389 -0.07337231 +0.00837009 0.00837009 0.008374023 +0.0405052 0.0405052 0.040423438 +0.0204501 0.0204501 0.020442493 +-0.0418927 -0.0418927 -0.041916654 +0.0105216 0.0105216 0.010561548 +0.122133 0.122133 0.12210324 +0.00370949 0.00370949 0.0037304105 +-0.0971165 -0.0971165 -0.097141325 +-0.0541682 -0.0541682 -0.054090302 +0.0161635 0.0161635 0.016158251 +-0.0208605 -0.0208605 -0.020812143 +0.0673349 0.0673349 0.06736189 +-0.0633673 -0.0633673 -0.063401625 +-0.0565576 -0.0565576 -0.056726836 +0.0532704 0.0532704 0.053237885 +-0.0299303 -0.0299303 -0.029882072 +-0.0601764 -0.0601764 -0.060223345 +0.0182298 0.0182298 0.018281268 +-0.0267721 -0.0267721 -0.026727114 +-0.0125627 -0.0125627 -0.012559479 +0.00978926 0.00978926 0.009759318 +0.0413449 0.0413449 0.04128813 +0.102757 0.102757 0.10273017 +0.098778 0.098778 0.09876594 +-0.0425208 -0.0425208 -0.04252229 +0.0382595 0.0382595 0.0382022 +-0.0677453 -0.0677453 -0.06778083 +0.0368786 0.0368786 0.036713816 +0.0387968 0.0387968 0.038876865 +-0.00680429 -0.00680429 -0.006870442 +-0.00685776 -0.00685776 -0.0068468386 +-0.101526 -0.101526 -0.101483405 +-0.0606549 -0.0606549 -0.06064562 +-0.0527371 -0.0527371 -0.052721415 +0.0606997 0.0606997 0.06074581 +-0.0407649 -0.0407649 -0.04074453 +-0.0258942 -0.0258942 -0.025877262 +0.0450496 0.0450496 0.04506841 +-0.0198127 -0.0198127 -0.019834692 +0.0653295 0.0653295 0.063548855 +0.0131165 0.0131165 0.012560136 +-0.0270486 -0.0270486 -0.027730048 +0.0493812 0.0493812 0.049279153 +0.0132769 0.0132769 0.01329281 +0.00128465 0.00128465 0.0013202822 +0.0075122 0.0075122 0.007344263 +-0.0602458 -0.0602458 -0.060155343 +-0.0201613 -0.0201613 -0.020290755 +-0.0189207 -0.0189207 -0.019044869 +-0.0687412 -0.0687412 -0.06869008 +0.0115203 0.0115203 0.011514476 +-0.0651757 -0.0651757 -0.065190904 +0.0568151 0.0568151 0.056824174 +-0.165829 -0.165829 -0.16590108 +-0.0961899 -0.0961899 -0.09629134 +0.117321 0.117321 0.117344886 +-0.069444 -0.069444 -0.06948144 +-0.0758893 -0.0758893 -0.07596233 +-0.0520547 -0.0520547 -0.052019056 +-0.091916 -0.091916 -0.091919035 +0.0906655 0.0906655 0.09065038 +-0.0257775 -0.0257775 -0.02585599 +-0.0258799 -0.0258799 -0.025864083 +0.016406 0.016406 0.016447462 +0.0645168 0.0645168 0.06455054 +0.0414394 0.0414394 0.041431654 +0.0725697 0.0725697 0.07246278 +-0.0285952 -0.0285952 -0.028636375 +0.0654003 0.0654003 0.065450974 +-0.0124541 -0.0124541 -0.012471621 +-0.105508 -0.105508 -0.10541832 +-0.00232969 -0.00232969 -0.0023675107 +-0.113455 -0.113455 -0.11350907 +0.0627594 0.0627594 0.06280739 +-0.0212383 -0.0212383 -0.021236135 +-0.0913005 -0.0913005 -0.09125328 +0.00598554 0.00598554 0.0059865513 +0.0108706 0.0108706 0.010862056 +0.0247467 0.0247467 0.024718242 +0.0681867 0.0681867 0.06815658 +-0.201172 -0.201172 -0.2011568 +0.0445474 0.0445474 0.044542953 +0.00621027 0.00621027 0.006214836 +0.0108281 0.0108281 0.010823693 +0.0444071 0.0444071 0.04438869 +0.0681441 0.0681441 0.06821475 +0.0261679 0.0261679 0.026186502 +0.104057 0.104057 0.10402984 +-0.0192148 -0.0192148 -0.019237652 +-0.061863 -0.061863 -0.061868526 +-0.100562 -0.100562 -0.10056375 +-0.174935 -0.174935 -0.17489253 +-0.0504894 -0.0504894 -0.05045724 +-0.00868037 -0.00868037 -0.008671147 +0.109987 0.109987 0.10999509 +0.0378853 0.0378853 0.0378752 +-0.0153837 -0.0153837 -0.015431937 +-0.0645715 -0.0645715 -0.064584166 +0.0337686 0.0337686 0.033684697 +0.00652098 0.00652098 0.0066065337 +-0.0717923 -0.0717923 -0.07183438 +-0.00676504 -0.00676504 -0.0067488356 +0.00768651 0.00768651 0.0076687634 +0.0294557 0.0294557 0.029386263 +0.124985 0.124985 0.12499362 +0.0208068 0.0208068 0.020712422 +-0.00570303 -0.00570303 -0.005650172 +0.0543658 0.0543658 0.054416515 +0.047356 0.047356 0.047363058 +-0.000166905 -0.000166905 -0.00026267444 +0.0314702 0.0314702 0.031472173 +-0.142203 -0.142203 -0.14220797 +-0.0441478 -0.0441478 -0.04412939 +0.0502748 0.0502748 0.050256476 +0.0088405 0.0088405 0.00884938 +-0.0368142 -0.0368142 -0.036851324 +-0.116246 -0.116246 -0.116251364 +-0.030213 -0.030213 -0.030285662 +0.0258623 0.0258623 0.025867386 +-0.0522554 -0.0522554 -0.052261777 +0.0104885 0.0104885 0.010398379 +-0.044973 -0.044973 -0.044935014 +0.00401285 0.00401285 0.0040488215 +0.0403851 0.0403851 0.040387828 +0.0431153 0.0431153 0.04310458 +-0.0274422 -0.0274422 -0.027486866 +0.0668549 0.0668549 0.066849284 +-0.0486322 -0.0486322 -0.04857478 +-0.00175412 -0.00175412 -0.0017943874 +-0.0856369 -0.0856369 -0.08568595 +-0.082385 -0.082385 -0.082406715 +-0.0214151 -0.0214151 -0.021392617 +0.0205549 0.0205549 0.02052435 +0.00016055 0.00016055 0.0002526406 +0.00233047 0.00233047 0.0023066176 +0.00879169 0.00879169 0.008800809 +-0.0332036 -0.0332036 -0.03327772 +0.0987067 0.0987067 0.098684646 +0.0650941 0.0650941 0.06509907 +-0.113659 -0.113659 -0.1135951 +0.0203311 0.0203311 0.020318296 +0.0993201 0.0993201 0.099293314 +0.0348225 0.0348225 0.034882937 +-0.0291356 -0.0291356 -0.029116752 +0.0635113 0.0635113 0.06347595 +-0.0217627 -0.0217627 -0.021750346 +0.135891 0.135891 0.13591813 +-0.0970261 -0.0970261 -0.09694596 +0.0374055 0.0374055 0.03740065 +0.00610234 0.00610234 0.0061593307 +-0.0896266 -0.0896266 -0.08967177 +0.0239459 0.0239459 0.023894044 +-0.0431661 -0.0431661 -0.04317255 +0.0518756 0.0518756 0.051889062 +0.0775965 0.0775965 0.077600576 +-0.0282974 -0.0282974 -0.028272888 +0.0559174 0.0559174 0.055839237 +0.0554503 0.0554503 0.055508584 +-0.0120576 -0.0120576 -0.012114349 +0.0849337 0.0849337 0.084910356 +0.080557 0.080557 0.08058339 +0.0380591 0.0380591 0.038029734 +0.00540323 0.00540323 0.0054182876 +-0.0643334 -0.0643334 -0.0644162 +-0.105604 -0.105604 -0.10557482 +-0.0156245 -0.0156245 -0.015680585 +-0.0758462 -0.0758462 -0.075828984 +0.125086 0.125086 0.12512782 +-0.0794204 -0.0794204 -0.07951003 +-0.0250733 -0.0250733 -0.025099738 +-0.0542299 -0.0542299 -0.054210275 +-0.0355442 -0.0355442 -0.035416495 +-0.0290071 -0.0290071 -0.028867984 +0.0246224 0.0246224 0.024535364 +0.0155884 0.0155884 0.015496487 +0.142457 0.142457 0.14241824 +0.0301892 0.0301892 0.030193299 +-0.0353128 -0.0353128 -0.035291553 +-0.034646 -0.034646 -0.034552746 +-0.076479 -0.076479 -0.07645503 +0.0685036 0.0685036 0.0685914 +0.069627 0.069627 0.069690965 +-0.00990677 -0.00990677 -0.009907756 +0.0496553 0.0496553 0.049620975 +0.0213154 0.0213154 0.021248367 +0.0553894 0.0553894 0.05532668 +0.040824 0.040824 0.04085294 +-0.0511406 -0.0511406 -0.05111299 +-0.0680455 -0.0680455 -0.06801835 +0.0133804 0.0133804 0.013353203 +0.0170121 0.0170121 0.017006978 +0.0385896 0.0385896 0.03854809 +-0.0530041 -0.0530041 -0.053109676 +0.0241698 0.0241698 0.024184803 +0.0141916 0.0141916 0.014153055 +-0.0402113 -0.0402113 -0.04006792 +-0.000569676 -0.000569676 -0.0006702582 +-0.13654 -0.13654 -0.13650785 +0.0518423 0.0518423 0.051772334 +-0.00940459 -0.00940459 -0.009319658 +-0.0482009 -0.0482009 -0.048213623 +-0.00447888 -0.00447888 -0.0043950737 +0.113943 0.113943 0.113900125 +0.0594572 0.0594572 0.05941948 +0.103079 0.103079 0.10315112 +-0.0855626 -0.0855626 -0.08553877 +0.0113081 0.0113081 0.011336735 +-0.0154618 -0.0154618 -0.015491187 +-0.033909 -0.033909 -0.033992127 +0.0952552 0.0952552 0.0953087 +0.0294382 0.0294382 0.029429603 +0.113649 0.113649 0.113634825 +0.0235659 0.0235659 0.023508372 +0.11293 0.11293 0.11286213 +0.023728 0.023728 0.023652654 +-0.0162058 -0.0162058 -0.01625625 +0.0667087 0.0667087 0.066647194 +0.0673575 0.0673575 0.06740708 +0.0830204 0.0830204 0.08301531 +-0.0457327 -0.0457327 -0.045825146 +0.0738199 0.0738199 0.073850125 +-0.0752211 -0.0752211 -0.07526195 +0.0240177 0.0240177 0.024092205 +0.0386395 0.0386395 0.038650252 +-0.0885774 -0.0885774 -0.0885861 +0.0179201 0.0179201 0.01797733 +-0.039175 -0.039175 -0.03919632 +0.11268 0.11268 0.112693675 +-0.0550549 -0.0550549 -0.055018403 +-0.0299643 -0.0299643 -0.029884055 +-0.141434 -0.141434 -0.14147717 +0.110754 0.110754 0.11071699 +-0.107651 -0.107651 -0.10760163 +-0.0455432 -0.0455432 -0.045497105 +-0.012042 -0.012042 -0.0119741075 +0.109416 0.109416 0.109392494 +0.073278 0.073278 0.0732587 +-0.0462405 -0.0462405 -0.046213582 +0.0272162 0.0272162 0.027271522 +-0.0563186 -0.0563186 -0.05630755 +-0.0446361 -0.0446361 -0.04460717 +0.0305647 0.0305647 0.030523201 +-0.0557687 -0.0557687 -0.055741932 +-0.0479249 -0.0479249 -0.047937624 +-0.023906 -0.023906 -0.023875492 +-0.0537644 -0.0537644 -0.053748645 +0.00218472 0.00218472 0.0021465463 +-0.000779049 -0.000779049 -0.00083052856 +0.0022778 0.0022778 0.0022685404 +0.0126681 0.0126681 0.012680041 +0.043772 0.043772 0.043749586 +0.0223408 0.0223408 0.022354469 +0.0266291 0.0266291 0.026646165 +0.121499 0.121499 0.12138782 +0.0253468 0.0253468 0.025397506 +0.0377818 0.0377818 0.0377314 +-0.0403103 -0.0403103 -0.040256646 +-0.0662095 -0.0662095 -0.06622906 +0.0405306 0.0405306 0.040533822 +-0.10958 -0.10958 -0.10960723 +0.00944912 0.00944912 0.009476006 +0.0623464 0.0623464 0.062355973 +0.055801 0.055801 0.055819783 +0.0221952 0.0221952 0.022166394 +0.0134412 0.0134412 0.013442905 +-0.0560573 -0.0560573 -0.05608861 +-0.12621 -0.12621 -0.1261997 +-0.0265205 -0.0265205 -0.026556242 +0.00862359 0.00862359 0.008567935 +-0.0481339 -0.0481339 -0.048155714 +-0.0283012 -0.0283012 -0.028260969 +-0.0196254 -0.0196254 -0.019623313 +0.00205237 0.00205237 0.0020186426 +0.022089 0.022089 0.02204921 +-0.122849 -0.122849 -0.12279869 +0.0789778 0.0789778 0.07898782 +-0.0402984 -0.0402984 -0.040276244 +-0.0335158 -0.0335158 -0.033414874 +0.0521635 0.0521635 0.052156553 +0.031057 0.031057 0.031020744 +0.0584977 0.0584977 0.05845134 +-0.0154202 -0.0154202 -0.015364136 +-0.0725435 -0.0725435 -0.07262463 +0.0117917 0.0117917 0.011833 +0.0998382 0.0998382 0.099867694 +-0.0247647 -0.0247647 -0.024710074 +0.105986 0.105986 0.1059885 +-0.0100717 -0.0100717 -0.010075309 +0.0435314 0.0435314 0.043545034 +-0.0189825 -0.0189825 -0.019025734 +-0.0404794 -0.0404794 -0.04043869 +-0.0423777 -0.0423777 -0.042344213 +-0.0447855 -0.0447855 -0.04482793 +0.0218047 0.0218047 0.021792714 +-0.0463711 -0.0463711 -0.04642492 +-0.064934 -0.064934 -0.06492613 +0.0910422 0.0910422 0.091035426 +-0.0489351 -0.0489351 -0.04895391 +0.0603709 0.0603709 0.06044712 +-0.0850901 -0.0850901 -0.0850987 +0.0913155 0.0913155 0.0913612 +-0.0641446 -0.0641446 -0.06412176 +-0.0127634 -0.0127634 -0.012735101 +-0.116451 -0.116451 -0.1163738 +-0.0531628 -0.0531628 -0.053229835 +0.000197697 0.000197697 0.00018919629 +0.0114345 0.0114345 0.0113792615 +0.0287383 0.0287383 0.028686507 +0.00625807 0.00625807 0.006245597 +-0.0984348 -0.0984348 -0.09841171 +0.0225724 0.0225724 0.022713035 +0.0653502 0.0653502 0.065352894 +0.104313 0.104313 0.10434943 +0.00975994 0.00975994 0.009799947 +0.0900033 0.0900033 0.08998954 +0.0412859 0.0412859 0.041346032 +-0.0696284 -0.0696284 -0.06974265 +-0.0344809 -0.0344809 -0.034353647 +0.0959936 0.0959936 0.09603264 +-0.000224428 -0.000224428 -0.000100798905 +-0.0563236 -0.0563236 -0.05634051 +-0.0542279 -0.0542279 -0.05421701 +0.0593008 0.0593008 0.059310455 +-0.0736143 -0.0736143 -0.07360547 +-0.0701754 -0.0701754 -0.07024004 +0.0746588 0.0746588 0.074643426 +-0.0270905 -0.0270905 -0.027111357 +0.0366143 0.0366143 0.036646057 +0.146677 0.146677 0.14661472 +-0.0151267 -0.0151267 -0.015085728 +-0.0199028 -0.0199028 -0.019842556 +0.00338197 0.00338197 0.003421091 +-0.089612 -0.089612 -0.08958834 +0.0734889 0.0734889 0.073495016 +0.127305 0.127305 0.12729107 +0.0299241 0.0299241 0.029891573 +-0.0370063 -0.0370063 -0.037073124 +-0.0702647 -0.0702647 -0.070319444 +0.0105398 0.0105398 0.0104981335 +-0.064799 -0.064799 -0.06482139 +0.0426535 0.0426535 0.04260677 +-0.0660373 -0.0660373 -0.06611329 +0.0861007 0.0861007 0.08616066 +0.0490722 0.0490722 0.049035557 +0.0809692 0.0809692 0.08097627 +-0.0848755 -0.0848755 -0.084808856 +-0.0619738 -0.0619738 -0.06193638 +0.000801654 0.000801654 0.00082206 +-0.0122198 -0.0122198 -0.012222651 +0.0320425 0.0320425 0.03196071 +0.0112039 0.0112039 0.011302248 +0.00434575 0.00434575 0.0043118126 +-0.117803 -0.117803 -0.1177249 +0.00588467 0.00588467 0.0058990708 +-0.0429954 -0.0429954 -0.0430038 +-0.0424946 -0.0424946 -0.04247967 +0.0588094 0.0588094 0.05875394 +-0.0461824 -0.0461824 -0.046221863 +-0.0575993 -0.0575993 -0.057607405 +0.0395219 0.0395219 0.03949615 +0.0156002 0.0156002 0.015631346 +-0.0364309 -0.0364309 -0.036389023 +0.0287154 0.0287154 0.028725365 +-0.135449 -0.135449 -0.13539602 +0.0692636 0.0692636 0.06925555 +-0.000961048 -0.000961048 -0.0009338064 +0.0301329 0.0301329 0.030127995 +-0.0522957 -0.0522957 -0.052305322 +0.000433841 0.000433841 0.00043728514 +-0.0904321 -0.0904321 -0.09050494 +-0.00580172 -0.00580172 -0.005814375 +0.102671 0.102671 0.1027054 +0.0608885 0.0608885 0.060925353 +-0.0260786 -0.0260786 -0.026053492 +-0.0779211 -0.0779211 -0.07787416 +-0.109682 -0.109682 -0.10967532 +-0.0622208 -0.0622208 -0.06220493 +0.0550355 0.0550355 0.055011943 +-0.0584322 -0.0584322 -0.05846103 +-0.0192433 -0.0192433 -0.019295106 +0.0412798 0.0412798 0.041346874 +0.0193331 0.0193331 0.019346545 +-0.0661704 -0.0661704 -0.066100016 +-0.0897714 -0.0897714 -0.08984625 +-0.0626029 -0.0626029 -0.062639855 +-0.00182871 -0.00182871 -0.0018671232 +0.0196085 0.0196085 0.019565118 +-0.111207 -0.111207 -0.11117698 +0.0524003 0.0524003 0.052290983 +-0.0665566 -0.0665566 -0.06652917 +-0.0203529 -0.0203529 -0.020393062 +-0.0437267 -0.0437267 -0.043630645 +-0.111891 -0.111891 -0.111966655 +-0.125389 -0.125389 -0.1253675 +-0.0695139 -0.0695139 -0.069466256 +-0.177612 -0.177612 -0.17762074 +0.004607 0.004607 0.004641447 +0.00634291 0.00634291 0.0062695476 +-0.0501973 -0.0501973 -0.050201632 +0.125397 0.125397 0.12541963 +-0.0189651 -0.0189651 -0.018976027 +0.100675 0.100675 0.100683175 +0.0744698 0.0744698 0.07447119 +0.00593423 0.00593423 0.005887086 +0.0318608 0.0318608 0.03184636 +0.0596042 0.0596042 0.059564065 +0.0660071 0.0660071 0.066081844 +-0.00200972 -0.00200972 -0.0020398472 +-0.00684264 -0.00684264 -0.0068072313 +-0.0357128 -0.0357128 -0.03577973 +0.0573146 0.0573146 0.05734056 +-0.0714149 -0.0714149 -0.07143784 +-0.0380266 -0.0380266 -0.03798495 +-0.105187 -0.105187 -0.10523367 +-0.0324607 -0.0324607 -0.03243933 +-0.000362298 -0.000362298 -0.00043659465 +-0.119682 -0.119682 -0.11970768 +-0.00248704 -0.00248704 -0.002507893 +0.0558754 0.0558754 0.055879 +-0.0294958 -0.0294958 -0.029487317 +-0.0101406 -0.0101406 -0.010160227 +-0.0137475 -0.0137475 -0.013699713 +-0.0399083 -0.0399083 -0.039874654 +0.0235001 0.0235001 0.023443218 +-0.0549346 -0.0549346 -0.054933906 +0.0546981 0.0546981 0.054676842 +0.0333524 0.0333524 0.033283856 +0.0497436 0.0497436 0.049772978 +0.0746926 0.0746926 0.07462021 +-0.0289261 -0.0289261 -0.028915107 +-0.117721 -0.117721 -0.11769794 +0.0207717 0.0207717 0.020784413 +-0.00553619 -0.00553619 -0.0055749537 +-0.0352906 -0.0352906 -0.0352532 +0.0206203 0.0206203 0.020634646 +0.033346 0.033346 0.033415135 +-0.108761 -0.108761 -0.10871414 +0.0297936 0.0297936 0.029812481 +0.0129912 0.0129912 0.012934469 +0.0127006 0.0127006 0.01270212 +-0.0603469 -0.0603469 -0.06035471 +-0.03248 -0.03248 -0.03249423 +0.0948256 0.0948256 0.09474368 +0.102724 0.102724 0.10269508 +0.0504204 0.0504204 0.050471958 +0.00582048 0.00582048 0.0058233235 +0.0231035 0.0231035 0.023070537 +-0.000321583 -0.000321583 -0.00033782687 +0.0332244 0.0332244 0.03326472 +-0.0738979 -0.0738979 -0.07393195 +0.0404996 0.0404996 0.040451095 +0.0528683 0.0528683 0.05278967 +0.0549738 0.0549738 0.05499771 +0.0557042 0.0557042 0.055770677 +0.0010409 0.0010409 0.0010872481 +0.0102332 0.0102332 0.010238134 +-0.00978292 -0.00978292 -0.009863126 +-0.0942745 -0.0942745 -0.09430438 +-0.102206 -0.102206 -0.10226178 +-0.0247267 -0.0247267 -0.024846265 +0.0139915 0.0139915 0.013942821 +-0.0120953 -0.0120953 -0.012075094 +0.0750863 0.0750863 0.07512529 +-0.0548896 -0.0548896 -0.054884538 +-0.052133 -0.052133 -0.052118357 +-0.0950094 -0.0950094 -0.09499057 +-0.0880348 -0.0880348 -0.08812188 +-0.122136 -0.122136 -0.12210558 +0.127548 0.127548 0.12756854 +0.0111406 0.0111406 0.011160664 +0.0105907 0.0105907 0.010605771 +0.0065762 0.0065762 0.006562799 +-0.0351666 -0.0351666 -0.03517154 +0.0697727 0.0697727 0.06977864 +0.0126355 0.0126355 0.012604938 +-0.073842 -0.073842 -0.07380401 +0.0410429 0.0410429 0.04097954 +0.109397 0.109397 0.10952044 +-0.00316843 -0.00316843 -0.0030700418 +0.0137756 0.0137756 0.013799545 +-0.0307203 -0.0307203 -0.030674944 +0.0134143 0.0134143 0.013381147 +0.0646261 0.0646261 0.0645974 +-0.0574242 -0.0574242 -0.057503752 +-0.0884047 -0.0884047 -0.08841738 +0.000417237 0.000417237 0.00043495235 +-0.0982327 -0.0982327 -0.09812572 +0.00547087 0.00547087 0.005449254 +0.0466283 0.0466283 0.04658278 +0.0752131 0.0752131 0.0751709 +-0.0193961 -0.0193961 -0.019434571 +0.0157548 0.0157548 0.015757926 +0.000492052 0.000492052 0.00046263108 +-0.0519096 -0.0519096 -0.05192722 +-0.00872564 -0.00872564 -0.008644283 +0.0351649 0.0351649 0.035209924 +-0.00915721 -0.00915721 -0.009278846 +0.00970035 0.00970035 0.009668035 +-0.0372029 -0.0372029 -0.037226208 +-0.000873932 -0.000873932 -0.0009631093 +-0.251831 -0.251831 -0.25182322 +-0.0400627 -0.0400627 -0.040044826 +0.0625105 0.0625105 0.06255036 +0.0251951 0.0251951 0.025196616 +-0.00110909 -0.00110909 -0.0012099562 +0.0508744 0.0508744 0.050851233 +0.0839358 0.0839358 0.08394366 +0.0611326 0.0611326 0.061150882 +-0.0306524 -0.0306524 -0.030672742 +-0.0142923 -0.0142923 -0.01429936 +0.0782981 0.0782981 0.07831465 +-0.0340906 -0.0340906 -0.034129728 +-0.0406922 -0.0406922 -0.040687922 +-0.00190903 -0.00190903 -0.0018788439 +-0.0154263 -0.0154263 -0.015352844 +0.0536751 0.0536751 0.053676013 +-0.000994415 -0.000994415 -0.0010392334 +0.0185335 0.0185335 0.018535316 +0.155899 0.155899 0.15584104 +0.0893775 0.0893775 0.089352734 +-0.111177 -0.111177 -0.111148246 +0.0320353 0.0320353 0.03199425 +0.0184548 0.0184548 0.018502066 +0.0450993 0.0450993 0.045133486 +0.0755911 0.0755911 0.075550646 +-0.0626532 -0.0626532 -0.06265763 +0.015126 0.015126 0.015190043 +-0.110263 -0.110263 -0.110224254 +-0.0035839 -0.0035839 -0.0036353788 +-0.115278 -0.115278 -0.11518425 +0.0671803 0.0671803 0.06714461 +0.0852357 0.0852357 0.08526698 +0.0775893 0.0775893 0.07759853 +0.10656 0.10656 0.10654521 +-0.00584206 -0.00584206 -0.005844357 +0.00401975 0.00401975 0.004092442 +-0.0237751 -0.0237751 -0.023775017 +-0.0940081 -0.0940081 -0.09397868 +0.0181776 0.0181776 0.018081728 +-0.0437106 -0.0437106 -0.043747026 +-0.0440958 -0.0440958 -0.044111554 +-0.045427 -0.045427 -0.0454743 +-0.0257425 -0.0257425 -0.025765387 +0.0571874 0.0571874 0.05721998 +-0.0294865 -0.0294865 -0.029432153 +0.00157917 0.00157917 0.0015823772 +-0.0579852 -0.0579852 -0.058039136 +0.107731 0.107731 0.107779086 +-0.143884 -0.143884 -0.14385153 +0.0233874 0.0233874 0.023373505 +-0.0914445 -0.0914445 -0.09145619 +-0.0207198 -0.0207198 -0.020686693 +-0.033589 -0.033589 -0.03362317 +0.00132715 0.00132715 0.0013438321 +0.00128613 0.00128613 0.0012488896 +0.00811778 0.00811778 0.008089237 +0.0193113 0.0193113 0.019284895 +0.0242102 0.0242102 0.024198906 +-0.104932 -0.104932 -0.10489804 +0.121363 0.121363 0.12142037 +0.043542 0.043542 0.043512803 +0.0363498 0.0363498 0.03631507 +-0.00453257 -0.00453257 -0.004622524 +-0.0337384 -0.0337384 -0.033750545 +0.00497956 0.00497956 0.0049228645 +-0.0385239 -0.0385239 -0.03855254 +0.0251496 0.0251496 0.025192613 +-0.101862 -0.101862 -0.1018984 +0.0296493 0.0296493 0.029629875 +0.0487328 0.0487328 0.048736364 +-0.0505561 -0.0505561 -0.050591517 +-0.0775103 -0.0775103 -0.07742422 +-0.0768213 -0.0768213 -0.0768429 +0.0885604 0.0885604 0.08869284 +0.0566288 0.0566288 0.056630634 +-0.0328645 -0.0328645 -0.032726433 +0.062952 0.062952 0.062996194 +0.0830102 0.0830102 0.083017714 +0.0216781 0.0216781 0.021688638 +0.0579276 0.0579276 0.057989005 +-0.17033 -0.17033 -0.17032683 +-0.0568634 -0.0568634 -0.0568728 +-0.0612657 -0.0612657 -0.0612654 +0.0302543 0.0302543 0.030299619 +-0.0770251 -0.0770251 -0.077066906 +0.0724789 0.0724789 0.07246711 +-0.0588417 -0.0588417 -0.05871445 +0.0484509 0.0484509 0.048475273 +0.109628 0.109628 0.10968635 +0.0160406 0.0160406 0.016084366 +-0.000615701 -0.000615701 -0.0006413227 +-0.123403 -0.123403 -0.123460315 +0.0423709 0.0423709 0.042399447 +0.112484 0.112484 0.11247445 +-0.130442 -0.130442 -0.1304992 +-0.040637 -0.040637 -0.040724695 +0.0195937 0.0195937 0.01960201 +-0.0541778 -0.0541778 -0.05413411 +-0.0486646 -0.0486646 -0.0486591 +-0.0326898 -0.0326898 -0.032708887 +0.0679057 0.0679057 0.06785193 +-0.118113 -0.118113 -0.11799962 +-0.0518252 -0.0518252 -0.051886756 +0.0691046 0.0691046 0.069105625 +-0.0670298 -0.0670298 -0.06704078 +0.0687358 0.0687358 0.06871386 +0.12726 0.12726 0.12733394 +0.0195975 0.0195975 0.019531311 +0.0763887 0.0763887 0.076399095 +-0.00351368 -0.00351368 -0.003492542 +0.00794639 0.00794639 0.007940965 +-0.00284427 -0.00284427 -0.0028040374 +0.0474338 0.0474338 0.047419004 +-0.021102 -0.021102 -0.021105751 +-0.0328862 -0.0328862 -0.0328358 +0.0992445 0.0992445 0.09923928 +0.0399988 0.0399988 0.03993963 +-0.100021 -0.100021 -0.100040846 +0.0158099 0.0158099 0.01584396 +-0.0380202 -0.0380202 -0.037928972 +0.0174893 0.0174893 0.017509164 +-0.0917731 -0.0917731 -0.09182301 +0.0298031 0.0298031 0.02986073 +-0.00751761 -0.00751761 -0.0074917404 +-0.0622 -0.0622 -0.06220415 +-0.0997059 -0.0997059 -0.09966756 +-0.030176 -0.030176 -0.030203754 +0.0353776 0.0353776 0.035317823 +-0.0753062 -0.0753062 -0.07523302 +0.0108322 0.0108322 0.010830806 +-0.0213755 -0.0213755 -0.021357298 +-0.0172107 -0.0172107 -0.017231515 +0.0208727 0.0208727 0.020891597 +-0.0536599 -0.0536599 -0.05376668 +0.0249697 0.0249697 0.025061946 +0.0304377 0.0304377 0.030453399 +-0.105118 -0.105118 -0.10516515 +0.0646966 0.0646966 0.06463083 +-0.0959603 -0.0959603 -0.095905274 +0.093702 0.093702 0.09379875 +-0.0629446 -0.0629446 -0.06300265 +-0.0262255 -0.0262255 -0.026215108 +-0.00617183 -0.00617183 -0.006121784 +0.0415869 0.0415869 0.041678324 +-0.036036 -0.036036 -0.036014877 +-0.0223882 -0.0223882 -0.022330135 +0.0326023 0.0326023 0.032589648 +-0.0867628 -0.0867628 -0.086768426 +-0.0954368 -0.0954368 -0.09546708 +0.0272875 0.0272875 0.02721846 +0.0128662 0.0128662 0.012820251 +-0.0305069 -0.0305069 -0.030448057 +-0.092019 -0.092019 -0.09198614 +-0.0149377 -0.0149377 -0.014934914 +-0.0625916 -0.0625916 -0.062567 +-0.00305357 -0.00305357 -0.0030371884 +0.0722146 0.0722146 0.07216981 +-0.00873512 -0.00873512 -0.008695676 +-0.0531736 -0.0531736 -0.053157292 +-0.0484429 -0.0484429 -0.048401304 +-0.0855271 -0.0855271 -0.085597135 +0.0148357 0.0148357 0.014825563 +-0.0456348 -0.0456348 -0.045671962 +0.0114646 0.0114646 0.011505541 +-0.0586984 -0.0586984 -0.058801834 +-0.0397302 -0.0397302 -0.039727885 +-0.0250203 -0.0250203 -0.025032908 +-0.131919 -0.131919 -0.13191967 +-0.0736948 -0.0736948 -0.073677205 +-0.110194 -0.110194 -0.11021208 +0.0211562 0.0211562 0.02109224 +0.0727081 0.0727081 0.072723456 +0.0369183 0.0369183 0.03698812 +0.0723357 0.0723357 0.072268605 +-0.017431 -0.017431 -0.017460857 +0.00749892 0.00749892 0.0074753775 +0.050456 0.050456 0.050454907 +0.0258543 0.0258543 0.025820952 +-0.112303 -0.112303 -0.11229571 +0.0520155 0.0520155 0.0520164 +0.0358491 0.0358491 0.035807427 +0.0349427 0.0349427 0.03488902 +0.0795006 0.0795006 0.07937991 +-0.0104609 -0.0104609 -0.010502077 +-0.0359159 -0.0359159 -0.03592191 +-0.00510004 -0.00510004 -0.005084798 +-0.0498805 -0.0498805 -0.049922876 +0.0578254 0.0578254 0.057800807 +-0.0257889 -0.0257889 -0.025783865 +-0.14409 -0.14409 -0.14406858 +-0.0148936 -0.0148936 -0.0148869185 +-0.171766 -0.171766 -0.17175888 +0.0489431 0.0489431 0.048936218 +0.019544 0.019544 0.019574234 +-0.0401692 -0.0401692 -0.040153172 +0.0123856 0.0123856 0.012435238 +-0.0792634 -0.0792634 -0.07917383 +0.0296971 0.0296971 0.029664624 +0.0345211 0.0345211 0.03458682 +-0.0900034 -0.0900034 -0.0899951 +0.0162356 0.0162356 0.016267188 +-0.0402187 -0.0402187 -0.040243924 +-0.0700408 -0.0700408 -0.070027925 +0.0223818 0.0223818 0.022471799 +0.00530966 0.00530966 0.005328087 +0.0751505 0.0751505 0.0751541 +0.00119458 0.00119458 0.0011800046 +-0.0816129 -0.0816129 -0.08160132 +-0.095314 -0.095314 -0.09525526 +-0.0361229 -0.0361229 -0.03618493 +0.0538326 0.0538326 0.05382881 +0.0527518 0.0527518 0.052761424 +-0.0670344 -0.0670344 -0.06702412 +0.123899 0.123899 0.12388165 +-0.0414731 -0.0414731 -0.0414573 +0.0463389 0.0463389 0.046347763 +0.0481318 0.0481318 0.04817151 +0.0472485 0.0472485 0.047253225 +-0.0412876 -0.0412876 -0.04126516 +0.0242349 0.0242349 0.024232922 +0.0296657 0.0296657 0.029632922 +-0.0213154 -0.0213154 -0.0212901 +0.0303298 0.0303298 0.030339861 +0.0570969 0.0570969 0.05706974 +-0.0609129 -0.0609129 -0.060931202 +0.0413249 0.0413249 0.041304007 +0.0554785 0.0554785 0.05547666 +-0.13248 -0.13248 -0.13240714 +0.0513741 0.0513741 0.051388945 +-0.0488045 -0.0488045 -0.04873839 +0.166785 0.166785 0.16676743 +0.029506 0.029506 0.029495351 +0.0596813 0.0596813 0.059752524 +-0.0338202 -0.0338202 -0.03383169 +-0.0889505 -0.0889505 -0.08900255 +-0.0881893 -0.0881893 -0.088172995 +0.234853 0.234853 0.23478763 +-0.0535284 -0.0535284 -0.053499922 +0.024038 0.024038 0.023992369 +0.0235989 0.0235989 0.02367001 +-0.0685012 -0.0685012 -0.06848342 +-0.0727718 -0.0727718 -0.07274055 +0.0232433 0.0232433 0.023288675 +-2.60207e-05 -2.60207e-05 7.2411267e-06 +0.084121 0.084121 0.08417554 +-0.0505206 -0.0505206 -0.05048407 +0.114788 0.114788 0.114795424 +-0.0408904 -0.0408904 -0.040817156 +0.0101735 0.0101735 0.010192279 +0.021195 0.021195 0.021178685 +-0.0492968 -0.0492968 -0.049343843 +-0.0517093 -0.0517093 -0.051617213 +-0.034694 -0.034694 -0.034654588 +0.0301953 0.0301953 0.030290969 +-0.0856948 -0.0856948 -0.08575306 +-0.132677 -0.132677 -0.13265069 +-0.0860963 -0.0860963 -0.086116895 +-0.0217475 -0.0217475 -0.02181348 +0.0292601 0.0292601 0.02923618 +0.118756 0.118756 0.11888943 +-0.0375922 -0.0375922 -0.037545394 +0.05592 0.05592 0.055929393 +0.0793046 0.0793046 0.079322435 +-0.0574258 -0.0574258 -0.057429045 +-0.0316797 -0.0316797 -0.03166637 +-0.123175 -0.123175 -0.12318407 +-0.049586 -0.049586 -0.049498845 +0.0328871 0.0328871 0.032866154 +0.0589391 0.0589391 0.058885932 +-0.0322245 -0.0322245 -0.032270286 +-0.0328059 -0.0328059 -0.032817 +0.0248801 0.0248801 0.024820583 +0.140689 0.140689 0.14063202 +0.0646859 0.0646859 0.06465066 +0.0244885 0.0244885 0.024484742 +0.0148219 0.0148219 0.014839581 +0.0724338 0.0724338 0.07250619 +-0.0644078 -0.0644078 -0.06435682 +0.069158 0.069158 0.069156855 +-0.0199153 -0.0199153 -0.019983448 +-0.0398382 -0.0398382 -0.03984849 +-0.0100592 -0.0100592 -0.010077896 +-0.019101 -0.019101 -0.019116063 +-0.00372825 -0.00372825 -0.0036967034 +0.0539226 0.0539226 0.05396298 +-0.030465 -0.030465 -0.03045959 +-0.0615474 -0.0615474 -0.061530016 +0.0218696 0.0218696 0.021830918 +-0.0520429 -0.0520429 -0.052097768 +-0.0496496 -0.0496496 -0.04968536 +0.0461637 0.0461637 0.04613579 +0.0695779 0.0695779 0.06964411 +-0.0446577 -0.0446577 -0.044683043 +0.0867272 0.0867272 0.08670162 +0.0969173 0.0969173 0.09688279 +0.031874 0.031874 0.03185224 +0.0615275 0.0615275 0.06148705 +0.00261091 0.00261091 0.002603725 +-0.124846 -0.124846 -0.124950774 +0.0719755 0.0719755 0.071942575 +0.0172262 0.0172262 0.017201489 +0.0257773 0.0257773 0.025768617 +0.0186176 0.0186176 0.018673 +0.10667 0.10667 0.10659512 +0.0358038 0.0358038 0.03585492 +-0.0473701 -0.0473701 -0.04737718 +-0.0720138 -0.0720138 -0.07195809 +-0.149694 -0.149694 -0.14968392 +-0.0185727 -0.0185727 -0.018574683 +-0.0021333 -0.0021333 -0.002112729 +0.116844 0.116844 0.1168205 +-0.0221036 -0.0221036 -0.022188062 +-0.105606 -0.105606 -0.10559037 +-0.0495932 -0.0495932 -0.04962039 +-0.0154283 -0.0154283 -0.0154039385 +0.0216972 0.0216972 0.021682883 +-0.023859 -0.023859 -0.02393035 +0.0727233 0.0727233 0.072656855 +0.00235702 0.00235702 0.002192869 +-0.0249437 -0.0249437 -0.024897685 +-0.0441815 -0.0441815 -0.044181053 +-0.0785604 -0.0785604 -0.07854881 +-0.0214143 -0.0214143 -0.021390798 +0.0261316 0.0261316 0.026130779 +0.05559 0.05559 0.055579107 +-0.0894323 -0.0894323 -0.08939903 +0.00187232 0.00187232 0.0018359482 +-0.0144013 -0.0144013 -0.014440874 +0.0220571 0.0220571 0.022168064 +0.0042063 0.0042063 0.004316924 +0.0377518 0.0377518 0.03781719 +0.00226757 0.00226757 0.0022503464 +-0.0167648 -0.0167648 -0.016809378 +0.02453 0.02453 0.024582008 +0.0376075 0.0376075 0.03761014 +0.0355444 0.0355444 0.035597358 +-0.0431163 -0.0431163 -0.043137595 +-0.00292835 -0.00292835 -0.002900396 +-0.0119434 -0.0119434 -0.011987337 +-0.0421732 -0.0421732 -0.042128276 +0.0607477 0.0607477 0.060740758 +0.0739131 0.0739131 0.073857404 +0.0211148 0.0211148 0.021112287 +-0.0285813 -0.0285813 -0.028608978 +-0.0306359 -0.0306359 -0.030586356 +0.0456848 0.0456848 0.04571463 +0.0457272 0.0457272 0.045704674 +-0.0281938 -0.0281938 -0.02824827 +0.0479818 0.0479818 0.04796238 +0.0525762 0.0525762 0.05255879 +-0.0558723 -0.0558723 -0.055851463 +-0.00263422 -0.00263422 -0.0026420366 +0.0389116 0.0389116 0.03896648 +-0.0061085 -0.0061085 -0.006091655 +-0.0276716 -0.0276716 -0.027686967 +-0.00212171 -0.00212171 -0.0020859574 +0.0988596 0.0988596 0.098780885 +0.175778 0.175778 0.17580117 +-0.0442928 -0.0442928 -0.04426858 +0.0553819 0.0553819 0.055373974 +0.0148617 0.0148617 0.014862953 +-0.00714365 -0.00714365 -0.0071105515 +0.0504897 0.0504897 0.050451484 +0.0576845 0.0576845 0.05770395 +-0.000604871 -0.000604871 -0.00061396376 +-0.0401287 -0.0401287 -0.04008099 +-0.0390048 -0.0390048 -0.03899735 +-0.00119989 -0.00119989 -0.0012120683 +-0.0251285 -0.0251285 -0.025094792 +-0.0211363 -0.0211363 -0.021150805 +0.0391689 0.0391689 0.03921568 +-0.0839261 -0.0839261 -0.08379716 +0.0620425 0.0620425 0.06198009 +0.0326177 0.0326177 0.032555133 +-0.0306444 -0.0306444 -0.030611413 +-0.0790892 -0.0790892 -0.079093225 +-0.107716 -0.107716 -0.10779965 +0.0878749 0.0878749 0.08788612 +0.12136 0.12136 0.12138388 +-0.00174977 -0.00174977 -0.0018372085 +0.0726454 0.0726454 0.07259194 +-0.0845691 -0.0845691 -0.08455591 +0.116929 0.116929 0.11696619 +-0.0381197 -0.0381197 -0.038145397 +-0.0468123 -0.0468123 -0.046744402 +0.0240735 0.0240735 0.024024125 +-0.022603 -0.022603 -0.02252546 +0.0534874 0.0534874 0.053432614 +-0.0828426 -0.0828426 -0.08284001 +0.003366 0.003366 0.003406904 +0.00778236 0.00778236 0.007851078 +-0.0643031 -0.0643031 -0.064303875 +0.0514468 0.0514468 0.05138501 +0.0716998 0.0716998 0.07166252 +-0.0257209 -0.0257209 -0.025774486 +0.0243096 0.0243096 0.024378609 +-0.0225184 -0.0225184 -0.022525603 +0.031409 0.031409 0.03141225 +0.0401869 0.0401869 0.04018131 +-0.1195 -0.1195 -0.11951884 +0.0165168 0.0165168 0.016554426 +-0.0240414 -0.0240414 -0.023956466 +-0.0373725 -0.0373725 -0.037395336 +-0.0407697 -0.0407697 -0.040819615 +0.0332421 0.0332421 0.033291906 +-0.00754158 -0.00754158 -0.0075704255 +0.0199188 0.0199188 0.01999654 +0.0663597 0.0663597 0.06632339 +0.0688589 0.0688589 0.06884411 +0.0133673 0.0133673 0.013387215 +0.0971044 0.0971044 0.097119115 +0.102803 0.102803 0.102777764 +0.00938547 0.00938547 0.009364086 +0.160236 0.160236 0.16025816 +-0.0305169 -0.0305169 -0.03054933 +0.0747672 0.0747672 0.074723616 +-0.137858 -0.137858 -0.13776623 +-0.151276 -0.151276 -0.15133135 +0.0633957 0.0633957 0.06333039 +-0.0224037 -0.0224037 -0.022501182 +0.0392073 0.0392073 0.039172962 +0.0309508 0.0309508 0.030915659 +0.0174343 0.0174343 0.017357783 +-0.0101037 -0.0101037 -0.010083081 +0.0264439 0.0264439 0.026457759 +-0.0576956 -0.0576956 -0.05771321 +-0.0187585 -0.0187585 -0.018766977 +0.00205381 0.00205381 0.0021756454 +-0.0875209 -0.0875209 -0.08755011 +-0.0415406 -0.0415406 -0.041581176 +-0.0277195 -0.0277195 -0.027704056 +-0.0183453 -0.0183453 -0.018364776 +-0.0107621 -0.0107621 -0.010832958 +-0.0120731 -0.0120731 -0.012079538 +-0.0337214 -0.0337214 -0.03375252 +0.065902 0.065902 0.06590601 +-0.060859 -0.060859 -0.06077236 +0.042336 0.042336 0.042232875 +0.139527 0.139527 0.13954715 +-0.0509155 -0.0509155 -0.05094152 +0.0983039 0.0983039 0.09832716 +0.0234542 0.0234542 0.02343624 +-0.0737223 -0.0737223 -0.07372452 +0.0103777 0.0103777 0.010351855 +-0.0631613 -0.0631613 -0.063185535 +-0.0367747 -0.0367747 -0.036795113 +-0.0449546 -0.0449546 -0.045001723 +0.0223596 0.0223596 0.022341395 +-0.0701202 -0.0701202 -0.070166945 +0.065699 0.065699 0.06570724 +0.0406277 0.0406277 0.040615655 +0.000708958 0.000708958 0.0007275257 +0.0213618 0.0213618 0.02131688 +0.0202368 0.0202368 0.02023607 +0.0605811 0.0605811 0.060570043 +-0.0302957 -0.0302957 -0.030321699 +-0.0282395 -0.0282395 -0.028242948 +0.00540788 0.00540788 0.0053549125 +0.0650348 0.0650348 0.06498315 +0.0448111 0.0448111 0.044774108 +0.0838991 0.0838991 0.083921894 +0.0442437 0.0442437 0.044239137 +-0.0348422 -0.0348422 -0.03492027 +0.00188726 0.00188726 0.0019028411 +0.0879206 0.0879206 0.08783293 +0.0882294 0.0882294 0.08825567 +0.0152177 0.0152177 0.015145334 +0.0773133 0.0773133 0.07734549 +0.0158863 0.0158863 0.015845869 +0.109321 0.109321 0.109338135 +0.00773107 0.00773107 0.0077058747 +0.0115965 0.0115965 0.011528763 +0.0170535 0.0170535 0.017016213 +-0.0666294 -0.0666294 -0.066641666 +-0.00112783 -0.00112783 -0.0011166632 +-0.00355585 -0.00355585 -0.0034963605 +0.0518209 0.0518209 0.051885065 +0.0322796 0.0322796 0.032280225 +-0.0471169 -0.0471169 -0.04713362 +-0.013209 -0.013209 -0.0132643925 +0.0756496 0.0756496 0.0756714 +-0.0276636 -0.0276636 -0.027677482 +-0.086318 -0.086318 -0.08638061 +-0.0649012 -0.0649012 -0.064899705 +-0.0540162 -0.0540162 -0.054084264 +0.025303 0.025303 0.025289338 +-0.0997197 -0.0997197 -0.09969645 +0.0455967 0.0455967 0.045643996 +0.00484408 0.00484408 0.004908245 +-0.125834 -0.125834 -0.12582307 +0.0393133 0.0393133 0.039301254 +-0.0620661 -0.0620661 -0.062025998 +-0.0901512 -0.0901512 -0.09004348 +0.0485128 0.0485128 0.048540827 +-0.0020091 -0.0020091 -0.001980303 +-0.0435046 -0.0435046 -0.04353811 +0.013977 0.013977 0.013941965 +-0.0814448 -0.0814448 -0.08144607 +-0.0348025 -0.0348025 -0.034851782 +-0.0160682 -0.0160682 -0.0160532 +-0.0519595 -0.0519595 -0.05191193 +0.0168266 0.0168266 0.016854612 +0.00349327 0.00349327 0.0034794677 +-0.0199939 -0.0199939 -0.020003606 +0.0643739 0.0643739 0.06437569 +-0.00660999 -0.00660999 -0.006582463 +-0.0343742 -0.0343742 -0.034369513 +0.0659076 0.0659076 0.06590523 +-0.0754331 -0.0754331 -0.07535247 +0.143451 0.143451 0.14341389 +-0.101802 -0.101802 -0.10180697 diff --git a/dmff/admp/examples/water_pol_1024/run_admp.py b/dmff/admp/examples/water_pol_1024/run_admp.py new file mode 100755 index 000000000..058607803 --- /dev/null +++ b/dmff/admp/examples/water_pol_1024/run_admp.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +import sys +import numpy as np +import jax.numpy as jnp +from jax import grad, value_and_grad +from jax_md import partition, space +import admp.settings +from admp.multipole import convert_cart2harm +from admp.pme import ADMPPmeForce +from admp.parser import * + + +import linecache +def get_line_context(file_path, line_number): + return linecache.getline(file_path,line_number).strip() + +# below is the validation code +if __name__ == '__main__': + pdb = str('water1024.pdb') + xml = str('mpidwater.xml') + ref_dip = str('dipole_1024') + pdbinfo = read_pdb(pdb) + serials = pdbinfo['serials'] + names = pdbinfo['names'] + resNames = pdbinfo['resNames'] + resSeqs = pdbinfo['resSeqs'] + positions = pdbinfo['positions'] + box = pdbinfo['box'] # a, b, c, α, β, γ + charges = pdbinfo['charges'] + positions = jnp.asarray(positions) + lx, ly, lz, _, _, _ = box + box = jnp.eye(3)*jnp.array([lx, ly, lz]) + + mScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + pScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + dScales = jnp.array([0.0, 0.0, 0.0, 1.0, 1.0]) + + rc = 4 # in Angstrom + ethresh = 1e-4 + + n_atoms = len(serials) + + atomTemplate, residueTemplate = read_xml(xml) + atomDicts, residueDicts = init_residues(serials, names, resNames, resSeqs, positions, charges, atomTemplate, residueTemplate) + + Q = np.vstack( + [(atom.c0, atom.dX*10, atom.dY*10, atom.dZ*10, atom.qXX*300, atom.qYY*300, atom.qZZ*300, atom.qXY*300, atom.qXZ*300, atom.qYZ*300) for atom in atomDicts.values()] + ) + Q = jnp.array(Q) + Q_local = convert_cart2harm(Q, 2) + axis_type = np.array( + [atom.axisType for atom in atomDicts.values()] + ) + axis_indices = np.vstack( + [atom.axis_indices for atom in atomDicts.values()] + ) + covalent_map = assemble_covalent(residueDicts, n_atoms) + + ## ind paras + pol = np.vstack( + [(atom.polarizabilityXX, atom.polarizabilityYY, atom.polarizabilityZZ) for atom in atomDicts.values()] + ) + pol = jnp.array(pol.astype(np.float32)) + pol = 1000*jnp.mean(pol,axis=1) + + tholes = np.vstack( + [atom.thole for atom in atomDicts.values()] + ) + tholes = jnp.array(tholes.astype(np.float32)) + tholes = jnp.mean(tholes,axis=1) + defaultTholeWidth=8 + + Uind_global = jnp.zeros([n_atoms,3]) + for i in range(n_atoms): + a = get_line_context(ref_dip,i+1) + b = a.split() + t = np.array([10*float(b[0]),10*float(b[1]),10*float(b[2])]) + Uind_global = Uind_global.at[i].set(t) + + + + lmax = 2 + pmax = 10 + + # construct the C list + c_list = np.zeros((3, n_atoms)) + a_list = np.zeros(n_atoms) + q_list = np.zeros(n_atoms) + b_list = np.zeros(n_atoms) + nmol=int(n_atoms/3) + for i in range(nmol): + a = i*3 + b = i*3+1 + c = i*3+2 + # dispersion coeff + c_list[0][a]=37.19677405 + c_list[0][b]=7.6111103 + c_list[0][c]=7.6111103 + c_list[1][a]=85.26810658 + c_list[1][b]=11.90220148 + c_list[1][c]=11.90220148 + c_list[2][a]=134.44874488 + c_list[2][b]=15.05074749 + c_list[2][c]=15.05074749 + # q + q_list[a] = -0.741706 + q_list[b] = 0.370853 + q_list[c] = 0.370853 + # b, Bohr^-1 + b_list[a] = 2.00095977 + b_list[b] = 1.999519942 + b_list[c] = 1.999519942 + # a, Hartree + a_list[a] = 458.3777 + a_list[b] = 0.0317 + a_list[c] = 0.0317 + + # Finish data preparation + # ------------------------------------------------------------------------------------- + # parameters should be ready: + # geometric variables: positions, box + # atomic parameters: Q_local, c_list + # topological parameters: covalent_map, mScales, pScales, dScales + # general force field setting parameters: rc, ethresh, lmax, pmax + + + # get neighbor list using jax_md + displacement_fn, shift_fn = space.periodic_general(box, fractional_coordinates=False) + neighbor_list_fn = partition.neighbor_list(displacement_fn, box, rc, 0, format=partition.OrderedSparse) + nbr = neighbor_list_fn.allocate(positions) + pairs = nbr.idx.T + + # electrostatic + pme_force = ADMPPmeForce(box, axis_type, axis_indices, covalent_map, rc, ethresh, lmax, lpol=True) + pme_force.update_env('kappa', 0.657065221219616) + E, F = pme_force.get_forces(positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales) + print('# Electrostatic Energy (kJ/mol)') + # E = pme_force.get_energy(positions, box, pairs, Q_local, mScales, pScales, dScales) + E, F = pme_force.get_forces(positions, box, pairs, Q_local, pol, tholes, mScales, pScales, dScales, U_init=pme_force.U_ind) + print(E) + U_ind = pme_force.U_ind + # compare U_ind with reference + # for i in range(1024): + # for j in range(3): + # print(Uind_global[i*3, j], Uind_global[i*3, j], U_ind[i*3, j]) + diff --git a/dmff/admp/tests/__init__.py b/dmff/admp/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/dmff/admp/tests/conftest.py b/dmff/admp/tests/conftest.py new file mode 100644 index 000000000..e69de29bb diff --git a/dmff/admp/tests/test_multipole.py b/dmff/admp/tests/test_multipole.py new file mode 100644 index 000000000..7e1064ac7 --- /dev/null +++ b/dmff/admp/tests/test_multipole.py @@ -0,0 +1,189 @@ +import jax.numpy as jnp +import numpy as np +import numpy.testing as npt +import pytest +from admp.multipole import convert_cart2harm +from admp.multipole import rot_global2local, rot_local2global + +class TestMultipoleGeometry: + @pytest.mark.parametrize( + "theta, expected", + [ + ( + jnp.array( + [ + [ + -1.0614, + 0.0, + 0.0, + -0.23671684, + 0.0452889, + 0.026121, + -0.0714102, + 0.0, + 0.0, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [ + -1.0614, + 0.0, + 0.0, + -0.23671684, + 0.0452889, + 0.026121, + -0.0714102, + 0.0, + 0.0, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + jnp.array( + [ + [ + -1.0614, + -0.23671684, + 0.0, + 0.0, + -0.0714102, + 0.0, + 0.0, + 0.01106659, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [ + -1.0614, + -0.23671684, + 0.0, + 0.0, + -0.0714102, + 0.0, + 0.0, + 0.01106659, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + ) + ], + ) + def test_convert_cart2harm(self, theta, expected): + + Q = convert_cart2harm(theta, 2) + npt.assert_allclose(Q, expected, rtol=1e-6) + + @pytest.mark.parametrize( + "Q_global, Q_local, local_frames", + [ + ( + jnp.array( + [ + [ + -1.0614, + -0.22052474, + -0.06001501, + 0.06165953, + -0.05764905, + -0.03114612, + 0.02651503, + 0.01010778, + 0.01109856, + ], + [0.5307, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [ + -1.0614, + -0.04308845, + 0.22035345, + 0.07498398, + 0.02345808, + 0.01798866, + 0.01008533, + -0.05205911, + -0.03919373, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + jnp.array( + [ + [ + -1.0614, + -0.23671684, + 0.0, + 0.0, + -0.0714102, + 0.0, + 0.0, + 0.01106659, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [ + -1.0614, + -0.23671684, + 0.0, + 0.0, + -0.0714102, + 0.0, + 0.0, + 0.01106659, + 0.0, + ], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.5307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + jnp.array( + [ + [ + [-0.96165454, -0.17201543, 0.21361469], + [0.10460715, -0.95003253, -0.29410106], + [0.2535308, -0.26047802, 0.9315972], + ], + [ + [-0.38687626, -0.3113036, 0.8679958], + [-0.10460713, 0.9500325, 0.2941011], + [-0.91617906, 0.02298216, -0.4001096], + ], + [ + [0.7882788, -0.10109846, 0.606956], + [0.10460714, -0.95003265, -0.29410112], + [0.60636103, 0.29532564, -0.7383151], + ], + [ + [0.2869897, -0.94232714, -0.17221032], + [0.22607784, -0.10806667, 0.96809626], + [-0.93087363, -0.3167666, 0.18202528], + ], + [ + [-0.5616504, -0.8264594, 0.03890521], + [-0.22607785, 0.10806668, -0.9680963], + [0.79588807, -0.5525272, -0.24753988], + ], + [ + [-0.9122986, 0.32489008, 0.24931434], + [0.22607782, -0.10806666, 0.9680962], + [0.3414673, 0.9395574, 0.02513866], + ], + ] + ), + ) + ], + ) + def test_rot_global_local(self, Q_global, Q_local, local_frames): + + ans_Q = rot_local2global(Q_local, local_frames, 2) + npt.assert_allclose(ans_Q, Q_global, rtol=1e-6, atol=1e-6) + ans_Q = rot_global2local(Q_global, local_frames, 2) + npt.assert_allclose(ans_Q, Q_local, rtol=1e-6, atol=1e-6) diff --git a/dmff/admp/tests/test_sptial.py b/dmff/admp/tests/test_sptial.py new file mode 100644 index 000000000..e13c8d863 --- /dev/null +++ b/dmff/admp/tests/test_sptial.py @@ -0,0 +1,143 @@ +import jax.numpy as jnp +import numpy as np +import numpy.testing as npt +import pytest +from admp.spatial import (build_quasi_internal, + generate_construct_local_frames, pbc_shift, + v_pbc_shift) + + +class TestSpatial: + @pytest.mark.parametrize( + "r1, r2, dr, norm_dr, expected", + [ + ( + jnp.array([[0, 0, 0]]), + jnp.array([[1, 0, 0]]), + jnp.array([[1, 0, 0]]), + jnp.array([1.0,]), + jnp.array([[[0.0, 1.0, 0.0], [0, 0, 1], [1, 0, 0]]]), + ), + ( + jnp.array([[0, 0, 0]]), + jnp.array([[1, 1, 0]]), + jnp.array([[1, 1, 0]]), + jnp.array([1.414213,]), + jnp.array( + [ + [ + [0.70710534, -0.70710814, 0.0], + [0.0, 0.0, -1.0000004], + [0.70710707, 0.70710707, 0.0], + ] + ] + ), + ), + ], + ) + def test_build_quasi_internal(self, r1, r2, dr, norm_dr, expected): + + local_frames = build_quasi_internal(r1, r2, dr, norm_dr) + npt.assert_allclose(local_frames, expected) + + @pytest.mark.parametrize( + "drvecs, box, box_inv, expected", + [ + ( + jnp.array([[0, 0, 0]]), + jnp.array([[4, 0, 0], [0, 4, 0], [0, 0, 4]]), + jnp.array([[0.25, 0, 0], [0, 0.25, 0], [0, 0, 0.25]]), + jnp.array([[0, 0, 0]]), + ), + ( + jnp.array([[3, 0, 0], [0, 3, 0], [0, 0, 3]]), + jnp.array([[4, 0, 0], [0, 4, 0], [0, 0, 4]]), + jnp.array([[0.25, 0, 0], [0, 0.25, 0], [0, 0, 0.25]]), + jnp.array([[-1, 0, 0], [0, -1, 0], [0, 0, -1]]), + ), + ( + jnp.array([[2, 0, 0], [0, 2, 0], [0, 0, 2]]), + jnp.array([[4, 0, 0], [0, 4, 0], [0, 0, 4]]), + jnp.array([[0.25, 0, 0], [0, 0.25, 0], [0, 0, 0.25]]), + jnp.array([[-2, 0, 0], [0, -2, 0], [0, 0, -2]]), + ), + ], + ) + def test_pbc_shift(self, drvecs, box, box_inv, expected): + npt.assert_allclose(pbc_shift(drvecs, box, box_inv), expected) + npt.assert_allclose(v_pbc_shift(drvecs, box, box_inv), expected) + + @pytest.mark.parametrize( + "axis_types, axis_indices, positions, box, expected_local_frames", + [ + ( + np.array([1, 0, 0, 1, 0, 0]), + np.array( + [ + [1, 2, -1], + [0, 2, -1], + [0, 1, -1], + [4, 5, -1], + [3, 5, -1], + [3, 4, -1], + ] + ), + jnp.array( + [ + [1.562, 24.46, 21.149], + [2.439, 24.438, 21.532], + [0.983, 24.178, 21.854], + [4.788, 24.609, 0.994], + [4.026, 25.138, 1.231], + [4.462, 23.712, 0.97], + ] + ), + jnp.array([[31.289, 0.0, 0.0], [0.0, 31.289, 0.0], [0.0, 0.0, 31.289]]), + np.array( + [ + [ + [-0.96165454, -0.17201543, 0.21361469], + [0.10460715, -0.95003253, -0.29410106], + [0.2535308, -0.26047802, 0.9315972], + ], + [ + [-0.38687626, -0.3113036, 0.8679958], + [-0.10460713, 0.9500325, 0.2941011], + [-0.91617906, 0.02298216, -0.4001096], + ], + [ + [0.7882788, -0.10109846, 0.606956], + [0.10460714, -0.95003265, -0.29410112], + [0.60636103, 0.29532564, -0.7383151], + ], + [ + [0.2869897, -0.94232714, -0.17221032], + [0.22607784, -0.10806667, 0.96809626], + [-0.93087363, -0.3167666, 0.18202528], + ], + [ + [-0.5616504, -0.8264594, 0.03890521], + [-0.22607785, 0.10806668, -0.9680963], + [0.79588807, -0.5525272, -0.24753988], + ], + [ + [-0.9122986, 0.32489008, 0.24931434], + [0.22607782, -0.10806666, 0.9680962], + [0.3414673, 0.9395574, 0.02513866], + ], + ] + ), + ) + ], + ) + def test_generate_construct_local_frames( + self, axis_types, axis_indices, positions, box, expected_local_frames + ): + construct_local_frame_fn = generate_construct_local_frames( + axis_types, axis_indices + ) + assert construct_local_frame_fn + npt.assert_allclose( + construct_local_frame_fn(positions, box), expected_local_frames, rtol=1e-6 + ) +