Complete Guide from Installation to Molecular Dynamics Simulation
This tutorial will guide you through the installation and basic usage of OpenMM. We'll start with system requirements, then proceed with installation, and finally learn how to use OpenMM for molecular dynamics simulations.
If you plan to use GPU acceleration, please ensure that CUDA or OpenCL is installed.
# Create virtual environment
python -m venv openmm-env
source openmm-env/bin/activate # Linux/macOS
# Or
openmm-env\Scripts\activate # Windows
# Install dependencies
pip install numpy scipy matplotlib pandas
# Use conda to install
conda install -c conda-forge openmm
# Or use pip to install
pip install openmm
# Test in Python
import openmm
print(openmm.__version__)
# Test GPU support
from openmm import Platform
print(Platform.getPlatformByName('CUDA').isAvailable())
from openmm.app import *
from openmm import *
from openmm.unit import *
# Load PDB file
pdb = PDBFile('protein.pdb')
# Create force field
forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')
# Create system
system = forcefield.createSystem(pdb.topology,
nonbondedMethod=PME,
nonbondedCutoff=1*nanometer,
constraints=HBonds)
# Create integrator
integrator = LangevinMiddleIntegrator(300*kelvin,
1/picosecond,
0.004*picoseconds)
# Create simulator
simulation = Simulation(pdb.topology, system, integrator)
simulation.context.setPositions(pdb.positions)
# Energy minimization
simulation.minimizeEnergy()
# Set reporter
simulation.reporters.append(PDBReporter('output.pdb', 1000))
simulation.reporters.append(StateDataReporter('data.csv', 1000,
step=True,
potentialEnergy=True,
temperature=True))
# Run simulation
simulation.step(1000000) # Run 1 million steps
# Create custom force field
custom_force = CustomBondForce('k*(r-r0)^2')
custom_force.addPerBondParameter('k')
custom_force.addPerBondParameter('r0')
# Add bond
custom_force.addBond(0, 1, [100.0, 0.15])
system.addForce(custom_force)
import mdtraj as md
# Load trajectory
traj = md.load('output.pdb')
# Calculate RMSD
rmsd = md.rmsd(traj, traj, 0)
# Calculate secondary structure
ss = md.compute_dssp(traj)
# Save analysis results
import numpy as np
np.savetxt('rmsd.txt', rmsd)
Molecular Dynamics
Molecular Dynamics
Molecular Dynamics