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> » <a class="breadcrumbs" href="../research">Research</a> » <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 |
<h3>Installation</h3> |
188 |
<P> |
189 |
<ol> |
190 |
<li> Download and install the latest version of <A href="http://www.activestate.com/Products/ActivePython/">ActiveState ActivePython</A> for Windows. |
191 |
<P> |
192 |
<li> Start the Pythonwin IDE (All Programs -> ActiveState ActivePython |
193 |
2.4 -> Pythonwin IDE). From the Tools menu, select the "COM Makepy |
194 |
utility" entry. In the popup window, select "ExploreDataObjects 1.0 |
195 |
Type Library (1.0)" to build a python interface to Analyst's COM |
196 |
libraries for reading .wiff files, select "IDAExplorer 1.0 Type |
197 |
Library (1.0)" to build a python interface to Data Explorer's COM |
198 |
libraries for reading ".dat" and ".t2d" files. If you have both pieces |
199 |
of software, repeat this step for each software package. Click OK. |
200 |
<P> |
201 |
<li> Check the installation of COM library interfaces. If any of these |
202 |
tests are unsuccessful, then <b>PyMsXML</b> will be unable to read the |
203 |
corresponding raw datafiles. |
204 |
<P> |
205 |
For Analyst, these commands at the Pythonwin IDE command-line |
206 |
(copy-and-paste!) should elicit similar responses:<br> |
207 |
<code> |
208 |
>>> from win32com.client import Dispatch<br> |
209 |
>>> Dispatch('Analyst.FMANSpecData')<br> |
210 |
<win32com.gen_py.ExploreDataObjects 1.0 Type Library.IFMANSpecData instance at 0x14421558> <br> |
211 |
>>> Dispatch('Analyst.FMANChromData')<br> |
212 |
<win32com.gen_py.ExploreDataObjects 1.0 Type Library.IFMANChromData instance at 0x14418408> |
213 |
</code> |
214 |
<P> |
215 |
For Data Explorer, these commands at the Pythonwin IDE command-line (copy-and-paste!) should elicit similar responses:<br> |
216 |
<code> |
217 |
>>> from win32com.client import Dispatch, gencache<br> |
218 |
>>> Dispatch('DataExplorer.Application',resultCLSID='{3FED40F1-D409-11D1-8B56-0060971CB54B}')<br> |
219 |
<COMObject DataExplorer.Application><br> |
220 |
>>> gencache.EnsureModule('{06972F50-13F6-11D3-A5CB-0060971CB54B}',0,4,2)<br> |
221 |
<module 'win32com.gen_py.06972F50-13F6-11D3-A5CB-0060971CB54Bx0x4x2' from 'C:\Python24\lib\site-packages\win32com\gen_py \06972F50-13F6-11D3-A5CB-0060971CB54Bx0x4x2.py'> |
222 |
</code> |
223 |
<P> |
224 |
<li> Download and unpack the <b>PyMsXML</b> scripts and examples. <A |
225 |
href="http://bioinformatics.org/project/filelist.php?group_id=701">Download |
226 |
<b>PyMsXML</b></A>. After unzipping <b>PyMsXML</b>, edit the file pymsxml.cmd to |
227 |
point to your Python installation (usually C:\Python24\python.exe) |
228 |
and your <b>PyMsXML</b> installation. |
229 |
</ol> |
230 |
<P> |
231 |
<h3>Usage</h3> |
232 |
<P> |
233 |
<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. |
234 |
<dl> |
235 |
<dt><b>pymsxml</b> [ options ] <i>raw-spectra-data-file</i></dt> |
236 |
<P> |
237 |
<dt> |
238 |
Options:<P> |
239 |
</dt> |
240 |
<dd> |
241 |
<dl> |
242 |
<dt>-R <i>raw-format</i>, --rawdata <i>raw-format</i></dt> |
243 |
<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>. |
244 |
<P> |
245 |
<dt>-X <i>xml-format</i>, --xmlformat <i>xml-format</i></dt> |
246 |
<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>. |
247 |
<P> |
248 |
<dt>-o <i>output-file</i>, --output <i>output-file</i></dt> |
249 |
<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>. |
250 |
<P> |
251 |
<dt>-p <i>ms-levels</i>, --peaks <i>ms-levels</i></dt> |
252 |
<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. |
253 |
<P> |
254 |
<dt>-f <i>filter-spec</i>, --filter <i>filter-spec</i></dt> <dd> |
255 |
Filter output scans by their meta-data. Filters are specified as a |
256 |
comma-separated list of filter tokens. Each filter token is specified |
257 |
as <i>field</i>.<i>comparison</i>.<i>value</i>. <i>field</i> must be |
258 |
an attribute of the scan object. <i>comparison</i> must be one of |
259 |
<tt>eq</tt>, <tt>ne</tt>, <tt>lt</tt>, <tt>le</tt>, <tt>gt</tt>, or |
260 |
<tt>ge</tt>, specifying =, ≠, <, ≤, >, and ≥ |
261 |
respectively. |
262 |
<P> |
263 |
<dt>-Z <i>compress-format</i>, --compress <i>compress-format</i></dt> |
264 |
<dd> Compress output file. Valid options: <tt>gz</tt>. Default: None, unless output file ends with <tt>.gz</tt>, then <tt>gz</tt>. |
265 |
<P> |
266 |
<dt>-d, --debug</dt> |
267 |
<dd>Debug. Output XML for first 10 spectra only. Truncate spectral data, too. Useful to verify that the output is formatted correctly.</dd> |
268 |
<P> |
269 |
<dt>-h, --help</dt> |
270 |
<dd>Help.</dd> |
271 |
</dl> |
272 |
</dd> |
273 |
</dl> |
274 |
<P> |
275 |
<h3>Applied Biosystems Q-Star Spectra</h3> |
276 |
<P> |
277 |
The raw spectra data files for the ESI spectra from Applied |
278 |
Biosystems' Q-Star instruments are usually extracted as ".wiff" |
279 |
files. These can be opened using Applied Biosystem's Analyst or |
280 |
BioAnalyst programs. <b>PyMsXML</b> uses Analyst's support libraries |
281 |
to extract mass spectra from these files. |
282 |
<P> |
283 |
<P> |
284 |
<h3>Applied Biosystems Mariner, Voyager, 4700 Spectra</h3> |
285 |
<P> |
286 |
The raw spectra data files for the MALDI spectra from Applied |
287 |
Biosystems' Mariner, Voyager and 4700 instruments are usually |
288 |
extracted as ".t2d" or ".dat" files. These can be opened using Applied |
289 |
Biosystem's Data Explorer program. <b>PyMsXML</b> uses Data Explorer's |
290 |
support libraries to extract mass spectra from these |
291 |
files. These file formats store very little meta-data in addition to |
292 |
the mass spectrum. As such, additional information must be supplied in |
293 |
a meta-data text file, which is supplied on the command-line as <i>raw-spectra-data-file</i>. |
294 |
<P> |
295 |
The meta-data file is most easily constructed in Excel and saved as |
296 |
tab-separated-values, but it can be formed by hand too, if |
297 |
desired. Each line of the meta-data file specifies a record, |
298 |
describing the MALDI plate, the plates' spots, and the scans acquired |
299 |
from these spots. A short-cut record, that defines the plate and spot |
300 |
naming convention is also provided. |
301 |
<P> |
302 |
The plate definition record consists of the word <tt>PLATE</tt> (case |
303 |
insensitive) in the first column, followed by alternating key-value |
304 |
pairs in subsequent columns. Particular key-value pairs do not need to |
305 |
be specified in any particular order. The following keys must be |
306 |
provided: |
307 |
<tt>plateID</tt>, <tt>spotXCount</tt>, <tt>spotYCount</tt>, |
308 |
<tt>plateManufacturer</tt>, and <tt>plateModel</tt>. The |
309 |
<tt>plateID</tt> value is referenced by the spot and scan definition |
310 |
records. The <tt>spotXCount</tt> is the number of MALDI spots in |
311 |
the horizontal dimension (integer). The <tt>spotYCount</tt> is |
312 |
the number of MALDI spots in the vertical dimension (integer). The |
313 |
<tt>plateManufacturer</tt> and <tt>plateModel</tt> values are inserted verbatim in the output XML. |
314 |
<P> |
315 |
The spot definition record consists of the word <tt>SPOT</tt> (case |
316 |
insensitive) in the first column, followed by alternating key-value |
317 |
pairs in subsequent columns. Particular key-value pairs do not need to |
318 |
be specified in any particular order. The following keys must be |
319 |
provided: |
320 |
<tt>plateID</tt>, <tt>spotID</tt>, <tt>spotXPosition</tt>, |
321 |
<tt>spotYPosition</tt>, and <tt>maldiMatrix</tt>. The |
322 |
<tt>plateID</tt> value must be defined by some plate definition |
323 |
record. The <tt>spotID</tt> is referenced by the scan definition |
324 |
records. The <tt>spotXPosition</tt> is the horizontal position of the |
325 |
spot on the plate (integer). The <tt>spotYPosition</tt> is the |
326 |
vertical position of the spot on the plate (integer). Spot positions |
327 |
can be numbered beginning at 0 or 1. The |
328 |
<tt>maldiMatrix</tt> value is inserted verbatim in the output XML. |
329 |
<P> |
330 |
The scan definition record consists of the word <tt>SCAN</tt> (case |
331 |
insensitive) in the first column, followed by alternating key-value |
332 |
pairs in subsequent columns. Particular key-value pairs do not need to |
333 |
be specified in any particular order. The following keys must be |
334 |
provided: |
335 |
<tt>plateID</tt>, <tt>spotID</tt>, <tt>filename</tt>, and <tt>index</tt>. |
336 |
The |
337 |
<tt>plateID</tt> must be defined by some plate definition record. The |
338 |
<tt>spotID</tt> must be defined by some spot definition record. The |
339 |
<tt>filename</tt> is the name of the ".dat" or ".t2d" file containing |
340 |
the corresponding scan's spectrum. The <tt>index</tt> is the ordinal |
341 |
of the corresponding spectrum in the provided file. Spectra within |
342 |
files should be referenced beginning at 1. |
343 |
<P> |
344 |
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 |
345 |
pairs in subsequent columns. Particular key-value pairs do not need to |
346 |
be specified in any particular order. The following keys must be |
347 |
provided: |
348 |
<tt>plateID</tt>, <tt>plateManufacturer</tt>, <tt>plateModel</tt>, <tt>spotNaming</tt>, and <tt>maldiMatrix</tt>. |
349 |
The |
350 |
<tt>plateID</tt> value is referenced by the spot and scan definition |
351 |
records. The <tt>plateManufacturer</tt> and <tt>plateModel</tt> are |
352 |
used to identify the properties of the MALDI plate. Currently, only |
353 |
the values <tt>ABI / SCIEX</tt> and <tt>01-192+06-BB</tt> are |
354 |
recognized, but others are easily added on request. The "ABI / SCIEX |
355 |
01-192+06-BB" plate consists of 8 rows of 24 spots (plus 6 calibration |
356 |
spots). The <tt>spotNaming</tt> must be one of <tt>alpha</tt>, |
357 |
<tt>parallel</tt>, or <tt>antiparallel</tt>. At this time, only |
358 |
<tt>alpha</tt> is implemented. The <tt>alpha</tt> spot attribute |
359 |
constructs <tt>spotID</tt> values for all spots on the plate with the |
360 |
row specified by a letter from A to H, and the column specified by a |
361 |
number from 1 to 24. The |
362 |
<tt>maldiMatrix</tt> value is assumed the same for each spot and is |
363 |
inserted verbatim in the output XML. |
364 |
<P> |
365 |
<b>NOTE:</b> The order of scan definition lines is important! MS/MS |
366 |
spectra must appear immediately after the MS spectrum containing their |
367 |
precursors. |
368 |
<P> |
369 |
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. |
370 |
<P> |
371 |
<h3>Examples</h3> |
372 |
<P> |
373 |
Convert the Q-Star <tt>example.wiff</tt> file to mzXML format, placing the output in the file <tt>qstar-example.xml</tt>.<P> |
374 |
<code> |
375 |
C:\PyMsXML\example\wiff> pymsxml.cmd -R wiff -X mzXML -o qstar-example.xml example.wiff<br> |
376 |
</code> |
377 |
<P> |
378 |
Convert the Q-Star <tt>example.wiff</tt> file to mzData format, placing the output in the file <tt>example.mzData</tt>.<P> |
379 |
<code> |
380 |
C:\PyMsXML\example\wiff> pymsxml.cmd -X mzData example.wiff<br> |
381 |
</code> |
382 |
<P> |
383 |
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> |
384 |
<code> |
385 |
C:\PyMsXML\example\t2d> pymsxml.cmd -X mzXML example*.t2m<br> |
386 |
</code> |
387 |
<P> |
388 |
<h3>Release Notes</h3> |
389 |
<P> |
390 |
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. |
391 |
<P> |
392 |
<h3>Credits</h3> |
393 |
<P> |
394 |
Development of <b>PyMsXML</b> was significantly helped by the |
395 |
open-source Visual Basic source code from the MzStar program of the |
396 |
ISB glossolalia project. |
397 |
<P> |
398 |
<!-- CONTENT ENDS HERE --> |
399 |
</td> |
400 |
</tr> |
401 |
</table></td> |
402 |
<td bgcolor="#FFFFFF" width=10 valign="top"><img src="../images/top_shadow.gif" width=10 height=10></td> |
403 |
</tr> |
404 |
<tr> |
405 |
<td bgcolor="#FFC621" width=120 colspan=3><img src="../images/blank.gif" width=10 height=1></td> |
406 |
<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"> |
407 |
<tr> |
408 |
<td valign="top"<img src="../images/left_shadow.gif" width=10 height=50></td> |
409 |
</tr> |
410 |
</table></td> |
411 |
<td bgcolor="#FFFFFF" align="center"> |
412 |
|
413 |
<font color="#ffffff"> |
414 |
.......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... |
415 |
.......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... |
416 |
.......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... |
417 |
<p> |
418 |
|
419 |
<table border=0 cellspacing=0 cellpadding=0> |
420 |
<tr> |
421 |
<td><img src="../images/blank.gif" width=25 height=1></td> |
422 |
<td nowrap><div class="navlinks"> |
423 |
<a class="breadcrumbs" href="..">Home</a> | <a class="breadcrumbs" href="../research"><b>Research</b></a> | <a class="breadcrumbs" href="../teaching">Teaching</a> | <a class="breadcrumbs" href="../publications">Publications</a> </div></td> |
424 |
<td><img src="../images/blank.gif" width=25 height=1></td> |
425 |
</tr> |
426 |
<tr> |
427 |
<td bgcolor="#000000"><img src="../images/blank.gif" width=25 height=1></td> |
428 |
<td bgcolor="#000000"><img src="../images/blank.gif" width=1 height=1></td> |
429 |
<td bgcolor="#000000"><img src="../images/blank.gif" width=25 height=1></td> |
430 |
</tr> |
431 |
</table> |
432 |
|
433 |
<p> |
434 |
|
435 |
<!-- UNIVERSITY OF MARYLAND FOOTER BEGINS HERE --> |
436 |
|
437 |
<table border=0 cellpadding=1 cellspacing=0 align="center"> |
438 |
<tr> |
439 |
<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> |
440 |
<td> </td> |
441 |
<td valign=middle nowrap><font face="Arial, Helvetica" size="-2"> |
442 |
<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> |
443 |
Original created by <a href="mailto:jfuetsch@umiacs.umd.edu">John Fuetsch</a><br> |
444 |
Questions and comments to <a href="mailto:nedwards@umiacs.umd.edu">Nathan Edwards</a> |
445 |
</font></td> |
446 |
</tr> |
447 |
</table> |
448 |
|
449 |
<!-- END FOOTER HERE --> |
450 |
|
451 |
|
452 |
</td> |
453 |
<td bgcolor="#FFFFFF" width=10><img src="../images/blank.gif" width=10 height=1></td> |
454 |
</tr> |
455 |
<tr> |
456 |
<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> |
457 |
</tr> |
458 |
</table> |
459 |
|
460 |
</body> |
461 |
|
462 |
</html> |