mdprep 0.4.0__tar.gz → 0.5.1__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.1}/CHANGELOG.md +218 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/CONTRIBUTING.md +13 -8
- {mdprep-0.4.0 → mdprep-0.5.1}/PKG-INFO +27 -11
- {mdprep-0.4.0 → mdprep-0.5.1}/README.md +26 -10
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/README.md +2 -0
- mdprep-0.5.1/docs/enzyme_families.md +78 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/guided_manifests.md +47 -0
- mdprep-0.5.1/docs/heterogens.md +152 -0
- mdprep-0.5.1/docs/ligands.md +163 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/manifest_reference.md +82 -8
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/metals.md +176 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/molecular_dynamics.md +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/predicted_structures.md +4 -3
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/protonation.md +8 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/troubleshooting.md +65 -2
- mdprep-0.5.1/examples/19_cyp119_heme_mcpb.yaml +228 -0
- mdprep-0.5.1/examples/20_upo_5oxu_heme_glycans.yaml +352 -0
- mdprep-0.5.1/examples/21_prna_fad_halogenase.yaml +85 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/README.md +13 -7
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/colab_smoke_test.ipynb +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/mdprep_colab.ipynb +135 -299
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/mdprep_interactive_colab.ipynb +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/pyproject.toml +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/__init__.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/cli.py +13 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/config/decisions.py +855 -213
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/config/models.py +165 -5
- mdprep-0.5.1/src/mdprep/ligands/cofactors.py +215 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/extract.py +22 -12
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/hydrogenate.py +257 -76
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/gxtb_hessian.py +184 -5
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/hydrogenate.py +3 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/mcpb.py +46 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/pyscf_mcpb.py +10 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/apply.py +11 -20
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/histidine_geometry.py +16 -22
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/histidine_qmmm.py +19 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/histidine_xtb.py +3 -3
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/temporary_hydrogenation.py +21 -6
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/coordinates.py +2 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/mapping.py +3 -4
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/selection.py +15 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/reports/structure_report.py +64 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/classify.py +9 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/completeness.py +16 -6
- mdprep-0.5.1/src/mdprep/structure/heterogens.py +476 -0
- mdprep-0.5.1/src/mdprep/structure/hydrogens.py +221 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/inspect.py +18 -0
- mdprep-0.5.1/src/mdprep/structure/links.py +308 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/mmcif.py +21 -4
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/models.py +13 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/normalize.py +204 -44
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/oligomer.py +3 -9
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/pdb.py +121 -17
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/pdb_fields.py +188 -14
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/repair.py +314 -15
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/selectors.py +6 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/waters.py +2 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/init.py +8 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/prepare.py +1 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/runtime.py +21 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/wizard.py +9 -1
- mdprep-0.5.1/tests/browser/example_button.mjs +72 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/browser/student_flow.mjs +7 -0
- mdprep-0.5.1/tests/data/cofactors/fad_2ar8.pdb +55 -0
- mdprep-0.5.1/tests/data/cofactors/fmn_4ttb.pdb +33 -0
- mdprep-0.5.1/tests/data/cofactors/hem_2qfk.pdb +46 -0
- mdprep-0.5.1/tests/data/cofactors/nad_2jhf.pdb +46 -0
- mdprep-0.5.1/tests/data/cofactors/nai_4plz.pdb +46 -0
- mdprep-0.5.1/tests/data/cofactors/nap_4lbs.pdb +50 -0
- mdprep-0.5.1/tests/data/cofactors/ndp_1kmv.pdb +50 -0
- mdprep-0.5.1/tests/data/cofactors/sah_8pb4.pdb +28 -0
- mdprep-0.5.1/tests/data/cofactors/sam_7rwg.pdb +29 -0
- mdprep-0.5.1/tests/data/heterogens/covalent_intermediate_1zrn.pdb +64 -0
- mdprep-0.5.1/tests/data/heterogens/pyroglutamate_1cpo.pdb +89 -0
- mdprep-0.5.1/tests/data/heterogens/selenomethionine_1rqr.pdb +58 -0
- mdprep-0.5.1/tests/data/heterogens/vanadate_1idq.pdb +39 -0
- mdprep-0.5.1/tests/data/input_hydrogens/README.md +28 -0
- mdprep-0.5.1/tests/data/input_hydrogens/docked_polar_only.pdb +19 -0
- mdprep-0.5.1/tests/data/input_hydrogens/riding_peptide.pdb +172 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.converter.pdb +212 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.pdb +77 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.pdbfixer.pdb +132 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.pymol.pdb +142 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.pymol_polar.pdb +105 -0
- mdprep-0.5.1/tests/data/input_hydrogens/syrb2_site.reduce.pdb +120 -0
- mdprep-0.5.1/tests/data/metals/dhp_2qfk_small_model.xyz +93 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_besd_halogenase_case.py +3 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_colab_official_notebook.py +56 -16
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_colab_smoke_notebook.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_crystal_ions.py +0 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_gxtb_hessian.py +43 -0
- mdprep-0.5.1/tests/test_external_halogenase_families.py +130 -0
- mdprep-0.5.1/tests/test_external_heme_mcpb.py +98 -0
- mdprep-0.5.1/tests/test_external_modified_residues.py +154 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_structure_repair.py +3 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_gxtb_hessian.py +173 -0
- mdprep-0.5.1/tests/test_heterogen_groups.py +649 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_histidine_qmmm.py +48 -14
- mdprep-0.5.1/tests/test_input_hydrogens.py +658 -0
- mdprep-0.5.1/tests/test_known_cofactors.py +114 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ligand_hydrogenation.py +120 -24
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_manifest_decisions.py +20 -5
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_manifest_wizard.py +4 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mcpb_parameter_comparison.py +47 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_metal_bound_water.py +4 -15
- mdprep-0.5.1/tests/test_metal_cofactors.py +405 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_oligomers.py +0 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_packaging_metadata.py +1 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pdb_large_serials.py +33 -5
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pdb_parser.py +35 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_protonation_xtb_workflow.py +20 -7
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_qm_region_spin_state.py +20 -36
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_selection.py +95 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_remove_hydrogens.py +9 -5
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_runtime_requirements.py +16 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_runtime_requirements_cover_every_option.py +23 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_structure_completeness.py +0 -3
- mdprep-0.5.1/tests/test_structure_links.py +219 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_structure_normalize.py +5 -1
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_structure_repair_inputs.py +32 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_syrb2_bound_water_case.py +1 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_web_builder_bound_water_case.py +10 -6
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_web_builder_browser.py +8 -4
- mdprep-0.5.1/tests/test_web_builder_example_button.py +62 -0
- mdprep-0.5.1/tests/test_web_builder_flavin_case.py +120 -0
- mdprep-0.5.1/tests/test_web_builder_heme_case.py +119 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_web_builder_oligomer_case.py +2 -2
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_web_builder_reference_case.py +13 -13
- mdprep-0.5.1/tests/test_web_builder_upo_case.py +104 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_xtb_water_hydrogens.py +4 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/web/README.md +7 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/web/app.js +79 -33
- {mdprep-0.4.0 → mdprep-0.5.1}/web/index.html +16 -5
- {mdprep-0.4.0 → mdprep-0.5.1}/web/style.css +23 -0
- mdprep-0.4.0/docs/ligands.md +0 -91
- {mdprep-0.4.0 → mdprep-0.5.1}/.gitignore +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/AGENTS.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/CITATION.cff +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/LICENSE +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/developer_notes.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/installation.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/mcpb_xtb_benchmark.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/oligomers.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/qmmesp_pyscf.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/qmmm_refinement.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/quickstart.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/docs/tleap_and_validation.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/environment-dev.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/environment-minimal.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/environment.yml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/00_basic_protein.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/01_protein_only_ff19sb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/02_manual_catalytic_protonation.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/03_multi_ligand_am1bcc.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/04_qmmesp_pyscf_ligand.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/05_histidine_gxtb_sp.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/06_disulfide_manual.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/07_gas_resp_pyscf_ligand.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/08_nonbonded_zinc_1264.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/09_bonded_zinc_mcpb_prepare.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/10_qmmm_refinement_ash.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/11_qmmm_metal_gfn2_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/12_qmmm_metal_mace_polar1_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/13_qmmm_refinement_gxtb_mechanical.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/14_qmmm_refinement_mace_polar1_mechanical.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/15_roe_brooks_openmm.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/16_besd_halogenase_gfn2_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/17_syrb2_bound_water_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/18_syrb2_dimer_shared_mcpb.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/colab/mdprep_colab_pipeline.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/examples/mdprep_colab_run.ipynb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/_selftest_data/basic_protein.yaml +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/_selftest_data/ligand_sub.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/antechamber.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/commands.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/mol2.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/parmchk2.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ambertools/resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/dcd.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/equilibration.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/metal_site.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/prmtop.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/analysis/trajectory.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/charges/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/charges/esp_grid.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/config/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/config/loader.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/external/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/external/discovery.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/external/runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/forcefields.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/log_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/residues.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/leap/runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/identity.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/pyscf_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/ligands/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/md/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/md/imaging.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/md/roe_brooks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/c4.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/coordination.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/mace_polar1_hessian.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/mace_polar1_worker.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/mcpb_compat.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/nonbonded.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/parameter_comparison.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/through_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/metals/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/disulfide_states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/overrides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/pka_rules.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/propka.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/propka_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/xtb_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/protonation/xtb_runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/qm/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/qm/point_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/qm/pyscf_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/qm/pyscf_runner.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/qm/xtb_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/ash.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/openmm_minimizer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/refinement/workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/reports/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/closest_xray.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/coordination.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/disulfides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/reader.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/rename.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/structure/writer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/validation/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/validation/openmm_check.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/validation/parmed_check.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/validation/topology.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/doctor.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/inspect.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/selftest.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/src/mdprep/workflows/validate.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/__init__.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/besd_structure.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/browser/launch.mjs +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/browser/smoke.mjs +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/conftest.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/amber/README.md +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/amber/ace_ala_gly_nme.inpcrd +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/amber/ace_ala_gly_nme.prmtop +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/boltz_far_donor.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/boltz_model.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/boltz_smiles_ligands.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/boltz_wide_names.cif +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_cof.frcmod +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_cof.good.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.atom_count_mismatch.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.bad_charge.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.frcmod +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.good.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.renamed.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.shifted_coords.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/ligands/ligand_sub.small_residual.mol2 +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/propka_sample.pka +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_altloc.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_atom_record_ligand_blank_chain.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_blank_chain.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_cyx_disulfide.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_disulfide.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_histidine_ring.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_histidine_ring_hydrogenated.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_histidine_water_oxygen.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_histidine_zinc.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_insertion_code.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_two_ligands.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_with_hydrogenated_free_lysine.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_with_hydrogens.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_with_waters.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/protein_zinc_aqua.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/xtb_hid_stdout.txt +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/xtb_hie_stdout.txt +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/data/zinc_only.pdb +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_altloc.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_amber_resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ambertools_commands.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_analysis.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_browser_planning_path.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_build_residues_is_defined_once.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_classify.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_closest_xray.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_colab_wizard_notebook.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_config_examples.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_config_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_coordinating_ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_disulfide_assignment.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_disulfide_leap_mapping.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_disulfides.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_doctor.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_esp_grid.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_amber_resp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_ambertools.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_dcd_openmm.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_mace_polar1.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_md_restraint_frame.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_md_snapshot_box.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_metals.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_oligomer_mcpb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_propka_xtb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_pyscf.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_tleap.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_water_transplant.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_external_xtb_embedding.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_histidine_cluster_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_histidine_geometry.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_import.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_init_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_init_ligand_placeholders.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_inspect_cli.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ions.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_leap_builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_leap_forcefields.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_leap_input_pdb.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_leap_ligand_residue_names.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_leap_log_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ligand_extraction.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ligand_mol2_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_ligand_workflow_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mace_polar1_hessian.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_manifest_paths.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_manual_protonation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mcpb_compat.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mcpb_pyscf_fixed_geometry.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_md_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_md_imaging.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_metal_hydrogenation_preservation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_metals.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mmcif.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mol2_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_mol2_validation.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_no_openbabel.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pdb_roundtrip_property.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pdb_writer.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pka_rules.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_point_charges.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prediction_pdb_quirks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_ligands_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_protonation_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_pyscf_ligands_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_refinement_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_structure_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_prepare_tleap_stage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_propka_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_protonation_propka_workflow.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_protonation_reuse_refined.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_protonation_states.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pyscf_esp_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_pyscf_runner_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_qmmesp_correctness.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_qmmesp_final_mol2_usage.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_qmmesp_no_environment_fit.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_readme_example.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_ash.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_config.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_coordinates.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_openmm.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_platform.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_refinement_report.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_residue_rename.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_roe_brooks.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_roe_brooks_restraints.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_selectors.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_selftest_installed.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_temporary_hydrogenation_hold_back.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_through_metal.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_tleap_workflow_mocked.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_validation_helpers.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_validation_topology.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_water_transplant.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_web_bundle_zip.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_xtb_command_builder.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_xtb_esp.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/tests/test_xtb_parser.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/web/.gitignore +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/web/build.py +0 -0
- {mdprep-0.4.0 → mdprep-0.5.1}/web/zip.js +0 -0
|
@@ -1,5 +1,223 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.1 - 2026-10-26
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `ligands[].keep_input_hydrogens`: what to do with input hydrogens that
|
|
8
|
+
disagree with the ligand's SMILES. Unset, they are replaced and reported;
|
|
9
|
+
`true` makes the disagreement an error (a `user_mol2` implies it); `false`
|
|
10
|
+
replaces them without comparing.
|
|
11
|
+
- The structure report's input-hydrogen record (how many were removed from
|
|
12
|
+
protein, water and each other residue, and which ligands kept theirs) and
|
|
13
|
+
its ligand-hydrogen record (placed from the SMILES, kept because they agree
|
|
14
|
+
with it, or replaced, with the atoms that disagreed). The builder's findings
|
|
15
|
+
list the removed hydrogens too.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- A ligand's SMILES is used whether or not the input has hydrogens on it.
|
|
20
|
+
Hydrogens it has are compared with the SMILES heavy atom by heavy atom and
|
|
21
|
+
kept only if they agree; otherwise they are replaced by the SMILES's and the
|
|
22
|
+
disagreeing atoms are reported (`LIGAND_HYDROGENS_REPLACED`). A ligand with
|
|
23
|
+
any hydrogens at all used to be left as it was and its SMILES ignored, and
|
|
24
|
+
the builder did not ask for one. In consequence a ligand that arrives with
|
|
25
|
+
hydrogens needs a SMILES, unless a `user_mol2` describes it: one without is
|
|
26
|
+
refused as the structure is read, as is one with neither hydrogens nor a
|
|
27
|
+
SMILES (a hydrogen-free molecule can be declared with `expected_formula`,
|
|
28
|
+
as before, or with a SMILES that gives it none). The 7E07 tutorial's
|
|
29
|
+
ligands carry their SMILES now.
|
|
30
|
+
- Every ligand whose hydrogens come from or are checked against a SMILES has
|
|
31
|
+
its electrons counted against its net charge and multiplicity as the
|
|
32
|
+
structure is read; a count the multiplicity cannot have stops the run.
|
|
33
|
+
- The web builder and the official Colab notebook install a pinned mdprep
|
|
34
|
+
release (0.5.0) instead of git master, so everyone in a workshop runs the
|
|
35
|
+
same code and the manifest the builder writes is read by the version that
|
|
36
|
+
wrote it. CONTRIBUTING's release steps raise the pin after the tag has
|
|
37
|
+
published, and a test checks that the page and the notebook name the same
|
|
38
|
+
release.
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- A structure that arrives with hydrogens -- a deposition refined with riding
|
|
43
|
+
hydrogens, or a model run through PyMOL, reduce, PDBFixer or a format converter --
|
|
44
|
+
no longer stops the run. `structure.remove_input_hydrogens` used to act only
|
|
45
|
+
at the end of protonation, so the hydrogens reached everything before it:
|
|
46
|
+
PyMOL and format converters protonate chlorides, and the builder refused the HCl as
|
|
47
|
+
a ligand named after an Amber ion; reduce numbers every hydrogen it adds 0,
|
|
48
|
+
and the reader refused the file for its CONECT records; a lysine's riding
|
|
49
|
+
HZ3 stopped the temporary hydrogenation for xTB, which built the neutral
|
|
50
|
+
lysine PropKa asked for; and PDBFixer's alpha-ketoglutarate, protonated as
|
|
51
|
+
the neutral acid, was kept and gave MCPB negative angle force constants.
|
|
52
|
+
The hydrogens are now removed as the structure is read, in the builder,
|
|
53
|
+
`mdprep plan`, `mdprep init` and the structure stage alike, so the plan is
|
|
54
|
+
made about the structure that is built and PDBFixer repairs that structure
|
|
55
|
+
too. A ligand's are compared with its SMILES (see Changed).
|
|
56
|
+
- Structure repair lost atoms without saying so when several in a residue
|
|
57
|
+
shared a name: PDBFixer keeps one of them, and the check that no atom went
|
|
58
|
+
missing looked atoms up by name. A format converter names every hydrogen H,
|
|
59
|
+
so six of an alpha-ketoglutarate's went in and one came out. A ligand's
|
|
60
|
+
hydrogens now go round PDBFixer, which has nothing to do with them, and any
|
|
61
|
+
other merge stops the repair with the atoms it affected.
|
|
62
|
+
- Atoms written more than once at partial occupancy without altloc labels --
|
|
63
|
+
a format converter keeps both conformers of a residue and drops the A and B,
|
|
64
|
+
leaving two OD2s in an aspartate at 0.50 each -- are read as the alternate
|
|
65
|
+
locations they are: labelled in file order, chosen by the altloc policy, and
|
|
66
|
+
reported. PDBFixer used to keep one of each pair without saying which.
|
|
67
|
+
- A docked ligand carrying only its polar hydrogens stopped antechamber with
|
|
68
|
+
an odd number of electrons, after the protonation stage had run: having
|
|
69
|
+
hydrogens at all made the builder skip its SMILES question and the
|
|
70
|
+
preparation keep them. It now gets the SMILES's hydrogens, and a manifest
|
|
71
|
+
without its SMILES is refused at once with the reason.
|
|
72
|
+
- CONECT records in a file whose atom serials repeat are followed to the
|
|
73
|
+
atoms' new numbers when the serial they name is unique, and dropped with a
|
|
74
|
+
warning when it is not, instead of the file being refused.
|
|
75
|
+
- The temporary hydrogenation for the xTB histidine comparison stops only
|
|
76
|
+
when a heavy atom goes missing. A hydrogen the residue had and its assigned
|
|
77
|
+
state does not is dropped, as the hydrogens are temporary anyway.
|
|
78
|
+
- One test of what a hydrogen is, the element the reader settled on, instead
|
|
79
|
+
of five that disagreed. A mercury ion written without an element column was
|
|
80
|
+
a hydrogen to two of them, and deuterium was one to only two.
|
|
81
|
+
- A four-character atom name starting with H in a residue without element
|
|
82
|
+
columns (HG21, HO2') is read as a hydrogen, not as mercury or holmium.
|
|
83
|
+
- The official notebook's 3D views hid the metal site they were drawn to
|
|
84
|
+
show: an Fe/alpha-KG enzyme holds its iron inside a beta-barrel, and the
|
|
85
|
+
opaque cartoon covered it. With a metal present the cartoon is now
|
|
86
|
+
translucent, every residue within the site radius is drawn as sticks (it
|
|
87
|
+
was only those within 3 A), and the view is framed on the site. Section
|
|
88
|
+
H's `SITE_RADIUS` reached the atoms it selected but not the drawing, so
|
|
89
|
+
raising it changed nothing visible; it now does both.
|
|
90
|
+
|
|
91
|
+
## 0.5.0 - 2026-10-23
|
|
92
|
+
|
|
93
|
+
### Added
|
|
94
|
+
|
|
95
|
+
- The web builder's **Load SyrB2 (PDB 2FCT)** button: the workshop's worked
|
|
96
|
+
example, for a student with no structure of their own, fetched from RCSB as
|
|
97
|
+
a typed ID would be.
|
|
98
|
+
- `mdprep.workflows.runtime.full_toolchain_manifest()`: a manifest that calls
|
|
99
|
+
every program mdprep installs, for an environment built before the real
|
|
100
|
+
manifest exists.
|
|
101
|
+
- Hemes and other metals deposited inside a cofactor. The PDB writes heme b as
|
|
102
|
+
one residue, HEM, with its iron among its atoms; mdprep now moves the metal
|
|
103
|
+
into a residue of its own as any structure is read, named after the element
|
|
104
|
+
with the cofactor's chain and number, and the porphyrin left behind is a
|
|
105
|
+
ligand that coordinates it. A cytochrome P450 becomes an ordinary bonded
|
|
106
|
+
iron site: the four porphyrin nitrogens, the cysteine and the water. The
|
|
107
|
+
oxidation state is asked, not read off the assigned name. Heme b's SMILES
|
|
108
|
+
and net charge (-4, both propionates ionised) are proposed with the
|
|
109
|
+
assumption stated. See `docs/metals.md`.
|
|
110
|
+
- `examples/19_cyp119_heme_mcpb.yaml` and the vendored 1IO7 deposition:
|
|
111
|
+
CYP119 at rest, low-spin Fe(III).
|
|
112
|
+
- `mcpb.pyscf.xtb.electronic_temperature_kelvin`: Fermi smearing for the xTB
|
|
113
|
+
Hessian and the GFN2 ESP of the large model. An open-shell heme's SCF does
|
|
114
|
+
not converge at xTB's own 300 K; the builder sets 1000 K for a site whose
|
|
115
|
+
donors include a heme, and an SCF failure without it names the setting.
|
|
116
|
+
- A residue still holding several metal atoms (an iron-sulfur cluster) and
|
|
117
|
+
heme c, a covalent ligand, are refused with the reason before any question
|
|
118
|
+
is asked.
|
|
119
|
+
- Heterogens that are not ligands. mdprep reads the bonds a deposition
|
|
120
|
+
declares (PDB LINK, mmCIF `_struct_conn`) and its modified residues (MODRES,
|
|
121
|
+
`_pdbx_struct_mod_residue`), and sorts the heterogens before asking about
|
|
122
|
+
ligands: modified residues in a chain, glycans, other heterogens bonded to
|
|
123
|
+
the protein, and crystallisation additives. Each group is one question with
|
|
124
|
+
every member listed. Glycans and additives are proposed for removal, a
|
|
125
|
+
selenomethionine for replacement by methionine; anything else is asked
|
|
126
|
+
without a proposal, and keeping what cannot be built stops at the question.
|
|
127
|
+
See `docs/heterogens.md`.
|
|
128
|
+
- `structure.remove_residues`: residues left out on purpose, each with its
|
|
129
|
+
reason, applied before anything else looks at the structure and reported.
|
|
130
|
+
- `structure.repair.replace_modified_residues`: modified residues replaced by
|
|
131
|
+
their standard parents through PDBFixer, exactly the ones listed.
|
|
132
|
+
- A metal that is not inside a cofactor can be removed on its model question
|
|
133
|
+
(a nickel from a His-tag purification). Magnesium and calcium are proposed
|
|
134
|
+
nonbonded.
|
|
135
|
+
- The SMILES and net charge of FAD, FMN, SAM, SAH, NAD+, NADH, NADP+ and NADPH
|
|
136
|
+
are proposed, at pH 7, with the protonation stated; each is tested against
|
|
137
|
+
a deposited cofactor.
|
|
138
|
+
- `examples/20_upo_5oxu_heme_glycans.yaml` (an unspecific peroxygenase:
|
|
139
|
+
heme-thiolate, magnesium, N-glycans, additives) and
|
|
140
|
+
`examples/21_prna_fad_halogenase.yaml` (a flavin-dependent halogenase),
|
|
141
|
+
with their depositions. `docs/enzyme_families.md` lists what mdprep does
|
|
142
|
+
with each family of halogenating and dehalogenating enzymes.
|
|
143
|
+
- Refused when the structure is loaded, with the reason: a cofactor bonded to
|
|
144
|
+
the protein that holds a metal (myeloperoxidase's heme), an oxoanion such as
|
|
145
|
+
vanadate, a modified residue with no standard parent, and a declared bond
|
|
146
|
+
between protein residues that is neither a peptide bond nor a disulfide.
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
|
|
150
|
+
- The spin is asked once, for the QM region. The per-metal multiplicity
|
|
151
|
+
question is gone; the QM region's answer is also the bonded site's
|
|
152
|
+
`ions[].multiplicity` and MCPB model spins.
|
|
153
|
+
- Crystallisation additives are no longer offered one by one as ligands
|
|
154
|
+
unless their removal is declined.
|
|
155
|
+
- The official Colab notebook takes its structure only from the builder's
|
|
156
|
+
bundle. Its predicted-model section (closest X-ray structure, crystal
|
|
157
|
+
waters), the SyrB2 example and the upload of an earlier run's results are
|
|
158
|
+
gone; `mdprep closest-xray` and `mdprep transplant-waters` still bring
|
|
159
|
+
waters across on the command line. It installs every program mdprep runs
|
|
160
|
+
first, before there is a bundle, so the install runs while the builder's
|
|
161
|
+
questions are answered; the MD follows the preparation directly, and the
|
|
162
|
+
investigation of both comes after. Sections, old to new: C to A, D to C,
|
|
163
|
+
F to D, G to F, H to G, I to H, J to I; B and E1-E8 keep their letters.
|
|
164
|
+
|
|
165
|
+
- The protonation of a titratable side chain on a metal is asked right after
|
|
166
|
+
the coordination shell is confirmed, before the spin and the model charge.
|
|
167
|
+
- Proposals carry their own explanation, shown by the builder and the
|
|
168
|
+
`mdprep init --interactive` wizard alike.
|
|
169
|
+
|
|
170
|
+
### Fixed
|
|
171
|
+
|
|
172
|
+
- A metal-bound cysteine stated as CYM stopped the protonation stage: OpenMM
|
|
173
|
+
calls the thiolate's hydrogen variant CYX. Every cysteine donor -- a zinc
|
|
174
|
+
finger's, a heme's -- reached this.
|
|
175
|
+
- The proposed model charge read a donor's charge from its residue name, so a
|
|
176
|
+
cysteine stated as CYM counted as neutral and an aspartate stated as ASH as
|
|
177
|
+
-1. It now counts the state given, and proposes nothing until it is given.
|
|
178
|
+
- The builder named a residue once per highlighted atom.
|
|
179
|
+
- The ligand bond-order check measured conjugated single bonds against
|
|
180
|
+
saturated lengths, so every amide, amino-heterocycle and flavin looked like
|
|
181
|
+
a wrong tautomer and a SMILES for FAD, NAD or SAM could not be applied.
|
|
182
|
+
- A heme on both a bonded iron and a nonbonded magnesium, as in a
|
|
183
|
+
peroxygenase, was refused for taking its charges from the magnesium's
|
|
184
|
+
non-existent fit.
|
|
185
|
+
- QM/MM refinement stopped on a nonbonded metal or a crystal ion next to the
|
|
186
|
+
QM region; both are MM environment with known parameters.
|
|
187
|
+
- A lysine PropKa made neutral lost a hydrogen's charge in the embedding of
|
|
188
|
+
the xTB histidine comparison: OpenMM names its amine hydrogens HZ1 and HZ2,
|
|
189
|
+
ff14SB's LYN HZ2 and HZ3. The histidines around it were compared beside a
|
|
190
|
+
lysine at -0.39 e, and the report asked for the lysine to be declared as a
|
|
191
|
+
ligand. PrnA's Lys79 reached this: its four histidines keep their states,
|
|
192
|
+
but their HID-HIE gaps moved by 1 to 3 kcal/mol, enough to flip a closer
|
|
193
|
+
call.
|
|
194
|
+
- A vanadate was split into a vanadium and four unbonded oxygens.
|
|
195
|
+
- Replacing a modified residue stopped the run unless
|
|
196
|
+
`structure.repair.add_missing_heavy_atoms` was set: PDBFixer keeps a blank
|
|
197
|
+
insertion code as a space, so the replaced residue's own new atoms counted
|
|
198
|
+
as unrequested. Any replacement in a structure missing nothing else reached
|
|
199
|
+
this, 1CPO's pyroglutamate among them. A chain's terminal OXT, which the
|
|
200
|
+
planner never asks about, stopped such a run too; it is left to tleap.
|
|
201
|
+
- A pyroglutamate replaced by glutamine kept its lactam's CD 1.5 A from its
|
|
202
|
+
own backbone nitrogen. A replaced side chain bonded to its own backbone is
|
|
203
|
+
rebuilt beyond CB from the parent's template, listed under
|
|
204
|
+
`side_chain_rebuilt`, with a warning naming its closest contact.
|
|
205
|
+
- The g-xTB Hessian of a high-spin heme site could fail to converge, or
|
|
206
|
+
converge in whichever of two states the thread count led it to: on 2QFK's
|
|
207
|
+
aquo Fe(III), 27 kcal/mol apart, with Fe-N force constants up to 1.7 times
|
|
208
|
+
different. `mcpb.pyscf.xtb.scf_annealing_kelvin` converges the SCF straight
|
|
209
|
+
and from each hotter temperature listed, single-threaded, and takes the
|
|
210
|
+
Hessian from the lowest; the builder sets it, with `max_scf_iterations:
|
|
211
|
+
3000`, for every heme site. Examples 19 and 20 carry both. 2QFK itself now
|
|
212
|
+
stops every time at the same place, a negative His-Fe-N angle constant,
|
|
213
|
+
instead of passing or failing by the thread count. See `docs/metals.md`.
|
|
214
|
+
- A Seminario term MCPB.py found negative and wrote as zero was reported only
|
|
215
|
+
as a 0.0 in the frcmod; the error now names it, its atoms and its value.
|
|
216
|
+
- The bond-order check read a porphyrin bond by bond, so 2QFK's heme, refined
|
|
217
|
+
with one pyrrole's beta-beta bond at single-bond length, was refused as a
|
|
218
|
+
wrong tautomer of heme b. A porphyrin's core is skipped like a carboxylate;
|
|
219
|
+
a chlorin's reduced ring is still checked.
|
|
220
|
+
|
|
3
221
|
## 0.4.0 - 2026-10-20
|
|
4
222
|
|
|
5
223
|
### Added
|
|
@@ -74,11 +74,17 @@ To cut a release:
|
|
|
74
74
|
2. Retitle the changelog's `## Unreleased` section to `## <version> - <date>`.
|
|
75
75
|
The workflow refuses a tag with no such heading.
|
|
76
76
|
3. Update the `mdprep[md,qm]==` pin in `examples/*.ipynb` and the assertion in
|
|
77
|
-
`tests/test_colab_smoke_notebook.py`.
|
|
78
|
-
master and needs no bump.
|
|
77
|
+
`tests/test_colab_smoke_notebook.py`.
|
|
79
78
|
4. Execute the official notebook end to end (below) and fix whatever it
|
|
80
79
|
finds: it is what students run, and nothing else exercises it whole.
|
|
81
80
|
5. Merge, then `git tag -a vX.Y.Z` and push the tag.
|
|
81
|
+
6. **Once the tag has published to PyPI**, raise the release the students'
|
|
82
|
+
tools install: `MDPREP_INSTALL` in `web/app.js` and the `MDPREP_VERSION`
|
|
83
|
+
default in `examples/mdprep_colab.ipynb`. They are pinned so that everyone
|
|
84
|
+
in a workshop installs the same code, and the manifest the builder writes
|
|
85
|
+
is read by the version that wrote it. Doing this after the tag keeps the
|
|
86
|
+
deployed builder from pointing at a release PyPI does not have yet; a test
|
|
87
|
+
checks that the page and the notebook name the same one.
|
|
82
88
|
|
|
83
89
|
The workflow then refuses a tag that does not match the version in the tree,
|
|
84
90
|
builds, checks that the sdist carries the project and nothing that was lying
|
|
@@ -93,16 +99,15 @@ to the Python surface.
|
|
|
93
99
|
|
|
94
100
|
### Executing the official notebook outside Colab
|
|
95
101
|
|
|
96
|
-
`examples/mdprep_colab.ipynb` runs anywhere with a Linux GPU. Its
|
|
102
|
+
`examples/mdprep_colab.ipynb` runs anywhere with a Linux GPU. Its upload and
|
|
97
103
|
installs are redirected by environment variables, so a Python with mdprep,
|
|
98
|
-
`
|
|
99
|
-
|
|
104
|
+
`py3Dmol`, `pandas`, `matplotlib` and `nbclient` can execute it against a
|
|
105
|
+
micromamba runtime built once:
|
|
100
106
|
|
|
101
107
|
```bash
|
|
102
108
|
MDPREP_COLAB_PREFIX=/scratch/colab \
|
|
103
109
|
MDPREP_SKIP_KERNEL_INSTALL=1 \
|
|
104
110
|
MDPREP_SPEC=$PWD \
|
|
105
|
-
MDPREP_TEST_UPLOAD_MODEL=/path/to/predicted_model.cif \
|
|
106
111
|
MDPREP_TEST_UPLOAD_BUNDLE=/path/to/mdprep-bundle.zip \
|
|
107
112
|
python -c "import nbformat; from nbclient import NotebookClient; \
|
|
108
113
|
nb = nbformat.read('examples/mdprep_colab.ipynb', 4); \
|
|
@@ -110,6 +115,6 @@ NotebookClient(nb, timeout=5400).execute(); nbformat.write(nb, 'executed.ipynb')
|
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
`MDPREP_COLAB_PREFIX` stands in for `/content` (micromamba goes in its `bin/`,
|
|
113
|
-
the environment in `mamba-root/`)
|
|
114
|
-
|
|
118
|
+
the environment in `mamba-root/`). The bundle is one the web builder
|
|
119
|
+
downloaded; its SyrB2 button gives one for 2FCT.
|
|
115
120
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mdprep
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
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.1 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.1 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.
|
|
@@ -41,16 +41,40 @@ that. These have no suggested value, and a front end cannot skip them:
|
|
|
41
41
|
|
|
42
42
|
- **Ligand net charge.** It cannot be read from a PDB file, and a wrong value
|
|
43
43
|
produces a plausible-looking topology with the wrong electrostatics.
|
|
44
|
+
- **Ligand SMILES**, for every ligand, whether or not the file has hydrogens
|
|
45
|
+
on it: a ligand's protonation comes from its SMILES, and hydrogens the file
|
|
46
|
+
has are compared with it when the system is prepared -- kept if they agree,
|
|
47
|
+
replaced if not. The question says how many the file had. The SMILES of a
|
|
48
|
+
few well-known cofactors is proposed.
|
|
44
49
|
- **Metal site model and oxidation state.** Neither the residue name nor the
|
|
45
50
|
element implies an oxidation state. Zn is almost always +2; Fe and Cu are not.
|
|
46
51
|
- **Removing unknown heterogens.** Normalization must never discard a residue
|
|
47
52
|
that was not explicitly configured, so the question names every residue at
|
|
48
53
|
stake.
|
|
54
|
+
- **Removing a heterogen bonded to the protein**, a covalent intermediate for
|
|
55
|
+
instance, and **replacing a modified residue** other than a selenomethionine.
|
|
49
56
|
- **Production length**, when MD is enabled. There is no sensible default.
|
|
50
57
|
|
|
51
58
|
Free monatomic metals are offered as metal sites, never as GAFF ligands. Bulk
|
|
52
59
|
counterions are treated as solvent and are not asked about at all.
|
|
53
60
|
|
|
61
|
+
## Heterogens that are not ligands
|
|
62
|
+
|
|
63
|
+
Before the ligands, the planner sorts out the heterogens that are not ones,
|
|
64
|
+
and asks about each group once, with every member listed:
|
|
65
|
+
|
|
66
|
+
- **Modified residues** in a chain -- replace each with its standard parent?
|
|
67
|
+
Proposed yes for selenomethionine; asked without a proposal otherwise.
|
|
68
|
+
- **Glycans** bonded to the protein -- remove them? Proposed yes.
|
|
69
|
+
- **Other heterogens bonded to the protein** -- remove them? No proposal.
|
|
70
|
+
- **Crystallisation additives** -- remove them? Proposed yes. Answer no to be
|
|
71
|
+
asked about each as a ligand.
|
|
72
|
+
|
|
73
|
+
Keeping a group mdprep cannot build stops the build at that question, and
|
|
74
|
+
every removal is written to `structure.remove_residues` with its reason. See
|
|
75
|
+
[heterogens.md](heterogens.md), and [enzyme_families.md](enzyme_families.md)
|
|
76
|
+
for what this means for each family of halogenating enzymes.
|
|
77
|
+
|
|
54
78
|
## Metal sites
|
|
55
79
|
|
|
56
80
|
Choosing `bonded_mcpb` proposes a coordination sphere from interatomic
|
|
@@ -64,11 +88,34 @@ and the site is reported for manual work rather than invented. The oxidation
|
|
|
64
88
|
state, the spin multiplicity and the capped-model charge have no defaults
|
|
65
89
|
either, because none of them can be read off a structure.
|
|
66
90
|
|
|
91
|
+
The spin is asked once, for the QM region: the metal, everything bonded to it
|
|
92
|
+
and the cofactors. One bonded site is fitted per preparation and the cofactors
|
|
93
|
+
in it are closed shell, so that one answer is also the spin of the site's
|
|
94
|
+
MCPB.py models (`ions[].multiplicity`, `mcpb.small_model_spin`,
|
|
95
|
+
`mcpb.large_model_spin`), and the metal is not asked separately. The question
|
|
96
|
+
says what usually decides it: high-spin Fe(II) is 5, high-spin Fe(III) 6,
|
|
97
|
+
Zn(II) 1, and for a heme, the ligands across the heme plane.
|
|
98
|
+
|
|
67
99
|
A ligand that coordinates the metal takes its charges from that site's MCPB fit
|
|
68
100
|
rather than an independent AM1-BCC calculation, since fitting a bonded donor
|
|
69
101
|
separately leaves the site electrostatically inconsistent. A ligand that does
|
|
70
102
|
not coordinate keeps AM1-BCC.
|
|
71
103
|
|
|
104
|
+
A titratable side chain on the metal -- an aspartate, a cysteine -- is asked
|
|
105
|
+
its protonation right after the shell is confirmed, before the model charge. The model charge is then proposed from the states as given:
|
|
106
|
+
a heme's cysteine is named CYS and counts as the thiolate, -1, once it has been
|
|
107
|
+
stated as CYM.
|
|
108
|
+
|
|
109
|
+
A metal deposited inside a cofactor, a heme's iron, is read out into a residue
|
|
110
|
+
of its own, and the porphyrin left behind is a ligand on it. Heme b's SMILES
|
|
111
|
+
and net charge are proposed, with the protonation they assume, and so are
|
|
112
|
+
FAD's, FMN's, SAM's, SAH's and the nicotinamides'; any other ligand's are
|
|
113
|
+
asked. See [metals.md](metals.md#a-metal-inside-a-cofactor-hemes) and
|
|
114
|
+
[ligands.md](ligands.md#cofactors-whose-smiles-is-proposed).
|
|
115
|
+
|
|
116
|
+
Magnesium and calcium are proposed nonbonded, and a metal that is not inside
|
|
117
|
+
a cofactor can be removed instead of modelled -- a nickel from a His-tag, say.
|
|
118
|
+
|
|
72
119
|
The Hessian defaults to GFN2, which is orders of magnitude cheaper than DFT and
|
|
73
120
|
is what makes a bonded site tractable outside a cluster; g-xTB and PySCF DFT
|
|
74
121
|
are offered too. The geometry comes from the QM/MM refinement stage, which is
|