ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/pymsxml/PyMsXML.html
Revision: 1.7
Committed: Tue Dec 5 22:25:26 2006 UTC (15 years, 8 months ago) by nje01
Branch: MAIN
Changes since 1.6: +7 -0 lines
Log Message:
*** empty log message ***

Line User Rev File contents
1 nje01 1.1 <html>
2    
3     <head>
4     <title>PyMsXML: Research: Nathan Edwards</title>
5     <link rel="stylesheet" type="text/css" href="../templates/global.css">
6     </head>
7    
8     <body bgcolor="#ffffff" marginwidth=0 marginheight=0 leftmargin=0 rightmargin=0 topmargin=0 bottommargin=0>
9    
10     <table border=0 cellspacing=0 cellpadding=0 bgcolor="#C62931" width="100%">
11     <tr>
12     <td rowspan=3 width="120"><a href="http://www.umd.edu"><img src="../images/informal1.gif" alt="University of Maryland" border=0 height=108 width=108></a></td>
13     <td height=50 valign="bottom" align="left"><a href=".."><font color="#ffffff" size=+2><u>Nathan Edwards</u></font></a></td>
14     </tr>
15     <tr>
16     <td height=1 valign="top" align="left"><a href="http://www.cbcb.umd.edu/"><font size=+0 color="#ffffff"><b>Center for Bioinformatics and Computational Biology</b></a></font></td>
17     </tr>
18     <tr valign="bottom">
19     <td align="left" colspan=3><table border=0 cellspacing=0 cellpadding=0 width="100%">
20     <tr>
21     <td align="right" class="tabs">
22    
23     <table border=0 cellspacing=0 cellpadding=0>
24     <tr>
25    
26     <td><img src="../images/tab_left_off.gif"></td><td background="../images/tab_background_off.gif" nowrap><a class="tabs" href="..">Home</a></td>
27     <td><img src="../images/tab_middle_right.gif"></td>
28     <td background="../images/tab_background_on.gif" nowrap><a class="tabs" href="../research">Research</a></td><td><img src="../images/tab_middle_left.gif"></td>
29     <td background="../images/tab_background_off.gif" nowrap><a class="tabs" href="../teaching">Teaching</a></td><td><img src="../images/tab_middle.gif"></td>
30     <td background="../images/tab_background_off.gif" nowrap><a class="tabs" href="../publications">Publications</a></td><td><img src="../images/tab_right_off.gif"></td> </tr>
31     </table>
32    
33     </td>
34     <td width=10><img src="../images/blank.gif" width=10 height=20></td>
35     </tr>
36     </table></td>
37     </tr>
38     </table>
39    
40     <table border=0 cellspacing=0 cellpadding=0 bgcolor="#FFC621" width="100%">
41     <tr>
42     <td><img src="../images/blank.gif" width=1 height=4></td>
43     </tr>
44     </table>
45    
46     <table border=0 cellspacing=0 cellpadding=0 bgcolor="#FFFFFF" width="100%">
47     <tr>
48     <td bgcolor="#FFC621" width=10><img src="../images/blank.gif" width=10 height=1></td>
49     <td bgcolor="#FFC621" width=100 valign="top" align="center">
50     <img src="../images/blank.gif" height=5 width=100><br>
51    
52     <table width="100" border=0 cellspacing=0 cellpadding=0>
53     <tr>
54     <td valign="top"><a class="navlinks" href="../research"><b>Research</b></a></td>
55     </tr>
56     <tr>
57     <td bgcolor="#000000"><img src="../images/blank.gif" width=1 height=1></td>
58     </tr>
59     <tr>
60     <td><img src="../images/blank.gif" width=1 height=2></td>
61     </tr>
62     <tr>
63     <td><img src="images/blank.gif" width=1 height=2></td>
64     </tr>
65     <tr>
66     <td><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td valign="top"><a class="navlinks" href="index.html#proteomics">Proteomics</a></td></tr></table></td>
67     </tr>
68     <tr>
69     <td><img src="images/blank.gif" width=1 height=2></td>
70     </tr>
71     <tr>
72     <td><img src="images/blank.gif" width=1 height=2></td>
73     </tr>
74     <tr>
75     <td><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td valign="top"><a class="navlinks" href="index.html#tools">Tools</a></td></tr></table></td>
76     </tr>
77     <tr>
78     <td><img src="images/blank.gif" width=1 height=2></td>
79     </tr>
80     <tr>
81     <td><img src="images/blank.gif" width=1 height=2></td>
82     </tr>
83     <tr>
84     <td><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td valign="top"><a class="navlinks" href="index.html#data">Data</a></td></tr></table></td>
85     </tr>
86     <tr>
87     <td><img src="images/blank.gif" width=1 height=2></td>
88     </tr>
89     <tr>
90     <td><img src="images/blank.gif" width=1 height=2></td>
91     </tr>
92     <tr>
93     <td><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td valign="top"><a class="navlinks" href="index.html#statements">Research Statements</a></td></tr></table></td>
94     </tr>
95     <tr>
96     <td><img src="images/blank.gif" width=1 height=2></td>
97     </tr>
98    
99     <!--
100     <tr>
101     <td><img src="../images/blank.gif" width=1 height=10></td>
102     </tr>
103     <tr>
104     <td valign="top"><a class="navlinks" href="/help/search/">Search</a></td>
105     </tr>
106     <tr>
107     <td valign="top">
108     -- Search Google --
109     <FORM method=GET action=http://www.google.com/u/serine>
110     <INPUT TYPE=text name=q size=14 maxlength=255 value="" class="leftbar" style="width: 100px">
111     <INPUT type=hidden name=sa VALUE="Google Search">
112     <input type=hidden name=domains value="serine.umiacs.umd.edu">
113     <input type=hidden name=sitesearch value="serine.umiacs.umd.edu">
114     </FORM>
115     -- Search Google --
116     </td>
117     </tr>
118     -->
119     </table>
120    
121    
122     </td>
123     <td bgcolor="#FFC621" width=10><img src="../images/blank.gif" width=10 height=1></td>
124     <td bgcolor="#FFFFFF" width=10 valign="top" background="../images/left_shadow.gif"><table border=0 cellspacing=0 cellpadding=0 background="../images/left_shadow.gif" width="10">
125     <tr>
126     <td valign="top"><img src="../images/corner_corner.gif" width=10 height=10><br><img src="../images/corner_bottom.gif" width=10 height=13><br><img src="../images/left_shadow.gif" width=10 height=400></td>
127     </tr>
128     </table></td>
129     <td valign="top"><table border=0 cellspacing=0 cellpadding=0 width="100%">
130     <tr>
131     <td bgcolor="#FFFFFF" valign="top" colspan=2><table border=0 cellspacing=0 cellpadding=0 background="../images/top_shadow.gif" width="100%">
132     <tr>
133     <td align="left"><img src="../images/corner_right.gif" width=10 height=10></td>
134     </tr>
135     </table></td>
136     </tr>
137     <tr>
138     <td bgcolor="#FFFFFF" valign="top">
139    
140     <div align="right" class="breadcrumbs">
141    
142     <a class="breadcrumbs" href="..">Home</a> &raquo; <a class="breadcrumbs" href="../research">Research</a> &raquo; <a class="breadcrumbs" href="../research/PyMsXML.html">PyMsXML</a>
143     </div>
144    
145     <table border=0 cellspacing=0 cellpadding=0 align="left">
146     <tr>
147     <td><font size=5>PyMsXML</font></td>
148     </tr>
149     <tr>
150     <td bgcolor="#C62931"><img src="../images/blank.gif" height=1 width=1></td>
151     </tr>
152     <tr>
153     <td><img src="../images/blank.gif" height=10 width=1></td>
154     </tr>
155     </table>
156    
157     <br clear=all>
158    
159     <!-- CONTENT STARTS HERE -->
160    
161     <h3>Introduction</h3>
162     <P>
163     <b>PyMsXML</b> is a python script for converting vendor specific mass
164     spectrometry data files for Applied Biosystems' Q-Star, 4700, Mariner,
165     and Voyager mass spectrometers from their raw binary form, to either
166     of the emerging XML file formats for mass spectra: mzXML, from the
167     Sashimi Glossolalia project of the Institute for Systems Biology (ISB);
168     and mzData, from the Proteome Standardization Initiative (PSI) project
169     of the Human Proteome Organization (HUPO).
170     <P>
171     <b>PyMsXML</b> uses installed vendor software under Windows to access the
172     proprietary raw mass spectra file format, interfacing to the vendor
173     supplied libraries via the supplied COM interface. Unlike other
174     software solutions that use this approach, <b>PyMsXML</b> is written in a
175     free, open-source language called Python. As such, no installation of
176     Microsoft Visual C++ or Visual Basic is necessary to use, alter, or
177     improve the <b>PyMsXML</b> script.
178     <P>
179     <b>PyMsXML</b> is easily extended for new instruments and vendor software,
180     and for new, or changed, XML file formats. The code that interfaces to
181     the vendor software is decomposed from the code that formats the data
182     as XML, as such, the addition of new instrument capability need not
183     re-write the XML data format code. Similarly, as new XML file formats
184     emerge, the code that interfaces with the instrument software need not
185     change.
186     <P>
187 nje01 1.6 <b>PyMsXML</b> is hosted at <a href="http://bioinformatics.org/project/?group_id=701">bioinformatics.org</a>.
188     <P>
189 nje01 1.5 <quote>
190     <b>NOTE!</b>
191     <P>
192     The vendor software (Analyst for .wiff
193     files, Data Explorer for .t2d files) be installed on the same computer
194     as <b>PyMsXML</b>. These binary formats cannot be read without the
195     vendor support libraries.
196     </quote>
197     <P>
198 nje01 1.1 <h3>Installation</h3>
199     <P>
200     <ol>
201     <li> Download and install the latest version of <A href="http://www.activestate.com/Products/ActivePython/">ActiveState ActivePython</A> for Windows.
202     <P>
203     <li> Start the Pythonwin IDE (All Programs -> ActiveState ActivePython
204     2.4 -> Pythonwin IDE). From the Tools menu, select the "COM Makepy
205     utility" entry. In the popup window, select "ExploreDataObjects 1.0
206     Type Library (1.0)" to build a python interface to Analyst's COM
207     libraries for reading .wiff files, select "IDAExplorer 1.0 Type
208     Library (1.0)" to build a python interface to Data Explorer's COM
209     libraries for reading ".dat" and ".t2d" files. If you have both pieces
210     of software, repeat this step for each software package. Click OK.
211     <P>
212 nje01 1.2 <li> Check the installation of COM library interfaces. If any of these
213     tests are unsuccessful, then <b>PyMsXML</b> will be unable to read the
214     corresponding raw datafiles.
215 nje01 1.1 <P>
216 nje01 1.2 For Analyst, these commands at the Pythonwin IDE command-line
217     (copy-and-paste!) should elicit similar responses:<br>
218 nje01 1.1 <code>
219     >>> from win32com.client import Dispatch<br>
220     >>> Dispatch('Analyst.FMANSpecData')<br>
221     &lt;win32com.gen_py.ExploreDataObjects 1.0 Type Library.IFMANSpecData instance at 0x14421558> <br>
222     >>> Dispatch('Analyst.FMANChromData')<br>
223     &lt;win32com.gen_py.ExploreDataObjects 1.0 Type Library.IFMANChromData instance at 0x14418408>
224     </code>
225     <P>
226     For Data Explorer, these commands at the Pythonwin IDE command-line (copy-and-paste!) should elicit similar responses:<br>
227     <code>
228     >>> from win32com.client import Dispatch, gencache<br>
229     >>> Dispatch('DataExplorer.Application',resultCLSID='{3FED40F1-D409-11D1-8B56-0060971CB54B}')<br>
230     &lt;COMObject DataExplorer.Application><br>
231     >>> gencache.EnsureModule('{06972F50-13F6-11D3-A5CB-0060971CB54B}',0,4,2)<br>
232     &lt;module 'win32com.gen_py.06972F50-13F6-11D3-A5CB-0060971CB54Bx0x4x2' from 'C:\Python24\lib\site-packages\win32com\gen_py \06972F50-13F6-11D3-A5CB-0060971CB54Bx0x4x2.py'>
233     </code>
234     <P>
235     <li> Download and unpack the <b>PyMsXML</b> scripts and examples. <A
236 nje01 1.6 href="http://bioinformatics.org/project/filelist.php?group_id=701">Download
237 nje01 1.1 <b>PyMsXML</b></A>. After unzipping <b>PyMsXML</b>, edit the file pymsxml.cmd to
238     point to your Python installation (usually C:\Python24\python.exe)
239     and your <b>PyMsXML</b> installation.
240     </ol>
241     <P>
242     <h3>Usage</h3>
243     <P>
244     <b>PyMsXML</b> consists of a single python script. A windows cmd file wrapper is provided, to take care of calling the python interpretor appropriately.
245     <dl>
246     <dt><b>pymsxml</b> [ options ] <i>raw-spectra-data-file</i></dt>
247     <P>
248     <dt>
249     Options:<P>
250     </dt>
251     <dd>
252     <dl>
253     <dt>-R <i>raw-format</i>, --rawdata <i>raw-format</i></dt>
254 nje01 1.2 <dd>Valid <i>raw-format</i> values: <tt>wiff</tt>, <tt>qstar</tt>, <tt>t2d</tt>, <tt>ab4700</tt>, <tt>voyager</tt>, <tt>mariner</tt>, <tt>mzXML</tt>. Optional if <i>raw-spectra-data-file</i> ends in <tt>.wiff</tt>, <tt>.t2m</tt>, or <tt>.mzXML</tt>.
255 nje01 1.1 <P>
256     <dt>-X <i>xml-format</i>, --xmlformat <i>xml-format</i></dt>
257     <dd>Valid <i>xml-format</i> values: <tt>mzXML</tt> (ISB), <tt>mzData</tt> (HUPO). Optional if <i>output-file</i> ends in <tt>.mzXML</tt> or <tt>.mzData</TT>.
258     <P>
259     <dt>-o <i>output-file</i>, --output <i>output-file</i></dt>
260     <dd>Name of output file. If omitted, and <i>xml-format</i> is supplied, then the output file is inferred by changing the file extention of <i>raw-spectra-data-file</i> to <i>xml-format</i>.
261     <P>
262     <dt>-p <i>ms-levels</i>, --peaks <i>ms-levels</i></dt>
263     <dd> Apply (vendor library) peak detetion to spectra with level in <i>ms-levels</i> (comma separated). QStar (MS/MS spectra only) raw format, 4700 raw format only. Default: 2.
264     <P>
265 nje01 1.2 <dt>-f <i>filter-spec</i>, --filter <i>filter-spec</i></dt> <dd>
266     Filter output scans by their meta-data. Filters are specified as a
267     comma-separated list of filter tokens. Each filter token is specified
268     as <i>field</i>.<i>comparison</i>.<i>value</i>. <i>field</i> must be
269     an attribute of the scan object. <i>comparison</i> must be one of
270     <tt>eq</tt>, <tt>ne</tt>, <tt>lt</tt>, <tt>le</tt>, <tt>gt</tt>, or
271     <tt>ge</tt>, specifying =, &ne;, &lt;, &le;, &gt;, and &ge;
272     respectively.
273 nje01 1.1 <P>
274 nje01 1.7 <dt>-V <i>version</i>, --version <i>version</i></dt><dd>
275     XML version. mzXML only. Valid options
276     <tt>2.1</tt>,<tt>2.2</tt>,<tt>3.0</tt>. Default: <tt>3.0</tt>.
277     <P>
278     <dt>-z, --compress_peaks</dt>
279     <dd>Compress mzXML peak data using zlib. Default: No compression of peak data. Requires mzXML version 3.0.</dd>
280     <P>
281 nje01 1.1 <dt>-Z <i>compress-format</i>, --compress <i>compress-format</i></dt>
282 nje01 1.5 <dd> Compress output file. Valid options: <tt>gz</tt>. Default: None, unless output file ends with <tt>.gz</tt>, then <tt>gz</tt>.
283 nje01 1.1 <P>
284     <dt>-d, --debug</dt>
285     <dd>Debug. Output XML for first 10 spectra only. Truncate spectral data, too. Useful to verify that the output is formatted correctly.</dd>
286     <P>
287     <dt>-h, --help</dt>
288     <dd>Help.</dd>
289     </dl>
290     </dd>
291     </dl>
292     <P>
293     <h3>Applied Biosystems Q-Star Spectra</h3>
294     <P>
295     The raw spectra data files for the ESI spectra from Applied
296 nje01 1.2 Biosystems' Q-Star instruments are usually extracted as ".wiff"
297     files. These can be opened using Applied Biosystem's Analyst or
298     BioAnalyst programs. <b>PyMsXML</b> uses Analyst's support libraries
299     to extract mass spectra from these files.
300 nje01 1.1 <P>
301     <P>
302     <h3>Applied Biosystems Mariner, Voyager, 4700 Spectra</h3>
303     <P>
304     The raw spectra data files for the MALDI spectra from Applied
305     Biosystems' Mariner, Voyager and 4700 instruments are usually
306     extracted as ".t2d" or ".dat" files. These can be opened using Applied
307     Biosystem's Data Explorer program. <b>PyMsXML</b> uses Data Explorer's
308 nje01 1.2 support libraries to extract mass spectra from these
309 nje01 1.1 files. These file formats store very little meta-data in addition to
310     the mass spectrum. As such, additional information must be supplied in
311     a meta-data text file, which is supplied on the command-line as <i>raw-spectra-data-file</i>.
312     <P>
313     The meta-data file is most easily constructed in Excel and saved as
314     tab-separated-values, but it can be formed by hand too, if
315     desired. Each line of the meta-data file specifies a record,
316     describing the MALDI plate, the plates' spots, and the scans acquired
317     from these spots. A short-cut record, that defines the plate and spot
318     naming convention is also provided.
319     <P>
320     The plate definition record consists of the word <tt>PLATE</tt> (case
321     insensitive) in the first column, followed by alternating key-value
322     pairs in subsequent columns. Particular key-value pairs do not need to
323     be specified in any particular order. The following keys must be
324     provided:
325     <tt>plateID</tt>, <tt>spotXCount</tt>, <tt>spotYCount</tt>,
326     <tt>plateManufacturer</tt>, and <tt>plateModel</tt>. The
327     <tt>plateID</tt> value is referenced by the spot and scan definition
328     records. The <tt>spotXCount</tt> is the number of MALDI spots in
329     the horizontal dimension (integer). The <tt>spotYCount</tt> is
330     the number of MALDI spots in the vertical dimension (integer). The
331     <tt>plateManufacturer</tt> and <tt>plateModel</tt> values are inserted verbatim in the output XML.
332     <P>
333     The spot definition record consists of the word <tt>SPOT</tt> (case
334     insensitive) in the first column, followed by alternating key-value
335     pairs in subsequent columns. Particular key-value pairs do not need to
336     be specified in any particular order. The following keys must be
337     provided:
338     <tt>plateID</tt>, <tt>spotID</tt>, <tt>spotXPosition</tt>,
339     <tt>spotYPosition</tt>, and <tt>maldiMatrix</tt>. The
340     <tt>plateID</tt> value must be defined by some plate definition
341     record. The <tt>spotID</tt> is referenced by the scan definition
342     records. The <tt>spotXPosition</tt> is the horizontal position of the
343     spot on the plate (integer). The <tt>spotYPosition</tt> is the
344     vertical position of the spot on the plate (integer). Spot positions
345     can be numbered beginning at 0 or 1. The
346     <tt>maldiMatrix</tt> value is inserted verbatim in the output XML.
347     <P>
348     The scan definition record consists of the word <tt>SCAN</tt> (case
349     insensitive) in the first column, followed by alternating key-value
350     pairs in subsequent columns. Particular key-value pairs do not need to
351     be specified in any particular order. The following keys must be
352     provided:
353     <tt>plateID</tt>, <tt>spotID</tt>, <tt>filename</tt>, and <tt>index</tt>.
354     The
355     <tt>plateID</tt> must be defined by some plate definition record. The
356     <tt>spotID</tt> must be defined by some spot definition record. The
357     <tt>filename</tt> is the name of the ".dat" or ".t2d" file containing
358     the corresponding scan's spectrum. The <tt>index</tt> is the ordinal
359     of the corresponding spectrum in the provided file. Spectra within
360     files should be referenced beginning at 1.
361     <P>
362     To alleviate some of the tedium with specifying the spot definition records, a shortcut plate definition record is provided. The platedef definition record consists of the word <tt>PLATEDEF</tt> (case insensitive) in the first column, followed by alternating key-value
363     pairs in subsequent columns. Particular key-value pairs do not need to
364     be specified in any particular order. The following keys must be
365     provided:
366     <tt>plateID</tt>, <tt>plateManufacturer</tt>, <tt>plateModel</tt>, <tt>spotNaming</tt>, and <tt>maldiMatrix</tt>.
367     The
368     <tt>plateID</tt> value is referenced by the spot and scan definition
369     records. The <tt>plateManufacturer</tt> and <tt>plateModel</tt> are
370     used to identify the properties of the MALDI plate. Currently, only
371     the values <tt>ABI / SCIEX</tt> and <tt>01-192+06-BB</tt> are
372     recognized, but others are easily added on request. The "ABI / SCIEX
373     01-192+06-BB" plate consists of 8 rows of 24 spots (plus 6 calibration
374     spots). The <tt>spotNaming</tt> must be one of <tt>alpha</tt>,
375     <tt>parallel</tt>, or <tt>antiparallel</tt>. At this time, only
376     <tt>alpha</tt> is implemented. The <tt>alpha</tt> spot attribute
377     constructs <tt>spotID</tt> values for all spots on the plate with the
378     row specified by a letter from A to H, and the column specified by a
379     number from 1 to 24. The
380     <tt>maldiMatrix</tt> value is assumed the same for each spot and is
381     inserted verbatim in the output XML.
382     <P>
383     <b>NOTE:</b> The order of scan definition lines is important! MS/MS
384     spectra must appear immediately after the MS spectrum containing their
385     precursors.
386     <P>
387     Example meta-data files are provided in the distribution. <tt>example1.t2m</tt> explicitly defines the MALDI plate, spots and scans. <tt>example2.t2m</tt> is equivalent, but uses the platedef keyword shortcut.
388     <P>
389     <h3>Examples</h3>
390     <P>
391     Convert the Q-Star <tt>example.wiff</tt> file to mzXML format, placing the output in the file <tt>qstar-example.xml</tt>.<P>
392     <code>
393     C:\PyMsXML\example\wiff> pymsxml.cmd -R wiff -X mzXML -o qstar-example.xml example.wiff<br>
394     </code>
395     <P>
396     Convert the Q-Star <tt>example.wiff</tt> file to mzData format, placing the output in the file <tt>example.mzData</tt>.<P>
397     <code>
398     C:\PyMsXML\example\wiff> pymsxml.cmd -X mzData example.wiff<br>
399     </code>
400     <P>
401     Convert the AB4700 spectra listed in <tt>example1.t2m</tt> and <tt>example2.t2m</tt> to mzXML format, placing the output in the files <tt>example1.mzXML</tt> and <tt>example2.mzXML</tt>.<P>
402     <code>
403     C:\PyMsXML\example\t2d> pymsxml.cmd -X mzXML example*.t2m<br>
404     </code>
405     <P>
406     <h3>Release Notes</h3>
407     <P>
408     The Analyst COM libraries seem to have trouble with long pathnames. If you consistently have trouble getting PyMsXML to read ".wiff" files, try moving the files to a shorter directory path.
409     <P>
410     <h3>Credits</h3>
411     <P>
412     Development of <b>PyMsXML</b> was significantly helped by the
413     open-source Visual Basic source code from the MzStar program of the
414     ISB glossolalia project.
415     <P>
416     <!-- CONTENT ENDS HERE -->
417     </td>
418     </tr>
419     </table></td>
420     <td bgcolor="#FFFFFF" width=10 valign="top"><img src="../images/top_shadow.gif" width=10 height=10></td>
421     </tr>
422     <tr>
423     <td bgcolor="#FFC621" width=120 colspan=3><img src="../images/blank.gif" width=10 height=1></td>
424     <td bgcolor="#FFFFFF" width=10 valign="top" background="../images/left_shadow.gif"><table border=0 cellspacing=0 cellpadding=0 background="../images/left_shadow.gif" width="10">
425     <tr>
426     <td valign="top"<img src="../images/left_shadow.gif" width=10 height=50></td>
427     </tr>
428     </table></td>
429     <td bgcolor="#FFFFFF" align="center">
430    
431     <font color="#ffffff">
432     .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
433     .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
434     .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
435     <p>
436    
437     <table border=0 cellspacing=0 cellpadding=0>
438     <tr>
439     <td><img src="../images/blank.gif" width=25 height=1></td>
440     <td nowrap><div class="navlinks">
441     <a class="breadcrumbs" href="..">Home</a>&nbsp;|&nbsp;<a class="breadcrumbs" href="../research"><b>Research</b></a>&nbsp;|&nbsp;<a class="breadcrumbs" href="../teaching">Teaching</a>&nbsp;|&nbsp;<a class="breadcrumbs" href="../publications">Publications</a> </div></td>
442     <td><img src="../images/blank.gif" width=25 height=1></td>
443     </tr>
444     <tr>
445     <td bgcolor="#000000"><img src="../images/blank.gif" width=25 height=1></td>
446     <td bgcolor="#000000"><img src="../images/blank.gif" width=1 height=1></td>
447     <td bgcolor="#000000"><img src="../images/blank.gif" width=25 height=1></td>
448     </tr>
449     </table>
450    
451     <p>
452    
453     <!-- UNIVERSITY OF MARYLAND FOOTER BEGINS HERE -->
454    
455     <table border=0 cellpadding=1 cellspacing=0 align="center">
456     <tr>
457     <td valign="middle"><a href="http://www.umd.edu/"><img src="../images/maryland_small.gif" width=185 height=32 alt="University of Maryland" border=0></a></td>
458     <td>&nbsp; &nbsp;</td>
459     <td valign=middle nowrap><font face="Arial, Helvetica" size="-2">
460     <a href="http://www.umd.edu/">UM Home</a> | <a href="http://www.umd.edu/whoswho.html">Directories</a> | <a href="http://www.search.umd.edu/">Search</a> | <a href="http://www.umd.edu/prospective/">Admissions</a> | <a href="http://www.umd.edu/calendar/today/">Calendar</a><br>
461     Original created by <a href="mailto:jfuetsch@umiacs.umd.edu">John Fuetsch</a><br>
462     Questions and comments to <a href="mailto:nedwards@umiacs.umd.edu">Nathan Edwards</a>
463     </font></td>
464     </tr>
465     </table>
466    
467     <!-- END FOOTER HERE -->
468    
469    
470     </td>
471     <td bgcolor="#FFFFFF" width=10><img src="../images/blank.gif" width=10 height=1></td>
472     </tr>
473     <tr>
474     <td colspan=4 background="../images/top_shadow.gif" align="right"><img src="../images/top_shadow.gif" width=110 height=10><img src="../images/corner_sharp.gif" width=10 height=10></td>
475     </tr>
476     </table>
477    
478     </body>
479    
480     </html>