{"id":47600662,"url":"https://github.com/ericchansen/q2mm","last_synced_at":"2026-04-01T18:50:10.223Z","repository":{"id":20064414,"uuid":"23333127","full_name":"ericchansen/q2mm","owner":"ericchansen","description":"Quantum to Molecular Mechanics (Q2MM)","archived":false,"fork":false,"pushed_at":"2026-03-26T17:53:07.000Z","size":18589,"stargazers_count":22,"open_issues_count":20,"forks_count":29,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-03-26T19:26:41.157Z","etag":null,"topics":["force-field-optimization","force-fields","molecular-mechanics","optimal-parameters","quantum","schrodinger"],"latest_commit_sha":null,"homepage":"https://ericchansen.github.io/q2mm/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericchansen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"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":"2014-08-26T00:21:27.000Z","updated_at":"2026-03-26T17:52:36.000Z","dependencies_parsed_at":"2022-07-14T04:50:30.021Z","dependency_job_id":"329bcfed-d5dd-4886-a78e-15ba777cc52d","html_url":"https://github.com/ericchansen/q2mm","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ericchansen/q2mm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericchansen%2Fq2mm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericchansen%2Fq2mm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericchansen%2Fq2mm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericchansen%2Fq2mm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericchansen","download_url":"https://codeload.github.com/ericchansen/q2mm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericchansen%2Fq2mm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: 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":["force-field-optimization","force-fields","molecular-mechanics","optimal-parameters","quantum","schrodinger"],"created_at":"2026-04-01T18:50:09.558Z","updated_at":"2026-04-01T18:50:10.215Z","avatar_url":"https://github.com/ericchansen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Q2MM\n\n**Quantum-guided molecular mechanics force field optimization.**\n\n[![CI](https://github.com/ericchansen/q2mm/actions/workflows/ci.yml/badge.svg)](https://github.com/ericchansen/q2mm/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/q2mm)](https://pypi.org/project/q2mm/)\n[![Python](https://img.shields.io/pypi/pyversions/q2mm)](https://pypi.org/project/q2mm/)\n\nQ2MM optimizes molecular mechanics (MM) force field parameters by minimizing\nthe difference between MM-calculated properties and quantum mechanics (QM)\nreference data. It is designed for building **transition state force fields\n(TSFFs)** that enable rapid virtual screening of enantioselective catalysts.\n\n**📖 [Documentation](https://ericchansen.github.io/q2mm/)**\n\n## Why Q2MM?\n\n- **Hessian-informed initialization** — the Seminario method extracts bond and\n  angle force constants directly from QM Hessians, providing excellent starting\n  parameters before optimization begins.\n- **Open-source backends** — first-class support for [OpenMM](https://openmm.org/)\n  and [Psi4](https://psicode.org/) alongside commercial packages (Gaussian,\n  Schrödinger, Tinker).\n- **Clean, modular architecture** — format-agnostic data models (`ForceField`,\n  `Q2MMMolecule`) decouple algorithms from file formats.\n- **Modern optimization** — powered by `scipy.optimize` with L-BFGS-B,\n  Nelder-Mead, trust-region, and Levenberg-Marquardt methods.\n- **Transition state support** — negative force constants, torsion parameters,\n  and proper eigenvalue handling for saddle-point geometries.\n\n## Quick Start\n\n```bash\npip install \"q2mm[openmm,optimize]\"   # OpenMM backend + scipy optimizer\n```\n\n\u003e **Pre-release:** the current version is an alpha. Add `--pre` to any\n\u003e install command (e.g. `pip install --pre \"q2mm[openmm,optimize]\"`) if a\n\u003e stable release hasn't been published yet.\n\nFor development, clone the repo and install in editable mode:\n\n```bash\npip install -e \".[dev]\"\n```\n\n```python\nfrom q2mm.optimizers.objective import ReferenceData, ObjectiveFunction\nfrom q2mm.optimizers.scipy_opt import ScipyOptimizer\nfrom q2mm.models.seminario import estimate_force_constants\nfrom q2mm.backends.mm import OpenMMEngine\n\n# 1. Load QM reference data and molecule from a Gaussian checkpoint\nref, mol = ReferenceData.from_fchk(\"ts-optimized.fchk\", bond_tolerance=1.4)\n\n# 2. Estimate initial force field from the QM Hessian (Seminario method)\nff = estimate_force_constants(mol, au_hessian=True)\n\n# 3. Set up the objective function and optimize\nengine = OpenMMEngine()\nobj = ObjectiveFunction(ff, engine, [mol], ref)\nresult = ScipyOptimizer(method=\"L-BFGS-B\").optimize(obj)\n\nprint(result.summary())\n```\n\n`ReferenceData.from_fchk()` auto-extracts bond lengths and angles from the\nQM geometry. You can also use `from_gaussian()` for `.log` files, or\n`from_molecule()` for maximum control. See the\n[Tutorial](https://ericchansen.github.io/q2mm/tutorial/) for the full\nworkflow including frequencies, eigenmatrix data, and multi-molecule fits.\n\n## Supported Backends\n\n| Backend | Type | License |\n|---------|------|---------|\n| **OpenMM** | MM | MIT |\n| **Psi4** | QM | BSD-3 |\n| **Tinker** | MM | Free (academic) |\n| **Gaussian** | QM | Commercial |\n| **Schrödinger** | QM/MM | Commercial |\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing with\nDocker, and submitting changes.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericchansen%2Fq2mm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericchansen%2Fq2mm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericchansen%2Fq2mm/lists"}