2. Molecular Design Toolkit Features

2.1. Molecular Mechanics

  • models.Forcefield Generic Forcefield energy model (automatically chosen implementation)
  • models.GAFF Amber force field for small organic molecules
  • models.OpenMMEnergyModel OpenMM energy kernel for Amber/CHARMM-like forcefields
  • models.SanderEnergyModel Sander energy kernel (from AmberTools) for Amber/CHARMM-like forcefields
  • models.Spring A single harmonic bond 2 atoms (for testing and toy models)
  • models.HarmonicOscillator A 1-D Harmonic oscillator centered at x=0 (for testing and toy models)

2.2. Quantum Chemistry

  • models.RHF Restricted Hartree-Fock (automatically chosen implementation)
  • models.DFT Density functional theories (automatically chosen implementation)
  • models.CASSCF Complete-active space MCSCF (automatically chosen implementation)
  • models.Semiempirical Generic semiempirical theories (automatically chosen implementation)
  • models.PySCF PySCF ab initio QM energy kernel, includes implementations for a large number of quantum energy models, including RHF, DFT, CASCI, CASSCF, MP2, and coupled cluster
  • models.SQM SQM semi-empirical energy kernel (from AmberTools), includes implementations for a large number of semiempirical models, including MNDO, AM1, PM3, PM6, DFTB

2.2.1. Molecular Dynamics

  • integrators.VelocityVerlet Generic Velocity Verlet dynamics (automatically chosen implementation)
  • integrators.Langevin Generic Langevin type (automatically chosen implementation)
  • integrators.OpenMMVerlet Velocity Verlet dynamics for use with OpenMM energy models
  • integrators.OpenMMLangevin Velocity Langevin dynamics for use with OpenMM energy models
  • integrators.SurfaceHopping Multi-state surface hopping dynamics using fewest switched. Implementation: internal.

2.3. Interactive visualization

  • viewer.Configurator Automatically generates user interfaces for configuring simulations
  • viewer.GeometryViewer 3D molecular viewer
  • viewer.ChemicalGraphViewer 2D molecular viewer
  • widgets.OrbitalViewer 3D molecular orbital viewer
  • widgets.BondSelector widget for building lists of atoms and/or bonds
  • widgets.ResidueSelector widget for building lists of atoms and/or residues
  • widgets.GeometryBuilder widget for manipulating internal coordinates
  • widgets.Symmetrizer widget for displaying and manipulating molecular symmetry groups
  • widgets.ParameterizationDisplay 3D display of issues when assigning forcefield parameters

2.4. Data analysis

Simulation results are stored in numpy arrays with an explicit unit system based on pint for easy analysis and comparison. A few are shown here as examples:

Static properties

  • Molecule.potential_energy(), Molecule.forces(), Molecule.dipole_moment(), Molecule.wfn() Molecular properties calcualted by energy models: the potential energy, force array, dipole moment vector, and electronic wavefunction, respectively.
  • orbitals.ElectronWfn A data structure storic electronic wavefunction information, as calculated by a quantum energy model.
  • ElectronWfn.aobasis.fock() ElectronWfn.aobasis.overlaps() The Fock and overlap matrices in the AO basis
  • ElectronWfn.canonical.fock() ElectronWfn.canonical.overlaps() The Fock and overlap matrices in the canonical orbital basis
  • ElectronWfn.canonical.coeffs() The canonical orbital coefficients in the AO basis

Trajectory properties

  • Trajectory A data structure storing a series of molecular structures with associated properties
  • Trajectory.rmsd() Calculate a timeseries of RMSD values over the course of a trajectory
  • Trajectory.distance(), Trajectory.angle(), Trajectory.dihedral() Return a timeseries of distances, angles, or dihedral angles over the course of a trajectory
  • Trajectory.time() Trajectory.potential_energy() Trajectory.kinetic_temperature() ... - Return timeseries of times, energies, temperatures, etc. over the course of a trajectory

2.5. Interfaces

Files and databases

  • read(), write() read/write molecular file formats. Supports PDB, mmCIF, SDF, XYZ, MOL2, and pickled objects. Implementations: OpenBabel, BioPython, or internal.
  • from_smiles() Convert a SMILES string into an MDT molecule with a 3D structure. Implementation: OpenBabel.
  • from_name() Convert an IUPAC chemical name into an MDT molecule with a 3D structure. Implementation: Opsin.
  • from_pdb() Download and create a molecule object from a PDB code. Implementation: BioPython.

Python objects

MDT molecules can also be converted into objects for a variety of other Python chemistry libraries:

  • interfaces.mol_to_pybel(), interfaces.pybel_to_mol() Convert an MDT molecule to/from a pybel (i.e. OpenBabel) molecule object.
  • interfaces.mol_to_pyscf(), interfaces.pyscf_to_mol() Convert an MDT molecule to/from a PySCF molecule object.
  • interfaces.topology_to_mol(), interfaces.mol_to_topology() Convert an OpenMM topology object to/from an MDT molecule

2.6. Tools

Topology manipulation

  • add_hydrogen() Saturate a molecule’s valence with hydrogens. Implementation: OpenBabel.
  • guess_bond_orders() Assign bond orders based on geometry and/or topology. Implementation: OpenBabel.
  • mutate_residues() Mutate DNA bases and amino acid residues. Implementation: PDBFixer.
  • add_water_box() Add water box with optional ions. Implementation: PDBFixer.


  • assign_forcefield() Returns a new molecule with forcefield assignments and any missing atoms. Implementation: AmberTools/tLeap.
  • parameterize() Assign forcefield parameters to a molecule. Implementation: Ambertools/antechamber.
  • calc_am1_bcc_charges() calc_gasteiger_charges() calc_esp_charges() Calculate partial charges for use with a forcefield. Implementation: Ambertools/antechamber and Ambertools/SQM