rowan-python 2.1.6__tar.gz → 2.1.8__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.
Files changed (62) hide show
  1. {rowan_python-2.1.6 → rowan_python-2.1.8}/.github/workflows/test.yml +7 -7
  2. {rowan_python-2.1.6 → rowan_python-2.1.8}/PKG-INFO +3 -3
  3. {rowan_python-2.1.6 → rowan_python-2.1.8}/docs/index.md +12 -12
  4. {rowan_python-2.1.6 → rowan_python-2.1.8}/docs/rowan_rdkit.md +2 -2
  5. {rowan_python-2.1.6 → rowan_python-2.1.8}/docs/stylesheets/colors.css +2 -2
  6. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/basic_calculation_with_constraint.py +0 -1
  7. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/basic_calculation_with_solvent.py +0 -2
  8. rowan_python-2.1.8/examples/batch_docking.py +130 -0
  9. rowan_python-2.1.8/examples/boltz_paired_msa.py +33 -0
  10. rowan_python-2.1.8/examples/boltz_single_msa.py +32 -0
  11. rowan_python-2.1.8/examples/chai_paired_msa.py +51 -0
  12. rowan_python-2.1.8/examples/chai_single_msa.py +48 -0
  13. rowan_python-2.1.8/examples/colabfold_paired_msa.py +32 -0
  14. rowan_python-2.1.8/examples/colabfold_single_msa.py +28 -0
  15. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/data/workflow_example.json +1 -1
  16. rowan_python-2.1.8/examples/double_ended_ts_search.py +58 -0
  17. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/pka.py +10 -1
  18. rowan_python-2.1.8/examples/pose_analysis_md.py +28 -0
  19. {rowan_python-2.1.6 → rowan_python-2.1.8}/mkdocs.yml +2 -2
  20. {rowan_python-2.1.6 → rowan_python-2.1.8}/pixi.lock +449 -347
  21. {rowan_python-2.1.6 → rowan_python-2.1.8}/pyproject.toml +5 -4
  22. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/rowan_rdkit/chem_utils.py +1 -1
  23. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/workflow.py +328 -18
  24. rowan_python-2.1.8/tests/test_macropka_loop.py +69 -0
  25. {rowan_python-2.1.6 → rowan_python-2.1.8}/.envrc +0 -0
  26. {rowan_python-2.1.6 → rowan_python-2.1.8}/.github/workflows/python-publish.yml +0 -0
  27. {rowan_python-2.1.6 → rowan_python-2.1.8}/.gitignore +0 -0
  28. {rowan_python-2.1.6 → rowan_python-2.1.8}/.pre-commit-config.yaml +0 -0
  29. {rowan_python-2.1.6 → rowan_python-2.1.8}/LICENSE +0 -0
  30. {rowan_python-2.1.6 → rowan_python-2.1.8}/README.md +0 -0
  31. {rowan_python-2.1.6 → rowan_python-2.1.8}/docs/images/deciduous-tree-favicon.png +0 -0
  32. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/PROTAC_solubility.py +0 -0
  33. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/aqueous_solubility.py +0 -0
  34. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/basic_calculation.py +0 -0
  35. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/basic_calculation_from_json.py +0 -0
  36. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/bde.py +0 -0
  37. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/cofolding_screen.py +0 -0
  38. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/conformer_dependent_redox.py +0 -0
  39. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/conformers.py +0 -0
  40. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/docking_screen.py +0 -0
  41. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/fukui_index.py +0 -0
  42. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/ion_mobility.py +0 -0
  43. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/irc.py +0 -0
  44. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/macropka.py +0 -0
  45. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/multistage_opt.py +0 -0
  46. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/nmr.py +0 -0
  47. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/optimization.py +0 -0
  48. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/phenol_pka.py +0 -0
  49. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/protein_cofolding.py +0 -0
  50. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/redox_potential.py +0 -0
  51. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/scan.py +0 -0
  52. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/strain.py +0 -0
  53. {rowan_python-2.1.6 → rowan_python-2.1.8}/examples/tautomer.py +0 -0
  54. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/__init__.py +0 -0
  55. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/constants.py +0 -0
  56. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/folder.py +0 -0
  57. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/project.py +0 -0
  58. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/protein.py +0 -0
  59. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/py.typed +0 -0
  60. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/rowan_rdkit/__init__.py +0 -0
  61. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/user.py +0 -0
  62. {rowan_python-2.1.6 → rowan_python-2.1.8}/rowan/utils.py +0 -0
@@ -1,30 +1,30 @@
1
1
  name: Pytest Dev
2
2
 
3
3
  on:
4
- pull_request:
4
+ pull_request: {}
5
5
  push:
6
- branches:
6
+ branches: master
7
7
 
8
8
  jobs:
9
9
  test:
10
10
  strategy:
11
11
  matrix:
12
- python-version: ["3.13"]
12
+ python-version: ["3.14"]
13
13
  os: [ubuntu-latest]
14
14
 
15
15
  name: Python ${{ matrix.os }} ${{ matrix.python-version }}
16
16
  runs-on: ${{ matrix.os }}
17
17
 
18
18
  steps:
19
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v5
20
20
 
21
- - uses: actions/setup-python@v5
21
+ - uses: actions/setup-python@v6
22
22
  with:
23
23
  python-version: ${{ matrix.python-version }}
24
24
 
25
- - uses: prefix-dev/setup-pixi@v0.8.7
25
+ - uses: prefix-dev/setup-pixi@v0.9.1
26
26
  with:
27
- pixi-version: v0.45.0
27
+ pixi-version: v0.56.0
28
28
  cache: true
29
29
  environments: dev
30
30
 
@@ -1,17 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 2.1.6
3
+ Version: 2.1.8
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
9
+ Requires-Python: >=3.11
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.109
14
+ Requires-Dist: stjames>=0.0.125
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Rowan Python Library
@@ -2,8 +2,8 @@
2
2
  ::: rowan.workflow
3
3
  handler: python
4
4
  options:
5
- show_source: false
6
- show_root_heading: false
5
+ show_source: false
6
+ show_root_heading: false
7
7
  show_root_toc_entry: false
8
8
  members_order: source # show items in the order they appear in code
9
9
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -12,8 +12,8 @@
12
12
  ::: rowan.folder
13
13
  handler: python
14
14
  options:
15
- show_source: false
16
- show_root_heading: false
15
+ show_source: false
16
+ show_root_heading: false
17
17
  show_root_toc_entry: false
18
18
  members_order: source # show items in the order they appear in code
19
19
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -22,8 +22,8 @@
22
22
  ::: rowan.user
23
23
  handler: python
24
24
  options:
25
- show_source: false
26
- show_root_heading: false
25
+ show_source: false
26
+ show_root_heading: false
27
27
  show_root_toc_entry: false
28
28
  members_order: source # show items in the order they appear in code
29
29
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -32,8 +32,8 @@
32
32
  ::: rowan.protein
33
33
  handler: python
34
34
  options:
35
- show_source: false
36
- show_root_heading: false
35
+ show_source: false
36
+ show_root_heading: false
37
37
  show_root_toc_entry: false
38
38
  members_order: source # show items in the order they appear in code
39
39
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -42,8 +42,8 @@
42
42
  ::: rowan.project
43
43
  handler: python
44
44
  options:
45
- show_source: false
46
- show_root_heading: false
45
+ show_source: false
46
+ show_root_heading: false
47
47
  show_root_toc_entry: false
48
48
  members_order: source # show items in the order they appear in code
49
49
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -52,8 +52,8 @@
52
52
  ::: rowan.utils
53
53
  handler: python
54
54
  options:
55
- show_source: false
56
- show_root_heading: false
55
+ show_source: false
56
+ show_root_heading: false
57
57
  show_root_toc_entry: false
58
58
  members_order: source # show items in the order they appear in code
59
59
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -1,8 +1,8 @@
1
1
  ::: rowan.rowan_rdkit
2
2
  handler: python
3
3
  options:
4
- show_source: false
5
- show_root_heading: false
4
+ show_source: false
5
+ show_root_heading: false
6
6
  show_root_toc_entry: false
7
7
  members_order: source # show items in the order they appear in code
8
8
  group_by_category: true # adds “Classes”, “Functions”, … headings -->
@@ -1,6 +1,6 @@
1
1
  /* Light-mode brand green */
2
2
  :root > * {
3
3
  --md-primary-fg-color: #16a34a;
4
- --md-primary-fg-color--light: #c3d3e1;
5
- --md-primary-fg-color--dark: #74967E;
4
+ --md-primary-fg-color--light: #c3d3e1;
5
+ --md-primary-fg-color--dark: #74967E;
6
6
  }
@@ -9,7 +9,6 @@ result = rowan.submit_workflow(
9
9
  workflow_type="basic_calculation",
10
10
  name="Constrained Butane",
11
11
  workflow_data={
12
- "engine": "xtb",
13
12
  "settings": {
14
13
  "method": "gfn2_xtb",
15
14
  "tasks": ["optimize"],
@@ -13,7 +13,6 @@ def compute_energy_with_solvent_correction(molecule: Molecule, method: Method, n
13
13
  name=f"{name} {method} optimization",
14
14
  workflow_data={
15
15
  "settings": {"method": method, "tasks": ["optimize"]},
16
- "engine": "omol25",
17
16
  },
18
17
  )
19
18
 
@@ -33,7 +32,6 @@ def compute_energy_with_solvent_correction(molecule: Molecule, method: Method, n
33
32
  "tasks": ["energy"],
34
33
  "solvent_settings": {"solvent": "water", "model": "cpcmx"},
35
34
  },
36
- "engine": "omol25",
37
35
  },
38
36
  )
39
37
 
@@ -0,0 +1,130 @@
1
+ import time
2
+
3
+ import rowan
4
+
5
+ ligands = [
6
+ "CCC(C)(C)NC1=NCC2(CCC(=O)C2C)N1",
7
+ "CCC(C)CN=C1NCC2(CCCOC2)CN1",
8
+ "CC(C)CCNC1=NCC2CC(COC2=N)O1",
9
+ "CCC(CC)NC1=NCC2CC(CO)CC12",
10
+ "CCC(C)CN=C1NC=C2CCC(O)CC2=N1",
11
+ "CC(C#CC#N)C1=NC=C2C=CC(=O)CN12",
12
+ "CCC(CCN)C1NCC2=C(CC)SC(O)=C12",
13
+ "CCC(CC)N=C1NC=C2C=C(F)C=C(N)N12",
14
+ "CC(C)(C)C(N)C1=NCC2=CC(I)=NC=C2O1",
15
+ "CCC(CC)NC1=NCC2CC(N1)C(C)CN2",
16
+ "CCCC(C)N=C1NCC2CCNC2(C)CO1",
17
+ "CC(C)CC(N)C1NCC2=CC(N)=C(Br)N=C12",
18
+ "CC(C)C(CN)C1=NC=C2C=CN(C)C2=C1Br",
19
+ "CC(CC#C)NC1=NCC2=C(C)N(C)C=C2O1",
20
+ "CCCC(C)(N)C1=NCC2=CC(N)=CC=C2O1",
21
+ "CCCCC(N)C1=NC=C2C=CN(C)C(C)=C12",
22
+ "CCC(CC)N=C1NCC2CC(N)CCCN12",
23
+ "CC(C)C(C)(N)C1=NC=C2C=CNC(=N)C2=N1",
24
+ "CC(C)(CC#N)C1=NCC2CCN=COC2O1",
25
+ "C#CCC(C#N)C1=NC=C2C=CNN=C12",
26
+ "CCCCCNC1=NCC2=C(C)NN=C2N1",
27
+ "CCCCC(N)C1=NC=C2C(C)=NOC2=C1Br",
28
+ "CCCCCNC1=NCC2(CC#N)OCC1O2",
29
+ "CC(C)CCNC1=NC=C2CC(=N)OCCN12",
30
+ "CCCC(C#N)C1N(C)C2=C(C=NS2)C1=O",
31
+ "CCC(CC#N)C1=NCC2=C(CO1)OC(=N)S2",
32
+ "CCC(CCN)C1=NCC2=C(CO1)SC=N2",
33
+ "CCC(C(C)N)C1NCC2CCOC1C2(C)C",
34
+ "CC(C)(C)CNC1=NCC2CCOC1(O2)C#C",
35
+ "CCCCCN=C1N(C)C2CCOC2C1(C)C",
36
+ "CC(C)CCN=C1NCC2(CCOC2O1)C#C",
37
+ "CC(C)C(C#N)C1NCC2=CC(O)=C(Br)N=C12",
38
+ "CCC(C(C)N)C1(N)CC2CC(OC)C1C2C",
39
+ "CC(C)(C)CN=C1NC=C2CC(O)CC2O1",
40
+ "CCC(C)(C#N)C1=NC=C2CC(=O)C(C=O)N12",
41
+ "CCCC(C)NC1=NCC2(CCOC=N2)CC1",
42
+ "CCCC(C)N=C1N=CC2=CC(=O)N=C2C1=N",
43
+ "CC(C)C(C#N)C1=NC=C2C=C(O)OC2=C1N",
44
+ "CCCC(CN=C1NCC2=C(C)SC=C12)C=O",
45
+ "CC(C)(C)CN=C1NCC2=CNC3=C2C1=CN3",
46
+ "CCCCC(N)C1=NC=C2CNCC2=C1I",
47
+ "CC(CC#C)NC1=NCC2=C(NC(=C2)C#C)N1",
48
+ "CCC#CCN=C1NCC2=CNC=C2N1",
49
+ "CCCC(C#N)C1N(C)C2=C(NC=C2)OC1=O",
50
+ "CC(C)(C)CN=C1NC=C2C=NC=C2SC1=N",
51
+ "CC(C)C(C#N)C1NCC2=CN=C(C=C12)C#N",
52
+ "CC(C)C(C#N)C1(N)CC2CN(C)CC2C1C",
53
+ "CCC(C)(C)N=C1NCC2=C(NC(C)=C2)C1O",
54
+ "CC(C)C(C)NC1=NCC2CNC(C)C(C2)C1",
55
+ "CCC(C)CN=C1NCC2C(N)C(C)C(C)C12",
56
+ "CCC(C)(C#N)C1=NC=C2CNC(C)C(C)N12",
57
+ "CC(C)C(C#N)C1NCC2=C(N=C(C)N2)C1C",
58
+ "CCC(C)(C)NC1=NCC2=C(N=C(C)N2)C1C",
59
+ "CCC(C)(C)N=C1N=CC2=CN(C)N=C2N1C",
60
+ "CC(C)CCN=C1NC=C2C=NC(=NN12)C#C",
61
+ "CC(C)C(CN=C1NCC2(CN=CO2)O1)C#N",
62
+ "CCC(CC)N=C1N(C)C2=C(NC(=O)S2)C1=O",
63
+ "CCCC(C#N)C1NCC2=C(N=CS2)S1(=O)=O",
64
+ "CCC(C)(C)NC1=NCC2=CNN=C2C(=N)N1",
65
+ "CC(C)CCN=C1NC=C2C(N)=NC(C)=C2S1",
66
+ "CCC(C)(C)NC1=NC=C2C(=N)N=CNC2=N1",
67
+ "CCC(CC)N=C1N(C)C2=C(NN=N2)C1=NO",
68
+ "CCC(C)(C)NC1=NCC2=CN=NN2CCC1",
69
+ "CCC(C)CN=C1N=CC2=CNN=NC2=N1",
70
+ "CCC(CCN)C1=NC=C2C(N)=NSC2=N1",
71
+ "CCC(C)(CN)C1NCC2=C(N)OC=C2C1C",
72
+ "CC(C)(CCN)C1=NC=C2C(=N)SN=C2C=N1",
73
+ "CC(C)(C)CNC1=NC=C2C(=N)SN=C2O1",
74
+ "CCC(C)C(N)C1=NCC2=C(O1)C=CC(=N)S2",
75
+ "CCCCCN=C1NCC2=C(O1)N=C(S2)C#N",
76
+ "CCC(C)(CNC1=NCC2=C(O1)SC=N2)C=O",
77
+ "CC#CC(CN)C1=NCC2=C(O1)SN=C2C",
78
+ "CCCC(C#N)C1NCC2COC1(C2)C(C)=O",
79
+ "CC(C)(C)C(N)C1(N)CC2COC1C(C)(C)C2",
80
+ "CCCC(C#N)C1NCC2COC1(C)CN2C",
81
+ "CCC(C)(C)N=C1N(C)C2COC1(C)OC2C",
82
+ "CC(C)CCN=C1NCC2=C(OC1=N)N=NN2",
83
+ "CCC(CC#N)(C1NCC2=COC=C12)N(C)C",
84
+ "CCCC(C)(N)C1NCC2=C(OC=C12)N(C)C",
85
+ "CC(C)(C)CNC1=NCC2=C(OCC1)N=CS2",
86
+ "CC#CCCN=C1NCC2=COC=C2C=C1",
87
+ "CCCCCNC1=NC=C2C(OCC2(C)O)=C1",
88
+ "CCC(C)(C#N)C1N(C)C2=COC=C2N=C1N",
89
+ "CCC(C)(C)N=C1NCC2(C)OC(CC12)=NC",
90
+ "CCC(C)(CN)C1NCC2C(O)CCC1C2C",
91
+ "CCCC(C)NC1=NCC2COCC(C1)C2C",
92
+ "CC(C)C(C)NC1=NCC2COCCC2(C)O1",
93
+ "CC(C)CC(N)C1=NC=C2COC(C)C(C)N12",
94
+ "CCC(C)(C)NC1=NCC2COC(C)(O1)C2N",
95
+ "CCCC(C)(N)C1=NC=C2COCCOC2=N1",
96
+ "CCCC(C)N=C1N(C)C2=COC(N)=C2C1=O",
97
+ "CCCCCNC1=NCC2(C)OC=NCCC12",
98
+ "CCC(C(C)N)C1=NC=C2COC(N)=NC2=C1",
99
+ "CCCC(C)NC1=NCC2(C)OC(=O)OC2O1",
100
+ "CCCCC(N)C1NCC2=CON=C2C1C#C",
101
+ "CC(C)C(C)N=C1NCC2=C(O)N(C)C=C2O1",
102
+ "CCCC(C)N=C1N=CC2=C(O)N(C)C=CN12",
103
+ "CC(C)C(C#N)C1=NC=C2C(O)=NSC2=C1O",
104
+ "CCC(CC)N=C1NCC2=C(O)SC(=N)N=C12",
105
+ "CC(C)C(CN)C1NCC2=C(SC=C2C)C1C",
106
+ ]
107
+
108
+ workflows = []
109
+ results = {}
110
+
111
+ protein = rowan.create_protein_from_pdb_id(
112
+ "CDK2", "1HCK", project_uuid=rowan.default_project().uuid
113
+ )
114
+
115
+ protein.sanitize()
116
+ time.sleep(60)
117
+ protein.refresh()
118
+
119
+ workflow = rowan.submit_batch_docking_workflow(
120
+ ligands,
121
+ protein.uuid,
122
+ pocket=[[103.55, 100.59, 82.99], [27.76, 32.67, 48.79]],
123
+ executable="qvina2",
124
+ scoring_function="vina",
125
+ )
126
+
127
+
128
+ workflow.wait_for_result().fetch_latest(in_place=True)
129
+
130
+ print(workflow.data["best_scores"])
@@ -0,0 +1,33 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ from stjames import MSAFormat
5
+
6
+ import rowan
7
+
8
+ # rowan.api_key = ""
9
+
10
+ msa_directory = Path("msa_directory")
11
+
12
+ msa_workflow = rowan.submit_msa_workflow(
13
+ initial_protein_sequences=[
14
+ "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
+ "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
+ ],
17
+ output_formats=[MSAFormat.BOLTZ],
18
+ name="Boltz Paired MSA Example",
19
+ )
20
+
21
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
22
+
23
+ msa_workflow.download_msa_files(MSAFormat.BOLTZ, path=msa_directory)
24
+
25
+ tar_path = next(msa_directory.glob("*.tar.gz"))
26
+ with tarfile.open(tar_path, "r") as tar_ref:
27
+ tar_ref.extractall(msa_directory)
28
+
29
+ tar_path.unlink()
30
+
31
+ # by default, the csv files are named seq_<index>.csv
32
+ # to use them for boltz, you need to set the msa path in the protein section of the boltz input
33
+ # yaml to the path of the relevant csv file
@@ -0,0 +1,32 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ from stjames import MSAFormat
5
+
6
+ import rowan
7
+
8
+ # rowan.api_key = ""
9
+
10
+ msa_directory = Path("msa_directory")
11
+
12
+ msa_workflow = rowan.submit_msa_workflow(
13
+ initial_protein_sequences=[
14
+ "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
+ ],
16
+ output_formats=[MSAFormat.BOLTZ],
17
+ name="Boltz MSA Example",
18
+ )
19
+
20
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
21
+
22
+ msa_workflow.download_msa_files(MSAFormat.BOLTZ, path=msa_directory)
23
+
24
+ tar_path = next(msa_directory.glob("*.tar.gz"))
25
+ with tarfile.open(tar_path, "r") as tar_ref:
26
+ tar_ref.extractall(msa_directory)
27
+
28
+ tar_path.unlink()
29
+
30
+ # by default, the csv files are named seq_<index>.csv
31
+ # to use them for boltz, you need to set the msa path in the protein section of the boltz input
32
+ # yaml to the path of the relevant csv file
@@ -0,0 +1,51 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ # from chai_lab.chai1 import run_inference
5
+ from stjames import MSAFormat
6
+
7
+ import rowan
8
+
9
+ # rowan.api_key = ""
10
+ example_fasta = (
11
+ ">protein|name=example-protein\n"
12
+ "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR\n"
13
+ ">protein|name=example-protein-2\n"
14
+ "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH\n"
15
+ )
16
+ fasta_path = Path("/tmp/input.fasta")
17
+ fasta_path.write_text(example_fasta)
18
+
19
+ output_dir = Path("/tmp/outputs")
20
+ msa_directory = Path("msa_directory")
21
+
22
+ msa_workflow = rowan.submit_msa_workflow(
23
+ initial_protein_sequences=[
24
+ "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
25
+ "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
26
+ ],
27
+ output_formats=[MSAFormat.CHAI],
28
+ name="CHAI Paired MSA Example",
29
+ )
30
+
31
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
32
+
33
+ msa_workflow.download_msa_files(MSAFormat.CHAI, path=msa_directory)
34
+
35
+ tar_path = next(msa_directory.glob("*.tar.gz"))
36
+ with tarfile.open(tar_path, "r") as tar_ref:
37
+ tar_ref.extractall(msa_directory)
38
+
39
+ tar_path.unlink()
40
+
41
+
42
+ # run_inference(fasta_file=fasta_path,
43
+ # output_dir=output_dir,
44
+ # num_trunk_recycles=3,
45
+ # num_diffn_timesteps=200,
46
+ # seed=42,
47
+ # device="cpu", # or "cuda:0"
48
+ # use_esm_embeddings=True,
49
+ # use_msa_server=False,
50
+ # use_templates_server=False,
51
+ # msa_directory=msa_directory)
@@ -0,0 +1,48 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ # from chai_lab.chai1 import run_inference
5
+ from stjames import MSAFormat
6
+
7
+ import rowan
8
+
9
+ # rowan.api_key = ""
10
+ example_fasta = (
11
+ ">protein|name=example-protein\n"
12
+ "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW\n"
13
+ )
14
+ fasta_path = Path("/tmp/input.fasta")
15
+ fasta_path.write_text(example_fasta)
16
+
17
+ output_dir = Path("/tmp/outputs_2")
18
+ msa_directory = Path("msa_directory")
19
+
20
+ msa_workflow = rowan.submit_msa_workflow(
21
+ initial_protein_sequences=[
22
+ "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
23
+ ],
24
+ output_formats=[MSAFormat.CHAI],
25
+ name="CHAI MSA Example",
26
+ )
27
+
28
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
29
+
30
+ msa_workflow.download_msa_files(MSAFormat.CHAI, path=msa_directory)
31
+
32
+ tar_path = next(msa_directory.glob("*.tar.gz"))
33
+ with tarfile.open(tar_path, "r") as tar_ref:
34
+ tar_ref.extractall(msa_directory)
35
+
36
+ tar_path.unlink()
37
+
38
+
39
+ # run_inference(fasta_file=fasta_path,
40
+ # output_dir=output_dir,
41
+ # num_trunk_recycles=3,
42
+ # num_diffn_timesteps=200,
43
+ # seed=42,
44
+ # device="cpu", # or "cuda:0"
45
+ # use_esm_embeddings=True,
46
+ # use_msa_server=False,
47
+ # use_templates_server=False,
48
+ # msa_directory=msa_directory)
@@ -0,0 +1,32 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ from stjames import MSAFormat
5
+
6
+ import rowan
7
+
8
+ # rowan.api_key = ""
9
+
10
+ msa_directory = Path("msa_directory")
11
+
12
+ msa_workflow = rowan.submit_msa_workflow(
13
+ initial_protein_sequences=[
14
+ "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
+ "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
+ ],
17
+ output_formats=[MSAFormat.COLABFOLD],
18
+ name="Colabfold Paired MSA Example",
19
+ )
20
+
21
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
22
+
23
+ msa_workflow.download_msa_files(MSAFormat.COLABFOLD, path=msa_directory)
24
+
25
+ tar_path = next(msa_directory.glob("*.tar.gz"))
26
+ with tarfile.open(tar_path, "r") as tar_ref:
27
+ tar_ref.extractall(msa_directory)
28
+
29
+ tar_path.unlink()
30
+
31
+ # This produces two folders, one with unparied msas called unpaired and one with paired msas
32
+ # called paired
@@ -0,0 +1,28 @@
1
+ import tarfile
2
+ from pathlib import Path
3
+
4
+ from stjames import MSAFormat
5
+
6
+ import rowan
7
+
8
+ # rowan.api_key = ""
9
+
10
+ msa_directory = Path("msa_directory")
11
+
12
+ msa_workflow = rowan.submit_msa_workflow(
13
+ initial_protein_sequences=[
14
+ "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
+ ],
16
+ output_formats=[MSAFormat.COLABFOLD],
17
+ name="Colabfold MSA Example",
18
+ )
19
+
20
+ msa_workflow.wait_for_result().fetch_latest(in_place=True)
21
+
22
+ msa_workflow.download_msa_files(MSAFormat.COLABFOLD, path=msa_directory)
23
+
24
+ tar_path = next(msa_directory.glob("*.tar.gz"))
25
+ with tarfile.open(tar_path, "r") as tar_ref:
26
+ tar_ref.extractall(msa_directory)
27
+
28
+ tar_path.unlink()
@@ -174,4 +174,4 @@
174
174
  "mulliken_spin_densities": null,
175
175
  "thermal_free_energy_corr": null
176
176
  }
177
- }
177
+ }
@@ -0,0 +1,58 @@
1
+ """
2
+ Run a double-ended transition state search using Rowan.
3
+
4
+ See documentation at: https://docs.rowansci.com/science/workflows/double-ended-ts-search
5
+ """
6
+
7
+ from stjames import Method, Molecule, Settings
8
+ from stjames.optimization.freezing_string_method import (
9
+ FSMInterpolation,
10
+ FSMOptimizationCoordinates,
11
+ FSMSettings,
12
+ )
13
+
14
+ import rowan
15
+
16
+ # rowan.api_key = ""
17
+ HCN = Molecule.from_xyz(
18
+ """\
19
+ H 0 0 -1.1
20
+ C 0 0 0
21
+ N 0 0 1.2""",
22
+ )
23
+ CNH = Molecule.from_xyz(
24
+ """\
25
+ H 0 0 2.3
26
+ C 0 0 0
27
+ N 0 0 1.2""",
28
+ )
29
+ fsm_settings = FSMSettings(
30
+ optimization_coordinates=FSMOptimizationCoordinates.CARTESIAN,
31
+ interpolation_method=FSMInterpolation.REDUNDANT_INTERNAL_COORDINATES,
32
+ min_num_nodes=7,
33
+ num_interpolation_points=5,
34
+ max_optimizer_iterations=3,
35
+ max_line_search_steps=2,
36
+ max_displacement=0.1,
37
+ )
38
+
39
+
40
+ # Run calculation remotely
41
+ result = rowan.submit_double_ended_ts_search_workflow(
42
+ reactant=HCN,
43
+ product=CNH,
44
+ calculation_settings=Settings(method=Method.GFN2_XTB),
45
+ search_settings=fsm_settings,
46
+ optimize_inputs=True,
47
+ optimize_ts=True,
48
+ name="H-C≡N Isomerization",
49
+ )
50
+
51
+ print(f"View workflow privately at: https://labs.rowansci.com/workflow/{result.uuid}")
52
+ result.wait_for_result().fetch_latest(in_place=True)
53
+
54
+ assert result and result.data
55
+ print(result.data["forward_string_distances"])
56
+ print(result.data["backward_string_distances"])
57
+
58
+ print(result)
@@ -14,9 +14,18 @@ import rowan
14
14
  # rowan.api_key = ""
15
15
 
16
16
  result = rowan.submit_pka_workflow(
17
- initial_molecule=Molecule.from_smiles("n1ccccc1"),
17
+ initial_molecule=Molecule.from_smiles("c1ccccc1O"),
18
+ method="aimnet2_wagen2024",
18
19
  mode="reckless",
19
20
  name="Pyridine pKa",
20
21
  )
21
22
 
22
23
  print(result.wait_for_result().fetch_latest(in_place=True))
24
+
25
+ result2 = rowan.submit_pka_workflow(
26
+ initial_molecule="c1ccccc1O",
27
+ method="chemprop_nevolianis2025",
28
+ name="Pyridine pKa (ML)",
29
+ )
30
+
31
+ print(result2.wait_for_result().fetch_latest(in_place=True))
@@ -0,0 +1,28 @@
1
+ import rowan
2
+
3
+ ligand = "CCC(C)(C)NC1=NCC2(CCC(=O)C2C)N1"
4
+
5
+ cofolding_workflow = rowan.submit_protein_cofolding_workflow(
6
+ initial_protein_sequences=[
7
+ "MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL"
8
+ ],
9
+ initial_smiles_list=[ligand],
10
+ ligand_binding_affinity_index=0,
11
+ name=f"Cofolding {ligand}",
12
+ do_pose_refinement=True,
13
+ )
14
+
15
+ cofolding_workflow.wait_for_result().fetch_latest(in_place=True)
16
+
17
+ md_workflow = rowan.submit_pose_analysis_md_workflow(
18
+ protein=cofolding_workflow.data["predicted_refined_structure_uuid"],
19
+ initial_smiles=ligand,
20
+ num_trajectories=1,
21
+ simulation_time_ns=1,
22
+ name="Downstream molecular dynamics",
23
+ )
24
+
25
+ md_workflow.wait_for_result().fetch_latest(in_place=True)
26
+
27
+ # print ligand RMSD by frame
28
+ print(md_workflow.data["trajectories"][0]["rmsd"])
@@ -24,8 +24,8 @@ plugins:
24
24
  show_signature_annotations: false
25
25
  merge_init_into_class: true # if you want __init__ docs on the class
26
26
  separate_signature: true # uses Black if it’s on your PATH
27
- line_length: 88
28
- unwrap_annotated: true
27
+ line_length: 88
28
+ unwrap_annotated: true
29
29
  nav:
30
30
  - Core API: index.md
31
31
  - Rowan RDKit: rowan_rdkit.md