diff --git a/.gitignore b/.gitignore index 8497b234..a54a63cd 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,11 @@ /include/ tags build*/ -/installed/ +/install*/ /cmake-build-debug/ -compilation.log - +comp*.log +/lib +.DS_Store +__pycache__/ +*.pyc +*.pyo \ No newline at end of file diff --git a/cpp.sh b/cpp.sh new file mode 100755 index 00000000..de7d6030 --- /dev/null +++ b/cpp.sh @@ -0,0 +1,9 @@ +rm -rf build +rm -rf installed + +cmake -S . -B build \ + -D CMAKE_INSTALL_PREFIX=$LIBEFP_DIR/installed \ + -D BUILD_SHARED_LIBS=ON \ + -D LIBEFP_ENABLE_OPENMP=ON + +cmake --build build --target install diff --git a/efpmd/src/main.c b/efpmd/src/main.c index feb4266a..5a1ccd4f 100644 --- a/efpmd/src/main.c +++ b/efpmd/src/main.c @@ -445,7 +445,7 @@ static void state_init(struct state *state, const struct cfg *cfg, const struct state->energy = 0; state->grad = xcalloc(sys->n_frags * 6 + sys->n_charges * 3, sizeof(double)); state->ff = NULL; - state->torch = NULL; + state->torch = NULL; state->torch_grad = NULL; if (cfg_get_bool(cfg, "enable_ff")) { @@ -472,6 +472,7 @@ static void state_init(struct state *state, const struct cfg *cfg, const struct // initiate torch state #ifdef TORCH_SWITCH if (cfg_get_bool(cfg, "enable_torch")) { + check_fail(efp_get_frag_count(state->efp, &nfrag)); if (cfg_get_int(cfg, "special_fragment") < 0 || cfg_get_int(cfg, "special_fragment") > nfrag-1) error("do not know for which fragment to compute torch: set special_fragment"); diff --git a/lib/pylibefp/__init__.py b/lib/pylibefp/__init__.py new file mode 100644 index 00000000..7a82ab3e --- /dev/null +++ b/lib/pylibefp/__init__.py @@ -0,0 +1,26 @@ +# +# @BEGIN LICENSE +# +# pylibefp/__init__.py: +# +# Copyright (c) 2017-2019 The Psi4 Developers +# +# All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. +# +# @END LICENSE +# + +import os +pylibefp_module_loc = os.path.dirname(os.path.abspath(__file__)) + +# Init core +from . import core + +# Load driver and version paraphernalia +from .wrapper import from_dict, to_dict +from .exceptions import EFPException, Fatal, NoMemory, FileNotFound, EFPSyntaxError, UnknownFragment, PolNotConverged, PyEFPSyntaxError +__version__ = "2.0.0" + +# A few extraneous functions +from .extras import test diff --git a/lib/pylibefp/__pycache__/__init__.cpython-312.pyc b/lib/pylibefp/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 00000000..9cdbc471 Binary files /dev/null and b/lib/pylibefp/__pycache__/__init__.cpython-312.pyc differ diff --git a/lib/pylibefp/__pycache__/exceptions.cpython-312.pyc b/lib/pylibefp/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 00000000..70551276 Binary files /dev/null and b/lib/pylibefp/__pycache__/exceptions.cpython-312.pyc differ diff --git a/lib/pylibefp/__pycache__/extras.cpython-312.pyc b/lib/pylibefp/__pycache__/extras.cpython-312.pyc new file mode 100644 index 00000000..c9f25de4 Binary files /dev/null and b/lib/pylibefp/__pycache__/extras.cpython-312.pyc differ diff --git a/lib/pylibefp/__pycache__/wrapper.cpython-312.pyc b/lib/pylibefp/__pycache__/wrapper.cpython-312.pyc new file mode 100644 index 00000000..d4eec368 Binary files /dev/null and b/lib/pylibefp/__pycache__/wrapper.cpython-312.pyc differ diff --git a/lib/pylibefp/exceptions.py b/lib/pylibefp/exceptions.py new file mode 100644 index 00000000..7e4a7be7 --- /dev/null +++ b/lib/pylibefp/exceptions.py @@ -0,0 +1,68 @@ +# +# @BEGIN LICENSE +# +# pylibefp/wrapper/exceptions.py: +# +# Copyright (c) 2017-2019 The Psi4 Developers +# +# All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. +# +# @END LICENSE +# +"""Module with non-generic exceptions classes.""" +from . import extras + + +class EFPException(Exception): + """Error class for pylibefp.""" + extras._success_flag_ = False + + +class Fatal(EFPException): + """Fatal error has occurred.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Fatal error has occurred. {}\n\n""".format(repr(msg)) + + +class NoMemory(EFPException): + """Insufficient memory.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Insufficient memory. {}\n\n""".format(repr(msg)) + + +class FileNotFound(EFPException): + """File not found.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: File not found. {}\n\n""".format(repr(msg)) + + +class EFPSyntaxError(EFPException): + """Syntax error.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Libefp syntax error. {}\n\n""".format(repr(msg)) + + +class UnknownFragment(EFPException): + """Unknown EFP fragment.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Unknown EFP fragment. {}\n\n""".format(repr(msg)) + + +class PolNotConverged(EFPException): + """Polarization SCF procedure did not converge.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Polarization SCF procedure did not converge. {}\n\n""".format(repr(msg)) + + +class PyEFPSyntaxError(EFPException): + """Syntax error.""" + def __init__(self, msg): + EFPException.__init__(self, msg) + self.message = r"""\nEFPException: Pylibefp syntax error. {}\n\n""".format(repr(msg)) diff --git a/lib/pylibefp/extras.py b/lib/pylibefp/extras.py new file mode 100644 index 00000000..58e21d84 --- /dev/null +++ b/lib/pylibefp/extras.py @@ -0,0 +1,64 @@ +# +# @BEGIN LICENSE +# +# pylibefp/extras.py: +# +# Copyright (c) 2017-2019 The Psi4 Developers +# +# All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. +# +# @END LICENSE +# + +import os + +_success_flag_ = False + +### # Working directory +### _input_dir_ = os.getcwd() +### +### def get_input_directory(): +### return _input_dir_ + + +# Testing +def test(extent='full', extras=None): + """Runs a test suite through pytest. + + Parameters + ---------- + extent : {'smoke', 'quick', 'full', 'long'} + All choices are defined, but choices may be redundant in some projects. + _smoke_ will be minimal "is-working?" test(s). + _quick_ will be as much coverage as can be got quickly, approx. 1/3 tests. + _full_ will be the whole test suite, less some exceedingly long outliers. + _long_ will be the whole test suite. + extras : list + Additional arguments to pass to `pytest`. + + Returns + ------- + int + Return code from `pytest.main()`. 0 for pass, 1 for fail. + + """ + try: + import pytest + except ImportError: + raise RuntimeError('Testing module `pytest` is not installed. Run `conda install pytest`') + abs_test_dir = os.path.sep.join([os.path.abspath(os.path.dirname(__file__)), "tests"]) + + command = ['-rws', '-v'] + if extent.lower() in ['smoke', 'quick']: + command.extend(['-m', 'quick']) + elif extent.lower() == 'full': + command.extend(['-m', 'not long']) + elif extent.lower() == 'long': + pass + if extras is not None: + command.extend(extras) + command.extend(['--capture=sys', abs_test_dir]) + + retcode = pytest.main(command) + return retcode diff --git a/lib/pylibefp/tests/addons.py b/lib/pylibefp/tests/addons.py new file mode 100644 index 00000000..a6cde26f --- /dev/null +++ b/lib/pylibefp/tests/addons.py @@ -0,0 +1,19 @@ +import pytest + +from qcelemental.util import which_import, parse_version + + +def is_psi4_new_enough(version_feature_introduced): + if which_import('psi4') is None: + return False + import psi4 + return parse_version(psi4.__version__) >= parse_version(version_feature_introduced) + + +using_psi4 = pytest.mark.skipif( + which_import('psi4', return_bool=True) is False, + reason='Not detecting package psi4. Install package if necessary and and to envvar PYTHONPATH') + +using_psi4_efpmints = pytest.mark.skipif( + is_psi4_new_enough("1.2a1.dev507") is False, + reason="Psi4 does not include EFP integrals in mints. Update to development head") diff --git a/lib/pylibefp/tests/conftest.py b/lib/pylibefp/tests/conftest.py new file mode 100644 index 00000000..c5875acb --- /dev/null +++ b/lib/pylibefp/tests/conftest.py @@ -0,0 +1,15 @@ +import pytest + + +@pytest.fixture(scope="session", autouse=True) +def set_up_overall(request): + pass + + +@pytest.fixture(scope="function", autouse=True) +def set_up(): + pass + + +def tear_down(): + pass diff --git a/lib/pylibefp/tests/systems.py b/lib/pylibefp/tests/systems.py new file mode 100644 index 00000000..2154f4c7 --- /dev/null +++ b/lib/pylibefp/tests/systems.py @@ -0,0 +1,147 @@ +import pylibefp +#from utils import * + +b2a = 0.529177 +a2b = 1.0 / b2a + + +def system_1(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'nh3_l'] # specifying LIBRARY with _l for variety + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 1.0, 2.0, 3.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [5.0 * a2b, 0.0 * a2b, 0.0 * a2b, 5.0, 2.0, 8.0]) # yapf: disable + + sys.prepare() + return sys + + +def system_2(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'nh3_l', 'h2o_l', 'h2o_l', 'nh3_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [-1.0 * a2b, 3.7 * a2b, 0.4 * a2b, -1.3, 0.0, 7.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ 0.4 * a2b, -0.9 * a2b, -0.7 * a2b, 4.0, 1.6, -2.3]) # yapf: disable + sys.set_frag_coordinates(2, 'xyzabc', [ 1.7 * a2b, 2.0 * a2b, 3.3 * a2b, -1.2, -2.0, 6.2]) # yapf: disable + sys.set_frag_coordinates(3, 'xyzabc', [ 0.0 * a2b, 3.9 * a2b, -3.4 * a2b, 1.3, 5.2, -3.0]) # yapf: disable + sys.set_frag_coordinates(4, 'xyzabc', [-3.5 * a2b, 0.0 * a2b, -0.7 * a2b, 0.0, -2.7, 2.7]) # yapf: disable + + sys.prepare() + return sys + + +def system_3(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'nh3_l', 'nh3_l', 'nh3_l', 'ch3oh_l', 'h2o_l', 'h2o_l', 'ch3oh_l', 'h2o_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates( + 0, 'points', [i * a2b for i in [-3.394, -1.900, -3.700, -3.524, -1.089, -3.147, -2.544, -2.340, -3.445]]) + sys.set_frag_coordinates(1, 'points', + [i * a2b for i in [-5.515, 1.083, 0.968, -5.161, 0.130, 0.813, -4.833, 1.766, 0.609]]) + sys.set_frag_coordinates(2, 'points', + [i * a2b for i in [1.848, 0.114, 0.130, 1.966, 0.674, -0.726, 0.909, 0.273, 0.517]]) + sys.set_frag_coordinates(3, 'points', + [i * a2b for i in [-1.111, -0.084, -4.017, -1.941, 0.488, -3.813, -0.292, 0.525, -4.138]]) + sys.set_frag_coordinates(4, 'points', + [i * a2b for i in [-2.056, 0.767, -0.301, -2.999, -0.274, -0.551, -1.201, 0.360, 0.258]]) + sys.set_frag_coordinates(5, 'points', + [i * a2b for i in [-0.126, -2.228, -0.815, 0.310, -2.476, 0.037, 0.053, -1.277, -1.011]]) + sys.set_frag_coordinates(6, 'points', + [i * a2b for i in [-1.850, 1.697, 3.172, -1.050, 1.592, 2.599, -2.666, 1.643, 2.614]]) + sys.set_frag_coordinates(7, 'points', + [i * a2b for i in [1.275, -2.447, -4.673, 0.709, -3.191, -3.592, 2.213, -1.978, -4.343]]) + sys.set_frag_coordinates( + 8, 'points', [i * a2b for i in [-5.773, -1.738, -0.926, -5.017, -1.960, -1.522, -5.469, -1.766, 0.014]]) + + sys.prepare() + return sys + + +def system_4(): + sys = pylibefp.core.efp() + + frags = ['acetone_l', 'c2h5oh_l', 'c6h6_l', 'ccl4_l', 'ch3oh_l', 'ch4_l', 'cl2_l', 'dcm_l', 'dmso_l', 'h2_l', 'h2o_l', 'nh3_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 0.2, 0.3]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ 7.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 2.0, 3.7]) # yapf: disable + sys.set_frag_coordinates(2, 'xyzabc', [ 14.0 * a2b, 0.0 * a2b, 0.0 * a2b, 3.1, 0.8, 2.0]) # yapf: disable + sys.set_frag_coordinates(3, 'xyzabc', [ 21.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 8.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(4, 'xyzabc', [ 0.0 * a2b, 6.0 * a2b, 0.0 * a2b, 0.7, 2.0, 1.0]) # yapf: disable + sys.set_frag_coordinates(5, 'xyzabc', [ 7.0 * a2b, 6.0 * a2b, 0.0 * a2b, 0.6, 0.0, 4.7]) # yapf: disable + sys.set_frag_coordinates(6, 'xyzabc', [ 14.0 * a2b, 6.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.3]) # yapf: disable + sys.set_frag_coordinates(7, 'xyzabc', [ 21.0 * a2b, 6.0 * a2b, 0.0 * a2b, 0.0, 0.4, 0.3]) # yapf: disable + sys.set_frag_coordinates(8, 'xyzabc', [ 0.0 * a2b, 12.0 * a2b, 0.0 * a2b, 0.8, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(9, 'xyzabc', [ 7.0 * a2b, 12.0 * a2b, 0.0 * a2b, 8.0, 0.7, 0.8]) # yapf: disable + sys.set_frag_coordinates(10, 'xyzabc', [ 14.0 * a2b, 12.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(11, 'xyzabc', [ 21.0 * a2b, 12.0 * a2b, 0.0 * a2b, 0.0, 2.0, 0.0]) # yapf: disable + + sys.prepare() + return sys + + +def system_5(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'nh3_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 3.0, 0.0, 7.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ 18.0 * a2b, 18.0 * a2b, 18.0 * a2b, 5.0, 4.0, 6.0]) # yapf: disable + + sys.prepare() + return sys + + +def system_6(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'ch3oh_l', 'h2o_l', 'ch3oh_l', 'nh3_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ 19.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(2, 'xyzabc', [ 0.0 * a2b, 19.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(3, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 19.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + sys.set_frag_coordinates(4, 'xyzabc', [ 18.0 * a2b, 18.0 * a2b, 18.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable + + sys.prepare() + return sys + + +def system_qm1(): + sys = pylibefp.core.efp() + + frags = ['h2o_l', 'c6h6_l', 'nh3_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [ -1.6 * a2b, 4.7 * a2b, 1.4 * a2b, -1.3, 0.1, 7.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ 0.4 * a2b, -0.9 * a2b, -0.7 * a2b, 2.3, 1.6, -2.3]) # yapf: disable + sys.set_frag_coordinates(2, 'xyzabc', [ -3.5 * a2b, -2.0 * a2b, -0.7 * a2b, 0.0, 2.2, 2.7]) # yapf: disable + + sys.prepare() + return sys + + +def system_qm2(): + sys = pylibefp.core.efp() + + frags = ['ch3oh_l', 'dmso_l', 'dmso_l', 'acetone_l', 'dcm_l', 'acetone_l', 'acetone_l'] + sys.add_potential(frags) + sys.add_fragment(frags) + sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, -1.0 * a2b, 0.0 * a2b, 0.0, 1.1, 2.0]) # yapf: disable + sys.set_frag_coordinates(1, 'xyzabc', [ -5.0 * a2b, 12.0 * a2b, 0.0 * a2b, 3.0, 0.2, 5.0]) # yapf: disable + sys.set_frag_coordinates(2, 'xyzabc', [ 0.0 * a2b, -3.0 * a2b, 5.0 * a2b, 6.0, 2.3, 8.0]) # yapf: disable + sys.set_frag_coordinates(3, 'xyzabc', [ -5.0 * a2b, -4.0 * a2b, -5.0 * a2b, 9.0, 0.4, 1.0]) # yapf: disable + sys.set_frag_coordinates(4, 'xyzabc', [ -9.0 * a2b, -5.0 * a2b, 1.0 * a2b, 2.0, 1.5, 4.0]) # yapf: disable + sys.set_frag_coordinates(5, 'xyzabc', [ 7.0 * a2b, -2.0 * a2b, 11.0 * a2b, 5.0, 0.6, 7.0]) # yapf: disable + sys.set_frag_coordinates(6, 'xyzabc', [ -9.0 * a2b, -7.0 * a2b, -9.0 * a2b, 8.0, 2.7, 0.0]) # yapf: disable + + sys.prepare() + return sys diff --git a/lib/pylibefp/tests/test_coverage.py b/lib/pylibefp/tests/test_coverage.py new file mode 100644 index 00000000..97c80b63 --- /dev/null +++ b/lib/pylibefp/tests/test_coverage.py @@ -0,0 +1,62 @@ +import sys +import pytest +import pylibefp +from systems import * + +from qcelemental.testing import compare + + +def test_grad_fail(): + asdf = system_1() + asdf.compute(do_gradient=False) + + with pytest.raises(pylibefp.Fatal) as e_info: + grad = asdf.get_gradient() + + +#def test_frag_file_fail(): +# asdf = pylibefp.core.efp() +# +# with pytest.raises(pylibefp.FileNotFound) as e_info: +# #print('a', e_info) +# asdf.add_potential('buckyball') +# print('b', e_info) + + +def test_frag_missing_fail(): + asdf = pylibefp.core.efp() + + with pytest.raises(pylibefp.UnknownFragment) as e_info: + asdf.add_fragment('h2o') + + +def test_multifrag_fail(): + asdf = pylibefp.core.efp() + + asdf.add_potential(['nh3', 'nh3']) + with pytest.raises(pylibefp.Fatal) as e_info: + asdf.add_potential('nh3') + + +def test_multifrag_pass(): + asdf = pylibefp.core.efp() + + asdf.add_potential(['nh3', 'nh3']) + asdf.add_potential('nh3', duplicates_ok=True) + asdf.add_fragment(['nh3'] * 5) + asdf.prepare() + assert compare(5, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') + + +def test_frag_fail_1(): + asdf = system_1() + + with pytest.raises(pylibefp.PyEFPSyntaxError) as e_info: + asdf.get_frag_multiplicity(3) + + +def test_frag_fail_2(): + asdf = system_1() + + with pytest.raises(pylibefp.PyEFPSyntaxError) as e_info: + asdf.get_frag_name(-1) diff --git a/lib/pylibefp/tests/test_dict.py b/lib/pylibefp/tests/test_dict.py new file mode 100644 index 00000000..e74cfd95 --- /dev/null +++ b/lib/pylibefp/tests/test_dict.py @@ -0,0 +1,99 @@ +import sys +import pytest +import pprint +import pylibefp +from systems import * + +from qcelemental.testing import compare, compare_values + + +def test_dict_1(): + sys1 = system_1() + + dict1 = sys1.to_dict() + print('DICT1') + pprint.pprint(dict1) + sys1p = pylibefp.from_dict(dict1) + + sys1p.set_opts({'elec': True, 'elec_damp': 'screen', 'xr': True, 'pol': True, 'disp': True, 'disp_damp': 'tt'}) + sys1p.compute() + ene = sys1p.get_energy() + + pprint.pprint(ene) + print('<<< get_opts(): ', sys1p.get_opts(), '>>>') + print('<<< get_energy():', ene, '>>>') + print('<<< get_atoms(): ', sys1p.get_atoms(), '>>>') + print(sys1p.energy_summary()) + print(sys1p.geometry_summary(units_to_bohr=b2a)) + print(sys1p.geometry_summary(units_to_bohr=1.0)) + + assert compare(2, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0001922903, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' + + +def test_dict_2a(): + sys1 = system_2() + sys1p = pylibefp.from_dict(sys1.to_dict()) + + sys1p.set_opts({'elec': True, 'pol': True, 'disp': True, 'xr': True, 'elec_damp': 'screen', 'disp_damp': 'tt'}) + sys1p.compute() + ene = sys1p.get_energy() + + assert compare(5, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0007440865, ene['total'], sys._getframe().f_code.co_name, atol=1.e-6, return_message=True), 'FAILED' + + +def test_dict_3a(): + sys1 = system_3() + sys1p = pylibefp.from_dict(sys1.to_dict()) + + sys1p.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'screen', + 'disp_damp': 'tt', + 'pol_damp': 'tt' + }) + sys1p.compute() + ene = sys1p.get_energy() + + assert compare(9, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' + + +def test_dict_4a(): + sys1 = system_4() + sys1p = pylibefp.from_dict(sys1.to_dict()) + + sys1p.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'screen', + 'disp_damp': 'tt', + 'pol_damp': 'tt' + }) + sys1p.compute() + ene = sys1p.get_energy() + + assert compare(12, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' + + +def test_dict_5(): + dsys = {'units': 'Angstrom', 'fragment_files': [], 'hint_types': [], 'geom_hints': []} + + sys = pylibefp.from_dict(dsys) + + with pytest.raises(pylibefp.PolNotConverged) as e_info: + sys.compute() + assert sys.get_frag_count() == 0 + +if __name__ == '__main__': + function_list = [test_dict_1, test_dict_2a, test_dict_3a, test_dict_4a, test_dict_5] + for f in function_list: + print(f'\nComputing {f.__name__}') + f() \ No newline at end of file diff --git a/lib/pylibefp/tests/test_efpefp.py b/lib/pylibefp/tests/test_efpefp.py new file mode 100644 index 00000000..ab87085c --- /dev/null +++ b/lib/pylibefp/tests/test_efpefp.py @@ -0,0 +1,371 @@ +import sys +import pytest +import pprint +import pylibefp + +from qcelemental.testing import compare, compare_recursive, compare_values + +from systems import * + + +def blank_ene(): + fields = [ + 'charge_penetration', 'disp', 'dispersion', 'elec', 'electrostatic', 'electrostatic_point_charges', + 'exchange_repulsion', 'pol', 'polarization', 'xr', 'qq', 'lj' + ] + ene = {f: 0.0 for f in fields} + return ene + + +def test_elec_1a(): + asdf = system_1() + asdf.set_opts({'elec': True, 'elec_damp': 'screen'}) + asdf.compute() + ene = asdf.get_energy() + + expected_ene = blank_ene() + expected_ene['elec'] = expected_ene['electrostatic'] = expected_ene['total'] = 0.0002900482 + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_elec_1b(): + asdf = system_1() + asdf.set_opts({'elec': True, 'elec_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + + elst = 0.0002910961 + cp = -8.066354689359154e-07 + expected_ene = blank_ene() + expected_ene['elec'] = expected_ene['total'] = elst + expected_ene['charge_penetration'] = cp + expected_ene['electrostatic'] = elst - cp + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_1a(): + asdf = system_1() + opts = {'elec': True, 'pol': True, 'elec_damp': 'screen', 'print': 0} + asdf.set_opts(opts) + asdf.compute() + ene = asdf.get_energy() + + elec = 0.0002900482 + pol = 0.0002777238 - elec + expected_ene = blank_ene() + expected_ene['elec'] = expected_ene['electrostatic'] = elec + expected_ene['pol'] = expected_ene['polarization'] = pol + expected_ene['total'] = elec + pol + #pprint.pprint(opts) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_1b(): + asdf = system_1() + asdf.set_opts({'pol': True, 'elec_damp': 'screen', 'elec': True, 'pol_driver': 'direct'}) + asdf.compute() + ene = asdf.get_energy() + + elec = 0.0002900478 + pol = 0.0002777238 - elec + expected_ene = blank_ene() + expected_ene['elec'] = expected_ene['electrostatic'] = elec + expected_ene['pol'] = expected_ene['polarization'] = pol + expected_ene['total'] = elec + pol + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_1a(): + asdf = system_1() + asdf.set_opts({'disp': True, 'disp_damp': 'tt'}) + asdf.compute() + ene = asdf.get_energy() + + expected_ene = blank_ene() + expected_ene['disp'] = expected_ene['dispersion'] = expected_ene['total'] = -0.0000989033 + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_1b(): + + asdf = system_1() + asdf.set_opts({'disp': True, 'disp_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + + expected_ene = blank_ene() + expected_ene['disp'] = expected_ene['dispersion'] = expected_ene['total'] = -0.0001007275 + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_xr_1(): + asdf = system_1() + asdf.set_opts({'xr': True}) + asdf.compute() + ene = asdf.get_energy() + + expected_ene = blank_ene() + expected_ene['xr'] = expected_ene['exchange_repulsion'] = expected_ene['total'] = 0.0000134716 + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' + + +def test_total_1a(): + asdf = system_1() + asdf.set_opts({ + 'elec': True, + 'elec_damp': 'screen', + 'xr': True, + 'pol': True, # 'pol_damp': 'tt', + 'disp': True, + 'disp_damp': 'tt', + 'print': 2 + }) + asdf.compute() + ene = asdf.get_energy() + pprint.pprint(ene) + print('<<< get_opts(): ', asdf.get_opts(), '>>>') + #print('<<< summary(): ', asdf.summary(), '>>>') + print('<<< get_energy():', ene, '>>>') + print('<<< get_atoms(): ', asdf.get_atoms(), '>>>') + print(asdf.energy_summary()) + print(asdf.geometry_summary(units_to_bohr=b2a)) + print(asdf.geometry_summary(units_to_bohr=1.0)) + + expected_ene = blank_ene() + expected_ene['elec'] = expected_ene['electrostatic'] = 0.0002900482 + expected_ene['xr'] = expected_ene['exchange_repulsion'] = 0.0000134716 + expected_ene['pol'] = expected_ene['polarization'] = 0.0002777238 - expected_ene['electrostatic'] + expected_ene['disp'] = expected_ene['dispersion'] = -0.0000989033 + expected_ene['total'] = 0.0001922903 + assert compare(2, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0, asdf.get_frag_charge(1), sys._getframe().f_code.co_name + ': f_chg', atol=1.e-6, return_message=True), 'FAILED' + assert compare(1, asdf.get_frag_multiplicity(1), sys._getframe().f_code.co_name + ': f_mult', return_message=True), 'FAILED' + assert compare('NH3_L', asdf.get_frag_name(1), sys._getframe().f_code.co_name + ': f_name', return_message=True), 'FAILED' + assert compare_recursive(expected_ene, ene, sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' + + +def test_elec_2a(): + asdf = system_2() + asdf.set_opts({'elec': True, 'elec_damp': 'screen'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0015865516, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_elec_2b(): + asdf = system_2() + asdf.set_opts({'elec': True, 'elec_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0017049246, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_2a(): + asdf = system_2() + asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen'}) + asdf.compute() + ene = asdf.get_energy() + pprint.pprint(ene) + assert compare_values(0.0013685212, ene['total'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_2b(): + asdf = system_2() + asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_driver': 'direct'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0013685212, ene['total'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_2a(): + asdf = system_2() + asdf.set_opts({'disp': True, 'disp_damp': 'tt'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0014688094, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_2b(): + asdf = system_2() + asdf.set_opts({'disp': True, 'disp_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0015801770, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_xr_2(): + asdf = system_2() + asdf.set_opts({'xr': True}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0008443933, ene['xr'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_total_2a(): + asdf = system_2() + asdf.set_opts({'elec': True, 'pol': True, 'disp': True, 'xr': True, 'elec_damp': 'screen', 'disp_damp': 'tt'}) + asdf.compute() + ene = asdf.get_energy() + assert compare(5, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') + assert compare_values(0.0007440865, ene['total'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_elec_3a(): + asdf = system_3() + asdf.set_opts({'elec': True, 'elec_damp': 'screen'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0039531505, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_elec_3b(): + asdf = system_3() + asdf.set_opts({'elec': True, 'elec_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0023592829, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_3a(): + asdf = system_3() + asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_damp': 'off'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0066095992, ene['total'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_pol_3b(): + asdf = system_3() + asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_damp': 'off', 'pol_driver': 'direct'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0066095992, ene['total'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_3a(): + asdf = system_3() + asdf.set_opts({'disp': True, 'disp_damp': 'tt'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0173897265, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_disp_3b(): + asdf = system_3() + asdf.set_opts({'disp': True, 'disp_damp': 'overlap'}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0220107872, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' + + +def test_xr_3(): + asdf = system_3() + asdf.set_opts({'xr': True}) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(0.0301402098, ene['xr'], atol=1.e-5, return_message=True), 'FAILED' + + +def test_total_3a(): + asdf = system_3() + asdf.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'screen', + 'disp_damp': 'tt', + 'pol_damp': 'tt' + }) + asdf.compute() + ene = asdf.get_energy() + assert compare(9, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' + + +def test_total_4a(): + asdf = system_4() + asdf.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'screen', + 'disp_damp': 'tt', + 'pol_damp': 'tt' + }) + asdf.compute() + ene = asdf.get_energy() + + nfrags = ['ACETONE', 'C2H5OH', 'C6H6', 'CCL4', 'CH3OH', 'CH4', 'CL2', 'DCM', 'DMSO', 'H2', 'H2O', 'NH3'] + mfrags = [1 for fr in range(12)] + cfrags = [0.0 for fr in range(12)] + tnm = sys._getframe().f_code.co_name + assert compare(12, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_recursive({'dummy': cfrags}, {'dummy': asdf.get_frag_charge()}, tnm + ': f_chg', atol=1.e-2, return_message=True), 'FAILED' + assert compare_recursive({'dummy': mfrags}, {'dummy': asdf.get_frag_multiplicity()}, tnm + ': f_mult', atol=1.e-2, return_message=True), 'FAILED' + assert compare_recursive({'dummy': [fr + '_L' for fr in nfrags]}, {'dummy': asdf.get_frag_name()}, tnm + ': f_names', atol=1.e-2, return_message=True), 'FAILED' + assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' + + +def test_total_4b(): + asdf = system_4() + asdf.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'overlap', + 'disp_damp': 'overlap', + 'pol_damp': 'tt' + }) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0092400662, ene['total'], atol=1.e-5, return_message=True), 'FAILED' + + +def test_total_4c(): + asdf = system_4() + asdf.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'off', + 'disp_damp': 'off', + 'pol_damp': 'tt' + }) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0091278725, ene['total'], atol=1.e-5, return_message=True), 'FAILED' + + +def test_total_4d(): + asdf = system_4() + asdf.set_opts({ + 'elec': True, + 'pol': True, + 'disp': True, + 'xr': True, + 'elec_damp': 'screen', + 'disp_damp': 'tt', + 'pol_damp': 'tt', + 'pol_driver': 'direct' + }) + asdf.compute() + ene = asdf.get_energy() + assert compare_values(-0.0095597483, ene['total'], atol=1.e-5, return_message=True), 'FAILED' + + +if __name__ == '__main__': + function_list = [ test_elec_1a, test_elec_1b, test_elec_2a, test_elec_2b, test_elec_3a, test_elec_3b, + test_pol_1a, test_pol_1b, test_pol_2a, test_pol_2b, test_pol_3a, test_pol_3b, + test_disp_1a, test_disp_1b, test_disp_2a, test_disp_2b, test_disp_3a, test_disp_3b, + test_xr_1, test_xr_2, test_xr_3, + test_total_1a, test_total_2a, test_total_3a, test_total_4a, test_total_4b, test_total_4c, test_total_4d] + tests = function_list + #tests = [item for item in function_list if 'pol' in str(item)] + for f in tests: + print(f'\nComputing {f.__name__}') + f() + diff --git a/lib/pylibefp/tests/test_efpefp_new.py b/lib/pylibefp/tests/test_efpefp_new.py new file mode 100644 index 00000000..44284c98 --- /dev/null +++ b/lib/pylibefp/tests/test_efpefp_new.py @@ -0,0 +1,57 @@ +import libefp2py +import pylibefp +from qcelemental.testing import compare, compare_values +import pprint + + +b2a = 0.529177 +a2b = 1.0 / b2a + +def frag_setup(test_name): + # coordinates in Bohr + coord_type, frags, frag_coords, efp_options, if_gradient, ref_energy, periodic_box = libefp2py.read_libefp_input(test_name) + #print(frag_coords) + + efp = pylibefp.core.efp() + efp.add_potential(frags) + efp.add_fragment(frags) + for i in range(len(frags)): + efp.set_frag_coordinates(i, coord_type, frag_coords[i]) + efp.prepare() + + efp.set_opts(efp_options) + if periodic_box: + #print('box1', periodic_box) + efp.set_periodic_box(periodic_box) + #print('box2', efp.get_periodic_box()) + + #print(frag_coords) + #pprint.pprint(efp_options) + efp.compute(do_gradient = if_gradient) + ene = efp.get_energy() + + # print pairwise components + #if 'enable_pairwise' in efp_options.keys(): + # if efp_options['enable_pairwise'] in [True, 'true', 1]: + # efp.print_pairwise_energies() + + print(efp.energy_summary()) + if if_gradient: + print(efp.gradient_summary()) + if ref_energy != 0.0: + assert compare_values(ref_energy, ene['total'], atol=1.e-5, return_message=True), 'FAILED' + +##### +if __name__ == '__main__': + files = ['atom_coord.in', 'atom_coord_2.in', 'grad_1.in', 'lj_1.in', 'lj_2.in', + 'pairwise_0.in', 'pairwise_1.in', 'pairwise_2.in', 'pairwise_x.in', 'pbc_1.in', 'pbc_2.in', + 'reduced.in', 'spec_frag_0.in', 'spec_frag_1.in', 'spec_frag_2.in', 'spec_frag_base.in', 'spec_frag_ref.in', + 'symm_1.in', 'symm_2.in', 'symm_2full.in', 'symm_2pw.in'] + + # running for all tests in files list + for f in files: + print(f'\nComputing {f}...') + frag_setup('../'+f) + + # single test execution + frag_setup('../symm_2pw.in') diff --git a/lib/pylibefp/tests/test_lori.py b/lib/pylibefp/tests/test_lori.py new file mode 100644 index 00000000..27f98e97 --- /dev/null +++ b/lib/pylibefp/tests/test_lori.py @@ -0,0 +1,26 @@ +import pylibefp + + + +efp = pylibefp.core.efp() + +frags = ["h2o_l", "nh3_l"] +efp.add_potential(frags) +efp.add_fragment(frags) +efp.set_frag_coordinates(0, "xyzabc", + [0.0, 0.0, 0.0, 1.0, 2.0, 3.0]) +efp.set_frag_coordinates(1, "xyzabc", + [9.0, 0.0, 0.0, 5.0, 2.0, 8.0]) +efp.prepare() + +efp.set_opts({ + "elec": True, + "elec_damp": "screen", + "xr": True, + "pol": True, + "disp": False, +}) + +efp.compute() +ene = efp.get_energy() +print(ene) diff --git a/lib/pylibefp/tests/test_psi.py b/lib/pylibefp/tests/test_psi.py new file mode 100644 index 00000000..48d50314 --- /dev/null +++ b/lib/pylibefp/tests/test_psi.py @@ -0,0 +1,70 @@ +import sys +import pylibefp +from systems import * + +from qcelemental.testing import compare_recursive, compare_values + + +def test_efpefptorque(): + asdf = system_3() + asdf.set_opts({ + 'disp': False, + 'exch': False, + 'elst_damping': 'screen', + 'ind_damping': 'off' + }, + label='psi', + append='psi') # V equiv + #asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_damp': 'off', 'dertype': 'first'}) # ^ equiv + asdf.compute(do_gradient=True) + ene = asdf.get_energy() + torq = asdf.get_gradient() + + ref = { + 'torque': [ + -0.0014557485, -0.0024650113, -0.0007420245, 0.0018487317, -0.0065430367, -0.0003612802, + -0.0024798509, -0.0002766252, 0.0029343456, -0.0033124877, -0.0048014449, -0.0046442270, + 0.0021341431, 0.0023700691, 0.0015655930, -0.0005188401, -0.0004406075, -0.0016388193, + -0.0020017801, 0.0045394287, 0.0001140076, -0.0011159049, 0.0021766586, -0.0035556589, + -0.0004997047, 0.0037416773, -0.0017226579, 0.0108138324, 0.0056465424, -0.0031926302, + -0.0004161161, -0.0046891120, -0.0017098053, -0.0023800599, 0.0042322597, 0.0105675357, + 0.0007828963, 0.0001744122, -0.0006861146, 0.0003752826, -0.0032331154, -0.0011471607, + 0.0038830634, -0.0039883720, -0.0001194227, 0.0012427711, -0.0026362462, -0.0005023332, + 0.0000530976, 0.0005935332, 0.0003660789, -0.0015382262, -0.0048146666, 0.0026841256 + ] + } # yapf: disable + + assert compare_values(-0.0066095987170644, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-5, return_message=True), 'FAILED' + assert compare_recursive(ref, {'torque': torq}, sys._getframe().f_code.co_name + ': torq', atol=1.e-6, return_message=True), 'FAILED' + + +def test_efpefp_bz2(): + """psi4/test/libefp/qchem-efp-sp""" + b2a = 0.529177 + a2b = 1.0 / b2a + + asdf = pylibefp.core.efp() + + frags = ['c6h6_l', 'c6h6_l'] + asdf.add_potential(frags) + asdf.add_fragment(frags) + asdf.set_frag_coordinates( + 0, 'xyzabc', [-0.30448173 * a2b, -2.24210052 * a2b, -0.29383131 * a2b, -0.642499, 1.534222, -0.568147]) + asdf.set_frag_coordinates(1, 'xyzabc', + [-0.60075437 * a2b, 1.36443336 * a2b, 0.78647823 * a2b, 3.137879, 1.557344, -2.568550]) + asdf.prepare() + + asdf.set_opts({'disp_damp': 'tt'}, append='psi') + asdf.compute() + ene = asdf.get_energy(label='psi') + + # values copied from q-chem output file + assert compare_values(-0.006945881265, ene['elst'], sys._getframe().f_code.co_name + ': ene elst', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(0.046915489574, ene['exch'], sys._getframe().f_code.co_name + ': ene exch', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(-0.000675030191, ene['ind'], sys._getframe().f_code.co_name + ': ene ind', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(-0.021092526180, ene['disp'], sys._getframe().f_code.co_name + ': ene disp', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(0.018202051938, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' + +if __name__ == '__main__': + test_efpefptorque() + test_efpefp_bz2() \ No newline at end of file diff --git a/lib/pylibefp/tests/test_scf.py b/lib/pylibefp/tests/test_scf.py new file mode 100644 index 00000000..4d1ca339 --- /dev/null +++ b/lib/pylibefp/tests/test_scf.py @@ -0,0 +1,483 @@ +""" +Reference implementation of RHF/EFP using libefp through PylibEFP. + +Requirements: +NumPy +PylibEFP >=0.6 +Psi4 >=1.2a1.dev507 (c. late Aug 2017) + +References: +SCF in Python from @dgasmith's most excellent Self-Consistent-Field/RHF.py . +SCF/EFP in Psi4 by @andysim, @edeprince3, @ilyak, @loriab +libefp from [Kaliman:2013:2284] + +""" + +__authors__ = "Lori A. Burns" +__credits__ = [ + "Andrew C. Simmonett", "A. Eugene DePrince III", "Ilya A. Kaliman", "Lori A. Burns", "Daniel G. A. Smith" +] + +__copyright__ = "(c) 2014-2017, The Psi4NumPy Developers" +__license__ = "BSD-3-Clause" +__date__ = "2017-08-28" + +import pytest +from addons import * + +import os +import time + +import numpy as np +np.set_printoptions(precision=5, linewidth=200, suppress=True) +from qcelemental.testing import compare, compare_values + +import pylibefp + +print('PyLibEFP loc:', os.path.abspath(pylibefp.__file__)) + + +@using_psi4 +def test_qmefp(): + import psi4 + print('Psi4 loc:', os.path.abspath(psi4.__file__)) + + # Memory for Psi4 in GB + psi4.set_memory('500 MB') + psi4.core.set_output_file("output.dat", False) + + # Memory for numpy in GB + numpy_memory = 2 + + def set_qm_atoms(mol, efpobj): + """Provides list of coordinates of quantum mechanical atoms from + psi4.core.Molecule `mol` to pylibefp.core.efp() `efpobj`. + + """ + ptc = [] + coords = [] + for iat in range(mol.natom()): + ptc.append(mol.charge(iat)) + coords.append(mol.x(iat)) + coords.append(mol.y(iat)) + coords.append(mol.z(iat)) + + efpobj.set_point_charges(ptc, coords) + + def modify_Fock_permanent(mol, nbf, efpobj): + """Computes array of the EFP contribution to the potential felt by + QM atoms, due to permanent EFP moments, for a SCF procedure. + + Requires psi4.core.Molecule `mol`, number of basis functions `nbf`, + and pylibefp.core.efp() `efpobj`. + + """ + # get composition counts from libefp + n_fr = efpobj.get_frag_count() + natoms = efpobj.get_frag_atom_count() + + # get multipoles count, pos'n, values from libefp + # charge + dipoles + quadrupoles + octupoles = 20 + n_mp = efpobj.get_multipole_count() + xyz_mp = np.asarray(efpobj.get_multipole_coordinates()).reshape(n_mp, 3) + val_mp = np.asarray(efpobj.get_multipole_values(verbose=2)).reshape(n_mp, 20) + + # 0 X Y Z XX YY ZZ XY XZ YZ + prefacs = np.array([ 1, 1, 1, 1, 1/3, 1/3, 1/3, 2/3, 2/3, 2/3, + 1/15, 1/15, 1/15, 3/15, 3/15, 3/15, 3/15, 3/15, 3/15, 6/15 + ]) # yapf: disable + # XXX YYY ZZZ XXY XXZ XYY YYZ XZZ YZZ XYZ + + # EFP permanent moment contribution to the Fock Matrix + V2 = np.zeros((nbf, nbf)) + + # Cartesian basis one-electron EFP perturbation + efp_ints = np.zeros((20, nbf, nbf)) + + for imp in range(n_mp): + origin = xyz_mp[imp] + + # get EFP multipole integrals from Psi4 + p4_efp_ints = mints.ao_efp_multipole_potential(origin=origin) + for pole in range(20): + efp_ints[pole] = np.asarray(p4_efp_ints[pole]) + + # add frag atom Z into multipole charge (when pos'n of atom matches mp) + for ifr in range(n_fr): + atoms = efpobj.get_frag_atoms(ifr) + for iat in range(natoms[ifr]): + xyz_atom = [atoms[iat]['x'], atoms[iat]['y'], atoms[iat]['z']] + if np.allclose(xyz_atom, origin, atol=1e-10): + val_mp[imp, 0] += atoms[iat]['Z'] + + # scale multipole integrals by multipole magnitudes. result goes into V + for pole in range(20): + efp_ints[pole] *= -prefacs[pole] * val_mp[imp, pole] + V2 += efp_ints[pole] + + return V2 + + def modify_Fock_induced(nbf, efpobj, verbose=1): + """Returns shared matrix containing the EFP contribution to the potential + felt by QM atoms, due to EFP induced dipoles, in a SCF procedure. + + """ + # get induced dipoles count, pos'n, values from libefp + # dipoles = 3 + n_id = efpobj.get_induced_dipole_count() + xyz_id = np.asarray(efpobj.get_induced_dipole_coordinates(verbose=verbose)).reshape(n_id, 3) + val_id = np.asarray(efpobj.get_induced_dipole_values(verbose=verbose)).reshape(n_id, 3) + val_idt = np.asarray(efpobj.get_induced_dipole_conj_values(verbose=verbose)).reshape(n_id, 3) + + # take average of induced dipole and conjugate + val_id = (val_id + val_idt) * 0.5 + + # EFP induced dipole contribution to the Fock Matrix + V2 = np.zeros((nbf, nbf)) + + # Cartesian basis one-electron EFP perturbation + field_ints = np.zeros((3, nbf, nbf)) + + for iid in range(n_id): + origin = xyz_id[iid] + + # get electric field integrals from Psi4 + p4_field_ints = mints.electric_field(origin=origin) + for pole in range(3): + field_ints[pole] = np.asarray(p4_field_ints[pole]) + + # scale field integrals by induced dipole magnitudes. result goes into V + for pole in range(3): + field_ints[pole] *= -val_id[iid, pole] + V2 += field_ints[pole] + + return V2 + + def field_fn(xyz): + """Compute electric field from electrons in ab initio part for libefp polarization calculation. + + Parameters + ---------- + xyz : list + 3 * n_pt (flat) array of points at which to compute electric field + + Returns + ------- + list + 3 * n_pt (flat) array of electric field at points in `xyz1. + + """ + points = np.array(xyz).reshape(-1, 3) + n_pt = len(points) + + # Cartesian basis one-electron EFP perturbation + field_ints = np.zeros((3, nbf, nbf)) + + # Electric field at points + field = np.zeros((n_pt, 3)) + + for ipt in range(n_pt): + # get electric field integrals from Psi4 + p4_field_ints = mints.electric_field(origin=points[ipt]) + + field[ipt] = [ + np.vdot(density, np.asarray(p4_field_ints[0])) * 2.0, # Ex + np.vdot(density, np.asarray(p4_field_ints[1])) * 2.0, # Ey + np.vdot(density, np.asarray(p4_field_ints[2])) * 2.0, # Ez + ] + + field = np.reshape(field, 3 * n_pt) + + return field + + ref_V2 = np.array( + [[ + -0.02702339455725, -0.00631509453548, -0.00000280084677, -0.00060226624612, 0.00000155158400, + -0.00452046694500, -0.00000038595163, -0.00008299120179, 0.00000021380548, -0.00090142990526, + 0.00000473984815, 0.00000183105977, -0.00091126369988, 0.00000235760871, -0.00090571433548, + -0.00093899785533, -0.00186143580968, -0.00093995668834, -0.00186166418149 + ], + [ + -0.00631509453548, -0.02702339455725, -0.00001910979606, -0.00410918056805, 0.00001058624630, + -0.02063616591789, -0.00001267718384, -0.00272597555850, 0.00000702277450, -0.01445203384431, + 0.00033391900577, 0.00012899688747, -0.01514481783551, 0.00016609189393, -0.01475386897318, + -0.00642763371094, -0.01023119897476, -0.00663585147245, -0.01026009701560 + ], + [ + -0.00000280084677, -0.00001910979606, -0.02665234730712, 0.00037371007562, 0.00014436865150, + -0.00001859005760, -0.01317104219809, 0.00038448758263, 0.00014853213109, -0.00013643690212, + -0.00190980298320, -0.00014163627448, 0.00010970691227, -0.00002569550824, -0.00001652160690, + 0.00553694631171, 0.00296253882599, -0.00592518334643, -0.00307008036331 + ], + [ + -0.00060226624612, -0.00410918056805, 0.00037371007562, -0.02742768609665, 0.00018588404124, + -0.00399742114424, 0.00038448758263, -0.01396874115447, 0.00019124479202, -0.00190980298320, + 0.00010970691227, -0.00002569550824, -0.00553609000895, 0.00005214006927, -0.00185450039426, + -0.00111418876009, -0.00223702838075, -0.00084629056834, -0.00203426014685 + ], + [ + 0.00000155158400, 0.00001058624630, 0.00014436865150, 0.00018588404124, -0.02699015026797, + 0.00001029832686, 0.00014853213109, 0.00019124479202, -0.01351858713356, -0.00014163627448, + -0.00002569550824, -0.00001652160690, 0.00005214006927, -0.00185450039426, 0.00011345627547, + 0.00451469309687, 0.00241810592738, 0.00477138911517, 0.00250189743578 + ], + [ + -0.00452046694500, -0.02063616591789, -0.00001859005760, -0.00399742114424, 0.00001029832686, + -0.02702319749786, -0.00003768753434, -0.00796996845458, 0.00002030483034, -0.01818952603674, + 0.00070524995886, 0.00027244649517, -0.01965271296696, 0.00035079256242, -0.01882701369086, + -0.00987165499275, -0.01795740782584, -0.01115822875565, -0.01834575971991 + ], + [ + -0.00000038595163, -0.00001267718384, -0.01317104219809, 0.00038448758263, 0.00014853213109, + -0.00003768753434, -0.02503648443824, 0.00199702997314, 0.00077269122299, -0.00033902442705, + -0.00294678699585, -0.00039007690599, 0.00030807567722, -0.00006972255302, -0.00003443473716, + 0.00878465177892, 0.00777812963854, -0.01154437574140, -0.00936638912773 + ], + [ + -0.00008299120179, -0.00272597555850, 0.00038448758263, -0.01396874115447, 0.00019124479202, + -0.00796996845458, 0.00199702997314, -0.02918413124002, 0.00099361419288, -0.00294678699585, + 0.00030807567722, -0.00006972255302, -0.00831580669109, 0.00013571897621, -0.00279672819574, + -0.00251085900448, -0.00821286621429, -0.00153039204428, -0.00622386437502 + ], + [ + 0.00000021380548, 0.00000702277450, 0.00014853213109, 0.00019124479202, -0.01351858713356, + 0.00002030483034, 0.00077269122299, 0.00099361419288, -0.02684469027539, -0.00039007690599, + -0.00006972255302, -0.00003443473716, 0.00013571897621, -0.00279672819574, 0.00029057799444, + 0.00789015760008, 0.00719868343548, 0.00944135089382, 0.00814913589233 + ], + [ + -0.00090142990526, -0.01445203384431, -0.00013643690212, -0.00190980298320, -0.00014163627448, + -0.01818952603674, -0.00033902442705, -0.00294678699585, -0.00039007690599, -0.02563070634460, + 0.00066403177471, 0.00035090564283, -0.00910270453424, 0.00007502850470, -0.00874245358696, + -0.00913676610260, -0.01107408168593, -0.01046477748444, -0.01146456481073 + ], + [ + 0.00000473984815, 0.00033391900577, -0.00190980298320, 0.00010970691227, -0.00002569550824, + 0.00070524995886, -0.00294678699585, 0.00030807567722, -0.00006972255302, 0.00066403177471, + -0.00910270453424, 0.00007502850470, 0.00068756471942, 0.00005040470506, 0.00022274776644, + 0.00124025666869, 0.00135413078331, -0.00068224645268, -0.00032923928756 + ], + [ + 0.00000183105977, 0.00012899688747, -0.00014163627448, -0.00002569550824, -0.00001652160690, + 0.00027244649517, -0.00039007690599, -0.00006972255302, -0.00003443473716, 0.00035090564283, + 0.00007502850470, -0.00874245358696, 0.00005040470506, 0.00022274776644, 0.00020687758368, + -0.00412380528180, -0.00051519173670, 0.00491320446628, 0.00097904308284 + ], + [ + -0.00091126369988, -0.01514481783551, 0.00010970691227, -0.00553609000895, 0.00005214006927, + -0.01965271296696, 0.00030807567722, -0.00831580669109, 0.00013571897621, -0.00910270453424, + 0.00068756471942, 0.00005040470506, -0.02840235120105, 0.00033061285791, -0.00923711128151, + -0.00458459601546, -0.01138951947581, -0.00454371602298, -0.01120759511573 + ], + [ + 0.00000235760871, 0.00016609189393, -0.00002569550824, 0.00005214006927, -0.00185450039426, + 0.00035079256242, -0.00006972255302, 0.00013571897621, -0.00279672819574, 0.00007502850470, + 0.00005040470506, 0.00022274776644, 0.00033061285791, -0.00923711128151, 0.00037744020930, + 0.00095088751145, 0.00091755913622, 0.00066686324895, 0.00079498664458 + ], + [ + -0.00090571433548, -0.01475386897318, -0.00001652160690, -0.00185450039426, 0.00011345627547, + -0.01882701369086, -0.00003443473716, -0.00279672819574, 0.00029057799444, -0.00874245358696, + 0.00022274776644, 0.00020687758368, -0.00923711128151, 0.00037744020930, -0.02691937643507, + -0.00793049330280, -0.01147295613562, -0.00845374029895, -0.01156033431781 + ], + [ + -0.00093899785533, -0.00642763371094, 0.00553694631171, -0.00111418876009, 0.00451469309687, + -0.00987165499275, 0.00878465177892, -0.00251085900448, 0.00789015760008, -0.00913676610260, + 0.00124025666869, -0.00412380528180, -0.00458459601546, 0.00095088751145, -0.00793049330280, + -0.01785633292778, -0.01175654591020, -0.00144863365096, -0.00543904115350 + ], + [ + -0.00186143580968, -0.01023119897476, 0.00296253882599, -0.00223702838075, 0.00241810592738, + -0.01795740782584, 0.00777812963854, -0.00821286621429, 0.00719868343548, -0.01107408168593, + 0.00135413078331, -0.00051519173670, -0.01138951947581, 0.00091755913622, -0.01147295613562, + -0.01175654591020, -0.01842598268335, -0.00600898660138, -0.01416862694275 + ], + [ + -0.00093995668834, -0.00663585147245, -0.00592518334643, -0.00084629056834, 0.00477138911517, + -0.01115822875565, -0.01154437574140, -0.00153039204428, 0.00944135089382, -0.01046477748444, + -0.00068224645268, 0.00491320446628, -0.00454371602298, 0.00066686324895, -0.00845374029895, + -0.00144863365096, -0.00600898660138, -0.02521907195360, -0.01660151455045 + ], + [ + -0.00186166418149, -0.01026009701560, -0.00307008036331, -0.00203426014685, 0.00250189743578, + -0.01834575971991, -0.00936638912773, -0.00622386437502, 0.00814913589233, -0.01146456481073, + -0.00032923928756, 0.00097904308284, -0.01120759511573, 0.00079498664458, -0.01156033431781, + -0.00543904115350, -0.01416862694275, -0.01660151455045, -0.02521511777687 + ]]) + + mol = psi4.geometry(""" + units bohr + 0 1 + O1 0.000000000000 0.000000000000 0.224348285559 + H2 -1.423528800232 0.000000000000 -0.897393142237 + H3 1.423528800232 0.000000000000 -0.897393142237 + symmetry c1 + no_com + no_reorient + """) + + # <-- efp + # [Kaliman:2013:2284] Fig. 4 -- Initialize EFP + efpmol = pylibefp.core.efp() + # [Kaliman:2013:2284] Fig. 4 -- Set fragment coordinates + frags = ['h2o', 'nh3', 'nh3'] + efpmol.add_potential(frags) + efpmol.add_fragment(frags) + efpmol.set_frag_coordinates(0, 'xyzabc', + [-4.014110144291, 2.316749370493, -1.801514729931, -2.902133, 1.734999, -1.953647]) + efpmol.set_frag_coordinates(1, 'xyzabc', + [1.972094713645, 3.599497221584, 5.447701074734, -1.105309, 2.033306, -1.488582]) + efpmol.set_frag_coordinates(2, 'xyzabc', + [-7.876296399270, -1.854372164887, -2.414804197762, 2.526442, 1.658262, -2.742084]) + efpmol.prepare() + efpmol.set_opts({}, append='psi') + efpmol.set_electron_density_field_fn(field_fn) + # --> efp + + psi4.set_options({'basis': '6-31g*', 'scf_type': 'pk', 'e_convergence': 1e-8}) + + # Set defaults + maxiter = 40 + E_conv = 1.0E-6 + D_conv = 1.0E-3 + + # Integral generation from Psi4's MintsHelper + wfn = psi4.core.Wavefunction.build(mol, psi4.core.get_global_option('BASIS')) + t = time.time() + mints = psi4.core.MintsHelper(wfn.basisset()) + S = np.asarray(mints.ao_overlap()) + + # Get nbf and ndocc for closed shell molecules + nbf = S.shape[0] + ndocc = wfn.nalpha() + + print('\nNumber of occupied orbitals: %d' % ndocc) + print('Number of basis functions: %d' % nbf) + + # Run a quick check to make sure everything will fit into memory + I_Size = (nbf**4) * 8.e-9 + print("\nSize of the ERI tensor will be %4.2f GB." % I_Size) + + # Estimate memory usage + memory_footprint = I_Size * 1.5 + if I_Size > numpy_memory: + psi4.core.clean() + raise Exception("Estimated memory utilization (%4.2f GB) exceeds numpy_memory \ + limit of %4.2f GB." % (memory_footprint, numpy_memory)) + + # Compute required quantities for SCF + V = np.asarray(mints.ao_potential()) + T = np.asarray(mints.ao_kinetic()) + I = np.asarray(mints.ao_eri()) + + print('\nTotal time taken for integrals: %.3f seconds.' % (time.time() - t)) + + t = time.time() + + # Build H_core + H = T + V + + # <-- efp: add in permanent moment contribution and cache + Vefp = modify_Fock_permanent(mol, nbf, efpmol) + assert compare(1, np.allclose(Vefp, ref_V2), 'EFP permanent Fock contrib') + H = H + Vefp + Horig = H.copy() + set_qm_atoms(mol, efpmol) + # --> efp + + # Orthogonalizer A = S^(-1/2) using Psi4's matrix power. + A = mints.ao_overlap() + A.power(-0.5, 1.e-16) + A = np.asarray(A) + + # Calculate initial core guess + Hp = A.dot(H).dot(A) + e, C2 = np.linalg.eigh(Hp) + C = A.dot(C2) + Cocc = C[:, :ndocc] + D = np.einsum('pi,qi->pq', Cocc, Cocc) + + print('\nTotal time taken for setup: %.3f seconds' % (time.time() - t)) + + print('QM/EFP: iterating Total Energy including QM/EFP Induction') + t = time.time() + E = 0.0 + Enuc = mol.nuclear_repulsion_energy() + Eold = 0.0 + Dold = np.zeros_like(D) + + for SCF_ITER in range(1, maxiter + 1): + + # <-- efp: add contribution to Fock matrix + H = Horig + verbose_dipoles = 1 if (SCF_ITER == 1) else 0 + # [Kaliman:2013:2284] Fig. 4 -- Compute electric field from wavefunction + # [Kaliman:2013:2284] Fig. 4 -- Compute electric field from induced dipoles + Vefp = modify_Fock_induced(nbf, efpmol, verbose=verbose_dipoles) + H = H + Vefp + # --> efp + + # Build fock matrix + J = np.einsum('pqrs,rs->pq', I, D) + K = np.einsum('prqs,rs->pq', I, D) + F = H + J * 2 - K + + diis_e = np.einsum('ij,jk,kl->il', F, D, S) - np.einsum('ij,jk,kl->il', S, D, F) + diis_e = A.dot(diis_e).dot(A) + + # SCF energy and update + # [Kaliman:2013:2284] Fig. 4 -- Compute QM wavefunction + SCF_E = np.einsum('pq,pq->', F + H, D) + Enuc + dRMS = np.mean(diis_e**2)**0.5 + + # <-- efp: add contribution to energy + density = D + # [Kaliman:2013:2284] Fig. 4 -- Compute EFP induced dipoles + efp_wfn_dependent_energy = efpmol.get_wavefunction_dependent_energy() + SCF_E += efp_wfn_dependent_energy + # --> efp + + print('SCF Iteration %3d: Energy = %4.16f dE = % 1.5E dRMS = %1.5E dEFP = %12.8f' % + (SCF_ITER, SCF_E, (SCF_E - Eold), dRMS, efp_wfn_dependent_energy)) + if (abs(SCF_E - Eold) < E_conv) and (dRMS < D_conv): + break + + Eold = SCF_E + Dold = D + + # Diagonalize Fock matrix + Fp = A.dot(F).dot(A) + e, C2 = np.linalg.eigh(Fp) + C = A.dot(C2) + Cocc = C[:, :ndocc] + D = np.einsum('pi,qi->pq', Cocc, Cocc) + + if SCF_ITER == maxiter: + clean() + raise Exception("Maximum number of SCF cycles exceeded.") + + # <-- efp + efpmol.compute() + efpene = efpmol.get_energy(label='psi') + # [Kaliman:2013:2284] Fig. 4 -- Compute one electron EFP contributions to Hamiltonian + efp_wfn_independent_energy = efpene['total'] - efpene['ind'] + SCF_E += efp_wfn_independent_energy + print(efpmol.energy_summary(scfefp=SCF_E, label='psi')) + # --> efp + + print('Total time for SCF iterations: %.3f seconds \n' % (time.time() - t)) + + # references confirmed against Q-Chem & Psi4 + assert compare_values(0.2622598847, efpene['total'] - efpene['ind'], 'EFP corr to SCF', atol=1.e-6) + assert compare_values(-0.0117694790, efpene['ind'], 'QM-EFP Indc', atol=1.e-6) + assert compare_values(-0.0021985285, efpene['disp'], 'EFP-EFP Disp', atol=1.e-6) + assert compare_values(0.0056859871, efpene['exch'], 'EFP-EFP Exch', atol=1.e-6) + assert compare_values(0.2504904057, efpene['total'], 'EFP-EFP Totl', atol=1.e-6) + assert compare_values(-76.0139362744, SCF_E, 'SCF', atol=1.e-6) + efpmol.clean() + print("All passed!") + + +if __name__ == '__main__': + test_qmefp() diff --git a/lib/pylibefp/wrapper.py b/lib/pylibefp/wrapper.py new file mode 100644 index 00000000..7325a5c9 --- /dev/null +++ b/lib/pylibefp/wrapper.py @@ -0,0 +1,2051 @@ +# +# @BEGIN LICENSE +# +# pylibefp/wrapper/wrapper.py: +# +# Copyright (c) 2017-2019 The Psi4 Developers +# +# All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. +# +# @END LICENSE +# + +import os +import re +import sys +import math +import functools +from pathlib import Path +from typing import Dict + +import qcelemental as qcel + +from . import core +from .exceptions import Fatal, NoMemory, FileNotFound, EFPSyntaxError, UnknownFragment, PolNotConverged, PyEFPSyntaxError + +_lbtl = { + 'libefp': {}, + 'psi': { + 'elec': 'elst', + 'pol': 'ind', + 'xr': 'exch', + 'qq': 'charge_charge', + 'lj': 'lennard-jones', + 'elec_damp': 'elst_damping', + 'pol_damp': 'ind_damping', + 'disp_damp': 'disp_damping', + 'pol_driver': 'ind_driver', + 'ai_elec': 'qm_elst', + 'ai_pol': 'qm_ind', + 'ai_disp': 'qm_disp', + 'ai_xr': 'qm_exch', + 'ai_chtr': 'qm_chtr', + 'ai_qq': 'qm_qq', + }, +} + + +def _rekey(rawdict, label): + newdict = rawdict.copy() + for key in rawdict.keys(): + topic = _lbtl[label].get(key, key) + newdict[topic] = newdict.pop(key) + return newdict + + +def _result_to_error(res, msg=''): + + if res == core.efp_result.EFP_RESULT_SUCCESS: + return + elif res == core.efp_result.EFP_RESULT_FATAL: + raise Fatal(msg) + elif res == core.efp_result.EFP_RESULT_NO_MEMORY: + raise NoMemory(msg) + elif res == core.efp_result.EFP_RESULT_FILE_NOT_FOUND: + raise FileNotFound(msg) + elif res == core.efp_result.EFP_RESULT_SYNTAX_ERROR: + raise EFPSyntaxError(msg) + elif res == core.efp_result.EFP_RESULT_UNKNOWN_FRAGMENT: + raise UnknownFragment(msg) + elif res == core.efp_result.EFP_RESULT_POL_NOT_CONVERGED: + raise PolNotConverged(msg) + + +def prepare(efpobj): + """Prepare the calculation after all fragments added. + + Returns + ------- + None + + """ + res = efpobj._efp_prepare() + _result_to_error(res) + + +def compute(efpobj, do_gradient=False): + """Perform the EFP computation. + + Parameters + ---------- + do_gradient : bool, optional + If True, compute the gradient in addition to energy. + + Returns + ------- + None + + """ + # efp_compute already does pairwise, enable_pairwise just saves the pairwise info + # + res = efpobj._efp_compute(do_gradient) + _result_to_error(res) + +def add_potential(efpobj, potential, fragpath='LIBRARY', duplicates_ok=False): + """Searches for EFP fragments and adds to `efpobj`. + + Parameters + ---------- + potential : str or list + Single fragment name or a list of fragments, with or without + ".efp" extension. + fragpath : string, optional + String with ":"-separated paths that may include absolute + paths, relative paths, "$"-marked environment variables, and + the word LIBRARY. Relative paths and environment variables will + be expanded. "LIBRARY" will be expanded to the native libefp + fragment library. + duplicates_ok : bool, optional + Whether to continue or to return pylibefp.Fatal if asked + to load a duplicate potential according to libefp default + behavior. The `potential` list is always filtered to avoid + duplicates. Activating `duplicates_ok` additionally allows + repeated calls to this function to add duplicate potentials. + + Returns + ------- + None + + .. versionchanged:: 1.9 + Now handles `_L` fragments by only looking in LIBRARY paths for these. + Also now handles "deep" library layouts. Unlike C libefp, a fragment + without _L extension is sought in all fraglib paths, including LIBRARY, + if present. + + """ + + print('POTENTIAL ', potential) + paths = [] + library_paths = [] + for pth in fragpath.split(os.pathsep): + if pth == 'LIBRARY': + for lst in [paths, library_paths]: + for spth in '/Users/lyuda/LIBEFP/libefp_skp_may2025/share/libefp/fraglib;/Users/lyuda/LIBEFP/libefp_skp_may2025/share/libefp/fraglib/databases'.split(';'): + lst.append(spth) + #lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib/databases') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib/databases') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib/databases') + for spth in ''.split(';'): + lst.append(str((Path('/Users/lyuda/LIBEFP/libefp_skp_may2025/python') / '..' / spth).resolve())) + else: + paths.append(os.path.expandvars(os.path.expanduser(pth))) + + # locate efpfrags full path name + abspath_pots = [] + if isinstance(potential, str): + potential = [potential] + uniq_pots = list(set(potential)) + for pot in uniq_pots: + pathpot = Path(pot).with_suffix('.efp') + search_paths = [] + + if pathpot.stem.upper().endswith('_L'): + # if "frag_L", only search for "LIBRARY/frag.efp" + file_pot_name = pathpot.with_name(str(pathpot.stem)[:-2]).with_suffix('.efp') + for pth in library_paths: + search_paths.append((pth / file_pot_name).resolve()) + else: + # otherwise, search all "/frag.efp", possibly incl. LIBRARY + for pth in paths: + search_paths.append((pth / pathpot).resolve()) + + for pth in search_paths: + if pth.is_file(): + abspath_pots.append(str(pth)) + break + + # load the potentials + for ipot, pot in enumerate(abspath_pots): + res = efpobj._efp_add_potential(pot) + try: + _result_to_error(res, uniq_pots[ipot]) + except Fatal as e: + if duplicates_ok: + pass + else: + raise Fatal('Invalid fragment name (probably already added): {}'.format(uniq_pots[ipot])) + + print(r""" EFP fragment {} read from {}""".format(uniq_pots[ipot], pot)) + + +def add_fragment(efpobj, fragments): + """Registers EFP fragments to `efpobj` in order. + + Parameters + ---------- + fragments : list of str + Names of fragments to define the EFP subsystem. + + .. versionchanged:: 1.9 + Fragments are checking `_L` extensions for library files, too. + + Returns + ------- + None + + """ + if isinstance(fragments, str): + fragments = [fragments] + for frag in fragments: + res = efpobj._efp_add_fragment(frag) + try: + _result_to_error(res, frag) + except UnknownFragment as e: + res = efpobj._efp_add_fragment(frag + "_L") + _result_to_error(res, frag) + + +#def add_ligand(efpobj, ligand_index): +# """Adds ligand to `efpobj` +# +# Parameters +# ---------- +# ligand_index : index of the ligand +# +# Returns +# ------- +# None +# +# """ +# res = efpobj._efp_add_ligand(ligand_index) +# _result_to_error(res) + + + +def get_opts(efpobj, label='libefp'): + """Returns the options state of *efpobj* as a dictionary. + + Parameters + ---------- + label : {'libefp', 'psi'}, optional + Returned dictionary keys are identical to libefp efp_opts struct + names unless custom renaming requested via `label`. + + Returns + ------- + dict + Current options state of `efpobj` translated into bools, strings, + and floats, rather than libefp custom datatypes. + + """ + opts = core.efp_opts() + res = efpobj._efp_get_opts(opts) + _result_to_error(res) + + dopts = {} + + dopts['elec'] = bool(opts.terms & core.efp_term.EFP_TERM_ELEC) + dopts['pol'] = bool(opts.terms & core.efp_term.EFP_TERM_POL) + dopts['disp'] = bool(opts.terms & core.efp_term.EFP_TERM_DISP) + dopts['xr'] = bool(opts.terms & core.efp_term.EFP_TERM_XR) + dopts['chtr'] = bool(opts.terms & core.efp_term.EFP_TERM_CHTR) + dopts['qq'] = bool(opts.terms & core.efp_term.EFP_TERM_QQ) # SKP + dopts['lj'] = bool(opts.terms & core.efp_term.EFP_TERM_LJ) # SKP + + dopts['spec_elec'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_ELEC) # SKP + dopts['spec_pol'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_POL) # SKP + dopts['spec_disp'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_DISP) # SKP + dopts['spec_xr'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_XR) # SKP + dopts['spec_chtr'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_CHTR) # SKP + dopts['spec_qq'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_QQ) # SKP + dopts['spec_lj'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_LJ) # SKP + + dopts['elec_damp'] = { + core.EFP_ELEC_DAMP_SCREEN: 'screen', + core.EFP_ELEC_DAMP_OVERLAP: 'overlap', + core.EFP_ELEC_DAMP_OFF: 'off', + }[opts.elec_damp] + + dopts['pol_damp'] = { + core.EFP_POL_DAMP_TT: 'tt', + core.EFP_POL_DAMP_OFF: 'off', + }[opts.pol_damp] + + dopts['disp_damp'] = { + core.EFP_DISP_DAMP_TT: 'tt', + core.EFP_DISP_DAMP_OVERLAP: 'overlap', + core.EFP_DISP_DAMP_OFF: 'off', + }[opts.disp_damp] + + dopts['pol_damp_tt_value'] = opts.pol_damp_tt_value + dopts['enable_pbc'] = bool(opts.enable_pbc) + dopts['enable_elpot'] = bool(opts.enable_elpot) + dopts['enable_cutoff'] = bool(opts.enable_cutoff) + dopts['swf_cutoff'] = opts.swf_cutoff + dopts['xr_cutoff'] = opts.xr_cutoff + dopts['special_fragment'] = opts.special_fragment + dopts['enable_pairwise'] = bool(opts.enable_pairwise) # SKP + dopts['symmetry'] = bool(opts.symmetry) # SKP + + dopts['symm_frag'] = { + core.EFP_SYMM_FRAG_FRAG: 'frag', + core.EFP_SYMM_FRAG_LIST: 'list', + }[opts.symm_frag] + + dopts['ligand'] = opts.ligand # SKP + dopts['print'] = opts.print + + dopts['pol_driver'] = { + core.EFP_POL_DRIVER_ITERATIVE: 'iterative', + core.EFP_POL_DRIVER_DIRECT: 'direct', + }[opts.pol_driver] + + dopts['ai_elec'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_ELEC) + dopts['ai_pol'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_POL) + dopts['ai_disp'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_DISP) + dopts['ai_xr'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_XR) + dopts['ai_chtr'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_CHTR) + dopts['ai_qq'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_QQ) # SKP + + return _rekey(dopts, label=label) + + +def set_opts(efpobj, dopts, label='libefp', append='libefp'): + """Sets the options state of `efpobj` from dictionary `dopts`. + + Parameters + ---------- + dopts : dict + Input dict with keys from libefp efp_opts (see `label`) and + values bools, strings, floats, and ints, as appropriate, rather + than libefp custom datatypes. + label : {'libefp', 'psi'}, optional + Input `dopts` keys are read as libefp efp_opts struct names or + by the custom translation set defined for `label`. + append : {'libefp', 'psi', 'append'}, optional + When ``libefp``, input `dopts` keys are applied to the default + (generally OFF) efp_opts state. When ``psi``, input `dopts` + keys are applied to the default (generally ON) Psi efp_opts + state. When ``append``, input `dopts` keys are applied to the + current *efpobj* opt_opts state. + + Returns + ------- + dict + After setting the options state, `efpobj` is queried as to the + current options state, which is then returned. + + """ + # warn on stray dopts keys + allowed = [ + 'elec', 'pol', 'disp', 'xr', 'elec_damp', 'pol_damp', 'disp_damp', + 'pol_damp_tt_value', 'enable_pbc', 'enable_elpot', 'enable_cutoff', 'swf_cutoff', 'xr_cutoff', + 'pol_driver', 'ai_elec', 'ai_pol', 'enable_pairwise', 'ligand', 'symmetry', 'symm_frag', + 'spec_elec', 'spec_pol', 'spec_disp', 'spec_xr', 'spec_chtr', 'ai_qq', 'qq', 'lj', 'special_fragment', + 'spec_qq', 'spec_lj', 'print' + ] + label_allowed = [_lbtl[label].get(itm, itm) for itm in allowed] + for key in dopts.keys(): + if key not in label_allowed: + print('Warning: unrecognized key {}'.format(key)) + trues = [True, 1, 'yes', 'true', 'on'] + falses = [False, 0, 'no', 'false', 'off'] + + # prepare base options state for dopts + opts = core.efp_opts() + # default values of parameters + if append == 'libefp': + opts.ligand = -100 + opts.special_fragment = -100 + #opts.terms |= core.efp_term.EFP_TERM_ELEC + #opts.terms |= core.efp_term.EFP_TERM_POL + #opts.terms |= core.efp_term.EFP_TERM_DISP + #opts.terms |= core.efp_term.EFP_TERM_XR + opts.elec_damp = core.EFP_ELEC_DAMP_SCREEN + opts.pol_damp = core.EFP_POL_DAMP_TT + opts.disp_damp = core.EFP_DISP_DAMP_OVERLAP + elif append == 'psi': + opts.terms |= core.efp_term.EFP_TERM_ELEC + opts.terms |= core.efp_term.EFP_TERM_POL + opts.terms |= core.efp_term.EFP_TERM_DISP + opts.terms |= core.efp_term.EFP_TERM_XR + opts.elec_damp = core.EFP_ELEC_DAMP_SCREEN + opts.pol_damp = core.EFP_POL_DAMP_TT + opts.disp_damp = core.EFP_DISP_DAMP_OVERLAP + opts.terms |= core.efp_term.EFP_TERM_AI_ELEC + opts.terms |= core.efp_term.EFP_TERM_AI_POL + opts.ligand = -100 + opts.special_fragment = -100 + #elif append == 'qchem': + # # q-chem and psi4 have different defaults for at least this option + # opts.disp_damp = core.EFP_DISP_DAMP_TT + elif append == 'append': + res = efpobj._efp_get_opts(opts) + _result_to_error(res) + else: + raise PyEFPSyntaxError('Unrecognized opts default set: {}'.format(append)) + + # apply dopts to options state + topic = _lbtl[label].get('elec', 'elec') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_ELEC + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_ELEC + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('pol', 'pol') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_POL + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_POL + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('disp', 'disp') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_DISP + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_DISP + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('xr', 'xr') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_XR + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_XR + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +#========== SKP changes ======================================================================# + topic = _lbtl[label].get('qq', 'qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('lj', 'lj') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_LJ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_LJ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_qq', 'spec_qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_lj', 'spec_lj') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_LJ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_LJ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_elec', 'spec_elec') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_ELEC + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_ELEC + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_pol', 'spec_pol') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_POL + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_POL + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_xr', 'spec_xr') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_XR + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_XR + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + + topic = _lbtl[label].get('spec_disp', 'spec_disp') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_DISP + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_DISP + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + +#================================================================================================# + # may be enabled in a future libefp release + # topic = _lbtl[label].get('chtr', 'chtr') + + topic = _lbtl[label].get('elec_damp', 'elec_damp') + if topic in dopts: + try: + opts.elec_damp = { + 'screen': core.EFP_ELEC_DAMP_SCREEN, + 'overlap': core.EFP_ELEC_DAMP_OVERLAP, + 'off': core.EFP_ELEC_DAMP_OFF, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [screen/overlap/off] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('pol_damp', 'pol_damp') + if topic in dopts: + try: + opts.pol_damp = { + 'tt': core.EFP_POL_DAMP_TT, + 'off': core.EFP_POL_DAMP_OFF, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [tt/off] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('disp_damp', 'disp_damp') + if topic in dopts: + try: + opts.disp_damp = { + 'overlap': core.EFP_DISP_DAMP_OVERLAP, + 'tt': core.EFP_DISP_DAMP_TT, + 'off': core.EFP_DISP_DAMP_OFF, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [overlap/tt/off] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('enable_pbc', 'enable_pbc') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_pbc = 1 + elif dopts[topic] in falses: + opts.enable_pbc = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('enable_elpot', 'enable_elpot') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_elpot = 1 + elif dopts[topic] in falses: + opts.enable_elpot = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('symmetry', 'symmetry') + if topic in dopts: + if dopts[topic] in trues: + opts.symmetry = 1 + elif dopts[topic] in falses: + opts.symmetry = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('symm_frag', 'symm_frag') + if topic in dopts: + try: + opts.symm_frag = { + 'frag': core.EFP_SYMM_FRAG_FRAG, + 'list': core.EFP_SYMM_FRAG_LIST, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [frag/list] {}: {}'.format(topic, dopts[topic])) + + # PAIRWISE - SKP + topic = _lbtl[label].get('enable_pairwise', 'enable_pairwise') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_pairwise = 1 + elif dopts[topic] in falses: + opts.enable_pairwise = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +# LIGAND NUMBER - SKP + topic = _lbtl[label].get('ligand', 'ligand') + if topic in dopts: + ligand_idx = dopts[topic] + if not isinstance(ligand_idx, int): + raise TypeError(f"ligand value must be an integer, got: {ligand_idx}") + if ligand_idx >= efpobj.get_frag_count(): + raise ValueError(f"Invalid ligand index: {ligand_idx}, only {efpobj.get_frag_count()} fragments present.") + opts.ligand = ligand_idx + +# SPECIAL-FRAGMENT NUMBER - SKP + topic = _lbtl[label].get('special_fragment', 'special_fragment') + if topic in dopts: + special_frag_idx = dopts[topic] + if not isinstance(special_frag_idx, int): + raise TypeError(f"special_fragment value must be an integer, got: {special_frag_idx}") + if special_frag_idx >= efpobj.get_frag_count(): + raise ValueError(f"Invalid special_fragment index: {special_frag_idx}, only {efpobj.get_frag_count()} fragments present.") + opts.special_fragment = special_frag_idx + + topic = _lbtl[label].get('enable_cutoff', 'enable_cutoff') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_cutoff = 1 + elif dopts[topic] in falses: + opts.enable_cutoff = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('swf_cutoff', 'swf_cutoff') + if topic in dopts: + opts.swf_cutoff = float(dopts[topic]) + + topic = _lbtl[label].get('xr_cutoff', 'xr_cutoff') + if topic in dopts: + opts.xr_cutoff = float(dopts[topic]) + + topic = _lbtl[label].get('print', 'print') + if topic in dopts: + opts.print = int(dopts[topic]) + + topic = _lbtl[label].get('pol_driver', 'pol_driver') + if topic in dopts: + try: + opts.pol_driver = { + 'iterative': core.EFP_POL_DRIVER_ITERATIVE, + 'direct': core.EFP_POL_DRIVER_DIRECT, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [iterative/direct] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('pol_damp_tt_value', 'pol_damp_tt_value') + if topic in dopts: + opts.pol_damp_tt_value = float(dopts[topic]) + else: + opts.pol_damp_tt_value = 0.6 # libefp default set in efpmd + + topic = _lbtl[label].get('ai_elec', 'ai_elec') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_AI_ELEC + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_AI_ELEC + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('ai_pol', 'ai_pol') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_AI_POL + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_AI_POL + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +#=================== SKP addition ===================================================# + topic = _lbtl[label].get('ai_qq', 'ai_qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_AI_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_AI_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +#======================================================================================# + # may be enabled in a future libefp release + # topic = _lbtl[label].get('ai_disp', 'ai_disp') + # topic = _lbtl[label].get('ai_xr', 'ai_xr') + # topic = _lbtl[label].get('ai_chtr', 'ai_chtr') + +# set some defaults + if opts.xr_cutoff == 0 and opts.enable_cutoff == 1: + opts.xr_cutoff = opts.swf_cutoff + + + # set computed options state + res = efpobj._efp_set_opts(opts) + _result_to_error(res) + + # we need to initialize the ligand structure if pairwise calcs are requested + # do it here - there is no other time before compute starts... + if opts.enable_pairwise == 1 and opts.ligand >= 0: + efpobj._efp_add_ligand(opts.ligand) + + # prepares symmetry info for symmetric crystal calculations + res = efpobj._efp_set_symmlist() + _result_to_error(res) + + return efpobj.get_opts(label=label) + + +def set_periodic_box(efpobj, xyz, alpha=90.0, beta=90.0, gamma=90.0): + """Set periodic box size. + + Parameters + ---------- + xyz : list + (3,) Box sizes in three dimensions [x, y, z] in Bohr. + alpha + Unit cell alpha angle in degrees. + beta + Unit cell beta angle in degrees. + gamma + Unit cell gamma angle in degrees. + + Returns + ------- + None + + .. versionchanged:: 1.9 + Parameters alpha, beta, and gamma added. + + """ + + if len(xyz) == 3: + res = efpobj._efp_set_periodic_box(xyz[0], xyz[1], xyz[2], alpha, beta, gamma) + _result_to_error(res) + elif len(xyz) == 6: + res = efpobj._efp_set_periodic_box(xyz[0], xyz[1], xyz[2], xyz[3], xyz[4], xyz[5]) + _result_to_error(res) + else : + raise PyEFPSyntaxError('Invalid periodic box setting: {}'.format(xyz)) + + (res, xyzabc) = efpobj._efp_get_periodic_box() + _result_to_error(res) + + +def get_periodic_box(efpobj): + """Get periodic box size. + + Returns + ------- + list + Box sizes in three dimensions [x, y, z] in Bohr. + And box angles [alpha, beta, gamma] in degrees. + + .. versionchanged:: 1.9 + Return size extended from 3 to 6 to include angles. + + """ + (res, xyzabc) = efpobj._efp_get_periodic_box() + _result_to_error(res) + + return xyzabc + + +#def opts_summary(efpobj, labels='libefp'): +# +# opts = efpobj.get_opts() +## py::dict opts = opts_to_dict(efp); +# +# elec = 'Electrostatics' +# xr = 'Exchange' +# disp = 'Dispersion' +# if labels == 'libefp': +# pol = 'Polarization' +# elif labels == 'psi4': +# pol = 'Induction' +# +# text = '' +# text += '\n ==> EFP/EFP Setup <==\n\n' +# text += ' {:<30} {:12}\n'.format(elec + ' enabled?:', 'true' if opts["elec"] else 'false') +# text += ' {:<30} {:12}\n'.format(pol + ' enabled?:', 'true' if opts["pol"] else 'false') +# text += ' {:<30} {:12}\n'.format(disp + ' enabled?:', 'true' if opts["disp"] else 'false') +# text += ' {:<30} {:12}\n'.format(xr + ' enabled?:', 'true' if opts["xr"] else 'false') +# text += ' {:<30} {:12}\n'.format('Charge-Transfer enabled?:', 'undefined') +# +# text += '\n {:<30} {:12}\n'.format(elec + ' damping:', opts["elec_damp"]) +# text += ' {:<30} {:12}\n'.format(pol + 'damping:', opts["pol_damp"]) +# text += ' {:<30} {:12}\n'.format(disp + ' damping:', opts["disp_damp"]) +# text += ' {:<30} {:12}\n'.format(pol + ' driver:', opts["pol_driver"]) +# +# text += '\n ==> QM/EFP Setup <==\n\n' +##// sprintf(buffer, " Number of QM fragments: %12d\n", -1); //, nfrag_); +# text += ' Electrostatics enabled?: {:12}\n'.format('true' if opts["ai_elec"] else 'false') +# text += ' Polarization enabled?: {:12}\n'.format('true' if opts["ai_pol"] else 'false') +# text += ' Dispersion enabled?: {:12}\n'.format('undefined') +# text += ' Exchange enabled?: {:12}\n'.format('undefined') +# text += ' Charge-Transfer enabled?: {:12}\n'.format('undefined') +# +# return text + + +def get_energy(efpobj, label='libefp'): + """Gets the energy components from `efpobj` computation as a dictionary. + + Parameters + ---------- + label : {'libefp', 'psi'}, optional + Returned dictionary keys are identical to libefp efp_energy struct + names plus elec, pol, disp, xr, & total components unless custom renaming + requested via `label`. + + Returns + ------- + dict + Individual terms, summed components, and total energies. + + """ + ene = core.efp_energy() + res = efpobj._efp_get_energy(ene) + _result_to_error(res) + + energies = { + 'electrostatic': ene.electrostatic, + 'charge_penetration': ene.charge_penetration, + 'electrostatic_point_charges': ene.electrostatic_point_charges, + 'polarization': ene.polarization, + 'dispersion': ene.dispersion, + 'exchange_repulsion': ene.exchange_repulsion, + 'total': ene.total, + 'elec': ene.electrostatic + ene.charge_penetration + ene.electrostatic_point_charges, + 'xr': ene.exchange_repulsion, + 'pol': ene.polarization, + 'disp': ene.dispersion, + 'qq': ene.qq, + 'lj':ene.lj, + } + + return _rekey(energies, label=label) + + +def print_pairwise_energies(efpobj): + """Prints pairwise energy between ligand and all fragments.""" + + ligand_index = efpobj.get_opts().get("ligand", 0) + nfrag = efpobj.get_frag_count() + + energies = efpobj._efp_get_pairwise_energy(nfrag) + + ene_elec = 0.0 + ene_pol = 0.0 + ene_disp = 0.0 + ene_xr = 0.0 + ene_chpn = 0.0 + ene_total = 0.0 + for i in range(nfrag): + if i == ligand_index: + continue + + print(f"\nPAIRWISE ENERGY BETWEEN FRAGMENT {i} AND LIGAND {ligand_index}") + energy = energies[i] + print(f"{'ELECTROSTATIC':>40} {energy['electrostatic']:16.10f}") + print(f"{'POLARIZATION':>40} {energy['polarization']:16.10f}") + print(f"{'DISPERSION':>40} {energy['dispersion']:16.10f}") + print(f"{'EXCHANGE REPULSION':>40} {energy['exchange_repulsion']:16.10f}") + print(f"{'CHARGE PENETRATION':>40} {energy['charge_penetration']:16.10f}") + print(f"{'TOTAL':>40} {energy['total']:16.10f}") + print("------------------------------------------------------------") + + ene_elec += energy['electrostatic'] + ene_pol += energy['polarization'] + ene_disp += energy['dispersion'] + ene_xr += energy['exchange_repulsion'] + ene_chpn += energy['charge_penetration'] + ene_total += energy['total'] + + print(f"\nTOTAL PAIRWISE ENERGY OF LIGAND {ligand_index}") + print(f"{'ELECTROSTATIC':>40} {ene_elec:16.10f}") + print(f"{'POLARIZATION':>40} {ene_pol:16.10f}") + print(f"{'DISPERSION':>40} {ene_disp:16.10f}") + print(f"{'EXCHANGE REPULSION':>40} {ene_xr:16.10f}") + print(f"{'CHARGE PENETRATION':>40} {ene_chpn:16.10f}") + print(f"{'TOTAL':>40} {ene_total:16.10f}") + print("------------------------------------------------------------") + print("------------------------------------------------------------") + + + +def get_frag_count(efpobj): + """Gets the number of fragments in `efpobj` computation. + + Returns + ------- + int + Number of fragments in calculation. + + """ + (res, nfrag) = efpobj._efp_get_frag_count() + _result_to_error(res) + + return nfrag + +# # +# # def get_multipole_count(efpobj): +# # """Gets the number of multipoles in `efpobj` computation. +# # +# # Returns +# # ------- +# # int +# # Total number of multipoles from electrostatics calculation. +# # +# # """ +# # (res, nmult) = efpobj._efp_get_multipole_count() +# # _result_to_error(res) +# # +# # return nmult +# # +# +# def get_multipole_coordinates(efpobj, verbose=1): +# """Gets the coordinates of `efpobj` electrostatics multipoles. +# +# Parameters +# ---------- +# verbose : int, optional +# Whether to print out the multipole coordinates. 0: no printing. 1: +# print charges and dipoles. 2: additionally print quadrupoles +# and octupoles. +# +# Returns +# ------- +# list +# ``3 n_mult`` (flat) array of multipole locations. +# +# Examples +# -------- +# +# >>> # Use with NumPy +# >>> n_mult = efpobj.get_multipole_count() +# >>> xyz_mult = np.asarray(efpobj.get_multipole_coordinates()).reshape(n_mult, 3) +# +# """ +# nmult = efpobj.get_multipole_count() +# (res, xyz) = efpobj._efp_get_multipole_coordinates(nmult) +# _result_to_error(res) +# +# if verbose >= 1: +# xyz3 = list(map(list, zip(*[iter(xyz)] * 3))) +# +# text = '\n ==> EFP Multipole Coordinates <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *xyz3[mu]) +# print(text) +# +# return xyz +# +# +# def get_multipole_values(efpobj, verbose=1): +# """Gets the computed per-point multipoles of `efpobj`. +# +# Parameters +# ---------- +# verbose : int, optional +# Whether to print out the multipole arrays. 0: no printing. 1: +# print charges and dipoles. ``2``: additionally print quadrupoles +# and octupoles. +# +# Returns +# ------- +# list +# ``20 n_mult`` (flat) array of per-point multipole values including +# charges + dipoles + quadrupoles + octupoles. +# Dipoles stored as x, y, z. +# Quadrupoles stored as xx, yy, zz, xy, xz, yz. +# Octupoles stored as xxx, yyy, zzz, xxy, xxz, xyy, yyz, xzz, yzz, xyz. +# +# Examples +# -------- +# >>> # Use with NumPy +# >>> n_mult = efpobj.get_multipole_count() +# >>> val_mult = np.asarray(efpobj.get_multipole_values()).reshape(n_mult, 20) +# +# """ +# nmult = efpobj.get_multipole_count() +# (res, mult) = efpobj._efp_get_multipole_values(nmult) +# _result_to_error(res) +# +# if verbose >= 1: +# mult20 = list(map(list, zip(*[iter(mult)] * 20))) +# +# text = '\n ==> EFP Multipoles: Charge & Dipole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:14.8f} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *mult20[mu][:4]) +# +# if verbose >= 2: +# text += '\n ==> EFP Multipoles: Quadrupole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format(mu, *mult20[mu][4:10]) +# text += '\n ==> EFP Multipoles: Octupole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format( +# mu, *mult20[mu][10:]) +# print(text) +# +# return mult +# + +def get_induced_dipole_count(efpobj): + """Gets the number of polarization induced dipoles in `efpobj` computation. + + Returns + ------- + int + Total number of polarization induced dipoles. + + """ + (res, ndip) = efpobj._efp_get_induced_dipole_count() + _result_to_error(res) + + return ndip + + +def get_induced_dipole_coordinates(efpobj, verbose=1): + """Gets the coordinates of `efpobj` induced dipoles. + + Parameters + ---------- + verbose : int, optional + Whether to print out the multipole arrays. 0: no printing. 1: + print induced dipole coordinates. + + Returns + ------- + list + (3 * n_dip, ) (flat) array of induced dipole locations. + + """ + ndip = efpobj.get_induced_dipole_count() + (res, xyz) = efpobj._efp_get_induced_dipole_coordinates(ndip) + _result_to_error(res) + + if verbose >= 1: + xyz3 = list(map(list, zip(*[iter(xyz)] * 3))) + + text = '\n ==> EFP Induced Dipole Coordinates <==\n\n' + for mu in range(ndip): + text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *xyz3[mu]) + print(text) + + return xyz + + +def get_induced_dipole_values(efpobj, verbose=1): + """Gets the values of polarization induced dipoles of `efpobj`. + + Parameters + ---------- + verbose : int, optional + Whether to print out the induced dipole arrays. 0: no + printing. 1: print induced dipole values. + + Returns + ------- + list + ``3*n_dip`` (flat) array of polarization induced dipole values. + + Examples + -------- + >>> # Use with NumPy + >>> n_dip = efpobj.get_induced_dipole_count() + >>> val_dip = np.asarray(efpobj.get_induced_dipole_values()).reshape(n_dip, 3) + + """ + ndip = efpobj.get_induced_dipole_count() + (res, vals) = efpobj._efp_get_induced_dipole_values(ndip) + _result_to_error(res) + + if verbose >= 1: + vals3 = list(map(list, zip(*[iter(vals)] * 3))) + + text = '\n ==> EFP Induced Dipoles <==\n\n' + for mu in range(ndip): + text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *vals3[mu]) + print(text) + + return vals + + +def get_induced_dipole_conj_values(efpobj, verbose=1): + """Gets the values of polarization conjugated induced dipoles of `efpobj`. + + Parameters + ---------- + verbose : int, optional + Whether to print out the induced dipole conj arrays. + 0: no printing. 1: print induced dipole values. + + Returns + ------- + list + 3 x n_dip (flat) array of conjugate induced dipole values. + + """ + ndip = efpobj.get_induced_dipole_count() + (res, vals) = efpobj._efp_get_induced_dipole_conj_values(ndip) + _result_to_error(res) + + if verbose >= 1: + vals3 = list(map(list, zip(*[iter(vals)] * 3))) + + text = '\n ==> EFP Conj. Induced Dipoles <==\n\n' + for mu in range(ndip): + text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *vals3[mu]) + print(text) + + return vals + + +def get_point_charge_count(efpobj): + """Gets the number of set point charges `efpobj`. + + Returns + ------- + int + Total number of set point charges. + + """ + (res, nptc) = efpobj._efp_get_point_charge_count() + _result_to_error(res) + + return nptc + + +def get_point_charge_coordinates(efpobj, verbose=1): + """Gets the coordinates of set point charges on `efpobj`. + + Parameters + ---------- + verbose : int, optional + Whether to print out the point charge arrays. 0: no printing. + 1: print point charge coordinates. + + Returns + ------- + list + 3 x n_ptc (flat) array of point charge locations. + + """ + nptc = efpobj.get_point_charge_count() + (res, xyz) = efpobj._efp_get_point_charge_coordinates(nptc) + _result_to_error(res) + + if verbose >= 1: + xyz3 = list(map(list, zip(*[iter(xyz)] * 3))) + + text = '\n ==> EFP Point Charge Coordinates <==\n\n' + for mu in range(nptc): + text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *xyz3[mu]) + print(text) + + return xyz + + +def get_point_charge_values(efpobj, verbose=1): + """Gets the values of set point charges on `efpobj`. + + Parameters + ---------- + verbose : int, optional + Whether to print out the point charge arrays. 0: no + printing. 1: print point charge values. + + Returns + ------- + list + ``n_ptc`` array of point charge values. + + Examples + -------- + >>> # Use with NumPy + >>> val_ptc = np.asarray(efpobj.get_point_charge_values()) + + """ + nptc = efpobj.get_point_charge_count() + (res, vals) = efpobj._efp_get_point_charge_values(nptc) + _result_to_error(res) + + if verbose >= 1: + text = '\n ==> EFP Point Charges <==\n\n' + for mu in range(nptc): + text += '{:6d} {:14.8f}\n'.format(mu, vals[mu]) + print(text) + + return vals + + +def get_wavefunction_dependent_energy(efpobj): + """Updates wavefunction-dependent energy terms for SCF. + + Returns + ------- + float + Wavefunction-dependent EFP energy. + + """ + (res, wde) = efpobj._efp_get_wavefunction_dependent_energy() + _result_to_error(res) + + return wde + + +def get_gradient(efpobj): + """Gets the computed per-fragment EFP energy gradient of `efpobj`. + + Returns + ------- + list + ``6 x n_frag`` array of per-fragment negative force and torque. + + """ + nfrag = efpobj.get_frag_count() + (res, grad) = efpobj._efp_get_gradient(nfrag) + _result_to_error(res) + + return grad + +# SKP + +def get_pairwise_energy(efpobj): + """Gets the per-fragment pairwise energy breakdowns. + + Returns + ------- + list of dict + A list of `n_frag` dictionaries, each containing energy components: + 'electrostatic', 'exchange_repulsion', 'polarization', + 'dispersion', and 'total'. + """ + nfrag = efpobj.get_frag_count() + energies = efpobj._efp_get_pairwise_energy(nfrag) + return energies + +#SKP + +#def set_pairwise_energy(efpobj, pair_energies): +# """Sets pairwise energy values per fragment. +# +# Parameters +# ---------- +# pair_energies : list of dict +# A list of dicts with energy components for each fragment, where each dict includes: +# 'electrostatic', 'exchange_repulsion', 'polarization', 'dispersion', and 'total'. +# +# Returns +# ------- +# None +# """ +# nfrag = efpobj.get_frag_count() +# if len(pair_energies) != nfrag: +# raise PyEFPSyntaxError(f"Expected {nfrag} energy entries, got {len(pair_energies)}") +# +# res = efpobj._efp_set_pairwise_energy(nfrag, pair_energies) +# _result_to_error(res) + +def gradient_summary(efpobj): + """Gets the computed per-fragment EFP energy gradient of `efpobj`. + + Returns + ------- + str + Formatted text of the `6 x n_frag` gradient and torque. + + """ + grad = efpobj.get_gradient() + grad6 = list(map(list, zip(*[iter(grad)] * 6))) + + text = '\n ==> EFP Gradient & Torque <==\n\n' + for fr in grad6: + text += '{:14.8f} {:14.8f} {:14.8f} {:14.8f} {:14.8f} {:14.8f}\n'.format(*fr) + + text += '\n' + return text + + +def energy_summary(efpobj, label='libefp', scfefp=None): + """Forms summary of EFP and SCFEFP energy components from `efpobj`. + + Parameters + ---------- + label : {'libefp', 'psi'}, optional + Text labels use libefp terms names unless custom renaming + requested via `label`. + scfefp : float, optional + Total SCF energy (Hartrees) including EFP wavefunction dependent + and wavefunction independent terms. Used for add'l printing. + + Returns + ------- + str + Summary suitable for printing indicating energy components + (electrostatics, exchange, induction, dispersion, total), whether + each are enabled in options, and breakdown into pure-EFP and + QM-EFP, where available. If scfefp, includes a section on SCF + iterated and SCF total. + + """ + opt = efpobj.get_opts() + ene = efpobj.get_energy() + + def _enabled(tf, t='*', f='', suffix=''): + if tf: + return t + suffix + else: + return f + + elec = 'Electrostatics' + disp = 'Dispersion' + if label == 'libefp': + xr = 'Exchange-Repulsion' + indc = 'Polarization' + elif label == 'psi': + xr = 'Exchange' + indc = 'Induction' + + # yapf: disable + text = '\n' + text += '\n EFP Results\n' + text += ' ------------------------------------------------------------\n' + text += ' {:<30}{:20.12f} [Eh] {}\n'.format(elec, ene['electrostatic'] + + ene['charge_penetration'] + + ene['electrostatic_point_charges'], + _enabled(opt['elec'] or opt['ai_elec'], + suffix=(' (' + opt['elec_damp'] + ' damping)'))) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('EFP/EFP', ene['electrostatic'] + + ene['charge_penetration'], + _enabled(opt['elec'])) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('QM-Nuc/EFP', + ene['electrostatic_point_charges'], + _enabled(opt['ai_elec'])) + text += '\n {:<30}{:20.12f} [Eh] {}\n'.format(xr, ene['exchange_repulsion'], + _enabled(opt['xr'])) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('EFP/EFP', ene['exchange_repulsion'], + _enabled(opt['xr'])) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('QM/EFP', 0.0, '') + text += '\n {:<30}{:20.12f} [Eh] {}\n'.format(indc, ene['polarization'], + _enabled(opt['pol'] or opt['ai_pol'], + suffix=(' (' + opt['pol_damp'] + ' damping)'))) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format(_enabled(opt['ai_pol'], t='QM/EFP', f='EFP/EFP'), + ene['polarization'], + _enabled(opt['pol'] or opt['ai_pol'])) + text += '\n {:<30}{:20.12f} [Eh] {}\n'.format(disp, ene['dispersion'], + _enabled(opt['disp'], + suffix=(' (' + opt['disp_damp'] + ' damping)'))) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('EFP/EFP', ene['dispersion'], + _enabled(opt['disp'])) + text += ' {:<28}{:20.12f} [Eh] {}\n'.format('QM/EFP', 0.0, '') + text += '\n {:<30}{:20.12f} [Eh]\n'.format('Total EFP', ene['total']) + # yapf: enable + if scfefp is not None: + wie = ene['total'] - ene['pol'] + text += ' EFP excluding EFP {:<12}{:20.12f} [Eh]\n'.format(indc, wie) + text += ' SCF including EFP {:<12}{:20.12f} [Eh]\n'.format(indc, scfefp - wie) + text += ' Total SCF including Total EFP {:20.12f} [Eh]\n'.format(scfefp) + + text += '\n' + return text + + +def geometry_summary(efpobj, units_to_bohr=1.0): + """Formatted geometry and fragments for `efpobj`. + + Parameters + ---------- + units_to_bohr : float,optional + Conversion factor for printing; for Angstroms, approx. 0.529177. + + Returns + ------- + str + Summary of EFP geometry & point charges (QM atoms) suitable for printing. + + """ + text = '' + text += '\n ==> EFP Geometry <==\n\n' + text += ' Geometry (in {} * {:12.8f}):\n\n'.format('Bohr', units_to_bohr) + text += ' Center X Y Z QM/EFP\n' + text += ' ------------ ----------------- ----------------- ----------------- ------------\n' + + mol_info = efpobj.get_atoms() + terminal_frag = [fr[0] for fr in mol_info['fragments'][1:]] + frag_names = efpobj.get_frag_name() + + ifr = 0 + for iat, at in enumerate(mol_info['full_atoms']): + if iat in terminal_frag: + text += ' --\n' + ifr += 1 + text += ' {:8}{:4} {:17.12f} {:17.12f} {:17.12f} {}\n'.format(at['symbol'], '', + at['x'] * units_to_bohr, + at['y'] * units_to_bohr, + at['z'] * units_to_bohr, + frag_names[ifr].lower()) + + # TODO move into dict? + ptc_info = { + 'n': efpobj.get_point_charge_count(), + 'xyz': efpobj.get_point_charge_coordinates(verbose=0), + 'val': efpobj.get_point_charge_values(verbose=0) + } + + if ptc_info['n'] > 0: + mult3 = list(map(list, zip(*[iter(ptc_info['xyz'])] * 3))) + text += ' ------------\n' + for ptc in range(ptc_info['n']): + text += ' {:8}{:4} {:17.12f} {:17.12f} {:17.12f} {}\n'.format(ptc_info['val'][ptc], '', + mult3[ptc][0] * units_to_bohr, + mult3[ptc][1] * units_to_bohr, + mult3[ptc][2] * units_to_bohr, + 'point_charge') + + text += '\n' + return text + + +def nuclear_repulsion_energy(efpobj, use_efp_frags=True, use_point_charges=False): + """Computes nuclear repulsion energy for `efpobj`. + + Parameters + ---------- + use_efp_frags : bool, optional + If True (default), compute NRE using the efp fragment subsystem. + use_point_charges : bool, optional + If True (not default), include point charges (generally QM atoms) + in NRE computation. + + Returns + ------- + float + Nuclear repulsion energy [E_h] for specified geometry subsystem + + """ + nre = 0.0 + loc = [] + + if use_efp_frags: + loc.extend(efpobj.get_atoms()['full_atoms']) + if use_point_charges: + ptc_xyz = efpobj.get_point_charge_coordinates(verbose=0) + ptc_val = efpobj.get_point_charge_values(verbose=0) + for ptc in range(efpobj.get_point_charge_count()): + loc.append({ + 'Z': ptc_val[ptc], + 'x': ptc_xyz[ptc * 3], + 'y': ptc_xyz[ptc * 3 + 1], + 'z': ptc_xyz[ptc * 3 + 2] + }) + + for iat1, at1 in enumerate(loc): + for iat2, at2 in enumerate(loc): + if iat2 < iat1: + ZZ = at1['Z'] * at2['Z'] + dx = at1['x'] - at2['x'] + dy = at1['y'] - at2['y'] + dz = at1['z'] - at2['z'] + dist = math.sqrt(dx * dx + dy * dy + dz * dz) + nre += ZZ / dist + + return nre + + +#def _frag_idx_validation(efpobj, ifr): +# nfr = efpobj.get_frag_count() +# if (ifr < 0) or (ifr >= nfr): +# raise PyEFPSyntaxError('Invalid fragment index for 0-indexed {}-fragment EFP: {}'.format(nfr, ifr)) + + +def set_frag_coordinates(efpobj, ifr, ctype, coord): + """Set fragment orientation on `efpobj` from hint. + + Parameters + ---------- + ifr : int + Index of fragment (0-indexed). + ctype : core.efp_coord_type or str {'xyzabc', 'points', 'rotmat'} + Type of coodinates hint among ``xyzabc``, `points`, & `rotmat`. + coord : list of floats + 6-, 9-, or 12-element hint of coordinates. + + Returns + ------- + None + + """ + if isinstance(ctype, str): + try: + ctype = { + 'xyzabc': core.EFP_COORD_TYPE_XYZABC, + 'points': core.EFP_COORD_TYPE_POINTS, + 'rotmat': core.EFP_COORD_TYPE_ROTMAT, + 'atoms': core.EFP_COORD_TYPE_ATOMS, + }[ctype.lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [xyzabc/points/rotmat/atoms] {}: {}'.format('ctype', ctype)) + + efpobj.input_units_to_au = 1.0 + res = efpobj._efp_set_frag_coordinates(ifr, ctype, coord) + _result_to_error(res) + + +def set_point_charge_coordinates(efpobj, xyz): + """Reset arbitrary point charge locations (often QM atoms) + interacting with the EFP subsystem. Must have been initially set + with set_point_charges. + + Parameters + ---------- + xyz : list + ``3 * n_ptc`` array of XYZ coordinates of charge positions, + generally QM coordinates. + + Returns + ------- + None + + """ + n_ptc = efpobj.get_point_charge_count() + if n_ptc == 0: + raise PyEFPSyntaxError('Must initialize point charges with set_point_charges') + if len(xyz) != (3 * n_ptc): + raise PyEFPSyntaxError('Invalid point charge length: {}'.format(xyz)) + + res = efpobj._efp_set_point_charge_coordinates(len(xyz), xyz) + _result_to_error(res) + + +def set_point_charge_values(efpobj, ptc): + """Reset arbitrary point charge values (often QM atoms) + interacting with the EFP subsystem. Must have been initially set + with set_point_charges. + + Parameters + ---------- + ptc : list of float + array of charge values, generally QM nuclear charges. + + Returns + ------- + None + + """ + n_ptc = efpobj.get_point_charge_count() + if n_ptc == 0: + raise PyEFPSyntaxError('Must initialize point charges with set_point_charges') + if len(ptc) != n_ptc: + raise PyEFPSyntaxError('Invalid point charge length: {}'.format(ptc)) + + res = efpobj._efp_set_point_charge_values(len(ptc), ptc) + _result_to_error(res) + + +def set_point_charges(efpobj, ptc, coord): + """Sets arbitrary point charges (often QM atoms) interacting with the + EFP subsystem. + + Parameters + ---------- + ptc : list + (n_ptc, ) array of charge values, generally QM Z. + coord : list + (3 * n_ptc, ) or (n_ptc, 3) array (that is, flat or nested) + of XYZ coordinates [a0] of charge positions, generally QM coordinates. + + Returns + ------- + None + + """ + if len(ptc) == len(coord): + coord = sum(coord, []) + + if (len(ptc) * 3) != len(coord): + raise PyEFPSyntaxError('Invalid point charges setting: {}'.format(coord)) + + res = efpobj._efp_set_point_charges(len(ptc), ptc, coord) + _result_to_error(res) + + +def get_frag_name(efpobj, ifr=None): + """Gets system name on fragment(s) of `efpobj`. + + Parameters + ---------- + ifr : int, optional + Index of fragment (0-indexed) if not all. + + Returns + ------- + str, list of str + If `ifr`, name of fragment `ifr`. Otherwise, names of all + fragments in list. + + """ + return _get_frag_common(efpobj=efpobj, ifr=ifr, topic='name') + + +def _get_frag_common(efpobj, ifr, topic): + nfr = efpobj.get_frag_count() + + fn_mapper = { + 'name': efpobj._efp_get_frag_name, + 'charge': efpobj._efp_get_frag_charge, + 'xyzabc': efpobj._efp_get_frag_xyzabc, + 'atom_count': efpobj._efp_get_frag_atom_count, + 'multiplicity': efpobj._efp_get_frag_multiplicity, + } + + if ifr is None: + frags = [] + for fr in range(nfr): + (res, ftopic) = fn_mapper[topic](fr) + _result_to_error(res) + frags.append(ftopic) + + return frags + + else: + if ifr in range(nfr): + (res, ftopic) = fn_mapper[topic](ifr) + _result_to_error(res) + + return ftopic + else: + raise PyEFPSyntaxError('Invalid fragment index for 0-indexed {}-fragment EFP: {}'.format(nfr, ifr)) + + +def get_frag_charge(efpobj, ifr=None, zero=1e-8): + """Gets total charge on fragment(s) of `efpobj`. + + Parameters + ---------- + ifr : int, optional + Index of fragment (0-indexed) if not all. + zero : float, optional + Absolute value under which to zero charge. + + Returns + ------- + str, list of str + If `ifr`, charge of fragment `ifr`. Otherwise, charges of all + fragments in list. + + """ + chg = _get_frag_common(efpobj=efpobj, ifr=ifr, topic='charge') + if ifr is None: + return [(0.0 if math.fabs(c) < zero else c) for c in chg] + else: + if math.fabs(chg) < zero: + return 0.0 + else: + return chg + + +def get_frag_multiplicity(efpobj, ifr=None): + """Gets spin multiplicity on fragment(s) of `efpobj`. + + Parameters + ---------- + ifr : int, optional + Index of fragment (0-indexed) if not all. + + Returns + ------- + str, list of str + If `ifr`, multiplicity of fragment `ifr`. Otherwise, multiplicity + of all fragments in list. + + """ + return _get_frag_common(efpobj=efpobj, ifr=ifr, topic='multiplicity') + + +def get_frag_atom_count(efpobj, ifr=None): + """Gets atom count on fragment(s) of `efpobj`. + + Parameters + ---------- + ifr : int, optional + Index of fragment (0-indexed) if not all. + + Returns + ------- + str, list of str + If `ifr`, atom count of fragment `ifr`. Otherwise, atom counts + of all fragments in list. + + """ + return _get_frag_common(efpobj=efpobj, ifr=ifr, topic='atom_count') + + +def get_frag_atoms(efpobj, ifr): + """Gets geometry information for atoms modeled by fragment in `efpobj`. + + Parameters + ---------- + ifr : int + Index of fragment (0-indexed). + + Returns + ------- + list of dict + Each atom in fragment `ifr` has position, charge, and element + fields below in a dictionary at list index `ifr` + ``Z`` (*float*) nuclear charge. + ``label`` (*str*) atom label from EFP file, e.g., A02H2. + ``x`` (*float*) X coordinate of atom position. + ``y`` (*float*) Y coordinate of atom position. + ``z`` (*float*) Z coordinate of atom position. + ``mass`` (*float*) atom mass [amu] + ``symbol`` (*str*) atomic symbol extracted from label. + + """ + nfr = efpobj.get_frag_count() + nat = efpobj.get_frag_atom_count(ifr) + + if ifr in range(nfr): + (res, atoms) = efpobj._efp_get_frag_atoms(ifr, nat) + _result_to_error(res) + + for at in atoms: + mobj = re.match(r'\AA\d*(?P[A-Z]{1,3})\d*\Z', at['label']) + if mobj: + at['symbol'] = mobj.group('symbol').capitalize() + return atoms + else: + raise PyEFPSyntaxError('Invalid fragment index for 0-indexed {}-fragment EFP: {}'.format(nfr, ifr)) + + +def get_atoms(efpobj): + #enum efp_result res; + #size_t frag_natom, natom=0; + #double frag_chg; + #int frag_mult; + #py::list fr, frt, frcg, frmp, full_atoms; + + natom = 0 + frag_count = efpobj.get_frag_count() + frag_natom = efpobj.get_frag_atom_count() + fr = [] + full_atoms = [] + for ifr in range(frag_count): + frat = frag_natom[ifr] + + fr.append([natom, natom + frat]) + natom += frat + + pyat = efpobj.get_frag_atoms(ifr) + full_atoms.extend(pyat) + + mol_info = {} + # mol_info["units"] = "Bohr" + mol_info["input_units_to_au"] = 1.0 + mol_info["fix_com"] = True + mol_info["fix_orientation"] = True + mol_info["fix_symmetry"] = "c1" + + mol_info['fragments'] = fr + mol_info['fragment_types'] = ['Real'] * frag_count + mol_info['fragment_charges'] = efpobj.get_frag_charge() + mol_info['fragment_multiplicities'] = efpobj.get_frag_multiplicity() + mol_info['full_atoms'] = full_atoms + + return mol_info + + +def to_viz_dict(efpobj): + + pyat = efpobj.get_atoms() + for at in pyat['full_atoms']: + at['ghosted'] = False + at['at_type'] = 'efpxyz' + mobj = re.match(r'\AA\d*(?P[A-Z]{1,3})\d*\Z', at['label']) + if mobj: + at['symbol'] = mobj.group('symbol').capitalize() + at['charge'] = at['Z'] + #pyat['molecule']['fragment_charges'].append(efpobj.get_frag_charges(fr) + #pyat['molecule']['fragment_multiplicities'].append(efpobj.get_frag_multiplicity(fr) + + return pyat + + +def get_frag_xyzabc(efpobj, ifr=None): + """Get the XYZABC coordinates hint on fragment(s) from `efpobj`. + + Parameters + ---------- + ifr : int, optional + Index of fragment (0-indexed) if not all. + + Returns + ------- + list, list of list + If `ifr`, hint for fragment `ifr`. Otherwise, hints of all + fragments in list. Note that fragments inputted through POINTS + will still be returned as XYZABC. Also, fragments inputted + through XYZABC will have the angles standardized to (-pi, pi]. + + """ + return _get_frag_common(efpobj=efpobj, ifr=ifr, topic='xyzabc') + + +def to_dict(efpobj, dtype='psi4'): + molrec = {} + + nfr = efpobj.get_frag_count() + fnat = efpobj.get_frag_atom_count() + frs = functools.reduce(lambda c, x: c + [c[-1] + x], fnat, + [0])[1:] # np.cumsum(fnat) https://stackoverflow.com/a/33034961 + nat = frs[-1] + + molrec['units'] = 'Bohr' + molrec['fix_com'] = True + molrec['fix_orientation'] = True + + atommajor = efpobj.get_atoms()['full_atoms'] + geom = [] + for at in atommajor: + xyz = [at['x'], at['y'], at['z']] + geom.extend(xyz) + molrec['geom'] = geom + molrec['elea'] = [-1] * nat + molrec['elez'] = [int(at['Z']) for at in atommajor] + molrec['elem'] = [at['symbol'] for at in atommajor] + molrec['mass'] = [at['mass'] for at in atommajor] + molrec['real'] = [True] * nat + molrec['elbl'] = ['_' + at['label'].lower() for at in atommajor] + + molrec['fragment_separators'] = frs[:-1] + molrec['fragment_charges'] = efpobj.get_frag_charge() + molrec['fragment_multiplicities'] = efpobj.get_frag_multiplicity() + + def _high_spin_sum(mult_list): + mm = 1 + for m in mult_list: + mm += m - 1 + return mm + + molrec['molecular_charge'] = sum(molrec['fragment_charges']) + molrec['molecular_multiplicity'] = _high_spin_sum(molrec['fragment_multiplicities']) + molrec['provenance'] = provenance_stamp(__name__ + '.' + sys._getframe().f_code.co_name) + + molrec['fragment_files'] = [fl.lower() for fl in efpobj.get_frag_name()] + molrec['hint_types'] = ['xyzabc'] * nfr + molrec['geom_hints'] = efpobj.get_frag_xyzabc() + + return qcel.molparse.to_schema(molrec, dtype=dtype) + + +def old_to_dict(efpobj): + pysys = {} + pysys['full_fragments'] = [] + + for fr in range(efpobj.get_frag_count()): + pysys['full_fragments'].append({ + 'coordinates_hint': efpobj.get_frag_xyzabc(fr), + 'efp_type': 'xyzabc', + 'fragment_file': efpobj.get_frag_name(fr).lower(), + }) + + #pysys['molecule'] = { + # 'fix_com': True, + # 'fix_orientation': True, + # 'fix_symmetry': 'c1', + # 'fragment_charges': [], + # 'fragment_multiplicities': [], + # 'fragment_types': [], + # 'fragments': [], + # 'full_atoms': [], + # #'input_units_to_au': 1.8897261328856432, + # 'name': 'default', + # 'input_units_to_au': 1.0} + # #'units': 'Bohr'} + pysys['molecule'] = {'input_units_to_au': efpobj.input_units_to_au} + + return pysys + + +# only wrapped to throw Py exceptions +core.efp.prepare = prepare +core.efp.compute = compute + +core.efp.add_potential = add_potential +core.efp.add_fragment = add_fragment +#core.efp.add_ligand = add_ligand +core.efp.get_opts = get_opts +core.efp.set_opts = set_opts +core.efp.get_frag_count = get_frag_count +core.efp.get_energy = get_energy +core.efp.get_gradient = get_gradient +core.efp.get_pairwise_energy = get_pairwise_energy +#core.efp.set_pairwise_energy = set_pairwise_energy +core.efp.print_pairwise_energies = print_pairwise_energies +core.efp.energy_summary = energy_summary +core.efp.nuclear_repulsion_energy = nuclear_repulsion_energy +core.efp.to_viz_dict = to_viz_dict +core.efp.to_dict = to_dict +core.efp.get_frag_name = get_frag_name +core.efp.get_frag_charge = get_frag_charge +core.efp.get_frag_multiplicity = get_frag_multiplicity +core.efp.set_frag_coordinates = set_frag_coordinates +core.efp.set_point_charges = set_point_charges +core.efp.set_point_charge_coordinates = set_point_charge_coordinates +core.efp.set_point_charge_values = set_point_charge_values +core.efp.get_point_charge_count = get_point_charge_count +core.efp.get_point_charge_coordinates = get_point_charge_coordinates +core.efp.get_point_charge_values = get_point_charge_values +#core.efp.get_multipole_count = get_multipole_count +#core.efp.get_multipole_coordinates = get_multipole_coordinates +#core.efp.get_multipole_values = get_multipole_values +core.efp.get_induced_dipole_count = get_induced_dipole_count +core.efp.get_induced_dipole_coordinates = get_induced_dipole_coordinates +core.efp.get_induced_dipole_values = get_induced_dipole_values +core.efp.get_induced_dipole_conj_values = get_induced_dipole_conj_values +core.efp.get_frag_atom_count = get_frag_atom_count +core.efp.get_wavefunction_dependent_energy = get_wavefunction_dependent_energy +core.efp.set_periodic_box = set_periodic_box +core.efp.get_periodic_box = get_periodic_box +core.efp.get_frag_xyzabc = get_frag_xyzabc + +core.efp.get_frag_atoms = get_frag_atoms +core.efp.get_atoms = get_atoms +core.efp.geometry_summary = geometry_summary +core.efp.gradient_summary = gradient_summary + + +def process_units(molrec): + """From any (not both None) combination of `units` and + `input_units_to_au`, returns both quantities validated. The degree + of checking is unnecessary if coming from a molrec (prevalidated and + guaranteed to have "units"), but function is general-purpose. + + """ + units = molrec.get('units', None) + input_units_to_au = molrec.get('input_units_to_au', None) + + b2a = qcel.constants.bohr2angstroms + a2b = 1. / b2a + + def perturb_check(candidate, reference): + return (abs(candidate, reference) < 0.05) + + if units is None and input_units_to_au is not None: + if perturb_check(input_units_to_au, 1.): + funits = 'Bohr' + fiutau = input_units_to_au + elif perturb_check(input_units_to_au, a2b): + funits = 'Angstrom' + fiutau = input_units_to_au + else: + raise PyEFPSyntaxError("""No big perturbations to physical constants! {} !~= ({} or {})""".format( + input_units_to_au, 1.0, a2b)) + + elif units in ['Angstrom', 'Bohr'] and input_units_to_au is None: + funits = units + + if funits == 'Bohr': + fiutau = 1. + elif funits == 'Angstrom': + fiutau = a2b + + elif units in ['Angstrom', 'Bohr'] and input_units_to_au is not None: + expected_iutau = a2b if units == 'Angstrom' else 1. + + if perturn_check(input_units_to_au, expected_iutau): + funits = units + fiutau = input_units_to_au + else: + raise PyEFPSyntaxError("""No big perturbations to physical constants! {} !~= {}""".format( + input_units_to_au, expected_iutau)) + + else: + raise PyEFPSyntaxError('Insufficient information: {} & {}'.format(units, input_units_to_au)) + + return funits, fiutau + + +def from_dict(efp_init): + """Instantiate an EFP object from `efp_init`. + + Parameters + ---------- + efp_init : nested dict + Dictionary of prescribed format to specify EFP fragments (no QM hints). + + Returns + ------- + :py:class:`pylibefp.core.efp` + New EFP instance with fragments defined and finished off through + :py:func:`pylibefp.core.efp.prepare`. + + """ + efpobj = core.efp() + + units, input_units_to_au = process_units(efp_init) + + def hint_to_au(hint, htype, iutau): + if htype == 'xyzabc': + return [(h * iutau if idx < 3 else h) for idx, h in enumerate(hint)] + elif htype == 'points': + return [h * iutau for h in hint] + elif htype == 'atoms': + return [(h * iutau if idx % 4 != 0 else h) for idx, h in enumerate(hint)] + + for ifr, (fl, ht, gh) in enumerate(zip(efp_init['fragment_files'], efp_init['hint_types'], + efp_init['geom_hints'])): + efpobj.add_potential(fl, duplicates_ok=True) + efpobj.add_fragment(fl) + hint = hint_to_au(gh, ht, input_units_to_au) + efpobj.set_frag_coordinates(ifr, ht, hint) + + #efpobj.input_units_to_au = efp_init['input_units_to_au'] + efpobj.input_units_to_au = input_units_to_au + efpobj.prepare() + return efpobj + + +def provenance_stamp(routine: str) -> Dict[str, str]: + """Return dictionary satisfying QCSchema, + https://github.com/MolSSI/QCSchema/blob/master/qcschema/dev/definitions.py#L23-L41 + with PylibEFP's credentials for creator and version. The + generating routine's name is passed in through `routine`. + + """ + from pylibefp import __version__ + return {'creator': 'PylibEFP', 'version': __version__, 'routine': routine} diff --git a/make_conda_env.md b/make_conda_env.md new file mode 100644 index 00000000..f44b3da4 --- /dev/null +++ b/make_conda_env.md @@ -0,0 +1,9 @@ + + +### make sure torch_switch = OFF, in setup.sh ######################### + +conda create -n libefp-dev python=3.12 -y + +conda activate libefp-dev + +conda install -c conda-forge cmake ninja pybind11 pytest blas-devel numpy c-compiler cxx-compiler fortran-compiler qcelemental -y diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 1ec61b55..97525d64 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -78,13 +78,10 @@ if (APPLE) else() set(base "$ORIGIN") endif() - -set(CMAKE_INSTALL_LIBDIR "lib") file(RELATIVE_PATH relDir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${PYMOD_INSTALL_LIBDIR}/pylibefp ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) set(CMAKE_INSTALL_RPATH ${base} ${base}/${relDir} ${_dloc}) - message(STATUS "pylibefp rpath: ${CMAKE_INSTALL_RPATH}") pybind11_add_module( diff --git a/python/core.cc b/python/core.cc index ca2fa5c2..1cb806b9 100644 --- a/python/core.cc +++ b/python/core.cc @@ -36,6 +36,24 @@ std::string _efp_banner(efp* efp) { return str; } +efp_result _efp_prepare(efp* efp) { + enum efp_result res; + res = efp_prepare(efp); + return res; +} + +efp_result _efp_compute(efp* efp, int do_gradient) { + enum efp_result res; + res = efp_compute(efp, do_gradient); + return res; +} + +efp_result _efp_add_ligand(efp* efp, int ligand_index) { + enum efp_result res; + res = efp_add_ligand(efp, ligand_index); + return res; +} + py::tuple _efp_get_frag_name(efp* efp, size_t frag_idx) { enum efp_result res; char buffer[80]; @@ -51,7 +69,18 @@ efp_result _efp_set_frag_coordinates(efp* efp, size_t frag_idx, efp_coord_type c enum efp_result res; double* ccoords = NULL; - ccoords = new double[12]; // room for xyzabc (6), points (9), or rotmat (12) + // need to know how many atoms are in fragment for 'atoms' ctype + size_t n_atom = 0; + res = efp_get_frag_atom_count(efp, frag_idx, &n_atom); + + switch (ctype) { + case EFP_COORD_TYPE_ATOMS: + ccoords = new double[3*n_atom]; + break; + default: + ccoords = new double[12]; + break; + } double* pcoords = ccoords; for (auto itm : coord) *pcoords++ = itm.cast(); @@ -135,6 +164,33 @@ py::tuple _efp_get_gradient(efp* efp, size_t n_frag) { return rets; } +// SKP + +py::list _efp_get_pairwise_energy(efp* efp, size_t n_frag) { + enum efp_result res; + + std::vector pair_energies(n_frag); + res = efp_get_pairwise_energy(efp, pair_energies.data()); + + py::list py_energies; + + for (size_t i = 0; i < n_frag; ++i) { + py::dict energy; + energy["electrostatic"] = pair_energies[i].electrostatic; + energy["exchange_repulsion"] = pair_energies[i].exchange_repulsion; + energy["polarization"] = pair_energies[i].polarization; + energy["dispersion"] = pair_energies[i].dispersion; + energy["charge_penetration"] = pair_energies[i].charge_penetration; + + double total = pair_energies[i].electrostatic + pair_energies[i].exchange_repulsion + + pair_energies[i].polarization + pair_energies[i].dispersion + pair_energies[i].charge_penetration; + energy["total"] = total; + py_energies.append(energy); + } + + return py_energies; +} + py::tuple _efp_get_frag_count(efp* efp) { enum efp_result res; size_t n_frag = 0; @@ -171,6 +227,7 @@ py::tuple _efp_get_periodic_box(efp* efp) { return rets; } +/* py::tuple _efp_get_multipole_count(efp* efp) { enum efp_result res; size_t n_mult = 0; @@ -212,7 +269,7 @@ py::tuple _efp_get_multipole_values(efp* efp, size_t n_mult) { py::tuple rets = py::make_tuple(res, mult); return rets; } - +*/ py::tuple _efp_get_induced_dipole_count(efp* efp) { enum efp_result res; size_t n_dip = 0; @@ -453,6 +510,7 @@ efp_result cwrapped_field_fn(size_t n_pt, const double* xyz, double* field, void return EFP_RESULT_SUCCESS; } + void _efp_set_electron_density_field_fn(efp* efp, py::function fn) { field_fn_callback = fn; efp_set_electron_density_field_fn(efp, cwrapped_field_fn); @@ -489,7 +547,7 @@ void _clean(efp* efp) { PYBIND11_MODULE(core, m) { m.doc() = "Python wrapping of parallel implementation of the Effective Fragment Potential (EFP) method"; - m.attr("__copyright__") = py::str("Copyright (c) 2017-2019 The Psi4 Developers"); + m.attr("__copyright__") = py::str("Copyright (c) 2017-2024 The Psi4 Developers, 2024-2025 The LibEFP Developers"); py::exception(m, "libefpException"); // clang-format off @@ -514,8 +572,21 @@ PYBIND11_MODULE(core, m) { .value("EFP_TERM_AI_DISP", EFP_TERM_AI_DISP, "Ab initio/EFP dispersion, reserved for future.") .value("EFP_TERM_AI_XR", EFP_TERM_AI_XR, "Ab initio/EFP exchange repulsion, reserved for future.") .value("EFP_TERM_AI_CHTR", EFP_TERM_AI_CHTR, "Ab initio/EFP charge transfer, reserved for future.") + .value("EFP_TERM_QQ", EFP_TERM_QQ, "MM-like charge-charge coulomb interaction") // SKP + .value("EFP_TERM_LJ", EFP_TERM_LJ, "MM-like Lennard-Jones interaction") // SKP + .value("EFP_TERM_AI_QQ", EFP_TERM_AI_QQ, "QM/MM coulomb interaction with MM charges") // SKP .export_values(); - +// ============= SKP addition ========================== // + py::enum_(m, "efp_special_term", py::arithmetic(), "Flags to specify EFP energy terms for a special fragment") + .value("EFP_SPEC_TERM_ELEC", EFP_SPEC_TERM_ELEC, "EFP/EFP electrostatics.") + .value("EFP_SPEC_TERM_POL", EFP_SPEC_TERM_POL, "EFP/EFP polarization.") + .value("EFP_SPEC_TERM_DISP", EFP_SPEC_TERM_DISP, "EFP/EFP dispersion.") + .value("EFP_SPEC_TERM_XR", EFP_SPEC_TERM_XR, "EFP/EFP exchange repulsion.") + .value("EFP_SPEC_TERM_CHTR", EFP_SPEC_TERM_CHTR, "EFP/EFP charge transfer, reserved for future.") + .value("EFP_SPEC_TERM_QQ", EFP_SPEC_TERM_QQ, "MM-like charge-charge coulomb interaction") + .value("EFP_SPEC_TERM_LJ", EFP_SPEC_TERM_LJ, "MM-like Lennard-Jones interaction") + .export_values(); +//====================================================== // py::enum_(m, "efp_disp_damp", "Fragment-fragment dispersion damping type") .value("EFP_DISP_DAMP_OVERLAP", EFP_DISP_DAMP_OVERLAP, "Overlap-based damping (default).") .value("EFP_DISP_DAMP_TT", EFP_DISP_DAMP_TT, "Tang-Toennies damping.") @@ -537,6 +608,7 @@ PYBIND11_MODULE(core, m) { .value("EFP_COORD_TYPE_XYZABC", EFP_COORD_TYPE_XYZABC, "Coordinates of center of mass of a fragment and Euler angles.") .value("EFP_COORD_TYPE_POINTS", EFP_COORD_TYPE_POINTS, "Coordinates of three points belonging to a fragment.") .value("EFP_COORD_TYPE_ROTMAT", EFP_COORD_TYPE_ROTMAT, "Coordinates of fragment center of mass and its rotation matrix.") + .value("EFP_COORD_TYPE_ATOMS", EFP_COORD_TYPE_ATOMS, "Coordinates of all fragment atoms.") .export_values(); @@ -545,20 +617,38 @@ PYBIND11_MODULE(core, m) { .value("EFP_POL_DRIVER_DIRECT", EFP_POL_DRIVER_DIRECT, "Direct solution of polarization equations.") .export_values(); + py::enum_(m, "efp_symm_frag", "Specifies which fragments are considered identical by symmetry") + .value("EFP_SYMM_FRAG_FRAG", EFP_SYMM_FRAG_FRAG, "All same fragments are symmetry-identical (default.") + .value("EFP_SYMM_FRAG_LIST", EFP_SYMM_FRAG_LIST, "Symmetric fragments are given in a list (not implemented).") + .export_values(); + py::class_(m, "efp_opts", "Options controlling EFP computation") .def(py::init()) .def_readwrite("terms", &efp_opts::terms, "Specifies which energy terms to compute.") + .def_readwrite("special_terms", &efp_opts::special_terms, "Terms for a special fragment - typically QM or ML fragment") // SKP .def_readwrite("disp_damp", &efp_opts::disp_damp, "Dispersion damping type (see #efp_disp_damp).") .def_readwrite("elec_damp", &efp_opts::elec_damp, "Electrostatic damping type (see #efp_elec_damp).") .def_readwrite("pol_damp", &efp_opts::pol_damp, "Polarization damping type (see #efp_pol_damp).") + .def_readwrite("pol_damp_tt_value", &efp_opts::pol_damp_tt_value, "Polarization damping tt parameter value.") .def_readwrite("pol_driver", &efp_opts::pol_driver, "Driver used to find polarization induced dipoles.") .def_readwrite("enable_pbc", &efp_opts::enable_pbc, "Enable periodic boundary conditions if nonzero.") + .def_readwrite("enable_elpot", &efp_opts::enable_elpot, "Enable switching off elpot contribution for custom torch gradient.") .def_readwrite("enable_cutoff", &efp_opts::enable_cutoff, "Enable frag-fraginteraction cutoff if nonzero.") - .def_readwrite("swf_cutoff", &efp_opts::swf_cutoff, "Cutoff distance for frag-frag interactions."); + .def_readwrite("swf_cutoff", &efp_opts::swf_cutoff, "Cutoff distance for frag-frag interactions.") + .def_readwrite("xr_cutoff", &efp_opts::xr_cutoff, "Cutoff distance for exchange-repulsion calculations.") + .def_readwrite("enable_pairwise", &efp_opts::enable_pairwise, "Enable ligand-fragment energy decomposition from total system") // SKP + .def_readwrite("ligand", &efp_opts::ligand, "Ligand number") // SKP + .def_readwrite("special_fragment", &efp_opts::special_fragment, "Index of a special (QM or ML) fragment") // SKP + .def_readwrite("symmetry", &efp_opts::symmetry, "Sets system symmetry option") // SKP + .def_readwrite("symm_frag", &efp_opts::symm_frag, "Specifies symmetric elements of the crystal lattice. Default each unique fragment") + .def_readwrite("update_params", &efp_opts::update_params, "Enables updating (shifting) library fragment parameters to match fragment geometry. Default 0 (no update). Not implemented.") + .def_readwrite("update_params_cutoff", &efp_opts::update_params_cutoff, "Cutoff when updating parameters is \"safe\". Default 0.0 (never safe).") + .def_readwrite("print", &efp_opts::print, "Level of print out."); py::class_(m, "efp_energy", "EFP energy terms") .def(py::init()) .def_readwrite("electrostatic", &efp_energy::electrostatic, "EFP/EFP electrostatic energy.") + .def_readwrite("ai_electrostatic", &efp_energy::ai_electrostatic, "AI/EFP electrostatic energy.") .def_readwrite("charge_penetration", &efp_energy::charge_penetration, "Charge penetration energy from" "overlap-based electrostatic damping." "Zero if overlap-based damping is turned" @@ -570,20 +660,59 @@ PYBIND11_MODULE(core, m) { "Polarization is computed self-consist-" "ently so it can't be separated into" "EFP/EFP and AI/EFP parts.") + .def_readwrite("exs_polarization", &efp_energy::exs_polarization, "Separate storage for polarization corresponding to the excited/correlated state." + "Relevant for excited state QM/EFP calculations.") + .def_readwrite("ai_polarization", &efp_energy::ai_polarization, "Polarization energy storage for pairwise AI/EFP analysis.") .def_readwrite("dispersion", &efp_energy::dispersion, "EFP/EFP dispersion energy.") .def_readwrite("ai_dispersion", &efp_energy::ai_dispersion, "AI/EFP dispersion energy.") .def_readwrite("exchange_repulsion", &efp_energy::exchange_repulsion, "EFP/EFP exchange-repulsion energy.") - .def_readwrite("total", &efp_energy::total, "Sum of all the above energy terms."); + .def_readwrite("qq", &efp_energy::qq, "EFP/EFP charge-charge energy.") + .def_readwrite("lj", &efp_energy::lj, "EFP/EFP lennard-jones energy.") + .def_readwrite("total", &efp_energy::total, "Sum of all the above energy terms."); py::class_(m, "efp_atom", "EFP atom info") .def(py::init()) - //.def_readonly("label", &efp_atom::label, "Atom label.") // char label[32] +// .def_readwrite("label", &efp_atom::label, "Atom label.") // char label[32] .def_readwrite("x", &efp_atom::x, "X coordinate of atom position.") .def_readwrite("y", &efp_atom::y, "Y coordinate of atom position.") .def_readwrite("z", &efp_atom::z, "Z coordinate of atom position.") + .def_readwrite("gx", &efp_atom::gx, "X component of gradient.") + .def_readwrite("gy", &efp_atom::gy, "Y component of gradient.") + .def_readwrite("gz", &efp_atom::gz, "Z component of gradient.") .def_readwrite("mass", &efp_atom::mass, "Atom mass.") - .def_readwrite("znuc", &efp_atom::znuc, "Nuclear charge."); - // clang-format on + .def_readwrite("znuc", &efp_atom::znuc, "Nuclear charge.") + .def_readwrite("mm_charge", &efp_atom::mm_charge, "Classical charge.") + .def_readwrite("sigma", &efp_atom::sigma, "vdW parameter.") + .def_readwrite("epsilon", &efp_atom::epsilon, "vdW parameter."); +// .def_readwrite("ff_label", &efp_atom::ff_label, "Force field atom type."); + +/** + py::class_(m, "efp_mult_pt", "EFP Multipole point for working with external programs") + .def(py::init()) + .def_readwrite("x", &efp_mult_pt::x, "X coordinate.") + .def_readwrite("y", &efp_mult_pt::y, "Y coordinate.") + .def_readwrite("z", &efp_mult_pt::z, "Z coordinate.") + .def_readwrite("znuc", &efp_mult_pt::znuc, "Nuclear charge.") + .def_readwrite("monopole", &efp_mult_pt::monopole, "Monopole.") + .def_readwrite("dipole", &efp_mult_pt::dipole, "Dipole.") // array! + .def_readwrite("quadrupole", &efp_mult_pt::quadrupole, "Quadrupole.") + .def_readwrite("octupole", &efp_mult_pt::octupole, "Octupole.") + .def_readwrite("rank", &efp_mult_pt::rank, "Highest non-zero multipole: 0 - monopole, 1 - dipole, 2 - quad, 3 - oct.") + .def_readwrite("screen0", &efp_mult_pt::screen0, "AI-EFP screening parameter.") + .def_readwrite("if_screen", &efp_mult_pt::if_screen, "If screen0 parameter exists and meaningful."); + + py::class_(m, "efp_pol_pt", "EFP polarizability point for working with external programs") + .def(py::init()) + .def_readwrite("x", &efp_pol_pt::x, "X coordinate.") + .def_readwrite("y", &efp_pol_pt::y, "Y coordinate.") + .def_readwrite("z", &efp_pol_pt::z, "Z coordinate.") + .def_readwrite("indip", &efp_pol_pt::indip, "Induced dipole.") // array! + .def_readwrite("indipconj", &efp_pol_pt::indipconj, "Conjugated induced dipole.") // array! + .def_readwrite("indip_gs", &efp_pol_pt::indip_gs, "Induced dipole of the ground electronic state.") // array! + .def_readwrite("indipconj_gs", &efp_pol_pt::indipconj_gs, "Conjugated induced dipole of the ground electronic state.") // array! + .def_readwrite("ai_field", &efp_pol_pt::ai_field, "Field due to QM wavefunction."); // array! +// clang-format on +**/ py::class_>(m, "efp", py::dynamic_attr(), "Main libefp opaque structure") // dynamic_attr for stashing input_units_to_au @@ -593,6 +722,7 @@ PYBIND11_MODULE(core, m) { .def("_efp_get_opts", &efp_get_opts, "Gets currently set computation options") .def("_efp_add_potential", &efp_add_potential, "Wrapped adds EFP potential from full file path") .def("_efp_add_fragment", &efp_add_fragment, "Wrapped adds a new fragment to the EFP subsystem") + .def("_efp_add_ligand", &efp_add_ligand, "Wrapped adds a a ligand fragment to the system") .def("_efp_prepare", &efp_prepare, "Wrapped prepares the calculation") .def("set_electron_density_field_fn", &_efp_set_electron_density_field_fn, "Sets the callback function which computes electric field from electrons in ab initio subsystem") @@ -633,12 +763,12 @@ PYBIND11_MODULE(core, m) { .def("_efp_get_frag_charge", &_efp_get_frag_charge, "Gets total charge on fragment", py::arg("frag_idx")) .def("_efp_get_frag_multiplicity", &_efp_get_frag_multiplicity, "Gets spin multiplicity on fragment") // Multipoles & Induced Dipoles - .def("_efp_get_multipole_count", &_efp_get_multipole_count, - "Wrapped gets total number of multipoles from EFP electrostatics") - .def("_efp_get_multipole_coordinates", &_efp_get_multipole_coordinates, - "Wrapped gets coordinates of electrostatics multipoles") - .def("_efp_get_multipole_values", &_efp_get_multipole_values, - "Wrapped gets electrostatics multipoles from EFP fragments") + //.def("_efp_get_multipole_count", &_efp_get_multipole_count, + // "Wrapped gets total number of multipoles from EFP electrostatics") + //.def("_efp_get_multipole_coordinates", &_efp_get_multipole_coordinates, + // "Wrapped gets coordinates of electrostatics multipoles") + //.def("_efp_get_multipole_values", &_efp_get_multipole_values, + // "Wrapped gets electrostatics multipoles from EFP fragments") .def("_efp_get_induced_dipole_count", &_efp_get_induced_dipole_count, "Wrapped gets the number of polarization induced dipoles") .def("_efp_get_induced_dipole_coordinates", &_efp_get_induced_dipole_coordinates, @@ -649,7 +779,9 @@ PYBIND11_MODULE(core, m) { "Wrapped gets values of polarization conjugated induced dipoles") .def("_efp_get_energy", &efp_get_energy, "Gets computed energy components") .def("_efp_get_gradient", &_efp_get_gradient, "Gets computed EFP energy gradient") - .def("_efp_get_frag_count", &_efp_get_frag_count, "Gets the number of fragments in this computation") + .def("_efp_get_pairwise_energy", &_efp_get_pairwise_energy, "Gets pairwise energies") + .def("_efp_set_symmlist", &efp_set_symmlist, "Prepares information for computing symmetric crystals") + .def("_efp_get_frag_count", &_efp_get_frag_count, "Gets the number of fragments in this computation") .def("_efp_get_frag_name", &_efp_get_frag_name, "Gets the name of the specified effective fragment") .def("_efp_get_frag_atom_count", &_efp_get_frag_atom_count, "Gets the number of atoms on fragment") .def("_efp_get_frag_atoms", &_efp_get_frag_atoms, diff --git a/python/py.sh b/python/py.sh new file mode 100755 index 00000000..e515b664 --- /dev/null +++ b/python/py.sh @@ -0,0 +1,8 @@ +rm -rf build +mkdir build +cd build + +cmake -DCMAKE_INSTALL_PREFIX=$LIBEFP_DIR -DCMAKE_PREFIX_PATH="$CONDA_PREFIX;$LIBEFP_DIR" .. + +make VERBOSE=1 +make install diff --git a/python/wrapper.py b/python/wrapper.py index 57a5ddbf..b6aad04c 100644 --- a/python/wrapper.py +++ b/python/wrapper.py @@ -30,6 +30,8 @@ 'elec': 'elst', 'pol': 'ind', 'xr': 'exch', + 'qq': 'charge_charge', + 'lj': 'lennard-jones', 'elec_damp': 'elst_damping', 'pol_damp': 'ind_damping', 'disp_damp': 'disp_damping', @@ -39,6 +41,7 @@ 'ai_disp': 'qm_disp', 'ai_xr': 'qm_exch', 'ai_chtr': 'qm_chtr', + 'ai_qq': 'qm_qq', }, } @@ -94,10 +97,11 @@ def compute(efpobj, do_gradient=False): None """ + # efp_compute already does pairwise, enable_pairwise just saves the pairwise info + # res = efpobj._efp_compute(do_gradient) _result_to_error(res) - def add_potential(efpobj, potential, fragpath='LIBRARY', duplicates_ok=False): """Searches for EFP fragments and adds to `efpobj`. @@ -130,6 +134,8 @@ def add_potential(efpobj, potential, fragpath='LIBRARY', duplicates_ok=False): if present. """ + + print('POTENTIAL ', potential) paths = [] library_paths = [] for pth in fragpath.split(os.pathsep): @@ -137,10 +143,12 @@ def add_potential(efpobj, potential, fragpath='LIBRARY', duplicates_ok=False): for lst in [paths, library_paths]: for spth in '@libefp_FRAGLIB_DIRS@'.split(';'): lst.append(spth) - lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib') - lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib/databases') - lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib') - lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib/databases') + #lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/share/libefp/fraglib/databases') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib/databases') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib') + #lst.append('/opt/anaconda1anaconda2anaconda3/Library/share/libefp/fraglib/databases') for spth in '@FRAGLIB_DATADIRS@'.split(';'): lst.append(str((Path('@CMAKE_CURRENT_SOURCE_DIR@') / '..' / spth).resolve())) else: @@ -211,6 +219,23 @@ def add_fragment(efpobj, fragments): _result_to_error(res, frag) +#def add_ligand(efpobj, ligand_index): +# """Adds ligand to `efpobj` +# +# Parameters +# ---------- +# ligand_index : index of the ligand +# +# Returns +# ------- +# None +# +# """ +# res = efpobj._efp_add_ligand(ligand_index) +# _result_to_error(res) + + + def get_opts(efpobj, label='libefp'): """Returns the options state of *efpobj* as a dictionary. @@ -238,7 +263,17 @@ def get_opts(efpobj, label='libefp'): dopts['disp'] = bool(opts.terms & core.efp_term.EFP_TERM_DISP) dopts['xr'] = bool(opts.terms & core.efp_term.EFP_TERM_XR) dopts['chtr'] = bool(opts.terms & core.efp_term.EFP_TERM_CHTR) - + dopts['qq'] = bool(opts.terms & core.efp_term.EFP_TERM_QQ) # SKP + dopts['lj'] = bool(opts.terms & core.efp_term.EFP_TERM_LJ) # SKP + + dopts['spec_elec'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_ELEC) # SKP + dopts['spec_pol'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_POL) # SKP + dopts['spec_disp'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_DISP) # SKP + dopts['spec_xr'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_XR) # SKP + dopts['spec_chtr'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_CHTR) # SKP + dopts['spec_qq'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_QQ) # SKP + dopts['spec_lj'] = bool(opts.special_terms & core.efp_special_term.EFP_SPEC_TERM_LJ) # SKP + dopts['elec_damp'] = { core.EFP_ELEC_DAMP_SCREEN: 'screen', core.EFP_ELEC_DAMP_OVERLAP: 'overlap', @@ -256,9 +291,23 @@ def get_opts(efpobj, label='libefp'): core.EFP_DISP_DAMP_OFF: 'off', }[opts.disp_damp] + dopts['pol_damp_tt_value'] = opts.pol_damp_tt_value dopts['enable_pbc'] = bool(opts.enable_pbc) + dopts['enable_elpot'] = bool(opts.enable_elpot) dopts['enable_cutoff'] = bool(opts.enable_cutoff) dopts['swf_cutoff'] = opts.swf_cutoff + dopts['xr_cutoff'] = opts.xr_cutoff + dopts['special_fragment'] = opts.special_fragment + dopts['enable_pairwise'] = bool(opts.enable_pairwise) # SKP + dopts['symmetry'] = bool(opts.symmetry) # SKP + + dopts['symm_frag'] = { + core.EFP_SYMM_FRAG_FRAG: 'frag', + core.EFP_SYMM_FRAG_LIST: 'list', + }[opts.symm_frag] + + dopts['ligand'] = opts.ligand # SKP + dopts['print'] = opts.print dopts['pol_driver'] = { core.EFP_POL_DRIVER_ITERATIVE: 'iterative', @@ -270,6 +319,7 @@ def get_opts(efpobj, label='libefp'): dopts['ai_disp'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_DISP) dopts['ai_xr'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_XR) dopts['ai_chtr'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_CHTR) + dopts['ai_qq'] = bool(opts.terms & core.efp_term.EFP_TERM_AI_QQ) # SKP return _rekey(dopts, label=label) @@ -302,8 +352,11 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): """ # warn on stray dopts keys allowed = [ - 'elec', 'pol', 'disp', 'xr', 'elec_damp', 'pol_damp', 'disp_damp', 'enable_pbc', 'enable_cutoff', 'swf_cutoff', - 'pol_driver', 'ai_elec', 'ai_pol' + 'elec', 'pol', 'disp', 'xr', 'elec_damp', 'pol_damp', 'disp_damp', + 'pol_damp_tt_value', 'enable_pbc', 'enable_elpot', 'enable_cutoff', 'swf_cutoff', 'xr_cutoff', + 'pol_driver', 'ai_elec', 'ai_pol', 'enable_pairwise', 'ligand', 'symmetry', 'symm_frag', + 'spec_elec', 'spec_pol', 'spec_disp', 'spec_xr', 'spec_chtr', 'ai_qq', 'qq', 'lj', 'special_fragment', + 'spec_qq', 'spec_lj', 'print' ] label_allowed = [_lbtl[label].get(itm, itm) for itm in allowed] for key in dopts.keys(): @@ -314,8 +367,17 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): # prepare base options state for dopts opts = core.efp_opts() + # default values of parameters if append == 'libefp': - pass + opts.ligand = -100 + opts.special_fragment = -100 + #opts.terms |= core.efp_term.EFP_TERM_ELEC + #opts.terms |= core.efp_term.EFP_TERM_POL + #opts.terms |= core.efp_term.EFP_TERM_DISP + #opts.terms |= core.efp_term.EFP_TERM_XR + opts.elec_damp = core.EFP_ELEC_DAMP_SCREEN + opts.pol_damp = core.EFP_POL_DAMP_TT + opts.disp_damp = core.EFP_DISP_DAMP_OVERLAP elif append == 'psi': opts.terms |= core.efp_term.EFP_TERM_ELEC opts.terms |= core.efp_term.EFP_TERM_POL @@ -326,6 +388,8 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): opts.disp_damp = core.EFP_DISP_DAMP_OVERLAP opts.terms |= core.efp_term.EFP_TERM_AI_ELEC opts.terms |= core.efp_term.EFP_TERM_AI_POL + opts.ligand = -100 + opts.special_fragment = -100 #elif append == 'qchem': # # q-chem and psi4 have different defaults for at least this option # opts.disp_damp = core.EFP_DISP_DAMP_TT @@ -345,7 +409,7 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): else: _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) - + topic = _lbtl[label].get('pol', 'pol') if topic in dopts: if dopts[topic] in trues: @@ -375,7 +439,89 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): else: _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +#========== SKP changes ======================================================================# + topic = _lbtl[label].get('qq', 'qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('lj', 'lj') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_LJ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_LJ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_qq', 'spec_qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_lj', 'spec_lj') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_LJ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_LJ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_elec', 'spec_elec') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_ELEC + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_ELEC + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('spec_pol', 'spec_pol') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_POL + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_POL + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + topic = _lbtl[label].get('spec_xr', 'spec_xr') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_XR + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_XR + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + + topic = _lbtl[label].get('spec_disp', 'spec_disp') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_special_term.EFP_SPEC_TERM_DISP + elif dopts[topic] in falses: + opts.terms &= ~core.efp_special_term.EFP_SPEC_TERM_DISP + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + +#================================================================================================# # may be enabled in a future libefp release # topic = _lbtl[label].get('chtr', 'chtr') @@ -424,6 +570,67 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + topic = _lbtl[label].get('enable_elpot', 'enable_elpot') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_elpot = 1 + elif dopts[topic] in falses: + opts.enable_elpot = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('symmetry', 'symmetry') + if topic in dopts: + if dopts[topic] in trues: + opts.symmetry = 1 + elif dopts[topic] in falses: + opts.symmetry = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) + + topic = _lbtl[label].get('symm_frag', 'symm_frag') + if topic in dopts: + try: + opts.symm_frag = { + 'frag': core.EFP_SYMM_FRAG_FRAG, + 'list': core.EFP_SYMM_FRAG_LIST, + }[dopts[topic].lower()] + except KeyError: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [frag/list] {}: {}'.format(topic, dopts[topic])) + + # PAIRWISE - SKP + topic = _lbtl[label].get('enable_pairwise', 'enable_pairwise') + if topic in dopts: + if dopts[topic] in trues: + opts.enable_pairwise = 1 + elif dopts[topic] in falses: + opts.enable_pairwise = 0 + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +# LIGAND NUMBER - SKP + topic = _lbtl[label].get('ligand', 'ligand') + if topic in dopts: + ligand_idx = dopts[topic] + if not isinstance(ligand_idx, int): + raise TypeError(f"ligand value must be an integer, got: {ligand_idx}") + if ligand_idx >= efpobj.get_frag_count(): + raise ValueError(f"Invalid ligand index: {ligand_idx}, only {efpobj.get_frag_count()} fragments present.") + opts.ligand = ligand_idx + +# SPECIAL-FRAGMENT NUMBER - SKP + topic = _lbtl[label].get('special_fragment', 'special_fragment') + if topic in dopts: + special_frag_idx = dopts[topic] + if not isinstance(special_frag_idx, int): + raise TypeError(f"special_fragment value must be an integer, got: {special_frag_idx}") + if special_frag_idx >= efpobj.get_frag_count(): + raise ValueError(f"Invalid special_fragment index: {special_frag_idx}, only {efpobj.get_frag_count()} fragments present.") + opts.special_fragment = special_frag_idx + topic = _lbtl[label].get('enable_cutoff', 'enable_cutoff') if topic in dopts: if dopts[topic] in trues: @@ -438,6 +645,14 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): if topic in dopts: opts.swf_cutoff = float(dopts[topic]) + topic = _lbtl[label].get('xr_cutoff', 'xr_cutoff') + if topic in dopts: + opts.xr_cutoff = float(dopts[topic]) + + topic = _lbtl[label].get('print', 'print') + if topic in dopts: + opts.print = int(dopts[topic]) + topic = _lbtl[label].get('pol_driver', 'pol_driver') if topic in dopts: try: @@ -449,6 +664,12 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, 'invalid value for [iterative/direct] {}: {}'.format(topic, dopts[topic])) + topic = _lbtl[label].get('pol_damp_tt_value', 'pol_damp_tt_value') + if topic in dopts: + opts.pol_damp_tt_value = float(dopts[topic]) + else: + opts.pol_damp_tt_value = 0.6 # libefp default set in efpmd + topic = _lbtl[label].get('ai_elec', 'ai_elec') if topic in dopts: if dopts[topic] in trues: @@ -468,16 +689,40 @@ def set_opts(efpobj, dopts, label='libefp', append='libefp'): else: _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) - +#=================== SKP addition ===================================================# + topic = _lbtl[label].get('ai_qq', 'ai_qq') + if topic in dopts: + if dopts[topic] in trues: + opts.terms |= core.efp_term.EFP_TERM_AI_QQ + elif dopts[topic] in falses: + opts.terms &= ~core.efp_term.EFP_TERM_AI_QQ + else: + _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, + 'invalid value for [T/F] {}: {}'.format(topic, dopts[topic])) +#======================================================================================# # may be enabled in a future libefp release # topic = _lbtl[label].get('ai_disp', 'ai_disp') # topic = _lbtl[label].get('ai_xr', 'ai_xr') # topic = _lbtl[label].get('ai_chtr', 'ai_chtr') +# set some defaults + if opts.xr_cutoff == 0 and opts.enable_cutoff == 1: + opts.xr_cutoff = opts.swf_cutoff + + # set computed options state res = efpobj._efp_set_opts(opts) _result_to_error(res) + # we need to initialize the ligand structure if pairwise calcs are requested + # do it here - there is no other time before compute starts... + if opts.enable_pairwise == 1 and opts.ligand >= 0: + efpobj._efp_add_ligand(opts.ligand) + + # prepares symmetry info for symmetric crystal calculations + res = efpobj._efp_set_symmlist() + _result_to_error(res) + return efpobj.get_opts(label=label) @@ -503,11 +748,16 @@ def set_periodic_box(efpobj, xyz, alpha=90.0, beta=90.0, gamma=90.0): Parameters alpha, beta, and gamma added. """ - if len(xyz) != 3: + + if len(xyz) == 3: + res = efpobj._efp_set_periodic_box(xyz[0], xyz[1], xyz[2], alpha, beta, gamma) + _result_to_error(res) + elif len(xyz) == 6: + res = efpobj._efp_set_periodic_box(xyz[0], xyz[1], xyz[2], xyz[3], xyz[4], xyz[5]) + _result_to_error(res) + else : raise PyEFPSyntaxError('Invalid periodic box setting: {}'.format(xyz)) - res = efpobj._efp_set_periodic_box(xyz[0], xyz[1], xyz[2], alpha, beta, gamma) - _result_to_error(res) (res, xyzabc) = efpobj._efp_get_periodic_box() _result_to_error(res) @@ -600,128 +850,177 @@ def get_energy(efpobj, label='libefp'): 'xr': ene.exchange_repulsion, 'pol': ene.polarization, 'disp': ene.dispersion, + 'qq': ene.qq, + 'lj':ene.lj, } return _rekey(energies, label=label) -def get_frag_count(efpobj): - """Gets the number of fragments in `efpobj` computation. +def print_pairwise_energies(efpobj): + """Prints pairwise energy between ligand and all fragments.""" - Returns - ------- - int - Number of fragments in calculation. + ligand_index = efpobj.get_opts().get("ligand", 0) + nfrag = efpobj.get_frag_count() - """ - (res, nfrag) = efpobj._efp_get_frag_count() - _result_to_error(res) + energies = efpobj._efp_get_pairwise_energy(nfrag) + + ene_elec = 0.0 + ene_pol = 0.0 + ene_disp = 0.0 + ene_xr = 0.0 + ene_chpn = 0.0 + ene_total = 0.0 + for i in range(nfrag): + if i == ligand_index: + continue + + print(f"\nPAIRWISE ENERGY BETWEEN FRAGMENT {i} AND LIGAND {ligand_index}") + energy = energies[i] + print(f"{'ELECTROSTATIC':>40} {energy['electrostatic']:16.10f}") + print(f"{'POLARIZATION':>40} {energy['polarization']:16.10f}") + print(f"{'DISPERSION':>40} {energy['dispersion']:16.10f}") + print(f"{'EXCHANGE REPULSION':>40} {energy['exchange_repulsion']:16.10f}") + print(f"{'CHARGE PENETRATION':>40} {energy['charge_penetration']:16.10f}") + print(f"{'TOTAL':>40} {energy['total']:16.10f}") + print("------------------------------------------------------------") + + ene_elec += energy['electrostatic'] + ene_pol += energy['polarization'] + ene_disp += energy['dispersion'] + ene_xr += energy['exchange_repulsion'] + ene_chpn += energy['charge_penetration'] + ene_total += energy['total'] + + print(f"\nTOTAL PAIRWISE ENERGY OF LIGAND {ligand_index}") + print(f"{'ELECTROSTATIC':>40} {ene_elec:16.10f}") + print(f"{'POLARIZATION':>40} {ene_pol:16.10f}") + print(f"{'DISPERSION':>40} {ene_disp:16.10f}") + print(f"{'EXCHANGE REPULSION':>40} {ene_xr:16.10f}") + print(f"{'CHARGE PENETRATION':>40} {ene_chpn:16.10f}") + print(f"{'TOTAL':>40} {ene_total:16.10f}") + print("------------------------------------------------------------") + print("------------------------------------------------------------") - return nfrag -def get_multipole_count(efpobj): - """Gets the number of multipoles in `efpobj` computation. +def get_frag_count(efpobj): + """Gets the number of fragments in `efpobj` computation. Returns ------- int - Total number of multipoles from electrostatics calculation. - - """ - (res, nmult) = efpobj._efp_get_multipole_count() - _result_to_error(res) - - return nmult - - -def get_multipole_coordinates(efpobj, verbose=1): - """Gets the coordinates of `efpobj` electrostatics multipoles. - - Parameters - ---------- - verbose : int, optional - Whether to print out the multipole coordinates. 0: no printing. 1: - print charges and dipoles. 2: additionally print quadrupoles - and octupoles. - - Returns - ------- - list - ``3 n_mult`` (flat) array of multipole locations. - - Examples - -------- - - >>> # Use with NumPy - >>> n_mult = efpobj.get_multipole_count() - >>> xyz_mult = np.asarray(efpobj.get_multipole_coordinates()).reshape(n_mult, 3) - - """ - nmult = efpobj.get_multipole_count() - (res, xyz) = efpobj._efp_get_multipole_coordinates(nmult) - _result_to_error(res) - - if verbose >= 1: - xyz3 = list(map(list, zip(*[iter(xyz)] * 3))) - - text = '\n ==> EFP Multipole Coordinates <==\n\n' - for mu in range(nmult): - text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *xyz3[mu]) - print(text) - - return xyz - - -def get_multipole_values(efpobj, verbose=1): - """Gets the computed per-point multipoles of `efpobj`. - - Parameters - ---------- - verbose : int, optional - Whether to print out the multipole arrays. 0: no printing. 1: - print charges and dipoles. ``2``: additionally print quadrupoles - and octupoles. - - Returns - ------- - list - ``20 n_mult`` (flat) array of per-point multipole values including - charges + dipoles + quadrupoles + octupoles. - Dipoles stored as x, y, z. - Quadrupoles stored as xx, yy, zz, xy, xz, yz. - Octupoles stored as xxx, yyy, zzz, xxy, xxz, xyy, yyz, xzz, yzz, xyz. - - Examples - -------- - >>> # Use with NumPy - >>> n_mult = efpobj.get_multipole_count() - >>> val_mult = np.asarray(efpobj.get_multipole_values()).reshape(n_mult, 20) + Number of fragments in calculation. """ - nmult = efpobj.get_multipole_count() - (res, mult) = efpobj._efp_get_multipole_values(nmult) + (res, nfrag) = efpobj._efp_get_frag_count() _result_to_error(res) - if verbose >= 1: - mult20 = list(map(list, zip(*[iter(mult)] * 20))) - - text = '\n ==> EFP Multipoles: Charge & Dipole <==\n\n' - for mu in range(nmult): - text += '{:6d} {:14.8f} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *mult20[mu][:4]) - - if verbose >= 2: - text += '\n ==> EFP Multipoles: Quadrupole <==\n\n' - for mu in range(nmult): - text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format(mu, *mult20[mu][4:10]) - text += '\n ==> EFP Multipoles: Octupole <==\n\n' - for mu in range(nmult): - text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format( - mu, *mult20[mu][10:]) - print(text) - - return mult + return nfrag +# # +# # def get_multipole_count(efpobj): +# # """Gets the number of multipoles in `efpobj` computation. +# # +# # Returns +# # ------- +# # int +# # Total number of multipoles from electrostatics calculation. +# # +# # """ +# # (res, nmult) = efpobj._efp_get_multipole_count() +# # _result_to_error(res) +# # +# # return nmult +# # +# +# def get_multipole_coordinates(efpobj, verbose=1): +# """Gets the coordinates of `efpobj` electrostatics multipoles. +# +# Parameters +# ---------- +# verbose : int, optional +# Whether to print out the multipole coordinates. 0: no printing. 1: +# print charges and dipoles. 2: additionally print quadrupoles +# and octupoles. +# +# Returns +# ------- +# list +# ``3 n_mult`` (flat) array of multipole locations. +# +# Examples +# -------- +# +# >>> # Use with NumPy +# >>> n_mult = efpobj.get_multipole_count() +# >>> xyz_mult = np.asarray(efpobj.get_multipole_coordinates()).reshape(n_mult, 3) +# +# """ +# nmult = efpobj.get_multipole_count() +# (res, xyz) = efpobj._efp_get_multipole_coordinates(nmult) +# _result_to_error(res) +# +# if verbose >= 1: +# xyz3 = list(map(list, zip(*[iter(xyz)] * 3))) +# +# text = '\n ==> EFP Multipole Coordinates <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *xyz3[mu]) +# print(text) +# +# return xyz +# +# +# def get_multipole_values(efpobj, verbose=1): +# """Gets the computed per-point multipoles of `efpobj`. +# +# Parameters +# ---------- +# verbose : int, optional +# Whether to print out the multipole arrays. 0: no printing. 1: +# print charges and dipoles. ``2``: additionally print quadrupoles +# and octupoles. +# +# Returns +# ------- +# list +# ``20 n_mult`` (flat) array of per-point multipole values including +# charges + dipoles + quadrupoles + octupoles. +# Dipoles stored as x, y, z. +# Quadrupoles stored as xx, yy, zz, xy, xz, yz. +# Octupoles stored as xxx, yyy, zzz, xxy, xxz, xyy, yyz, xzz, yzz, xyz. +# +# Examples +# -------- +# >>> # Use with NumPy +# >>> n_mult = efpobj.get_multipole_count() +# >>> val_mult = np.asarray(efpobj.get_multipole_values()).reshape(n_mult, 20) +# +# """ +# nmult = efpobj.get_multipole_count() +# (res, mult) = efpobj._efp_get_multipole_values(nmult) +# _result_to_error(res) +# +# if verbose >= 1: +# mult20 = list(map(list, zip(*[iter(mult)] * 20))) +# +# text = '\n ==> EFP Multipoles: Charge & Dipole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:14.8f} {:14.8f} {:14.8f} {:14.8f}\n'.format(mu, *mult20[mu][:4]) +# +# if verbose >= 2: +# text += '\n ==> EFP Multipoles: Quadrupole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format(mu, *mult20[mu][4:10]) +# text += '\n ==> EFP Multipoles: Octupole <==\n\n' +# for mu in range(nmult): +# text += '{:6d} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f} {:12.6f}\n'.format( +# mu, *mult20[mu][10:]) +# print(text) +# +# return mult +# def get_induced_dipole_count(efpobj): """Gets the number of polarization induced dipoles in `efpobj` computation. @@ -942,6 +1241,43 @@ def get_gradient(efpobj): return grad +# SKP + +def get_pairwise_energy(efpobj): + """Gets the per-fragment pairwise energy breakdowns. + + Returns + ------- + list of dict + A list of `n_frag` dictionaries, each containing energy components: + 'electrostatic', 'exchange_repulsion', 'polarization', + 'dispersion', and 'total'. + """ + nfrag = efpobj.get_frag_count() + energies = efpobj._efp_get_pairwise_energy(nfrag) + return energies + +#SKP + +#def set_pairwise_energy(efpobj, pair_energies): +# """Sets pairwise energy values per fragment. +# +# Parameters +# ---------- +# pair_energies : list of dict +# A list of dicts with energy components for each fragment, where each dict includes: +# 'electrostatic', 'exchange_repulsion', 'polarization', 'dispersion', and 'total'. +# +# Returns +# ------- +# None +# """ +# nfrag = efpobj.get_frag_count() +# if len(pair_energies) != nfrag: +# raise PyEFPSyntaxError(f"Expected {nfrag} energy entries, got {len(pair_energies)}") +# +# res = efpobj._efp_set_pairwise_energy(nfrag, pair_energies) +# _result_to_error(res) def gradient_summary(efpobj): """Gets the computed per-fragment EFP energy gradient of `efpobj`. @@ -1178,10 +1514,11 @@ def set_frag_coordinates(efpobj, ifr, ctype, coord): 'xyzabc': core.EFP_COORD_TYPE_XYZABC, 'points': core.EFP_COORD_TYPE_POINTS, 'rotmat': core.EFP_COORD_TYPE_ROTMAT, + 'atoms': core.EFP_COORD_TYPE_ATOMS, }[ctype.lower()] except KeyError: _result_to_error(core.efp_result.EFP_RESULT_SYNTAX_ERROR, - 'invalid value for [xyzabc/points/rotmat] {}: {}'.format('ctype', ctype)) + 'invalid value for [xyzabc/points/rotmat/atoms] {}: {}'.format('ctype', ctype)) efpobj.input_units_to_au = 1.0 res = efpobj._efp_set_frag_coordinates(ifr, ctype, coord) @@ -1570,11 +1907,15 @@ def old_to_dict(efpobj): core.efp.add_potential = add_potential core.efp.add_fragment = add_fragment +#core.efp.add_ligand = add_ligand core.efp.get_opts = get_opts core.efp.set_opts = set_opts core.efp.get_frag_count = get_frag_count core.efp.get_energy = get_energy core.efp.get_gradient = get_gradient +core.efp.get_pairwise_energy = get_pairwise_energy +#core.efp.set_pairwise_energy = set_pairwise_energy +core.efp.print_pairwise_energies = print_pairwise_energies core.efp.energy_summary = energy_summary core.efp.nuclear_repulsion_energy = nuclear_repulsion_energy core.efp.to_viz_dict = to_viz_dict @@ -1589,9 +1930,9 @@ def old_to_dict(efpobj): core.efp.get_point_charge_count = get_point_charge_count core.efp.get_point_charge_coordinates = get_point_charge_coordinates core.efp.get_point_charge_values = get_point_charge_values -core.efp.get_multipole_count = get_multipole_count -core.efp.get_multipole_coordinates = get_multipole_coordinates -core.efp.get_multipole_values = get_multipole_values +#core.efp.get_multipole_count = get_multipole_count +#core.efp.get_multipole_coordinates = get_multipole_coordinates +#core.efp.get_multipole_values = get_multipole_values core.efp.get_induced_dipole_count = get_induced_dipole_count core.efp.get_induced_dipole_coordinates = get_induced_dipole_coordinates core.efp.get_induced_dipole_values = get_induced_dipole_values @@ -1683,6 +2024,8 @@ def hint_to_au(hint, htype, iutau): return [(h * iutau if idx < 3 else h) for idx, h in enumerate(hint)] elif htype == 'points': return [h * iutau for h in hint] + elif htype == 'atoms': + return [(h * iutau if idx % 4 != 0 else h) for idx, h in enumerate(hint)] for ifr, (fl, ht, gh) in enumerate(zip(efp_init['fragment_files'], efp_init['hint_types'], efp_init['geom_hints'])): diff --git a/EFP2.C b/qchem/EFP2.C similarity index 100% rename from EFP2.C rename to qchem/EFP2.C diff --git a/EFP2.h b/qchem/EFP2.h similarity index 100% rename from EFP2.h rename to qchem/EFP2.h diff --git a/setup.csh b/setup.csh deleted file mode 100644 index 4f9a78c4..00000000 --- a/setup.csh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/csh - -setenv TORCH_SWITCH ON - -setenv LIBEFP_DIR "./" -setenv INSTALLATION_DIR "$LIBEFP_DIR" - -if ("$TORCH_SWITCH" == "ON") then - # Set the installation directory for LibTorch - setenv TORCH_INSTALLED_DIR "" - setenv LIBTORCH_INCLUDE_DIRS "$TORCH_INSTALLED_DIR/include/;$TORCH_INSTALLED_DIR/include/torch/csrc/api/include" - setenv TORCHANI_DIR "$LIBEFP_DIR/efpmd/torch" - - echo "Environment variables set for Torch integration:" - echo "LIBEFP_DIR=$LIBEFP_DIR" - echo "INSTALLATION_DIR=$INSTALLATION_DIR" - echo "TORCH_INSTALLED_DIR=$TORCH_INSTALLED_DIR" - echo "LIBTORCH_INCLUDE_DIRS=$LIBTORCH_INCLUDE_DIRS" - echo "TORCHANI_DIR=$TORCHANI_DIR" -else - unsetenv LIBTORCH_INCLUDE_DIRS - unsetenv TORCH_INSTALLED_DIR - unsetenv TORCHANI_DIR - - echo "Torch integration is disabled. Only basic environment variables are set:" - echo "LIBEFP_DIR=$LIBEFP_DIR" - echo "INSTALLATION_DIR=$INSTALLATION_DIR" -endif - -echo "TORCH_SWITCH=$TORCH_SWITCH" - diff --git a/setup.sh b/setup.sh index 15b00cf0..16dca756 100644 --- a/setup.sh +++ b/setup.sh @@ -2,10 +2,11 @@ export TORCH_SWITCH=ON -export LIBEFP_DIR="/Users/lyuda/LIBEFP/libefp_2025" +export LIBEFP_DIR="/Users/lyuda/LIBEFP/libefp_skp_may2025" export INSTALLATION_DIR="$LIBEFP_DIR" +export PYTHONPATH="$LIBEFP_DIR/lib" -if [[ "$TORCH_SWITCH" == "ON" ]] then +if [[ "$TORCH_SWITCH" == "ON" ]]; then # Set the installation directory for LibTorch export TORCH_INSTALLED_DIR="/Users/lyuda/LIBEFP/LIBTORCH/libtorch" export LIBTORCH_INCLUDE_DIRS="$TORCH_INSTALLED_DIR/include/;$TORCH_INSTALLED_DIR/include/torch/csrc/api/include" @@ -13,18 +14,18 @@ if [[ "$TORCH_SWITCH" == "ON" ]] then echo "Environment variables set for Torch integration:" echo "LIBEFP_DIR=$LIBEFP_DIR" - echo "INSTALLATION_DIR=$INSTALLATION_DIR" echo "TORCH_INSTALLED_DIR=$TORCH_INSTALLED_DIR" echo "LIBTORCH_INCLUDE_DIRS=$LIBTORCH_INCLUDE_DIRS" echo "TORCHANI_DIR=$TORCHANI_DIR" + echo "PYTHON_REQS=$PYTHON_REQS" else - unset LIBTORCH_INCLUDE_DIRS - unset TORCH_INSTALLED_DIR - unset TORCHANI_DIR + unsetenv LIBTORCH_INCLUDE_DIRS + unsetenv TORCH_INSTALLED_DIR + unsetenv TORCHANI_DIR echo "Torch integration is disabled. Only basic environment variables are set:" echo "LIBEFP_DIR=$LIBEFP_DIR" - echo "INSTALLATION_DIR=$INSTALLATION_DIR" fi echo "TORCH_SWITCH=$TORCH_SWITCH" + diff --git a/src/efp.c b/src/efp.c index 491696b1..a3d95f35 100644 --- a/src/efp.c +++ b/src/efp.c @@ -108,12 +108,12 @@ set_coord_points(struct frag *frag, const double *coord) static enum efp_result set_coord_atoms(struct frag *frag, const double *coord) { - int natoms = frag->n_atoms; - - // printf("\nCOORDINATES IN set_coord_atoms\n"); - // for (size_t i=0; in_atoms; + //double BOHR_RADIUS = 0.52917721092; + //printf("\nCOORDINATES IN set_coord_atoms\n"); + //for (size_t i=0; iterms & EFP_TERM_QQ; } + static void compute_two_body_range(struct efp *efp, size_t frag_from, size_t frag_to, void *data) @@ -671,11 +672,10 @@ compute_two_body_range(struct efp *efp, size_t frag_from, size_t frag_to, print_energies(efp); } -EFP_EXPORT enum efp_result +static void compute_two_body_crystal(struct efp *efp) { double e_elec = 0.0, e_disp = 0.0, e_xr = 0.0, e_cp = 0.0, e_elec_tmp = 0.0, e_disp_tmp = 0.0; - // no parallelization int nsymm = efp->nsymm_frag; size_t *unique_frag = (size_t *)calloc(nsymm, sizeof(size_t)); @@ -686,11 +686,12 @@ compute_two_body_crystal(struct efp *efp) for (size_t k = 0; k < nsymm; k++) { size_t i = unique_frag[k]; - struct frag *frag = efp->frags + i; + // printf("unique_frag %zu\n",unique_frag[k]); + struct frag *frag = efp->frags + i; // scaling factor that tells how many fragments like this are in the system size_t factor = nsymm_frag[k]; - + // printf("nsymm_frag = %zu\n",factor); for (size_t fr_j=0; fr_jn_frag; fr_j++){ if ( fr_j != i && !efp_skip_frag_pair(efp, i, fr_j)) { @@ -768,8 +769,6 @@ compute_two_body_crystal(struct efp *efp) efp->energy.dispersion += e_disp/2; efp->energy.exchange_repulsion += e_xr/2; efp->energy.charge_penetration += e_cp/2; - - return EFP_RESULT_SUCCESS; } EFP_EXPORT enum efp_result @@ -1734,11 +1733,14 @@ efp_compute(struct efp *efp, int do_gradient) //efp->do_gradient = do_gradient; efp->do_gradient = 1; - if (efp_counter == 0) - if ((res = check_params(efp))) { + if (efp_counter == 0) { + if ((res = check_params(efp))) { efp_log("check_params() failure"); return res; - } + } + if (efp->opts.print > 2) + print_opts(&efp->opts); + } memset(&efp->energy, 0, sizeof(efp->energy)); memset(&efp->stress, 0, sizeof(efp->stress)); @@ -1750,22 +1752,18 @@ efp_compute(struct efp *efp, int do_gradient) efp_log("zero_atomic_gradient(efp) failure"); return res; } - if (efp->opts.symmetry == 0) { // standard case efp_balance_work(efp, compute_two_body_range, NULL); } else { // high-symmetry crystals - if ((res = compute_two_body_crystal(efp))){ - efp_log("compute_two_body_crystal() failure"); - return res; - } - } + compute_two_body_crystal(efp); + } if ((res = efp_compute_pol(efp))) { efp_log("efp_compute_pol() failure"); return res; } - if ((res = efp_compute_ai_elec(efp))){ + if ((res = efp_compute_ai_elec(efp))){ efp_log("efp_compute_ai_elec() failure"); return res; } @@ -2646,6 +2644,27 @@ efp_get_frag_mass(struct efp *efp, size_t frag_idx, double *mass_out) return EFP_RESULT_SUCCESS; } +/* +EFP_EXPORT enum efp_result +efp_get_frag_atom_mass(struct efp *efp, size_t frag_idx, double *atom_mass_out) +{ + assert(efp); + assert(atom_mass_out); + assert(frag_idx < efp->n_frag); + + const struct frag *frag = efp->frags + frag_idx; + size_t n_atoms; + *n_atoms = efp->frags[frag_idx].n_atoms; + + double atom_mass_out[n_atoms] ; + + for (size_t i = 0; i < frag->n_atoms; i++) + atom_mass_out[i] = frag->atoms[i].mass; + + return EFP_RESULT_SUCCESS; +} +*/ + EFP_EXPORT enum efp_result efp_get_frag_inertia(struct efp *efp, size_t frag_idx, double *inertia_out) { @@ -2673,6 +2692,7 @@ efp_get_frag_inertia(struct efp *efp, size_t frag_idx, double *inertia_out) return EFP_RESULT_SUCCESS; } + EFP_EXPORT enum efp_result efp_get_frag_atom_count(struct efp *efp, size_t frag_idx, size_t *n_atoms) { @@ -2685,6 +2705,7 @@ efp_get_frag_atom_count(struct efp *efp, size_t frag_idx, size_t *n_atoms) return EFP_RESULT_SUCCESS; } + EFP_EXPORT enum efp_result efp_get_frag_atoms(struct efp *efp, size_t frag_idx, size_t size, struct efp_atom *atoms) @@ -2940,16 +2961,6 @@ efp_get_pairwise_energy(struct efp *efp, struct efp_energy *pair_energies){ return EFP_RESULT_SUCCESS; } -EFP_EXPORT enum efp_result -efp_set_pairwise_energy(struct efp *efp, struct efp_energy *pair_energies) -{ - assert(efp); - assert(pair_energies); - - memcpy(efp->pair_energies, pair_energies, efp->n_frag * sizeof(struct efp_energy)); - return EFP_RESULT_SUCCESS; -} - EFP_EXPORT enum efp_result efp_set_symmlist(struct efp *efp) { @@ -3050,35 +3061,6 @@ efp_get_nsymm_frag(struct efp *efp, size_t *nsymm_frag){ return EFP_RESULT_SUCCESS; } -void -unique_symm_frag(struct efp *efp, size_t *unique_frag){ - //printf("\n Symmetry-unique fragments \n"); - int n = 0; - int i = 0; - do { - if (efp->symmlist[i] > n) { - unique_frag[n] = i; - //printf(" %d ", unique_frag[n]); - n++; - } - i++; - } while (n < efp->nsymm_frag); -} - -void -n_symm_frag(struct efp *efp, size_t *symm_frag) { - - for (size_t i = 0; i < efp->nsymm_frag; i++) { - size_t counter = 0; - for (size_t j = 0; j < efp->n_frag; j++) { - if (efp->symmlist[i] == efp->symmlist[j]) - counter++; - } - symm_frag[i] = counter; - // printf("\n symm_frag %d = %d", i, symm_frag[i]); - } -} - void print_mult_pt(struct efp *efp, size_t frag_index, size_t pt_index) { struct multipole_pt *pt = efp->frags[frag_index].multipole_pts + pt_index; @@ -3210,10 +3192,63 @@ void print_ene(struct efp_energy *energy) { } void print_energies(struct efp *efp) { + size_t n_frag = efp->n_frag; printf(" --- PAIRWISE ENERGIES --- \n"); for (size_t i=0; in_frag; i++) { printf(" PAIR ENERGY on FRAGMENT %zu %s \n", i, efp->frags[i].name); print_ene(&efp->pair_energies[i]); } - printf("\n"); + printf("---\n"); +} + +void print_opts(struct efp_opts *opts) +{ + assert(opts); + + /* + switch (opts->terms) { + case EFP_TERM_ELEC: + printf("ELEC"); + break; + case EFP_TERM_POL: + printf("POL"); + break; + case EFP_TERM_DISP: + printf("DISP"); + break; + case EFP_TERM_XR: + printf("XR"); + break; + case EFP_TERM_QQ: + printf("QQ"); + break; + case EFP_TERM_LJ: + printf("LJ"); + break; + default: + printf("Unknown"); + break; + } +*/ + printf("\n--- some EFP opts parameters ---\n"); + printf("EFP terms: %d\n", opts->terms); + printf("EFP special terms: %d\n", opts->special_terms); + printf("disp damping: %d\n", opts->disp_damp); + printf("elec damping: %d\n", opts->elec_damp); + printf("pol damping: %d\n", opts->pol_damp); + + printf("pol damp tt value: %lf\n", opts->pol_damp_tt_value); + + printf("enable_pbc %d\n", opts->enable_pbc); + printf("enable_elpot %d\n", opts->enable_elpot); + printf("enable_cutoff %d\n", opts->enable_cutoff); + printf("swf_cutoff %lf\n", opts->swf_cutoff); + printf("xr_cutoff %lf\n", opts->xr_cutoff); + printf("enable_pairwise %d\n", opts->enable_pairwise); + printf("ligand %d\n", opts->ligand); + printf("special_fragment %d\n", opts->special_fragment); + printf("symmetry %d\n", opts->symmetry); + printf("print %d\n", opts->print); + + printf(" ---\n"); } diff --git a/src/efp.h b/src/efp.h index bdccf332..391039bf 100644 --- a/src/efp.h +++ b/src/efp.h @@ -385,7 +385,7 @@ void efp_set_error_log(void (*cb)(const char *)); * \return ::EFP_RESULT_SUCCESS on success or error code otherwise. */ enum efp_result efp_set_opts(struct efp *efp, const struct efp_opts *opts); - + /** * Get currently set computation options. * @@ -420,7 +420,7 @@ enum efp_result efp_add_potential(struct efp *efp, const char *path); enum efp_result efp_add_fragment(struct efp *efp, const char *name); /** - * Add a ligand fragment to teh system + * Add a ligand fragment to the system * @param[in] efp * @param[in] ligand_index Index of the ligand in the fragment list * @return ::EFP_RESULT_SUCCESS on success or error code otherwise. @@ -1392,6 +1392,8 @@ enum efp_result efp_get_frag_name(struct efp *efp, size_t frag_idx, size_t size, enum efp_result efp_get_frag_mass(struct efp *efp, size_t frag_idx, double *mass); +//enum efp_result efp_get_frag_atom_mass(struct efp *efp, size_t frag_idx, double *atom_mass_out); + /** * Get fragment principal moments of inertia. * @@ -1595,7 +1597,7 @@ enum efp_result efp_get_pairwise_energy(struct efp *efp, * \param[in] total energy and energy components of each ligand-fragment pair * */ -enum efp_result efp_set_pairwise_energy(struct efp *efp, struct efp_energy *pair_energies); +//enum efp_result efp_set_pairwise_energy(struct efp *efp, struct efp_energy *pair_energies); /** * Prepares information for computing symmetric crystals. Sets the symmetry list, nsymm_frag AND skiplist @@ -1625,20 +1627,6 @@ enum efp_result efp_get_symmlist(struct efp *efp, size_t frag_idx, size_t *symm) */ enum efp_result efp_get_nsymm_frag(struct efp *efp, size_t *nsymm_frag); -/** - * Computes the list of indexes of symmetry-unique fragments - * @param[in] efp The efp structure. - * @param[out] unique_frag Array with unique-symmetry fragment' indexes - */ -void unique_symm_frag(struct efp *efp, size_t *unique_frag); - -/** - * Computes number of symmetric fragments of each type - * @param[in] efp The efp structure - * @param[out] symm_frag Array of length nsymm_frag specifying # of identical fragments - */ -void n_symm_frag(struct efp *efp, size_t *symm_frag); - /** updates (shifts) parameters of fragment based on coordinates of fragment atoms * * @param[in] atoms Atoms with target coordinates, to which the parameters will be shifted @@ -1720,6 +1708,12 @@ void print_ene(struct efp_energy *energy); */ void print_energies(struct efp *efp); +/** + * Print simple efp options + * @param opts + */ +void print_opts(struct efp_opts *opts); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/src/parse.c b/src/parse.c index c0ff273c..1c1b3a90 100644 --- a/src/parse.c +++ b/src/parse.c @@ -1584,7 +1584,10 @@ parse_file(struct efp *efp, struct stream *stream) /* default value */ //frag->pol_damp = 0.6; //commented out for ticket 3416 - frag->pol_damp = efp->opts.pol_damp_tt_value; + if (efp->opts.pol_damp_tt_value > 0.0) { + frag->pol_damp = efp->opts.pol_damp_tt_value; + } + else frag->pol_damp = 0.6; // default frag->if_mm_frag = true; frag->if_qm_screen = false; diff --git a/src/pol.c b/src/pol.c index 3066d885..f5b938ce 100644 --- a/src/pol.c +++ b/src/pol.c @@ -408,7 +408,7 @@ compute_elec_field(struct efp *efp) { efp_balance_work(efp, compute_elec_field_range, NULL); - if (efp->opts.enable_pairwise) { + if (efp->opts.enable_pairwise) { // this is field due to ligand on a fragment point // for QM ligand this is a field due to QM nuclei efp_balance_work(efp, compute_ligand_field_range, NULL); @@ -433,7 +433,7 @@ compute_elec_field_crystal(struct efp *efp) int do_pairwise = (efp->opts.enable_pairwise && efp->opts.ligand > -1) ? 1 : 0; enum efp_result res; - int nsymm = efp->nsymm_frag; + size_t nsymm = efp->nsymm_frag; size_t *unique_frag = (size_t *)calloc(nsymm, sizeof(size_t)); unique_symm_frag(efp, unique_frag); @@ -626,7 +626,7 @@ compute_id_range(struct efp *efp, size_t from, size_t to, void *data) struct polarizable_pt *pt = frag->polarizable_pts + j; vec_t field, field_conj; - /* electric field from other induced dipoles */ + /* electric field from other induced dipoles */ get_induced_dipole_field(efp, i, pt, &field, &field_conj); @@ -957,12 +957,11 @@ efp_compute_pol_energy(struct efp *efp, double *energy) { enum efp_result res; - assert(energy); + assert(energy); - // counter to know when to zero out induced dipoles and static field + // counter to know when to zero out induced dipoles and static field // need to be explored further static int counter = 0; - // think how to skip recomputing static field in qm scf iterations // check on efp->do_gradient breaks gtests... if ((res = compute_elec_field(efp))) @@ -1299,7 +1298,7 @@ efp_compute_pol(struct efp *efp) !(efp->opts.terms & EFP_TERM_AI_POL)) return EFP_RESULT_SUCCESS; - // this is standard non-symmetric case + // this is standard non-symmetric case if (! efp->opts.symmetry) { if ((res = efp_compute_pol_energy(efp, &efp->energy.polarization))) return res; diff --git a/src/util.c b/src/util.c index 5fa5799f..c38e0ab8 100644 --- a/src/util.c +++ b/src/util.c @@ -359,3 +359,34 @@ calc_rmsd(const struct frag *frag1, const struct frag *frag2){ double rmsd = 0.0; return rmsd; } + + +void +unique_symm_frag(struct efp *efp, size_t *unique_frag){ + //printf("\n Symmetry-unique fragments \n"); + size_t n = 0; + size_t i = 0; + do { + if (efp->symmlist[i] > n) { + unique_frag[n] = i; + //printf(" %d ", unique_frag[n]); + n++; + } + i++; + } while (n < efp->nsymm_frag); +} + +void +n_symm_frag(struct efp *efp, size_t *symm_frag) { + + for (size_t i = 0; i < efp->nsymm_frag; i++) { + size_t counter = 0; + for (size_t j = 0; j < efp->n_frag; j++) { + if (efp->symmlist[i] == efp->symmlist[j]) + counter++; + } + symm_frag[i] = counter; + // printf("\n symm_frag %d = %d", i, symm_frag[i]); + } +} + diff --git a/src/util.h b/src/util.h index 80fb1837..0a297515 100644 --- a/src/util.h +++ b/src/util.h @@ -55,5 +55,9 @@ void find_plane(const vec_t, const vec_t, const vec_t, vec_t *, double); double max_cutoff(const six_t); // computes rmsd between two fragment structures double calc_rmsd(const struct frag *frag1, const struct frag *frag2); +// Computes the list of indexes of symmetry-unique fragments +void unique_symm_frag(struct efp *efp, size_t *unique_frag); +// Computes number of symmetric fragments of each type +void n_symm_frag(struct efp *efp, size_t *symm_frag); #endif /* LIBEFP_UTIL_H */ diff --git a/.DS_Store b/tests/.DS_Store similarity index 67% rename from .DS_Store rename to tests/.DS_Store index 133060ee..6a023919 100644 Binary files a/.DS_Store and b/tests/.DS_Store differ diff --git a/tests/atom_coord_2.in b/tests/atom_coord_2.in new file mode 100644 index 00000000..9d45be73 --- /dev/null +++ b/tests/atom_coord_2.in @@ -0,0 +1,23 @@ +run_type grad +coord atoms +elec_damp screen +fraglib_path ../fraglib +print 3 + +fragment h2o_l +A01O1 -3.394000 -1.900000 -3.700000 +A02H2 -3.517419 -1.130057 -3.174996 +A03H3 -2.580284 -2.281411 -3.424198 +fragment nh3_l +A01N1 -5.515000 1.083000 0.968000 +A02H2 -5.171084 0.157148 0.817415 +A03H3 -4.838165 1.726200 0.612549 +A04H4 -6.354118 1.191679 0.436750 +fragment ch3oh_l +A01C1 -2.056000 0.767000 -0.301000 +A02O2 -2.979940 -0.252959 -0.545947 +A03H3 -1.192965 0.406624 0.250842 +A04H4 -2.554557 1.516350 0.296433 +A05H5 -1.714730 1.232706 -1.220716 +A06H6 -2.587630 -0.929369 -1.064807 + diff --git a/tests/lj_2.in b/tests/lj_2.in new file mode 100644 index 00000000..4edff089 --- /dev/null +++ b/tests/lj_2.in @@ -0,0 +1,20 @@ +run_type grad +coord atoms +terms qq lj +special_terms qq lj +fraglib_path ../fraglib +print 0 + +fragment tip3p_mm_l +A01O -1.815220 2.663988 0.000000 +A02H -1.616905 1.722730 0.001942 +A03H -2.465495 2.770431 -0.695494 + +fragment tip3p_mm_l +A01O -1.815220 5.663988 0.000000 +A02H -1.616905 4.722730 0.001942 +A03H -2.465495 5.770431 -0.695494 + + + + diff --git a/tests/out_symm_2pw b/tests/out_symm_2pw new file mode 100644 index 00000000..4a72b605 --- /dev/null +++ b/tests/out_symm_2pw @@ -0,0 +1,4873 @@ +EFPMD ver. 2.0.0 +Copyright (c) 2012-2017 Ilya Kaliman, 2017-2024 Lyudmila Slipchenko + +LIBEFP ver. 2.0.0 +Copyright (c) 2012-2017 Ilya Kaliman + 2018-2022 Lyudmila Slipchenko + +Journal References: + - Kaliman and Slipchenko, JCC 2013. + DOI: http://dx.doi.org/10.1002/jcc.23375 + - Kaliman and Slipchenko, JCC 2015. + DOI: http://dx.doi.org/10.1002/jcc.23772 + +Project web site: https://github.com/libefp2/libefp/ + +RUNNING 1 MPI PROCESSES WITH 1 OPENMP THREADS EACH +WALL CLOCK TIME IS Tue May 13 02:44:10 2025 + +SIMULATION SETTINGS + +run_type sp +coord points +terms elec pol disp xr +special_terms elec pol disp xr +elec_damp screen +disp_damp tt +pol_damp tt +pol_driver iterative +enable_ff false +enable_multistep false +ff_geometry ff.xyz +ff_parameters /../fraglib/params/amber99.prm +single_params_file false +efp_params_file params.efp +enable_cutoff true +swf_cutoff 11 +xr_cutoff 11 +max_steps 100 +multistep_steps 1 +fraglib_path ../fraglib +userlib_path ./ +enable_pbc true +periodic_box 24.0048 27.0356 25.7166 90.0 109.424 90.0 +opt_tol 0.0003 +opt_energy_tol 1e-06 +gtest_tol 1e-06 +ref_energy -2.46943 +hess_central false +num_step_dist 0.001 +num_step_angle 0.01 +ensemble nve +time_step 1 +print_step 1 +velocitize false +temperature 300 +pressure 1 +thermostat_tau 1000 +barostat_tau 10000 +ligand 0 +enable_pairwise true +print_pbc false +symmetry true +special_fragment -100 +enable_torch false +enable_elpot false +opt_special_frag -1 +torch_nn none +ml_path none +userml_path none +custom_nn none +aev_nn none +atom_gradient frag +symm_frag frag +update_params 0 +update_params_cutoff 0 +print 1 + + +SINGLE POINT ENERGY JOB + + + GEOMETRY (ANGSTROMS) + +A01S -6.509027 -0.703872 4.315925 +A02C -5.527225 0.739221 4.530684 +A03C -6.037509 2.064371 4.568640 +A04S -7.763887 2.454224 4.374495 +A05C -8.204440 1.209911 3.186103 +A06C -7.690404 -0.057721 3.155545 +A07C -8.088167 -0.983352 2.158266 +A08N -8.415068 -1.769277 1.354524 +A09C -9.181118 1.610511 2.243393 +A10N -10.030494 1.933586 1.507075 +A11N -5.177090 3.041573 4.778064 +A12S -3.653588 2.410224 5.000220 +A13C -4.154616 0.757673 4.736227 +A14C -3.264318 -0.329564 4.729194 +A15N -2.519451 -1.230593 4.697544 +A01S -1.630227 -4.083322 1.747300 +A02C -2.612029 -2.640229 1.532541 +A03C -2.101745 -1.315079 1.494585 +A04S -0.375367 -0.925226 1.688730 +A05C 0.065186 -2.169539 2.877122 +A06C -0.448850 -3.437171 2.907680 +A07C -0.051087 -4.362802 3.904959 +A08N 0.275814 -5.148727 4.708701 +A09C 1.041864 -1.768939 3.819832 +A10N 1.891240 -1.445864 4.556150 +A11N -2.962164 -0.337877 1.285161 +A12S -4.485666 -0.969226 1.063005 +A13C -3.984638 -2.621777 1.326998 +A14C -4.874936 -3.709014 1.334031 +A15N -5.619803 -4.610043 1.365681 +A01S 6.509027 0.703872 -4.315925 +A02C 5.527225 -0.739221 -4.530684 +A03C 6.037509 -2.064371 -4.568640 +A04S 7.763887 -2.454224 -4.374495 +A05C 8.204440 -1.209911 -3.186103 +A06C 7.690404 0.057721 -3.155545 +A07C 8.088167 0.983352 -2.158266 +A08N 8.415068 1.769277 -1.354524 +A09C 9.181118 -1.610511 -2.243393 +A10N 10.030494 -1.933586 -1.507075 +A11N 5.177090 -3.041573 -4.778064 +A12S 3.653588 -2.410224 -5.000220 +A13C 4.154616 -0.757673 -4.736227 +A14C 3.264318 0.329564 -4.729194 +A15N 2.519451 1.230593 -4.697544 +A01S 1.630227 4.083322 -1.747300 +A02C 2.612029 2.640229 -1.532541 +A03C 2.101745 1.315079 -1.494585 +A04S 0.375367 0.925226 -1.688730 +A05C -0.065186 2.169539 -2.877122 +A06C 0.448850 3.437171 -2.907680 +A07C 0.051087 4.362802 -3.904959 +A08N -0.275814 5.148727 -4.708701 +A09C -1.041864 1.768939 -3.819832 +A10N -1.891240 1.445864 -4.556150 +A11N 2.962164 0.337877 -1.285161 +A12S 4.485666 0.969226 -1.063005 +A13C 3.984638 2.621777 -1.326998 +A14C 4.874936 3.709014 -1.334031 +A15N 5.619803 4.610043 -1.365681 +A01S -10.785134 -0.703872 16.442375 +A02C -9.803332 0.739221 16.657134 +A03C -10.313616 2.064371 16.695090 +A04S -12.039994 2.454224 16.500945 +A05C -12.480547 1.209911 15.312553 +A06C -11.966511 -0.057721 15.281995 +A07C -12.364274 -0.983352 14.284716 +A08N -12.691175 -1.769277 13.480974 +A09C -13.457225 1.610511 14.369843 +A10N -14.306601 1.933586 13.633525 +A11N -9.453197 3.041573 16.904514 +A12S -7.929695 2.410224 17.126670 +A13C -8.430723 0.757673 16.862677 +A14C -7.540425 -0.329564 16.855644 +A15N -6.795558 -1.230593 16.823994 +A01S -5.906334 -4.083322 13.873750 +A02C -6.888136 -2.640229 13.658991 +A03C -6.377852 -1.315079 13.621035 +A04S -4.651474 -0.925226 13.815180 +A05C -4.210921 -2.169539 15.003572 +A06C -4.724957 -3.437171 15.034130 +A07C -4.327194 -4.362802 16.031409 +A08N -4.000293 -5.148727 16.835151 +A09C -3.234243 -1.768939 15.946282 +A10N -2.384867 -1.445864 16.682600 +A11N -7.238271 -0.337877 13.411611 +A12S -8.761773 -0.969226 13.189455 +A13C -8.260745 -2.621777 13.453448 +A14C -9.151043 -3.709014 13.460481 +A15N -9.895910 -4.610043 13.492131 +A01S 2.232919 0.703872 7.810525 +A02C 1.251118 -0.739221 7.595766 +A03C 1.761402 -2.064371 7.557810 +A04S 3.487780 -2.454223 7.751955 +A05C 3.928333 -1.209910 8.940347 +A06C 3.414296 0.057722 8.970905 +A07C 3.812058 0.983353 9.968184 +A08N 4.138959 1.769278 10.771926 +A09C 4.905010 -1.610509 9.883058 +A10N 5.754386 -1.933584 10.619376 +A11N 0.900984 -3.041573 7.348386 +A12S -0.622518 -2.410225 7.126230 +A13C -0.121491 -0.757674 7.390223 +A14C -1.011790 0.329563 7.397255 +A15N -1.756657 1.230591 7.428905 +A01S -2.645880 4.083322 10.379150 +A02C -1.664079 2.640229 10.593909 +A03C -2.174363 1.315079 10.631865 +A04S -3.900741 0.925227 10.437720 +A05C -4.341294 2.169540 9.249328 +A06C -3.827257 3.437172 9.218770 +A07C -4.225019 4.362803 8.221491 +A08N -4.551920 5.148728 7.417749 +A09C -5.317971 1.768941 8.306617 +A10N -6.167347 1.445866 7.570299 +A11N -1.313945 0.337877 10.841289 +A12S 0.209557 0.969225 11.063445 +A13C -0.291470 2.621776 10.799452 +A14C 0.598829 3.709013 10.792420 +A15N 1.343696 4.610041 10.760770 +A01S -6.509027 6.055028 4.315925 +A02C -5.527225 7.498121 4.530684 +A03C -6.037509 8.823271 4.568640 +A04S -7.763887 9.213124 4.374495 +A05C -8.204440 7.968811 3.186103 +A06C -7.690404 6.701179 3.155545 +A07C -8.088167 5.775548 2.158266 +A08N -8.415068 4.989623 1.354524 +A09C -9.181118 8.369411 2.243393 +A10N -10.030494 8.692486 1.507075 +A11N -5.177090 9.800473 4.778064 +A12S -3.653588 9.169124 5.000220 +A13C -4.154616 7.516573 4.736227 +A14C -3.264318 6.429336 4.729194 +A15N -2.519451 5.528307 4.697544 +A01S -1.630227 2.675578 1.747300 +A02C -2.612029 4.118671 1.532541 +A03C -2.101745 5.443821 1.494585 +A04S -0.375367 5.833674 1.688730 +A05C 0.065186 4.589361 2.877122 +A06C -0.448850 3.321729 2.907680 +A07C -0.051087 2.396098 3.904959 +A08N 0.275814 1.610173 4.708701 +A09C 1.041864 4.989961 3.819832 +A10N 1.891240 5.313036 4.556150 +A11N -2.962164 6.421023 1.285161 +A12S -4.485666 5.789674 1.063005 +A13C -3.984638 4.137123 1.326998 +A14C -4.874936 3.049886 1.334031 +A15N -5.619803 2.148857 1.365681 +A01S 6.509027 7.462772 -4.315925 +A02C 5.527225 6.019679 -4.530684 +A03C 6.037509 4.694529 -4.568640 +A04S 7.763887 4.304676 -4.374495 +A05C 8.204440 5.548989 -3.186103 +A06C 7.690404 6.816621 -3.155545 +A07C 8.088167 7.742252 -2.158266 +A08N 8.415068 8.528177 -1.354524 +A09C 9.181118 5.148389 -2.243393 +A10N 10.030494 4.825314 -1.507075 +A11N 5.177090 3.717327 -4.778064 +A12S 3.653588 4.348676 -5.000220 +A13C 4.154616 6.001227 -4.736227 +A14C 3.264318 7.088464 -4.729194 +A15N 2.519451 7.989493 -4.697544 +A01S 1.630227 10.842222 -1.747300 +A02C 2.612029 9.399129 -1.532541 +A03C 2.101745 8.073979 -1.494585 +A04S 0.375367 7.684126 -1.688730 +A05C -0.065186 8.928439 -2.877122 +A06C 0.448850 10.196071 -2.907680 +A07C 0.051087 11.121702 -3.904959 +A08N -0.275814 11.907627 -4.708701 +A09C -1.041864 8.527839 -3.819832 +A10N -1.891240 8.204764 -4.556150 +A11N 2.962164 7.096777 -1.285161 +A12S 4.485666 7.728126 -1.063005 +A13C 3.984638 9.380677 -1.326998 +A14C 4.874936 10.467914 -1.334031 +A15N 5.619803 11.368943 -1.365681 +A01S -10.785134 6.055028 16.442375 +A02C -9.803332 7.498121 16.657134 +A03C -10.313616 8.823271 16.695090 +A04S -12.039994 9.213124 16.500945 +A05C -12.480547 7.968811 15.312553 +A06C -11.966511 6.701179 15.281995 +A07C -12.364274 5.775548 14.284716 +A08N -12.691175 4.989623 13.480974 +A09C -13.457225 8.369411 14.369843 +A10N -14.306601 8.692486 13.633525 +A11N -9.453197 9.800473 16.904514 +A12S -7.929695 9.169124 17.126670 +A13C -8.430723 7.516573 16.862677 +A14C -7.540425 6.429336 16.855644 +A15N -6.795558 5.528307 16.823994 +A01S -5.906334 2.675578 13.873750 +A02C -6.888136 4.118671 13.658991 +A03C -6.377852 5.443821 13.621035 +A04S -4.651474 5.833674 13.815180 +A05C -4.210921 4.589361 15.003572 +A06C -4.724957 3.321729 15.034130 +A07C -4.327194 2.396098 16.031409 +A08N -4.000293 1.610173 16.835151 +A09C -3.234243 4.989961 15.946282 +A10N -2.384867 5.313036 16.682600 +A11N -7.238271 6.421023 13.411611 +A12S -8.761773 5.789674 13.189455 +A13C -8.260745 4.137123 13.453448 +A14C -9.151043 3.049886 13.460481 +A15N -9.895910 2.148857 13.492131 +A01S 2.232919 7.462772 7.810525 +A02C 1.251118 6.019679 7.595766 +A03C 1.761402 4.694529 7.557810 +A04S 3.487780 4.304677 7.751955 +A05C 3.928333 5.548990 8.940347 +A06C 3.414296 6.816622 8.970905 +A07C 3.812058 7.742253 9.968184 +A08N 4.138959 8.528178 10.771926 +A09C 4.905010 5.148391 9.883058 +A10N 5.754386 4.825316 10.619376 +A11N 0.900984 3.717327 7.348386 +A12S -0.622518 4.348675 7.126230 +A13C -0.121491 6.001226 7.390223 +A14C -1.011790 7.088463 7.397255 +A15N -1.756657 7.989491 7.428905 +A01S -2.645880 10.842222 10.379150 +A02C -1.664079 9.399129 10.593909 +A03C -2.174363 8.073979 10.631865 +A04S -3.900741 7.684127 10.437720 +A05C -4.341294 8.928440 9.249328 +A06C -3.827257 10.196072 9.218770 +A07C -4.225019 11.121703 8.221491 +A08N -4.551920 11.907628 7.417749 +A09C -5.317971 8.527841 8.306617 +A10N -6.167347 8.204766 7.570299 +A11N -1.313945 7.096777 10.841289 +A12S 0.209557 7.728125 11.063445 +A13C -0.291470 9.380676 10.799452 +A14C 0.598829 10.467913 10.792420 +A15N 1.343696 11.368941 10.760770 +A01S -6.509027 12.813928 4.315925 +A02C -5.527225 14.257021 4.530684 +A03C -6.037509 15.582171 4.568640 +A04S -7.763887 15.972024 4.374495 +A05C -8.204440 14.727711 3.186103 +A06C -7.690404 13.460079 3.155545 +A07C -8.088167 12.534448 2.158266 +A08N -8.415068 11.748523 1.354524 +A09C -9.181118 15.128311 2.243393 +A10N -10.030494 15.451386 1.507075 +A11N -5.177090 16.559373 4.778064 +A12S -3.653588 15.928024 5.000220 +A13C -4.154616 14.275473 4.736227 +A14C -3.264318 13.188236 4.729194 +A15N -2.519451 12.287207 4.697544 +A01S -1.630227 9.434478 1.747300 +A02C -2.612029 10.877571 1.532541 +A03C -2.101745 12.202721 1.494585 +A04S -0.375367 12.592574 1.688730 +A05C 0.065186 11.348261 2.877122 +A06C -0.448850 10.080629 2.907680 +A07C -0.051087 9.154998 3.904959 +A08N 0.275814 8.369073 4.708701 +A09C 1.041864 11.748861 3.819832 +A10N 1.891240 12.071936 4.556150 +A11N -2.962164 13.179923 1.285161 +A12S -4.485666 12.548574 1.063005 +A13C -3.984638 10.896023 1.326998 +A14C -4.874936 9.808786 1.334031 +A15N -5.619803 8.907757 1.365681 +A01S 6.509027 14.221672 -4.315925 +A02C 5.527225 12.778579 -4.530684 +A03C 6.037509 11.453429 -4.568640 +A04S 7.763887 11.063576 -4.374495 +A05C 8.204440 12.307889 -3.186103 +A06C 7.690404 13.575521 -3.155545 +A07C 8.088167 14.501152 -2.158266 +A08N 8.415068 15.287077 -1.354524 +A09C 9.181118 11.907289 -2.243393 +A10N 10.030494 11.584214 -1.507075 +A11N 5.177090 10.476227 -4.778064 +A12S 3.653588 11.107576 -5.000220 +A13C 4.154616 12.760127 -4.736227 +A14C 3.264318 13.847364 -4.729194 +A15N 2.519451 14.748393 -4.697544 +A01S 1.630227 17.601122 -1.747300 +A02C 2.612029 16.158029 -1.532541 +A03C 2.101745 14.832879 -1.494585 +A04S 0.375367 14.443026 -1.688730 +A05C -0.065186 15.687339 -2.877122 +A06C 0.448850 16.954971 -2.907680 +A07C 0.051087 17.880602 -3.904959 +A08N -0.275814 18.666527 -4.708701 +A09C -1.041864 15.286739 -3.819832 +A10N -1.891240 14.963664 -4.556150 +A11N 2.962164 13.855677 -1.285161 +A12S 4.485666 14.487026 -1.063005 +A13C 3.984638 16.139577 -1.326998 +A14C 4.874936 17.226814 -1.334031 +A15N 5.619803 18.127843 -1.365681 +A01S -10.785134 12.813928 16.442375 +A02C -9.803332 14.257021 16.657134 +A03C -10.313616 15.582171 16.695090 +A04S -12.039994 15.972024 16.500945 +A05C -12.480547 14.727711 15.312553 +A06C -11.966511 13.460079 15.281995 +A07C -12.364274 12.534448 14.284716 +A08N -12.691175 11.748523 13.480974 +A09C -13.457225 15.128311 14.369843 +A10N -14.306601 15.451386 13.633525 +A11N -9.453197 16.559373 16.904514 +A12S -7.929695 15.928024 17.126670 +A13C -8.430723 14.275473 16.862677 +A14C -7.540425 13.188236 16.855644 +A15N -6.795558 12.287207 16.823994 +A01S -5.906334 9.434478 13.873750 +A02C -6.888136 10.877571 13.658991 +A03C -6.377852 12.202721 13.621035 +A04S -4.651474 12.592574 13.815180 +A05C -4.210921 11.348261 15.003572 +A06C -4.724957 10.080629 15.034130 +A07C -4.327194 9.154998 16.031409 +A08N -4.000293 8.369073 16.835151 +A09C -3.234243 11.748861 15.946282 +A10N -2.384867 12.071936 16.682600 +A11N -7.238271 13.179923 13.411611 +A12S -8.761773 12.548574 13.189455 +A13C -8.260745 10.896023 13.453448 +A14C -9.151043 9.808786 13.460481 +A15N -9.895910 8.907757 13.492131 +A01S 2.232919 14.221672 7.810525 +A02C 1.251118 12.778579 7.595766 +A03C 1.761402 11.453429 7.557810 +A04S 3.487780 11.063577 7.751955 +A05C 3.928333 12.307890 8.940347 +A06C 3.414296 13.575522 8.970905 +A07C 3.812058 14.501153 9.968184 +A08N 4.138959 15.287078 10.771926 +A09C 4.905010 11.907291 9.883058 +A10N 5.754386 11.584216 10.619376 +A11N 0.900984 10.476227 7.348386 +A12S -0.622518 11.107575 7.126230 +A13C -0.121491 12.760126 7.390223 +A14C -1.011790 13.847363 7.397255 +A15N -1.756657 14.748391 7.428905 +A01S -2.645880 17.601122 10.379150 +A02C -1.664079 16.158029 10.593909 +A03C -2.174363 14.832879 10.631865 +A04S -3.900741 14.443027 10.437720 +A05C -4.341294 15.687340 9.249328 +A06C -3.827257 16.954972 9.218770 +A07C -4.225019 17.880603 8.221491 +A08N -4.551920 18.666528 7.417749 +A09C -5.317971 15.286741 8.306617 +A10N -6.167347 14.963666 7.570299 +A11N -1.313945 13.855677 10.841289 +A12S 0.209557 14.487025 11.063445 +A13C -0.291470 16.139576 10.799452 +A14C 0.598829 17.226813 10.792420 +A15N 1.343696 18.127841 10.760770 +A01S -6.509027 19.572828 4.315925 +A02C -5.527225 21.015921 4.530684 +A03C -6.037509 22.341071 4.568640 +A04S -7.763887 22.730924 4.374495 +A05C -8.204440 21.486611 3.186103 +A06C -7.690404 20.218979 3.155545 +A07C -8.088167 19.293348 2.158266 +A08N -8.415068 18.507423 1.354524 +A09C -9.181118 21.887211 2.243393 +A10N -10.030494 22.210286 1.507075 +A11N -5.177090 23.318273 4.778064 +A12S -3.653588 22.686924 5.000220 +A13C -4.154616 21.034373 4.736227 +A14C -3.264318 19.947136 4.729194 +A15N -2.519451 19.046107 4.697544 +A01S -1.630227 16.193378 1.747300 +A02C -2.612029 17.636471 1.532541 +A03C -2.101745 18.961621 1.494585 +A04S -0.375367 19.351474 1.688730 +A05C 0.065186 18.107161 2.877122 +A06C -0.448850 16.839529 2.907680 +A07C -0.051087 15.913898 3.904959 +A08N 0.275814 15.127973 4.708701 +A09C 1.041864 18.507761 3.819832 +A10N 1.891240 18.830836 4.556150 +A11N -2.962164 19.938823 1.285161 +A12S -4.485666 19.307474 1.063005 +A13C -3.984638 17.654923 1.326998 +A14C -4.874936 16.567686 1.334031 +A15N -5.619803 15.666657 1.365681 +A01S 6.509027 20.980572 -4.315925 +A02C 5.527225 19.537479 -4.530684 +A03C 6.037509 18.212329 -4.568640 +A04S 7.763887 17.822476 -4.374495 +A05C 8.204440 19.066789 -3.186103 +A06C 7.690404 20.334421 -3.155545 +A07C 8.088167 21.260052 -2.158266 +A08N 8.415068 22.045977 -1.354524 +A09C 9.181118 18.666189 -2.243393 +A10N 10.030494 18.343114 -1.507075 +A11N 5.177090 17.235127 -4.778064 +A12S 3.653588 17.866476 -5.000220 +A13C 4.154616 19.519027 -4.736227 +A14C 3.264318 20.606264 -4.729194 +A15N 2.519451 21.507293 -4.697544 +A01S 1.630227 24.360022 -1.747300 +A02C 2.612029 22.916929 -1.532541 +A03C 2.101745 21.591779 -1.494585 +A04S 0.375367 21.201926 -1.688730 +A05C -0.065186 22.446239 -2.877122 +A06C 0.448850 23.713871 -2.907680 +A07C 0.051087 24.639502 -3.904959 +A08N -0.275814 25.425427 -4.708701 +A09C -1.041864 22.045639 -3.819832 +A10N -1.891240 21.722564 -4.556150 +A11N 2.962164 20.614577 -1.285161 +A12S 4.485666 21.245926 -1.063005 +A13C 3.984638 22.898477 -1.326998 +A14C 4.874936 23.985714 -1.334031 +A15N 5.619803 24.886743 -1.365681 +A01S -10.785134 19.572828 16.442375 +A02C -9.803332 21.015921 16.657134 +A03C -10.313616 22.341071 16.695090 +A04S -12.039994 22.730924 16.500945 +A05C -12.480547 21.486611 15.312553 +A06C -11.966511 20.218979 15.281995 +A07C -12.364274 19.293348 14.284716 +A08N -12.691175 18.507423 13.480974 +A09C -13.457225 21.887211 14.369843 +A10N -14.306601 22.210286 13.633525 +A11N -9.453197 23.318273 16.904514 +A12S -7.929695 22.686924 17.126670 +A13C -8.430723 21.034373 16.862677 +A14C -7.540425 19.947136 16.855644 +A15N -6.795558 19.046107 16.823994 +A01S -5.906334 16.193378 13.873750 +A02C -6.888136 17.636471 13.658991 +A03C -6.377852 18.961621 13.621035 +A04S -4.651474 19.351474 13.815180 +A05C -4.210921 18.107161 15.003572 +A06C -4.724957 16.839529 15.034130 +A07C -4.327194 15.913898 16.031409 +A08N -4.000293 15.127973 16.835151 +A09C -3.234243 18.507761 15.946282 +A10N -2.384867 18.830836 16.682600 +A11N -7.238271 19.938823 13.411611 +A12S -8.761773 19.307474 13.189455 +A13C -8.260745 17.654923 13.453448 +A14C -9.151043 16.567686 13.460481 +A15N -9.895910 15.666657 13.492131 +A01S 2.232919 20.980572 7.810525 +A02C 1.251118 19.537479 7.595766 +A03C 1.761402 18.212329 7.557810 +A04S 3.487780 17.822477 7.751955 +A05C 3.928333 19.066790 8.940347 +A06C 3.414296 20.334422 8.970905 +A07C 3.812058 21.260053 9.968184 +A08N 4.138959 22.045978 10.771926 +A09C 4.905010 18.666191 9.883058 +A10N 5.754386 18.343116 10.619376 +A11N 0.900984 17.235127 7.348386 +A12S -0.622518 17.866475 7.126230 +A13C -0.121491 19.519026 7.390223 +A14C -1.011790 20.606263 7.397255 +A15N -1.756657 21.507291 7.428905 +A01S -2.645880 24.360022 10.379150 +A02C -1.664079 22.916929 10.593909 +A03C -2.174363 21.591779 10.631865 +A04S -3.900741 21.201927 10.437720 +A05C -4.341294 22.446240 9.249328 +A06C -3.827257 23.713872 9.218770 +A07C -4.225019 24.639503 8.221491 +A08N -4.551920 25.425428 7.417749 +A09C -5.317971 22.045641 8.306617 +A10N -6.167347 21.722566 7.570299 +A11N -1.313945 20.614577 10.841289 +A12S 0.209557 21.245925 11.063445 +A13C -0.291470 22.898476 10.799452 +A14C 0.598829 23.985713 10.792420 +A15N 1.343696 24.886741 10.760770 +A01S 5.493373 -0.703872 4.315925 +A02C 6.475175 0.739221 4.530684 +A03C 5.964891 2.064371 4.568640 +A04S 4.238513 2.454224 4.374495 +A05C 3.797960 1.209911 3.186103 +A06C 4.311996 -0.057721 3.155545 +A07C 3.914233 -0.983352 2.158266 +A08N 3.587332 -1.769277 1.354524 +A09C 2.821282 1.610511 2.243393 +A10N 1.971906 1.933586 1.507075 +A11N 6.825310 3.041573 4.778064 +A12S 8.348812 2.410224 5.000220 +A13C 7.847784 0.757673 4.736227 +A14C 8.738082 -0.329564 4.729194 +A15N 9.482949 -1.230593 4.697544 +A01S 10.372173 -4.083322 1.747300 +A02C 9.390371 -2.640229 1.532541 +A03C 9.900655 -1.315079 1.494585 +A04S 11.627033 -0.925226 1.688730 +A05C 12.067586 -2.169539 2.877122 +A06C 11.553550 -3.437171 2.907680 +A07C 11.951313 -4.362802 3.904959 +A08N 12.278214 -5.148727 4.708701 +A09C 13.044264 -1.768939 3.819832 +A10N 13.893640 -1.445864 4.556150 +A11N 9.040236 -0.337877 1.285161 +A12S 7.516734 -0.969226 1.063005 +A13C 8.017762 -2.621777 1.326998 +A14C 7.127464 -3.709014 1.334031 +A15N 6.382597 -4.610043 1.365681 +A01S 18.511427 0.703872 -4.315925 +A02C 17.529625 -0.739221 -4.530684 +A03C 18.039909 -2.064371 -4.568640 +A04S 19.766287 -2.454224 -4.374495 +A05C 20.206840 -1.209911 -3.186103 +A06C 19.692804 0.057721 -3.155545 +A07C 20.090567 0.983352 -2.158266 +A08N 20.417468 1.769277 -1.354524 +A09C 21.183518 -1.610511 -2.243393 +A10N 22.032894 -1.933586 -1.507075 +A11N 17.179490 -3.041573 -4.778064 +A12S 15.655988 -2.410224 -5.000220 +A13C 16.157016 -0.757673 -4.736227 +A14C 15.266718 0.329564 -4.729194 +A15N 14.521851 1.230593 -4.697544 +A01S 13.632627 4.083322 -1.747300 +A02C 14.614429 2.640229 -1.532541 +A03C 14.104145 1.315079 -1.494585 +A04S 12.377767 0.925226 -1.688730 +A05C 11.937214 2.169539 -2.877122 +A06C 12.451250 3.437171 -2.907680 +A07C 12.053487 4.362802 -3.904959 +A08N 11.726586 5.148727 -4.708701 +A09C 10.960536 1.768939 -3.819832 +A10N 10.111160 1.445864 -4.556150 +A11N 14.964564 0.337877 -1.285161 +A12S 16.488066 0.969226 -1.063005 +A13C 15.987038 2.621777 -1.326998 +A14C 16.877336 3.709014 -1.334031 +A15N 17.622203 4.610043 -1.365681 +A01S 1.217266 -0.703872 16.442375 +A02C 2.199068 0.739221 16.657134 +A03C 1.688784 2.064371 16.695090 +A04S -0.037594 2.454224 16.500945 +A05C -0.478147 1.209911 15.312553 +A06C 0.035889 -0.057721 15.281995 +A07C -0.361874 -0.983352 14.284716 +A08N -0.688775 -1.769277 13.480974 +A09C -1.454825 1.610511 14.369843 +A10N -2.304201 1.933586 13.633525 +A11N 2.549203 3.041573 16.904514 +A12S 4.072705 2.410224 17.126670 +A13C 3.571677 0.757673 16.862677 +A14C 4.461975 -0.329564 16.855644 +A15N 5.206842 -1.230593 16.823994 +A01S 6.096066 -4.083322 13.873750 +A02C 5.114264 -2.640229 13.658991 +A03C 5.624548 -1.315079 13.621035 +A04S 7.350926 -0.925226 13.815180 +A05C 7.791479 -2.169539 15.003572 +A06C 7.277443 -3.437171 15.034130 +A07C 7.675206 -4.362802 16.031409 +A08N 8.002107 -5.148727 16.835151 +A09C 8.768157 -1.768939 15.946282 +A10N 9.617533 -1.445864 16.682600 +A11N 4.764129 -0.337877 13.411611 +A12S 3.240627 -0.969226 13.189455 +A13C 3.741655 -2.621777 13.453448 +A14C 2.851357 -3.709014 13.460481 +A15N 2.106490 -4.610043 13.492131 +A01S 14.235319 0.703872 7.810525 +A02C 13.253518 -0.739221 7.595766 +A03C 13.763802 -2.064371 7.557810 +A04S 15.490180 -2.454223 7.751955 +A05C 15.930733 -1.209910 8.940347 +A06C 15.416696 0.057722 8.970905 +A07C 15.814458 0.983353 9.968184 +A08N 16.141359 1.769278 10.771926 +A09C 16.907410 -1.610509 9.883058 +A10N 17.756786 -1.933584 10.619376 +A11N 12.903384 -3.041573 7.348386 +A12S 11.379882 -2.410225 7.126230 +A13C 11.880909 -0.757674 7.390223 +A14C 10.990610 0.329563 7.397255 +A15N 10.245743 1.230591 7.428905 +A01S 9.356520 4.083322 10.379150 +A02C 10.338321 2.640229 10.593909 +A03C 9.828037 1.315079 10.631865 +A04S 8.101659 0.925227 10.437720 +A05C 7.661106 2.169540 9.249328 +A06C 8.175143 3.437172 9.218770 +A07C 7.777381 4.362803 8.221491 +A08N 7.450480 5.148728 7.417749 +A09C 6.684429 1.768941 8.306617 +A10N 5.835053 1.445866 7.570299 +A11N 10.688455 0.337877 10.841289 +A12S 12.211957 0.969225 11.063445 +A13C 11.710930 2.621776 10.799452 +A14C 12.601229 3.709013 10.792420 +A15N 13.346096 4.610041 10.760770 +A01S 5.493373 6.055028 4.315925 +A02C 6.475175 7.498121 4.530684 +A03C 5.964891 8.823271 4.568640 +A04S 4.238513 9.213124 4.374495 +A05C 3.797960 7.968811 3.186103 +A06C 4.311996 6.701179 3.155545 +A07C 3.914233 5.775548 2.158266 +A08N 3.587332 4.989623 1.354524 +A09C 2.821282 8.369411 2.243393 +A10N 1.971906 8.692486 1.507075 +A11N 6.825310 9.800473 4.778064 +A12S 8.348812 9.169124 5.000220 +A13C 7.847784 7.516573 4.736227 +A14C 8.738082 6.429336 4.729194 +A15N 9.482949 5.528307 4.697544 +A01S 10.372173 2.675578 1.747300 +A02C 9.390371 4.118671 1.532541 +A03C 9.900655 5.443821 1.494585 +A04S 11.627033 5.833674 1.688730 +A05C 12.067586 4.589361 2.877122 +A06C 11.553550 3.321729 2.907680 +A07C 11.951313 2.396098 3.904959 +A08N 12.278214 1.610173 4.708701 +A09C 13.044264 4.989961 3.819832 +A10N 13.893640 5.313036 4.556150 +A11N 9.040236 6.421023 1.285161 +A12S 7.516734 5.789674 1.063005 +A13C 8.017762 4.137123 1.326998 +A14C 7.127464 3.049886 1.334031 +A15N 6.382597 2.148857 1.365681 +A01S 18.511427 7.462772 -4.315925 +A02C 17.529625 6.019679 -4.530684 +A03C 18.039909 4.694529 -4.568640 +A04S 19.766287 4.304676 -4.374495 +A05C 20.206840 5.548989 -3.186103 +A06C 19.692804 6.816621 -3.155545 +A07C 20.090567 7.742252 -2.158266 +A08N 20.417468 8.528177 -1.354524 +A09C 21.183518 5.148389 -2.243393 +A10N 22.032894 4.825314 -1.507075 +A11N 17.179490 3.717327 -4.778064 +A12S 15.655988 4.348676 -5.000220 +A13C 16.157016 6.001227 -4.736227 +A14C 15.266718 7.088464 -4.729194 +A15N 14.521851 7.989493 -4.697544 +A01S 13.632627 10.842222 -1.747300 +A02C 14.614429 9.399129 -1.532541 +A03C 14.104145 8.073979 -1.494585 +A04S 12.377767 7.684126 -1.688730 +A05C 11.937214 8.928439 -2.877122 +A06C 12.451250 10.196071 -2.907680 +A07C 12.053487 11.121702 -3.904959 +A08N 11.726586 11.907627 -4.708701 +A09C 10.960536 8.527839 -3.819832 +A10N 10.111160 8.204764 -4.556150 +A11N 14.964564 7.096777 -1.285161 +A12S 16.488066 7.728126 -1.063005 +A13C 15.987038 9.380677 -1.326998 +A14C 16.877336 10.467914 -1.334031 +A15N 17.622203 11.368943 -1.365681 +A01S 1.217266 6.055028 16.442375 +A02C 2.199068 7.498121 16.657134 +A03C 1.688784 8.823271 16.695090 +A04S -0.037594 9.213124 16.500945 +A05C -0.478147 7.968811 15.312553 +A06C 0.035889 6.701179 15.281995 +A07C -0.361874 5.775548 14.284716 +A08N -0.688775 4.989623 13.480974 +A09C -1.454825 8.369411 14.369843 +A10N -2.304201 8.692486 13.633525 +A11N 2.549203 9.800473 16.904514 +A12S 4.072705 9.169124 17.126670 +A13C 3.571677 7.516573 16.862677 +A14C 4.461975 6.429336 16.855644 +A15N 5.206842 5.528307 16.823994 +A01S 6.096066 2.675578 13.873750 +A02C 5.114264 4.118671 13.658991 +A03C 5.624548 5.443821 13.621035 +A04S 7.350926 5.833674 13.815180 +A05C 7.791479 4.589361 15.003572 +A06C 7.277443 3.321729 15.034130 +A07C 7.675206 2.396098 16.031409 +A08N 8.002107 1.610173 16.835151 +A09C 8.768157 4.989961 15.946282 +A10N 9.617533 5.313036 16.682600 +A11N 4.764129 6.421023 13.411611 +A12S 3.240627 5.789674 13.189455 +A13C 3.741655 4.137123 13.453448 +A14C 2.851357 3.049886 13.460481 +A15N 2.106490 2.148857 13.492131 +A01S 14.235319 7.462772 7.810525 +A02C 13.253518 6.019679 7.595766 +A03C 13.763802 4.694529 7.557810 +A04S 15.490180 4.304677 7.751955 +A05C 15.930733 5.548990 8.940347 +A06C 15.416696 6.816622 8.970905 +A07C 15.814458 7.742253 9.968184 +A08N 16.141359 8.528178 10.771926 +A09C 16.907410 5.148391 9.883058 +A10N 17.756786 4.825316 10.619376 +A11N 12.903384 3.717327 7.348386 +A12S 11.379882 4.348675 7.126230 +A13C 11.880909 6.001226 7.390223 +A14C 10.990610 7.088463 7.397255 +A15N 10.245743 7.989491 7.428905 +A01S 9.356520 10.842222 10.379150 +A02C 10.338321 9.399129 10.593909 +A03C 9.828037 8.073979 10.631865 +A04S 8.101659 7.684127 10.437720 +A05C 7.661106 8.928440 9.249328 +A06C 8.175143 10.196072 9.218770 +A07C 7.777381 11.121703 8.221491 +A08N 7.450480 11.907628 7.417749 +A09C 6.684429 8.527841 8.306617 +A10N 5.835053 8.204766 7.570299 +A11N 10.688455 7.096777 10.841289 +A12S 12.211957 7.728125 11.063445 +A13C 11.710930 9.380676 10.799452 +A14C 12.601229 10.467913 10.792420 +A15N 13.346096 11.368941 10.760770 +A01S 5.493373 12.813928 4.315925 +A02C 6.475175 14.257021 4.530684 +A03C 5.964891 15.582171 4.568640 +A04S 4.238513 15.972024 4.374495 +A05C 3.797960 14.727711 3.186103 +A06C 4.311996 13.460079 3.155545 +A07C 3.914233 12.534448 2.158266 +A08N 3.587332 11.748523 1.354524 +A09C 2.821282 15.128311 2.243393 +A10N 1.971906 15.451386 1.507075 +A11N 6.825310 16.559373 4.778064 +A12S 8.348812 15.928024 5.000220 +A13C 7.847784 14.275473 4.736227 +A14C 8.738082 13.188236 4.729194 +A15N 9.482949 12.287207 4.697544 +A01S 10.372173 9.434478 1.747300 +A02C 9.390371 10.877571 1.532541 +A03C 9.900655 12.202721 1.494585 +A04S 11.627033 12.592574 1.688730 +A05C 12.067586 11.348261 2.877122 +A06C 11.553550 10.080629 2.907680 +A07C 11.951313 9.154998 3.904959 +A08N 12.278214 8.369073 4.708701 +A09C 13.044264 11.748861 3.819832 +A10N 13.893640 12.071936 4.556150 +A11N 9.040236 13.179923 1.285161 +A12S 7.516734 12.548574 1.063005 +A13C 8.017762 10.896023 1.326998 +A14C 7.127464 9.808786 1.334031 +A15N 6.382597 8.907757 1.365681 +A01S 18.511427 14.221672 -4.315925 +A02C 17.529625 12.778579 -4.530684 +A03C 18.039909 11.453429 -4.568640 +A04S 19.766287 11.063576 -4.374495 +A05C 20.206840 12.307889 -3.186103 +A06C 19.692804 13.575521 -3.155545 +A07C 20.090567 14.501152 -2.158266 +A08N 20.417468 15.287077 -1.354524 +A09C 21.183518 11.907289 -2.243393 +A10N 22.032894 11.584214 -1.507075 +A11N 17.179490 10.476227 -4.778064 +A12S 15.655988 11.107576 -5.000220 +A13C 16.157016 12.760127 -4.736227 +A14C 15.266718 13.847364 -4.729194 +A15N 14.521851 14.748393 -4.697544 +A01S 13.632627 17.601122 -1.747300 +A02C 14.614429 16.158029 -1.532541 +A03C 14.104145 14.832879 -1.494585 +A04S 12.377767 14.443026 -1.688730 +A05C 11.937214 15.687339 -2.877122 +A06C 12.451250 16.954971 -2.907680 +A07C 12.053487 17.880602 -3.904959 +A08N 11.726586 18.666527 -4.708701 +A09C 10.960536 15.286739 -3.819832 +A10N 10.111160 14.963664 -4.556150 +A11N 14.964564 13.855677 -1.285161 +A12S 16.488066 14.487026 -1.063005 +A13C 15.987038 16.139577 -1.326998 +A14C 16.877336 17.226814 -1.334031 +A15N 17.622203 18.127843 -1.365681 +A01S 1.217266 12.813928 16.442375 +A02C 2.199068 14.257021 16.657134 +A03C 1.688784 15.582171 16.695090 +A04S -0.037594 15.972024 16.500945 +A05C -0.478147 14.727711 15.312553 +A06C 0.035889 13.460079 15.281995 +A07C -0.361874 12.534448 14.284716 +A08N -0.688775 11.748523 13.480974 +A09C -1.454825 15.128311 14.369843 +A10N -2.304201 15.451386 13.633525 +A11N 2.549203 16.559373 16.904514 +A12S 4.072705 15.928024 17.126670 +A13C 3.571677 14.275473 16.862677 +A14C 4.461975 13.188236 16.855644 +A15N 5.206842 12.287207 16.823994 +A01S 6.096066 9.434478 13.873750 +A02C 5.114264 10.877571 13.658991 +A03C 5.624548 12.202721 13.621035 +A04S 7.350926 12.592574 13.815180 +A05C 7.791479 11.348261 15.003572 +A06C 7.277443 10.080629 15.034130 +A07C 7.675206 9.154998 16.031409 +A08N 8.002107 8.369073 16.835151 +A09C 8.768157 11.748861 15.946282 +A10N 9.617533 12.071936 16.682600 +A11N 4.764129 13.179923 13.411611 +A12S 3.240627 12.548574 13.189455 +A13C 3.741655 10.896023 13.453448 +A14C 2.851357 9.808786 13.460481 +A15N 2.106490 8.907757 13.492131 +A01S 14.235319 14.221672 7.810525 +A02C 13.253518 12.778579 7.595766 +A03C 13.763802 11.453429 7.557810 +A04S 15.490180 11.063577 7.751955 +A05C 15.930733 12.307890 8.940347 +A06C 15.416696 13.575522 8.970905 +A07C 15.814458 14.501153 9.968184 +A08N 16.141359 15.287078 10.771926 +A09C 16.907410 11.907291 9.883058 +A10N 17.756786 11.584216 10.619376 +A11N 12.903384 10.476227 7.348386 +A12S 11.379882 11.107575 7.126230 +A13C 11.880909 12.760126 7.390223 +A14C 10.990610 13.847363 7.397255 +A15N 10.245743 14.748391 7.428905 +A01S 9.356520 17.601122 10.379150 +A02C 10.338321 16.158029 10.593909 +A03C 9.828037 14.832879 10.631865 +A04S 8.101659 14.443027 10.437720 +A05C 7.661106 15.687340 9.249328 +A06C 8.175143 16.954972 9.218770 +A07C 7.777381 17.880603 8.221491 +A08N 7.450480 18.666528 7.417749 +A09C 6.684429 15.286741 8.306617 +A10N 5.835053 14.963666 7.570299 +A11N 10.688455 13.855677 10.841289 +A12S 12.211957 14.487025 11.063445 +A13C 11.710930 16.139576 10.799452 +A14C 12.601229 17.226813 10.792420 +A15N 13.346096 18.127841 10.760770 +A01S 5.493373 19.572828 4.315925 +A02C 6.475175 21.015921 4.530684 +A03C 5.964891 22.341071 4.568640 +A04S 4.238513 22.730924 4.374495 +A05C 3.797960 21.486611 3.186103 +A06C 4.311996 20.218979 3.155545 +A07C 3.914233 19.293348 2.158266 +A08N 3.587332 18.507423 1.354524 +A09C 2.821282 21.887211 2.243393 +A10N 1.971906 22.210286 1.507075 +A11N 6.825310 23.318273 4.778064 +A12S 8.348812 22.686924 5.000220 +A13C 7.847784 21.034373 4.736227 +A14C 8.738082 19.947136 4.729194 +A15N 9.482949 19.046107 4.697544 +A01S 10.372173 16.193378 1.747300 +A02C 9.390371 17.636471 1.532541 +A03C 9.900655 18.961621 1.494585 +A04S 11.627033 19.351474 1.688730 +A05C 12.067586 18.107161 2.877122 +A06C 11.553550 16.839529 2.907680 +A07C 11.951313 15.913898 3.904959 +A08N 12.278214 15.127973 4.708701 +A09C 13.044264 18.507761 3.819832 +A10N 13.893640 18.830836 4.556150 +A11N 9.040236 19.938823 1.285161 +A12S 7.516734 19.307474 1.063005 +A13C 8.017762 17.654923 1.326998 +A14C 7.127464 16.567686 1.334031 +A15N 6.382597 15.666657 1.365681 +A01S 18.511427 20.980572 -4.315925 +A02C 17.529625 19.537479 -4.530684 +A03C 18.039909 18.212329 -4.568640 +A04S 19.766287 17.822476 -4.374495 +A05C 20.206840 19.066789 -3.186103 +A06C 19.692804 20.334421 -3.155545 +A07C 20.090567 21.260052 -2.158266 +A08N 20.417468 22.045977 -1.354524 +A09C 21.183518 18.666189 -2.243393 +A10N 22.032894 18.343114 -1.507075 +A11N 17.179490 17.235127 -4.778064 +A12S 15.655988 17.866476 -5.000220 +A13C 16.157016 19.519027 -4.736227 +A14C 15.266718 20.606264 -4.729194 +A15N 14.521851 21.507293 -4.697544 +A01S 13.632627 24.360022 -1.747300 +A02C 14.614429 22.916929 -1.532541 +A03C 14.104145 21.591779 -1.494585 +A04S 12.377767 21.201926 -1.688730 +A05C 11.937214 22.446239 -2.877122 +A06C 12.451250 23.713871 -2.907680 +A07C 12.053487 24.639502 -3.904959 +A08N 11.726586 25.425427 -4.708701 +A09C 10.960536 22.045639 -3.819832 +A10N 10.111160 21.722564 -4.556150 +A11N 14.964564 20.614577 -1.285161 +A12S 16.488066 21.245926 -1.063005 +A13C 15.987038 22.898477 -1.326998 +A14C 16.877336 23.985714 -1.334031 +A15N 17.622203 24.886743 -1.365681 +A01S 1.217266 19.572828 16.442375 +A02C 2.199068 21.015921 16.657134 +A03C 1.688784 22.341071 16.695090 +A04S -0.037594 22.730924 16.500945 +A05C -0.478147 21.486611 15.312553 +A06C 0.035889 20.218979 15.281995 +A07C -0.361874 19.293348 14.284716 +A08N -0.688775 18.507423 13.480974 +A09C -1.454825 21.887211 14.369843 +A10N -2.304201 22.210286 13.633525 +A11N 2.549203 23.318273 16.904514 +A12S 4.072705 22.686924 17.126670 +A13C 3.571677 21.034373 16.862677 +A14C 4.461975 19.947136 16.855644 +A15N 5.206842 19.046107 16.823994 +A01S 6.096066 16.193378 13.873750 +A02C 5.114264 17.636471 13.658991 +A03C 5.624548 18.961621 13.621035 +A04S 7.350926 19.351474 13.815180 +A05C 7.791479 18.107161 15.003572 +A06C 7.277443 16.839529 15.034130 +A07C 7.675206 15.913898 16.031409 +A08N 8.002107 15.127973 16.835151 +A09C 8.768157 18.507761 15.946282 +A10N 9.617533 18.830836 16.682600 +A11N 4.764129 19.938823 13.411611 +A12S 3.240627 19.307474 13.189455 +A13C 3.741655 17.654923 13.453448 +A14C 2.851357 16.567686 13.460481 +A15N 2.106490 15.666657 13.492131 +A01S 14.235319 20.980572 7.810525 +A02C 13.253518 19.537479 7.595766 +A03C 13.763802 18.212329 7.557810 +A04S 15.490180 17.822477 7.751955 +A05C 15.930733 19.066790 8.940347 +A06C 15.416696 20.334422 8.970905 +A07C 15.814458 21.260053 9.968184 +A08N 16.141359 22.045978 10.771926 +A09C 16.907410 18.666191 9.883058 +A10N 17.756786 18.343116 10.619376 +A11N 12.903384 17.235127 7.348386 +A12S 11.379882 17.866475 7.126230 +A13C 11.880909 19.519026 7.390223 +A14C 10.990610 20.606263 7.397255 +A15N 10.245743 21.507291 7.428905 +A01S 9.356520 24.360022 10.379150 +A02C 10.338321 22.916929 10.593909 +A03C 9.828037 21.591779 10.631865 +A04S 8.101659 21.201927 10.437720 +A05C 7.661106 22.446240 9.249328 +A06C 8.175143 23.713872 9.218770 +A07C 7.777381 24.639503 8.221491 +A08N 7.450480 25.425428 7.417749 +A09C 6.684429 22.045641 8.306617 +A10N 5.835053 21.722566 7.570299 +A11N 10.688455 20.614577 10.841289 +A12S 12.211957 21.245925 11.063445 +A13C 11.710930 22.898476 10.799452 +A14C 12.601229 23.985713 10.792420 +A15N 13.346096 24.886741 10.760770 + + + GEOMETRY (ANGSTROMS) + +A01S -6.509027 -0.703872 4.315925 +A02C -5.527225 0.739221 4.530684 +A03C -6.037509 2.064371 4.568640 +A04S -7.763887 2.454224 4.374495 +A05C -8.204440 1.209911 3.186103 +A06C -7.690404 -0.057721 3.155545 +A07C -8.088167 -0.983352 2.158266 +A08N -8.415068 -1.769277 1.354524 +A09C -9.181118 1.610511 2.243393 +A10N -10.030494 1.933586 1.507075 +A11N -5.177090 3.041573 4.778064 +A12S -3.653588 2.410224 5.000220 +A13C -4.154616 0.757673 4.736227 +A14C -3.264318 -0.329564 4.729194 +A15N -2.519451 -1.230593 4.697544 +A01S -1.630227 -4.083322 1.747300 +A02C -2.612029 -2.640229 1.532541 +A03C -2.101745 -1.315079 1.494585 +A04S -0.375367 -0.925226 1.688730 +A05C 0.065186 -2.169539 2.877122 +A06C -0.448850 -3.437171 2.907680 +A07C -0.051087 -4.362802 3.904959 +A08N 0.275814 -5.148727 4.708701 +A09C 1.041864 -1.768939 3.819832 +A10N 1.891240 -1.445864 4.556150 +A11N -2.962164 -0.337877 1.285161 +A12S -4.485666 -0.969226 1.063005 +A13C -3.984638 -2.621777 1.326998 +A14C -4.874936 -3.709014 1.334031 +A15N -5.619803 -4.610043 1.365681 +A01S 6.509027 0.703872 -4.315925 +A02C 5.527225 -0.739221 -4.530684 +A03C 6.037509 -2.064371 -4.568640 +A04S 7.763887 -2.454224 -4.374495 +A05C 8.204440 -1.209911 -3.186103 +A06C 7.690404 0.057721 -3.155545 +A07C 8.088167 0.983352 -2.158266 +A08N 8.415068 1.769277 -1.354524 +A09C 9.181118 -1.610511 -2.243393 +A10N 10.030494 -1.933586 -1.507075 +A11N 5.177090 -3.041573 -4.778064 +A12S 3.653588 -2.410224 -5.000220 +A13C 4.154616 -0.757673 -4.736227 +A14C 3.264318 0.329564 -4.729194 +A15N 2.519451 1.230593 -4.697544 +A01S 1.630227 4.083322 -1.747300 +A02C 2.612029 2.640229 -1.532541 +A03C 2.101745 1.315079 -1.494585 +A04S 0.375367 0.925226 -1.688730 +A05C -0.065186 2.169539 -2.877122 +A06C 0.448850 3.437171 -2.907680 +A07C 0.051087 4.362802 -3.904959 +A08N -0.275814 5.148727 -4.708701 +A09C -1.041864 1.768939 -3.819832 +A10N -1.891240 1.445864 -4.556150 +A11N 2.962164 0.337877 -1.285161 +A12S 4.485666 0.969226 -1.063005 +A13C 3.984638 2.621777 -1.326998 +A14C 4.874936 3.709014 -1.334031 +A15N 5.619803 4.610043 -1.365681 +A01S -10.785134 -0.703872 16.442375 +A02C -9.803332 0.739221 16.657134 +A03C -10.313616 2.064371 16.695090 +A04S -12.039994 2.454224 16.500945 +A05C -12.480547 1.209911 15.312553 +A06C -11.966511 -0.057721 15.281995 +A07C -12.364274 -0.983352 14.284716 +A08N -12.691175 -1.769277 13.480974 +A09C -13.457225 1.610511 14.369843 +A10N -14.306601 1.933586 13.633525 +A11N -9.453197 3.041573 16.904514 +A12S -7.929695 2.410224 17.126670 +A13C -8.430723 0.757673 16.862677 +A14C -7.540425 -0.329564 16.855644 +A15N -6.795558 -1.230593 16.823994 +A01S -5.906334 -4.083322 13.873750 +A02C -6.888136 -2.640229 13.658991 +A03C -6.377852 -1.315079 13.621035 +A04S -4.651474 -0.925226 13.815180 +A05C -4.210921 -2.169539 15.003572 +A06C -4.724957 -3.437171 15.034130 +A07C -4.327194 -4.362802 16.031409 +A08N -4.000293 -5.148727 16.835151 +A09C -3.234243 -1.768939 15.946282 +A10N -2.384867 -1.445864 16.682600 +A11N -7.238271 -0.337877 13.411611 +A12S -8.761773 -0.969226 13.189455 +A13C -8.260745 -2.621777 13.453448 +A14C -9.151043 -3.709014 13.460481 +A15N -9.895910 -4.610043 13.492131 +A01S 2.232919 0.703872 7.810525 +A02C 1.251118 -0.739221 7.595766 +A03C 1.761402 -2.064371 7.557810 +A04S 3.487780 -2.454223 7.751955 +A05C 3.928333 -1.209910 8.940347 +A06C 3.414296 0.057722 8.970905 +A07C 3.812058 0.983353 9.968184 +A08N 4.138959 1.769278 10.771926 +A09C 4.905010 -1.610509 9.883058 +A10N 5.754386 -1.933584 10.619376 +A11N 0.900984 -3.041573 7.348386 +A12S -0.622518 -2.410225 7.126230 +A13C -0.121491 -0.757674 7.390223 +A14C -1.011790 0.329563 7.397255 +A15N -1.756657 1.230591 7.428905 +A01S -2.645880 4.083322 10.379150 +A02C -1.664079 2.640229 10.593909 +A03C -2.174363 1.315079 10.631865 +A04S -3.900741 0.925227 10.437720 +A05C -4.341294 2.169540 9.249328 +A06C -3.827257 3.437172 9.218770 +A07C -4.225019 4.362803 8.221491 +A08N -4.551920 5.148728 7.417749 +A09C -5.317971 1.768941 8.306617 +A10N -6.167347 1.445866 7.570299 +A11N -1.313945 0.337877 10.841289 +A12S 0.209557 0.969225 11.063445 +A13C -0.291470 2.621776 10.799452 +A14C 0.598829 3.709013 10.792420 +A15N 1.343696 4.610041 10.760770 +A01S -6.509027 6.055028 4.315925 +A02C -5.527225 7.498121 4.530684 +A03C -6.037509 8.823271 4.568640 +A04S -7.763887 9.213124 4.374495 +A05C -8.204440 7.968811 3.186103 +A06C -7.690404 6.701179 3.155545 +A07C -8.088167 5.775548 2.158266 +A08N -8.415068 4.989623 1.354524 +A09C -9.181118 8.369411 2.243393 +A10N -10.030494 8.692486 1.507075 +A11N -5.177090 9.800473 4.778064 +A12S -3.653588 9.169124 5.000220 +A13C -4.154616 7.516573 4.736227 +A14C -3.264318 6.429336 4.729194 +A15N -2.519451 5.528307 4.697544 +A01S -1.630227 2.675578 1.747300 +A02C -2.612029 4.118671 1.532541 +A03C -2.101745 5.443821 1.494585 +A04S -0.375367 5.833674 1.688730 +A05C 0.065186 4.589361 2.877122 +A06C -0.448850 3.321729 2.907680 +A07C -0.051087 2.396098 3.904959 +A08N 0.275814 1.610173 4.708701 +A09C 1.041864 4.989961 3.819832 +A10N 1.891240 5.313036 4.556150 +A11N -2.962164 6.421023 1.285161 +A12S -4.485666 5.789674 1.063005 +A13C -3.984638 4.137123 1.326998 +A14C -4.874936 3.049886 1.334031 +A15N -5.619803 2.148857 1.365681 +A01S 6.509027 7.462772 -4.315925 +A02C 5.527225 6.019679 -4.530684 +A03C 6.037509 4.694529 -4.568640 +A04S 7.763887 4.304676 -4.374495 +A05C 8.204440 5.548989 -3.186103 +A06C 7.690404 6.816621 -3.155545 +A07C 8.088167 7.742252 -2.158266 +A08N 8.415068 8.528177 -1.354524 +A09C 9.181118 5.148389 -2.243393 +A10N 10.030494 4.825314 -1.507075 +A11N 5.177090 3.717327 -4.778064 +A12S 3.653588 4.348676 -5.000220 +A13C 4.154616 6.001227 -4.736227 +A14C 3.264318 7.088464 -4.729194 +A15N 2.519451 7.989493 -4.697544 +A01S 1.630227 10.842222 -1.747300 +A02C 2.612029 9.399129 -1.532541 +A03C 2.101745 8.073979 -1.494585 +A04S 0.375367 7.684126 -1.688730 +A05C -0.065186 8.928439 -2.877122 +A06C 0.448850 10.196071 -2.907680 +A07C 0.051087 11.121702 -3.904959 +A08N -0.275814 11.907627 -4.708701 +A09C -1.041864 8.527839 -3.819832 +A10N -1.891240 8.204764 -4.556150 +A11N 2.962164 7.096777 -1.285161 +A12S 4.485666 7.728126 -1.063005 +A13C 3.984638 9.380677 -1.326998 +A14C 4.874936 10.467914 -1.334031 +A15N 5.619803 11.368943 -1.365681 +A01S -10.785134 6.055028 16.442375 +A02C -9.803332 7.498121 16.657134 +A03C -10.313616 8.823271 16.695090 +A04S -12.039994 9.213124 16.500945 +A05C -12.480547 7.968811 15.312553 +A06C -11.966511 6.701179 15.281995 +A07C -12.364274 5.775548 14.284716 +A08N -12.691175 4.989623 13.480974 +A09C -13.457225 8.369411 14.369843 +A10N -14.306601 8.692486 13.633525 +A11N -9.453197 9.800473 16.904514 +A12S -7.929695 9.169124 17.126670 +A13C -8.430723 7.516573 16.862677 +A14C -7.540425 6.429336 16.855644 +A15N -6.795558 5.528307 16.823994 +A01S -5.906334 2.675578 13.873750 +A02C -6.888136 4.118671 13.658991 +A03C -6.377852 5.443821 13.621035 +A04S -4.651474 5.833674 13.815180 +A05C -4.210921 4.589361 15.003572 +A06C -4.724957 3.321729 15.034130 +A07C -4.327194 2.396098 16.031409 +A08N -4.000293 1.610173 16.835151 +A09C -3.234243 4.989961 15.946282 +A10N -2.384867 5.313036 16.682600 +A11N -7.238271 6.421023 13.411611 +A12S -8.761773 5.789674 13.189455 +A13C -8.260745 4.137123 13.453448 +A14C -9.151043 3.049886 13.460481 +A15N -9.895910 2.148857 13.492131 +A01S 2.232919 7.462772 7.810525 +A02C 1.251118 6.019679 7.595766 +A03C 1.761402 4.694529 7.557810 +A04S 3.487780 4.304677 7.751955 +A05C 3.928333 5.548990 8.940347 +A06C 3.414296 6.816622 8.970905 +A07C 3.812058 7.742253 9.968184 +A08N 4.138959 8.528178 10.771926 +A09C 4.905010 5.148391 9.883058 +A10N 5.754386 4.825316 10.619376 +A11N 0.900984 3.717327 7.348386 +A12S -0.622518 4.348675 7.126230 +A13C -0.121491 6.001226 7.390223 +A14C -1.011790 7.088463 7.397255 +A15N -1.756657 7.989491 7.428905 +A01S -2.645880 10.842222 10.379150 +A02C -1.664079 9.399129 10.593909 +A03C -2.174363 8.073979 10.631865 +A04S -3.900741 7.684127 10.437720 +A05C -4.341294 8.928440 9.249328 +A06C -3.827257 10.196072 9.218770 +A07C -4.225019 11.121703 8.221491 +A08N -4.551920 11.907628 7.417749 +A09C -5.317971 8.527841 8.306617 +A10N -6.167347 8.204766 7.570299 +A11N -1.313945 7.096777 10.841289 +A12S 0.209557 7.728125 11.063445 +A13C -0.291470 9.380676 10.799452 +A14C 0.598829 10.467913 10.792420 +A15N 1.343696 11.368941 10.760770 +A01S -6.509027 12.813928 4.315925 +A02C -5.527225 14.257021 4.530684 +A03C -6.037509 15.582171 4.568640 +A04S -7.763887 15.972024 4.374495 +A05C -8.204440 14.727711 3.186103 +A06C -7.690404 13.460079 3.155545 +A07C -8.088167 12.534448 2.158266 +A08N -8.415068 11.748523 1.354524 +A09C -9.181118 15.128311 2.243393 +A10N -10.030494 15.451386 1.507075 +A11N -5.177090 16.559373 4.778064 +A12S -3.653588 15.928024 5.000220 +A13C -4.154616 14.275473 4.736227 +A14C -3.264318 13.188236 4.729194 +A15N -2.519451 12.287207 4.697544 +A01S -1.630227 9.434478 1.747300 +A02C -2.612029 10.877571 1.532541 +A03C -2.101745 12.202721 1.494585 +A04S -0.375367 12.592574 1.688730 +A05C 0.065186 11.348261 2.877122 +A06C -0.448850 10.080629 2.907680 +A07C -0.051087 9.154998 3.904959 +A08N 0.275814 8.369073 4.708701 +A09C 1.041864 11.748861 3.819832 +A10N 1.891240 12.071936 4.556150 +A11N -2.962164 13.179923 1.285161 +A12S -4.485666 12.548574 1.063005 +A13C -3.984638 10.896023 1.326998 +A14C -4.874936 9.808786 1.334031 +A15N -5.619803 8.907757 1.365681 +A01S 6.509027 14.221672 -4.315925 +A02C 5.527225 12.778579 -4.530684 +A03C 6.037509 11.453429 -4.568640 +A04S 7.763887 11.063576 -4.374495 +A05C 8.204440 12.307889 -3.186103 +A06C 7.690404 13.575521 -3.155545 +A07C 8.088167 14.501152 -2.158266 +A08N 8.415068 15.287077 -1.354524 +A09C 9.181118 11.907289 -2.243393 +A10N 10.030494 11.584214 -1.507075 +A11N 5.177090 10.476227 -4.778064 +A12S 3.653588 11.107576 -5.000220 +A13C 4.154616 12.760127 -4.736227 +A14C 3.264318 13.847364 -4.729194 +A15N 2.519451 14.748393 -4.697544 +A01S 1.630227 17.601122 -1.747300 +A02C 2.612029 16.158029 -1.532541 +A03C 2.101745 14.832879 -1.494585 +A04S 0.375367 14.443026 -1.688730 +A05C -0.065186 15.687339 -2.877122 +A06C 0.448850 16.954971 -2.907680 +A07C 0.051087 17.880602 -3.904959 +A08N -0.275814 18.666527 -4.708701 +A09C -1.041864 15.286739 -3.819832 +A10N -1.891240 14.963664 -4.556150 +A11N 2.962164 13.855677 -1.285161 +A12S 4.485666 14.487026 -1.063005 +A13C 3.984638 16.139577 -1.326998 +A14C 4.874936 17.226814 -1.334031 +A15N 5.619803 18.127843 -1.365681 +A01S -10.785134 12.813928 16.442375 +A02C -9.803332 14.257021 16.657134 +A03C -10.313616 15.582171 16.695090 +A04S -12.039994 15.972024 16.500945 +A05C -12.480547 14.727711 15.312553 +A06C -11.966511 13.460079 15.281995 +A07C -12.364274 12.534448 14.284716 +A08N -12.691175 11.748523 13.480974 +A09C -13.457225 15.128311 14.369843 +A10N -14.306601 15.451386 13.633525 +A11N -9.453197 16.559373 16.904514 +A12S -7.929695 15.928024 17.126670 +A13C -8.430723 14.275473 16.862677 +A14C -7.540425 13.188236 16.855644 +A15N -6.795558 12.287207 16.823994 +A01S -5.906334 9.434478 13.873750 +A02C -6.888136 10.877571 13.658991 +A03C -6.377852 12.202721 13.621035 +A04S -4.651474 12.592574 13.815180 +A05C -4.210921 11.348261 15.003572 +A06C -4.724957 10.080629 15.034130 +A07C -4.327194 9.154998 16.031409 +A08N -4.000293 8.369073 16.835151 +A09C -3.234243 11.748861 15.946282 +A10N -2.384867 12.071936 16.682600 +A11N -7.238271 13.179923 13.411611 +A12S -8.761773 12.548574 13.189455 +A13C -8.260745 10.896023 13.453448 +A14C -9.151043 9.808786 13.460481 +A15N -9.895910 8.907757 13.492131 +A01S 2.232919 14.221672 7.810525 +A02C 1.251118 12.778579 7.595766 +A03C 1.761402 11.453429 7.557810 +A04S 3.487780 11.063577 7.751955 +A05C 3.928333 12.307890 8.940347 +A06C 3.414296 13.575522 8.970905 +A07C 3.812058 14.501153 9.968184 +A08N 4.138959 15.287078 10.771926 +A09C 4.905010 11.907291 9.883058 +A10N 5.754386 11.584216 10.619376 +A11N 0.900984 10.476227 7.348386 +A12S -0.622518 11.107575 7.126230 +A13C -0.121491 12.760126 7.390223 +A14C -1.011790 13.847363 7.397255 +A15N -1.756657 14.748391 7.428905 +A01S -2.645880 17.601122 10.379150 +A02C -1.664079 16.158029 10.593909 +A03C -2.174363 14.832879 10.631865 +A04S -3.900741 14.443027 10.437720 +A05C -4.341294 15.687340 9.249328 +A06C -3.827257 16.954972 9.218770 +A07C -4.225019 17.880603 8.221491 +A08N -4.551920 18.666528 7.417749 +A09C -5.317971 15.286741 8.306617 +A10N -6.167347 14.963666 7.570299 +A11N -1.313945 13.855677 10.841289 +A12S 0.209557 14.487025 11.063445 +A13C -0.291470 16.139576 10.799452 +A14C 0.598829 17.226813 10.792420 +A15N 1.343696 18.127841 10.760770 +A01S -6.509027 19.572828 4.315925 +A02C -5.527225 21.015921 4.530684 +A03C -6.037509 22.341071 4.568640 +A04S -7.763887 22.730924 4.374495 +A05C -8.204440 21.486611 3.186103 +A06C -7.690404 20.218979 3.155545 +A07C -8.088167 19.293348 2.158266 +A08N -8.415068 18.507423 1.354524 +A09C -9.181118 21.887211 2.243393 +A10N -10.030494 22.210286 1.507075 +A11N -5.177090 23.318273 4.778064 +A12S -3.653588 22.686924 5.000220 +A13C -4.154616 21.034373 4.736227 +A14C -3.264318 19.947136 4.729194 +A15N -2.519451 19.046107 4.697544 +A01S -1.630227 16.193378 1.747300 +A02C -2.612029 17.636471 1.532541 +A03C -2.101745 18.961621 1.494585 +A04S -0.375367 19.351474 1.688730 +A05C 0.065186 18.107161 2.877122 +A06C -0.448850 16.839529 2.907680 +A07C -0.051087 15.913898 3.904959 +A08N 0.275814 15.127973 4.708701 +A09C 1.041864 18.507761 3.819832 +A10N 1.891240 18.830836 4.556150 +A11N -2.962164 19.938823 1.285161 +A12S -4.485666 19.307474 1.063005 +A13C -3.984638 17.654923 1.326998 +A14C -4.874936 16.567686 1.334031 +A15N -5.619803 15.666657 1.365681 +A01S 6.509027 20.980572 -4.315925 +A02C 5.527225 19.537479 -4.530684 +A03C 6.037509 18.212329 -4.568640 +A04S 7.763887 17.822476 -4.374495 +A05C 8.204440 19.066789 -3.186103 +A06C 7.690404 20.334421 -3.155545 +A07C 8.088167 21.260052 -2.158266 +A08N 8.415068 22.045977 -1.354524 +A09C 9.181118 18.666189 -2.243393 +A10N 10.030494 18.343114 -1.507075 +A11N 5.177090 17.235127 -4.778064 +A12S 3.653588 17.866476 -5.000220 +A13C 4.154616 19.519027 -4.736227 +A14C 3.264318 20.606264 -4.729194 +A15N 2.519451 21.507293 -4.697544 +A01S 1.630227 24.360022 -1.747300 +A02C 2.612029 22.916929 -1.532541 +A03C 2.101745 21.591779 -1.494585 +A04S 0.375367 21.201926 -1.688730 +A05C -0.065186 22.446239 -2.877122 +A06C 0.448850 23.713871 -2.907680 +A07C 0.051087 24.639502 -3.904959 +A08N -0.275814 25.425427 -4.708701 +A09C -1.041864 22.045639 -3.819832 +A10N -1.891240 21.722564 -4.556150 +A11N 2.962164 20.614577 -1.285161 +A12S 4.485666 21.245926 -1.063005 +A13C 3.984638 22.898477 -1.326998 +A14C 4.874936 23.985714 -1.334031 +A15N 5.619803 24.886743 -1.365681 +A01S -10.785134 19.572828 16.442375 +A02C -9.803332 21.015921 16.657134 +A03C -10.313616 22.341071 16.695090 +A04S -12.039994 22.730924 16.500945 +A05C -12.480547 21.486611 15.312553 +A06C -11.966511 20.218979 15.281995 +A07C -12.364274 19.293348 14.284716 +A08N -12.691175 18.507423 13.480974 +A09C -13.457225 21.887211 14.369843 +A10N -14.306601 22.210286 13.633525 +A11N -9.453197 23.318273 16.904514 +A12S -7.929695 22.686924 17.126670 +A13C -8.430723 21.034373 16.862677 +A14C -7.540425 19.947136 16.855644 +A15N -6.795558 19.046107 16.823994 +A01S -5.906334 16.193378 13.873750 +A02C -6.888136 17.636471 13.658991 +A03C -6.377852 18.961621 13.621035 +A04S -4.651474 19.351474 13.815180 +A05C -4.210921 18.107161 15.003572 +A06C -4.724957 16.839529 15.034130 +A07C -4.327194 15.913898 16.031409 +A08N -4.000293 15.127973 16.835151 +A09C -3.234243 18.507761 15.946282 +A10N -2.384867 18.830836 16.682600 +A11N -7.238271 19.938823 13.411611 +A12S -8.761773 19.307474 13.189455 +A13C -8.260745 17.654923 13.453448 +A14C -9.151043 16.567686 13.460481 +A15N -9.895910 15.666657 13.492131 +A01S 2.232919 20.980572 7.810525 +A02C 1.251118 19.537479 7.595766 +A03C 1.761402 18.212329 7.557810 +A04S 3.487780 17.822477 7.751955 +A05C 3.928333 19.066790 8.940347 +A06C 3.414296 20.334422 8.970905 +A07C 3.812058 21.260053 9.968184 +A08N 4.138959 22.045978 10.771926 +A09C 4.905010 18.666191 9.883058 +A10N 5.754386 18.343116 10.619376 +A11N 0.900984 17.235127 7.348386 +A12S -0.622518 17.866475 7.126230 +A13C -0.121491 19.519026 7.390223 +A14C -1.011790 20.606263 7.397255 +A15N -1.756657 21.507291 7.428905 +A01S -2.645880 24.360022 10.379150 +A02C -1.664079 22.916929 10.593909 +A03C -2.174363 21.591779 10.631865 +A04S -3.900741 21.201927 10.437720 +A05C -4.341294 22.446240 9.249328 +A06C -3.827257 23.713872 9.218770 +A07C -4.225019 24.639503 8.221491 +A08N -4.551920 25.425428 7.417749 +A09C -5.317971 22.045641 8.306617 +A10N -6.167347 21.722566 7.570299 +A11N -1.313945 20.614577 10.841289 +A12S 0.209557 21.245925 11.063445 +A13C -0.291470 22.898476 10.799452 +A14C 0.598829 23.985713 10.792420 +A15N 1.343696 24.886741 10.760770 +A01S 5.493373 -0.703872 4.315925 +A02C 6.475175 0.739221 4.530684 +A03C 5.964891 2.064371 4.568640 +A04S 4.238513 2.454224 4.374495 +A05C 3.797960 1.209911 3.186103 +A06C 4.311996 -0.057721 3.155545 +A07C 3.914233 -0.983352 2.158266 +A08N 3.587332 -1.769277 1.354524 +A09C 2.821282 1.610511 2.243393 +A10N 1.971906 1.933586 1.507075 +A11N 6.825310 3.041573 4.778064 +A12S 8.348812 2.410224 5.000220 +A13C 7.847784 0.757673 4.736227 +A14C 8.738082 -0.329564 4.729194 +A15N 9.482949 -1.230593 4.697544 +A01S 10.372173 -4.083322 1.747300 +A02C 9.390371 -2.640229 1.532541 +A03C 9.900655 -1.315079 1.494585 +A04S 11.627033 -0.925226 1.688730 +A05C 12.067586 -2.169539 2.877122 +A06C 11.553550 -3.437171 2.907680 +A07C 11.951313 -4.362802 3.904959 +A08N 12.278214 -5.148727 4.708701 +A09C 13.044264 -1.768939 3.819832 +A10N 13.893640 -1.445864 4.556150 +A11N 9.040236 -0.337877 1.285161 +A12S 7.516734 -0.969226 1.063005 +A13C 8.017762 -2.621777 1.326998 +A14C 7.127464 -3.709014 1.334031 +A15N 6.382597 -4.610043 1.365681 +A01S 18.511427 0.703872 -4.315925 +A02C 17.529625 -0.739221 -4.530684 +A03C 18.039909 -2.064371 -4.568640 +A04S 19.766287 -2.454224 -4.374495 +A05C 20.206840 -1.209911 -3.186103 +A06C 19.692804 0.057721 -3.155545 +A07C 20.090567 0.983352 -2.158266 +A08N 20.417468 1.769277 -1.354524 +A09C 21.183518 -1.610511 -2.243393 +A10N 22.032894 -1.933586 -1.507075 +A11N 17.179490 -3.041573 -4.778064 +A12S 15.655988 -2.410224 -5.000220 +A13C 16.157016 -0.757673 -4.736227 +A14C 15.266718 0.329564 -4.729194 +A15N 14.521851 1.230593 -4.697544 +A01S 13.632627 4.083322 -1.747300 +A02C 14.614429 2.640229 -1.532541 +A03C 14.104145 1.315079 -1.494585 +A04S 12.377767 0.925226 -1.688730 +A05C 11.937214 2.169539 -2.877122 +A06C 12.451250 3.437171 -2.907680 +A07C 12.053487 4.362802 -3.904959 +A08N 11.726586 5.148727 -4.708701 +A09C 10.960536 1.768939 -3.819832 +A10N 10.111160 1.445864 -4.556150 +A11N 14.964564 0.337877 -1.285161 +A12S 16.488066 0.969226 -1.063005 +A13C 15.987038 2.621777 -1.326998 +A14C 16.877336 3.709014 -1.334031 +A15N 17.622203 4.610043 -1.365681 +A01S 1.217266 -0.703872 16.442375 +A02C 2.199068 0.739221 16.657134 +A03C 1.688784 2.064371 16.695090 +A04S -0.037594 2.454224 16.500945 +A05C -0.478147 1.209911 15.312553 +A06C 0.035889 -0.057721 15.281995 +A07C -0.361874 -0.983352 14.284716 +A08N -0.688775 -1.769277 13.480974 +A09C -1.454825 1.610511 14.369843 +A10N -2.304201 1.933586 13.633525 +A11N 2.549203 3.041573 16.904514 +A12S 4.072705 2.410224 17.126670 +A13C 3.571677 0.757673 16.862677 +A14C 4.461975 -0.329564 16.855644 +A15N 5.206842 -1.230593 16.823994 +A01S 6.096066 -4.083322 13.873750 +A02C 5.114264 -2.640229 13.658991 +A03C 5.624548 -1.315079 13.621035 +A04S 7.350926 -0.925226 13.815180 +A05C 7.791479 -2.169539 15.003572 +A06C 7.277443 -3.437171 15.034130 +A07C 7.675206 -4.362802 16.031409 +A08N 8.002107 -5.148727 16.835151 +A09C 8.768157 -1.768939 15.946282 +A10N 9.617533 -1.445864 16.682600 +A11N 4.764129 -0.337877 13.411611 +A12S 3.240627 -0.969226 13.189455 +A13C 3.741655 -2.621777 13.453448 +A14C 2.851357 -3.709014 13.460481 +A15N 2.106490 -4.610043 13.492131 +A01S 14.235319 0.703872 7.810525 +A02C 13.253518 -0.739221 7.595766 +A03C 13.763802 -2.064371 7.557810 +A04S 15.490180 -2.454223 7.751955 +A05C 15.930733 -1.209910 8.940347 +A06C 15.416696 0.057722 8.970905 +A07C 15.814458 0.983353 9.968184 +A08N 16.141359 1.769278 10.771926 +A09C 16.907410 -1.610509 9.883058 +A10N 17.756786 -1.933584 10.619376 +A11N 12.903384 -3.041573 7.348386 +A12S 11.379882 -2.410225 7.126230 +A13C 11.880909 -0.757674 7.390223 +A14C 10.990610 0.329563 7.397255 +A15N 10.245743 1.230591 7.428905 +A01S 9.356520 4.083322 10.379150 +A02C 10.338321 2.640229 10.593909 +A03C 9.828037 1.315079 10.631865 +A04S 8.101659 0.925227 10.437720 +A05C 7.661106 2.169540 9.249328 +A06C 8.175143 3.437172 9.218770 +A07C 7.777381 4.362803 8.221491 +A08N 7.450480 5.148728 7.417749 +A09C 6.684429 1.768941 8.306617 +A10N 5.835053 1.445866 7.570299 +A11N 10.688455 0.337877 10.841289 +A12S 12.211957 0.969225 11.063445 +A13C 11.710930 2.621776 10.799452 +A14C 12.601229 3.709013 10.792420 +A15N 13.346096 4.610041 10.760770 +A01S 5.493373 6.055028 4.315925 +A02C 6.475175 7.498121 4.530684 +A03C 5.964891 8.823271 4.568640 +A04S 4.238513 9.213124 4.374495 +A05C 3.797960 7.968811 3.186103 +A06C 4.311996 6.701179 3.155545 +A07C 3.914233 5.775548 2.158266 +A08N 3.587332 4.989623 1.354524 +A09C 2.821282 8.369411 2.243393 +A10N 1.971906 8.692486 1.507075 +A11N 6.825310 9.800473 4.778064 +A12S 8.348812 9.169124 5.000220 +A13C 7.847784 7.516573 4.736227 +A14C 8.738082 6.429336 4.729194 +A15N 9.482949 5.528307 4.697544 +A01S 10.372173 2.675578 1.747300 +A02C 9.390371 4.118671 1.532541 +A03C 9.900655 5.443821 1.494585 +A04S 11.627033 5.833674 1.688730 +A05C 12.067586 4.589361 2.877122 +A06C 11.553550 3.321729 2.907680 +A07C 11.951313 2.396098 3.904959 +A08N 12.278214 1.610173 4.708701 +A09C 13.044264 4.989961 3.819832 +A10N 13.893640 5.313036 4.556150 +A11N 9.040236 6.421023 1.285161 +A12S 7.516734 5.789674 1.063005 +A13C 8.017762 4.137123 1.326998 +A14C 7.127464 3.049886 1.334031 +A15N 6.382597 2.148857 1.365681 +A01S 18.511427 7.462772 -4.315925 +A02C 17.529625 6.019679 -4.530684 +A03C 18.039909 4.694529 -4.568640 +A04S 19.766287 4.304676 -4.374495 +A05C 20.206840 5.548989 -3.186103 +A06C 19.692804 6.816621 -3.155545 +A07C 20.090567 7.742252 -2.158266 +A08N 20.417468 8.528177 -1.354524 +A09C 21.183518 5.148389 -2.243393 +A10N 22.032894 4.825314 -1.507075 +A11N 17.179490 3.717327 -4.778064 +A12S 15.655988 4.348676 -5.000220 +A13C 16.157016 6.001227 -4.736227 +A14C 15.266718 7.088464 -4.729194 +A15N 14.521851 7.989493 -4.697544 +A01S 13.632627 10.842222 -1.747300 +A02C 14.614429 9.399129 -1.532541 +A03C 14.104145 8.073979 -1.494585 +A04S 12.377767 7.684126 -1.688730 +A05C 11.937214 8.928439 -2.877122 +A06C 12.451250 10.196071 -2.907680 +A07C 12.053487 11.121702 -3.904959 +A08N 11.726586 11.907627 -4.708701 +A09C 10.960536 8.527839 -3.819832 +A10N 10.111160 8.204764 -4.556150 +A11N 14.964564 7.096777 -1.285161 +A12S 16.488066 7.728126 -1.063005 +A13C 15.987038 9.380677 -1.326998 +A14C 16.877336 10.467914 -1.334031 +A15N 17.622203 11.368943 -1.365681 +A01S 1.217266 6.055028 16.442375 +A02C 2.199068 7.498121 16.657134 +A03C 1.688784 8.823271 16.695090 +A04S -0.037594 9.213124 16.500945 +A05C -0.478147 7.968811 15.312553 +A06C 0.035889 6.701179 15.281995 +A07C -0.361874 5.775548 14.284716 +A08N -0.688775 4.989623 13.480974 +A09C -1.454825 8.369411 14.369843 +A10N -2.304201 8.692486 13.633525 +A11N 2.549203 9.800473 16.904514 +A12S 4.072705 9.169124 17.126670 +A13C 3.571677 7.516573 16.862677 +A14C 4.461975 6.429336 16.855644 +A15N 5.206842 5.528307 16.823994 +A01S 6.096066 2.675578 13.873750 +A02C 5.114264 4.118671 13.658991 +A03C 5.624548 5.443821 13.621035 +A04S 7.350926 5.833674 13.815180 +A05C 7.791479 4.589361 15.003572 +A06C 7.277443 3.321729 15.034130 +A07C 7.675206 2.396098 16.031409 +A08N 8.002107 1.610173 16.835151 +A09C 8.768157 4.989961 15.946282 +A10N 9.617533 5.313036 16.682600 +A11N 4.764129 6.421023 13.411611 +A12S 3.240627 5.789674 13.189455 +A13C 3.741655 4.137123 13.453448 +A14C 2.851357 3.049886 13.460481 +A15N 2.106490 2.148857 13.492131 +A01S 14.235319 7.462772 7.810525 +A02C 13.253518 6.019679 7.595766 +A03C 13.763802 4.694529 7.557810 +A04S 15.490180 4.304677 7.751955 +A05C 15.930733 5.548990 8.940347 +A06C 15.416696 6.816622 8.970905 +A07C 15.814458 7.742253 9.968184 +A08N 16.141359 8.528178 10.771926 +A09C 16.907410 5.148391 9.883058 +A10N 17.756786 4.825316 10.619376 +A11N 12.903384 3.717327 7.348386 +A12S 11.379882 4.348675 7.126230 +A13C 11.880909 6.001226 7.390223 +A14C 10.990610 7.088463 7.397255 +A15N 10.245743 7.989491 7.428905 +A01S 9.356520 10.842222 10.379150 +A02C 10.338321 9.399129 10.593909 +A03C 9.828037 8.073979 10.631865 +A04S 8.101659 7.684127 10.437720 +A05C 7.661106 8.928440 9.249328 +A06C 8.175143 10.196072 9.218770 +A07C 7.777381 11.121703 8.221491 +A08N 7.450480 11.907628 7.417749 +A09C 6.684429 8.527841 8.306617 +A10N 5.835053 8.204766 7.570299 +A11N 10.688455 7.096777 10.841289 +A12S 12.211957 7.728125 11.063445 +A13C 11.710930 9.380676 10.799452 +A14C 12.601229 10.467913 10.792420 +A15N 13.346096 11.368941 10.760770 +A01S 5.493373 12.813928 4.315925 +A02C 6.475175 14.257021 4.530684 +A03C 5.964891 15.582171 4.568640 +A04S 4.238513 15.972024 4.374495 +A05C 3.797960 14.727711 3.186103 +A06C 4.311996 13.460079 3.155545 +A07C 3.914233 12.534448 2.158266 +A08N 3.587332 11.748523 1.354524 +A09C 2.821282 15.128311 2.243393 +A10N 1.971906 15.451386 1.507075 +A11N 6.825310 16.559373 4.778064 +A12S 8.348812 15.928024 5.000220 +A13C 7.847784 14.275473 4.736227 +A14C 8.738082 13.188236 4.729194 +A15N 9.482949 12.287207 4.697544 +A01S 10.372173 9.434478 1.747300 +A02C 9.390371 10.877571 1.532541 +A03C 9.900655 12.202721 1.494585 +A04S 11.627033 12.592574 1.688730 +A05C 12.067586 11.348261 2.877122 +A06C 11.553550 10.080629 2.907680 +A07C 11.951313 9.154998 3.904959 +A08N 12.278214 8.369073 4.708701 +A09C 13.044264 11.748861 3.819832 +A10N 13.893640 12.071936 4.556150 +A11N 9.040236 13.179923 1.285161 +A12S 7.516734 12.548574 1.063005 +A13C 8.017762 10.896023 1.326998 +A14C 7.127464 9.808786 1.334031 +A15N 6.382597 8.907757 1.365681 +A01S 18.511427 14.221672 -4.315925 +A02C 17.529625 12.778579 -4.530684 +A03C 18.039909 11.453429 -4.568640 +A04S 19.766287 11.063576 -4.374495 +A05C 20.206840 12.307889 -3.186103 +A06C 19.692804 13.575521 -3.155545 +A07C 20.090567 14.501152 -2.158266 +A08N 20.417468 15.287077 -1.354524 +A09C 21.183518 11.907289 -2.243393 +A10N 22.032894 11.584214 -1.507075 +A11N 17.179490 10.476227 -4.778064 +A12S 15.655988 11.107576 -5.000220 +A13C 16.157016 12.760127 -4.736227 +A14C 15.266718 13.847364 -4.729194 +A15N 14.521851 14.748393 -4.697544 +A01S 13.632627 17.601122 -1.747300 +A02C 14.614429 16.158029 -1.532541 +A03C 14.104145 14.832879 -1.494585 +A04S 12.377767 14.443026 -1.688730 +A05C 11.937214 15.687339 -2.877122 +A06C 12.451250 16.954971 -2.907680 +A07C 12.053487 17.880602 -3.904959 +A08N 11.726586 18.666527 -4.708701 +A09C 10.960536 15.286739 -3.819832 +A10N 10.111160 14.963664 -4.556150 +A11N 14.964564 13.855677 -1.285161 +A12S 16.488066 14.487026 -1.063005 +A13C 15.987038 16.139577 -1.326998 +A14C 16.877336 17.226814 -1.334031 +A15N 17.622203 18.127843 -1.365681 +A01S 1.217266 12.813928 16.442375 +A02C 2.199068 14.257021 16.657134 +A03C 1.688784 15.582171 16.695090 +A04S -0.037594 15.972024 16.500945 +A05C -0.478147 14.727711 15.312553 +A06C 0.035889 13.460079 15.281995 +A07C -0.361874 12.534448 14.284716 +A08N -0.688775 11.748523 13.480974 +A09C -1.454825 15.128311 14.369843 +A10N -2.304201 15.451386 13.633525 +A11N 2.549203 16.559373 16.904514 +A12S 4.072705 15.928024 17.126670 +A13C 3.571677 14.275473 16.862677 +A14C 4.461975 13.188236 16.855644 +A15N 5.206842 12.287207 16.823994 +A01S 6.096066 9.434478 13.873750 +A02C 5.114264 10.877571 13.658991 +A03C 5.624548 12.202721 13.621035 +A04S 7.350926 12.592574 13.815180 +A05C 7.791479 11.348261 15.003572 +A06C 7.277443 10.080629 15.034130 +A07C 7.675206 9.154998 16.031409 +A08N 8.002107 8.369073 16.835151 +A09C 8.768157 11.748861 15.946282 +A10N 9.617533 12.071936 16.682600 +A11N 4.764129 13.179923 13.411611 +A12S 3.240627 12.548574 13.189455 +A13C 3.741655 10.896023 13.453448 +A14C 2.851357 9.808786 13.460481 +A15N 2.106490 8.907757 13.492131 +A01S 14.235319 14.221672 7.810525 +A02C 13.253518 12.778579 7.595766 +A03C 13.763802 11.453429 7.557810 +A04S 15.490180 11.063577 7.751955 +A05C 15.930733 12.307890 8.940347 +A06C 15.416696 13.575522 8.970905 +A07C 15.814458 14.501153 9.968184 +A08N 16.141359 15.287078 10.771926 +A09C 16.907410 11.907291 9.883058 +A10N 17.756786 11.584216 10.619376 +A11N 12.903384 10.476227 7.348386 +A12S 11.379882 11.107575 7.126230 +A13C 11.880909 12.760126 7.390223 +A14C 10.990610 13.847363 7.397255 +A15N 10.245743 14.748391 7.428905 +A01S 9.356520 17.601122 10.379150 +A02C 10.338321 16.158029 10.593909 +A03C 9.828037 14.832879 10.631865 +A04S 8.101659 14.443027 10.437720 +A05C 7.661106 15.687340 9.249328 +A06C 8.175143 16.954972 9.218770 +A07C 7.777381 17.880603 8.221491 +A08N 7.450480 18.666528 7.417749 +A09C 6.684429 15.286741 8.306617 +A10N 5.835053 14.963666 7.570299 +A11N 10.688455 13.855677 10.841289 +A12S 12.211957 14.487025 11.063445 +A13C 11.710930 16.139576 10.799452 +A14C 12.601229 17.226813 10.792420 +A15N 13.346096 18.127841 10.760770 +A01S 5.493373 19.572828 4.315925 +A02C 6.475175 21.015921 4.530684 +A03C 5.964891 22.341071 4.568640 +A04S 4.238513 22.730924 4.374495 +A05C 3.797960 21.486611 3.186103 +A06C 4.311996 20.218979 3.155545 +A07C 3.914233 19.293348 2.158266 +A08N 3.587332 18.507423 1.354524 +A09C 2.821282 21.887211 2.243393 +A10N 1.971906 22.210286 1.507075 +A11N 6.825310 23.318273 4.778064 +A12S 8.348812 22.686924 5.000220 +A13C 7.847784 21.034373 4.736227 +A14C 8.738082 19.947136 4.729194 +A15N 9.482949 19.046107 4.697544 +A01S 10.372173 16.193378 1.747300 +A02C 9.390371 17.636471 1.532541 +A03C 9.900655 18.961621 1.494585 +A04S 11.627033 19.351474 1.688730 +A05C 12.067586 18.107161 2.877122 +A06C 11.553550 16.839529 2.907680 +A07C 11.951313 15.913898 3.904959 +A08N 12.278214 15.127973 4.708701 +A09C 13.044264 18.507761 3.819832 +A10N 13.893640 18.830836 4.556150 +A11N 9.040236 19.938823 1.285161 +A12S 7.516734 19.307474 1.063005 +A13C 8.017762 17.654923 1.326998 +A14C 7.127464 16.567686 1.334031 +A15N 6.382597 15.666657 1.365681 +A01S 18.511427 20.980572 -4.315925 +A02C 17.529625 19.537479 -4.530684 +A03C 18.039909 18.212329 -4.568640 +A04S 19.766287 17.822476 -4.374495 +A05C 20.206840 19.066789 -3.186103 +A06C 19.692804 20.334421 -3.155545 +A07C 20.090567 21.260052 -2.158266 +A08N 20.417468 22.045977 -1.354524 +A09C 21.183518 18.666189 -2.243393 +A10N 22.032894 18.343114 -1.507075 +A11N 17.179490 17.235127 -4.778064 +A12S 15.655988 17.866476 -5.000220 +A13C 16.157016 19.519027 -4.736227 +A14C 15.266718 20.606264 -4.729194 +A15N 14.521851 21.507293 -4.697544 +A01S 13.632627 24.360022 -1.747300 +A02C 14.614429 22.916929 -1.532541 +A03C 14.104145 21.591779 -1.494585 +A04S 12.377767 21.201926 -1.688730 +A05C 11.937214 22.446239 -2.877122 +A06C 12.451250 23.713871 -2.907680 +A07C 12.053487 24.639502 -3.904959 +A08N 11.726586 25.425427 -4.708701 +A09C 10.960536 22.045639 -3.819832 +A10N 10.111160 21.722564 -4.556150 +A11N 14.964564 20.614577 -1.285161 +A12S 16.488066 21.245926 -1.063005 +A13C 15.987038 22.898477 -1.326998 +A14C 16.877336 23.985714 -1.334031 +A15N 17.622203 24.886743 -1.365681 +A01S 1.217266 19.572828 16.442375 +A02C 2.199068 21.015921 16.657134 +A03C 1.688784 22.341071 16.695090 +A04S -0.037594 22.730924 16.500945 +A05C -0.478147 21.486611 15.312553 +A06C 0.035889 20.218979 15.281995 +A07C -0.361874 19.293348 14.284716 +A08N -0.688775 18.507423 13.480974 +A09C -1.454825 21.887211 14.369843 +A10N -2.304201 22.210286 13.633525 +A11N 2.549203 23.318273 16.904514 +A12S 4.072705 22.686924 17.126670 +A13C 3.571677 21.034373 16.862677 +A14C 4.461975 19.947136 16.855644 +A15N 5.206842 19.046107 16.823994 +A01S 6.096066 16.193378 13.873750 +A02C 5.114264 17.636471 13.658991 +A03C 5.624548 18.961621 13.621035 +A04S 7.350926 19.351474 13.815180 +A05C 7.791479 18.107161 15.003572 +A06C 7.277443 16.839529 15.034130 +A07C 7.675206 15.913898 16.031409 +A08N 8.002107 15.127973 16.835151 +A09C 8.768157 18.507761 15.946282 +A10N 9.617533 18.830836 16.682600 +A11N 4.764129 19.938823 13.411611 +A12S 3.240627 19.307474 13.189455 +A13C 3.741655 17.654923 13.453448 +A14C 2.851357 16.567686 13.460481 +A15N 2.106490 15.666657 13.492131 +A01S 14.235319 20.980572 7.810525 +A02C 13.253518 19.537479 7.595766 +A03C 13.763802 18.212329 7.557810 +A04S 15.490180 17.822477 7.751955 +A05C 15.930733 19.066790 8.940347 +A06C 15.416696 20.334422 8.970905 +A07C 15.814458 21.260053 9.968184 +A08N 16.141359 22.045978 10.771926 +A09C 16.907410 18.666191 9.883058 +A10N 17.756786 18.343116 10.619376 +A11N 12.903384 17.235127 7.348386 +A12S 11.379882 17.866475 7.126230 +A13C 11.880909 19.519026 7.390223 +A14C 10.990610 20.606263 7.397255 +A15N 10.245743 21.507291 7.428905 +A01S 9.356520 24.360022 10.379150 +A02C 10.338321 22.916929 10.593909 +A03C 9.828037 21.591779 10.631865 +A04S 8.101659 21.201927 10.437720 +A05C 7.661106 22.446240 9.249328 +A06C 8.175143 23.713872 9.218770 +A07C 7.777381 24.639503 8.221491 +A08N 7.450480 25.425428 7.417749 +A09C 6.684429 22.045641 8.306617 +A10N 5.835053 21.722566 7.570299 +A11N 10.688455 20.614577 10.841289 +A12S 12.211957 21.245925 11.063445 +A13C 11.710930 22.898476 10.799452 +A14C 12.601229 23.985713 10.792420 +A15N 13.346096 24.886741 10.760770 + + + IND DIPOLES NORM: 0.022844 + IND DIPOLES NORM: 0.004631 + IND DIPOLES NORM: 0.001148 + IND DIPOLES NORM: 0.000319 + IND DIPOLES NORM: 0.000090 + IND DIPOLES NORM: 0.000033 + IND DIPOLES NORM: 0.000010 + IND DIPOLES NORM: 0.000004 + IND DIPOLES NORM: 0.000001 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + IND DIPOLES NORM: 0.000000 + ------ PAIRWISE ENERGY ANALYSIS FOLLOWS ------------------ + + PAIRWISE ENERGY BETWEEN FRAGMENT 0 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 1 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -1.630227 -4.083322 1.747300 + A02C -2.612029 -2.640229 1.532541 + A03C -2.101745 -1.315079 1.494585 + A04S -0.375367 -0.925226 1.688730 + A05C 0.065186 -2.169539 2.877122 + A06C -0.448850 -3.437171 2.907680 + A07C -0.051087 -4.362802 3.904959 + A08N 0.275814 -5.148727 4.708701 + A09C 1.041864 -1.768939 3.819832 + A10N 1.891240 -1.445864 4.556150 + A11N -2.962164 -0.337877 1.285161 + A12S -4.485666 -0.969226 1.063005 + A13C -3.984638 -2.621777 1.326998 + A14C -4.874936 -3.709014 1.334031 + A15N -5.619803 -4.610043 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0001876888 + PAIRWISE POLARIZATION ENERGY -0.0000071418 + PAIRWISE DISPERSION ENERGY -0.0003825748 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000707698 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0005066355 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 2 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 6.509027 0.703872 -4.315925 + A02C 5.527225 -0.739221 -4.530684 + A03C 6.037509 -2.064371 -4.568640 + A04S 7.763887 -2.454224 -4.374495 + A05C 8.204440 -1.209911 -3.186103 + A06C 7.690404 0.057721 -3.155545 + A07C 8.088167 0.983352 -2.158266 + A08N 8.415068 1.769277 -1.354524 + A09C 9.181118 -1.610511 -2.243393 + A10N 10.030494 -1.933586 -1.507075 + A11N 5.177090 -3.041573 -4.778064 + A12S 3.653588 -2.410224 -5.000220 + A13C 4.154616 -0.757673 -4.736227 + A14C 3.264318 0.329564 -4.729194 + A15N 2.519451 1.230593 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0001519675 + PAIRWISE POLARIZATION ENERGY -0.0000179945 + PAIRWISE DISPERSION ENERGY -0.0000258013 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0001957633 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 3 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 1.630227 4.083322 -1.747300 + A02C 2.612029 2.640229 -1.532541 + A03C 2.101745 1.315079 -1.494585 + A04S 0.375367 0.925226 -1.688730 + A05C -0.065186 2.169539 -2.877122 + A06C 0.448850 3.437171 -2.907680 + A07C 0.051087 4.362802 -3.904959 + A08N -0.275814 5.148727 -4.708701 + A09C -1.041864 1.768939 -3.819832 + A10N -1.891240 1.445864 -4.556150 + A11N 2.962164 0.337877 -1.285161 + A12S 4.485666 0.969226 -1.063005 + A13C 3.984638 2.621777 -1.326998 + A14C 4.874936 3.709014 -1.334031 + A15N 5.619803 4.610043 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000107808 + PAIRWISE POLARIZATION ENERGY 0.0000024710 + PAIRWISE DISPERSION ENERGY -0.0000064007 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000068511 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 4 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -10.785134 -0.703872 16.442375 + A02C -9.803332 0.739221 16.657134 + A03C -10.313616 2.064371 16.695090 + A04S -12.039994 2.454224 16.500945 + A05C -12.480547 1.209911 15.312553 + A06C -11.966511 -0.057721 15.281995 + A07C -12.364274 -0.983352 14.284716 + A08N -12.691175 -1.769277 13.480974 + A09C -13.457225 1.610511 14.369843 + A10N -14.306601 1.933586 13.633525 + A11N -9.453197 3.041573 16.904514 + A12S -7.929695 2.410224 17.126670 + A13C -8.430723 0.757673 16.862677 + A14C -7.540425 -0.329564 16.855644 + A15N -6.795558 -1.230593 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 5 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -5.906334 -4.083322 13.873750 + A02C -6.888136 -2.640229 13.658991 + A03C -6.377852 -1.315079 13.621035 + A04S -4.651474 -0.925226 13.815180 + A05C -4.210921 -2.169539 15.003572 + A06C -4.724957 -3.437171 15.034130 + A07C -4.327194 -4.362802 16.031409 + A08N -4.000293 -5.148727 16.835151 + A09C -3.234243 -1.768939 15.946282 + A10N -2.384867 -1.445864 16.682600 + A11N -7.238271 -0.337877 13.411611 + A12S -8.761773 -0.969226 13.189455 + A13C -8.260745 -2.621777 13.453448 + A14C -9.151043 -3.709014 13.460481 + A15N -9.895910 -4.610043 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000059620 + PAIRWISE POLARIZATION ENERGY -0.0000019679 + PAIRWISE DISPERSION ENERGY -0.0000102120 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000181419 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 6 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 2.232919 0.703872 7.810525 + A02C 1.251118 -0.739221 7.595766 + A03C 1.761402 -2.064371 7.557810 + A04S 3.487780 -2.454223 7.751955 + A05C 3.928333 -1.209910 8.940347 + A06C 3.414296 0.057722 8.970905 + A07C 3.812058 0.983353 9.968184 + A08N 4.138959 1.769278 10.771926 + A09C 4.905010 -1.610509 9.883058 + A10N 5.754386 -1.933584 10.619376 + A11N 0.900984 -3.041573 7.348386 + A12S -0.622518 -2.410225 7.126230 + A13C -0.121491 -0.757674 7.390223 + A14C -1.011790 0.329563 7.397255 + A15N -1.756657 1.230591 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 7 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S -2.645880 4.083322 10.379150 + A02C -1.664079 2.640229 10.593909 + A03C -2.174363 1.315079 10.631865 + A04S -3.900741 0.925227 10.437720 + A05C -4.341294 2.169540 9.249328 + A06C -3.827257 3.437172 9.218770 + A07C -4.225019 4.362803 8.221491 + A08N -4.551920 5.148728 7.417749 + A09C -5.317971 1.768941 8.306617 + A10N -6.167347 1.445866 7.570299 + A11N -1.313945 0.337877 10.841289 + A12S 0.209557 0.969225 11.063445 + A13C -0.291470 2.621776 10.799452 + A14C 0.598829 3.709013 10.792420 + A15N 1.343696 4.610041 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0053861477 + PAIRWISE POLARIZATION ENERGY -0.0006619368 + PAIRWISE DISPERSION ENERGY -0.0102862849 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0012961487 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0150382206 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 8 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -6.509027 6.055028 4.315925 + A02C -5.527225 7.498121 4.530684 + A03C -6.037509 8.823271 4.568640 + A04S -7.763887 9.213124 4.374495 + A05C -8.204440 7.968811 3.186103 + A06C -7.690404 6.701179 3.155545 + A07C -8.088167 5.775548 2.158266 + A08N -8.415068 4.989623 1.354524 + A09C -9.181118 8.369411 2.243393 + A10N -10.030494 8.692486 1.507075 + A11N -5.177090 9.800473 4.778064 + A12S -3.653588 9.169124 5.000220 + A13C -4.154616 7.516573 4.736227 + A14C -3.264318 6.429336 4.729194 + A15N -2.519451 5.528307 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0052997977 + PAIRWISE POLARIZATION ENERGY -0.0004115679 + PAIRWISE DISPERSION ENERGY -0.0090620393 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0018995793 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0128738257 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 9 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -1.630227 2.675578 1.747300 + A02C -2.612029 4.118671 1.532541 + A03C -2.101745 5.443821 1.494585 + A04S -0.375367 5.833674 1.688730 + A05C 0.065186 4.589361 2.877122 + A06C -0.448850 3.321729 2.907680 + A07C -0.051087 2.396098 3.904959 + A08N 0.275814 1.610173 4.708701 + A09C 1.041864 4.989961 3.819832 + A10N 1.891240 5.313036 4.556150 + A11N -2.962164 6.421023 1.285161 + A12S -4.485666 5.789674 1.063005 + A13C -3.984638 4.137123 1.326998 + A14C -4.874936 3.049886 1.334031 + A15N -5.619803 2.148857 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0001876888 + PAIRWISE POLARIZATION ENERGY -0.0000071418 + PAIRWISE DISPERSION ENERGY -0.0003825748 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000707698 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0005066355 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 10 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 6.509027 7.462772 -4.315925 + A02C 5.527225 6.019679 -4.530684 + A03C 6.037509 4.694529 -4.568640 + A04S 7.763887 4.304676 -4.374495 + A05C 8.204440 5.548989 -3.186103 + A06C 7.690404 6.816621 -3.155545 + A07C 8.088167 7.742252 -2.158266 + A08N 8.415068 8.528177 -1.354524 + A09C 9.181118 5.148389 -2.243393 + A10N 10.030494 4.825314 -1.507075 + A11N 5.177090 3.717327 -4.778064 + A12S 3.653588 4.348676 -5.000220 + A13C 4.154616 6.001227 -4.736227 + A14C 3.264318 7.088464 -4.729194 + A15N 2.519451 7.989493 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000244590 + PAIRWISE POLARIZATION ENERGY -0.0000012778 + PAIRWISE DISPERSION ENERGY -0.0000182021 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000439388 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 11 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 1.630227 10.842222 -1.747300 + A02C 2.612029 9.399129 -1.532541 + A03C 2.101745 8.073979 -1.494585 + A04S 0.375367 7.684126 -1.688730 + A05C -0.065186 8.928439 -2.877122 + A06C 0.448850 10.196071 -2.907680 + A07C 0.051087 11.121702 -3.904959 + A08N -0.275814 11.907627 -4.708701 + A09C -1.041864 8.527839 -3.819832 + A10N -1.891240 8.204764 -4.556150 + A11N 2.962164 7.096777 -1.285161 + A12S 4.485666 7.728126 -1.063005 + A13C 3.984638 9.380677 -1.326998 + A14C 4.874936 10.467914 -1.334031 + A15N 5.619803 11.368943 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 12 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -10.785134 6.055028 16.442375 + A02C -9.803332 7.498121 16.657134 + A03C -10.313616 8.823271 16.695090 + A04S -12.039994 9.213124 16.500945 + A05C -12.480547 7.968811 15.312553 + A06C -11.966511 6.701179 15.281995 + A07C -12.364274 5.775548 14.284716 + A08N -12.691175 4.989623 13.480974 + A09C -13.457225 8.369411 14.369843 + A10N -14.306601 8.692486 13.633525 + A11N -9.453197 9.800473 16.904514 + A12S -7.929695 9.169124 17.126670 + A13C -8.430723 7.516573 16.862677 + A14C -7.540425 6.429336 16.855644 + A15N -6.795558 5.528307 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 13 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -5.906334 2.675578 13.873750 + A02C -6.888136 4.118671 13.658991 + A03C -6.377852 5.443821 13.621035 + A04S -4.651474 5.833674 13.815180 + A05C -4.210921 4.589361 15.003572 + A06C -4.724957 3.321729 15.034130 + A07C -4.327194 2.396098 16.031409 + A08N -4.000293 1.610173 16.835151 + A09C -3.234243 4.989961 15.946282 + A10N -2.384867 5.313036 16.682600 + A11N -7.238271 6.421023 13.411611 + A12S -8.761773 5.789674 13.189455 + A13C -8.260745 4.137123 13.453448 + A14C -9.151043 3.049886 13.460481 + A15N -9.895910 2.148857 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000059620 + PAIRWISE POLARIZATION ENERGY -0.0000019679 + PAIRWISE DISPERSION ENERGY -0.0000102120 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000181419 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 14 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 2.232919 7.462772 7.810525 + A02C 1.251118 6.019679 7.595766 + A03C 1.761402 4.694529 7.557810 + A04S 3.487780 4.304677 7.751955 + A05C 3.928333 5.548990 8.940347 + A06C 3.414296 6.816622 8.970905 + A07C 3.812058 7.742253 9.968184 + A08N 4.138959 8.528178 10.771926 + A09C 4.905010 5.148391 9.883058 + A10N 5.754386 4.825316 10.619376 + A11N 0.900984 3.717327 7.348386 + A12S -0.622518 4.348675 7.126230 + A13C -0.121491 6.001226 7.390223 + A14C -1.011790 7.088463 7.397255 + A15N -1.756657 7.989491 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 15 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S -2.645880 10.842222 10.379150 + A02C -1.664079 9.399129 10.593909 + A03C -2.174363 8.073979 10.631865 + A04S -3.900741 7.684127 10.437720 + A05C -4.341294 8.928440 9.249328 + A06C -3.827257 10.196072 9.218770 + A07C -4.225019 11.121703 8.221491 + A08N -4.551920 11.907628 7.417749 + A09C -5.317971 8.527841 8.306617 + A10N -6.167347 8.204766 7.570299 + A11N -1.313945 7.096777 10.841289 + A12S 0.209557 7.728125 11.063445 + A13C -0.291470 9.380676 10.799452 + A14C 0.598829 10.467913 10.792420 + A15N 1.343696 11.368941 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 16 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -6.509027 12.813928 4.315925 + A02C -5.527225 14.257021 4.530684 + A03C -6.037509 15.582171 4.568640 + A04S -7.763887 15.972024 4.374495 + A05C -8.204440 14.727711 3.186103 + A06C -7.690404 13.460079 3.155545 + A07C -8.088167 12.534448 2.158266 + A08N -8.415068 11.748523 1.354524 + A09C -9.181118 15.128311 2.243393 + A10N -10.030494 15.451386 1.507075 + A11N -5.177090 16.559373 4.778064 + A12S -3.653588 15.928024 5.000220 + A13C -4.154616 14.275473 4.736227 + A14C -3.264318 13.188236 4.729194 + A15N -2.519451 12.287207 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 17 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -1.630227 9.434478 1.747300 + A02C -2.612029 10.877571 1.532541 + A03C -2.101745 12.202721 1.494585 + A04S -0.375367 12.592574 1.688730 + A05C 0.065186 11.348261 2.877122 + A06C -0.448850 10.080629 2.907680 + A07C -0.051087 9.154998 3.904959 + A08N 0.275814 8.369073 4.708701 + A09C 1.041864 11.748861 3.819832 + A10N 1.891240 12.071936 4.556150 + A11N -2.962164 13.179923 1.285161 + A12S -4.485666 12.548574 1.063005 + A13C -3.984638 10.896023 1.326998 + A14C -4.874936 9.808786 1.334031 + A15N -5.619803 8.907757 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 18 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 6.509027 14.221672 -4.315925 + A02C 5.527225 12.778579 -4.530684 + A03C 6.037509 11.453429 -4.568640 + A04S 7.763887 11.063576 -4.374495 + A05C 8.204440 12.307889 -3.186103 + A06C 7.690404 13.575521 -3.155545 + A07C 8.088167 14.501152 -2.158266 + A08N 8.415068 15.287077 -1.354524 + A09C 9.181118 11.907289 -2.243393 + A10N 10.030494 11.584214 -1.507075 + A11N 5.177090 10.476227 -4.778064 + A12S 3.653588 11.107576 -5.000220 + A13C 4.154616 12.760127 -4.736227 + A14C 3.264318 13.847364 -4.729194 + A15N 2.519451 14.748393 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 19 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 1.630227 17.601122 -1.747300 + A02C 2.612029 16.158029 -1.532541 + A03C 2.101745 14.832879 -1.494585 + A04S 0.375367 14.443026 -1.688730 + A05C -0.065186 15.687339 -2.877122 + A06C 0.448850 16.954971 -2.907680 + A07C 0.051087 17.880602 -3.904959 + A08N -0.275814 18.666527 -4.708701 + A09C -1.041864 15.286739 -3.819832 + A10N -1.891240 14.963664 -4.556150 + A11N 2.962164 13.855677 -1.285161 + A12S 4.485666 14.487026 -1.063005 + A13C 3.984638 16.139577 -1.326998 + A14C 4.874936 17.226814 -1.334031 + A15N 5.619803 18.127843 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 20 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -10.785134 12.813928 16.442375 + A02C -9.803332 14.257021 16.657134 + A03C -10.313616 15.582171 16.695090 + A04S -12.039994 15.972024 16.500945 + A05C -12.480547 14.727711 15.312553 + A06C -11.966511 13.460079 15.281995 + A07C -12.364274 12.534448 14.284716 + A08N -12.691175 11.748523 13.480974 + A09C -13.457225 15.128311 14.369843 + A10N -14.306601 15.451386 13.633525 + A11N -9.453197 16.559373 16.904514 + A12S -7.929695 15.928024 17.126670 + A13C -8.430723 14.275473 16.862677 + A14C -7.540425 13.188236 16.855644 + A15N -6.795558 12.287207 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 21 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -5.906334 9.434478 13.873750 + A02C -6.888136 10.877571 13.658991 + A03C -6.377852 12.202721 13.621035 + A04S -4.651474 12.592574 13.815180 + A05C -4.210921 11.348261 15.003572 + A06C -4.724957 10.080629 15.034130 + A07C -4.327194 9.154998 16.031409 + A08N -4.000293 8.369073 16.835151 + A09C -3.234243 11.748861 15.946282 + A10N -2.384867 12.071936 16.682600 + A11N -7.238271 13.179923 13.411611 + A12S -8.761773 12.548574 13.189455 + A13C -8.260745 10.896023 13.453448 + A14C -9.151043 9.808786 13.460481 + A15N -9.895910 8.907757 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 22 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 2.232919 14.221672 7.810525 + A02C 1.251118 12.778579 7.595766 + A03C 1.761402 11.453429 7.557810 + A04S 3.487780 11.063577 7.751955 + A05C 3.928333 12.307890 8.940347 + A06C 3.414296 13.575522 8.970905 + A07C 3.812058 14.501153 9.968184 + A08N 4.138959 15.287078 10.771926 + A09C 4.905010 11.907291 9.883058 + A10N 5.754386 11.584216 10.619376 + A11N 0.900984 10.476227 7.348386 + A12S -0.622518 11.107575 7.126230 + A13C -0.121491 12.760126 7.390223 + A14C -1.011790 13.847363 7.397255 + A15N -1.756657 14.748391 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 23 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S -2.645880 17.601122 10.379150 + A02C -1.664079 16.158029 10.593909 + A03C -2.174363 14.832879 10.631865 + A04S -3.900741 14.443027 10.437720 + A05C -4.341294 15.687340 9.249328 + A06C -3.827257 16.954972 9.218770 + A07C -4.225019 17.880603 8.221491 + A08N -4.551920 18.666528 7.417749 + A09C -5.317971 15.286741 8.306617 + A10N -6.167347 14.963666 7.570299 + A11N -1.313945 13.855677 10.841289 + A12S 0.209557 14.487025 11.063445 + A13C -0.291470 16.139576 10.799452 + A14C 0.598829 17.226813 10.792420 + A15N 1.343696 18.127841 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 24 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -6.509027 19.572828 4.315925 + A02C -5.527225 21.015921 4.530684 + A03C -6.037509 22.341071 4.568640 + A04S -7.763887 22.730924 4.374495 + A05C -8.204440 21.486611 3.186103 + A06C -7.690404 20.218979 3.155545 + A07C -8.088167 19.293348 2.158266 + A08N -8.415068 18.507423 1.354524 + A09C -9.181118 21.887211 2.243393 + A10N -10.030494 22.210286 1.507075 + A11N -5.177090 23.318273 4.778064 + A12S -3.653588 22.686924 5.000220 + A13C -4.154616 21.034373 4.736227 + A14C -3.264318 19.947136 4.729194 + A15N -2.519451 19.046107 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0052997977 + PAIRWISE POLARIZATION ENERGY -0.0004115679 + PAIRWISE DISPERSION ENERGY -0.0090620393 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0018995793 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0128738257 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 25 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -1.630227 16.193378 1.747300 + A02C -2.612029 17.636471 1.532541 + A03C -2.101745 18.961621 1.494585 + A04S -0.375367 19.351474 1.688730 + A05C 0.065186 18.107161 2.877122 + A06C -0.448850 16.839529 2.907680 + A07C -0.051087 15.913898 3.904959 + A08N 0.275814 15.127973 4.708701 + A09C 1.041864 18.507761 3.819832 + A10N 1.891240 18.830836 4.556150 + A11N -2.962164 19.938823 1.285161 + A12S -4.485666 19.307474 1.063005 + A13C -3.984638 17.654923 1.326998 + A14C -4.874936 16.567686 1.334031 + A15N -5.619803 15.666657 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 26 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 6.509027 20.980572 -4.315925 + A02C 5.527225 19.537479 -4.530684 + A03C 6.037509 18.212329 -4.568640 + A04S 7.763887 17.822476 -4.374495 + A05C 8.204440 19.066789 -3.186103 + A06C 7.690404 20.334421 -3.155545 + A07C 8.088167 21.260052 -2.158266 + A08N 8.415068 22.045977 -1.354524 + A09C 9.181118 18.666189 -2.243393 + A10N 10.030494 18.343114 -1.507075 + A11N 5.177090 17.235127 -4.778064 + A12S 3.653588 17.866476 -5.000220 + A13C 4.154616 19.519027 -4.736227 + A14C 3.264318 20.606264 -4.729194 + A15N 2.519451 21.507293 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000558284 + PAIRWISE POLARIZATION ENERGY -0.0000052238 + PAIRWISE DISPERSION ENERGY -0.0000119700 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000730222 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 27 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 1.630227 24.360022 -1.747300 + A02C 2.612029 22.916929 -1.532541 + A03C 2.101745 21.591779 -1.494585 + A04S 0.375367 21.201926 -1.688730 + A05C -0.065186 22.446239 -2.877122 + A06C 0.448850 23.713871 -2.907680 + A07C 0.051087 24.639502 -3.904959 + A08N -0.275814 25.425427 -4.708701 + A09C -1.041864 22.045639 -3.819832 + A10N -1.891240 21.722564 -4.556150 + A11N 2.962164 20.614577 -1.285161 + A12S 4.485666 21.245926 -1.063005 + A13C 3.984638 22.898477 -1.326998 + A14C 4.874936 23.985714 -1.334031 + A15N 5.619803 24.886743 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000011294 + PAIRWISE POLARIZATION ENERGY -0.0000001393 + PAIRWISE DISPERSION ENERGY -0.0000036522 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000049209 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 28 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -10.785134 19.572828 16.442375 + A02C -9.803332 21.015921 16.657134 + A03C -10.313616 22.341071 16.695090 + A04S -12.039994 22.730924 16.500945 + A05C -12.480547 21.486611 15.312553 + A06C -11.966511 20.218979 15.281995 + A07C -12.364274 19.293348 14.284716 + A08N -12.691175 18.507423 13.480974 + A09C -13.457225 21.887211 14.369843 + A10N -14.306601 22.210286 13.633525 + A11N -9.453197 23.318273 16.904514 + A12S -7.929695 22.686924 17.126670 + A13C -8.430723 21.034373 16.862677 + A14C -7.540425 19.947136 16.855644 + A15N -6.795558 19.046107 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 29 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S -5.906334 16.193378 13.873750 + A02C -6.888136 17.636471 13.658991 + A03C -6.377852 18.961621 13.621035 + A04S -4.651474 19.351474 13.815180 + A05C -4.210921 18.107161 15.003572 + A06C -4.724957 16.839529 15.034130 + A07C -4.327194 15.913898 16.031409 + A08N -4.000293 15.127973 16.835151 + A09C -3.234243 18.507761 15.946282 + A10N -2.384867 18.830836 16.682600 + A11N -7.238271 19.938823 13.411611 + A12S -8.761773 19.307474 13.189455 + A13C -8.260745 17.654923 13.453448 + A14C -9.151043 16.567686 13.460481 + A15N -9.895910 15.666657 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 30 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 2.232919 20.980572 7.810525 + A02C 1.251118 19.537479 7.595766 + A03C 1.761402 18.212329 7.557810 + A04S 3.487780 17.822477 7.751955 + A05C 3.928333 19.066790 8.940347 + A06C 3.414296 20.334422 8.970905 + A07C 3.812058 21.260053 9.968184 + A08N 4.138959 22.045978 10.771926 + A09C 4.905010 18.666191 9.883058 + A10N 5.754386 18.343116 10.619376 + A11N 0.900984 17.235127 7.348386 + A12S -0.622518 17.866475 7.126230 + A13C -0.121491 19.519026 7.390223 + A14C -1.011790 20.606263 7.397255 + A15N -1.756657 21.507291 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 31 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S -2.645880 24.360022 10.379150 + A02C -1.664079 22.916929 10.593909 + A03C -2.174363 21.591779 10.631865 + A04S -3.900741 21.201927 10.437720 + A05C -4.341294 22.446240 9.249328 + A06C -3.827257 23.713872 9.218770 + A07C -4.225019 24.639503 8.221491 + A08N -4.551920 25.425428 7.417749 + A09C -5.317971 22.045641 8.306617 + A10N -6.167347 21.722566 7.570299 + A11N -1.313945 20.614577 10.841289 + A12S 0.209557 21.245925 11.063445 + A13C -0.291470 22.898476 10.799452 + A14C 0.598829 23.985713 10.792420 + A15N 1.343696 24.886741 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0048287014 + PAIRWISE POLARIZATION ENERGY -0.0010313923 + PAIRWISE DISPERSION ENERGY -0.0036105593 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0005780584 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0100487114 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 32 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 5.493373 -0.703872 4.315925 + A02C 6.475175 0.739221 4.530684 + A03C 5.964891 2.064371 4.568640 + A04S 4.238513 2.454224 4.374495 + A05C 3.797960 1.209911 3.186103 + A06C 4.311996 -0.057721 3.155545 + A07C 3.914233 -0.983352 2.158266 + A08N 3.587332 -1.769277 1.354524 + A09C 2.821282 1.610511 2.243393 + A10N 1.971906 1.933586 1.507075 + A11N 6.825310 3.041573 4.778064 + A12S 8.348812 2.410224 5.000220 + A13C 7.847784 0.757673 4.736227 + A14C 8.738082 -0.329564 4.729194 + A15N 9.482949 -1.230593 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 33 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 10.372173 -4.083322 1.747300 + A02C 9.390371 -2.640229 1.532541 + A03C 9.900655 -1.315079 1.494585 + A04S 11.627033 -0.925226 1.688730 + A05C 12.067586 -2.169539 2.877122 + A06C 11.553550 -3.437171 2.907680 + A07C 11.951313 -4.362802 3.904959 + A08N 12.278214 -5.148727 4.708701 + A09C 13.044264 -1.768939 3.819832 + A10N 13.893640 -1.445864 4.556150 + A11N 9.040236 -0.337877 1.285161 + A12S 7.516734 -0.969226 1.063005 + A13C 8.017762 -2.621777 1.326998 + A14C 7.127464 -3.709014 1.334031 + A15N 6.382597 -4.610043 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000682193 + PAIRWISE POLARIZATION ENERGY 0.0000049121 + PAIRWISE DISPERSION ENERGY -0.0000178991 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000552323 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 34 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 18.511427 0.703872 -4.315925 + A02C 17.529625 -0.739221 -4.530684 + A03C 18.039909 -2.064371 -4.568640 + A04S 19.766287 -2.454224 -4.374495 + A05C 20.206840 -1.209911 -3.186103 + A06C 19.692804 0.057721 -3.155545 + A07C 20.090567 0.983352 -2.158266 + A08N 20.417468 1.769277 -1.354524 + A09C 21.183518 -1.610511 -2.243393 + A10N 22.032894 -1.933586 -1.507075 + A11N 17.179490 -3.041573 -4.778064 + A12S 15.655988 -2.410224 -5.000220 + A13C 16.157016 -0.757673 -4.736227 + A14C 15.266718 0.329564 -4.729194 + A15N 14.521851 1.230593 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 35 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 13.632627 4.083322 -1.747300 + A02C 14.614429 2.640229 -1.532541 + A03C 14.104145 1.315079 -1.494585 + A04S 12.377767 0.925226 -1.688730 + A05C 11.937214 2.169539 -2.877122 + A06C 12.451250 3.437171 -2.907680 + A07C 12.053487 4.362802 -3.904959 + A08N 11.726586 5.148727 -4.708701 + A09C 10.960536 1.768939 -3.819832 + A10N 10.111160 1.445864 -4.556150 + A11N 14.964564 0.337877 -1.285161 + A12S 16.488066 0.969226 -1.063005 + A13C 15.987038 2.621777 -1.326998 + A14C 16.877336 3.709014 -1.334031 + A15N 17.622203 4.610043 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0053861361 + PAIRWISE POLARIZATION ENERGY -0.0006619356 + PAIRWISE DISPERSION ENERGY -0.0102862817 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0012961354 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0150382180 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 36 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 1.217266 -0.703872 16.442375 + A02C 2.199068 0.739221 16.657134 + A03C 1.688784 2.064371 16.695090 + A04S -0.037594 2.454224 16.500945 + A05C -0.478147 1.209911 15.312553 + A06C 0.035889 -0.057721 15.281995 + A07C -0.361874 -0.983352 14.284716 + A08N -0.688775 -1.769277 13.480974 + A09C -1.454825 1.610511 14.369843 + A10N -2.304201 1.933586 13.633525 + A11N 2.549203 3.041573 16.904514 + A12S 4.072705 2.410224 17.126670 + A13C 3.571677 0.757673 16.862677 + A14C 4.461975 -0.329564 16.855644 + A15N 5.206842 -1.230593 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 37 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 6.096066 -4.083322 13.873750 + A02C 5.114264 -2.640229 13.658991 + A03C 5.624548 -1.315079 13.621035 + A04S 7.350926 -0.925226 13.815180 + A05C 7.791479 -2.169539 15.003572 + A06C 7.277443 -3.437171 15.034130 + A07C 7.675206 -4.362802 16.031409 + A08N 8.002107 -5.148727 16.835151 + A09C 8.768157 -1.768939 15.946282 + A10N 9.617533 -1.445864 16.682600 + A11N 4.764129 -0.337877 13.411611 + A12S 3.240627 -0.969226 13.189455 + A13C 3.741655 -2.621777 13.453448 + A14C 2.851357 -3.709014 13.460481 + A15N 2.106490 -4.610043 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000066 + PAIRWISE POLARIZATION ENERGY -0.0000000235 + PAIRWISE DISPERSION ENERGY -0.0000000269 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000000438 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 38 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 14.235319 0.703872 7.810525 + A02C 13.253518 -0.739221 7.595766 + A03C 13.763802 -2.064371 7.557810 + A04S 15.490180 -2.454223 7.751955 + A05C 15.930733 -1.209910 8.940347 + A06C 15.416696 0.057722 8.970905 + A07C 15.814458 0.983353 9.968184 + A08N 16.141359 1.769278 10.771926 + A09C 16.907410 -1.610509 9.883058 + A10N 17.756786 -1.933584 10.619376 + A11N 12.903384 -3.041573 7.348386 + A12S 11.379882 -2.410225 7.126230 + A13C 11.880909 -0.757674 7.390223 + A14C 10.990610 0.329563 7.397255 + A15N 10.245743 1.230591 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 39 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 9.356520 4.083322 10.379150 + A02C 10.338321 2.640229 10.593909 + A03C 9.828037 1.315079 10.631865 + A04S 8.101659 0.925227 10.437720 + A05C 7.661106 2.169540 9.249328 + A06C 8.175143 3.437172 9.218770 + A07C 7.777381 4.362803 8.221491 + A08N 7.450480 5.148728 7.417749 + A09C 6.684429 1.768941 8.306617 + A10N 5.835053 1.445866 7.570299 + A11N 10.688455 0.337877 10.841289 + A12S 12.211957 0.969225 11.063445 + A13C 11.710930 2.621776 10.799452 + A14C 12.601229 3.709013 10.792420 + A15N 13.346096 4.610041 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000107809 + PAIRWISE POLARIZATION ENERGY 0.0000024710 + PAIRWISE DISPERSION ENERGY -0.0000064008 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000068512 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 40 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 5.493373 6.055028 4.315925 + A02C 6.475175 7.498121 4.530684 + A03C 5.964891 8.823271 4.568640 + A04S 4.238513 9.213124 4.374495 + A05C 3.797960 7.968811 3.186103 + A06C 4.311996 6.701179 3.155545 + A07C 3.914233 5.775548 2.158266 + A08N 3.587332 4.989623 1.354524 + A09C 2.821282 8.369411 2.243393 + A10N 1.971906 8.692486 1.507075 + A11N 6.825310 9.800473 4.778064 + A12S 8.348812 9.169124 5.000220 + A13C 7.847784 7.516573 4.736227 + A14C 8.738082 6.429336 4.729194 + A15N 9.482949 5.528307 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 41 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 10.372173 2.675578 1.747300 + A02C 9.390371 4.118671 1.532541 + A03C 9.900655 5.443821 1.494585 + A04S 11.627033 5.833674 1.688730 + A05C 12.067586 4.589361 2.877122 + A06C 11.553550 3.321729 2.907680 + A07C 11.951313 2.396098 3.904959 + A08N 12.278214 1.610173 4.708701 + A09C 13.044264 4.989961 3.819832 + A10N 13.893640 5.313036 4.556150 + A11N 9.040236 6.421023 1.285161 + A12S 7.516734 5.789674 1.063005 + A13C 8.017762 4.137123 1.326998 + A14C 7.127464 3.049886 1.334031 + A15N 6.382597 2.148857 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000682193 + PAIRWISE POLARIZATION ENERGY 0.0000049121 + PAIRWISE DISPERSION ENERGY -0.0000178991 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000552323 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 42 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 18.511427 7.462772 -4.315925 + A02C 17.529625 6.019679 -4.530684 + A03C 18.039909 4.694529 -4.568640 + A04S 19.766287 4.304676 -4.374495 + A05C 20.206840 5.548989 -3.186103 + A06C 19.692804 6.816621 -3.155545 + A07C 20.090567 7.742252 -2.158266 + A08N 20.417468 8.528177 -1.354524 + A09C 21.183518 5.148389 -2.243393 + A10N 22.032894 4.825314 -1.507075 + A11N 17.179490 3.717327 -4.778064 + A12S 15.655988 4.348676 -5.000220 + A13C 16.157016 6.001227 -4.736227 + A14C 15.266718 7.088464 -4.729194 + A15N 14.521851 7.989493 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 43 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 13.632627 10.842222 -1.747300 + A02C 14.614429 9.399129 -1.532541 + A03C 14.104145 8.073979 -1.494585 + A04S 12.377767 7.684126 -1.688730 + A05C 11.937214 8.928439 -2.877122 + A06C 12.451250 10.196071 -2.907680 + A07C 12.053487 11.121702 -3.904959 + A08N 11.726586 11.907627 -4.708701 + A09C 10.960536 8.527839 -3.819832 + A10N 10.111160 8.204764 -4.556150 + A11N 14.964564 7.096777 -1.285161 + A12S 16.488066 7.728126 -1.063005 + A13C 15.987038 9.380677 -1.326998 + A14C 16.877336 10.467914 -1.334031 + A15N 17.622203 11.368943 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 44 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 1.217266 6.055028 16.442375 + A02C 2.199068 7.498121 16.657134 + A03C 1.688784 8.823271 16.695090 + A04S -0.037594 9.213124 16.500945 + A05C -0.478147 7.968811 15.312553 + A06C 0.035889 6.701179 15.281995 + A07C -0.361874 5.775548 14.284716 + A08N -0.688775 4.989623 13.480974 + A09C -1.454825 8.369411 14.369843 + A10N -2.304201 8.692486 13.633525 + A11N 2.549203 9.800473 16.904514 + A12S 4.072705 9.169124 17.126670 + A13C 3.571677 7.516573 16.862677 + A14C 4.461975 6.429336 16.855644 + A15N 5.206842 5.528307 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 45 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 6.096066 2.675578 13.873750 + A02C 5.114264 4.118671 13.658991 + A03C 5.624548 5.443821 13.621035 + A04S 7.350926 5.833674 13.815180 + A05C 7.791479 4.589361 15.003572 + A06C 7.277443 3.321729 15.034130 + A07C 7.675206 2.396098 16.031409 + A08N 8.002107 1.610173 16.835151 + A09C 8.768157 4.989961 15.946282 + A10N 9.617533 5.313036 16.682600 + A11N 4.764129 6.421023 13.411611 + A12S 3.240627 5.789674 13.189455 + A13C 3.741655 4.137123 13.453448 + A14C 2.851357 3.049886 13.460481 + A15N 2.106490 2.148857 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000066 + PAIRWISE POLARIZATION ENERGY -0.0000000235 + PAIRWISE DISPERSION ENERGY -0.0000000269 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000000438 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 46 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 14.235319 7.462772 7.810525 + A02C 13.253518 6.019679 7.595766 + A03C 13.763802 4.694529 7.557810 + A04S 15.490180 4.304677 7.751955 + A05C 15.930733 5.548990 8.940347 + A06C 15.416696 6.816622 8.970905 + A07C 15.814458 7.742253 9.968184 + A08N 16.141359 8.528178 10.771926 + A09C 16.907410 5.148391 9.883058 + A10N 17.756786 4.825316 10.619376 + A11N 12.903384 3.717327 7.348386 + A12S 11.379882 4.348675 7.126230 + A13C 11.880909 6.001226 7.390223 + A14C 10.990610 7.088463 7.397255 + A15N 10.245743 7.989491 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 47 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 9.356520 10.842222 10.379150 + A02C 10.338321 9.399129 10.593909 + A03C 9.828037 8.073979 10.631865 + A04S 8.101659 7.684127 10.437720 + A05C 7.661106 8.928440 9.249328 + A06C 8.175143 10.196072 9.218770 + A07C 7.777381 11.121703 8.221491 + A08N 7.450480 11.907628 7.417749 + A09C 6.684429 8.527841 8.306617 + A10N 5.835053 8.204766 7.570299 + A11N 10.688455 7.096777 10.841289 + A12S 12.211957 7.728125 11.063445 + A13C 11.710930 9.380676 10.799452 + A14C 12.601229 10.467913 10.792420 + A15N 13.346096 11.368941 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 48 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 5.493373 12.813928 4.315925 + A02C 6.475175 14.257021 4.530684 + A03C 5.964891 15.582171 4.568640 + A04S 4.238513 15.972024 4.374495 + A05C 3.797960 14.727711 3.186103 + A06C 4.311996 13.460079 3.155545 + A07C 3.914233 12.534448 2.158266 + A08N 3.587332 11.748523 1.354524 + A09C 2.821282 15.128311 2.243393 + A10N 1.971906 15.451386 1.507075 + A11N 6.825310 16.559373 4.778064 + A12S 8.348812 15.928024 5.000220 + A13C 7.847784 14.275473 4.736227 + A14C 8.738082 13.188236 4.729194 + A15N 9.482949 12.287207 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 49 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 10.372173 9.434478 1.747300 + A02C 9.390371 10.877571 1.532541 + A03C 9.900655 12.202721 1.494585 + A04S 11.627033 12.592574 1.688730 + A05C 12.067586 11.348261 2.877122 + A06C 11.553550 10.080629 2.907680 + A07C 11.951313 9.154998 3.904959 + A08N 12.278214 8.369073 4.708701 + A09C 13.044264 11.748861 3.819832 + A10N 13.893640 12.071936 4.556150 + A11N 9.040236 13.179923 1.285161 + A12S 7.516734 12.548574 1.063005 + A13C 8.017762 10.896023 1.326998 + A14C 7.127464 9.808786 1.334031 + A15N 6.382597 8.907757 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 50 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 18.511427 14.221672 -4.315925 + A02C 17.529625 12.778579 -4.530684 + A03C 18.039909 11.453429 -4.568640 + A04S 19.766287 11.063576 -4.374495 + A05C 20.206840 12.307889 -3.186103 + A06C 19.692804 13.575521 -3.155545 + A07C 20.090567 14.501152 -2.158266 + A08N 20.417468 15.287077 -1.354524 + A09C 21.183518 11.907289 -2.243393 + A10N 22.032894 11.584214 -1.507075 + A11N 17.179490 10.476227 -4.778064 + A12S 15.655988 11.107576 -5.000220 + A13C 16.157016 12.760127 -4.736227 + A14C 15.266718 13.847364 -4.729194 + A15N 14.521851 14.748393 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 51 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 13.632627 17.601122 -1.747300 + A02C 14.614429 16.158029 -1.532541 + A03C 14.104145 14.832879 -1.494585 + A04S 12.377767 14.443026 -1.688730 + A05C 11.937214 15.687339 -2.877122 + A06C 12.451250 16.954971 -2.907680 + A07C 12.053487 17.880602 -3.904959 + A08N 11.726586 18.666527 -4.708701 + A09C 10.960536 15.286739 -3.819832 + A10N 10.111160 14.963664 -4.556150 + A11N 14.964564 13.855677 -1.285161 + A12S 16.488066 14.487026 -1.063005 + A13C 15.987038 16.139577 -1.326998 + A14C 16.877336 17.226814 -1.334031 + A15N 17.622203 18.127843 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 52 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 1.217266 12.813928 16.442375 + A02C 2.199068 14.257021 16.657134 + A03C 1.688784 15.582171 16.695090 + A04S -0.037594 15.972024 16.500945 + A05C -0.478147 14.727711 15.312553 + A06C 0.035889 13.460079 15.281995 + A07C -0.361874 12.534448 14.284716 + A08N -0.688775 11.748523 13.480974 + A09C -1.454825 15.128311 14.369843 + A10N -2.304201 15.451386 13.633525 + A11N 2.549203 16.559373 16.904514 + A12S 4.072705 15.928024 17.126670 + A13C 3.571677 14.275473 16.862677 + A14C 4.461975 13.188236 16.855644 + A15N 5.206842 12.287207 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 53 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 6.096066 9.434478 13.873750 + A02C 5.114264 10.877571 13.658991 + A03C 5.624548 12.202721 13.621035 + A04S 7.350926 12.592574 13.815180 + A05C 7.791479 11.348261 15.003572 + A06C 7.277443 10.080629 15.034130 + A07C 7.675206 9.154998 16.031409 + A08N 8.002107 8.369073 16.835151 + A09C 8.768157 11.748861 15.946282 + A10N 9.617533 12.071936 16.682600 + A11N 4.764129 13.179923 13.411611 + A12S 3.240627 12.548574 13.189455 + A13C 3.741655 10.896023 13.453448 + A14C 2.851357 9.808786 13.460481 + A15N 2.106490 8.907757 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 54 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 14.235319 14.221672 7.810525 + A02C 13.253518 12.778579 7.595766 + A03C 13.763802 11.453429 7.557810 + A04S 15.490180 11.063577 7.751955 + A05C 15.930733 12.307890 8.940347 + A06C 15.416696 13.575522 8.970905 + A07C 15.814458 14.501153 9.968184 + A08N 16.141359 15.287078 10.771926 + A09C 16.907410 11.907291 9.883058 + A10N 17.756786 11.584216 10.619376 + A11N 12.903384 10.476227 7.348386 + A12S 11.379882 11.107575 7.126230 + A13C 11.880909 12.760126 7.390223 + A14C 10.990610 13.847363 7.397255 + A15N 10.245743 14.748391 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 55 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 9.356520 17.601122 10.379150 + A02C 10.338321 16.158029 10.593909 + A03C 9.828037 14.832879 10.631865 + A04S 8.101659 14.443027 10.437720 + A05C 7.661106 15.687340 9.249328 + A06C 8.175143 16.954972 9.218770 + A07C 7.777381 17.880603 8.221491 + A08N 7.450480 18.666528 7.417749 + A09C 6.684429 15.286741 8.306617 + A10N 5.835053 14.963666 7.570299 + A11N 10.688455 13.855677 10.841289 + A12S 12.211957 14.487025 11.063445 + A13C 11.710930 16.139576 10.799452 + A14C 12.601229 17.226813 10.792420 + A15N 13.346096 18.127841 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 56 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 5.493373 19.572828 4.315925 + A02C 6.475175 21.015921 4.530684 + A03C 5.964891 22.341071 4.568640 + A04S 4.238513 22.730924 4.374495 + A05C 3.797960 21.486611 3.186103 + A06C 4.311996 20.218979 3.155545 + A07C 3.914233 19.293348 2.158266 + A08N 3.587332 18.507423 1.354524 + A09C 2.821282 21.887211 2.243393 + A10N 1.971906 22.210286 1.507075 + A11N 6.825310 23.318273 4.778064 + A12S 8.348812 22.686924 5.000220 + A13C 7.847784 21.034373 4.736227 + A14C 8.738082 19.947136 4.729194 + A15N 9.482949 19.046107 4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 57 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 10.372173 16.193378 1.747300 + A02C 9.390371 17.636471 1.532541 + A03C 9.900655 18.961621 1.494585 + A04S 11.627033 19.351474 1.688730 + A05C 12.067586 18.107161 2.877122 + A06C 11.553550 16.839529 2.907680 + A07C 11.951313 15.913898 3.904959 + A08N 12.278214 15.127973 4.708701 + A09C 13.044264 18.507761 3.819832 + A10N 13.893640 18.830836 4.556150 + A11N 9.040236 19.938823 1.285161 + A12S 7.516734 19.307474 1.063005 + A13C 8.017762 17.654923 1.326998 + A14C 7.127464 16.567686 1.334031 + A15N 6.382597 15.666657 1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 58 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 18.511427 20.980572 -4.315925 + A02C 17.529625 19.537479 -4.530684 + A03C 18.039909 18.212329 -4.568640 + A04S 19.766287 17.822476 -4.374495 + A05C 20.206840 19.066789 -3.186103 + A06C 19.692804 20.334421 -3.155545 + A07C 20.090567 21.260052 -2.158266 + A08N 20.417468 22.045977 -1.354524 + A09C 21.183518 18.666189 -2.243393 + A10N 22.032894 18.343114 -1.507075 + A11N 17.179490 17.235127 -4.778064 + A12S 15.655988 17.866476 -5.000220 + A13C 16.157016 19.519027 -4.736227 + A14C 15.266718 20.606264 -4.729194 + A15N 14.521851 21.507293 -4.697544 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 59 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 13.632627 24.360022 -1.747300 + A02C 14.614429 22.916929 -1.532541 + A03C 14.104145 21.591779 -1.494585 + A04S 12.377767 21.201926 -1.688730 + A05C 11.937214 22.446239 -2.877122 + A06C 12.451250 23.713871 -2.907680 + A07C 12.053487 24.639502 -3.904959 + A08N 11.726586 25.425427 -4.708701 + A09C 10.960536 22.045639 -3.819832 + A10N 10.111160 21.722564 -4.556150 + A11N 14.964564 20.614577 -1.285161 + A12S 16.488066 21.245926 -1.063005 + A13C 15.987038 22.898477 -1.326998 + A14C 16.877336 23.985714 -1.334031 + A15N 17.622203 24.886743 -1.365681 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0048286961 + PAIRWISE POLARIZATION ENERGY -0.0010314033 + PAIRWISE DISPERSION ENERGY -0.0036105715 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0005780855 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0100487565 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 60 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 1.217266 19.572828 16.442375 + A02C 2.199068 21.015921 16.657134 + A03C 1.688784 22.341071 16.695090 + A04S -0.037594 22.730924 16.500945 + A05C -0.478147 21.486611 15.312553 + A06C 0.035889 20.218979 15.281995 + A07C -0.361874 19.293348 14.284716 + A08N -0.688775 18.507423 13.480974 + A09C -1.454825 21.887211 14.369843 + A10N -2.304201 22.210286 13.633525 + A11N 2.549203 23.318273 16.904514 + A12S 4.072705 22.686924 17.126670 + A13C 3.571677 21.034373 16.862677 + A14C 4.461975 19.947136 16.855644 + A15N 5.206842 19.046107 16.823994 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 61 (XXII_exp_N2_1_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_1_L + A01S 6.096066 16.193378 13.873750 + A02C 5.114264 17.636471 13.658991 + A03C 5.624548 18.961621 13.621035 + A04S 7.350926 19.351474 13.815180 + A05C 7.791479 18.107161 15.003572 + A06C 7.277443 16.839529 15.034130 + A07C 7.675206 15.913898 16.031409 + A08N 8.002107 15.127973 16.835151 + A09C 8.768157 18.507761 15.946282 + A10N 9.617533 18.830836 16.682600 + A11N 4.764129 19.938823 13.411611 + A12S 3.240627 19.307474 13.189455 + A13C 3.741655 17.654923 13.453448 + A14C 2.851357 16.567686 13.460481 + A15N 2.106490 15.666657 13.492131 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 62 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 14.235319 20.980572 7.810525 + A02C 13.253518 19.537479 7.595766 + A03C 13.763802 18.212329 7.557810 + A04S 15.490180 17.822477 7.751955 + A05C 15.930733 19.066790 8.940347 + A06C 15.416696 20.334422 8.970905 + A07C 15.814458 21.260053 9.968184 + A08N 16.141359 22.045978 10.771926 + A09C 16.907410 18.666191 9.883058 + A10N 17.756786 18.343116 10.619376 + A11N 12.903384 17.235127 7.348386 + A12S 11.379882 17.866475 7.126230 + A13C 11.880909 19.519026 7.390223 + A14C 10.990610 20.606263 7.397255 + A15N 10.245743 21.507291 7.428905 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY 0.0000000000 + PAIRWISE POLARIZATION ENERGY 0.0000000000 + PAIRWISE DISPERSION ENERGY 0.0000000000 + PAIRWISE EXCHANGE REPULSION ENERGY 0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY 0.0000000000 + + --------------------------------------------------------- + PAIRWISE ENERGY BETWEEN FRAGMENT 63 (XXII_exp_N2_2_L) AND LIGAND 0 (XXII_exp_N2_1_L) +fragment XXII_exp_N2_2_L + A01S 9.356520 24.360022 10.379150 + A02C 10.338321 22.916929 10.593909 + A03C 9.828037 21.591779 10.631865 + A04S 8.101659 21.201927 10.437720 + A05C 7.661106 22.446240 9.249328 + A06C 8.175143 23.713872 9.218770 + A07C 7.777381 24.639503 8.221491 + A08N 7.450480 25.425428 7.417749 + A09C 6.684429 22.045641 8.306617 + A10N 5.835053 21.722566 7.570299 + A11N 10.688455 20.614577 10.841289 + A12S 12.211957 21.245925 11.063445 + A13C 11.710930 22.898476 10.799452 + A14C 12.601229 23.985713 10.792420 + A15N 13.346096 24.886741 10.760770 + +fragment XXII_exp_N2_1_L + A01S -6.509027 -0.703872 4.315925 + A02C -5.527225 0.739221 4.530684 + A03C -6.037509 2.064371 4.568640 + A04S -7.763887 2.454224 4.374495 + A05C -8.204440 1.209911 3.186103 + A06C -7.690404 -0.057721 3.155545 + A07C -8.088167 -0.983352 2.158266 + A08N -8.415068 -1.769277 1.354524 + A09C -9.181118 1.610511 2.243393 + A10N -10.030494 1.933586 1.507075 + A11N -5.177090 3.041573 4.778064 + A12S -3.653588 2.410224 5.000220 + A13C -4.154616 0.757673 4.736227 + A14C -3.264318 -0.329564 4.729194 + A15N -2.519451 -1.230593 4.697544 + + PAIRWISE ENERGY COMPONENTS (ATOMIC UNITS) + PAIRWISE ELECTROSTATIC ENERGY -0.0000011294 + PAIRWISE POLARIZATION ENERGY -0.0000001393 + PAIRWISE DISPERSION ENERGY -0.0000036522 + PAIRWISE EXCHANGE REPULSION ENERGY -0.0000000000 + PAIRWISE CHARGE PENETRATION ENERGY 0.0000000000 + PAIRWISE TOTAL ENERGY -0.0000049209 + + --------------------------------------------------------- + LATTICE ENERGY COMPONENTS (ATOMIC UNITS) + LATTICE ELECTROSTATIC ENERGY -0.0314930783 + LATTICE POLARIZATION ENERGY -0.0042380789 + LATTICE DISPERSION ENERGY -0.0468152806 + LATTICE EXCHANGE REPULSION ENERGY 0.0053768383 + LATTICE CHARGE PENETRATION ENERGY 0.0000000000 + LATTICE TOTAL ENERGY -0.0771695994 + + + ------ PAIRWISE ENERGY ANALYSIS COMPLETED -------------- + + ENERGY COMPONENTS (ATOMIC UNITS) + + ELECTROSTATIC ENERGY -1.0077783658 + POLARIZATION ENERGY -0.1356187024 + DISPERSION ENERGY -1.4980889525 + EXCHANGE REPULSION ENERGY 0.1720592008 + POINT CHARGES ENERGY 0.0000000000 + CHARGE PENETRATION ENERGY 0.0000000000 + QQ ENERGY 0.0000000000 + LJ ENERGY 0.0000000000 + + TOTAL ENERGY -2.4694268199 + + +SINGLE POINT ENERGY JOB COMPLETED SUCCESSFULLY +WALL CLOCK TIME IS Tue May 13 02:44:11 2025 +TOTAL RUN TIME IS 1 SECONDS diff --git a/tests/pytests/libefp2py.py b/tests/pytests/libefp2py.py new file mode 100644 index 00000000..43c2f104 --- /dev/null +++ b/tests/pytests/libefp2py.py @@ -0,0 +1,135 @@ +# read libefp/efpmd input and prepares information for pylibefp input +# coordinates will be in Bohr units + +def read_libefp_input(libefp_inp) : + + b2a = 0.529177 + a2b = 1.0 / b2a + + coord_type = 'points' # default + frag_names = [] + frag_coords = [] + if_gradient = False + periodic_box = [] + efp_options = {} + ref_energy = 0.0 + efp_terms = [] + + with open(libefp_inp,'r') as f: + #print(f'Will work with {libefp_inp} file') + lines = f.readlines() + + line_counter = 0 + for line in lines: + if 'run_type' in line: + if 'grad' in line or 'opt' in line or 'hess' in line or 'md' in line or 'gtest' in line: + if_gradient = True + + if "coord" in line: # read type of coordinate input + sline = line.rsplit() + coord_type = sline[1] + #print(f"coord {coord_type}") + + if 'terms' in line and 'spec_terms' not in line: + sline = line.rsplit() + for s in sline[1:]: + efp_terms.append(s) + #efp_options[s] = True + + if 'spec_terms' in line: + sline = line.rsplit() + for s in sline[1:]: + #spec_terms.append(s) + efp_options[s] = True + + if 'damp' in line: + efp_options[line.rsplit()[0]] = line.rsplit()[1] + + if "pol_driver" in line: + efp_options["pol_driver"] = line.rsplit()[1] + + if 'enable_cutoff' in line: + efp_options["enable_cutoff"] = line.rsplit()[1] + if 'swf_cutoff' in line: + efp_options["swf_cutoff"] = a2b * float(line.rsplit()[1]) + if 'xr_cutoff' in line: + efp_options["xr_cutoff"] = a2b * float(line.rsplit()[1]) + if 'enable_pbc' in line: + efp_options["enable_pbc"] = line.rsplit()[1] + if 'periodic_box' in line: + for s in line.rsplit()[1:4]: + periodic_box.append( a2b * float(s)) # xyz + if len(line.rsplit()) > 4: + for s in line.rsplit()[4:]: + periodic_box.append(float(s)) # angles + + if 'ref_energy' in line: + ref_energy = line.rsplit()[1] + + if 'ligand' in line: + efp_options["ligand"] = int(line.rsplit()[1]) + if 'enable_pairwise' in line: + efp_options["enable_pairwise"] = line.rsplit()[1] + + if 'symmetry' in line: + efp_options["symmetry"] = line.rsplit()[1] + if 'special_fragment' in line: + efp_options["special_fragment"] = int(line.rsplit()[1]) + if 'symm_frag' in line: + efp_options["symm_frag"] = line.rsplit()[1] + if 'print' in line and 'print_pbc' not in line: + efp_options["print"] = int(line.rsplit()[1]) + + ##### fragments + if "fragment" in line and 'special_fragment' not in line: # read fragment name + sline = line.rsplit() + frag_name = sline[1] + frag_coord = [] + if coord_type == 'atoms' or coord_type == 'points': + for k in range(line_counter+1, len(lines)): + l = lines[k] + l = l.strip() # Remove leading/trailing whitespace; stop reading when empty line is found + if not l: break + if "velocity" in l: break + if "fragment" in l: break + sline = l.rsplit() + if coord_type == 'atoms': + frag_coord.append(float(sline[1])*a2b) + frag_coord.append(float(sline[2])*a2b) + frag_coord.append(float(sline[3])*a2b) + if coord_type == 'points': + frag_coord.append(float(sline[0])*a2b) + frag_coord.append(float(sline[1])*a2b) + frag_coord.append(float(sline[2])*a2b) + if coord_type == 'xyzabc': + l = lines[line_counter+1] + sline = l.rsplit() + if len(sline) != 6: + print('Warning! bad xyzabc coordinate read', sline) + + for i in range(3): + frag_coord.append(float(sline[i])*a2b) + for i in range(3): + frag_coord.append(float(sline[i+3])) + + # store frag info + frag_names.append(frag_name) + frag_coords.append(frag_coord) + + line_counter += 1 + + if efp_terms: + for term in efp_terms: + efp_options[term] = True + else: # no efp terms is given. libefp default is elec, pol, disp, exrep + efp_options['elec'] = True + efp_options['pol'] = True + efp_options['disp'] = True + efp_options['xr'] = True + + #print(f"Found {len(frag_names)} fragments") + return coord_type, frag_names, frag_coords, efp_options, if_gradient, ref_energy, periodic_box + + +#things = read_libefp_input('../total_1a.in') +#print(things) diff --git a/tests/pytests/systems.py b/tests/pytests/systems.py index fff00709..2154f4c7 100644 --- a/tests/pytests/systems.py +++ b/tests/pytests/systems.py @@ -8,7 +8,7 @@ def system_1(): sys = pylibefp.core.efp() - frags = ['h2o_l', 'nh3_L'] # specifying LIBRARY with _l for variety + frags = ['h2o_l', 'nh3_l'] # specifying LIBRARY with _l for variety sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 1.0, 2.0, 3.0]) # yapf: disable @@ -21,7 +21,7 @@ def system_1(): def system_2(): sys = pylibefp.core.efp() - frags = ['h2o', 'nh3', 'h2o', 'h2o', 'nh3'] + frags = ['h2o_l', 'nh3_l', 'h2o_l', 'h2o_l', 'nh3_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [-1.0 * a2b, 3.7 * a2b, 0.4 * a2b, -1.3, 0.0, 7.0]) # yapf: disable @@ -37,7 +37,7 @@ def system_2(): def system_3(): sys = pylibefp.core.efp() - frags = ['h2o', 'nh3', 'nh3', 'nh3', 'ch3oh', 'h2o', 'h2o', 'ch3oh', 'h2o'] + frags = ['h2o_l', 'nh3_l', 'nh3_l', 'nh3_l', 'ch3oh_l', 'h2o_l', 'h2o_l', 'ch3oh_l', 'h2o_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates( @@ -66,7 +66,7 @@ def system_3(): def system_4(): sys = pylibefp.core.efp() - frags = ['acetone', 'c2h5oh', 'c6h6', 'ccl4', 'ch3oh', 'ch4', 'cl2', 'dcm', 'dmso', 'h2', 'h2o', 'nh3'] + frags = ['acetone_l', 'c2h5oh_l', 'c6h6_l', 'ccl4_l', 'ch3oh_l', 'ch4_l', 'cl2_l', 'dcm_l', 'dmso_l', 'h2_l', 'h2o_l', 'nh3_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 0.2, 0.3]) # yapf: disable @@ -89,7 +89,7 @@ def system_4(): def system_5(): sys = pylibefp.core.efp() - frags = ['h2o', 'nh3'] + frags = ['h2o_l', 'nh3_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 3.0, 0.0, 7.0]) # yapf: disable @@ -102,7 +102,7 @@ def system_5(): def system_6(): sys = pylibefp.core.efp() - frags = ['h2o', 'ch3oh', 'h2o', 'ch3oh', 'nh3'] + frags = ['h2o_l', 'ch3oh_l', 'h2o_l', 'ch3oh_l', 'nh3_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, 0.0 * a2b, 0.0 * a2b, 0.0, 0.0, 0.0]) # yapf: disable @@ -118,7 +118,7 @@ def system_6(): def system_qm1(): sys = pylibefp.core.efp() - frags = ['h2o', 'c6h6', 'nh3'] + frags = ['h2o_l', 'c6h6_l', 'nh3_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [ -1.6 * a2b, 4.7 * a2b, 1.4 * a2b, -1.3, 0.1, 7.0]) # yapf: disable @@ -132,7 +132,7 @@ def system_qm1(): def system_qm2(): sys = pylibefp.core.efp() - frags = ['ch3oh', 'dmso', 'dmso', 'acetone', 'dcm', 'acetone', 'acetone'] + frags = ['ch3oh_l', 'dmso_l', 'dmso_l', 'acetone_l', 'dcm_l', 'acetone_l', 'acetone_l'] sys.add_potential(frags) sys.add_fragment(frags) sys.set_frag_coordinates(0, 'xyzabc', [ 0.0 * a2b, -1.0 * a2b, 0.0 * a2b, 0.0, 1.1, 2.0]) # yapf: disable diff --git a/tests/pytests/test_dict.py b/tests/pytests/test_dict.py index 8a8436f4..e74cfd95 100644 --- a/tests/pytests/test_dict.py +++ b/tests/pytests/test_dict.py @@ -27,8 +27,8 @@ def test_dict_1(): print(sys1p.geometry_summary(units_to_bohr=b2a)) print(sys1p.geometry_summary(units_to_bohr=1.0)) - assert compare(2, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0001922903, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6) + assert compare(2, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0001922903, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' def test_dict_2a(): @@ -39,8 +39,8 @@ def test_dict_2a(): sys1p.compute() ene = sys1p.get_energy() - assert compare(5, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0007440865, ene['total'], sys._getframe().f_code.co_name, atol=1.e-6) + assert compare(5, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0007440865, ene['total'], sys._getframe().f_code.co_name, atol=1.e-6, return_message=True), 'FAILED' def test_dict_3a(): @@ -59,8 +59,8 @@ def test_dict_3a(): sys1p.compute() ene = sys1p.get_energy() - assert compare(9, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5) + assert compare(9, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' def test_dict_4a(): @@ -79,8 +79,8 @@ def test_dict_4a(): sys1p.compute() ene = sys1p.get_energy() - assert compare(12, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5) + assert compare(12, sys1p.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' def test_dict_5(): @@ -91,3 +91,9 @@ def test_dict_5(): with pytest.raises(pylibefp.PolNotConverged) as e_info: sys.compute() assert sys.get_frag_count() == 0 + +if __name__ == '__main__': + function_list = [test_dict_1, test_dict_2a, test_dict_3a, test_dict_4a, test_dict_5] + for f in function_list: + print(f'\nComputing {f.__name__}') + f() \ No newline at end of file diff --git a/tests/pytests/test_efpefp.py b/tests/pytests/test_efpefp.py index 44fc4c66..ab87085c 100644 --- a/tests/pytests/test_efpefp.py +++ b/tests/pytests/test_efpefp.py @@ -11,7 +11,7 @@ def blank_ene(): fields = [ 'charge_penetration', 'disp', 'dispersion', 'elec', 'electrostatic', 'electrostatic_point_charges', - 'exchange_repulsion', 'pol', 'polarization', 'xr' + 'exchange_repulsion', 'pol', 'polarization', 'xr', 'qq', 'lj' ] ene = {f: 0.0 for f in fields} return ene @@ -25,7 +25,7 @@ def test_elec_1a(): expected_ene = blank_ene() expected_ene['elec'] = expected_ene['electrostatic'] = expected_ene['total'] = 0.0002900482 - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_elec_1b(): @@ -40,12 +40,12 @@ def test_elec_1b(): expected_ene['elec'] = expected_ene['total'] = elst expected_ene['charge_penetration'] = cp expected_ene['electrostatic'] = elst - cp - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_pol_1a(): asdf = system_1() - opts = {'elec': True, 'pol': True, 'elec_damp': 'screen'} + opts = {'elec': True, 'pol': True, 'elec_damp': 'screen', 'print': 0} asdf.set_opts(opts) asdf.compute() ene = asdf.get_energy() @@ -56,8 +56,8 @@ def test_pol_1a(): expected_ene['elec'] = expected_ene['electrostatic'] = elec expected_ene['pol'] = expected_ene['polarization'] = pol expected_ene['total'] = elec + pol - pprint.pprint(opts) - assert compare_recursive(expected_ene, ene, atol=1.e-6) + #pprint.pprint(opts) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_pol_1b(): @@ -72,7 +72,7 @@ def test_pol_1b(): expected_ene['elec'] = expected_ene['electrostatic'] = elec expected_ene['pol'] = expected_ene['polarization'] = pol expected_ene['total'] = elec + pol - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_disp_1a(): @@ -83,7 +83,7 @@ def test_disp_1a(): expected_ene = blank_ene() expected_ene['disp'] = expected_ene['dispersion'] = expected_ene['total'] = -0.0000989033 - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_disp_1b(): @@ -95,7 +95,7 @@ def test_disp_1b(): expected_ene = blank_ene() expected_ene['disp'] = expected_ene['dispersion'] = expected_ene['total'] = -0.0001007275 - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_xr_1(): @@ -106,7 +106,7 @@ def test_xr_1(): expected_ene = blank_ene() expected_ene['xr'] = expected_ene['exchange_repulsion'] = expected_ene['total'] = 0.0000134716 - assert compare_recursive(expected_ene, ene, atol=1.e-6) + assert compare_recursive(expected_ene, ene, atol=1.e-6, return_message=True), 'FAILED' def test_total_1a(): @@ -117,7 +117,8 @@ def test_total_1a(): 'xr': True, 'pol': True, # 'pol_damp': 'tt', 'disp': True, - 'disp_damp': 'tt' + 'disp_damp': 'tt', + 'print': 2 }) asdf.compute() ene = asdf.get_energy() @@ -136,11 +137,11 @@ def test_total_1a(): expected_ene['pol'] = expected_ene['polarization'] = 0.0002777238 - expected_ene['electrostatic'] expected_ene['disp'] = expected_ene['dispersion'] = -0.0000989033 expected_ene['total'] = 0.0001922903 - assert compare(2, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0, asdf.get_frag_charge(1), sys._getframe().f_code.co_name + ': f_chg', atol=1.e-6) - assert compare(1, asdf.get_frag_multiplicity(1), sys._getframe().f_code.co_name + ': f_mult') - assert compare('NH3_L', asdf.get_frag_name(1), sys._getframe().f_code.co_name + ': f_name') - assert compare_recursive(expected_ene, ene, sys._getframe().f_code.co_name + ': ene', atol=1.e-6) + assert compare(2, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0, asdf.get_frag_charge(1), sys._getframe().f_code.co_name + ': f_chg', atol=1.e-6, return_message=True), 'FAILED' + assert compare(1, asdf.get_frag_multiplicity(1), sys._getframe().f_code.co_name + ': f_mult', return_message=True), 'FAILED' + assert compare('NH3_L', asdf.get_frag_name(1), sys._getframe().f_code.co_name + ': f_name', return_message=True), 'FAILED' + assert compare_recursive(expected_ene, ene, sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' def test_elec_2a(): @@ -148,7 +149,7 @@ def test_elec_2a(): asdf.set_opts({'elec': True, 'elec_damp': 'screen'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0015865516, ene['elec'], atol=1.e-6) + assert compare_values(0.0015865516, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' def test_elec_2b(): @@ -156,7 +157,7 @@ def test_elec_2b(): asdf.set_opts({'elec': True, 'elec_damp': 'overlap'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0017049246, ene['elec'], atol=1.e-6) + assert compare_values(0.0017049246, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' def test_pol_2a(): @@ -165,7 +166,7 @@ def test_pol_2a(): asdf.compute() ene = asdf.get_energy() pprint.pprint(ene) - assert compare_values(0.0013685212, ene['total'], atol=1.e-6) + assert compare_values(0.0013685212, ene['total'], atol=1.e-6, return_message=True), 'FAILED' def test_pol_2b(): @@ -173,7 +174,7 @@ def test_pol_2b(): asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_driver': 'direct'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0013685212, ene['total'], atol=1.e-6) + assert compare_values(0.0013685212, ene['total'], atol=1.e-6, return_message=True), 'FAILED' def test_disp_2a(): @@ -181,7 +182,7 @@ def test_disp_2a(): asdf.set_opts({'disp': True, 'disp_damp': 'tt'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0014688094, ene['disp'], atol=1.e-6) + assert compare_values(-0.0014688094, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' def test_disp_2b(): @@ -189,7 +190,7 @@ def test_disp_2b(): asdf.set_opts({'disp': True, 'disp_damp': 'overlap'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0015801770, ene['disp'], atol=1.e-6) + assert compare_values(-0.0015801770, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' def test_xr_2(): @@ -197,7 +198,7 @@ def test_xr_2(): asdf.set_opts({'xr': True}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0008443933, ene['xr'], atol=1.e-6) + assert compare_values(0.0008443933, ene['xr'], atol=1.e-6, return_message=True), 'FAILED' def test_total_2a(): @@ -206,7 +207,7 @@ def test_total_2a(): asdf.compute() ene = asdf.get_energy() assert compare(5, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0007440865, ene['total'], atol=1.e-6) + assert compare_values(0.0007440865, ene['total'], atol=1.e-6, return_message=True), 'FAILED' def test_elec_3a(): @@ -214,7 +215,7 @@ def test_elec_3a(): asdf.set_opts({'elec': True, 'elec_damp': 'screen'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0039531505, ene['elec'], atol=1.e-6) + assert compare_values(-0.0039531505, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' def test_elec_3b(): @@ -222,7 +223,7 @@ def test_elec_3b(): asdf.set_opts({'elec': True, 'elec_damp': 'overlap'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0023592829, ene['elec'], atol=1.e-6) + assert compare_values(0.0023592829, ene['elec'], atol=1.e-6, return_message=True), 'FAILED' def test_pol_3a(): @@ -230,7 +231,7 @@ def test_pol_3a(): asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_damp': 'off'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0066095992, ene['total'], atol=1.e-6) + assert compare_values(-0.0066095992, ene['total'], atol=1.e-6, return_message=True), 'FAILED' def test_pol_3b(): @@ -238,7 +239,7 @@ def test_pol_3b(): asdf.set_opts({'elec': True, 'pol': True, 'elec_damp': 'screen', 'pol_damp': 'off', 'pol_driver': 'direct'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0066095992, ene['total'], atol=1.e-6) + assert compare_values(-0.0066095992, ene['total'], atol=1.e-6, return_message=True), 'FAILED' def test_disp_3a(): @@ -246,7 +247,7 @@ def test_disp_3a(): asdf.set_opts({'disp': True, 'disp_damp': 'tt'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0173897265, ene['disp'], atol=1.e-6) + assert compare_values(-0.0173897265, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' def test_disp_3b(): @@ -254,7 +255,7 @@ def test_disp_3b(): asdf.set_opts({'disp': True, 'disp_damp': 'overlap'}) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0220107872, ene['disp'], atol=1.e-6) + assert compare_values(-0.0220107872, ene['disp'], atol=1.e-6, return_message=True), 'FAILED' def test_xr_3(): @@ -262,7 +263,7 @@ def test_xr_3(): asdf.set_opts({'xr': True}) asdf.compute() ene = asdf.get_energy() - assert compare_values(0.0301402098, ene['xr'], atol=1.e-5) + assert compare_values(0.0301402098, ene['xr'], atol=1.e-5, return_message=True), 'FAILED' def test_total_3a(): @@ -278,8 +279,8 @@ def test_total_3a(): }) asdf.compute() ene = asdf.get_energy() - assert compare(9, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5) + assert compare(9, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_values(0.0061408841, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' def test_total_4a(): @@ -300,11 +301,11 @@ def test_total_4a(): mfrags = [1 for fr in range(12)] cfrags = [0.0 for fr in range(12)] tnm = sys._getframe().f_code.co_name - assert compare(12, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag') - assert compare_recursive({'dummy': cfrags}, {'dummy': asdf.get_frag_charge()}, tnm + ': f_chg', atol=1.e-2) - assert compare_recursive({'dummy': mfrags}, {'dummy': asdf.get_frag_multiplicity()}, tnm + ': f_mult', atol=1.e-2) - assert compare_recursive({'dummy': [fr + '_L' for fr in nfrags]}, {'dummy': asdf.get_frag_name()}, tnm + ': f_names', atol=1.e-2) - assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5) + assert compare(12, asdf.get_frag_count(), sys._getframe().f_code.co_name + ': nfrag', return_message=True), 'FAILED' + assert compare_recursive({'dummy': cfrags}, {'dummy': asdf.get_frag_charge()}, tnm + ': f_chg', atol=1.e-2, return_message=True), 'FAILED' + assert compare_recursive({'dummy': mfrags}, {'dummy': asdf.get_frag_multiplicity()}, tnm + ': f_mult', atol=1.e-2, return_message=True), 'FAILED' + assert compare_recursive({'dummy': [fr + '_L' for fr in nfrags]}, {'dummy': asdf.get_frag_name()}, tnm + ': f_names', atol=1.e-2, return_message=True), 'FAILED' + assert compare_values(-0.0095597483, ene['total'], sys._getframe().f_code.co_name, atol=1.e-5, return_message=True), 'FAILED' def test_total_4b(): @@ -320,7 +321,7 @@ def test_total_4b(): }) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0092400662, ene['total'], atol=1.e-5) + assert compare_values(-0.0092400662, ene['total'], atol=1.e-5, return_message=True), 'FAILED' def test_total_4c(): @@ -336,7 +337,7 @@ def test_total_4c(): }) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0091278725, ene['total'], atol=1.e-5) + assert compare_values(-0.0091278725, ene['total'], atol=1.e-5, return_message=True), 'FAILED' def test_total_4d(): @@ -353,8 +354,18 @@ def test_total_4d(): }) asdf.compute() ene = asdf.get_energy() - assert compare_values(-0.0095597483, ene['total'], atol=1.e-5) + assert compare_values(-0.0095597483, ene['total'], atol=1.e-5, return_message=True), 'FAILED' if __name__ == '__main__': - test_total_4d() + function_list = [ test_elec_1a, test_elec_1b, test_elec_2a, test_elec_2b, test_elec_3a, test_elec_3b, + test_pol_1a, test_pol_1b, test_pol_2a, test_pol_2b, test_pol_3a, test_pol_3b, + test_disp_1a, test_disp_1b, test_disp_2a, test_disp_2b, test_disp_3a, test_disp_3b, + test_xr_1, test_xr_2, test_xr_3, + test_total_1a, test_total_2a, test_total_3a, test_total_4a, test_total_4b, test_total_4c, test_total_4d] + tests = function_list + #tests = [item for item in function_list if 'pol' in str(item)] + for f in tests: + print(f'\nComputing {f.__name__}') + f() + diff --git a/tests/pytests/test_efpefp_new.py b/tests/pytests/test_efpefp_new.py new file mode 100644 index 00000000..44284c98 --- /dev/null +++ b/tests/pytests/test_efpefp_new.py @@ -0,0 +1,57 @@ +import libefp2py +import pylibefp +from qcelemental.testing import compare, compare_values +import pprint + + +b2a = 0.529177 +a2b = 1.0 / b2a + +def frag_setup(test_name): + # coordinates in Bohr + coord_type, frags, frag_coords, efp_options, if_gradient, ref_energy, periodic_box = libefp2py.read_libefp_input(test_name) + #print(frag_coords) + + efp = pylibefp.core.efp() + efp.add_potential(frags) + efp.add_fragment(frags) + for i in range(len(frags)): + efp.set_frag_coordinates(i, coord_type, frag_coords[i]) + efp.prepare() + + efp.set_opts(efp_options) + if periodic_box: + #print('box1', periodic_box) + efp.set_periodic_box(periodic_box) + #print('box2', efp.get_periodic_box()) + + #print(frag_coords) + #pprint.pprint(efp_options) + efp.compute(do_gradient = if_gradient) + ene = efp.get_energy() + + # print pairwise components + #if 'enable_pairwise' in efp_options.keys(): + # if efp_options['enable_pairwise'] in [True, 'true', 1]: + # efp.print_pairwise_energies() + + print(efp.energy_summary()) + if if_gradient: + print(efp.gradient_summary()) + if ref_energy != 0.0: + assert compare_values(ref_energy, ene['total'], atol=1.e-5, return_message=True), 'FAILED' + +##### +if __name__ == '__main__': + files = ['atom_coord.in', 'atom_coord_2.in', 'grad_1.in', 'lj_1.in', 'lj_2.in', + 'pairwise_0.in', 'pairwise_1.in', 'pairwise_2.in', 'pairwise_x.in', 'pbc_1.in', 'pbc_2.in', + 'reduced.in', 'spec_frag_0.in', 'spec_frag_1.in', 'spec_frag_2.in', 'spec_frag_base.in', 'spec_frag_ref.in', + 'symm_1.in', 'symm_2.in', 'symm_2full.in', 'symm_2pw.in'] + + # running for all tests in files list + for f in files: + print(f'\nComputing {f}...') + frag_setup('../'+f) + + # single test execution + frag_setup('../symm_2pw.in') diff --git a/tests/pytests/test_opts.py b/tests/pytests/test_opts.py index 4b2aa9cd..0c0da093 100644 --- a/tests/pytests/test_opts.py +++ b/tests/pytests/test_opts.py @@ -25,12 +25,32 @@ def test_opts_libefp(): 'ai_xr': False, 'elec': False, 'pol_damp': 'tt', + 'pol_damp_tt_value': 0.6, 'disp_damp': 'overlap', 'enable_pbc': False, + 'enable_elpot': False, 'ai_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'ai_qq': False, + 'qq': False, + 'lj': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0, } + ans1 = asdf.set_opts({}) - assert compare_recursive(ref1, ans1, sys._getframe().f_code.co_name + ': blank', atol=1.e-6) + assert compare_recursive(ref1, ans1, sys._getframe().f_code.co_name + ': blank', atol=1.e-6, return_message=True), 'FAILED' ref2 = { 'ai_elec': True, @@ -44,12 +64,31 @@ def test_opts_libefp(): 'pol': False, 'xr': False, 'pol_driver': 'iterative', + 'pol_damp_tt_value': 0.6, 'ai_xr': False, 'elec': True, 'pol_damp': 'tt', 'disp_damp': 'overlap', 'enable_pbc': False, + 'enable_elpot': False, 'ai_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'ai_qq': False, + 'qq': False, + 'lj': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0, } ans2 = asdf.set_opts({ 'elec_damp': 'OFF', @@ -58,7 +97,7 @@ def test_opts_libefp(): 'ai_elec': True, 'enable_cutoff': False, }) - assert compare_recursive(ref2, ans2, sys._getframe().f_code.co_name + ': setting', atol=1.e-6) + assert compare_recursive(ref2, ans2, sys._getframe().f_code.co_name + ': setting', atol=1.e-6, return_message=True), 'FAILED' ref3 = { 'ai_elec': True, @@ -67,20 +106,39 @@ def test_opts_libefp(): 'chtr': False, 'swf_cutoff': 2.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': False, 'ai_pol': False, 'pol': False, 'xr': False, 'pol_driver': 'iterative', + 'pol_damp_tt_value': 0.6, 'ai_xr': False, 'elec': False, 'pol_damp': 'tt', 'disp_damp': 'tt', 'enable_pbc': False, 'ai_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'ai_qq': False, + 'qq': False, + 'lj': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0, } ans3 = asdf.set_opts({'swf_cutoff': 2, 'elec': False, 'ai_elec': True, 'disp_damp': 'TT'}, append='append') - assert compare_recursive(ref3, ans3, sys._getframe().f_code.co_name + ': append setting', atol=1.e-6) + assert compare_recursive(ref3, ans3, sys._getframe().f_code.co_name + ': append setting', atol=1.e-6, return_message=True), 'FAILED' ref4 = { 'ai_elec': False, @@ -88,18 +146,37 @@ def test_opts_libefp(): 'ai_disp': False, 'chtr': False, 'swf_cutoff': 0.0, + 'enable_elpot': False, 'enable_cutoff': False, 'disp': False, 'ai_pol': False, 'pol': False, 'xr': False, 'pol_driver': 'iterative', + 'pol_damp_tt_value': 0.6, 'ai_xr': False, 'elec': True, 'pol_damp': 'tt', 'disp_damp': 'overlap', 'enable_pbc': False, 'ai_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'ai_qq': False, + 'qq': False, + 'lj': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0, } ans4 = asdf.set_opts({ 'elec_damp': 'OFF', @@ -108,7 +185,7 @@ def test_opts_libefp(): 'enable_cutoff': False }, append='libefp') - assert compare_recursive(ref4, ans4, sys._getframe().f_code.co_name + ': reset setting', atol=1.e-6) + assert compare_recursive(ref4, ans4, sys._getframe().f_code.co_name + ': reset setting', atol=1.e-6, return_message=True), 'FAILED' def test_opts_fail_1(): @@ -136,6 +213,7 @@ def test_opts_psi(): 'chtr': False, 'swf_cutoff': 0.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': False, 'qm_ind': False, 'ind': False, @@ -145,11 +223,31 @@ def test_opts_psi(): 'elst': False, 'ind_damping': 'tt', 'disp_damping': 'overlap', + 'pol_damp_tt_value': 0.6, 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } + + ans = asdf.set_opts({}, label='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi blank', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi blank', atol=1.e-6, return_message=True), 'FAILED' ref = { 'qm_elst': True, @@ -158,6 +256,7 @@ def test_opts_psi(): 'chtr': False, 'swf_cutoff': 1.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': False, 'qm_ind': False, 'ind': False, @@ -167,8 +266,26 @@ def test_opts_psi(): 'elst': True, 'ind_damping': 'tt', 'disp_damping': 'overlap', + 'pol_damp_tt_value': 0.6, 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } ans = asdf.set_opts( { @@ -178,7 +295,7 @@ def test_opts_psi(): 'qm_elst': True, 'enable_cutoff': False, }, label='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi setting', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi setting', atol=1.e-6, return_message=True), 'FAILED' ref = { 'qm_elst': True, @@ -187,6 +304,7 @@ def test_opts_psi(): 'chtr': False, 'swf_cutoff': 2.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': False, 'qm_ind': False, 'ind': False, @@ -196,8 +314,26 @@ def test_opts_psi(): 'elst': False, 'ind_damping': 'tt', 'disp_damping': 'tt', + 'pol_damp_tt_value': 0.6, 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } ans = asdf.set_opts({ 'swf_cutoff': 2, @@ -207,7 +343,7 @@ def test_opts_psi(): }, append='append', label='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi append setting', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi append setting', atol=1.e-6, return_message=True), 'FAILED' ref = { 'qm_elst': False, @@ -216,6 +352,7 @@ def test_opts_psi(): 'chtr': False, 'swf_cutoff': 0.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': False, 'qm_ind': False, 'ind': False, @@ -224,9 +361,27 @@ def test_opts_psi(): 'qm_exch': False, 'elst': True, 'ind_damping': 'tt', + 'pol_damp_tt_value': 0.6, 'disp_damping': 'overlap', 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } ans = asdf.set_opts({ 'elst_damping': 'OFF', @@ -236,7 +391,7 @@ def test_opts_psi(): }, append='libefp', label='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi reset setting', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi reset setting', atol=1.e-6, return_message=True), 'FAILED' def test_opts_psi_dflt(): @@ -249,6 +404,7 @@ def test_opts_psi_dflt(): 'chtr': False, 'swf_cutoff': 0.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': True, 'qm_ind': True, 'ind': True, @@ -258,11 +414,29 @@ def test_opts_psi_dflt(): 'elst': True, 'ind_damping': 'tt', 'disp_damping': 'overlap', + 'pol_damp_tt_value': 0.6, 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } ans = asdf.set_opts({}, label='psi', append='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default blank', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default blank', atol=1.e-6, return_message=True), 'FAILED' ref = { 'qm_elst': False, @@ -271,6 +445,7 @@ def test_opts_psi_dflt(): 'chtr': False, 'swf_cutoff': 1.0, 'enable_cutoff': False, + 'enable_elpot': False, 'disp': True, 'qm_ind': True, 'ind': True, @@ -280,8 +455,26 @@ def test_opts_psi_dflt(): 'elst': True, 'ind_damping': 'tt', 'disp_damping': 'overlap', + 'pol_damp_tt_value': 0.6, 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':0.0 } ans = asdf.set_opts( { @@ -293,7 +486,7 @@ def test_opts_psi_dflt(): }, label='psi', append='append') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default append setting', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default append setting', atol=1.e-6, return_message=True), 'FAILED' ref = { 'qm_elst': True, @@ -302,6 +495,7 @@ def test_opts_psi_dflt(): 'chtr': False, 'swf_cutoff': 2.0, 'enable_cutoff': True, + 'enable_elpot': False, 'disp': True, 'qm_ind': True, 'ind': True, @@ -310,9 +504,27 @@ def test_opts_psi_dflt(): 'qm_exch': False, 'elst': False, 'ind_damping': 'tt', + 'pol_damp_tt_value': 0.6, 'disp_damping': 'overlap', 'enable_pbc': False, 'qm_chtr': False, + 'enable_pairwise': False, + 'ligand': -100, + 'symmetry': False, + 'symm_frag': 'frag', + 'spec_elec': False, + 'spec_pol': False, + 'spec_disp': False, + 'spec_xr': False, + 'spec_chtr': False, + 'qm_qq': False, + 'charge_charge': False, + 'lennard-jones': False, + 'special_fragment': -100, + 'spec_qq': False, + 'spec_lj': False, + 'print': 0, + 'xr_cutoff':2.0, } ans = asdf.set_opts({ 'elst_damping': 'OVERlap', @@ -322,4 +534,16 @@ def test_opts_psi_dflt(): }, append='psi', label='psi') - assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default reset setting', atol=1.e-6) + assert compare_recursive(ref, ans, sys._getframe().f_code.co_name + ': psi default reset setting', atol=1.e-6, return_message=True), 'FAILED' + +if __name__ == '__main__': + + functions = [ test_opts_libefp, + test_opts_fail_1, + test_opts_fail_2, + test_opts_psi, + test_opts_psi_dflt + ] + for f in functions: + print(f'\nComputing {f.__name__}') + f() diff --git a/tests/pytests/test_psi.py b/tests/pytests/test_psi.py index 490aec3d..48d50314 100644 --- a/tests/pytests/test_psi.py +++ b/tests/pytests/test_psi.py @@ -34,8 +34,8 @@ def test_efpefptorque(): ] } # yapf: disable - assert compare_values(-0.0066095987170644, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-5) - assert compare_recursive(ref, {'torque': torq}, sys._getframe().f_code.co_name + ': torq', atol=1.e-6) + assert compare_values(-0.0066095987170644, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-5, return_message=True), 'FAILED' + assert compare_recursive(ref, {'torque': torq}, sys._getframe().f_code.co_name + ': torq', atol=1.e-6, return_message=True), 'FAILED' def test_efpefp_bz2(): @@ -45,7 +45,7 @@ def test_efpefp_bz2(): asdf = pylibefp.core.efp() - frags = ['c6h6', 'c6h6'] + frags = ['c6h6_l', 'c6h6_l'] asdf.add_potential(frags) asdf.add_fragment(frags) asdf.set_frag_coordinates( @@ -59,8 +59,12 @@ def test_efpefp_bz2(): ene = asdf.get_energy(label='psi') # values copied from q-chem output file - assert compare_values(-0.006945881265, ene['elst'], sys._getframe().f_code.co_name + ': ene elst', atol=1.e-6) - assert compare_values(0.046915489574, ene['exch'], sys._getframe().f_code.co_name + ': ene exch', atol=1.e-6) - assert compare_values(-0.000675030191, ene['ind'], sys._getframe().f_code.co_name + ': ene ind', atol=1.e-6) - assert compare_values(-0.021092526180, ene['disp'], sys._getframe().f_code.co_name + ': ene disp', atol=1.e-6) - assert compare_values(0.018202051938, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6) + assert compare_values(-0.006945881265, ene['elst'], sys._getframe().f_code.co_name + ': ene elst', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(0.046915489574, ene['exch'], sys._getframe().f_code.co_name + ': ene exch', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(-0.000675030191, ene['ind'], sys._getframe().f_code.co_name + ': ene ind', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(-0.021092526180, ene['disp'], sys._getframe().f_code.co_name + ': ene disp', atol=1.e-6, return_message=True), 'FAILED' + assert compare_values(0.018202051938, ene['total'], sys._getframe().f_code.co_name + ': ene', atol=1.e-6, return_message=True), 'FAILED' + +if __name__ == '__main__': + test_efpefptorque() + test_efpefp_bz2() \ No newline at end of file diff --git a/tests/sp_2.in b/tests/sp_2.in new file mode 100644 index 00000000..532e1b53 --- /dev/null +++ b/tests/sp_2.in @@ -0,0 +1,10 @@ +run_type sp +coord xyzabc +terms qq lj +fraglib_path ../fraglib + +fragment tip3p_mm_l + 0.0 0.0 0.0 1.0 2.0 3.0 + +fragment tip3p_mm_l + 3.0 0.0 0.0 5.0 2.0 8.0 diff --git a/tests/torch_efp_2.in b/tests/torch_efp_2.in index 019e08d7..c6788eba 100644 --- a/tests/torch_efp_2.in +++ b/tests/torch_efp_2.in @@ -62,4 +62,3 @@ fragment h2o_l A01O1 -5.773000 -1.738000 -0.926000 A02H2 -5.053659 -1.949235 -1.493100 A03H3 -5.438927 -1.776829 -0.048183 -