1 % String comparison for \fref
3 \long\def\isequal#1#2{\pdf@strcmp{#1}{#2}}
6 % An reference index from an unspecified source
7 % usage: \iref{environment}{value}
8 % for example: \iref{equation}{75}
9 \newcommand{\iref}[2]{%
11 \case{\isequal{#1}{equation}}%
18 % A formatted reference from an unspecified source
19 % usage: \fref{environment}{value}
20 % for example: \fref{figure}{75}
21 \newcommand{\fref}[2]{%
23 \case{\isequal{#1}{equation}}%
25 \case{\isequal{#1}{figure}}%
27 \case{\isequal{#1}{section}}%
28 Section~\iref{#1}{#2}%
32 environment value >#2< unknown \MessageBreak
33 }{possible values are: equation. \MessageBreak}%
37 % References to external figures, equations, etc.
38 % usage: \xref{key}{environment}{value}
39 % for example: \xref{roman12}{figure}{75}
40 \newcommand{\xref}[3]{\citet{#1} \fref{#2}{#3}}
42 % Fourier Transform to angular momentum space
43 \newcommand{\Four}[1]{\ensuremath{{\mathcal F}\left\{ {#1} \right\}}}
44 % Fourier Transform to frequency space
45 \newcommand{\Fourf}[1]{\ensuremath{{\mathcal F}_f\left\{ {#1} \right\}}}
47 % use e^{...} instead of exp ...
48 \renewcommand{\exp}[1]{\ensuremath{e^{#1}}}
50 % Symbol denoting the Langevin function
51 \newcommand{\Langevin}{\ensuremath{\mathcal{L}}}
52 % Symbol denoting big-O order of #1
53 \newcommand{\order}[1]{\ensuremath{\mathcal{O}\p({#1})}}
55 % Integral from #1 to #2 of #4 with respect to #3
56 \newcommand{\integral}[4]{\ensuremath{\int_{#1}^{#2} {#4} \dd{#3}}}
57 % Integral from -infty to +infty of #2 with respect to #1
58 \newcommand{\iInfInf}[2]{\integral{-\infty}{\infty}{#1}{#2}}
59 % Integral from 0 to +infty of #2 with respect to #1
60 % note that the second char in the name is a capital o, not a 0
61 % because ?Latex doesn't allow digits in command names
62 \newcommand{\iOInf}[2]{\integral{0}{\infty}{#1}{#2}}
63 % #3 evaluated at #2 and #1
64 \newcommand{\evaluated}[3]{\ensuremath{\left.{#3}\right|_{#1}^{#2}}}
66 \newcommand{\eval}[2]{\ensuremath{\left.{#2}\right|_{#1}}}
67 % evaluated at infty and -infty
68 \newcommand{\eInfInf}[1]{\evaluated{-\infty}{\infty}{#1}}
69 % evaluated at infty and 0
70 \newcommand{\eOInf}[1]{\evaluated{0}{\infty}{#1}}
72 % we do a lot of lim t_T -> infty, so macro that out
74 \newcommand{\limInf}[1]{\ensuremath{\lim_{{#1}\rightarrow \infty}}}
75 \newcommand{\limT}{\limInf{t_T}}
76 \newcommand{\normLimT}{\limT \frac{1}{t_T}\ } % '\ ' for a normal space
77 % lim as t_T -> infty of integral from -t_T/2 to t_T/2 of #1 with respect to t
78 \newcommand{\iLimT}[1]{\normLimT \integral{-t_T/2}{t_T/2}{t}{#1}}
80 \newcommand{\magSq}[1]{\ensuremath{\left|{#1}\right|^2}}
81 \newcommand{\PSD}{\ensuremath{\operatorname{PSD}}}
84 \newcommand{\conj}[1]{\ensuremath{\overline{#1}}}
86 % Symbol denoting the contour C
87 \newcommand{\C}{\ensuremath{\mathcal{C}}}
88 % Integral about contour C of #1 with respect to z
89 \newcommand{\iC}[1]{\integral{\C}{}{z}{#1}}
90 \newcommand{\Reals}{\ensuremath{\mathds{R}}}
91 \newcommand{\Imags}{\ensuremath{\mathds{I}}}
92 \newcommand{\Real}{\ensuremath{\operatorname{Re}}}
93 \newcommand{\Imag}{\ensuremath{\operatorname{Im}}}
94 \newcommand{\ResX}[3]{\operatorname{Res}\left({{#1}={#2}},{#3}\right)}
95 \newcommand{\Res}[2]{\ResX{z}{#1}{#2}}
96 \newcommand{\limX}[2]{\lim_{{#1} \rightarrow {#2}}}
97 \newcommand{\limZ}[1]{\limX{z}{#1}}
98 \newcommand{\limZp}{\limZ{z_p}}
99 \newcommand{\CPV}{\ensuremath{\mathds{P}}}
101 \newcommand{\supScript}[1]{\ensuremath{^{\text{#1}}}}
102 \newcommand{\st}{\supScript{st}}
103 \newcommand{\nd}{\supScript{nd}}
104 \newcommand{\rd}{\supScript{rd}}
105 \newcommand{\sth}{\supScript{th}} % th, TH already taken
107 \newcommand{\colA}[1]{\textcolor{red}{#1}}
108 \newcommand{\colB}[1]{\textcolor{blue}{#1}}
109 \definecolor{purple}{rgb}{0.8, 0, 0.8}
110 \newcommand{\colAB}[1]{\textcolor{purple}{#1}}
111 \newcommand{\colC}[1]{\textcolor{green}{#1}}
113 \newcommand{\cf}{\emph{cf.}} % "confer" or "bring together" / "compare"
114 \newcommand{\ie}{\emph{i.e.}} % "id est" or "in other words"
115 \newcommand{\insilico}{\emph{in silico}} % quasi latin for "on a computer"
116 \newcommand{\invitro}{\emph{in vitro}} % latin for "in glass"
117 \newcommand{\invivo}{\emph{in vivo}} % latin for "in living organisms"
119 \newcommand{\gui}[1]{\emph{#1}} % highlighting for quotes from a GUI
121 \newcommand{\ensuretext}[1]{\ensuremath{\text{#1}}}
122 % Hyeon and Thirumalai equation number #1
123 \newcommand{\HTeq}[1]{\ensuretext{\emph{H\&T eq.\ {#1}}}}
124 \newcommand{\kT}{\ensuremath{k_B T}}
125 \newcommand{\bt}{\ensuremath{\beta}}
126 \newcommand{\fs}{\ensuremath{f^*}}
127 \newcommand{\dx}{\ensuremath{\Delta x(\fs)}}
128 \newcommand{\dxs}[1]{\ensuremath{\Delta x_{#1}(\fs)}} % for subscripting
129 \newcommand{\FO}{\ensuremath{\Delta F_0^\ddagger(\fs)}}
130 \newcommand{\vD}{\ensuremath{\nu_D(\fs)}}
131 \newcommand{\vDs}[1]{\ensuremath{\nu_{D{#1}}(\fs)}}
132 \newcommand{\kexp}{\ensuremath{\vD e^{-\bt \FO}}}
133 \newcommand{\kexps}[1]{\ensuremath{\vDs{#1} e^{-\bt_{#1} \FO_{#1}}}}
134 \newcommand{\kf}{\ensuremath{k(\fs)}}
135 \newcommand{\kfs}[1]{\ensuremath{k_{#1}(\fs)}}
136 %\newcommand{\avg}[1]{\ensuremath{\left\langle {#1} \right\rangle}}
137 \newcommand{\abs}[1]{\ensuremath{\lvert {#1} \rvert}}
138 \newcommand{\logp}[1]{\ensuremath{\log\!\!\left( {#1} \right)}}
139 % \! is a negative thin space to get the paren closer to the log
140 %\renewcommand{\r}{\ensuremath{r_f}}
141 %\newcommand{\rs}[1]{\ensuremath{r_{f{#1}}}}% to avoid double-subscripting
142 \newcommand{\ep}{\varepsilon}
144 \newcommand{\species}[1]{\emph{#1}} % \species{Homo sapiens}
147 \newcommand{\Ca}{Ca\textsuperscript{2+}}
148 \newcommand{\CaCl}{CaCl\textsubscript{2}}
149 \newcommand{\Cu}{Cu\textsuperscript{2+}}
150 \newcommand{\Cl}{Cl\textsuperscript{-}}
151 \newcommand{\HCl}{HCl}
152 \newcommand{\KCl}{KCl}
153 \newcommand{\MgCl}{MgCl\textsubscript{2}}
154 \newcommand{\Na}{Na\textsuperscript{+}}
155 \newcommand{\NaCl}{NaCl}
156 \newcommand{\diNaHPO}{Na\textsubscript{2}HPO\textsubscript{4}}
157 \newcommand{\NadiHPO}{NaH\textsubscript{2}PO\textsubscript{4}}
158 \newcommand{\NaOH}{NaOH}
160 % Workaround for inline minted markup
161 % http://code.google.com/p/minted/issues/detail?id=15
162 % usage: \imint{language}|value|
163 \NewDocumentCommand\imint{mv}{\texttt{#2}}
165 % Aliases for citations
166 \defcitealias{calibcant}{calibcant}
167 \defcitealias{comedi}{Comedi}
168 \defcitealias{cygwin}{Cygwin}
169 \defcitealias{cython}{Cython}
170 \defcitealias{epics}{EPICS}
171 \defcitealias{force-robot}{ForceRobot}
172 \defcitealias{gentoo}{Gentoo}
173 \defcitealias{git}{Git}
174 \defcitealias{h5config}{h5config}
175 \defcitealias{hdf5}{HDF5}
176 \defcitealias{interix}{Interix}
177 \defcitealias{kernighan88}{C}
178 \defcitealias{king10}{sawsim}
179 \defcitealias{labview}{LabVIEW}
180 \defcitealias{picoforce}{PicoForce}
181 \defcitealias{prefix}{Gentoo Prefix}
182 \defcitealias{punias}{PUNIAS}
183 \defcitealias{pyafm}{pyafm}
184 \defcitealias{pycomedi}{pycomedi}
185 \defcitealias{pymodbus}{pymodbus}
186 \defcitealias{pymol}{PyMol}
187 \defcitealias{pypid}{pypid}
188 \defcitealias{pypiezo}{pypiezo}
189 \defcitealias{python}{Python}
190 \defcitealias{sandal09}{Hooke}
191 \defcitealias{stepper}{stepper}
192 \defcitealias{beazley96}{SWIG}
193 \defcitealias{unfold-protein}{unfold-protein}
194 \defcitealias{wavemetrics-igor}{IGOR Pro}
195 \defcitealias{xcode}{Xcode}
196 \defcitealias{yaml}{YAML}
198 \newcommand{\Comedi}{\citetalias{comedi}}
199 \newcommand{\Hooke}{\citetalias{sandal09}}
200 \newcommand{\calibcant}{\citetalias{calibcant}}
201 \newcommand{\hFconfig}{\citetalias{h5config}}
202 \newcommand{\pyafm}{\citetalias{pyafm}}
203 \newcommand{\pypid}{\citetalias{pypid}}
204 \newcommand{\pypiezo}{\citetalias{pypiezo}}
205 \newcommand{\pycomedi}{\citetalias{pycomedi}}
206 \newcommand{\pysawsim}{\texttt{pysawsim}}
207 \newcommand{\sawsim}{\citetalias{king10}}
208 \newcommand{\stepper}{\citetalias{stepper}}
209 \newcommand{\unfoldprotein}{\citetalias{unfold-protein}}
211 % draw a line TikZ (useful for captions explaining figures)
212 % usage: \tikzline{style}
213 \DeclareRobustCommand{\tikzline}[1]{%
214 \protect\tikz \draw[#1] (0,0) -- (14pt,6pt);}
216 \DeclareRobustCommand{\thermocouple}{%
218 \draw[red] (0,1pt) -- (10pt,1pt);
219 \draw[purple] (0,3pt) -- (10pt,3pt);
220 \fill[black!20] (10pt,2pt) circle (2pt);
224 % draw a thermometer in TikZ
225 % usage: \thermometerx{bulb-location}
226 \newcommand{\thermometerx}[1]{
227 \draw[blue!20, line width=4pt, cap=round] #1 -- +(0, 12pt);
228 \fill[blue!20] #1 circle (5pt);
229 \draw[red, line width=2pt, cap=butt] #1 -- +(0, 8pt);
230 \fill[red] #1 circle (4pt);
233 \DeclareRobustCommand{\thermometer}{%
235 \resizebox{!}{10pt}{%
237 \thermometerx{(0,2.5pt)};%
243 % shared figure between pyafm and calibcant
244 % usage: \tikzstack{unfold-protein-color}{calibcant-color}
245 \newcommand{\tikzstack}[2]{%
246 \begin{tikzpicture}[decoration={
247 markings,% switch on markings
248 mark=% add a mark for screw threading
249 between positions 0 and 1 step 1pt
252 \draw (0, 2pt) -- (1pt, -2pt);
257 \tikzstyle{every node}=[text depth=0pt, rounded rectangle,
258 draw=blue!50, very thick, minimum height=1.7em]
259 % hardware nodes and coordinates
260 \node[shape=rectangle,draw=none,inner sep=0]
262 \asyinclude{figures/schematic/afm}};
263 \node[shape=rectangle,draw=black, semithick]
264 (daq) at ($(image.south west) + (-0.25, -1)$) {DAQ card};
265 \node[shape=rectangle,draw=black, semithick]
266 (motor) at ($(image.south) + (0, -1)$) {motor};
267 \coordinate (thermocouple) at ($(image.west) + (1.4, -4pt)$);
268 \thermometerx{(thermocouple)}
269 \coordinate (photodiode) at ($(image.west) + (1, 26pt)$);
270 \coordinate (piezo) at ($(image.south) + (-6pt, 0)$);
271 \draw[black!20,dashed] ($(daq.south west) + (-10pt, 0)$) -- +(0, 4);
273 \node (pycomedi) at ($(daq) + (-6,0)$) {pycomedi};
274 \node (pypiezo) at ($(pycomedi) + (0,1)$) {pypiezo};
275 \node (pyafm) at ($(pypiezo) + (0,1)$) {pyafm};
276 \node[#1] (unfold-protein) at ($(pyafm) + (0,1)$) {unfold-protein};
277 \node (stepper) at ($(pycomedi) + (2,1)$) {stepper};
278 \node (pypid) at ($(stepper) + (2,0)$) {pypid};
279 \node (h5config) at ($(pycomedi) + (-3,0)$) {h5config};
280 \node[#2] (calibcant) at ($(unfold-protein) + (-3,0)$) {calibcant};
281 % software connections
282 \draw (pypiezo) -- (pyafm);
283 \draw (stepper) -- (pyafm);
284 \draw (pypid) -- (pyafm);
285 \draw[#1] (pyafm) -- (unfold-protein);
286 \draw (h5config) -- (pypiezo);
287 \draw (h5config) -- (pyafm);
288 \ifthenelse{\equal{#1}{}}{% draw unfold-protein in black (the default)
289 \draw[#2] (pyafm) -- (calibcant);
290 \draw[#1] (h5config) -- (unfold-protein);% default path on top
292 \draw[#1] (h5config) -- (unfold-protein);
293 \draw[#2] (pyafm) -- (calibcant);% default path on top
295 \draw[#2] (h5config) -- (calibcant);
296 % hardware connections
297 \begin{pgfonlayer}{background}
298 \draw[purple, ->] (thermocouple) -- (pypid);
301 \draw[black!20, line width=4pt]
302 (motor) -- (image.south); % shaft with decoration threads
303 \draw[black, decorate, ultra thin]
304 (motor) -- (image.south); % shaft with decoration threads
306 \draw[red, <->] (pypiezo) -- (pycomedi);
307 \draw[red, <->] (pycomedi) to [bend left] (daq);
308 \draw[red, ->] (daq) -- (piezo);
309 \begin{pgfonlayer}{background}
310 \draw[red, ->, out=180, in=90] (photodiode) to (daq.north);
312 \draw[blue, ->] (stepper) -- (pycomedi);
313 \draw[blue, ->] (pycomedi) to [bend right] (daq);
314 \draw[blue, ->] (daq) -- (motor);