使用 SpliceGrapher 进行可变剪接分析

1. SpliceGrapher 简介

SpliceGrapher 主要用于使用 RNA-Seq 数据对已有的基因模型进行可变剪接分析,并能给出图形结果。此外, SpliceGrapher 也能接受 EST 数据作为输入。由于使用 Sam 文件作为输入,其可变剪接分析结果比较全面准确。
SpliceGraper 的使用说明非常详细,具体请见:http://splicegrapher.sourceforge.net/userguide.html

2. SpliceGrapher 下载与安装

安装 SpliceGrapher

$ wget http://cznic.dl.sourceforge.net/project/splicegrapher/SpliceGrapher-0.2.4.tgz
$ tar zxf SpliceGrapher-0.2.4.tgz -C /opt/biosoft/
$ cd /opt/biosoft/SpliceGrapher-0.2.4
$ python setup.py build
$ sudo python setup.py install

检测 SpliceGrapher 是否安装成功以及能否正常运行
$ python
>>> import SpliceGrapher
>>> SpliceGrapher.__version__
'0.2.4'
$ cd examples
$ sh run_tests.sh

此外,SpliceGrapher有较多的步骤,根据需要来决定是否运行相应的步骤。这些步骤的正常运行需要安装一些其他软件。
创建剪接位点(splice sites)模型文件时,需要安装 PyML 0.7.9或以上版本。

$ wget http://downloads.sourceforge.net/project/pyml/PyML-0.7.13.3.tar.gz
$ tar zxf PyML-0.7.13.3.tar.gz
$ cd PyML-0.7.13.3
$ python setup.py build
$ sudo python setup.py install

如果需要使用 Bam 文件,则需要安装 Pysam 0.5或以上版本。由于 Pysam 将代码放置于 google 上,因此国内无法下载。Pysam 只是 python 版本的 samtools,因此,自行使用 samtools 将 Bam 文件转换成 Sam 文件即可。

当使用 PSGInfer pipeline 进行可变剪接转录子预测的时候,需要安装 PSGInfer 1.1.3或以上版本

$ wget deweylab.biostat.wisc.edu/psginfer/psginfer-1.1.3.tar.gz
$ tar zxf psginfer-1.1.3.tar.gz -C /opt/biosoft
$ echo 'PATH=$PATH:/opt/biosoft/psginfer-1.1.3' >> ~/.bashrc

当使用 IsoLasso Pipeline 进行可变剪接转录子预测的时候,需要 UCSC 的 gtfToGenePred genePredToBed 程序,以及 IsoLasso 2.6.1或以上版本。

$ wget http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/gtfToGenePred
$ wget http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/genePredToBed

安装 Isolasso 前需要依赖 GSL(http://www.gnu.org/s/gsl/) and CGAL(http://www.cgal.org/) library支持
使用 yum 安装 gsl
$ sudo yum install gsl*
在 Isolasso 中带有 CGAL,但是需要 libboost_thread.so.1.42.0 支持,需要安装 boost C++ library
$ wget http://sourceforge.net/projects/boost/files/latest/download?source=files
$ tar zxf boost_1_57_0.tar.gz
$ cd boost_1_57_0
$ ./bootstrap.sh 
$ ./b2 -j 8
$ sudo ./b2 install
$ sudo ln -s /usr/local/lib/libboost_thread.so.1.57.0 /usr/local/lib/libboost_thread.so.1.42.0
安装 Isolasso
$ wget http://alumni.cs.ucr.edu/~liw/isolasso-2.6.1.tar.gz
$ tar zxf isolasso-2.6.1.tar.gz -C /opt/biosoft
$ cd /opt/biosoft/isolasso/src
$ export CXXFLAGS="$CXXFLAGS -I/opt/biosoft/isolasso/src/isolassocpp/CGAL/include -L/opt/biosoft/isolasso/src/isolassocpp/CGAL/lib"
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/biosoft/isolasso/src/isolassocpp/CGAL/lib/
$ make
$ echo 'PATH=$PATH:/opt/biosoft/isolasso/bin/' >> ~/.bashrc
程序运行时需要 CGAL library 支持,将之copy到系统能识别的路径中。
$ sudo cp isolassocpp/CGAL/lib/libCGAL.so* /usr/local/lib/
$ sudo cp isolassocpp/CGAL/include/* /usr/local/include/ -r

3. SpliceGrapher 的使用

SpliceGrapher 是的使用其实是运行一些 python 程序,这些 python 程序的输入文件大都包含两个文件: 基因组fasta文件(genome.fasta)和基因模型文件(geneModels.gff3)。
此处讲解 SpliceGrapher 的使用,使用了 RNA-Seq 数据用于可变剪接预测,在当前工作目录下有如下文件作为输入:

$ ls
genome.fasta geneModels.gff3 reads.1.fastq reads.2.fastq tophat.bam

有些转录组数据量较大,推荐使用 Trinity 进行标准化后的数据。

由于多个 python 程序都需要 genome.fasta 和 geneModels.gff3 作为输入,因此,软件接受 Linux 环境变量指定这两个文件的路径,或单独使用 -f 和 -m 参数接受基因组文件和基因模型文件的输入。
使用如下命令来进行环境变量设置,有利于后续程序的简单运行。

$ export SG_FASTA_REF=$PWD/genome.fasta
$ export SG_GENE_MODEL=$PWD/geneModels.gff3

3.1 创建剪接位点模型文件 (Create Splice Site Classifiers)

以下命令是运行 build_classifiers.py 来创建剪接位点模型,用于鉴定 GT-AG/GC-AG/AT-AC 位点。一般物种的剪接位点主要是 GT-AG/GC-AG,使用参数 -d gt,gc 即可。

$ mkdir 1.create_classifiers
$ cd 1.create_classifiers
$ build_classifiers.py -d gt,gc,at -a ag,ac -l create_classifiers.log

程序运行完毕,查看模型的 ROC scores
$ grep roc *.cfg
得到的 donor 的分数一般是 0.9 以上,比 acceptor 的分数要高。

build_classifiers.py 程序首先调用 generate_splice_site_data.py 生成用于 training 的序列,再调用 select_model_parameters.py 生成模型文件。
本步骤的主要结果文件是 classifiers.zip 。
运行 build_classifiers.py 命令一步到位,生成模型文件 classifiers.zip。若需要更加准确的模型文件,则参考软件的使用说明分步选择更好的参数运行。

3.2 过滤 RNA-Seq reads 的比对结果 (Filter Alignment)

使用上一步的模型文件,对 RNA-Seq 的比对结果进行过滤。

$ mkdir ../2.filter_alignments
$ cd ../2.filter_alignments
$ samtools view -h ../tophat.bam > tophat.sam
$ ln -s ../1.create_classifiers/classifiers.zip ./
$ sam_filter.py tophat.sam classifiers.zip -o filtered.sam -v

本步骤得到过滤后的比对结果文件 filtered.sam。

3.3 预测可变剪接 Graph (Predict splice graphs)

$ mkdir ../3.predict_graphs
$ cd ../3.predict_graphs
$ predict_graphs.py ../2.filter_alignments/filtered.sam -v

本步骤得到可变剪接 Graph。结果表现方式为: 默认再当前目录下生成许多的文件夹,每个文件夹以 chromosome 名称的小写字母作为文件名;每个文件夹下有很多 GFF 文件,每个 GFF 文件以 gene model 的大写字母作为文件名前缀; 每个 GFF 的内容即为 Graph 的文本形式,注意其格式不是真正的 GFF 文件格式。

由于 predict_graphs.py 为单线程运行。如果基因组较大,基因模型较多,或 Sam 文件较大,则运行时间极长。可以考虑将文件以染色体为单元进行分割,然后并行运算:

$ sam_collate.py ../2.filter_alignments/filtered.sam
$ for i in `ls *.sam`
do
    echo "predict_graphs.py $i" >> command.predict_graphs.list
done
$ ParaFly -c command.predict_graphs.list -CPU 24

此外, 快速运行的另外一种方法是:将 sam 文件转变成 depths 文件,再用于可变剪接预测。

$ sam_to_depths.py ../2.filter_alignments/filtered.sam -o filtered.depths
$ predict_graphs.py filtered.depths -v

3.3 重新比对 RNA-Seq reads 来对可变剪接 Graphs 进行更新 (Realignment RNA-seq reads)

SpliceGraper 进行可变剪接预测可能得到一些新的 exons, 其中可能包含一些错误的 exon。因此,根据上一步的结果提取 putative transcripts,然后使用 BWA 将 RNA-Seq reads 比对上去,验证 realigned reads 能否完全覆盖新的 exon 及其边界,从而对可变剪接的预测结果进行了更新。

$ mkdir ../4.realignment_pipeline
$ cd ../4.realignment_pipeline
$ realignment_pipeline.py ../3.predict_graphs/ -1 ../reads.1.fatsq -2 ../reads.2.fastq -v

本步骤得到的主要结果为更新后的可变剪接 Graphs,其结果的呈现方式和上一步骤一样。

3.4 可变剪接转录子预测 (Transcript Prediction Pipelines)

SpliceGrapher 提供了 2 种方法进行可变剪接转录子的预测: PSGInfer Pipeline 或 IsoLasso Pipeline。前者的输入文件是 fastq 文件,后者的输入文件是 Sam 文件。这两种方法都需要上一步骤的结果文件夹作为输入。

3.4.1 PSGInfer Pipeline

使用 PSGInfer pipeline 进行可变剪接转录子预测的时候,需要安装 PSGInfer 1.1.3或以上版本。

$ mkdir ../5.Transcript_Prediction
$ psginfer_pipeline.py ../4.realignment_pipeline ../reads.1.fatsq ../reads.2.fastq -d psginfer -l psginfer.log

3.4.2 Isoasso Pipeline

使用 IsoLasso Pipeline 进行可变剪接转录子预测的时候,需要 UCSC 的 gtfToGenePred genePredToBed 程序,以及 IsoLasso 2.6.1或以上版本。

Isolasso 提供了两种算法,使用 CEM 算法则开启 -C 参数。
$ isolasso_pipeline.py ../4.realignment_pipeline ../2.filter_alignments/filtered.sam -t 1.00 -d isolasso_PSG -v
$ isolasso_pipeline.py ../4.realignment_pipeline ../2.filter_alignments/filtered.sam -t 1.00 -Cd isolasso_CEM -v

值得注意的是,软件在chromosome名称的大小写转换上存在bug,导致生成的 bed 格式文件的 chromosome 名称错误,从而使结果不正确。最好了解 Isolasso 软件的使用从而分步运行。
$ generate_putative_sequences.py ../4.realignment_pipeline/.lis -A -f $SG_FASTA_REF -M _forms.gtf -m _forms.map
$ gtfToGenePred _forms.gtf stdout | genePredToBed | sort -k1,1 -k2,2n > _forms.bed
修改 bed 文件中的 chromosome 名称,例如:
$ perl -p -i -e 's/Le01scaffold/LE01Scaffold/' _forms.bed
$ runlasso.py -x _forms.bed --forceref  -o isolasso_PSG ../2.filter_alignments/filtered.sam
$ isolasso_update_graphs.py ../4.realignment_pipeline/.lis _forms.map isolasso_PSG.pred.gtf -t 1.00 -d isolasso_PSG

3.4.3 GTF 转换为 GFF3

以上得到 GTF 的结果文件,一般需要将之转换为 GFF3 格式文件:

$ convert_models.py psginfer/putative_forms.gtf -gff3=spliceGrapher.gff3

3.5 可变剪接图形文件制作

此部分暂时掠过

GPU blast 的安装与使用

1. 安装 Nvidia 显卡驱动

安装 Nvidia 显卡驱动,得要禁用 CentOS 默认的 nouveau 驱动,然后安装 Nvidia 驱动

下载显卡驱动
# wget  http://cn.download.nvidia.com/XFree86/Linux-x86_64/340.65/NVIDIA-Linux-x86_64-340.65.run

禁用 Nvidia 显卡驱动
# echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

备份并重建系统引导的 image 文件
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut -v /boot/initramfs-$(uname -r).img $(uname -r)

重启后在 init3 模式下安装显卡驱动
# init 3
# sh NVIDIA-Linux-x86_64-340.65.run

2. 检测显卡性能参数

推荐使用 CUDA-Z 来检测显卡性能参数。正常使用 CUDA-Z 需要依赖一些库文件和 GCC 。

$ wget http://downloads.sourceforge.net/project/cuda-z/cuda-z/0.9/CUDA-Z-0.9.231.run
$ mv CUDA-Z-0.9.231.run ~/bin/CUDA-Z

运行 CUDA-Z 前安装如下一些系统软件
$ sudo yum install libXrender*
$ sudo yum install libXrender*i686*
$ sudo yum install libXext*
$ sudo yum install libXext*i686*
$ sudo yum install libz*
$ sudo yum install libz*i686*
将 GCC 的库文件路径设置正确
$ export C_INCLUDE_PATH=/opt/gcc-4.7.2/include
$ export LD_LIBRARY_PATH=/opt/gcc-4.7.2/lib64:/opt/gcc-4.7.2/lib

运行 CUDA-Z 图形化界面,界面和 windows 下的 CPU-Z 一致。
$ CUDA-Z

显卡一些高级常识,例如:
我的笔记本电脑 GTX570M 显卡: 该 GPU 有 7个 SM,每个 SM 有 48 个 SP,每个 SP 有 32 个 warp; SP 称为流处理器,该值越大,则显卡性能越好; warp 是最小的硬件执行单位,则该显卡最大的线程数是 7*48*32=10752。
SM 之间可以理解是物理隔绝的,不同的 SM 的计算是独立的。将数据用显卡进行计算时,进行并行计算时,我个人理解成这样: 把运行的程序做成很多小份进行并行计算;所有的并行计算的总体称为 Grid,并行运算的最小单元为 thread;gpu-blast在默认设置中,将 64 个 threads 合并为 1 个 block,因此 1 个 block 的运行需要 2 个 SP 进行运算;gpu-blast在默认设置中,运行一个程序,将之分割成 521 个 blocks, 这 512 个 blocks 则需要 1024 个 SP 进行运算,可以达到最快的运算速度。所以,如果 GPU 的 SP 总数超过 1024, 则不能完全发挥显卡的性能。
对于 GTX570M 显卡,我设置 gpu-blast 的参数 -gpu_threads 32 -gpu_blocks 336 我觉得是比较好的。这样,将 blast 程序分割为 336 个 blocks 进行并行计算;将所有的 block 分配给所有的 SP ,刚好每个 SP 都运行 32 线程。但实际上,使用 gpu-blast 默认的参数也更好地发挥显卡性能,我个人实验结果是,-gpu_threads 128 -gpu_blocks 512 的结果更加不错。

3. 安装 CUDA Toolkits

CUDA 的下载网址: https://developer.nvidia.com/cuda-downloads

$ wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run
$ sudo init 3
# sh cuda_6.5.14_linux_64.run

4. 安装 GPU-Blast

GPU-Blast官网: http://archimedes.cheme.cmu.edu/?q=gpublast
GPU-Blast 提供的最高 blast 版本是 2.2.28 版本,需要 ncbi-blast 同版本源码文件支持。

$ mkdir /opt/biosoft/gpu_blast
$ cd /opt/biosoft/gpu_blast

从源码包安装 ncbi-blast 2.2.28 版本(此步骤可选)
$ wget ftp://ftp.ncbi.nih.gov/blast/executables/blast+/2.2.28/ncbi-blast-2.2.28+-src.tar.gz
$ tar zxf ncbi-blast-2.2.28+-src.tar.gz
$ cd ncbi-blast-2.2.28+-src/c++
$ ./configure && make -j 8 

安装 GPU-Blast 前需要将 CUDA Toolkits 的库文件与头文件加入到能识别的路径
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ echo 'export C_INCLUDE_PATH=/usr/local/cuda/include/:$C_INCLUDE_PATH' >> ~/.bashrc
$ source ~/.bashrc

下载并安装 GPU-Blast
$ wget http://eudoxus.cheme.cmu.edu/gpublast/gpu-blast-1.1_ncbi-blast-2.2.28.tar.gz 
$ tar zxf gpu-blast-1.1_ncbi-blast-2.2.28.tar.gz
$ perl -p -i -e 's/LATEST/2.2.28/' install
$ perl -p -i -e 's/make /make -j /' install
$ ./install
Do you want to install GPU-BLAST on an existing installation of "blastp" [yes/no]
如果输入 no 则会自动下载 ncbi-blast-2.2.28+-src.tar.gz,并进行安装,需要做上述修改,否则下载地址不正确。同时,默认下 make 编译是单线程运行,加入 -j 参数来并行运算,从而加快编译速度。
如果选择 yes,则需要输入 blastp 的路径,该路径是 blastp 的编译后所在的路径,而不是安装路径。输入 /opt/biosoft/gpu_blast/ncbi-blast-2.2.28+-src/c++/GCC447-Debug64/bin/ , 按 Enter 进行安装。

安装完毕后,将程序文件所在路径加入环境变量 PATH
$ ln -s ncbi-blast-2.2.28+-src/c++/GCC447-ReleaseMT64/bin/ bin
$ echo 'PATH=$PATH:/opt/biosoft/gpu_blast/bin' >> ~/.bashrc
$ source ~/.bashrc

安装完毕后,程序文件位于

4. 运行 GPU-Blast

以 Swissprot 数据库为例:

首先,以 fasta 文件构建 blast 数据库,需要加入 -sort_volumes 参数
$ makeblastdb -dbtype prot -in uniprot_sprot.fasta -out uniprot_sprot -sort_volumes -max_file_sz 500MB

然后,在普通 blast 数据库基础上构建 gpu 数据库。使用 -method 2 参数生成 gpu 数据库文件
$ blastp -db uniprot_sprot -query test.fa -gpu t -method 2

再使用 -gpu t 运用 gpu_blast,否则是单纯用 CPU 进行计算
$ blastp -db uniprot_sprot -query test.fa -gpu t

使用 gpu_blast 确实能加快速度,在软件的示例中,在 -num_threads 2 下,GPU 有 2.5 倍的加速。
我的使用经验: 对 40 条蛋白序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 8, gpu_blast 耗时 1m41.053s, cpu_blast 耗时 0m52.264s; 对 8 条蛋白质序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 2,gpu_blast 耗时 0m7.892s, cpu_blast 耗时 0m12.717s;对同样 8 条蛋白质序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 8,gpu_blast 耗时 0m5.288s, cpu_blast 耗时 0m5.836s;
个人使用感觉: 虽然有 GPU 加速,但是依然需要耗费大量 CPU,而不是只运用了 GPU 进行计算; 如果 CPU 本身运行速度较快的时候,使用 GPU 加速的比率则较低了。

对转录组数据进行质量控制分析

1. 转录组数据质量控制分析的内容

主要包含几个方面:

1. 测序数据的质量控制,推荐使用 Trimmomatic 对低质量数据进行截除;
2. 是否是链特异性测序,以及链特异性测序的种类;
3. 转录组数据对参考基因组的匹配情况,包括分析匹配到基因内或基因间区的数据量;
4. 转录组数据中 rRNA 数据含量;
5. 转录子从 5' 到 3' 端的覆盖度分析;
6. 转录组测序数据量的饱和度分析。

本文主要讲解后面 4 个内容的分析方法。

2. 使用 RNA-SeQC

下载 RNA-SeQC 及其说明文档

$ wget http://www.broadinstitute.org/cancer/cga/tools/rnaseqc/RNA-SeQC_v1.1.8.jar
$ wget http://www.broadinstitute.org/cancer/cga/sites/default/files/data/tools/rnaseqc/RNA-SeQC_Help_v1.1.2.pdf

程序运行需求的输入文件:

genome.fasta        基因组的序列文件,同时需要有相应的 .fai 和 .dict 文件。
genome.gtf          基因组注释文件,该软件仅支持 GTF 格式。标准的 gtf 文件必须有 start_codon, stop_codon 和 CDS 内容,但本软件要求 gtf 文件必须还含有 exon 内容。
accepted_hits.bam   转录组数据比对到基因组的结果,例如 tophat 的结果。此 bam 文件必须含有 RG 参数。
rRNA.fasa           rRNA 序列,用于计算 rRNA 测序数据含量。此文件不是必须的。
rRNA_intervals.list rRNA 的结构信息文件,每行以 "chromosome_id:start-end" 信息表示 rRNA 结构。此文件不是必须的。但和上一个文件必须要二选一。

准备输入文件

得到基因组的 .fai 和 .dict 文件
$ samtools faidx genome.fasta
$ java -jar /opt/biosoft/picard-tools-1.95/CreateSequenceDictionary.jar R=genome.fasta O=genome.dict

若运行 tophat 没有输入 RG 参数,则运行下面命令得到 RG 参数
$ java -jar /opt/biosoft/picard-tools-1.95/AddOrReplaceReadGroups.jar I=accepted_hits.bam O=accepted_hits.RG.bam ID=A1 LB=A1 PL=ILLUMINA SM=A1 PU=run

若仅有 GFF3 文件,没有标准的 GTF 文件,需要自己编写程序进行转换
$ gff3ToGtf.pl genome.fasa genome.gff3 > genome.gtf
$ perl -p -i -e 's/^\s*$//' genome.gtf
若不去除 genome.gtf 文件中的空行,则会出现错误提示: No attributes were found in the GTF file on line 。

运行 RNA-SeQC 命令

对一个数据运行 RNA-SeQC,并结果输出到制定文件夹
$ java -jar RNA-SeQC_v1.1.8.jar -o A1 -r genome.fasta -s "A1|accepted_hits.RG.bam|A1_note" -t genome.gtf -BWArRNA rRNA.fasta

对多个数据运行 RNA-SeQC
$ echo -e "A1\tA1.bam\tA1_note
A2\tA2.bam\tA2_note
B1\tB1.bam\tB1_note
B2\tB2.bam\tB2_note" > samples.txt
$ java -jar RNA-SeQC_v1.1.8.jar -o rna-seqc_out -r genome.fasta -s samples.txt -t genome.gtf -BWArRNA rRNA.fasta

注意,多个数据运行 RNA-SeQC,输入的 samples.txt 文件内容为:
第一行信息为: "Sample ID\tBam File\tNotes", 这行头部会被忽略,仅起注释作用。
后面多行则为相关的信息,用3列表示,用tab分割,注意Bam文件必须为绝对路径。

使用 HISAT 将转录组数据 mapping 到基因组序列

1. HISAT 简介

HISAT:hical Indexing for Spliced Alignment of Transcripts。该软件和 tophat 开发于同一个单位,它相当于 tophat 的升级版,比对速度比 tophat2 快50倍。

2. HISAT 的下载和安装

$ wget http://www.ccb.jhu.edu/software/hisat/downloads/hisat-0.1.5-beta-Linux_x86_64.zip
$ unzip hisat-0.1.5-beta-Linux_x86_64.zip -d /opt/biosoft/
$ echo 'PATH=$PATH:/opt/biosoft/hisat-0.1.5-beta/' >> ~/.bashrc
$ source ~/.bahsrc

2. HISAT 使用

2.1 构建索引文件
$ hisat-build genome.fasta genome

2.2 进行比对 产用的命令与参数示例:

$ hisat -x genome -u 1000000 -p 24 -I 0 -X 500 --rna-strandness RF -1 reads.1.fastq -2 reads.2.fastq -U single.fastq -S result.sam 

hisat 与 bowtie2 的参数基本一致,常用的参数:

-x    输入索引数据库
-1    输入 reads1
-2    输入 reads2
-U    输入单段序列
-u    仅对前多少个reads进行比对
-I    最小插入片段长度
-X    最大插入片段长度
-S    输出sam文件
--rna-strandness 链特异性测序,一般为 RF
-k    一个reads比对到多个地方,报告几个结果,默认为 5 。

使用 r8s 估算物种分歧时间

1. r8s 简介

r8s用于通过系统发育树估计分歧时间和分子演化速率。
软件运行需要:

一个带有枝长的有根树;
比对的序列长度。

2. r8s 下载与安装

$ wget http://loco.biosci.arizona.edu/r8s/r8s.dist.tgz
$ tar zxf r8s.dist.tgz -C /opt/biosoft/
$ mv /opt/biosoft/dist /opt/biosoft/r8s
$ echo 'PATH=$PATH:/opt/biosoft/r8s/' >> ~/.bashrx
$ source ~/.bashrc

2. r8s 的使用

软件解压缩后,其中带有一个 mannual 的 PDF 文件。

2.1 r8s 的使用方法

直接输入命令 r8s 则会进入该软件的命令行界面,推荐编写了 r8s 的脚本文件后,直接运行。运行 r8s 的方式如下:

$ r8s -b -f r8s_in.txt > r8s_out.txt

-b    运行 r8s 后推出软件的命令行界面
-f    输入的 r8s 脚本文件,该文件包含 r8s 的命令行

r8s_in.txt 的一个示例如下:

#nexus
begin trees;
tree tree_1 = [&R] ((gluc:0.46,cneg:0.54):4.3,(scer:1.07,tree:0.68):0.52);
end;

begin r8s;
blformat lengths=persite nsites=300000 ulrametric=no;
MRCA asc tree scer;
MRCA bas gluc cneg;
fixage taxon=asc age=520;
constrain taxon=bas min_age=350 max_age=410;
#divtime method=PL crossv=yes cvstart=0 cvinc=1 cvnum=18;
set smoothing=100;
divtime method=PL algorithm=TN;
showage;
describe plot=cladogram;
describe plot=chrono_description;
end;

按照上述示例中,第一部分是输入进化树数据;第二部分是运行 r8s 的命令。

2.2 r8s 命令

按照上述示例,需要依次输入上面的 r8s 命令:

blformat

length      设置树的枝长单位。若枝长单位是位点替换率,则其值为 persize,则 枝长 * 序列长度 = 替换数;若枝长单位是替换数,则该参数值为 total。默认参数是 total。
nsites      设置多序列比对的序列长度。
ultrametric 是否是超度量树,一般进化树选 no。默认参数是 no。

MRCA

该命令用来设置内部节点名。示例中设置了 tree 和 scer 的 most recent common ancestor 的节点名为 asc。

fixage

该命令用来设置 MRCA 指定的节点的分歧时间,使用该指定的分歧时间作为校正,来预测其它节点的分歧时间。
r8s 需要至少有一个内部节点进行 fixage。

constrain

该命令用来约束 MRCA 指定的节点的分歧时间,设置该节点允许的最大或最小分歧时间。

divtime

该命令用来进行分歧时间和替换速率计算。总共有 4 种计算方法(LF | NPRS | PL)和 3 种数学算法(Powell | TN | QNEWT)。 一般常用且较优,是使用 PL 和 TN。
但是使用 PL 方法,则需要设置参数 smoothing 的值。 通过设置多个 smoothing 的值来进行一些计算,选择最优的值即可。一般情况下,该值位于 1~1000 能得到一个最佳(最低)的分值。

divtime method=PL crossv=yes cvstart=0 cvinc=1 cvnum=18;
上述命令,是设置 smoothing 的值从 1, 10, 100, 1000 ... 1e17, 来计算,最后得到最佳的 smoothing 值。

若使用 fixage 对 2 个节点的分歧时间进行了固定,则可以运行命令:
divtime method=PL crossv=yes fossilfixed=yes cvstart=0 cvinc=1 cvnum=18;

若使用 fixage 对 1 个节点进行分歧时间固定,同时使用 constrain 对 2 个节点进行了约束,则可以运行命令:
divtime method=PL crossv=yes fossilconstrained=yes cvstart=0 cvinc=1 cvnum=18;

得到最优的 smoothing 值后,使用 set 进行设置,然后运行 divtime 进行分歧时间和替换速率的计算。

showage

使用该命令能得到各个节点的分歧时间和替换速率。

describe

使用该命令得到进化树的图和文字结果。 其 plot 参数如下:

cladogram    得到分支树的图,图上有各个节点的编号,和 showage 的结果结合观察。
phylogram    得到进化树的图,枝长表示替换数。
chronogram   得到超度量树的图,枝长表示时间。
ratogram     得到树图,枝长表示替换速率。

phylo_description     得到树的ASCII文字结果,枝长表示替换数。
chrono_description    得到树的ASCII文字结果,枝长表示时间。
rato_description      得到树的ASCII文字结果,枝长表示替换速率。

node_info    得到节点的信息表格

使用 CAFE 进行基因家族扩张分析

1. CAFE 简介

CAFE (Computational Analysis of gene Family Evolution) 用于进行基因家族的扩张收缩分析。

2. CAFE 下载和安装

$ wget http://heanet.dl.sourceforge.net/project/cafehahnlab/cafe.linux.x86_64
$ wget http://downloads.sourceforge.net/project/cafehahnlab/CAFEv3.1_Manual.pdf
$ wget http://downloads.sourceforge.net/project/cafehahnlab/CAFEv3.1_Manual.doc
$ mv cafe.linux.x86_64 ~/bin/cafe
$ cafe

3. CAFE 的简单使用

CAFE 需要的输入:

1. 基因家族在各个物种中的数目。该文件内容有多行,以 tab 分割,第一行内容必须如下:
Description    ID    species1    species2    ...
上面 species1 和 species2 为物种名简称。后面的行为相应的值。 Description 的值可以空着; ID 为基因家族的名称;其它的为数字,表示该基因家族在相应物种中的数目。
该文件可以由 OrthoMCL 的结果统计得到。

2. 超度量树,枝长表示分歧时间。可以使用 BEAST 或 r8s 等生成。树中的物种名必须和第一个文件中的物种名对应。

3. 输入参数  λ 的值。该值表示在物种进化过程中,每个单位时间内基因获得与丢失的概率。可以由软件自己进行计算。

直接输入命令 cafe 则进入了软件的命令行界面,也可以将命令写入到 cafe 脚本中,直接运行。一个简单的示例如下:

#!~/bin/cafe
version
date
load -i orthoMCL2cafe.tab -t 16 -l log.txt -p 0.05
tree (((chimp:6,human:6):81,(mouse:17,rat:17):70):6,dog:93)
lambda -s -t (((1,1)1,(2,2)2)2,2)
report out

以下简单介绍如上命令

version
    显示软件的版本

date
    显示当前日期

load
    -i 输入的数据文件
    -t 设置程序运行的线程数,默认为 8
    -l 设置输出的日志文件,默认标准输出
    -p 设置 p_value 的阈值,默认为 0.01

tree 输入超度量树

lambda
    -l 设置 λ 的值
    -s 设置软件自动寻找最优的 λ 值
    -t 默认下所有分支的 λ 值是相同的,若需要不同的分支有不同的 λ 值,则用该参数进行设置。该参数的值和 tree 命令中的树的内容一致,只是去除了分歧时间,并将物种名换成了表示 λ 值的编号。其中,相同的编号表示有相同的 λ 值。例如,该参数的值为 (((1,1)1,(2,2)2)2,2) ,它表示 chimp,human 和 紧邻的分支有相同的 λ 值,其它分支有另外相同的 λ 值。

report out
    设置输出文件的前缀为 out

4. CAFE 的输出结果

CAFE 的输出结果为 out.cafe,该文件内容包含如下几部分:

4.1 Tree

第 1 行为输入的树的信息。

4.2 Lambda

第 2 行为 λ 值。

4.3 节点 ID

第 3 行为节点的 ID。同样是树的文字内容,不过给每个节点进行了编号,有利于后面的数值的对应。

4.4 每个基因家族中扩张或收缩的基因数目

第 4 行给出了一系列的 节点ID 对。CAFE 对这些 ID 对进行了基因家族扩张的统计。
第 6 行的值为平均每个基因家族中扩张的基因数目,负数表示基因家族收缩。

4.5 基因家族数目

第 7 行给出发生了扩张的基因家族数目;
第 8 行给出没有发生改变的基因家族数目;
第 9 行给出发生了收缩的基因家族数目;

4.6 每个基因家族的具体扩张与收缩情况

第 10 行之后是每个基因家族具体的扩张情况。其内容分为 4 列:

第 1 列: 基因家族 ID
第 2 列: 树的信息,其中每个物种名后面多个一个下划线和数字,该数字表示基因家族的数目。特别是每个节点的基因家族数目都计算出来了,从而知道在某一个分化过程中基因家族的扩张情况。
第 3 列: 该基因家族总体上的扩张情况的 p_value,不同物种中的基因数目差异越大,则 p 值越小。
第 4 列: 计算出了每个分枝的基因家族扩张的显著性。

根据 CAFE 的结果,可以自行编写程序提取信息。

使用 SGA 进行基因组组装

1. SGA 简介

SGA (String Graph Assembler), 采用 String Grapher 的方法来进行基因组的组装。软件通过创建 FM-index/Burrows-Wheeler 索引来进行查找 short reads 之间的 overlaps, 从而进行基因组组装。
使用 SGA 的注意事项:

1. SGA 的输入文件为 fastq 文件,序列长度推荐为 100bp 及以上。较短的序列长度,则使用 De Bruijn 的方法进行组装能或得更好的基因组序列。
2. 使用 SGA 进行基因组组装需要最少 40X

2. SGA 安装

SGA 的安装与使用需要依赖 google-sparsehash, bamtools, zlib 和 jemalloc 等软件。

安装 goolge-sparsehash,由于国内屏蔽了google,无法下载该软件。
$ wget www.chenlianfu.com/public/software/sparsehash-2.0.2.tar.gz
$ tar zxf sparsehash-2.0.2.tar.gz
$ cd sparsehash-2.0.2
$ ./configure && make -j 8 && sudo make install

安装 bamtools
$ wget https://github.com/pezmaster31/bamtools/archive/master.zip -O bamtools.zip
$ unzip bamtools.zip
$ cd bamtools-master/
$ mkdir build; cd build
$ cmake ../
$ make -j 8
$ cd ../../
$ mv bamtools-master/ /opt/biosoft/bamtools

安装 jemalloc,可选,有利于减少运算时间。
$ wget https://github.com/jemalloc/jemalloc/archive/dev.zip -O jemalloc.zip
$ unzip jemalloc.zip
$ ./autogen.sh 
$ ./configure && make -j 8 && sudo make install
$ cd ../
$ mkdir /opt/biosoft/sga/
$ mv jemalloc-dev /opt/biosoft/sga/

安装 SGA
$ wget https://github.com/jts/sga/archive/master.zip -O sga.zip
$ unzip sga.zip
$ cd sga-master/src
$ ./autogen.sh
$ ./configure --with-bamtools=/opt/biosoft/bamtools --with-jemalloc=/opt/biosoft/sga/jemalloc-dev/lib/ --prefix=/opt/biosoft/sga/
$ make -j 8
$ make install
$ cd ..
$ mv * /opt/biosoft/sga/
$ echo 'PATH=/opt/biosoft/sga/bin/' >> ~/.bashrc
$ source ~/.bashrc

此外,如果需要使用程序附带的一些 python 程序,则需要安装一些 python 模块。
$ wget https://pypi.python.org/packages/source/r/ruffus/ruffus-2.6.3.tar.gz
$ tar zxf ruffus-2.6.3.tar.gz
$ cd ruffus-2.6.3
$ sudo python setup.py install

3. SGA 的使用

SGA 包含很多个命令,直接输入命令,即可得到帮助信息。
以 2 个 PE 文库和 2 个 MP 文库的测序数据为输入,使用 SGA 进行基因组组装,来介绍运行流程。
输入文件:

pe180.1.fastq    pe180.2.fastq
pe500.1.fastq    pe500.2.fastq
mp2000.1.fastq   mp2000.2.fastq
mp5000.1.fastq   mp5000.2.fastq

3.1 数据预处理

使用 preprocess 程序进行低质量数据的截短和删除,示例:

去除 PE 文库数据中含有 N 的reads。此处仅对需要进行 contig 组装的 PE 数据进行处理。
$ sga preprocess -o pe180.pp.fastq --pe-mode 1 pe180.1.fastq pe180.2.fastq
$ sga preprocess -o pe500.pp.fastq --pe-mode 1 pe500.1.fastq pe500.2.fastq

结果中 pp 表示 preprocess 的意思。
一般用其它软件进行 Fastq 文件的 QC,此处使用 preprocess 去除含有 N 的 reads 即可。由于软件后续有对 reads 的校正过程,因此不推荐对 reads 进行截短处理。

preprocess 命令参数:

sga preprocess [OPTION] READS1 READS2 ...

-o | --output FILE
    将输出数据写入到该文件中。默认输出到标准输出。程序仅得到一个输出文件。成对的数据用 /1 /2 标识出来并在输出文件中交叉排列。
-p | --pe-mode INT
    paired end 模式。 有 3 中模式,用数字 0, 1, 2 表示。
    0:表示认为输入数据都是单端数据;
    1:表示 READS1 中的数据和 READS2 中的数据是成对的,这种情况下若有一条 read 被去除,则对应的另外一条也会被去除;
    2:表示 reads 是成对的,可能该值适合于3个及以上文件作为输入(我没有用过)。
--pe-orphans FILE
    如果 read pair 中有一条序列被去除,则另外一条序列写入到此文件中。
--phred64
    加入该参数,表明输入的 fastq 文件为 phred64 格式,输出结果会转换成 phred33 格式。
--discard-quality
    不输出碱基质量。
-q | --quality-trim INT
    对低质量碱基进行 trim。
-f | --quality-filter INT
    对低质量 reads 进行去除。若 read 中碱基质量 <=3 的低质量碱基多余该值,则去除整条 read。
-m | --min-length INT
    去除长度低于此值的 read。
-h | --hard-clip INT
    将所有的 reads 长度截短到该值。
--permute-ambiguous
    将 reads 中的 N 随机替换为 ATCG 中的一种。
--dust
    去除低复杂度 reads 。
-dust-threshold FLOAT
    去除 dust score 高于此值的 reads。默认为 4.0 。
--suffix STRING
    在每个 read ID 后添加后缀。
--no-primer-check
    不进行 primer 序列检测
-r | --remove-adapter-fwd  STRING
    去除 adapter 序列,提供 adapter 序列的第一条链。
-c | --remove-adapter-rev STRING
    去除 adapter 序列,提供 adapter 序列的第二条链。

2. FM 索引构建与合并

使用 index 命令对 reads 数据构建索引。当使用多组数据进行 contig 组装的时候,使用 merge 对多组数据的索引进行合并。示例:

$ sga index -a ropebwt -t 8 --no-reverse pe180.pp.fastq
$ sga index -a ropebwt -t 8 --no-reverse pe500.pp.fastq

$ sga merge -t 8 -p pe -r pe180.pp.fastq pe500.pp.fastq

index 命令常用参数:

sga index [OPTION] ... READSFILE

-a | --algorithm STRING
    BWT 构建算法,有两种 sais (默认) 和 ropebwt。前者适合与较长的 reads;后者适合与较短的(<200bp) reads,但是速度快,消耗内存少。
-t | --threads INT
    运算的线程数。默认为 1 。
-p | --prefix
    指定输出文件前缀,默认为输入文件的前缀。
--no-reverse
    不生成反向序列的 BWT 文件。由于对测序数据进行校正的时候不许要该文件,一般加入该参数以节约资源。
--no-forward
    不生成正向序列的 BWT 文件。
--no-sai
    不生成 SAI 文件。

merge 命令常用参数:

sga merge [OPTION] ... READS1 READS2

-t | --threads INT
    运算的线程数。默认为 1 。
-p | --prefix 
    指定输出文件前缀,默认为输入文件的前缀。
-r | --remove
    生成合并后的 index 文件后,删除旧的 index 文件和 fastq 文件。

3. reads 的校正

使用 correct 命令对 reads 进行校正,示例:

$ sga correct -t 8 -k 41 -x 2 --learn -o pe.ec.fastq pe.fastq

correct 命令参数:

sga correct [OPTION] ... READSFILE

-p | --prefix STRING
    输入的 index 文件的前缀,默认为输入文件的前缀。
-o | --outfile STRING
    将校正后的数据写入到此文件中,默认输出的文件名为 READSFILE.ec.fa。虽然后缀是 fa,但其实是 fastq 文件。
-t | --threads INT
    运算的线程数。默认为 1 。
--discard
    检测并去除低质量 reads 。
-a | --algorithm STRING
    进行 reads correction 的算法。有 3 种:
    kmer: 使用 kmer 的方法进行校正,默认是该值;
    overlap:基于重叠的方法进行校正;
    hybrid:应该是同时上面 2 中方法进行校正。
--metrics FILE
    校正后,将 read 中每个位点的碱基错误率写入到该文件。

使用 kmer 方法进行校正的参数:
-k | --kerm-size INT
    选取的 kemr 长度,默认为 31 。
-x | --kmer-threshold INT
    对出现次数低于此值的 kmer 进行校正。默认为 3 。
-i | --kmer-rounds INT
    执行 N 轮校正,最多校正 N 个碱基。默认的 N 值为 10。
--learn
    程序自行计算 -x 的参数。若测序覆盖度低于 20x 或测序数据在基因组上的覆盖不均匀,则不适合选择该参数。

使用 overlap 方法进行校正的参数:
-e | --error-rate    default:0.04
    2 条 reads 有 overlap 时,允许的最大错误率。
-m | --min-overlap    default:45
    2 条 reads 重叠的最小碱基数。
-c | --conflict    default:5
    检测出一个错误碱基所需要的最小重叠数目。
-r | --rounds    default:1
    进行迭代校正的指定的次数。

4. reads 的过滤

去除数据中完全一模一样的 duplicate;去除含有低频 kmer 的 reads。示例:

需要先对校正过后的数据重新构建 index
$ sga index -a ropebwt -t 8 pe.ec.fastq

$ sga filter -x 2 -t 8 -o pe.ec.f.fastq --homopolymer-check --low-complexity-check pe.ec.fastq

filter 命令常用参数:

sga filter [OPTION] ... READSFILE

-o | --outfile STRING
    将校正后的数据写入到此文件中,默认输出的文件名为 READSFILE.filter.pass.fa 。
--no-duplicate-check
    不进行 duplicate removal
--no-kmer-check
    不进行 kmer check
--kmer-both-strand
    对 reads 的正负链都进行检测
--homopolymer-check
    检测单碱基连续情况
--low-complexity-check
    去除低重复 reads
-k | --kmer-size    default:27
    kmer 检测时所用的 kmer 值。
-x | --kmer-threshold     default:3
    保留的 read 中所有的 kemr 的覆盖度必须大于该值。

5. 整合出简单的序列

使用 fm-merge 整合出一些简单序列(simple unbranched chains),示例:

$ sga fm-merge -m 55 -t 8 -o merged.fa pe.ec.f.fastq

fm-merge 命令参数:

sga fm-merge [OPTION] ... READSFILE

-m | --min-overlap    default:45
    2 个 reads 之间最小的 ovlerlap 长度。此值设置过小,则消耗更多的计算时间。

6. 去除重复序列

在上一步命令之后,生成的序列中,有很多的包含与被包含的关系,使用 rmdup 命令去除 substrings 序列。示例:

$ sga index -d 1000000 merged.fa
$ sga rmdup -t 8 -o rmdup.fa merged.fa

rmdup 命令参数:

sga rmdup [OPTION] ... READFILE

-o | --out FILE    default:READFILE.rmdup.fa
    设置输出文件名。
-e | --error-rate    default: exact matches required
    设定 2 条序列一致,这 2 条之间的允许的最大错误率。默认 2 条序列必须完全一致。

7. 构建 string grahp

使用 overlap 命令来构建 string graph。如果组装小物种的基因组,可以跳过 fm-merge 和 rmdup 这 2 步。示例:

$ sga overlap -m 55 -t 8 rmdup.fa

overlap 命令常用参数:

-m | --min-overlap    default:45
    2 个 reads 之间最小的 ovlerlap 长度。此值设置过小,则消耗更多的计算时间。

7. 组装 contigs

使用命令 assemble 进行 contigs 组装,示例:

$ sga assemble -m 75 -g 0 -r 10 -o assemble.m75 rmdup.asqg.gz

assemble 命令常用参数:

-m | --min-overlap    default:45
    2 个 reads 之间最小的 ovlerlap 长度。当参数在 fm-merge, overlap 和 assemble 这 3 个命令中都有出现。当测序 reads 长度为 100bp 时, 该参数的值在 3 个命令中比较合适的值分别是 65, 65, 75。当然, reads 长度越长,则该参数的值设置越大。此外,一般通过调节 overlap 中该参数的值来优化组装结果。
-d | --max-divergence    default:0.05
    如果序列中的 SNP 比率 < 0.05,则消除变异。当基因组杂合率非常高时,需要增大该值。
-g | --max-gap-divergence    default:0.01
    如果序列中的 INDEL 比率 < 0.01,则消除变异。当基因组杂合率非常高时,需要增大该值。如果设置改值为 0, 则表示不消除变异。
--max-indel    default:20
    当 indel 长度大于该值的时候,则不消除变异。
-l | --min-branch-length    default:150
    去除 tip 序列,如果其序列长度低于该值。当 reads 长度为 100 bp 时候,推荐设置为 150;若 reads 长度越大,该值也需要越大。
-r | --resolve-small    default: not perfomed
    对 samll repeat 序列进行打断,如果该跨过该区域的 overlaps 之间的最大长度差超过该值时。可以设置该值为 10 。

7. 组装 scaffold

首先,需要将 PE 和 MP 数据比对到 contigs 序列上

$ /opt/biosoft/sga/src/bin/sga-align --name pe180 assemble.m75-contigs.fa pe180.1.fastq pe180.2.fastq
$ /opt/biosoft/sga/src/bin/sga-align --name pe250 assemble.m75-contigs.fa pe250.1.fastq pe250.2.fastq
$ /opt/biosoft/sga/src/bin/sga-align --name mp2000 assemble.m75-contigs.fa mp2000.1.fastq mp2000.2.fastq
$ /opt/biosoft/sga/src/bin/sga-align --name mp5000 assemble.m75-contigs.fa mp5000.1.fastq mp5000.2.fastq

然后,计算 contig 之间的距离

$ sga-bam2de.pl -n 5 --prefix pe180 pe180.bam
$ sga-bam2de.pl -n 5 --prefix pe500 pe500.bam
$ sga-bam2de.pl -n 5 --prefix mp2000 mp2000.bam
$ sga-bam2de.pl -n 5 --prefix mp5000 mp5000.bam

再计算 contig 的拷贝数

$ sga-astat.py -m 200 pe180.refsort.bam > pe180.astat
$ sga-astat.py -m 200 pe500.refsort.bam > pe500.astat

最后,进行 scaffold 组装

$ sga scaffold -m 200 -a pe180.astat -a pe500.astat -pe pe180.de --pe pe500.de --mp mp2000.de --mp mp5000.de -o genome.scaf assemble.m75-contigs.fa
$ sga scaffold2fasta -m 200 -a assemble.m75-graph.asqg.gz -o genomeScaffold.n5.fa -d 1 --use-overlap --write-unplaced genome.scaf

使用 HMMER 进行 PFAM 注释

1. HMMER 简介

HMMER 和 BLAST 类似,主要用于序列比对。

2. HMMER 与 PFAM 的下载安装

安装 HMMER
$ wget ftp://selab.janelia.org/pub/software/hmmer3/3.1b2/hmmer-3.1b2.tar.gz
$ tar zxf hmmer-3.1b2.tar.gz
$ cd hmmer-3.1b2
$ ./configure --prefix=/opt/biosoft/hmmer-3.1b2 && make -j 8 && make install
$ echo 'PATH=$PATH:/opt/biosoft/hmmer-3.1b2/bin/' >> ~/.bashrc
$ source ~/.bashrc
下载 HMMER 软件说明文档
$ wget ftp://selab.janelia.org/pub/software/hmmer3/3.1b2/Userguide.pdf -P  /opt/biosoft/hmmer-3.1b2/

下载 PFAM 数据库
$ cd /opt/biosoft/hmmer-3.1b2/
$ wget ftp://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam27.0/Pfam-A.hmm.gz
$ wget ftp://ftp.ebi.ac.uk/pub/databases/Pfam/releases/Pfam27.0/Pfam-B.hmm.gz
$ gzip -d Pfam-A.hmm.gz; gzip -d Pfam-B.hmm.gz
得到 PFAM 数据库的 HMM 文件。 HMM 文件是文本文件,需要将其变成二进制格式,以加快运算速度,同时进行压缩,并建立成索引数据库。
$ hmmpress Pfam-A.hmm
$ hmmpress Pfam-B.hmm

3. 使用 hmmscan 进行 Pfam 注释

Pfam 数据库中每个编号代表一个蛋白质家族。Pfam 分 A 和 B 两个数据库,其中 A 数据库是经过手工校正的高质量数据库, B 数据库虽然质量低些,依然可以用来寻找蛋白质家族的保守位点。Pfam 最新 v27.0 版本的数据库中, A 数据库包含 14,836 个蛋白质家族编号(以 PF 开头); B 数据库包含 20,000 个蛋白质家族编号 (以 PB 开头)。
使用 hmmscan 进行 Pfam 注释示例:

$ /opt/biosoft/hmmer-3.1b2/bin/hmmscan -o out.txt --tblout out.tbl --noali -E 1e-5 /opt/biosoft/hmmer-3.1b2/Pfam-A.hmm file.fasta

生成结果文件 out.txt 和 out.tbl
out.txt 文件信息比较全面,但是不好阅读;
out.tbl 文件则是表格形式的结果,是一般需要的结果。

hmmscan 命令的常用参数:

$ hmmscan [-options]  

-h
    显示帮助信息
-o FILE
    将结果输出到指定的文件中。默认是输出到标准输出。
--tblout FILE
    将蛋白质家族的结果以表格形式输出到指定的文件中。默认不输出该文件。
--domtblout FILE
    将蛋白结构域的比对结果以表格形式输出到指定的文件中。默认不输出该文件。该表格中包含query序列起始结束位点与目标序列起始结束位点的匹配信息。
--acc
    在输出结果中包含 PF 的编号,默认是蛋白质家族的名称。
--noali
    在输出结果中不包含比对信息。输出文件的大小则会更小。
-E FLOAT    default:10.0
    设定 E_value 阈值,推荐设置为 1e-5 。
-T FLOAT
    设定 Score 阈值。
--domE FLOAT    default:10.0
    设定 E_value 阈值。该参数和 -E 参数类似,不过是 domain 比对设定的值。
--cpu
    多线程运行的CPU。默认应该是大于1的,表示支持多线程运行。但其实估计一般一个hmmscan程序利用150%个CPU。并且若进行并行化调用hmmscan,当并行数高于4的时候,会报错:Fatal exception (source file esl_threads.c, line 129)。这时,设置--cpu的值为1即可。

PBJelly2利用Pacbio数据进行scaffolding

1.PBJelly2 简介

PBJelly2 用于利用 Pacbio 数据进行基因组补洞和 scaffold 连接。

2.安装 PBJelly2

安装 HDF:
$ wget http://www.hdfgroup.org/ftp/HDF5/current/bin/linux-centos6-x86_64/hdf5-1.8.15-patch1-linux-centos6-x86_64-shared.tar.gz
$ tar zxf hdf5-1.8.15-patch1-linux-centos6-x86_64-shared.tar.gz
$ mv hdf5-1.8.15-patch1-linux-centos6-x86_64-shared /opt/biosoft/hdf5-1.8.15-patch1
$ export HDF5INCLUDEDIR=/opt/biosoft/hdf5-1.8.15-patch1/include/
$ export HDF5LIBDIR=/opt/biosoft/hdf5-1.8.15-patch1/lib/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/biosoft/hdf5-1.8.15-patch1/lib/
$ export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/biosoft/hdf5-1.8.15-patch1/include/

安装 Blasr(需求 HDF v1.8.0或以上版本):
$ wget https://github.com/PacificBiosciences/blasr/archive/master.zip -O blasr.zip
$ unzip blasr.zip
$ mv blasr-master/ /opt/biosoft/blasr
$ cd /opt/biosoft/blasr
$ make -j 8
$ echo 'PATH=$PATH:/opt/biosoft/blasr/alignment/bin/' >> ~/.bashrc

安装Python模块 Networkx v1.7
$ wget https://pypi.python.org/packages/source/n/networkx/networkx-1.7.tar.gz
$ tar zxf networkx-1.7.tar.gz
$ cd networkx-1.7
$ sudo /usr/local/bin/python setup.py install

安装Python模块 pyparsing
$ wget https://pypi.python.org/packages/source/p/pyparsing/pyparsing-2.0.3.tar.gz
$ tar zxf pyparsing-2.0.3.tar.gz
$ cd pyparsing-2.0.3
$ sudo /usr/local/bin/python setup.py install

安装Python模块 numpy
$ wget https://pypi.python.org/packages/source/n/numpy/numpy-1.9.2.tar.gz
$ tar zxf numpy-1.9.2.tar.gz 
$ cd numpy-1.9.2
$ sudo /usr/local/bin/python setup.py install

安装Python模块 h5py
$ wget https://pypi.python.org/packages/source/h/h5py/h5py-2.5.0.tar.gz
$ cd h5py-2.5.0
$ export LIBRARY_PATH=/opt/biosoft/hdf5-1.8.15-patch1/lib/:$LIBRARY_PATH
$ /usr/local/bin/python setup.py build
$ sudo /usr/local/bin/python setup.py install

安装Python模块 pysam
$ https://pypi.python.org/packages/source/p/pysam/pysam-0.8.3.tar.gz
$ tar zxf pysam-0.8.3.tar.gz 
$ cd pysam-0.8.3
$ sudo /usr/local/bin/python setup.py install

安装Python模块 intervaltree
$ wget https://pypi.python.org/packages/source/i/intervaltree/intervaltree-2.0.4.tar.gz
$ tar zxf intervaltree-2.0.4.tar.gz
$ cd intervaltree-2.0.4
$ sudo /usr/local/bin/python setup.py install

安装 PBJelly2
$ wget http://sourceforge.net/projects/pb-jelly/files/latest/download -O PBSuite.tar.gz
$ tar zxf PBSuite.tar.gz -C /opt/biosoft/
$ SWEETPATH=`ls /opt/biosoft/PBSuite* -d`
$ echo "perl -p -i -e 's#export SWEETPATH=.*#export SWEETPATH=$SWEETPATH#' $SWEETPATH/setup.sh" | sh
$ echo "source $SWEETPATH/setup.sh" >> ~/.bashrc

3. 使用 PBJelly2 进行补洞

首先创建配置文件 Protocol.xml,内容如下:

<jellyProtocol>
    <reference>基因组fasta文件的路径</reference>  
    <outputDir>输出文件路径</outputDir>
    <blasr>-minMatch 8 -minPctIdentity 70 -bestn 1 -nCandidates 20 -maxScore -500 -nproc 24 -noSplitSubreads</blasr>
    <input baseDir="输入Pacbio数据文件所在的文件夹">
        <job>Pacbio数据文件名称</job>
    </input>
</jellyProtocol>

然后依次运行下6步:

$ Jelly.py setup Protocol.xml
$ Jelly.py mapping Protocol.xml
$ Jelly.py support Protocol.xml
$ Jelly.py extraction Protocol.xml
$ Jelly.py assembly Protocol.xml -x "--nproc=24"
$ Jelly.py output Protocol.xml

--nproc 参数设置运行线程数。

输出结果文件为 jelly.out.fasta 。

4. 使用 PBJelly2 进行 scaffold 连接

使用PacBioToCA修正Pacbio数据

1. PacBioToCA 简介

PacBioToCA 是 Celera Assembler 的一个模块,用于Pacbio数据的校正。因此,使用 PacBioToCA 需要安装 Celera Assembler。
利用 PacBioToCA 进行校正时:如果 Pacbio 数据量 > 20x 时,可以进行自我校正,而不需要其它更为精确的数据;推荐 Pacbio 数据量 > 50x 时进行自我校正;通常 > 15x 的 Pacbio 数据即可得到很好的组装结果。

2. 安装 Celera Assembler

推荐使用源码安装,直接下载二进制版本,可能提示错误:/lib64/libc.so.6: version `GLIBC_2.14′ not found

$ wget http://sourceforge.net/projects/wgs-assembler/files/wgs-assembler/wgs-8.3/wgs-8.3rc2.tar.bz2
$ tar jxf wgs-8.3rc2.tar.bz2 -C /opt/biosoft/
$ cd /opt/biosoft/wgs-8.3rc2/kmer
以下使用 make,不要使用 -j 参数进行多线程编译,会出错。
$ make && make install && cd ..
$ cd src && make && cd ..
$ echo 'PATH=$PATH:/opt/biosoft/wgs-8.3rc2/Linux-amd64/bin/' >> ~/.bashrc

如果进行 Pacbio 数据的自我校正,则需要 JAVA 1.8 版本
$ wget http://javadl.sun.com/webapps/download/AutoDL?BundleId=106240 -O jre1.8.0_45.tar.gz
$ tar zxf jre1.8.0_45.tar.gz -C /opt/biosoft
$ echo 'PATH=/opt/biosoft/jre1.8.0_45/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc

3. PacBioToCA 的使用

3.1 将错误率低的测序数据转换为 FRG 数据

Celera Assembler 软件输入的测序数据的文件格式是 FRG 格式。PacBioToCA 输入的错误率低的数据需要 FRG 格式。
1. 使用 fastqToCA 将 fastq 数据转换为 FRG 格式
一般情况下是利用错误率较低的 Illumina 数据来对 Pacbio 数据进行校正。 因此需要将 Illumina 的 Fastq 文件转换成 FRG 格式。 FRG 文件是文本文件,其中包含有 fastq 文件的路径和一些测序信息,比如插入片段长度、测序方向和碱基质量格式等。
fastqToCA 的常用示例和常用参数:

$ fastqToCA -insertsize 500 50 -libraryname pe500 -mates reads.1.fastq,reads.2.fastq > pe500.frg

-insertsize
    设置插入片段长度,为2个值,前者为插入片段长度,后者为标准差。
-libraryname
    文库的ID
-reads
    单端测序的 fastq 文件路径。
-mates
    双端测序的 fastq 文件路径。若双端数据交叉在一个文件中,则该参数后只有一个路径;若双端数据在2个fastq文件中,则2个路径用逗号分割。
-technology  default:illumina
    测序技术。可选的值有:none, sanger, 454, illumina(读长 < 160bp), illumina-long(任意读长), moleculo, pacbio-ccs, pacbio-corrected, pacbio-raw。
-type  default:sanger
    碱基质量格式。可选的值有:sanger, solexa, illumina。
-innie
    测序方向为 5'-3' <-> 3'-5',适合小片段测序文库。
-outtie
    测序方向为 3'-5' <-> 5'-3',适合大片段文库。

2. 使用 sffToCA 将 SFF 数据为 FRG 格式
Roche/454 数据格式为 SFF。
sffToCA 的常用示例和常用参数:

$ sffToCA  -libraryname LIB -output NAME IN.SFF ...

-insertsize
    设置插入片段长度,为2个值,前者为插入片段长度,后者为标准差。
-libraryname
    文库的ID。
-output
    输出文件的前缀。

3.2 使用 pacBioToCA/PBcR 进行 Pacbio 数据的修正

pacBioToCA 能对 Pacbio 数据进行校正,也能进行调用 runCA 进行基因组组装。
pacBioToCA 的输入文件为:

1. pacbio.spec   该文件包含一些参数信息,以 参数=值 表示。必须提供该文件,该文件内容为空,则全部使用默认参数。
2. pacbio.fastq  Pacbio测序的fastq文件,对该文件中的数据进行校正。
3. seq.frg        Illumina或454数据由 fatsqToCA 转换得到的 FRG 格式文件。如果不提供该文件,则进行自我校正。

pacBioToCA 的常用例子(示例数据)和参数:

$ pacBioToCA -libraryname out_prefix -s pacbio.spec -fastq pacbio.fastq seq1.frg seq2.frg

必须参数:
-libraryname STRING
    设定输出文件的前缀。
-s FILE
    从指定的参数文件获取额外的参数。若该文件内容为空,则使用默认的参数。
-fastq FILE
    输入需要校正的 Pacbio 数据。

可选参数:
-length INT    default:500
    pacBioToCA 对长度大于此值的测序 reads 进行修正。
-partitions INT    default:200
    将用于校正的数据分成指定份数,进行计算。内存不够,则需要增大该值。若内存足够,减小该值,可以减少计算时间。若该值太小(< 总线程数),软件会中途运行runCorrection.sh报错并停止运行。
-threads INT    default:max
    使用的线程数。默认为所有可用的线程数。
-shortReads
    如果用于辅助校准的序列长度都 <= 100bp,则使用该参数。
-genomeSize INT    default:0
    设置基因组大小。设置改值后,在其它默认条件下,如果校正后的数据量 >25x,则会进行基因组组装。不设置该值,可能等同于设置该值为 5000000 (从软件输出信息中查知)。
-maxCoverage INT    default:40
    默认下,最多校正 40x 的数据量。
-maxGap INT
    默认下,如果有一段 pacibo-read 区域没有 short-read 覆盖,则会打断 pacbio-read。此值设定所能允许的没有 short-read 覆盖的最大长度。当然,若此段区域没有其它 pacbio-reads 重叠,则也会进行打断。

此外,在 pacbio.spec 文件中常设置的参数为:

若不进行基因,则需要设置:
assemble=0

软件默认设置最大内存使用量设置为系统最大可使用的内存量,若设定最大使用内存为 64G,则设置:
ovlMemory=64

使用 CA 8 版本对大基因组(>100Mbp)进行校正,设置:
maxGap=1500
ovlHashBlockLength=1000000000
ovlRefBlockLength=1000000000
使用Illumina数据进行校正:
blasr=-noRefineAlign -advanceHalf -noSplitSubreads -minMatch 10 -minPctIdentity 70 -bestn 24 -nCandidates 24
自我校正:
blasr=-minReadLength 200 -maxScore -1000 -maxLCPLength 16 -bestn 24 -nCandidates 24
ovlThreads=16
下面一个参数设置并行数。其值推荐设置为 总线程数 / ovlThreads值 。设置为2,表示每个 blasr 程序运行消耗 16 线程,并行运行 2 个 blasr 程序。
ovlConcurrency=2

若进行基因组组装。默认参数适用于单倍体数据或近亲杂交数据。对于大基因组或双倍体基因组,则需要设置:
asmUtgErrorRate=0.10
asmCnsErrorRate=0.10
asmCgwErrorRate=0.10
asmOBT=1
asmObtErrorRate=0.08
asmObtErrorLimit=4.5
utgGraphErrorRate=0.05
utgMergeErrorRate=0.05
ovlHashBits=24
ovlHashLoad=0.80