rowan-mcp 1.0.2__py3-none-any.whl → 2.0.0__py3-none-any.whl
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.
Potentially problematic release.
This version of rowan-mcp might be problematic. Click here for more details.
- rowan_mcp/__init__.py +1 -1
- rowan_mcp/__main__.py +3 -5
- rowan_mcp/functions_v2/BENCHMARK.md +86 -0
- rowan_mcp/functions_v2/molecule_lookup.py +232 -0
- rowan_mcp/functions_v2/protein_management.py +141 -0
- rowan_mcp/functions_v2/submit_basic_calculation_workflow.py +195 -0
- rowan_mcp/functions_v2/submit_conformer_search_workflow.py +158 -0
- rowan_mcp/functions_v2/submit_descriptors_workflow.py +52 -0
- rowan_mcp/functions_v2/submit_docking_workflow.py +244 -0
- rowan_mcp/functions_v2/submit_fukui_workflow.py +114 -0
- rowan_mcp/functions_v2/submit_irc_workflow.py +58 -0
- rowan_mcp/functions_v2/submit_macropka_workflow.py +99 -0
- rowan_mcp/functions_v2/submit_pka_workflow.py +72 -0
- rowan_mcp/functions_v2/submit_protein_cofolding_workflow.py +88 -0
- rowan_mcp/functions_v2/submit_redox_potential_workflow.py +55 -0
- rowan_mcp/functions_v2/submit_scan_workflow.py +82 -0
- rowan_mcp/functions_v2/submit_solubility_workflow.py +157 -0
- rowan_mcp/functions_v2/submit_tautomer_search_workflow.py +51 -0
- rowan_mcp/functions_v2/workflow_management_v2.py +382 -0
- rowan_mcp/server.py +109 -144
- rowan_mcp/tests/basic_calculation_from_json.py +0 -0
- rowan_mcp/tests/basic_calculation_with_constraint.py +33 -0
- rowan_mcp/tests/basic_calculation_with_solvent.py +0 -0
- rowan_mcp/tests/bde.py +37 -0
- rowan_mcp/tests/benchmark_queries.md +120 -0
- rowan_mcp/tests/cofolding_screen.py +131 -0
- rowan_mcp/tests/conformer_dependent_redox.py +37 -0
- rowan_mcp/tests/conformers.py +31 -0
- rowan_mcp/tests/data.json +189 -0
- rowan_mcp/tests/docking_screen.py +157 -0
- rowan_mcp/tests/irc.py +24 -0
- rowan_mcp/tests/macropka.py +13 -0
- rowan_mcp/tests/multistage_opt.py +13 -0
- rowan_mcp/tests/optimization.py +21 -0
- rowan_mcp/tests/phenol_pka.py +36 -0
- rowan_mcp/tests/pka.py +36 -0
- rowan_mcp/tests/protein_cofolding.py +17 -0
- rowan_mcp/tests/scan.py +28 -0
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.0.dist-info}/METADATA +41 -33
- rowan_mcp-2.0.0.dist-info/RECORD +42 -0
- rowan_mcp/functions/admet.py +0 -94
- rowan_mcp/functions/bde.py +0 -113
- rowan_mcp/functions/calculation_retrieve.py +0 -89
- rowan_mcp/functions/conformers.py +0 -80
- rowan_mcp/functions/descriptors.py +0 -92
- rowan_mcp/functions/docking.py +0 -340
- rowan_mcp/functions/docking_enhanced.py +0 -174
- rowan_mcp/functions/electronic_properties.py +0 -205
- rowan_mcp/functions/folder_management.py +0 -137
- rowan_mcp/functions/fukui.py +0 -219
- rowan_mcp/functions/hydrogen_bond_basicity.py +0 -94
- rowan_mcp/functions/irc.py +0 -125
- rowan_mcp/functions/macropka.py +0 -120
- rowan_mcp/functions/molecular_converter.py +0 -423
- rowan_mcp/functions/molecular_dynamics.py +0 -191
- rowan_mcp/functions/molecule_lookup.py +0 -57
- rowan_mcp/functions/multistage_opt.py +0 -171
- rowan_mcp/functions/pdb_handler.py +0 -200
- rowan_mcp/functions/pka.py +0 -88
- rowan_mcp/functions/redox_potential.py +0 -352
- rowan_mcp/functions/scan.py +0 -536
- rowan_mcp/functions/scan_analyzer.py +0 -347
- rowan_mcp/functions/solubility.py +0 -277
- rowan_mcp/functions/spin_states.py +0 -747
- rowan_mcp/functions/system_management.py +0 -368
- rowan_mcp/functions/tautomers.py +0 -91
- rowan_mcp/functions/workflow_management.py +0 -422
- rowan_mcp-1.0.2.dist-info/RECORD +0 -34
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.0.dist-info}/WHEEL +0 -0
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from stjames import Molecule
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# rowan.api_key = ""
|
|
6
|
+
|
|
7
|
+
result = rowan.submit_workflow(
|
|
8
|
+
initial_molecule=Molecule.from_smiles("CCCC"),
|
|
9
|
+
workflow_type="basic_calculation",
|
|
10
|
+
name="Constrained Butane",
|
|
11
|
+
workflow_data={
|
|
12
|
+
"engine": "xtb",
|
|
13
|
+
"settings": {
|
|
14
|
+
"method": "gfn2_xtb",
|
|
15
|
+
"tasks": ["optimize"],
|
|
16
|
+
"mode": "auto",
|
|
17
|
+
"opt_settings": {
|
|
18
|
+
"constraints": [
|
|
19
|
+
{
|
|
20
|
+
"atoms": [4, 3, 2, 1],
|
|
21
|
+
"constraint_type": "dihedral",
|
|
22
|
+
"value": 0,
|
|
23
|
+
},
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
result.wait_for_result()
|
|
31
|
+
result.fetch_latest(in_place=True)
|
|
32
|
+
|
|
33
|
+
print(result)
|
|
File without changes
|
rowan_mcp/tests/bde.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
from stjames import Molecule
|
|
18
|
+
|
|
19
|
+
import rowan
|
|
20
|
+
|
|
21
|
+
# rowan.api_key = ""
|
|
22
|
+
|
|
23
|
+
# Run calculation remotely
|
|
24
|
+
result = rowan.submit_workflow(
|
|
25
|
+
initial_molecule=Molecule.from_smiles("CCCC"),
|
|
26
|
+
workflow_type="bde",
|
|
27
|
+
name="Butane BDE",
|
|
28
|
+
workflow_data={
|
|
29
|
+
"mode": "reckless",
|
|
30
|
+
"all_CH": "true",
|
|
31
|
+
},
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
result.wait_for_result()
|
|
35
|
+
result.fetch_latest(in_place=True)
|
|
36
|
+
|
|
37
|
+
print(result)
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Rowan MCP Benchmark Queries
|
|
2
|
+
|
|
3
|
+
## Tier 1: Single Tool Calls
|
|
4
|
+
|
|
5
|
+
### Basic Calculation
|
|
6
|
+
1. "Optimize the geometry of water"
|
|
7
|
+
2. "Calculate the energy of methane using GFN2-xTB"
|
|
8
|
+
|
|
9
|
+
### Conformer Search
|
|
10
|
+
3. "Find the conformers of diethyl ether"
|
|
11
|
+
4. "Search for low-energy conformations of butane"
|
|
12
|
+
|
|
13
|
+
### pKa
|
|
14
|
+
5. "Calculate the pKa of phenol"
|
|
15
|
+
6. "What's the pKa of acetic acid?"
|
|
16
|
+
|
|
17
|
+
### Redox Potential
|
|
18
|
+
7. "Calculate the oxidation potential of benzene"
|
|
19
|
+
8. "Find the reduction potential of quinone"
|
|
20
|
+
|
|
21
|
+
### Solubility
|
|
22
|
+
9. "Predict the solubility of aspirin in water"
|
|
23
|
+
10. "What's the solubility of caffeine in ethanol?"
|
|
24
|
+
|
|
25
|
+
### Descriptors
|
|
26
|
+
11. "Calculate molecular descriptors for ibuprofen"
|
|
27
|
+
|
|
28
|
+
### Tautomers
|
|
29
|
+
12. "Find the tautomers of 2-hydroxypyridine"
|
|
30
|
+
|
|
31
|
+
### Scan
|
|
32
|
+
13. "Perform an angle scan on water from 100 to 110 degrees"
|
|
33
|
+
|
|
34
|
+
### IRC
|
|
35
|
+
14. "Run an IRC calculation from this transition state: [provide XYZ]"
|
|
36
|
+
|
|
37
|
+
### Fukui
|
|
38
|
+
15. "Calculate Fukui indices for aniline"
|
|
39
|
+
|
|
40
|
+
### Docking
|
|
41
|
+
16. "Dock aspirin to CDK2 kinase"
|
|
42
|
+
|
|
43
|
+
### Protein Cofolding
|
|
44
|
+
17. "Predict the structure of CDK2 with a small molecule ligand"
|
|
45
|
+
|
|
46
|
+
## Tier 2: Parameter Interpretation
|
|
47
|
+
|
|
48
|
+
### Basic Calculation with Modes
|
|
49
|
+
18. "Carefully optimize ethanol geometry"
|
|
50
|
+
19. "Run a meticulous energy calculation on benzene"
|
|
51
|
+
|
|
52
|
+
### Conformer Search with Settings
|
|
53
|
+
20. "Find conformers of cyclohexane using meticulous mode"
|
|
54
|
+
|
|
55
|
+
### pKa with Specific Sites
|
|
56
|
+
21. "Calculate the pKa of lysine, only looking at nitrogen atoms"
|
|
57
|
+
22. "Find the pKa of phosphoric acid between pH 1 and 14"
|
|
58
|
+
|
|
59
|
+
### Redox with Both Potentials
|
|
60
|
+
23. "Calculate both oxidation and reduction potentials for ferrocene"
|
|
61
|
+
|
|
62
|
+
### Solubility with Temperature
|
|
63
|
+
24. "Predict caffeine solubility in water at 25 and 50 degrees Celsius"
|
|
64
|
+
|
|
65
|
+
### Scan with Custom Parameters
|
|
66
|
+
25. "Scan the C-C bond in ethane from 1.3 to 1.7 Angstroms with 10 points"
|
|
67
|
+
|
|
68
|
+
### Docking with Options
|
|
69
|
+
26. "Dock ibuprofen to COX-2 without conformational search"
|
|
70
|
+
|
|
71
|
+
## Tier 3: Batch Operations
|
|
72
|
+
|
|
73
|
+
### Multiple Molecules
|
|
74
|
+
27. "Calculate pKa values for phenol, p-nitrophenol, and p-methoxyphenol"
|
|
75
|
+
28. "Find conformers for butane, pentane, and hexane"
|
|
76
|
+
29. "Calculate oxidation potentials for benzene, toluene, and xylene"
|
|
77
|
+
|
|
78
|
+
### Multiple Methods
|
|
79
|
+
30. "Optimize water with GFN2-xTB, UMA, and R2SCAN-3c"
|
|
80
|
+
31. "Calculate ethanol energy using both rapid and careful modes"
|
|
81
|
+
|
|
82
|
+
### Comparative Analysis
|
|
83
|
+
32. "Compare the solubility of aspirin in water, ethanol, and acetone"
|
|
84
|
+
33. "Screen these three molecules for docking to CDK2: [provide 3 SMILES]"
|
|
85
|
+
|
|
86
|
+
## Tier 4: Workflow Chaining
|
|
87
|
+
|
|
88
|
+
### Conformer-Dependent Properties
|
|
89
|
+
34. "Find conformers of p-methoxybenzophenone, then calculate redox potential for the lowest energy conformer"
|
|
90
|
+
35. "Generate conformers of butanol, then calculate pKa for the top 3 structures"
|
|
91
|
+
|
|
92
|
+
### Optimization to IRC
|
|
93
|
+
36. "Optimize this transition state geometry [XYZ], then run IRC from the result"
|
|
94
|
+
|
|
95
|
+
### Scan to Property
|
|
96
|
+
37. "Perform a dihedral scan on butane, then calculate the energy of the highest energy point"
|
|
97
|
+
|
|
98
|
+
### Sequential Docking
|
|
99
|
+
38. "Find conformers of a ligand, then dock the best conformer to CDK2"
|
|
100
|
+
|
|
101
|
+
## Tier 5: Conditional Logic
|
|
102
|
+
|
|
103
|
+
### Threshold-Based Analysis
|
|
104
|
+
39. "Screen 5 molecules against CDK2, only run detailed conformer analysis for those with scores better than -8.0"
|
|
105
|
+
40. "Calculate pKa for histidine, if any site has pKa between 6-8, run a conformer search at that pH"
|
|
106
|
+
|
|
107
|
+
### Outlier Detection
|
|
108
|
+
41. "Find all conformers of cyclohexanol, calculate energies, and recalculate any conformer more than 3 kcal/mol above the minimum with meticulous mode"
|
|
109
|
+
|
|
110
|
+
### Multi-Stage Screening
|
|
111
|
+
42. "Calculate descriptors for these 10 molecules, identify those with logP > 2, then calculate their pKa values"
|
|
112
|
+
|
|
113
|
+
### Error Recovery
|
|
114
|
+
43. "Optimize this complex molecule, if it fails with rapid mode, retry with careful mode"
|
|
115
|
+
|
|
116
|
+
## Notes
|
|
117
|
+
- Queries intentionally use varied phrasing (calculate/find/predict/what's)
|
|
118
|
+
- Mix of SMILES, common names, and descriptive terms
|
|
119
|
+
- Each science tool appears at least once
|
|
120
|
+
- Workflow management tools used implicitly in Tiers 4-5
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
HARTREE_TO_KCALMOL = 627.5096
|
|
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
|
+
cofolding_result_folder = rowan.create_folder(name="Cofolding results")
|
|
111
|
+
|
|
112
|
+
for ligand in ligands:
|
|
113
|
+
workflow = rowan.submit_protein_cofolding_workflow(
|
|
114
|
+
initial_protein_sequences=[
|
|
115
|
+
"MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL"
|
|
116
|
+
],
|
|
117
|
+
initial_smiles_list=[ligand],
|
|
118
|
+
ligand_binding_affinity_index=0,
|
|
119
|
+
name=f"Cofolding {ligand}",
|
|
120
|
+
folder_uuid=cofolding_result_folder.uuid,
|
|
121
|
+
)
|
|
122
|
+
workflows.append(workflow)
|
|
123
|
+
|
|
124
|
+
for workflow in workflows:
|
|
125
|
+
workflow.wait_for_result()
|
|
126
|
+
workflow.fetch_latest(in_place=True)
|
|
127
|
+
|
|
128
|
+
for workflow in workflows:
|
|
129
|
+
results[workflow.name] = workflow.data["affinity_score"]["probability_binary"]
|
|
130
|
+
|
|
131
|
+
print(results)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import stjames
|
|
2
|
+
from stjames import Molecule
|
|
3
|
+
|
|
4
|
+
import rowan
|
|
5
|
+
|
|
6
|
+
# rowan.api_key = ""
|
|
7
|
+
|
|
8
|
+
conformer_dependent_redox_folder = rowan.create_folder(name="Conformer dependent redox results")
|
|
9
|
+
|
|
10
|
+
result = rowan.submit_conformer_search_workflow(
|
|
11
|
+
initial_molecule=Molecule.from_smiles("CC(C)Cc1ccc(C(=O)c2ccc(O)cc2)cc1"),
|
|
12
|
+
folder_uuid=conformer_dependent_redox_folder.uuid,
|
|
13
|
+
)
|
|
14
|
+
result.wait_for_result()
|
|
15
|
+
result.fetch_latest(in_place=True)
|
|
16
|
+
|
|
17
|
+
redox_potential_workflows = []
|
|
18
|
+
|
|
19
|
+
for conformer in result.data["conformer_uuids"][:10]:
|
|
20
|
+
uuid = conformer[0]
|
|
21
|
+
molecule = rowan.retrieve_calculation_molecules(uuid)[0]
|
|
22
|
+
stjames_molecule = stjames.Molecule.model_validate(molecule)
|
|
23
|
+
redox_potential_workflows.append(
|
|
24
|
+
rowan.submit_redox_potential_workflow(
|
|
25
|
+
stjames_molecule,
|
|
26
|
+
reduction=True,
|
|
27
|
+
oxidization=True,
|
|
28
|
+
folder_uuid=conformer_dependent_redox_folder.uuid,
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
for workflow in redox_potential_workflows:
|
|
33
|
+
workflow.wait_for_result()
|
|
34
|
+
workflow.fetch_latest(in_place=True)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
print([workflow.data["redox_potential"] for workflow in redox_potential_workflows])
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
from stjames import Molecule
|
|
21
|
+
|
|
22
|
+
import rowan
|
|
23
|
+
|
|
24
|
+
# rowan.api_key = ""
|
|
25
|
+
|
|
26
|
+
# Run calculation remotely
|
|
27
|
+
result = rowan.submit_conformer_search_workflow(
|
|
28
|
+
initial_molecule=Molecule.from_smiles("CCOCC"),
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
print(result)
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mode": "auto",
|
|
3
|
+
"engine": "xtb",
|
|
4
|
+
"messages": [],
|
|
5
|
+
"settings": {
|
|
6
|
+
"mode": "rapid",
|
|
7
|
+
"tasks": [
|
|
8
|
+
"optimize"
|
|
9
|
+
],
|
|
10
|
+
"method": "gfn2_xtb",
|
|
11
|
+
"basis_set": null,
|
|
12
|
+
"corrections": [],
|
|
13
|
+
"opt_settings": {
|
|
14
|
+
"max_steps": 250,
|
|
15
|
+
"constraints": [
|
|
16
|
+
{
|
|
17
|
+
"atoms": [
|
|
18
|
+
4,
|
|
19
|
+
3,
|
|
20
|
+
2,
|
|
21
|
+
1
|
|
22
|
+
],
|
|
23
|
+
"value": 0,
|
|
24
|
+
"constraint_type": "dihedral"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"optimize_cell": false,
|
|
28
|
+
"energy_threshold": 0.00005,
|
|
29
|
+
"transition_state": false,
|
|
30
|
+
"recalc_hess_every": 0,
|
|
31
|
+
"max_gradient_threshold": 0.005,
|
|
32
|
+
"rms_gradient_threshold": 0.0035
|
|
33
|
+
},
|
|
34
|
+
"scf_settings": {
|
|
35
|
+
"soscf": false,
|
|
36
|
+
"max_iters": 250
|
|
37
|
+
},
|
|
38
|
+
"level_of_theory": "gfn2_xtb",
|
|
39
|
+
"compute_settings": {
|
|
40
|
+
"compute_type_used": null,
|
|
41
|
+
"requested_compute_type": "cpu"
|
|
42
|
+
},
|
|
43
|
+
"solvent_settings": null,
|
|
44
|
+
"thermochem_settings": {
|
|
45
|
+
"temperature": 298,
|
|
46
|
+
"concentration": 0.0408740470708,
|
|
47
|
+
"scaling_factor": 1,
|
|
48
|
+
"cutoff_frequency": 100
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"calculation_uuid": "54027970-5efb-42df-8125-c8984d8ca7eb",
|
|
52
|
+
"initial_molecule": {
|
|
53
|
+
"cell": null,
|
|
54
|
+
"atoms": [
|
|
55
|
+
{
|
|
56
|
+
"position": [
|
|
57
|
+
-1.57731622,
|
|
58
|
+
0.46259034,
|
|
59
|
+
0.02288227
|
|
60
|
+
],
|
|
61
|
+
"atomic_number": 6
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"position": [
|
|
65
|
+
-0.55246934,
|
|
66
|
+
-0.31349805,
|
|
67
|
+
-0.78986664
|
|
68
|
+
],
|
|
69
|
+
"atomic_number": 6
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"position": [
|
|
73
|
+
0.65178196,
|
|
74
|
+
-0.77563238,
|
|
75
|
+
0.03104792
|
|
76
|
+
],
|
|
77
|
+
"atomic_number": 6
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"position": [
|
|
81
|
+
1.5013315,
|
|
82
|
+
0.37070813,
|
|
83
|
+
0.55769072
|
|
84
|
+
],
|
|
85
|
+
"atomic_number": 6
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"position": [
|
|
89
|
+
-1.17009891,
|
|
90
|
+
1.41344062,
|
|
91
|
+
0.37886292
|
|
92
|
+
],
|
|
93
|
+
"atomic_number": 1
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"position": [
|
|
97
|
+
-1.91277475,
|
|
98
|
+
-0.11690438,
|
|
99
|
+
0.88874548
|
|
100
|
+
],
|
|
101
|
+
"atomic_number": 1
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"position": [
|
|
105
|
+
-2.45332233,
|
|
106
|
+
0.68757176,
|
|
107
|
+
-0.59399069
|
|
108
|
+
],
|
|
109
|
+
"atomic_number": 1
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"position": [
|
|
113
|
+
-0.21575239,
|
|
114
|
+
0.30052639,
|
|
115
|
+
-1.63326648
|
|
116
|
+
],
|
|
117
|
+
"atomic_number": 1
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"position": [
|
|
121
|
+
-1.04230601,
|
|
122
|
+
-1.19688302,
|
|
123
|
+
-1.21658189
|
|
124
|
+
],
|
|
125
|
+
"atomic_number": 1
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"position": [
|
|
129
|
+
0.31558706,
|
|
130
|
+
-1.39539838,
|
|
131
|
+
0.87044712
|
|
132
|
+
],
|
|
133
|
+
"atomic_number": 1
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"position": [
|
|
137
|
+
1.28031633,
|
|
138
|
+
-1.41330121,
|
|
139
|
+
-0.60197473
|
|
140
|
+
],
|
|
141
|
+
"atomic_number": 1
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"position": [
|
|
145
|
+
2.39258685,
|
|
146
|
+
-0.02154188,
|
|
147
|
+
1.05803044
|
|
148
|
+
],
|
|
149
|
+
"atomic_number": 1
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"position": [
|
|
153
|
+
0.95227634,
|
|
154
|
+
0.97534316,
|
|
155
|
+
1.28543953
|
|
156
|
+
],
|
|
157
|
+
"atomic_number": 1
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"position": [
|
|
161
|
+
1.83015992,
|
|
162
|
+
1.0229789,
|
|
163
|
+
-0.25746596
|
|
164
|
+
],
|
|
165
|
+
"atomic_number": 1
|
|
166
|
+
}
|
|
167
|
+
],
|
|
168
|
+
"charge": 0,
|
|
169
|
+
"dipole": null,
|
|
170
|
+
"energy": null,
|
|
171
|
+
"smiles": "CCCC",
|
|
172
|
+
"stress": null,
|
|
173
|
+
"elapsed": null,
|
|
174
|
+
"gradient": null,
|
|
175
|
+
"velocities": null,
|
|
176
|
+
"multiplicity": 1,
|
|
177
|
+
"homo_lumo_gap": null,
|
|
178
|
+
"scf_completed": null,
|
|
179
|
+
"scf_iterations": null,
|
|
180
|
+
"mulliken_charges": null,
|
|
181
|
+
"calculation_index": null,
|
|
182
|
+
"vibrational_modes": null,
|
|
183
|
+
"zero_point_energy": null,
|
|
184
|
+
"thermal_energy_corr": null,
|
|
185
|
+
"thermal_enthalpy_corr": null,
|
|
186
|
+
"mulliken_spin_densities": null,
|
|
187
|
+
"thermal_free_energy_corr": null
|
|
188
|
+
}
|
|
189
|
+
}
|