1\documentclass[10pt]{book}
2% alternative fonts:
3% times, mathptmx, mathpazo, newcent, bookman
4% xref http://www.ce.cmu.edu/~kijoo/latex2pdf.pdf
5\usepackage{times}
6%\usepackage{fullpage}
7\usepackage{relsize}   % the \smaller command, used in \ccode for example
8\usepackage{fancyvrb}
9\usepackage{array}
10\usepackage[numbers,sort&compress]{natbib}
11\usepackage[pdftex]{graphicx}
12\usepackage[usenames,dvipsnames]{color}
13\usepackage[backref,colorlinks]{hyperref}
14
15\hypersetup{
16  linkcolor   = RoyalBlue,
17  anchorcolor = RoyalBlue,
18  citecolor   = RoyalBlue,
19  filecolor   = RoyalBlue,
20  menucolor   = RoyalBlue,
21  runcolor    = RoyalBlue,
22  urlcolor    = RoyalBlue,
23}
24
25\usepackage{ifthen}
26\newboolean{completedraft}
27\setboolean{completedraft}{true}   %  if compiling the entire guide
28%\setboolean{completedraft}{false}   % if writing/testing a piece at a time...
29                                     %   comment out the \ifthenelse
30                                     %   around the piece you're
31                                     %   working on.
32
33\input{macros}
34
35\setcounter{secnumdepth}{1}
36
37\begin{document}
38
39\ifthenelse{\boolean{completedraft}}{
40   \input{titlepage}
41   \input{copyright}
42   \newpage
43   \tableofcontents
44}{}
45
46% A \sloppy command helps a lot with line justification;
47% we have a lot of \texttt's in this thing, and they screw up justification.
48\sloppy
49
50\ifthenelse{\boolean{completedraft}}{
51   \newpage
52%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53   \chapter{Introduction}
54%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55   \begin{quote}
56    \emph{...using another person's software is sometimes treated like
57    using their toothbrush.}\\
58   \hspace*{1em}\hfill - Webb Miller \citep{Miller01}
59   \end{quote}
60   \input{intro}
61}{}
62
63\ifthenelse{\boolean{completedraft}}{
64   \newpage
65%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66   \chapter{\eslmodincmd{easel}: the foundation}
67%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68   \begin{quote}
69   \emph{Lack of skill dictates economy of style.}
70   \hspace*{1em}\hfill -- Joey Ramone
71   \end{quote}
72   \input{easel}
73   \section{Functions in the easel module}
74   \input{autotext/easel_functions}
75   \vspace*{\fill}
76}{}
77
78\ifthenelse{\boolean{completedraft}}{
79%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80   \chapter{Biosequence data modules}
81%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82}{}
83
84\ifthenelse{\boolean{completedraft}}{
85   \newpage
86   \section{\eslmodincmd{alphabet}: digitized biosequences}
87   \input{esl_alphabet}
88   \subsection{Functions in the alphabet module}
89   \input{autotext/esl_alphabet_functions}
90}{}
91
92\ifthenelse{\boolean{completedraft}}{
93   \newpage
94   \section{\eslmodincmd{sq}: single biological sequences}
95   \input{esl_sq}
96   \subsection{Functions in the sq module}
97  \input{autotext/esl_sq_functions}
98}{}
99
100\ifthenelse{\boolean{completedraft}}{
101   \newpage
102   \section{\eslmodincmd{msa}: Multiple sequence alignments and i/o}
103   \input{esl_msa}
104   \subsection{Functions in the msa module}
105   \input{autotext/esl_msa_functions}
106}{}
107
108\ifthenelse{\boolean{completedraft}}{
109   \newpage
110   \section{\eslmodincmd{randomseq}: sampling random sequences}
111   \input{esl_randomseq}
112   \subsection{Functions in the randomseq module}
113   \input{autotext/esl_randomseq_functions}
114}{}
115
116\ifthenelse{\boolean{completedraft}}{
117   \newpage
118   \section{\eslmodincmd{sqio}: unaligned sequence file input/output}
119   \input{esl_sqio}
120   \subsection{Functions in the sqio module}
121   \input{autotext/esl_sqio_functions}
122}{}
123
124\ifthenelse{\boolean{completedraft}}{
125   \newpage
126   \section{\eslmodincmd{dsqdata}: faster sequence file input}
127   \input{esl_dsqdata}
128   \subsection{Functions in the dsqdata module}
129   \input{autotext/esl_dsqdata_functions}
130}{}
131
132\ifthenelse{\boolean{completedraft}}{
133   \newpage
134   \section{\eslmodincmd{ssi}: indexing flatfiles for record retrieval}
135   \input{esl_ssi}
136   \subsection{Functions in the ssi module}
137   \input{autotext/esl_ssi_functions}
138}{}
139
140\ifthenelse{\boolean{completedraft}}{
141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
142   \chapter{Multiple sequence alignment modules}
143%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
144}{}
145
146\ifthenelse{\boolean{completedraft}}{
147   \newpage
148   \section{\eslmodincmd{msacluster}: Clustering aligned sequence families}
149   \input{esl_msacluster}
150   \subsection{Functions in the msacluster module}
151   \input{autotext/esl_msacluster_functions}
152}{}
153
154\ifthenelse{\boolean{completedraft}}{
155   \newpage
156   \section{\eslmodincmd{msaweight}: Ad hoc sequence weighting}
157
158   \begin{quote}
159    \emph{... as if someone were to buy several copies of the morning
160    newspaper to assure himself that what is said is true.}\\
161   \hspace*{1em}\hfill -- Ludwig Wittgenstein \citep[cited in]{Altschul89}
162   \end{quote}
163
164   \input{esl_msaweight}
165   \subsection{Functions in the msaweight module}
166   \input{autotext/esl_msaweight_functions}
167}{}
168
169\ifthenelse{\boolean{completedraft}}{
170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
171   \chapter{Multiple sequence alignment formats}
172%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
173
174   \section{\eslmodincmd{msafile}: input/output of multiple sequence alignments}
175%   \input{esl_msafile}
176
177%   \subsection{Functions in the msafile module}
178%   \input{autotext/esl_msafile_functions}
179
180
181}{}
182
183%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
184%% \chapter{Pairwise sequence alignment}
185%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
186%% \begin{quote}
187%%  \emph{And how will it ever end?\\
188%%        unless the day finally arrives\\
189%%        when we have compared everything in the world\\
190%%        to everything else in the world,\\
191%%        and there is nothing left to do\\
192%%        but quietly close our notebooks\\
193%%        and sit with our hands folded on our desks.}\\
194%% \hspace*{1em}\hfill -- Billy Collins, \emph{The Trouble with Poetry}
195%% \end{quote}
196
197%% \newpage
198%% \section{\eslmodincmd{swat}: Smith/Waterman local alignment}
199%% \input{esl_swat}
200%% \subsection{Functions in the swat module}
201%% \input{autotext/esl_swat_functions}
202
203
204
205\ifthenelse{\boolean{completedraft}}{
206%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
207\chapter{Probabilistic modeling modules}
208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
209   \begin{quote}
210     \emph{Probability theory is nothing but common sense reduced to
211     calculation.}\\
212   \hspace*{1em}\hfill -- Laplace
213   \end{quote}
214}{}
215
216\ifthenelse{\boolean{completedraft}}{
217   \newpage
218   \section{\eslmodincmd{scorematrix}: Pairwise alignment scores}
219   \input{esl_scorematrix}
220   \subsection{Functions in the scorematrix module}
221   \input{autotext/esl_scorematrix_functions}
222}{}
223
224\ifthenelse{\boolean{completedraft}}{
225   \newpage
226   \section{\eslmodincmd{ratematrix}: Continuous-time Markov models of evolution}
227   \input{esl_ratematrix}
228   \subsection{Functions in the ratematrix module}
229   \input{autotext/esl_ratematrix_functions}
230}{}
231
232\ifthenelse{\boolean{completedraft}}{
233   \newpage
234   \section{\eslmodincmd{paml}: Reading data files from PAML}
235   \input{esl_paml}
236   \subsection{Functions in the paml module}
237   \input{autotext/esl_paml_functions}
238}{}
239
240\ifthenelse{\boolean{completedraft}}{
241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
242   \chapter{Sequence annotation}
243%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
244}{}
245
246\ifthenelse{\boolean{completedraft}}{
247   \newpage
248   \section{\eslmodincmd{wuss}: RNA secondary structure annotation}
249   \input{esl_wuss}
250   \subsection{Functions in the wuss module}
251   \input{autotext/esl_wuss_functions}
252}{}
253
254\ifthenelse{\boolean{completedraft}}{
255%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
256   \chapter{Numerical computing}
257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
258}{}
259
260\ifthenelse{\boolean{completedraft}}{
261   \newpage
262   \section{\eslmodincmd{vectorops}: Vector operations}
263   \input{esl_vectorops}
264   \subsection{Functions in the vectorops module}
265   \input{autotext/esl_vectorops_functions}
266}{}
267
268\ifthenelse{\boolean{completedraft}}{
269   \newpage
270   \section{\eslmodincmd{dmatrix}: 2D matrices and linear algebra}
271   \input{esl_dmatrix}
272   \subsection{Functions in the dmatrix module}
273   \input{autotext/esl_dmatrix_functions}
274}{}
275
276\ifthenelse{\boolean{completedraft}}{
277   \newpage
278   \section{\eslmodincmd{minimizer}: Conjugate gradient descent}
279   \input{esl_minimizer}
280   \subsection{Functions in the minimizer module}
281   \input{autotext/esl_minimizer_functions}
282}{}
283
284\ifthenelse{\boolean{completedraft}}{
285   \newpage
286   \section{\eslmodincmd{rootfinder}: One-dimensional rootfinding}
287   \input{esl_rootfinder}
288   \subsection{Functions in the rootfinder module}
289   \input{autotext/esl_rootfinder_functions}
290}{}
291
292\ifthenelse{\boolean{completedraft}}{
293%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
294   \chapter{Phylogenetic inference modules}
295%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
296}{}
297
298\ifthenelse{\boolean{completedraft}}{
299   \newpage
300   \section{\eslmodincmd{tree}: Phylogenetic trees}
301   \input{esl_tree}
302   \subsection{Functions in the tree module}
303   \input{autotext/esl_tree_functions}
304}{}
305
306\ifthenelse{\boolean{completedraft}}{
307   \newpage
308   \section{\eslmodincmd{distance}: Distance calculations}
309   \input{esl_distance}
310   \subsection{Functions in the distance module}
311   \input{autotext/esl_distance_functions}
312}{}
313
314\ifthenelse{\boolean{completedraft}}{
315\newpage
316%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
317   \chapter{Statistics modules}
318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
319   \begin{quote}
320   \emph{In any case, my experience is that while engaged in
321     cryptanalysis I started to believe in statistics!}\\
322   \hspace*{1em}\hfill -- Albrecht Beutelspacher, \emph{Cryptology}
323   \end{quote}
324
325   \input{statistics}
326}{}
327
328\ifthenelse{\boolean{completedraft}}{
329\newpage
330\section{\eslmodincmd{stats}: Basic statistics routines}
331\input{esl_stats}
332\subsection{Functions in the stats module}
333\input{autotext/esl_stats_functions}
334}{}
335
336\ifthenelse{\boolean{completedraft}}{
337\newpage
338\section{\eslmodincmd{histogram}: Collecting histograms}
339\input{esl_histogram}
340\subsection{Functions in the histogram module}
341\input{autotext/esl_histogram_functions}
342}{}
343
344\ifthenelse{\boolean{completedraft}}{
345\newpage
346\section{\eslmodincmd{dirichlet}: Beta, Gamma, Dirichlet densities and priors}
347\input{esl_dirichlet}
348\subsection{Functions in the dirichlet module}
349\input{autotext/esl_dirichlet_functions}
350}{}
351
352\ifthenelse{\boolean{completedraft}}{
353\newpage
354\section{\eslmodincmd{exponential}: Exponential distributions}
355\input{esl_exponential}
356\subsection{Functions in the exponential module}
357\input{autotext/esl_exponential_functions}
358}{}
359
360\ifthenelse{\boolean{completedraft}}{
361\newpage
362\section{\eslmodincmd{gamma}: Gamma distributions}
363\input{esl_gamma}
364\subsection{Functions in the gamma module}
365\input{autotext/esl_gamma_functions}
366}{}
367
368\ifthenelse{\boolean{completedraft}}{
369\newpage
370\section{\eslmodincmd{gev}: Generalized extreme value distributions}
371\input{esl_gev}
372\subsection{Functions in the gev module}
373\input{autotext/esl_gev_functions}
374}{}
375
376\ifthenelse{\boolean{completedraft}}{
377\newpage
378\section{\eslmodincmd{gumbel}: Type I extreme value (Gumbel) statistics}
379\input{esl_gumbel}
380\subsection{Functions in the gumbel module}
381\input{autotext/esl_gumbel_functions}
382}{}
383
384\ifthenelse{\boolean{completedraft}}{
385\newpage
386\section{\eslmodincmd{hyperexp}: Hyperexponential distributions}
387\input{esl_hyperexp}
388\subsection{Functions in the hyperexp module}
389\input{autotext/esl_hyperexp_functions}
390}{}
391
392\ifthenelse{\boolean{completedraft}}{
393\newpage
394\section{\eslmodincmd{mixdchlet}: Mixture Dirichlet distributions}
395%\input{esl_mixdchlet}
396\subsection{Functions in the mixdchlet module}
397%\input{autotext/esl_mixdchlet_functions}
398}{}
399
400\ifthenelse{\boolean{completedraft}}{
401\newpage
402\section{\eslmodincmd{mixgev}: Mixture generalized extreme value distributions}
403%\input{esl_mixgev}
404%\subsection{Functions in the mixgev module}
405%\input{autotext/esl_mixgev_functions}
406}{}
407
408\ifthenelse{\boolean{completedraft}}{
409\newpage
410\section{\eslmodincmd{normal}: Normal (Gaussian) distributions}
411\input{esl_normal}
412\subsection{Functions in the normal module}
413\input{autotext/esl_normal_functions}
414}{}
415
416\ifthenelse{\boolean{completedraft}}{
417\newpage
418\section{\eslmodincmd{stretchexp}: Stretched exponential distributions}
419\input{esl_stretchexp}
420\subsection{Functions in the stretchexp module}
421\input{autotext/esl_stretchexp_functions}
422}{}
423
424\ifthenelse{\boolean{completedraft}}{
425\newpage
426\section{\eslmodincmd{weibull}: Weibull distributions}
427\input{esl_weibull}
428\subsection{Functions in the weibull module}
429\input{autotext/esl_weibull_functions}
430}{}
431
432\ifthenelse{\boolean{completedraft}}{
433\newpage
434%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
435\chapter{Utility modules}
436%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\chapter{Core modules}
437}{}
438
439\ifthenelse{\boolean{completedraft}}{
440\newpage
441\section{\eslmodincmd{buffer}: reading from any sort of input}
442\input{esl_buffer}
443\subsection{Functions in the buffer module}
444\input{autotext/esl_buffer_functions}
445}{}
446
447\ifthenelse{\boolean{completedraft}}{
448\newpage
449\section{\eslmodincmd{cluster}: single linkage clustering}
450\input{esl_cluster}
451\subsection{Functions in the cluster module}
452\input{autotext/esl_cluster_functions}
453}{}
454
455\ifthenelse{\boolean{completedraft}}{
456\newpage
457\section{\eslmodincmd{fileparser}: token-based data file input}
458\input{esl_fileparser}
459\subsection{Functions in the fileparser module}
460\input{autotext/esl_fileparser_functions}
461}{}
462
463\ifthenelse{\boolean{completedraft}}{
464\newpage
465\section{\eslmodincmd{getopts}: command line parsing}
466\input{esl_getopts}
467\subsection{Functions in the getopts module}
468\input{autotext/esl_getopts_functions}
469}{}
470
471\ifthenelse{\boolean{completedraft}}{
472\newpage
473\section{\eslmodincmd{keyhash}: associative hashes}
474\input{esl_keyhash}
475\subsection{Functions in the keyhash module}
476\input{autotext/esl_keyhash_functions}
477}{}
478
479\ifthenelse{\boolean{completedraft}}{
480\newpage
481\section{\eslmodincmd{random}: pseudorandom numbers and sampling}
482   \begin{quote}
483   \emph{Nec Babylonios temptaris numeros. \\
484   (Don't attempt the Babylonian numbers.)}\\
485   \hspace{3em} -- Horace, Ode 1.11. \\
486\end{quote}
487\input{esl_random}
488\subsection{Functions in the random (rnd) module}
489\input{autotext/esl_random_functions}
490\vspace*{\fill}
491}{}
492
493\ifthenelse{\boolean{completedraft}}{
494\newpage
495\section{\eslmodincmd{regexp}: regular expression matching}
496\input{esl_regexp}
497\subsection{Functions in the regexp module}
498\input{autotext/esl_regexp_functions}
499}{}
500
501\ifthenelse{\boolean{completedraft}}{
502\newpage
503\section{\eslmodincmd{stack}: pushdown stacks for integers, chars, and pointers}
504\input{esl_stack}
505\subsection{Functions in the stack module}
506\input{autotext/esl_stack_functions}
507}{}
508
509\ifthenelse{\boolean{completedraft}}{
510\newpage
511\section{\eslmodincmd{stopwatch}: timing parts of programs}
512\input{esl_stopwatch}
513\subsection{Functions in the stopwatch module}
514\input{autotext/esl_stopwatch_functions}
515}{}
516
517\ifthenelse{\boolean{completedraft}}{
518   \newpage
519%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
520   \chapter{Optional parallel computing support}
521%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
522}{}
523
524\ifthenelse{\boolean{completedraft}}{
525\newpage
526\section{\eslmodincmd{sse}: SIMD minivectors on Intel and AMD }
527\input{esl_sse}
528\subsection{Functions in the sse module}
529\input{autotext/esl_sse_functions}
530}{}
531
532\ifthenelse{\boolean{completedraft}}{
533\newpage
534\section{\eslmodincmd{mpi}: MPI parallelization}
535\input{esl_mpi}
536\subsection{Functions in the MPI module}
537\input{autotext/esl_mpi_functions}
538}{}
539
540
541\ifthenelse{\boolean{completedraft}}{
542\newpage
543%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
544   \chapter{File formats}
545%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
546}{}
547
548\ifthenelse{\boolean{completedraft}}{
549\section{Stockholm format for multiple sequence alignments}
550\input{format_stockholm.tex}
551}{}
552
553\ifthenelse{\boolean{completedraft}}{
554\section{A2M format for multiple sequence alignments}
555\input{format_a2m.tex}
556}{}
557
558\ifthenelse{\boolean{completedraft}}{
559\newpage
560\section{WUSS notation for RNA secondary structures}
561\input{format_wuss.tex}
562}{}
563
564\ifthenelse{\boolean{completedraft}}{
565\newpage
566\section{NCBI BLAST database foramt}
567\input{format_ncbi.tex}
568}{}
569
570\ifthenelse{\boolean{completedraft}}{
571\newpage
572%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
573   \chapter{Developer's guide}
574
575\begin{quote}
576   \emph{This is the great nightmare, when you're doing something long
577     and hard, is you're terrified that it will be perceived as
578     gratuitously hard and difficult, that it is some
579     avant-garde-for-its-own-sake kind of exercise.}\\
580   \hspace*{1em}\hfill -- David Foster Wallace, speaking of \emph{Infinite Jest}
581\end{quote}
582
583   \input{codestyle}
584%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
585}{}
586
587\ifthenelse{\boolean{completedraft}}{
588\newpage
589%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
590   \chapter{Installation instructions}
591   \input{installation}
592%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
593}{}
594
595\ifthenelse{\boolean{completedraft}}{
596\newpage
597%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
598   \chapter{Credits and acknowledgements}
599%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
600   \begin{quote}
601   \emph{There are every year works published whose contents show them to
602     be by real lunatics.}
603   \hspace*{1em}\hfill -- William James, \emph{The Principles of Psychology}
604   \end{quote}
605}{}
606
607\newpage
608%\newcommand{\bibfont}{\footnotesize}
609\bibliographystyle{abbrvnat}
610%\bibliography{master,lab,books,new}
611\bibliography{master,lab,books}
612
613\end{document}
614
615