From: W. Trevor King Date: Wed, 8 May 2013 16:50:34 +0000 (-0400) Subject: src/hooke: Initial work on a Hooke chapter X-Git-Tag: v1.0~230 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=ae3c9f708e16874fd4c52a07ee87dcb16e6e3bd5;p=thesis.git src/hooke: Initial work on a Hooke chapter I'm stopping here and moving on to my buffer-results from February, so I have something to show at my next committee meeting. --- diff --git a/src/hooke/conclusions.tex b/src/hooke/conclusions.tex new file mode 100644 index 0000000..36916c3 --- /dev/null +++ b/src/hooke/conclusions.tex @@ -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 index 0000000..049e353 --- /dev/null +++ b/src/hooke/discussion.tex @@ -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 index 0000000..11e5380 --- /dev/null +++ b/src/hooke/drivers.tex @@ -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 index 0000000..9ad040d --- /dev/null +++ b/src/hooke/history.tex @@ -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 index 0000000..0cbf579 --- /dev/null +++ b/src/hooke/main.bib @@ -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 index 0000000..1b0d8f1 --- /dev/null +++ b/src/hooke/main.tex @@ -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 index 0000000..94f12cb --- /dev/null +++ b/src/hooke/plugins.tex @@ -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 index 0000000..e422fb3 --- /dev/null +++ b/src/hooke/ui.tex @@ -0,0 +1,3 @@ +\subsection{The user interface} +\label{sec:hooke:ui} + diff --git a/src/local_cmmds.tex b/src/local_cmmds.tex index 0afc4a7..347a86e 100644 --- a/src/local_cmmds.tex +++ b/src/local_cmmds.tex @@ -112,13 +112,16 @@ \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} diff --git a/src/root.bib b/src/root.bib index 5f39dac..1e841c0 100644 --- a/src/root.bib +++ b/src/root.bib @@ -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"} @@ -222,6 +224,7 @@ @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."} @@ -327,6 +330,7 @@ @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."} @@ -416,6 +420,7 @@ @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"} @@ -458,19 +463,9 @@ @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"} @@ -489,14 +484,25 @@ @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"} @@ -553,6 +559,7 @@ @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"} @@ -574,6 +581,7 @@ @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."} @@ -742,6 +750,7 @@ @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."} @@ -779,7 +788,7 @@ @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"} @@ -865,6 +874,7 @@ @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"} @@ -944,6 +954,7 @@ @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"} @@ -1018,6 +1029,7 @@ @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."} @@ -9874,3 +9886,131 @@ 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.}, +} diff --git a/src/root.tex b/src/root.tex index 5c084ca..8af9eb8 100644 --- a/src/root.tex +++ b/src/root.tex @@ -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}