mdprep 0.2.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.2.0/.github/workflows/tests.yml +52 -0
- mdprep-0.2.0/.gitignore +18 -0
- mdprep-0.2.0/AGENTS.md +80 -0
- mdprep-0.2.0/CHANGELOG.md +54 -0
- mdprep-0.2.0/CITATION.cff +9 -0
- mdprep-0.2.0/CONTRIBUTING.md +58 -0
- mdprep-0.2.0/LICENSE +21 -0
- mdprep-0.2.0/MANIFEST.in +11 -0
- mdprep-0.2.0/PKG-INFO +264 -0
- mdprep-0.2.0/README.md +219 -0
- mdprep-0.2.0/Roe_and_Brooks.py +41 -0
- mdprep-0.2.0/Roe_and_Brooks_corrected.py +587 -0
- mdprep-0.2.0/docs/README.md +16 -0
- mdprep-0.2.0/docs/developer_notes.md +109 -0
- mdprep-0.2.0/docs/installation.md +81 -0
- mdprep-0.2.0/docs/ligands.md +48 -0
- mdprep-0.2.0/docs/manifest_reference.md +301 -0
- mdprep-0.2.0/docs/mcpb_xtb_benchmark.md +380 -0
- mdprep-0.2.0/docs/metals.md +531 -0
- mdprep-0.2.0/docs/molecular_dynamics.md +78 -0
- mdprep-0.2.0/docs/protonation.md +70 -0
- mdprep-0.2.0/docs/qmmesp_pyscf.md +107 -0
- mdprep-0.2.0/docs/qmmm_refinement.md +340 -0
- mdprep-0.2.0/docs/quickstart.md +41 -0
- mdprep-0.2.0/docs/tleap_and_validation.md +41 -0
- mdprep-0.2.0/docs/troubleshooting.md +108 -0
- mdprep-0.2.0/environment-dev.yml +31 -0
- mdprep-0.2.0/environment.yml +24 -0
- mdprep-0.2.0/examples/00_basic_protein.yaml +47 -0
- mdprep-0.2.0/examples/01_protein_only_ff19sb.yaml +54 -0
- mdprep-0.2.0/examples/02_manual_catalytic_protonation.yaml +68 -0
- mdprep-0.2.0/examples/03_multi_ligand_am1bcc.yaml +78 -0
- mdprep-0.2.0/examples/04_qmmesp_pyscf_ligand.yaml +92 -0
- mdprep-0.2.0/examples/05_histidine_gxtb_sp.yaml +55 -0
- mdprep-0.2.0/examples/06_disulfide_manual.yaml +79 -0
- mdprep-0.2.0/examples/07_gas_resp_pyscf_ligand.yaml +89 -0
- mdprep-0.2.0/examples/08_nonbonded_zinc_1264.yaml +68 -0
- mdprep-0.2.0/examples/09_bonded_zinc_mcpb_prepare.yaml +126 -0
- mdprep-0.2.0/examples/10_qmmm_refinement_ash.yaml +77 -0
- mdprep-0.2.0/examples/11_qmmm_metal_gfn2_mcpb.yaml +154 -0
- mdprep-0.2.0/examples/12_qmmm_metal_mace_polar1_mcpb.yaml +140 -0
- mdprep-0.2.0/examples/13_qmmm_refinement_gxtb_mechanical.yaml +77 -0
- mdprep-0.2.0/examples/14_qmmm_refinement_mace_polar1_mechanical.yaml +81 -0
- mdprep-0.2.0/examples/15_roe_brooks_openmm.yaml +73 -0
- mdprep-0.2.0/examples/README.md +28 -0
- mdprep-0.2.0/examples/tutorials/7E07.pdb +5271 -0
- mdprep-0.2.0/examples/tutorials/7E07_bonded_fe3/README.md +121 -0
- mdprep-0.2.0/examples/tutorials/7E07_bonded_fe3/input.pdb +2384 -0
- mdprep-0.2.0/examples/tutorials/7E07_bonded_fe3/optimized_small_model.pdb +55 -0
- mdprep-0.2.0/examples/tutorials/7E07_bonded_fe3/reference/large_embedded_cdiis150_restart.chk +0 -0
- mdprep-0.2.0/examples/tutorials/7E07_bonded_fe3/system.yaml +239 -0
- mdprep-0.2.0/examples/tutorials/7E07_prepared.pdb +2382 -0
- mdprep-0.2.0/examples/tutorials/minimal_user_mol2/README.md +15 -0
- mdprep-0.2.0/examples/tutorials/minimal_user_mol2/input.pdb +3 -0
- mdprep-0.2.0/examples/tutorials/minimal_user_mol2/ligand.frcmod +11 -0
- mdprep-0.2.0/examples/tutorials/minimal_user_mol2/ligand.mol2 +11 -0
- mdprep-0.2.0/examples/tutorials/minimal_user_mol2/system.yaml +71 -0
- mdprep-0.2.0/pyproject.toml +85 -0
- mdprep-0.2.0/scripts/run_smoke_tests.sh +17 -0
- mdprep-0.2.0/src/mdprep/__init__.py +7 -0
- mdprep-0.2.0/src/mdprep/_selftest_data/basic_protein.yaml +33 -0
- mdprep-0.2.0/src/mdprep/_selftest_data/ligand_sub.mol2 +11 -0
- mdprep-0.2.0/src/mdprep/ambertools/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/ambertools/antechamber.py +110 -0
- mdprep-0.2.0/src/mdprep/ambertools/commands.py +33 -0
- mdprep-0.2.0/src/mdprep/ambertools/mol2.py +415 -0
- mdprep-0.2.0/src/mdprep/ambertools/parmchk2.py +89 -0
- mdprep-0.2.0/src/mdprep/ambertools/resp.py +570 -0
- mdprep-0.2.0/src/mdprep/charges/__init__.py +1 -0
- mdprep-0.2.0/src/mdprep/charges/esp_grid.py +190 -0
- mdprep-0.2.0/src/mdprep/cli.py +451 -0
- mdprep-0.2.0/src/mdprep/config/__init__.py +9 -0
- mdprep-0.2.0/src/mdprep/config/loader.py +146 -0
- mdprep-0.2.0/src/mdprep/config/models.py +1100 -0
- mdprep-0.2.0/src/mdprep/external/__init__.py +14 -0
- mdprep-0.2.0/src/mdprep/external/discovery.py +14 -0
- mdprep-0.2.0/src/mdprep/external/runner.py +55 -0
- mdprep-0.2.0/src/mdprep/leap/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/leap/builder.py +476 -0
- mdprep-0.2.0/src/mdprep/leap/forcefields.py +93 -0
- mdprep-0.2.0/src/mdprep/leap/ions.py +112 -0
- mdprep-0.2.0/src/mdprep/leap/log_parser.py +170 -0
- mdprep-0.2.0/src/mdprep/leap/report.py +99 -0
- mdprep-0.2.0/src/mdprep/leap/residues.py +653 -0
- mdprep-0.2.0/src/mdprep/leap/runner.py +65 -0
- mdprep-0.2.0/src/mdprep/ligands/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/ligands/extract.py +355 -0
- mdprep-0.2.0/src/mdprep/ligands/identity.py +39 -0
- mdprep-0.2.0/src/mdprep/ligands/pyscf_charges.py +242 -0
- mdprep-0.2.0/src/mdprep/ligands/report.py +146 -0
- mdprep-0.2.0/src/mdprep/ligands/workflow.py +838 -0
- mdprep-0.2.0/src/mdprep/md/__init__.py +5 -0
- mdprep-0.2.0/src/mdprep/md/roe_brooks.py +650 -0
- mdprep-0.2.0/src/mdprep/metals/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/metals/c4.py +157 -0
- mdprep-0.2.0/src/mdprep/metals/coordination.py +313 -0
- mdprep-0.2.0/src/mdprep/metals/gxtb_hessian.py +467 -0
- mdprep-0.2.0/src/mdprep/metals/hydrogenate.py +344 -0
- mdprep-0.2.0/src/mdprep/metals/mace_polar1_hessian.py +357 -0
- mdprep-0.2.0/src/mdprep/metals/mace_polar1_worker.py +295 -0
- mdprep-0.2.0/src/mdprep/metals/mcpb.py +949 -0
- mdprep-0.2.0/src/mdprep/metals/mcpb_compat.py +125 -0
- mdprep-0.2.0/src/mdprep/metals/nonbonded.py +294 -0
- mdprep-0.2.0/src/mdprep/metals/parameter_comparison.py +563 -0
- mdprep-0.2.0/src/mdprep/metals/pyscf_mcpb.py +1388 -0
- mdprep-0.2.0/src/mdprep/metals/report.py +119 -0
- mdprep-0.2.0/src/mdprep/metals/workflow.py +320 -0
- mdprep-0.2.0/src/mdprep/protonation/__init__.py +15 -0
- mdprep-0.2.0/src/mdprep/protonation/apply.py +968 -0
- mdprep-0.2.0/src/mdprep/protonation/disulfide_states.py +141 -0
- mdprep-0.2.0/src/mdprep/protonation/histidine_geometry.py +950 -0
- mdprep-0.2.0/src/mdprep/protonation/histidine_xtb.py +390 -0
- mdprep-0.2.0/src/mdprep/protonation/overrides.py +64 -0
- mdprep-0.2.0/src/mdprep/protonation/pka_rules.py +165 -0
- mdprep-0.2.0/src/mdprep/protonation/propka.py +174 -0
- mdprep-0.2.0/src/mdprep/protonation/propka_parser.py +140 -0
- mdprep-0.2.0/src/mdprep/protonation/report.py +187 -0
- mdprep-0.2.0/src/mdprep/protonation/states.py +52 -0
- mdprep-0.2.0/src/mdprep/protonation/temporary_hydrogenation.py +238 -0
- mdprep-0.2.0/src/mdprep/protonation/xtb_parser.py +79 -0
- mdprep-0.2.0/src/mdprep/protonation/xtb_runner.py +108 -0
- mdprep-0.2.0/src/mdprep/qm/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/qm/point_charges.py +233 -0
- mdprep-0.2.0/src/mdprep/qm/pyscf_esp.py +70 -0
- mdprep-0.2.0/src/mdprep/qm/pyscf_runner.py +570 -0
- mdprep-0.2.0/src/mdprep/refinement/__init__.py +5 -0
- mdprep-0.2.0/src/mdprep/refinement/ash.py +541 -0
- mdprep-0.2.0/src/mdprep/refinement/coordinates.py +210 -0
- mdprep-0.2.0/src/mdprep/refinement/mapping.py +163 -0
- mdprep-0.2.0/src/mdprep/refinement/report.py +66 -0
- mdprep-0.2.0/src/mdprep/refinement/selection.py +436 -0
- mdprep-0.2.0/src/mdprep/refinement/workflow.py +188 -0
- mdprep-0.2.0/src/mdprep/reports/__init__.py +8 -0
- mdprep-0.2.0/src/mdprep/reports/structure_report.py +92 -0
- mdprep-0.2.0/src/mdprep/structure/__init__.py +14 -0
- mdprep-0.2.0/src/mdprep/structure/classify.py +92 -0
- mdprep-0.2.0/src/mdprep/structure/disulfides.py +51 -0
- mdprep-0.2.0/src/mdprep/structure/inspect.py +105 -0
- mdprep-0.2.0/src/mdprep/structure/models.py +86 -0
- mdprep-0.2.0/src/mdprep/structure/normalize.py +363 -0
- mdprep-0.2.0/src/mdprep/structure/pdb.py +511 -0
- mdprep-0.2.0/src/mdprep/structure/repair.py +566 -0
- mdprep-0.2.0/src/mdprep/structure/selectors.py +204 -0
- mdprep-0.2.0/src/mdprep/structure/writer.py +84 -0
- mdprep-0.2.0/src/mdprep/validation/__init__.py +2 -0
- mdprep-0.2.0/src/mdprep/validation/openmm_check.py +86 -0
- mdprep-0.2.0/src/mdprep/validation/parmed_check.py +43 -0
- mdprep-0.2.0/src/mdprep/validation/topology.py +239 -0
- mdprep-0.2.0/src/mdprep/workflows/__init__.py +6 -0
- mdprep-0.2.0/src/mdprep/workflows/init.py +242 -0
- mdprep-0.2.0/src/mdprep/workflows/inspect.py +21 -0
- mdprep-0.2.0/src/mdprep/workflows/prepare.py +763 -0
- mdprep-0.2.0/src/mdprep/workflows/selftest.py +220 -0
- mdprep-0.2.0/src/mdprep/workflows/validate.py +30 -0
- mdprep-0.2.0/tests/__init__.py +1 -0
- mdprep-0.2.0/tests/data/ligands/ligand_cof.frcmod +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_cof.good.mol2 +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.atom_count_mismatch.mol2 +8 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.bad_charge.mol2 +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.frcmod +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.good.mol2 +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.pdb +3 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.renamed.mol2 +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.shifted_coords.mol2 +11 -0
- mdprep-0.2.0/tests/data/ligands/ligand_sub.small_residual.mol2 +11 -0
- mdprep-0.2.0/tests/data/propka_sample.pka +9 -0
- mdprep-0.2.0/tests/data/protein_altloc.pdb +6 -0
- mdprep-0.2.0/tests/data/protein_atom_record_ligand_blank_chain.pdb +11 -0
- mdprep-0.2.0/tests/data/protein_blank_chain.pdb +6 -0
- mdprep-0.2.0/tests/data/protein_cyx_disulfide.pdb +6 -0
- mdprep-0.2.0/tests/data/protein_disulfide.pdb +8 -0
- mdprep-0.2.0/tests/data/protein_histidine_ring.pdb +19 -0
- mdprep-0.2.0/tests/data/protein_histidine_ring_hydrogenated.pdb +17 -0
- mdprep-0.2.0/tests/data/protein_histidine_water_oxygen.pdb +18 -0
- mdprep-0.2.0/tests/data/protein_histidine_zinc.pdb +20 -0
- mdprep-0.2.0/tests/data/protein_insertion_code.pdb +5 -0
- mdprep-0.2.0/tests/data/protein_two_ligands.pdb +9 -0
- mdprep-0.2.0/tests/data/protein_with_hydrogens.pdb +7 -0
- mdprep-0.2.0/tests/data/protein_with_waters.pdb +25 -0
- mdprep-0.2.0/tests/data/xtb_hid_stdout.txt +3 -0
- mdprep-0.2.0/tests/data/xtb_hie_stdout.txt +3 -0
- mdprep-0.2.0/tests/data/zinc_only.pdb +2 -0
- mdprep-0.2.0/tests/test_altloc.py +32 -0
- mdprep-0.2.0/tests/test_amber_resp.py +131 -0
- mdprep-0.2.0/tests/test_ambertools_commands.py +135 -0
- mdprep-0.2.0/tests/test_classify.py +63 -0
- mdprep-0.2.0/tests/test_cli.py +23 -0
- mdprep-0.2.0/tests/test_config_examples.py +12 -0
- mdprep-0.2.0/tests/test_config_validation.py +312 -0
- mdprep-0.2.0/tests/test_disulfide_assignment.py +76 -0
- mdprep-0.2.0/tests/test_disulfide_leap_mapping.py +189 -0
- mdprep-0.2.0/tests/test_disulfides.py +25 -0
- mdprep-0.2.0/tests/test_esp_grid.py +113 -0
- mdprep-0.2.0/tests/test_external_amber_resp.py +54 -0
- mdprep-0.2.0/tests/test_external_ambertools.py +106 -0
- mdprep-0.2.0/tests/test_external_gxtb_hessian.py +94 -0
- mdprep-0.2.0/tests/test_external_mace_polar1.py +52 -0
- mdprep-0.2.0/tests/test_external_metals.py +176 -0
- mdprep-0.2.0/tests/test_external_propka_xtb.py +98 -0
- mdprep-0.2.0/tests/test_external_pyscf.py +323 -0
- mdprep-0.2.0/tests/test_external_structure_repair.py +113 -0
- mdprep-0.2.0/tests/test_external_tleap.py +101 -0
- mdprep-0.2.0/tests/test_gxtb_hessian.py +373 -0
- mdprep-0.2.0/tests/test_histidine_geometry.py +252 -0
- mdprep-0.2.0/tests/test_import.py +6 -0
- mdprep-0.2.0/tests/test_init_cli.py +101 -0
- mdprep-0.2.0/tests/test_init_ligand_placeholders.py +36 -0
- mdprep-0.2.0/tests/test_inspect_cli.py +29 -0
- mdprep-0.2.0/tests/test_ions.py +44 -0
- mdprep-0.2.0/tests/test_leap_builder.py +131 -0
- mdprep-0.2.0/tests/test_leap_forcefields.py +25 -0
- mdprep-0.2.0/tests/test_leap_input_pdb.py +267 -0
- mdprep-0.2.0/tests/test_leap_log_parser.py +51 -0
- mdprep-0.2.0/tests/test_ligand_extraction.py +282 -0
- mdprep-0.2.0/tests/test_ligand_workflow_mocked.py +473 -0
- mdprep-0.2.0/tests/test_mace_polar1_hessian.py +296 -0
- mdprep-0.2.0/tests/test_manifest_paths.py +71 -0
- mdprep-0.2.0/tests/test_manual_protonation.py +115 -0
- mdprep-0.2.0/tests/test_mcpb_compat.py +114 -0
- mdprep-0.2.0/tests/test_mcpb_parameter_comparison.py +193 -0
- mdprep-0.2.0/tests/test_mcpb_pyscf_fixed_geometry.py +390 -0
- mdprep-0.2.0/tests/test_md_config.py +85 -0
- mdprep-0.2.0/tests/test_metals.py +630 -0
- mdprep-0.2.0/tests/test_mol2_parser.py +61 -0
- mdprep-0.2.0/tests/test_mol2_validation.py +137 -0
- mdprep-0.2.0/tests/test_no_openbabel.py +49 -0
- mdprep-0.2.0/tests/test_packaging_metadata.py +15 -0
- mdprep-0.2.0/tests/test_pdb_parser.py +114 -0
- mdprep-0.2.0/tests/test_pdb_writer.py +55 -0
- mdprep-0.2.0/tests/test_pka_rules.py +97 -0
- mdprep-0.2.0/tests/test_point_charges.py +137 -0
- mdprep-0.2.0/tests/test_prepare_ligands_stage.py +83 -0
- mdprep-0.2.0/tests/test_prepare_protonation_stage.py +116 -0
- mdprep-0.2.0/tests/test_prepare_pyscf_ligands_stage.py +101 -0
- mdprep-0.2.0/tests/test_prepare_refinement_stage.py +143 -0
- mdprep-0.2.0/tests/test_prepare_structure_stage.py +76 -0
- mdprep-0.2.0/tests/test_prepare_tleap_stage.py +77 -0
- mdprep-0.2.0/tests/test_propka_parser.py +77 -0
- mdprep-0.2.0/tests/test_protonation_propka_workflow.py +125 -0
- mdprep-0.2.0/tests/test_protonation_reuse_refined.py +142 -0
- mdprep-0.2.0/tests/test_protonation_states.py +43 -0
- mdprep-0.2.0/tests/test_protonation_xtb_workflow.py +435 -0
- mdprep-0.2.0/tests/test_pyscf_esp_mocked.py +38 -0
- mdprep-0.2.0/tests/test_pyscf_runner_config.py +45 -0
- mdprep-0.2.0/tests/test_qmmesp_correctness.py +350 -0
- mdprep-0.2.0/tests/test_qmmesp_final_mol2_usage.py +44 -0
- mdprep-0.2.0/tests/test_qmmesp_no_environment_fit.py +274 -0
- mdprep-0.2.0/tests/test_readme_example.py +19 -0
- mdprep-0.2.0/tests/test_refinement_ash.py +330 -0
- mdprep-0.2.0/tests/test_refinement_config.py +285 -0
- mdprep-0.2.0/tests/test_refinement_coordinates.py +97 -0
- mdprep-0.2.0/tests/test_refinement_selection.py +195 -0
- mdprep-0.2.0/tests/test_remove_hydrogens.py +79 -0
- mdprep-0.2.0/tests/test_roe_brooks.py +58 -0
- mdprep-0.2.0/tests/test_selectors.py +115 -0
- mdprep-0.2.0/tests/test_selftest_installed.py +15 -0
- mdprep-0.2.0/tests/test_structure_normalize.py +203 -0
- mdprep-0.2.0/tests/test_tleap_workflow_mocked.py +123 -0
- mdprep-0.2.0/tests/test_validation_helpers.py +152 -0
- mdprep-0.2.0/tests/test_xtb_command_builder.py +107 -0
- mdprep-0.2.0/tests/test_xtb_parser.py +53 -0
- mdprep-0.2.0/tests/test_xtb_water_hydrogens.py +209 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
permissions:
|
|
4
|
+
contents: read
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
unit:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.11", "3.12"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: ${{ matrix.python-version }}
|
|
21
|
+
- name: Install package
|
|
22
|
+
run: |
|
|
23
|
+
python -m pip install --upgrade pip
|
|
24
|
+
python -m pip install -e ".[test]"
|
|
25
|
+
- name: Run unit tests
|
|
26
|
+
run: pytest -q -m "not external and not slow"
|
|
27
|
+
- name: Check CLI
|
|
28
|
+
run: |
|
|
29
|
+
python -m mdprep.cli --help
|
|
30
|
+
python -m mdprep.cli config-check examples/*.yaml
|
|
31
|
+
python -m mdprep.cli selftest --quick
|
|
32
|
+
|
|
33
|
+
package:
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v4
|
|
37
|
+
- uses: actions/setup-python@v5
|
|
38
|
+
with:
|
|
39
|
+
python-version: "3.11"
|
|
40
|
+
- name: Build distributions
|
|
41
|
+
run: |
|
|
42
|
+
python -m pip install --upgrade pip
|
|
43
|
+
python -m pip install build twine
|
|
44
|
+
python -m build
|
|
45
|
+
python -m twine check dist/*
|
|
46
|
+
- name: Test wheel installation
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install --force-reinstall dist/*.whl
|
|
49
|
+
cd /tmp
|
|
50
|
+
mdprep --version
|
|
51
|
+
mdprep --help
|
|
52
|
+
mdprep selftest --quick
|
mdprep-0.2.0/.gitignore
ADDED
mdprep-0.2.0/AGENTS.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
You are developing `mdprep`, a Python package for reproducible Amber MD system
|
|
4
|
+
preparation.
|
|
5
|
+
|
|
6
|
+
## Development Rules
|
|
7
|
+
|
|
8
|
+
- Use Python 3.11+ and type hints.
|
|
9
|
+
- Use pydantic models for YAML manifest validation.
|
|
10
|
+
- The legacy molecule-conversion toolkit identified by the dedicated ban test
|
|
11
|
+
is intentionally prohibited.
|
|
12
|
+
- User overrides always win over automated predictions.
|
|
13
|
+
- Do not silently guess catalytic chemistry, protonation, ligand charge, or
|
|
14
|
+
metal-center behavior.
|
|
15
|
+
- Structure normalization must never delete unknown heterogens silently; require
|
|
16
|
+
explicit manifest configuration.
|
|
17
|
+
- Generated manifests must validate with `mdprep config-check`.
|
|
18
|
+
- Every residue rename must be recorded in reports.
|
|
19
|
+
- Automated protonation must not be silently skipped; fail clearly when a
|
|
20
|
+
requested backend is unavailable or cannot produce an unambiguous assignment.
|
|
21
|
+
- Manual overrides always override PropKa and xTB decisions.
|
|
22
|
+
- PropKa/xTB tests must skip cleanly or use fakes if executables are
|
|
23
|
+
unavailable.
|
|
24
|
+
- Temporary xTB tautomer hydrogens must never be written to the final prepared
|
|
25
|
+
PDB.
|
|
26
|
+
- Ligand atom names, atom order, coordinates, residue identity, and total
|
|
27
|
+
charge must be preserved or failures must be explicit.
|
|
28
|
+
- Do not add molecule-conversion fallback paths.
|
|
29
|
+
- Final topology generation must go through `tleap`.
|
|
30
|
+
- All `tleap` scripts and logs must be preserved.
|
|
31
|
+
- Do not silently ignore `tleap` warnings or errors; report them and fail when
|
|
32
|
+
configured to do so.
|
|
33
|
+
- All final `.prmtop`/`.inpcrd` outputs must be validated.
|
|
34
|
+
- Unsupported chemistry must fail with a clear error.
|
|
35
|
+
- External commands must go through `mdprep.external.runner`.
|
|
36
|
+
- External command records must include command, working directory, return code,
|
|
37
|
+
stdout, stderr, and runtime.
|
|
38
|
+
- Unit tests must not require AmberTools, xTB, PySCF, or PropKa.
|
|
39
|
+
- External tests must skip cleanly if required executables are unavailable.
|
|
40
|
+
- External AmberTools tests must skip cleanly if `antechamber` or `parmchk2`
|
|
41
|
+
is unavailable.
|
|
42
|
+
- External `tleap`, ParmEd, and OpenMM tests must skip cleanly when optional
|
|
43
|
+
executables or libraries are unavailable.
|
|
44
|
+
- PySCF is the primary QM backend for ligand RESP/ESP and QMMESP-like charges.
|
|
45
|
+
- Do not add ORCA or Multiwfn in this task series.
|
|
46
|
+
- RESP/ESP fitting must be deterministic and tested.
|
|
47
|
+
- QMMESP charges must fit only target ligand atom charges.
|
|
48
|
+
- MM point charges are only for density polarization.
|
|
49
|
+
- Never include environment point charges as ligand charge centers.
|
|
50
|
+
- Never write environment point charges into ligand mol2 files.
|
|
51
|
+
- Final Amber builds must use final fitted ligand mol2 files, not provisional
|
|
52
|
+
mol2 files.
|
|
53
|
+
- External PySCF tests must skip cleanly if PySCF is unavailable.
|
|
54
|
+
- All user-facing features need tests and docs.
|
|
55
|
+
- All example YAML files must validate in tests.
|
|
56
|
+
|
|
57
|
+
## Current v0.2 Limits
|
|
58
|
+
|
|
59
|
+
Do not add new scientific features without a focused task, tests, examples
|
|
60
|
+
where practical, and documentation.
|
|
61
|
+
|
|
62
|
+
Explicitly unsupported for v0.2:
|
|
63
|
+
|
|
64
|
+
- noncanonical amino acids inside peptide chains
|
|
65
|
+
- covalent ligands
|
|
66
|
+
- ORCA backend
|
|
67
|
+
- Multiwfn dependency
|
|
68
|
+
- multiple independent bonded MCPB sites
|
|
69
|
+
- multi-chain MCPB protein inputs
|
|
70
|
+
|
|
71
|
+
## Required Checks
|
|
72
|
+
|
|
73
|
+
Run these before handing off:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pytest -q
|
|
77
|
+
python -m mdprep.cli --help
|
|
78
|
+
python -m mdprep.cli config-check examples/*.yaml
|
|
79
|
+
python -m mdprep.cli selftest --quick
|
|
80
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0 - 2026-08-17
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Explicit nonbonded and bonded MCPB.py metal-center workflows, including
|
|
8
|
+
PySCF QMMESP/RESP charges and PySCF, GFN2-xTB, g-xTB, or MACE-POLAR-1
|
|
9
|
+
Hessian sources for Seminario parameters.
|
|
10
|
+
- Optional ASH active-site QM/MM refinement with explicit QM components,
|
|
11
|
+
coordinating residues, 4 A residue and 8 A water active regions, and
|
|
12
|
+
hydrogen-only relaxation.
|
|
13
|
+
- Manifest-driven Roe--Brooks OpenMM minimization, heating, density
|
|
14
|
+
equilibration, and production MD with accelerator-first/CPU-fallback
|
|
15
|
+
platform selection.
|
|
16
|
+
- User-controlled production step and reporting/checkpoint intervals.
|
|
17
|
+
- Manifest-directory-relative input paths and portable executable discovery.
|
|
18
|
+
- GAFF/GAFF2, ff14SB/ff19SB, TIP3P/OPC, AM1-BCC, gas RESP, and embedded
|
|
19
|
+
QMMESP examples covering the supported preparation combinations.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Roe--Brooks positional restraints are installed before Context creation and
|
|
24
|
+
their reference coordinates are converted explicitly from input units to nm.
|
|
25
|
+
- Constraint-compatible heating handoff, evolving NPT box propagation, and
|
|
26
|
+
production progress totals.
|
|
27
|
+
- MCPB/tLEaP residue-index and renamed-residue coordinate validation.
|
|
28
|
+
|
|
29
|
+
## 0.1.0 - 2026-06-15
|
|
30
|
+
|
|
31
|
+
Initial usable release.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- YAML manifest validation with pydantic.
|
|
36
|
+
- PDB inspection, residue/atom selector parsing, altloc handling, water and heterogen classification, histidine/titratable residue detection, and possible disulfide detection.
|
|
37
|
+
- `mdprep init` starter-manifest generation and safe structure normalization.
|
|
38
|
+
- Manual protonation overrides, input-state preservation, disulfide `CYX` assignment, and input-hydrogen removal.
|
|
39
|
+
- PropKa-based residue-state assignment and xTB/GFN2 or g-xTB HID/HIE histidine tautomer selection.
|
|
40
|
+
- Ligand extraction and AmberTools parameter generation for `am1bcc` and `user_mol2`.
|
|
41
|
+
- PySCF gas-phase RESP/ESP-like ligand charges.
|
|
42
|
+
- PySCF QMMESP-like environment-polarized ligand charges with explicit target-ligand-only fitting.
|
|
43
|
+
- Final `tleap` build, optional solvation, neutralization/salt handling, final Amber files, and validation reports.
|
|
44
|
+
- External tests that skip cleanly when optional executables or libraries are unavailable.
|
|
45
|
+
|
|
46
|
+
### Unsupported In 0.1.0
|
|
47
|
+
|
|
48
|
+
- Noncanonical amino acids inside polymer chains.
|
|
49
|
+
- Covalent ligands.
|
|
50
|
+
- Bonded metal-center parameterization and MCPB-like workflows.
|
|
51
|
+
- ORCA and Multiwfn backends.
|
|
52
|
+
- mmCIF input.
|
|
53
|
+
- Automatic loop modeling.
|
|
54
|
+
- Production minimization or MD.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use mdprep, please cite this software."
|
|
3
|
+
title: "mdprep: reproducible Amber preparation for proteins, ligands, and metal centers"
|
|
4
|
+
version: "0.2.0"
|
|
5
|
+
date-released: "2026-08-17"
|
|
6
|
+
license: "MIT"
|
|
7
|
+
authors:
|
|
8
|
+
- name: "Miquel Estévez-Gay"
|
|
9
|
+
repository-code: "https://github.com/miqueleg/mdprep"
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
mamba env create -f environment.yml
|
|
7
|
+
conda activate mdprep
|
|
8
|
+
pip install -e .
|
|
9
|
+
mdprep selftest --quick
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
For packaging and lint tooling, use `environment-dev.yml` or install the
|
|
13
|
+
`dev` extra in a suitable environment.
|
|
14
|
+
|
|
15
|
+
## Tests
|
|
16
|
+
|
|
17
|
+
Default tests must not require AmberTools, xTB, PropKa, PySCF, ParmEd, or
|
|
18
|
+
OpenMM:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pytest -q
|
|
22
|
+
python -m mdprep.cli config-check examples/*.yaml
|
|
23
|
+
python -m mdprep.cli selftest --quick
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
External tests must skip cleanly when optional tools are unavailable:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pytest -q -m "external"
|
|
30
|
+
pytest -q -m "external or ambertools or tleap or propka or xtb or pyscf or qmmesp"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Chemistry Rules
|
|
34
|
+
|
|
35
|
+
- The legacy molecule-conversion toolkit identified by the dedicated ban test
|
|
36
|
+
is intentionally prohibited.
|
|
37
|
+
- Do not add molecule-conversion fallbacks.
|
|
38
|
+
- User overrides always win.
|
|
39
|
+
- Do not silently guess catalytic chemistry, ligand charge, protonation, or
|
|
40
|
+
metal-center behavior.
|
|
41
|
+
- Every chemical decision and every residue rename must be reported.
|
|
42
|
+
- Unsupported chemistry must fail with a clear error.
|
|
43
|
+
- External commands must go through `mdprep.external.runner`.
|
|
44
|
+
|
|
45
|
+
## QMMESP Rules
|
|
46
|
+
|
|
47
|
+
- MM point charges polarize only the selected target ligand QM density.
|
|
48
|
+
- The RESP/ESP fit is performed only on target ligand atoms.
|
|
49
|
+
- Environment point charges must not be fitted.
|
|
50
|
+
- Environment point charges must not be written to ligand mol2 files.
|
|
51
|
+
- The final Amber system must use final PySCF-fitted mol2 charges, not
|
|
52
|
+
provisional charges.
|
|
53
|
+
|
|
54
|
+
## Adding Features
|
|
55
|
+
|
|
56
|
+
New user-facing features need docs, tests, examples when practical, and clear
|
|
57
|
+
failure behavior for unsupported chemistry. Keep changes local to the relevant
|
|
58
|
+
workflow stage and avoid broad rewrites unless there is a tested reason.
|
mdprep-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Miquel Estévez-Gay
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
mdprep-0.2.0/MANIFEST.in
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include AGENTS.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
include CITATION.cff
|
|
5
|
+
include CHANGELOG.md
|
|
6
|
+
include CONTRIBUTING.md
|
|
7
|
+
include environment.yml
|
|
8
|
+
include environment-dev.yml
|
|
9
|
+
recursive-include docs *.md
|
|
10
|
+
recursive-include examples *.md *.yaml *.pdb *.mol2 *.frcmod
|
|
11
|
+
recursive-include tests/data *
|
mdprep-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: mdprep
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Reproducible Amber preparation for proteins, ligands, metal centers, and OpenMM MD.
|
|
5
|
+
Project-URL: Homepage, https://github.com/miqueleg/mdprep
|
|
6
|
+
Project-URL: Issues, https://github.com/miqueleg/mdprep/issues
|
|
7
|
+
Author: Miquel Estévez Gay
|
|
8
|
+
License: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: amber,ligand,mcpb,metal,molecular-dynamics,openmm,protein,pyscf,qmmm,resp
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Requires-Dist: numpy>=1.24
|
|
22
|
+
Requires-Dist: pandas>=2
|
|
23
|
+
Requires-Dist: pydantic-settings>=2
|
|
24
|
+
Requires-Dist: pydantic>=2
|
|
25
|
+
Requires-Dist: pyyaml>=6
|
|
26
|
+
Requires-Dist: rich>=13
|
|
27
|
+
Requires-Dist: scipy>=1.10
|
|
28
|
+
Requires-Dist: typer>=0.12
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1; extra == 'dev'
|
|
31
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
33
|
+
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
34
|
+
Requires-Dist: twine>=5; extra == 'dev'
|
|
35
|
+
Provides-Extra: docs
|
|
36
|
+
Requires-Dist: mkdocs>=1.6; extra == 'docs'
|
|
37
|
+
Provides-Extra: md
|
|
38
|
+
Requires-Dist: openmm>=8.1; extra == 'md'
|
|
39
|
+
Provides-Extra: qm
|
|
40
|
+
Requires-Dist: parmed>=4.2; extra == 'qm'
|
|
41
|
+
Requires-Dist: pyscf>=2.6; extra == 'qm'
|
|
42
|
+
Provides-Extra: test
|
|
43
|
+
Requires-Dist: pytest>=8; extra == 'test'
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
|
|
46
|
+
# mdprep
|
|
47
|
+
|
|
48
|
+
`mdprep` 0.2.0 prepares reproducible Amber molecular-dynamics systems from a
|
|
49
|
+
PDB structure and a validated YAML manifest. It supports standard proteins,
|
|
50
|
+
independent ligands and cofactors, explicit metal models, optional active-site
|
|
51
|
+
QM/MM refinement, final `tleap` assembly, validation, and an optional OpenMM
|
|
52
|
+
equilibration/production stage.
|
|
53
|
+
|
|
54
|
+
The manifest is the source of truth. Chemistry-sensitive decisions—ligand
|
|
55
|
+
charge and multiplicity, catalytic protonation, metal oxidation/spin state,
|
|
56
|
+
coordinating bonds, and QM components—must be supplied explicitly and are
|
|
57
|
+
recorded in the output reports.
|
|
58
|
+
|
|
59
|
+
## Highlights
|
|
60
|
+
|
|
61
|
+
- ff14SB or ff19SB proteins with TIP3P or OPC water.
|
|
62
|
+
- PropKa protonation, manual catalytic overrides, disulfides, and optional
|
|
63
|
+
GFN2-xTB/g-xTB HID–HIE selection.
|
|
64
|
+
- Multiple GAFF or GAFF2 ligands/cofactors with AM1-BCC, user mol2/frcmod,
|
|
65
|
+
PySCF gas-phase RESP, or electrostatically embedded PySCF QMMESP charges.
|
|
66
|
+
- Amber nonbonded metal models or bonded MCPB.py models with explicit
|
|
67
|
+
coordinating atoms, charges, and multiplicities.
|
|
68
|
+
- MCPB Seminario Hessians from PySCF, GFN2-xTB, g-xTB, or MACE-POLAR-1;
|
|
69
|
+
PySCF supplies the embedded large-model ESP/RESP calculation.
|
|
70
|
+
- Optional ASH/OpenMM active-site QM/MM refinement before final
|
|
71
|
+
parameterization.
|
|
72
|
+
- Final `prmtop`, `inpcrd`, and PDB generation through `tleap`, followed by
|
|
73
|
+
topology, coordinate, charge, and optional OpenMM energy validation.
|
|
74
|
+
- Optional Roe–Brooks OpenMM minimization, heating, density equilibration, and
|
|
75
|
+
manifest-sized production MD with GPU-first/CPU-fallback execution.
|
|
76
|
+
|
|
77
|
+
## Installation
|
|
78
|
+
|
|
79
|
+
Conda or Mamba is recommended because the real workflows use AmberTools,
|
|
80
|
+
PropKa, xTB, OpenMM, ParmEd, and PySCF:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
git clone https://github.com/miqueleg/mdprep.git
|
|
84
|
+
cd mdprep
|
|
85
|
+
mamba env create -f environment.yml
|
|
86
|
+
conda activate mdprep
|
|
87
|
+
mdprep selftest --quick
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For a lighter Python-only installation, which does not install external
|
|
91
|
+
chemistry executables:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python -m pip install .
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Optional Python extras are available as `.[md]` for OpenMM and `.[qm]` for
|
|
98
|
+
PySCF/ParmEd. External commands are discovered through `PATH`; manifests may
|
|
99
|
+
also name a reviewed relative executable. No developer-machine path is embedded
|
|
100
|
+
in the distributed examples.
|
|
101
|
+
|
|
102
|
+
## Basic example
|
|
103
|
+
|
|
104
|
+
Start from a standard protein PDB:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
mdprep inspect input.pdb
|
|
108
|
+
mdprep init input.pdb -o system.yaml
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
A minimal protein-only `system.yaml` is:
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
project:
|
|
115
|
+
name: my_system
|
|
116
|
+
input_structure: input.pdb
|
|
117
|
+
output_dir: prepared/my_system
|
|
118
|
+
|
|
119
|
+
structure:
|
|
120
|
+
keep_crystal_waters: true
|
|
121
|
+
altloc_policy: highest_occupancy
|
|
122
|
+
remove_unknown_heterogens: false
|
|
123
|
+
preserve_chain_ids: true
|
|
124
|
+
remove_input_hydrogens: true
|
|
125
|
+
|
|
126
|
+
protein:
|
|
127
|
+
forcefield: ff14SB
|
|
128
|
+
water_model: TIP3P
|
|
129
|
+
|
|
130
|
+
protonation:
|
|
131
|
+
ph: 7.0
|
|
132
|
+
method: manual_only
|
|
133
|
+
overrides: []
|
|
134
|
+
|
|
135
|
+
disulfides:
|
|
136
|
+
auto_detect: true
|
|
137
|
+
detection_cutoff_angstrom: 2.2
|
|
138
|
+
force: []
|
|
139
|
+
forbid: []
|
|
140
|
+
|
|
141
|
+
ligands: []
|
|
142
|
+
metals: []
|
|
143
|
+
|
|
144
|
+
solvation:
|
|
145
|
+
enabled: true
|
|
146
|
+
box: truncated_octahedron
|
|
147
|
+
buffer_angstrom: 10.0
|
|
148
|
+
neutralize: true
|
|
149
|
+
salt_concentration_molar: 0.15
|
|
150
|
+
positive_ion: Na+
|
|
151
|
+
negative_ion: Cl-
|
|
152
|
+
|
|
153
|
+
validation:
|
|
154
|
+
run_openmm_energy_check: true
|
|
155
|
+
fail_on_warnings: false
|
|
156
|
+
fail_on_missing_parameters: true
|
|
157
|
+
fail_on_noninteger_ligand_charge: true
|
|
158
|
+
|
|
159
|
+
molecular_dynamics:
|
|
160
|
+
enabled: false
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The same validated manifest is available as
|
|
164
|
+
[`examples/00_basic_protein.yaml`](examples/00_basic_protein.yaml).
|
|
165
|
+
|
|
166
|
+
Validate and prepare it:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
mdprep config-check system.yaml
|
|
170
|
+
mdprep prepare system.yaml
|
|
171
|
+
mdprep validate \
|
|
172
|
+
prepared/my_system/final/system.prmtop \
|
|
173
|
+
prepared/my_system/final/system.inpcrd
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Relative paths are resolved from the manifest directory. Unknown heterogens
|
|
177
|
+
are not deleted or guessed: configure them under `ligands` or `metals`, or
|
|
178
|
+
explicitly request their removal.
|
|
179
|
+
|
|
180
|
+
## Common workflows
|
|
181
|
+
|
|
182
|
+
Generate a starter manifest using PropKa and ff19SB/OPC:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
mdprep init input.pdb -o system.yaml \
|
|
186
|
+
--forcefield ff19SB \
|
|
187
|
+
--water-model OPC \
|
|
188
|
+
--protonation-method propka
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Stop after a stage while reviewing a complex system:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
mdprep prepare system.yaml --stop-after structure
|
|
195
|
+
mdprep prepare system.yaml --stop-after protonation --overwrite
|
|
196
|
+
mdprep prepare system.yaml --stop-after refinement --overwrite
|
|
197
|
+
mdprep prepare system.yaml --stop-after ligands --overwrite
|
|
198
|
+
mdprep prepare system.yaml --stop-after metals --overwrite
|
|
199
|
+
mdprep prepare system.yaml --stop-after tleap --overwrite
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Run the manifest-configured Roe–Brooks protocol from an existing Amber build:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
mdprep run-md system.yaml \
|
|
206
|
+
--prmtop prepared/my_system/final/system.prmtop \
|
|
207
|
+
--inpcrd prepared/my_system/final/system.inpcrd
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
When `molecular_dynamics.enabled: true`, an ordinary `mdprep prepare` continues
|
|
211
|
+
through MD. Production length and trajectory/state/checkpoint intervals are
|
|
212
|
+
specified in steps in the manifest.
|
|
213
|
+
|
|
214
|
+
## Where to go next
|
|
215
|
+
|
|
216
|
+
| Task | Documentation | Example |
|
|
217
|
+
| --- | --- | --- |
|
|
218
|
+
| Manifest fields | [Manifest reference](docs/manifest_reference.md) | [All examples](examples/README.md) |
|
|
219
|
+
| Protonation and histidines | [Protonation](docs/protonation.md) | `examples/02_manual_catalytic_protonation.yaml` |
|
|
220
|
+
| Ligands, AM1-BCC, RESP, QMMESP | [Ligands](docs/ligands.md) and [QMMESP](docs/qmmesp_pyscf.md) | `examples/03_multi_ligand_am1bcc.yaml`, `04_qmmesp_pyscf_ligand.yaml` |
|
|
221
|
+
| Metal centers and MCPB.py | [Metal centers](docs/metals.md) | `examples/08_nonbonded_zinc_1264.yaml`, `09_bonded_zinc_mcpb_prepare.yaml` |
|
|
222
|
+
| Active-site QM/MM refinement | [QM/MM refinement](docs/qmmm_refinement.md) | `examples/10_qmmm_refinement_ash.yaml` |
|
|
223
|
+
| Roe–Brooks OpenMM MD | [Molecular dynamics](docs/molecular_dynamics.md) | `examples/15_roe_brooks_openmm.yaml` |
|
|
224
|
+
| Complete Fe(III) workflow | [7E07 tutorial](examples/tutorials/7E07_bonded_fe3/README.md) | `examples/tutorials/7E07_bonded_fe3/system.yaml` |
|
|
225
|
+
|
|
226
|
+
All public example manifests are schema-validated in the test suite.
|
|
227
|
+
|
|
228
|
+
## Outputs and reproducibility
|
|
229
|
+
|
|
230
|
+
A complete run preserves:
|
|
231
|
+
|
|
232
|
+
- the input and locked manifests;
|
|
233
|
+
- normalized/protonated/refined intermediate PDBs;
|
|
234
|
+
- ligand, QM, MCPB.py, and `tleap` inputs and logs;
|
|
235
|
+
- final Amber topology, coordinates, and PDB;
|
|
236
|
+
- structure, protonation, ligand, metal, `tleap`, and validation reports;
|
|
237
|
+
- executable and Python-package version information;
|
|
238
|
+
- optional MD PDBs, density history, trajectory, state log, and restarts.
|
|
239
|
+
|
|
240
|
+
External failures are reported with command, working directory, return code,
|
|
241
|
+
stdout, stderr, and runtime. mdprep does not silently fall back to another
|
|
242
|
+
charge model, protonation, force field, QM method, or metal model.
|
|
243
|
+
|
|
244
|
+
## Current limitations
|
|
245
|
+
|
|
246
|
+
Version 0.2.0 does not support noncanonical amino acids inside peptide chains,
|
|
247
|
+
covalent ligands, mmCIF input, automatic loop modeling, ORCA, Multiwfn,
|
|
248
|
+
multiple independent bonded MCPB sites, or multi-chain MCPB protein inputs.
|
|
249
|
+
Unsupported chemistry fails explicitly.
|
|
250
|
+
|
|
251
|
+
## Development and release checks
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
mamba env create -f environment-dev.yml
|
|
255
|
+
conda activate mdprep-dev
|
|
256
|
+
pytest -q
|
|
257
|
+
python -m mdprep.cli --help
|
|
258
|
+
python -m mdprep.cli config-check examples/*.yaml
|
|
259
|
+
python -m mdprep.cli selftest --quick
|
|
260
|
+
python -m hatchling build
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md), [CHANGELOG.md](CHANGELOG.md), and
|
|
264
|
+
[CITATION.cff](CITATION.cff). mdprep is distributed under the MIT license.
|