from mol_dynamics import *
def setup_dynamics(mol: Mol2, protein: MmCif, param_set: FfParamSet) -> MdState:
mols = [
MolDynamics(
ff_mol_type=FfMolType.SmallOrganic,
atoms=mol.atoms,
bonds=mol.bonds,
atom_posits=None,
atom_init_velocities=None,
adjacency_list=None,
static_=False,
mol_specific_params=None,
bonded_only=False,
),
MolDynamics(
ff_mol_type=FfMolType.Peptide,
atoms=protein.atoms,
bonds=[], atom_posits=None,
atom_init_velocities=None,
adjacency_list=None,
static_=True,
mol_specific_params=None,
bonded_only=False,
),
]
We specified all fields above for demonstration, but you may wish to use default keyword
arguments for terser syntax:
mols = [
MolDynamics(
ff_mol_type=FfMolType.SmallOrganic,
atoms=mol.atoms,
),
MolDynamics(ff_mol_type=FfMolType.Peptide, atoms=protein.atoms, static_=True),
]
return MdState(
MdConfig(),
mols,
param_set,
)
def main():
mol = Mol2.load("CPB.mol2")
protein = MmCif.load("1c8k.cif")
param_set = FfParamSet.new_amber()
_bonds, _dihedrals = prepare_peptide_mmcif(
protein,
param_set.peptide_ff_q_map,
7.0,
)
md = setup_dynamics(mol, protein, param_set)
n_steps = 100
dt = 0.002
for _ in range(n_steps):
md.step(dt)
snap = md.snapshots[len(md.snapshots) - 1] print(f"KE: {snap.energy_kinetic}, PE: {snap.energy_potential}, Atom posits:")
for posit in snap.atom_posits:
print(f"Posit: {posit}")
for snap in md.snapshots:
pass
main()