{"id":32178508,"url":"https://github.com/openmm/openmmforcefields","last_synced_at":"2026-02-21T06:33:07.852Z","repository":{"id":37767153,"uuid":"70107487","full_name":"openmm/openmmforcefields","owner":"openmm","description":"CHARMM and AMBER forcefields for OpenMM (with small molecule support)","archived":false,"fork":false,"pushed_at":"2025-12-18T22:03:42.000Z","size":63201,"stargazers_count":339,"open_issues_count":90,"forks_count":86,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-12-21T22:40:54.199Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://openmm.org","language":"Rich Text Format","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openmm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-10-05T23:26:34.000Z","updated_at":"2025-12-19T08:52:30.000Z","dependencies_parsed_at":"2023-01-23T19:45:59.572Z","dependency_job_id":"c5115bcf-9d63-4bb2-b395-50968d475a34","html_url":"https://github.com/openmm/openmmforcefields","commit_stats":{"total_commits":456,"total_committers":20,"mean_commits":22.8,"dds":"0.23026315789473684","last_synced_commit":"b147a34ac1cdc00dd9cbe827ae292253c52f70e9"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/openmm/openmmforcefields","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmm%2Fopenmmforcefields","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmm%2Fopenmmforcefields/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmm%2Fopenmmforcefields/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmm%2Fopenmmforcefields/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openmm","download_url":"https://codeload.github.com/openmm/openmmforcefields/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmm%2Fopenmmforcefields/sbom","scorecard":{"id":709784,"data":{"date":"2025-08-11","repo":{"name":"github.com/openmm/openmmforcefields","commit":"a9a41bbcef45850ab964d6374e3d543313d9b531"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.8,"checks":[{"name":"Maintained","score":10,"reason":"29 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yaml:1","Warn: no topLevel permission defined: .github/workflows/test_charmm.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yaml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yaml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yaml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/ci.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_charmm.yaml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/test_charmm.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test_charmm.yaml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/test_charmm.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test_charmm.yaml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/openmm/openmmforcefields/test_charmm.yaml/main?enable=pin","Warn: containerImage not pinned by hash: charmm/Dockerfile:1","Warn: containerImage not pinned by hash: charmm/Dockerfile:6","Warn: containerImage not pinned by hash: charmm/Dockerfile:17","Warn: pipCommand not pinned by hash: .github/workflows/ci.yaml:62","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-22T07:47:08.810Z","repository_id":37767153,"created_at":"2025-08-22T07:47:08.810Z","updated_at":"2025-08-22T07:47:08.810Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29675471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T06:23:40.028Z","status":"ssl_error","status_checked_at":"2026-02-21T06:23:39.222Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-21T20:57:00.782Z","updated_at":"2026-02-21T06:33:07.836Z","avatar_url":"https://github.com/openmm.png","language":"Rich Text Format","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://github.com/openmm/openmmforcefields/actions/workflows/ci.yaml/badge.svg)](https://github.com/openmm/openmmforcefields/actions/workflows/ci.yaml)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/openmmforcefields.svg)](https://anaconda.org/conda-forge/openmmforcefields)\n[![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/openmmforcefields.svg)](https://anaconda.org/conda-forge/openmmforcefields)\n[![DOI](https://zenodo.org/badge/70107487.svg)](https://zenodo.org/badge/latestdoi/70107487)\n\n# AMBER, CHARMM, OpenFF, and Espaloma force fields for OpenMM\n\nThis repository provides support for AMBER, CHARMM, OpenFF, and Espaloma force fields and small molecule parameterization with GAFF, Espaloma, and Open Force Field Toolkit for OpenMM.\n\n## Supported force fields\n\n**AMBER:** All major AMBER force fields distributed with [AmberTools](https://ambermd.org/AmberTools.php) 24.8 from [conda-forge](https://anaconda.org/conda-forge/ambertools/files), as well as all released [GAFF small molecule force fields](http://ambermd.org/antechamber/gaff.html) through 1.81 (GAFF 1.x) and 2.2.20 (GAFF 2.x).\n\n**CHARMM:** Non-polarizable protein, nucleic acid, and pre-parameterized small molecule force fields available in in the [July 2024 CHARMM36 force field release from the Mackerell website](http://mackerell.umaryland.edu/charmm_ff.shtml). *Note that this conversion has not yet been fully validated.*\n\n**Open Force Field Initiative force fields:** All distributed [Open Force Field Initiative](http://openforcefield.org) [force fields](https://openforcefield.org/force-fields/force-fields/), including the [`openff-2.x.y` (\"Sage\")](https://openforcefield.org/force-fields/force-fields/) and [`smirnoff99Frosst`](https://github.com/openforcefield/smirnoff99Frosst/) series of force fields available through the [`openff-forcefields`](http://github.com/openforcefield/openff-forcefields) package. This is now supported in OpenMM 7.5.0 and later.\n\n**Espaloma:** Currently [`espaloma-0.3.2`](https://github.com/choderalab/espaloma/releases/tag/0.3.2) is supported. See our [first espaloma paper](https://arxiv.org/abs/2010.01196) and our second paper which focuses on [protein-ligand systems and beyond](https://arxiv.org/abs/2307.07085).\n\n# Using the force fields\n\n## Installation\n\nThe `openmmforcefields` package provides additional AMBER and CHARMM biopolymer force fields, small molecule support through GAFF and the [Open Force Field toolkit](http://openforcefield.org), and force field conversion tools.\n\nThe easiest way to install this package and its requisite dependencies is via [`conda`](https://conda.io):\n```bash\nconda install --yes -c conda-forge openmmforcefields\n```\n\nIf you optionally have the [OpenEye Toolkits](https://www.eyesopen.com/toolkit-development) installed, `openmmforcefields` will use these to accelerate small molecule parameterization.\nFree academic licenses are available for [bona fide academic research](https://www.eyesopen.com/academic-licensing), while licenses for IP generation are available [for a fee](https://www.eyesopen.com/pricing).\n\nSupport for the SMIRNOFF residue template or system generators requires OpenMM 7.4.2 or later.\n\n## Using the AMBER and CHARMM biopolymer force fields\n\nThis repository contains force fields for use with the [OpenMM `ForceField` class](http://docs.openmm.org/latest/userguide/application.html#force-fields) for parameterizing biomolecular systems.\nIf you're not familiar with this approach to applying parameters to biomolecular systems, please see the [OpenMM User Guide](http://docs.openmm.org/latest/userguide/application.html#force-fields).\n\n### Using the AMBER force fields\n\nOnce installed, the AMBER force fields will be registered in the `amber/` relative path searched by [`openmm.app.ForceField`](http://docs.openmm.org/latest/api-python/generated/openmm.app.forcefield.ForceField.html#openmm.app.forcefield.ForceField).\n\nFor example, to specify the newer recommended [`ff14SB`](https://pubs.acs.org/doi/abs/10.1021/acs.jctc.5b00255) force field and accompanying recommended ions and solvent models (corresponding to force fields loaded in LEaP with `leaprc.protein.ff14SB`), prepend the `amber` prefix and the `.xml` suffix:\n```python\nforcefield = ForceField(\"amber/protein.ff14SB.xml\")\n```\nTo access just the [`ff14SB`](https://pubs.acs.org/doi/abs/10.1021/acs.jctc.5b00255) force field converted from `oldff/leaprc.ff14SB`:\n```python\nforcefield = ForceField(\"amber/ff14SB.xml\")\n```\nor to specifically access the older (now outdated) `ff99SBildn` force field converted from `oldff/leaprc.ff14SB`:\n```python\nforcefield = ForceField(\"amber/ff99SBildn.xml\")\n```\nThe TIP3P conversion also includes the [Joung and Cheatham recommended salt models](https://doi.org/10.1021/jp8001614) (`parm/frcmod.ionsjc_tip3p`) and recommended divalent counterion parameters (`parm/frcmod.ions234lm_126_tip3p`):\n```python\nforcefield = ForceField(\n    \"amber/protein.ff14SB.xml\",\n    \"amber/tip3p_standard.xml\",\n    \"amber/tip3p_HFE_multivalent.xml\",\n)\n```\n\n### Using the CHARMM force fields\n\nSimilarly, the CHARMM force fields will be registered in the `charmm/` relative path:\n```python\nforcefield = ForceField(\"charmm/charmm36.xml\")\n```\n\n## Using AMBER GAFF 1.x and 2.x for small molecules\n\nThe `openmmforcefields` package includes a [residue template generator](http://docs.openmm.org/latest/userguide/application.html#adding-residue-template-generators) for [the OpenMM `ForceField` class](http://docs.openmm.org/latest/api-python/generated/openmm.app.forcefield.ForceField.html#openmm.app.forcefield.ForceField) that automatically generates OpenMM residue templates for small molecules lacking parameters using [GAFF](http://ambermd.org/antechamber/gaff.html) versions 1 or 2.\n\n### Cheminformatics toolkits\n\nThe [`openff-toolkit`](http://openforcefield.org) is used to provide an interface with cheminformatics toolkits to interact with [`antechamber`](http://ambermd.org/antechamber/) from the [AmberTools](http://ambermd.org/AmberTools.php) package to generate parameters for small molecules.\nBy default, the [`openff-toolkit`](http://github.com/openforcefield/openff-toolkit) will make use of the free and open source [RDKit cheminformatics toolkit](https://www.rdkit.org/) that is installed automatically, but will optionally use the [OpenEye toolkit](https://docs.eyesopen.com/toolkits/python/index.html) if it is installed and licensed.\nThe OpenEye toolkit is available [for free for academics for non-IP-generating academic research](https://www.eyesopen.com/academic-licensing).\n\n### On-the-fly template generation for small molecules\n\nGeneration of OpenMM-compatible parameters for small molecules encountered in an OpenMM `Topology` is handled through `openmmforcefields.generators.GAFFTemplateGenerator`.\nBecause the [OpenMM `Topology` object](http://docs.openmm.org/latest/api-python/generated/openmm.app.topology.Topology.html#openmm.app.topology.Topology) used by [the OpenMM `ForceField` class](http://docs.openmm.org/latest/api-python/generated/openmm.app.forcefield.ForceField.html#openmm.app.forcefield.ForceField) does not know the precise chemical identity of molecules represented in the topology---which contain only elements and bonds between them, without stereochemical or bond order information---it is necessary to instruct `GAFFTemplateGenerator` which small molecules it will encounter in processing the `Topology` object ahead of time; it then matches these by element and bond pattern.\n\n### Specifying molecules\n\nTo do this, it is necessary to specify one or more [`openff.toolkit.topology.Molecule`](https://open-forcefield-toolkit.readthedocs.io/en/latest/api/generated/openff.toolkit.topology.Molecule.html#openff.toolkit.topology.Molecule) objects which can easily be created from many different representations of small molecules, including SMILES strings and common molecule storage formats.\nThere are many ways to create an [OpenFF `Molecule` object](https://open-forcefield-toolkit.readthedocs.io/en/latest/api/generated/openff.toolkit.topology.Molecule.html#openff.toolkit.topology.Molecule) from various file formats as well---see the [API docs](https://open-forcefield-toolkit.readthedocs.io/en/latest/api/generated/openff.toolkit.topology.Molecule.html#openff.toolkit.topology.Molecule) for more details.\n\n### Partial charges for small molecules\n\nIf the provided molecule(s) contain nonzero (user-specified) partial charges (stored in the `Molecule.partial_charges` attribute), those partial charges will be used.\nIf they do _not_ contain partial charges, the OpenFF Toolkit is used to generate them.\n\n* In `GAFFTemplateGenerator`, [Antechamber](http://ambermd.org/antechamber/) from the [AmberTools](http://ambermd.org/AmberTools.php) distribution (which uses the `sqm` semiempirical quantum chemical package) is used to assign AM1-BCC charges (`antechamber -c bcc`). The conformers used in charge assignment are generated by RDKit.\n* In `SMIRNOFFTemplateGenerator`, the charges are assigned by the OpenFF software according to the [AM1-BCC settings of the SMIRNOFF specification](https://openforcefield.github.io/standards/standards/smirnoff/#toolkitam1bcc-temporary-support-for-toolkit-based-am1-bcc-partial-charges).\n  * If OpenEye Toolkits are installed and licensed, OpenEye's Quacpac Toolkit is used to generate [AM1-BCC-ELF10 charges](https://docs.eyesopen.com/toolkits/python/quacpactk/OEProtonClasses/OEAM1BCCELF10Charges.html). In this case, the conformers used to generate charges are generated by OpenEye's Omega Toolkit.\n  * If OpenEye Toolkits are not installed or not licensed, AmberTools's Antechamber/`sqm` is used to generate AM1-BCC charges in the same way that it is used in `GAFFTemplateGenerator`. In this case, the conformers used to generate charges are generated by RDKit.\n\n*Note:* The `Molecule` object must have the all protons and stereochemistry explicitly specified, and must match the exact protonation and tautomeric state of the molecule that will be found in your OpenMM `Topology` object.\nThe atom ordering need not be the same.\n\n*Note:* The first time a `Molecule` is specified, added, or cached, if it lacks partial charges, the automatically generated charges will be cached and reused; if it contains user-specified partial charges, those charges will be used and cached. Adding the molecule again with a different set of charges will have no effect on changing which charges are assigned.\n\n### Caching\n\n`GAFFTemplateGenerator` also supports the ability to specify a cache filename, allowing parameters for small molecules to be computed only once and then cached in the specified cache file thereafter.\n\n### Examples using `GAFFTemplateGenerator` to generate small molecule GAFF parameters\n\nCreate a GAFF template generator for a single molecule (benzene, created from SMILES) and register it with ForceField:\n\n```python\n# Create an OpenFF Molecule object for benzene from SMILES\nfrom openff.toolkit import Molecule\n\nmolecule = Molecule.from_smiles(\"c1ccccc1\")\n# Create the GAFF template generator\nfrom openmmforcefields.generators import (\n    GAFFTemplateGenerator,\n)\n\ngaff = GAFFTemplateGenerator(molecules=molecule)\n# Create an OpenMM ForceField object with AMBER ff14SB and TIP3P with compatible ions\nfrom openmm.app import ForceField\n\nforcefield = ForceField(\n    \"amber/protein.ff14SB.xml\",\n    \"amber/tip3p_standard.xml\",\n    \"amber/tip3p_HFE_multivalent.xml\",\n)\n# Register the GAFF template generator\nforcefield.registerTemplateGenerator(gaff.generator)\n# You can now parameterize an OpenMM Topology object that contains the specified molecule.\n# forcefield will load the appropriate GAFF parameters when needed, and antechamber\n# will be used to generate small molecule parameters on the fly.\nfrom openmm.app import PDBFile\n\npdbfile = PDBFile(\"t4-lysozyme-L99A-with-benzene.pdb\")\nsystem = forcefield.createSystem(pdbfile.topology)\n```\n\nThe latest available GAFF version is used if none is specified.\nYou can check which GAFF version is in use with\n\n```pycon\n\u003e\u003e\u003e gaff.gaff_version\n'2.2.20'\n````\n\nCreate a template generator for a specific GAFF version for multiple molecules read from an SDF file:\n\n```python\nmolecules = Molecule.from_file(\"molecules.sdf\")\ngaff = GAFFTemplateGenerator(molecules=molecules, forcefield=\"gaff-2.2.20\")\n```\nYou can also add molecules to the generator later, even after the generator has been registered:\n```python\ngaff.add_molecules(molecule)\ngaff.add_molecules([molecule1, molecule2])\n```\nTo check which GAFF versions are supported, examine the `INSTALLED_FORCEFIELDS` attribute:\n```pycon\n\u003e\u003e\u003e print(GAFFTemplateGenerator.INSTALLED_FORCEFIELDS)\n['gaff-1.4', 'gaff-1.8', 'gaff-1.81', 'gaff-2.1', 'gaff-2.11', 'gaff-2.2.20']\n```\nYou can optionally specify a file that contains a cache of pre-parameterized molecules:\n```python\ngenerator = GAFFTemplateGenerator(cache=\"gaff-molecules.json\", forcefield=\"gaff-1.8\")\n```\nNewly parameterized molecules will be written to the cache, saving time next time these molecules are encountered.\n\n## Using the Open Force Field Initiative SMIRNOFF small molecule force fields\n\nThe `openmmforcefields` package includes a [residue template generator](http://docs.openmm.org/latest/userguide/application.html#adding-residue-template-generators) for [the OpenMM `ForceField` class](http://docs.openmm.org/latest/api-python/generated/openmm.app.forcefield.ForceField.html#openmm.app.forcefield.ForceField) that automatically generates OpenMM residue templates for small molecules lacking parameters using the [Open Force Field Initiative](http://openforcefield.org) [SMIRNOFF](https://openforcefield.github.io/standards/standards/smirnoff/)small molecule force fields.\nThis includes the [`openff-1.x.y` (\"Parsley\")](https://openforcefield.org/news/introducing-openforcefield-1.0/) and [`openff-2.x.y` (\"Sage\")](https://pubs.acs.org/doi/10.1021/acs.jctc.3c00039) small molecule force field lines, including the [most recent force field in each lines](https://github.com/openforcefield/openff-forcefields).\n\nThe `SMIRNOFFTemplateGenerator` residue template generator operates in a manner very similar to `GAFFTemplateGenerator`, so we only highlight its differences here.\n\n### Examples using `SMIRNOFFTemplateGenerator` to generate small molecule SMIRNOFF parameters\n\nCreate a SMIRNOFF template generator for a single molecule (benzene, created from SMILES) and register it with ForceField:\n\n```python\n# Create an OpenFF Molecule object for benzene from SMILES\nfrom openff.toolkit import Molecule\n\nmolecule = Molecule.from_smiles(\"c1ccccc1\")\n# Create the SMIRNOFF template generator with the default installed force field (openff-2.1.0)\nfrom openmmforcefields.generators import (\n    SMIRNOFFTemplateGenerator,\n)\n\nsmirnoff = SMIRNOFFTemplateGenerator(molecules=molecule)\n# Create an OpenMM ForceField object with AMBER ff14SB and TIP3P with compatible ions\nfrom openmm.app import ForceField\n\nforcefield = ForceField(\n    \"amber/protein.ff14SB.xml\",\n    \"amber/tip3p_standard.xml\",\n    \"amber/tip3p_HFE_multivalent.xml\",\n)\n# Register the SMIRNOFF template generator\nforcefield.registerTemplateGenerator(smirnoff.generator)\n\n# create a System with the non-bonded settings of mainline OpenFF force fields\n# (9 Angstrom cut-off, switching distance applied at 8 Angstrom)\nsystem = forcefield.createSystem(\n    topology=molecule.to_topology().to_openmm(),\n    nonbondedCutoff=0.9 * openmm.unit.nanometer,\n    switchDistance=0.8 * openmm.unit.nanometer,\n)\n```\n\nThe latest official Open Force Field Initiative release ([`openff-2.1.0`](https://github.com/openforcefield/openff-forcefields) of the [\"Sage\" small molecule force field](https://openforcefield.org/community/news/general/sage2.1.0-release/)) is used if none is specified.\nYou can check which SMIRNOFF force field is in use with\n\n```pycon\n\u003e\u003e\u003e smirnoff.smirnoff_filename\n'/Users/mattthompson/mambaforge/envs/openmmforcefields/lib/python3.11/site-packages/openforcefields/offxml/openff-2.1.0.offxml'\n```\n\nCreate a template generator for a specific SMIRNOFF force field for multiple molecules read from an SDF file:\n\n```python\nmolecules = Molecule.from_file(\"molecules.sdf\")\n# Create a SMIRNOFF residue template generator from the official openff-2.2.1 release,\n# which is installed automatically\nsmirnoff = SMIRNOFFTemplateGenerator(molecules=molecules, forcefield=\"openff-2.2.1\")\n# Create a SMIRNOFF residue template generator from an older Sage or Parsley version\nsmirnoff = SMIRNOFFTemplateGenerator(molecules=molecules, forcefield=\"openff-1.3.0\")\n# Use a local .offxml file instead\nsmirnoff = SMIRNOFFTemplateGenerator(molecules=molecules, forcefield=\"local-file.offxml\")\n```\n\nYou can also add molecules to the generator later, even after the generator has been registered:\n\n```python\nsmirnoff.add_molecules(molecule)\nsmirnoff.add_molecules([molecule1, molecule2])\n```\n\nTo check which SMIRNOFF force fields are automatically installed, examine the `INSTALLED_FORCEFIELDS` attribute:\n\n```pycon\n\u003e\u003e\u003e print(SMIRNOFFTemplateGenerator.INSTALLED_FORCEFIELDS)\n['ff14sb_off_impropers_0.0.2', 'ff14sb_off_impropers_0.0.1', 'ff14sb_off_impropers_0.0.3', 'tip3p_fb-1.1.0', 'tip3p_fb-1.0.0', 'openff-1.0.1', 'openff-1.1.1', 'openff-1.0.0-RC1', 'opc3', 'opc3-1.0.0', 'openff-2.1.0-rc.1', 'openff-1.2.0', 'openff-1.3.0', 'tip3p-1.0.0', 'opc-1.0.2', 'openff-2.0.0-rc.2', 'opc-1.0.0', 'openff-2.1.0', 'openff-2.0.0', 'tip4p_fb-1.0.1', 'tip3p', 'opc3-1.0.1', 'opc', 'tip3p_fb-1.1.1', 'openff-1.1.0', 'openff-1.0.0', 'openff-1.0.0-RC2', 'tip3p-1.0.1', 'openff-1.3.1', 'openff-1.2.1', 'openff-1.3.1-alpha.1', 'tip4p_fb', 'tip3p_fb', 'tip4p_fb-1.0.0', 'openff-2.0.0-rc.1', 'opc-1.0.1']\n```\n\nYou can optionally specify a file that contains a cache of pre-parameterized molecules:\n\n```python\nsmirnoff = SMIRNOFFTemplateGenerator(\n    cache=\"smirnoff-molecules.json\",\n    forcefield=\"openff-2.1.0\",\n)\n```\n\nNewly parameterized molecules will be written to the cache, saving time next time these molecules are encountered.\n\n## Using espaloma to generate small molecule force fields\n\nThe `openmmforcefields` package includes a [residue template generator](http://docs.openmm.org/latest/userguide/application.html#adding-residue-template-generators) for [the OpenMM `ForceField` class](http://docs.openmm.org/latest/api-python/generated/openmm.app.forcefield.ForceField.html#openmm.app.forcefield.ForceField) that can automatically generate OpenMM residue templates for small molecules lacking parameters using [espaloma](https://github.com/choderalab/espaloma) via one of its released force fields, provided `espaloma` and its dependencies are installed.\n`espaloma` uses a [graph convolutional model](https://arxiv.org/abs/2010.01196) to generate both valence parameters and fast partial charges.\n\n\nThe `EspalomaTemplateGenerator` residue template generator operates in a manner very similar to `GAFFTemplateGenerator`, so we only highlight its differences here.\n\n**This feature is currently experimental and its API is subject to change.**\n\n### Examples using `EspalomaTemplateGenerator` to generate small molecule parameters with espaloma\n\nCreate an espaloma template generator for a single molecule (benzene, created from SMILES) and register it with ForceField:\n```python\n# Create an OpenFF Molecule object for benzene from SMILES\nfrom openff.toolkit import Molecule\n\nmolecule = Molecule.from_smiles(\"c1ccccc1\")\n# Create the SMIRNOFF template generator with the released espaloma-0.3.2 force field\nfrom openmmforcefields.generators import (\n    EspalomaTemplateGenerator,\n)\n\nespaloma = EspalomaTemplateGenerator(molecules=molecule, forcefield=\"espaloma-0.3.2\")\n# Create an OpenMM ForceField object with AMBER ff14SB and TIP3P with compatible ions\nfrom openmm.app import ForceField\n\nforcefield = ForceField(\n    \"amber/protein.ff14SB.xml\",\n    \"amber/tip3p_standard.xml\",\n    \"amber/tip3p_HFE_multivalent.xml\",\n)\n# Register the SMIRNOFF template generator\nforcefield.registerTemplateGenerator(espaloma.generator)\n```\nCreate a template generator for a specific espaloma force field for multiple molecules read from an SDF file:\n```python\nmolecules = Molecule.from_file(\"molecules.sdf\")\n# Create an espaloma residue template generator from the espaloma-0.3.2 release,\n# retrieving it automatically from GitHub release artifacts\nespaloma = EspalomaTemplateGenerator(molecules=molecules, forcefield=\"espaloma-0.3.2\")\n# Create an espaloma residue template generator from an espaloma model retrieved from a URL\nespaloma = EspalomaTemplateGenerator(\n    molecules=molecules,\n    forcefield=\"https://github.com/choderalab/espaloma/releases/download/0.3.2/espaloma-0.3.2.pt\",\n)\n# Create an espaloma residue template generator from an espaloma model stored in a local file\nespaloma = EspalomaTemplateGenerator(\n    molecules=molecules,\n    forcefield=\"/path/to/espaloma-0.3.2.pt\",\n)\n```\nYou can also add molecules to the generator later, even after the generator has been registered:\n```python\nsmirnoff.add_molecules(molecule)\nsmirnoff.add_molecules([molecule1, molecule2])\n```\nYou can optionally specify a file that contains a cache of pre-parameterized molecules:\n```python\nespaloma = EspalomaTemplateGenerator(\n    cache=\"espaloma-molecules.json\",\n    forcefield=\"espaloma-0.3.2\",\n)\n```\nNewly parameterized molecules will be written to the cache, saving time next time these molecules are encountered.\n\n## Automating force field management with `SystemGenerator`\n\nThe `openmmforcefields` package provides the `openmmforcefields.generators.SystemGenerator` class that handles management of common force fields transparently for you.\n\n### Using `SystemGenerator` to automate the use of AMBER force fields with GAFF, OpenFF, or espaloma for small molecule parameterization\n\nHere's an example that uses GAFF 2.2.20 along with the new `ff14SB` generation of AMBER force fields (and compatible solvent models) to generate an OpenMM `System` object from an [Open Force Field `Topology`](https://open-forcefield-toolkit.readthedocs.io/en/latest/api/generated/openff.toolkit.topology.Topology.html#openff.toolkit.topology.Topology) object:\n```python\n# Define the keyword arguments to feed to ForceField\nfrom openmm import unit\nfrom openmm import app\n\nforcefield_kwargs = {\n    \"constraints\": app.HBonds,\n    \"rigidWater\": True,\n    \"removeCMMotion\": False,\n    \"hydrogenMass\": 4 * unit.amu,\n}\n# Initialize a SystemGenerator using GAFF\nfrom openmmforcefields.generators import SystemGenerator\n\nsystem_generator = SystemGenerator(\n    forcefields=[\n        \"amber/ff14SB.xml\",\n        \"amber/tip3p_standard.xml\",\n    ],\n    small_molecule_forcefield=\"gaff-2.2.20\",\n    forcefield_kwargs=forcefield_kwargs,\n    cache=\"db.json\",\n)\n# Create an OpenMM System from an OpenMM Topology object\nsystem = system_generator.create_system(openmm_topology)\n# Alternatively, create an OpenMM System from an OpenMM Topology object and a list of OpenFF Molecule objects\nmolecules = Molecule.from_file(\"molecules.sdf\", file_format=\"sdf\")\nsystem = system_generator.create_system(openmm_topology, molecules=molecules)\n```\nParameterized molecules are cached in `db.json`.\nParameters for multiple force fields can be held in the same cache file.\n\nBy default, `SystemGenerator` will use `PME` for periodic systems and `NoCutoff` for non-periodic systems.\nYou can modify this behavior with the optional `periodic_forcefield_kwargs` and `nonperiodic_forcefield_kwargs` arguments, which are used to update `forcefield_kwargs` depending on whether the system is periodic or non-periodic:\n```python\nfrom openmm import app\n\nsystem_generator = SystemGenerator(\n    forcefields=[\n        \"amber/ff14SB.xml\",\n        \"amber/tip3p_standard.xml\",\n    ],\n    periodic_forcefield_kwargs={\"nonbondedMethod\": app.LJPME},\n    nonperiodic_forcefield_kwargs={\"nonbondedMethod\": app.CutoffNonPeriodic},\n)\n```\n\nTo use the [OpenFF's Sage `openff-2.1.0`](https://github.com/openforcefield/openff-forcefields) or a newer version, an update of the [Open Force Field (\"Parsley\") small molecule force field](https://openforcefield.org/news/introducing-openforcefield-1.0/) instead of GAFF 2.2.20, we would have instead specified `small_molecule_forcefield='openff-2.1.0'`.\n\nTo use [espaloma](https://github.com/choderalab/espaloma) for assigning small molecule parameters, for example with the [`espaloma-0.3.2` model](https://github.com/choderalab/espaloma/releases/tag/0.3.2) released with the [espaloma preprint](https://arxiv.org/abs/2307.07085), you can specify `small_molecule_forcefield='espaloma-0.3.2'`.\n\n# Frequently Asked Questions (FAQ)\n\n**Q:** What is the minimum version of OpenMM required to use this package?\n\u003cbr\u003e\n**A:** You need at least OpenMM 7.4.2 to use the `openmmforcefields` package.\n\n**Q:** Do you support the new [Amber ff19SB protein force field](https://doi.org/10.1021/acs.jctc.9b00591)?\n\u003cbr\u003e\n**A:** ff19SB and phosaa19SB have now been added to openmmforcefields.\n\n**Q:** Do you plan to support other small molecule force fields?\n\u003cbr\u003e\n**A:** If there are other free and open source conda-installable tools for generating parameters for other AMBER- or CHARMM-compatible force fields, we are happy to add support for them!\n\n# Converting AMBER and CHARMM to OpenMM ffxml files\n\nSee the corresponding directories for information on how to use the provided conversion tools:\n\n* `amber/` - AMBER force fields and conversion tools\n* `charmm/` - CHARMM force fields and conversion tools\n\n# [Changelog](https://github.com/openmm/openmmforcefields/releases)\n\n## 0.15.0 Force Field Updates and More!\n\nAll template generators now take `template_generator_kwargs` as an optional init parameter.\nThis removes the `residue_atoms` argument from the `generate_residue_template` method, see [PR #391](https://github.com/openmm/openmmforcefields/pull/391) for details.\nThis release updates the CHARMM force field to the July 2024 release.\nWe also updated Amber force fields with latest versions from AmberTools 24.\nCompatibility with esploma force fields has also been improved.\n\nFor more details, see our [0.15.0 release page](https://github.com/openmm/openmmforcefields/releases/tag/0.15.0) for more details.\n\n## 0.14.1 Bring back GAFFTemplateGenerator for OpenMM \u003e=7.6.0\n\nThis release brings back GAFF force feild support for all versions of OpenMM previously supported.\nAdditionally, we now use the output of parmchk2 for all GAFF parameters.\nPreviously we used gaff.dat + parmchk2 output to generate forcefield parameters.\nFunctionally this doesn't change the end user experience but means we do not need to create new forcefield XML files for newer GAFF versions and now support whatever GAFF versions that parmchk2 supports for the installed AmberTools version.\nThe XML files in `openmmforcefields/ffxml/amber/gaff/ffxml` may be removed in a future release.\n\n## 0.14.0 Bring back GAFFTemplateGenerator\n\nThis release effectively reverts the changes in 0.13.0. This release is **only** compatible with OpenMM 8.1.2. No other changes were made.\n\n## 0.13.0 Temporarily remove GAFFTemplateGenerator\n\nThis release temporarily removes GAFFTemplateGenerator because of packaging incompatibilities with\nAmberTools 23. This functionality is planned to be re-introduced in 0.14.0.\n\nThis release is expected to work with Python 3.10-3.12.\n\nOther changes include\n* The default force field of `SystemGenerator` was updated from `openff-1.0.0` (code name Parsley) to\n  `openff-2.0.0` (code name Sage).\n\n## 0.12.0 Updates for espaloma and support a offxml string in SystemGenerator\nSee our [0.12.0 release page](https://github.com/openmm/openmmforcefields/releases/tag/0.12.0) for more details.\n\n## 0.11.0 Support for espaloma small molecule parameters\nThis release adds support for using [espaloma](https://github.com/choderalab/espaloma) to apply small molecule parameters.\n\n* [(PR #182)](https://github.com/openmm/openmmforcefields/pull/179) Add support for espaloma small molecule parameters\n\n## 0.10.0 Updates for OpenMM 7.6 and AMBER GLYCAM addition\nThis release adds support for the AMBER GLYCAM force field supporting glycans and updates imports for OpenMM 7.6.\n\n* [(PR #156)](https://github.com/openmm/openmmforcefields/pull/156) Add support for GLYCAM\n* [(PR #173)](https://github.com/openmm/openmmforcefields/pull/173) Update to OpenMM 7.6 imports\n\n## 0.9.0 Updates for openforcefield 0.9.0 toolkit\nThis release utilizes the new [openforcefield 0.9.0 toolkit](https://open-forcefield-toolkit.readthedocs.io/en/0.9.0/) now distributed through [conda-forge](https://conda-forge.org/).\n\nThis release contains updated CHARMM and AMBER force fields for use with [OpenMM 7.5.0](https://github.com/openmm/openmm/releases/tag/7.5.0) and the new [openforcefield 0.9.0 toolkit](https://open-forcefield-toolkit.readthedocs.io/en/0.9.0/), both now distributed through [conda-forge](https://conda-forge.org/).\n\n* Amber force fields were updated to versions distributed with [AmberTools 20.15](https://anaconda.org/conda-forge/ambertools/files)\n* Added AMBER `phosaa14SB` parameters for phosphorylated amino acids\n* CHARMM force fields were updated to [July 2020 CHARMM additive force field release](http://mackerell.umaryland.edu/charmm_ff.shtml#charmm)\n\n## 0.8.0 Updates for openforcefield 0.7.1 toolkit\n* [(PR #128)](https://github.com/openmm/openmmforcefields/pull/128) Update README for openff-1.2.0 and use openforcefield 0.7.1 toolkit API for identifying installed force fields\n\n## 0.7.5 Bugfix release\n* [(PR #127)](https://github.com/openmm/openmmforcefields/pull/127) Fixes a bug where the wrong path was imported for logging; improves docstrings.\n\n## 0.7.4 Bugfix release to ensure compatibility with openforcefield toolkit 0.7.0\n* [(PR #121)](https://github.com/openmm/openmmforcefields/pull/121) Add compatibility with [`openforcefield 0.7.0`](https://github.com/openforcefield/openff-toolkit/releases/tag/0.7.0)\n\n## 0.7.3 Bugfix release: Compatibility with openforcefield toolkit 0.7.0 and auto-detection of installed openforcefield force fields\n* [(PR #119)](https://github.com/openmm/openmmforcefields/pull/119) Handle `None` partial charges in openforcefield `Molecule` objects (needed in `openforcefield` toolkit 0.7.0)\n* [(PR #120)](https://github.com/openmm/openmmforcefields/pull/120) Auto-detect installed SMIRNOFF force fields\n\n## 0.7.2 Bugfix release: More error checking; OpenMM 7.4.2 minimum version requirement\n\n* Raise a `ValueError` if `SystemGenerator` receives a `nonbondedMethod` key in `forcefield_kwargs`; these should go into `periodic_forcefield_kwargs` or `nonperiodic_forcefield_kwargs`.\n\n## 0.7.1 Bugfix release: Fix GAFF AM1-BCC charging bug for some molecules\n\n* When using the OpenEye toolkit, some molecules failed to charge with GAFF. See https://github.com/openforcefield/openff-toolkit/issues/492\n* Removed most `perses_jacs_systems`, updating the remaining ones with inputs used in AMBER-TI publication, https://pubs.acs.org/doi/10.1021/acs.jcim.9b00105\n* Fix a bug where some molecules with pyramidal atoms would cause exceptions when read from cache\n\n## 0.7.0 User-specified partial charges, SystemGenerator support for periodic and non-periodic topologies, and minor bugfixes\n\n* If `Molecule` objects contain nonzero partial charges, these are used instead of generating new partial charges\n* Fix bug in default `periodic_forcefield_kwargs` and `nonperiodic_forcefield_kwargs`\n\n## 0.6.1 Updated README and minor bugfixes\n\n* Fix examples in the `README.md`\n* Fix `GAFFTemplateGenerator.gaff_major_version`\n* Fix incorrect default SMIRNOFF force field, which is now `openff-1.0.0` (was previously `smirnoff99Frosst-1.1.0`)\n* Add `SystemGenerator.SMALL_MOLECULE_FORCEFIELDS` convenience property to list available small molecule force fields\n* `SystemGenerator` API changed to support both periodic and non-periodic `Topology` objects for the same generator\n\n## 0.6.0 Updated AMBER force fields (AmberTools 19.9) and small molecule support via GAFF\n\nThis release provides updated support for AMBER biopolymer force fields (from AmberTools 19.9) and small molecule support with GAFF 1.x and 2.x, along with experimental support for the new Open Force Field Initiative SMIRNOFF force fields.\n\n**AMBER:** All major AMBER force fields distributed with [AmberTools](https://ambermd.org/AmberTools.php) 19.9 (except ff19SB---see FAQ below), as well as all released [GAFF small molecule force fields](http://ambermd.org/antechamber/gaff.html) through 1.81 (GAFF 1.x) and 2.11 (GAFF 2.x).\n\n**CHARMM:** Non-polarizable protein, nucleic acid, and pre-parameterized small molecule force fields available in in the [Aug 2015 CHARMM36 force field release from the Mackerell website](http://mackerell.umaryland.edu/charmm_ff.shtml). *Note that this conversion has not yet been fully validated.*\n\n**Open Force Field Initiative force fields:** All distributed [Open Force Field Initiative](http://openforcefield.org) force fields, including the `smirnoff99Frosst` series and [`openff-1.0.0` (\"Parsley\")](https://openforcefield.org/news/introducing-openforcefield-1.0/). *This support is experimental since it requires a development version of OpenMM 7.5.0.*\n\nResidue template generators are provided for both GAFF (`GAFFTemplateGenerator`) and SMIRNOFF (`SMIRNOFFTemplateGenerator`).\n\nThis release also contains an experimental new `SystemGenerator` for managing biopolymer and small molecule force field `System` creation via a unified API.\n\n## 0.5.0 Force fields for OpenMM 7.3.1\n\nThis release contains updated CHARMM and AMBER force fields for use with OpenMM 7.3.1.\n\n* Amber force fields were updated to versions distributed with [AmberTools 18.0](https://anaconda.org/omnia/ambertools/files)\n* Release version metadata in Amber force fields was corrected\n* CHARMM force fields were updated to [July 2018 CHARMM additive force field release](http://mackerell.umaryland.edu/charmm_ff.shtml#charmm)\n* Experimental Amber GAFF residue template generator released (requires [OpenEye Toolkit](https://docs.eyesopen.com/toolkits/python/index.html))\n\n## 0.4.0 Force fields for OpenMM 7.3.0\n\nThis release contains updated CHARMM and AMBER force fields distributed with OpenMM 7.3.0.\n\nAmber force fields were converted from the AmberTools 18 package, while CHARMM force fields were converted from the July 2016 update.\n\n## 0.3.0 Force fields for OpenMM 7.2.0 rc2\n\nThis release contains the force fields distributed with OpenMM 7.2.0 rc2\n\n## 0.2.0 Forcefields for OpenMM 7.2.0 rc1\n\nThis release contains the force fields distributed with OpenMM 7.2.0 rc1\n\n## 0.1.0 Conda-installable AMBER force fields\n\nThis prerelease allows installation of AmberTools 16 via conda.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenmm%2Fopenmmforcefields","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenmm%2Fopenmmforcefields","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenmm%2Fopenmmforcefields/lists"}