mdprep 0.4.0__tar.gz → 0.5.0__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.
- {mdprep-0.4.0 → mdprep-0.5.0}/CHANGELOG.md +130 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/CONTRIBUTING.md +5 -6
- {mdprep-0.4.0 → mdprep-0.5.0}/PKG-INFO +27 -11
- {mdprep-0.4.0 → mdprep-0.5.0}/README.md +26 -10
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/README.md +2 -0
- mdprep-0.5.0/docs/enzyme_families.md +78 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/guided_manifests.md +42 -0
- mdprep-0.5.0/docs/heterogens.md +152 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/ligands.md +42 -3
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/manifest_reference.md +58 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/metals.md +176 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/molecular_dynamics.md +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/predicted_structures.md +4 -3
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/troubleshooting.md +36 -2
- mdprep-0.5.0/examples/19_cyp119_heme_mcpb.yaml +228 -0
- mdprep-0.5.0/examples/20_upo_5oxu_heme_glycans.yaml +352 -0
- mdprep-0.5.0/examples/21_prna_fad_halogenase.yaml +85 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/README.md +9 -6
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/colab_smoke_test.ipynb +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/mdprep_colab.ipynb +122 -292
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/mdprep_interactive_colab.ipynb +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/pyproject.toml +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/__init__.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/cli.py +13 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/config/decisions.py +813 -191
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/config/models.py +145 -3
- mdprep-0.5.0/src/mdprep/ligands/cofactors.py +214 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/hydrogenate.py +53 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/gxtb_hessian.py +184 -5
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/mcpb.py +46 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/pyscf_mcpb.py +10 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/histidine_qmmm.py +19 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/temporary_hydrogenation.py +10 -4
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/selection.py +13 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/reports/structure_report.py +15 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/classify.py +9 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/completeness.py +14 -4
- mdprep-0.5.0/src/mdprep/structure/heterogens.py +475 -0
- mdprep-0.5.0/src/mdprep/structure/links.py +308 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/mmcif.py +18 -4
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/models.py +13 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/normalize.py +29 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/pdb.py +9 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/pdb_fields.py +188 -14
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/repair.py +199 -6
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/runtime.py +21 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/wizard.py +9 -1
- mdprep-0.5.0/tests/browser/example_button.mjs +72 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/browser/student_flow.mjs +7 -0
- mdprep-0.5.0/tests/data/cofactors/fad_2ar8.pdb +55 -0
- mdprep-0.5.0/tests/data/cofactors/fmn_4ttb.pdb +33 -0
- mdprep-0.5.0/tests/data/cofactors/hem_2qfk.pdb +46 -0
- mdprep-0.5.0/tests/data/cofactors/nad_2jhf.pdb +46 -0
- mdprep-0.5.0/tests/data/cofactors/nai_4plz.pdb +46 -0
- mdprep-0.5.0/tests/data/cofactors/nap_4lbs.pdb +50 -0
- mdprep-0.5.0/tests/data/cofactors/ndp_1kmv.pdb +50 -0
- mdprep-0.5.0/tests/data/cofactors/sah_8pb4.pdb +28 -0
- mdprep-0.5.0/tests/data/cofactors/sam_7rwg.pdb +29 -0
- mdprep-0.5.0/tests/data/heterogens/covalent_intermediate_1zrn.pdb +64 -0
- mdprep-0.5.0/tests/data/heterogens/pyroglutamate_1cpo.pdb +89 -0
- mdprep-0.5.0/tests/data/heterogens/selenomethionine_1rqr.pdb +58 -0
- mdprep-0.5.0/tests/data/heterogens/vanadate_1idq.pdb +39 -0
- mdprep-0.5.0/tests/data/metals/dhp_2qfk_small_model.xyz +93 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_besd_halogenase_case.py +0 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_colab_official_notebook.py +44 -13
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_colab_smoke_notebook.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_crystal_ions.py +0 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_gxtb_hessian.py +43 -0
- mdprep-0.5.0/tests/test_external_halogenase_families.py +130 -0
- mdprep-0.5.0/tests/test_external_heme_mcpb.py +98 -0
- mdprep-0.5.0/tests/test_external_modified_residues.py +154 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_gxtb_hessian.py +173 -0
- mdprep-0.5.0/tests/test_heterogen_groups.py +649 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_histidine_qmmm.py +48 -14
- mdprep-0.5.0/tests/test_known_cofactors.py +113 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ligand_hydrogenation.py +43 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_manifest_decisions.py +20 -5
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_manifest_wizard.py +4 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mcpb_parameter_comparison.py +47 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_metal_bound_water.py +4 -15
- mdprep-0.5.0/tests/test_metal_cofactors.py +405 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_oligomers.py +0 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_packaging_metadata.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_qm_region_spin_state.py +20 -36
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_selection.py +95 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_runtime_requirements.py +16 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_runtime_requirements_cover_every_option.py +23 -1
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_structure_completeness.py +0 -3
- mdprep-0.5.0/tests/test_structure_links.py +219 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_structure_repair_inputs.py +32 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_syrb2_bound_water_case.py +1 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_web_builder_bound_water_case.py +10 -6
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_web_builder_browser.py +0 -1
- mdprep-0.5.0/tests/test_web_builder_example_button.py +62 -0
- mdprep-0.5.0/tests/test_web_builder_flavin_case.py +120 -0
- mdprep-0.5.0/tests/test_web_builder_heme_case.py +119 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_web_builder_oligomer_case.py +2 -2
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_web_builder_reference_case.py +7 -9
- mdprep-0.5.0/tests/test_web_builder_upo_case.py +104 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/web/README.md +7 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/web/app.js +60 -29
- {mdprep-0.4.0 → mdprep-0.5.0}/web/index.html +16 -5
- {mdprep-0.4.0 → mdprep-0.5.0}/web/style.css +23 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/.gitignore +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/AGENTS.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/CITATION.cff +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/LICENSE +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/developer_notes.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/installation.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/mcpb_xtb_benchmark.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/oligomers.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/protonation.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/qmmesp_pyscf.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/qmmm_refinement.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/quickstart.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/docs/tleap_and_validation.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/environment-dev.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/environment-minimal.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/environment.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/00_basic_protein.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/01_protein_only_ff19sb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/02_manual_catalytic_protonation.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/03_multi_ligand_am1bcc.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/04_qmmesp_pyscf_ligand.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/05_histidine_gxtb_sp.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/06_disulfide_manual.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/07_gas_resp_pyscf_ligand.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/08_nonbonded_zinc_1264.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/09_bonded_zinc_mcpb_prepare.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/10_qmmm_refinement_ash.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/11_qmmm_metal_gfn2_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/12_qmmm_metal_mace_polar1_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/13_qmmm_refinement_gxtb_mechanical.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/14_qmmm_refinement_mace_polar1_mechanical.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/15_roe_brooks_openmm.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/16_besd_halogenase_gfn2_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/17_syrb2_bound_water_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/18_syrb2_dimer_shared_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/colab/mdprep_colab_pipeline.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/examples/mdprep_colab_run.ipynb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/_selftest_data/basic_protein.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/_selftest_data/ligand_sub.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/antechamber.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/commands.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/mol2.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/parmchk2.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ambertools/resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/dcd.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/equilibration.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/metal_site.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/prmtop.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/analysis/trajectory.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/charges/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/charges/esp_grid.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/config/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/config/loader.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/external/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/external/discovery.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/external/runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/forcefields.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/log_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/residues.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/leap/runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/extract.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/identity.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/pyscf_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/ligands/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/md/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/md/imaging.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/md/roe_brooks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/c4.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/coordination.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/hydrogenate.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/mace_polar1_hessian.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/mace_polar1_worker.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/mcpb_compat.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/nonbonded.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/parameter_comparison.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/through_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/metals/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/apply.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/disulfide_states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/histidine_geometry.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/histidine_xtb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/overrides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/pka_rules.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/propka.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/propka_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/xtb_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/protonation/xtb_runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/qm/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/qm/point_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/qm/pyscf_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/qm/pyscf_runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/qm/xtb_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/ash.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/coordinates.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/mapping.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/openmm_minimizer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/refinement/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/reports/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/closest_xray.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/coordination.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/disulfides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/inspect.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/oligomer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/reader.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/rename.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/selectors.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/waters.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/structure/writer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/validation/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/validation/openmm_check.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/validation/parmed_check.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/validation/topology.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/doctor.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/init.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/inspect.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/prepare.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/selftest.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/src/mdprep/workflows/validate.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/besd_structure.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/browser/launch.mjs +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/browser/smoke.mjs +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/conftest.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/amber/README.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/amber/ace_ala_gly_nme.inpcrd +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/amber/ace_ala_gly_nme.prmtop +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/boltz_far_donor.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/boltz_model.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/boltz_smiles_ligands.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/boltz_wide_names.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_cof.frcmod +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_cof.good.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.atom_count_mismatch.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.bad_charge.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.frcmod +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.good.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.renamed.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.shifted_coords.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/ligands/ligand_sub.small_residual.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/propka_sample.pka +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_altloc.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_atom_record_ligand_blank_chain.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_blank_chain.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_cyx_disulfide.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_disulfide.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_histidine_ring.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_histidine_ring_hydrogenated.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_histidine_water_oxygen.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_histidine_zinc.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_insertion_code.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_two_ligands.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_with_hydrogenated_free_lysine.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_with_hydrogens.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_with_waters.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/protein_zinc_aqua.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/xtb_hid_stdout.txt +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/xtb_hie_stdout.txt +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/data/zinc_only.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_altloc.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_amber_resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ambertools_commands.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_analysis.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_browser_planning_path.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_build_residues_is_defined_once.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_classify.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_closest_xray.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_colab_wizard_notebook.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_config_examples.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_config_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_coordinating_ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_disulfide_assignment.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_disulfide_leap_mapping.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_disulfides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_doctor.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_esp_grid.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_amber_resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_ambertools.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_dcd_openmm.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_mace_polar1.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_md_restraint_frame.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_md_snapshot_box.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_metals.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_oligomer_mcpb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_propka_xtb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_pyscf.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_structure_repair.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_tleap.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_water_transplant.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_external_xtb_embedding.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_histidine_cluster_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_histidine_geometry.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_import.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_init_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_init_ligand_placeholders.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_inspect_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_leap_builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_leap_forcefields.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_leap_input_pdb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_leap_ligand_residue_names.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_leap_log_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ligand_extraction.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ligand_mol2_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_ligand_workflow_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mace_polar1_hessian.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_manifest_paths.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_manual_protonation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mcpb_compat.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mcpb_pyscf_fixed_geometry.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_md_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_md_imaging.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_metal_hydrogenation_preservation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_metals.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mmcif.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mol2_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_mol2_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_no_openbabel.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pdb_large_serials.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pdb_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pdb_roundtrip_property.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pdb_writer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pka_rules.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_point_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prediction_pdb_quirks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_ligands_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_protonation_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_pyscf_ligands_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_refinement_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_structure_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_prepare_tleap_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_propka_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_protonation_propka_workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_protonation_reuse_refined.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_protonation_states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_protonation_xtb_workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pyscf_esp_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_pyscf_runner_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_qmmesp_correctness.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_qmmesp_final_mol2_usage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_qmmesp_no_environment_fit.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_readme_example.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_ash.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_coordinates.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_openmm.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_platform.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_refinement_report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_remove_hydrogens.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_residue_rename.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_roe_brooks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_roe_brooks_restraints.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_selectors.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_selftest_installed.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_structure_normalize.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_temporary_hydrogenation_hold_back.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_through_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_tleap_workflow_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_validation_helpers.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_validation_topology.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_water_transplant.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_web_bundle_zip.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_xtb_command_builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_xtb_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_xtb_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/tests/test_xtb_water_hydrogens.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/web/.gitignore +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/web/build.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.0}/web/zip.js +0 -0
|
@@ -1,5 +1,135 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 - 2026-10-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- The web builder's **Load SyrB2 (PDB 2FCT)** button: the workshop's worked
|
|
8
|
+
example, for a student with no structure of their own, fetched from RCSB as
|
|
9
|
+
a typed ID would be.
|
|
10
|
+
- `mdprep.workflows.runtime.full_toolchain_manifest()`: a manifest that calls
|
|
11
|
+
every program mdprep installs, for an environment built before the real
|
|
12
|
+
manifest exists.
|
|
13
|
+
- Hemes and other metals deposited inside a cofactor. The PDB writes heme b as
|
|
14
|
+
one residue, HEM, with its iron among its atoms; mdprep now moves the metal
|
|
15
|
+
into a residue of its own as any structure is read, named after the element
|
|
16
|
+
with the cofactor's chain and number, and the porphyrin left behind is a
|
|
17
|
+
ligand that coordinates it. A cytochrome P450 becomes an ordinary bonded
|
|
18
|
+
iron site: the four porphyrin nitrogens, the cysteine and the water. The
|
|
19
|
+
oxidation state is asked, not read off the assigned name. Heme b's SMILES
|
|
20
|
+
and net charge (-4, both propionates ionised) are proposed with the
|
|
21
|
+
assumption stated. See `docs/metals.md`.
|
|
22
|
+
- `examples/19_cyp119_heme_mcpb.yaml` and the vendored 1IO7 deposition:
|
|
23
|
+
CYP119 at rest, low-spin Fe(III).
|
|
24
|
+
- `mcpb.pyscf.xtb.electronic_temperature_kelvin`: Fermi smearing for the xTB
|
|
25
|
+
Hessian and the GFN2 ESP of the large model. An open-shell heme's SCF does
|
|
26
|
+
not converge at xTB's own 300 K; the builder sets 1000 K for a site whose
|
|
27
|
+
donors include a heme, and an SCF failure without it names the setting.
|
|
28
|
+
- A residue still holding several metal atoms (an iron-sulfur cluster) and
|
|
29
|
+
heme c, a covalent ligand, are refused with the reason before any question
|
|
30
|
+
is asked.
|
|
31
|
+
- Heterogens that are not ligands. mdprep reads the bonds a deposition
|
|
32
|
+
declares (PDB LINK, mmCIF `_struct_conn`) and its modified residues (MODRES,
|
|
33
|
+
`_pdbx_struct_mod_residue`), and sorts the heterogens before asking about
|
|
34
|
+
ligands: modified residues in a chain, glycans, other heterogens bonded to
|
|
35
|
+
the protein, and crystallisation additives. Each group is one question with
|
|
36
|
+
every member listed. Glycans and additives are proposed for removal, a
|
|
37
|
+
selenomethionine for replacement by methionine; anything else is asked
|
|
38
|
+
without a proposal, and keeping what cannot be built stops at the question.
|
|
39
|
+
See `docs/heterogens.md`.
|
|
40
|
+
- `structure.remove_residues`: residues left out on purpose, each with its
|
|
41
|
+
reason, applied before anything else looks at the structure and reported.
|
|
42
|
+
- `structure.repair.replace_modified_residues`: modified residues replaced by
|
|
43
|
+
their standard parents through PDBFixer, exactly the ones listed.
|
|
44
|
+
- A metal that is not inside a cofactor can be removed on its model question
|
|
45
|
+
(a nickel from a His-tag purification). Magnesium and calcium are proposed
|
|
46
|
+
nonbonded.
|
|
47
|
+
- The SMILES and net charge of FAD, FMN, SAM, SAH, NAD+, NADH, NADP+ and NADPH
|
|
48
|
+
are proposed, at pH 7, with the protonation stated; each is tested against
|
|
49
|
+
a deposited cofactor.
|
|
50
|
+
- `examples/20_upo_5oxu_heme_glycans.yaml` (an unspecific peroxygenase:
|
|
51
|
+
heme-thiolate, magnesium, N-glycans, additives) and
|
|
52
|
+
`examples/21_prna_fad_halogenase.yaml` (a flavin-dependent halogenase),
|
|
53
|
+
with their depositions. `docs/enzyme_families.md` lists what mdprep does
|
|
54
|
+
with each family of halogenating and dehalogenating enzymes.
|
|
55
|
+
- Refused when the structure is loaded, with the reason: a cofactor bonded to
|
|
56
|
+
the protein that holds a metal (myeloperoxidase's heme), an oxoanion such as
|
|
57
|
+
vanadate, a modified residue with no standard parent, and a declared bond
|
|
58
|
+
between protein residues that is neither a peptide bond nor a disulfide.
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
|
|
62
|
+
- The spin is asked once, for the QM region. The per-metal multiplicity
|
|
63
|
+
question is gone; the QM region's answer is also the bonded site's
|
|
64
|
+
`ions[].multiplicity` and MCPB model spins.
|
|
65
|
+
- Crystallisation additives are no longer offered one by one as ligands
|
|
66
|
+
unless their removal is declined.
|
|
67
|
+
- The official Colab notebook takes its structure only from the builder's
|
|
68
|
+
bundle. Its predicted-model section (closest X-ray structure, crystal
|
|
69
|
+
waters), the SyrB2 example and the upload of an earlier run's results are
|
|
70
|
+
gone; `mdprep closest-xray` and `mdprep transplant-waters` still bring
|
|
71
|
+
waters across on the command line. It installs every program mdprep runs
|
|
72
|
+
first, before there is a bundle, so the install runs while the builder's
|
|
73
|
+
questions are answered; the MD follows the preparation directly, and the
|
|
74
|
+
investigation of both comes after. Sections, old to new: C to A, D to C,
|
|
75
|
+
F to D, G to F, H to G, I to H, J to I; B and E1-E8 keep their letters.
|
|
76
|
+
|
|
77
|
+
- The protonation of a titratable side chain on a metal is asked right after
|
|
78
|
+
the coordination shell is confirmed, before the spin and the model charge.
|
|
79
|
+
- Proposals carry their own explanation, shown by the builder and the
|
|
80
|
+
`mdprep init --interactive` wizard alike.
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- A metal-bound cysteine stated as CYM stopped the protonation stage: OpenMM
|
|
85
|
+
calls the thiolate's hydrogen variant CYX. Every cysteine donor -- a zinc
|
|
86
|
+
finger's, a heme's -- reached this.
|
|
87
|
+
- The proposed model charge read a donor's charge from its residue name, so a
|
|
88
|
+
cysteine stated as CYM counted as neutral and an aspartate stated as ASH as
|
|
89
|
+
-1. It now counts the state given, and proposes nothing until it is given.
|
|
90
|
+
- The builder named a residue once per highlighted atom.
|
|
91
|
+
- The ligand bond-order check measured conjugated single bonds against
|
|
92
|
+
saturated lengths, so every amide, amino-heterocycle and flavin looked like
|
|
93
|
+
a wrong tautomer and a SMILES for FAD, NAD or SAM could not be applied.
|
|
94
|
+
- A heme on both a bonded iron and a nonbonded magnesium, as in a
|
|
95
|
+
peroxygenase, was refused for taking its charges from the magnesium's
|
|
96
|
+
non-existent fit.
|
|
97
|
+
- QM/MM refinement stopped on a nonbonded metal or a crystal ion next to the
|
|
98
|
+
QM region; both are MM environment with known parameters.
|
|
99
|
+
- A lysine PropKa made neutral lost a hydrogen's charge in the embedding of
|
|
100
|
+
the xTB histidine comparison: OpenMM names its amine hydrogens HZ1 and HZ2,
|
|
101
|
+
ff14SB's LYN HZ2 and HZ3. The histidines around it were compared beside a
|
|
102
|
+
lysine at -0.39 e, and the report asked for the lysine to be declared as a
|
|
103
|
+
ligand. PrnA's Lys79 reached this: its four histidines keep their states,
|
|
104
|
+
but their HID-HIE gaps moved by 1 to 3 kcal/mol, enough to flip a closer
|
|
105
|
+
call.
|
|
106
|
+
- A vanadate was split into a vanadium and four unbonded oxygens.
|
|
107
|
+
- Replacing a modified residue stopped the run unless
|
|
108
|
+
`structure.repair.add_missing_heavy_atoms` was set: PDBFixer keeps a blank
|
|
109
|
+
insertion code as a space, so the replaced residue's own new atoms counted
|
|
110
|
+
as unrequested. Any replacement in a structure missing nothing else reached
|
|
111
|
+
this, 1CPO's pyroglutamate among them. A chain's terminal OXT, which the
|
|
112
|
+
planner never asks about, stopped such a run too; it is left to tleap.
|
|
113
|
+
- A pyroglutamate replaced by glutamine kept its lactam's CD 1.5 A from its
|
|
114
|
+
own backbone nitrogen. A replaced side chain bonded to its own backbone is
|
|
115
|
+
rebuilt beyond CB from the parent's template, listed under
|
|
116
|
+
`side_chain_rebuilt`, with a warning naming its closest contact.
|
|
117
|
+
- The g-xTB Hessian of a high-spin heme site could fail to converge, or
|
|
118
|
+
converge in whichever of two states the thread count led it to: on 2QFK's
|
|
119
|
+
aquo Fe(III), 27 kcal/mol apart, with Fe-N force constants up to 1.7 times
|
|
120
|
+
different. `mcpb.pyscf.xtb.scf_annealing_kelvin` converges the SCF straight
|
|
121
|
+
and from each hotter temperature listed, single-threaded, and takes the
|
|
122
|
+
Hessian from the lowest; the builder sets it, with `max_scf_iterations:
|
|
123
|
+
3000`, for every heme site. Examples 19 and 20 carry both. 2QFK itself now
|
|
124
|
+
stops every time at the same place, a negative His-Fe-N angle constant,
|
|
125
|
+
instead of passing or failing by the thread count. See `docs/metals.md`.
|
|
126
|
+
- A Seminario term MCPB.py found negative and wrote as zero was reported only
|
|
127
|
+
as a 0.0 in the frcmod; the error now names it, its atoms and its value.
|
|
128
|
+
- The bond-order check read a porphyrin bond by bond, so 2QFK's heme, refined
|
|
129
|
+
with one pyrrole's beta-beta bond at single-bond length, was refused as a
|
|
130
|
+
wrong tautomer of heme b. A porphyrin's core is skipped like a carboxylate;
|
|
131
|
+
a chlorin's reduced ring is still checked.
|
|
132
|
+
|
|
3
133
|
## 0.4.0 - 2026-10-20
|
|
4
134
|
|
|
5
135
|
### Added
|
|
@@ -93,16 +93,15 @@ to the Python surface.
|
|
|
93
93
|
|
|
94
94
|
### Executing the official notebook outside Colab
|
|
95
95
|
|
|
96
|
-
`examples/mdprep_colab.ipynb` runs anywhere with a Linux GPU. Its
|
|
96
|
+
`examples/mdprep_colab.ipynb` runs anywhere with a Linux GPU. Its upload and
|
|
97
97
|
installs are redirected by environment variables, so a Python with mdprep,
|
|
98
|
-
`
|
|
99
|
-
|
|
98
|
+
`py3Dmol`, `pandas`, `matplotlib` and `nbclient` can execute it against a
|
|
99
|
+
micromamba runtime built once:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
MDPREP_COLAB_PREFIX=/scratch/colab \
|
|
103
103
|
MDPREP_SKIP_KERNEL_INSTALL=1 \
|
|
104
104
|
MDPREP_SPEC=$PWD \
|
|
105
|
-
MDPREP_TEST_UPLOAD_MODEL=/path/to/predicted_model.cif \
|
|
106
105
|
MDPREP_TEST_UPLOAD_BUNDLE=/path/to/mdprep-bundle.zip \
|
|
107
106
|
python -c "import nbformat; from nbclient import NotebookClient; \
|
|
108
107
|
nb = nbformat.read('examples/mdprep_colab.ipynb', 4); \
|
|
@@ -110,6 +109,6 @@ NotebookClient(nb, timeout=5400).execute(); nbformat.write(nb, 'executed.ipynb')
|
|
|
110
109
|
```
|
|
111
110
|
|
|
112
111
|
`MDPREP_COLAB_PREFIX` stands in for `/content` (micromamba goes in its `bin/`,
|
|
113
|
-
the environment in `mamba-root/`)
|
|
114
|
-
|
|
112
|
+
the environment in `mamba-root/`). The bundle is one the web builder
|
|
113
|
+
downloaded; its SyrB2 button gives one for 2FCT.
|
|
115
114
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mdprep
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Reproducible Amber preparation for proteins, ligands, metal centers, and OpenMM MD.
|
|
5
5
|
Project-URL: Homepage, https://github.com/miqueleg/mdprep
|
|
6
6
|
Project-URL: Issues, https://github.com/miqueleg/mdprep/issues
|
|
@@ -52,7 +52,7 @@ Description-Content-Type: text/markdown
|
|
|
52
52
|
|
|
53
53
|
# mdprep
|
|
54
54
|
|
|
55
|
-
`mdprep` 0.
|
|
55
|
+
`mdprep` 0.5.0 prepares reproducible Amber molecular-dynamics systems from a
|
|
56
56
|
PDB structure and a validated YAML manifest. It supports standard proteins,
|
|
57
57
|
independent ligands and cofactors, explicit metal models, optional active-site
|
|
58
58
|
QM/MM refinement, final `tleap` assembly, validation, and an optional OpenMM
|
|
@@ -71,7 +71,15 @@ recorded in the output reports.
|
|
|
71
71
|
- Multiple GAFF or GAFF2 ligands/cofactors with AM1-BCC, user mol2/frcmod,
|
|
72
72
|
PySCF gas-phase RESP, or electrostatically embedded PySCF QMMESP charges.
|
|
73
73
|
- Amber nonbonded metal models or bonded MCPB.py models with explicit
|
|
74
|
-
coordinating atoms, charges, and multiplicities
|
|
74
|
+
coordinating atoms, charges, and multiplicities -- including a metal
|
|
75
|
+
deposited inside a cofactor: a cytochrome P450's heme iron, bonded to the
|
|
76
|
+
porphyrin, the cysteine and a water ([docs/metals.md](docs/metals.md#a-metal-inside-a-cofactor-hemes)).
|
|
77
|
+
- Heterogens that are not ligands, read from the file's LINK and MODRES
|
|
78
|
+
records: glycans and crystallisation additives removed on one question
|
|
79
|
+
each, selenomethionine replaced by methionine, and FAD, FMN, SAM and the
|
|
80
|
+
nicotinamides offered with their SMILES and charge
|
|
81
|
+
([docs/heterogens.md](docs/heterogens.md)). What this means for each family
|
|
82
|
+
of halogenating enzymes is in [docs/enzyme_families.md](docs/enzyme_families.md).
|
|
75
83
|
- Dimers, trimers, tetramers: every protein chain in one system. Copies of one
|
|
76
84
|
protein can share parameters -- asked about once, matched residue for
|
|
77
85
|
residue by sequence and position rather than number, and a bonded metal site
|
|
@@ -202,13 +210,15 @@ explicitly request their removal.
|
|
|
202
210
|
|
|
203
211
|
For a guided workflow, use the [web input builder](https://miqueleg.github.io/mdprep/):
|
|
204
212
|
it shows the structure in 3D, asks only the questions your structure needs, and
|
|
205
|
-
writes a validated manifest and a bundle.
|
|
213
|
+
writes a validated manifest and a bundle. With no structure of your own, it
|
|
214
|
+
loads SyrB2 (PDB 2FCT) in one click. Then open the
|
|
206
215
|
[official Colab notebook](https://colab.research.google.com/github/miqueleg/mdprep/blob/master/examples/mdprep_colab.ipynb)
|
|
207
|
-
([`examples/mdprep_colab.ipynb`](examples/mdprep_colab.ipynb))
|
|
208
|
-
|
|
209
|
-
equilibrates it, and lets you
|
|
210
|
-
|
|
211
|
-
|
|
216
|
+
([`examples/mdprep_colab.ipynb`](examples/mdprep_colab.ipynb)): it installs
|
|
217
|
+
the programs mdprep runs while you are still in the builder, and with the
|
|
218
|
+
bundle uploaded it prepares the system, equilibrates it, and lets you
|
|
219
|
+
investigate every step: the structure at each stage, the protonation states,
|
|
220
|
+
the charge on every atom, the metal site's force constants, how the box
|
|
221
|
+
equilibrated, and the MD trajectory.
|
|
212
222
|
|
|
213
223
|
No crystal structure of your protein? Predict the complex with its cofactors
|
|
214
224
|
(Boltz or AlphaFold3 in ColabFold), then let mdprep find the closest X-ray
|
|
@@ -270,6 +280,9 @@ specified in steps in the manifest.
|
|
|
270
280
|
| Roe–Brooks OpenMM MD | [Molecular dynamics](docs/molecular_dynamics.md) | `examples/15_roe_brooks_openmm.yaml` |
|
|
271
281
|
| Predicted models: closest X-ray, crystal waters | [Predicted structures](docs/predicted_structures.md) | `mdprep closest-xray`, `mdprep transplant-waters` |
|
|
272
282
|
| A water bound to a metal | [Metal centers](docs/metals.md#waters-bound-in-a-metal-site) | `examples/17_syrb2_bound_water_mcpb.yaml` |
|
|
283
|
+
| A heme: cytochrome P450 | [Metal centers](docs/metals.md#a-metal-inside-a-cofactor-hemes) | `examples/19_cyp119_heme_mcpb.yaml` |
|
|
284
|
+
| Glycans, additives, modified residues: a peroxygenase | [Heterogens](docs/heterogens.md) | `examples/20_upo_5oxu_heme_glycans.yaml` |
|
|
285
|
+
| A flavin-dependent halogenase | [Enzyme families](docs/enzyme_families.md) | `examples/21_prna_fad_halogenase.yaml` |
|
|
273
286
|
| Preparing, running and investigating in Colab | [Colab example notes](examples/README.md) | `examples/mdprep_colab.ipynb` |
|
|
274
287
|
| Guided Colab builder (legacy) | [Colab example notes](examples/README.md) | `examples/mdprep_interactive_colab.ipynb` |
|
|
275
288
|
| Complete Fe(III) workflow | [7E07 tutorial](examples/tutorials/7E07_bonded_fe3/README.md) | `examples/tutorials/7E07_bonded_fe3/system.yaml` |
|
|
@@ -294,8 +307,11 @@ charge model, protonation, force field, QM method, or metal model.
|
|
|
294
307
|
|
|
295
308
|
## Current limitations
|
|
296
309
|
|
|
297
|
-
mdprep does not support noncanonical amino acids inside peptide chains
|
|
298
|
-
|
|
310
|
+
mdprep does not support noncanonical amino acids inside peptide chains
|
|
311
|
+
(a modified residue with a standard parent can be replaced by it), covalent
|
|
312
|
+
ligands (heme c and the bonded hemes of peroxidases among them; glycans and
|
|
313
|
+
other bonded heterogens can only be removed), metal clusters, oxoanions such
|
|
314
|
+
as vanadate, automatic loop modeling (a missing loop is left as two
|
|
299
315
|
termini), a metal-bound hydroxide, ORCA, Multiwfn, more than one independently
|
|
300
316
|
fitted bonded MCPB site (copies of one site in an oligomer share a single
|
|
301
317
|
fit), or a bonded MCPB site bound by two chains. Unsupported chemistry fails
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# mdprep
|
|
2
2
|
|
|
3
|
-
`mdprep` 0.
|
|
3
|
+
`mdprep` 0.5.0 prepares reproducible Amber molecular-dynamics systems from a
|
|
4
4
|
PDB structure and a validated YAML manifest. It supports standard proteins,
|
|
5
5
|
independent ligands and cofactors, explicit metal models, optional active-site
|
|
6
6
|
QM/MM refinement, final `tleap` assembly, validation, and an optional OpenMM
|
|
@@ -19,7 +19,15 @@ recorded in the output reports.
|
|
|
19
19
|
- Multiple GAFF or GAFF2 ligands/cofactors with AM1-BCC, user mol2/frcmod,
|
|
20
20
|
PySCF gas-phase RESP, or electrostatically embedded PySCF QMMESP charges.
|
|
21
21
|
- Amber nonbonded metal models or bonded MCPB.py models with explicit
|
|
22
|
-
coordinating atoms, charges, and multiplicities
|
|
22
|
+
coordinating atoms, charges, and multiplicities -- including a metal
|
|
23
|
+
deposited inside a cofactor: a cytochrome P450's heme iron, bonded to the
|
|
24
|
+
porphyrin, the cysteine and a water ([docs/metals.md](docs/metals.md#a-metal-inside-a-cofactor-hemes)).
|
|
25
|
+
- Heterogens that are not ligands, read from the file's LINK and MODRES
|
|
26
|
+
records: glycans and crystallisation additives removed on one question
|
|
27
|
+
each, selenomethionine replaced by methionine, and FAD, FMN, SAM and the
|
|
28
|
+
nicotinamides offered with their SMILES and charge
|
|
29
|
+
([docs/heterogens.md](docs/heterogens.md)). What this means for each family
|
|
30
|
+
of halogenating enzymes is in [docs/enzyme_families.md](docs/enzyme_families.md).
|
|
23
31
|
- Dimers, trimers, tetramers: every protein chain in one system. Copies of one
|
|
24
32
|
protein can share parameters -- asked about once, matched residue for
|
|
25
33
|
residue by sequence and position rather than number, and a bonded metal site
|
|
@@ -150,13 +158,15 @@ explicitly request their removal.
|
|
|
150
158
|
|
|
151
159
|
For a guided workflow, use the [web input builder](https://miqueleg.github.io/mdprep/):
|
|
152
160
|
it shows the structure in 3D, asks only the questions your structure needs, and
|
|
153
|
-
writes a validated manifest and a bundle.
|
|
161
|
+
writes a validated manifest and a bundle. With no structure of your own, it
|
|
162
|
+
loads SyrB2 (PDB 2FCT) in one click. Then open the
|
|
154
163
|
[official Colab notebook](https://colab.research.google.com/github/miqueleg/mdprep/blob/master/examples/mdprep_colab.ipynb)
|
|
155
|
-
([`examples/mdprep_colab.ipynb`](examples/mdprep_colab.ipynb))
|
|
156
|
-
|
|
157
|
-
equilibrates it, and lets you
|
|
158
|
-
|
|
159
|
-
|
|
164
|
+
([`examples/mdprep_colab.ipynb`](examples/mdprep_colab.ipynb)): it installs
|
|
165
|
+
the programs mdprep runs while you are still in the builder, and with the
|
|
166
|
+
bundle uploaded it prepares the system, equilibrates it, and lets you
|
|
167
|
+
investigate every step: the structure at each stage, the protonation states,
|
|
168
|
+
the charge on every atom, the metal site's force constants, how the box
|
|
169
|
+
equilibrated, and the MD trajectory.
|
|
160
170
|
|
|
161
171
|
No crystal structure of your protein? Predict the complex with its cofactors
|
|
162
172
|
(Boltz or AlphaFold3 in ColabFold), then let mdprep find the closest X-ray
|
|
@@ -218,6 +228,9 @@ specified in steps in the manifest.
|
|
|
218
228
|
| Roe–Brooks OpenMM MD | [Molecular dynamics](docs/molecular_dynamics.md) | `examples/15_roe_brooks_openmm.yaml` |
|
|
219
229
|
| Predicted models: closest X-ray, crystal waters | [Predicted structures](docs/predicted_structures.md) | `mdprep closest-xray`, `mdprep transplant-waters` |
|
|
220
230
|
| A water bound to a metal | [Metal centers](docs/metals.md#waters-bound-in-a-metal-site) | `examples/17_syrb2_bound_water_mcpb.yaml` |
|
|
231
|
+
| A heme: cytochrome P450 | [Metal centers](docs/metals.md#a-metal-inside-a-cofactor-hemes) | `examples/19_cyp119_heme_mcpb.yaml` |
|
|
232
|
+
| Glycans, additives, modified residues: a peroxygenase | [Heterogens](docs/heterogens.md) | `examples/20_upo_5oxu_heme_glycans.yaml` |
|
|
233
|
+
| A flavin-dependent halogenase | [Enzyme families](docs/enzyme_families.md) | `examples/21_prna_fad_halogenase.yaml` |
|
|
221
234
|
| Preparing, running and investigating in Colab | [Colab example notes](examples/README.md) | `examples/mdprep_colab.ipynb` |
|
|
222
235
|
| Guided Colab builder (legacy) | [Colab example notes](examples/README.md) | `examples/mdprep_interactive_colab.ipynb` |
|
|
223
236
|
| Complete Fe(III) workflow | [7E07 tutorial](examples/tutorials/7E07_bonded_fe3/README.md) | `examples/tutorials/7E07_bonded_fe3/system.yaml` |
|
|
@@ -242,8 +255,11 @@ charge model, protonation, force field, QM method, or metal model.
|
|
|
242
255
|
|
|
243
256
|
## Current limitations
|
|
244
257
|
|
|
245
|
-
mdprep does not support noncanonical amino acids inside peptide chains
|
|
246
|
-
|
|
258
|
+
mdprep does not support noncanonical amino acids inside peptide chains
|
|
259
|
+
(a modified residue with a standard parent can be replaced by it), covalent
|
|
260
|
+
ligands (heme c and the bonded hemes of peroxidases among them; glycans and
|
|
261
|
+
other bonded heterogens can only be removed), metal clusters, oxoanions such
|
|
262
|
+
as vanadate, automatic loop modeling (a missing loop is left as two
|
|
247
263
|
termini), a metal-bound hydroxide, ORCA, Multiwfn, more than one independently
|
|
248
264
|
fitted bonded MCPB site (copies of one site in an oligomer share a single
|
|
249
265
|
fit), or a bonded MCPB site bound by two chains. Unsupported chemistry fails
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
- [Protonation](protonation.md)
|
|
9
9
|
- [Ligands](ligands.md)
|
|
10
10
|
- [Metal centers](metals.md)
|
|
11
|
+
- [Heterogens that are not ligands](heterogens.md)
|
|
12
|
+
- [Halogenating and dehalogenating enzymes](enzyme_families.md)
|
|
11
13
|
- [Dimers, trimers and tetramers](oligomers.md)
|
|
12
14
|
- [Predicted structures](predicted_structures.md)
|
|
13
15
|
- [MCPB Hessian-method benchmark](mcpb_xtb_benchmark.md)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Halogenating and Dehalogenating Enzymes
|
|
2
|
+
|
|
3
|
+
Enzymes that put a halogen on a carbon, or take one off, come from a dozen
|
|
4
|
+
families with little chemistry in common: non-heme iron, heme-thiolate and
|
|
5
|
+
heme-histidine centres, vanadate, flavins, SAM, corrinoids and iron-sulfur
|
|
6
|
+
clusters, and several with no cofactor at all. This page lists what mdprep
|
|
7
|
+
does with a representative of each, so that you know before you start whether
|
|
8
|
+
your enzyme is something it prepares, what it will ask, and where it stops.
|
|
9
|
+
|
|
10
|
+
Every representative below was loaded into the planner (`mdprep plan`, the web
|
|
11
|
+
builder and the Colab notebook all use it); the ones marked **prepared** were
|
|
12
|
+
also taken through the whole toolchain to a validated Amber topology.
|
|
13
|
+
|
|
14
|
+
| Family | Representative | What mdprep does |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Fe(II)/alpha-ketoglutarate halogenases | SyrB2 (2FCT), BesD (6NIE) | **Prepared.** Bonded Fe(II) site with the chloride and alpha-ketoglutarate in the MCPB model; examples 16-18. |
|
|
17
|
+
| Cytochrome P450 | CYP119 (1IO7) | **Prepared.** The heme's iron is read out into a residue of its own and bonded to the porphyrin, the cysteine thiolate and the water; example 19. |
|
|
18
|
+
| Unspecific peroxygenases (UPO) | AaeUPO (5OXU, 2YOR) | **Prepared.** Heme-thiolate as for a P450; the N-glycans and crystallisation additives removed on two questions; the magnesium on the heme's propionate nonbonded; example 20. |
|
|
19
|
+
| Chloroperoxidase | *C. fumago* CPO (1CPO) | **Prepared.** Heme-thiolate with no water on the iron: five-coordinate high-spin Fe(III), spin 6. 21 sugars (N- and O-linked) removed; the N-terminal pyroglutamate replaced by glutamine, whose side chain is rebuilt and starts close to Ser4 (minimise before anything else); the manganese nonbonded beside the bonded iron, since one bonded site is fitted per preparation. |
|
|
20
|
+
| Dehaloperoxidase | DHP A (2QFK) | **Not prepared.** A globin: heme bonded to the proximal histidine and the distal water, high-spin aquo Fe(III), spin 6; ammonium and sulfate additives removed. g-xTB's SCF for this site has several states, and in the lowest the search finds, one His-Fe-N angle's Seminario force constant is negative: mdprep stops there and names it ([metals.md](metals.md#a-zero-force-constant-is-reported-not-shipped)). |
|
|
21
|
+
| Myeloperoxidase, lactoperoxidase | MPO (1CXP) | **Refused**: the heme is bonded to the protein through three side chains (a covalently attached cofactor). |
|
|
22
|
+
| Vanadium haloperoxidases | *C. inaequalis* VCPO (1IDQ) | **Refused**: vanadate is an oxoanion, not a metal site mdprep can build. |
|
|
23
|
+
| Flavin-dependent halogenases | PrnA (2AR8), RebH (2OA1) | **Prepared** (PrnA). FAD's SMILES and charge (-2) are proposed; the substrate or product is typed in; example 21. RebH's free tryptophan carries the amino acid's name and is offered a rename first. |
|
|
24
|
+
| SAM-dependent fluorinase and chlorinase | FlA (1RQR, 2V7V) | **Prepared** (2V7V). SAM, SAH proposed; 5'-fluoro-5'-deoxyadenosine typed in (`FCC1OC(n2cnc3c(N)ncnc32)C(O)C1O`, charge 0). The active site lies between two subunits: keep all chains. 1RQR's selenomethionines are replaced by methionine on one question, and its free methionine is offered a rename. |
|
|
25
|
+
| Haloalkane dehalogenases | DhaA (4E46), DhlA (2DHC) | **Prepared** (both). No cofactor: 4E46's isopropanol and acetates removed and its chloride kept as a crystal ion; 2DHC's 1,2-dichloroethane typed in as a ligand. |
|
|
26
|
+
| L-2-haloacid dehalogenases | 1ZRN | **Prepared.** The ester intermediate on the catalytic aspartate is a heterogen bonded to the protein: removing it is asked, with nothing proposed; removed, the aspartate is prepared free. |
|
|
27
|
+
| Fluoroacetate dehalogenase | FAcD (3R3U) | **Prepared.** The nickel from the His-tag purification removed on its model question. |
|
|
28
|
+
| Iodotyrosine deiodinase | IYD (4TTB) | **Prepared.** FMN's SMILES and charge (-2) are proposed. FMN sits between the two chains of the dimer: keep both, and chain B's FMN takes chain A's parameters. |
|
|
29
|
+
| Reductive dehalogenases | RdhA (4UR0, 4RAS) | **Refused**: two [4Fe-4S] clusters, which no single metal site describes (as are the [2Fe-2S] clusters of Rieske oxygenases). |
|
|
30
|
+
|
|
31
|
+
## What a student meets on the way
|
|
32
|
+
|
|
33
|
+
- **Glycans.** Fungal peroxygenases are glycoproteins. Sugars bonded to the
|
|
34
|
+
protein are found from the file's LINK records, or by bond length if it has
|
|
35
|
+
none, and removing them is one question, proposed yes. See
|
|
36
|
+
[heterogens.md](heterogens.md#glycans).
|
|
37
|
+
- **Crystallisation additives.** Glycerol, methanol, sulfate, phosphate, PEG:
|
|
38
|
+
one question, proposed yes, every residue listed. Answer no to be asked
|
|
39
|
+
about each as a ligand.
|
|
40
|
+
- **Modified residues.** Selenomethionine is replaced by methionine on one
|
|
41
|
+
question. Anything else modified is asked with nothing proposed. A
|
|
42
|
+
pyroglutamate (chloroperoxidase's N-terminus) becomes a glutamine whose side
|
|
43
|
+
chain is built afresh and whose N-terminus is charged; the report says how
|
|
44
|
+
close the new side chain starts to its neighbours. See
|
|
45
|
+
[heterogens.md](heterogens.md#modified-residues).
|
|
46
|
+
- **Active sites between chains.** IYD's FMN and the fluorinase's substrate
|
|
47
|
+
are each held by two subunits: chain A alone leaves a third to nearly half
|
|
48
|
+
of the residues around them out, so keep all chains (the default). Copies
|
|
49
|
+
share their parameters ([oligomers.md](oligomers.md)); a ligand the file
|
|
50
|
+
names after the other chain of its site, as 2V7V does one of its three, is
|
|
51
|
+
asked about again, and the same answers serve.
|
|
52
|
+
- **A metal that is not part of the system.** A His-tag nickel, a buffer
|
|
53
|
+
cadmium: the metal's model question offers to remove it.
|
|
54
|
+
- **Magnesium and calcium** are proposed nonbonded.
|
|
55
|
+
- **Organic cofactors.** FAD, FMN, SAM, SAH, NAD+, NADH, NADP+ and NADPH are
|
|
56
|
+
recognised by name and atoms, and their SMILES and charge at pH 7 are
|
|
57
|
+
proposed with the protonation they assume. A reduced flavin (FADH-) is a
|
|
58
|
+
different molecule: change the SMILES and the charge if that is the state you
|
|
59
|
+
simulate.
|
|
60
|
+
- **Two metals and one heme.** In a peroxygenase the heme holds its iron and,
|
|
61
|
+
through a propionate, a magnesium; in chloroperoxidase a manganese. The iron
|
|
62
|
+
is fitted with MCPB.py and the heme's charges come from that fit; the other
|
|
63
|
+
metal stays a nonbonded ion, and the QM/MM refinement of the iron's site
|
|
64
|
+
treats it as part of the MM environment.
|
|
65
|
+
- **The iron's spin.** It is asked, with what usually decides it: the
|
|
66
|
+
chloroperoxidase iron has no water across from its cysteine (five-coordinate,
|
|
67
|
+
high-spin Fe(III), 6), the dehaloperoxidase iron has one across from its
|
|
68
|
+
histidine (high-spin aquo Fe(III), 6), a resting peroxygenase's water makes
|
|
69
|
+
it low-spin (2).
|
|
70
|
+
|
|
71
|
+
## Where mdprep stops
|
|
72
|
+
|
|
73
|
+
Covalently attached cofactors (heme c, the hemes of myeloperoxidase and
|
|
74
|
+
lactoperoxidase), vanadate and other oxoanions, iron-sulfur clusters,
|
|
75
|
+
corrinoids together with their clusters, modified residues with no standard
|
|
76
|
+
parent, and protein-protein crosslinks other than disulfides are refused when
|
|
77
|
+
the structure is loaded, with the reason. Two metal sites that would each need
|
|
78
|
+
their own MCPB fit are refused at the question that makes them so.
|
|
@@ -46,11 +46,30 @@ that. These have no suggested value, and a front end cannot skip them:
|
|
|
46
46
|
- **Removing unknown heterogens.** Normalization must never discard a residue
|
|
47
47
|
that was not explicitly configured, so the question names every residue at
|
|
48
48
|
stake.
|
|
49
|
+
- **Removing a heterogen bonded to the protein**, a covalent intermediate for
|
|
50
|
+
instance, and **replacing a modified residue** other than a selenomethionine.
|
|
49
51
|
- **Production length**, when MD is enabled. There is no sensible default.
|
|
50
52
|
|
|
51
53
|
Free monatomic metals are offered as metal sites, never as GAFF ligands. Bulk
|
|
52
54
|
counterions are treated as solvent and are not asked about at all.
|
|
53
55
|
|
|
56
|
+
## Heterogens that are not ligands
|
|
57
|
+
|
|
58
|
+
Before the ligands, the planner sorts out the heterogens that are not ones,
|
|
59
|
+
and asks about each group once, with every member listed:
|
|
60
|
+
|
|
61
|
+
- **Modified residues** in a chain -- replace each with its standard parent?
|
|
62
|
+
Proposed yes for selenomethionine; asked without a proposal otherwise.
|
|
63
|
+
- **Glycans** bonded to the protein -- remove them? Proposed yes.
|
|
64
|
+
- **Other heterogens bonded to the protein** -- remove them? No proposal.
|
|
65
|
+
- **Crystallisation additives** -- remove them? Proposed yes. Answer no to be
|
|
66
|
+
asked about each as a ligand.
|
|
67
|
+
|
|
68
|
+
Keeping a group mdprep cannot build stops the build at that question, and
|
|
69
|
+
every removal is written to `structure.remove_residues` with its reason. See
|
|
70
|
+
[heterogens.md](heterogens.md), and [enzyme_families.md](enzyme_families.md)
|
|
71
|
+
for what this means for each family of halogenating enzymes.
|
|
72
|
+
|
|
54
73
|
## Metal sites
|
|
55
74
|
|
|
56
75
|
Choosing `bonded_mcpb` proposes a coordination sphere from interatomic
|
|
@@ -64,11 +83,34 @@ and the site is reported for manual work rather than invented. The oxidation
|
|
|
64
83
|
state, the spin multiplicity and the capped-model charge have no defaults
|
|
65
84
|
either, because none of them can be read off a structure.
|
|
66
85
|
|
|
86
|
+
The spin is asked once, for the QM region: the metal, everything bonded to it
|
|
87
|
+
and the cofactors. One bonded site is fitted per preparation and the cofactors
|
|
88
|
+
in it are closed shell, so that one answer is also the spin of the site's
|
|
89
|
+
MCPB.py models (`ions[].multiplicity`, `mcpb.small_model_spin`,
|
|
90
|
+
`mcpb.large_model_spin`), and the metal is not asked separately. The question
|
|
91
|
+
says what usually decides it: high-spin Fe(II) is 5, high-spin Fe(III) 6,
|
|
92
|
+
Zn(II) 1, and for a heme, the ligands across the heme plane.
|
|
93
|
+
|
|
67
94
|
A ligand that coordinates the metal takes its charges from that site's MCPB fit
|
|
68
95
|
rather than an independent AM1-BCC calculation, since fitting a bonded donor
|
|
69
96
|
separately leaves the site electrostatically inconsistent. A ligand that does
|
|
70
97
|
not coordinate keeps AM1-BCC.
|
|
71
98
|
|
|
99
|
+
A titratable side chain on the metal -- an aspartate, a cysteine -- is asked
|
|
100
|
+
its protonation right after the shell is confirmed, before the model charge. The model charge is then proposed from the states as given:
|
|
101
|
+
a heme's cysteine is named CYS and counts as the thiolate, -1, once it has been
|
|
102
|
+
stated as CYM.
|
|
103
|
+
|
|
104
|
+
A metal deposited inside a cofactor, a heme's iron, is read out into a residue
|
|
105
|
+
of its own, and the porphyrin left behind is a ligand on it. Heme b's SMILES
|
|
106
|
+
and net charge are proposed, with the protonation they assume, and so are
|
|
107
|
+
FAD's, FMN's, SAM's, SAH's and the nicotinamides'; any other ligand's are
|
|
108
|
+
asked. See [metals.md](metals.md#a-metal-inside-a-cofactor-hemes) and
|
|
109
|
+
[ligands.md](ligands.md#cofactors-whose-smiles-is-proposed).
|
|
110
|
+
|
|
111
|
+
Magnesium and calcium are proposed nonbonded, and a metal that is not inside
|
|
112
|
+
a cofactor can be removed instead of modelled -- a nickel from a His-tag, say.
|
|
113
|
+
|
|
72
114
|
The Hessian defaults to GFN2, which is orders of magnitude cheaper than DFT and
|
|
73
115
|
is what makes a bonded site tractable outside a cluster; g-xTB and PySCF DFT
|
|
74
116
|
are offered too. The geometry comes from the QM/MM refinement stage, which is
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Heterogens That Are Not Ligands
|
|
2
|
+
|
|
3
|
+
A deposition's heterogens are not all molecules to parameterise. Some are
|
|
4
|
+
pieces of the protein: a selenomethionine is a methionine labelled to solve
|
|
5
|
+
the phases, written as a heterogen because its name is not one of the twenty.
|
|
6
|
+
Some are bonded to it: the sugars of a glycoprotein, a covalent intermediate,
|
|
7
|
+
the heme of a myeloperoxidase. Many are what the crystal was grown in:
|
|
8
|
+
glycerol, sulfate, PEG, methanol.
|
|
9
|
+
|
|
10
|
+
Offering each of these as a ligand asks for the SMILES and charge of fifteen
|
|
11
|
+
glycerols, and builds a sugar bonded to an asparagine as a free molecule at
|
|
12
|
+
bond length from it. So mdprep sorts them first, and asks about each group as
|
|
13
|
+
a group. Nothing is removed without the manifest saying so: every removal is
|
|
14
|
+
listed under `structure.remove_residues` with its reason, and reported.
|
|
15
|
+
|
|
16
|
+
## How mdprep knows
|
|
17
|
+
|
|
18
|
+
A bond cannot be told from a clash by distance: a predicted complex has ligand
|
|
19
|
+
atoms 1.8 A from the protein that are not bonded to it. A deposition says
|
|
20
|
+
which atoms are bonded across residues, and mdprep reads that:
|
|
21
|
+
|
|
22
|
+
| | PDB file | mmCIF |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| Bonds between residues | `LINK` | `_struct_conn` |
|
|
25
|
+
| Modified polymer residues and their parents | `MODRES` | `_pdbx_struct_mod_residue` |
|
|
26
|
+
|
|
27
|
+
A bond to a symmetry mate is not a bond in the molecule being built and is
|
|
28
|
+
ignored. Two things are also found without them, for a file another program
|
|
29
|
+
rewrote or a prediction:
|
|
30
|
+
|
|
31
|
+
- a heterogen with a backbone (`N`, `CA`, `C`) peptide-bonded to the protein
|
|
32
|
+
is a residue of the chain; a free amino acid, which has the same atoms and no
|
|
33
|
+
peptide bond, stays a ligand;
|
|
34
|
+
- a carbohydrate (NAG, MAN, BMA, FUC, ...) with an atom within 1.75 A of the
|
|
35
|
+
protein's is bonded to it. Nothing else sits that close to a protein in a
|
|
36
|
+
crystal; a sugar is the one heterogen for which distance is enough.
|
|
37
|
+
|
|
38
|
+
`mdprep plan` lists what it found under `modified_residues`, `glycans`,
|
|
39
|
+
`covalent_heterogens` and `additives`.
|
|
40
|
+
|
|
41
|
+
## Modified residues
|
|
42
|
+
|
|
43
|
+
A modified amino acid inside a chain cannot be built: no force field template
|
|
44
|
+
bonds it in. The question is whether to replace each with its standard parent
|
|
45
|
+
(`MSE` with `MET`, `CSO` with `CYS`, `SEP` with `SER`, `PCA` with `GLN`),
|
|
46
|
+
which keeps the backbone and the atoms the two share and builds the rest
|
|
47
|
+
through PDBFixer:
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
structure:
|
|
51
|
+
repair:
|
|
52
|
+
backend: pdbfixer
|
|
53
|
+
replace_modified_residues:
|
|
54
|
+
- selector: {chain: A, resname: MSE, resid: 14}
|
|
55
|
+
parent: MET
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For selenomethionine the answer is proposed, yes: the selenium is how the
|
|
59
|
+
methionine was labelled, not chemistry of the protein. For anything else
|
|
60
|
+
nothing is proposed, because the modification may be what the structure is
|
|
61
|
+
about: a phosphoserine replaced by serine has lost its phosphate. Answering no
|
|
62
|
+
stops the build. The parent comes from the file's `MODRES` records when it has
|
|
63
|
+
them, otherwise from a short table in `mdprep.structure.heterogens`; a
|
|
64
|
+
modified residue with no known parent is refused when the structure is loaded
|
|
65
|
+
(noncanonical amino acids inside a chain are not supported).
|
|
66
|
+
|
|
67
|
+
A replacement needs nothing else repaired: what the parent has and the
|
|
68
|
+
modified residue lacked is built whether or not `add_missing_heavy_atoms` is
|
|
69
|
+
set, and a chain's terminal `OXT` is left to tleap, as it is when nothing is
|
|
70
|
+
repaired.
|
|
71
|
+
|
|
72
|
+
A pyroglutamate (`PCA`), the N-terminus of many secreted proteins, is a
|
|
73
|
+
glutamine whose side chain has closed onto its own nitrogen as a lactam. The
|
|
74
|
+
two share atom names but not their places -- kept where they are, the
|
|
75
|
+
glutamine's CD would sit 1.5 A from its backbone N -- so a side chain bonded
|
|
76
|
+
to its own backbone (only proline's may be) is deleted beyond CB and built
|
|
77
|
+
again from the parent's template. The report lists the rebuilt atoms under
|
|
78
|
+
`side_chain_rebuilt`, and a warning says how close the new side chain comes
|
|
79
|
+
to its neighbours: PDBFixer places it in its template's rotamer and only
|
|
80
|
+
pushes apart atoms closer than 1.3 A, so on 1CPO the glutamine's NE2 starts
|
|
81
|
+
1.5 A from Ser4's OG, and tleap puts Ser4's hydroxyl hydrogen almost on top of
|
|
82
|
+
it. Minimise before anything else: a plain minimisation of the prepared 1CPO
|
|
83
|
+
separates them, leaving Ser4's hydroxyl hydrogen-bonded to Glu1's carbonyl and
|
|
84
|
+
every bond of both residues at its length. The replacement also changes the
|
|
85
|
+
chemistry: a pyroglutamate's N-terminus is a neutral lactam, a glutamine's a
|
|
86
|
+
charged amine.
|
|
87
|
+
|
|
88
|
+
## Glycans
|
|
89
|
+
|
|
90
|
+
Sugars bonded to the protein, and every sugar bonded to those. mdprep does not
|
|
91
|
+
build glycans -- their force field, GLYCAM, is not part of it -- so the
|
|
92
|
+
question is whether to remove them, and the proposal is yes: the protein is
|
|
93
|
+
prepared as if deglycosylated, which is the usual choice when they are far
|
|
94
|
+
from the site being studied. Check that none is near yours. Answering no stops
|
|
95
|
+
the build.
|
|
96
|
+
|
|
97
|
+
## Heterogens bonded to the protein
|
|
98
|
+
|
|
99
|
+
Anything else the file declares bonded to the protein: a covalent
|
|
100
|
+
intermediate, an inhibitor, a cofactor attached to a side chain. mdprep does
|
|
101
|
+
not build covalent ligands, so the question is whether to remove them, and
|
|
102
|
+
nothing is proposed, because the intermediate may be what the structure was
|
|
103
|
+
solved to show. Answering no stops the build.
|
|
104
|
+
|
|
105
|
+
Refused when the structure is loaded, with the reason:
|
|
106
|
+
|
|
107
|
+
- a bonded cofactor that holds a metal -- the heme of a myeloperoxidase or
|
|
108
|
+
lactoperoxidase, held by ester and sulfonium bonds; removing it would take
|
|
109
|
+
its metal site with it;
|
|
110
|
+
- a bonded heterogen that coordinates a metal;
|
|
111
|
+
- a declared bond between two protein residues that is neither a peptide bond
|
|
112
|
+
nor a disulfide (a Tyr-Cys or His-Tyr crosslink), which tleap would build
|
|
113
|
+
unbonded.
|
|
114
|
+
|
|
115
|
+
## Crystallisation additives
|
|
116
|
+
|
|
117
|
+
Components of buffers, cryoprotectants and precipitants: GOL, EDO, PEG, PG4,
|
|
118
|
+
PGE, 1PE, P6G, 2PE, 12P, 15P, PE4, PE5, P33, MPD, MRD, MOH, EOH, IPA, DMS, ACT,
|
|
119
|
+
ACY, FMT, SO4, PO4, NO3, NH4, TRS, EPE, MES, BTB, B3P, CIT, FLC, MLI, IMD, BME,
|
|
120
|
+
DTT and CAC. Removing them is proposed, every one listed with what it is. Some
|
|
121
|
+
are not artefacts -- a sulfate can sit where a substrate's phosphate binds, an
|
|
122
|
+
alcohol in a substrate tunnel -- so check the list against your active site.
|
|
123
|
+
Answer no and each is asked about as a ligand instead, where it can be
|
|
124
|
+
included or declined one by one.
|
|
125
|
+
|
|
126
|
+
A heterogen that coordinates a metal is part of that site, and is never on
|
|
127
|
+
this list whatever its name.
|
|
128
|
+
|
|
129
|
+
## Metals that are not part of the system
|
|
130
|
+
|
|
131
|
+
A metal that is not inside a cofactor can also be removed: a nickel from a
|
|
132
|
+
His-tag purification, a cadmium or zinc from the crystallisation buffer. Its
|
|
133
|
+
model question offers **Remove it** besides bonded and nonbonded, and nothing
|
|
134
|
+
more is asked about it. A cofactor's metal -- a heme's iron -- cannot be
|
|
135
|
+
removed without its cofactor.
|
|
136
|
+
|
|
137
|
+
Magnesium and calcium are proposed nonbonded even with a coordination shell:
|
|
138
|
+
they are closed-shell ions held by electrostatics, which an ion model
|
|
139
|
+
describes. Every other metal with a shell is proposed bonded.
|
|
140
|
+
|
|
141
|
+
## What is refused outright
|
|
142
|
+
|
|
143
|
+
- **Metal clusters**: a residue holding several metal atoms, such as an
|
|
144
|
+
iron-sulfur cluster (SF4, FES, F3S) -- the [4Fe-4S] clusters of a reductive
|
|
145
|
+
dehalogenase, the [2Fe-2S] of a Rieske oxygenase.
|
|
146
|
+
- **Oxoanions**: a metal whose other atoms are bonded to nothing but it,
|
|
147
|
+
such as the vanadate of a vanadium haloperoxidase. It is neither a metal
|
|
148
|
+
site mdprep can build around a one-atom metal nor a ligand antechamber can
|
|
149
|
+
parameterise.
|
|
150
|
+
|
|
151
|
+
See [enzyme_families.md](enzyme_families.md) for how each family of
|
|
152
|
+
halogenating and dehalogenating enzymes is handled.
|