diff --git a/.github/workflows/check_acpype.yml b/.github/workflows/check_acpype.yml index 46ef6839..6b7b2f23 100644 --- a/.github/workflows/check_acpype.yml +++ b/.github/workflows/check_acpype.yml @@ -1,114 +1,120 @@ # This workflow will install Python dependencies, run tests and lint with a single version of Python # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: check_acpype + on: - push: - branches: - - master - pull_request: - branches: - - master + push: + branches: + - master + pull_request: + branches: + - master + paths: + - "acpype/**" + - "tests/**" + jobs: - check-test: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - # - name: Python Poetry Action - # uses: abatilo/actions-poetry@v2.1.3 - - - name: Cache pip - uses: actions/cache@v2 - with: - # This path is specific to Ubuntu - path: ~/.cache/pip - # Look to see if there is a cache hit for the corresponding requirements file - key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - ${{ runner.os }}- - - - name: Set Env - run: | - echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV - echo "AMBERHOME=$PWD/acpype/amber21-11_linux" >> $GITHUB_ENV - echo "$PWD/acpype/amber21-11_linux/bin" >> $GITHUB_PATH - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends tzdata libarpack++2-dev - - - name: Install OpenBabel - run: | - sudo apt-get install --no-install-recommends -y openbabel - - - name: Poetry install dependencies - run: | - pip3 install poetry - poetry add openbabel-wheel - poetry install - - - name: Lint with flake8 - run: poetry run flake8 -v --count - - - name: Check format with black - run: poetry run black --diff --check . - - - name: Run isort - run: poetry run isort . --check-only --profile black - - - name: Test with PyTest - run: | - poetry run pytest --color=yes --cov=./ --cov-report=xml - - - name: Upload coverage to Codecov - if: matrix.python-version == 3.6 - uses: codecov/codecov-action@v2 - with: - fail_ci_if_error: true - - release: - needs: check-test - runs-on: ubuntu-latest - steps: - - name: Get current date - id: date - run: echo "::set-output name=date::$(date +'%Y.%-m.%-d')" - - - name: Create tag - # will only create a new release if the commit message is 'new_release' to master branch - if: github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, 'new_tag') - uses: actions/github-script@v3 - with: - # github-token: ${{ github.token }} # optional - script: | - github.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref: "refs/tags/${{ steps.date.outputs.date }}", - sha: context.sha - }) - - - name: Create Release - # will only create a new release if the commit message is 'new_release' to master branch - if: github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, 'new_release') - id: create_release - uses: actions/create-release@v1 - env: - # This token is provided by Actions, you do not need to create your own token - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ steps.date.outputs.date }} - release_name: Release ${{ steps.date.outputs.date }} - draft: false - prerelease: false + check-test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + # - name: Python Poetry Action + # uses: abatilo/actions-poetry@v2.1.3 + + - name: Cache pip + uses: actions/cache@v2 + with: + # This path is specific to Ubuntu + path: ~/.cache/pip + # Look to see if there is a cache hit for the corresponding requirements file + key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + + - name: Set Env + run: | + echo "PYTEST_ADDOPTS=--random-order" >> $GITHUB_ENV + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + echo "AMBERHOME=$PWD/acpype/amber21-11_linux" >> $GITHUB_ENV + echo "$PWD/acpype/amber21-11_linux/bin" >> $GITHUB_PATH + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends tzdata libarpack++2-dev + + - name: Install OpenBabel + run: | + sudo apt-get install --no-install-recommends -y openbabel + + - name: Poetry install dependencies + run: | + pip3 install poetry + poetry add openbabel-wheel + poetry install + + - name: Lint with flake8 + run: poetry run flake8 -v --count + + - name: Check format with black + run: poetry run black --diff --check . + + - name: Run isort + run: poetry run isort . --check-only --profile black + + - name: Test with PyTest + run: | + poetry run pytest --color=yes --cov=acpype --cov=tests --cov-report=xml + + - name: Upload coverage to Codecov + if: matrix.python-version == 3.6 + uses: codecov/codecov-action@v2 + with: + fail_ci_if_error: true + + release: + needs: check-test + runs-on: ubuntu-latest + steps: + - name: Get current date + id: date + run: echo "::set-output name=date::$(date +'%Y.%-m.%-d')" + + - name: Create tag + # will only create a new release if the commit message is 'new_release' to master branch + if: github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, 'new_tag') + uses: actions/github-script@v3 + with: + # github-token: ${{ github.token }} # optional + script: | + github.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "refs/tags/${{ steps.date.outputs.date }}", + sha: context.sha + }) + + - name: Create Release + # will only create a new release if the commit message is 'new_release' to master branch + if: github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, 'new_release') + id: create_release + uses: actions/create-release@v1 + env: + # This token is provided by Actions, you do not need to create your own token + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.date.outputs.date }} + release_name: Release ${{ steps.date.outputs.date }} + draft: false + prerelease: false diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9c86176d..1204eda2 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -1,7 +1,7 @@ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # -# You may wish to alter this file to override the set of languages analyzed, +# You may wish to alter this file to override the set of languages analysed, # or to provide custom queries or build logic. # # ******** NOTE ******** @@ -13,10 +13,14 @@ name: "CodeQL" on: push: - branches: [master] + branches: + - master pull_request: - # The branches below must be a subset of the branches above - branches: [master] + branches: + - master + paths: + - "acpype/**" + - "tests/**" schedule: - cron: "15 0 * * *" diff --git a/.gitignore b/.gitignore index e280b939..18739599 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,7 @@ coverage.xml # Sphinx documentation docs/_build/ +docs/_autosummary pip-selfcheck.json *.acpype diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dbc88bd7..b7a26aa4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,12 @@ repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.1.0 + hooks: + # - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-added-large-files + - id: debug-statements + - repo: local hooks: - id: flake8 @@ -19,6 +27,12 @@ repos: language: system types: [python] require_serial: true + - id: pyupgrade + name: pyupgrade + entry: poetry run pyupgrade --py36-plus + language: system + types: [python] + require_serial: true - id: ver_today name: ver_today entry: ./scripts/ver_today.sh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..f121fab0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,71 @@ +# Instructions for setting up a development environment + +## For Coding + +For `Linux` (Ubuntu 20 recommended) and `macOS`. Anyway, `CONDA` is strongly recommended. +Also recommended is GPG key, so do accordingly in [GitHub](https://docs.github.com/articles/generating-a-gpg-key/). + +```bash +curl -sSL https://install.python-poetry.org | python3 - + +conda create -n acpype python=3.9 ambertools openbabel ocl-icd-system ipython gromacs=2019.1 -y +# ocl-icd-system: case you have GPU + +conda activate acpype + +git clone https://github.com/alanwilter/acpype.git + +cd acpype + +poetry install + +pre-commit install + +pre-commit run -a + +sys=$(perl -e '`uname` eq "Darwin\n" ? print "os" : print "linux"') + +cp ./acpype/amber21-11_${sys}/bin/charmmgen $(dirname $(which antechamber)) + +git config user.email _email_ # as seen in 'gpg --list-secret-keys --keyid-format=long' + +git config user.signingkey _singing_key_ # as seen in 'gpg --list-secret-keys --keyid-format=long' + +git config commit.gpgsign true + +pytest --cov=tests --cov=acpype --cov-report=term-missing:skip-covered --cov-report=xml +``` + +If using `VSCode`: + +- Enable `enableCommitSigning` in `settings.json` (***Workspace*** recommended): + + ```yml + "git.enableCommitSigning": true, + ``` + +- Another `VSCode` nuisance, if using its graphic buttons for commit etc.: its environment won't necessarily recognise the dependencies installed via `poetry` under `conda` environment named `acpype` (unless you have started `VSCode` from folder repository with command `code .`). To avoid troubles do: + + ```bash + conda deactivate + poetry install # it will create its own virtualenv + ``` + + You could use this `poetry virtualenv` as the `Python Interpreter` for `VSCode`, however `ambertools`, `gromacs` and `openbabel` won't be available (unless you've had installed them system wide by other means rather than `conda`). + To avoid further troubles, go back to `conda activate acpype` and remember to do the instructions above if you add new dependencies to the project via `poetry`. + +## For Documenting + +Using [Sphinx](https://www.sphinx-doc.org) with theme from `pip install sphinx-rtd-theme`. + +Online documentation provided by [Read the Docs](http://acpype.readthedocs.io). + +To test it locally: + +```bash +cd docs/ +make clean +make html +``` + +Then open `_build/html/index.html` in a browser. diff --git a/FUNDING.yml b/FUNDING.yml index a7904ca3..c2d27bf7 100644 --- a/FUNDING.yml +++ b/FUNDING.yml @@ -1,2 +1,2 @@ github: [alanwilter] -custom: ["https://www.paypal.me/alanwilter"] \ No newline at end of file +custom: ["https://www.paypal.me/alanwilter"] diff --git a/README.md b/README.md index 683250ca..f450986d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,10 @@ [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=plastic)](https://github.com/pre-commit/pre-commit) [![Commits since release](https://img.shields.io/github/commits-since/alanwilter/acpype/2021.12.24/master?style=plastic)](https://github.com/alanwilter/acpype/commits/master) [![Codecov](https://img.shields.io/codecov/c/github/alanwilter/acpype?style=plastic)](https://app.codecov.io/gh/alanwilter/acpype) - +[![Documentation Status](https://readthedocs.org/projects/acpype/badge/?version=latest&style=plastic)](https://acpype.readthedocs.io/en/latest/?badge=latest) +[![Citations](https://img.shields.io/static/v1?label=Citations&message=1040&color=orange&style=plastic)](https://scholar.google.com/scholar?hl=en&as_sdt=2005&sciodt=0%2C5&cites=15065215520855508960&scipsc=&q=ACPYPE-Antechamber+python+parser+interface&btnG=) + + @@ -38,6 +41,8 @@ Several flavours of AMBER FF are ported already for GROMACS (see [ffamber](http: This code is released under **[GNU General Public License V3](https://www.gnu.org/licenses/gpl-3.0.en.html)**. +See online [documentation](https://acpype.readthedocs.io/) for more. + ### **NO WARRANTY AT ALL** It was inspired by: diff --git a/_config.yml b/_config.yml index ddeb671b..f93e2583 100644 --- a/_config.yml +++ b/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-time-machine \ No newline at end of file +theme: jekyll-theme-time-machine diff --git a/acpype/__init__.py b/acpype/__init__.py index 8aac1a7f..7ec0a758 100644 --- a/acpype/__init__.py +++ b/acpype/__init__.py @@ -1,4 +1,58 @@ +""" + The Package + + Requirements: + - ``Python 3.6`` or higher + - ``Antechamber`` (from ``AmberTools`` preferably) + - ``OpenBabel`` (optional, but strongly recommended) + + This code is released under **GNU General Public License V3**. + + **<<< NO WARRANTY AT ALL!!! >>>** + + It was inspired by: + + - ``amb2gmx.pl`` (Eric Sorin, David Mobley and John Chodera) and depends on Antechamber and Openbabel + - `YASARA Autosmiles `_ (Elmar Krieger) + - ``topolbuild`` (Bruce Ray) + - ``xplo2d`` (G.J. Kleywegt) + + For Non-uniform 1-4 scale factor conversion (e.g. if using ``GLYCAM06``), please cite: + + BERNARDI, A., FALLER, R., REITH, D., and KIRSCHNER, K. N. ACPYPE update for + nonuniform 1-4 scale factors: Conversion of the GLYCAM06 force field from AMBER + to GROMACS. SoftwareX 10 (2019), 100241. + doi: `10.1016/j.softx.2019.100241 `_ + + For Antechamber, please cite: + + 1. WANG, J., WANG, W., KOLLMAN, P. A., and CASE, D. A. Automatic atom type and + bond type perception in molecular mechanical calculations. Journal of Molecular + Graphics and Modelling 25, 2 (2006), 247-260. + doi: `10.1016/j.jmgm.2005.12.005 `_ + 2. WANG, J., WOLF, R. M., CALDWELL, J. W., KOLLMAN, P. A., and CASE, D. A. + Development and testing of a General Amber Force Field. Journal of Computational + Chemistry 25, 9 (2004), 1157-1174. + doi: `10.1002/jcc.20035 `_ + + If you use this code, I am glad if you cite: + + SOUSA DA SILVA, A. W. & VRANKEN, W. F. + ACPYPE - AnteChamber PYthon Parser interfacE. + BMC Research Notes 5 (2012), 367 + doi: `10.1186/1756-0500-5-367 `_ + + and (optionally) + + BATISTA, P. R.; WILTER, A.; DURHAM, E. H. A. B. & PASCUTTI, P. G. Molecular + Dynamics Simulations Applied to the Study of Subtypes of HIV-1 Protease. + Cell Biochemistry and Biophysics 44 (2006), 395-404. + doi: `10.1385/CBB:44:3:395 `_ + + Alan Silva, D.Sc. +""" + # from https://packaging.python.org/guides/single-sourcing-package-version/ # using option 2 # updated automatically via pre-commit git-hook -__version__ = "2021.12.25" +__version__ = "2022.1.3" diff --git a/acpype/acs_api.py b/acpype/acs_api.py index 35d0a9c8..cd3d82dd 100644 --- a/acpype/acs_api.py +++ b/acpype/acs_api.py @@ -67,7 +67,7 @@ def readFiles(basename, chargeType, atomType): filename = basename + "_" + chargeType + "_" + atomType + files[1] else: filename = basename + files[1] - readfile = tuple(open(filename, "r")) + readfile = tuple(open(filename)) for line in readfile: files[0].write(line) @@ -171,5 +171,5 @@ def acpype_api( try: shutil.rmtree(molecule.absHomeDir) except Exception: - pass + print("DEBUG: No folder left to be removed") return json.dumps(output) diff --git a/acpype/amber21-11_linux/bin/am1bcc b/acpype/amber21-11_linux/bin/am1bcc index 7aff7250..6ec88848 100755 --- a/acpype/amber21-11_linux/bin/am1bcc +++ b/acpype/amber21-11_linux/bin/am1bcc @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/am1bcc "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/am1bcc "$@" diff --git a/acpype/amber21-11_linux/bin/antechamber b/acpype/amber21-11_linux/bin/antechamber index 89285850..e14a11b7 100755 --- a/acpype/amber21-11_linux/bin/antechamber +++ b/acpype/amber21-11_linux/bin/antechamber @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/antechamber "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/antechamber "$@" diff --git a/acpype/amber21-11_linux/bin/atomtype b/acpype/amber21-11_linux/bin/atomtype index b3e17770..abe002e8 100755 --- a/acpype/amber21-11_linux/bin/atomtype +++ b/acpype/amber21-11_linux/bin/atomtype @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/atomtype "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/atomtype "$@" diff --git a/acpype/amber21-11_linux/bin/bondtype b/acpype/amber21-11_linux/bin/bondtype index 0efcaba2..41bfdaa2 100755 --- a/acpype/amber21-11_linux/bin/bondtype +++ b/acpype/amber21-11_linux/bin/bondtype @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/bondtype "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/bondtype "$@" diff --git a/acpype/amber21-11_linux/bin/parmchk2 b/acpype/amber21-11_linux/bin/parmchk2 index 1d1a9ddb..aea6c466 100755 --- a/acpype/amber21-11_linux/bin/parmchk2 +++ b/acpype/amber21-11_linux/bin/parmchk2 @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/parmchk2 "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/parmchk2 "$@" diff --git a/acpype/amber21-11_linux/dat/chamber/par_all36_carb.prm b/acpype/amber21-11_linux/dat/chamber/par_all36_carb.prm index 275a5613..83ea2f00 100644 --- a/acpype/amber21-11_linux/dat/chamber/par_all36_carb.prm +++ b/acpype/amber21-11_linux/dat/chamber/par_all36_carb.prm @@ -2494,4 +2494,3 @@ OC303 0.0 -0.1000 1.6500 ! OC301 ! ! S. Marchand and B. Roux, dA = -384.8 kcal/mol END - diff --git a/acpype/amber21-11_linux/dat/chamber/top_all22_prot.inp b/acpype/amber21-11_linux/dat/chamber/top_all22_prot.inp index 31e07a62..ec4a0aab 100644 --- a/acpype/amber21-11_linux/dat/chamber/top_all22_prot.inp +++ b/acpype/amber21-11_linux/dat/chamber/top_all22_prot.inp @@ -1798,4 +1798,3 @@ IC 1C 2N 2CA 2C 0.0000 0.0000 180.0000 0.0000 0.0000 IC 1C 2CA *2N 2HN 0.0000 0.0000 180.0000 0.0000 0.0000 END - diff --git a/acpype/amber21-11_linux/dat/chamber/top_all27_prot_na.rtf b/acpype/amber21-11_linux/dat/chamber/top_all27_prot_na.rtf index fa069cda..5f362fdb 100644 --- a/acpype/amber21-11_linux/dat/chamber/top_all27_prot_na.rtf +++ b/acpype/amber21-11_linux/dat/chamber/top_all27_prot_na.rtf @@ -2572,4 +2572,3 @@ IC 1C4' 1C3' 1O3' 2P 1.5284 111.92 159.13 119.05 1.6001 IC 1C3' 1O3' 2P 2O5' 1.4212 119.05 -98.86 101.45 1.5996 END - diff --git a/acpype/amber21-11_linux/dat/chamber/top_all36_carb.rtf b/acpype/amber21-11_linux/dat/chamber/top_all36_carb.rtf index 69bac408..39539151 100644 --- a/acpype/amber21-11_linux/dat/chamber/top_all36_carb.rtf +++ b/acpype/amber21-11_linux/dat/chamber/top_all36_carb.rtf @@ -5602,4 +5602,3 @@ IC O5 OP52 *P5 OP53 1.5968 102.94 113.03 118.81 1.5471 IC O5 OP52 *P5 OP54 1.5968 102.94 -113.60 109.37 1.4811 END - diff --git a/acpype/amber21-11_linux/dat/chamber/top_all36_prot.rtf b/acpype/amber21-11_linux/dat/chamber/top_all36_prot.rtf index ab8ec747..e4a9ce58 100644 --- a/acpype/amber21-11_linux/dat/chamber/top_all36_prot.rtf +++ b/acpype/amber21-11_linux/dat/chamber/top_all36_prot.rtf @@ -1704,4 +1704,3 @@ IC 1C 2N 2CA 2C 0.0000 0.0000 180.0000 0.0000 0.0000 IC 1C 2CA *2N 2HN 0.0000 0.0000 180.0000 0.0000 0.0000 END - diff --git a/acpype/amber21-11_linux/dat/chamber/toppar_water_ions.str b/acpype/amber21-11_linux/dat/chamber/toppar_water_ions.str index d0ab01f8..9096dd0b 100644 --- a/acpype/amber21-11_linux/dat/chamber/toppar_water_ions.str +++ b/acpype/amber21-11_linux/dat/chamber/toppar_water_ions.str @@ -306,4 +306,3 @@ BOMLEV @bom @PARA WRNLEV @wrn @PARA return - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.OL3 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.OL3 index af6ab238..de49b9ea 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.OL3 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.OL3 @@ -134,4 +134,3 @@ addPdbAtomMap { { "O2P" "OP2" } { "O3P" "OP3" } } - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.ROC b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.ROC index 83478d8c..ea4c4243 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.ROC +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.ROC @@ -134,4 +134,3 @@ addPdbAtomMap { { "O1P" "OP1" } { "O2P" "OP2" } } - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.Shaw b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.Shaw index 29e229d1..d95015b6 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.Shaw +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.RNA.Shaw @@ -142,4 +142,3 @@ addPdbAtomMap { { "O1P" "OP1" } { "O2P" "OP2" } } - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.amberdyes b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.amberdyes index 088d852c..9aeb7524 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.amberdyes +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.amberdyes @@ -45,5 +45,3 @@ dyeparams = loadamberparams amberdyes.dat # Load the AmberDyes lib files # loadoff amberdyes.lib - - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid14 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid14 index 3052988a..03b05f83 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid14 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid14 @@ -47,4 +47,3 @@ lipid14 = loadamberparams lipid14.dat # Load the Lipid14 master lib file. # Note that other residues are stored in the lipid14_supp.lib file and will be released at a later date. loadoff lipid14.lib - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid17 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid17 index cdb75a74..6c0821fd 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid17 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.lipid17 @@ -42,4 +42,3 @@ lipid17 = loadamberparams lipid17.dat # Load the Lipid17 master lib file. # loadoff lipid17.lib - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.music b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.music index 9b3e17d4..bce07722 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.music +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.music @@ -17,4 +17,3 @@ addAtomTypes { # loadOff music.lib music = loadamberparams music.dat - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.protein.fb15 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.protein.fb15 index a2d52f0d..fcb6ed5f 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.protein.fb15 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.protein.fb15 @@ -159,4 +159,3 @@ addPdbResMap { NHIS = NHIE HIS = HIE CHIS = CHIE - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb3 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb3 index 8850b444..eb324fac 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb3 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb3 @@ -73,4 +73,3 @@ HOH = FB3 WAT = FB3 mods2 = loadamberparams frcmod.tip3pfb loadAmberParams frcmod.ionslm_126_fb3 - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb4 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb4 index a81a0e01..d7d66f0d 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb4 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.fb4 @@ -74,4 +74,3 @@ HOH = FB4 WAT = FB4 mods2 = loadamberparams frcmod.tip4pfb loadAmberParams frcmod.ionslm_126_fb4 - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc index d8ce23bd..b4937f12 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc @@ -74,4 +74,3 @@ HOH = OPC WAT = OPC loadAmberParams frcmod.opc loadAmberParams frcmod.ionslm_126_opc - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc3 b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc3 index ef16ab99..162dee53 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc3 +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.opc3 @@ -73,4 +73,3 @@ HOH = OP3 WAT = OP3 loadAmberParams frcmod.opc3 loadAmberParams frcmod.ionslm_126_opc3 - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spce b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spce index 1925eeae..4cda39aa 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spce +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spce @@ -74,4 +74,3 @@ WAT = SPC loadAmberParams frcmod.spce loadAmberParams frcmod.ionsjc_spce loadAmberParams frcmod.ions234lm_126_spce - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spceb b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spceb index 33d58d6d..3b694441 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spceb +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.spceb @@ -21,4 +21,3 @@ WAT = SPC loadAmberParams frcmod.spceb loadAmberParams frcmod.ionsjc_spce loadAmberParams frcmod.ions234lm_126_spce - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip3p b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip3p index 19cf3d48..cf1ead74 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip3p +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip3p @@ -82,4 +82,3 @@ loadAmberParams frcmod.tip3p loadAmberParams frcmod.ions1lm_126_tip3p loadAmberParams frcmod.ionsjc_tip3p loadAmberParams frcmod.ions234lm_126_tip3p - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pd b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pd index d09dc07f..2431c67b 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pd +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pd @@ -72,4 +72,3 @@ HOH = T4D WAT = T4D loadAmberParams frcmod.tip4pd loadAmberParams frcmod.ions_charmm22 - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pew b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pew index a6fcfc25..db5ffea9 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pew +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.water.tip4pew @@ -75,4 +75,3 @@ WAT = T4E loadAmberParams frcmod.tip4pew loadAmberParams frcmod.ionsjc_tip4pew loadAmberParams frcmod.ions234lm_126_tip4pew - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.xFPchromophores b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.xFPchromophores index 82fce3a0..fb1a9af2 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/leaprc.xFPchromophores +++ b/acpype/amber21-11_linux/dat/leap/cmd/leaprc.xFPchromophores @@ -17,4 +17,3 @@ xFPparams = loadamberparams frcmod.xFPchromophores # loadOff xFPchromophores.lib - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02 index 47fd1641..9a06ac0b 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02 @@ -167,4 +167,3 @@ addPdbAtomMap { NHIS = NHIE HIS = HIE CHIS = CHIE - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r0 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r0 index 732b376c..32441dc2 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r0 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r0 @@ -169,4 +169,3 @@ addPdbAtomMap { NHIS = NHIE HIS = HIE CHIS = CHIE - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r1 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r1 index c6d9f3d1..c88a40a1 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r1 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff02pol.r1 @@ -183,4 +183,3 @@ addPdbAtomMap { NHIS = NHIE HIS = HIE CHIS = CHIE - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff14SB b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff14SB index 38c3ee16..48a06105 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff14SB +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff14SB @@ -206,4 +206,3 @@ addPdbAtomMap { NHIS = NHIE HIS = HIE CHIS = CHIE - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff86 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff86 index 0204b6fa..bf6d8e6a 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff86 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.ff86 @@ -218,4 +218,3 @@ CM = CMET CS = CSER CT = CTHR CP = CPRO - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.lipid11 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.lipid11 index 521b5e03..e30b9b49 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.lipid11 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.lipid11 @@ -44,4 +44,3 @@ lipid11 = loadamberparams lipid11.dat # Load the Lipid 11 master lib file. loadoff lipid11.lib - diff --git a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.parmbsc0_chiOL4_ezOL1 b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.parmbsc0_chiOL4_ezOL1 index 5b6608fd..3f88d02a 100644 --- a/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.parmbsc0_chiOL4_ezOL1 +++ b/acpype/amber21-11_linux/dat/leap/cmd/oldff/leaprc.parmbsc0_chiOL4_ezOL1 @@ -23,4 +23,3 @@ addPdbAtomMap { loadamberprep dna_nuc94-bsc0_chiOl4-ezOL1.in ez = loadamberparams frcmod.parmbsc0_ezOL1 chi = loadamberparams frcmod.chiOL4 - diff --git a/acpype/amber21-11_linux/dat/leap/lib/Makefile b/acpype/amber21-11_linux/dat/leap/lib/Makefile index 4191e69f..973b69c9 100644 --- a/acpype/amber21-11_linux/dat/leap/lib/Makefile +++ b/acpype/amber21-11_linux/dat/leap/lib/Makefile @@ -51,4 +51,3 @@ ff12polL: ff12polA: /bin/rm -f ff12polA.log ../../../bin/teLeap -s -f ff12polA.cmd - diff --git a/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.lib b/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.lib index b461fd86..e64d8d03 100644 --- a/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.lib +++ b/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.lib @@ -1030,4 +1030,3 @@ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.readme b/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.readme index f0cac2c8..70409c86 100644 --- a/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.readme +++ b/acpype/amber21-11_linux/dat/leap/lib/oldff/phosphoaa10.readme @@ -23,5 +23,3 @@ phosphohistidine %V 12 %P 281-289 %D 2006 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/GLYCAM_06EPb.dat b/acpype/amber21-11_linux/dat/leap/parm/GLYCAM_06EPb.dat index a376165d..6d2c7872 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/GLYCAM_06EPb.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/GLYCAM_06EPb.dat @@ -186,4 +186,3 @@ MOD4 RE END END - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA index 59e64b69..580b5231 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA @@ -45,4 +45,3 @@ OS-CT-N*-CS 1 0.315000 186.8 -4.0 CHI_URACIL OS-CT-N*-CS 1 0.950000 189.5 -3.0 CHI_URACIL OS-CT-N*-CS 1 1.165000 33.9 -2.0 CHI_URACIL OS-CT-N*-CS 1 0.329000 132.7 1.0 CHI_URACIL - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA_const b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA_const index 8fbbb32d..e9a3cb0e 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA_const +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ROC-RNA_const @@ -84,5 +84,3 @@ P -OS-CI-CF 1 0.383000 0.0 3.0 NONB CF 1.9080 0.1094 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.chcl3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.chcl3 index 2f1c0819..a7367733 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.chcl3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.chcl3 @@ -16,4 +16,3 @@ NONB CZ 1.9080 0.1094 CL 2.0000 0.3250 HZ 1.1870 0.0157 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.conste b/acpype/amber21-11_linux/dat/leap/parm/frcmod.conste index cd115f95..47b483e0 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.conste +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.conste @@ -109,4 +109,3 @@ NONBON LC 1.85 0.12 0.0 NP 1.8240 0.1700 0.0 NO 1.8240 0.1700 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.dc4 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.dc4 index afa13492..466dfc6e 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.dc4 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.dc4 @@ -17,4 +17,3 @@ NONBON OW 1.8150 0.1825 HW 0.0000 0.0000 EP 0.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.fb15 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.fb15 index a294dc5e..406133b4 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.fb15 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.fb15 @@ -2011,4 +2011,3 @@ NONB 6V 1.9080 0.1094 6W 1.9080 0.1094 6Y 1.9080 0.1094 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff02pol.r1 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff02pol.r1 index 0bbed679..9fba84a4 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff02pol.r1 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff02pol.r1 @@ -32,7 +32,3 @@ H0-CT-C -N 1 1.0607 180.00 1. Wang 2006 NONBON H0 1.3870 0.0157 Veenstra et al JCC,8,(1992),963 - - - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03 index 0525cad0..7af9025a 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03 @@ -32,4 +32,3 @@ H0-CT-C -N 1 1.0607 180.00 1. NONBON H0 1.3870 0.0157 Veenstra et al JCC,8,(1992),963 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03ua b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03ua index 7ceda199..bed41e3f 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03ua +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff03ua @@ -149,4 +149,3 @@ NONBON C1 1.9580 0.0994 sp3 aliphetic carbon (UA model CH ) C2 2.0580 0.1094 sp3 aliphetic carbon (UA model CH2) C3 2.0580 0.1494 sp3 aliphetic carbon (UA model CH3) - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff12SB b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff12SB index 21560bbc..29efa587 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff12SB +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff12SB @@ -529,4 +529,3 @@ NONB 3C 1.9080 0.1094 Spellmeyer C8 1.9080 0.1094 Spellmeyer CO 1.9080 0.0860 OPLS - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SB b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SB index 5fee412e..895e9d46 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SB +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SB @@ -510,5 +510,3 @@ NONB 3C 1.9080 0.1094 Spellmeyer C8 1.9080 0.1094 Spellmeyer CO 1.9080 0.0860 OPLS - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SBmodAA b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SBmodAA index 554e7294..eec2a29d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SBmodAA +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff14SBmodAA @@ -292,4 +292,3 @@ NF 1.83720000 0.10980000 8C 1.90800000 0.10940000 SC 1.90800000 0.10940000 SE 2.18000000 0.22000000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB index 33921d76..d5de3be1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB @@ -24,4 +24,3 @@ CT-CT-C -N 1 0.20 0.0 -2. CT-CT-C -N 1 0.20 0.0 1. NONB - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB14 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB14 index 2ef22ff2..c064b309 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB14 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SB14 @@ -48,4 +48,3 @@ C8-CX-C -N 1 0.20 0.0 -2. C8-CX-C -N 1 0.20 0.0 1. NONB - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBildn b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBildn index 8a67c25a..9e87e2e3 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBildn +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBildn @@ -115,4 +115,3 @@ NONB C4 1.9080 0.1094 Spellmeyer C5 1.9080 0.0860 OPLS C6 1.9080 0.0860 OPLS - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBnmr b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBnmr index 48975d59..831ac1f9 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBnmr +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SBnmr @@ -24,4 +24,3 @@ CT-CT-C -N 1 0.31 0.0 -2. CT-CT-C -N 1 0.41 180.0 1. NONB - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SP b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SP index 42c333db..bd7face1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SP +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99SP @@ -10,4 +10,3 @@ C -N -CT-C 1 0.200 180.000 -2. C -N -CT-C 1 0.000 0.000 1. NONB - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99bsc0CG b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99bsc0CG index c0f64ee8..6bd9fc3b 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99bsc0CG +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ff99bsc0CG @@ -4,4 +4,3 @@ DIHE OS-CT-N*-CK 1 0.760994 50.0 1.0 OS-CT-N*-CM 1 0.760994 50.0 -1.0 OS-CT-N*-CM 1 0.505314 74.0 2.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_spce index e959479b..e166e835 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_spce @@ -34,4 +34,3 @@ F- 1.726 0.15629366 12-6-4 set for SPC\E water from Li et al., JCTC, 2015 Cl- 2.153 0.52404590 12-6-4 set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 Br- 2.324 0.65475744 12-6-4 set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 I- 2.579 0.79809803 12-6-4 set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip3p index a1d57cc0..6c1e5528 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip3p @@ -34,4 +34,3 @@ F- 1.725 0.15557763 12-6-4 set for TIP3P water from Li et al., JCTC, 2015 Cl- 2.150 0.52153239 12-6-4 set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 Br- 2.314 0.64785703 12-6-4 set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 I- 2.567 0.79269938 12-6-4 set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip4pew index 29d8418d..39c70673 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_1264_tip4pew @@ -34,4 +34,3 @@ F- 1.728 0.15773029 12-6-4 set for TIP4P\EW water from Li et al., JCTC, 2 Cl- 2.154 0.52488228 12-6-4 set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 Br- 2.326 0.65612582 12-6-4 set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 I- 2.585 0.80075128 12-6-4 set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_spce index bdb4eee7..153a6930 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_spce @@ -30,4 +30,3 @@ F- 1.819 0.22878796 HFE set for SPC\E water from Li et al., JCTC, 2015, 1 Cl- 2.308 0.64367011 HFE set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 Br- 2.470 0.74435812 HFE set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 I- 2.770 0.86877007 HFE set for SPC\E water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip3p index 965cb307..ab93cc30 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip3p @@ -30,4 +30,3 @@ F- 1.783 0.19945255 HFE set for TIP3P water from Li et al., JCTC, 2015, 1 Cl- 2.252 0.60293097 HFE set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 Br- 2.428 0.72070940 HFE set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 I- 2.724 0.85418187 HFE set for TIP3P water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip4pew index abc3db9d..e6090ebb 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_126_tip4pew @@ -30,4 +30,3 @@ F- 1.842 0.24821230 HFE set for TIP4P\EW water from Li et al., JCTC, 2015 Cl- 2.321 0.65269755 HFE set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 Br- 2.520 0.77034233 HFE set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 I- 2.819 0.88281946 HFE set for TIP4P\EW water from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_iod b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_iod index b883dcec..6512ca86 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_iod +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions1lm_iod @@ -34,4 +34,3 @@ F- 1.739 0.16573832 IOD set from Li et al., JCTC, 2015, 11, 1645 Cl- 2.162 0.53154665 IOD set from Li et al., JCTC, 2015, 11, 1645 Br- 2.331 0.65952968 IOD set from Li et al., JCTC, 2015, 11, 1645 I- 2.590 0.80293907 IOD set from Li et al., JCTC, 2015, 11, 1645 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_spce index 679ab652..a960fd62 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_spce @@ -82,4 +82,3 @@ Ce4+ 1.761 0.18227365 12-6-4 set for SPC\E water from Li et al., JPCB, 2015 U4+ 1.791 0.20584696 12-6-4 set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.750 0.17392181 12-6-4 set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.773 0.19156806 12-6-4 set for SPC\E water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip3p index cf872751..05115b74 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip3p @@ -82,4 +82,3 @@ Ce4+ 1.766 0.18612361 12-6-4 set for TIP3P water from Li et al., JPCB, 2015 U4+ 1.792 0.20665151 12-6-4 set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.752 0.17542802 12-6-4 set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.770 0.18922704 12-6-4 set for TIP3P water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip4pew index bfce1bf4..1538b8fa 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_1264_tip4pew @@ -82,4 +82,3 @@ Ce4+ 1.761 0.18227365 12-6-4 set for TIP4P\EW water from Li et al., JPCB, 2 U4+ 1.791 0.20584696 12-6-4 set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.753 0.17618319 12-6-4 set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.758 0.17997960 12-6-4 set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_spce index aeee367d..81e8b614 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_spce @@ -98,4 +98,3 @@ Ce4+ 1.689 0.13084945 IOD set for SPC\E water from Li et al., JPCB, 2015, 1 U4+ 1.689 0.13084945 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.666 0.11617738 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.713 0.14710519 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip3p index 66012ed2..b6f43ab9 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip3p @@ -98,4 +98,3 @@ Ce4+ 1.684 0.12758274 IOD set for TIP3P water from Li et al., JPCB, 2015, 1 U4+ 1.684 0.12758274 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.662 0.11371963 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.708 0.14364160 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip4pew index 2cddb4c7..3e788aa9 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_126_tip4pew @@ -98,4 +98,3 @@ Ce4+ 1.667 0.11679623 IOD set for TIP4P\EW water from Li et al., JPCB, 2015 U4+ 1.667 0.11679623 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.645 0.10359269 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.690 0.13150785 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_spce index a7221023..aaf5ce6f 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_spce @@ -98,4 +98,3 @@ Ce4+ 1.360 0.01020237 HFE set for SPC\E water from Li et al., JPCB, 2015, 1 U4+ 1.218 0.00148497 HFE set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.281 0.00379705 HFE set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.468 0.02986171 HFE set for SPC\E water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip3p index 5cfc2bf6..32e7b4a0 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip3p @@ -98,4 +98,3 @@ Ce4+ 1.353 0.00941798 HFE set for TIP3P water from Li et al., JPCB, 2015, 1 U4+ 1.209 0.00128267 HFE set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.273 0.00339720 HFE set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.463 0.02858630 HFE set for TIP3P water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip4pew index 82472082..7742bd5d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_hfe_tip4pew @@ -98,4 +98,3 @@ Ce4+ 1.257 0.00270120 HFE set for TIP4P\EW water from Li et al., JPCB, 2015 U4+ 1.105 0.00018227 HFE set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.172 0.00067804 HFE set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.370 0.01141046 HFE set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_spce index 4f8c06ea..f68fb188 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_spce @@ -82,4 +82,3 @@ Ce4+ 1.689 0.13084945 IOD set for SPC\E water from Li et al., JPCB, 2015, 1 U4+ 1.689 0.13084945 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.666 0.11617738 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.713 0.14710519 IOD set for SPC\E water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip3p index 561edd2b..ac3a4008 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip3p @@ -82,4 +82,3 @@ Ce4+ 1.684 0.12758274 IOD set for TIP3P water from Li et al., JPCB, 2015, 1 U4+ 1.684 0.12758274 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.662 0.11371963 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.708 0.14364160 IOD set for TIP3P water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip4pew index 651ef977..fc8614d1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ions234lm_iod_tip4pew @@ -82,4 +82,3 @@ Ce4+ 1.667 0.11679623 IOD set for TIP4P\EW water from Li et al., JPCB, 2015 U4+ 1.667 0.11679623 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Pu4+ 1.645 0.10359269 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 Th4+ 1.690 0.13150785 IOD set for TIP4P\EW water from Li et al., JPCB, 2015, 119, 883 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionsjc_spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionsjc_spce index a5acf83e..d6c3763a 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionsjc_spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionsjc_spce @@ -20,4 +20,3 @@ NONBON Cl- 2.711 0.0127850 Br- 2.751 0.0269586 I- 2.919 0.0427845 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb3 index 15849237..6c54e5a7 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb3 @@ -106,5 +106,3 @@ Ce4+ 1.760 0.18150763 12-6-4 set for the TIP3P-FB water model from Li et al U4+ 1.788 0.20344023 12-6-4 set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.744 0.16943676 12-6-4 set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.763 0.18380968 12-6-4 set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb4 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb4 index 1a361eb3..8c3fdeb8 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb4 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_fb4 @@ -106,5 +106,3 @@ Ce4+ 1.750 0.17392181 12-6-4 set for the TIP4P-FB water model from Li et al U4+ 1.787 0.20264033 12-6-4 set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.744 0.16943676 12-6-4 set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.761 0.18227365 12-6-4 set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc index 0a957133..3345d8ff 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc @@ -106,5 +106,3 @@ Ce4+ 1.747 0.17167295 12-6-4 set for the OPC water model from Li et al., JC U4+ 1.767 0.18689752 12-6-4 set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.745 0.17018074 12-6-4 set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.755 0.17769767 12-6-4 set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc3 index 0697f666..3de1be81 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_1264_opc3 @@ -106,5 +106,3 @@ Ce4+ 1.752 0.17542802 12-6-4 set for the OPC3 water model from Li et al., J U4+ 1.770 0.18922704 12-6-4 set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.755 0.17769767 12-6-4 set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.755 0.17769767 12-6-4 set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb3 index 92c2a373..fb6595dd 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb3 @@ -122,4 +122,3 @@ Ce4+ 1.705 0.14158262 IOD set for the TIP3P-FB water model from Li et al., U4+ 1.705 0.14158262 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.682 0.12628793 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.718 0.15060822 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb4 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb4 index 16987d53..0565b1be 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb4 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_fb4 @@ -122,4 +122,3 @@ Ce4+ 1.692 0.13282966 IOD set for the TIP4P-FB water model from Li et al., U4+ 1.692 0.13282966 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.667 0.11679623 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.709 0.14433113 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc index 9088f4ef..dbdc433f 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc @@ -122,4 +122,3 @@ Ce4+ 1.683 0.12693448 IOD set for the OPC water model from Li et al., JCTC, U4+ 1.683 0.12693448 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.658 0.11129023 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.704 0.14089951 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc3 index 1c8c3c64..469b0226 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_126_opc3 @@ -122,4 +122,3 @@ Ce4+ 1.708 0.14364160 IOD set for the OPC3 water model from Li et al., JCTC U4+ 1.708 0.14364160 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.682 0.12628793 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.721 0.15272873 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb3 index 870456b3..8d71f241 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb3 @@ -122,5 +122,3 @@ Ce4+ 1.352 0.00930991 HFE set for the TIP3P-FB water model from Li et al., U4+ 1.223 0.00160860 HFE set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.285 0.00401101 HFE set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.454 0.02639002 HFE set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb4 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb4 index 061da026..eeb84e14 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb4 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_fb4 @@ -122,5 +122,3 @@ Ce4+ 1.301 0.00496778 HFE set for the TIP4P-FB water model from Li et al., U4+ 1.148 0.00043416 HFE set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.215 0.00141473 HFE set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.388 0.01386171 HFE set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc index ed995fb8..1978346b 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc @@ -122,5 +122,3 @@ Ce4+ 1.306 0.00530214 HFE set for the OPC water model from Li et al., JCTC, U4+ 1.155 0.00049581 HFE set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.221 0.00155814 HFE set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.393 0.01460944 HFE set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc3 index 20061d07..66fac800 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_hfe_opc3 @@ -122,5 +122,3 @@ Ce4+ 1.370 0.01141046 HFE set for the OPC3 water model from Li et al., JCTC U4+ 1.247 0.00232970 HFE set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.308 0.00544088 HFE set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.475 0.03171494 HFE set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb3 index ec901d51..26c933e8 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb3 @@ -106,5 +106,3 @@ Ce4+ 1.705 0.14158262 IOD set for the TIP3P-FB water model from Li et al., U4+ 1.705 0.14158262 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.682 0.12628793 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.718 0.15060822 IOD set for the TIP3P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb4 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb4 index 25a91258..db31f8a1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb4 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_fb4 @@ -106,5 +106,3 @@ Ce4+ 1.692 0.13282966 IOD set for the TIP4P-FB water model from Li et al., U4+ 1.692 0.13282966 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.667 0.11679623 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.709 0.14433113 IOD set for the TIP4P-FB water model from Li et al., JCTC, 2021, 17, 2342 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc index 8287726c..63e97d60 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc @@ -106,4 +106,3 @@ Ce4+ 1.683 0.12693448 IOD set for the OPC water model from Li et al., JCTC, U4+ 1.683 0.12693448 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.658 0.11129023 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.704 0.14089951 IOD set for the OPC water model from Li et al., JCTC, 2021, 17, 2342 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc3 index 9e0dd4e1..198c7663 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.ionslm_iod_opc3 @@ -106,8 +106,3 @@ Ce4+ 1.708 0.14364160 IOD set for the OPC3 water model from Li et al., JCTC U4+ 1.708 0.14364160 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Pu4+ 1.682 0.12628793 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 Th4+ 1.721 0.15272873 IOD set for the OPC3 water model from Li et al., JCTC, 2021, 17, 2342 - - - - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.opc b/acpype/amber21-11_linux/dat/leap/parm/frcmod.opc index a349b9e0..937cf947 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.opc +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.opc @@ -22,4 +22,3 @@ NONBON OW 1.777167268 0.2128008130 HW 0.0000 0.0000 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmCHI_YIL b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmCHI_YIL index eba978ae..f1481a58 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmCHI_YIL +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmCHI_YIL @@ -110,5 +110,3 @@ Q1 1.9080 0.0860 Q2 1.9080 0.0860 Q3 1.9080 0.0860 Q4 1.9080 0.0860 - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0 index 3ffb632f..9041a700 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0 @@ -49,4 +49,3 @@ CT-CT-CI-OH 1 0.962830 348.09535 3.0 gamma NONB CI 1.9080 0.1094 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0_ezOL1 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0_ezOL1 index 6f357939..5bfaf0c0 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0_ezOL1 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc0_ezOL1 @@ -82,5 +82,3 @@ C3-CT-CI-OH 1 0.962830 348.09535 3.0 gamma NONBOND C3 1.9080 0.1094 Spellmeyer - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc1 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc1 index 15b34f96..dd644755 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc1 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.parmbsc1 @@ -122,4 +122,3 @@ NONBONDED CE 1.9080 0.1094 C1 1.9080 0.0860 Spellmeyer C2 1.9080 0.0860 Spellmeyer - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.phmd b/acpype/amber21-11_linux/dat/leap/parm/frcmod.phmd index cdbca4fa..17e90685 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.phmd +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.phmd @@ -13,4 +13,3 @@ HO-O2-CO-O2 1 6.0 0.0 1 ! modified from HO-OH-C -O 2C-CO-O2-HO 1 0.479 0.0 -3. ! copied from 2C-C -OH-HO in frcmod.ff14s 2C-CO-O2-HO 1 6.000 180.0 -2. ! copied from 2C-C -OH-HO in frcmod.ff14s and increased barrier 2C-CO-O2-HO 1 0.448 180.0 1. ! copied from 2C-C -OH-HO in frcmod.ff14sb - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.phosaa14SB b/acpype/amber21-11_linux/dat/leap/parm/frcmod.phosaa14SB index 2c8ef1bd..5c74ee0d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.phosaa14SB +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.phosaa14SB @@ -219,4 +219,3 @@ OV 1.6562 0.1700 a uniform radius increase of -0.0275 A was appli OX 1.8401 0.2100 modified acc. to FEP solvation energies for SER/THR 2- OZ 1.8626 0.1700 a uniform radius increase of 0.1789 A was applied CG 1.9080 0.0860 Y1P/PTR C Gamma (CA) from parm14ipq.dat - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.pol3 b/acpype/amber21-11_linux/dat/leap/parm/frcmod.pol3 index 7e8d3b03..7fea832b 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.pol3 +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.pol3 @@ -14,4 +14,3 @@ DIHE NONBON OW 1.798 0.156 HW 0.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.qspcfw b/acpype/amber21-11_linux/dat/leap/parm/frcmod.qspcfw index feef336f..829a0da4 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.qspcfw +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.qspcfw @@ -15,4 +15,3 @@ DIHE NONBON OW 1.7767 0.1554 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.shaw b/acpype/amber21-11_linux/dat/leap/parm/frcmod.shaw index f1b434fe..9c4b288a 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.shaw +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.shaw @@ -162,4 +162,3 @@ NONBON CE 1.85229 0.0636 Tan et al. CF 1.85229 0.0636 Tan et al. CQ 1.85229 0.0636 Tan et al. - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spce b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spce index 60b29a87..318815d1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spce +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spce @@ -14,4 +14,3 @@ DIHE NONBON OW 1.7767 0.1553 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spceb b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spceb index 2551621a..d0e5e31d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spceb +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spceb @@ -14,4 +14,3 @@ DIHE NONBON OW 1.7767 0.1553 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spcfw b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spcfw index 947f69f8..0575c505 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.spcfw +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.spcfw @@ -15,4 +15,3 @@ DIHE NONBON OW 1.7767 0.1554 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3p index 48b3152f..7be2ffa7 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3p @@ -14,4 +14,3 @@ DIHE NONBON OW 1.7683 0.1520 TIP3P water model HW 0.0000 0.0000 TIP3P water model - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pf b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pf index 71695ee7..af375eea 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pf +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pf @@ -14,4 +14,3 @@ DIHE NONBON OW 1.7926 0.098 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pfb b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pfb index efd6fcf2..49c4e52f 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pfb +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip3pfb @@ -14,4 +14,3 @@ DIHE NONBON OW 1.7835723 0.155866 HW 0.0000 0.0000 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4p index b06cfb5e..5da44d2a 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4p @@ -17,4 +17,3 @@ NONBON OW 1.7699 0.1550 HW 0.0000 0.0000 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pd b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pd index a0c25134..af611c8e 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pd +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pd @@ -19,4 +19,3 @@ X -HW-OW-X 2 0.0 0.0 1.0 NONBON OW 1.776296 0.22384 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pew b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pew index f356f24b..cdc1faab 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pew +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pew @@ -21,4 +21,3 @@ NONBON OW 1.775931 0.16275 HW 0.0000 0.0000 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pfb b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pfb index 97249d0b..585e7b0a 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pfb +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip4pfb @@ -21,4 +21,3 @@ NONBON OW 1.77660486 0.179082 HW 0.0000 0.0000 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip5p b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip5p index c5f6557b..a98c8e24 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip5p +++ b/acpype/amber21-11_linux/dat/leap/parm/frcmod.tip5p @@ -17,4 +17,3 @@ NONBON OW 1.7510 0.1600 HW 0.0000 0.0000 EP 1.0 0.0 - diff --git a/acpype/amber21-11_linux/dat/leap/parm/gaff.dat b/acpype/amber21-11_linux/dat/leap/parm/gaff.dat index e105bead..e0834025 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/gaff.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/gaff.dat @@ -7308,5 +7308,3 @@ Updates to GAFF 1.81, May, 2017: added new atom types for n3/n4/n/nh/os/ss in RG3 and RG4 updated bond length/angle parameters involved by the newly introduced atom types --------------------------------------------------------------------------- - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/gaff2.dat b/acpype/amber21-11_linux/dat/leap/parm/gaff2.dat index e40965b5..0fbafe33 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/gaff2.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/gaff2.dat @@ -7680,4 +7680,3 @@ Updates to GAFF 2.11, May, 2017: added new atom types for n3/n4/n/nh/os/ss in RG3 and RG4 updated bond length/angle parameters involved by the newly introduced atom types ---------------------------------------------------------------------------- - diff --git a/acpype/amber21-11_linux/dat/leap/parm/lipid11.dat b/acpype/amber21-11_linux/dat/leap/parm/lipid11.dat index 9c25f35c..76e95ba1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/lipid11.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/lipid11.dat @@ -348,4 +348,3 @@ GLYCAM LIPID11 Description OS oS O ether P pA phosphor in phosphates O2 oC O carboxyl group - diff --git a/acpype/amber21-11_linux/dat/leap/parm/lipid14.dat b/acpype/amber21-11_linux/dat/leap/parm/lipid14.dat index aa144bcb..7537d3c1 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/lipid14.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/lipid14.dat @@ -346,4 +346,3 @@ GAFFlipid Lipid14 Description --------- ------- ----------- a3 cD sp3 carbon (See GAFFlipid paper) hl hL H bonded to aliphatic carbon without electrwd. group (See GAFFlipid paper) - diff --git a/acpype/amber21-11_linux/dat/leap/parm/nucgen.dat b/acpype/amber21-11_linux/dat/leap/parm/nucgen.dat index 52c9d051..5bd3499d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/nucgen.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/nucgen.dat @@ -372,7 +372,3 @@ O2 7.61 19.2 -1.17 N1 7.16 36.1 -1.62 C6 6.55 46.3 -1.66 C5 5.28 49.1 -1.29 - - - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/opls.info b/acpype/amber21-11_linux/dat/leap/parm/opls.info index c003dd90..d9c25ea0 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/opls.info +++ b/acpype/amber21-11_linux/dat/leap/parm/opls.info @@ -393,5 +393,3 @@ Type V0 V1 f V2 f V3 f Description Department of Chemistry, Yale University bill@doctor.chem.yale.edu ------------------------------------------ - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm10.dat b/acpype/amber21-11_linux/dat/leap/parm/parm10.dat index cb5815c9..a5dffe8f 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm10.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm10.dat @@ -1002,4 +1002,3 @@ MOD4 RE I 2.35 0.40 JCC,7,(1986),230; END - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm19.dat b/acpype/amber21-11_linux/dat/leap/parm/parm19.dat index 59aad2e1..ef4d82ed 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm19.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm19.dat @@ -1080,4 +1080,3 @@ MOD4 RE EP 0.00 0.0000 lone pair END - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm91.dat b/acpype/amber21-11_linux/dat/leap/parm/parm91.dat index b076aca7..efe60da3 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm91.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm91.dat @@ -917,5 +917,3 @@ STUB RE LP 1.2 0.016 END - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm91X.dat b/acpype/amber21-11_linux/dat/leap/parm/parm91X.dat index e472abbf..14d5ff46 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm91X.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm91X.dat @@ -928,5 +928,3 @@ STUB RE LP 1.2 0.016 END - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm91X.ua.dat b/acpype/amber21-11_linux/dat/leap/parm/parm91X.ua.dat index 245baacd..95ef6584 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm91X.ua.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm91X.ua.dat @@ -891,5 +891,3 @@ STUB RE LP 1.2 0.016 END - - diff --git a/acpype/amber21-11_linux/dat/leap/parm/parm99.dat b/acpype/amber21-11_linux/dat/leap/parm/parm99.dat index 25ec0f3f..4fc3342d 100644 --- a/acpype/amber21-11_linux/dat/leap/parm/parm99.dat +++ b/acpype/amber21-11_linux/dat/leap/parm/parm99.dat @@ -731,5 +731,3 @@ CT-CT-OS-LP 1 0.000 0.000 3.000 CM-CM-OS-LP 1 0.000 180.000 2.000 HA-CM-OS-LP 1 0.000 180.000 2.000 H4-CM-OS-LP 1 0.000 180.000 2.000 - - diff --git a/acpype/amber21-11_linux/dat/leap/prep/oldff/all_nuc02EP.in b/acpype/amber21-11_linux/dat/leap/prep/oldff/all_nuc02EP.in index 2bbfb2ae..f58efa10 100644 --- a/acpype/amber21-11_linux/dat/leap/prep/oldff/all_nuc02EP.in +++ b/acpype/amber21-11_linux/dat/leap/prep/oldff/all_nuc02EP.in @@ -2457,4 +2457,3 @@ pom 0.0825 0.0228 0.0333 0.0280 -0.4483 1.0720 -0.7552 -0.7552 -0.4349 -0.0212 0.0383 0.0454 0.0926 - diff --git a/acpype/amber21-11_linux/install_on_ubuntu_18-04 b/acpype/amber21-11_linux/install_on_ubuntu_18-04 index 00bd8aab..75c2f2ad 100644 --- a/acpype/amber21-11_linux/install_on_ubuntu_18-04 +++ b/acpype/amber21-11_linux/install_on_ubuntu_18-04 @@ -1,4 +1,3 @@ ## To run on Ubuntu 18.04 sudo apt update sudo apt-get install libgfortran5 libarpack++2-dev - diff --git a/acpype/amber21-11_os/bin/am1bcc b/acpype/amber21-11_os/bin/am1bcc index 7aff7250..6ec88848 100755 --- a/acpype/amber21-11_os/bin/am1bcc +++ b/acpype/amber21-11_os/bin/am1bcc @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/am1bcc "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/am1bcc "$@" diff --git a/acpype/amber21-11_os/bin/antechamber b/acpype/amber21-11_os/bin/antechamber index 89285850..e14a11b7 100755 --- a/acpype/amber21-11_os/bin/antechamber +++ b/acpype/amber21-11_os/bin/antechamber @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/antechamber "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/antechamber "$@" diff --git a/acpype/amber21-11_os/bin/atomtype b/acpype/amber21-11_os/bin/atomtype index b3e17770..abe002e8 100755 --- a/acpype/amber21-11_os/bin/atomtype +++ b/acpype/amber21-11_os/bin/atomtype @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/atomtype "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/atomtype "$@" diff --git a/acpype/amber21-11_os/bin/bondtype b/acpype/amber21-11_os/bin/bondtype index 0efcaba2..41bfdaa2 100755 --- a/acpype/amber21-11_os/bin/bondtype +++ b/acpype/amber21-11_os/bin/bondtype @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/bondtype "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/bondtype "$@" diff --git a/acpype/amber21-11_os/bin/parmchk2 b/acpype/amber21-11_os/bin/parmchk2 index 1d1a9ddb..aea6c466 100755 --- a/acpype/amber21-11_os/bin/parmchk2 +++ b/acpype/amber21-11_os/bin/parmchk2 @@ -6,4 +6,4 @@ this_script_dir="$(cd "$(dirname "$0")" && pwd)" source $this_script_dir/../amber.sh -$AMBERHOME/bin/wrapped_progs/parmchk2 "$@" \ No newline at end of file +$AMBERHOME/bin/wrapped_progs/parmchk2 "$@" diff --git a/acpype/cli.py b/acpype/cli.py index 03eb7759..26e7dd0b 100644 --- a/acpype/cli.py +++ b/acpype/cli.py @@ -1,81 +1,44 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -""" - Requirements: Python 3.6 or higher - Antechamber (from AmberTools preferably) - OpenBabel (optional, but strongly recommended) - - This code is released under GNU General Public License V3. - - <<< NO WARRANTY AT ALL!!! >>> - - It was inspired by: - - - amb2gmx.pl (Eric Sorin, David Mobley and John Chodera) - and depends on Antechamber and Openbabel - - - YASARA Autosmiles: - http://www.yasara.org/autosmiles.htm (Elmar Krieger) - - - topolbuild (Bruce Ray) - - - xplo2d (G.J. Kleywegt) - - For Non-uniform 1-4 scale factor conversion (e.g. if using GLYCAM06), please cite: - - BERNARDI, A., FALLER, R., REITH, D., and KIRSCHNER, K. N. ACPYPE update for - nonuniform 1-4 scale factors: Conversion of the GLYCAM06 force field from AMBER - to GROMACS. SoftwareX 10 (2019), 100241. doi: 10.1016/j.softx.2019.100241 - - For Antechamber, please cite: - 1. WANG, J., WANG, W., KOLLMAN, P. A., and CASE, D. A. Automatic atom type and - bond type perception in molecular mechanical calculations. Journal of Molecular - Graphics and Modelling 25, 2 (2006), 247-260. doi: 10.1016/j.jmgm.2005.12.005 - 2. WANG, J., WOLF, R. M., CALDWELL, J. W., KOLLMAN, P. A., and CASE, D. A. - Development and testing of a General Amber Force Field. Journal of Computational - Chemistry 25, 9 (2004), 1157-1174. doi: 10.1002/jcc.20035 - - If you use this code, I am glad if you cite: - - SOUSA DA SILVA, A. W. & VRANKEN, W. F. - ACPYPE - AnteChamber PYthon Parser interfacE. - BMC Research Notes 5 (2012), 367 doi: 10.1186/1756-0500-5-367 - http://www.biomedcentral.com/1756-0500/5/367 - - BATISTA, P. R.; WILTER, A.; DURHAM, E. H. A. B. & PASCUTTI, P. G. Molecular - Dynamics Simulations Applied to the Study of Subtypes of HIV-1 Protease. - Cell Biochemistry and Biophysics 44 (2006), 395-404. doi: 10.1385/CBB:44:3:395 - - Alan Silva, D.Sc. - alanwilter _at_ gmail _dot_ com -""" import os import sys import time -import traceback from shutil import rmtree +from typing import Dict, List, Optional from acpype.logger import copy_log from acpype.logger import set_logging_conf as logger +from acpype.logger import tmpLogFile from acpype.params import binaries from acpype.parser_args import get_option_parser -from acpype.topol import ACTopol, MolTopol, header +from acpype.topol import AbstractTopol, ACTopol, MolTopol, header from acpype.utils import elapsedTime, set_for_pip, while_replace def chk_py_ver(): if sys.version_info < (3, 6): msg = "Sorry, you need python 3.6 or higher" - logger().exception(msg) + logger().error(msg) raise Exception(msg) -def init_main(binaries=binaries, argv=None): +def handle_exception(level): + _exceptionType, exceptionValue, _exceptionTraceback = sys.exc_info() + logger(level).exception(f"ACPYPE FAILED: {exceptionValue}") + return True + + +def init_main(binaries: Dict[str, str] = binaries, argv: Optional[List[str]] = None): """ - Main function, to satisfy Conda + Orchestrate the command line usage for ACPYPE with its all input arguments. + + Args: + binaries (Dict[str, str], optional): Mostly used for debug and testing. Defaults to ``acpype.params.binaries``. + argv (Optional[List[str]], optional): Mostly used for debug and testing. Defaults to None. + + Returns: + SystemExit(status): 0 or 19 (failed) """ chk_py_ver() set_for_pip(binaries) @@ -109,16 +72,17 @@ def init_main(binaries=binaries, argv=None): parser.error("either '-i' or ('-p', '-x'), but not both") logger(level).debug(f"CLI: {' '.join(argv)}") - texta = "Python Version %s" % sys.version + texta = f"Python Version {sys.version}" logger(level).debug(while_replace(texta)) if args.direct and not amb2gmxF: parser.error("option -u is only meaningful in 'amb2gmx' mode (args '-p' and '-x')") - try: - if amb2gmxF: - logger(level).info("Converting Amber input files to Gromacs ...") - system = MolTopol( + acpypeFailed = False + if amb2gmxF: + logger(level).info("Converting Amber input files to Gromacs ...") + try: + molecule: AbstractTopol = MolTopol( acFileXyz=args.inpcrd, acFileTop=args.prmtop, amb2gmx=True, @@ -131,11 +95,17 @@ def init_main(binaries=binaries, argv=None): is_sorted=args.sorted, chiral=args.chiral, ) + except Exception: + acpypeFailed = handle_exception(level) + if not acpypeFailed: + try: + molecule.writeGromacsTopolFiles() + molecule.printDebug("prmtop and inpcrd files parsed") + except Exception: + acpypeFailed = handle_exception(level) - system.printDebug("prmtop and inpcrd files parsed") - system.writeGromacsTopolFiles() - copy_log(system) - else: + else: + try: molecule = ACTopol( args.input, binaries=binaries, @@ -150,7 +120,7 @@ def init_main(binaries=binaries, argv=None): basename=args.basename, timeTol=args.max_time, qprog=args.qprog, - ekFlag='''"%s"''' % args.keyword, + ekFlag=f'''"{args.keyword}"''', verbose=args.verboseless, gmx4=args.gmx4, merge=args.merge, @@ -159,41 +129,55 @@ def init_main(binaries=binaries, argv=None): chiral=args.chiral, amb2gmx=False, ) - - molecule.createACTopol() - molecule.createMolTopol() - copy_log(molecule) - acpypeFailed = False - except Exception: - _exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() - logger(level).error("ACPYPE FAILED: %s" % exceptionValue) - if args.debug: - traceback.print_tb(exceptionTraceback, file=sys.stdout) - acpypeFailed = True + except Exception: + acpypeFailed = handle_exception(level) + if not acpypeFailed: + try: + molecule.createACTopol() + except Exception: + acpypeFailed = handle_exception(level) + if not acpypeFailed: + try: + molecule.createMolTopol() + except Exception: + acpypeFailed = handle_exception(level) execTime = int(round(time.time() - at0)) if execTime == 0: amsg = "less than a second" else: amsg = elapsedTime(execTime) - logger(level).info("Total time of execution: %s" % amsg) + logger(level).info(f"Total time of execution: {amsg}") if args.ipython: - import IPython # pylint: disable=import-outside-toplevel - - IPython.embed(colors="neutral") + try: + import IPython + + IPython.embed(colors="neutral") + except ModuleNotFoundError: + logger(level).exception("No 'ipython' installed") + + if not args.debug: + try: + rmtree(molecule.tmpDir) + except Exception: + logger(level).debug("No tmp folder left to be removed") + else: + try: + if molecule.tmpDir: + logger(level).debug(f"Keeping folder '{molecule.tmpDir}' for possible helping debugging") + except Exception: + logger(level).debug("No tmp folder left to be removed") try: - rmtree(molecule.tmpDir) - except Exception: - pass + copy_log(molecule) + except UnboundLocalError: + print(f"Log tmp location: {tmpLogFile}") if acpypeFailed: sys.exit(19) - try: - os.chdir(molecule.rootDir) - except Exception: - pass + + os.chdir(molecule.rootDir) if not amb2gmxF and molecule.obabelExe: if molecule.checkSmiles(): diff --git a/acpype/logger.py b/acpype/logger.py index 2b870947..07983684 100644 --- a/acpype/logger.py +++ b/acpype/logger.py @@ -44,6 +44,8 @@ def format(self, record): def copy_log(molecule): + if not os.path.exists(molecule.absHomeDir): + raise UnboundLocalError local_log = os.path.join(molecule.absHomeDir, "acpype.log") if os.path.exists(local_log): os.remove(local_log) diff --git a/acpype/mol.py b/acpype/mol.py index 471641e7..988a2f8e 100644 --- a/acpype/mol.py +++ b/acpype/mol.py @@ -1,38 +1,22 @@ -from acpype.params import Pi +""" + Constructors to define and store the system's topology + It will create instances for Atoms, AtomTypes, Bonds, Angles and Dihedrals + where the topology (the relationships between atoms) is defined and + paramenters are stored. -class Atom: + Example: - """ - Charges in prmtop file has to be divide by 18.2223 to convert to charge - in units of the electron charge. - To convert ACOEF and BCOEF to r0 (Ang.) and epsilon (kcal/mol), as seen - in gaff.dat for example; same atom type (i = j): - r0 = 1/2 * (2 * ACOEF/BCOEF)^(1/6) - epsilon = 1/(4 * A) * BCOEF^2 - To convert r0 and epsilon to ACOEF and BCOEF - ACOEF = sqrt(ep_i * ep_j) * (r0_i + r0_j)^12 - BCOEF = 2 * sqrt(ep_i * ep_j) * (r0_i + r0_j)^6 - = 2 * ACOEF/(r0_i + r0_j)^6 - where index i and j for atom types. - Coord is given in Ang. and mass in Atomic Mass Unit. - """ + >>> atom = acpype.mol.Atom(...) # to be improved - def __init__(self, atomName, atomType, id_, resid, mass, charge, coord): - self.atomName = atomName - self.atomType = atomType - self.id = id_ - self.cgnr = id_ - self.resid = resid - self.mass = mass - self.charge = charge # / qConv - self.coords = coord + Attributes: + acpype.mol.Atom : define Atom + acpype.mol.AtomType : define AtomType +""" - def __str__(self): - return "" % (self.id, self.atomName, self.atomType) +from typing import List - def __repr__(self): - return "" % (self.id, self.atomName, self.atomType) +from acpype.params import Pi class AtomType: @@ -54,6 +38,63 @@ def __repr__(self): return "" % self.atomTypeName +class Atom: + r""" + Atom Object Definition + + Charges in *prmtop* file are divided by ``18.2223`` to be converted + in units of the electron charge. + + To convert ``ACOEF`` and ``BCOEF`` to ``r0`` (Å) and ``epsilon`` (ε: kcal/mol), as seen + in ``gaff.dat`` for example, for a same atom type (``i = j``): + + .. math:: + r_0 &= 1/2 * (2 * A_{coef}/B_{coef})^{1/6} \\ + \epsilon &= 1/(4 * A_{coef}) * B_{coef}^2 + + To convert ``r0`` and ``epsilon`` to ``ACOEF`` and ``BCOEF``: + + .. math:: + A_{coef} &= \sqrt{\epsilon_i * \epsilon_j} * (r_{0i} + r_{0j})^{12} \\ + B_{coef} &= 2 * \sqrt{\epsilon_i * \epsilon_j} * (r_{0i} + r_{0j})^6 \\ + &= 2 * A_{coef}/(r_{0i} + r_{0j})^6 + + where index ``i`` and ``j`` for atom types. + Coordinates are given in Å and masses in Atomic Mass Unit. + + Returns: + acpype.mol.Atom: atom object + """ + + def __init__( + self, atomName: str, atomType: AtomType, id_: int, resid: int, mass: float, charge: float, coord: List[float] + ): + """ + Args: + atomName (str): atom name + atomType (AtomType): atomType object + id_ (int): atom number index + resid (int): residues number index + mass (float): atom mass + charge (float): atom charge + coord (List[float]): atom (x,y,z) coordinates + """ + self.atomName = atomName + self.atomType = atomType + self.id = id_ + self.cgnr = id_ + self.resid = resid + self.mass = mass + self.charge = charge # / qConv + self.coords = coord + + def __str__(self): + return f"" + + def __repr__(self): + return f"" + + class Bond: """ @@ -66,10 +107,10 @@ def __init__(self, atoms, kBond, rEq): self.rEq = rEq def __str__(self): - return "<%s, r=%s>" % (self.atoms, self.rEq) + return f"<{self.atoms}, r={self.rEq}>" def __repr__(self): - return "<%s, r=%s>" % (self.atoms, self.rEq) + return f"<{self.atoms}, r={self.rEq}>" class Angle: @@ -84,10 +125,10 @@ def __init__(self, atoms, kTheta, thetaEq): self.thetaEq = thetaEq # rad, to convert to degree: thetaEq * 180/Pi def __str__(self): - return "<%s, ang=%.2f>" % (self.atoms, self.thetaEq * 180 / Pi) + return f"<{self.atoms}, ang={self.thetaEq * 180 / Pi:.2f}>" def __repr__(self): - return "<%s, ang=%.2f>" % (self.atoms, self.thetaEq * 180 / Pi) + return f"<{self.atoms}, ang={self.thetaEq * 180 / Pi:.2f}>" class Dihedral: @@ -104,7 +145,7 @@ def __init__(self, atoms, kPhi, period, phase): self.phase = phase # rad, to convert to degree: kPhi * 180/Pi def __str__(self): - return "<%s, ang=%.2f>" % (self.atoms, self.phase * 180 / Pi) + return f"<{self.atoms}, ang={self.phase * 180 / Pi:.2f}>" def __repr__(self): - return "<%s, ang=%.2f>" % (self.atoms, self.phase * 180 / Pi) + return f"<{self.atoms}, ang={self.phase * 180 / Pi:.2f}>" diff --git a/acpype/topol.py b/acpype/topol.py index 32f2b3c1..51f87876 100644 --- a/acpype/topol.py +++ b/acpype/topol.py @@ -63,12 +63,12 @@ date = datetime.now().ctime() +pid: int -class Topology_14: +class Topology_14: """ Amber topology abstraction for non-uniform 1-4 scale factors - """ def __init__(self) -> None: @@ -122,7 +122,7 @@ def read_amber_topology(self, buff): try: setattr(self, attributes[i], self.p7_array_read(buff, flag_strings[i])) except Exception: - logger().info("Skipping non-existent attributes", attributes[i], flag_strings[i]) + logger().exception(f"Skipping non-existent attributes {attributes[i]} {flag_strings[i]}") @staticmethod def skipline(buff, index): @@ -183,9 +183,9 @@ def print_gmx_pairs(self): epsilon = lj_bcoeff / 4 / sigma6 * 4.184 sigma = sigma6 ** (1 / 6) / 10 pair_buff = ( - "{:>10.0f} {:>10.0f} {:>6.0f} ".format(ai + 1, al + 1, 1) - + "{:>10.6f} {:>10.6f} ".format(qi, ql) - + "{:>15.5e} {:>15.5e}\n".format(sigma, epsilon) + f"{ai + 1:>10.0f} {al + 1:>10.0f} {1:>6.0f} " + + f"{qi:>10.6f} {ql:>10.6f} " + + f"{sigma:>15.5e} {epsilon:>15.5e}\n" ) pair_list.append(pair_buff) j += 5 @@ -221,19 +221,14 @@ def patch_gmx_topol14(self, gmx_init_top): ) -class AbstractTopol: +class AbstractTopol(abc.ABC): """ - Super class to build topologies + Abstract super class to build topologies """ - __metaclass__ = abc.ABCMeta - @abc.abstractmethod def __init__(self): - if self.__class__ is AbstractTopol: - logger().exception("Attempt to create instance of abstract class AbstractTopol") - raise TypeError("Attempt to create instance of abstract class AbstractTopol") self.debug = None self.verbose = None self.chargeVal = None @@ -325,12 +320,18 @@ def printMess(self, text=""): """Info log level""" logger(self.level).info(f"==> {while_replace(text)}") - def printQuoted(self, text=""): + def printDebugQuoted(self, text=""): """Print quoted messages""" logger(self.level).debug(10 * "+" + "start_quote" + 59 * "+") logger(self.level).debug(while_replace(text)) logger(self.level).debug(10 * "+" + "end_quote" + 61 * "+") + def printErrorQuoted(self, text=""): + """Print quoted messages""" + logger(self.level).error(10 * "+" + "start_quote" + 59 * "+") + logger(self.level).error(while_replace(text)) + logger(self.level).error(10 * "+" + "end_quote" + 61 * "+") + def search(self, name=None, alist=False): """ returns a list with all atomName matching 'name' @@ -409,10 +410,8 @@ def guessCharge(self): if in_mol == "mol": in_mol = "mdl" - cmd = f"{self.acExe} -dr no -i {mol2FileForGuessCharge} -fi {in_mol} -o tmp -fo mol2 -c gas -pf y" + cmd = f"{self.acExe} -dr no -i {mol2FileForGuessCharge} -fi {in_mol} -o tmp -fo mol2 -c gas -pf n" - self.printDebug("Debugging...") - cmd = cmd.replace("-pf y", "-pf n") logger(self.level).debug(while_replace(cmd)) log = _getoutput(cmd).strip() @@ -429,27 +428,34 @@ def guessCharge(self): except Exception: error = True + if not charge: + error = True + charge = 0 if error: self.printError("guessCharge failed") os.chdir(localDir) - self.printQuoted(log) + rmtree(self.tmpDir) + self.printErrorQuoted(log) self.printMess("Trying with net charge = 0 ...") charge = float(charge) charge2 = int(round(charge)) drift = abs(charge2 - charge) - self.printDebug("Net charge drift '%3.6f'" % drift) + self.printDebug(f"Net charge drift '{drift:3.6f}'") if drift > diffTol: - self.printError("Net charge drift '%3.5f' bigger than tolerance '%3.5f'" % (drift, diffTol)) + self.printError(f"Net charge drift '{drift:3.5f}' bigger than tolerance '{diffTol:3.5f}'") if not self.force: - logger(self.level).exception("Error with calculated charge") - raise Exception("Error with calculated charge") + msg = "Error with calculated charge" + logger(self.level).error(msg) + rmtree(self.tmpDir) + raise Exception(msg) self.chargeVal = str(charge2) self.printMess(f"... charge set to {charge2}") os.chdir(localDir) def setResNameCheckCoords(self): - """Set a 3 letter residue name - and check coords duplication + """ + Set a 3 letter residue name and check coords for issues + like duplication, atoms too close or too sparse """ exit_ = False localDir = os.path.abspath(".") @@ -461,7 +467,7 @@ def setResNameCheckCoords(self): exten = self.ext[1:] if self.ext == ".pdb": - tmpFile = open(self.inputFile, "r") + tmpFile = open(self.inputFile) else: if exten == "mol": exten = "mdl" @@ -471,7 +477,7 @@ def setResNameCheckCoords(self): if not out.isspace(): self.printDebug(out) try: - tmpFile = open("tmp", "r") + tmpFile = open("tmp") except Exception: rmtree(self.tmpDir) raise @@ -492,8 +498,9 @@ def setResNameCheckCoords(self): if len(residues) > 1: self.printError(f"more than one residue detected '{str(residues)}'") self.printError(f"verify your input file '{self.inputFile}'. Aborting ...") - logger(self.level).exception("Only ONE Residue is allowed for ACPYPE to work") - raise Exception("Only ONE Residue is allowed for ACPYPE to work") + msg = "Only ONE Residue is allowed for ACPYPE to work" + logger(self.level).error(msg) + raise Exception(msg) dups = "" shortd = "" @@ -523,17 +530,17 @@ def setResNameCheckCoords(self): if dups: self.printError(f"Atoms with same coordinates in '{self.inputFile}'!") - self.printQuoted(dups[:-1]) + self.printErrorQuoted(dups[:-1]) exit_ = True if shortd: self.printError(f"Atoms TOO close (< {minDist} Ang.)") - self.printQuoted(f"Dist (Ang.) Atoms\n{shortd[:-1]}") + self.printErrorQuoted(f"Dist (Ang.) Atoms\n{shortd[:-1]}") exit_ = True if longd: - self.printError(f"Atoms TOO alone (> {maxDist} Ang.)") - self.printQuoted(longd[:-1]) + self.printError(f"Atoms TOO scattered (> {maxDist} Ang.)") + self.printErrorQuoted(longd[:-1]) exit_ = True if exit_: @@ -541,16 +548,19 @@ def setResNameCheckCoords(self): self.printWarn("You chose to proceed anyway with '-f' option. GOOD LUCK!") else: self.printError("Use '-f' option if you want to proceed anyway. Aborting ...") + if not self.debug: + rmtree(self.tmpDir) + msg = "Coordinates issues with your system" + logger(self.level).error(msg) rmtree(self.tmpDir) - logger(self.level).exception("Coordinates issues with your system") - raise Exception("Coordinates issues with your system") - try: # scape resname list index out of range - resname = list(residues)[0].strip() - newresname = resname - except Exception: - self.printError("resname list index out of range, using default resname: 'LIG'") + raise Exception(msg) + + # escape resname list index out of range: no RES name in pdb for example + resname = list(residues)[0].strip() + if not resname: resname = "LIG" - newresname = resname + self.printWarn("No residue name identified, using default resname: 'LIG'") + newresname = resname # To avoid resname likes: 001 (all numbers), 1e2 (sci number), ADD : reserved terms for leap leapWords = [ @@ -667,131 +677,140 @@ def readMol2TotalCharge(self, mol2File): """Reads the charges in given mol2 file and returns the total""" charge = 0.0 ll = [] - cmd = f"{self.acExe} -dr no -i {mol2File} -fi mol2 -o tmp -fo mol2 -c wc -cf tmp.crg -pf y" - self.printDebug("Debugging...") - cmd = cmd.replace("-pf y", "-pf n") + cmd = f"{self.acExe} -dr no -i {mol2File} -fi mol2 -o tmp -fo mol2 -c wc -cf tmp.crg -pf n" self.printDebug(cmd) log = _getoutput(cmd) if os.path.exists("tmp.crg"): - tmpFile = open("tmp.crg", "r") + tmpFile = open("tmp.crg") tmpData = tmpFile.readlines() for line in tmpData: ll += line.split() charge = sum(map(float, ll)) if not log.isspace(): - self.printQuoted(log) + self.printDebugQuoted(log) self.printDebug("readMol2TotalCharge: " + str(charge)) return charge - def execAntechamber(self, chargeType=None, atomType=None): - """To call Antechamber and execute it - - Welcome to antechamber 21.0: molecular input file processor. - - Usage: antechamber -i input file name - -fi input file format - -o output file name - -fo output file format - -c charge method - -cf charge file name - -nc net molecular charge (int) - -a additional file name - -fa additional file format - -ao additional file operation - crd : only read in coordinate - crg : only read in charge - radius: only read in radius - name : only read in atom name - type : only read in atom type - bond : only read in bond type - -m multiplicity (2S+1), default is 1 - -rn residue name, overrides input file, default is MOL - -rf residue topology file name in prep input file, - default is molecule.res - -ch check file name for gaussian, default is 'molecule' - -ek mopac or sqm keyword, inside quotes; overwrites previous ones - -gk gaussian job keyword, inside quotes, is ignored when both -gopt and -gsp are used - -gopt gaussian job keyword for optimization, inside quotes - -gsp gaussian job keyword for single point calculation, inside quotes - -gm gaussian memory keyword, inside quotes, such as "%mem=1000MB" - -gn gaussian number of processors keyword, inside quotes, such as "%nproc=8" - -gdsk gaussian maximum disk usage keyword, inside quotes, such as "%maxdisk=50GB" - -gv add keyword to generate gesp file (for Gaussian 09 only) - 1 : yes - 0 : no, the default - -ge gaussian esp file generated by iop(6/50=1), default is g09.gesp - -tor torsional angle list, inside a pair of quotes, such as "1-2-3-4:0,5-6-7-8" - ':1' or ':0' indicates the torsional angle is frozen or not - -df am1-bcc precharge flag, 2 - use sqm(default); 0 - use mopac - -at atom type - gaff : the default - gaff2: for gaff2 (beta-version) - amber: for PARM94/99/99SB - bcc : bcc - sybyl: sybyl - -du fix duplicate atom names: yes(y)[default] or no(n) - -bk component/block Id, for ccif - -an adjust atom names: yes(y) or no(n) - the default is 'y' for 'mol2' and 'ac' and 'n' for the other formats - -j atom type and bond type prediction index, default is 4 - 0 : no assignment - 1 : atom type - 2 : full bond types - 3 : part bond types - 4 : atom and full bond type - 5 : atom and part bond type - -s status information: 0(brief), 1(default) or 2(verbose) - -eq equalizing atomic charge, default is 1 for '-c resp' and '-c bcc' and 0 - for the other charge methods - 0 : no use - 1 : by atomic paths - 2 : by atomic paths and structural information, i.e. E/Z configurations - -pf remove intermediate files: yes(y) or no(n)[default] - -pl maximum path length to determin equivalence of atomic charges for resp and bcc, - the smaller the value, the faster the algorithm, default is -1 (use full length), - set this parameter to 10 to 30 if your molecule is big (# atoms >= 100) - -seq atomic sequence order changable: yes(y)[default] or no(n) - -dr acdoctor mode: yes(y)[default] or no(n) - -i -o -fi and -fo must appear; others are optional - Use 'antechamber -L' to list the supported file formats and charge methods - - List of the File Formats - - file format type abbre. index | file format type abbre. index - -------------------------------------------------------------- - Antechamber ac 1 | Sybyl Mol2 mol2 2 - PDB pdb 3 | Modified PDB mpdb 4 - AMBER PREP (int) prepi 5 | AMBER PREP (car) prepc 6 - Gaussian Z-Matrix gzmat 7 | Gaussian Cartesian gcrt 8 - Mopac Internal mopint 9 | Mopac Cartesian mopcrt 10 - Gaussian Output gout 11 | Mopac Output mopout 12 - Alchemy alc 13 | CSD csd 14 - MDL mdl 15 | Hyper hin 16 - AMBER Restart rst 17 | Jaguar Cartesian jcrt 18 - Jaguar Z-Matrix jzmat 19 | Jaguar Output jout 20 - Divcon Input divcrt 21 | Divcon Output divout 22 - SQM Input sqmcrt 23 | SQM Output sqmout 24 - Charmm charmm 25 | Gaussian ESP gesp 26 - Component cif ccif 27 | GAMESS dat gamess 28 - Orca input orcinp 29 | Orca output orcout 30 - -------------------------------------------------------------- - AMBER restart file can only be read in as additional file. - - List of the Charge Methods - - charge method abbre. index | charge method abbre. index - -------------------------------------------------------------- - RESP resp 1 | AM1-BCC bcc 2 - CM1 cm1 3 | CM2 cm2 4 - ESP (Kollman) esp 5 | Mulliken mul 6 - Gasteiger gas 7 | Read in charge rc 8 - Write out charge wc 9 | Delete Charge dc 10 - -------------------------------------------------------------- + def execAntechamber(self, chargeType=None, atomType=None) -> bool: + + """ + To call Antechamber and execute it + + Args: + chargeType ([str], optional): bcc, gas or user. Defaults to None/bcc. + atomType ([str], optional): gaff, amber, gaff2, amber2. Defaults to None/gaff2. + + Returns: + bool: True if failed. + + :: + + Welcome to antechamber 21.0: molecular input file processor. + + Usage: antechamber -i input file name + -fi input file format + -o output file name + -fo output file format + -c charge method + -cf charge file name + -nc net molecular charge (int) + -a additional file name + -fa additional file format + -ao additional file operation + crd : only read in coordinate + crg : only read in charge + radius: only read in radius + name : only read in atom name + type : only read in atom type + bond : only read in bond type + -m multiplicity (2S+1), default is 1 + -rn residue name, overrides input file, default is MOL + -rf residue topology file name in prep input file, + default is molecule.res + -ch check file name for gaussian, default is 'molecule' + -ek mopac or sqm keyword, inside quotes; overwrites previous ones + -gk gaussian job keyword, inside quotes, is ignored when both -gopt and -gsp are used + -gopt gaussian job keyword for optimization, inside quotes + -gsp gaussian job keyword for single point calculation, inside quotes + -gm gaussian memory keyword, inside quotes, such as "%mem=1000MB" + -gn gaussian number of processors keyword, inside quotes, such as "%nproc=8" + -gdsk gaussian maximum disk usage keyword, inside quotes, such as "%maxdisk=50GB" + -gv add keyword to generate gesp file (for Gaussian 09 only) + 1 : yes + 0 : no, the default + -ge gaussian esp file generated by iop(6/50=1), default is g09.gesp + -tor torsional angle list, inside a pair of quotes, such as "1-2-3-4:0,5-6-7-8" + ':1' or ':0' indicates the torsional angle is frozen or not + -df am1-bcc precharge flag, 2 - use sqm(default); 0 - use mopac + -at atom type + gaff : the default + gaff2: for gaff2 (beta-version) + amber: for PARM94/99/99SB + bcc : bcc + sybyl: sybyl + -du fix duplicate atom names: yes(y)[default] or no(n) + -bk component/block Id, for ccif + -an adjust atom names: yes(y) or no(n) + the default is 'y' for 'mol2' and 'ac' and 'n' for the other formats + -j atom type and bond type prediction index, default is 4 + 0 : no assignment + 1 : atom type + 2 : full bond types + 3 : part bond types + 4 : atom and full bond type + 5 : atom and part bond type + -s status information: 0(brief), 1(default) or 2(verbose) + -eq equalizing atomic charge, default is 1 for '-c resp' and '-c bcc' and 0 + for the other charge methods + 0 : no use + 1 : by atomic paths + 2 : by atomic paths and structural information, i.e. E/Z configurations + -pf remove intermediate files: yes(y) or no(n)[default] + -pl maximum path length to determin equivalence of atomic charges for resp and bcc, + the smaller the value, the faster the algorithm, default is -1 (use full length), + set this parameter to 10 to 30 if your molecule is big (# atoms >= 100) + -seq atomic sequence order changable: yes(y)[default] or no(n) + -dr acdoctor mode: yes(y)[default] or no(n) + -i -o -fi and -fo must appear; others are optional + Use 'antechamber -L' to list the supported file formats and charge methods + + List of the File Formats + + file format type abbre. index | file format type abbre. index + -------------------------------------------------------------- + Antechamber ac 1 | Sybyl Mol2 mol2 2 + PDB pdb 3 | Modified PDB mpdb 4 + AMBER PREP (int) prepi 5 | AMBER PREP (car) prepc 6 + Gaussian Z-Matrix gzmat 7 | Gaussian Cartesian gcrt 8 + Mopac Internal mopint 9 | Mopac Cartesian mopcrt 10 + Gaussian Output gout 11 | Mopac Output mopout 12 + Alchemy alc 13 | CSD csd 14 + MDL mdl 15 | Hyper hin 16 + AMBER Restart rst 17 | Jaguar Cartesian jcrt 18 + Jaguar Z-Matrix jzmat 19 | Jaguar Output jout 20 + Divcon Input divcrt 21 | Divcon Output divout 22 + SQM Input sqmcrt 23 | SQM Output sqmout 24 + Charmm charmm 25 | Gaussian ESP gesp 26 + Component cif ccif 27 | GAMESS dat gamess 28 + Orca input orcinp 29 | Orca output orcout 30 + -------------------------------------------------------------- + AMBER restart file can only be read in as additional file. + + List of the Charge Methods + + charge method abbre. index | charge method abbre. index + -------------------------------------------------------------- + RESP resp 1 | AM1-BCC bcc 2 + CM1 cm1 3 | CM2 cm2 4 + ESP (Kollman) esp 5 | Mulliken mul 6 + Gasteiger gas 7 | Read in charge rc 8 + Write out charge wc 9 | Delete Charge dc 10 + -------------------------------------------------------------- """ global pid @@ -813,7 +832,7 @@ def execAntechamber(self, chargeType=None, atomType=None): if exten == "mol": exten = "mdl" - cmd = "%s -dr no -i %s -fi %s -o %s -fo mol2 %s -nc %s -m %s -s 2 -df %s -at %s -pf y %s" % ( + cmd = "{} -dr no -i {} -fi {} -o {} -fo mol2 {} -nc {} -m {} -s 2 -df {} -at {} -pf n {}".format( self.acExe, self.inputFile, exten, @@ -826,9 +845,6 @@ def execAntechamber(self, chargeType=None, atomType=None): self.ekFlag, ) - self.printDebug("Debugging...") - cmd = cmd.replace("-pf y", "-pf n") - self.printDebug(cmd) if os.path.exists(self.acMol2FileName) and not self.force: @@ -837,7 +853,7 @@ def execAntechamber(self, chargeType=None, atomType=None): try: os.remove(self.acMol2FileName) except Exception: - pass + self.printDebug("No file left to be removed") signal.signal(signal.SIGALRM, self.signal_handler) signal.alarm(self.timeTol) p = sub.Popen(cmd, shell=True, stderr=sub.STDOUT, stdout=sub.PIPE) @@ -849,7 +865,7 @@ def execAntechamber(self, chargeType=None, atomType=None): if os.path.exists(self.acMol2FileName): self.printMess("* Antechamber OK *") else: - self.printQuoted(self.acLog) + self.printErrorQuoted(self.acLog) return True return False @@ -857,13 +873,14 @@ def signal_handler(self, _signum, _frame): # , pid = 0): """Signal handler""" global pid pids = job_pids_family(pid) - self.printDebug("PID: %s, PIDS: %s" % (pid, pids)) - self.printMess("Timed out! Process %s killed, max exec time (%ss) exceeded" % (pids, self.timeTol)) + self.printDebug(f"PID: {pid}, PIDS: {pids}") + self.printMess(f"Timed out! Process {pids} killed, max exec time ({self.timeTol}s) exceeded") # os.system('kill -15 %s' % pids) for i in pids.split(): os.kill(int(i), 15) - logger(self.level).exception("Semi-QM taking too long to finish... aborting!") - raise Exception("Semi-QM taking too long to finish... aborting!") + msg = "Semi-QM taking too long to finish... aborting!" + logger(self.level).error(msg) + raise Exception(msg) def delOutputFiles(self): """Delete temporary output files""" @@ -931,7 +948,7 @@ def execTleap(self): os.remove(self.acTopFileName) os.remove(self.acXyzFileName) except Exception: - pass + self.printDebug("No crd or prm files left to be removed") self.printMess("Executing Tleap...") self.printDebug(cmd) self.tleapLog = _getoutput(cmd) @@ -940,7 +957,7 @@ def execTleap(self): if self.checkXyzAndTopFiles(): self.printMess("* Tleap OK *") else: - self.printQuoted(self.tleapLog) + self.printErrorQuoted(self.tleapLog) return True return False @@ -958,7 +975,7 @@ def checkLeapLog(self, log): block = False if block: check += line - self.printQuoted(check[:-1]) + self.printDebugQuoted(check[:-1]) def locateDat(self, aFile): """locate a file pertinent to $AMBERHOME/dat/leap/parm/""" @@ -998,18 +1015,18 @@ def execParmchk(self): check = self.checkFrcmod() if check: self.printWarn("Couldn't determine all parameters:") - self.printMess("From file '%s'\n" % self.acFrcmodFileName + check) + self.printMess(f"From file '{self.acFrcmodFileName + check}'\n") else: self.printMess("* Parmchk OK *") else: - self.printQuoted(self.parmchkLog) + self.printErrorQuoted(self.parmchkLog) return True return False def checkFrcmod(self): """Check FRCMOD file""" check = "" - frcmodContent = open(self.acFrcmodFileName, "r").readlines() + frcmodContent = open(self.acFrcmodFileName).readlines() for line in frcmodContent: if "ATTN, need revision" in line: check += line @@ -1026,9 +1043,11 @@ def convertPdbToMol2(self): def convertSmilesToMol2(self): """Convert Smiles to MOL2 by using obabel""" - if not self.obabelExe: - logger(self.level).exception("SMILES needs OpenBabel python module") - raise Exception("SMILES needs OpenBabel python module") + # if not self.obabelExe: + # msg = "SMILES needs OpenBabel python module" + # logger(self.level).error(msg) + # raise Exception(msg) + if checkOpenBabelVersion() >= 300: from openbabel import pybel @@ -1057,7 +1076,7 @@ def execObabel(self): if os.path.exists(self.inputFile): self.printMess("* Babel OK *") else: - self.printQuoted(self.obabelLog) + self.printErrorQuoted(self.obabelLog) return True return False @@ -1085,7 +1104,7 @@ def createMolTopol(self): """ Create molTop obj """ - self.topFileData = open(self.acTopFileName, "r").readlines() + self.topFileData = open(self.acTopFileName).readlines() self.molTopol = MolTopol( self, # acTopolObj verbose=self.verbose, @@ -1107,7 +1126,6 @@ def createMolTopol(self): self.pickleSave() except Exception: self.printError("pickleSave failed") - pass if not self.debug: self.delOutputFiles() # required to use on Jupyter Notebook @@ -1115,12 +1133,16 @@ def createMolTopol(self): def pickleSave(self): """ - To restore: - from acpype import * - #import cPickle as pickle - import pickle - o = pickle.load(open('DDD.pkl','rb')) - NB: It fails to restore with ipython in Mac (Linux OK) + Example: + + to restore: + + .. code-block:: python + + from acpype import * + # import cPickle as pickle + import pickle + mol = pickle.load(open('DDD.pkl','rb')) """ pklFile = self.baseName + ".pkl" dumpFlag = False @@ -1146,12 +1168,11 @@ def getFlagData(self, flag): data = "" if not self.topFileData: - logger(self.level).exception("PRMTOP file empty?") - raise Exception("PRMTOP file empty?") + msg = "PRMTOP file empty?" + logger(self.level).error(msg) + raise Exception(msg) for rawLine in self.topFileData: - if "%COMMENT" in rawLine: - continue line = rawLine.replace("\r", "").replace("\n", "") if tFlag in line: block = True @@ -1203,7 +1224,7 @@ def getResidueLabel(self): residueLabel = self.getFlagData("RESIDUE_LABEL") residueLabel = list(map(str, residueLabel)) if residueLabel[0] != residueLabel[0].upper(): - self.printWarn("residue label '%s' in '%s' is not all UPPERCASE" % (residueLabel[0], self.inputFile)) + self.printWarn(f"residue label '{residueLabel[0]}' in '{self.inputFile}' is not all UPPERCASE") self.printWarn("this may raise problem with some applications like CNS") self.residueLabel = residueLabel @@ -1213,8 +1234,9 @@ def getCoords(self): [[x1,y1,z1],[x2,y2,z2], etc.] """ if not self.xyzFileData: - logger(self.level).exception("INPCRD file empty?") - raise Exception("INPCRD file empty?") + msg = "INPCRD file empty?" + logger(self.level).error(msg) + raise Exception(msg) data = "" for rawLine in self.xyzFileData[2:]: line = rawLine.replace("\r", "").replace("\n", "") @@ -1403,10 +1425,8 @@ def getDihedrals(self): atomPairs.add(pair) else: improperDih.append(dihedral) - try: - atomPairs = sorted(atomPairs) - except Exception: - pass + if self.sorted: + atomPairs = sorted(atomPairs, key=lambda x: (x[0].id, x[1].id)) self.properDihedrals = properDih self.improperDihedrals = improperDih self.condensedProperDihedrals = condProperDih # [[],[],...] @@ -1454,9 +1474,9 @@ def getChirals(self): quad.append(bAts[0]) if len(quad) != 4: if self.chiral: - self.printWarn("Atom %s has less than 4 connections to 4 different atoms. It's NOT Chiral!" % atChi) + self.printWarn(f"Atom {atChi} has less than 4 connections to 4 different atoms. It's NOT Chiral!") continue - v1, v2, v3, v4 = [x.coords for x in quad] + v1, v2, v3, v4 = (x.coords for x in quad) chiralGroups.append((atChi, quad, imprDihAngle(v1, v2, v3, v4))) self.chiralGroups = chiralGroups @@ -1541,7 +1561,6 @@ def balanceCharges(self, chargeList, FirstNonSoluteId=None): else: lim = minVal nLims = chargeList.count(lim) - # limId = chargeList.index(lim) diff = totalConverted - round(totalConverted) fix = lim - diff * qConv / nLims id_ = 0 @@ -1598,8 +1617,10 @@ def setProperDihedralsCoef(self): phaseRaw = dih.phase * radPi # in degree phase = int(phaseRaw) # in degree if period > 4 and self.gmx4: - logger(self.level).exception("Likely trying to convert ILDN to RB, DO NOT use option '-z'") - raise Exception("Likely trying to convert ILDN to RB, DO NOT use option '-z'") + rmtree(self.absHomeDir) + msg = "Likely trying to convert ILDN to RB, DO NOT use option '-z'" + logger(self.level).error(msg) + raise Exception(msg) if phase in [0, 180]: properDihedralsGmx45.append([item[0].atoms, phaseRaw, kPhi, period]) if self.gmx4: @@ -1654,32 +1675,33 @@ def writeCharmmTopolFiles(self): self.getResidueLabel() res = self.resName - cmd = ( - "%s -dr no -i %s -fi mol2 -o %s -fo charmm -s 2 -at %s \ - -pf y -rn %s" - % (self.acExe, self.acMol2FileName, self.charmmBase, at, res) - ) + cmd = f"{self.acExe} -dr no -i {self.acMol2FileName} -fi mol2 -o {self.charmmBase} \ + -fo charmm -s 2 -at {at} -pf n -rn {res}" - cmd = cmd.replace("-pf y", "-pf n") self.printDebug(cmd) log = _getoutput(cmd) - self.printQuoted(log) + self.printDebugQuoted(log) - def writePdb(self, file_): + def writePdb(self, afile): """ - Write a new PDB file_ with the atom names defined by Antechamber - Input: file_ path string - The format generated here use is slightly different from - old: http://www.wwpdb.org/documentation/file-format-content/format23/sect9.html - latest: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html - respected to atom name - Using GAFF2 atom types + Write a new PDB file with the atom names defined by Antechamber + + The format generated here use is slightly different from: + + old: http://www.wwpdb.org/documentation/file-format-content/format23/sect9.html + latest: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html + + respected to atom name. + Using GAFF2 atom types. CU/Cu Copper, CL/cl Chlorine, BR/br Bromine + + Args: + afile ([str]): file path name """ # TODO: assuming only one residue ('1') - pdbFile = open(file_, "w") - fbase = os.path.basename(file_) + pdbFile = open(afile, "w") + fbase = os.path.basename(afile) pdbFile.write("REMARK " + head % (fbase, date)) id_ = 1 for atom in self.atoms: @@ -1715,102 +1737,109 @@ def writePdb(self, file_): def writeGromacsTopolFiles(self): """ - # from ~/Programmes/amber10/dat/leap/parm/gaff.dat - #atom type atomic mass atomic polarizability comments - ca 12.01 0.360 Sp2 C in pure aromatic systems - ha 1.008 0.135 H bonded to aromatic carbon - - #bonded atoms harmonic force kcal/mol/A^2 eq. dist. Ang. comments - ca-ha 344.3* 1.087** SOURCE3 1496 0.0024 0.0045 - * for gmx: 344.3 * 4.184 * 100 * 2 = 288110 kJ/mol/nm^2 (why factor 2?) - ** convert Ang to nm ( div by 10) for gmx: 1.087 A = 0.1087 nm - # CA HA 1 0.10800 307105.6 ; ged from 340. bsd on C6H6 nmodes; PHE,TRP,TYR (from ffamber99bon.itp) - # CA-HA 367.0 1.080 changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR (from parm99.dat) - - # angle HF kcal/mol/rad^2 eq angle degrees comments - ca-ca-ha 48.5* 120.01 SOURCE3 2980 0.1509 0.2511 - * to convert to gmx: 48.5 * 4.184 * 2 = 405.848 kJ/mol/rad^2 (why factor 2?) - # CA CA HA 1 120.000 418.400 ; new99 (from ffamber99bon.itp) - # CA-CA-HA 50.0 120.00 (from parm99.dat) - - # dihedral idivf barrier hight/2 kcal/mol phase degrees periodicity comments - X -ca-ca-X 4 14.500* 180.000 2.000 intrpol.bsd.on C6H6 - *convert 2 gmx: 14.5/4 * 4.184 * 2 (?) (yes in amb2gmx, not in topolbuild, why?) = 30.334 or 15.167 kJ/mol - # X -CA-CA-X 4 14.50 180.0 2. intrpol.bsd.on C6H6 (from parm99.dat) - # X CA CA X 3 30.334 0.000 -30.33400 0.000 0.000 0.000 ; intrpol.bsd.on C6H6 - ;propers treated as RBs in GMX to use combine multiple AMBER torsions per quartet (from ffamber99bon.itp) - - # impr. dihedral barrier hight/2 phase degrees periodicity comments - X -X -ca-ha 1.1* 180. 2. bsd.on C6H6 nmodes - * to convert to gmx: 1.1 * 4.184 = 4.6024 kJ/mol/rad^2 - # X -X -CA-HA 1.1 180. 2. bsd.on C6H6 nmodes (from parm99.dat) - # X X CA HA 1 180.00 4.60240 2 ; bsd.on C6H6 nmodes - ;impropers treated as propers in GROMACS to use correct AMBER analytical function (from ffamber99bon.itp) - - # 6-12 parms sigma = 2 * r * 2^(-1/6) epsilon - # atomtype radius Ang. pot. well depth kcal/mol comments - ha 1.4590* 0.0150** Spellmeyer - ca 1.9080 0.0860 OPLS - * to convert to gmx: - sigma = 1.4590 * 2^(-1/6) * 2 = 2 * 1.29982 Ang. = 2 * 0.129982 nm = 1.4590 * 2^(5/6)/10 = 0.259964 nm - ** to convert to gmx: 0.0150 * 4.184 = 0.06276 kJ/mol - # amber99_3 CA 0.0000 0.0000 A 3.39967e-01 3.59824e-01 (from ffamber99nb.itp) - # amber99_22 HA 0.0000 0.0000 A 2.59964e-01 6.27600e-02 (from ffamber99nb.itp) - # C* 1.9080 0.0860 Spellmeyer - # HA 1.4590 0.0150 Spellmeyer (from parm99.dat) - # to convert r and epsilon to ACOEF and BCOEF - # ACOEF = sqrt(e1*e2) * (r1 + r2)^12 ; BCOEF = 2 * sqrt(e1*e2) * (r1 + r2)^6 = 2 * ACOEF/(r1+r2)^6 - # to convert ACOEF and BCOEF to r and epsilon - # r = 0.5 * (2*ACOEF/BCOEF)^(1/6); ep = BCOEF^2/(4*ACOEF) - # to convert ACOEF and BCOEF to sigma and epsilon (GMX) - # sigma = (ACOEF/BCOEF)^(1/6) * 0.1 ; epsilon = 4.184 * BCOEF^2/(4*ACOEF) - # ca ca 819971.66 531.10 - # ca ha 76245.15 104.66 - # ha ha 5716.30 18.52 + Write GMX topology Files + + :: + + # from ~/Programmes/amber10/dat/leap/parm/gaff.dat + #atom type atomic mass atomic polarizability comments + ca 12.01 0.360 Sp2 C in pure aromatic systems + ha 1.008 0.135 H bonded to aromatic carbon + + #bonded atoms harmonic force kcal/mol/A^2 eq. dist. Ang. comments + ca-ha 344.3* 1.087** SOURCE3 1496 0.0024 0.0045 + * for gmx: 344.3 * 4.184 * 100 * 2 = 288110 kJ/mol/nm^2 (why factor 2?) + ** convert Ang to nm ( div by 10) for gmx: 1.087 A = 0.1087 nm + # CA HA 1 0.10800 307105.6 ; ged from 340. bsd on C6H6 nmodes; PHE,TRP,TYR (from ffamber99bon.itp) + # CA-HA 367.0 1.080 changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR (from parm99.dat) + + # angle HF kcal/mol/rad^2 eq angle degrees comments + ca-ca-ha 48.5* 120.01 SOURCE3 2980 0.1509 0.2511 + * to convert to gmx: 48.5 * 4.184 * 2 = 405.848 kJ/mol/rad^2 (why factor 2?) + # CA CA HA 1 120.000 418.400 ; new99 (from ffamber99bon.itp) + # CA-CA-HA 50.0 120.00 (from parm99.dat) + + # dihedral idivf barrier hight/2 kcal/mol phase degrees periodicity comments + X -ca-ca-X 4 14.500* 180.000 2.000 intrpol.bsd.on C6H6 + *convert 2 gmx: 14.5/4 * 4.184 * 2 (?) (yes in amb2gmx, not in topolbuild, why?) = 30.334 or 15.167 kJ/mol + # X -CA-CA-X 4 14.50 180.0 2. intrpol.bsd.on C6H6 (from parm99.dat) + # X CA CA X 3 30.334 0.000 -30.33400 0.000 0.000 0.000 ; intrpol.bsd.on C6H6 + ;propers treated as RBs in GMX to use combine multiple AMBER torsions per quartet (from ffamber99bon.itp) + + # impr. dihedral barrier hight/2 phase degrees periodicity comments + X -X -ca-ha 1.1* 180. 2. bsd.on C6H6 nmodes + * to convert to gmx: 1.1 * 4.184 = 4.6024 kJ/mol/rad^2 + # X -X -CA-HA 1.1 180. 2. bsd.on C6H6 nmodes (from parm99.dat) + # X X CA HA 1 180.00 4.60240 2 ; bsd.on C6H6 nmodes + ;impropers treated as propers in GROMACS to use correct AMBER analytical function (from ffamber99bon.itp) + + # 6-12 parms sigma = 2 * r * 2^(-1/6) epsilon + # atomtype radius Ang. pot. well depth kcal/mol comments + ha 1.4590* 0.0150** Spellmeyer + ca 1.9080 0.0860 OPLS + * to convert to gmx: + sigma = 1.4590 * 2^(-1/6) * 2 = 2 * 1.29982 Ang. = 2 * 0.129982 nm = 1.4590 * 2^(5/6)/10 = 0.259964 nm + ** to convert to gmx: 0.0150 * 4.184 = 0.06276 kJ/mol + # amber99_3 CA 0.0000 0.0000 A 3.39967e-01 3.59824e-01 (from ffamber99nb.itp) + # amber99_22 HA 0.0000 0.0000 A 2.59964e-01 6.27600e-02 (from ffamber99nb.itp) + # C* 1.9080 0.0860 Spellmeyer + # HA 1.4590 0.0150 Spellmeyer (from parm99.dat) + # to convert r and epsilon to ACOEF and BCOEF + # ACOEF = sqrt(e1*e2) * (r1 + r2)^12 ; BCOEF = 2 * sqrt(e1*e2) * (r1 + r2)^6 = 2 * ACOEF/(r1+r2)^6 + # to convert ACOEF and BCOEF to r and epsilon + # r = 0.5 * (2*ACOEF/BCOEF)^(1/6); ep = BCOEF^2/(4*ACOEF) + # to convert ACOEF and BCOEF to sigma and epsilon (GMX) + # sigma = (ACOEF/BCOEF)^(1/6) * 0.1 ; epsilon = 4.184 * BCOEF^2/(4*ACOEF) + # ca ca 819971.66 531.10 + # ca ha 76245.15 104.66 + # ha ha 5716.30 18.52 For proper dihedrals: a quartet of atoms may appear with more than one set of parameters and to convert to GMX they are treated as RBs; use the algorithm: - for(my $j=$i;$j<=$lines;$j++){ - my $period = $pn{$j}; - if($pk{$j}>0) { - $V[$period] = 2*$pk{$j}*$cal; - } - # assign V values to C values as predefined # - if($period==1){ - $C[0]+=0.5*$V[$period]; - if($phase{$j}==0){ - $C[1]-=0.5*$V[$period]; - }else{ - $C[1]+=0.5*$V[$period]; - } - }elsif($period==2){ - if(($phase{$j}==180)||($phase{$j}==3.14)){ - $C[0]+=$V[$period]; - $C[2]-=$V[$period]; - }else{ - $C[2]+=$V[$period]; - } - }elsif($period==3){ - $C[0]+=0.5*$V[$period]; - if($phase{$j}==0){ - $C[1]+=1.5*$V[$period]; - $C[3]-=2*$V[$period]; - }else{ - $C[1]-=1.5*$V[$period]; - $C[3]+=2*$V[$period]; - } - }elsif($period==4){ - if(($phase{$j}==180)||($phase{$j}==3.14)){ - $C[2]+=4*$V[$period]; - $C[4]-=4*$V[$period]; - }else{ - $C[0]+=$V[$period]; - $C[2]-=4*$V[$period]; - $C[4]+=4*$V[$period]; - } + + .. code-block:: c++ + + for(my $j=$i;$j<=$lines;$j++){ + my $period = $pn{$j}; + if($pk{$j}>0) { + $V[$period] = 2*$pk{$j}*$cal; + } + # assign V values to C values as predefined # + if($period==1){ + $C[0]+=0.5*$V[$period]; + if($phase{$j}==0){ + $C[1]-=0.5*$V[$period]; + }else{ + $C[1]+=0.5*$V[$period]; + } + }elsif($period==2){ + if(($phase{$j}==180)||($phase{$j}==3.14)){ + $C[0]+=$V[$period]; + $C[2]-=$V[$period]; + }else{ + $C[2]+=$V[$period]; + } + }elsif($period==3){ + $C[0]+=0.5*$V[$period]; + if($phase{$j}==0){ + $C[1]+=1.5*$V[$period]; + $C[3]-=2*$V[$period]; + }else{ + $C[1]-=1.5*$V[$period]; + $C[3]+=2*$V[$period]; + } + }elsif($period==4){ + if(($phase{$j}==180)||($phase{$j}==3.14)){ + $C[2]+=4*$V[$period]; + $C[4]-=4*$V[$period]; + }else{ + $C[0]+=$V[$period]; + $C[2]-=4*$V[$period]; + $C[4]+=4*$V[$period]; + } + } } - } """ if self.amb2gmx: os.chdir(self.absHomeDir) @@ -1831,9 +1860,13 @@ def writeGromacsTopolFiles(self): os.chdir(self.rootDir) def setAtomType4Gromacs(self): - """Atom types names in Gromacs TOP file are not case sensitive; + """ + Atom types names in Gromacs TOP file are not case sensitive; this routine will append a '_' to lower case atom type. - E.g.: CA and ca -> CA and ca_ + + Example: + + >>> CA and ca -> CA and ca_ """ if self.merge: @@ -2153,9 +2186,9 @@ def writeGromacsTop(self): sigma, epsilon, ) - + " ; %4.2f %1.4f\n" % (r0, epAmber) + + f" ; {r0:4.2f} {epAmber:1.4f}\n" ) - oline = "; %s:%s:opls_%s: %s\n" % (aTypeName, aTypeNameOpls, oaCode[0], repr(oaCode[1:])) + oline = f"; {aTypeName}:{aTypeNameOpls}:opls_{oaCode[0]}: {repr(oaCode[1:])}\n" # tmpFile.write(line) temp.append(line) otemp.append(oline) @@ -2177,7 +2210,7 @@ def writeGromacsTop(self): oitpText += otemp self.printDebug("GMX atomtypes done") - if len(self.atoms) > 3 * nWat + sum([x[1] for x in ionsSorted]): + if len(self.atoms) > 3 * nWat + sum(x[1] for x in ionsSorted): nSolute = 1 if nWat: @@ -2719,7 +2752,7 @@ def writeGroFile(self): # vZ = self.pbc[1][2] if vX == 90.0: self.printDebug("PBC triclinic") - text = "%11.5f %11.5f %11.5f\n" % (boxX, boxY, boxZ) + text = f"{boxX:11.5f} {boxY:11.5f} {boxZ:11.5f}\n" elif round(vX, 2) == 109.47: self.printDebug("PBC octahedron") f1 = 0.471405 # 1/3 * sqrt(2) @@ -2730,7 +2763,7 @@ def writeGroFile(self): v12 = f2 v13 = -f2 v23 = f1 * boxX - text = "%11.5f %11.5f %11.5f %11.5f %11.5f %11.5f %11.5f %11.5f %11.5f\n" % ( + text = "{:11.5f} {:11.5f} {:11.5f} {:11.5f} {:11.5f} {:11.5f} {:11.5f} {:11.5f} {:11.5f}\n".format( boxX, v22, v33, @@ -2749,7 +2782,7 @@ def writeGroFile(self): boxX = max(X) - min(X) # + 2.0 # 2.0 is double of rlist boxY = max(Y) - min(Y) # + 2.0 boxZ = max(Z) - min(Z) # + 2.0 - text = "%11.5f %11.5f %11.5f\n" % (boxX * 20.0, boxY * 20.0, boxZ * 20.0) + text = f"{boxX * 20.0:11.5f} {boxY * 20.0:11.5f} {boxZ * 20.0:11.5f}\n" groFile.write(text) def writePosreFile(self, fc=1000): @@ -2993,7 +3026,7 @@ def writeCnsTopolFiles(self): # print "Writing CNS TOP file\n" topFile.write("Remarks " + head % (top, date)) topFile.write("\nset echo=false end\n") - topFile.write("\nautogenerate angles=%s dihedrals=%s end\n" % (autoAngleFlag, autoDihFlag)) + topFile.write(f"\nautogenerate angles={autoAngleFlag} dihedrals={autoDihFlag} end\n") topFile.write("\n{ atomType mass }\n") for at in self.atomTypes: @@ -3202,8 +3235,9 @@ def __init__( ) self.printMess(hint1) self.printMess(hint2) - logger(self.level).exception("Missing ANTECHAMBER") - raise Exception("Missing ANTECHAMBER") + msg = "Missing ANTECHAMBER" + logger(self.level).error(msg) + raise Exception(msg) self.inputFile = os.path.basename(inputFile) self.rootDir = os.path.abspath(".") self.absInputFile = os.path.abspath(inputFile) @@ -3221,8 +3255,9 @@ def __init__( self.is_smiles = False self.smiles = None elif not os.path.exists(self.absInputFile): - logger(self.level).exception(f"Input file {inputFile} DOES NOT EXIST") - raise Exception(f"Input file {inputFile} DOES NOT EXIST") + msg = f"Input file {inputFile} DOES NOT EXIST" + logger(self.level).error(msg) + raise Exception(msg) baseOriginal, ext = os.path.splitext(self.inputFile) base = basename or baseOriginal self.baseOriginal = baseOriginal @@ -3233,14 +3268,17 @@ def __init__( if self.ext != ".mol2" and self.ext != ".mdl": self.printError(f"no '{binaries['obabel_bin']}' executable; you need it if input is PDB or SMILES") self.printError("otherwise use only MOL2 or MDL file as input ... aborting!") - logger(self.level).exception("Missing OBABEL") - raise Exception("Missing OBABEL") + msg = "Missing OBABEL" + logger(self.level).error(msg) + raise Exception(msg) else: self.printWarn(f"no '{binaries['obabel_bin']}' executable, no PDB file can be used as input!") if self.is_smiles: self.convertSmilesToMol2() self.timeTol = timeTol self.printDebug("Max execution time tolerance is %s" % elapsedTime(self.timeTol)) + # ekFlag e.g. (default used by sqm): + # acpype -i cccc -k "qm_theory='AM1', grms_tol=0.0005, scfconv=1.d-10, ndiis_attempts=700, qmcharge=0" if ekFlag == '"None"' or ekFlag is None: self.ekFlag = "" else: @@ -3268,7 +3306,7 @@ def __init__( self.tmpDir = os.path.join(self.rootDir, ".acpype_tmp_%s" % os.path.basename(base)) self.setResNameCheckCoords() self.guessCharge() - acMol2FileName = "%s_%s_%s.mol2" % (base, chargeType, atomType) + acMol2FileName = f"{base}_{chargeType}_{atomType}.mol2" self.acMol2FileName = acMol2FileName self.charmmBase = "%s_CHARMM" % base self.qFlag = qDict[qprog] @@ -3292,7 +3330,7 @@ class MolTopol(AbstractTopol): """ " Class to write topologies and parameters files for several applications - http://amber.scripps.edu/formats.html (not updated to amber 10 yet) + https://ambermd.org/FileFormats.php Parser, take information in AC xyz and top files and convert to objects @@ -3347,11 +3385,11 @@ def __init__( elif not self.amb2gmx: self.amb2gmx = True if not os.path.exists(acFileXyz) or not os.path.exists(acFileTop): - self.printError("Files '%s' and/or '%s' don't exist" % (acFileXyz, acFileTop)) + self.printError(f"Files '{acFileXyz}' and/or '{acFileTop}' don't exist") self.printError("molTopol object won't be created") - self.xyzFileData = open(acFileXyz, "r").readlines() - self.topFileData = [x for x in open(acFileTop, "r").readlines() if not x.startswith("%COMMENT")] + self.xyzFileData = open(acFileXyz).readlines() + self.topFileData = [x for x in open(acFileTop).readlines() if not x.startswith("%COMMENT")] self.topo14Data = Topology_14() self.topo14Data.read_amber_topology("".join(self.topFileData)) self.printDebug("prmtop and inpcrd files loaded") diff --git a/acpype_docker.bat b/acpype_docker.bat index 70c896ca..e9d460c6 100755 --- a/acpype_docker.bat +++ b/acpype_docker.bat @@ -1,2 +1,2 @@ @echo on -docker run --rm -i -t -v %cd%:/wdir -w /wdir acpype/acpype acpype %* \ No newline at end of file +docker run --rm -i -t -v %cd%:/wdir -w /wdir acpype/acpype acpype %* diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_templates/custom-class-template.rst b/docs/_templates/custom-class-template.rst new file mode 100644 index 00000000..b29757c5 --- /dev/null +++ b/docs/_templates/custom-class-template.rst @@ -0,0 +1,32 @@ +{{ fullname | escape | underline}} + +.. currentmodule:: {{ module }} + +.. autoclass:: {{ objname }} + :members: + :show-inheritance: + :inherited-members: + + {% block methods %} + .. automethod:: __init__ + + {% if methods %} + .. rubric:: {{ _('Methods') }} + + .. autosummary:: + {% for item in methods %} + ~{{ name }}.{{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block attributes %} + {% if attributes %} + .. rubric:: {{ _('Attributes') }} + + .. autosummary:: + {% for item in attributes %} + ~{{ name }}.{{ item }} + {%- endfor %} + {% endif %} + {% endblock %} diff --git a/docs/_templates/custom-module-template.rst b/docs/_templates/custom-module-template.rst new file mode 100644 index 00000000..f46f9f63 --- /dev/null +++ b/docs/_templates/custom-module-template.rst @@ -0,0 +1,66 @@ +{{ fullname | escape | underline}} + +.. automodule:: {{ fullname }} + + {% block attributes %} + {% if attributes %} + .. rubric:: {{ _('Module Attributes') }} + + .. autosummary:: + :toctree: + {% for item in attributes %} + {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block functions %} + {% if functions %} + .. rubric:: {{ _('Functions') }} + + .. autosummary:: + :toctree: + {% for item in functions %} + {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block classes %} + {% if classes %} + .. rubric:: {{ _('Classes') }} + + .. autosummary:: + :toctree: + :template: custom-class-template.rst + {% for item in classes %} + {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block exceptions %} + {% if exceptions %} + .. rubric:: {{ _('Exceptions') }} + + .. autosummary:: + :toctree: + {% for item in exceptions %} + {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + +{% block modules %} +{% if modules %} +.. rubric:: Modules + +.. autosummary:: + :toctree: + :template: custom-module-template.rst + :recursive: +{% for item in modules %} + {{ item }} +{%- endfor %} +{% endif %} +{% endblock %} diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..306779df --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,63 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +from datetime import datetime + +sys.path.insert(0, os.path.abspath("..")) + + +# -- Project information ----------------------------------------------------- +year = str(datetime.today().year) +project = "ACPYPE" +copyright = f"{year}, Alan Silva" +author = "Alan Silva" + +release = year +# The full version, including alpha/beta/rc tags +try: + import acpype +except ImportError: + print("WARNING: couldn't import acpype to read version.") +else: + release = acpype.__version__ + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.napoleon", "sphinx.ext.autodoc", "sphinx.ext.autosummary"] + +autosummary_generate = True + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" # "classic" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..fe7c12af --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,28 @@ +.. ACPYPE documentation master file, created by + sphinx-quickstart on Tue Dec 28 23:14:53 2021. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to ACPYPE's documentation! +================================== + + +**ACPYPE - AnteChamber PYthon Parser interfacE** + +A tool based in **Python** to use **Antechamber** to generate topologies for chemical +compounds and to interface with others python applications like CCPN and ARIA. +Topologies files to be generated so far: CNS/XPLOR, GROMACS, CHARMM and AMBER. + +.. autosummary:: + :toctree: _autosummary + :template: custom-module-template.rst + :recursive: + + acpype + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..153be5e2 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/ffamber_additions/README.txt b/ffamber_additions/README.txt index 01cb3479..9ac9605e 100644 --- a/ffamber_additions/README.txt +++ b/ffamber_additions/README.txt @@ -1,2 +1,2 @@ FF.dat : updated FF.dat file to include all forcefield prefixes for ffamber -[spc, spce, tip3p, ions].itp : modified versions to include _FF_AMBER** definitions \ No newline at end of file +[spc, spce, tip3p, ions].itp : modified versions to include _FF_AMBER** definitions diff --git a/ffamber_additions/parm10gaff.dat b/ffamber_additions/parm10gaff.dat index 6acb1f98..02d5ca1c 100644 --- a/ffamber_additions/parm10gaff.dat +++ b/ffamber_additions/parm10gaff.dat @@ -6682,4 +6682,3 @@ Bond angle: 437 low quality parameters were replaced and 618 new parameters were introduced. --------------------------------------------------------------------------- - diff --git a/ffamber_additions/parm99SBgaff.dat b/ffamber_additions/parm99SBgaff.dat index 5bf072b5..533b2c9d 100644 --- a/ffamber_additions/parm99SBgaff.dat +++ b/ffamber_additions/parm99SBgaff.dat @@ -6574,4 +6574,3 @@ Bond angle: 437 low quality parameters were replaced and 618 new parameters were introduced. --------------------------------------------------------------------------- - diff --git a/ffamber_additions/parm99bsc0SBgaff.dat b/ffamber_additions/parm99bsc0SBgaff.dat index 13b4219f..1bab8eff 100644 --- a/ffamber_additions/parm99bsc0SBgaff.dat +++ b/ffamber_additions/parm99bsc0SBgaff.dat @@ -6615,4 +6615,3 @@ Bond angle: 437 low quality parameters were replaced and 618 new parameters were introduced. --------------------------------------------------------------------------- - diff --git a/legacy/CcpnToAcpype.py b/legacy/CcpnToAcpype.py index 742eacf0..87bfac40 100644 --- a/legacy/CcpnToAcpype.py +++ b/legacy/CcpnToAcpype.py @@ -1,12 +1,9 @@ -from __future__ import print_function - import os import random import string import sys import time import traceback -from builtins import object, range from shutil import rmtree from ccpnmr.format.converters import Mol2Format # type: ignore @@ -22,8 +19,7 @@ def dirWalk(adir): for f in os.listdir(adir): fullpath = os.path.abspath(os.path.join(adir, f)) if os.path.isdir(fullpath) and not os.path.islink(fullpath): - for x in dirWalk(fullpath): # recurse into subdir - yield x + yield from dirWalk(fullpath) else: yield fullpath @@ -33,10 +29,10 @@ def addMolPep(cnsPepPath, molName): Add info about MOL in CNS topol*.pep file input: cns pep file path to be modified and MOL name """ - txt = "first IONS tail + %s end\nlast IONS head - %s end\n\n" % (molName, molName) + txt = f"first IONS tail + {molName} end\nlast IONS head - {molName} end\n\n" pepFile = open(cnsPepPath).read() if txt in pepFile: - print("%s already added to %s" % (molName, cnsPepPath)) + print(f"{molName} already added to {cnsPepPath}") return False pepFile = pepFile.splitlines(1) pepFile.reverse() @@ -50,7 +46,7 @@ def addMolPep(cnsPepPath, molName): nPepFile = open(cnsPepPath, "w") nPepFile.writelines(pepFile) nPepFile.close() - print("%s added to %s" % (molName, cnsPepPath)) + print(f"{molName} added to {cnsPepPath}") return True @@ -76,7 +72,7 @@ def formatLine(line, n): parFile = open(cnsParPath).read() if txt in parFile: - print("%s already added to %s" % (molName, cnsParPath)) + print(f"{molName} already added to {cnsParPath}") return False molFile = open(molParPath).readlines() @@ -123,7 +119,7 @@ def formatLine(line, n): nParFile = open(cnsParPath, "w") nParFile.writelines(parList) nParFile.close() - print("%s added to %s" % (molName, cnsParPath)) + print(f"{molName} added to {cnsParPath}") return True @@ -151,7 +147,7 @@ def addMolTop(cnsTopPath, molTopPath): topFile = open(cnsTopPath).read() if txt in topFile: - print("%s already added to %s" % (molName, cnsTopPath)) + print(f"{molName} already added to {cnsTopPath}") return False molFile = open(molTopPath).readlines() @@ -189,11 +185,11 @@ def addMolTop(cnsTopPath, molTopPath): nTopFile = open(cnsTopPath, "w") nTopFile.writelines(topList) nTopFile.close() - print("%s added to %s" % (molName, cnsTopPath)) + print(f"{molName} added to {cnsTopPath}") return True -class AcpypeForCcpnProject(object): +class AcpypeForCcpnProject: """ Class to take a Ccpn project, check if it has an unusual chem comp and call ACPYPE API to generate @@ -272,9 +268,9 @@ def run( res = chain.findFirstResidue() resName = res.ccpCode.upper() if chargeVal is None: - print("Running ACPYPE for '%s : %s' and trying to guess net charge" % (resName, chain.molecule.name)) + print(f"Running ACPYPE for '{resName} : {chain.molecule.name}' and trying to guess net charge") else: - print("Running ACPYPE for '%s : %s' with charge '%s'" % (resName, chain.molecule.name, chargeVal)) + print(f"Running ACPYPE for '{resName} : {chain.molecule.name}' with charge '{chargeVal}'") random.seed() d = [random.choice(letters) for x in range(10)] randString = "".join(d) diff --git a/poetry.lock b/poetry.lock index 4d2299de..98f8f9af 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,11 @@ +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "appnope" version = "0.1.2" @@ -16,17 +24,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.2.0" +version = "21.4.0" description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "babel" +version = "2.9.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pytz = ">=2015.7" [[package]] name = "backcall" @@ -66,6 +85,33 @@ jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[[package]] +name = "charset-normalizer" +version = "2.0.9" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + [[package]] name = "click" version = "8.0.3" @@ -116,6 +162,22 @@ category = "dev" optional = false python-versions = ">=3.5" +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "fancycompleter" version = "0.9.1" @@ -128,6 +190,18 @@ python-versions = "*" pyreadline = {version = "*", markers = "platform_system == \"Windows\""} pyrepl = ">=0.8.2" +[[package]] +name = "filelock" +version = "3.4.1" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + [[package]] name = "flake8" version = "4.0.1" @@ -142,6 +216,33 @@ mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.8.0,<2.9.0" pyflakes = ">=2.4.0,<2.5.0" +[[package]] +name = "identify" +version = "2.4.1" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.3.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "importlib-metadata" version = "4.2.0" @@ -158,6 +259,21 @@ zipp = ">=0.5" docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +[[package]] +name = "importlib-resources" +version = "5.2.3" +description = "Read resources from Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "iniconfig" version = "1.1.1" @@ -179,7 +295,7 @@ ipython = {version = ">=5.1.0", markers = "python_version >= \"3.4\""} [[package]] name = "ipython" -version = "7.10.0" +version = "7.16.2" description = "IPython: Productive Interactive Computing" category = "dev" optional = false @@ -190,15 +306,15 @@ appnope = {version = "*", markers = "sys_platform == \"darwin\""} backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" -jedi = ">=0.10" +jedi = ">=0.10,<=0.17.2" pexpect = {version = "*", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.1.0" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" traitlets = ">=4.2" [package.extras] -all = ["ipyparallel", "requests", "testpath", "ipywidgets", "nbformat", "notebook", "ipykernel", "qtconsole", "numpy (>=1.14)", "Sphinx (>=1.3)", "nbconvert", "nose (>=0.10.1)", "pygments"] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.14)", "pygments", "qtconsole", "requests", "testpath"] doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] @@ -232,18 +348,40 @@ plugins = ["setuptools"] [[package]] name = "jedi" -version = "0.18.1" +version = "0.17.2" description = "An autocompletion tool for Python that can be used for text editors." category = "dev" optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +parso = ">=0.7.0,<0.8.0" + +[package.extras] +qa = ["flake8 (==3.7.9)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +category = "dev" +optional = false python-versions = ">=3.6" [package.dependencies] -parso = ">=0.8.0,<0.9.0" +MarkupSafe = ">=2.0" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.6" [[package]] name = "mccabe" @@ -279,6 +417,14 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "packaging" version = "21.3" @@ -292,15 +438,14 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "parso" -version = "0.8.3" +version = "0.7.1" description = "A Python Parser" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +testing = ["docopt", "pytest (>=3.0.7)"] [[package]] name = "pathspec" @@ -373,6 +518,24 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pre-commit" +version = "2.16.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = "<5.3", markers = "python_version < \"3.7\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + [[package]] name = "prompt-toolkit" version = "3.0.24" @@ -418,7 +581,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.10.0" +version = "2.11.1" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false @@ -488,6 +651,62 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] +[[package]] +name = "pytest-random-order" +version = "1.0.4" +description = "Randomise the order in which pytest tests are run with some control over the randomness" +category = "dev" +optional = false +python-versions = ">=3.5.0" + +[package.dependencies] +pytest = ">=3.0.0" + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pyupgrade" +version = "2.31.0" +description = "A tool to automatically upgrade syntax for newer versions." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +tokenize-rt = ">=3.2.0" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.26.0" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + [[package]] name = "six" version = "1.16.0" @@ -496,6 +715,116 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.3.2" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.920)", "docutils-stubs", "types-typed-ast", "types-pkg-resources", "types-requests"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + [[package]] name = "tokenize-rt" version = "4.2.1" @@ -552,6 +881,39 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "urllib3" +version = "1.26.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.13.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.0", markers = "python_version < \"3.7\""} +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + [[package]] name = "wcwidth" version = "0.2.5" @@ -583,9 +945,13 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = ">=3.6.2,<4.0" -content-hash = "d33a3299ee0dc522400d98e076724fc3ffed36e8ab9ff1945d364868558e6389" +content-hash = "06a252c4099006a12a673fc9de7f4cdf8ba2e8c22c3c29be93d3f4e87c13e56e" [metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] appnope = [ {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, @@ -595,8 +961,12 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +babel = [ + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -606,6 +976,18 @@ black = [ {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, ] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, + {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, +] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, @@ -671,18 +1053,46 @@ decorator = [ {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, ] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] fancycompleter = [ {file = "fancycompleter-0.9.1-py3-none-any.whl", hash = "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080"}, {file = "fancycompleter-0.9.1.tar.gz", hash = "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272"}, ] +filelock = [ + {file = "filelock-3.4.1-py3-none-any.whl", hash = "sha256:a4bc51381e01502a30e9f06dd4fa19a1712eab852b6fb0f84fd7cce0793d8ca3"}, + {file = "filelock-3.4.1.tar.gz", hash = "sha256:0f12f552b42b5bf60dba233710bf71337d35494fc8bdd4fd6d9f6d082ad45e06"}, +] flake8 = [ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, ] +identify = [ + {file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"}, + {file = "identify-2.4.1.tar.gz", hash = "sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [ + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, +] importlib-metadata = [ {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, ] +importlib-resources = [ + {file = "importlib_resources-5.2.3-py3-none-any.whl", hash = "sha256:ae35ed1cfe8c0d6c1a53ecd168167f01fa93b893d51a62cdf23aea044c67211b"}, + {file = "importlib_resources-5.2.3.tar.gz", hash = "sha256:203d70dda34cfbfbb42324a8d4211196e7d3e858de21a5eb68c6d1cdd99e4e98"}, +] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -691,8 +1101,8 @@ ipdb = [ {file = "ipdb-0.13.0.tar.gz", hash = "sha256:b90f1f661028af17c5043b4ea4534bc2f303d1f23b0c762a08923c7c454d7a59"}, ] ipython = [ - {file = "ipython-7.10.0-py3-none-any.whl", hash = "sha256:060d19feef09453d3375ab23c7295ed36cb59e5a3904598ab903f93ec45f1f63"}, - {file = "ipython-7.10.0.tar.gz", hash = "sha256:e468b8f03a0168a667982b50f0b4e0828cc32721bbea32b23934e55b7970eb7a"}, + {file = "ipython-7.16.2-py3-none-any.whl", hash = "sha256:2f644313be4fdc5c8c2a17467f2949c29423c9e283a159d1fc9bf450a1a300af"}, + {file = "ipython-7.16.2.tar.gz", hash = "sha256:613085f8acb0f35f759e32bea35fba62c651a4a2e409a0da11414618f5eec0c4"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, @@ -703,8 +1113,83 @@ isort = [ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] jedi = [ - {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, - {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, + {file = "jedi-0.17.2-py2.py3-none-any.whl", hash = "sha256:98cc583fa0f2f8304968199b01b6b4b94f469a1f4a74c1560506ca2a211378b5"}, + {file = "jedi-0.17.2.tar.gz", hash = "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20"}, +] +jinja2 = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, @@ -736,13 +1221,17 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] parso = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.7.1-py2.py3-none-any.whl", hash = "sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea"}, + {file = "parso-0.7.1.tar.gz", hash = "sha256:caba44724b994a8a5e086460bb212abc5a8bc46951bf4a9a1210745953622eb9"}, ] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, @@ -768,6 +1257,10 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +pre-commit = [ + {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"}, + {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"}, +] prompt-toolkit = [ {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, @@ -789,8 +1282,8 @@ pyflakes = [ {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, ] pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, + {file = "Pygments-2.11.1-py3-none-any.whl", hash = "sha256:9135c1af61eec0f650cd1ea1ed8ce298e54d56bcd8cc2ef46edd7702c171337c"}, + {file = "Pygments-2.11.1.tar.gz", hash = "sha256:59b895e326f0fb0d733fd28c6839bd18ad0687ba20efc26d4277fd1d30b971f4"}, ] pyparsing = [ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, @@ -812,10 +1305,93 @@ pytest-cov = [ {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] +pytest-random-order = [ + {file = "pytest-random-order-1.0.4.tar.gz", hash = "sha256:6b2159342a4c8c10855bc4fc6d65ee890fc614cb2b4ff688979b008a82a0ff52"}, + {file = "pytest_random_order-1.0.4-py3-none-any.whl", hash = "sha256:72279a7f823969e18b10e438950f58330d17e0fcffb57cbd7929770cd687ecb2"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +pyupgrade = [ + {file = "pyupgrade-2.31.0-py2.py3-none-any.whl", hash = "sha256:0a62c5055f854d7f36e155b7ee8920561bf0399c53edd975cf02436eef8937fc"}, + {file = "pyupgrade-2.31.0.tar.gz", hash = "sha256:80e2308cae2b11c3fdd091137495d99abf7e0cd98b501aa5758974991497c24c"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, + {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-4.3.2-py3-none-any.whl", hash = "sha256:6a11ea5dd0bdb197f9c2abc2e0ce73e01340464feaece525e64036546d24c851"}, + {file = "Sphinx-4.3.2.tar.gz", hash = "sha256:0a8836751a68306b3fe97ecbe44db786f8479c3bf4b80e3a7f5c838657b4698c"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] tokenize-rt = [ {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, @@ -857,6 +1433,14 @@ typing-extensions = [ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ] +urllib3 = [ + {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, + {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, +] +virtualenv = [ + {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"}, + {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"}, +] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, diff --git a/pyproject.toml b/pyproject.toml index d546c628..744bc860 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,25 @@ exclude = ''' | \.mypy_cache | \.tox | \.venv + | __pycache__ + | _build + | buck-out + | build + | dist + | amber.* +)/ +''' + +[tool.flake8] # it does nothing here, still need tox.ini +max-line-length = 120 +extend-ignore = '''W503,E203,E501''' +exclude = ''' +/( + \.git + | \.mypy_cache + | \.tox + | \.venv + | __pycache__ | _build | buck-out | build @@ -19,7 +38,7 @@ exclude = ''' [tool.poetry] name = "acpype" -version = "2021.12.25" +version = "2022.1.3" description = "ACPYPE - AnteChamber PYthon Parser interfacE" authors = ["Alan Silva "] license = "GPL-3.0-or-later" @@ -37,6 +56,8 @@ classifiers = [ [tool.poetry.urls] "Bug Tracker" = "https://github.com/alanwilter/acpype/issues" "Wiki" = "https://github.com/alanwilter/acpype/wiki" +"Docs" = "https://acpype.readthedocs.io" +"DOI" = "https://doi.org/10.1186/1756-0500-5-367" [tool.poetry.scripts] acpype = "acpype.cli:init_main" @@ -50,9 +71,12 @@ black = { extras = ["jupyter"], version = "^21.12b0" } pytest-cov = "^3.0.0" mypy = "^0.920" pdbpp = "^0.10.3" -ipython = "7.10" ipdb = "0.13" isort = "^5.10.1" +pytest-random-order = "^1.0.4" +pyupgrade = "^2.31.0" +pre-commit = "^2.16.0" +Sphinx = "^4.3.2" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/release.sh b/release.sh index 86e1cd6f..c917b90c 100755 --- a/release.sh +++ b/release.sh @@ -18,7 +18,7 @@ function usage() { function run_pip() { echo ">>> Creating pip package" - python3 -m build + poetry build # python3 -m twine upload --repository testpypi dist/*"$version"* # TestPyPI python3 -m twine upload --repository pypi dist/*"$version"* # official release rm -vfr dist/*"$version"* diff --git a/run_acpype.py b/run_acpype.py index c39e1fa7..5ba58621 100755 --- a/run_acpype.py +++ b/run_acpype.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- import re import sys diff --git a/scripts/analyse_test_acpype_db_ligands.py b/scripts/analyse_test_acpype_db_ligands.py index 0a3e84bf..1d83b870 100755 --- a/scripts/analyse_test_acpype_db_ligands.py +++ b/scripts/analyse_test_acpype_db_ligands.py @@ -351,7 +351,7 @@ def analyseFile(mol, structure, file): guessChargeValue = None warnTypes = "" errorTypes = "" - tmpFile = open(file, "r") + tmpFile = open(file) content = tmpFile.readlines() for line in content: if "WARNING: " in line: @@ -366,17 +366,17 @@ def analyseFile(mol, structure, file): elif "The unperturbed charge of the" in line: warnTypes += "_3" charge = round(float(line[44:54])) - WT3.add("%s: %s" % (mol, charge)) + WT3.add(f"{mol}: {charge}") elif "Couldn't determine all parameters" in line: warnTypes += "_4" - WT4.append("%s_%s" % (mol, structure)) + WT4.append(f"{mol}_{structure}") elif "There is a bond of" in line: warnTypes += "_5" # _dist = round(float(line[27:37])) - WT5.add("%s_%s" % (mol, structure)) + WT5.add(f"{mol}_{structure}") elif " atom type of " in line: warnTypes += "_6" - WT6.add("%s_%s" % (mol, structure)) + WT6.add(f"{mol}_{structure}") # elif "no 'babel' executable, no PDB" in line: elif "residue name will be 'MOL' instead of" in line: warnTypes += "_8" @@ -385,33 +385,33 @@ def analyseFile(mol, structure, file): warnTypes += "_9" if "Warning: Close contact of " in line: warnTypes += "_7" - WT7.add("%s_%s" % (mol, structure)) + WT7.add(f"{mol}_{structure}") if "ERROR: " in line: if "guessCharge failed" in line: errorTypes += "_0" - ET0.append("%s_%s" % (mol, structure)) + ET0.append(f"{mol}_{structure}") elif "Atoms with same coordinates in" in line: errorTypes += "_1" - ET1.append("%s_%s" % (mol, structure)) + ET1.append(f"{mol}_{structure}") elif "Atoms TOO close" in line: errorTypes += "_2" - ET2.append("%s_%s" % (mol, structure)) + ET2.append(f"{mol}_{structure}") elif "Atoms TOO alone" in line: errorTypes += "_3" - ET3.append("%s_%s" % (mol, structure)) + ET3.append(f"{mol}_{structure}") elif "Antechamber failed" in line: errorTypes += "_4" - ET4.append("%s_%s" % (mol, structure)) + ET4.append(f"{mol}_{structure}") elif "Parmchk failed" in line: errorTypes += "_5" - ET5.append("%s_%s" % (mol, structure)) + ET5.append(f"{mol}_{structure}") elif "Tleap failed" in line: errorTypes += "_6" - ET6.append("%s_%s" % (mol, structure)) + ET6.append(f"{mol}_{structure}") elif "syntax error" in line: errorTypes += "_8" - ET8.add("%s_%s" % (mol, structure)) + ET8.add(f"{mol}_{structure}") elif "Use '-f' option if you want to proceed anyway. Aborting" in line: pass else: @@ -419,10 +419,10 @@ def analyseFile(mol, structure, file): errorTypes += "_10" if "No such file or directory: 'tmp'" in line: errorTypes += "_7" - ET7.add("%s_%s" % (mol, structure)) + ET7.add(f"{mol}_{structure}") if "Semi-QM taking too long to finish" in line: errorTypes += "_9" - ET9.append("%s_%s" % (mol, structure)) + ET9.append(f"{mol}_{structure}") if "Total time of execution:" in line: if mol in execTime: # execTime[mol].append({structure:line[:-1].split(':')[1]}) @@ -441,7 +441,7 @@ def analyseFile(mol, structure, file): if checkChargeComparison: mol2FileName = file.replace(".out", ".mol2") - mol2File = open(mol2FileName, "r").readlines() + mol2File = open(mol2FileName).readlines() for line in mol2File: if "# Overall charge:" in line: mol2Charge = int(line.split(":")[1]) @@ -617,7 +617,7 @@ def elapsedTime(seconds, suffixes=["y", "w", "d", "h", "m", "s"], add_s=False, s value = seconds / length if value > 0: seconds = seconds % length - time.append("%s%s" % (str(value), (suffix, (suffix, suffix + "s")[value > 1])[add_s])) + time.append("{}{}".format(str(value), (suffix, (suffix, suffix + "s")[value > 1])[add_s])) if seconds < 1: break @@ -707,13 +707,13 @@ def locate(pattern, root=os.curdir): pdbMol2 = True totalPdbMol2Count += 1 elif ".ideal.acpype/sqm.out" in file: - content = open(file, "r").read() + content = open(file).read() if "No convergence in SCF after" in content: - SCFfailedList.append("%s_%s" % (molDir, "ideal")) + SCFfailedList.append("{}_{}".format(molDir, "ideal")) elif ".pdb.acpype/sqm.out" in file: - content = open(file, "r").read() + content = open(file).read() if "No convergence in SCF after" in content: - SCFfailedList.append("%s_%s" % (molDir, "pdb")) + SCFfailedList.append("{}_{}".format(molDir, "pdb")) if countIdealMol2 > 2: multIdealMol2.append(molDir) if countPdbMol2 > 2: @@ -778,7 +778,7 @@ def locate(pattern, root=os.curdir): totalTxt += "+ %i " % subTot totalTxt = totalTxt[2:] sumVal = eval(totalTxt) -print("%s= %s" % (totalTxt, sumVal)) +print(f"{totalTxt}= {sumVal}") # print results @@ -793,7 +793,7 @@ def locate(pattern, root=os.curdir): print("=>Mols have duplicated coordinates") for molLabel in ET1: mol, structure = molLabel.split("_") - cmd = "grep -e '^ATOM' %s/*%s.out" % (mol, structure) + cmd = f"grep -e '^ATOM' {mol}/*{structure}.out" out = _getoutput(cmd) print("# %s #" % molLabel) print(out, "\n") @@ -802,7 +802,7 @@ def locate(pattern, root=os.curdir): print("=>Mols have atoms in close contact") for molLabel in WT7: mol, structure = molLabel.split("_") - cmd = "grep -e '^Warning: Close contact of' %s/*%s.out" % (mol, structure) + cmd = f"grep -e '^Warning: Close contact of' {mol}/*{structure}.out" out = _getoutput(cmd) print("# %s #" % molLabel) print(out, "\n") @@ -811,7 +811,7 @@ def locate(pattern, root=os.curdir): print("=>Mols have irregular bonds") for molLabel in WT5: mol, structure = molLabel.split("_") - cmd = "grep -A 1 -e '^WARNING: There is a bond of' %s/*%s.out" % (mol, structure) + cmd = f"grep -A 1 -e '^WARNING: There is a bond of' {mol}/*{structure}.out" out = _getoutput(cmd) print("# %s #" % molLabel) print(out, "\n") @@ -820,7 +820,7 @@ def locate(pattern, root=os.curdir): print("=>Mols have atoms too close") for molLabel in ET2: mol, structure = molLabel.split("_") - cmd = "grep -e '^ .*ATOM' %s/*%s.out" % (mol, structure) + cmd = f"grep -e '^ .*ATOM' {mol}/*{structure}.out" out = _getoutput(cmd) print("# %s #" % molLabel) print(out, "\n") @@ -829,7 +829,7 @@ def locate(pattern, root=os.curdir): print("=>Mols have atoms too alone") for molLabel in ET3: mol, structure = molLabel.split("_") - cmd = r"""grep -e "^\['ATOM" %s/*%s.out""" % (mol, structure) + cmd = fr"""grep -e "^\['ATOM" {mol}/*{structure}.out""" out = _getoutput(cmd) print("# %s #" % molLabel) print(out, "\n") @@ -893,8 +893,8 @@ def locate(pattern, root=os.curdir): if listMolTime: # print maxExecTime, minExecTime print("Number of clean jobs:", nJobs) - print("Longest job: Mol='%s', time= %s" % (maxMolTime, elapsedTime(maxExecTime))) - print("Fatest job: Mol='%s', time= %s" % (minMolTime, elapsedTime(minExecTime))) + print(f"Longest job: Mol='{maxMolTime}', time= {elapsedTime(maxExecTime)}") + print(f"Fatest job: Mol='{minMolTime}', time= {elapsedTime(minExecTime)}") print("Average time of execution per clean job: %s" % elapsedTime(totalCleanExecTime / nJobs)) else: print("NO time stats available for clean jobs") diff --git a/scripts/check_acpype.py b/scripts/check_acpype.py index 8ba5eac0..89374195 100755 --- a/scripts/check_acpype.py +++ b/scripts/check_acpype.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import shutil from glob import glob @@ -6,14 +6,14 @@ from acpype.topol import ACTopol from acpype.utils import _getoutput -usePymol = True +usePymol = False ffType = "amber" # gaff cType = "gas" -debug = False +debug = True water = " -water none" -print("usePymol: %s, ffType: %s, cType: %s" % (usePymol, ffType, cType)) +print(f"usePymol: {usePymol}, ffType: {ffType}, cType: {cType}") tmpDir = "/tmp/testAcpype" @@ -34,15 +34,15 @@ exePymol = "/sw/bin/pymol" # Binaries for gromacs -gpath = "/sw/" +gpath = "/home/awilter/miniconda3/envs/acpype/" gmxTopDir = gpath + "share" -pdb2gmx = gpath + "bin/pdb2gmx" -grompp = gpath + "bin/grompp" -mdrun = gpath + "bin/mdrun" -g_energy = gpath + "bin/g_energy" -gmxdump = gpath + "bin/gmxdump" +pdb2gmx = gpath + "bin/gmx pdb2gmx" +grompp = gpath + "bin/gmx grompp" +mdrun = gpath + "bin/gmx mdrun" +g_energy = gpath + "bin/gmx energy" +gmxdump = gpath + "bin/gmx dump" -amberff = "leaprc.ff99SB" +amberff = "oldff/leaprc.ff99SB" genPdbTemplate = """ source %(amberff)s @@ -56,6 +56,7 @@ # Create SPE.mdp file #single point energy cat << EOF >| SPE.mdp define = -DFLEXIBLE +cutoff-scheme = group integrator = md nsteps = 0 dt = 0.001 @@ -426,14 +427,14 @@ def addParam(ll, item): except Exception: pass if not found: - print("%s %s %s not found in %s Bon" % (dict_[ll], ent, item, ffType)) + print(f"{dict_[ll]} {ent} {item} not found in {ffType} Bon") # print(item, e, par) return par compareParameters = True agRes = parseTopFile(open("ag%s.top" % (res)).readlines()) - acRes = parseTopFile(open("ag%s.acpype/ag%s_GMX.itp" % (res, res)).readlines()) + acRes = parseTopFile(open(f"ag{res}.acpype/ag{res}_GMX.itp").readlines()) ffBon = aBon ffgRes = agRes @@ -637,13 +638,15 @@ def build_residues_tleap(): _getoutput(cmd) # cmd = "%s -O; %s < restrt > %s.pdb; mv mdinfo %s.mdinfo" % (sanderExe, ambpdbExe, aai3, aai3) # -i mdin -o mdout -p prmtop -c inpcrd" % (sanderExe) - cmd = "%s -O; %s < restrt > %s.pdb" % (sanderExe, ambpdbExe, aai3) + cmd = f"{sanderExe} -O; {ambpdbExe} -c restrt > {aai3}.pdb" _getoutput(cmd) _getoutput("rm -f mdout mdinfo mdin restrt tleap.in prmtop inpcrd leap.log") def error(v1, v2): """percentage relative error""" + if v1 == v2: + return 0 return abs(v1 - v2) / max(abs(v1), abs(v2)) * 100 @@ -703,8 +706,9 @@ def getEnergies(template): # print(dictEnerAMB) # calc Pot Ener for agXXX.acpype/agXXX.pdb (ACPYPE_GMX) - template = """%(grompp)s -c ag%(res)s.acpype/ag%(res)s_NEW.pdb -p ag%(res)s.acpype/ag%(res)s_GMX.top -f SPE.mdp --o ag%(res)s.tpr -pp ag%(res)sp.top + template = """ + %(grompp)s -c ag%(res)s.acpype/ag%(res)s_NEW.pdb -p ag%(res)s.acpype/ag%(res)s_GMX.top -f SPE.mdp \ + -o ag%(res)s.tpr -pp ag%(res)sp.top %(mdrun)s -v -deffnm ag%(res)s echo %(tEner)s | %(g_energy)s -f ag%(res)s.edr """ @@ -776,7 +780,7 @@ def getEnergies(template): ff = open(tmpFile, "w") ff.writelines(pymolScript) ff.close() - cmd = "%s -qc %s" % (exePymol, tmpFile) + cmd = f"{exePymol} -qc {tmpFile}" os.system(cmd) else: build_residues_tleap() @@ -787,7 +791,7 @@ def getEnergies(template): res, ext = os.path.splitext(resFile) # eg. res = 'AAA' # if res != 'RRR': continue if len(resFile) == 7 and ext == ".pdb" and resFile[:3].isupper(): - print("\nFile %s : residue %s" % (resFile, aa_dict[res[0]].upper())) + print(f"\nFile {resFile} : residue {aa_dict[res[0]].upper()}") _pdb = createOldPdb2(resFile) # using my own dict apdb = createAmberPdb3(_pdb) # create file aAAA.pdb with NXXX, CXXX @@ -795,7 +799,7 @@ def getEnergies(template): # from ogpdb to amber pdb and top agpdb = "ag%s.pdb" % res # output name agtop = "ag%s.top" % res - cmd = " %s -f %s -o %s -p %s -ff amber99sb %s" % (pdb2gmx, apdb, agpdb, agtop, water) + cmd = f" {pdb2gmx} -f {apdb} -o {agpdb} -p {agtop} -ff amber99sb {water}" pdebug(cmd) out = _getoutput(cmd) # print(out) diff --git a/scripts/compare_itps.py b/scripts/compare_itps.py index 23a1a080..7aee15af 100755 --- a/scripts/compare_itps.py +++ b/scripts/compare_itps.py @@ -44,11 +44,11 @@ def compareDicts(d1, d2): try: _tempD1.remove(item) except Exception: - print("\tDuplicate item %s in %s itp2" % (repr(item), flag)) + print(f"\tDuplicate item {repr(item)} in {flag} itp2") try: _tempD2.remove(item) except Exception: - print("\tDuplicate item %s in %s itp1" % (repr(item), flag)) + print(f"\tDuplicate item {repr(item)} in {flag} itp1") else: t = item[:-1] t.reverse() @@ -57,11 +57,11 @@ def compareDicts(d1, d2): try: _tempD1.remove(item) except Exception: - print("\tDuplicate item %s in %s itp2" % (repr(item), flag)) + print(f"\tDuplicate item {repr(item)} in {flag} itp2") try: _tempD2.remove(itemRev) except Exception: - print("\tDuplicate item %s in %s itp1" % (repr(item), flag)) + print(f"\tDuplicate item {repr(item)} in {flag} itp1") tD1 = _tempD1[:] tD2 = _tempD2[:] diff --git a/scripts/run_test_acpype_db_ligands.py b/scripts/run_test_acpype_db_ligands.py index 08403197..82dbbc5b 100644 --- a/scripts/run_test_acpype_db_ligands.py +++ b/scripts/run_test_acpype_db_ligands.py @@ -37,7 +37,7 @@ def elapsedTime(seconds, suffixes=["y", "w", "d", "h", "m", "s"], add_s=False, s value = seconds / length if value > 0: seconds = seconds % length - time.append("%s%s" % (str(value), (suffix, (suffix, suffix + "s")[value > 1])[add_s])) + time.append("{}{}".format(str(value), (suffix, (suffix, suffix + "s")[value > 1])[add_s])) if seconds < 1: break diff --git a/scripts/ver_today.sh b/scripts/ver_today.sh index 5f3c47c2..81220f6f 100755 --- a/scripts/ver_today.sh +++ b/scripts/ver_today.sh @@ -5,14 +5,14 @@ last_tag=$(git describe --abbrev=0 --tags) while IFS= read -r afile; do echo "Updated version to $today in file $afile" - perl -pi -e "s/\b[0-9]{4}\.[12]?[0-9]\.[12]?[0-9]\b/$today/g" "$afile" + perl -pi -e "s/\b[0-9]{4}\.[12]?[0-9]\.[123]?[0-9]\b/$today/g" "$afile" git add "$afile" -done < <(grep -lEr "\b\d{4}\.[12]?[0-9]\.[12]?[0-9]\b" -- **/*.py pyproject.toml) +done < <(pcregrep -lwr "\d{4}\.[12]?[0-9]\.[123]?[0-9]" ./*/*.py pyproject.toml) while IFS= read -r afile; do echo "Updated last_tag to $last_tag in file $afile" - perl -pi -e "s/\b[0-9]{4}\.[12]?[0-9]\.[12]?[0-9]\b/$last_tag/g" "$afile" + perl -pi -e "s/\b[0-9]{4}\.[12]?[0-9]\.[123]?[0-9]\b/$last_tag/g" "$afile" git add "$afile" -done < <(grep -lEr "\b\d{4}\.[12]?[0-9]\.[12]?[0-9]\b" -- README.md) +done < <(pcregrep -lwr "\d{4}\.[12]?[0-9]\.[123]?[0-9]" README.md) exit 0 diff --git a/tests/AAA.mol2 b/tests/AAA.mol2 index b1d4e20e..a5fa6150 100644 --- a/tests/AAA.mol2 +++ b/tests/AAA.mol2 @@ -72,4 +72,3 @@ Energy = 0 30 27 31 1 31 27 32 1 32 27 33 1 - diff --git a/tests/Base.prmtop b/tests/Base.prmtop index 2fedab1a..0f12b0b8 100644 --- a/tests/Base.prmtop +++ b/tests/Base.prmtop @@ -2,6 +2,7 @@ %FLAG TITLE %FORMAT(20a4) default_name +%COMMENT Base test %FLAG POINTERS %FORMAT(10I8) 24931 17 23327 1584 3754 2149 7229 5392 0 0 diff --git a/tests/HEM.pdb b/tests/HEM.pdb new file mode 100644 index 00000000..768383d3 --- /dev/null +++ b/tests/HEM.pdb @@ -0,0 +1,121 @@ +HEADER Ideal coordinates + for PDB-CCD HEM +COMPND HEM +AUTHOR pdbccdutils 0.6 +AUTHOR RDKit 2021.03.1 +HETATM 1 CHA HEM A 1 -2.188 -0.470 0.697 1.00 20.00 C +HETATM 2 CHB HEM A 1 1.980 -3.261 0.092 1.00 20.00 C +HETATM 3 CHC HEM A 1 4.525 0.841 -0.194 1.00 20.00 C +HETATM 4 CHD HEM A 1 0.557 3.487 0.231 1.00 20.00 C +HETATM 5 C1A HEM A 1 -1.271 -1.607 0.502 1.00 20.00 C +HETATM 6 C2A HEM A 1 -1.663 -2.879 0.397 1.00 20.00 C +HETATM 7 C3A HEM A 1 -0.466 -3.672 0.147 1.00 20.00 C +HETATM 8 C4A HEM A 1 0.571 -2.836 0.180 1.00 20.00 C +HETATM 9 CMA HEM A 1 -0.408 -5.164 -0.023 1.00 20.00 C +HETATM 10 CAA HEM A 1 -3.078 -3.398 0.441 1.00 20.00 C +HETATM 11 CBA HEM A 1 -3.748 -3.253 -0.927 1.00 20.00 C +HETATM 12 CGA HEM A 1 -5.161 -3.740 -0.871 1.00 20.00 C +HETATM 13 O1A HEM A 1 -6.093 -2.942 -0.582 1.00 20.00 O +HETATM 14 O2A HEM A 1 -5.440 -5.084 -1.097 1.00 20.00 O +HETATM 15 C1B HEM A 1 3.015 -2.418 0.051 1.00 20.00 C +HETATM 16 C2B HEM A 1 4.419 -2.815 -0.031 1.00 20.00 C +HETATM 17 C3B HEM A 1 5.107 -1.684 -0.153 1.00 20.00 C +HETATM 18 C4B HEM A 1 4.141 -0.577 -0.093 1.00 20.00 C +HETATM 19 CMB HEM A 1 4.966 -4.214 0.048 1.00 20.00 C +HETATM 20 CAB HEM A 1 6.575 -1.530 -0.261 1.00 20.00 C +HETATM 21 CBB HEM A 1 7.328 -2.316 -1.027 1.00 20.00 C +HETATM 22 C1C HEM A 1 3.676 1.869 -0.094 1.00 20.00 C +HETATM 23 C2C HEM A 1 4.069 3.283 -0.170 1.00 20.00 C +HETATM 24 C3C HEM A 1 2.960 4.018 -0.092 1.00 20.00 C +HETATM 25 C4C HEM A 1 1.829 3.099 0.095 1.00 20.00 C +HETATM 26 CMC HEM A 1 5.479 3.801 -0.274 1.00 20.00 C +HETATM 27 CAC HEM A 1 2.864 5.495 -0.126 1.00 20.00 C +HETATM 28 CBC HEM A 1 3.524 6.236 -1.012 1.00 20.00 C +HETATM 29 C1D HEM A 1 -0.584 2.572 0.410 1.00 20.00 C +HETATM 30 C2D HEM A 1 -1.973 3.028 0.580 1.00 20.00 C +HETATM 31 C3D HEM A 1 -2.719 1.951 0.791 1.00 20.00 C +HETATM 32 C4D HEM A 1 -1.812 0.811 0.674 1.00 20.00 C +HETATM 33 CMD HEM A 1 -2.446 4.454 0.585 1.00 20.00 C +HETATM 34 CAD HEM A 1 -4.211 1.907 1.008 1.00 20.00 C +HETATM 35 CBD HEM A 1 -4.941 1.718 -0.324 1.00 20.00 C +HETATM 36 CGD HEM A 1 -6.418 1.638 -0.103 1.00 20.00 C +HETATM 37 O1D HEM A 1 -6.967 0.520 0.092 1.00 20.00 O +HETATM 38 O2D HEM A 1 -7.178 2.803 -0.070 1.00 20.00 O +HETATM 39 NA HEM A 1 0.148 -1.487 0.385 1.00 20.00 N +HETATM 40 NB HEM A 1 2.917 -0.995 0.023 1.00 20.00 N1+ +HETATM 41 NC HEM A 1 2.265 1.739 0.085 1.00 20.00 N +HETATM 42 ND HEM A 1 -0.482 1.278 0.454 1.00 20.00 N1+ +HETATM 43 FE HEM A 1 4.176 -2.073 -0.035 1.00 20.00 FE2- +HETATM 44 HHB HEM A 1 2.185 -4.322 0.065 1.00 20.00 H +HETATM 45 HHC HEM A 1 5.571 1.053 -0.361 1.00 20.00 H +HETATM 46 HHD HEM A 1 0.340 4.545 0.217 1.00 20.00 H +HETATM 47 HMA HEM A 1 0.329 -5.436 -0.808 1.00 20.00 H +HETATM 48 HMAA HEM A 1 -0.120 -5.637 0.938 1.00 20.00 H +HETATM 49 HMAB HEM A 1 -1.390 -5.563 -0.348 1.00 20.00 H +HETATM 50 HAA HEM A 1 -3.077 -4.466 0.746 1.00 20.00 H +HETATM 51 HAAA HEM A 1 -3.660 -2.857 1.216 1.00 20.00 H +HETATM 52 HBA HEM A 1 -3.739 -2.187 -1.245 1.00 20.00 H +HETATM 53 HBAA HEM A 1 -3.189 -3.844 -1.683 1.00 20.00 H +HETATM 54 HMB HEM A 1 4.342 -4.833 0.724 1.00 20.00 H +HETATM 55 HMBA HEM A 1 4.971 -4.669 -0.964 1.00 20.00 H +HETATM 56 HMBB HEM A 1 5.994 -4.215 0.464 1.00 20.00 H +HETATM 57 HAB HEM A 1 7.047 -0.697 0.243 1.00 20.00 H +HETATM 58 HBB HEM A 1 8.393 -2.140 -1.097 1.00 20.00 H +HETATM 59 HBBA HEM A 1 6.896 -3.115 -1.615 1.00 20.00 H +HETATM 60 HMC HEM A 1 6.168 3.162 0.316 1.00 20.00 H +HETATM 61 HMCA HEM A 1 5.798 3.800 -1.337 1.00 20.00 H +HETATM 62 HMCB HEM A 1 5.562 4.826 0.140 1.00 20.00 H +HETATM 63 HAC HEM A 1 2.168 5.987 0.541 1.00 20.00 H +HETATM 64 HBC HEM A 1 4.174 5.787 -1.752 1.00 20.00 H +HETATM 65 HBCA HEM A 1 3.394 7.311 -1.021 1.00 20.00 H +HETATM 66 HMD HEM A 1 -1.874 5.051 -0.153 1.00 20.00 H +HETATM 67 HMDA HEM A 1 -3.515 4.525 0.299 1.00 20.00 H +HETATM 68 HMDB HEM A 1 -2.306 4.887 1.598 1.00 20.00 H +HETATM 69 HAD HEM A 1 -4.458 1.072 1.697 1.00 20.00 H +HETATM 70 HADA HEM A 1 -4.556 2.839 1.504 1.00 20.00 H +HETATM 71 HBD HEM A 1 -4.721 2.573 -0.999 1.00 20.00 H +HETATM 72 HBDA HEM A 1 -4.592 0.787 -0.821 1.00 20.00 H +HETATM 73 H2A HEM A 1 -6.390 -5.433 -1.046 1.00 20.00 H +HETATM 74 H2D HEM A 1 -8.177 2.766 0.095 1.00 20.00 H +HETATM 75 HHA HEM A 1 -3.238 -0.684 0.827 1.00 20.00 H +CONECT 1 5 32 32 75 +CONECT 2 8 15 15 44 +CONECT 3 18 22 22 45 +CONECT 4 25 25 29 46 +CONECT 5 6 6 39 +CONECT 6 7 10 +CONECT 7 8 8 9 +CONECT 8 39 +CONECT 9 47 48 49 +CONECT 10 11 50 51 +CONECT 11 12 52 53 +CONECT 12 13 13 14 +CONECT 14 73 +CONECT 15 16 40 +CONECT 16 17 17 19 +CONECT 17 18 20 +CONECT 18 40 40 +CONECT 19 54 55 56 +CONECT 20 21 21 57 +CONECT 21 58 59 +CONECT 22 23 41 +CONECT 23 24 24 26 +CONECT 24 25 27 +CONECT 25 41 +CONECT 26 60 61 62 +CONECT 27 28 28 63 +CONECT 28 64 65 +CONECT 29 30 42 42 +CONECT 30 31 31 33 +CONECT 31 32 34 +CONECT 32 42 +CONECT 33 66 67 68 +CONECT 34 35 69 70 +CONECT 35 36 71 72 +CONECT 36 37 37 38 +CONECT 38 74 +CONECT 39 43 +CONECT 40 43 +CONECT 41 43 +CONECT 42 43 +END diff --git a/tests/KKK.mol2 b/tests/KKK.mol2 index 9cda9362..8bc7f72a 100644 --- a/tests/KKK.mol2 +++ b/tests/KKK.mol2 @@ -144,4 +144,3 @@ Energy = 0 66 55 67 1 67 55 68 1 68 55 69 1 - diff --git a/tests/README.txt b/tests/README.txt index 7e8ff7a6..0bc37f1d 100644 --- a/tests/README.txt +++ b/tests/README.txt @@ -8,4 +8,4 @@ DDD.mol2: in mol2 format KKK.pdb: a tri lysine peptide with N- and C- termini, charge +3 KKK.mol2: in mol2 format FFF.pdb: a tri phenylalanine peptide with N- and C- termini, aromatic -FFF.mol2: in mol2 format \ No newline at end of file +FFF.mol2: in mol2 format diff --git a/tests/benzene.mdl b/tests/benzene.mdl new file mode 100644 index 00000000..ded3975a --- /dev/null +++ b/tests/benzene.mdl @@ -0,0 +1,29 @@ +tests/benzene.pdb + OpenBabel12312108183D + + 12 12 0 0 0 0 0 0 0 0999 V2000 + 5.2740 1.9990 -8.5680 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.6270 2.0180 -8.2090 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3660 0.8290 -8.2020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.7520 -0.3790 -8.5540 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.3990 -0.3980 -8.9120 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.6600 0.7910 -8.9190 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7040 2.9160 -8.5730 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.1010 2.9500 -7.9380 H 0 0 0 0 0 0 0 0 0 0 0 0 + 8.4100 0.8440 -7.9260 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3220 -1.2960 -8.5480 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9250 -1.3300 -9.1830 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6160 0.7760 -9.1960 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 6 2 0 0 0 0 + 1 7 1 0 0 0 0 + 1 2 1 0 0 0 0 + 2 3 2 0 0 0 0 + 2 8 1 0 0 0 0 + 3 4 1 0 0 0 0 + 3 9 1 0 0 0 0 + 4 5 2 0 0 0 0 + 4 10 1 0 0 0 0 + 5 11 1 0 0 0 0 + 5 6 1 0 0 0 0 + 6 12 1 0 0 0 0 +M END diff --git a/tests/benzene.mol b/tests/benzene.mol new file mode 100644 index 00000000..92a67758 --- /dev/null +++ b/tests/benzene.mol @@ -0,0 +1,29 @@ +tests/benzene.pdb + OpenBabel12312108093D + + 12 12 0 0 0 0 0 0 0 0999 V2000 + 5.2740 1.9990 -8.5680 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.6270 2.0180 -8.2090 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3660 0.8290 -8.2020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.7520 -0.3790 -8.5540 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.3990 -0.3980 -8.9120 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.6600 0.7910 -8.9190 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7040 2.9160 -8.5730 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.1010 2.9500 -7.9380 H 0 0 0 0 0 0 0 0 0 0 0 0 + 8.4100 0.8440 -7.9260 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3220 -1.2960 -8.5480 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9250 -1.3300 -9.1830 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6160 0.7760 -9.1960 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 6 2 0 0 0 0 + 1 7 1 0 0 0 0 + 1 2 1 0 0 0 0 + 2 3 2 0 0 0 0 + 2 8 1 0 0 0 0 + 3 4 1 0 0 0 0 + 3 9 1 0 0 0 0 + 4 5 2 0 0 0 0 + 4 10 1 0 0 0 0 + 5 11 1 0 0 0 0 + 5 6 1 0 0 0 0 + 6 12 1 0 0 0 0 +M END diff --git a/tests/conftest.py b/tests/conftest.py index 808e56f5..116a81ff 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,8 +8,23 @@ pytest --cov=acpype --cov-report=term-missing:skip-covered """ +import os +from shutil import rmtree + +import pytest + from acpype import __version__ as version def pytest_report_header(config): return f">>>\tVersion: {version}\n" + + +@pytest.fixture +def janitor(): + os.chdir(os.path.dirname(os.path.abspath(__file__))) + to_delete = [] + yield to_delete + for item in to_delete: + if os.path.exists(item): + rmtree(item) diff --git a/tests/dmp.mol2 b/tests/dmp.mol2 index 1f2678a3..b652ed28 100644 --- a/tests/dmp.mol2 +++ b/tests/dmp.mol2 @@ -171,4 +171,3 @@ Energy = 0 82 35 69 1 83 35 80 1 84 80 73 1 - diff --git a/tests/double_res.pdb b/tests/double_res.pdb new file mode 100644 index 00000000..4498910b --- /dev/null +++ b/tests/double_res.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 NEB 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 NEB 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 NEB 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 NEB 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 NEB 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 NEB 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 BEN 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 BEN 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 BEN 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 BEN 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 BEN 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 BEN 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/drift.mol2 b/tests/drift.mol2 new file mode 100644 index 00000000..f924842e --- /dev/null +++ b/tests/drift.mol2 @@ -0,0 +1,88 @@ +@MOLECULE +ADPMg.pdb + 39 41 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C1' 118.4900 96.5010 146.3800 C.3 1 ADP1 0.1667 + 2 C2 116.9020 92.2900 146.4240 C.ar 1 ADP1 0.1205 + 3 C2' 119.9080 96.0790 146.0350 C.3 1 ADP1 0.1285 + 4 C3' 120.7000 97.3640 145.9120 C.3 1 ADP1 0.1135 + 5 C4 117.1480 94.5000 145.6730 C.ar 1 ADP1 0.1674 + 6 C4' 119.7060 98.4940 146.1230 C.3 1 ADP1 0.1133 + 7 C5 116.1780 94.2230 144.6030 C.ar 1 ADP1 0.1473 + 8 C5' 119.8170 99.5430 145.0210 C.3 1 ADP1 0.0836 + 9 C6 115.6020 92.8590 144.5430 C.ar 1 ADP1 0.1472 + 10 C8 116.8640 96.2860 144.4660 C.ar 1 ADP1 0.1004 + 11 N1 116.0070 91.9650 145.4730 N.ar 1 ADP1 -0.2188 + 12 N3 117.4640 93.5060 146.5380 N.ar 1 ADP1 -0.2159 + 13 N6 114.7020 92.5170 143.5900 N.pl3 1 ADP1 -0.3413 + 14 N7 116.0490 95.3610 143.8990 N.ar 1 ADP1 -0.2306 + 15 N9 117.5220 95.7730 145.5230 N.ar 1 ADP1 -0.2855 + 16 O1A 123.1970 100.7910 143.6770 O.2 1 ADP1 -0.5170 + 17 O1B 119.1040 102.6780 143.4590 O.2 1 ADP1 -0.2221 + 18 O2' 120.4500 95.2610 147.0740 O.3 1 ADP1 -0.3847 + 19 O2A 120.8840 100.7360 142.5030 O.3 1 ADP1 -0.4370 + 20 O2B 121.1050 103.6910 142.2760 O.3 1 ADP1 -0.1143 + 21 O3' 121.7130 97.4110 146.9190 O.3 1 ADP1 -0.3864 + 22 O3A 121.3880 102.4050 144.3470 O.3 1 ADP1 -0.2261 + 23 O3B 120.3410 104.6280 144.4990 O.3 1 ADP1 -0.1143 + 24 O4' 118.4030 97.9070 146.1380 O.3 1 ADP1 -0.3456 + 25 O5' 121.1850 99.9230 144.8970 O.3 1 ADP1 -0.3245 + 26 PA 121.6970 100.9390 143.7570 P.3 1 ADP1 0.2224 + 27 PB 120.4050 103.4280 143.5860 P.3 1 ADP1 0.5373 + 28 H1' 118.2860 96.2920 147.4300 H 1 ADP1 0.0866 + 29 H2 117.1850 91.5300 147.1370 H 1 ADP1 0.1048 + 30 H2' 119.9190 95.5390 145.0880 H 1 ADP1 0.0665 + 31 H3' 121.1490 97.4370 144.9220 H 1 ADP1 0.0647 + 32 H4' 119.8980 98.9650 147.0870 H 1 ADP1 0.0647 + 33 H5' 119.4640 99.1250 144.0780 H 1 ADP1 0.0591 + 34 H5'' 119.2170 100.4140 145.2830 H 1 ADP1 0.0591 + 35 H8 116.9710 97.3020 144.1150 H 1 ADP1 0.1030 + 36 HN61 114.3220 91.5820 143.5670 H 1 ADP1 0.1438 + 37 HN62 114.4110 93.1980 142.9030 H 1 ADP1 0.1438 + 38 HO2' 119.9570 94.4390 147.1240 H 1 ADP1 0.2101 + 39 HO3' 122.1930 98.2400 146.8520 H 1 ADP1 0.2300 +@BOND + 1 1 3 1 + 2 1 15 1 + 3 1 24 1 + 4 1 28 1 + 5 2 11 ar + 6 2 12 ar + 7 2 29 1 + 8 3 4 1 + 9 3 18 1 + 10 3 30 1 + 11 4 6 1 + 12 4 21 1 + 13 4 31 1 + 14 5 7 ar + 15 5 12 ar + 16 5 15 ar + 17 6 8 1 + 18 6 24 1 + 19 6 32 1 + 20 7 9 ar + 21 7 14 ar + 22 8 25 1 + 23 8 33 1 + 24 8 34 1 + 25 9 11 ar + 26 9 13 1 + 27 10 14 ar + 28 10 15 ar + 29 10 35 1 + 30 13 36 1 + 31 13 37 1 + 32 16 26 2 + 33 17 27 2 + 34 18 38 1 + 35 19 26 1 + 36 20 27 1 + 37 21 39 1 + 38 22 26 1 + 39 22 27 1 + 40 23 27 1 + 41 25 26 1 diff --git a/tests/glycam_corrupt.prmtop b/tests/glycam_corrupt.prmtop new file mode 100644 index 00000000..45358a27 --- /dev/null +++ b/tests/glycam_corrupt.prmtop @@ -0,0 +1,320 @@ +%VERSION VERSION_STAMP = V0001.000 DATE = 06/27/16 09:20:58 +%FLAG TITLE +%FORMAT(20a4) +default_name +%FLAG POINTERS +%FORMAT(10I8) + 30 11 15 15 32 21 56 33 0 0 + 161 2 15 21 33 12 23 31 11 0 + 0 0 0 0 0 0 0 0 28 0 + 0 +%FLAG ATOM_NAME +%FORMAT(20a4) +HO1 O1 C1 H1 O5 C5 H5 C6 H62 H61 O6 H6O C4 H4 O4 H4O C3 H3 O3 H3O +C2 H2 N2 H2N C2N O2N CME H3M H2M H1M +%FLAG CHARGE +%FORMAT(5E16.8) + 8.10892350E+00 -1.16440497E+01 5.22980010E+00 0.00000000E+00 -7.89025590E+00 + 3.79023840E+00 0.00000000E+00 5.26624470E+00 0.00000000E+00 0.00000000E+00 + -1.25551647E+01 7.72625520E+00 5.50313460E+00 0.00000000E+00 -1.30471668E+01 + 7.94492280E+00 3.28001400E+00 0.00000000E+00 -1.24093863E+01 7.70803290E+00 + 8.74670400E+00 0.00000000E+00 -1.31565006E+01 5.46669000E+00 1.18080504E+01 + -1.04960448E+01 6.19558200E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +%FLAG ATOMIC_NUMBER +%FORMAT(10I8) + 1 8 6 1 8 6 1 6 1 1 + 8 1 6 1 8 1 6 1 8 1 + 6 1 7 1 6 8 6 1 1 1 +%FLAG MASS +%FORMAT(5E16.8) + 1.00800000E+00 1.60000000E+01 1.20100000E+01 1.00800000E+00 1.60000000E+01 + 1.20100000E+01 1.00800000E+00 1.20100000E+01 1.00800000E+00 1.00800000E+00 + 1.60000000E+01 1.00800000E+00 1.20100000E+01 1.00800000E+00 1.60000000E+01 + 1.00800000E+00 1.20100000E+01 1.00800000E+00 1.60000000E+01 1.00800000E+00 + 1.20100000E+01 1.00800000E+00 1.40100000E+01 1.00800000E+00 1.20100000E+01 + 1.60000000E+01 1.20100000E+01 1.00800000E+00 1.00800000E+00 1.00800000E+00 +%FLAG ATOM_TYPE_INDEX +%FORMAT(10I8) + 1 2 3 4 5 3 6 3 6 6 + 2 1 3 6 2 1 3 6 2 1 + 3 6 7 8 9 10 3 11 11 11 +%FLAG NUMBER_EXCLUDED_ATOMS +%FORMAT(10I8) + 5 8 14 6 13 14 8 8 4 3 + 2 1 10 6 5 1 8 5 4 1 + 6 3 7 3 5 4 3 2 1 1 +%FLAG NONBONDED_PARM_INDEX +%FORMAT(10I8) + 1 2 4 7 11 16 22 29 37 46 + 56 2 3 5 8 12 17 23 30 38 + 47 57 4 5 6 9 13 18 24 31 + 39 48 58 7 8 9 10 14 19 25 + 32 40 49 59 11 12 13 14 15 20 + 26 33 41 50 60 16 17 18 19 20 + 21 27 34 42 51 61 22 23 24 25 + 26 27 28 35 43 52 62 29 30 31 + 32 33 34 35 36 44 53 63 37 38 + 39 40 41 42 43 44 45 54 64 46 + 47 48 49 50 51 52 53 54 55 65 + 56 57 58 59 60 61 62 63 64 65 + 66 +%FLAG RESIDUE_LABEL +%FORMAT(20a4) +ROH 0YB +%FLAG RESIDUE_POINTER +%FORMAT(10I8) + 1 3 +%FLAG BOND_FORCE_CONSTANT +%FORMAT(5E16.8) + 3.20000000E+02 5.53000000E+02 3.40000000E+02 5.70000000E+02 2.20000000E+02 + 4.34000000E+02 4.90000000E+02 3.40000000E+02 3.37000000E+02 3.10000000E+02 + 2.85000000E+02 3.40000000E+02 +%FLAG BOND_EQUIL_VALUE +%FORMAT(5E16.8) + 1.43000000E+00 9.60000000E-01 1.09000000E+00 1.22900000E+00 1.53000000E+00 + 1.01000000E+00 1.33500000E+00 1.09000000E+00 1.45000000E+00 1.52000000E+00 + 1.46000000E+00 1.09000000E+00 +%FLAG ANGLE_FORCE_CONSTANT +%FORMAT(5E16.8) + 6.00000000E+01 1.00000000E+02 7.00000000E+01 5.50000000E+01 4.00000000E+01 + 8.00000000E+01 5.00000000E+01 5.00000000E+01 8.00000000E+01 7.00000000E+01 + 5.00000000E+01 3.00000000E+01 5.00000000E+01 6.00000000E+01 4.50000000E+01 + 8.00000000E+01 4.50000000E+01 4.50000000E+01 7.00000000E+01 6.00000000E+01 + 6.00000000E+01 4.50000000E+01 5.00000000E+01 +%FLAG ANGLE_EQUIL_VALUE +%FORMAT(5E16.8) + 1.91986300E+00 1.95476960E+00 1.87622975E+00 1.91113635E+00 1.91113635E+00 + 2.12406661E+00 1.91113635E+00 2.09439600E+00 2.14501057E+00 2.01760148E+00 + 1.91113635E+00 2.05948940E+00 2.09439600E+00 1.91986300E+00 1.93731630E+00 + 1.91462701E+00 1.98094955E+00 1.91113635E+00 1.89368305E+00 1.91986300E+00 + 1.91986300E+00 1.93731630E+00 1.94778828E+00 +%FLAG DIHEDRAL_FORCE_CONSTANT +%FORMAT(5E16.8) + 1.08000000E+00 1.38000000E+00 9.60000000E-01 1.00000000E-01 5.00000000E-02 + -1.50000000E+00 1.80000000E-01 0.00000000E+00 2.00000000E+00 2.50000000E+00 + 0.00000000E+00 1.00000000E+00 -1.00000000E+00 -2.80000000E+00 -2.70000000E+00 + 1.70000000E-01 -1.00000000E-01 9.50000000E-01 5.50000000E-01 1.50000000E-01 + 4.00000000E-01 4.50000000E-01 1.60000000E-01 -2.70000000E-01 -1.30000000E+00 + -1.10000000E+00 2.50000000E-01 6.00000000E-01 2.70000000E-01 1.05000000E+01 + 1.50000000E+00 +%FLAG DIHEDRAL_PERIODICITY +%FORMAT(5E16.8) + 1.00000000E+00 2.00000000E+00 3.00000000E+00 3.00000000E+00 3.00000000E+00 + 1.00000000E+00 3.00000000E+00 3.00000000E+00 1.00000000E+00 2.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 2.00000000E+00 2.00000000E+00 + 3.00000000E+00 1.00000000E+00 2.00000000E+00 3.00000000E+00 3.00000000E+00 + 1.00000000E+00 1.00000000E+00 3.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 2.00000000E+00 2.00000000E+00 3.00000000E+00 2.00000000E+00 + 2.00000000E+00 +%FLAG SCEE_SCALE_FACTOR +%FORMAT(5E16.8) + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.20000000E+00 1.20000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 0.00000000E+00 + 0.00000000E+00 +%FLAG SCNB_SCALE_FACTOR +%FORMAT(5E16.8) + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 2.00000000E+00 2.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 0.00000000E+00 + 0.00000000E+00 +%FLAG SOLTY +%FORMAT(5E16.8) + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 +%FLAG LENNARD_JONES_ACOEF +%FORMAT(5E16.8) + 5.03316480E-07 2.00637392E+02 5.81803229E+05 4.41079188E+02 7.91544157E+05 + 1.04308023E+06 2.53654211E+00 3.15360051E+04 4.68930885E+04 1.32801250E+03 + 1.42536451E+02 4.58874091E+05 6.28541240E+05 2.44050579E+04 3.61397723E+05 + 5.53902818E+00 4.66922514E+04 6.78771368E+04 2.09814978E+03 3.63097246E+04 + 3.25969625E+03 3.37529073E+02 7.44975864E+05 9.95480466E+05 4.24594555E+04 + 5.89818288E+05 6.20665997E+04 9.44293233E+05 1.49138681E-03 1.40467023E+03 + 2.56678134E+03 3.20009193E+01 1.03954408E+03 5.94667300E+01 2.12601181E+03 + 1.39982777E-01 3.91072368E+02 7.01803794E+05 9.24822270E+05 4.15766412E+04 + 5.57281136E+05 6.01816484E+04 8.82619071E+05 2.27577561E+03 8.19971662E+05 + 1.37147154E+02 4.71003287E+05 6.47841731E+05 2.47595516E+04 3.70622491E+05 + 3.69471530E+04 6.06829342E+05 1.02595236E+03 5.74393458E+05 3.79876399E+05 + 1.15316498E+01 6.82786631E+04 9.71708117E+04 3.25969625E+03 5.33379252E+04 + 4.98586848E+03 8.96776989E+04 1.07193646E+02 8.61541883E+04 5.44261042E+04 + 7.51607703E+03 +%FLAG LENNARD_JONES_BCOEF +%FORMAT(5E16.8) + 2.45760000E-04 7.98505074E+00 6.99746810E+02 1.00536306E+01 6.93079947E+02 + 6.75612247E+02 4.69252138E-01 8.51470647E+01 8.81685417E+01 9.13231543E+00 + 6.38095248E+00 5.89183300E+02 5.85549272E+02 7.10161395E+01 4.95732238E+02 + 6.93429015E-01 1.03606917E+02 1.06076943E+02 1.14788417E+01 8.66220817E+01 + 1.43076527E+01 9.81924582E+00 7.50714425E+02 7.36907417E+02 9.36708259E+01 + 6.33305958E+02 1.13252061E+02 8.01323529E+02 1.13783784E-02 1.79702257E+01 + 2.06278363E+01 1.41762397E+00 1.46567808E+01 1.93248820E+00 2.09604198E+01 + 9.37598976E-02 8.91381236E+00 6.14502845E+02 5.99015525E+02 7.81725398E+01 + 5.19163331E+02 9.40505980E+01 6.53361429E+02 1.82891803E+01 5.31102864E+02 + 6.59870227E+00 6.29300710E+02 6.26720080E+02 7.54103785E+01 5.29252520E+02 + 9.21192136E+01 6.77220874E+02 1.53505284E+01 5.55666448E+02 5.64885984E+02 + 1.00053191E+00 1.25287818E+02 1.26919150E+02 1.43076527E+01 1.04986921E+02 + 1.76949863E+01 1.36131731E+02 2.59456373E+00 1.12529845E+02 1.11805549E+02 + 2.17257828E+01 +%FLAG BONDS_INC_HYDROGEN +%FORMAT(10I8) + 0 3 2 78 81 3 78 84 3 78 + 87 3 66 69 6 60 63 8 54 57 + 2 48 51 8 42 45 2 36 39 8 + 30 33 2 21 24 8 21 27 8 15 + 18 8 6 9 12 +%FLAG BONDS_WITHOUT_HYDROGEN +%FORMAT(10I8) + 3 6 1 72 75 4 72 78 5 66 + 72 7 60 66 9 48 54 1 48 60 + 10 36 42 1 36 48 10 21 30 1 + 15 21 10 15 36 10 12 15 11 6 + 12 11 6 60 10 +%FLAG ANGLES_INC_HYDROGEN +%FORMAT(10I8) + 3 6 9 1 0 3 6 4 84 78 + 87 5 81 78 84 5 81 78 87 5 + 72 78 81 7 72 78 84 7 72 78 + 87 7 69 66 72 8 63 60 66 11 + 60 66 69 12 51 48 54 14 51 48 + 60 15 48 54 57 4 48 60 63 15 + 39 36 42 14 39 36 48 15 36 42 + 45 4 36 48 51 15 27 21 30 14 + 24 21 27 18 24 21 30 14 21 30 + 33 4 18 15 21 15 18 15 36 15 + 15 21 24 15 15 21 27 15 15 36 + 39 15 12 15 18 20 9 6 12 21 + 9 6 60 22 6 60 63 15 +%FLAG ANGLES_WITHOUT_HYDROGEN +%FORMAT(10I8) + 3 6 12 2 3 6 60 3 75 72 + 78 6 66 72 75 9 66 72 78 10 + 60 66 72 13 54 48 60 3 48 60 + 66 16 42 36 48 3 36 48 54 3 + 36 48 60 17 21 15 36 17 15 21 + 30 3 15 36 42 3 15 36 48 17 + 12 6 60 19 12 15 21 19 12 15 + 36 19 6 12 15 23 6 60 48 17 + 6 60 66 16 +%FLAG DIHEDRALS_INC_HYDROGEN +%FORMAT(10I8) + 3 6 60 63 5 0 3 6 9 7 + 0 3 6 12 7 0 3 6 60 7 + 75 72 78 81 8 75 72 78 84 8 + 75 72 78 87 8 69 66 72 75 9 + 69 66 -72 75 10 69 66 72 78 11 + 66 72 78 81 8 66 72 78 84 8 + 66 72 78 87 8 63 60 66 69 12 + 63 60 66 72 13 57 54 48 60 7 + 54 48 60 63 5 51 48 54 57 7 + 51 48 60 63 16 51 48 60 66 4 + 48 60 66 69 4 45 42 36 48 7 + 42 36 48 51 5 39 36 42 45 7 + 39 36 48 51 16 39 36 48 54 5 + 39 36 48 60 20 36 48 54 57 7 + 36 48 60 63 20 27 21 15 36 20 + 27 21 30 33 7 24 21 15 36 20 + 24 21 30 33 7 21 15 36 39 20 + 18 15 21 24 16 18 15 21 27 16 + 18 15 21 30 5 18 15 36 39 16 + 18 15 36 42 5 18 15 36 48 20 + 15 21 30 33 7 15 36 42 45 7 + 15 36 48 51 20 12 6 60 63 5 + 12 15 21 24 5 12 15 21 27 5 + 12 15 36 39 5 9 6 12 15 28 + 9 6 -12 15 4 9 6 60 48 20 + 9 6 60 63 16 9 6 60 66 4 + 6 12 15 18 29 6 60 48 51 20 + 6 60 66 69 4 72 69 -66 -60 31 +%FLAG DIHEDRALS_WITHOUT_HYDROGEN +%FORMAT(10I8) + 3 6 12 15 1 3 6 -12 15 2 + 3 6 -12 15 3 3 6 60 48 4 + 3 6 60 66 6 60 66 72 75 14 + 60 66 72 78 15 54 48 60 66 6 + 48 60 66 72 8 42 36 48 54 17 + 42 36 -48 54 18 42 36 -48 54 19 + 42 36 48 60 4 36 48 60 66 21 + 30 21 15 36 4 21 15 36 42 4 + 21 15 36 48 22 15 12 6 60 23 + 15 36 48 54 4 15 36 -48 60 22 + 12 6 60 48 24 12 6 60 66 25 + 12 15 21 30 26 12 15 -21 30 27 + 12 15 36 42 26 12 15 -36 42 27 + 12 15 -36 48 24 6 12 15 21 23 + 6 12 15 36 23 6 60 -48 36 22 + 6 60 48 54 4 6 60 66 72 8 + 78 66 -72 -75 30 +%FLAG EXCLUDED_ATOMS_LIST +%FORMAT(10I8) + 2 3 4 5 21 3 4 5 6 17 + 21 22 23 4 5 6 7 8 13 17 + 18 19 21 22 23 24 25 5 6 17 + 21 22 23 6 7 8 9 10 11 13 + 14 15 17 21 22 23 7 8 9 10 + 11 12 13 14 15 16 17 18 19 21 + 8 9 10 11 13 14 15 17 9 10 + 11 12 13 14 15 17 10 11 12 13 + 11 12 13 12 13 0 14 15 16 17 + 18 19 20 21 22 23 15 16 17 18 + 19 21 16 17 18 19 21 17 18 19 + 20 21 22 23 24 25 19 20 21 22 + 23 20 21 22 23 21 22 23 24 25 + 26 27 23 24 25 24 25 26 27 28 + 29 30 25 26 27 26 27 28 29 30 + 27 28 29 30 28 29 30 29 30 30 + 0 +%FLAG HBOND_ACOEF +%FORMAT(5E16.8) + +%FLAG HBOND_BCOEF +%FORMAT(5E16.8) + +%FLAG HBCUT +%FORMAT(5E16.8) + +%FLAG AMBER_ATOM_TYPE +%FORMAT(20a4) +Ho Oh Cg H2 Os Cg H1 Cg H1 H1 Oh Ho Cg H1 Oh Ho Cg H1 Oh Ho +Cg H1 Ng H C O Cg Hc Hc Hc +%FLAG TREE_CHAIN_CLASSIFICATION +%FORMAT(20a4) +M M M E S 3 E 3 E E S E 3 E S E 3 E S E +B E B E B E 3 E E E +%FLAG JOIN_ARRAY +%FORMAT(10I8) + 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 +%FLAG IROTAT +%FORMAT(10I8) + 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 +%FLAG RADIUS_SET +%FORMAT(1a80) +modified Bondi radii (mbondi) +%FLAG RADII +%FORMAT(5E16.8) + 8.00000000E-01 1.50000000E+00 1.70000000E+00 1.30000000E+00 1.50000000E+00 + 1.70000000E+00 1.30000000E+00 1.70000000E+00 1.30000000E+00 1.30000000E+00 + 1.50000000E+00 8.00000000E-01 1.70000000E+00 1.30000000E+00 1.50000000E+00 + 8.00000000E-01 1.70000000E+00 1.30000000E+00 1.50000000E+00 8.00000000E-01 + 1.70000000E+00 1.30000000E+00 1.55000000E+00 1.30000000E+00 1.70000000E+00 + 1.50000000E+00 1.70000000E+00 1.30000000E+00 1.30000000E+00 1.30000000E+00 +%FLAG SCREEN +%FORMAT(5E16.8) + 8.50000000E-01 8.50000000E-01 7.20000000E-01 8.50000000E-01 8.50000000E-01 + 7.20000000E-01 8.50000000E-01 7.20000000E-01 8.50000000E-01 8.50000000E-01 + 8.50000000E-01 8.50000000E-01 7.20000000E-01 8.50000000E-01 8.50000000E-01 + 8.50000000E-01 7.20000000E-01 8.50000000E-01 8.50000000E-01 8.50000000E-01 + 7.20000000E-01 8.50000000E-01 7.90000000E-01 8.50000000E-01 7.20000000E-01 + 8.50000000E-01 7.20000000E-01 8.50000000E-01 8.50000000E-01 8.50000000E-01 +%FLAG IPOL +%FORMAT(1I8) + 0 diff --git a/tests/glycam_empty.inpcrd b/tests/glycam_empty.inpcrd new file mode 100644 index 00000000..e69de29b diff --git a/tests/glycam_empty.prmtop b/tests/glycam_empty.prmtop new file mode 100644 index 00000000..e69de29b diff --git a/tests/lower_res.pdb b/tests/lower_res.pdb new file mode 100644 index 00000000..caad2a7c --- /dev/null +++ b/tests/lower_res.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 ben 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 ben 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 ben 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 ben 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 ben 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 ben 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 ben 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 ben 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 ben 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 ben 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 ben 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 ben 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/no_res.pdb b/tests/no_res.pdb new file mode 100644 index 00000000..10a806cc --- /dev/null +++ b/tests/no_res.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/same_coord.pdb b/tests/same_coord.pdb new file mode 100644 index 00000000..61799270 --- /dev/null +++ b/tests/same_coord.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 BEN 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 BEN 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 3 C3 BEN 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 BEN 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 BEN 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 BEN 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 BEN 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 BEN 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 BEN 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 BEN 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 BEN 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 BEN 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/test_acpype.py b/tests/test_acpype.py index 4a76b84a..599a1f49 100644 --- a/tests/test_acpype.py +++ b/tests/test_acpype.py @@ -1,5 +1,4 @@ import os -import shutil import pytest from pytest import approx @@ -17,8 +16,7 @@ (True, 0.240324, ">"), ], ) -def test_mol2_sorted(issorted, charge, msg): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_mol2_sorted(janitor, issorted, charge, msg): molecule = ACTopol("AAA.mol2", chargeType="gas", debug=True, is_sorted=issorted) molecule.createACTopol() molecule.createMolTopol() @@ -30,11 +28,11 @@ def test_mol2_sorted(issorted, charge, msg): assert molecule.molTopol.totalCharge == 0 assert molecule.molTopol.atoms[0].charge == approx(charge) assert molecule.molTopol.atoms[-1].__repr__() == msg - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) -def test_pdb(capsys): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_pdb(janitor, capsys): molecule = ACTopol("FFF.pdb", chargeType="gas", debug=True) molecule.createACTopol() molecule.createMolTopol() @@ -43,7 +41,6 @@ def test_pdb(capsys): assert len(molecule.molTopol.improperDihedrals) == 23 assert molecule.molTopol.atoms[0].__repr__() == ">" # check gaff2 and force - os.chdir(os.path.dirname(os.path.abspath(__file__))) molecule = ACTopol("FFF.pdb", chargeType="gas", debug=True, atomType="gaff2", force=True) molecule.createACTopol() molecule.createMolTopol() @@ -54,22 +51,21 @@ def test_pdb(capsys): assert molecule.molTopol.atoms[0].__repr__() == ">" assert "==> Overwriting pickle file FFF.pkl" in captured.out # check for already present - os.chdir(os.path.dirname(os.path.abspath(__file__))) molecule = ACTopol("FFF.mol2", chargeType="gas", debug=True) molecule.createACTopol() molecule.createMolTopol() captured = capsys.readouterr() assert molecule assert "==> Pickle file FFF.pkl already present... doing nothing" in captured.out - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) @pytest.mark.parametrize( ("force", "at", "ndih"), [(False, "amber", 189), (True, "amber2", 187)], ) -def test_amber(force, at, ndih): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_amber(janitor, force, at, ndih): molecule = ACTopol("FFF.mol2", chargeType="gas", debug=True, atomType=at, force=force) molecule.createACTopol() molecule.createMolTopol() @@ -78,11 +74,11 @@ def test_amber(force, at, ndih): assert len(molecule.molTopol.properDihedrals) == ndih assert len(molecule.molTopol.improperDihedrals) == 23 assert molecule.molTopol.atoms[0].__repr__() == ">" - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) -def test_charges_chiral(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_charges_chiral(janitor): molecule = ACTopol("KKK.mol2", chargeType="gas", debug=True, chiral=True) molecule.createACTopol() molecule.createMolTopol() @@ -94,15 +90,15 @@ def test_charges_chiral(): assert molecule.chargeVal == "3" assert molecule.molTopol.totalCharge == 3 assert molecule.molTopol.chiralGroups[-1][-1] == approx(66.713290) - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) @pytest.mark.parametrize( ("base", "msg"), [(None, "smiles_molecule.mol2"), ("thalidomide_smiles", "thalidomide_smiles.mol2")], ) -def test_smiles(base, msg): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_smiles(janitor, base, msg): smiles = "c1ccc2c(c1)C(=O)N(C2=O)C3CCC(=NC3=O)O" molecule = ACTopol(smiles, basename=base, chargeType="gas", debug=True) molecule.createACTopol() @@ -110,24 +106,36 @@ def test_smiles(base, msg): assert molecule assert molecule.inputFile == msg assert len(molecule.molTopol.atoms) == 29 - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) os.remove(molecule.absInputFile) @pytest.mark.parametrize( - ("ct", "msg"), + ("ct", "ft", "msg"), [ ( "bcc", + "pdb", "-dr no -i benzene.mol2 -fi mol2 -o benzene_bcc_gaff2.mol2 -fo mol2 -c bcc -nc 0 -m 1 -s 2 -df 2 -at gaff2", ), - ("user", "cannot read charges from a PDB file"), + ( + "bcc", + "mol", + "-dr no -i benzene.mol -fi mdl -o benzene_bcc_gaff2.mol2 -fo mol2 -c bcc -nc 0 -m 1 -s 2 -df 2 -at gaff2", + ), + ( + "bcc", + "mdl", + "-dr no -i benzene.mdl -fi mdl -o benzene_bcc_gaff2.mol2 -fo mol2 -c bcc -nc 0 -m 1 -s 2 -df 2 -at gaff2", + ), + ("user", "pdb", "cannot read charges from a PDB file"), ], ) -def test_sqm_tleap(capsys, ct, msg): +def test_sqm_tleap(janitor, capsys, ct, ft, msg): # check chargeType user with PDB -> use bcc - os.chdir(os.path.dirname(os.path.abspath(__file__))) - molecule = ACTopol("benzene.pdb", chargeType=ct, debug=True) + # .mol and .mdl are the same file type + molecule = ACTopol(f"benzene.{ft}", chargeType=ct, debug=True) molecule.createACTopol() molecule.createMolTopol() captured = capsys.readouterr() @@ -138,30 +146,34 @@ def test_sqm_tleap(capsys, ct, msg): assert molecule.molTopol.atoms[0].charge == approx(-0.13) assert molecule.molTopol.atoms[-1].charge == approx(0.13) assert msg in captured.out - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) + + +def test_ekFlag(janitor): + molecule = ACTopol( + "benzene.pdb", + ekFlag='''"qm_theory='AM1', grms_tol=0.0005, scfconv=1.d-10, ndiis_attempts=700, qmcharge=0"''', + gmx4=True, + ) + molecule.createACTopol() + molecule.createMolTopol() + assert molecule + assert len(molecule.molTopol.atoms) == 12 + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) -def test_time_limit(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_time_limit(janitor): molecule = ACTopol("KKK.pdb", chargeType="bcc", debug=True, timeTol=2) with pytest.raises(Exception) as e_info: molecule.createACTopol() assert e_info.value.args[0] == "Semi-QM taking too long to finish... aborting!" - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) -def test_wrong_element(capsys): - # Only elements are allowed: C, N, O, S, P, H, F, Cl, Br and I - os.chdir(os.path.dirname(os.path.abspath(__file__))) - with pytest.raises(Exception) as e_info: - ACTopol("HEM.mol2", chargeType="user", debug=True) - captured = capsys.readouterr() - assert e_info.typename == "FileNotFoundError" - assert "Unrecognized case-sensitive atomic symbol ( FE)." in captured.out - - -def test_charge_user(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_charge_user(janitor): molecule = ACTopol("ADPMg.mol2", chargeType="user", debug=True) molecule.createACTopol() molecule.createMolTopol() @@ -171,21 +183,48 @@ def test_charge_user(): assert len(molecule.molTopol.improperDihedrals) == 7 assert molecule.molTopol.atoms[0].charge == 0.1667 assert molecule.molTopol.atoms[15].charge == -0.517 - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) + janitor.append(molecule.tmpDir) @pytest.mark.parametrize( - ("argv"), - [["-di", "cccc"], ["-x", "Base.inpcrd", "-p", "Base.prmtop"]], + ("argv", "msg"), + [ + (["-i", "cccc"], "Total time of execution:"), + (["-x", "Base.inpcrd", "-p", "Base.prmtop", "-b", "vir_temp"], "Total time of execution:"), + (["-wi", "cccc", "-b", "vir_temp"], ""), + ( + ["-i", "wrong_res_set.pdb", "-b", "vir_temp"], + "In vir_temp_AC.lib, residue name will be 'RSET' instead of 'SET' elsewhere", + ), + ( + ["-i", "wrong_res_num.pdb", "-b", "vir_temp"], + "In vir_temp_AC.lib, residue name will be 'R100' instead of '100' elsewhere", + ), + ( + ["-i", "wrong_res_sym.pdb", "-b", "vir_temp"], + "In vir_temp_AC.lib, residue name will be 'MOL' instead of '+++' elsewhere", + ), + ( + ["-i", "lower_res.pdb", "-b", "vir_temp"], + "WARNING: this may raise problem with some applications like CNS", + ), + ( + ["-fi", "too_close.pdb", "-b", "vir_temp"], + "You chose to proceed anyway with '-f' option. GOOD LUCK!", + ), + ( + ["-i", "no_res.pdb", "-b", "vir_temp"], + "No residue name identified, using default resname: 'LIG'", + ), + ], ) -def test_inputs(capsys, argv): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_inputs(janitor, capsys, argv, msg): temp_base = "vir_temp" - init_main(argv=argv + ["-b", temp_base]) + init_main(argv=argv) captured = capsys.readouterr() - assert "Total time of execution:" in captured.out - os.chdir(os.path.dirname(os.path.abspath(__file__))) - _getoutput(f"rm -fr {temp_base}*") + assert msg in captured.out + _getoutput(f"rm -vfr {temp_base}* .*{temp_base}* smiles_molecule.acpype") @pytest.mark.parametrize( @@ -196,15 +235,35 @@ def test_inputs(capsys, argv): ([], 2, "error: missing input files"), (["-d", "-w"], 2, "error: argument -w/--verboseless: not allowed with argument -d/--debug"), (["-di", "AAAx.mol2"], 19, "ACPYPE FAILED: Input file AAAx.mol2 DOES NOT EXIST"), - (["-di", " 123"], 19, "ACPYPE FAILED: [Errno 2] No such file or directory"), + (["-zx", "ILDN.inpcrd", "-p", "ILDN.prmtop"], 19, "Likely trying to convert ILDN to RB"), + (["-x", "glycam_exe.inpcrd", "-p", "glycam_corrupt.prmtop"], 19, "Skipping non-existent attributes dihedral_p"), + (["-x", "glycam_exe.inpcrd", "-p", "glycam_empty.prmtop"], 19, "ERROR: ACPYPE FAILED: PRMTOP file empty?"), + (["-x", "glycam_empty.inpcrd", "-p", "glycam_exe.prmtop"], 19, "ERROR: ACPYPE FAILED: INPCRD file empty?"), + (["-di", "cccccc", "-n", "-1", "-b", "vir_temp"], 19, "Fatal Error!"), + (["-di", " 123", "-b", "vir_temp"], 19, "ACPYPE FAILED: [Errno 2] No such file or directory"), + (["-i", "double_res.pdb", "-b", "vir_temp"], 19, "Only ONE Residue is allowed for ACPYPE to work"), + (["-i", "same_coord.pdb", "-b", "vir_temp"], 19, "Atoms with same coordinates in"), + (["-i", "too_close.pdb", "-b", "vir_temp"], 19, "Atoms TOO close (<"), + (["-i", "too_far.pdb", "-b", "vir_temp"], 19, "Atoms TOO scattered (>"), (["-di", " 123", "-x", "abc"], 2, "either '-i' or ('-p', '-x'), but not both"), (["-di", " 123", "-u"], 2, "option -u is only meaningful in 'amb2gmx' mode (args '-p' and '-x')"), + ( + ["-i", "drift.mol2", "-c", "user", "-b", "vir_temp"], + 19, + "Net charge drift '0.02020' bigger than tolerance '0.01000'", + ), + ( + ["-di", "HEM.pdb", "-b", "vir_temp"], + 19, + "Unrecognized case-sensitive atomic symbol ( FE).", # Only Allowed: C, N, O, S, P, H, F, Cl, Br and I + ), ], ) -def test_args_wrong_inputs(capsys, argv, code, msg): +def test_args_wrong_inputs(janitor, capsys, argv, code, msg): with pytest.raises(SystemExit) as e_info: init_main(argv=argv) captured = capsys.readouterr() assert msg in captured.err + captured.out assert e_info.typename == "SystemExit" assert e_info.value.code == code + _getoutput("rm -vfr vir_temp* .*vir_temp*") diff --git a/tests/test_acs_api.py b/tests/test_acs_api.py index 3acc7483..1d16d744 100644 --- a/tests/test_acs_api.py +++ b/tests/test_acs_api.py @@ -1,5 +1,5 @@ import json -import os +from glob import glob from acpype.acs_api import acpype_api @@ -27,18 +27,19 @@ ) -def test_json_simple(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_json_simple(janitor): jj = json.loads(acpype_api(inputFile="benzene.pdb", debug=True)) - assert min([len(jj.get(x)) for x in file_types]) >= 7 + assert min(len(jj.get(x)) for x in file_types) >= 7 assert jj.get("file_name") == "benzene" + janitor.append("../.acpype_tmp_benzene") -def test_json_failed(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_json_failed(janitor): jj = json.loads(acpype_api(inputFile="_fake_", debug=True)) assert "ERROR: [Errno 2] No such file or directory" in jj.get("file_name") assert "tests/_fake_" in jj.get("file_name") + for ii in glob(".*_fake_*"): + janitor.append(ii) def get_json(): @@ -46,8 +47,8 @@ def get_json(): return json.loads(json_output) -def test_json(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_json(janitor): jj = get_json() + janitor.append("../.acpype_tmp_AAA") for ft in file_types: assert len(jj.get(ft)) > 2 diff --git a/tests/test_amb2gmx.py b/tests/test_amb2gmx.py index 4a2fdbd6..5ba608e5 100644 --- a/tests/test_amb2gmx.py +++ b/tests/test_amb2gmx.py @@ -1,30 +1,26 @@ -import os -import shutil - import pytest from acpype.topol import MolTopol -def test_glycam(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_glycam(janitor): molecule = MolTopol(acFileTop="glycam_exe.prmtop", acFileXyz="glycam_exe.inpcrd", debug=True, amb2gmx=True) molecule.writeGromacsTopolFiles() + molecule.writeCnsTopolFiles() assert molecule assert molecule.topo14Data.hasNondefault14() assert len(molecule.topo14Data.scnb_scale_factor) == 31 - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) @pytest.mark.parametrize( ("dd", "g4", "ntext"), [(False, False, 14193), (True, False, 31516), (False, True, 12124), (True, True, 29447)], ) -def test_amb2gmx(dd, g4, ntext): +def test_amb2gmx(janitor, dd, g4, ntext): # oct box with water and ions # modified from https://ambermd.org/tutorials/basic/tutorial7/index.php # using addIonsRand separated for each ion and TIP3PBOX - os.chdir(os.path.dirname(os.path.abspath(__file__))) molecule = MolTopol(acFileTop="RAMP1_ion.prmtop", acFileXyz="RAMP1_ion.inpcrd", debug=True, direct=dd, gmx4=g4) molecule.writeGromacsTopolFiles() assert molecule @@ -33,7 +29,7 @@ def test_amb2gmx(dd, g4, ntext): assert molecule.atoms[1300].__repr__() == ">" assert molecule.atoms[1310].__repr__() == ">" assert len(molecule.atoms) == 18618 - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) @pytest.mark.parametrize( @@ -45,8 +41,7 @@ def test_amb2gmx(dd, g4, ntext): (True, "2", 50, 376435.47, 469.350655, ""), ], ) -def test_merge(merge, gaff, n_at, acoef, bcoef, msg): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_merge(janitor, merge, gaff, n_at, acoef, bcoef, msg): molecule = MolTopol(acFileTop=f"ComplexG{gaff}.prmtop", acFileXyz=f"ComplexG{gaff}.inpcrd", debug=True, merge=merge) molecule.writeGromacsTopolFiles() assert molecule @@ -54,15 +49,14 @@ def test_merge(merge, gaff, n_at, acoef, bcoef, msg): assert molecule.atomTypesGromacs[31].ACOEF == acoef assert molecule.atomTypesGromacs[31].BCOEF == bcoef assert molecule.atomTypesGromacs[31].__repr__() == msg - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) @pytest.mark.parametrize( ("mol", "n1", "n2", "n3", "n4", "n5", "msg"), [("ILDN", 24931, 12230, 577, 0, 47, ""), ("Base", 24931, 12044, 577, 0, 43, "")], ) -def test_ildn(mol, n1, n2, n3, n4, n5, msg): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_ildn(janitor, mol, n1, n2, n3, n4, n5, msg): molecule = MolTopol(acFileTop=f"{mol}.prmtop", acFileXyz=f"{mol}.inpcrd", debug=True) molecule.writeGromacsTopolFiles() assert molecule @@ -72,20 +66,18 @@ def test_ildn(mol, n1, n2, n3, n4, n5, msg): assert molecule.totalCharge == n4 assert len(molecule.atomTypes) == n5 assert molecule.atomTypes[23].__repr__() == msg - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) -def test_ildn_gmx4_fail(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_ildn_gmx4_fail(janitor): molecule = MolTopol(acFileTop="ILDN.prmtop", acFileXyz="ILDN.inpcrd", debug=True, gmx4=True) with pytest.raises(Exception) as e_info: molecule.writeGromacsTopolFiles() assert e_info.value.args[0] == "Likely trying to convert ILDN to RB, DO NOT use option '-z'" - shutil.rmtree(molecule.absHomeDir) + janitor.append(molecule.absHomeDir) -def test_wrong_input(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) +def test_wrong_input(janitor): with pytest.raises(Exception) as e_info: MolTopol(acFileTop="nope.prmtop", acFileXyz="ILDN.inpcrd", debug=True, gmx4=True) assert e_info.value.args == (2, "No such file or directory") diff --git a/tests/test_scenarios.py b/tests/test_scenarios.py index f44bd298..b96a3f05 100644 --- a/tests/test_scenarios.py +++ b/tests/test_scenarios.py @@ -1,16 +1,13 @@ -import os - import pytest from acpype import cli from acpype.utils import _getoutput -def test_no_ac(capsys): +def test_no_ac(janitor, capsys): binaries = {"ac_bin": "no_ac", "obabel_bin": "obabel"} msg = f"ERROR: no '{binaries['ac_bin']}' executable... aborting!" inp = "AAA.mol2" - os.chdir(os.path.dirname(os.path.abspath(__file__))) with pytest.raises(SystemExit) as e_info: cli.init_main(argv=["-di", inp, "-c", "gas"], binaries=binaries) captured = capsys.readouterr() @@ -19,20 +16,19 @@ def test_no_ac(capsys): assert e_info.value.code == 19 -def test_only_ac(capsys): +def test_only_ac(janitor, capsys): binaries = {"ac_bin": "antechamber", "obabel_bin": "no_obabel"} msg1 = f"WARNING: no '{binaries['obabel_bin']}' executable, no PDB file can be used as input!" msg2 = "Total time of execution:" msg3 = "WARNING: No Openbabel python module, no chiral groups" inp = "AAA.mol2" temp_base = "vir_temp" - os.chdir(os.path.dirname(os.path.abspath(__file__))) cli.init_main(argv=["-di", inp, "-c", "gas", "-b", temp_base], binaries=binaries) captured = capsys.readouterr() assert msg1 in captured.out assert msg2 in captured.out assert msg3 in captured.out - _getoutput(f"rm -fr {temp_base}*") + _getoutput(f"rm -vfr {temp_base}* .*{temp_base}*") @pytest.mark.parametrize( @@ -42,9 +38,8 @@ def test_only_ac(capsys): ("cccc", "WARNING: your input may be a SMILES but"), ], ) -def test_no_obabel(capsys, inp, msg): +def test_no_obabel(janitor, capsys, inp, msg): binaries = {"ac_bin": "antechamber", "obabel_bin": "no_obabel"} - os.chdir(os.path.dirname(os.path.abspath(__file__))) with pytest.raises(SystemExit) as e_info: cli.init_main(argv=["-di", inp, "-c", "gas"], binaries=binaries) captured = capsys.readouterr() @@ -53,13 +48,11 @@ def test_no_obabel(capsys, inp, msg): assert e_info.value.code == 19 -def test_amb2gmx_no_bins(capsys): +def test_amb2gmx_no_bins(janitor, capsys): binaries = {"ac_bin": "no_ac", "obabel_bin": "no_obabel"} - os.chdir(os.path.dirname(os.path.abspath(__file__))) argv = ["-x", "Base.inpcrd", "-p", "Base.prmtop"] temp_base = "vir_temp" cli.init_main(argv=argv + ["-b", temp_base], binaries=binaries) captured = capsys.readouterr() assert "Total time of execution:" in captured.out - os.chdir(os.path.dirname(os.path.abspath(__file__))) - _getoutput(f"rm -fr {temp_base}*") + _getoutput(f"rm -vfr {temp_base}* .*{temp_base}*") diff --git a/tests/too_close.pdb b/tests/too_close.pdb new file mode 100644 index 00000000..74cfaa27 --- /dev/null +++ b/tests/too_close.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 BEN 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 BEN 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 BEN 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 BEN 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 BEN 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 BEN 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 BEN 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 BEN 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 BEN 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 BEN 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 BEN 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 BEN 1 4.670 0.790 -8.915 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/too_far.pdb b/tests/too_far.pdb new file mode 100644 index 00000000..43ce7ead --- /dev/null +++ b/tests/too_far.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 BEN 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 BEN 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 BEN 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 BEN 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 BEN 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 BEN 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 BEN 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 BEN 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 BEN 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 BEN 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 BEN 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 BEN 1 14.670 10.790 -18.915 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/wrong_res_num.pdb b/tests/wrong_res_num.pdb new file mode 100644 index 00000000..cae209b8 --- /dev/null +++ b/tests/wrong_res_num.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 100 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 100 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 100 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 100 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 100 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 100 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 100 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 100 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 100 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 100 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 100 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 100 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/wrong_res_set.pdb b/tests/wrong_res_set.pdb new file mode 100644 index 00000000..ef1c2142 --- /dev/null +++ b/tests/wrong_res_set.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 SET 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 SET 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 SET 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 SET 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 SET 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 SET 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 SET 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 SET 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 SET 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 SET 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 SET 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 SET 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tests/wrong_res_sym.pdb b/tests/wrong_res_sym.pdb new file mode 100644 index 00000000..3454f8ef --- /dev/null +++ b/tests/wrong_res_sym.pdb @@ -0,0 +1,28 @@ +COMPND benzene.pdb +AUTHOR GENERATED BY OPEN BABEL 2.4.1 +ATOM 1 C1 +++ 1 5.274 1.999 -8.568 1.00 0.00 C +ATOM 2 C2 +++ 1 6.627 2.018 -8.209 1.00 0.00 C +ATOM 3 C3 +++ 1 7.366 0.829 -8.202 1.00 0.00 C +ATOM 4 C4 +++ 1 6.752 -0.379 -8.554 1.00 0.00 C +ATOM 5 C5 +++ 1 5.399 -0.398 -8.912 1.00 0.00 C +ATOM 6 C6 +++ 1 4.660 0.791 -8.919 1.00 0.00 C +ATOM 7 H11 +++ 1 4.704 2.916 -8.573 1.00 0.00 H +ATOM 8 H21 +++ 1 7.101 2.950 -7.938 1.00 0.00 H +ATOM 9 H31 +++ 1 8.410 0.844 -7.926 1.00 0.00 H +ATOM 10 H41 +++ 1 7.322 -1.296 -8.548 1.00 0.00 H +ATOM 11 H51 +++ 1 4.925 -1.330 -9.183 1.00 0.00 H +ATOM 12 H61 +++ 1 3.616 0.776 -9.196 1.00 0.00 H +CONECT 1 6 7 2 +CONECT 2 1 3 8 +CONECT 3 4 2 9 +CONECT 4 5 10 3 +CONECT 5 11 6 4 +CONECT 6 12 5 1 +CONECT 7 1 +CONECT 8 2 +CONECT 9 3 +CONECT 10 4 +CONECT 11 5 +CONECT 12 6 +MASTER 0 0 0 0 0 0 0 0 12 0 12 0 +END diff --git a/tox.ini b/tox.ini index b743a92e..356824d4 100644 --- a/tox.ini +++ b/tox.ini @@ -6,4 +6,4 @@ exclude = __pycache__, venv, build, - amber* \ No newline at end of file + amber*