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]]