Open source
single molecule
force spectroscopy

Protein unfolding in varying salt concentrations

Trevor King

Proteins: What are they?

Proteins: Where are they?

Takamori, Holt, Stenius, et al., 2006

Proteins: Titin

Adapted from Wikipedia

Proteins: Titin's I27

U. Illinois Biophysics Group

Proteins: I27

PDB structure 1TIT

Proteins: What's the problem?

MHHHHHHSSLIEV
EKPLYGVEVFVGE
TAHFEIELSEPDV
HGQWKLKGQPLTA
SPDCEIIEDGKKH
ILILHNCQLGMTG
EVSFQAANAKSAA
NLKVKEL

  →  

Pirchi, Ziv, Riven, et al., 2011

Atomic force microscopy

AFM: Cantilever geometry

Olympus TR800PSA , images from Asylum Research
We use the thinner TR400PSA

AFM: Laser deflection

Charles Roduit

AFM: Piezo positioning

The piezoelectric effect

Wikipedia

AFM: Tubular piezos

Single molecule force spectroscopy

SMFS: Sawtooth curve

SMFS: What's going on?

Carrion-Vazquez, et al., 2000; adapted from Baljon and Robbins, 1996

SMFS: Unfolding one domain

Lu and Schulten, 2000

Experiment control

Control: Quick-and-dirty

Control: Modular stack

Open source: Existing layers

Linux GNU Gentoo Python SciPy
Comedi matplotlib pymodbus Cython NumPy
h5py

Open source: Teamwork

Mlot, Tovey, and Hu, 2011

Control: Example code


class Unfolder (object):
    …
    def run(self):
        """Approach-bind-unfold-save[-plot] cycle.
        """
        ret = {}
        ret['timestamp'] = _email_utils.formatdate(localtime=True)
        ret['temperature'] = self.afm.get_temperature()
        ret['approach'] = self._approach()
        self._bind()
        ret['unfold'] = self._unfold()
        self._save(**ret)
        if _package_config['matplotlib']:
            self._plot(**ret)
        return ret
						

Archival: HDF5 and h5config

GROUP "/"
   GROUP "approach"
      …
   GROUP "config"
      GROUP "afm"
         …
      GROUP "approach"
         …
      DATASET "bind time"
      …
      GROUP "unfold"
         …
         DATASET "velocity"
   GROUP "environment"
      DATASET "temperature"
      DATASET "timestamp"
      …
   GROUP "unfold"
      DATASET "deflection"
      DATASET "frequency"
      DATASET "z"

Archival: Version control

commit 32bfbf98d79c73eba50b77d0917df100e0e33bcf
Author: W. Trevor King <wking@tremily.us>
Date:   Fri Jan 18 22:54:49 2013 -0500

    afm: Optionally return stepper_approach data with `record_data`

    Sometimes these approach curves are pretty funky, so I'll start
    recording them by default in calibcant-calibrate.py.

diff --git a/pyafm/afm.py b/pyafm/afm.py
index 60741c6..e76b118 100644
--- a/pyafm/afm.py
+++ b/pyafm/afm.py
@@ -460,10 +460,11 @@ class AFM (object):
         _LOG.warn(e)
         raise e

-    def stepper_approach(self, target_deflection):
+    def stepper_approach(self, target_deflection, record_data=None):

Cantilever calibration

Calibration: Geometry

Olympus TR800PSA , images from Asylum Research
We use the thinner TR400PSA

Calibration: Equipartition

For a damped harmonic oscillator

\[ -\kappa x_c - \gamma \frac{\mathrm{d}\! x_c}{\mathrm{d}\! t} + F_\text{ext}(t) = m\frac{\mathrm{d}^2\! x}{\mathrm{d}\! t^2} \;, \]

the energy in each degree of freedom is $\frac{1}{2}k_B T$.

\[ \frac{1}{2} \kappa \left\langle x_c^2 \right\rangle = \frac{1}{2}k_B T \;, \]

where $k_B$ is Boltzmann's constant and $T$ is the temperature.

Calibration: Vibration

Calibration: Photodiode calibration

Calibration: Results

\[ \begin{aligned} T &= 298.15 \pm 0.03 \; \text{K} & \sigma_p &= 35.7 \pm 0.9 \; \text{mV/nm} \\ \left\langle V_p^2 \right\rangle &= 97 \pm 1 \; \text{mV}^2 & \sqrt{\left\langle x_c^2 \right\rangle} &= \sqrt{\frac{\left\langle V_p^2 \right\rangle}{\sigma_p^2}} = 0.28 \; \text{nm} \\ \kappa &= \frac{k_B T \sigma_p^2}{\left\langle V_p^2 \right\rangle} = 54 \pm 3 \; \text{pN/nm} \end{aligned} \]

Calibration: Stability

Quant. Units   Day 1   Day 2
$T$ K 296.30 ±0.02 294.27 ±0.02
$\sigma_p$ mV/nm  46.2 ±0.8  41.3 ±0.2
$\left\langle V_p^2 \right\rangle$ mV$^2$ 108 ±1 105 ±2
$\kappa$ pN/nm  67 ±2  66 ±2

Calibration: Inconsistency

Florin, Rief, Lehmann, et al., 1995

Monte Carlo unfolding simulations

Sawsim: State model

Sawsim: Simulation loop

  1. Calculate piezo-induced gap $x_t(t)=v t$
  2. Find tension model parameters for each state
  3. Distribute per-state stretching ($x_c$, $x_u$, …) to balance the tension
  4. Calculate the transition rates between states
  5. Roll the dice to determine if transitions take place as you step forward in time

Sawsim: Monte Carlo

Sawsim: Unfolding models

Sawsim: Kramers' model

\[ \frac{1}{k_u} = \frac{1}{D} \int_{-\infty}^{\infty} \mathrm{d}\! x \; e^{\frac{U_F(x)}{k_B T}} \int_{-\infty}^{x} \mathrm{d}\! x' \; e^{\frac{-U_F(x')}{k_B T}} \]

Sawsim: Tension models

Sawsim: Fitting models

Sawsim: Salt

Lu and Schulten, 2000

Sawsim: Glutamic acid

THE END

Written with reveal.js