rowan-python 3.1.14__tar.gz → 3.1.16__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-3.1.14 → rowan_python-3.1.16}/.gitignore +5 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/AGENTS.md +9 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/PKG-INFO +19 -2
- {rowan_python-3.1.14 → rowan_python-3.1.16}/README.md +17 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/analogue-docking.md +3 -0
- rowan_python-3.1.16/docs/workflows/basic-calculation.md +35 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/batch-docking.md +4 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/docking.md +10 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/settings.md +15 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/types.md +45 -9
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/binding_affinity.py +1 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/docking.py +3 -3
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/electronic_properties.py +3 -1
- rowan_python-3.1.16/examples/induced_fit_docking.py +61 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/pose_analysis_md.py +6 -2
- rowan_python-3.1.16/examples/protein_cofolding_modified_inputs.py +44 -0
- rowan_python-3.1.14/examples/pdb_download.py → rowan_python-3.1.16/examples/protein_file_download.py +5 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_md.py +4 -0
- rowan_python-3.1.16/examples/temporary_workflow_sharing.py +19 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/pixi.lock +276 -276
- {rowan_python-3.1.14 → rowan_python-3.1.16}/pyproject.toml +2 -2
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/__init__.py +8 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/protein.py +86 -21
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/__init__.py +6 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/_molecular_dynamics.py +35 -29
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/analogue_docking.py +1 -4
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/base.py +77 -4
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/batch_docking.py +31 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/binding_affinity.py +8 -12
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/docking.py +66 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/electronic_properties.py +14 -13
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/pose_analysis_md.py +13 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/protein_cofolding.py +24 -7
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/protein_md.py +9 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/solvent_dependent_conformers.py +8 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/tautomer_search.py +7 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/SKILL.md +1 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +5 -6
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/batch_docking.md +8 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +3 -3
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/docking.md +24 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +4 -4
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +12 -5
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/protein_md.md +4 -4
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/python_sdk.md +20 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +2 -1
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +1 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_binding_affinity.py +3 -2
- rowan_python-3.1.16/tests/test_cofolding_workflow_updates.py +121 -0
- rowan_python-3.1.16/tests/test_docking_workflow.py +150 -0
- rowan_python-3.1.16/tests/test_docking_workflow_updates.py +117 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_md_workflow_updates.py +97 -13
- rowan_python-3.1.16/tests/test_protein.py +66 -0
- rowan_python-3.1.16/tests/test_solvent_dependent_conformers.py +87 -0
- rowan_python-3.1.16/tests/test_tautomer_search.py +51 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_workflow_submission.py +76 -0
- rowan_python-3.1.14/docs/workflows/basic-calculation.md +0 -11
- rowan_python-3.1.14/tests/test_protein.py +0 -39
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.agents/plugins/marketplace.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.claude-plugin/marketplace.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.codex-plugin/plugin.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.envrc +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.github/workflows/build-and-deploy-docs.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.github/workflows/publish-skill.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.github/workflows/python-publish.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.github/workflows/test.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/.pre-commit-config.yaml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/CLAUDE.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/GEMINI.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/LICENSE +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/api-keys.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/calculation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/folder.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/molecule.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/project.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/protein.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/user.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/webhooks.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/api/workflow.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/images/RowanLogoLarge.png +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/images/RowanSquareLogo.png +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/images/favicon.svg +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/index.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/stylesheets/colors.css +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/admet.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/binding-affinity.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/bond-dissociation-energy.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/conformer-search-settings.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/conformer-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/covalent-inhibitor-scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/descriptors.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/double-ended-ts-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/electronic-properties.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/fukui.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/hydrogen-bond-donor-acceptor-strength.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/interaction-energy-decomposition.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/ion-mobility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/irc.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/logp.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/macropka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/membrane-permeability.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/msa.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/multistage-optimization.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/nmr.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/pka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/pocket-detection.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/pose-analysis-md.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/protein-binder-design.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/protein-cofolding.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/protein-md.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/protein-preparation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/rbfe-graph.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/redox-potential.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/relative-binding-free-energy-perturbation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/solubility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/solvent-dependent-conformers.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/spin-states.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/strain.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/docs/workflows/tautomer-search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/PROTAC_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/admet.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/analogue_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/aqueous_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/basic_calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/basic_calculation_from_json.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/basic_calculation_with_constraint.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/basic_calculation_with_solvent.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/batch_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/batch_solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/bde.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/boltz_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/boltz_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/chai_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/chai_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/cofolding_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/colabfold_paired_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/colabfold_single_msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/conformer_dependent_redox.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/conformers.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/conformers_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/covalent_docking.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/covalent_inhibitor_scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/1iep_receptorH.pdb +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/Al_FCC.xyz +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/citalopram_1iep.xyz +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/ibuprofen_conformers.sdf +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/tyk2_ligands.sdf +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/tyk2_structure.pdb +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/data/workflow_example.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/dcd_download.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/descriptors.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/docking_screen.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/estimate_workflow.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/fukui_index.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/hydrogen_bond_basicity.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/ion_mobility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/irc.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/logp.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/macropka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/membrane_permeability.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/multistage_optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/periodic_dft.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/phenol_pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/pocket_detection.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/project_scoped_api_key.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_binder_design.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_cofolding.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_cofolding_with_constraints.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_cofolding_with_templates.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/protein_preparation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/rbfe_graph.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/rbfe_resubmit.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/redox_potential.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/relative_binding_free_energy_perturbation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/resubmit_with_perturbations.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/retrieve_workflow.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/solvent_dependent_conformers.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/spin_states.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/strain.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/tautomer.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/template.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/examples/webhook.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/mkdocs.yml +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/api_keys.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/config.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/constants.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/folder.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/molecule.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/project.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/py.typed +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/types.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/user.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/utils.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/admet.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/basic_calculation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/bde.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/conformer_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/constants.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/covalent_inhibitor_scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/descriptors.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/double_ended_ts_search.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/fukui.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/interaction_energy_decomposition.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/ion_mobility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/irc.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/logp.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/macropka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/membrane_permeability.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/msa.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/multistage_optimization.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/pka.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/pocket_detection.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/protein_binder_design.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/protein_preparation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/rbfe_graph.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/redox_potential.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/scan.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/solubility.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/spin_states.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/rowan/workflows/strain.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/.claude-plugin/plugin.json +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/logp.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/protein_preparation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_macropka_nmr.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_mango_forcefields.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_plugin.py +0 -0
- {rowan_python-3.1.14 → rowan_python-3.1.16}/tests/test_utils.py +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Ignore environment file with ROWAN_API_KEY
|
|
2
2
|
.env
|
|
3
|
+
# Variant env files (.env.test, .env.single-tenant, ...); .envrc is tracked for direnv
|
|
4
|
+
.env.*
|
|
5
|
+
|
|
6
|
+
# macOS
|
|
7
|
+
.DS_Store
|
|
3
8
|
|
|
4
9
|
# Created by https://www.toptal.com/developers/gitignore/api/python
|
|
5
10
|
# Edit at https://www.toptal.com/developers/gitignore?templates=python
|
|
@@ -46,6 +46,12 @@ pixi run python examples/basic_calculation.py
|
|
|
46
46
|
|
|
47
47
|
## Code conventions
|
|
48
48
|
|
|
49
|
+
### Documentation updates
|
|
50
|
+
|
|
51
|
+
- Treat requests to check or update docs as keeping existing descriptions, examples, docstrings, and skill references accurate.
|
|
52
|
+
- Make corrections where the relevant behavior is already documented. Don't add feature announcements, introductory callouts, or new sections just because a feature changed.
|
|
53
|
+
- If a document doesn't discuss the affected behavior, usually leave it alone. Preserve its existing scope and emphasis unless the user asks for expanded documentation.
|
|
54
|
+
|
|
49
55
|
### Docstrings
|
|
50
56
|
|
|
51
57
|
Format: reStructuredText-style. No types in docstrings, no leading articles.
|
|
@@ -100,7 +106,9 @@ Via ruff:
|
|
|
100
106
|
|
|
101
107
|
## Git authorization policy
|
|
102
108
|
|
|
103
|
-
|
|
109
|
+
- Prepare changes on a local feature branch. Local commits are allowed as part of authorized development work.
|
|
110
|
+
- The user handles pushing and opening PRs. Do not push branches, create PRs, or change remote branches unless the user explicitly requests that specific remote action.
|
|
111
|
+
- A request to get changes ready for a PR means prepare the local branch, not publish it or open a PR.
|
|
104
112
|
|
|
105
113
|
**Never add yourself as a commit author or co-author.** Do not include `Co-Authored-By:`, `Author:`, or any similar trailer that attributes the commit to an AI model or tool. Commits are attributed solely to the human developer.
|
|
106
114
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.16
|
|
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
|
|
@@ -11,7 +11,7 @@ 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.261
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
|
|
17
17
|
# Rowan Python Library
|
|
@@ -48,6 +48,23 @@ codex plugin marketplace add rowansci/rowan-python --ref master
|
|
|
48
48
|
codex plugin add computational-chemistry-and-biology@rowan
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
### Rowan MCP server (optional)
|
|
52
|
+
|
|
53
|
+
The skill also works with the hosted Rowan MCP server, which provides Rowan tools directly to the
|
|
54
|
+
agent. Add it once per client:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Claude Code
|
|
58
|
+
claude mcp add --transport http rowan https://mcp.rowansci.com/
|
|
59
|
+
|
|
60
|
+
# Codex
|
|
61
|
+
codex mcp add rowan --url https://mcp.rowansci.com/
|
|
62
|
+
codex mcp login rowan
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Both clients prompt for OAuth sign-in on first use. Without the server, the skill falls back to the
|
|
66
|
+
Rowan Python SDK, which authenticates with `ROWAN_API_KEY` instead.
|
|
67
|
+
|
|
51
68
|
Start a new Claude Code or Codex session after installation. For manual installation, download the
|
|
52
69
|
[latest skill ZIP](https://github.com/rowansci/rowan-python/releases/download/skill-latest/computational-chemistry-and-biology-skill.zip)
|
|
53
70
|
and extract it into your agent's skills directory.
|
|
@@ -32,6 +32,23 @@ codex plugin marketplace add rowansci/rowan-python --ref master
|
|
|
32
32
|
codex plugin add computational-chemistry-and-biology@rowan
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
### Rowan MCP server (optional)
|
|
36
|
+
|
|
37
|
+
The skill also works with the hosted Rowan MCP server, which provides Rowan tools directly to the
|
|
38
|
+
agent. Add it once per client:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Claude Code
|
|
42
|
+
claude mcp add --transport http rowan https://mcp.rowansci.com/
|
|
43
|
+
|
|
44
|
+
# Codex
|
|
45
|
+
codex mcp add rowan --url https://mcp.rowansci.com/
|
|
46
|
+
codex mcp login rowan
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Both clients prompt for OAuth sign-in on first use. Without the server, the skill falls back to the
|
|
50
|
+
Rowan Python SDK, which authenticates with `ROWAN_API_KEY` instead.
|
|
51
|
+
|
|
35
52
|
Start a new Claude Code or Codex session after installation. For manual installation, download the
|
|
36
53
|
[latest skill ZIP](https://github.com/rowansci/rowan-python/releases/download/skill-latest/computational-chemistry-and-biology-skill.zip)
|
|
37
54
|
and extract it into your agent's skills directory.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Basic Calculation
|
|
2
|
+
|
|
3
|
+
## Configuration
|
|
4
|
+
|
|
5
|
+
Use the exported enums instead of raw strings when setting the method and engine:
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
import rowan
|
|
9
|
+
|
|
10
|
+
molecule = rowan.Molecule.from_smiles("CCO")
|
|
11
|
+
workflow = rowan.submit_basic_calculation_workflow(
|
|
12
|
+
initial_molecule=molecule,
|
|
13
|
+
tasks=["optimize"],
|
|
14
|
+
method=rowan.Method.GFN2_XTB,
|
|
15
|
+
engine=rowan.Engine.XTB,
|
|
16
|
+
)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Pass an [`OptimizationSettings`](settings.md#stjames.opt_settings.OptimizationSettings) object or
|
|
20
|
+
an equivalent dictionary to `opt_settings`. `optimize_cell` defaults to `False`; set it to `True`
|
|
21
|
+
only when optimizing a periodic cell.
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
opt_settings = rowan.OptimizationSettings(max_steps=200, optimize_cell=False)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
::: rowan.workflows.basic_calculation
|
|
28
|
+
handler: python
|
|
29
|
+
options:
|
|
30
|
+
show_source: false
|
|
31
|
+
show_root_heading: false
|
|
32
|
+
show_root_toc_entry: false
|
|
33
|
+
members_order: source
|
|
34
|
+
group_by_category: true
|
|
35
|
+
filters: ["!^_"]
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Batch Docking
|
|
2
2
|
|
|
3
|
+
Use `num_poses_to_save` to retain the best pose for that many top-scoring compounds, and set
|
|
4
|
+
`run_mmgbsa=True` to refine those saved poses. `result.refined_scores` maps every input SMILES
|
|
5
|
+
to a `DockingScore` for a retained compound or `None` otherwise.
|
|
6
|
+
|
|
3
7
|
::: rowan.workflows.batch_docking
|
|
4
8
|
handler: python
|
|
5
9
|
options:
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
The docking workflow supports Vina docking and both noncovalent and covalent gnina docking.
|
|
4
4
|
Passing `GninaSettings` selects gnina; it does not by itself enable covalent docking.
|
|
5
5
|
|
|
6
|
+
## Induced-fit docking
|
|
7
|
+
|
|
8
|
+
Pass `rowan.InducedFitSettings()` to `induced_fit_settings` when nearby receptor side chains may
|
|
9
|
+
need to relax around the ligand. Induced fit requires Vina or QVina2 and adds substantial work
|
|
10
|
+
beyond rigid docking.
|
|
11
|
+
|
|
12
|
+
Results contain both rigid and induced-receptor poses ranked by `induced_fit_score`. Use
|
|
13
|
+
`get_induced_receptor()` or `get_induced_receptors()` to retrieve the relaxed receptors associated
|
|
14
|
+
with induced poses. See `examples/induced_fit_docking.py` for a complete example.
|
|
15
|
+
|
|
6
16
|
## Covalent docking
|
|
7
17
|
|
|
8
18
|
Set both covalent atom indices on `GninaSettings` to form a bond between a known ligand atom and
|
|
@@ -12,6 +12,21 @@
|
|
|
12
12
|
members:
|
|
13
13
|
- Settings
|
|
14
14
|
|
|
15
|
+
## Basis sets
|
|
16
|
+
|
|
17
|
+
Pass a basis set name as a string for ordinary calculations. Use `rowan.BasisSet` when configuring
|
|
18
|
+
atom- or element-specific overrides.
|
|
19
|
+
|
|
20
|
+
::: stjames.basis_set
|
|
21
|
+
handler: python
|
|
22
|
+
options:
|
|
23
|
+
show_source: false
|
|
24
|
+
show_root_heading: false
|
|
25
|
+
show_root_toc_entry: false
|
|
26
|
+
members_order: source
|
|
27
|
+
group_by_category: true
|
|
28
|
+
filters: ["!^_"]
|
|
29
|
+
|
|
15
30
|
::: stjames.opt_settings
|
|
16
31
|
handler: python
|
|
17
32
|
options:
|
|
@@ -3,54 +3,90 @@
|
|
|
3
3
|
Value types shared across many workflows — the vocabulary you use for `preset`, `method`, and
|
|
4
4
|
structural inputs regardless of which workflow you're submitting.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Legacy enum members retained for parsing historical workflows are omitted below.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Enum members and their accepted string values are listed below. Import these types from `rowan`,
|
|
9
|
+
not `stjames`.
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
::: stjames.method.Method
|
|
9
14
|
handler: python
|
|
10
15
|
options:
|
|
11
16
|
show_source: false
|
|
17
|
+
show_bases: false
|
|
12
18
|
show_root_heading: false
|
|
13
19
|
show_root_toc_entry: false
|
|
20
|
+
show_if_no_docstring: true
|
|
21
|
+
separate_signature: false
|
|
14
22
|
members_order: source
|
|
15
23
|
group_by_category: true
|
|
16
|
-
filters:
|
|
24
|
+
filters:
|
|
25
|
+
- "!^_"
|
|
26
|
+
- "!^default_engine$"
|
|
27
|
+
- "!^(MACE_MP_0|MACE_MP_0B2_L|EGRET_1|EGRET_1E|EGRET_1T)$"
|
|
28
|
+
- "!^SMIRNOFF_2_(0_0|2_1)_AMBER_AM1BCC$"
|
|
17
29
|
|
|
18
|
-
|
|
30
|
+
## Engines
|
|
31
|
+
|
|
32
|
+
::: stjames.engine.Engine
|
|
19
33
|
handler: python
|
|
20
34
|
options:
|
|
21
35
|
show_source: false
|
|
36
|
+
show_bases: false
|
|
22
37
|
show_root_heading: false
|
|
23
38
|
show_root_toc_entry: false
|
|
39
|
+
show_if_no_docstring: true
|
|
40
|
+
separate_signature: false
|
|
24
41
|
members_order: source
|
|
25
42
|
group_by_category: true
|
|
26
|
-
filters:
|
|
43
|
+
filters:
|
|
44
|
+
- "!^_"
|
|
45
|
+
- "!^(EGRET|MACE|TERACHEM)$"
|
|
27
46
|
|
|
28
|
-
|
|
47
|
+
## Tasks
|
|
48
|
+
|
|
49
|
+
::: stjames.task.Task
|
|
29
50
|
handler: python
|
|
30
51
|
options:
|
|
31
52
|
show_source: false
|
|
53
|
+
show_bases: false
|
|
32
54
|
show_root_heading: false
|
|
33
55
|
show_root_toc_entry: false
|
|
56
|
+
show_if_no_docstring: true
|
|
57
|
+
separate_signature: false
|
|
34
58
|
members_order: source
|
|
35
59
|
group_by_category: true
|
|
36
|
-
filters:
|
|
60
|
+
filters:
|
|
61
|
+
- "!^_"
|
|
62
|
+
- "!^STRESS$"
|
|
37
63
|
|
|
38
|
-
|
|
64
|
+
## Corrections
|
|
65
|
+
|
|
66
|
+
::: stjames.correction.Correction
|
|
39
67
|
handler: python
|
|
40
68
|
options:
|
|
41
69
|
show_source: false
|
|
70
|
+
show_bases: false
|
|
42
71
|
show_root_heading: false
|
|
43
72
|
show_root_toc_entry: false
|
|
73
|
+
show_if_no_docstring: true
|
|
74
|
+
separate_signature: false
|
|
44
75
|
members_order: source
|
|
45
76
|
group_by_category: true
|
|
46
77
|
filters: ["!^_"]
|
|
47
78
|
|
|
48
|
-
|
|
79
|
+
## Modes
|
|
80
|
+
|
|
81
|
+
::: stjames.mode.Mode
|
|
49
82
|
handler: python
|
|
50
83
|
options:
|
|
51
84
|
show_source: false
|
|
85
|
+
show_bases: false
|
|
52
86
|
show_root_heading: false
|
|
53
87
|
show_root_toc_entry: false
|
|
88
|
+
show_if_no_docstring: true
|
|
89
|
+
separate_signature: false
|
|
54
90
|
members_order: source
|
|
55
91
|
group_by_category: true
|
|
56
92
|
filters: ["!^_"]
|
|
@@ -25,4 +25,4 @@ for name, score in zip(ligands.keys(), result.scores, strict=False):
|
|
|
25
25
|
if score is None:
|
|
26
26
|
print(f"{name}: scoring failed")
|
|
27
27
|
continue
|
|
28
|
-
print(f"{name}: {score.binding_affinity:.2f} kcal/mol
|
|
28
|
+
print(f"{name}: {score.binding_affinity:.2f} kcal/mol")
|
|
@@ -37,7 +37,7 @@ print(result)
|
|
|
37
37
|
for i, score in enumerate(result.scores):
|
|
38
38
|
print(f" Pose {i}: score={score.score:.3f} posebusters_valid={score.posebusters_valid}")
|
|
39
39
|
|
|
40
|
-
# Download the top-scoring protein–ligand complex as
|
|
40
|
+
# Download the top-scoring protein–ligand complex as mmCIF
|
|
41
41
|
complex_protein = result.get_complex(0)
|
|
42
|
-
complex_protein.
|
|
43
|
-
print("Saved dasatinib_2GQG_complex.
|
|
42
|
+
complex_protein.download_structure(name="dasatinib_2GQG_complex")
|
|
43
|
+
print("Saved dasatinib_2GQG_complex.cif")
|
|
@@ -17,7 +17,9 @@ folder = rowan.get_folder("examples")
|
|
|
17
17
|
|
|
18
18
|
workflow = rowan.submit_electronic_properties_workflow(
|
|
19
19
|
initial_molecule=rowan.Molecule.from_smiles("C=O"), # formaldehyde
|
|
20
|
-
method="
|
|
20
|
+
method="r2scan",
|
|
21
|
+
basis_set="def2-svp",
|
|
22
|
+
engine="gpu4pyscf",
|
|
21
23
|
compute_density_cube=True,
|
|
22
24
|
compute_electrostatic_potential_cube=True,
|
|
23
25
|
compute_num_occupied_orbitals=3, # HOMO, HOMO-1, HOMO-2
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
# Set your API key or use the ROWAN_API_KEY environment variable
|
|
4
|
+
# rowan.api_key = "rowan-sk..."
|
|
5
|
+
folder = rowan.get_folder("examples")
|
|
6
|
+
|
|
7
|
+
# Dasatinib — redocked into its own ABL1 co-crystal structure (PDB: 2GQG)
|
|
8
|
+
dasatinib = rowan.Molecule.from_smiles("Cc1nc(Nc2ncc(C(=O)Nc3c(C)cccc3Cl)s2)cc(N2CCN(CCO)CC2)n1")
|
|
9
|
+
|
|
10
|
+
protein = rowan.create_protein_from_pdb_id("2GQG")
|
|
11
|
+
protein = protein.select_chains(["A"])
|
|
12
|
+
preparation_workflow = rowan.submit_protein_preparation_workflow(
|
|
13
|
+
protein=protein.uuid,
|
|
14
|
+
add_missing_method="pdbfixer",
|
|
15
|
+
name="Prepare ABL1",
|
|
16
|
+
folder=folder,
|
|
17
|
+
)
|
|
18
|
+
prepared_protein_uuid = preparation_workflow.result().prepared_protein_uuid
|
|
19
|
+
|
|
20
|
+
# Pocket is [[center_x, center_y, center_z], [size_x, size_y, size_z]] in Å.
|
|
21
|
+
center = [44.59, 79.75, 39.59]
|
|
22
|
+
size = [24.15, 21.33, 19.88]
|
|
23
|
+
|
|
24
|
+
# Induced-fit docking soft-docks candidate poses, relaxes the receptor around each with
|
|
25
|
+
# restrained local minimization, and redocks into the relaxed receptor. It requires
|
|
26
|
+
# VinaSettings with executable="vina" or "qvina2" (the default is "vina").
|
|
27
|
+
induced_fit_settings = rowan.InducedFitSettings(
|
|
28
|
+
max_receptors=6,
|
|
29
|
+
flexible_sidechain_radius=5.0,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
workflow = rowan.submit_docking_workflow(
|
|
33
|
+
prepared_protein_uuid,
|
|
34
|
+
pocket=[center, size],
|
|
35
|
+
initial_molecule=dasatinib,
|
|
36
|
+
induced_fit_settings=induced_fit_settings,
|
|
37
|
+
name="Dasatinib induced-fit docking",
|
|
38
|
+
folder=folder,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
print(f"View workflow privately at: https://labs.rowansci.com/docking/{workflow.uuid}")
|
|
42
|
+
|
|
43
|
+
result = workflow.result()
|
|
44
|
+
print(result)
|
|
45
|
+
|
|
46
|
+
# With induced-fit docking, poses are ranked by induced_fit_score rather than raw docking score.
|
|
47
|
+
for i, score in enumerate(result.scores):
|
|
48
|
+
print(
|
|
49
|
+
f" Pose {i}: induced_fit_score={score.induced_fit_score:.3f} "
|
|
50
|
+
f"score={score.score:.3f} receptor_strain={score.receptor_strain}"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Download the top-scoring complex and best-ranked relaxed receptor as mmCIF files
|
|
54
|
+
complex_protein = result.get_complex(0)
|
|
55
|
+
complex_protein.download_structure(name="dasatinib_2GQG_induced_complex")
|
|
56
|
+
print("Saved dasatinib_2GQG_induced_complex.cif")
|
|
57
|
+
|
|
58
|
+
induced_receptors = result.get_induced_receptors()
|
|
59
|
+
if induced_receptors:
|
|
60
|
+
induced_receptors[0].download_structure(name="dasatinib_2GQG_induced_receptor")
|
|
61
|
+
print("Saved dasatinib_2GQG_induced_receptor.cif")
|
|
@@ -45,5 +45,9 @@ print(
|
|
|
45
45
|
)
|
|
46
46
|
md_result = md_workflow.result()
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
print(
|
|
48
|
+
trajectory = md_result.trajectories[0]
|
|
49
|
+
print(f"Ligand RMSD: {trajectory.ligand_rmsd}")
|
|
50
|
+
print(f"Protein RMSD: {trajectory.protein_rmsd}")
|
|
51
|
+
print(f"Protein RMSF: {trajectory.rmsf}")
|
|
52
|
+
print(f"Potential energy: {trajectory.potential_energy} Hartree")
|
|
53
|
+
print(f"MM/GBSA scores: {trajectory.mmgbsa_scores} kcal/mol")
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Cofolding with modified polymers and a covalent bond constraint."""
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# Set your API key or use the ROWAN_API_KEY environment variable.
|
|
6
|
+
# rowan.api_key = "rowan-sk..."
|
|
7
|
+
folder = rowan.get_folder("examples")
|
|
8
|
+
|
|
9
|
+
protein = rowan.ProteinSequence(
|
|
10
|
+
sequence="ASA",
|
|
11
|
+
modifications=[rowan.ResidueModification(position=1, ccd="SEP")],
|
|
12
|
+
)
|
|
13
|
+
dna = rowan.DNASequence(
|
|
14
|
+
sequence="AC",
|
|
15
|
+
modifications=[rowan.NucleotideModification(position=1, ccd="5MC")],
|
|
16
|
+
)
|
|
17
|
+
rna = rowan.RNASequence(
|
|
18
|
+
sequence="AU",
|
|
19
|
+
modifications=[rowan.NucleotideModification(position=1, ccd="PSU")],
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
protein_atom = rowan.ConstraintTarget(
|
|
23
|
+
input_type="protein", input_index=0, token_index=1, atom_name="OG"
|
|
24
|
+
)
|
|
25
|
+
ligand_atom = rowan.ConstraintTarget(input_type="ligand", input_index=0, token_index=0)
|
|
26
|
+
covalent_bond = rowan.BondConstraint(atom_1=protein_atom, atom_2=ligand_atom)
|
|
27
|
+
|
|
28
|
+
workflow = rowan.submit_protein_cofolding_workflow(
|
|
29
|
+
initial_protein_sequences=[protein],
|
|
30
|
+
initial_dna_sequences=[dna],
|
|
31
|
+
initial_rna_sequences=[rna],
|
|
32
|
+
initial_smiles_list=["CBr"],
|
|
33
|
+
bond_constraints=[covalent_bond],
|
|
34
|
+
model=rowan.CofoldingModel.BOLTZ_2,
|
|
35
|
+
num_samples=1,
|
|
36
|
+
name="Modified polymers with covalent constraint",
|
|
37
|
+
folder=folder,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
print(f"View workflow privately at: https://labs.rowansci.com/protein-cofolding/{workflow.uuid}")
|
|
41
|
+
result = workflow.result()
|
|
42
|
+
print(result)
|
|
43
|
+
for i, prediction in enumerate(result.predictions):
|
|
44
|
+
print(f" sample {i}: scores={prediction.scores}")
|
rowan_python-3.1.14/examples/pdb_download.py → rowan_python-3.1.16/examples/protein_file_download.py
RENAMED
|
@@ -8,4 +8,8 @@ import rowan
|
|
|
8
8
|
proteins = rowan.list_proteins()
|
|
9
9
|
for protein in proteins:
|
|
10
10
|
print(protein.name)
|
|
11
|
-
protein.
|
|
11
|
+
protein.download_structure(
|
|
12
|
+
name=protein.name,
|
|
13
|
+
path=Path("protein_files"),
|
|
14
|
+
file_format="mmcif", # Default; use "pdb" for PDB files
|
|
15
|
+
)
|
|
@@ -21,3 +21,7 @@ md_workflow = rowan.submit_protein_md_workflow(
|
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
print(f"View MD workflow privately at: https://labs.rowansci.com/protein-md/{md_workflow.uuid}")
|
|
24
|
+
trajectory = md_workflow.result().trajectories[0]
|
|
25
|
+
print(f"Protein RMSD: {trajectory.protein_rmsd}")
|
|
26
|
+
print(f"Protein RMSF: {trajectory.rmsf}")
|
|
27
|
+
print(f"Potential energy: {trajectory.potential_energy} Hartree")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Example: temporarily share a workflow with anyone who has its link."""
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# Set your API key or use the ROWAN_API_KEY environment variable.
|
|
6
|
+
# rowan.api_key = "rowan-sk..."
|
|
7
|
+
|
|
8
|
+
workflow = rowan.retrieve_workflow("your-workflow-uuid")
|
|
9
|
+
|
|
10
|
+
# Temporary shares can last for up to 120 minutes. This does not make the workflow
|
|
11
|
+
# permanently public: `workflow.public` remains unchanged.
|
|
12
|
+
workflow = workflow.temporarily_share(duration_minutes=60)
|
|
13
|
+
|
|
14
|
+
print(f"Share URL: https://labs.rowansci.com/workflow/{workflow.uuid}")
|
|
15
|
+
print(f"Public until: {workflow.public_until}")
|
|
16
|
+
print(f"Temporary share active: {workflow.is_temporarily_public}")
|
|
17
|
+
|
|
18
|
+
# End access before the expiration time if needed.
|
|
19
|
+
# workflow = workflow.end_temporary_share()
|