I've been spending some time comparing my [[force spectroscopy]] data
with Marisa's, and the main problem has been normalizing the data
collected using different systems. Marisa runs experiments using some
home-grown [LabVIEW][] software, which saves the data in [[IGOR binary
wave (IBW)|igor]] files. From my point of view, this is not the best
approach, but it has been stable over the time we've been running
experiments.
I run my own experiments using my own code based on [[pyafm]], saving
the data in [[HDF5]] files. I think this approach is much stronger,
but it has been a bit of a moving target, and I've spent a good deal
of my time working on the framework instead of running experiments.
Both approaches save the digitized voltages that we read/write during
an experiment, but other constants and calibration terms are not
always recorded. My [[pyafm]]-based software has been gradually
getting better in this regard, especially since I moved to
[[h5config]]-based initialization. Anyhow, here's a quick runthough
of all the important terms.
For the [TL;DR][tldr] crowd, [[crunch.py]] is my [[Python]] module
that crunches your input and prints out all the intermediate constants
discussed below. To use it on your own data, you'll probably have to
tweak the bits that read in the data to use your own format.
Calibrating the piezo
=====================
Calibration grid
----------------
We control the surface-tip distance by [[driving a piezo
tube|pypiezo]]. We want to know the correspondence between the
driving voltage and the piezo position, so we calibrate the piezo by
imaging a sample with square pits of a known depth.
[[!img piezo-good.png
alt="Piezo calibration trace"
title="Piezo calibration trace"]]
In this trace, I swept the $x$ position across most of the range of my
16-bit DAC. For each $x$ position, I adjusted the $z$ position until
the measured cantilever deflection $d$ crossed a setpoint. This gives
the $z$ voltage required to reach the surface as a function of $x$.
You can see the 200 nm deep square pits, as well as a reasonable
amount of $x$/$z$ crosstalk.
Sometimes grid calibrations are even less convincing than the example
shown above. For example, I have traces with odd shoulders on the
sides of the pits:
[[!img piezo.png
alt="Funky piezo calibration trace"
title="Funky piezo calibration trace"]]
This is one of the better piezo calibration images I aquired for the
piezo used in the pull below, so I'll use numbers from the funky
imaging for the remainder of this analysis. This piezo has
less $x$/$y$ range than the one used to measure the first calibration
trace, which is why I was unable to aquire a full pit (or pits).
The calibration constant $\alpha_z$ is the number of $z$ bits per
depth meter:
\[
\alpha_z = \frac{\text{grid piezo bits}}{\text{grid depth}}
= \frac{2779\pm87\text{ bits}}{200\text{ nm}}
= (1.39 \pm 0.04) \cdot 10^{10} \text{ bits/m} \;.
\]
Related conversion factors are
\[
\begin{aligned}
\gamma_z &= \frac{\text{piezo volts}}{\text{piezo bits}}
= \frac{20 \text{ piezo volts}}{\text{output volts}}
\cdot \frac{10 \text{ output volts}}{2^{15}\text{ piezo bits}}
= 6.10 \cdot 10^{-3} \text{ V/bit} \\
\sigma_z &= \frac{\text{grid piezo volts}}{\text{grid depth}}
= \gamma_z \alpha_z
= 8.48 \cdot 10^7 \text{ V/m} \;.
\end{aligned}
\]
This is roughly in the ballpark of our piezo (serial number 2253E)
which is spec'd at 8.96 nm/V along the $z$ axis, which comes out
to $1.12\cdot10^8$ V/m.
Laser interference
------------------
Another way to ballpark a piezo calibration that is much closer to a
force spectroscopy pull is to use the laser interference pattern as a
standard length. The laser for our [[microscope|MultiMode]] has a
wavelength of 670 nm. We'll assume a geometric gain of
\[
g_\lambda
= \frac{\text{increased laser path}}{\text{piezo displacement}}
\approx 2 \;.
\]
Measuring the length of an interference wave in bits then gives a
standard equivalent to the known-depth pits of the calibration grid.
[[!img pull-interference.png
alt="Laser interference during a velocity-clamp pull"
title="Laser interference during a velocity-clamp pull"]]
\[
\begin{aligned}
\alpha_z
&= \frac{\text{interference piezo bits}}{\text{interference depth}}
= \frac{g_\lambda}{\lambda} \cdot \text{interference piezo bits} \\
&= \frac{2}{670\cdot10^{-9}\text{ m}} \cdot (28935 - 23721)\text{ bits}
= 1.56 \cdot 10^{10}\text{ bits/m} \;.
\end{aligned}
\]
The other piezo calibration parameters are found exactly as in the
calibration grid case.
\[
\sigma_z = \gamma_z \alpha_z
= 9.52 \cdot 10^7 \text{V/m} \;.
\]
which is fairly close to both the spec'd value and grid calibration
values.
Calibrating the photodiode
==========================
During experiments, we measure cantilever deflection via the top and
bottom segments of a photodiode. We need to convert this deflection
voltage into a deflection distance, so we'll use the
already-calibrated piezo. When the tip is in contact with the
surface, we can move the surface a known distance (using the piezo)
and record the change in deflection.
[[!img bump.png
alt="Surface bump for photodiode sensitivity"
title="Surface bump for photodiode sensitivity"]]
The calibration constant $\alpha_d$ is the number of diode bits per
piezo bit.
\[
\alpha_d = \frac{\text{bump diode bits}}{\text{bump piezo bits}}
= 2.24 \text{ diode bits/piezo bits} \;.
\]
Related conversion factors are
\[
\begin{aligned}
\gamma_d &= \frac{\text{diode volts}}{\text{diode bits}}
= \frac{10 \text{ input volts}}{2^{15}\text{ diode bits}}
\cdot \frac{\text{diode volts}}{1 \text{input volts}}
= 3.05 \cdot 10^{-4} \text{ V/bit} \\
\sigma_d &= \frac{\text{bump diode volts}}{\text{bump tip position}}
= \gamma_d \alpha_d \alpha_z
= 9.52 \cdot 10^6 \text{ V/m} \;.
\end{aligned}
\]
Calibrating the cantilever spring constant
==========================================
To convert cantilever tip deflection to force, we need to know the
spring constant of the cantilever. After bumping the surface, we move
away from the surface and measure the cantilever's thermal vibration.
We use the vibration data to calculate the spring constant [[using the
equipartition theorem|calibcant]].
[[!img vibration.png
alt="Thermal vibration measurement"
title="Thermal vibration measurement"]]
The deflection variance $\langle d^2 \rangle$ is measured in frequency
space, where the power spectral density (PSD) is fitted to the
[[expected PSD of a damped harmonic oscillator|thesis]].
\[
\begin{aligned}
PSD_f &= \frac{G_{1f}}{(f_0^2 - f^2)^2 + \beta_f^2 f^2} \\
\langle d^2 \rangle &= \frac{\pi G_{1f}}{2\beta_f f_0^2} \\
\kappa &= \frac{2\beta_f f_0^2}{\pi G_{1f}}(\alpha_d\alpha_z)^2 k_B T
= \frac{2 \cdot (4.17 \cdot 10^3\text{ Hz})
\cdot (8.14 \cdot 10^3\text{ Hz})^2}
{\pi \cdot 3.10 \cdot 10^{13}\text{ bit}^2 \cdot\text{ Hz}^3}
\cdot (2.24 \cdot 1.39 \cdot 10^{10}\text{bit/m})^2
\cdot (1.38 \cdot 10^{-23}\text{ J/K}) \cdot (294 \text{K})
= 22.4 \cdot 10^{-3}\text{ N/m}
\end{aligned}
\]
Analyzing a velocity-clamp pull
===============================
The raw data from a [[velocity-clamp pull|Force_spectroscopy]] is an
array of output voltages used to sweep the piezo (moving the surface
away from the cantilever tip) and an array of input voltages from the
photodiode (measuring cantilever deflection). There are a number of
interesting questions you can ask about such data, so I'll break this
up into a few steps. Lets call the raw piezo data (in
bits) $\alpha_v$, with the contact-kink located at $\alpha_{v0}$.
Call the raw deflection data (also in bits) $\alpha_{F}$, with the
contact-kink located at $\alpha_{F0}$.
Piezo displacement
------------------
Using the [piezo calibration parameters](#piezo), we can calculate the
raw piezo position using
\[
z_\text{piezo} = \frac{\alpha_v - \alpha_{v0}}{\alpha_z} \;,
\]
measured in meters.
Surface contact region
----------------------
During the initial portion of a velocity clamp pull, the cantilever
tip is still in contact with the surface. This allows you to repeat
the [photodiode calibration](#photodiode), avoiding problems due to
drift in laser alignment or other geometric issues. This gives a new
set of diode calibration parameters $\alpha_d'$ and $\sigma_d'$ (it is
unlikely that $\gamma_d$ has changed, but it's easy to rework the
following arguments to include $\gamma_d'$ if you feel that it might
have changed).
Tension
-------
We can use the new photodiode calibration and the [cantilever's spring
constant](#vibration) to calculate the force from the Hookean
cantilever:
\[
F = \frac{\alpha_F - \alpha_{F0}}{\alpha_d' \alpha_z}\cdot\kappa
= (\alpha_F - \alpha_{F0})
\cdot\frac{2\beta_f f_0^2}{\pi G_{1f}}
\cdot\frac{\alpha_d^2\alpha_z}{\alpha_d'}
\cdot k_B T \;.
\]
[[!img pull-piezo.png
alt="Tension vs. piezo extension during a velocity-clamp pull"
title="Tension vs. piezo extension during a velocity-clamp pull"]]
Protein extension
-----------------
As the piezo pulls on the cantilever/protein system, some of the
increased extension is due to protein extension and the rest is due to
cantilever extension. We can use Hooke's law to remove the cantilever
extension, leaving only protein extension:
\[
z_\text{protein} = z_\text{piezo} - \frac{F}{\kappa}
= \frac{1}{\alpha_z}
\left(\alpha_v - \alpha_{v0} - \frac{\alpha_F - \alpha_{F0}}{\alpha_d'}
\right)
\]
[[!img pull-protein.png
alt="Tension vs. protein extension during a velocity-clamp pull"
title="Tension vs. protein extension during a velocity-clamp pull"]]
Contour-space
-------------
In order to confirm the piezo calibration, we look at changes in the
unfolded contour length due to domain unfolding ($\Delta L$). There
have been a number of studies of [[titin I27|I27-synthesis]], starting
with [Carrion-Vazquez et al.][carrionvazquez99], that show an contour
length increase of 28.1 ± 0.17 nm. Rather than fitting each loading
region with a worm-like chain (WLC) or other polymer model, it is
easier to calculate $\Delta L$ by converting the abscissa to
contour-length space (following [Puchner et al.][puchner08]). While
the WLC is commonly used, Puchner gets better fits using the [[freely
rotating chain (FRC)|FRC]] model.
In [[crunch.py]], I use either [Bustamante's formula][bustamante94]
(WLC) or [Livadaru's equation 49][livadaru03] (FRC) to calculate the
contour length of a particular force/distance pair.
[[!img pull-contour-space.png
alt="Tension vs. unfolded contour length during a velocity-clamp pull"
title="Tension vs. unfolded contour length during a velocity-clamp pull"]]
As you can see from the figure, my curves are spaced a bit too far
appart. Because the contour length depends $F$ as well
as $z_\text{protein}$, it depends on the cantilever calibration
(via $\beta_f$, $f_0$, $G_{1f}$ and $\alpha_d$) as well as the piezo
calibration (via $\alpha_z$). This makes adjusting calibration
parameters in an attempt to match your $\Delta L$ with previously
determined values a bit awkward. However, it is likely that my
cantilever calibration is too blame. If we use the value of $\alpha_z$
from the interference measurement we get
[[!img pull-contour-space-interference.png
alt="Tension vs. unfolded contour length during a velocity-clamp pull,
using laser-interference to calibrate the piezo"
title="Tension vs. unfolded contour length during a velocity-clamp pull,
using laser-interference to calibrate the piezo"]]
Which is still a bit too wide, but is much closer.
[LabVIEW]: http://www.ni.com/labview/
[tldr]: http://en.wiktionary.org/wiki/TL;DR
[livadaru03]: http://dx.doi.org/10.1021/ma020751g
[carrionvazquez99]: http://dx.doi.org/10.1073/pnas.96.20.11288
[puchner08]: http://dx.doi.org/10.1529/biophysj.108.129999
[bustamante94]: http://dx.doi.org/10.1126/science.8079175
[[!tag tags/theory]]