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.

Files changed (70) hide show
  1. rowan_mcp/__init__.py +1 -1
  2. rowan_mcp/__main__.py +3 -5
  3. rowan_mcp/functions_v2/BENCHMARK.md +86 -0
  4. rowan_mcp/functions_v2/molecule_lookup.py +232 -0
  5. rowan_mcp/functions_v2/protein_management.py +141 -0
  6. rowan_mcp/functions_v2/submit_basic_calculation_workflow.py +195 -0
  7. rowan_mcp/functions_v2/submit_conformer_search_workflow.py +158 -0
  8. rowan_mcp/functions_v2/submit_descriptors_workflow.py +52 -0
  9. rowan_mcp/functions_v2/submit_docking_workflow.py +244 -0
  10. rowan_mcp/functions_v2/submit_fukui_workflow.py +114 -0
  11. rowan_mcp/functions_v2/submit_irc_workflow.py +58 -0
  12. rowan_mcp/functions_v2/submit_macropka_workflow.py +99 -0
  13. rowan_mcp/functions_v2/submit_pka_workflow.py +72 -0
  14. rowan_mcp/functions_v2/submit_protein_cofolding_workflow.py +88 -0
  15. rowan_mcp/functions_v2/submit_redox_potential_workflow.py +55 -0
  16. rowan_mcp/functions_v2/submit_scan_workflow.py +82 -0
  17. rowan_mcp/functions_v2/submit_solubility_workflow.py +157 -0
  18. rowan_mcp/functions_v2/submit_tautomer_search_workflow.py +51 -0
  19. rowan_mcp/functions_v2/workflow_management_v2.py +382 -0
  20. rowan_mcp/server.py +109 -144
  21. rowan_mcp/tests/basic_calculation_from_json.py +0 -0
  22. rowan_mcp/tests/basic_calculation_with_constraint.py +33 -0
  23. rowan_mcp/tests/basic_calculation_with_solvent.py +0 -0
  24. rowan_mcp/tests/bde.py +37 -0
  25. rowan_mcp/tests/benchmark_queries.md +120 -0
  26. rowan_mcp/tests/cofolding_screen.py +131 -0
  27. rowan_mcp/tests/conformer_dependent_redox.py +37 -0
  28. rowan_mcp/tests/conformers.py +31 -0
  29. rowan_mcp/tests/data.json +189 -0
  30. rowan_mcp/tests/docking_screen.py +157 -0
  31. rowan_mcp/tests/irc.py +24 -0
  32. rowan_mcp/tests/macropka.py +13 -0
  33. rowan_mcp/tests/multistage_opt.py +13 -0
  34. rowan_mcp/tests/optimization.py +21 -0
  35. rowan_mcp/tests/phenol_pka.py +36 -0
  36. rowan_mcp/tests/pka.py +36 -0
  37. rowan_mcp/tests/protein_cofolding.py +17 -0
  38. rowan_mcp/tests/scan.py +28 -0
  39. {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.0.dist-info}/METADATA +41 -33
  40. rowan_mcp-2.0.0.dist-info/RECORD +42 -0
  41. rowan_mcp/functions/admet.py +0 -94
  42. rowan_mcp/functions/bde.py +0 -113
  43. rowan_mcp/functions/calculation_retrieve.py +0 -89
  44. rowan_mcp/functions/conformers.py +0 -80
  45. rowan_mcp/functions/descriptors.py +0 -92
  46. rowan_mcp/functions/docking.py +0 -340
  47. rowan_mcp/functions/docking_enhanced.py +0 -174
  48. rowan_mcp/functions/electronic_properties.py +0 -205
  49. rowan_mcp/functions/folder_management.py +0 -137
  50. rowan_mcp/functions/fukui.py +0 -219
  51. rowan_mcp/functions/hydrogen_bond_basicity.py +0 -94
  52. rowan_mcp/functions/irc.py +0 -125
  53. rowan_mcp/functions/macropka.py +0 -120
  54. rowan_mcp/functions/molecular_converter.py +0 -423
  55. rowan_mcp/functions/molecular_dynamics.py +0 -191
  56. rowan_mcp/functions/molecule_lookup.py +0 -57
  57. rowan_mcp/functions/multistage_opt.py +0 -171
  58. rowan_mcp/functions/pdb_handler.py +0 -200
  59. rowan_mcp/functions/pka.py +0 -88
  60. rowan_mcp/functions/redox_potential.py +0 -352
  61. rowan_mcp/functions/scan.py +0 -536
  62. rowan_mcp/functions/scan_analyzer.py +0 -347
  63. rowan_mcp/functions/solubility.py +0 -277
  64. rowan_mcp/functions/spin_states.py +0 -747
  65. rowan_mcp/functions/system_management.py +0 -368
  66. rowan_mcp/functions/tautomers.py +0 -91
  67. rowan_mcp/functions/workflow_management.py +0 -422
  68. rowan_mcp-1.0.2.dist-info/RECORD +0 -34
  69. {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.0.dist-info}/WHEEL +0 -0
  70. {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
+ }