hooke: Flesh out discussion of drivers and plugins
authorW. Trevor King <wking@tremily.us>
Thu, 13 Jun 2013 19:16:12 +0000 (15:16 -0400)
committerW. Trevor King <wking@tremily.us>
Thu, 13 Jun 2013 21:54:23 +0000 (17:54 -0400)
Also add a missing close-paren to history.tex, along with a caveat
footnote that sometimes rewriting is worth it.

src/apparatus/procedure.tex
src/hooke/drivers.tex
src/hooke/history.tex
src/hooke/plugins.tex
src/local_cmmds.tex
src/root.bib

index f24e2ef62429c734853a3427961d7e08e7e721cf..d34b1756fad0e3e75e9cb9947900102c53e7a443 100644 (file)
@@ -60,6 +60,6 @@ multi-domain test proteins.
     and the substrate surface, and the last high force peak is caused
     by the detachment of the polymer from the tip or the substrate
     surface.  Note that the abscissa is the extension of the protein
     and the substrate surface, and the last high force peak is caused
     by the detachment of the polymer from the tip or the substrate
     surface.  Note that the abscissa is the extension of the protein
-    chain $x_t-x_c$.}
+    chain $x_t-x_c$.\label{fig:procedure}}
   \end{center}
 \end{figure}
   \end{center}
 \end{figure}
index 11e53808b46a82abadefde31b5561d5b93458259..5dd6c69ae5dca78b0fda11fb3271e448886ee35e 100644 (file)
@@ -2,6 +2,29 @@
 \label{sec:hooke:drivers}
 
 \Hooke\ supports a number of different SMFS data formats, including
 \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.
+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.  The
+drivers are responsible for loading curve data into a standardized
+format so that plugins can work with data from any source.  Drivers
+have can determine if they are capable of reading a particular file,
+so if you need to analyze a directory full of curve files in a number
+of formats, you can just point Hooke at the directory and it will pick
+the appropriate driver for each curve.
+
+After loading and parsing the data, drivers return a list of scaled
+\emph{blocks} and a dictionary\footnote{
+  Python dictionaries are hash tables, which allow you to easily
+  access arbitrary data if you know the key under which it was stored.
+} of metadata.  Each block corresponds to a different phase of the
+experiment; standard unfolding experiments have an approach block and
+a retraction block.  The piezo position and cantilever deflection data
+in each block is scaled by the driver into meters, but further
+processing (e.g. the conversion of cantilever position to a chain
+tension in newtons) is carried out by plugins.  The metadata
+dictionary includes standard keys for information that is required for
+the analysis (e.g.~the calibrated spring constant in N/m).  If the
+driver can parse any additional metadata from the file, it adds it to
+the dictionary using non-standard keys.  You can use this auxilliary
+metadata to perform subsequent analysis (e.g.~``give me all the curves
+that were recorded in \texttt{PBS + 0.5M CaCl2}'').
index 468b5f1f5019af272c72671a8de277825c16812b..bb72a49eacfec4ab2a0e7d5f78f9550c125f2cba 100644 (file)
@@ -14,7 +14,13 @@ fields\footnote{
   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
   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.
+  more efficient than writing your own tool from
+  scratch\footnotemark{}.
+}\footnotetext{
+  \ldots says the person who threw out the existing implementation and
+  rewrote the control stack from scratch ;).  I'm ok with starting
+  over if the existing project is not maintainable, but realize that
+  you're probably biting off a lot of work.
 }.
 
 Before discovering \Hooke in 2010, I had been using a series of fairly
 }.
 
 Before discovering \Hooke in 2010, I had been using a series of fairly
@@ -29,7 +35,7 @@ source tools such as \citetalias{punias}\citep{carl08} and JPK's
 line exists, but source code is unavailable\citep{andreopoulos11}.
 
 \Hooke\ supports a wide range of input file formats via \emph{drivers}
 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,
+(\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
 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
index 94f12cb7d0bd7a0aeb63a804c8c2ab397e0df92e..82d48183a55244708604554d07d1d65898de55c5 100644 (file)
@@ -1,3 +1,24 @@
 \subsection{Plugins for analysis}
 \label{sec:hooke:plugins}
 
 \subsection{Plugins for analysis}
 \label{sec:hooke:plugins}
 
+Plugins are groups of related commands for processing curves.  Curves
+can be stored in playlists, and there are builtin plugins for
+administrative tasks like managing curves (getting curve metadata,
+exporting blocks, \ldots) and playlists (moving to the next curve,
+globbing curves to the playlist, \ldots).  There are also analysis
+plugins with commands for doing science.  The \imint{python}|vclamp|
+plugin for velocity clamp analysis has commands for finding the
+surface contact point, scaling the cantilever deflection, removing the
+cantilever deflection from the total extension (\cref{fig:procedure}),
+and flattening polynomial drift in the non-contact region.  The
+\imint{python}|flatfilt| plugin has commands for identifying peaks
+based on spikes in the deflection derivative and for filtering curves
+from a playlist that only have more than a minimum threshold of such
+peaks\citep{sandal08}.  The \imint{python}|polymer_fit| plugin has
+commands for fitting polymer models to the loading peaks
+(\cref{sec:sawsim:tension}), which may have been identified using the
+\imint{python}|flatfilt| plugin or with any other peak-marking plugin.
+For other available plugins, see the \Hooke\ documentation.
+%
+\nomenclature{playlist}{Playlists are containers in \Hooke\ that hold
+  lists of unfolding curves along with some additional metadata.}
index eb6c358864741b826d36bc4a4dfb8896c11e3b62..2fe4488340943d534fb66e5262cea5340eccc8e8 100644 (file)
 % Chemicals
 \newcommand{\Ca}{Ca\textsuperscript{2+}}
 \newcommand{\CaCl}{CaCl\textsubscript{2}}
 % Chemicals
 \newcommand{\Ca}{Ca\textsuperscript{2+}}
 \newcommand{\CaCl}{CaCl\textsubscript{2}}
+\newcommand{\Cu}{Cu\textsuperscript{2+}}
 \newcommand{\Cl}{Cl\textsuperscript{-}}
 \newcommand{\HCl}{HCl}
 \newcommand{\Na}{Na\textsuperscript{+}}
 \newcommand{\Cl}{Cl\textsuperscript{-}}
 \newcommand{\HCl}{HCl}
 \newcommand{\Na}{Na\textsuperscript{+}}
index e6187c925780d5b3886e6b963de41ea3811a6dc1..668b3e5bf4efc8572a7badd79881bac9c8a29c85 100644 (file)
@@ -91,6 +91,7 @@
 @string{DRBentley = "Bentley, D. R."}
 @string{HJCBerendsen = "Berendsen, Herman J. C."}
 @string{KBergSorensen = "Berg-S\orensen, K"}
 @string{DRBentley = "Bentley, D. R."}
 @string{HJCBerendsen = "Berendsen, Herman J. C."}
 @string{KBergSorensen = "Berg-S\orensen, K"}
+@string{EBergantino = "Bergantino, Elisabetta"}
 @string{DBerk = "Berk, D."}
 @string{FBerkemeier = "Berkemeier, Felix"}
 @string{BBerne = "Berne, Bruce J."}
 @string{DBerk = "Berk, D."}
 @string{FBerkemeier = "Berkemeier, Felix"}
 @string{BBerne = "Berne, Bruce J."}
 @string{TBruls = "Bruls, T."}
 @string{VBrumfeld = "Brumfeld, Vlad"}
 @string{JDBryngelson = "Bryngelson, J. D."}
 @string{TBruls = "Bruls, T."}
 @string{VBrumfeld = "Brumfeld, Vlad"}
 @string{JDBryngelson = "Bryngelson, J. D."}
+@string{LBubacco = "Bubacco, Luigi"}
 @string{JBuckheit = "Buckheit, Jonathan B."}
 @string{ABuguin = "Buguin, A."}
 @string{ABulhassan = "Bulhassan, Ahmed"}
 @string{JBuckheit = "Buckheit, Jonathan B."}
 @string{ABuguin = "Buguin, A."}
 @string{ABulhassan = "Bulhassan, Ahmed"}
 @string{WMajoros = "Majoros, W."}
 @string{DEMakarov = "Makarov, Dmitrii E."}
 @string{RMamdani = "Mamdani, Reneeta"}
 @string{WMajoros = "Majoros, W."}
 @string{DEMakarov = "Makarov, Dmitrii E."}
 @string{RMamdani = "Mamdani, Reneeta"}
+@string{SMammi = "Mammi, Stefano"}
 @string{EMandello = "Mandello, Enrico"}
 @string{GManderson = "Manderson, Gavin"}
 @string{FMann = "Mann, F."}
 @string{EMandello = "Mandello, Enrico"}
 @string{GManderson = "Manderson, Gavin"}
 @string{FMann = "Mann, F."}
 @string{BMurphy = "Murphy, B."}
 @string{SMurphy = "Murphy, S."}
 @string{AMuruganujan = "Muruganujan, A."}
 @string{BMurphy = "Murphy, B."}
 @string{SMurphy = "Murphy, S."}
 @string{AMuruganujan = "Muruganujan, A."}
+@string{FMusiani = "Musiani, Francesco"}
 @string{EWMyers = "Myers, E. W."}
 @string{RMMyers = "Myers, R. M."}
 @string{AMylonakis = "Mylonakis, Andreas"}
 @string{EWMyers = "Myers, E. W."}
 @string{RMMyers = "Myers, R. M."}
 @string{AMylonakis = "Mylonakis, Andreas"}
 @string{MPlumbley = "Plumbley, Mark"}
 @string{PLOS:ONE = "PLOS ONE"}
 %string{PLOS:ONE = "Public Library of Science ONE"}
 @string{MPlumbley = "Plumbley, Mark"}
 @string{PLOS:ONE = "PLOS ONE"}
 %string{PLOS:ONE = "Public Library of Science ONE"}
+@string{PLOS:BIO = "PLOS Biology"}
 @string{DPlunkett = "Plunkett, David"}
 @string{PPodsiadlo = "Podsiadlo, Paul"}
 @string{ASPolitou = "Politou, A. S."}
 @string{DPlunkett = "Plunkett, David"}
 @string{PPodsiadlo = "Podsiadlo, Paul"}
 @string{ASPolitou = "Politou, A. S."}
 @string{THEMath = "Technische Hogeschool Eindhoven, Nederland,
   Onderafdeling der Wiskunde"}
 @string{SJBTendler = "Tendler, S.~J.~B."}
 @string{THEMath = "Technische Hogeschool Eindhoven, Nederland,
   Onderafdeling der Wiskunde"}
 @string{SJBTendler = "Tendler, S.~J.~B."}
+@string{ITessari = "Tessari, Isabella"}
 @string{STeukolsky = "Teukolsky, S."}
 @string{CJ = "The Computer Journal"}
 @string{JBC = "The Journal of Biological Chemistry"}
 @string{STeukolsky = "Teukolsky, S."}
 @string{CJ = "The Computer Journal"}
 @string{JBC = "The Journal of Biological Chemistry"}
 @string{UIP:Urbana = "University of Illinois Press, Urbana"}
 @string{UTMB = "University of Texas Medical Branch"}
 @string{MUrbakh = "Urbakh, M."}
 @string{UIP:Urbana = "University of Illinois Press, Urbana"}
 @string{UTMB = "University of Texas Medical Branch"}
 @string{MUrbakh = "Urbakh, M."}
+@string{FValle = "Valle, Francesco"}
 @string{KJVanVliet = "Van Vliet, Krystyn J."}
 @string{PVandewalle = "Vandewalle, Patrick"}
 @string{CVech = "Vech, C."}
 @string{KJVanVliet = "Van Vliet, Krystyn J."}
 @string{PVandewalle = "Vandewalle, Patrick"}
 @string{CVech = "Vech, C."}
     pulling speed.},
 }
 
     pulling speed.},
 }
 
+@article{ sandal08,
+  author = MSandal #" and "# FValle #" and "# ITessari #" and "#
+    SMammi #" and "# EBergantino #" and "# FMusiani #" and "#
+    MBrucale #" and "# LBubacco #" and "# BSamori,
+  title = {Conformational Equilibria in Monomeric $\alpha$-Synuclein
+    at the Single-Molecule Level},
+  year = 2008,
+  month = jan,
+  address = {Department of Biochemistry G. Moruzzi,
+             University of Bologna, Bologna, Italy.},
+  journal = PLOS:BIO,
+  volume = 6,
+  number = 1,
+  pages = {e6},
+  issn = {1545-7885},
+  doi = {10.1371/journal.pbio.0060006},
+  url = {http://www.ncbi.nlm.nih.gov/pubmed/18198943},
+  language = {eng},
+  keywords = {Buffers},
+  keywords = {Circular Dichroism},
+  keywords = {Copper},
+  keywords = {Entropy},
+  keywords = {Models, Molecular},
+  keywords = {Molecular Sequence Data},
+  keywords = {Mutation},
+  keywords = {Protein Structure, Secondary},
+  keywords = {Protein Structure, Tertiary},
+  keywords = {alpha-Synuclein},
+  abstract = {Human $\alpha$-Synuclein ($\alpha$Syn) is a natively
+    unfolded protein whose aggregation into amyloid fibrils is
+    involved in the pathology of Parkinson disease.  A full
+    comprehension of the structure and dynamics of early intermediates
+    leading to the aggregated states is an unsolved problem of
+    essential importance to researchers attempting to decipher the
+    molecular mechanisms of $\alpha$Syn aggregation and formation of
+    fibrils.  Traditional bulk techniques used so far to solve this
+    problem point to a direct correlation between $\alpha$Syn's unique
+    conformational properties and its propensity to aggregate, but
+    these techniques can only provide ensemble-averaged information
+    for monomers and oligomers alike.  They therefore cannot
+    characterize the full complexity of the conformational equilibria
+    that trigger the aggregation process.  We applied atomic force
+    microscopy-based single-molecule mechanical unfolding methodology
+    to study the conformational equilibrium of human wild-type and
+    mutant $\alpha$Syn.  The conformational heterogeneity of monomeric
+    $\alpha$Syn was characterized at the single-molecule level.  Three
+    main classes of conformations, including disordered and
+    ``$\beta$-like'' structures, were directly observed and quantified
+    without any interference from oligomeric soluble forms.  The
+    relative abundance of the ``$\beta$-like'' structures
+    significantly increased in different conditions promoting the
+    aggregation of $\alpha$Syn: the presence of \Cu, the pathogenic
+    A30P mutation, and high ionic strength.  This methodology can
+    explore the full conformational space of a protein at the
+    single-molecule level, detecting even poorly populated conformers
+    and measuring their distribution in a variety of biologically
+    important conditions.  To the best of our knowledge, we present
+    for the first time evidence of a conformational equilibrium that
+    controls the population of a specific class of monomeric
+    $\alpha$Syn conformers, positively correlated with conditions
+    known to promote the formation of aggregates.  A new tool is thus
+    made available to test directly the influence of mutations and
+    pharmacological strategies on the conformational equilibrium of
+    monomeric $\alpha$Syn.},
+}
+
 @article{ sandal09,
   author = MSandal #" and "# FBenedetti #" and "# MBrucale #" and "#
     AGomezCasado #" and "# BSamori,
 @article{ sandal09,
   author = MSandal #" and "# FBenedetti #" and "# MBrucale #" and "#
     AGomezCasado #" and "# BSamori,