{"id":32176456,"url":"https://github.com/jag1g13/pycgtool","last_synced_at":"2025-10-21T20:00:14.764Z","repository":{"id":37686773,"uuid":"51828400","full_name":"jag1g13/pycgtool","owner":"jag1g13","description":"Generate coarse-grained molecular dynamics models from atomistic trajectories.","archived":false,"fork":false,"pushed_at":"2022-12-08T14:12:57.000Z","size":6700,"stargazers_count":64,"open_issues_count":6,"forks_count":13,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-10-21T19:59:59.189Z","etag":null,"topics":["coarse-grained-molecular-dynamics","computational-chemistry","gromacs","molecular-dynamics","python","science"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jag1g13.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-16T10:39:28.000Z","updated_at":"2025-05-21T21:04:18.000Z","dependencies_parsed_at":"2023-01-25T13:16:35.684Z","dependency_job_id":null,"html_url":"https://github.com/jag1g13/pycgtool","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/jag1g13/pycgtool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jag1g13%2Fpycgtool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jag1g13%2Fpycgtool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jag1g13%2Fpycgtool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jag1g13%2Fpycgtool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jag1g13","download_url":"https://codeload.github.com/jag1g13/pycgtool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jag1g13%2Fpycgtool/sbom","scorecard":{"id":502003,"data":{"date":"2025-08-11","repo":{"name":"github.com/jag1g13/pycgtool","commit":"cfe983b800b19bbe6f2a29a434cbadd4d7e994b4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Warn: no topLevel permission defined: .github/workflows/python-package.yml: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":"Code-Review","score":0,"reason":"Found 0/3 approved changesets -- score normalized to 0","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":"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":"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":"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.0.0 not signed: https://api.github.com/repos/jag1g13/pycgtool/releases/62049137","Warn: release artifact v2.0.0-beta.4 not signed: https://api.github.com/repos/jag1g13/pycgtool/releases/51081181","Warn: release artifact v2.0.0-beta.3 not signed: https://api.github.com/repos/jag1g13/pycgtool/releases/47858413","Warn: release artifact v2.0.0-beta.2 not signed: https://api.github.com/repos/jag1g13/pycgtool/releases/43787178","Warn: release artifact v2.0.0 does not have provenance: https://api.github.com/repos/jag1g13/pycgtool/releases/62049137","Warn: release artifact v2.0.0-beta.4 does not have provenance: https://api.github.com/repos/jag1g13/pycgtool/releases/51081181","Warn: release artifact v2.0.0-beta.3 does not have provenance: https://api.github.com/repos/jag1g13/pycgtool/releases/47858413","Warn: release artifact v2.0.0-beta.2 does not have provenance: https://api.github.com/repos/jag1g13/pycgtool/releases/43787178"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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/publish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/python-package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/python-package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-package.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/jag1g13/pycgtool/python-package.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:48","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:49","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:50","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/python-package.yml:51","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   5 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"}},{"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":"Vulnerabilities","score":0,"reason":"29 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2022-288 / GHSA-6hrg-qmvc-2xh8","Warn: Project is vulnerable to: PYSEC-2023-23 / GHSA-jrwr-5x3p-hvc3","Warn: Project is vulnerable to: PYSEC-2023-24 / GHSA-vrjv-mxr7-vjf8","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2022-42969","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: GHSA-jxfp-4rvq-9h9m","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2024-187 / GHSA-rqc4-2hc7-8c8v","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T22:10:03.563Z","repository_id":37686773,"created_at":"2025-08-19T22:10:03.563Z","updated_at":"2025-08-19T22:10:03.563Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280325299,"owners_count":26311419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["coarse-grained-molecular-dynamics","computational-chemistry","gromacs","molecular-dynamics","python","science"],"created_at":"2025-10-21T20:00:08.933Z","updated_at":"2025-10-21T20:00:14.742Z","avatar_url":"https://github.com/jag1g13.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyCGTOOL\n\n[![License](https://img.shields.io/github/license/jag1g13/pycgtool.svg)](LICENSE)\n[![Python package](https://github.com/jag1g13/pycgtool/actions/workflows/python-package.yml/badge.svg?branch=dev)](https://github.com/jag1g13/pycgtool/actions)\n[![Documentation](https://readthedocs.org/projects/pycgtool/badge/?version=dev)](http://pycgtool.readthedocs.io/en/dev)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.598143.svg)](https://doi.org/10.5281/zenodo.598143)\n[![PyPi Version](https://img.shields.io/pypi/v/pycgtool.svg)](https://pypi.python.org/pypi/pycgtool/)\n[![conda-forge Version](https://anaconda.org/conda-forge/pycgtool/badges/version.svg)](https://anaconda.org/conda-forge/pycgtool/badges/version.svg)\n\nGenerate coarse-grained molecular dynamics models from atomistic trajectories.\n\nPyCGTOOL is a tool to aid in parametrising coarse-grained (CG) molecular mechanics models of small molecules, for example for simulations using the popular MARTINI model.\nIt generates coarse-grained model parameters from atomistic simulation trajectories using a user-provided mapping.\nEquilibrium values and force constants of bonded terms are calculated by Boltzmann Inversion of bond distributions collected from the input trajectory.\n\nAlternatively map-only mode (behaving similarly to MARTINIZE) may be used to generate initial coordinates to use with existing CG topologies such as the MARTINI lipid models.\nFor instance, a pre-equilibrated atomistic membrane may be used to create starting coordinates for a CG membrane simulation.\n\nPyCGTOOL makes it quick and easy to test multiple variations in mapping and bond topology by making simple changes to the config files.\n\nIf you find PyCGTOOL useful, please cite our JCIM paper (https://doi.org/10.1021/acs.jcim.7b00096) and the code itself (https://doi.org/10.5281/zenodo.598143).\n\n```bibtex\n@article{Graham2017,\n   author = {James A. Graham and Jonathan W. Essex and Syma Khalid},\n   doi = {10.1021/acs.jcim.7b00096},\n   issn = {1549-9596},\n   issue = {4},\n   journal = {Journal of Chemical Information and Modeling},\n   month = {4},\n   pages = {650-656},\n   title = {PyCGTOOL: Automated Generation of Coarse-Grained Molecular Dynamics Models from Atomistic Trajectories},\n   volume = {57},\n   url = {https://pubs.acs.org/doi/10.1021/acs.jcim.7b00096},\n   year = {2017},\n}\n```\n\n## Install\n\nPyCGTOOL requires Python 3.6 or higher and may be installed using either `pip` or `conda`:\n```\npip install pycgtool\n```\n\n```\nconda install -c conda-forge pycgtool\n```\n\nAlternatively, you may download a pre-packaged version for your operating system from the [releases page](https://github.com/jag1g13/pycgtool/releases) on GitHub.\nThese pre-packaged versions include all dependencies and should be suitable in cases where you cannot install packages using one of the above methods.\n**Warning**: This installation method is not extensively tested - installing via `pip` or `conda` should be prefered in most cases.\n\n### MDTraj on macOS\n\nOn some versions macOS, with some versions of the Clang compiler, MDTraj may fail to load GROMACS XTC simulation trajectories.\nIf you encounter this issue, please make sure you have the latest version of MDTraj installed.\n\nFor more information see [MDTraj/#1572](https://github.com/mdtraj/mdtraj/issues/1572).\n\n## Usage\n\nInput to PyCGTOOL is an atomistic simulation trajectory in the form of a topology (e.g. PDB, GRO, etc.) and a trajectory file (e.g. XTC, DCD, etc.), along with two custom files which describe the CG model to be generated: mapping (`.map`) and bonding (`.bnd`).\nThese files provide the atomistic-to-CG mapping and bonded topology respectively and use a format similar to GROMACS `.itp` files.\nTopology and trajectory files are processed using [MDTraj](https://www.mdtraj.org) so most common formats are accepted.\n\nExample mapping and bond files are present in the [test/data](https://github.com/jag1g13/pycgtool/tree/main/test/data) directory.\nThe format of these files is described fully in the [documentation page on file formats](https://pycgtool.readthedocs.io/en/dev/file-formats.html).\n\nFor more information, see [the tutorial](https://pycgtool.readthedocs.io/en/main/tutorial.html).\nIt is important to perform validation of any new parameter set - a brief example is present at the end of the tutorial.\n\nFor a full list of options, see the [documentation](https://pycgtool.readthedocs.io/en/main/index.html) or use:\n```\npycgtool -h\n```\n\n### Generate a Model\n\nTo generate a CG model from an atomistic simulation:\n```\npycgtool \u003ctopology file\u003e \u003ctrajectory file\u003e -m \u003cMAP file\u003e -b \u003cBND file\u003e\n```\n\n### Map Only\n\nTo use PyCGTOOL to convert a set of atomistic simulation coordinates to CG coordinates:\n```\npycgtool \u003ctopology file\u003e -m \u003cMAP file\u003e\n```\n\nOr to convert a complete simulation trajectory:\n```\npycgtool \u003ctopology file\u003e \u003ctrajectory file\u003e -m \u003cMAP file\u003e\n```\n\n## Maintainers\n\nJames Graham ([@jag1g13](https://github.com/jag1g13))\n\n## Contributing\n\nIf you experience problems using PyCGTOOL or wish to see a new feature added please [open an issue](https://github.com/jag1g13/pycgtool/issues/new).\n\nTo help develop PyCGTOOL, you can create a fork of this repository, clone your fork and install PyCGTOOL in development mode using [Poetry](https://python-poetry.org/):\n```\npoetry install\n```\n\nThis will result in an editable mode install (similar to `pip install -e .`) along with all the necessary runtime and development dependencies.\nTesting and linting is handled by [Tox](https://tox.readthedocs.io/en/latest/) - use `tox` to run the full test suite and linter as they are configured in the Continuous Integration pipeline.\n\nWhen you're ready for your work to be merged, please submit a Pull Request.\n\n## License\n\n[GPL-3.0](LICENSE) © James Graham, University of Southampton\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjag1g13%2Fpycgtool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjag1g13%2Fpycgtool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjag1g13%2Fpycgtool/lists"}