Skip to content

Instantly share code, notes, and snippets.

@dwhswenson
Last active December 1, 2016 00:25
Show Gist options
  • Save dwhswenson/e1578a40ef67aae66da15e7b065c8f7c to your computer and use it in GitHub Desktop.
Save dwhswenson/e1578a40ef67aae66da15e7b065c8f7c to your computer and use it in GitHub Desktop.
Alanine dipeptide committor stuff

Alanine dipeptide committor stuff

This directory is part of a collaboration with Max Welling and his colleagues Rianne van den Berg and Thomas Kipf. We're playing with ways to use deep learning neural networks in the context of chemistry.

This is mainly for me to create some useful data for them, and for me to explain some of the tools that I think they will find useful. Some of this may get re-purposed into OpenPathSampling examples.

Here I am taking trajectories from a previously performed (flex-length) TPS calculation on the C7eq to alpha_R states of alanine dipeptide. I select a subset of the snapshots, and run a committor analysis on them. In the end, I give the experiment-by-experiment results, where an "experiment" is the mapping of an initial MD snapshot to the state it ended up in.

  • select_snapshots.ipynb: Select the initial set from snapshots. Input requires alanine_dipeptide_tps.nc (calculated for the OPS paper). Output is snapshots.nc.
  • commttor_simulation.ipynb: Committor analysis for the selected snapshots. Output is committor_simulation.nc.
  • committor_analysis.ipynb: Analysis of the committor simulation. Output is in committor_results.nc. This output includes the mapping of point in phase space to final state (binary value) that we discussed.
  • analysis_help.ipynb: How to load the output from the former and get relevant information from it.
  • mdtraj_tricks.ipynb: Introduction to a few potentially relevant aspects of MDTraj. Examples of how to create descriptors.

(Rianne and Thomas, the parts that are most relevant to you are mdtraj_tricks.ipynb and analysis_help.ipynb. The rest provides a record of how I'm creating these files.)


Information on various programs that interact with each other, to give context for Rianne and Thomas:

  • OpenMM: Molecular dynamics code. Unless you're actually doing simulations, you won't need to worry about this.
  • MDTraj: Trajectory analysis code, written by some of the same people as OpenMM, but useful for many other packages. You should use this for descriptors.
  • OpenMMTools: Useful shortcuts for working with OpenMM. Again, you won't need this unless you actually do simulations.
  • OpenPathSampling (OPS): What we use for our path sampling simulations. The files I create are readable by OPS, so you'll be working with some OPS objects.

If you can install OpenPathSampling using conda (you'll need to add the omnia channel), you should get all of these automatically. There are a few things I use that still aren't part of an OPS release, so you might want prefer to use a git-based local install of OPS in practice.

Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MDTraj tricks\n",
"\n",
"I think MDTraj will be a very useful tool for the sorts of things you'll want to do. It makes a lot of things very easy, both identifying the specific subset of the system you're interested in, and in creating physically meaningful descriptors."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Subsets of the total system\n",
"\n",
"In general, we don't want to use information from the entire system we simulate. For example, if we're interested in the behavior of a protein, the water it is in (at least, the water that is not close to the protein) probably does not play a signficant role, but it does massively increase the size of our parameter space.\n",
"\n",
"To simplify our system, we'll use what the molecular mechanics world calls a \"topology.\" You would probably call it a \"graph.\" It describes the kinds of atoms (the same element can have different kinds, depending on its context) and the both the atom forms -- so, nodes and edges.\n",
"\n",
"We'll use the `mdtraj.Topology` object to describe this. There is a powerful (and easy-to-use) \"atom selection\" language built into that, which I'll show a little of below. I saved the topology in the `snapshots.nc` file."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import openpathsampling as paths\n",
"import mdtraj as md"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"storage = paths.Storage(\"committor_results.nc\", \"r\")\n",
"# `engine` is an OPS OpenMMEngine, which has an OPS topology object,\n",
"# which can be converted to mdtraj\n",
"topology = storage.engines[0].topology.mdtraj"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1651\n"
]
}
],
"source": [
"print topology.n_atoms"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1629\n"
]
}
],
"source": [
"water_atoms = topology.select(\"water\")\n",
"print len(water_atoms)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"22\n"
]
}
],
"source": [
"nonwater_atoms = topology.select(\"not water\")\n",
"print len(nonwater_atoms)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n"
]
}
],
"source": [
"# this is the one you'll actually want to use\n",
"nonwater_heavies = topology.select(\"not water and element != H\")\n",
"print len(nonwater_heavies)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1 4 5 6 8 10 14 15 16 18]\n"
]
}
],
"source": [
"# and the list of atom indices from the full system\n",
"print nonwater_heavies"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"subset_topology = topology.subset(nonwater_heavies)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since the topology is just a graph, it is easy to turn into the kind of graph object you're probably more familiar with -- maybe `NetworkX`?"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'networkx.classes.graph.Graph'>\n"
]
}
],
"source": [
"# turn this into a networkx graph\n",
"nx_graph = subset_topology.to_bondgraph()\n",
"print type(nx_graph)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[ACE1-CH3,\n",
" ACE1-C,\n",
" ACE1-O,\n",
" ALA2-N,\n",
" ALA2-CA,\n",
" ALA2-CB,\n",
" ALA2-C,\n",
" ALA2-O,\n",
" NME3-N,\n",
" NME3-C]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# these are the full names of the atoms\n",
"nx_graph.nodes()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[(ACE1-CH3, ACE1-C),\n",
" (ACE1-C, ACE1-O),\n",
" (ACE1-C, ALA2-N),\n",
" (ALA2-N, ALA2-CA),\n",
" (ALA2-CA, ALA2-CB),\n",
" (ALA2-CA, ALA2-C),\n",
" (ALA2-C, NME3-N),\n",
" (ALA2-C, ALA2-O),\n",
" (NME3-N, NME3-C)]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# and the bonds\n",
"nx_graph.edges()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quick notes on the system: alanine dipeptide is an alanine (ALA) capped on either end by groups (residues) called ACE and NME (we usually use these to cap protein simulations. In the output above, each atom is named by a combination of residue and atom. The residue is identified by its type (ACE, ALA, NME) and number in the chain. The atom is identified by its element (C, O, N) and, when it isn't clear, by some context information (C, CA, CB to distinguish the three carbons in Ala). In this context, \"CA\" is actually known as \"carbon alpha\" and \"CB\" is \"carbon beta\", and those have specific meanings in the structure of proteins."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Descriptors\n",
"\n",
"The descriptors you might be interested in (a.k.a. \"collective variables\" in OPS) can probably be easily implemented using MDTraj. This notebook will show you how to define atom-atom distances, 3-atom angles, and 4-atom dihedral angles using MDTraj. We'll actually wrap these in OPS CollectiveVariables (because it will be easier to to get things to play nicely with the rest of OPS.)\n",
"\n",
"The `paths.MDTrajFunctionCV` wrapper works be requiring a `name` (your choice), an MDTraj function `f`, and the OpenPathSampling `topology`. Then it takes any other `kwargs` as parameters to pass to the MDTraj function. To get the right options, see the MDTraj documentation at http://mdtraj.org/latest/analysis.html\n",
"\n",
"Note also that the examples below are for a single descriptor (best for OPS). However, MDTraj is designed to simultaneously calculate multiple descriptors. So it takes a list of lists: a list of pairs for distances, a list of triples for angles, and a list of quadruples for dihedrals."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nqvj/aVKWj+LRPZ4AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x111a89ad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distances\n",
"# this particular distance probably doesn't mean anything: from the ACE-CH3 to the NME-N\n",
"distance_1_16 = paths.MDTrajFunctionCV(name=\"d_1_16\",\n",
" f=md.compute_distances,\n",
" topology=storage.engines[0].topology,\n",
" atom_pairs=[[1, 16]])\n",
"\n",
"# note that we use the *engine's* (OPS) topology when creating the function\n",
"d_1_16_values = distance_1_16(storage.snapshots)\n",
"plt.hist(d_1_16_values);"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(0.4928208589553833, dtype=float32)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# there we calculated for all snapshots; you can also just select one:\n",
"distance_1_16(storage.snapshots[7])\n",
"# returns numpy array"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nSaru/wMlxXg1vAfW7wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11c347ad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# angles\n",
"# I happen to know that the 3 carbons in Ala form an angle\n",
"# this little shortcut selects their atoms:\n",
"atoms_ala_CCC = topology.select(\"resname ALA and element C\")\n",
"# [8 10 14]\n",
"angle_ala_CCC = paths.MDTrajFunctionCV(name=\"angle_ala_CCC\",\n",
" f=md.compute_angles,\n",
" topology=storage.engines[0].topology,\n",
" angle_indices=[atoms_ala_CCC])\n",
"\n",
"angle_values = angle_ala_CCC(storage.snapshots)\n",
"plt.hist(angle_values);"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nQv8fHfjPAhxBsGMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11e341d50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# dihedrals\n",
"# if you're not familiar with dihedral angles, Wikipedia gives a good description:\n",
"# https://en.wikipedia.org/wiki/Dihedral_angle\n",
"# The phi and psi (aka, Ramachandran) angles are of particular significance in proteins\n",
"phi = paths.MDTrajFunctionCV(name=\"phi\",\n",
" f=md.compute_dihedrals,\n",
" topology=storage.engines[0].topology,\n",
" indices=[[4, 6, 8, 14]])\n",
"\n",
"phi_values = phi(storage.snapshots)\n",
"\n",
"psi = paths.MDTrajFunctionCV(name=\"psi\",\n",
" f=md.compute_dihedrals,\n",
" topology=storage.engines[0].topology,\n",
" indices=[[6, 8, 14, 16]])\n",
"\n",
"psi_values = psi(storage.snapshots)\n",
"\n",
"plt.hist2d(phi_values, psi_values, bins=20);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment