src/hooke: Initial work on a Hooke chapter
authorW. Trevor King <wking@tremily.us>
Wed, 8 May 2013 16:50:34 +0000 (12:50 -0400)
committerW. Trevor King <wking@tremily.us>
Wed, 8 May 2013 16:50:34 +0000 (12:50 -0400)
I'm stopping here and moving on to my buffer-results from February, so
I have something to show at my next committee meeting.

src/hooke/conclusions.tex [new file with mode: 0644]
src/hooke/discussion.tex [new file with mode: 0644]
src/hooke/drivers.tex [new file with mode: 0644]
src/hooke/history.tex [new file with mode: 0644]
src/hooke/main.bib [new file with mode: 0644]
src/hooke/main.tex [new file with mode: 0644]
src/hooke/plugins.tex [new file with mode: 0644]
src/hooke/ui.tex [new file with mode: 0644]
src/local_cmmds.tex
src/root.bib
src/root.tex

diff --git a/src/hooke/conclusions.tex b/src/hooke/conclusions.tex
new file mode 100644 (file)
index 0000000..36916c3
--- /dev/null
@@ -0,0 +1,3 @@
+\subsection{Conclusions}
+\label{sec:hooke:conclusions}
+
diff --git a/src/hooke/discussion.tex b/src/hooke/discussion.tex
new file mode 100644 (file)
index 0000000..049e353
--- /dev/null
@@ -0,0 +1,3 @@
+\subsection{Discussion}
+\label{sec:hooke:discussion}
+
diff --git a/src/hooke/drivers.tex b/src/hooke/drivers.tex
new file mode 100644 (file)
index 0000000..11e5380
--- /dev/null
@@ -0,0 +1,7 @@
+\subsection{Drivers for loading unfolding pull data}
+\label{sec:hooke:drivers}
+
+\Hooke\ supports a number of different SMFS data formats, including
+Hemingway\citep{materassi09}, JPK's \citetalias{force-robot},
+Asylum's MFP3D\citep{mfp-3d}, Bruker's \citetalias{picoforce}, and
+my \unfoldprotein\ (\cref{sec:pyafm:unfold-protein}) formats.
diff --git a/src/hooke/history.tex b/src/hooke/history.tex
new file mode 100644 (file)
index 0000000..9ad040d
--- /dev/null
@@ -0,0 +1,56 @@
+\section{History}
+\label{sec:hooke:history}
+
+\Hooke\ was originally developed by \citet{sandal09} working at the
+University of Bologna.  It was actively developed until the paper came
+out, after which development became more sporadic.  This was partly
+because \Hooke\ worked well enough for the original authors and partly
+because some of the developers had graduated and moved on to other
+fields\footnote{Developer churn may seem like a good reason to avoid
+  open source software.  Why use something when its developers may not
+  stay around to support it?  This argument may make sense if you're
+  comparing open source and commercial packages, but it makes less
+  sense if you're comparing existing open source packages to
+  hypothetical in-house software.  Why \emph{not} use something, if
+  it's free and already exists?  Figuring out someone else's software
+  is often much more efficient than writing your own tool from
+  scratch.}.
+
+Before discovering \Hooke in 2010, I had been using a series of fairly
+site-specific scripts to post-process my unfolding data.  Excited by
+the existence of a published, open source post-processing framework, I
+dropped my scripts and started working on \Hooke.  Other open-source
+tools for post-processing SMFS data exist, but they are based on
+closed sorce tools\citep{kuhn05,aioanei11} and some are no longer
+being developed\citep{kuhn05}.  There are also some completely closed
+source tools such as \citetalias{punias}\citep{carl08} and JPK's
+\citetalias{force-robot}\citep{struckmeier08}.  Other work along this
+line exists, but source code is unavailable\citep{andreopoulos11}.
+
+\Hooke\ supports a wide range of input file formats via \emph{drivers}
+(\cref{sec:hooke:drivers}, but when I began working on the project,
+there wasn't a clear interface between the drivers and processing
+\emph{plugins} (\cref{sec:hooke:plugins}).  I cleaned up this
+interface as part of a general refactoring, fixing a number of plugins
+that relied on obscure internals in particular driver code.  My
+refactoring removed these leaky abstractions, and now every analysis
+plugin works with every data driver.
+
+\Hooke\ has been designed with an eye to modular flexibility, with a
+command line interface (CLI) and graphical user interface (GUI).
+However, as with drivers and plugins, the initial abstractions were
+leaky.  I added a generic argument interface for analysis plugins, and
+taught the interfaces how to handle the generic argument types
+(\cref{sec:hooke:ui}).  With this framework, new analysis plugins are
+automatically supported by both the CLI and the GUI.  As a side effect
+of this reorganization, the GUI (which had previously been a display
+for the CLI) became truly interactive.  The interactive portions of
+the GUI owe a large debt to earlier work by Rolf Schmidt et al.~from
+the Centre for NanoScience Research at Concordia University.
+%
+\nomenclature{CLI}{Command line interface.  A textual computing
+  environtment, where the user controls execution by typing commands
+  at a prompt (\cf~GUI).}
+\nomenclature{GUI}{Graphical user interface.  A graphical computing
+  environment, where the user controls execution through primarily
+  through mouse clicks and interactive menus and widgets (\cf~CLI).}
diff --git a/src/hooke/main.bib b/src/hooke/main.bib
new file mode 100644 (file)
index 0000000..0cbf579
--- /dev/null
@@ -0,0 +1,21 @@
+@string{AsylumResearch = "Asylum Research"}
+@string{Bruker = "Bruker Corporation"}
+@string{JPK = "JPK Instruments AG"}
+
+@misc{ force-robot,
+  author = JPK,
+  title = {ForceRobot},
+  url = {http://www.jpk.com/forcerobot-r-300-overview.500.en.html},
+}
+
+@misc{ mfp-3d,
+  author = AsylumResearch,
+  title = {{MFP-3D}},
+  url = {http://www.asylumresearch.com/Products/Mfp3DSA/Mfp3DSA.shtml},
+}
+
+@misc{ picoforce,
+  author = Bruker,
+  title = {{PicoForce}},
+  url = {http://www.bruker.com/products/surface-analysis/atomic-force-microscopy/modes/modes-techniques/nanomechanical-modes/forcedistance.html},
+}
diff --git a/src/hooke/main.tex b/src/hooke/main.tex
new file mode 100644 (file)
index 0000000..1b0d8f1
--- /dev/null
@@ -0,0 +1,17 @@
+\chapter{Data analysis with \Hooke}
+\label{sec:hooke}
+
+Unfolding force curves acquired with the \pyafm\ stack
+(\cref{sec:pyafm}) are not usually interesting in their own right.  To
+analyze them in bulk, we need unfolding force histograms.  These
+experimental histograms can then be used for fitting simulated models
+with \sawsim\ (\cref{sec:sawsim}).  In this chapter, I'll discuss the
+histogram extraction procedure and the \Hooke\ package that
+facilitates it.
+
+\input{hooke/history}
+\input{hooke/drivers}
+\input{hooke/plugins}
+\input{hooke/ui}
+\input{hooke/discussion}
+\input{hooke/conclusions}
diff --git a/src/hooke/plugins.tex b/src/hooke/plugins.tex
new file mode 100644 (file)
index 0000000..94f12cb
--- /dev/null
@@ -0,0 +1,3 @@
+\subsection{Plugins for analysis}
+\label{sec:hooke:plugins}
+
diff --git a/src/hooke/ui.tex b/src/hooke/ui.tex
new file mode 100644 (file)
index 0000000..e422fb3
--- /dev/null
@@ -0,0 +1,3 @@
+\subsection{The user interface}
+\label{sec:hooke:ui}
+
index 0afc4a7fead024f0119207336a0a93c59c78052a..347a86e8293bcba056c1233bb3706506484faf70 100644 (file)
 \defcitealias{cygwin}{Cygwin}
 \defcitealias{cython}{Cython}
 \defcitealias{epics}{EPICS}
+\defcitealias{force-robot}{ForceRobot}
 \defcitealias{gentoo}{Gentoo}
 \defcitealias{h5config}{h5config}
 \defcitealias{hdf5}{HDF5}
 \defcitealias{interix}{Interix}
 \defcitealias{king10}{sawsim}
 \defcitealias{labview}{LabVIEW}
+\defcitealias{picoforce}{PicoForce}
 \defcitealias{prefix}{Gentoo Prefix}
+\defcitealias{punias}{PUNIAS}
 \defcitealias{pyafm}{pyafm}
 \defcitealias{pycomedi}{pycomedi}
 \defcitealias{pymodbus}{pymodbus}
index 5f39dacf6e7ce90c3cf3f3afb91348059f8ea7d5..1e841c04563896543030deef80bb5cf9ba70ebf4 100644 (file)
@@ -18,6 +18,7 @@
 @string{SAinavarapu = "Ainavarapu, Sri Rama Koti"}
 @string{DAioanei = "Aioanei, Daniel"}
 @string{TRAlbrecht = "Albreacht, T.~R."}
+@string{AMB = "Algorithms for molecular biology: AMB"}
 @string{FAli = "Ali, F."}
 @string{JFAllemand = "Allemand, Jean-Fran\c{c}ois"}
 @string{DAllen = "Allen, D."}
@@ -32,6 +33,7 @@
 @string{HAn = "An, H."}
 @string{KNAn = "An, Kai-Nan"}
 @string{ABioChem = "Analytical biochemistry"}
+@string{BAndreopoulos = "Andreopoulos, Bill"}
 @string{IAndricioaei = "Andricioaei, Ioan"}
 @string{ACIEE = "Angew. Chem. Int. Ed. Engl."}
 @string{ARBBS = "Annu Rev Biophys Biomol Struct"}
 @string{LCurry = "Curry, L."}
 @string{CDahlke = "Dahlke, C."}
 @string{FDahlquist = "Dahlquist, Frederick W."}
+@string{PDalhaimer = "Dalhaimer, Paul"}
 @string{SDanaher = "Danaher, S."}
 @string{LDavenport = "Davenport, L."}
 @string{MCDavies = "Davies, M.~C."}
 @string{LAGavrilov = "Gavrilov, L. A."}
 @string{NSGavrilova = "Gavrilova, N. S."}
 @string{WGe = "Ge, W."}
+@string{UGeisler = "Geisler, Ulrich"}
 @string{GENE = "Gene"}
 @string{CGerber = "Gerber, Christoph"}
 @string{CGergely = "Gergely, C."}
 @string{WHoff = "Hoff, Wouter D."}
 @string{JLHolden = "Holden, J. L."}
 @string{RAHolt = "Holt, R. A."}
+@string{GHofmann = "Hofmann, Gerd"}
 @string{MHonda = "Honda, M."}
 @string{NPCHong = "Hong, Neil P. Chue"}
 @string{XHong = "Hong, Xia"}
 @string{MIvemeyer = "Ivemeyer, M."}
 @string{DIzhaky = "Izhaky, David"}
 @string{SIzrailev = "Izrailev, S."}
-%string{JACS = "J Am Chem Soc"}
-@string{JACS = "Journal of the American Chemical Society"}
-@string{JAP = "Journal of Applied Physics"}
-@string{JBM = "J Biomech"}
-@string{JBT = "J Biotechnol"}
-@string{JEChem = "Journal of Electroanalytical Chemistry"}
-@string{JMathBiol = "J Math Biol"}
-@string{JMicro = "Journal of microscopy"}
-@string{JPhysio = "Journal of physiology"}
-@string{JStructBiol = "Journal of structural biology"}
-@string{JTB = "J Theor Biol"}
+@string{TJahnke = "J{\"a}hnke, Torsten"}
 @string{WJang = "Jang, W."}
-@string{HJanovjak = "Janovjak, H."}
+@string{HJanovjak = "Janovjak, Harald"}
 @string{LJanosi = "Janosi, Lorant"}
 @string{AJanshoff = "Janshoff, Andreas"}
 @string{JJAP = "Japanese Journal of Applied Physics"}
 @string{SJones = "Jones, S."}
 @string{CJordan = "Jordan, C."}
 @string{JJordan = "Jordan, J."}
+%string{JACS = "J Am Chem Soc"}
+@string{JACS = "Journal of the American Chemical Society"}
+@string{JASA = "Journal of the American Statistical Association"}
+@string{JAP = "Journal of Applied Physics"}
+@string{JBM = "J Biomech"}
+@string{JBT = "J Biotechnol"}
 @string{JCPPCB = "Journal de Chimie Physique et de Physico-Chimie Biologique"}
 @string{JCS = "Journal of Cell Science"}
 @string{JCompP = "Journal of Computational Physics"}
+@string{JEChem = "Journal of Electroanalytical Chemistry"}
+@string{JMathBiol = "J Math Biol"}
+@string{JMicro = "Journal of microscopy"}
+@string{JPhysio = "Journal of physiology"}
+@string{JStructBiol = "Journal of structural biology"}
+@string{JTB = "J Theor Biol"}
 @string{JMB = "Journal of Molecular Biology"}
 @string{JP:CM = "Journal of Physics: Condensed Matter"}
 @string{JP:CON = "Journal of Physics: Conference Series"}
 @string{JRNBS:C = "Journal of Research of the National Bureau of Standards.  Section C: Engineering and Instrumentation"}
-@string{JASA = "Journal of the American Statistical Association"}
 @string{WSJuang = "Juang, F.~S."}
 @string{DAJuckett = "Juckett, D. A."}
 @string{SRJun = "Jun, Se-Ran"}
 @string{RLevy = "L\'evy, R"}
 @string{DLabeit = "Labeit, Dietmar"}
 @string{SLabeit = "Labeit, Siegfried"}
+@string{DLabudde = "Labudde, Dirk"}
 @string{SLahmers = "Lahmers, Sunshine"}
 @string{ZLai = "Lai, Z."}
 @string{CLam = "Lam, Canaan"}
 @string{CLethias = "Lethias, Claire"}
 @string{SLeuba = "Leuba, Sanford H."}
 @string{ALeung = "Leung, A."}
+@string{MLeuschner = "Leuschner, Mirko"}
 @string{AJLevine = "Levine, A. J."}
 @string{CLevinthal = "Levinthal, Cyrus"}
 @string{ALevitsky = "Levitsky, A."}
 @string{ANoy = "Noy, Aleksandr"}
 @string{NAR = "Nucleic Acids Research"}
 @string{JNummela = "Nummela, Jeremiah"}
+@string{JNunes = "Nunes, Joao"}
 @string{DNusskern = "Nusskern, D."}
 @string{GNyakatura = "Nyakatura, G."}
 @string{CSOHern = "O'Hern, Corey S."}
 @string{MPeterson = "Peterson, M."}
 @string{SMPeterson = "Peterson, Susan M."}
 @string{CPfannkoch = "Pfannkoch, C."}
-@string{PA = "Pflugers Arch"}
+@string{PA = "Pfl{\"u}gers Archiv: European journal of physiology"}
 @string{PTRSL = "Philosophical Transactions of the Royal Society of London"}
 @string{PR:E = "Phys Rev E Stat Nonlin Soft Matter Phys"}
 @string{PRL = "Physical review letters"}
 @string{NScherer = "Scherer, Norbert F."}
 @string{SScherer = "Scherer, S."}
 @string{MSchilhabel = "Schilhabel, M."}
+@string{HSchillers = "Schillers, Hermann"}
 @string{BSchlegelberger = "Schlegelberger, B."}
 @string{MSchleicher = "Schleicher, Michael"}
 @string{MSchlierf = "Schlierf, Michael"}
 @string{TRStrick = "Strick, T. R."}
 @string{CStroh = "Stroh, Cordula"}
 @string{RStrong = "Strong, R."}
+@string{JStruckmeier = "Struckmeier, Jens"}
 @string{STR = "Structure"}
 @string{TStrunz = "Strunz, Torsten"}
 @string{MSu = "Su, Meihong"}
 @string{JCVoegel = "Voegel, J.-C."}
 @string{VVogel = "Vogel, Viola"}
 @string{CWagner-McPherson = "Wagner-McPherson, C."}
+@string{RWahl = "Wahl, Reiner"}
 @string{TAWaigh = "Waigh, Thomas A."}
 @string{BWalenz = "Walenz, B."}
 @string{JWallis = "Wallis, J."}
     erratum pointing out the error and at least \citet{puchner08} have
     quoted the incorrect form.},
 }
+
+@misc{ punias,
+  author = PCarl #" and "# PDalhaimer,
+  title = {{PUNIAS}: Protein Unfolding and Nano-indentation Analysis
+    Software},
+  year = 2005,
+  month = oct,
+  day = 13,
+  note = {4 Int. Workshop, Scanning Probe Microscopy in Life Sciences},
+  address = {Berlin},
+  url = {http://punias.voila.net/},
+}
+
+@article{ carl08,
+  author = PCarl #" and "# HSchillers,
+  title = {Elasticity measurement of living cells with an atomic force
+    microscope: data acquisition and processing.},
+  year = 2008,
+  month = nov,
+  day = 15,
+  address = {Institute of Physiology II, University of M{\"u}nster,
+             Robert-Koch-Str. 27b, 48149, M{\"u}nster, Germany.},
+  journal = PA,
+  volume = 457,
+  number = 2,
+  pages = {551--559},
+  issn = {0031-6768},
+  doi = {10.1007/s00424-008-0524-3},
+  url = {http://www.ncbi.nlm.nih.gov/pubmed/18481081},
+  language = {eng},
+  keywords = {Animals},
+  keywords = {Biomechanics},
+  keywords = {CHO Cells},
+  keywords = {Cricetinae},
+  keywords = {Cricetulus},
+  keywords = {Cystic Fibrosis Transmembrane Conductance Regulator},
+  keywords = {Elastic Modulus},
+  keywords = {Equipment Design},
+  keywords = {Microscopy, Atomic Force},
+  keywords = {Models, Biological},
+  keywords = {Reproducibility of Results},
+  keywords = {Signal Processing, Computer-Assisted},
+  keywords = {Transfection},
+  abstract = {Elasticity of living cells is a parameter of increasing
+    importance in cellular physiology, and the atomic force microscope
+    is a suitable instrument to quantitatively measure it. The
+    principle of an elasticity measurement is to physically indent a
+    cell with a probe, to measure the applied force, and to process
+    this force-indentation data using an appropriate model. It is
+    crucial to know what extent the geometry of the indenting probe
+    influences the result. Therefore, we indented living Chinese
+    hamster ovary cells at 37 degrees C with sharp tips and colloidal
+    probes (spherical particle tips) of different sizes and
+    materials. We furthermore developed an implementation of the Hertz
+    model, which simplifies the data processing. Our results show (a)
+    that the size of the colloidal probe does not influence the result
+    over a wide range (radii $0.5$-$26\U{$\mu$m}$) and (b) indenting
+    cells with sharp tips results in higher Young's moduli
+    (approximately $1,300\U{Pa}$) than using colloidal probes
+    (approximately $400\U{Pa}$).},
+  note = {Mentions \citetalias{punias} as if it was in-house software,
+    which makes sense because Philippe Carl seems to be a major author.},
+}
+
+@article{ struckmeier08,
+  author = JStruckmeier #" and "# RWahl #" and "# MLeuschner #" and "#
+    JNunes #" and "# HJanovjak #" and "# UGeisler #" and "#
+    GHofmann #" and "# TJahnke #" and "# DJMuller,
+  title = {Fully automated single-molecule force spectroscopy for
+    screening applications},
+  year = 2008,
+  month = sep,
+  day = 24,
+  address = {Cellular Machines, Biotechnology Center,
+             Technische Universit{\"a}t Dresden, Tatzberg 47, D-01307
+             Dresden, Germany},
+  journal = NT,
+  volume = 19,
+  number = 38,
+  pages = 384020,
+  issn = {0957-4484},
+  doi = {10.1088/0957-4484/19/38/384020},
+  url = {http://www.ncbi.nlm.nih.gov/pubmed/21832579},
+  language = {eng},
+  abstract = {With the introduction of single-molecule force
+    spectroscopy (SMFS) it has become possible to directly access the
+    interactions of various molecular systems. A bottleneck in
+    conventional SMFS is collecting the large amount of data required
+    for statistically meaningful analysis. Currently, atomic force
+    microscopy (AFM)-based SMFS requires the user to tediously `fish'
+    for single molecules. In addition, most experimental and
+    environmental conditions must be manually adjusted.  Here, we
+    developed a fully automated single-molecule force
+    spectroscope. The instrument is able to perform SMFS while
+    monitoring and regulating experimental conditions such as buffer
+    composition and temperature.  Cantilever alignment and calibration
+    can also be automatically performed during experiments. This,
+    combined with in-line data analysis, enables the instrument, once
+    set up, to perform complete SMFS experiments autonomously.},
+  note = {An advertisement for JPK's \citetalias{force-robot}.},
+}
+
+@article{ andreopoulos11,
+  author = BAndreopoulos #" and "# DLabudde,
+  title = {Efficient unfolding pattern recognition in single molecule
+    force spectroscopy data},
+  year = 2011,
+  month = jun,
+  day = 06,
+  address = {Department of Bioinformatics, Biotechnological Center,
+             University of Technology Dresden, Dresden, Germany.
+             williama@biotec.tu-dresden.de},
+  journal = AMB,
+  volume = 6,
+  number = 1,
+  pages = 16,
+  issn = {1748-7188},
+  doi = {10.1186/1748-7188-6-16},
+  url = {http://www.ncbi.nlm.nih.gov/pubmed/21645400},
+  language = {eng},
+  abstract = {Single-molecule force spectroscopy (SMFS) is a technique
+    that measures the force necessary to unfold a protein. SMFS
+    experiments generate Force-Distance (F-D) curves. A statistical
+    analysis of a set of F-D curves reveals different unfolding
+    pathways. Information on protein structure, conformation,
+    functional states, and inter- and intra-molecular interactions can
+    be derived.},
+}
index 5c084ca698212df53a25431d00a6d6fd8ac23ef0..8af9eb8819cca6e06492bae68ef6b724b153b8bc 100644 (file)
@@ -67,6 +67,7 @@ defaultpen(fontsize(10));  // match drexel-thesis's default 10pt font size
 \include{sawsim/main}
 \include{pyafm/main}
 \include{calibcant/main}
+\include{hooke/main}
 %\include{temperature/main}
 %\include{cantilever/main}
 \include{future/main}
@@ -78,6 +79,7 @@ defaultpen(fontsize(10));  // match drexel-thesis's default 10pt font size
 %  sawsim/main,% currently empty
   pyafm/main,%
   calibcant/main,%
+  hooke/main,%
   packaging/main,%
   figures/main,%
   root}