rowan-python 1.1.9__tar.gz → 1.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rowan_python-1.1.10/.envrc +7 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/.github/workflows/python-publish.yml +6 -0
- rowan_python-1.1.10/.github/workflows/test.yml +33 -0
- rowan_python-1.1.10/.gitignore +200 -0
- rowan_python-1.1.10/.pre-commit-config.yaml +36 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/PKG-INFO +8 -3
- {rowan_python-1.1.9 → rowan_python-1.1.10}/README.md +5 -0
- rowan_python-1.1.10/examples/bde.py +34 -0
- rowan_python-1.1.10/examples/conformers.py +36 -0
- rowan_python-1.1.10/examples/multistage_opt.py +21 -0
- rowan_python-1.1.10/examples/optimization.py +27 -0
- rowan_python-1.1.10/examples/pka.py +30 -0
- rowan_python-1.1.10/pixi.lock +1458 -0
- rowan_python-1.1.10/pyproject.toml +131 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/calculation.py +4 -1
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/client.py +21 -11
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/folder.py +28 -35
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/protein.py +3 -3
- rowan_python-1.1.10/rowan/py.typed +0 -0
- rowan_python-1.1.10/rowan/rowan_rdkit/__init__.py +29 -0
- rowan_python-1.1.10/rowan/rowan_rdkit/chem_utils.py +966 -0
- rowan_python-1.1.10/rowan/utils.py +158 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/workflow.py +33 -26
- rowan_python-1.1.9/.gitignore +0 -18
- rowan_python-1.1.9/examples/run.py +0 -17
- rowan_python-1.1.9/pixi.lock +0 -3115
- rowan_python-1.1.9/pyproject.toml +0 -43
- rowan_python-1.1.9/rowan/rowan_rdkit/__init__.py +0 -5
- rowan_python-1.1.9/rowan/rowan_rdkit/chem_utils.py +0 -732
- rowan_python-1.1.9/rowan/utils.py +0 -157
- {rowan_python-1.1.9 → rowan_python-1.1.10}/LICENSE +0 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/__init__.py +0 -0
- {rowan_python-1.1.9 → rowan_python-1.1.10}/rowan/constants.py +0 -0
|
@@ -21,6 +21,12 @@ jobs:
|
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
|
|
23
23
|
steps:
|
|
24
|
+
- name: Skip if running with act
|
|
25
|
+
if: ${{ env.ACT == 'true' }}
|
|
26
|
+
run: |
|
|
27
|
+
echo "Skipping job because we're in act"
|
|
28
|
+
exit 1
|
|
29
|
+
|
|
24
30
|
- uses: actions/checkout@v3
|
|
25
31
|
- name: Set up Python
|
|
26
32
|
uses: actions/setup-python@v3
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Pytest Dev
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
python-version: ["3.13"]
|
|
13
|
+
os: [ubuntu-latest]
|
|
14
|
+
|
|
15
|
+
name: Python ${{ matrix.os }} ${{ matrix.python-version }}
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: ${{ matrix.python-version }}
|
|
24
|
+
|
|
25
|
+
- uses: prefix-dev/setup-pixi@v0.8.7
|
|
26
|
+
with:
|
|
27
|
+
pixi-version: v0.45.0
|
|
28
|
+
cache: true
|
|
29
|
+
environments: dev
|
|
30
|
+
|
|
31
|
+
- run: pixi run fmt
|
|
32
|
+
- run: pixi run lint
|
|
33
|
+
- run: pixi run types
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Ignore environment file with ROWAN_API_KEY
|
|
2
|
+
.env
|
|
3
|
+
|
|
4
|
+
# Created by https://www.toptal.com/developers/gitignore/api/python
|
|
5
|
+
# Edit at https://www.toptal.com/developers/gitignore?templates=python
|
|
6
|
+
|
|
7
|
+
### Python ###
|
|
8
|
+
# Byte-compiled / optimized / DLL files
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*$py.class
|
|
12
|
+
|
|
13
|
+
# C extensions
|
|
14
|
+
*.so
|
|
15
|
+
|
|
16
|
+
# Distribution / packaging
|
|
17
|
+
.Python
|
|
18
|
+
build/
|
|
19
|
+
develop-eggs/
|
|
20
|
+
dist/
|
|
21
|
+
downloads/
|
|
22
|
+
eggs/
|
|
23
|
+
.eggs/
|
|
24
|
+
lib/
|
|
25
|
+
lib64/
|
|
26
|
+
parts/
|
|
27
|
+
sdist/
|
|
28
|
+
var/
|
|
29
|
+
wheels/
|
|
30
|
+
share/python-wheels/
|
|
31
|
+
*.egg-info/
|
|
32
|
+
.installed.cfg
|
|
33
|
+
*.egg
|
|
34
|
+
MANIFEST
|
|
35
|
+
|
|
36
|
+
# PyInstaller
|
|
37
|
+
# Usually these files are written by a python script from a template
|
|
38
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
39
|
+
*.manifest
|
|
40
|
+
*.spec
|
|
41
|
+
|
|
42
|
+
# Installer logs
|
|
43
|
+
pip-log.txt
|
|
44
|
+
pip-delete-this-directory.txt
|
|
45
|
+
|
|
46
|
+
# Unit test / coverage reports
|
|
47
|
+
htmlcov/
|
|
48
|
+
.tox/
|
|
49
|
+
.nox/
|
|
50
|
+
.coverage
|
|
51
|
+
.coverage.*
|
|
52
|
+
.cache
|
|
53
|
+
nosetests.xml
|
|
54
|
+
coverage.xml
|
|
55
|
+
*.cover
|
|
56
|
+
*.py,cover
|
|
57
|
+
.hypothesis/
|
|
58
|
+
.pytest_cache/
|
|
59
|
+
cover/
|
|
60
|
+
|
|
61
|
+
# Translations
|
|
62
|
+
*.mo
|
|
63
|
+
*.pot
|
|
64
|
+
|
|
65
|
+
# Django stuff:
|
|
66
|
+
*.log
|
|
67
|
+
local_settings.py
|
|
68
|
+
db.sqlite3
|
|
69
|
+
db.sqlite3-journal
|
|
70
|
+
|
|
71
|
+
# Flask stuff:
|
|
72
|
+
instance/
|
|
73
|
+
.webassets-cache
|
|
74
|
+
|
|
75
|
+
# Scrapy stuff:
|
|
76
|
+
.scrapy
|
|
77
|
+
|
|
78
|
+
# Sphinx documentation
|
|
79
|
+
docs/_build/
|
|
80
|
+
|
|
81
|
+
# PyBuilder
|
|
82
|
+
.pybuilder/
|
|
83
|
+
target/
|
|
84
|
+
|
|
85
|
+
# Jupyter Notebook
|
|
86
|
+
.ipynb_checkpoints
|
|
87
|
+
|
|
88
|
+
# IPython
|
|
89
|
+
profile_default/
|
|
90
|
+
ipython_config.py
|
|
91
|
+
|
|
92
|
+
.vscode/
|
|
93
|
+
# pyenv
|
|
94
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
95
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
96
|
+
# .python-version
|
|
97
|
+
|
|
98
|
+
# pipenv
|
|
99
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
100
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
101
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
102
|
+
# install all needed dependencies.
|
|
103
|
+
#Pipfile.lock
|
|
104
|
+
|
|
105
|
+
# poetry
|
|
106
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
107
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
108
|
+
# commonly ignored for libraries.
|
|
109
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
110
|
+
#poetry.lock
|
|
111
|
+
|
|
112
|
+
# pdm
|
|
113
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
114
|
+
#pdm.lock
|
|
115
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
116
|
+
# in version control.
|
|
117
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
118
|
+
.pdm.toml
|
|
119
|
+
|
|
120
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
121
|
+
__pypackages__/
|
|
122
|
+
|
|
123
|
+
# Celery stuff
|
|
124
|
+
celerybeat-schedule
|
|
125
|
+
celerybeat.pid
|
|
126
|
+
|
|
127
|
+
# SageMath parsed files
|
|
128
|
+
*.sage.py
|
|
129
|
+
|
|
130
|
+
# Environments
|
|
131
|
+
.env
|
|
132
|
+
.venv
|
|
133
|
+
env/
|
|
134
|
+
venv/
|
|
135
|
+
ENV/
|
|
136
|
+
env.bak/
|
|
137
|
+
venv.bak/
|
|
138
|
+
|
|
139
|
+
# Spyder project settings
|
|
140
|
+
.spyderproject
|
|
141
|
+
.spyproject
|
|
142
|
+
|
|
143
|
+
# Rope project settings
|
|
144
|
+
.ropeproject
|
|
145
|
+
|
|
146
|
+
# mkdocs documentation
|
|
147
|
+
/site
|
|
148
|
+
|
|
149
|
+
# mypy
|
|
150
|
+
.mypy_cache/
|
|
151
|
+
.dmypy.json
|
|
152
|
+
dmypy.json
|
|
153
|
+
|
|
154
|
+
# Pyre type checker
|
|
155
|
+
.pyre/
|
|
156
|
+
|
|
157
|
+
# pytype static type analyzer
|
|
158
|
+
.pytype/
|
|
159
|
+
|
|
160
|
+
# Cython debug symbols
|
|
161
|
+
cython_debug/
|
|
162
|
+
|
|
163
|
+
# PyCharm
|
|
164
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
165
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
166
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
167
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
168
|
+
#.idea/
|
|
169
|
+
|
|
170
|
+
### Python Patch ###
|
|
171
|
+
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
|
|
172
|
+
poetry.toml
|
|
173
|
+
|
|
174
|
+
# ruff
|
|
175
|
+
.ruff_cache/
|
|
176
|
+
|
|
177
|
+
# LSP config files
|
|
178
|
+
pyrightconfig.json
|
|
179
|
+
|
|
180
|
+
# End of https://www.toptal.com/developers/gitignore/api/python
|
|
181
|
+
|
|
182
|
+
# Pixi
|
|
183
|
+
.pixi
|
|
184
|
+
|
|
185
|
+
# psi4 crap
|
|
186
|
+
timer.dat
|
|
187
|
+
psi*.clean
|
|
188
|
+
|
|
189
|
+
*.CP
|
|
190
|
+
*.CPC
|
|
191
|
+
|
|
192
|
+
*.lprof
|
|
193
|
+
|
|
194
|
+
# pyscf
|
|
195
|
+
pyscf.chk
|
|
196
|
+
local/
|
|
197
|
+
|
|
198
|
+
.pixi/
|
|
199
|
+
|
|
200
|
+
cyp/
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Exclude .pixi, data, and patches
|
|
2
|
+
exclude: '(.pixi|\.dat$|\.patch$)'
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
+
rev: v5.0.0 # this is optional, use `pre-commit autoupdate` to get the latest rev!
|
|
6
|
+
hooks:
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- id: check-toml
|
|
9
|
+
- id: end-of-file-fixer
|
|
10
|
+
- id: trailing-whitespace
|
|
11
|
+
|
|
12
|
+
- repo: local
|
|
13
|
+
hooks:
|
|
14
|
+
- id: ruff
|
|
15
|
+
name: ruff-format
|
|
16
|
+
stages: [pre-commit, pre-push]
|
|
17
|
+
language: system
|
|
18
|
+
entry: pixi run fmt
|
|
19
|
+
types: [python]
|
|
20
|
+
pass_filenames: false
|
|
21
|
+
|
|
22
|
+
- id: ruff
|
|
23
|
+
name: ruff-check
|
|
24
|
+
stages: [pre-commit, pre-push]
|
|
25
|
+
language: system
|
|
26
|
+
entry: pixi run lint
|
|
27
|
+
types: [python]
|
|
28
|
+
pass_filenames: false
|
|
29
|
+
|
|
30
|
+
- id: Mypy
|
|
31
|
+
name: mypy
|
|
32
|
+
stages: [pre-commit]
|
|
33
|
+
language: system
|
|
34
|
+
entry: pixi run types
|
|
35
|
+
types: [python]
|
|
36
|
+
pass_filenames: false
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.10
|
|
4
4
|
Summary: Rowan Python Library
|
|
5
5
|
Project-URL: Homepage, https://github.com/rowansci/rowan-client
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/rowansci/rowan-client/issues
|
|
7
7
|
Author-email: Corin Wagen <corin@rowansci.com>
|
|
8
8
|
License-File: LICENSE
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.9
|
|
10
10
|
Requires-Dist: httpx
|
|
11
11
|
Requires-Dist: nest-asyncio
|
|
12
12
|
Requires-Dist: rdkit
|
|
13
13
|
Requires-Dist: setuptools
|
|
14
|
-
Requires-Dist: stjames>=0.0.
|
|
14
|
+
Requires-Dist: stjames>=0.0.76
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
|
|
17
17
|
# Rowan Python Library
|
|
@@ -28,6 +28,11 @@ The Rowan Python library provides convenient access to the Rowan API from applic
|
|
|
28
28
|
|
|
29
29
|
The documentation is available [here](https://docs.rowansci.com/python-api).
|
|
30
30
|
|
|
31
|
+
## Running examples
|
|
32
|
+
|
|
33
|
+
To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
|
|
34
|
+
If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
|
|
35
|
+
|
|
31
36
|
|
|
32
37
|
## Issues
|
|
33
38
|
|
|
@@ -12,6 +12,11 @@ The Rowan Python library provides convenient access to the Rowan API from applic
|
|
|
12
12
|
|
|
13
13
|
The documentation is available [here](https://docs.rowansci.com/python-api).
|
|
14
14
|
|
|
15
|
+
## Running examples
|
|
16
|
+
|
|
17
|
+
To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
|
|
18
|
+
If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
|
|
19
|
+
|
|
15
20
|
|
|
16
21
|
## Issues
|
|
17
22
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Calculate the Bond-Dissociation Energy (BDE) of a molecule using the Rowan API.
|
|
3
|
+
|
|
4
|
+
| Calculation | Initial | Final | Single | Optimizes |
|
|
5
|
+
| Mode | Optimization | Optimization | Point | Fragments? |
|
|
6
|
+
|-------------|--------------|--------------|------------------------|------------|
|
|
7
|
+
| Reckless | | GFN-FF | GFN2-xTB | No |
|
|
8
|
+
| Rapid | | GFN2-xTB | r²SCAN-3c | Yes |
|
|
9
|
+
| Careful | | r²SCAN-3c | ωB97X-3c | Yes |
|
|
10
|
+
| Meticulous | r²SCAN-3c | ωB97X-3c | ωB97M-D3BJ/def2-TZVPPD | Yes |
|
|
11
|
+
|
|
12
|
+
Rapid is recommended for most work.
|
|
13
|
+
|
|
14
|
+
See documentation at: https://docs.rowansci.com/science/workflows/bond-dissociation-energy
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import json
|
|
18
|
+
|
|
19
|
+
from stjames import Molecule
|
|
20
|
+
|
|
21
|
+
import rowan
|
|
22
|
+
|
|
23
|
+
# rowan.api_key = ""
|
|
24
|
+
|
|
25
|
+
# Run calculation remotely
|
|
26
|
+
result = rowan.compute(
|
|
27
|
+
Molecule.from_smiles("CCCC"),
|
|
28
|
+
workflow_type="bde",
|
|
29
|
+
name="Butane BDE",
|
|
30
|
+
mode="reckless",
|
|
31
|
+
all_CH=True,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
print(json.dumps(result, indent=4))
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Calculate the conformers of a molecule using the Rowan API.
|
|
3
|
+
|
|
4
|
+
| Mode | Reckless | Rapid | Careful | Meticulous |
|
|
5
|
+
|-----------------------------------------------|----------|-------|---------|------------|
|
|
6
|
+
| Conformer generation program | RDKit | RDKit | CREST | CREST |
|
|
7
|
+
| Level of theory used for conformer generation | MMFF | MMFF | GFN-FF | GFN2-xTB |
|
|
8
|
+
| CREST Mode | | | quick | normal |
|
|
9
|
+
| ETKDG number of initial conformers | 200 | 300 | | |
|
|
10
|
+
| Initial energy cutoff (kcal/mol) | 10 | 15 | 10 | 15 |
|
|
11
|
+
| RMSD similarity cutoff (Å) | 0.25 | 0.10 | 0.00 | 0.00 |
|
|
12
|
+
| xTB screening max number of conformers | 50 | 100 | 150 | 500 |
|
|
13
|
+
| Final energy cutoff (kcal/mol) | 5 | 5 | 5 | 10 |
|
|
14
|
+
|
|
15
|
+
Rapid is recommended for most work.
|
|
16
|
+
|
|
17
|
+
See documentation at: https://docs.rowansci.com/science/workflows/conformers
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import json
|
|
21
|
+
|
|
22
|
+
from stjames import Molecule
|
|
23
|
+
|
|
24
|
+
import rowan
|
|
25
|
+
|
|
26
|
+
# rowan.api_key = ""
|
|
27
|
+
|
|
28
|
+
# Run calculation remotely
|
|
29
|
+
result = rowan.compute(
|
|
30
|
+
Molecule.from_smiles("CCOCC"),
|
|
31
|
+
workflow_type="conformers",
|
|
32
|
+
name="Diethyl ether conformers",
|
|
33
|
+
mode="reckless",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
print(json.dumps(result, indent=4))
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from pprint import pprint
|
|
2
|
+
|
|
3
|
+
import stjames
|
|
4
|
+
|
|
5
|
+
import rowan
|
|
6
|
+
|
|
7
|
+
# Set ROWAN_API_KEY environment variable to your API key or set rowan.api_key directly
|
|
8
|
+
# rowan.api_key = "rowan-sk..."
|
|
9
|
+
|
|
10
|
+
# load molecule by SMILES (stjames can load a variety of file formats)
|
|
11
|
+
molecule = stjames.Molecule.from_smiles("C1CCC1") # cyclobutane
|
|
12
|
+
|
|
13
|
+
# run calculation remotely and return result
|
|
14
|
+
result = rowan.compute(
|
|
15
|
+
molecule,
|
|
16
|
+
workflow_type="multistage_opt",
|
|
17
|
+
name="Multistage optimization cyclobutane",
|
|
18
|
+
mode="reckless",
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
pprint(result)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Run an optimization calculation on a molecule using Rowan.
|
|
3
|
+
|
|
4
|
+
See documentation at: https://docs.rowansci.com/science/workflows/bond-dissociation-energy
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
|
|
9
|
+
from stjames import Molecule
|
|
10
|
+
|
|
11
|
+
import rowan
|
|
12
|
+
|
|
13
|
+
# rowan.api_key = ""
|
|
14
|
+
|
|
15
|
+
# Run calculation remotely
|
|
16
|
+
result = rowan.compute(
|
|
17
|
+
Molecule.from_smiles("O"),
|
|
18
|
+
workflow_type="basic_calculation",
|
|
19
|
+
name="Water Optimization",
|
|
20
|
+
settings={
|
|
21
|
+
"method": "GFN2-xTB",
|
|
22
|
+
"tasks": ["optimize"],
|
|
23
|
+
},
|
|
24
|
+
engine="xtb",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
print(json.dumps(result, indent=4))
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Calculate the pKa of the conjugate acid of pyridine using the Rowan API.
|
|
3
|
+
|
|
4
|
+
Experimental value ≈5.23
|
|
5
|
+
|
|
6
|
+
See documentiation at: https://docs.rowansci.com/science/workflows/pka
|
|
7
|
+
and preprint at: https://rowansci.com/publications/pka-prediction
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from stjames import Molecule
|
|
11
|
+
|
|
12
|
+
import rowan
|
|
13
|
+
|
|
14
|
+
# rowan.api_key = ""
|
|
15
|
+
|
|
16
|
+
# Run calculation remotely
|
|
17
|
+
result = rowan.compute(
|
|
18
|
+
Molecule.from_smiles("n1ccccc1"),
|
|
19
|
+
workflow_type="pka",
|
|
20
|
+
name="Pyridine pKa",
|
|
21
|
+
mode="reckless",
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
logfile = result["object_logfile"]
|
|
25
|
+
strongest_base = result["object_data"]["strongest_base"]
|
|
26
|
+
|
|
27
|
+
print(f"""\
|
|
28
|
+
{logfile}
|
|
29
|
+
|
|
30
|
+
pKa of conjugate acid: {strongest_base:.2f}""")
|