diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0eb3b77b..3e37ddc6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,12 +27,15 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macOS-latest] + os: [ubuntu-latest, macos-latest] python-version: ["3.8", "3.9", "3.10"] latest-openff-toolkit: [true, false] + exclude: + - python-version: "3.10" + os: macos-latest steps: - - uses: actions/checkout@v3.0.2 + - uses: actions/checkout@v3 - name: Setup Conda Environment uses: mamba-org/provision-with-micromamba@main @@ -52,25 +55,29 @@ jobs: - name: "Install latest openff-toolkit" if: ${{ matrix.latest-openff-toolkit == true }} run: | - # Until #225 is complete, we should not assume compatibility with new API - micromamba install "openff-toolkit =0.10.6" -c conda-forge -y + micromamba update -y -c conda-forge "openff-toolkit >=0.11.0" - name: Install Package run: | - # Can't use 'develop' mode because we remove symlinks after install is complete - python setup.py install + pip list + micromamba list + micromamba remove --force openmmforcefields + python -m pip install . - name: Conda Environment Information run: | - conda info - conda list + micromamba info + micromamba list + python -c "from openmmforcefields import __version__, __file__; print(__version__, __file__)" - name: Test Installed Package run: | - pytest -v -x -s --log-cli-level $LOGLEVEL --cov=openmmforcefields openmmforcefields/tests/test_amber_import.py - pytest -v -x -s --log-cli-level $LOGLEVEL --cov=openmmforcefields openmmforcefields/tests/test_template_generators.py - pytest -v -x -s --log-cli-level $LOGLEVEL --cov=openmmforcefields openmmforcefields/tests/test_system_generator.py + pytest -v -x --log-cli-level $LOGLEVEL $COV_ARGS --durations=20 \ + openmmforcefields/tests/test_amber_import.py \ + openmmforcefields/tests/test_template_generators.py \ + openmmforcefields/tests/test_system_generator.py env: + COV_ARGS: --cov=openmmforcefields --cov-config=setup.cfg --cov-append --cov-report=xml LOGLEVEL: "INFO" KMP_DUPLICATE_LIB_OK: "True" @@ -93,11 +100,11 @@ jobs: working-directory: ./charmm - - name: CodeCov + - name: Upload coverage report to CodeCov + uses: codecov/codecov-action@v3.1.0 if: ${{ github.repository == 'openmm/openmmforcefields' && github.event != 'schedule' }} - uses: codecov/codecov-action@v3.1.0 with: + token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml - flags: unittests - name: codecov-${{ matrix.os }}-py${{ matrix.python-version }} + fail_ci_if_error: true diff --git a/.gitignore b/.gitignore index 655d7cf7..893538fe 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,10 @@ coverage.xml # Django stuff: *.log -local_settings.py + +# Sphinx documentation +docs/_build/ +docs/api/generated # Flask stuff: instance/ @@ -62,12 +65,13 @@ instance/ # Scrapy stuff: .scrapy -# Sphinx documentation -docs/_build/ - # PyBuilder target/ +# PyCharm +*.idea/vcs.xml + +# Jupyter # Jupyter Notebook .ipynb_checkpoints @@ -108,5 +112,11 @@ ENV/ # In-tree generated files */_version.py -# OS X extra files +# macOS *.DS_Store + +# Caches +openmmforcefields/data/perses_jacs_systems/*/cache.json + +# Test molecules +testsystem-bace* diff --git a/amber/convert_amber.py b/amber/convert_amber.py index 7097930f..68a9bf23 100644 --- a/amber/convert_amber.py +++ b/amber/convert_amber.py @@ -1,42 +1,43 @@ # AMBER --> OpenMM force-field conversion script # Author: Rafal P. Wiewiora, ChoderaLab -from __future__ import print_function, division -from io import StringIO -import parmed -import openmm -import openmm.app as app -import openmm.unit as u +import argparse +import csv +import glob +import hashlib import os -import sys import re +import sys import tempfile -import yaml -from distutils.spawn import find_executable -import hashlib -from collections import OrderedDict -import glob -import argparse -from lxml import etree as et -import csv -import logging import warnings import xml.etree.ElementTree as etree +from collections import OrderedDict from copy import deepcopy +from distutils.spawn import find_executable +from io import StringIO + +import openmm +import openmm.app as app +import openmm.unit as u +import parmed +import yaml +from lxml import etree as et from parmed.exceptions import ParameterWarning -warnings.filterwarnings('error', category=ParameterWarning) +from pkg_resources import resource_filename + +warnings.filterwarnings("error", category=ParameterWarning) -_loadoffre = re.compile(r'loadoff (\S*)', re.I) -_sourcere = re.compile(r'source (\S*)', re.I) +_loadoffre = re.compile(r"loadoff (\S*)", re.I) +_sourcere = re.compile(r"source (\S*)", re.I) # check for AMBERHOME, find from tleap location if not set, exception if can't -if os.getenv('AMBERHOME'): - AMBERHOME = os.getenv('AMBERHOME') +if os.getenv("AMBERHOME"): + AMBERHOME = os.getenv("AMBERHOME") else: - if not find_executable('tleap'): - raise Exception('AMBERHOME not set and tleap not available from PATH') - tleap_path = find_executable('tleap') + if not find_executable("tleap"): + raise Exception("AMBERHOME not set and tleap not available from PATH") + tleap_path = find_executable("tleap") AMBERHOME = os.path.split(tleap_path)[0] - AMBERHOME = os.path.join(AMBERHOME, '../') + AMBERHOME = os.path.join(AMBERHOME, "../") parmed.amber.AMBERHOME = AMBERHOME # set global defaults for verbose and log @@ -46,8 +47,13 @@ # set files that are ignored in leaprc's # solvents and ions converted separately; leaprc.ff10 calls phosphoaa10.lib # which does not exist anymore, LeAP skips it on error so we do too -ignore = {'solvents.lib', 'atomic_ions.lib', 'ions94.lib', 'ions91.lib', - 'phosphoaa10.lib'} +ignore = { + "solvents.lib", + "atomic_ions.lib", + "ions94.lib", + "ions91.lib", + "phosphoaa10.lib", +} # define NEARLYZERO to replace numerical comparisons to zero NEARLYZERO = 1e-10 @@ -56,66 +62,105 @@ temperature = 300.0 * u.kelvin kB = u.BOLTZMANN_CONSTANT_kB * u.AVOGADRO_CONSTANT_NA kT = kB * temperature -beta = 1.0/kT +beta = 1.0 / kT + class LeapException(Exception): def __init__(self, leaprc_filename): - msg = 'Something went wrong in processing this LEaP input file:\n' - msg += '\n' - infile = open(leaprc_filename, 'rt') + msg = "Something went wrong in processing this LEaP input file:\n" + msg += "\n" + infile = open(leaprc_filename) contents = infile.read() msg += contents - msg += '\n' - super(LeapException, self).__init__(msg) + msg += "\n" + super().__init__(msg) + def main(): global verbose global no_log global logger # argparse - parser = argparse.ArgumentParser(description='AMBER --> OpenMM forcefield ' - 'conversion script') - parser.add_argument('--input', '-i', default='master.yaml', - help='path of the input file. Default: "master.yaml"') - parser.add_argument('--input-format', '-if', default='yaml', - help='format of the input file: "yaml" or "leaprc". Default: "yaml"') - parser.add_argument('--output-dir', '-od', help='path of the output directory. ' - 'Default: "ffxml/" for yaml, "./" for leaprc') - parser.add_argument('--verbose', '-v', action='store_true', - help='turns verbosity on') - parser.add_argument('--log', action='store', dest='log_filename', default=None, - help='log energies for tests to specified CSV file') - parser.add_argument('--protein-test', action='store_true', - help='validate resulting XML through protein tests') - parser.add_argument('--nucleic-test', action='store_true', - help='validate resulting XML through nucleic acid tests') - parser.add_argument('--protein-ua-test', action='store_true', - help='validate resulting XML through united-atom protein tests') - parser.add_argument('--phospho-protein-test', action='store_true', - help='validate resulting XML through phosphorylated protein tests') - parser.add_argument('--gaff-test', action='store_true', - help='validate resulting XML through small-molecule (GAFF) test') - parser.add_argument('--lipids-test', action='store_true', - help='validate resulting XML through lipids tests') + parser = argparse.ArgumentParser( + description="AMBER --> OpenMM forcefield " "conversion script" + ) + parser.add_argument( + "--input", + "-i", + default="master.yaml", + help='path of the input file. Default: "master.yaml"', + ) + parser.add_argument( + "--input-format", + "-if", + default="yaml", + help='format of the input file: "yaml" or "leaprc". Default: "yaml"', + ) + parser.add_argument( + "--output-dir", + "-od", + help="path of the output directory. " + 'Default: "ffxml/" for yaml, "./" for leaprc', + ) + parser.add_argument( + "--verbose", "-v", action="store_true", help="turns verbosity on" + ) + parser.add_argument( + "--log", + action="store", + dest="log_filename", + default=None, + help="log energies for tests to specified CSV file", + ) + parser.add_argument( + "--protein-test", + action="store_true", + help="validate resulting XML through protein tests", + ) + parser.add_argument( + "--nucleic-test", + action="store_true", + help="validate resulting XML through nucleic acid tests", + ) + parser.add_argument( + "--protein-ua-test", + action="store_true", + help="validate resulting XML through united-atom protein tests", + ) + parser.add_argument( + "--phospho-protein-test", + action="store_true", + help="validate resulting XML through phosphorylated protein tests", + ) + parser.add_argument( + "--gaff-test", + action="store_true", + help="validate resulting XML through small-molecule (GAFF) test", + ) + parser.add_argument( + "--lipids-test", + action="store_true", + help="validate resulting XML through lipids tests", + ) args = parser.parse_args() verbose = args.verbose if args.log_filename: - logger = Logger(args.log_filename) # log to file + logger = Logger(args.log_filename) # log to file else: - logger = Logger() # be silent + logger = Logger() # be silent # input is either a YAML or a leaprc - default is leaprc # output directory hardcoded here for ffxml/ - if args.input_format == 'yaml': + if args.input_format == "yaml": if args.output_dir is None: - convert_yaml(args.input, ffxml_dir='ffxml/') + convert_yaml(args.input, ffxml_dir="../openmmforcefields/ffxml/amber") else: convert_yaml(args.input, ffxml_dir=args.output_dir) # if leaprc converted - output to the same dir - elif args.input_format == 'leaprc': + elif args.input_format == "leaprc": if args.output_dir is None: - ffxml_name = convert_leaprc(args.input, ffxml_dir='./') + ffxml_name = convert_leaprc(args.input, ffxml_dir="./") else: ffxml_name = convert_leaprc(args.input, ffxml_dir=args.output_dir) if args.protein_test: @@ -131,19 +176,24 @@ def main(): if args.lipids_test: validate_lipids(ffxml_name, args.input) else: - sys.exit('Wrong input_format chosen.') + sys.exit("Wrong input_format chosen.") logger.close() + def read_lines(filename): """ Read lines from file, stripping comments and newlines. """ - with open(filename, 'rt') as f: - lines = [ line if '#' not in line else line[:line.index('#')] for line in f.readlines() ] + with open(filename) as f: + lines = [ + line if "#" not in line else line[: line.index("#")] + for line in f.readlines() + ] return lines + def write_file(file, contents): """ Write text to file. @@ -157,33 +207,45 @@ def write_file(file, contents): """ if type(file) == str: - outfile = open(file, 'w') + outfile = open(file, "w") else: - outfile = os.fdopen(file, 'w') + outfile = os.fdopen(file, "w") outfile.write(contents) outfile.close() -def convert_leaprc(files, split_filename=False, ffxml_dir='./', ignore=ignore, - provenance=None, write_unused=False, override_level=None, filter_warnings='error', is_glycam=False): - if verbose: print('\nConverting %s to ffxml...' % files) + +def convert_leaprc( + files, + split_filename=False, + ffxml_dir="./", + ignore=ignore, + provenance=None, + write_unused=False, + override_level=None, + filter_warnings="error", + is_glycam=False, +): + if verbose: + print("\nConverting %s to ffxml..." % files) # allow for multiple source files - further code assuming list is passed if not isinstance(files, list): files = [files] - basename = '' + basename = "" for f in files: f_basename = os.path.basename(f) if split_filename: - f_basename = f_basename.split('.')[1:] - f_basename = '.'.join(f_basename) + f_basename = f_basename.split(".")[1:] + f_basename = ".".join(f_basename) if not basename: basename = f_basename else: - basename += '_' + basename += "_" basename += f_basename - ffxml_name = os.path.join(ffxml_dir, (basename + '.xml')) + ffxml_name = os.path.join(ffxml_dir, (basename + ".xml")) if not os.path.exists(ffxml_dir): os.mkdir(ffxml_dir) - if verbose: print('Preprocessing the leaprc for %s...' % basename) + if verbose: + print("Preprocessing the leaprc for %s..." % basename) # do source processing new_files = [] for fil in files: @@ -191,8 +253,9 @@ def convert_leaprc(files, split_filename=False, ffxml_dir='./', ignore=ignore, for line in lines: if _sourcere.findall(line): replace_leaprc = _sourcere.findall(line)[0] - replace_leaprc_path = os.path.join(os.path.join(AMBERHOME, - 'dat/leap/cmd', replace_leaprc)) + replace_leaprc_path = os.path.join( + os.path.join(AMBERHOME, "dat/leap/cmd", replace_leaprc) + ) new_files.append(replace_leaprc_path) new_files.append(fil) # now do ignore processing and join multiple leaprc's @@ -202,15 +265,21 @@ def convert_leaprc(files, split_filename=False, ffxml_dir='./', ignore=ignore, lines = read_lines(fil) fil_new_lines = [] for line in lines: - if (ignore is not None and _loadoffre.findall(line) and - _loadoffre.findall(line)[0] in ignore): + if ( + ignore is not None + and _loadoffre.findall(line) + and _loadoffre.findall(line)[0] in ignore + ): continue fil_new_lines += line new_lines += fil_new_lines - leaprc = StringIO(''.join(new_lines)) - if verbose: print('Converting to ffxml %s...' % ffxml_name) + leaprc = StringIO("".join(new_lines)) + if verbose: + print("Converting to ffxml %s..." % ffxml_name) params = parmed.amber.AmberParameterSet.from_leaprc(leaprc) - params = parmed.openmm.OpenMMParameterSet.from_parameterset(params, remediate_residues=(not write_unused)) + params = parmed.openmm.OpenMMParameterSet.from_parameterset( + params, remediate_residues=(not write_unused) + ) if override_level: for name, residue in params.residues.items(): residue.override_level = override_level @@ -218,41 +287,87 @@ def convert_leaprc(files, split_filename=False, ffxml_dir='./', ignore=ignore, skip_duplicates = False else: skip_duplicates = True - if filter_warnings != 'error': + if filter_warnings != "error": with warnings.catch_warnings(): warnings.filterwarnings(filter_warnings, category=ParameterWarning) - params.write(ffxml_name, provenance=provenance, write_unused=write_unused, improper_dihedrals_ordering='amber', skip_duplicates=skip_duplicates, is_glycam=is_glycam) + params.write( + ffxml_name, + provenance=provenance, + write_unused=write_unused, + improper_dihedrals_ordering="amber", + skip_duplicates=skip_duplicates, + is_glycam=is_glycam, + ) else: - params.write(ffxml_name, provenance=provenance, write_unused=write_unused, improper_dihedrals_ordering='amber', skip_duplicates=skip_duplicates, is_glycam=is_glycam) - if verbose: print('%s successfully written!' % ffxml_name) + params.write( + ffxml_name, + provenance=provenance, + write_unused=write_unused, + improper_dihedrals_ordering="amber", + skip_duplicates=skip_duplicates, + is_glycam=is_glycam, + ) + if verbose: + print("%s successfully written!" % ffxml_name) return ffxml_name -def convert_gaff(files, ffxml_basename='', split_filename=False, ffxml_dir='./', ignore=ignore, - provenance=None, write_unused=False, filter_warnings='error'): - if verbose: print('\nConverting %s to ffxml...' % files) + +def convert_gaff( + files, + ffxml_basename="", + split_filename=False, + ffxml_dir="../openmmforcefields/ffxml", + ignore=ignore, + provenance=None, + write_unused=False, + filter_warnings="error", +): + if verbose: + print("\nConverting %s to ffxml..." % files) # allow for multiple source files - further code assuming list is passed if not isinstance(files, list): files = [files] # Create ffxml - ffxml_name = os.path.join(ffxml_dir, (ffxml_basename + '.xml')) + ffxml_name = os.path.join(ffxml_dir, (ffxml_basename + ".xml")) if not os.path.exists(ffxml_dir): os.mkdir(ffxml_dir) # Process parameter file params = parmed.amber.AmberParameterSet(files) - params = parmed.openmm.OpenMMParameterSet.from_parameterset(params, remediate_residues=(not write_unused)) - if filter_warnings != 'error': + params = parmed.openmm.OpenMMParameterSet.from_parameterset( + params, remediate_residues=(not write_unused) + ) + if filter_warnings != "error": with warnings.catch_warnings(): warnings.filterwarnings(filter_warnings, category=ParameterWarning) - params.write(ffxml_name, provenance=provenance, write_unused=write_unused, improper_dihedrals_ordering='amber') + params.write( + ffxml_name, + provenance=provenance, + write_unused=write_unused, + improper_dihedrals_ordering="amber", + ) else: - params.write(ffxml_name, provenance=provenance, write_unused=write_unused, improper_dihedrals_ordering='amber') - if verbose: print('%s successfully written!' % ffxml_name) + params.write( + ffxml_name, + provenance=provenance, + write_unused=write_unused, + improper_dihedrals_ordering="amber", + ) + if verbose: + print("%s successfully written!" % ffxml_name) return ffxml_name -def convert_recipe(files, solvent_file=None, ffxml_dir='./', provenance=None, ffxml_basename=None, - filter_warnings='always'): - if verbose: print('\nConverting %s to ffxml...' % files) - ffxml_name = os.path.join(ffxml_dir, (ffxml_basename + '.xml')) + +def convert_recipe( + files, + solvent_file=None, + ffxml_dir="./", + provenance=None, + ffxml_basename=None, + filter_warnings="always", +): + if verbose: + print("\nConverting %s to ffxml..." % files) + ffxml_name = os.path.join(ffxml_dir, (ffxml_basename + ".xml")) ffxml_temp_stringio = StringIO() params = parmed.amber.AmberParameterSet(files) print(params.atom_types.keys()) @@ -261,244 +376,294 @@ def convert_recipe(files, solvent_file=None, ffxml_dir='./', provenance=None, ff # atom_types new_atom_types = OrderedDict() for name, atom_type in params.atom_types.items(): - new_name = ffxml_basename + '-' + name + new_name = ffxml_basename + "-" + name new_atom_types[new_name] = atom_type params.atom_types = new_atom_types # atoms in residues for name, residue in params.residues.items(): for atom in residue: - new_type = ffxml_basename + '-' + atom.type + new_type = ffxml_basename + "-" + atom.type atom.type = new_type if solvent_file is None: - # this means this file does not include a water model - hard-coded assumption it is - # then a 'multivalent' file - set overrideLevel to 1 for all residue templates + # this means this file does not include a water model - hard-coded assumption it is + # then a 'multivalent' file - set overrideLevel to 1 for all residue templates for name, residue in params.residues.items(): residue.override_level = 1 with warnings.catch_warnings(): warnings.filterwarnings(filter_warnings, category=ParameterWarning) - params.write(ffxml_name, provenance=provenance, write_unused=False, improper_dihedrals_ordering='amber') + params.write( + ffxml_name, + provenance=provenance, + write_unused=False, + improper_dihedrals_ordering="amber", + ) else: with warnings.catch_warnings(): warnings.filterwarnings(filter_warnings, category=ParameterWarning) - params.write(ffxml_temp_stringio, provenance=provenance, write_unused=False, improper_dihedrals_ordering='amber') + params.write( + ffxml_temp_stringio, + provenance=provenance, + write_unused=False, + improper_dihedrals_ordering="amber", + ) ffxml_temp_stringio.seek(0) - if verbose: print('Modifying converted ffxml to append solvent parameters') + if verbose: + print("Modifying converted ffxml to append solvent parameters") tree_main = et.parse(ffxml_temp_stringio) tree_water = et.parse(solvent_file) root_main = tree_main.getroot() root_water = tree_water.getroot() - with open(ffxml_name, 'wb') as f: - f.write(b'\n ') - f.write(et.tostring(root_main.findall('Info')[0])) - f.write(b'\n ') - for subelement in root_main.findall('AtomTypes')[0]: + with open(ffxml_name, "wb") as f: + f.write(b"\n ") + f.write(et.tostring(root_main.findall("Info")[0])) + f.write(b"\n ") + for subelement in root_main.findall("AtomTypes")[0]: f.write(et.tostring(subelement)) - f.write(b' ') - for subelement in root_water.findall('AtomTypes')[0]: + f.write(b" ") + for subelement in root_water.findall("AtomTypes")[0]: f.write(et.tostring(subelement)) - f.write(b'\n \n ') - for subelement in root_main.findall('Residues')[0]: + f.write(b"\n \n ") + for subelement in root_main.findall("Residues")[0]: f.write(et.tostring(subelement)) - f.write(b' ') - for subelement in root_water.findall('Residues')[0]: + f.write(b" ") + for subelement in root_water.findall("Residues")[0]: f.write(et.tostring(subelement)) - f.write(b'\n \n ') - for subelement in root_water.findall('HarmonicBondForce')[0]: + f.write(b"\n \n ") + for subelement in root_water.findall("HarmonicBondForce")[0]: f.write(et.tostring(subelement)) - f.write(b'\n \n ') - for subelement in root_water.findall('HarmonicAngleForce')[0]: + f.write(b"\n \n ") + for subelement in root_water.findall("HarmonicAngleForce")[0]: f.write(et.tostring(subelement)) - f.write(b'\n ') - f.write(('\n ' % - (root_main.findall('NonbondedForce')[0].attrib['coulomb14scale'], - root_main.findall('NonbondedForce')[0].attrib['lj14scale']) - ).encode('utf-8')) - for subelement in root_main.findall('NonbondedForce')[0]: + f.write(b"\n ") + f.write( + ( + '\n ' + % ( + root_main.findall("NonbondedForce")[0].attrib["coulomb14scale"], + root_main.findall("NonbondedForce")[0].attrib["lj14scale"], + ) + ).encode("utf-8") + ) + for subelement in root_main.findall("NonbondedForce")[0]: f.write(et.tostring(subelement)) - f.write(b' ') - for subelement in root_water.findall('NonbondedForce')[0]: - if subelement.tag == 'UseAttributeFromResidue': continue + f.write(b" ") + for subelement in root_water.findall("NonbondedForce")[0]: + if subelement.tag == "UseAttributeFromResidue": + continue f.write(et.tostring(subelement)) - f.write(b'\n') - if verbose: print('%s successfully written!' % ffxml_name) + f.write(b"\n") + if verbose: + print("%s successfully written!" % ffxml_name) return ffxml_name + def convert_yaml(yaml_name, ffxml_dir, ignore=ignore): data = yaml.load(open(yaml_name), Loader=yaml.FullLoader) # TODO: Verify that the version that is installed via conda matches sourcePackageVersion # Default yaml reading mode is leaprc - ALLOWED_MODES = ('LEAPRC', 'RECIPE', 'GAFF') + ALLOWED_MODES = ("LEAPRC", "RECIPE", "GAFF") for entry in data: # Handle MODE switching - if 'MODE' in entry: - MODE = entry['MODE'] + if "MODE" in entry: + MODE = entry["MODE"] if not MODE in ALLOWED_MODES: - raise Exception(f'MODE definition must be one of {ALLOWED_MODES}') + raise Exception(f"MODE definition must be one of {ALLOWED_MODES}") continue # Handle definition of source packages - if 'sourcePackage' in entry: - source_pack = entry['sourcePackage'] - source_pack_ver = entry['sourcePackageVersion'] + if "sourcePackage" in entry: + source_pack = entry["sourcePackage"] + source_pack_ver = entry["sourcePackageVersion"] continue - if 'sourcePackage2' in entry: + if "sourcePackage2" in entry: # Switch mode to RECIPE processing - source_pack2 = entry['sourcePackage2'] - source_pack_ver2 = entry['sourcePackageVersion2'] + source_pack2 = entry["sourcePackage2"] + source_pack_ver2 = entry["sourcePackageVersion2"] continue # Extract source files, reference, and test files - source_files = entry['Source'] - reference = entry['Reference'] - test_filename = entry['Test'] + source_files = entry["Source"] + reference = entry["Reference"] + test_filename = entry["Test"] # Make sure source_files is a list if isinstance(source_files, str): source_files = [source_files] # Recipes require extra definitions - if MODE == 'RECIPE': - recipe_name = entry['Name'] - solvent_name = entry['Solvent'] - if 'Solvent_source' in entry: - recipe_source2 = entry['Solvent_source'] + if MODE == "RECIPE": + recipe_name = entry["Name"] + solvent_name = entry["Solvent"] + if "Solvent_source" in entry: + recipe_source2 = entry["Solvent_source"] else: recipe_source2 = None - if 'Standard' in entry: - standard_ffxml = os.path.join(ffxml_dir, (entry['Standard'] + '.xml')) + if "Standard" in entry: + standard_ffxml = os.path.join(ffxml_dir, (entry["Standard"] + ".xml")) else: standard_ffxml = None - elif MODE == 'GAFF': - recipe_name = entry['Name'] + elif MODE == "GAFF": + recipe_name = entry["Name"] # Create provenance object provenance = OrderedDict() files = [] - source = provenance['Source'] = [] + source = provenance["Source"] = [] for source_file in source_files: - if MODE == 'LEAPRC': - if os.path.exists(source_file): - _filename = os.path.join('./', source_file) - else: - _filename = os.path.join(AMBERHOME, 'dat/leap/cmd', source_file) - elif MODE == 'RECIPE': - _filename = os.path.join(AMBERHOME, 'dat/leap/', source_file) - elif MODE == 'GAFF': - _filename = os.path.join('gaff', 'dat', source_file) + if MODE == "LEAPRC": + if os.path.exists(source_file): + _filename = os.path.join("./", source_file) + else: + _filename = os.path.join(AMBERHOME, "dat/leap/cmd", source_file) + elif MODE == "RECIPE": + _filename = os.path.join(AMBERHOME, "dat/leap/", source_file) + elif MODE == "GAFF": + _filename = os.path.join( + resource_filename("openmmforcefields", "ffxml/amber/gaff/dat"), + source_file, + ) files.append(_filename) source.append(OrderedDict()) - source[-1]['Source'] = source_file + source[-1]["Source"] = source_file md5 = hashlib.md5() - with open(_filename, 'rb') as f: + with open(_filename, "rb") as f: md5.update(f.read()) md5 = md5.hexdigest() - source[-1]['md5hash'] = md5 - source[-1]['sourcePackage'] = source_pack - source[-1]['sourcePackageVersion'] = source_pack_ver + source[-1]["md5hash"] = md5 + source[-1]["sourcePackage"] = source_pack + source[-1]["sourcePackageVersion"] = source_pack_ver # For recipes, add water file and source info for it - if MODE == 'RECIPE' and recipe_source2 is not None: - _filename = os.path.join('files', recipe_source2) + if MODE == "RECIPE" and recipe_source2 is not None: + _filename = os.path.join("files", recipe_source2) solvent_file = _filename source.append(OrderedDict()) - source[-1]['Source'] = recipe_source2 + source[-1]["Source"] = recipe_source2 md5 = hashlib.md5() - with open(_filename, 'rb') as f: + with open(_filename, "rb") as f: md5.update(f.read()) md5 = md5.hexdigest() - source[-1]['md5hash'] = md5 - source[-1]['sourcePackage'] = source_pack2 - source[-1]['sourcePackageVersion'] = source_pack_ver2 - elif MODE == 'RECIPE' and recipe_source2 is None: + source[-1]["md5hash"] = md5 + source[-1]["sourcePackage"] = source_pack2 + source[-1]["sourcePackageVersion"] = source_pack_ver2 + elif MODE == "RECIPE" and recipe_source2 is None: solvent_file = None - provenance['Reference'] = reference + provenance["Reference"] = reference # set default conversion options write_unused = False - filter_warnings = 'error' + filter_warnings = "error" override_level = None # set conversion options if present - if 'Options' in entry: - for option in entry['Options']: - if option == 'write_unused': - write_unused = entry['Options'][option] - elif option == 'filter_warnings': - filter_warnings = entry['Options'][option] - elif option == 'ffxml_dir': - ffxml_dir = entry['Options'][option] - elif option == 'override_level': - override_level = entry['Options'][option] + if "Options" in entry: + for option in entry["Options"]: + if option == "write_unused": + write_unused = entry["Options"][option] + elif option == "filter_warnings": + filter_warnings = entry["Options"][option] + elif option == "ffxml_dir": + ffxml_dir = entry["Options"][option] + elif option == "override_level": + override_level = entry["Options"][option] else: - raise Exception("Wrong option used in Options for %s" - % source_files) + raise Exception( + "Wrong option used in Options for %s" % source_files + ) # Convert files - if MODE == 'LEAPRC': + if MODE == "LEAPRC": is_glycam = False for source_file in source_files: - if 'GLYCAM' in source_file: + if "GLYCAM" in source_file: is_glycam = True - ffxml_name = convert_leaprc(files, ffxml_dir=ffxml_dir, ignore=ignore, - provenance=provenance, write_unused=write_unused, override_level=override_level, - filter_warnings=filter_warnings, split_filename=True, is_glycam=is_glycam) - elif MODE == 'RECIPE': - ffxml_name = convert_recipe(files, solvent_file=solvent_file, - ffxml_dir=ffxml_dir, provenance=provenance, - ffxml_basename=recipe_name) - elif MODE == 'GAFF': - ffxml_name = convert_gaff(files, ffxml_basename=recipe_name, ffxml_dir=ffxml_dir, ignore=ignore, - provenance=provenance, write_unused=write_unused, - filter_warnings=filter_warnings, split_filename=True) - - if 'CharmmFFXMLFilename' in entry: - charmm_ffxml_filename = entry['CharmmFFXMLFilename'] - charmm_lipid2amber_filename = entry['CharmmLipid2AmberFilename'] - if verbose: print('Merging lipid entries...') + ffxml_name = convert_leaprc( + files, + ffxml_dir=ffxml_dir, + ignore=ignore, + provenance=provenance, + write_unused=write_unused, + override_level=override_level, + filter_warnings=filter_warnings, + split_filename=True, + is_glycam=is_glycam, + ) + elif MODE == "RECIPE": + ffxml_name = convert_recipe( + files, + solvent_file=solvent_file, + ffxml_dir=ffxml_dir, + provenance=provenance, + ffxml_basename=recipe_name, + ) + elif MODE == "GAFF": + ffxml_name = convert_gaff( + files, + ffxml_basename=recipe_name, + ffxml_dir=ffxml_dir, + ignore=ignore, + provenance=provenance, + write_unused=write_unused, + filter_warnings=filter_warnings, + split_filename=True, + ) + + if "CharmmFFXMLFilename" in entry: + charmm_ffxml_filename = entry["CharmmFFXMLFilename"] + charmm_lipid2amber_filename = entry["CharmmLipid2AmberFilename"] + if verbose: + print("Merging lipid entries...") merge_lipids(ffxml_name, charmm_ffxml_filename, charmm_lipid2amber_filename) - if 'Prefix' in entry: - prefix = entry['Prefix'] - if verbose: print('Rewriting %s to append prefix "%s"...' % (ffxml_name, prefix)) + if "Prefix" in entry: + prefix = entry["Prefix"] + if verbose: + print(f'Rewriting {ffxml_name} to append prefix "{prefix}"...') add_prefix_to_ffxml(ffxml_name, prefix) - if verbose: print('Validating the conversion...') + if verbose: + print("Validating the conversion...") tested = False for test in test_filename: - if test == 'protein': - validate_protein(ffxml_name, entry['Source']) + if test == "protein": + validate_protein(ffxml_name, entry["Source"]) tested = True - elif test == 'nucleic': - validate_dna(ffxml_name, entry['Source']) - validate_rna(ffxml_name, entry['Source']) + elif test == "nucleic": + validate_dna(ffxml_name, entry["Source"]) + validate_rna(ffxml_name, entry["Source"]) tested = True - elif test == 'protein_ua': - validate_protein(ffxml_name, entry['Source'], united_atom=True) + elif test == "protein_ua": + validate_protein(ffxml_name, entry["Source"], united_atom=True) tested = True - elif test == 'protein_phospho': - validate_phospho_protein(ffxml_name, entry['Source']) + elif test == "protein_phospho": + validate_phospho_protein(ffxml_name, entry["Source"]) tested = True - elif test == 'gaff': - validate_gaff(ffxml_name, entry['leaprc'], entry['Source']) + elif test == "gaff": + validate_gaff(ffxml_name, entry["leaprc"], entry["Source"]) tested = True - elif test == 'water_ion': - validate_water_ion(ffxml_name, files, solvent_name, recipe_name, - standard_ffxml=standard_ffxml) + elif test == "water_ion": + validate_water_ion( + ffxml_name, + files, + solvent_name, + recipe_name, + standard_ffxml=standard_ffxml, + ) tested = True - elif test == 'dna': - validate_dna(ffxml_name, entry['Source']) + elif test == "dna": + validate_dna(ffxml_name, entry["Source"]) tested = True - elif test == 'rna': - validate_rna(ffxml_name, entry['Source']) + elif test == "rna": + validate_rna(ffxml_name, entry["Source"]) tested = True - elif test == 'lipids': - #validate_lipids(ffxml_name, source_files) - validate_merged_lipids(ffxml_name, entry['Source']) + elif test == "lipids": + # validate_lipids(ffxml_name, source_files) + validate_merged_lipids(ffxml_name, entry["Source"]) tested = True - elif test == 'protein_glycan': - validate_glyco_protein(ffxml_name, entry['Source']) + elif test == "protein_glycan": + validate_glyco_protein(ffxml_name, entry["Source"]) tested = True if not tested: - raise Exception('No validation tests have been run for %s' % - source_files) + raise Exception("No validation tests have been run for %s" % source_files) + def merge_lipids(ffxml_filename, charmm_ffxml_filename, charmm_lipid2amber_filename): """ @@ -517,26 +682,26 @@ def merge_lipids(ffxml_filename, charmm_ffxml_filename, charmm_lipid2amber_filen # Read the input files. charmmff = etree.parse(charmm_ffxml_filename) amberff = etree.parse(ffxml_filename) - charmmResidues = charmmff.getroot().find('Residues').findall('Residue') - amberResidues = amberff.getroot().find('Residues').findall('Residue') + charmmResidues = charmmff.getroot().find("Residues").findall("Residue") + amberResidues = amberff.getroot().find("Residues").findall("Residue") amberResMap = {} for res in amberResidues: - atoms = dict((atom.attrib['name'], atom) for atom in res.findall('Atom')) - amberResMap[res.attrib['name']] = atoms + atoms = {atom.attrib["name"]: atom for atom in res.findall("Atom")} + amberResMap[res.attrib["name"]] = atoms translations = {} with open(charmm_lipid2amber_filename) as input: # Skip the first two lines. input.readline() input.readline() for line in input: - fields = line.split(',') + fields = line.split(",") mergedRes = fields[0] mergedAtom = fields[2].split()[0] originalAtom, originalRes = fields[3].split() translations[(mergedRes, mergedAtom)] = (originalRes, originalAtom) # Remove all residues from the Amber file. - parentNode = amberff.getroot().find('Residues') + parentNode = amberff.getroot().find("Residues") for res in amberResidues: parentNode.remove(res) @@ -544,19 +709,22 @@ def merge_lipids(ffxml_filename, charmm_ffxml_filename, charmm_lipid2amber_filen def translateResidue(residue): newres = deepcopy(residue) # Translate atom properties - for atom in newres.findall('Atom'): - key = (residue.attrib['name'], atom.attrib['name']) + for atom in newres.findall("Atom"): + key = (residue.attrib["name"], atom.attrib["name"]) if key not in translations: - return None # We don't have a translation. + return None # We don't have a translation. amberResName, amberAtomName = translations[key] - if amberResName not in amberResMap or amberAtomName not in amberResMap[amberResName]: - return None # We don't have a translation. + if ( + amberResName not in amberResMap + or amberAtomName not in amberResMap[amberResName] + ): + return None # We don't have a translation. amberAtom = amberResMap[amberResName][amberAtomName] for attrib in amberAtom.attrib: - if attrib != 'name': + if attrib != "name": atom.attrib[attrib] = amberAtom.attrib[attrib] # Remove Patches from CHARMM residues - for patch in newres.findall('AllowPatch'): + for patch in newres.findall("AllowPatch"): newres.remove(patch) return newres @@ -570,6 +738,7 @@ def translateResidue(residue): # Write merged lipid ffxml file (overwriting original file) amberff.write(ffxml_filename) + def add_prefix_to_ffxml(ffxml_filename, prefix): """ Replace the contents of an ffxml file with a modified version in which every atom type is prefixed with `prefix`. @@ -589,18 +758,18 @@ def add_prefix_to_ffxml(ffxml_filename, prefix): inTypes = False replacements = {} - modified_contents = '' - with open(ffxml_filename, 'r') as infile: + modified_contents = "" + with open(ffxml_filename) as infile: for line in infile: - if '' in line: + if "" in line: inTypes = True - if '' in line: + if "" in line: inTypes = False if inTypes: match = re.search('name="(.*?)"', line) if match is not None: name = match.group(1) - newName = prefix + '-' + name + newName = prefix + "-" + name line = line.replace('name="%s"' % name, 'name="%s"' % newName) replacements['type="%s"' % name] = 'type="%s"' % newName replacements['type1="%s"' % name] = 'type1="%s"' % newName @@ -611,13 +780,14 @@ def add_prefix_to_ffxml(ffxml_filename, prefix): for key in replacements: if key in line: line = line.replace(key, replacements[key]) - if line.endswith('\n'): + if line.endswith("\n"): line = line[:-1] - modified_contents += line + '\n' + modified_contents += line + "\n" - with open(ffxml_filename, 'w') as outfile: + with open(ffxml_filename, "w") as outfile: outfile.write(modified_contents) + def assert_energies_glyco_protein(prmtop, inpcrd, ffxml, tolerance=1e-1): import math @@ -635,16 +805,22 @@ def assert_energies_glyco_protein(prmtop, inpcrd, ffxml, tolerance=1e-1): for residue in chain.residues(): new_name = residue.name if residue.index in [0, 5, 13, 21, 29]: - new_name = 'N' + residue.name + new_name = "N" + residue.name elif residue.index in [4, 9, 17, 25, 33]: - new_name = 'C' + residue.name - new_residue = destination_topology.addResidue(new_name, new_chain, residue.id) + new_name = "C" + residue.name + new_residue = destination_topology.addResidue( + new_name, new_chain, residue.id + ) for atom in residue.atoms(): - new_atom = destination_topology.addAtom(atom.name, atom.element, new_residue, atom.id) + new_atom = destination_topology.addAtom( + atom.name, atom.element, new_residue, atom.id + ) new_atoms[atom] = new_atom for bond in source_topology.bonds(): order = bond.order - destination_topology.addBond(new_atoms[bond[0]], new_atoms[bond[1]], order=order) + destination_topology.addBond( + new_atoms[bond[0]], new_atoms[bond[1]], order=order + ) # Get OpenMM system if isinstance(ffxml, str): @@ -660,16 +836,19 @@ def compute_potential_components(system, positions, beta=beta): for index in range(system.getNumForces()): force = system.getForce(index) force.setForceGroup(index) - integrator = openmm.VerletIntegrator(1.0*u.femtosecond) - platform = openmm.Platform.getPlatformByName('Reference') + integrator = openmm.VerletIntegrator(1.0 * u.femtosecond) + platform = openmm.Platform.getPlatformByName("Reference") context = openmm.Context(system, integrator, platform) context.setPositions(positions) energy_components = list() for index in range(system.getNumForces()): force = system.getForce(index) forcename = force.__class__.__name__ - groups = 1< NEARLYZERO: - rel_energies.append((i[0], abs((i[1]-j[1])/i[1]))) + rel_energies.append((i[0], abs((i[1] - j[1]) / i[1]))) else: if abs(j[1]) > NEARLYZERO: - raise AssertionError('One of AMBER %s energies (%s) for %s is zero, ' - 'while the corresponding OpenMM energy is non-zero' % - (system_name, i[0], ffxml)) + raise AssertionError( + "One of AMBER %s energies (%s) for %s is zero, " + "while the corresponding OpenMM energy is non-zero" + % (system_name, i[0], ffxml) + ) rel_energies.append((i[0], 0)) dihedrals_done = False - for (i, amber_energy, openmm_energy) in zip(rel_energies, amber_energies, omm_energies): - if i[0] != 'PeriodicTorsionForce': + for (i, amber_energy, openmm_energy) in zip( + rel_energies, amber_energies, omm_energies + ): + if i[0] != "PeriodicTorsionForce": if i[1] > tolerance: - raise AssertionError('%s relative energy error (%s, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s' % - (system_name, i[0], i[1], tolerance, ffxml, amber_energy, openmm_energy)) + raise AssertionError( + "%s relative energy error (%s, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s" + % ( + system_name, + i[0], + i[1], + tolerance, + ffxml, + amber_energy, + openmm_energy, + ) + ) else: if not dihedrals_done: if i[1] > tolerance: - raise AssertionError('%s relative energy error (%s, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s' % - (system_name, i[0], i[1], tolerance, ffxml, amber_energy, openmm_energy)) + raise AssertionError( + "%s relative energy error (%s, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s" + % ( + system_name, + i[0], + i[1], + tolerance, + ffxml, + amber_energy, + openmm_energy, + ) + ) dihedrals_done = True - else: #impropers + else: # impropers if i[1] > improper_tolerance: - raise AssertionError('%s relative energy error (%s-impropers, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s' % - (system_name, i[0], i[1], improper_tolerance, ffxml, amber_energy, openmm_energy)) + raise AssertionError( + "%s relative energy error (%s-impropers, %f) outside of allowed tolerance (%f) for %s: AMBER %s OpenMM %s" + % ( + system_name, + i[0], + i[1], + improper_tolerance, + ffxml, + amber_energy, + openmm_energy, + ) + ) # logging if not no_log: amber_energies_log = dict() omm_energies_log = dict() rel_energies_log = dict() - amber_energies_log['ffxml_name'] = ffxml - amber_energies_log['test_system'] = system_name - amber_energies_log['data_type'] = 'AMBER' - amber_energies_log['units'] = units - omm_energies_log['ffxml_name'] = ffxml - omm_energies_log['test_system'] = system_name - omm_energies_log['data_type'] = 'OpenMM' - omm_energies_log['units'] = units - rel_energies_log['ffxml_name'] = ffxml - rel_energies_log['test_system'] = system_name - rel_energies_log['data_type'] = 'abs((AMBER-OpenMM)/AMBER)' + amber_energies_log["ffxml_name"] = ffxml + amber_energies_log["test_system"] = system_name + amber_energies_log["data_type"] = "AMBER" + amber_energies_log["units"] = units + omm_energies_log["ffxml_name"] = ffxml + omm_energies_log["test_system"] = system_name + omm_energies_log["data_type"] = "OpenMM" + omm_energies_log["units"] = units + rel_energies_log["ffxml_name"] = ffxml + rel_energies_log["test_system"] = system_name + rel_energies_log["data_type"] = "abs((AMBER-OpenMM)/AMBER)" dihedrals_done = False for item in amber_energies: - if item[0] == 'PeriodicTorsionForce' and not dihedrals_done: - amber_energies_log['PeriodicTorsionForce_dihedrals'] = item[1] + if item[0] == "PeriodicTorsionForce" and not dihedrals_done: + amber_energies_log["PeriodicTorsionForce_dihedrals"] = item[1] dihedrals_done = True - elif item[0] == 'PeriodicTorsionForce' and dihedrals_done: - amber_energies_log['PeriodicTorsionForce_impropers'] = item[1] - elif item[0] == 'CMMotionRemover': + elif item[0] == "PeriodicTorsionForce" and dihedrals_done: + amber_energies_log["PeriodicTorsionForce_impropers"] = item[1] + elif item[0] == "CMMotionRemover": continue else: amber_energies_log[item[0]] = item[1] dihedrals_done = False for item in omm_energies: - if item[0] == 'PeriodicTorsionForce' and not dihedrals_done: - omm_energies_log['PeriodicTorsionForce_dihedrals'] = item[1] + if item[0] == "PeriodicTorsionForce" and not dihedrals_done: + omm_energies_log["PeriodicTorsionForce_dihedrals"] = item[1] dihedrals_done = True - elif item[0] == 'PeriodicTorsionForce' and dihedrals_done: - omm_energies_log['PeriodicTorsionForce_impropers'] = item[1] - elif item[0] == 'CMMotionRemover': + elif item[0] == "PeriodicTorsionForce" and dihedrals_done: + omm_energies_log["PeriodicTorsionForce_impropers"] = item[1] + elif item[0] == "CMMotionRemover": continue else: omm_energies_log[item[0]] = item[1] dihedrals_done = False for item in rel_energies: - if item[0] == 'PeriodicTorsionForce' and not dihedrals_done: - rel_energies_log['PeriodicTorsionForce_dihedrals'] = item[1] + if item[0] == "PeriodicTorsionForce" and not dihedrals_done: + rel_energies_log["PeriodicTorsionForce_dihedrals"] = item[1] dihedrals_done = True - elif item[0] == 'PeriodicTorsionForce' and dihedrals_done: - rel_energies_log['PeriodicTorsionForce_impropers'] = item[1] - elif item[0] == 'CMMotionRemover': + elif item[0] == "PeriodicTorsionForce" and dihedrals_done: + rel_energies_log["PeriodicTorsionForce_impropers"] = item[1] + elif item[0] == "CMMotionRemover": continue else: rel_energies_log[item[0]] = item[1] @@ -796,9 +1023,12 @@ def assert_energies(prmtop, inpcrd, ffxml, system_name='unknown', tolerance=2.5e logger.log(omm_energies_log) logger.log(rel_energies_log) + def validate_protein(ffxml_name, leaprc_name, united_atom=False): - if verbose: print('Protein energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("Protein energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") ala3_top = tempfile.mkstemp() ala3_crd = tempfile.mkstemp() villin_top = tempfile.mkstemp() @@ -806,326 +1036,418 @@ def validate_protein(ffxml_name, leaprc_name, united_atom=False): leap_script_ala3_file = tempfile.mkstemp() leap_script_villin_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') + if verbose: + print("Preparing LeaP scripts...") if not united_atom: - leap_script_ala3_string = """source %s + leap_script_ala3_string = """source {} x = loadPdb files/ala3.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, ala3_top[1], ala3_crd[1]) - leap_script_villin_string = """source %s +saveAmberParm x {} {} +quit""".format( + leaprc_name, ala3_top[1], ala3_crd[1] + ) + leap_script_villin_string = """source {} x = loadPdb files/villin.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, villin_top[1], villin_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, villin_top[1], villin_crd[1] + ) else: - leap_script_ala3_string = """source %s + leap_script_ala3_string = """source {} x = loadPdb files/ala3_ua.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, ala3_top[1], ala3_crd[1]) - leap_script_villin_string = """source %s +saveAmberParm x {} {} +quit""".format( + leaprc_name, ala3_top[1], ala3_crd[1] + ) + leap_script_villin_string = """source {} x = loadPdb files/villin_ua.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, villin_top[1], villin_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, villin_top[1], villin_crd[1] + ) write_file(leap_script_ala3_file[0], leap_script_ala3_string) write_file(leap_script_villin_file[0], leap_script_villin_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_ala3_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_ala3_file[1]} > {os.devnull}") if os.path.getsize(ala3_top[1]) == 0 or os.path.getsize(ala3_crd[1]) == 0: raise LeapException(leap_script_ala3_file[1]) - os.system('tleap -f %s > %s' % (leap_script_villin_file[1], os.devnull)) + os.system(f"tleap -f {leap_script_villin_file[1]} > {os.devnull}") if os.path.getsize(villin_top[1]) == 0 or os.path.getsize(villin_crd[1]) == 0: raise LeapException(leap_script_villin_file[1]) try: - if verbose: print('Calculating and validating ala_ala_ala energies...') - assert_energies(ala3_top[1], ala3_crd[1], ffxml_name, - system_name='protein-ala_ala_ala') - if verbose: print('Ala_ala_ala energy validation successful!') - - if verbose: print('Calculating and validating villin headpiece energies...') - assert_energies(villin_top[1], villin_crd[1], ffxml_name, - system_name='protein-villin headpiece') - if verbose: print('Villin headpiece energy validation successful!') + if verbose: + print("Calculating and validating ala_ala_ala energies...") + assert_energies( + ala3_top[1], ala3_crd[1], ffxml_name, system_name="protein-ala_ala_ala" + ) + if verbose: + print("Ala_ala_ala energy validation successful!") + + if verbose: + print("Calculating and validating villin headpiece energies...") + assert_energies( + villin_top[1], + villin_crd[1], + ffxml_name, + system_name="protein-villin headpiece", + ) + if verbose: + print("Villin headpiece energy validation successful!") finally: - if verbose: print('Deleting temp files...') - for f in (ala3_top, ala3_crd, villin_top, villin_crd, leap_script_ala3_file, - leap_script_villin_file): + if verbose: + print("Deleting temp files...") + for f in ( + ala3_top, + ala3_crd, + villin_top, + villin_crd, + leap_script_ala3_file, + leap_script_villin_file, + ): os.unlink(f[1]) - if verbose: print('Protein energy validation for %s done!' % ffxml_name) + if verbose: + print("Protein energy validation for %s done!" % ffxml_name) + def validate_dna(ffxml_name, leaprc_name): - if verbose: print('DNA energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("DNA energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") dna_top = tempfile.mkstemp() dna_crd = tempfile.mkstemp() leap_script_dna_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') - leap_script_dna_string = """addPdbAtomMap { -{ "H1'" "H1*" } -{ "H2'" "H2'1" } -{ "H2''" "H2'2" } -{ "H3'" "H3*" } -{ "H4'" "H4*" } -{ "H5'" "H5'1" } -{ "H5''" "H5'2" } -{ "HO2'" "HO'2" } -{ "HO5'" "H5T" } -{ "HO3'" "H3T" } -{ "OP1" "O1P" } -{ "OP2" "O2P" } -} -source %s -addPdbResMap { -{ 0 "DG" "DG5" } { 1 "DG" "DG3" } -{ 0 "DA" "DA5" } { 1 "DA" "DA3" } -{ 0 "DC" "DC5" } { 1 "DC" "DC3" } -{ 0 "DT" "DT5" } { 1 "DT" "DT3" } -} + if verbose: + print("Preparing LeaP scripts...") + leap_script_dna_string = """addPdbAtomMap {{ +{{ "H1'" "H1*" }} +{{ "H2'" "H2'1" }} +{{ "H2''" "H2'2" }} +{{ "H3'" "H3*" }} +{{ "H4'" "H4*" }} +{{ "H5'" "H5'1" }} +{{ "H5''" "H5'2" }} +{{ "HO2'" "HO'2" }} +{{ "HO5'" "H5T" }} +{{ "HO3'" "H3T" }} +{{ "OP1" "O1P" }} +{{ "OP2" "O2P" }} +}} +source {} +addPdbResMap {{ +{{ 0 "DG" "DG5" }} {{ 1 "DG" "DG3" }} +{{ 0 "DA" "DA5" }} {{ 1 "DA" "DA3" }} +{{ 0 "DC" "DC5" }} {{ 1 "DC" "DC3" }} +{{ 0 "DT" "DT5" }} {{ 1 "DT" "DT3" }} +}} x = loadPdb files/4rzn_dna.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, dna_top[1], dna_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, dna_top[1], dna_crd[1] + ) write_file(leap_script_dna_file[0], leap_script_dna_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_dna_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_dna_file[1]} > {os.devnull}") if os.path.getsize(dna_top[1]) == 0 or os.path.getsize(dna_crd[1]) == 0: raise LeapException(leap_script_dna_file[1]) try: - if verbose: print('Calculating and validating DNA energies...') - assert_energies(dna_top[1], dna_crd[1], ffxml_name, - system_name='nucleic-DNA') - if verbose: print('DNA energy validation successful!') + if verbose: + print("Calculating and validating DNA energies...") + assert_energies(dna_top[1], dna_crd[1], ffxml_name, system_name="nucleic-DNA") + if verbose: + print("DNA energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (dna_top, dna_crd, leap_script_dna_file): os.unlink(f[1]) - if verbose: print('DNA energy validation for %s done!' % ffxml_name) + if verbose: + print("DNA energy validation for %s done!" % ffxml_name) + def validate_rna(ffxml_name, leaprc_name): - if verbose: print('RNA energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("RNA energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") rna_top = tempfile.mkstemp() rna_crd = tempfile.mkstemp() leap_script_rna_file = tempfile.mkstemp() leap_script_rna_file_alt = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') + if verbose: + print("Preparing LeaP scripts...") leap_script_rna_string = """ -addPdbAtomMap { -{ "H1'" "H1*" } -{ "H2'" "H2'1" } -{ "H2''" "H2'2" } -{ "H3'" "H3*" } -{ "H4'" "H4*" } -{ "H5'" "H5'1" } -{ "H5''" "H5'2" } -{ "HO2'" "HO'2" } -{ "HO5'" "H5T" } -{ "HO3'" "H3T" } -{ "OP1" "O1P" } -{ "OP2" "O2P" } -} -source %s -addPdbResMap { -{ 0 "G" "G5" } { 1 "G" "G3" } { "G" "G" } -{ 0 "A" "A5" } { 1 "A" "A3" } { "A" "A" } -{ 0 "C" "C5" } { 1 "C" "C3" } { "C" "C" } -{ 0 "U" "U5" } { 1 "U" "U3" } { "U" "U" } -} +addPdbAtomMap {{ +{{ "H1'" "H1*" }} +{{ "H2'" "H2'1" }} +{{ "H2''" "H2'2" }} +{{ "H3'" "H3*" }} +{{ "H4'" "H4*" }} +{{ "H5'" "H5'1" }} +{{ "H5''" "H5'2" }} +{{ "HO2'" "HO'2" }} +{{ "HO5'" "H5T" }} +{{ "HO3'" "H3T" }} +{{ "OP1" "O1P" }} +{{ "OP2" "O2P" }} +}} +source {} +addPdbResMap {{ +{{ 0 "G" "G5" }} {{ 1 "G" "G3" }} {{ "G" "G" }} +{{ 0 "A" "A5" }} {{ 1 "A" "A3" }} {{ "A" "A" }} +{{ 0 "C" "C5" }} {{ 1 "C" "C3" }} {{ "C" "C" }} +{{ 0 "U" "U5" }} {{ 1 "U" "U3" }} {{ "U" "U" }} +}} x = loadPdb files/5c5w_rna.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, rna_top[1], rna_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, rna_top[1], rna_crd[1] + ) leap_script_rna_string_alt = """ -addPdbAtomMap { -{ "H1'" "H1*" } -{ "H2'" "H2'1" } -{ "H2''" "H2'2" } -{ "H3'" "H3*" } -{ "H4'" "H4*" } -{ "H5'" "H5'1" } -{ "H5''" "H5'2" } -{ "HO2'" "HO'2" } -{ "HO5'" "H5T" } -{ "HO3'" "H3T" } -{ "OP1" "O1P" } -{ "OP2" "O2P" } -} -source %s -addPdbResMap { -{ 0 "G" "RG5" } { 1 "G" "RG3" } { "G" "RG" } -{ 0 "A" "RA5" } { 1 "A" "RA3" } { "A" "RA" } -{ 0 "C" "RC5" } { 1 "C" "RC3" } { "C" "RC" } -{ 0 "U" "RU5" } { 1 "U" "RU3" } { "U" "RU" } -} +addPdbAtomMap {{ +{{ "H1'" "H1*" }} +{{ "H2'" "H2'1" }} +{{ "H2''" "H2'2" }} +{{ "H3'" "H3*" }} +{{ "H4'" "H4*" }} +{{ "H5'" "H5'1" }} +{{ "H5''" "H5'2" }} +{{ "HO2'" "HO'2" }} +{{ "HO5'" "H5T" }} +{{ "HO3'" "H3T" }} +{{ "OP1" "O1P" }} +{{ "OP2" "O2P" }} +}} +source {} +addPdbResMap {{ +{{ 0 "G" "RG5" }} {{ 1 "G" "RG3" }} {{ "G" "RG" }} +{{ 0 "A" "RA5" }} {{ 1 "A" "RA3" }} {{ "A" "RA" }} +{{ 0 "C" "RC5" }} {{ 1 "C" "RC3" }} {{ "C" "RC" }} +{{ 0 "U" "RU5" }} {{ 1 "U" "RU3" }} {{ "U" "RU" }} +}} x = loadPdb files/5c5w_rna.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, rna_top[1], rna_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, rna_top[1], rna_crd[1] + ) write_file(leap_script_rna_file[0], leap_script_rna_string) write_file(leap_script_rna_file_alt[0], leap_script_rna_string_alt) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_rna_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_rna_file[1]} > {os.devnull}") if os.path.getsize(rna_top[1]) == 0 or os.path.getsize(rna_crd[1]) == 0: # try alternative name mappings - os.system('tleap -f %s > %s' % (leap_script_rna_file_alt[1], os.devnull)) + os.system(f"tleap -f {leap_script_rna_file_alt[1]} > {os.devnull}") if os.path.getsize(rna_top[1]) == 0 or os.path.getsize(rna_crd[1]) == 0: raise LeapException(leap_script_rna_file_alt[1]) try: - if verbose: print('Calculating and validating RNA energies...') + if verbose: + print("Calculating and validating RNA energies...") # improper testing turned off pending solution to problems - assert_energies(rna_top[1], rna_crd[1], ffxml_name, - system_name='nucleic-RNA') - if verbose: print('RNA energy validation successful!') + assert_energies(rna_top[1], rna_crd[1], ffxml_name, system_name="nucleic-RNA") + if verbose: + print("RNA energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (rna_top, rna_crd, leap_script_rna_file, leap_script_rna_file_alt): os.unlink(f[1]) - if verbose: print('RNA energy validation for %s done!' % ffxml_name) + if verbose: + print("RNA energy validation for %s done!" % ffxml_name) + def validate_gaff(ffxml_name, leaprc_name, gaff_dat_name): - if verbose: print('GAFF energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("GAFF energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") imatinib_top = tempfile.mkstemp() imatinib_crd = tempfile.mkstemp() leap_script_imatinib_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') + if verbose: + print("Preparing LeaP scripts...") leap_script_imatinib_string = """\ -source %s -loadamberparams gaff/dat/%s +source {} +loadamberparams ../openmmforcefields/ffxml/amber/gaff/dat/{} loadamberparams files/frcmod.imatinib x = loadMol2 files/imatinib.mol2 -saveAmberParm x %s %s -quit""" % (leaprc_name, gaff_dat_name, imatinib_top[1], imatinib_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, gaff_dat_name, imatinib_top[1], imatinib_crd[1] + ) write_file(leap_script_imatinib_file[0], leap_script_imatinib_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_imatinib_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_imatinib_file[1]} > {os.devnull}") if os.path.getsize(imatinib_top[1]) == 0 or os.path.getsize(imatinib_crd[1]) == 0: raise LeapException(leap_script_imatinib_file[1]) try: - if verbose: print('Calculating and validating imatinib energies...') - assert_energies(imatinib_top[1], imatinib_crd[1], (ffxml_name, - 'files/imatinib.xml', 'files/imatinib_frcmod.xml'), - system_name='gaff-imatinib') - if verbose: print('Imatinib energy validation successful!') + if verbose: + print("Calculating and validating imatinib energies...") + assert_energies( + imatinib_top[1], + imatinib_crd[1], + (ffxml_name, "files/imatinib.xml", "files/imatinib_frcmod.xml"), + system_name="gaff-imatinib", + ) + if verbose: + print("Imatinib energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (imatinib_top, imatinib_crd, leap_script_imatinib_file): os.unlink(f[1]) - if verbose: print('GAFF energy validation for %s done!' % ffxml_name) - -def validate_phospho_protein(ffxml_name, leaprc_name, - supp_leaprc_name = 'oldff/leaprc.ff99SBildn', - supp_ffxml_name='ffxml/ff99SBildn.xml', - phospho="phospho10"): - if '14' in leaprc_name: + if verbose: + print("GAFF energy validation for %s done!" % ffxml_name) + + +def validate_phospho_protein( + ffxml_name, + leaprc_name, + supp_leaprc_name="oldff/leaprc.ff99SBildn", + supp_ffxml_name="ffxml/ff99SBildn.xml", + phospho="phospho10", +): + if "14" in leaprc_name: # Use AMBER14SB - supp_leaprc_name = 'oldff/leaprc.ff14SB' - supp_ffxml_name='ffxml/ff14SB.xml' - phospho = 'phospho14' + supp_leaprc_name = "oldff/leaprc.ff14SB" + supp_ffxml_name = "ffxml/ff14SB.xml" + phospho = "phospho14" # this function assumes ffxml/ff14SB.xml already exists - if verbose: print('Phosphorylated protein energy validation for %s' % - ffxml_name) - for pdbname in glob.iglob(f'files/{phospho}/*.pdb'): - if verbose: print('Now testing with pdb %s' % os.path.basename(pdbname)) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("Phosphorylated protein energy validation for %s" % ffxml_name) + for pdbname in glob.iglob(f"files/{phospho}/*.pdb"): + if verbose: + print("Now testing with pdb %s" % os.path.basename(pdbname)) + if verbose: + print("Preparing temporary files for validation...") top = tempfile.mkstemp() crd = tempfile.mkstemp() leap_script_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') - leap_script_string = """source %s -source %s -x = loadPdb %s -saveAmberParm x %s %s -quit""" % (supp_leaprc_name, leaprc_name, pdbname, top[1], crd[1]) + if verbose: + print("Preparing LeaP scripts...") + leap_script_string = """source {} +source {} +x = loadPdb {} +saveAmberParm x {} {} +quit""".format( + supp_leaprc_name, leaprc_name, pdbname, top[1], crd[1] + ) write_file(leap_script_file[0], leap_script_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_file[1]} > {os.devnull}") if os.path.getsize(top[1]) == 0 or os.path.getsize(crd[1]) == 0: raise LeapException(leap_script_file[1]) try: - if verbose: print('Calculating and validating energies...') - assert_energies(top[1], crd[1], (supp_ffxml_name, ffxml_name), - system_name='phospho_protein: %s' - % os.path.basename(pdbname)) - if verbose: print('Energy validation successful!') + if verbose: + print("Calculating and validating energies...") + assert_energies( + top[1], + crd[1], + (supp_ffxml_name, ffxml_name), + system_name="phospho_protein: %s" % os.path.basename(pdbname), + ) + if verbose: + print("Energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (top, crd, leap_script_file): os.unlink(f[1]) - if verbose: print('Phosphorylated protein energy validation for %s done!' - % ffxml_name) - -def validate_water_ion(ffxml_name, source_recipe_files, solvent_name, recipe_name, - standard_ffxml=None): - if verbose: print('Water and ions energy validation for %s' % - ffxml_name) - if solvent_name == 'tip3p': - HOH = 'TP3' + if verbose: + print("Phosphorylated protein energy validation for %s done!" % ffxml_name) + + +def validate_water_ion( + ffxml_name, source_recipe_files, solvent_name, recipe_name, standard_ffxml=None +): + if verbose: + print("Water and ions energy validation for %s" % ffxml_name) + if solvent_name == "tip3p": + HOH = "TP3" solvent_frcmod = None - elif solvent_name == 'tip4pew': - HOH = 'T4E' - solvent_frcmod = 'frcmod.tip4pew' - elif solvent_name == 'spce': - HOH = 'SPC' - solvent_frcmod = 'frcmod.spce' - elif solvent_name == 'tip3pfb': - HOH = 'FB3' - solvent_frcmod = 'frcmod.tip3pfb' - elif solvent_name == 'tip4pfb': - HOH = 'FB4' - solvent_frcmod = 'frcmod.tip4pfb' - pdb_name = 'files/water_ion/' + recipe_name + '.pdb' - if verbose: print('Preparing temporary files for validation...') + elif solvent_name == "tip4pew": + HOH = "T4E" + solvent_frcmod = "frcmod.tip4pew" + elif solvent_name == "spce": + HOH = "SPC" + solvent_frcmod = "frcmod.spce" + elif solvent_name == "tip3pfb": + HOH = "FB3" + solvent_frcmod = "frcmod.tip3pfb" + elif solvent_name == "tip4pfb": + HOH = "FB4" + solvent_frcmod = "frcmod.tip4pfb" + pdb_name = "files/water_ion/" + recipe_name + ".pdb" + if verbose: + print("Preparing temporary files for validation...") top = tempfile.mkstemp() crd = tempfile.mkstemp() leap_script_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') + if verbose: + print("Preparing LeaP scripts...") leap_script_string_part1 = """loadamberparams parm10.dat -loadamberparams %s -loadamberparams %s\n""" % (source_recipe_files[0], source_recipe_files[1]) +loadamberparams {} +loadamberparams {}\n""".format( + source_recipe_files[0], source_recipe_files[1] + ) leap_script_string_part2 = """\nloadOff atomic_ions.lib loadoff solvents.lib -HOH = %s +HOH = {} # for TIP4PEW -addPdbAtomMap {{ "M" "EPW" }} -x = loadPdb %s -saveAmberParm x %s %s -quit""" % (HOH, pdb_name, top[1], crd[1]) +addPdbAtomMap {{{{ "M" "EPW" }}}} +x = loadPdb {} +saveAmberParm x {} {} +quit""".format( + HOH, pdb_name, top[1], crd[1] + ) if solvent_frcmod: - leap_script_string = (leap_script_string_part1 + ('loadamberparams %s' - % solvent_frcmod) + leap_script_string_part2) + leap_script_string = ( + leap_script_string_part1 + + ("loadamberparams %s" % solvent_frcmod) + + leap_script_string_part2 + ) else: leap_script_string = leap_script_string_part1 + leap_script_string_part2 write_file(leap_script_file[0], leap_script_string) # this test does it's own energy assertion because of differences - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_file[1]} > {os.devnull}") if os.path.getsize(top[1]) == 0 or os.path.getsize(crd[1]) == 0: raise LeapException(leap_script_file[1]) try: - if verbose: print('Calculating and validating energies...') - pdb = app.PDBFile(pdb_name, extraParticleIdentifier='') + if verbose: + print("Calculating and validating energies...") + pdb = app.PDBFile(pdb_name, extraParticleIdentifier="") if standard_ffxml is None: ff = app.ForceField(ffxml_name) else: @@ -1134,26 +1456,32 @@ def validate_water_ion(ffxml_name, source_recipe_files, solvent_name, recipe_nam parm_omm = parmed.openmm.load_topology(pdb.topology, xyz=pdb.positions) parm_amber = parmed.load_file(top[1], crd[1]) system_amber = parm_amber.createSystem() - omm_energies = parmed.openmm.energy_decomposition_system(parm_omm, - system_omm, nrg=u.kilojoules_per_mole) + omm_energies = parmed.openmm.energy_decomposition_system( + parm_omm, system_omm, nrg=u.kilojoules_per_mole + ) for entry in omm_energies: - if entry[0] == 'NonbondedForce': + if entry[0] == "NonbondedForce": omm_nonbonded = entry[1] - amber_energies = parmed.openmm.energy_decomposition_system(parm_amber, - system_amber, nrg=u.kilojoules_per_mole) + amber_energies = parmed.openmm.energy_decomposition_system( + parm_amber, system_amber, nrg=u.kilojoules_per_mole + ) for entry in amber_energies: - if entry[0] == 'NonbondedForce': + if entry[0] == "NonbondedForce": amber_nonbonded = entry[1] - rel_nonbonded = abs((amber_nonbonded-omm_nonbonded) / amber_nonbonded) + rel_nonbonded = abs((amber_nonbonded - omm_nonbonded) / amber_nonbonded) if rel_nonbonded > 1e-5: - raise AssertionError('NonbondedForce Water and ions energy (%f) outside of ' - 'allowed tolerance (%f) for %s:' % (rel_nonbonded, 1e-5, ffxml_name)) - if verbose: print('Energy validation successful!') + raise AssertionError( + "NonbondedForce Water and ions energy (%f) outside of " + "allowed tolerance (%f) for %s:" % (rel_nonbonded, 1e-5, ffxml_name) + ) + if verbose: + print("Energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (top, crd, leap_script_file): os.unlink(f[1]) # logging @@ -1161,29 +1489,32 @@ def validate_water_ion(ffxml_name, source_recipe_files, solvent_name, recipe_nam amber_energies_log = dict() omm_energies_log = dict() rel_energies_log = dict() - amber_energies_log['ffxml_name'] = ffxml_name - amber_energies_log['test_system'] = 'water_ion' - amber_energies_log['data_type'] = 'AMBER' - amber_energies_log['NonbondedForce'] = amber_nonbonded - amber_energies_log['units'] = u.kilojoules_per_mole - omm_energies_log['ffxml_name'] = ffxml_name - omm_energies_log['test_system'] = 'water_ion' - omm_energies_log['data_type'] = 'OpenMM' - omm_energies_log['NonbondedForce'] = omm_nonbonded - omm_energies_log['units'] = u.kilojoules_per_mole - rel_energies_log['ffxml_name'] = ffxml_name - rel_energies_log['test_system'] = 'water_ion' - rel_energies_log['data_type'] = 'abs((AMBER-OpenMM)/AMBER)' - rel_energies_log['NonbondedForce'] = rel_nonbonded + amber_energies_log["ffxml_name"] = ffxml_name + amber_energies_log["test_system"] = "water_ion" + amber_energies_log["data_type"] = "AMBER" + amber_energies_log["NonbondedForce"] = amber_nonbonded + amber_energies_log["units"] = u.kilojoules_per_mole + omm_energies_log["ffxml_name"] = ffxml_name + omm_energies_log["test_system"] = "water_ion" + omm_energies_log["data_type"] = "OpenMM" + omm_energies_log["NonbondedForce"] = omm_nonbonded + omm_energies_log["units"] = u.kilojoules_per_mole + rel_energies_log["ffxml_name"] = ffxml_name + rel_energies_log["test_system"] = "water_ion" + rel_energies_log["data_type"] = "abs((AMBER-OpenMM)/AMBER)" + rel_energies_log["NonbondedForce"] = rel_nonbonded logger.log(amber_energies_log) logger.log(omm_energies_log) logger.log(rel_energies_log) - if verbose: print('Water and ions energy validation for %s done!' - % ffxml_name) + if verbose: + print("Water and ions energy validation for %s done!" % ffxml_name) + def validate_impropers(ffxml_name, leaprc_name): - if verbose: print('Impropers validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("Impropers validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") top_villin = tempfile.mkstemp() crd_villin = tempfile.mkstemp() top_dna = tempfile.mkstemp() @@ -1192,20 +1523,29 @@ def validate_impropers(ffxml_name, leaprc_name): crd_rna = tempfile.mkstemp() leap_script_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') - leap_script_string = """source %s + if verbose: + print("Preparing LeaP scripts...") + leap_script_string = """source {} x = loadPdb files/villin.pdb y = loadPdb files/4rzn_dna.pdb z = loadPdb files/5c5w_rna.pdb -saveAmberParm x %s %s -saveAmberParm y %s %s -saveAmberParm z %s %s -quit""" % (leaprc_name, top_villin[1], crd_villin[1], top_dna[1], crd_dna[1], - top_rna[1], crd_rna[1]) +saveAmberParm x {} {} +saveAmberParm y {} {} +saveAmberParm z {} {} +quit""".format( + leaprc_name, + top_villin[1], + crd_villin[1], + top_dna[1], + crd_dna[1], + top_rna[1], + crd_rna[1], + ) write_file(leap_script_file[0], leap_script_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_file[1]} > {os.devnull}") if os.path.getsize(top_villin[1]) == 0 or os.path.getsize(crd_villin[1]) == 0: raise LeapException(leap_script_file[1]) if os.path.getsize(top_dna[1]) == 0 or os.path.getsize(crd_dna[1]) == 0: @@ -1223,117 +1563,178 @@ def validate_impropers(ffxml_name, leaprc_name): sys_omm_villin = ff.createSystem(parm_amber_villin.topology) sys_omm_dna = ff.createSystem(parm_amber_dna.topology) sys_omm_rna = ff.createSystem(parm_amber_rna.topology) - parm_omm_villin = parmed.openmm.load_topology(parm_amber_villin.topology, - sys_omm_villin) - parm_omm_dna = parmed.openmm.load_topology(parm_amber_dna.topology, - sys_omm_dna) - parm_omm_rna = parmed.openmm.load_topology(parm_amber_rna.topology, - sys_omm_rna) + parm_omm_villin = parmed.openmm.load_topology( + parm_amber_villin.topology, sys_omm_villin + ) + parm_omm_dna = parmed.openmm.load_topology(parm_amber_dna.topology, sys_omm_dna) + parm_omm_rna = parmed.openmm.load_topology(parm_amber_rna.topology, sys_omm_rna) # prepare sets of idxs - set_amber_villin = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_amber_villin.dihedrals if dih.improper]) - set_amber_dna = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_amber_dna.dihedrals if dih.improper]) - set_amber_rna = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_amber_rna.dihedrals if dih.improper]) - set_omm_villin = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_omm_villin.dihedrals if dih.improper]) - set_omm_dna = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_omm_dna.dihedrals if dih.improper]) - set_omm_rna = set([(dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, - dih.atom4.idx) for dih in parm_omm_rna.dihedrals if dih.improper]) + set_amber_villin = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_amber_villin.dihedrals + if dih.improper + } + set_amber_dna = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_amber_dna.dihedrals + if dih.improper + } + set_amber_rna = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_amber_rna.dihedrals + if dih.improper + } + set_omm_villin = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_omm_villin.dihedrals + if dih.improper + } + set_omm_dna = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_omm_dna.dihedrals + if dih.improper + } + set_omm_rna = { + (dih.atom1.idx, dih.atom2.idx, dih.atom3.idx, dih.atom4.idx) + for dih in parm_omm_rna.dihedrals + if dih.improper + } try: - if (set_amber_villin - set_omm_villin != set() or - set_omm_villin - set_amber_villin != set()): - raise AssertionError("""Impropers validation fail for %s (villin) - set_amber - set_omm: %s - set_omm - set_amber: %s""" % (ffxml_name, - set_amber_villin-set_omm_villin, - set_omm_villin-set_amber_villin)) - if (set_amber_dna - set_omm_dna != set() or - set_omm_dna - set_amber_dna != set()): - raise AssertionError("""Impropers validation fail for %s (DNA) - set_amber - set_omm: %s - set_omm - set_amber: %s""" % (ffxml_name, - set_amber_dna-set_omm_dna, - set_omm_dna-set_amber_dna)) - if (set_amber_rna - set_omm_rna != set() or - set_omm_rna - set_amber_rna != set()): - raise AssertionError("""Impropers validation fail for %s (RNA) - set_amber - set_omm: %s - set_omm - set_amber: %s""" % (ffxml_name, - set_amber_rna-set_omm_rna, - set_omm_rna-set_amber_rna)) + if ( + set_amber_villin - set_omm_villin != set() + or set_omm_villin - set_amber_villin != set() + ): + raise AssertionError( + """Impropers validation fail for {} (villin) + set_amber - set_omm: {} + set_omm - set_amber: {}""".format( + ffxml_name, + set_amber_villin - set_omm_villin, + set_omm_villin - set_amber_villin, + ) + ) + if set_amber_dna - set_omm_dna != set() or set_omm_dna - set_amber_dna != set(): + raise AssertionError( + """Impropers validation fail for {} (DNA) + set_amber - set_omm: {} + set_omm - set_amber: {}""".format( + ffxml_name, set_amber_dna - set_omm_dna, set_omm_dna - set_amber_dna + ) + ) + if set_amber_rna - set_omm_rna != set() or set_omm_rna - set_amber_rna != set(): + raise AssertionError( + """Impropers validation fail for {} (RNA) + set_amber - set_omm: {} + set_omm - set_amber: {}""".format( + ffxml_name, set_amber_rna - set_omm_rna, set_omm_rna - set_amber_rna + ) + ) finally: - if verbose: print('Deleting temp files...') - for f in (top_villin, crd_villin, top_dna, crd_dna, top_rna, crd_rna, - leap_script_file): + if verbose: + print("Deleting temp files...") + for f in ( + top_villin, + crd_villin, + top_dna, + crd_dna, + top_rna, + crd_rna, + leap_script_file, + ): os.unlink(f[1]) - if verbose: print('Improper validation for %s done!' % ffxml_name) + if verbose: + print("Improper validation for %s done!" % ffxml_name) + def validate_lipids(ffxml_name, leaprc_name): - if verbose: print('Lipids energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("Lipids energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") lipids_top = tempfile.mkstemp() lipids_crd = tempfile.mkstemp() leap_script_lipids_file = tempfile.mkstemp() - if verbose: print('Preparing LeaP scripts...') - leap_script_lipids_string = """source %s + if verbose: + print("Preparing LeaP scripts...") + leap_script_lipids_string = """source {} x = loadPdb files/POPC-nowater-amber.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, lipids_top[1], lipids_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, lipids_top[1], lipids_crd[1] + ) write_file(leap_script_lipids_file[0], leap_script_lipids_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_lipids_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_lipids_file[1]} > {os.devnull}") if os.path.getsize(lipids_top[1]) == 0 or os.path.getsize(lipids_crd[1]) == 0: raise LeapException(leap_script_lipids_file[1]) try: - if verbose: print('Calculating and validating lipids energies...') - assert_energies(lipids_top[1], lipids_crd[1], ffxml_name, - system_name='lipids') - if verbose: print('Lipids energy validation successful!') + if verbose: + print("Calculating and validating lipids energies...") + assert_energies(lipids_top[1], lipids_crd[1], ffxml_name, system_name="lipids") + if verbose: + print("Lipids energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (lipids_top, lipids_crd, leap_script_lipids_file): os.unlink(f[1]) - if verbose: print('Lipids energy validation for %s done!' % ffxml_name) + if verbose: + print("Lipids energy validation for %s done!" % ffxml_name) + def validate_merged_lipids(ffxml_name, leaprc_name): - if verbose: print('Lipids (merged) energy validation for %s' % ffxml_name) - if verbose: print('Preparing temporary files for validation...') + if verbose: + print("Lipids (merged) energy validation for %s" % ffxml_name) + if verbose: + print("Preparing temporary files for validation...") lipids_top = tempfile.mkstemp() lipids_crd = tempfile.mkstemp() leap_script_lipids_file = tempfile.mkstemp() - pdbfile = app.PDBFile('files/POPC-nowater-charmm.pdb') + pdbfile = app.PDBFile("files/POPC-nowater-charmm.pdb") - if verbose: print('Preparing LeaP scripts...') - leap_script_lipids_string = """source %s + if verbose: + print("Preparing LeaP scripts...") + leap_script_lipids_string = """source {} x = loadPdb files/POPC-nowater-amber.pdb -saveAmberParm x %s %s -quit""" % (leaprc_name, lipids_top[1], lipids_crd[1]) +saveAmberParm x {} {} +quit""".format( + leaprc_name, lipids_top[1], lipids_crd[1] + ) write_file(leap_script_lipids_file[0], leap_script_lipids_string) - if verbose: print('Running LEaP...') - os.system('tleap -f %s > %s' % (leap_script_lipids_file[1], os.devnull)) + if verbose: + print("Running LEaP...") + os.system(f"tleap -f {leap_script_lipids_file[1]} > {os.devnull}") if os.path.getsize(lipids_top[1]) == 0 or os.path.getsize(lipids_crd[1]) == 0: raise LeapException(leap_script_lipids_file[1]) try: - if verbose: print('Calculating and validating lipids energies...') - assert_energies(lipids_top[1], lipids_crd[1], ffxml_name, - system_name='lipids', - openmm_topology=pdbfile.topology, openmm_positions=pdbfile.positions) - if verbose: print('Lipids energy validation successful!') + if verbose: + print("Calculating and validating lipids energies...") + assert_energies( + lipids_top[1], + lipids_crd[1], + ffxml_name, + system_name="lipids", + openmm_topology=pdbfile.topology, + openmm_positions=pdbfile.positions, + ) + if verbose: + print("Lipids energy validation successful!") finally: - if verbose: print('Deleting temp files...') + if verbose: + print("Deleting temp files...") for f in (lipids_top, lipids_crd, leap_script_lipids_file): os.unlink(f[1]) - if verbose: print('Lipids energy validation for %s done!' % ffxml_name) + if verbose: + print("Lipids energy validation for %s done!" % ffxml_name) + def modify_glycan_ffxml(input_ffxml_path): @@ -1357,141 +1758,201 @@ def modify_glycan_ffxml(input_ffxml_path): """ - import xml.etree.ElementTree as etree import re + import xml.etree.ElementTree as etree # Define atom types - protein_types = set(["C", "CA", "CB", "CC", "CN", "CR", "CT", "CV", "CW", "C*", "CX", "H", "HC", "H1", "HA", "H4", "H5", "HO", "HS", "HP", "N", "NA", "NB", "N2", "N3", "O", "O2", "OH", "S", "SH", "CO", "2C", "3C", "C8"]) - solvent_types = set(["HW", "OW", "Li+", "Na+", "K+", "Rb+", "Cs+", "F-", "Cl-", "Br-", "I-"]) + protein_types = { + "C", + "CA", + "CB", + "CC", + "CN", + "CR", + "CT", + "CV", + "CW", + "C*", + "CX", + "H", + "HC", + "H1", + "HA", + "H4", + "H5", + "HO", + "HS", + "HP", + "N", + "NA", + "NB", + "N2", + "N3", + "O", + "O2", + "OH", + "S", + "SH", + "CO", + "2C", + "3C", + "C8", + } + solvent_types = { + "HW", + "OW", + "Li+", + "Na+", + "K+", + "Rb+", + "Cs+", + "F-", + "Cl-", + "Br-", + "I-", + } glycam_types = set() replacements = {} for type in protein_types: - replacements[type] = 'protein-'+type + replacements[type] = "protein-" + type # Process tree = etree.parse(input_ffxml_path) root = tree.getroot() - types = root.find('AtomTypes') - for type in types.findall('Type'): - name = type.get('name') + types = root.find("AtomTypes") + for type in types.findall("Type"): + name = type.get("name") if name in protein_types or name in solvent_types: types.remove(type) else: glycam_types.add(name) - replacements[name] = 'glycam-'+name - type.set('name', replacements[name]) + replacements[name] = "glycam-" + name + type.set("name", replacements[name]) # Process - residues = root.find('Residues') - for residue in residues.findall('Residue'): - for atom in residue.findall('Atom'): - atom.set('type', replacements[atom.get('type')]) + residues = root.find("Residues") + for residue in residues.findall("Residue"): + for atom in residue.findall("Atom"): + atom.set("type", replacements[atom.get("type")]) # Process - force = root.find('HarmonicBondForce') - for bond in force.findall('Bond'): + force = root.find("HarmonicBondForce") + for bond in force.findall("Bond"): # Change attributes from class to type - bond.attrib['type1'] = bond.attrib['class1'] - bond.attrib['type2'] = bond.attrib['class2'] - del bond.attrib['class1'] - del bond.attrib['class2'] + bond.attrib["type1"] = bond.attrib["class1"] + bond.attrib["type2"] = bond.attrib["class2"] + del bond.attrib["class1"] + del bond.attrib["class2"] # Fix prefixes - types = [bond.get('type1'), bond.get('type2')] + types = [bond.get("type1"), bond.get("type2")] if any(t in glycam_types for t in types): - bond.set('type1', replacements[types[0]]) - bond.set('type2', replacements[types[1]]) + bond.set("type1", replacements[types[0]]) + bond.set("type2", replacements[types[1]]) else: force.remove(bond) # Process - force = root.find('HarmonicAngleForce') - for angle in force.findall('Angle'): + force = root.find("HarmonicAngleForce") + for angle in force.findall("Angle"): # Change attributes from class to type - angle.attrib['type1'] = angle.attrib['class1'] - angle.attrib['type2'] = angle.attrib['class2'] - angle.attrib['type3'] = angle.attrib['class3'] - del angle.attrib['class1'] - del angle.attrib['class2'] - del angle.attrib['class3'] + angle.attrib["type1"] = angle.attrib["class1"] + angle.attrib["type2"] = angle.attrib["class2"] + angle.attrib["type3"] = angle.attrib["class3"] + del angle.attrib["class1"] + del angle.attrib["class2"] + del angle.attrib["class3"] # Fix prefixes - types = [angle.get('type1'), angle.get('type2'), angle.get('type3')] + types = [angle.get("type1"), angle.get("type2"), angle.get("type3")] if any(t in glycam_types for t in types): - angle.set('type1', replacements[types[0]]) - angle.set('type2', replacements[types[1]]) - angle.set('type3', replacements[types[2]]) + angle.set("type1", replacements[types[0]]) + angle.set("type2", replacements[types[1]]) + angle.set("type3", replacements[types[2]]) else: force.remove(angle) # Process - force = root.find('PeriodicTorsionForce') - for tag in ['Proper', 'Improper']: + force = root.find("PeriodicTorsionForce") + for tag in ["Proper", "Improper"]: for torsion in force.findall(tag): # Change attributes from class to type and remove bad torsion - torsion.attrib['type1'] = torsion.attrib['class1'] - torsion.attrib['type2'] = torsion.attrib['class2'] - torsion.attrib['type3'] = torsion.attrib['class3'] - torsion.attrib['type4'] = torsion.attrib['class4'] - del torsion.attrib['class1'] - del torsion.attrib['class2'] - del torsion.attrib['class3'] - del torsion.attrib['class4'] - if torsion.attrib['type1'] == 'NH' and torsion.attrib['type2'] == 'Cg' and torsion.attrib['type3'] == 'Cg' and torsion.attrib['type4'] == 'Sm': + torsion.attrib["type1"] = torsion.attrib["class1"] + torsion.attrib["type2"] = torsion.attrib["class2"] + torsion.attrib["type3"] = torsion.attrib["class3"] + torsion.attrib["type4"] = torsion.attrib["class4"] + del torsion.attrib["class1"] + del torsion.attrib["class2"] + del torsion.attrib["class3"] + del torsion.attrib["class4"] + if ( + torsion.attrib["type1"] == "NH" + and torsion.attrib["type2"] == "Cg" + and torsion.attrib["type3"] == "Cg" + and torsion.attrib["type4"] == "Sm" + ): force.remove(torsion) continue # Fix prefixes - types = [torsion.get('type1'), torsion.get('type2'), torsion.get('type3'), torsion.get('type4')] + types = [ + torsion.get("type1"), + torsion.get("type2"), + torsion.get("type3"), + torsion.get("type4"), + ] if any(t in glycam_types for t in types): - torsion.set('type1', replacements[types[0]]) - torsion.set('type2', replacements[types[1]]) - torsion.set('type3', replacements[types[2]]) - torsion.set('type4', replacements[types[3]]) + torsion.set("type1", replacements[types[0]]) + torsion.set("type2", replacements[types[1]]) + torsion.set("type3", replacements[types[2]]) + torsion.set("type4", replacements[types[3]]) else: force.remove(torsion) # Process - force = root.find('NonbondedForce') - for atom in force.findall('Atom'): + force = root.find("NonbondedForce") + for atom in force.findall("Atom"): # Change attributes from class to type - atom.attrib['type'] = atom.attrib['class'] - del atom.attrib['class'] + atom.attrib["type"] = atom.attrib["class"] + del atom.attrib["class"] # Fix prefixes - type = atom.get('type') + type = atom.get("type") if type in glycam_types: - atom.set('type', replacements[type]) + atom.set("type", replacements[type]) else: force.remove(atom) # Remove bad NH torsion and update the unscaled types in the script - script = root.find('Script') + script = root.find("Script") text = script.text # Bad NH torsion - text_split = text.split('\n') - text_NH_removed = [line for line in text_split if not 'NH' in line] - text = '\n'.join(text_NH_removed) + text_split = text.split("\n") + text_NH_removed = [line for line in text_split if not "NH" in line] + text = "\n".join(text_NH_removed) # Unscaled types - pattern = re.compile('unscaled_types = set\((\[(.*\n)*?.*?\])\)') + pattern = re.compile("unscaled_types = set\\((\\[(.*\n)*?.*?\\])\\)") match = pattern.search(text) types = eval(match.group(1)) - types = [(replacements[t[0]], replacements[t[1]], replacements[t[2]], replacements[t[3]]) for t in types] - types = ',\n '.join(str(t) for t in types) - script.text = pattern.sub('unscaled_types = set([%s])' % types, text) + types = [ + (replacements[t[0]], replacements[t[1]], replacements[t[2]], replacements[t[3]]) + for t in types + ] + types = ",\n ".join(str(t) for t in types) + script.text = pattern.sub("unscaled_types = set([%s])" % types, text) # Add initialization script for setting up GlycamTemplateMatcher - initialization_script = etree.SubElement(root, 'InitializationScript') + initialization_script = etree.SubElement(root, "InitializationScript") initialization_script.text = """ from openmm.app.internal import compiled @@ -1527,20 +1988,27 @@ def __call__(self, ff, residue, bondedToAtom, ignoreExternalBonds, ignoreExtraPa tree.write(input_ffxml_path) -def validate_glyco_protein(ffxml_name, leaprc_name, - supp_leaprc_name = 'oldff/leaprc.ff14SB', - supp_ffxml_name='ffxml/protein.ff14SB.xml'): + +def validate_glyco_protein( + ffxml_name, + leaprc_name, + supp_leaprc_name="oldff/leaprc.ff14SB", + supp_ffxml_name="ffxml/protein.ff14SB.xml", +): modify_glycan_ffxml(ffxml_name) - if verbose: print('Glycosylated protein energy validation for %s' % - ffxml_name) - top = 'files/glycam/Glycoprotein_shortened.parm7' - crd = 'files/glycam/Glycoprotein_shortened.rst7' + if verbose: + print("Glycosylated protein energy validation for %s" % ffxml_name) + top = "files/glycam/Glycoprotein_shortened.parm7" + crd = "files/glycam/Glycoprotein_shortened.rst7" assert_energies_glyco_protein(top, crd, (supp_ffxml_name, ffxml_name)) - if verbose: print('Glycosylated protein energy validation for %s was successful!' - % ffxml_name) + if verbose: + print( + "Glycosylated protein energy validation for %s was successful!" % ffxml_name + ) + -class Logger(): +class Logger: """ Log energy discrepancies to a file. @@ -1550,13 +2018,22 @@ class Logger(): Name of CSV file to write to """ + # logs testing energies into csv def __init__(self, log_filename=None): if log_filename: - csvfile = open(log_filename, 'w') - fieldnames = ['ffxml_name', 'data_type', 'test_system', 'units', 'HarmonicBondForce', - 'HarmonicAngleForce', 'PeriodicTorsionForce_dihedrals', - 'PeriodicTorsionForce_impropers', 'NonbondedForce'] + csvfile = open(log_filename, "w") + fieldnames = [ + "ffxml_name", + "data_type", + "test_system", + "units", + "HarmonicBondForce", + "HarmonicAngleForce", + "PeriodicTorsionForce_dihedrals", + "PeriodicTorsionForce_impropers", + "NonbondedForce", + ] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() self.csvfile = csvfile @@ -1573,5 +2050,6 @@ def log(self, energies): if self.writer: self.writer.writerow(energies) -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/amber/gaff-tests.csv b/amber/gaff-tests.csv index d9b7e658..b568e2be 100644 --- a/amber/gaff-tests.csv +++ b/amber/gaff-tests.csv @@ -1,22 +1,22 @@ ffxml_name,data_type,test_system,units,HarmonicBondForce,HarmonicAngleForce,PeriodicTorsionForce_dihedrals,PeriodicTorsionForce_impropers,NonbondedForce -"('gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,25.777545928955078,22.304170608520508,55.1888542175293,0.26479068398475647,-852.433349609375 -"('gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,25.77754102337972,22.304065829309252,55.188839283957066,0.26423707974575467,-852.4326586681362 -"('gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.9030420400684673e-07,4.697740754180669e-06,2.7059036544581625e-07,0.0020907240038462744,8.105516273796546e-07 -"('gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,26.143211364746094,22.300186157226562,36.337039947509766,0.26479068398475647,-852.433349609375 -"('gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,26.14322206368444,22.300082421870197,36.33698290353448,0.26423707974575467,-852.4326586681362 -"('gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,4.0924346276937394e-07,4.651770870159464e-06,1.5698575165055766e-06,0.0020907240038462744,8.105516273796546e-07 -"('gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870708465576172,22.636985778808594,36.337039947509766,0.26479068398475647,-852.433349609375 -"('gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659608,22.63682360600831,36.33698290353448,0.26423707974575467,-852.4326586681362 -"('gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.7300943006191098e-06,7.1640633549220915e-06,1.5698575165055766e-06,0.0020907240038462744,8.105516273796546e-07 -"('gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870708465576172,22.63513946533203,36.337039947509766,0.26479068398475647,-852.433349609375 -"('gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659608,22.634976391529953,36.33698290353448,0.26423707974575467,-852.4326586681362 -"('gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.7300943006191098e-06,7.204453161319435e-06,1.5698575165055766e-06,0.0020907240038462744,8.105516273796546e-07 -"('gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870708465576172,22.63513946533203,36.337039947509766,0.26479068398475647,-852.433349609375 -"('gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659608,22.634976391529953,36.33698290353448,0.26423707974575467,-852.4326586681362 -"('gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.7300943006191098e-06,7.204453161319435e-06,1.5698575165055766e-06,0.0020907240038462744,8.105516273796546e-07 -"('gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,14.073978424072266,24.22649383544922,28.998537063598633,0.26479068398475647,-869.61474609375 -"('gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,14.074003032028392,24.22633229264447,28.998474252684986,0.26423707974575467,-869.6145738718743 -"('gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.7484719234784995e-06,6.668022448665338e-06,2.166002840397494e-06,0.0020907240038462744,1.9804387685510414e-07 -"('gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,14.074195861816406,24.23253631591797,28.998537063598633,0.26479068398475647,-869.61474609375 -"('gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,14.074219501502814,24.232374455829078,28.998474252684986,0.26423707974575467,-869.6145738718743 -"('gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.6796473943950934e-06,6.679453061822155e-06,2.166002840397494e-06,0.0020907240038462744,1.9804387685510414e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,25.777557373046875,22.30413055419922,55.188804626464844,0.26478666067123413,-852.43310546875 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,25.777541023379726,22.304065829309273,55.18883928395708,0.2642370763604315,-852.4326586681362 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,6.34259752094455e-07,2.901923918898549e-06,6.279804839161042e-07,0.002075574008937826,5.24147420943811e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,26.14322280883789,22.300148010253906,36.336997985839844,0.26478666067123413,-852.43310546875 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,26.143222063684448,22.30008242187022,36.336982903534484,0.2642370763604315,-852.4326586681362 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,2.8502738487824353e-08,2.9411636038287786e-06,4.1506745730779966e-07,0.002075574008937826,5.24147420943811e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870697021484375,22.636943817138672,36.336997985839844,0.26478666067123413,-852.43310546875 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659615,22.63682360600832,36.336982903534484,0.2642370763604315,-852.4326586681362 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.0517540998527325e-06,5.3103957549388315e-06,4.1506745730779966e-07,0.002075574008937826,5.24147420943811e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870697021484375,22.63509750366211,36.336997985839844,0.26478666067123413,-852.43310546875 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659615,22.63497639152996,36.336982903534484,0.2642370763604315,-852.4326586681362 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.0517540998527325e-06,5.350634435276571e-06,4.1506745730779966e-07,0.002075574008937826,5.24147420943811e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,16.870697021484375,22.63509750366211,36.336997985839844,0.26478666067123413,-852.43310546875 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,16.870679277659615,22.63497639152996,36.336982903534484,0.2642370763604315,-852.4326586681362 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,1.0517540998527325e-06,5.350634435276571e-06,4.1506745730779966e-07,0.002075574008937826,5.24147420943811e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,14.073968887329102,24.226451873779297,28.998493194580078,0.26478666067123413,-869.614990234375 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,14.074003032028394,24.226332292644475,28.99847425268499,0.2642370763604315,-869.6145738718743 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,2.4260888712573548e-06,4.935973928201381e-06,6.532027358037606e-07,0.002075574008937826,4.787894704696351e-07 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",AMBER,gaff-imatinib,kilojoule/mole,14.07418441772461,24.23249626159668,28.998493194580078,0.26478666067123413,-869.614990234375 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",OpenMM,gaff-imatinib,kilojoule/mole,14.074219501502816,24.232374455829074,28.99847425268499,0.2642370763604315,-869.6145738718743 +"('../openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml', 'files/imatinib.xml', 'files/imatinib_frcmod.xml')",abs((AMBER-OpenMM)/AMBER),gaff-imatinib,,2.492775223406482e-06,5.026546431314265e-06,6.532027358037606e-07,0.002075574008937826,4.787894704696351e-07 diff --git a/amber/gaff.yaml b/amber/gaff.yaml index 4e786440..2a3594bf 100644 --- a/amber/gaff.yaml +++ b/amber/gaff.yaml @@ -6,7 +6,7 @@ leaprc: leaprc.gaff Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -22,7 +22,7 @@ leaprc: leaprc.gaff Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -38,7 +38,7 @@ leaprc: leaprc.gaff Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -54,7 +54,7 @@ leaprc: leaprc.gaff Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -70,7 +70,7 @@ leaprc: leaprc.gaff Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -86,7 +86,7 @@ leaprc: leaprc.gaff2 Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: @@ -102,7 +102,7 @@ leaprc: leaprc.gaff2 Options: write_unused: True - ffxml_dir: gaff/ffxml + ffxml_dir: ../openmmforcefields/ffxml/amber/gaff/ffxml Test: - gaff Reference: diff --git a/amber/gaff/ffxml/gaff-1.4.xml b/amber/gaff/ffxml/gaff-1.4.xml deleted file mode 100644 index f54141aa..00000000 --- a/amber/gaff/ffxml/gaff-1.4.xml +++ /dev/null @@ -1,5695 +0,0 @@ - - - 2021-01-26 - gaff-1.4.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff-1.7.xml b/amber/gaff/ffxml/gaff-1.7.xml deleted file mode 100644 index 7b4dca2d..00000000 --- a/amber/gaff/ffxml/gaff-1.7.xml +++ /dev/null @@ -1,5892 +0,0 @@ - - - 2021-01-26 - gaff-1.7.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff-1.8.xml b/amber/gaff/ffxml/gaff-1.8.xml deleted file mode 100644 index d5de7baa..00000000 --- a/amber/gaff/ffxml/gaff-1.8.xml +++ /dev/null @@ -1,6299 +0,0 @@ - - - 2021-01-26 - gaff-1.8.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff-1.81.xml b/amber/gaff/ffxml/gaff-1.81.xml deleted file mode 100644 index 91580a9b..00000000 --- a/amber/gaff/ffxml/gaff-1.81.xml +++ /dev/null @@ -1,7116 +0,0 @@ - - - 2021-01-26 - gaff-1.81.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff-2.1.xml b/amber/gaff/ffxml/gaff-2.1.xml deleted file mode 100644 index 12480da1..00000000 --- a/amber/gaff/ffxml/gaff-2.1.xml +++ /dev/null @@ -1,6654 +0,0 @@ - - - 2021-01-26 - gaff-2.1.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff-2.11.xml b/amber/gaff/ffxml/gaff-2.11.xml deleted file mode 100644 index 23b61ad6..00000000 --- a/amber/gaff/ffxml/gaff-2.11.xml +++ /dev/null @@ -1,7475 +0,0 @@ - - - 2021-01-26 - gaff-2.11.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/gaff/ffxml/gaff.xml b/amber/gaff/ffxml/gaff.xml deleted file mode 100644 index 91580a9b..00000000 --- a/amber/gaff/ffxml/gaff.xml +++ /dev/null @@ -1,7116 +0,0 @@ - - - 2021-01-26 - gaff-1.81.dat - Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. - Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/amber/test/test.py b/amber/test/test.py index 49756d97..98e1eb0f 100644 --- a/amber/test/test.py +++ b/amber/test/test.py @@ -1,5 +1,6 @@ -import unittest import os +import unittest + os.chdir('..') class Testamber2ommmScript(unittest.TestCase): diff --git a/devtools/conda-envs/test_env.yaml b/devtools/conda-envs/test_env.yaml index 271c5c60..70240427 100644 --- a/devtools/conda-envs/test_env.yaml +++ b/devtools/conda-envs/test_env.yaml @@ -1,4 +1,4 @@ -name: test +name: openmmforcefields-test channels: - conda-forge @@ -30,10 +30,6 @@ dependencies: # OpenEye toolkits are only used to speed up testing; they are not required for use - openeye-toolkits - # OpenFF toolkit and force fields - - openff-toolkit =0.10.6 - - openff-forcefields >=1.2.0 - # Validating URLs - validators diff --git a/openmmforcefields/__init__.py b/openmmforcefields/__init__.py index 8c66453b..7db1e859 100644 --- a/openmmforcefields/__init__.py +++ b/openmmforcefields/__init__.py @@ -1,8 +1,8 @@ # Add imports here -from .utils import get_ffxml_path - # Handle versioneer from ._version import get_versions +from .utils import get_ffxml_path + versions = get_versions() __version__ = versions['version'] __git_revision__ = versions['full-revisionid'] diff --git a/openmmforcefields/_version.py b/openmmforcefields/_version.py index fc52d96c..49c6b0fb 100644 --- a/openmmforcefields/_version.py +++ b/openmmforcefields/_version.py @@ -1,4 +1,3 @@ - # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build @@ -81,7 +80,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, stderr=(subprocess.PIPE if hide_stderr else None)) break - except EnvironmentError: + except OSError: e = sys.exc_info()[1] if e.errno == errno.ENOENT: continue @@ -91,7 +90,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, return None, None else: if verbose: - print("unable to find command, tried %s" % (commands,)) + print("unable to find command, tried {}".format(commands)) return None, None stdout = p.communicate()[0].strip() if sys.version_info[0] >= 3: @@ -138,7 +137,7 @@ def git_get_keywords(versionfile_abs): # _version.py. keywords = {} try: - f = open(versionfile_abs, "r") + f = open(versionfile_abs) for line in f.readlines(): if line.strip().startswith("git_refnames ="): mo = re.search(r'=\s*"(.*)"', line) @@ -153,7 +152,7 @@ def git_get_keywords(versionfile_abs): if mo: keywords["date"] = mo.group(1) f.close() - except EnvironmentError: + except OSError: pass return keywords @@ -177,11 +176,11 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): if verbose: print("keywords are unexpanded, not using") raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) + refs = {r.strip() for r in refnames.strip("()").split(",")} # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) + tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d @@ -190,7 +189,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) + tags = {r for r in refs if re.search(r'\d', r)} if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: diff --git a/openmmforcefields/data/perses_jacs_systems/tests/test_outputs.py b/openmmforcefields/data/perses_jacs_systems/tests/test_outputs.py index 220de6d9..3edfe94e 100644 --- a/openmmforcefields/data/perses_jacs_systems/tests/test_outputs.py +++ b/openmmforcefields/data/perses_jacs_systems/tests/test_outputs.py @@ -1,7 +1,7 @@ import sys from argparse import ArgumentParser -from simtk.openmm import app +from openmm import app if __name__ == "__main__": parser = ArgumentParser(epilog='''This program reads a pdb file and tests whether the file that is compatible @@ -22,4 +22,4 @@ print(error) sys.exit("File %s was not properly prepared and cannot be parsed by openmm" % args.protein) - sys.exit("Test passed! Output %s was prepared properly and can be parsed by openmm" % args.protein) \ No newline at end of file + sys.exit("Test passed! Output %s was prepared properly and can be parsed by openmm" % args.protein) diff --git a/amber/ffxml/DNA.OL15.xml b/openmmforcefields/ffxml/amber/DNA.OL15.xml similarity index 100% rename from amber/ffxml/DNA.OL15.xml rename to openmmforcefields/ffxml/amber/DNA.OL15.xml diff --git a/amber/ffxml/DNA.bsc0.xml b/openmmforcefields/ffxml/amber/DNA.bsc0.xml similarity index 100% rename from amber/ffxml/DNA.bsc0.xml rename to openmmforcefields/ffxml/amber/DNA.bsc0.xml diff --git a/amber/ffxml/DNA.bsc1.xml b/openmmforcefields/ffxml/amber/DNA.bsc1.xml similarity index 100% rename from amber/ffxml/DNA.bsc1.xml rename to openmmforcefields/ffxml/amber/DNA.bsc1.xml diff --git a/amber/ffxml/GLYCAM_06j-1.xml b/openmmforcefields/ffxml/amber/GLYCAM_06j-1.xml similarity index 100% rename from amber/ffxml/GLYCAM_06j-1.xml rename to openmmforcefields/ffxml/amber/GLYCAM_06j-1.xml diff --git a/amber/ffxml/RNA.OL3.xml b/openmmforcefields/ffxml/amber/RNA.OL3.xml similarity index 100% rename from amber/ffxml/RNA.OL3.xml rename to openmmforcefields/ffxml/amber/RNA.OL3.xml diff --git a/amber/ffxml/RNA.ROC.xml b/openmmforcefields/ffxml/amber/RNA.ROC.xml similarity index 100% rename from amber/ffxml/RNA.ROC.xml rename to openmmforcefields/ffxml/amber/RNA.ROC.xml diff --git a/amber/ffxml/RNA.YIL.xml b/openmmforcefields/ffxml/amber/RNA.YIL.xml similarity index 100% rename from amber/ffxml/RNA.YIL.xml rename to openmmforcefields/ffxml/amber/RNA.YIL.xml diff --git a/amber/ffxml/ff03.xml b/openmmforcefields/ffxml/amber/ff03.xml similarity index 100% rename from amber/ffxml/ff03.xml rename to openmmforcefields/ffxml/amber/ff03.xml diff --git a/amber/ffxml/ff10.xml b/openmmforcefields/ffxml/amber/ff10.xml similarity index 100% rename from amber/ffxml/ff10.xml rename to openmmforcefields/ffxml/amber/ff10.xml diff --git a/amber/ffxml/ff14SB.redq.xml b/openmmforcefields/ffxml/amber/ff14SB.redq.xml similarity index 100% rename from amber/ffxml/ff14SB.redq.xml rename to openmmforcefields/ffxml/amber/ff14SB.redq.xml diff --git a/amber/ffxml/ff14SB.xml b/openmmforcefields/ffxml/amber/ff14SB.xml similarity index 100% rename from amber/ffxml/ff14SB.xml rename to openmmforcefields/ffxml/amber/ff14SB.xml diff --git a/amber/ffxml/ff94.xml b/openmmforcefields/ffxml/amber/ff94.xml similarity index 100% rename from amber/ffxml/ff94.xml rename to openmmforcefields/ffxml/amber/ff94.xml diff --git a/amber/ffxml/ff96.xml b/openmmforcefields/ffxml/amber/ff96.xml similarity index 100% rename from amber/ffxml/ff96.xml rename to openmmforcefields/ffxml/amber/ff96.xml diff --git a/amber/ffxml/ff98.xml b/openmmforcefields/ffxml/amber/ff98.xml similarity index 100% rename from amber/ffxml/ff98.xml rename to openmmforcefields/ffxml/amber/ff98.xml diff --git a/amber/ffxml/ff99.xml b/openmmforcefields/ffxml/amber/ff99.xml similarity index 100% rename from amber/ffxml/ff99.xml rename to openmmforcefields/ffxml/amber/ff99.xml diff --git a/amber/ffxml/ff99SB.xml b/openmmforcefields/ffxml/amber/ff99SB.xml similarity index 100% rename from amber/ffxml/ff99SB.xml rename to openmmforcefields/ffxml/amber/ff99SB.xml diff --git a/amber/ffxml/ff99SBildn.xml b/openmmforcefields/ffxml/amber/ff99SBildn.xml similarity index 100% rename from amber/ffxml/ff99SBildn.xml rename to openmmforcefields/ffxml/amber/ff99SBildn.xml diff --git a/amber/ffxml/ff99SBnmr.xml b/openmmforcefields/ffxml/amber/ff99SBnmr.xml similarity index 100% rename from amber/ffxml/ff99SBnmr.xml rename to openmmforcefields/ffxml/amber/ff99SBnmr.xml diff --git a/amber/ffxml/ff99bsc0.xml b/openmmforcefields/ffxml/amber/ff99bsc0.xml similarity index 100% rename from amber/ffxml/ff99bsc0.xml rename to openmmforcefields/ffxml/amber/ff99bsc0.xml diff --git a/amber/ffxml/ffAM1.xml b/openmmforcefields/ffxml/amber/ffAM1.xml similarity index 100% rename from amber/ffxml/ffAM1.xml rename to openmmforcefields/ffxml/amber/ffAM1.xml diff --git a/amber/ffxml/ffPM3.xml b/openmmforcefields/ffxml/amber/ffPM3.xml similarity index 100% rename from amber/ffxml/ffPM3.xml rename to openmmforcefields/ffxml/amber/ffPM3.xml diff --git a/amber/gaff/dat/gaff-1.4.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-1.4.dat similarity index 100% rename from amber/gaff/dat/gaff-1.4.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-1.4.dat diff --git a/amber/gaff/dat/gaff-1.7.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-1.7.dat similarity index 100% rename from amber/gaff/dat/gaff-1.7.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-1.7.dat diff --git a/amber/gaff/dat/gaff-1.8.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-1.8.dat similarity index 100% rename from amber/gaff/dat/gaff-1.8.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-1.8.dat diff --git a/amber/gaff/dat/gaff-1.81.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-1.81.dat similarity index 100% rename from amber/gaff/dat/gaff-1.81.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-1.81.dat diff --git a/amber/gaff/dat/gaff-2.1.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-2.1.dat similarity index 100% rename from amber/gaff/dat/gaff-2.1.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-2.1.dat diff --git a/amber/gaff/dat/gaff-2.11.dat b/openmmforcefields/ffxml/amber/gaff/dat/gaff-2.11.dat similarity index 100% rename from amber/gaff/dat/gaff-2.11.dat rename to openmmforcefields/ffxml/amber/gaff/dat/gaff-2.11.dat diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml new file mode 100644 index 00000000..430d8620 --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.4.xml @@ -0,0 +1,5695 @@ + + + 2022-09-09 + gaff-1.4.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml new file mode 100644 index 00000000..6b098ce0 --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.7.xml @@ -0,0 +1,5892 @@ + + + 2022-09-09 + gaff-1.7.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml new file mode 100644 index 00000000..2311bec7 --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.8.xml @@ -0,0 +1,6299 @@ + + + 2022-09-09 + gaff-1.8.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml new file mode 100644 index 00000000..57dc2bff --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-1.81.xml @@ -0,0 +1,7116 @@ + + + 2022-09-09 + gaff-1.81.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml new file mode 100644 index 00000000..a36418fe --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.1.xml @@ -0,0 +1,6654 @@ + + + 2022-09-09 + gaff-2.1.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml new file mode 100644 index 00000000..0806c0ff --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff-2.11.xml @@ -0,0 +1,7475 @@ + + + 2022-09-09 + gaff-2.11.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml new file mode 100644 index 00000000..57dc2bff --- /dev/null +++ b/openmmforcefields/ffxml/amber/gaff/ffxml/gaff.xml @@ -0,0 +1,7116 @@ + + + 2022-09-09 + gaff-1.81.dat + Wang, J., Wolf, R.M., Caldwell, J.W., Kollman, P.A., and Case, D.A. (2004). Development and testing of a general amber force field. J. Comput. Chem. 25, 1157-1174. + Wang, J., Wang, W., Kollman P. A.; Case, D. A. Automatic atom type and bond type perception in molecular mechanical calculations. Journal of Molecular Graphics and Modelling , 25, 2006, 247260. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/amber/ffxml/lipid17.xml b/openmmforcefields/ffxml/amber/lipid17.xml similarity index 100% rename from amber/ffxml/lipid17.xml rename to openmmforcefields/ffxml/amber/lipid17.xml diff --git a/amber/ffxml/lipid17_merged.xml b/openmmforcefields/ffxml/amber/lipid17_merged.xml similarity index 100% rename from amber/ffxml/lipid17_merged.xml rename to openmmforcefields/ffxml/amber/lipid17_merged.xml diff --git a/amber/ffxml/phosaa10.xml b/openmmforcefields/ffxml/amber/phosaa10.xml similarity index 100% rename from amber/ffxml/phosaa10.xml rename to openmmforcefields/ffxml/amber/phosaa10.xml diff --git a/amber/ffxml/phosaa14SB.xml b/openmmforcefields/ffxml/amber/phosaa14SB.xml similarity index 100% rename from amber/ffxml/phosaa14SB.xml rename to openmmforcefields/ffxml/amber/phosaa14SB.xml diff --git a/amber/ffxml/protein.fb15.xml b/openmmforcefields/ffxml/amber/protein.fb15.xml similarity index 100% rename from amber/ffxml/protein.fb15.xml rename to openmmforcefields/ffxml/amber/protein.fb15.xml diff --git a/amber/ffxml/protein.ff03.r1.xml b/openmmforcefields/ffxml/amber/protein.ff03.r1.xml similarity index 100% rename from amber/ffxml/protein.ff03.r1.xml rename to openmmforcefields/ffxml/amber/protein.ff03.r1.xml diff --git a/amber/ffxml/protein.ff03ua.xml b/openmmforcefields/ffxml/amber/protein.ff03ua.xml similarity index 100% rename from amber/ffxml/protein.ff03ua.xml rename to openmmforcefields/ffxml/amber/protein.ff03ua.xml diff --git a/amber/ffxml/protein.ff14SB.xml b/openmmforcefields/ffxml/amber/protein.ff14SB.xml similarity index 100% rename from amber/ffxml/protein.ff14SB.xml rename to openmmforcefields/ffxml/amber/protein.ff14SB.xml diff --git a/amber/ffxml/protein.ff14SBonlysc.xml b/openmmforcefields/ffxml/amber/protein.ff14SBonlysc.xml similarity index 100% rename from amber/ffxml/protein.ff14SBonlysc.xml rename to openmmforcefields/ffxml/amber/protein.ff14SBonlysc.xml diff --git a/amber/ffxml/protein.ff15ipq-vac.xml b/openmmforcefields/ffxml/amber/protein.ff15ipq-vac.xml similarity index 100% rename from amber/ffxml/protein.ff15ipq-vac.xml rename to openmmforcefields/ffxml/amber/protein.ff15ipq-vac.xml diff --git a/amber/ffxml/protein.ff15ipq.xml b/openmmforcefields/ffxml/amber/protein.ff15ipq.xml similarity index 100% rename from amber/ffxml/protein.ff15ipq.xml rename to openmmforcefields/ffxml/amber/protein.ff15ipq.xml diff --git a/amber/ffxml/spce_HFE_multivalent.xml b/openmmforcefields/ffxml/amber/spce_HFE_multivalent.xml similarity index 100% rename from amber/ffxml/spce_HFE_multivalent.xml rename to openmmforcefields/ffxml/amber/spce_HFE_multivalent.xml diff --git a/amber/ffxml/spce_IOD_multivalent.xml b/openmmforcefields/ffxml/amber/spce_IOD_multivalent.xml similarity index 100% rename from amber/ffxml/spce_IOD_multivalent.xml rename to openmmforcefields/ffxml/amber/spce_IOD_multivalent.xml diff --git a/amber/ffxml/spce_standard.xml b/openmmforcefields/ffxml/amber/spce_standard.xml similarity index 100% rename from amber/ffxml/spce_standard.xml rename to openmmforcefields/ffxml/amber/spce_standard.xml diff --git a/amber/ffxml/tip3p_HFE_multivalent.xml b/openmmforcefields/ffxml/amber/tip3p_HFE_multivalent.xml similarity index 100% rename from amber/ffxml/tip3p_HFE_multivalent.xml rename to openmmforcefields/ffxml/amber/tip3p_HFE_multivalent.xml diff --git a/amber/ffxml/tip3p_IOD_multivalent.xml b/openmmforcefields/ffxml/amber/tip3p_IOD_multivalent.xml similarity index 100% rename from amber/ffxml/tip3p_IOD_multivalent.xml rename to openmmforcefields/ffxml/amber/tip3p_IOD_multivalent.xml diff --git a/amber/ffxml/tip3p_standard.xml b/openmmforcefields/ffxml/amber/tip3p_standard.xml similarity index 100% rename from amber/ffxml/tip3p_standard.xml rename to openmmforcefields/ffxml/amber/tip3p_standard.xml diff --git a/amber/ffxml/tip3pfb_HFE_multivalent.xml b/openmmforcefields/ffxml/amber/tip3pfb_HFE_multivalent.xml similarity index 100% rename from amber/ffxml/tip3pfb_HFE_multivalent.xml rename to openmmforcefields/ffxml/amber/tip3pfb_HFE_multivalent.xml diff --git a/amber/ffxml/tip3pfb_IOD_multivalent.xml b/openmmforcefields/ffxml/amber/tip3pfb_IOD_multivalent.xml similarity index 100% rename from amber/ffxml/tip3pfb_IOD_multivalent.xml rename to openmmforcefields/ffxml/amber/tip3pfb_IOD_multivalent.xml diff --git a/amber/ffxml/tip3pfb_standard.xml b/openmmforcefields/ffxml/amber/tip3pfb_standard.xml similarity index 100% rename from amber/ffxml/tip3pfb_standard.xml rename to openmmforcefields/ffxml/amber/tip3pfb_standard.xml diff --git a/amber/ffxml/tip4pew_HFE_multivalent.xml b/openmmforcefields/ffxml/amber/tip4pew_HFE_multivalent.xml similarity index 100% rename from amber/ffxml/tip4pew_HFE_multivalent.xml rename to openmmforcefields/ffxml/amber/tip4pew_HFE_multivalent.xml diff --git a/amber/ffxml/tip4pew_IOD_multivalent.xml b/openmmforcefields/ffxml/amber/tip4pew_IOD_multivalent.xml similarity index 100% rename from amber/ffxml/tip4pew_IOD_multivalent.xml rename to openmmforcefields/ffxml/amber/tip4pew_IOD_multivalent.xml diff --git a/amber/ffxml/tip4pew_standard.xml b/openmmforcefields/ffxml/amber/tip4pew_standard.xml similarity index 100% rename from amber/ffxml/tip4pew_standard.xml rename to openmmforcefields/ffxml/amber/tip4pew_standard.xml diff --git a/amber/ffxml/tip4pfb_HFE_multivalent.xml b/openmmforcefields/ffxml/amber/tip4pfb_HFE_multivalent.xml similarity index 100% rename from amber/ffxml/tip4pfb_HFE_multivalent.xml rename to openmmforcefields/ffxml/amber/tip4pfb_HFE_multivalent.xml diff --git a/amber/ffxml/tip4pfb_IOD_multivalent.xml b/openmmforcefields/ffxml/amber/tip4pfb_IOD_multivalent.xml similarity index 100% rename from amber/ffxml/tip4pfb_IOD_multivalent.xml rename to openmmforcefields/ffxml/amber/tip4pfb_IOD_multivalent.xml diff --git a/amber/ffxml/tip4pfb_standard.xml b/openmmforcefields/ffxml/amber/tip4pfb_standard.xml similarity index 100% rename from amber/ffxml/tip4pfb_standard.xml rename to openmmforcefields/ffxml/amber/tip4pfb_standard.xml diff --git a/charmm/ffxml/charmm36.xml b/openmmforcefields/ffxml/charmm/charmm36.xml similarity index 100% rename from charmm/ffxml/charmm36.xml rename to openmmforcefields/ffxml/charmm/charmm36.xml diff --git a/charmm/ffxml/charmm36_nowaters.xml b/openmmforcefields/ffxml/charmm/charmm36_nowaters.xml similarity index 100% rename from charmm/ffxml/charmm36_nowaters.xml rename to openmmforcefields/ffxml/charmm/charmm36_nowaters.xml diff --git a/charmm/ffxml/charmm_polar_2019.xml b/openmmforcefields/ffxml/charmm/charmm_polar_2019.xml similarity index 100% rename from charmm/ffxml/charmm_polar_2019.xml rename to openmmforcefields/ffxml/charmm/charmm_polar_2019.xml diff --git a/charmm/ffxml/toppar_all36_carb_model.xml b/openmmforcefields/ffxml/charmm/toppar_all36_carb_model.xml similarity index 100% rename from charmm/ffxml/toppar_all36_carb_model.xml rename to openmmforcefields/ffxml/charmm/toppar_all36_carb_model.xml diff --git a/charmm/ffxml/toppar_all36_lipid_model.xml b/openmmforcefields/ffxml/charmm/toppar_all36_lipid_model.xml similarity index 100% rename from charmm/ffxml/toppar_all36_lipid_model.xml rename to openmmforcefields/ffxml/charmm/toppar_all36_lipid_model.xml diff --git a/charmm/ffxml/toppar_all36_na_model.xml b/openmmforcefields/ffxml/charmm/toppar_all36_na_model.xml similarity index 100% rename from charmm/ffxml/toppar_all36_na_model.xml rename to openmmforcefields/ffxml/charmm/toppar_all36_na_model.xml diff --git a/charmm/ffxml/toppar_all36_prot_model.xml b/openmmforcefields/ffxml/charmm/toppar_all36_prot_model.xml similarity index 100% rename from charmm/ffxml/toppar_all36_prot_model.xml rename to openmmforcefields/ffxml/charmm/toppar_all36_prot_model.xml diff --git a/charmm/ffxml/waters_ions_default.xml b/openmmforcefields/ffxml/charmm/waters_ions_default.xml similarity index 100% rename from charmm/ffxml/waters_ions_default.xml rename to openmmforcefields/ffxml/charmm/waters_ions_default.xml diff --git a/charmm/ffxml/waters_ions_spc.xml b/openmmforcefields/ffxml/charmm/waters_ions_spc.xml similarity index 100% rename from charmm/ffxml/waters_ions_spc.xml rename to openmmforcefields/ffxml/charmm/waters_ions_spc.xml diff --git a/charmm/ffxml/waters_ions_spc_e.xml b/openmmforcefields/ffxml/charmm/waters_ions_spc_e.xml similarity index 100% rename from charmm/ffxml/waters_ions_spc_e.xml rename to openmmforcefields/ffxml/charmm/waters_ions_spc_e.xml diff --git a/charmm/ffxml/waters_ions_tip3p_pme_b.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip3p_pme_b.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip3p_pme_b.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip3p_pme_b.xml diff --git a/charmm/ffxml/waters_ions_tip3p_pme_f.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip3p_pme_f.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip3p_pme_f.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip3p_pme_f.xml diff --git a/charmm/ffxml/waters_ions_tip4p.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip4p.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip4p.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip4p.xml diff --git a/charmm/ffxml/waters_ions_tip4p_2005.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip4p_2005.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip4p_2005.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip4p_2005.xml diff --git a/charmm/ffxml/waters_ions_tip4p_ew.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip4p_ew.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip4p_ew.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip4p_ew.xml diff --git a/charmm/ffxml/waters_ions_tip5p.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip5p.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip5p.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip5p.xml diff --git a/charmm/ffxml/waters_ions_tip5p_ew.xml b/openmmforcefields/ffxml/charmm/waters_ions_tip5p_ew.xml similarity index 100% rename from charmm/ffxml/waters_ions_tip5p_ew.xml rename to openmmforcefields/ffxml/charmm/waters_ions_tip5p_ew.xml diff --git a/openmmforcefields/generators/__init__.py b/openmmforcefields/generators/__init__.py index f4a48eff..f78e8b5d 100644 --- a/openmmforcefields/generators/__init__.py +++ b/openmmforcefields/generators/__init__.py @@ -1,2 +1,6 @@ -from .template_generators import GAFFTemplateGenerator, SMIRNOFFTemplateGenerator, EspalomaTemplateGenerator from .system_generators import SystemGenerator +from .template_generators import ( + EspalomaTemplateGenerator, + GAFFTemplateGenerator, + SMIRNOFFTemplateGenerator, +) diff --git a/openmmforcefields/generators/system_generators.py b/openmmforcefields/generators/system_generators.py index 147eca51..fc058c81 100644 --- a/openmmforcefields/generators/system_generators.py +++ b/openmmforcefields/generators/system_generators.py @@ -8,9 +8,8 @@ ################################################################################ import logging -_logger = logging.getLogger("openmmforcefields.system_generators") -from openmm import app +_logger = logging.getLogger("openmmforcefields.system_generators") ################################################################################ # System generator base class @@ -18,13 +17,13 @@ class classproperty(property): def __get__(self, obj, objtype=None): - return super(classproperty, self).__get__(objtype) + return super().__get__(objtype) def __set__(self, obj, value): - super(classproperty, self).__set__(type(obj), value) + super().__set__(type(obj), value) def __delete__(self, obj): - super(classproperty, self).__delete__(type(obj)) + super().__delete__(type(obj)) -class SystemGenerator(object): +class SystemGenerator: """ Common interface for generating OpenMM Systems from OpenMM Topology objects that may contain both biopolymers (with parameters provided by OpenMM) and small molecules @@ -188,7 +187,9 @@ def __init__(self, forcefields=None, small_molecule_forcefield='openff-1.0.0', f or nonperiodic_forcefield_kwargs (if it should be applied to non-periodic systems)""") # Create and cache a residue template generator - from openmmforcefields.generators.template_generators import SmallMoleculeTemplateGenerator + from openmmforcefields.generators.template_generators import ( + SmallMoleculeTemplateGenerator, + ) self.template_generator = None if small_molecule_forcefield is not None: for template_generator_cls in SmallMoleculeTemplateGenerator.__subclasses__(): @@ -214,7 +215,9 @@ def __init__(self, forcefields=None, small_molecule_forcefield='openff-1.0.0', f def SMALL_MOLECULE_FORCEFIELDS(cls): """Return a listof available small molecule force fields""" forcefields = list() - from openmmforcefields.generators.template_generators import SmallMoleculeTemplateGenerator + from openmmforcefields.generators.template_generators import ( + SmallMoleculeTemplateGenerator, + ) for template_generator_cls in SmallMoleculeTemplateGenerator.__subclasses__(): forcefields += template_generator_cls.INSTALLED_FORCEFIELDS return forcefields diff --git a/openmmforcefields/generators/template_generators.py b/openmmforcefields/generators/template_generators.py index 817213a9..cfb27ff8 100644 --- a/openmmforcefields/generators/template_generators.py +++ b/openmmforcefields/generators/template_generators.py @@ -11,16 +11,17 @@ # LOGGER ################################################################################ -import os -import logging import contextlib +import logging +import os + _logger = logging.getLogger("openmmforcefields.generators.template_generators") ################################################################################ # Small molecule OpenMM ForceField template generation utilities ################################################################################ -class SmallMoleculeTemplateGenerator(object): +class SmallMoleculeTemplateGenerator: """ Abstract base class for small molecule template generation for OpenMM ForceField. @@ -218,13 +219,18 @@ def _molecule_has_user_charges(self, molecule): """ import numpy as np - from openmm import unit - zeros = np.zeros([molecule.n_particles]) - if (molecule.partial_charges is None) or (np.allclose(molecule.partial_charges / unit.elementary_charge, zeros)): - charges_are_zero = True - else: - charges_are_zero = False - return not charges_are_zero + from openff.units import unit + + if molecule.partial_charges is None: + return False + + if np.allclose( + molecule.partial_charges.m_as(unit.elementary_charge), + np.zeros([molecule.n_atoms]), + ): + return False + + return True def _generate_unique_atom_names(self, molecule): """ @@ -567,6 +573,9 @@ def generate_residue_template(self, molecule, residue_atoms=None): * Atom names in molecules will be assigned Tripos atom names if any are blank or not unique. """ + import numpy as np + from openff.units import unit + # Use the canonical isomeric SMILES to uniquely name the template smiles = molecule.to_smiles() _logger.info(f'Generating a residue template for {smiles} using {self._forcefield}') @@ -576,9 +585,10 @@ def generate_residue_template(self, molecule, residue_atoms=None): # Compute net formal charge net_charge = molecule.total_charge - from openmm import unit + if type(net_charge) != unit.Quantity: # openforcefield toolkit < 0.7.0 did not return unit-bearing quantity + # how long should openmmforcefields support < 0.7.0? net_charge = float(net_charge) * unit.elementary_charge _logger.debug(f'Total charge is {net_charge}') @@ -590,15 +600,15 @@ def generate_residue_template(self, molecule, residue_atoms=None): # NOTE: generate_conformers seems to be required for some molecules # https://github.com/openforcefield/openff-toolkit/issues/492 molecule.generate_conformers(n_conformers=10) - molecule.compute_partial_charges_am1bcc() + molecule.assign_partial_charges(partial_charge_method='am1bcc') # Geneate a single conformation _logger.debug(f'Generating a conformer...') molecule.generate_conformers(n_conformers=1) # Create temporary directory for running antechamber - import tempfile import os + import tempfile tmpdir = tempfile.mkdtemp() prefix = 'molecule' input_sdf_filename = os.path.join(tmpdir, prefix + '.sdf') @@ -627,20 +637,21 @@ def generate_residue_template(self, molecule, residue_atoms=None): # or pure numbers. _logger.debug(f'Fixing partial charges...') _logger.debug(f'{molecule.partial_charges}') - from openmm import unit residue_charge = 0.0 * unit.elementary_charge - total_charge = unit.sum(molecule.partial_charges) - sum_of_absolute_charge = unit.sum(abs(molecule.partial_charges)) + total_charge = molecule.partial_charges.sum() + sum_of_absolute_charge = np.sum(np.abs(molecule.partial_charges)) charge_deficit = net_charge - total_charge - if sum_of_absolute_charge / unit.elementary_charge > 0.0: + if (sum_of_absolute_charge / unit.elementary_charge).m > 0.0: # Redistribute excess charge proportionally to absolute charge - molecule.partial_charges += charge_deficit * abs(molecule.partial_charges) / sum_of_absolute_charge + molecule.partial_charges = molecule.partial_charges + charge_deficit * abs(molecule.partial_charges) / sum_of_absolute_charge _logger.debug(f'{molecule.partial_charges}') # Generate additional parameters if needed # TODO: Do we have to make sure that we don't duplicate existing parameters already loaded in the forcefield? _logger.debug(f'Creating ffxml contents for additional parameters...') - from inspect import signature # use introspection to support multiple parmed versions + from inspect import ( + signature, # use introspection to support multiple parmed versions + ) from io import StringIO leaprc = StringIO('parm = loadamberparams %s' % frcmod_filename) import parmed @@ -664,7 +675,7 @@ def generate_residue_template(self, molecule, residue_atoms=None): residues = etree.SubElement(root, "Residues") residue = etree.SubElement(residues, "Residue", name=smiles) for atom in molecule.atoms: - atom = etree.SubElement(residue, "Atom", name=atom.name, type=atom.gaff_type, charge=str(atom.partial_charge / unit.elementary_charge)) + atom = etree.SubElement(residue, "Atom", name=atom.name, type=atom.gaff_type, charge=str(atom.partial_charge.m_as(unit.elementary_charge))) for bond in molecule.bonds: if (bond.atom1 in residue_atoms) and (bond.atom2 in residue_atoms): bond = etree.SubElement(residue, "Bond", atomName1=bond.atom1.name, atomName2=bond.atom2.name) @@ -718,13 +729,14 @@ def _run_antechamber(self, molecule_filename, input_format='sdf', frcmod_filename = os.path.abspath( frcmod_filename ) def read_file_contents(filename): - infile = open(filename, 'r') + infile = open(filename) contents = infile.read() infile.close() return contents # Use temporary directory context to do this to avoid issues with spaces in filenames, etc. - import tempfile, subprocess + import subprocess + import tempfile with tempfile.TemporaryDirectory() as tmpdir: cwd = os.getcwd() os.chdir(tmpdir) @@ -815,7 +827,7 @@ def _read_gaff_atom_types_from_mol2(self, gaff_mol2_filename, molecule): # 1 C1 1.8850 -1.0360 -0.1120 ca 1 MOL 0.000000 # 012345678901234567890123456789012345678901234567890123456789012345678901234567890 # 0 1 2 3 4 5 6 7 8 - with open(gaff_mol2_filename, 'r') as infile: + with open(gaff_mol2_filename) as infile: line = infile.readline() # Seek to ATOM block while line: @@ -880,7 +892,7 @@ def _check_for_errors(self, outputtext, other_errors=None, ignore_errors=None): # MixIn for force field template generators that produce OpenMM System objects ################################################################################ -class OpenMMSystemMixin(object): +class OpenMMSystemMixin: """ """ def clear_system_cache(self): @@ -937,34 +949,46 @@ def convert_system_to_ffxml(self, molecule, system, improper_atom_ordering='smir ffxml_contents : str The OpenMM ffxml contents for the given molecule. """ + # OpenFF Toolkit v0.11.0 removed Atom.element and replced it with Atom.symbol, etc. + uses_old_api = hasattr(molecule.atoms[0], "element") # Generate OpenMM ffxml definition for this molecule from lxml import etree root = etree.Element("ForceField") def as_attrib(quantity): - """Format openmm.unit.Quantity as XML attribute.""" + """Format openff.units.Quantity or openmm.unit.Quantity as XML attribute.""" + import openff.units + if isinstance(quantity, str): return quantity - elif isinstance(quantity, float) or isinstance(quantity, int): + elif isinstance(quantity, (float, int)): return str(quantity) + elif isinstance(quantity, openff.units.Quantity): + # TODO: Match behavior of Quantity.value_in_unit_system + return str(quantity.m) else: - from openmm import unit - return str(quantity.value_in_unit_system(unit.md_unit_system)) + from openmm.unit import Quantity as OpenMMQuantity + if isinstance(quantity, OpenMMQuantity): + from openmm import unit + return str(quantity.value_in_unit_system(unit.md_unit_system)) + else: + raise ValueError(f"Found unexpected type {type(quantity)}.") # Append unique type names to atoms smiles = molecule.to_smiles() - for index, particle in enumerate(molecule.particles): - setattr(particle, 'typename', f'{smiles}${particle.name}#{index}') + for index, atom in enumerate(molecule.atoms): + setattr(atom, 'typename', f'{smiles}${atom.name}#{index}') # Generate atom types atom_types = etree.SubElement(root, "AtomTypes") - for particle_index, particle in enumerate(molecule.particles): + for atom_index, atom in enumerate(molecule.atoms): # Create a new atom type for each atom in the molecule - paricle_indices = [particle_index] - atom_type = etree.SubElement(atom_types, "Type", name=particle.typename, - element=particle.element.symbol, mass=as_attrib(particle.element.mass)) - atom_type.set('class', particle.typename) # 'class' is a reserved Python keyword, so use alternative API + paricle_indices = [atom_index] + element_symbol = atom.element.symbol if uses_old_api else atom.symbol + atom_type = etree.SubElement(atom_types, "Type", name=atom.typename, + element=element_symbol, mass=as_attrib(atom.mass)) + atom_type.set('class', atom.typename) # 'class' is a reserved Python keyword, so use alternative API # Compile forces into a dict forces = dict() @@ -974,53 +998,53 @@ def as_attrib(quantity): raise Exception("Two instances of force {force_name} appear in System") forces[force_name] = force - def classes(particle_indices): + def classes(atom_indices): """Build a dict of 'class#=typename' for use in creating XML tags for forces. Parameters ---------- - particle_indices : list of int - Particle indices for molecule.particles + atom_indices : list of int + Particle indices for molecule.atoms Returns ------- classmap : dict of str : str Dict of format { 'class1' : typename1, ... } """ - return { f'class{class_index+1}' : molecule.particles[particle_index].typename for class_index,particle_index in enumerate(particle_indices) } + return { f'class{class_index+1}' : molecule.atoms[atom_index].typename for class_index,atom_index in enumerate(atom_indices) } # Lennard-Jones # TODO: Get coulomb14scale and lj14scale from SMIRNOFF ForceField object, # though this must match the original AMBER values nonbonded_types = etree.SubElement(root, "NonbondedForce", coulomb14scale="0.833333", lj14scale="0.5") etree.SubElement(nonbonded_types, "UseAttributeFromResidue", name="charge") - for particle_index in range(forces['NonbondedForce'].getNumParticles()): - charge, sigma, epsilon = forces['NonbondedForce'].getParticleParameters(particle_index) + for atom_index in range(forces['NonbondedForce'].getNumParticles()): + charge, sigma, epsilon = forces['NonbondedForce'].getParticleParameters(atom_index) nonbonded_type = etree.SubElement(nonbonded_types, "Atom", sigma=as_attrib(sigma), epsilon=as_attrib(epsilon)) - nonbonded_type.set('class', molecule.particles[particle_index].typename) # 'class' is a reserved Python keyword, so use alternative API + nonbonded_type.set('class', molecule.atoms[atom_index].typename) # 'class' is a reserved Python keyword, so use alternative API # Bonds bond_types = etree.SubElement(root, "HarmonicBondForce") - particle_indices = [-1]*2 + atom_indices = [-1]*2 for bond_index in range(forces['HarmonicBondForce'].getNumBonds()): - particle_indices[0], particle_indices[1], length, k = forces['HarmonicBondForce'].getBondParameters(bond_index) - bond_type = etree.SubElement(bond_types, "Bond", **classes(particle_indices), + atom_indices[0], atom_indices[1], length, k = forces['HarmonicBondForce'].getBondParameters(bond_index) + bond_type = etree.SubElement(bond_types, "Bond", **classes(atom_indices), length=as_attrib(length), k=as_attrib(k)) # Angles angle_types = etree.SubElement(root, "HarmonicAngleForce") - particle_indices = [-1]*3 + atom_indices = [-1]*3 for angle_index in range(forces['HarmonicAngleForce'].getNumAngles()): - particle_indices[0], particle_indices[1], particle_indices[2], angle, k = forces['HarmonicAngleForce'].getAngleParameters(angle_index) - angle_type = etree.SubElement(angle_types, "Angle", **classes(particle_indices), + atom_indices[0], atom_indices[1], atom_indices[2], angle, k = forces['HarmonicAngleForce'].getAngleParameters(angle_index) + angle_type = etree.SubElement(angle_types, "Angle", **classes(atom_indices), angle=as_attrib(angle), k=as_attrib(k)) # Torsions - def torsion_tag(particle_indices): + def torsion_tag(atom_indices): """Return 'Proper' or 'Improper' depending on torsion type""" - atoms = [ molecule.particles[particle_index] for particle_index in particle_indices ] - # TODO: Check to make sure all particles are in fact atoms and not virtual sites + atoms = [ molecule.atoms[atom_index] for atom_index in atom_indices ] + # TODO: Check to make sure all atoms are in fact atoms and not virtual sites if atoms[0].is_bonded_to(atoms[1]) and atoms[1].is_bonded_to(atoms[2]) and atoms[2].is_bonded_to(atoms[3]): return "Proper" else: @@ -1029,39 +1053,38 @@ def torsion_tag(particle_indices): # Collect torsions torsions = dict() for torsion_index in range(forces['PeriodicTorsionForce'].getNumTorsions()): - particle_indices = [-1]*4 - particle_indices[0], particle_indices[1], particle_indices[2], particle_indices[3], periodicity, phase, k = forces['PeriodicTorsionForce'].getTorsionParameters(torsion_index) - particle_indices = tuple(particle_indices) - if particle_indices in torsions.keys(): - torsions[particle_indices].append( (periodicity, phase, k) ) + atom_indices = [-1]*4 + atom_indices[0], atom_indices[1], atom_indices[2], atom_indices[3], periodicity, phase, k = forces['PeriodicTorsionForce'].getTorsionParameters(torsion_index) + atom_indices = tuple(atom_indices) + if atom_indices in torsions.keys(): + torsions[atom_indices].append( (periodicity, phase, k) ) else: - torsions[particle_indices] = [ (periodicity, phase, k) ] + torsions[atom_indices] = [ (periodicity, phase, k) ] # Create torsion definitions torsion_types = etree.SubElement(root, "PeriodicTorsionForce", ordering='smirnoff') - for particle_indices in torsions.keys(): + for atom_indices in torsions.keys(): params = dict() # build parameter dictionary - nterms = len(torsions[particle_indices]) + nterms = len(torsions[atom_indices]) for term in range(nterms): - periodicity, phase, k = torsions[particle_indices][term] + periodicity, phase, k = torsions[atom_indices][term] params[f'periodicity{term+1}'] = as_attrib(periodicity) params[f'phase{term+1}'] = as_attrib(phase) params[f'k{term+1}'] = as_attrib(k) - torsion_type = etree.SubElement(torsion_types, torsion_tag(particle_indices), **classes(particle_indices), **params) + torsion_type = etree.SubElement(torsion_types, torsion_tag(atom_indices), **classes(atom_indices), **params) # TODO: Handle virtual sites - virtual_sites = [ particle_index for particle_index in range(system.getNumParticles()) if system.isVirtualSite(particle_index) ] + virtual_sites = [ atom_index for atom_index in range(system.getNumParticles()) if system.isVirtualSite(atom_index) ] if len(virtual_sites) > 0: raise Exception('Virtual sites are not yet supported') # Create residue definitions - # TODO: Handle non-Atom particles too (virtual sites) - from openmm import unit + # TODO: Handle non-Atom atoms too (virtual sites) residues = etree.SubElement(root, "Residues") residue = etree.SubElement(residues, "Residue", name=smiles) - for particle_index, particle in enumerate(molecule.particles): - charge, sigma, epsilon = forces['NonbondedForce'].getParticleParameters(particle_index) - atom = etree.SubElement(residue, "Atom", name=particle.name, type=particle.typename, charge=as_attrib(charge)) + for atom_index, atom in enumerate(molecule.atoms): + charge, sigma, epsilon = forces['NonbondedForce'].getParticleParameters(atom_index) + atom = etree.SubElement(residue, "Atom", name=atom.name, type=atom.typename, charge=as_attrib(charge)) for bond in molecule.bonds: bond = etree.SubElement(residue, "Bond", atomName1=bond.atom1.name, atomName2=bond.atom2.name) @@ -1235,7 +1258,7 @@ def __init__(self, molecules=None, cache=None, forcefield=None): @ClassProperty @classmethod def INSTALLED_FORCEFIELDS(cls): - """Return a list of the offxml files shipped with the openfff-forcefields package. + """Return a list of the offxml files shipped with the openff-forcefields package. Returns ------- @@ -1253,7 +1276,7 @@ def INSTALLED_FORCEFIELDS(cls): for filename in get_available_force_fields(full_paths=False): root, ext = os.path.splitext(filename) # Only add variants without '_unconstrained' - if '_unconstrained' not in root: + if '_unconstrained' in root: continue # The OpenFF Toolkit ships two versions of its ff14SB port, one with SMIRNOFF-style # impropers and one with Amber-style impropers. The latter requires a special handler @@ -1286,8 +1309,9 @@ def _search_paths(self, filename): """ # TODO: Replace this method once there is a public API in the OpenFF toolkit for doing this - from openff.toolkit.utils import get_data_file_path - from openff.toolkit.typing.engines.smirnoff.forcefield import _get_installed_offxml_dir_paths + from openff.toolkit.typing.engines.smirnoff.forcefield import ( + _get_installed_offxml_dir_paths, + ) # Check whether this could be a file path if isinstance(filename, str): @@ -1346,6 +1370,7 @@ def generate_residue_template(self, molecule, residue_atoms=None): # Determine which molecules (if any) contain user-specified partial charges that should be used charge_from_molecules = list() + if self._molecule_has_user_charges(molecule): charge_from_molecules = [molecule] _logger.debug(f'Using user-provided charges because partial charges are nonzero...') @@ -1559,7 +1584,7 @@ def _get_model_filepath(self, forcefield): else: # Identify version number import re - m = re.match('espaloma-(\d+\.\d+\.\d+)', forcefield) + m = re.match(r'espaloma-(\d+\.\d+\.\d+)', forcefield) if m is None: raise ValueError(f'Espaloma model must be filepath or formatted like "espaloma-0.2.2" (found: "{forcefield}")') version = m.group(1) @@ -1579,7 +1604,9 @@ def _get_model_filepath(self, forcefield): # Attempt to retrieve from URL _logger.info(f'Attempting to retrieve espaloma model from {url}') - import urllib, urllib.error, urllib.request + import urllib + import urllib.error + import urllib.request try: urllib.request.urlretrieve(url, filename=cached_filename) except urllib.error.URLError as e: diff --git a/openmmforcefields/tests/__init__.py b/openmmforcefields/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/openmmforcefields/tests/test_amber_import.py b/openmmforcefields/tests/test_amber_import.py index 16cc7ad9..38024c38 100644 --- a/openmmforcefields/tests/test_amber_import.py +++ b/openmmforcefields/tests/test_amber_import.py @@ -2,13 +2,16 @@ Test AMBER forcefield imports. """ +import pathlib +from typing import List -import os -import glob import pytest from openmmforcefields.utils import get_ffxml_path -amber_ffxml_filenames = [ os.path.join('amber', os.path.split(filename)[1]) for filename in glob.glob(os.path.join(get_ffxml_path(), 'amber', '*.xml')) ] + +amber_ffxml_filenames: List[str] = [ + 'amber/' + file.name for file in pathlib.Path(get_ffxml_path()).glob("amber/*xml") +] @pytest.mark.parametrize("filename", amber_ffxml_filenames, ids=lambda filename : f'Importing ffxml file {filename}') def test_ffxml_import(filename): diff --git a/openmmforcefields/tests/test_system_generator.py b/openmmforcefields/tests/test_system_generator.py index 591b2f49..7e24e40a 100644 --- a/openmmforcefields/tests/test_system_generator.py +++ b/openmmforcefields/tests/test_system_generator.py @@ -1,11 +1,16 @@ -import os, sys -import unittest +import copy +import os import tempfile -import pytest +import unittest -from openmmforcefields.utils import get_data_filename +import numpy as np +import openmm +import pytest +from openff.toolkit.topology import Molecule +from openmm.app import LJPME, PME, CutoffNonPeriodic, Modeller, PDBFile from openmmforcefields.generators import SystemGenerator +from openmmforcefields.utils import Timer, get_data_filename CI = ('CI' in os.environ) @@ -57,12 +62,10 @@ def setUp(self): #('tyk2', 'Tyk2'), ]: # Load protein - from openmm.app import PDBFile pdb_filename = get_data_filename(os.path.join('perses_jacs_systems', system_name, prefix + '_protein.pdb')) pdbfile = PDBFile(pdb_filename) # Load molecules - from openff.toolkit.topology import Molecule sdf_filename = get_data_filename(os.path.join('perses_jacs_systems', system_name, prefix + '_ligands_shifted.sdf')) molecules = Molecule.from_file(sdf_filename, allow_undefined_stereo=True) @@ -78,6 +81,7 @@ def setUp(self): # Create structures import parmed + # NOTE: This does not work because parmed does not correctly assign bonds for HID #protein_structure = parmed.load_file(pdb_filename) # NOTE: This is the workaround @@ -100,13 +104,12 @@ def setUp(self): # DEBUG for name, testsystem in self.testsystems.items(): - from openmm import app filename = f'testsystem-{name}.pdb' print(filename) structure = testsystem['complex_structures'][0] #structure.save(filename, overwrite=True) with open(filename, 'w') as outfile: - app.PDBFile.writeFile(structure.topology, structure.positions, outfile) + PDBFile.writeFile(structure.topology, structure.positions, outfile) testsystem['molecules'][0].to_file(f'testsystem-{name}-molecule.sdf', file_format="SDF") testsystem['molecules'][0].to_file(f'testsystem-{name}-molecule.pdb', file_format="PDB") @@ -132,29 +135,25 @@ def test_barostat(self): generator = SystemGenerator(forcefields=self.amber_forcefields) # Create a template barostat - from openmm import MonteCarloBarostat - from openmm import unit + from openmm import MonteCarloBarostat, unit pressure = 0.95 * unit.atmospheres temperature = 301.0 * unit.kelvin frequency = 23 generator.barostat = MonteCarloBarostat(pressure, temperature, frequency) # Load a PDB file - import os - from openmm.app import PDBFile + pdb_filename = get_data_filename(os.path.join('perses_jacs_systems', 'mcl1', 'MCL1_protein.pdb')) pdbfile = PDBFile(pdb_filename) # Delete hydrogens from terminal protein residues # TODO: Fix the input files so we don't need to do this - from openmm import app - modeller = app.Modeller(pdbfile.topology, pdbfile.positions) + modeller = Modeller(pdbfile.topology, pdbfile.positions) residues = [residue for residue in modeller.topology.residues() if residue.name != 'UNL'] termini_ids = [residues[0].id, residues[-1].id] #hs = [atom for atom in modeller.topology.atoms() if atom.element.symbol in ['H'] and atom.residue.name != 'UNL'] hs = [atom for atom in modeller.topology.atoms() if atom.element.symbol in ['H'] and atom.residue.id in termini_ids] modeller.delete(hs) - from openmm.app import PDBFile modeller.addHydrogens() # Create a System @@ -203,8 +202,6 @@ def test_forcefield_default_kwargs(self): SMALL_MOLECULE_FORCEFIELDS = SystemGenerator.SMALL_MOLECULE_FORCEFIELDS if not CI else ['gaff-2.11', 'openff-2.0.0', 'espaloma-0.2.2'] for small_molecule_forcefield in SMALL_MOLECULE_FORCEFIELDS: # Create a SystemGenerator for this force field - from simtk import openmm - from openmm import app generator = SystemGenerator(forcefields=self.amber_forcefields, small_molecule_forcefield=small_molecule_forcefield, forcefield_kwargs=forcefield_kwargs, @@ -219,8 +216,6 @@ def test_forcefield_default_kwargs(self): assert forces['NonbondedForce'].getNonbondedMethod() == openmm.NonbondedForce.NoCutoff, "Expected CutoffNonPeriodic, got {forces['NonbondedForce'].getNonbondedMethod()}" # Create periodic Topology - import numpy as np - import copy box_vectors = unit.Quantity(np.diag([30, 30, 30]), unit.angstrom) periodic_openmm_topology = copy.deepcopy(nonperiodic_openmm_topology) periodic_openmm_topology.setPeriodicBoxVectors(box_vectors) @@ -237,8 +232,7 @@ def test_forcefield_kwargs(self): # Test exception is raised with pytest.raises(ValueError) as excinfo: # Not allowed to specify nonbondedMethod in forcefield_kwargs - from openmm import app - generator = SystemGenerator(forcefield_kwargs={'nonbondedMethod':app.PME}) + generator = SystemGenerator(forcefield_kwargs={'nonbondedMethod':PME}) assert "nonbondedMethod cannot be specified in forcefield_kwargs" in str(excinfo.value) for name, testsystem in self.testsystems.items(): @@ -248,13 +242,11 @@ def test_forcefield_kwargs(self): SMALL_MOLECULE_FORCEFIELDS = SystemGenerator.SMALL_MOLECULE_FORCEFIELDS if not CI else ['gaff-2.11', 'openff-2.0.0', 'espaloma-0.2.2'] for small_molecule_forcefield in SMALL_MOLECULE_FORCEFIELDS: # Create a SystemGenerator for this force field - from simtk import openmm - from openmm import app generator = SystemGenerator(forcefields=self.amber_forcefields, small_molecule_forcefield=small_molecule_forcefield, forcefield_kwargs=forcefield_kwargs, - periodic_forcefield_kwargs={'nonbondedMethod':app.LJPME}, - nonperiodic_forcefield_kwargs={'nonbondedMethod':app.CutoffNonPeriodic}, + periodic_forcefield_kwargs={'nonbondedMethod':LJPME}, + nonperiodic_forcefield_kwargs={'nonbondedMethod':CutoffNonPeriodic}, molecules=molecules) # Parameterize molecules @@ -266,8 +258,6 @@ def test_forcefield_kwargs(self): assert forces['NonbondedForce'].getNonbondedMethod() == openmm.NonbondedForce.CutoffNonPeriodic, "Expected CutoffNonPeriodic, got {forces['NonbondedForce'].getNonbondedMethod()}" # Create periodic Topology - import numpy as np - import copy box_vectors = unit.Quantity(np.diag([30, 30, 30]), unit.angstrom) periodic_openmm_topology = copy.deepcopy(nonperiodic_openmm_topology) periodic_openmm_topology.setPeriodicBoxVectors(box_vectors) @@ -277,8 +267,6 @@ def test_forcefield_kwargs(self): def test_parameterize_molecules_from_creation(self): """Test that SystemGenerator can parameterize pre-specified molecules in vacuum""" - from openmmforcefields.generators import SystemGenerator - for name, testsystem in self.testsystems.items(): print(testsystem) molecules = testsystem['molecules'] @@ -291,7 +279,6 @@ def test_parameterize_molecules_from_creation(self): molecules=molecules) # Parameterize molecules - from openmmforcefields.utils import Timer for molecule in molecules: openmm_topology = molecule.to_topology().to_openmm() with Timer() as t1: @@ -305,8 +292,6 @@ def test_parameterize_molecules_from_creation(self): def test_parameterize_molecules_specified_during_create_system(self): """Test that SystemGenerator can parameterize molecules specified during create_system""" - from openmmforcefields.generators import SystemGenerator - for name, testsystem in self.testsystems.items(): molecules = testsystem['molecules'] @@ -317,7 +302,6 @@ def test_parameterize_molecules_specified_during_create_system(self): small_molecule_forcefield=small_molecule_forcefield) # Parameterize molecules - from openmmforcefields.utils import Timer for molecule in molecules: openmm_topology = molecule.to_topology().to_openmm() # Specify molecules during system creation @@ -325,8 +309,6 @@ def test_parameterize_molecules_specified_during_create_system(self): def test_add_molecules(self): """Test that Molecules can be added to SystemGenerator later""" - from openmmforcefields.generators import SystemGenerator - SMALL_MOLECULE_FORCEFIELDS = SystemGenerator.SMALL_MOLECULE_FORCEFIELDS if not CI else ['gaff-2.11', 'openff-2.0.0', 'espaloma-0.2.2'] for small_molecule_forcefield in SMALL_MOLECULE_FORCEFIELDS: # Create a SystemGenerator for this force field @@ -341,7 +323,6 @@ def test_add_molecules(self): generator.add_molecules(molecules) # Parameterize molecules - from openmmforcefields.utils import Timer for molecule in molecules: openmm_topology = molecule.to_topology().to_openmm() with Timer() as t1: @@ -355,9 +336,6 @@ def test_add_molecules(self): def test_cache(self): """Test that SystemGenerator correctly manages a cache""" - from openmmforcefields.generators import SystemGenerator - from openmmforcefields.utils import Timer - timing = dict() # timing[(small_molecule_forcefield, smiles)] is the time (in seconds) to parameterize molecule the first time with tempfile.TemporaryDirectory() as tmpdirname: # Create a single shared cache for all force fields @@ -406,8 +384,9 @@ def test_cache(self): def test_complex(self): """Test parameterizing a protein:ligand complex in vacuum""" - from openmmforcefields.generators import SystemGenerator for name, testsystem in self.testsystems.items(): + from openmm import unit + print(f'Testing parameterization of {name} in vacuum') molecules = testsystem['molecules'] # Select a complex from the set @@ -424,9 +403,7 @@ def test_complex(self): assert system.getNumParticles() == len(complex_structure.atoms) # Create solvated structure - from openmm import app - from openmm import unit - modeller = app.Modeller(complex_structure.topology, complex_structure.positions) + modeller = Modeller(complex_structure.topology, complex_structure.positions) modeller.addSolvent(generator.forcefield, padding=0*unit.angstroms, ionicStrength=300*unit.millimolar) # Create a system with solvent and ions @@ -434,4 +411,4 @@ def test_complex(self): assert system.getNumParticles() == len(list(modeller.topology.atoms())) with open('test.pdb', 'w') as outfile: - app.PDBFile.writeFile(modeller.topology, modeller.positions, outfile) + PDBFile.writeFile(modeller.topology, modeller.positions, outfile) diff --git a/openmmforcefields/tests/test_template_generators.py b/openmmforcefields/tests/test_template_generators.py index 24e93947..fca6a582 100644 --- a/openmmforcefields/tests/test_template_generators.py +++ b/openmmforcefields/tests/test_template_generators.py @@ -1,14 +1,23 @@ -import os, sys -import unittest +import copy +import logging +import os import tempfile +import unittest +import numpy as np +import openmm +from openff.toolkit import __version__ as toolkit_version +from openff.toolkit.topology import Molecule +from openmm.app import PME, ForceField, Modeller, NoCutoff, PDBFile +from packaging.version import Version + +from openmmforcefields.generators import ( + EspalomaTemplateGenerator, + GAFFTemplateGenerator, + SMIRNOFFTemplateGenerator, +) from openmmforcefields.utils import get_data_filename -from openmmforcefields.generators import GAFFTemplateGenerator -from openmmforcefields.generators import SMIRNOFFTemplateGenerator -from openmmforcefields.generators import EspalomaTemplateGenerator - -import logging _logger = logging.getLogger("openmmforcefields.tests.test_template_generators") CI = ('CI' in os.environ) @@ -42,24 +51,23 @@ def filter_molecules(self, molecules): MAX_ATOMS = 40 molecules = [ molecule for molecule in molecules if molecule.n_atoms < MAX_ATOMS ] # Cut down number of tests for continuous integration - import os MAX_MOLECULES = 50 if not CI else 4 molecules = molecules[:MAX_MOLECULES] return molecules def setUp(self): - # TODO: Harmonize with test_system_generator.py infrastructure + from openff.units import unit + # TODO: Harmonize with test_system_generator.py infrastructure # Read test molecules - from openff.toolkit.topology import Molecule filename = get_data_filename("minidrugbank/MiniDrugBank-without-unspecified-stereochemistry.sdf") molecules = Molecule.from_file(filename, allow_undefined_stereo=True) # DEBUG: Insert acetone perturbed from planarity as first test molecule, since it fails quickly if something is wrong molecule = Molecule.from_smiles('C=O') molecule.generate_conformers(n_conformers=1) - from simtk import unit + molecule.conformers[0][0,0] += 0.1*unit.angstroms molecules.insert(0, molecule) # DEBUG END @@ -77,7 +85,7 @@ def test_version(self): for forcefield in GAFFTemplateGenerator.INSTALLED_FORCEFIELDS: generator = GAFFTemplateGenerator(forcefield=forcefield) import re - result = re.match('^gaff-(?P\d+)\.(?P\d+)$', forcefield) + result = re.match(r'^gaff-(?P\d+)\.(?P\d+)$', forcefield) assert generator.forcefield == forcefield assert generator.gaff_version == result['major_version'] + '.' + result['minor_version'] assert generator.gaff_major_version == result['major_version'] @@ -108,14 +116,12 @@ def test_add_molecules(self): # Create a generator that does not know about any molecules generator = self.TEMPLATE_GENERATOR() # Create a ForceField - from openmm.app import ForceField forcefield = ForceField() # Register the template generator forcefield.registerTemplateGenerator(generator.generator) # Check that parameterizing a molecule fails molecule = self.molecules[0] - from openmm.app import NoCutoff try: # This should fail with an exception openmm_topology = molecule.to_topology().to_openmm() @@ -131,8 +137,8 @@ def test_add_molecules(self): system = forcefield.createSystem(openmm_topology, nonbondedMethod=NoCutoff) except Exception as e: print(forcefield._atomTypes.keys()) - from openmm.app import PDBFile - PDBFile.writeFile(openmm_topology, molecule.conformers[0]) + from openff.units.openmm import to_openmm + PDBFile.writeFile(openmm_topology, to_openmm(molecule.conformers[0])) raise e assert system.getNumParticles() == molecule.n_atoms @@ -155,11 +161,10 @@ def charges_from_system(self, system): Returns ------- - charges : np.array of shape [n_particles] + charges : np.array of shape [n_atoms] The dimensionless partial charges (implicitly in units of elementary_charge) """ - import numpy as np from openmm import unit system_charges = list() forces = { force.__class__.__name__ : force for force in system.getForces() } @@ -185,15 +190,15 @@ def charges_are_equal(self, system, molecule): result : bool True if the partial charges are equal, False if not """ - assert system.getNumParticles() == molecule.n_particles + from openff.units import unit - system_charges = self.charges_from_system(system) + assert system.getNumParticles() == molecule.n_atoms - from openmm import unit - molecule_charges = molecule.partial_charges / unit.elementary_charge + system_charges: np.ndarray = self.charges_from_system(system) + molecule_charges: np.ndarray = molecule.partial_charges.m_as(unit.elementary_charge) - import numpy as np result = np.allclose(system_charges, molecule_charges) + if not result: _logger.info('Charges are not equal') _logger.info(f'system charges : {system_charges}') @@ -206,13 +211,11 @@ def test_charge(self): # Create a generator that does not know about any molecules generator = self.TEMPLATE_GENERATOR() # Create a ForceField - from openmm.app import ForceField forcefield = ForceField() # Register the template generator forcefield.registerTemplateGenerator(generator.generator) # Check that parameterizing a molecule using user-provided charges produces expected charges - import numpy as np from openmm import unit molecule = self.molecules[0] # Ensure partial charges are initially zero @@ -220,7 +223,6 @@ def test_charge(self): # Add the molecule generator.add_molecules(molecule) # Create the System - from openmm.app import NoCutoff openmm_topology = molecule.to_topology().to_openmm() system = forcefield.createSystem(openmm_topology, nonbondedMethod=NoCutoff) # Ensure charges are no longer zero @@ -228,32 +230,34 @@ def test_charge(self): def test_charge_from_molecules(self): """Test that user-specified partial charges are used if requested""" + from openff.units import unit + + if Version(toolkit_version) < Version("0.11.0"): + self.skipTest("Test written with new toolkit API") + # Create a generator that does not know about any molecules generator = self.TEMPLATE_GENERATOR() # Create a ForceField - from openmm.app import ForceField forcefield = ForceField() # Register the template generator forcefield.registerTemplateGenerator(generator.generator) # Check that parameterizing a molecule using user-provided charges produces expected charges - import numpy as np - from openmm import unit + molecule = self.molecules[0] - charges = np.random.random([molecule.n_particles]) - total_charge = molecule.total_charge - if type(total_charge) is unit.Quantity: - # Handle openforcefield >= 0.7.0 - total_charge /= unit.elementary_charge - charges += (total_charge - charges.sum()) / molecule.n_particles - molecule.partial_charges = unit.Quantity(charges, unit.elementary_charge) - assert (molecule.partial_charges is not None) and not np.all(molecule.partial_charges / unit.elementary_charge == 0) - # Add the molecule + + # Populate the molecule with arbitrary partial charges that still sum to 0.0 + molecule.partial_charges = unit.Quantity( + np.linspace(-0.5, 0.5, molecule.n_atoms), + unit.elementary_charge, + ) + + assert (molecule.partial_charges is not None) and not np.all(molecule.partial_charges.m_as(unit.elementary_charge) == 0) + generator.add_molecules(molecule) - # Create the System - from openmm.app import NoCutoff - openmm_topology = molecule.to_topology().to_openmm() - system = forcefield.createSystem(openmm_topology, nonbondedMethod=NoCutoff) + + system = forcefield.createSystem(molecule.to_topology().to_openmm(), nonbondedMethod=NoCutoff) + assert self.charges_are_equal(system, molecule) def test_debug_ffxml(self): @@ -265,12 +269,10 @@ def test_debug_ffxml(self): molecule = self.molecules[0] generator = self.TEMPLATE_GENERATOR(molecules=molecule, cache=cache) # Create a ForceField - from openmm.app import ForceField forcefield = ForceField() # Register the template generator forcefield.registerTemplateGenerator(generator.generator) # Ensure no file is created - from openmm.app import NoCutoff openmm_topology = molecule.to_topology().to_openmm() system = forcefield.createSystem(openmm_topology, nonbondedMethod=NoCutoff) assert not os.path.exists(debug_ffxml_filename) @@ -292,7 +294,6 @@ def test_debug_ffxml(self): def test_cache(self): """Test template generator cache capability""" - from openmm.app import ForceField, NoCutoff with tempfile.TemporaryDirectory() as tmpdirname: # Create a generator that also has a database cache cache = os.path.join(tmpdirname, 'db.json') @@ -325,7 +326,7 @@ def check_cache(generator, n_expected): db.close() n_entries = len(db_entries) assert (n_entries == n_expected), \ - "Expected {} entries but database has {}\n db contents: {}".format(n_expected, n_entries, db_entries) + f"Expected {n_expected} entries but database has {n_entries}\n db contents: {db_entries}" check_cache(generator, len(self.molecules)) @@ -349,13 +350,12 @@ def check_cache(generator, n_expected): def test_add_solvent(self): """Test using openmm.app.Modeller to add solvent to a small molecule parameterized by template generator""" # Select a molecule to add solvent around - from openmm.app import NoCutoff, Modeller + from openff.units.openmm import to_openmm from openmm import unit molecule = self.molecules[0] openmm_topology = molecule.to_topology().to_openmm() - openmm_positions = molecule.conformers[0] + openmm_positions = to_openmm(molecule.conformers[0]) # Try adding solvent without residue template generator; this will fail - from openmm.app import ForceField forcefield = ForceField('tip3p.xml') # Add solvent to a system containing a small molecule modeller = Modeller(openmm_topology, openmm_positions) @@ -374,7 +374,6 @@ def test_add_solvent(self): def test_jacs_ligands(self): """Use template generator to parameterize the Schrodinger JACS set of ligands""" - from openmm.app import ForceField, NoCutoff jacs_systems = { #'bace' : { 'prefix' : 'Bace' }, #'cdk2' : { 'prefix' : 'CDK2' }, @@ -390,7 +389,6 @@ def test_jacs_ligands(self): # Load molecules ligand_sdf_filename = get_data_filename(os.path.join('perses_jacs_systems', system_name, prefix + '_ligands.sdf')) print(f'Reading molecules from {ligand_sdf_filename} ...') - from openff.toolkit.topology import Molecule molecules = Molecule.from_file(ligand_sdf_filename, allow_undefined_stereo=True) # Ensure this is a list try: @@ -445,7 +443,6 @@ def test_jacs_complexes(self): # Read molecules ligand_sdf_filename = get_data_filename(os.path.join('perses_jacs_systems', system_name, prefix + '_ligands.sdf')) print(f'Reading molecules from {ligand_sdf_filename} ...') - from openff.toolkit.topology import Molecule molecules = Molecule.from_file(ligand_sdf_filename, allow_undefined_stereo=True) try: nmolecules = len(molecules) @@ -457,7 +454,6 @@ def test_jacs_complexes(self): import parmed from openmm import unit protein_pdb_filename = get_data_filename(os.path.join('perses_jacs_systems', system_name, prefix + '_protein.pdb')) - from openmm.app import PDBFile print(f'Reading protein from {protein_pdb_filename} ...') #protein_structure = parmed.load_file(protein_pdb_filename) # NOTE: This mis-interprets distorted geometry and sequentially-numbered residues that span chain breaks pdbfile = PDBFile(protein_pdb_filename) @@ -483,7 +479,6 @@ def test_jacs_complexes(self): generator = self.TEMPLATE_GENERATOR(molecules=molecules, cache=cache) # Create a ForceField - from openmm.app import ForceField forcefield = ForceField(*self.amber_forcefields) # Register the template generator forcefield.registerTemplateGenerator(generator.generator) @@ -503,17 +498,14 @@ def test_jacs_complexes(self): #hs = [atom for atom in modeller.topology.atoms() if atom.element.symbol in ['H'] and atom.residue.name != 'UNL'] hs = [atom for atom in modeller.topology.atoms() if atom.element.symbol in ['H'] and atom.residue.id in termini_ids] modeller.delete(hs) - from openmm.app import PDBFile modeller.addHydrogens(forcefield) # Parameterize protein:ligand complex in vacuum print(f' Parameterizing {system_name} : {molecule.to_smiles()} in vacuum...') - from openmm.app import NoCutoff forcefield.createSystem(modeller.topology, nonbondedMethod=NoCutoff) # Parameterize protein:ligand complex in solvent print(f' Parameterizing {system_name} : {molecule.to_smiles()} in explicit solvent...') - from openmm.app import PME modeller.addSolvent(forcefield, padding=0*unit.angstroms, ionicStrength=300*unit.millimolar) forcefield.createSystem(modeller.topology, nonbondedMethod=PME) @@ -521,6 +513,8 @@ def test_parameterize(self): """Test parameterizing molecules with template generator for all supported force fields""" # Test all supported small molecule force fields for small_molecule_forcefield in self.TEMPLATE_GENERATOR.INSTALLED_FORCEFIELDS: + if "ff14sb" in small_molecule_forcefield: + continue print(f'Testing {small_molecule_forcefield}') # Create a generator that knows about a few molecules # TODO: Should the generator also load the appropriate force field files into the ForceField object? @@ -528,12 +522,11 @@ def test_parameterize(self): # Check that we have loaded the right force field assert generator.forcefield == small_molecule_forcefield # Create a ForceField with the appropriate small molecule force field - from openmm.app import ForceField forcefield = ForceField() # Register the template generator forcefield.registerTemplateGenerator(generator.generator) # Parameterize some molecules - from openmm.app import NoCutoff + from openmmforcefields.utils import Timer for molecule in self.molecules: openmm_topology = molecule.to_topology().to_openmm() @@ -549,7 +542,6 @@ def test_parameterize(self): def test_multiple_registration(self): """Test registering the template generator with multiple force fields""" generator = self.TEMPLATE_GENERATOR(molecules=self.molecules) - from openmm.app import ForceField NUM_FORCEFIELDS = 2 # number of force fields to test forcefields = list() for index in range(NUM_FORCEFIELDS): @@ -560,7 +552,6 @@ def test_multiple_registration(self): # Parameterize a molecule in each force field instance molecule = self.molecules[0] openmm_topology = molecule.to_topology().to_openmm() - from openmm.app import NoCutoff for forcefield in forcefields: system = forcefield.createSystem(openmm_topology, nonbondedMethod=NoCutoff) assert system.getNumParticles() == molecule.n_atoms @@ -585,11 +576,9 @@ def compute_energy(system, positions): openmm_forces['total'] is the total force openmm_forces['components'][forcename] is the force for the specified component force """ - import copy system = copy.deepcopy(system) for index, force in enumerate(system.getForces()): force.setForceGroup(index) - import openmm platform = openmm.Platform.getPlatformByName('Reference') integrator = openmm.VerletIntegrator(0.001) context = openmm.Context(system, integrator, platform) @@ -624,15 +613,21 @@ def compare_energies(cls, molecule, template_generated_system, reference_system) System generated by reference parmaeterization engine """ + from openff.units.openmm import to_openmm # Compute energies - reference_energy, reference_forces = cls.compute_energy(template_generated_system, molecule.conformers[0]) - template_energy, template_forces = cls.compute_energy(reference_system, molecule.conformers[0]) + reference_energy, reference_forces = cls.compute_energy( + template_generated_system, + to_openmm(molecule.conformers[0]), + ) + template_energy, template_forces = cls.compute_energy( + reference_system, + to_openmm(molecule.conformers[0]), + ) from openmm import unit def write_xml(filename, system): - import openmm with open(filename, 'w') as outfile: print(f'Writing {filename}...') outfile.write(openmm.XmlSerializer.serialize(system)) @@ -657,7 +652,7 @@ def write_xml(filename, system): print(f"{'component':24} {'Template (kcal/mol)':>20} {'Reference (kcal/mol)':>20}") for key in components: reference_component_energy = reference_energy['components'][key] - template_component_energy = template_energy['components'][key] + template_component_energy = template_energy['components'][key] print(f'{key:24} {(template_component_energy/unit.kilocalories_per_mole):20.3f} {(reference_component_energy/unit.kilocalories_per_mole):20.3f} kcal/mol') print(f'{"TOTAL":24} {(template_energy["total"]/unit.kilocalories_per_mole):20.3f} {(reference_energy["total"]/unit.kilocalories_per_mole):20.3f} kcal/mol') write_xml('reference_system.xml', reference_system) @@ -665,7 +660,6 @@ def write_xml(filename, system): raise Exception(f'Energy deviation for {molecule.to_smiles()} ({delta/unit.kilocalories_per_mole} kcal/mol) exceeds threshold ({ENERGY_DEVIATION_TOLERANCE})') # Compare forces - import numpy as np def norm(x): N = x.shape[0] return np.sqrt((1.0/N) * (x**2).sum()) @@ -714,7 +708,8 @@ def propagate_dynamics(self, molecule, system): """ # Run some dynamics - import openmm + from openff.units.openmm import from_openmm as from_openmm_quantity + from openff.units.openmm import to_openmm as to_openmm_quantity from openmm import unit temperature = 300 * unit.kelvin collision_rate = 1.0 / unit.picoseconds @@ -723,42 +718,56 @@ def propagate_dynamics(self, molecule, system): integrator = openmm.LangevinIntegrator(temperature, collision_rate, timestep) platform = openmm.Platform.getPlatformByName('Reference') context = openmm.Context(system, integrator, platform) - context.setPositions(molecule.conformers[0]) + context.setPositions(to_openmm_quantity(molecule.conformers[0])) integrator.step(nsteps) # Copy the molecule, storing new conformer - import copy new_molecule = copy.deepcopy(molecule) - new_molecule.conformers[0] = context.getState(getPositions=True).getPositions(asNumpy=True) - # Clean up + new_molecule.conformers[0] = from_openmm_quantity(context.getState(getPositions=True).getPositions()) + del context, integrator return new_molecule def test_INSTALLED_FORCEFIELDS(self): """Test INSTALLED_FORCEFIELDS contains expected force fields""" - assert 'openff-1.1.0' in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS - assert 'smirnoff99Frosst-1.1.0' in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS - assert 'openff_unconstrained-1.1.0' not in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS + expected_force_fields = [ + 'openff-1.1.0', + 'openff-2.0.0', + 'smirnoff99Frosst-1.1.0', + 'ff14sb_off_impropers_0.0.3', + ] + forbidden_force_fields = [ + 'openff_unconstrained', + 'ff14sb_0.0.3', + ] + + for expected in expected_force_fields: + assert expected in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS + + for forbidden in forbidden_force_fields: + assert forbidden not in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS def test_energies(self): """Test potential energies match between openff-toolkit and OpenMM ForceField""" - from openff.toolkit.topology import Molecule - from openmm import unit + + if Version(toolkit_version) < Version("0.11.0"): + self.skipTest("Test written with new toolkit API") + # Test all supported SMIRNOFF force fields for small_molecule_forcefield in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS: + if "ff14sb" in small_molecule_forcefield: + continue print(f'Testing energies for {small_molecule_forcefield}...') # Create a generator that knows about a few molecules # TODO: Should the generator also load the appropriate force field files into the ForceField object? generator = SMIRNOFFTemplateGenerator(molecules=self.molecules, forcefield=small_molecule_forcefield) # Create a ForceField - import openmm openmm_forcefield = openmm.app.ForceField() # Register the template generator openmm_forcefield.registerTemplateGenerator(generator.generator) # Parameterize some molecules for molecule in self.molecules: # Create OpenMM System using OpenMM app - from openmm.app import NoCutoff openmm_system = openmm_forcefield.createSystem(molecule.to_topology().to_openmm(), removeCMMotion=False, nonbondedMethod=NoCutoff) # Retrieve System generated by the SMIRNOFF typing engine @@ -777,24 +786,23 @@ def test_energies(self): def test_partial_charges_are_none(self): """Test parameterizing a small molecule with `partial_charges=None` instead of zeros (happens frequently in OFFTK>=0.7.0)""" - from openff.toolkit.topology import Molecule molecule = Molecule.from_smiles('C=O') molecule.generate_conformers(n_conformers=1) #molecule._partial_charges = None assert (molecule.partial_charges is None) or np.all(molecule.partial_charges / unit.elementary_charge == 0) # Test all supported SMIRNOFF force fields for small_molecule_forcefield in SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS: + if "ff14sb" in small_molecule_forcefield: + continue print(f'Testing energies for {small_molecule_forcefield}...') # Create a generator that knows about a few molecules # TODO: Should the generator also load the appropriate force field files into the ForceField object? generator = SMIRNOFFTemplateGenerator(molecules=[molecule], forcefield=small_molecule_forcefield) # Create a ForceField - import openmm openmm_forcefield = openmm.app.ForceField() # Register the template generator openmm_forcefield.registerTemplateGenerator(generator.generator) # Create OpenMM System using OpenMM app - from openmm.app import NoCutoff openmm_system = openmm_forcefield.createSystem(molecule.to_topology().to_openmm(), removeCMMotion=False, nonbondedMethod=NoCutoff) smirnoff_system = generator.get_openmm_system(molecule) @@ -827,8 +835,13 @@ def propagate_dynamics(self, molecule, system): """ # Run some dynamics - import openmm + from openff.units.openmm import from_openmm as from_openmm_quantity + from openff.units.openmm import to_openmm as to_openmm_quantity from openmm import unit + + if Version(toolkit_version) < Version("0.11.0"): + self.skipTest("Test written with new toolkit API") + temperature = 300 * unit.kelvin collision_rate = 1.0 / unit.picoseconds timestep = 1.0 * unit.femtoseconds @@ -836,12 +849,11 @@ def propagate_dynamics(self, molecule, system): integrator = openmm.LangevinIntegrator(temperature, collision_rate, timestep) platform = openmm.Platform.getPlatformByName('Reference') context = openmm.Context(system, integrator, platform) - context.setPositions(molecule.conformers[0]) + context.setPositions(to_openmm_quantity(molecule.conformers[0])) integrator.step(nsteps) # Copy the molecule, storing new conformer - import copy new_molecule = copy.deepcopy(molecule) - new_molecule.conformers[0] = context.getState(getPositions=True).getPositions(asNumpy=True) + new_molecule.conformers[0] = from_openmm_quantity(context.getState(getPositions=True).getPositions()) # Clean up del context, integrator @@ -867,8 +879,10 @@ def test_retrieve_forcefields(self): def test_energies(self): """Test potential energies match between openff-toolkit and OpenMM ForceField""" - from openff.toolkit.topology import Molecule - from openmm import unit + + if Version(toolkit_version) < Version("0.11.0"): + self.skipTest("Test written with new toolkit API") + # Test all supported SMIRNOFF force fields for small_molecule_forcefield in EspalomaTemplateGenerator.INSTALLED_FORCEFIELDS: print(f'Testing energies for {small_molecule_forcefield}...') @@ -876,14 +890,12 @@ def test_energies(self): # TODO: Should the generator also load the appropriate force field files into the ForceField object? generator = EspalomaTemplateGenerator(molecules=self.molecules, forcefield=small_molecule_forcefield) # Create a ForceField - import openmm openmm_forcefield = openmm.app.ForceField() # Register the template generator openmm_forcefield.registerTemplateGenerator(generator.generator) # Parameterize some molecules for molecule in self.molecules: # Create OpenMM System using OpenMM app - from openmm.app import NoCutoff openmm_system = openmm_forcefield.createSystem(molecule.to_topology().to_openmm(), removeCMMotion=False, nonbondedMethod=NoCutoff) # Retrieve System generated by Espaloma @@ -901,7 +913,6 @@ def test_energies(self): def test_partial_charges_are_none(self): """Test parameterizing a small molecule with `partial_charges=None` instead of zeros (happens frequently in OFFTK>=0.7.0)""" - from openff.toolkit.topology import Molecule molecule = Molecule.from_smiles('C=O') molecule.generate_conformers(n_conformers=1) #molecule._partial_charges = None @@ -913,11 +924,9 @@ def test_partial_charges_are_none(self): # TODO: Should the generator also load the appropriate force field files into the ForceField object? generator = EspalomaTemplateGenerator(molecules=[molecule], forcefield=small_molecule_forcefield) # Create a ForceField - import openmm openmm_forcefield = openmm.app.ForceField() # Register the template generator openmm_forcefield.registerTemplateGenerator(generator.generator) # Create OpenMM System using OpenMM app - from openmm.app import NoCutoff openmm_system = openmm_forcefield.createSystem(molecule.to_topology().to_openmm(), removeCMMotion=False, nonbondedMethod=NoCutoff) smirnoff_system = generator.get_openmm_system(molecule) diff --git a/openmmforcefields/utils.py b/openmmforcefields/utils.py index 71a699f4..110f0fe2 100644 --- a/openmmforcefields/utils.py +++ b/openmmforcefields/utils.py @@ -1,5 +1,6 @@ -import logging import contextlib +import logging + _logger = logging.getLogger("openmmforcefields.generators.gaff") def get_ffxml_path(): @@ -80,7 +81,7 @@ def _wrapper(*args, **kwargs): return _with_timer -class Timer(object): +class Timer: """A class with stopwatch-style timing functions. Examples @@ -137,7 +138,7 @@ def stop(self, benchmark_id='default'): try: t0 = self._t0[benchmark_id] except KeyError: - _logger.warning("Can't stop timing for {}".format(benchmark_id)) + _logger.warning(f"Can't stop timing for {benchmark_id}") else: import time self._t1[benchmark_id] = time.time() @@ -153,7 +154,7 @@ def partial(self, benchmark_id='default'): try: t0 = self._t0[benchmark_id] except KeyError: - _logger.warning("Couldn't return partial timing for {}".format(benchmark_id)) + _logger.warning(f"Couldn't return partial timing for {benchmark_id}") else: return time.time() - t0 @@ -172,7 +173,7 @@ def report_timing(self, clear=True): """ for benchmark_id, elapsed_time in self._completed.items(): - _logger.debug('{} took {:8.3f}s'.format(benchmark_id, elapsed_time)) + _logger.debug(f'{benchmark_id} took {elapsed_time:8.3f}s') if clear is True: self.reset_timing_statistics() diff --git a/setup.py b/setup.py index e9a2b61b..ed1a5beb 100644 --- a/setup.py +++ b/setup.py @@ -18,65 +18,50 @@ except: long_description = "\n".join(short_description[2:]) -try: - # Symlink converted ffxml directories so we don't need to copy files - os.makedirs('openmmforcefields/ffxml') - os.symlink('../../amber/ffxml/', 'openmmforcefields/ffxml/amber') - os.symlink('../../charmm/ffxml/', 'openmmforcefields/ffxml/charmm') - os.symlink('../../amber/gaff', 'openmmforcefields/ffxml/amber/gaff') - - setup( - # Self-descriptive entries which should always be present - name='openmmforcefields', - author='Chodera lab // MSKCC', - author_email='john.chodera@choderalab.org', - description=short_description[0], - long_description=long_description, - long_description_content_type="text/markdown", - keywords = "molecular mechanics, forcefield, OpenMM, AMBER, CHARMM, GAFF", - url = "http://github.com/choderalab/openmm-forcefields", - version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), - license='MIT', - - classifiers=[ - "Development Status :: 3 - Alpha", - "Topic :: Utilities", - "License :: OSI Approved :: MIT", - ], +setup( + # Self-descriptive entries which should always be present + name='openmmforcefields', + author='Chodera lab // MSKCC', + author_email='john.chodera@choderalab.org', + description=short_description[0], + long_description=long_description, + long_description_content_type="text/markdown", + keywords = "molecular mechanics, forcefield, OpenMM, AMBER, CHARMM, GAFF", + url = "http://github.com/choderalab/openmm-forcefields", + version=versioneer.get_version(), + cmdclass=versioneer.get_cmdclass(), + license='MIT', - # Don't install as an egg, since OpenMM can't find ffxml files if we do - zip_safe=False, + classifiers=[ + "Development Status :: 3 - Alpha", + "Topic :: Utilities", + "License :: OSI Approved :: MIT", + ], - # Which Python importable modules should be included when your package is installed - # Handled automatically by setuptools. Use 'exclude' to prevent some specific - # subpackage(s) from being added, if needed - packages=find_packages(), + # Don't install as an egg, since OpenMM can't find ffxml files if we do + zip_safe=False, - # Optional include package data to ship with your package - # Customize MANIFEST.in if the general case does not suit your needs - # Comment out this line to prevent the files from being packaged with your software - include_package_data=True, + # Which Python importable modules should be included when your package is installed + # Handled automatically by setuptools. Use 'exclude' to prevent some specific + # subpackage(s) from being added, if needed + packages=find_packages(), - # Allows `setup.py test` to work correctly with pytest - setup_requires=[] + pytest_runner, + # Optional include package data to ship with your package + # Customize MANIFEST.in if the general case does not suit your needs + # Comment out this line to prevent the files from being packaged with your software + include_package_data=True, - entry_points={ - 'console_scripts': [], - 'openmm.forcefielddir' : [ - 'ffxml = openmmforcefields.utils:get_ffxml_path', - ], - }, + # Allows `setup.py test` to work correctly with pytest + setup_requires=[] + pytest_runner, - package_data={ - 'openmmforcefields': ['ffxml/amber/*.xml', 'ffxml/amber/gaff/*.{xml,dat}', 'ffxml/charmm/*.xml'] - }, - ) + entry_points={ + 'console_scripts': [], + 'openmm.forcefielddir' : [ + 'ffxml = openmmforcefields.utils:get_ffxml_path', + ], + }, -finally: - # TODO: Don't clean these up if `python setup.py develop` - # Clean up temporary symlinks - os.unlink('openmmforcefields/ffxml/amber/gaff') - os.unlink('openmmforcefields/ffxml/amber') - os.unlink('openmmforcefields/ffxml/charmm') - os.removedirs('openmmforcefields/ffxml') + package_data={ + 'openmmforcefields': ['ffxml/amber/*.xml', 'ffxml/amber/gaff/*.{xml,dat}', 'ffxml/charmm/*.xml'] + }, +)