Linux 下转换 Thermo 质谱 RAW 文件到 MZXML 格式的脚本
[总点击:469次]如题
由于最近开始做质谱方面的工作,实验室使用的液质联用仪是 Thermo 的. Thermo 使用了自己的封闭格式 (raw) 保存实验数据,其软件 Xcaliber 只有 windows 平台的,而我平时的工作平台是纯 linux(即使它有 linux 平台的软件,我也不喜欢封闭的格式,因为要 hack 起来不容易的缘故),所以我就想将 raw 文件转换成开放的格式(比如 mzxml)。google了一下,发现有一个 window 命令行程序 ReAdW.exe 可以将其转换成 mzxml,赫赫,这不就是我需要的么,而且是命令行的容易批量化,虽然是 windows 下的,不过程序很简单应该可以用 wine 运行。参考了它的说明,说是要求 Xcaliber 的一个 dll (XRawfile2.dll), 考虑到这些 dll 一个依赖一个的,干脆连 Xcaliber 也wine 了。wine 安装 Xcaliber,成功(运行出错,不管,反正只要它的 dll),然后测试 wine 运行了一下 ReAdW.exe,可以转换成功,哈哈,摆脱封闭的 raw 格式胜利在望,鉴于 dos 命令行参数输入方式的奇怪与路径样子的恶心,我决定将其封装成一个 bash 脚本,用 linux 命令行的方式来使用它,花了2-30分钟写好了这个脚本(额,好久没写 bash 脚本,这速度是有点丢人,其中还得到 骨哥 (bones7456)童鞋的帮助,在此表示谢意). 脚本见下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!/bin/bash # Name: rawconv.sh # Author: xiooli <xioooli[at]yahoo.com.cn> # Site: http://joolix.com # Licence: GPLv3 # Version: 100506 # convert the Thermo mass raw file to mzXML file export WINEPREFIX=$HOME/.wine if [ ! "`which wine 2>/dev/null`" ];then echo 'ERR: This scripe need wine installed!' exit fi if [ -f "`dirname $0`"/ReAdW.exe ]; then ReAdW="`dirname $0`"/ReAdW.exe elif [ -f "`dirname $0`"/rawconv/ReAdW.exe ];then ReAdW="`dirname $0`"/rawconv/ReAdW.exe else echo 'ERR: No ReAdW.exe found!' exit fi if [ $# -ge 2 ]; then rawfile="$1" mzxmlfile="$2" else echo 'ERR: Two auguments at least is needed!' exit fi fullpath_rawfile="Z:$(cd "`dirname $rawfile`"; echo "`pwd`"/"`basename $rawfile`"|sed 's|/|\\|g')" fullpath_mzxmlfile="Z:$(cd "`dirname $mzxmlfile`"; echo "`pwd`"/"`basename $mzxmlfile`"|sed 's|/|\\|g')" wine "$ReAdW" --mzXML -c "$fullpath_rawfile" "$fullpath_mzxmlfile" &>/dev/null |
哈,bash里面调exe,看上去好奇怪。。。
@bones7456 wine 的程序嘛,写好以后用这个脚本就比较 linux 化了。