7. Visualization

7.1. Visualize molecular orbitals

First, you’ll need to calculate the molecule’s electronic structure using a quantum chemistry model. Quantum chemistry models are a type of Energy Model in MDT.

You can use iPython’s autocomplete to get a list of the available methods by typing mdt.models. and then hitting the Tab key:


In this example, let’s set up a small molecule with a simple quantum chemistry model - restricted Hartree-Fock.

>>> mol = mdt.from_name('benzene')
>>> mol.set_energy_model(mdt.models.RHF(basis='6-31g'))

Next, we’ll run a calculation with this model - this will calculate several relevant properties for the molecule.

>>> mol.calculate()
>>> mol.potential_energy
-6275.56597497 eV
>>> mol.wfn
<ElectronicWfn (rhf/6-31g) of Molecule: benzene>

These properties are stored in a dict at mol.properties:

>>> mol.properties.keys()
['wfn', 'positions', 'mulliken', 'potential_energy']

Most relevant for our purposes, we’ve calculated the electronic state of the molecule and are ready to visualize it.

>>> mol.draw_orbitals()

In an actual notebook, you can use the controls on the right to control the visualization.

7.2. Maniuplate a 3D visualization

First, create a viewer. It will be rendered in your notebook when it’s the last object evaluated in a code cell.

>>> import moldesign as mdt
>>> from moldesign import units as u
>>> mol = mdt.from_pdb('3AID')
>>> viewer = mol.draw3d()
>>> viewer

At this point, the viewer will be drawn into your notebook. You can continue to manipulate it after it’s been drawn.

For starters, let’s turn all the waters purple.

>>> wateratoms = [atom for atom in mol.atoms if atom.residue.type == 'water']
>>> viewer.vdw(atoms=wateratoms, color='purple')

Next, let’s make that drug molecule really stand out with with a transparent sphere, an arrow, and a label:

>>> drug = mol.chains['A'].residues['ARQ401']
>>> r = drug.center_of_mass
>>> sphere = viewer.draw_sphere(position=r, radius=6*u.angstrom, opacity=0.5, color='green')
>>> arrow = viewer.draw_arrow(start=r+[0,0,26]*u.angstrom, end=r+[0,0,6]*u.angstrom, radius=3)
>>> label = viewer.draw_label(text="Here's the drug", position=r)

Maybe that’s too much - let’s remove the label and the sphere.

>>> viewer.remove(label)
>>> viewer.remove(sphere)