在CentOS中安装arial字体

经常运行一些生物信息软件的时候,提示:Could not find/open font when opening font “arial”, using internal non-scalable font 等信息。此时,表示CentOS系统缺乏相应的字体文件。需要安装,步骤如下:

1. widonws下载字体文件到Linux

windows的字体比较多,其字体文件位于 C:\WINDOWS\Fonts 。 从其中copy相应的字体到Linux系统的 /usr/share/font/下的文件夹中。以arial字体为例:

# mkdir /usr/share/fonts/arial
# cp arial*.ttf /usr/share/fonts/arial/

2. 为刚加入的字体设置缓存使之有效

# cd /usr/share/font/arial
# mkfontscale
# mkfontdir
# fc-cache -fv

经过这样的设置后,即可在Gnome界面的 系统——首选项——外观——字体 中进行字体的选择了。

3. 设置gunplot对arial的选择路径

本文首页提示的错误是由于程序调用gunplot造成,必须让gunplot识别arial字体所在的路径才行。

$ export GDFONTPATH=/usr/share/fonts/arial
$ export GNUPLOT_DEFAULT_GDFONT="arial"

源码包的安装与pkg-config

经常性安装源码包的时候,进行configure步骤的时候,提示某依赖的软件包找不到或软件包版本太低;某一个库文件找不到。而实际上却已经安装好了相应的软件。这两种情况的处理方法分别为:

1. 设置环境变量PKG_CONFIG_PATH

.pc文件是安装软件后生成的一个文件,其中包含该软件的信息;该.pc文件一般统一存放于名为pkgconfig的目录下。命令pkg-config按照系统设置路径(CentOS6 x64_86系统默认为/usr/lib64/pkgconfig/)的先后顺序来搜索.pc文件,从而或得到软件的版本号、头文件和库文件位置等信息。

因此当把软件包安装到默认位置 /usr/local/ 位置后,则其 .pc 文件会生成到 /usr/local/lib/pkgconfig/ 或 /usr/local/lib64/pkgconfig/ 文件夹下,此时只需要将相应的 .pc 文件copy到/usr/lib64/pkgconfig/中即可;
或者,在安装软件包的时候,使用”./configure –prefix=/usr/”将软件直接安装到/usr/目录下。这时有可能会将 .pc文件生成到/usr/lib/pkgconfig/中,依然导致问题出现,只需将该目录中的 .pc 文件copy到/usr/lib64/pkgconfig/中即可;
或者,设置环境变量PKG_CONFIG_PATH,加入含有相应的.pc文件的路径。注意要使用命令 ‘export’ 。比如:

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH

使用以上3种方法,能解决软件版本不符或系统找不到依赖的软件包的问题。

2. 设置环境变量LD_LIBRARY_PATH

Linux系统默认把/lib和/usr/lib两个目录作为默认的库搜索路径。而修改库搜索路径有两个方法:

1. 在/etc/ld.so.conf 文件中添加库的搜索路径。
2. 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。

将库的路径设置好后,需要使用/sbin/ldconfig命令来将这些搜索路径下的共享库文件集中在一起而生成/etc/ld.so.cache。该cache用于快速定位共享库。

特别是新安装了软件后,即使其库文件明明就在库搜索路径下,但是编译的时候依然报错,提示缺少该库。则需要使用ldconfig命令来更新缓存。

更详细信息,可参考:简述configure、pkg-config、pkg_config_path三者的关系

为Apache安装模块

1. 下载模块,下载的模块一般以’.c’为后缀。例如mod_xsendfile.c

2. 安装模块需要执行命令apxs。但是使用yum安装的apache默认下没有该命令,需要

# yum install httpd*

3. 安装模块

# apxs -cia mod_xsendfile.c
# ls /etc/httpd/modules/mod_xsendfile.so
# /etc/init.d/httpd restart

至此,模块安装完成并生效。

4. 补充
使用apxs安装模块需要使用apache的httpd内建的mod_so模块。使用以下命令查看该模块

# httpd -l | grep mod_so

apxs的参数如下:

-n modname    它明确设置了-i(install)和-g (template generation)选项的模
块名称。 对-g选项,它是必须的; 对-i选项,apxs工具会按文件名判断至少是推测出这个模
块名称。

-q    查询某种apxs设置的信息。 query参数可以是下列一个或多个字串:CC, CFLAGS,
CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIB
S_SHLIB, SBINDIR, SYSCONFDIR, TARGET.这个参数用于手动查询某些设置。比如,
要手动处理Apache的C头文件,可以在Makefile中使用

-g    此选项生成一个名为name的子目录(见选项-n)和其中的两个文件: 一个是名为mo
d_name.c的样板模块源程序, 可以用作建立你自己的模块的模板,或是学习使用apxs机制
的良好开端; 另一个则是对应的Makefile,用于编译和安装此模块。

-c    此选项表示需要执行编译操作。 它首先会编译C源程序(.c)files为对应的目标代
码文件(.o), 然后,连接这些目标代码和files中其余的目标代码文件(.o and .a), 
以生成动态共享对象dsofile。如果没有指定-o选项, 则此输出文件名由files中的第一
个文件名推测得到, 所以,缺省时,它一般会是mod_name.so

-i    此选项表示需要执行安装操作, 以安装一个或多个动态共享对象到服务器的modul
es目录中。

-a    此选项自动在httpd.conf文件中增加一个LoadModule行,以激活此模块,或者,
如果此行已经存在,则启用之。

-A    与-a选项类似,但是它增加的LoadModule指令由一个井号前缀(#), 即,此模块
已经准备就绪,但尚处于禁用状态。

-e    此选项表示需要执行编辑操作,它可以与-a和-A选项配合使用, 与-i操作类似,
修改Apache的httpd.conf配置文件,但是并不安装此模块。

本文部分内容取自:http://blog.51yip.com/apachenginx/871.html

Galaxy的安装

具体可参考:http://wiki.galaxyproject.org/Admin/Config/Performance/ProductionServer

1. Galaxy的下载

安装Galaxy需要Python。Get Galaxy,点击:http://wiki.galaxyproject.org/Admin/Get%20Galaxy。先行产看Python的版本,并安装OpenSSL和Bzip2的 -dev 包

$ python --version
$ sudo yum install openssl* bzip2*
$ wget https://bitbucket.org/galaxy/galaxy-dist/get/tip.tar.bz2

要注意的是Galaxy的安装包在国内可能下载不了,需要其它途径获得。

2. Galaxy的安装

安装Galaxy推荐安装在Linux系统一个全新的用户目录下。该用户名为Galaxy, 并使用 clean Python interpreter.

# useradd galaxy
# cd /home/galaxy
# su galaxy
# tar jxf galaxy-dist-cea3ddf6cdda.tar.bz2
# mv galaxy-dist-cea3ddf6cdda galaxy-dist
# wget http://bitbucket.org/ianb/virtualenv/raw/tip/virtualenv.py
# /usr/bin/python2.6 virtualenv.py --no-site-packages galaxy_env
# sh ./galaxy_env/bin/activate
# cd galaxy-dist
# sh run.sh

运行run.sh即开启了Galaxy。第一此运行需要下载很多的eggs,需要一点点时间。

3. Galaxy的配置

3.1 Apache的proxy配置

默认情况下,galaxy只能在本机上访问,如需让远程用户通过网页来方法,则需要对Apache的配置文件进行修改。在 /etc/httpd/conf/httpd.conf 中加入如下语句:

######## For Galaxy ################
<proxy http://122.205.95.116:8080>
    Order deny,allow
#    Allow from all
    Allow from 122.205.*.*
</proxy>
# 以上设置能访问Galaxy的IP,仅限122.205的IP段的用户访问。

RewriteEngine on
#RewriteRule ^(.*) http://122.205.95.116:8080$1 [P]
RewriteRule ^/galaxy$ /galaxy/ [R]
RewriteRule ^/galaxy/static/style/(.*) /home/galaxy/galaxy-dist/static/june_2007_style/blue/$1 [L]
RewriteRule ^/galaxy/static/scripts/(.*) /home/galaxy/galaxy-dist/static/scripts/packed/$1 [L]
RewriteRule ^/galaxy/static/(.*) /home/galaxy/galaxy-dist/static/$1 [L]
RewriteRule ^/galaxy/favicon.ico /home/galxy/galaxy-dist/static/favicon.ico [L]
RewriteRule ^/galaxy/robots.txt /home/galaxy/galaxy-dist/static/robots.txt [L]
RewriteRule ^/galaxy(.*) http://122.205.95.116:8080$1 [P]
# 以上设置访问galaxy的网址为http://122.205.95.116:8080/galaxy,而不需要影响其它的apache服务。

<Location "/galaxy/">
   # Compress all uncompressed content.
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:t?gz|zip|bz2)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI /history/export_archive no-gzip dont-vary
    XSendFile on
    XSendFilePath /galaxy/
</Location>
# 以上设置以压缩方式传输文件,并使用第三方的apache模块来提高性能

<Location "/static">
    # Allow browsers to cache everything from /static for 6 hours
    ExpiresActive On
    ExpiresDefault "access plus 6 hours"
</Location>
# Galaxy的静态内容在client端缓存,提高访问速度。

其中需要使用的第三方apache模块mod_xsendfile.c需要下载后载进行安装。

需要开放8080端口.

# vi /etc/sysconfig/iptables
# /etc/init.d/iptables restart

需要设置Apache对galaxy文件夹的访问权限

# usermod -G galaxy apache
# id apache
# chmod 750 /home/galaxy

3.2 Galaxy的配置文件

Galaxy的配置文件为universe_wsgi.ini,先cp universe_wsgi.ini.sample universe_wsgi.ini,然后再修改该配置文件内容。
3.2.1. 修改developer settings.

debug = False
use_interactive = False
Disable filter-with = gzip

3.2.2. 使用web服务器的配置

[server:main]
host = 122.205.95.116

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /galaxy

[app:main]
filter-with = proxy-prefix
cookie_path = /galaxy

4. Galaxy依赖的软件

Galaxy的框架搭建起来后,需要依赖很多的软件和工具,才能正常运行。而这些软件和工具是Galaxy所不能完全提供的。
Tool Dependencies请点击:http://wiki.galaxyproject.org/Admin/Tools/Tool%20Dependencies

NGS数据的质量评估和reads的处理

1. 基因组测序和转录测序的NGS数据处理策略

从测序公司拿到数据后,首先需要对数据进行预处理,主要分两步走:

1.1 QC(reads的质量控制)

Quality Control,即过滤低质量reads,低质量的reads有如下几种:
含有Primer/Adaptor的reads
含有过多non-ATCG碱基N的reads
测序质量较低的碱基数占的比例过高的reads

需要将这些reads完全过滤掉,才能用于下一步的分析。

1.2 对reads进行trim处理

如果进行基因组组装,则不需要进行该步骤。如果是需要进行转录组的分析,则必须要该步骤。

本步骤从3’端来对reads进行trim,来控制reads中低质量碱基的比例。直到trim的read长度低于一定的数时,则完全舍弃该read。

2. NGS数据的QC软件

2.1 NGSQC toolkit

该软件的citation:Patel RK, Jain M (2012). NGS QC Toolkit: A toolkit for quality control of next generation sequencing data. PLoS ONE, 7(2): e30619.

该软件的官网:http://www.nipgr.res.in/ngsqctoolkit.html

该软件解压缩后包括4个文件夹和1个PDF格式的manual文件。manual文件是详细的说明;4个文件夹中都是使用perl编写的用于QC的程序。按其重要程度决定先后,其介绍如下:

2.1.1 QC文件夹中包含了4支perl程序,用于454 reads或Illumina reads的QC,分别为:

IlluQC.pl 用于Illumina reads的QC。默认情况下去除掉含有primer/adaptor的reads和低质量的reads,并给出统计结果和6种图形结果。默认设置 (‘-s’ 参数) 碱基质量低于20的为低质量碱基;默认设置 ( ‘-l’ 参数)低质量碱基在reads中比例 >30% 的为低质量reads。程序运行例子:

$ perl $NGSQCHome/QC/IlluQC_PRLL.pl -pe r1.fq r2.fq 2 5 -p 8 -l 70 -s 20

IlluQC_PRLL.pl 和上一个程序没有多大区别,只是多了 ‘-c’ 参数来进行并行计算,增加程序速度。

454QC.pl 对454 reads进行QC。
454QC_PRLL.pl 和上一个程序一眼个,只是多了 ‘-c’ 参数来进行并行计算,增加程序速度。
454QC_PE.pl 对paired-end测序的454 reads进行QC。

2.1.2 TrimingReads文件夹包含3支程序,用于reads的trimming,分别为:

AmbiguityFiltering.pl 对含有non-ATCG的reads进行trimming的程序。有4种(4选1)trim方法:允许最大non-ATCG数目;允许最大的non-ATCG比例(例子如下);从5’端trim掉含N的序列;从3’端trim掉含N的序列。加上个通用的参数:低于一定长度的reads被cutoff掉。

$ perl $NGSQCHome/Trimming/AmbiguityFiltering.pl -i r1.fq -irev r2.fq -p 2 -n 50

TrimmingReads.pl 有3种(3选1)trim方法:对所有read从5’端trim掉制定数目的碱基;对所有reads从3’端trim掉指定数目的碱基;从3’端trim掉质量低于指定值的碱基(例子如下)。加上个通用的参数:低于一定长度的reads被cutoff掉。

$ perl $NGSQCHome/Trimming/TrimmingReads.pl  -i r1.fq -irev r2.fq -q 13 -n 50

HomopolymerTrimming.pl

2.1.3 Statistics文件夹中2支程序,用于进行N50统计等

N50Stat.pl 用于统计fasta文件的N50
AvgQuality.pl 用于统计454文件的reads质量

2.1.4 Formt-converter文件夹中程序运用于不同格式文件的转换,其中含有4个perl程序,分别为:

FastqTo454.pl、FastqToFasta.pl、SangerFastqToIlluFastq.pl、SolexaFastqToIlluFastq.pl

samtools常用命令详解

samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml
samtools是一个用于操作sam和bam文件的工具合集。包含有许多命令。以下是常用命令的介绍

1. view

view命令的主要功能是:将sam文件转换成bam文件;然后对bam文件进行各种操作,比如数据的排序(不属于本命令的功能)和提取(这些操作是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作);最后将排序或提取得到的数据输出为bam或sam(默认的)格式。

bam文件优点:bam文件为二进制文件,占用的磁盘空间比sam文本文件小;利用bam二进制文件的运算速度快。

view命令中,对sam文件头部的输入(-t或-T)和输出(-h)是单独的一些参数来控制的。

Usage: samtools view [options] <in.bam>|<in.sam> [region1 [...]]
默认情况下不加 region,则是输出所有的 region.

Options: -b       output BAM
                  默认下输出是 SAM 格式文件,该参数设置输出 BAM 格式
         -h       print header for the SAM output
                  默认下输出的 sam 格式文件不带 header,该参数设定输出sam文件时带 header 信息
         -H       print header only (no alignments)
         -S       input is SAM
                  默认下输入是 BAM 文件,若是输入是 SAM 文件,则最好加该参数,否则有时候会报错。
         -u       uncompressed BAM output (force -b)
                  该参数的使用需要有-b参数,能节约时间,但是需要更多磁盘空间。
         -c       Instead of printing the alignments, only count them and print the 
                  total number. All filter options, such as ‘-f’, ‘-F’ and ‘-q’ , 
                  are taken into account.
         -1       fast compression (force -b)
         -x       output FLAG in HEX (samtools-C specific)
         -X       output FLAG in string (samtools-C specific)
         -c       print only the count of matching records
         -L FILE  output alignments overlapping the input BED FILE [null]
         -t FILE  list of reference names and lengths (force -S) [null]
                  使用一个list文件来作为header的输入
         -T FILE  reference sequence file (force -S) [null]
                  使用序列fasta文件作为header的输入
         -o FILE  output file name [stdout]
         -R FILE  list of read groups to be outputted [null]
         -f INT   required flag, 0 for unset [0]
         -F INT   filtering flag, 0 for unset [0] 
                  Skip alignments with bits present in INT [0]
                  数字4代表该序列没有比对到参考序列上
                  数字8代表该序列的mate序列没有比对到参考序列上
         -q INT   minimum mapping quality [0]
         -l STR   only output reads in library STR [null]
         -r STR   only output reads in read group STR [null]
         -s FLOAT fraction of templates to subsample; integer part as seed [-1]
         -?       longer help

例子:

将sam文件转换成bam文件
$ samtools view -bS abc.sam > abc.bam
$ samtools view -b -S abc.sam -o abc.bam

提取比对到参考序列上的比对结果
$ samtools view -bF 4 abc.bam > abc.F.bam

提取paired reads中两条reads都比对到参考序列上的比对结果,只需要把两个4+8的值12作为过滤参数即可
$ samtools view -bF 12 abc.bam > abc.F12.bam

提取没有比对到参考序列上的比对结果
$ samtools view -bf 4 abc.bam > abc.f.bam

提取bam文件中比对到caffold1上的比对结果,并保存到sam文件格式
$ samtools view abc.bam scaffold1 > scaffold1.sam

提取scaffold1上能比对到30k到100k区域的比对结果
$ samtools view abc.bam scaffold1:30000-100000 $gt; scaffold1_30k-100k.sam

根据fasta文件,将 header 加入到 sam 或 bam 文件中
$ samtools view -T genome.fasta -h scaffold1.sam > scaffold1.h.sam

2. sort

sort对bam文件进行排序。

Usage: samtools sort [-n] [-m <maxMem>] <in.bam> <out.prefix>  
-m 参数默认下是 500,000,000 即500M(不支持K,M,G等缩写)。对于处理大数据时,如果内存够用,则设置大点的值,以节约时间。
-n 设定排序方式按short reads的ID排序。默认下是按序列在fasta文件中的顺序(即header)和序列从左往右的位点排序。

例子:

$ samtools sort abc.bam abc.sort
$ samtools view abc.sort.bam | less -S

3.merge

将2个或2个以上的已经sort了的bam文件融合成一个bam文件。融合后的文件不需要则是已经sort过了的。

Usage:   samtools merge [-nr] [-h inh.sam] <out.bam> <in1.bam> <in2.bam>[...]

Options: -n       sort by read names
         -r       attach RG tag (inferred from file names)
         -u       uncompressed BAM output
         -f       overwrite the output BAM if exist
         -1       compress level 1
         -R STR   merge file in the specified region STR [all]
         -h FILE  copy the header in FILE to <out.bam> [in1.bam]

Note: Samtools' merge does not reconstruct the @RG dictionary in the header. Users
      must provide the correct header with -h, or uses Picard which properly maintains
      the header dictionary in merging.

4.index

必须对bam文件进行默认情况下的排序后,才能进行index。否则会报错。

建立索引后将产生后缀为.bai的文件,用于快速的随机处理。很多情况下需要有bai文件的存在,特别是显示序列比对情况下。比如samtool的tview命令就需要;gbrowse2显示reads的比对图形的时候也需要。

Usage: samtools index <in.bam> [out.index]

例子:

以下两种命令结果一样
$ samtools index abc.sort.bam
$ samtools index abc.sort.bam abc.sort.bam.bai

5. faidx

对fasta文件建立索引,生成的索引文件以.fai后缀结尾。该命令也能依据索引文件快速提取fasta文件中的某一条(子)序列

Usage: samtools faidx <in.bam> [ [...]]

对基因组文件建立索引
$ samtools faidx genome.fasta
生成了索引文件genome.fasta.fai,是一个文本文件,分成了5列。第一列是子序列的名称;
第二列是子序列的长度;个人认为“第三列是序列所在的位置”,因为该数字从上往下逐渐变大,
最后的数字是genome.fasta文件的大小;第4和5列不知是啥意思。于是通过此文件,可以定
位子序列在fasta文件在磁盘上的存放位置,直接快速调出子序列。

由于有索引文件,可以使用以下命令很快从基因组中提取到fasta格式的子序列
$ samtools faidx genome.fasta scffold_10 > scaffold_10.fasta

6. tview

tview能直观的显示出reads比对基因组的情况,和基因组浏览器有点类似。

Usage: samtools tview <aln.bam> [ref.fasta]

当给出参考基因组的时候,会在第一排显示参考基因组的序列,否则,第一排全用N表示。
按下 g ,则提示输入要到达基因组的某一个位点。例子“scaffold_10:1000"表示到达第
10号scaffold的第1000个碱基位点处。
使用H(左)J(上)K(下)L(右)移动显示界面。大写字母移动快,小写字母移动慢。
使用空格建向左快速移动(和 L 类似),使用Backspace键向左快速移动(和 H 类似)。
Ctrl+H 向左移动1kb碱基距离; Ctrl+L 向右移动1kb碱基距离
可以用颜色标注比对质量,碱基质量,核苷酸等。30~40的碱基质量或比对质量使用白色表示;
20~30黄色;10~20绿色;0~10蓝色。
使用点号'.'切换显示碱基和点号;使用r切换显示read name等
还有很多其它的使用说明,具体按 ? 键来查看。

7. flagstat

给出BAM文件的比对结果

Usage: samtools flagstat <in.bam>

$ samtools flagstat example.bam
11945742 + 0 in total (QC-passed reads + QC-failed reads)
#总共的reads数
0 + 0 duplicates
7536364 + 0 mapped (63.09%:-nan%)
#总体上reads的匹配率
11945742 + 0 paired in sequencing
#有多少reads是属于paired reads
5972871 + 0 read1
#reads1中的reads数
5972871 + 0 read2
#reads2中的reads数
6412042 + 0 properly paired (53.68%:-nan%)
#完美匹配的reads数:比对到同一条参考序列,并且两条reads之间的距离符合设置的阈值
6899708 + 0 with itself and mate mapped
#paired reads中两条都比对到参考序列上的reads数
636656 + 0 singletons (5.33%:-nan%)
#单独一条匹配到参考序列上的reads数,和上一个相加,则是总的匹配上的reads数。
469868 + 0 with mate mapped to a different chr
#paired reads中两条分别比对到两条不同的参考序列的reads数
243047 + 0 with mate mapped to a different chr (mapQ>=5)

#同上一个,只是其中比对质量>=5的reads的数量

7. depth

得到每个碱基位点的测序深度,并输出到标准输出。

Usage: bam2depth [-r reg] [-q baseQthres] [-Q mapQthres] [-b in.bed] <in1.bam> [...]

8. 其它有用的命令

reheader 替换bam文件的头

$ samtools reheader <in.header.sam> <in.bam>

cat 连接多个bam文件,适用于非sorted的bam文件

$ samtools cat [-h header.sam] [-o out.bam] <in1.bam> <in2.bam> [ ... ]

idxstats 统计一个表格,4列,分别为”序列名,序列长度,比对上的reads数,unmapped reads number”。第4列应该是paired reads中有一端能匹配到该scaffold上,而另外一端不匹配到任何scaffolds上的reads数。

$ samtools idxstats <aln.bam>

9. 将bam文件转换为fastq文件

有时候,我们需要提取出比对到一段参考序列的reads,进行小范围的分析,以利于debug等。这时需要将bam或sam文件转换为fastq格式。
该网站提供了一个bam转换为fastq的程序:http://www.hudsonalpha.org/gsl/information/software/bam2fastq

$ wget http://www.hudsonalpha.org/gsl/static/software/bam2fastq-1.1.0.tgz
$ tar zxf bam2fastq-1.1.0.tgz
$ cd bam2fastq-1.1.0
$ make
$ ./bam2fastq <in.bam>

10. mpileup

samtools还有个非常重要的命令mpileup,以前为pileup。该命令用于生成bcf文件,再使用bcftools进行SNP和Indel的分析。bcftools是samtool中附带的软件,在samtools的安装文件夹中可以找到。

最常用的参数有2: -f 来输入有索引文件的fasta参考序列; -g 输出到bcf格式。用法和最简单的例子如下

Usage: samtools mpileup [-EBug] [-C capQcoef] [-r reg] [-f in.fa] [-l list] [-M capMapQ] [-Q minBaseQ] [-q minMapQ] in.bam [in2.bam [...]]

$ samtools mpileup -f genome.fasta abc.bam > abc.txt
$ samtools mpileup -gSDf genome.fasta abc.bam > abc.bcf
$ samtools mpileup -guSDf genome.fasta abc.bam | \
           bcftools view -cvNg - > abc.vcf

mpileup不使用-u或-g参数时,则不生成二进制的bcf文件,而生成一个文本文件(输出到标准输出)。该文本文件统计了参考序列中每个碱基位点的比对情况;该文件每一行代表了参考序列中某一个碱基位点的比对结果。比如:

scaffold_1      2841    A       11      ,,,...,....     BHIGDGIJ?FF
scaffold_1      2842    C       12      ,$,,...,....^I. CFGEGEGGCFF+
scaffold_1      2843    G       11      ,,...,.....     FDDDDCD?DD+
scaffold_1      2844    G       11      ,,...,.....     FA?AAAA<AA+
scaffold_1      2845    G       11      ,,...,.....     F656666166*
scaffold_1      2846    A       11      ,,...,.....     (1.1111)11*
scaffold_1      2847    A       11      ,,+9acggtgaag.+9ACGGTGAAT.+9ACGGTGAAG.+9ACGGTGAAG,+9acggtgaag.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG       %.+....-..)
scaffold_1      2848    N       11      agGGGgGGGGG     !!$!!!!!!!!
scaffold_1      2849    A       11      c$,...,.....    !0000000000
scaffold_1      2850    A       10      ,...,.....      353333333

mpileup生成的结果包含6行:参考序列名;位置;参考碱基;比对上的reads数;比对情况;比对上的碱基的质量。其中第5列比较复杂,解释如下:

1 ‘.’代表与参考序列正链匹配。
2 ‘,’代表与参考序列负链匹配。
3 ‘ATCGN’代表在正链上的不匹配。
4 ‘atcgn’代表在负链上的不匹配。
5 ‘*’代表模糊碱基
6 ‘^’代表匹配的碱基是一个read的开始;’^’后面紧跟的ascii码减去33代表比对质量;这两个符号修饰的是后面的碱基,其后紧跟的碱基(.,ATCGatcgNn)代表该read的第一个碱基。
7 ‘$’代表一个read的结束,该符号修饰的是其前面的碱基。
8 正则式’\+[0-9]+[ACGTNacgtn]+’代表在该位点后插入的碱基;比如上例中在scaffold_1的2847后插入了9个长度的碱基acggtgaag。表明此处极可能是indel。
9 正则式’-[0-9]+[ACGTNacgtn]+’代表在该位点后缺失的碱基;

pileup具体的参数如下:

输入参数
-6       Assume the quality is in the Illumina 1.3+ encoding. -A Do not skip anomalous read pairs in variant calling. 
-B       Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments. 
-b FILE  List of input BAM files, one file per line [null]
-C INT   Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled probability q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50. [0] 
-d INT   At a position, read maximally INT reads per input BAM. [250] 
-E       Extended BAQ computation. This option helps sensitivity especially for MNPs, but may hurt specificity a little bit. 
-f FILE  The faidx-indexed reference file in the FASTA format. The file can be optionally compressed by razip. [null] 
-l FILE  BED or position list file containing a list of regions or sites where pileup or BCF should be generated [null] 
-M INT       cap mapping quality at INT [60]
-q INT 	Minimum mapping quality for an alignment to be used [0] 
-Q INT 	Minimum base quality for a base to be considered [13]
-r STR 	Only generate pileup in region STR [all sites] 

输出参数
-D 	Output per-sample read depth (require -g/-u)
-g 	Compute genotype likelihoods and output them in the binary call format (BCF). 
-S 	Output per-sample Phred-scaled strand bias P-value (require -g/-u) 
-u 	Similar to -g except that the output is uncompressed BCF, which is preferred for piping. 

Options for Genotype Likelihood Computation (for -g or -u):
-e INT 	Phred-scaled gap extension sequencing error probability. Reducing INT leads to longer indels. [20] 
-h INT 	Coefficient for modeling homopolymer errors. Given an l-long homopolymer run, the sequencing error of an indel of size s is modeled as INT*s/l. [100] 
-I 	Do not perform INDEL calling 
-L INT 	Skip INDEL calling if the average per-sample depth is above INT. [250] 
-o INT 	Phred-scaled gap open sequencing error probability. Reducing INT leads to more indel calls. [40] 
-P STR 	Comma dilimited list of platforms (determined by @RG-PL) from which indel candidates are obtained. It is recommended to collect indel candidates from sequencing technologies that have low indel error rate such as ILLUMINA. [all]

11. 使用bcftools

bcftools和samtools类似,用于处理vcf(variant call format)文件和bcf(binary call format)文件。前者为文本文件,后者为其二进制文件。

bcftools使用简单,最主要的命令是view命令,其次还有index和cat等命令。index和cat命令和samtools中类似。此处主讲使用view命令来进行SNP和Indel calling。该命令的使用方法和例子为:

$ bcftools view [-AbFGNQSucgv] [-D seqDict] [-l listLoci] [-s listSample] 
          [-i gapSNPratio] [-t mutRate] [-p varThres] [-P prior] 
          [-1 nGroup1] [-d minFrac] [-U nPerm] [-X permThres] 
          [-T trioType] in.bcf [region]

$ bcftools view -cvNg abc.bcf > snp_indel.vcf

生成的结果文件为vcf格式,有10列,分别是:1 参考序列名;2 varianti所在的left-most位置;3 variant的ID(默认未设置,用’.’表示);4 参考序列的allele;5 variant的allele(有多个alleles,则用’,’分隔);6 variant/reference QUALity;7 FILTers applied;8 variant的信息,使用分号隔开;9 FORMAT of the genotype fields, separated by colon (optional); 10 SAMPLE genotypes and per-sample information (optional)。
例如:

scaffold_1      2847    .       A       AACGGTGAAG      194     .       INDEL;DP=11;VDB=0.0401;AF1=1;AC1=2;DP4=0,0,8,3;MQ=35;FQ=-67.5   GT:PL:GQ        1/1:235,33,0:63
scaffold_1      3908    .       G       A       111     .       DP=13;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,5,7;MQ=42;FQ=-63   GT:PL:GQ        1/1:144,36,0:69
scaffold_1      4500    .       A       G       31.5    .       DP=8;VDB=0.0034;AF1=1;AC1=2;DP4=0,0,1,3;MQ=42;FQ=-39    GT:PL:GQ        1/1:64,12,0:21
scaffold_1      4581    .       TGGNGG  TGG     145     .       INDEL;DP=8;VDB=0.0308;AF1=1;AC1=2;DP4=0,0,0,8;MQ=42;FQ=-58.5    GT:PL:GQ        1/1:186,24,0:45
scaffold_1      4644    .       G       A       195     .       DP=21;VDB=0.0198;AF1=1;AC1=2;DP4=0,0,10,10;MQ=42;FQ=-87 GT:PL:GQ        1/1:228,60,0:99
scaffold_1      4827    .       NACAAAGA        NA      4.42    .       INDEL;DP=1;AF1=1;AC1=2;DP4=0,0,1,0;MQ=40;FQ=-37.5       GT:PL:GQ        0/1:40,3,0:3
scaffold_1      4854    .       A       G       48      .       DP=6;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,2,1;MQ=41;FQ=-36    GT:PL:GQ        1/1:80,9,0:16
scaffold_1      5120    .       A       G       85      .       DP=8;VDB=0.0355;AF1=1;AC1=2;DP4=0,0,5,3;MQ=42;FQ=-51    GT:PL:GQ        1/1:118,24,0:45

第8列中显示了对variants的信息描述,比较重要,其中的 Tag 的描述如下:

Tag	Format	Description
AF1	double	Max-likelihood estimate of the site allele frequency (AF) of the first ALT allele
DP	int	Raw read depth (without quality filtering)
DP4	int[4]	# high-quality reference forward bases, ref reverse, alternate for and alt rev bases
FQ	int	Consensus quality. Positive: sample genotypes different; negative: otherwise
MQ	int	Root-Mean-Square mapping quality of covering reads
PC2	int[2]	Phred probability of AF in group1 samples being larger (,smaller) than in group2
PCHI2	double	Posterior weighted chi^2 P-value between group1 and group2 samples
PV4	double[4]	P-value for strand bias, baseQ bias, mapQ bias and tail distance bias
QCHI2	int	Phred-scaled PCHI2
RP	int	# permutations yielding a smaller PCHI2
CLR	int	Phred log ratio of genotype likelihoods with and without the trio/pair constraint
UGT	string	Most probable genotype configuration without the trio constraint
CGT	string	Most probable configuration with the trio constraint

bcftools view 的具体参数如下:

Input/Output Options:
-A 	Retain all possible alternate alleles at variant sites. By default, the view command discards unlikely alleles.
-b 	Output in the BCF format. The default is VCF.
-D FILE Sequence dictionary (list of chromosome names) for VCF->BCF conversion [null]
-F 	Indicate PL is generated by r921 or before (ordering is different).
-G 	Suppress all individual genotype information.
-l FILE List of sites at which information are outputted [all sites]
-N 	Skip sites where the REF field is not A/C/G/T
-Q 	Output the QCALL likelihood format
-s FILE List of samples to use. The first column in the input gives the sample names and the second gives the ploidy, which can only be 1 or 2. When the 2nd column is absent, the sample ploidy is assumed to be 2. In the output, the ordering of samples will be identical to the one in FILE. [null]
-S 	The input is VCF instead of BCF.
-u 	Uncompressed BCF output (force -b). 

Consensus/Variant Calling Options:
-c 	Call variants using Bayesian inference. This option automatically invokes option -e.
-d FLOAT When -v is in use, skip loci where the fraction of samples covered by reads is below FLOAT. [0]
        当有多个sample用于variants calling时,比如多个转录组数据或多个重测序
        数据需要比对到参考基因组上,设置该值,表明至少有该<float 0~1>比例的
        samples在该位点都有覆盖才计算入variant.所以对于只有一个sample的情况
        下,该值设置在0~1之间没有意义,大于1则得不到任何结果。
-e 	Perform max-likelihood inference only, including estimating the site allele frequency, testing Hardy-Weinberg equlibrium and testing associations with LRT.
-g 	Call per-sample genotypes at variant sites (force -c)
-i FLOAT Ratio of INDEL-to-SNP mutation rate [0.15]
-p FLOAT A site is considered to be a variant if P(ref|D)
-t FLOAT Scaled muttion rate for variant calling [0.001]
-T STR 	Enable pair/trio calling. For trio calling, option -s is usually needed to be applied to configure the trio members and their ordering. In the file supplied to the option -s, the first sample must be the child, the second the father and the third the mother. The valid values of STR are ‘pair’, ‘trioauto’, ‘trioxd’ and ‘trioxs’, where ‘pair’ calls differences between two input samples, and ‘trioxd’ (‘trioxs’) specifies that the input is from the X chromosome non-PAR regions and the child is a female (male). [null]
-v 	Output variant sites only (force -c) 

Contrast Calling and Association Test Options:
-1 INT 	Number of group-1 samples. This option is used for dividing the samples into two groups for contrast SNP calling or association test. When this option is in use, the following VCF INFO will be outputted: PC2, PCHI2 and QCHI2. [0]
-U INT 	Number of permutations for association test (effective only with -1) [0]
-X FLOAT Only perform permutations for P(chi^2)

使用bcftools得到variant calling结果后。需要对结果再次进行过滤。主要依据比对结果中第8列信息。其中的 DP4 一行尤为重要,提供了4个数据:1 比对结果和正链一致的reads数、2 比对结果和负链一致的reads数、3 比对结果在正链的variant上的reads数、4 比对结果在负链的variant上的reads数。可以设定 (value3 + value4)大于某一阈值,才算是variant。比如:

$ perl -ne 'print $_ if /DP4=(\d+),(\d+),(\d+),(\d+)/ && ($3+$4)>=10 && ($3+$4)/($1+$2+$3+$4)>=0.8' snp_indel.vcf > snp_indel.final.vcf

12. samtools rmdup

NGS上机测序前需要进行PCR一步,使一个模板扩增出一簇,从而在上机测序的时候表现出为1个点,即一个reads。若一个模板扩增出了多簇,结果得到了多个reads,这些reads的坐标(coordinates)是相近的。在进行了reads比对后需要将这些由PCR duplicates获得的reads去掉,并只保留最高比对质量的read。使用rmdup命令即可完成.

Usage:  samtools rmdup [-sS]  
-s 对single-end reads。默认情况下,只对paired-end reads
-S 将Paired-end reads作为single-end reads处理。

$ samtools input.sorted.bam output.bam

使用Crossbow作SNP分析

Crossbow:http://bowtie-bio.sourceforge.net/crossbow/index.shtml

在这里讲述本地化使用single computer运行Crossbow的命令详解和流程。

1. Crossbow的安装

在上面提到的Crossbow主页上点击下载链接去sourceforge上下载Crossbow的压缩包,解压即可。

Crossbow的使用需要依赖于bowtie和soapsnp。当使用sra数据的时候,还需要依赖于SRA toolkit中的fastq-dump命令。

$ wget http://kaz.dl.sourceforge.net/project/bowtie-bio/crossbow/1.2.1/crossbow-1.2.1.zip
$ unzip crossbow-1.2.1.zip
$ cd crossbow-1.2.1/soapsnp
$ make
$ sudo cp soapsnp /usr/local/bin/
$ cd ..
$ ./cb_local --test

cb_local是本地化的Crossbow运行命令,–test用于检测 bowtie, soapsnp 和 fastq-dump 这三个程序是否能正常使用。

2. cb_local 命令主要参数

Crossbow可以运行在Amazon Elastic MapReduce (EMR)上,应该是按计算量收费;也可以运行在计算机集群上;或运行在单个的计算机上。其cb_local特有的参数有:

--reference <path>
    参考序列的文件夹。该文件夹由一个参考序列jar文件使用unzip解压缩出来的,里面主
要包括3个子文件夹和一个列表文件:1."index":里面包含bowtie-bulid产生的index文
件;2."sequences":里面包含参考序列;3."snps":已有的参考snp结果;4."cmap.
txt":参考序名和对应的sequences文件夹中的fasta的header名各占一列。

--input <path>
输入的文件或文件夹路径。如果不指定--preprocess 参数,则该参数后接的是一个
文件夹,该文件夹包含了reads的预处理结果,即 --preprocess-output 的输出结果;
如果指定了 --preprocess 或 --just-preprocess 参数,则是一个文本文件,内容
为输入的序列文件的一个清单(Labeled manifest files)。该文件描述了输入序列文件
和样本的信息。序列文件是FASTQ或sra格式文件,FASTQ格式可以是gzip或bzip2压缩。
该文件每一行代表一个测序的结果,是以下是 unpaired reads 和 paired reads 的
书写方法:
<URL>(tab)<Optional MD5>
<URL-1>(tab)<Optional MD5>(tab)<URL-2>(tab)<Optional MD5>

其中URL是测序结果文件的路径,可以是ftp站点上的文件;MD5是可选的,以利于下载文件后
用于文件的完整度检验,若不想进行检验,则设置为0.

--output <path>
输出文件的路径。如果 --just-preprocess 参数给定,则只是对reads文件进行预
处理,给出结果。默认情况下,则是输出最终结果: 由SOAPsnp对每个参考序列进行SNP calls
的计算结果。

--intermediate <path> default: /tmp/myrna/intermediate/<PID>
中间结果文件存放的临时路径。如果指定了 --keep-intermediates 或 --keep-
all参数,则该文件则会一直存在。默认情况下会使用完毕后删除。

--preprocess-output <path>
对reads进行预处理的输出路径。由于对reads的预处理会消耗很多时间,因此保留数据
的预处理结果,对再次运行程序来说,可以节约很多时间。

--keep-intermediates <path>
保留程序运行中生成的结果文件夹和文件,默认情况下这些文件会被尽快的自动删除。

--keep-all
保留所有的临时文件,默认情况下这些文件会被尽快的自动删除。

--cpus <int> default: 1
设定程序运行使用的CPU线程数。

--bowtie <path>
    设定bowtie的路径

--fastq-dump <path>
    sra toolkit中fastq-dump的路径

--soapsnp <path>
    SOAPsnp的路径

以上输入参数有个注意事项: 当 –input 参数的输入为一个manifest文件时,文件中指向某一个fastq或sra文件的 URL 必须是绝对路径;如果是相对路径则会报错。

在EMR、Hadoop和local上使用Crossbow共有的参数如下:

--quality { phred33 | phred64 | solexa64 }  default: phred33
    设置输入reads的碱基质量格式。phred33:输入的碱基质量等于ASCII码值加上33;最
低碱基质量是“#”. phred64:输入的碱基质量等于ASCII码值加上64;最低碱基质量是“B”.

--preprocess
    当 --input 的参数是一个文本文件(含有输入序列信息的清单)时,则必须加入该参数
;该参数指定出了文本文件中的序列信息来,Crossbow则进行这些reads的预处理,将生成的预处
理reads结果输出到 --preprocess-output 指定的文件夹;如果不指定--preprocess
-output参数,则输出到 --intermediate 指定的文件夹。

--just-preprocess
    和 --preprocess 参数类似,但不同的是进行reads预处理后,即停止pipeline的
运行,并将结果输出到 --output指定的文件夹。

--just-align
    不将Myrna的pipeline运行到底,只是运行到比对结束,并将结果存放到 --output 
参数指定的URL.

--resume-align
    使用此命令来运行上一个命令(比对完毕)过后的阶段。 此时 --input 的参数则是上
一个命令中 --output的URL

--bowtie-args "<args>"  default: -m 1
    设置bowtie的参数。点击查看Bowtie manual

--discard-reads <fraction>  default: 0.0
    丢弃一定比例输的reads来进行程序的运行。比如 0.5 则代表丢弃50%的reads。该参
数应用于所有输入的reads。对于程序的调试比较有用。

--discard-ref-bins <fraction> default:0.0
    在进行SNP calling之前,丢弃一定比例的参考序列,再进行SNP calling。有利于
debugging。

--discard-all <fraction>
    等同于将上两个参数同时设定到该值。

--soapsnp-args "<args>"  default: -2 -u -n -q
    设置SOAPsnp的参数。点击查看SOAPsnp manual

--soapsnp-hap-args "<args>"  default: -r 0.0001
    对单核体测序数据设置的参数

--soapsnp-dip-args "<args>"  default: -r 0.00005 -e 0.0001
    对双核体测序数据设置的参数

--haploids <chromosome-list>
    后接逗号分开的参考序列名。这些序列在运用SOAPsnp进行SNP calling的时候按
hapolid进行处理,其余的则按diploid进行处理。默认下所有的参考序列都是按diploid
处理

--all-haploids
    设定该参数,表明在使用SOAPsnp的时候所有的参考序列都按hapolid进行处理。

--partition-len <int> default: 1,000,000
    The bin size to use when binning alignments into partitions
prior to SNP calling. If load imbalance occurrs in the SNP 
calling step (some tasks taking far longer than others), try 
decreasing this.

--dry-run
    Just generate a script containing the commands needed to 
launch the job, but don't run it. The script's location will be 
printed so that you may run it later.

--test
    搜索Crossbow需要的工具(bowtie,SOAPsnp和fastq-dump),来检测Crossbow
能否正常运行

--tempdir `<path>` default: /tmp/Crossbow/invoke.scripts
    Local directory where temporary files (e.g. dynamically 
generated scripts) should be deposited.

3. 输入的reference jar文件配置

该jar文件使用unzip解压后,包括3个文件夹和1个文件,具体如下:

1. sequences 文件夹: 该文件夹中包含很多fasta文件。fasta文件的取名一定要按 chrX.fa 来作为文件名,其中 X 是从0开始的连续的数字;每个fasta文件中只含有一条序列,fasta文件的header命名必须为 X.
2. cmap.txt 文件:该文件记录着参考序列的真实名称和其对应着的数字。第一列为参考序列名,第二列为数字;中间使用tab分隔。
3. index 文件夹:使用bowtie-build将sequences中的所有的fasta文件构建一个索引,并且索引文件的前缀必须为 index;并且索引的顺序必须按数字的id进行排序。
4. snps 文件夹:如果有已知的snp结果,放置在此文件夹下;SNP 结果的文件名必须和 sequences 文件夹下的 FASTA 文件的前缀一致,并加上后缀 .snps. 比如 chrX.snps。SNP结果文件的格式为文本文件,包含由tab分隔的10列内容。

1. 参考序列名
2. 1-based 位置
3. SNP是否有频率信息(1 = yes, 0 = no)
4. SNP是否有实验验证(1 = yes, 0 = no)
5. SNP是否实际是indel(1 = yes, 0 = no)
6. A allele的频率
7. C allele的频率
8. T allele的频率
9. G allele的频率
10. SNP id

将上述文件和问夹就准备好后,即可打包成jar文件。

$ jar cf ref-XXX.jar sequences snps index cmap.txt

4. Crossbow运行过程和结果

Crossbow运行有4步,分别是:

1. 对reads进行预处理。通过$CrossbowHome/Copy.pl进行reads的预处理。
2. 进行序列的比对。通过$CrossbowHome/Align.pl调用bowtie来进行序列比对。
3. 进行SNPs Calling。通过$CrossbowHome/Soapsnp.pl调用soapsnp来Call SNPs。
4. 后处理。通过$CrossbowHome/CBFinish.pl来处理结果,使结果和原始的参考序列名一致。

Crossbow得到的结果在 –output 参数设置的文件夹的 crossbow_results 子文件夹中。每个参考序列得到一个使用gzip压缩后的结果。比如:
/crossbow_results/chr1.gz
/crossbow_results/chr2.gz
/crossbow_results/chr3.gz

每一个文件包含着SOAPsnp格式的SNPs,每行记录一个SNP。该SOAPsnp格式的包括18列,其意义如下:

1. 参考序列名
2. 1-based位置
3. 参考序列的基因型
4. 样品的基因型
5. 样品基因型的质量分数
6. 最优的碱基
7. 最优碱基的平均碱基质量
8. 唯一比对到该位点的对应着最优碱基的reads数
9. 所有比对到该位点的对应着最优碱基的reads数
10. 次优碱基
11. 次优碱基的平均碱基质量
12. 唯一比对到该位点的对应着次优碱基的reads数
13. 所有比对到该位点的对应着次优碱基的reads数
14. 该位点的测序深度
15. 该位点对应着paired比对的测序深度
16. Rank sum test P-value
17. Average copy number of nearby region
18. 该位点是否是一个已知的SNP(通过和 -s 参数中指定文件的对比)

注意: 第15列是Crossbow对SOAPsnp修饰后才添加的。

5. 点评:Crossbow和samtools进行SNPs calling

个人通过使用以上两种软件对实际数据的运算结果,发现:samtools比Crossbow得到的结果要好。表现为如下几点:

1. 这两个软件都是使用bowtie进行的比对;而Crossbow是使用SOAPsnp对比对结果进行SNP calling。而samtools结合其一起发布的bcftools进行SNPs calling。
2. 通过samtool tview对bowtie的比对结果进行浏览,来人工观察并比较这两个软件的给出的结果。发现samtools的结果比较正确。很多在samtools tview中明显显示为SNP的确在Crossbow中没有给出;但是,一些map质量很差,或比对上数目很少的SNPs却只在Crossbow中给出。
3. Crossbow只能进行SNPs calling,不能进行Indels calling。而samtools则能进行short Indels calling。
4. Crossbow使用bowtie作为比对软件;而samtools则可以运用bowtie2的比对结果。

综上,可以优先考虑使用samtools来进行SNP或Indel的calling。

CAZyme注释步骤

CAZyme的数据来源于CAZyDB:www.cazy.org;而对CAZyme的注释主要使用dbCAN:http://csbl.bmb.uga.edu/dbCAN/。对CAZyme的注释步骤如下:

1. 从dbCAN中下载HMMs

打开dbCAN网站的Download页面。下载其中的3个文件:all.hmm.ps.len,dbCAN-fam-HMMs.txt,hmmscan-parser.sh。

2. 下载hmmer软件

http://hmmer.org/下载hmmer3.0rc2并安装。

3. 对目的蛋白质序列进行注释

目的蛋白质序列常常是全基因组的预测蛋白。比如其文件名为species_protein.fasta.CAZyme注释过程为:

$ hmmpress dbCAN-fam-HMMs.txt
$ hmmscan dbCAN-fam-HMMs.txt species_protein.fasta > CAZyme_species.dbCAN
$ sh hmmscan-parser.sh CAZyme_species.dbCAN > CAZyme_species.annot

程序很快运行完毕,CAZyme的注释结果文件为CAZyme_species.annot。

4. 结果文件

CAZyme_species.annot的文件内容如下:

scaffold_1.30   GH28.hmm        1.5e-58 9       308     60      361     0.92
scaffold_1.30.1 GH28.hmm        1.5e-58 9       308     60      361     0.92
scaffold_1.90   GT32.hmm        1.2e-23 2       87      81      161     0.944444444444444
scaffold_1.94   GH18.hmm        3.5e-64 5       288     127     486     0.956081081081081
scaffold_10.18  GH105.hmm       1.1e-84 14      332     49      392     0.957831325301205
scaffold_10.20  CBM1.hmm        9.1e-14 1       29      26      54      0.96551724137931
scaffold_100.3  GT15.hmm        4.5e-126        1       272     75      345     0.992673992673993
scaffold_100.3.1        GT15.hmm        5.4e-105        1       240     75      313     0.875457875457875
scaffold_100.4  GT15.hmm        1.4e-128        1       272     70      340     0.992673992673993

每一列的描述为:蛋白质序列名称,所属家族,E-value,hmm模型匹配起始,hmm模型的匹配结束,查询序列起始,查询序列结束,覆盖度。

贝叶斯法构建进化树:MrBayes

1. 简介

使用贝叶斯法构建进化树的软件有很多。在这里简要介绍MrBayes的安装和使用。以下介绍是对几种贝叶斯法构建进化树软件的简介:

MrBayes is a program for Bayesian inference and model choice across a wide range of phylogenetic and evolutionary models. MrBayes uses Markov chain Monte Carlo (MCMC) methods to estimate the posterior distribution of model parameters.

BAMBE A nice program by Bret Larget and Donald Simon for the Bayesian inference of phylogeny.

Mac5 A program by Paul-Michael Agapow that deals with gaps as a fifth state.

Beast BEAST, written by Alexei Drummond and Andrew Rambaut, is a cross-platform program for Bayesian MCMC analysis of molecular sequences. It is particularly good for molecular clock analyses.

PHASE Paul Higgs is the author of Phase, designed specifically for use with RNA sequences that have a conserved secondary structure, e.g. rRNA and tRNA.

2. MrBayes的安装

通过MrByes官网:http://mrbayes.sourceforge.net/来下载MrBayes软件并安装。软件包中有其PDF格式的Manual。在windows系统下的MrBayes不能支持多线程运行,在Linux下则能很好地进行并行运算。

MrBayes的安装过程需要注意:其src文件夹的源码文件中有个名为CompileInstructions.txt的文件,介绍了如何进行软件的安装。

$ sudo yum install openmpi* mpi*
$ wget http://sourceforge.net/projects/mrbayes/files/latest/download?source=files
$ tar zxf mrbayes-3.*.*.tar.gz
$ cd mrbayes_3.*.*/src
$ autoconf
$ ./configure --with-beagle=no --enable-mpi=yes
$ make -j 8
$ sudo cp mb /usr/local/bin  (optional)

以下是使用MrBayes的指令,单线程或多线程运行MrBayes.

$ ./mb
$ cat > ~/.mpd.conf
MPD_SECRETWORD=mr45-j9z
$ chmod 600 ~/.mpd.conf
$ mpd &
$ mpirun -np 8 ./mb
                            MrBayes v3.2.1 x64

                      (Bayesian Analysis of Phylogeny)

                             (Parallel version)
                         (24 processors available)

              Distributed under the GNU General Public License

               Type "help" or "help " for information
                     on the commands that are available.

                   Type "about" for authorship and general
                       information about the program.

MrBayes >

附加使用心得

1. 使用多线程版本得到的树状图和单线程版本的树状图完全不一样,差别太大。多线程版本的树状图完全是所有的分支都集合到一个点上,而单线程的就正常了。这可能是由于不会使用多线程运行MrBayes的原因 或 软件在多线程下的运算方法不好(可能性很小)

2. 在使用MrBayes 3.2.1版本中,发现默认下得出的tree文件中在treeview软件中显现不出后验概率,而3.1.2版本有。

3. 但是在64位的Linux系统中使用3.1.2版本总是会Crash (core dumped)。幸好在此网页中找到了解决方法:Bioinformatics applications at University of Canterbury HPC

需要对Mrbayes安装包中多个文件进行修改,方法就是打个补丁:mb_64bit_safe.patch,再以64位的参数来make。步骤如下:

$ wget http://sourceforge.net/projects/mrbayes/files/mrbayes/3.1.2/mrbayes-3.1.2.tar.gz
$ tar zxf mrbayes-3.1.2.tar.gz
$ cd mrbayes-3.1.2
$ wget https://technical.bestgrid.org/images/7/73/Mb_64bit-safe.patch.txt
$ patch -R -p 1 < Mb_64bit-safe.patch.txt
$ OBJECT_MODE=64 make _64BIT=yes

至此,则运行MrBayes正常了。

3. MrBayes的简单教程

3.1 使用MrBayes来做一个典型的 Bayesian phylogenetic analysis,包括4个步骤:

a. Read the Nexus data file
b. Set the evolutionary model
c. Run the analysis
d. Summarize the samples

3.2 MrBayes分步演示

1. 导入nex文件.本案例使用多线程运行的演示,使用24个CPU运行程序。

$ mpd &
$ mpirun -np 24 mb
MrBayes > execute example.nex

2. 设置进化模型参数.本例中设定数据为DNA数据.

MrBayes > lset nst=6 rates=invgamma

3.1 主程序运行。
以下命令中nchains的值要 >= 设置使用CPU数。在单线程运行的时候可以不需要设置,而在多线程运行的时候不设置则会报错;ngen则是运行的长度,默认1,000,000次;samplefreq则是取样频率,每隔多少次运行次数取一次样;printfreq是打印频率,即每运行多少次将打印一行结果到屏幕上,默认为500;diagnfreq则代表每运行多少次分析一次结果,得出 Average standard deviation of split frequencies,默认是5,000.

运行时,会在输出到屏幕的最后一列看到预测的程序剩余运行时间。

MrBayes > mcmc nchains=24 ngen=2000000 samplefreq=1000 printfreq=500 diagnfreq=5000

3.2 如果在设定的代数运行完毕后,给出的 Average standard deviation of split frequencies的值小于0.01,则根据提示输入‘no'来停止运行,反之则输入'yes'继续运行直到满足其值小于0.01为止。

If you are intersted mainly in the well-supported parts of the tree, a standard deviation below 0.05 may be adequate.

4.1 使用sump来对参数值进行归纳。设置的burnin值为 (ngen / samplefreq) * 0.25 。程序给出一个概括的表,要确保PSRF一列中的值接近 1.0,否则需要运行该多的代数。

MrBayes > sump burnin=500

4.2 使用sumt来构树。burnin值和前一个相同

MrBayes > sumt burnin=500

4. 详细的MrBayes使用教程

4.1 将数据导入到MrBayes

MrBayes导入的数据为Nexus文件,该文件可以有4中数据类型:aligned nucleotide or amino acid sequences, morphological ("standard") data, restriction site (binary) data。Nexus文件中可以混合有这4种数据。

Nexus数据文件通常由其它程序产生,比如 Mesquite。文件以 nex 为后缀。

使用 execute fielenameexe filename将文件中的数据导入到MrBayes中。

4.2 指定模型