一:开始之前需要准备三个东西:
第一:安装软件
1.Trinity(用于生成拼接后的转录本fasta文件)
2.TransDecoder(用于预测转录本的蛋白编码区域)
3.SQLite (用于整合数据库数据,我下的是Trinotate_v3.sqlite)
4.NCBI BLAST+(用于比对Blast库)
5.HMMER/PFAM(用于通过HMMER工具注释蛋白质结构域)
第二:构建所需数据库
## sqlite3 --help cd
$~/biosoft mkdir Trinotate && cd Trinotate
# http://trinotate.github.io/
# https://github.com/Trinotate/Trinotate/releases
$wget https://github.com/Trinotate/Trinotate/archive/v3.0.1.tar.gz -O Trinotate.v3.0.1.tar.gz
$tar zxvf Trinotate.v3.0.1.tar.gz
$~/biosoft/Trinotate/Trinotate-3.0.1/Trinotate -h
$wget https://data.broadinstitute.org/Trinity/Trinotate_v3_RESOURCES/Pfam-A.hmm.gz
$wget https://data.broadinstitute.org/Trinity/Trinotate_v3_RESOURCES/uniprot_sprot.pep.gz
$wget https://data.broadinstitute.org/Trinity/Trinotate_v3_RESOURCES/Trinotate_v3.sqlite.gz -O Trinotate.sqlite.gz
$gunzip Trinotate.sqlite.gz gunzip uniprot_sprot.pep.gz
$makeblastdb -in uniprot_sprot.pep -dbtype prot
$gunzip Pfam-A.hmm.gz
$hmmpress Pfam-A.hmm
最后生成一下文件:
-rw-rw-r-- 1 spider spider 1348848383 Mar 7 2016Pfam-A.hmm 数据库文件
-rw-rw-r-- 1 spider spider 304256653 Apr 13 10:02 Pfam-A.hmm.h3f
-rw-rw-r-- 1 spider spider 1124460 Apr 13 10:02 Pfam-A.hmm.h3i
-rw-rw-r-- 1 spider spider 558372538 Apr 13 10:02 Pfam-A.hmm.h3m
-rw-rw-r-- 1 spider spider 656774195 Apr 13 10:02 Pfam-A.hmm.h3p
drwxrwxr-x 10 spider spider 4096 Apr 11 2016 Trinotate-3.0.1
-rw-rw-r-- 1 spider spider 29102393 Apr 12 11:46 Trinotate.v3.0.1.tar.gz
-rw-rw-r-- 1 spider spider 359515136 Mar 7 2016 Trinotate_v3.sqlite
-rw------- 1 spider spider 317 Apr 12 22:07 nohup.out
-rw-rw-r-- 1 spider spider 232512443 Mar 7 2016uniprot_sprot.pep 数据库文件
-rw-rw-r-- 1 spider spider 70142548 Apr 12 22:07 uniprot_sprot.pep.phr
-rw-rw-r-- 1 spider spider 4404496 Apr 12 22:07 uniprot_sprot.pep.pin
-rw-rw-r-- 1 spider spider 197023228 Apr 12 22:07 uniprot_sprot.pep.psq
第三:需要我们用TransDecoder构建得到了转录本的编码蛋白的蛋白序列(我的如下)
准备就绪就开始了。
二: 序列比对
接下来的工作就是通过之前下载配置好的Blast+和HMMER进行比对和预测(当然两者工具采用的算法会有差异)
$nohup blastx -query /data1/spider/ytbiosoft/data/trinity.all/trinity_out_dir_all.Trinity.fasta -db uniprot_sprot.pep -num_threads 8 -max_target_seqs 1 -outfmt 6 -evalue 1e-3 > blastx.outfmt6 & blastx比对
$nohup blastp -query /data1/spider/ytbiosoft/data/trinity.all/TransDecoder.LongOrfs/trinity_out_dir_all.Trinity.fasta.transdecoder.pep -db uniprot_sprot.pep -num_threads 8 -max_target_seqs 1 -outfmt 6 -evalue 1e-3 > blastp.outfmt6 & blastp比对
这条命令都是采用的Blast比对算法进行的
还有一种是HMMER基于隐马尔科夫链的算法进行的。
看一下hmmscan的帮助文档
$hmmscan -h
# hmmscan :: search sequence(s) against a profile database
# HMMER 3.2.1 (June 2018); http://hmmer.org/
# Copyright (C) 2018 Howard Hughes Medical Institute.
# Freely distributed under the BSD open source license.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Usage: hmmscan [-options] <hmmdb> <seqfile>
Basic options:
-h : show brief help on version and usage
Options controlling output:
-o <f> : direct output to file <f>, not stdout
--tblout <f> : save parseable table of per-sequence hits to file <f>
--domtblout <f> : save parseable table of per-domain hits to file <f>
--pfamtblout <f> : save table of hits and domains to file, in Pfam format <f>
--acc : prefer accessions over names in output
--noali : don't output alignments, so output is smaller
--notextw : unlimit ASCII text output line width
--textw <n> : set max width of ASCII text output lines [120] (n>=120)
Options controlling reporting thresholds:
-E <x> : report models <= this E-value threshold in output [10.0] (x>0)
-T <x> : report models >= this score threshold in output
--domE <x> : report domains <= this E-value threshold in output [10.0] (x>0)
--domT <x> : report domains >= this score cutoff in output
Options controlling inclusion (significance) thresholds:
--incE <x> : consider models <= this E-value threshold as significant
--incT <x> : consider models >= this score threshold as significant
--incdomE <x> : consider domains <= this E-value threshold as significant
--incdomT <x> : consider domains >= this score threshold as significant
Options for model-specific thresholding:
--cut_ga : use profile's GA gathering cutoffs to set all thresholding
--cut_nc : use profile's NC noise cutoffs to set all thresholding
--cut_tc : use profile's TC trusted cutoffs to set all thresholding
Options controlling acceleration heuristics:
--max : Turn all heuristic filters off (less speed, more power)
--F1 <x> : MSV threshold: promote hits w/ P <= F1 [0.02]
--F2 <x> : Vit threshold: promote hits w/ P <= F2 [1e-3]
--F3 <x> : Fwd threshold: promote hits w/ P <= F3 [1e-5]
--nobias : turn off composition bias filter
Other expert options:
--nonull2 : turn off biased composition score corrections
-Z <x> : set # of comparisons done, for E-value calculation
--domZ <x> : set # of significant seqs, for domain E-value calculation
--seed <n> : set RNG seed to <n> (if 0: one-time arbitrary seed) [42]
--qformat <s> : assert input <seqfile> is in format <s>: no autodetection
--cpu <n> : number of parallel CPU workers to use for multithreads [2]
开始用hmmer算法比对:
$hmmscan --cpu 4 --domtblout TrinotatePFAM.out Pfam-A.hmm /data1/spider/ytbiosoft/data/trinity.all/TransDecoder.LongOrfs/trinity_out_dir_all.Trinity.fasta.transdecoder.pep > pfam.log
所以最后总共会生成2个基于blast的文件和一个基于hmmer的文件:
三:比对完之后我们需要把数据整合导入到SQL数据库中,进行统一管理。
首先得到的结果放到Trinotate SQLite数据库中进行合并。因此我们需要把以下的几个结果进行Load到SQLite db中,在我们这个工作中的SQLite db就是Trinotate_v3.sqlite
1.转录本和蛋白数据 (就是上面比对用到的*.fasta文件和*..transdecoder.pep文件)
2.Blast的结果(这个包括蛋白比对和核酸比对的两个结果) (blastx与blastp的结果文件)
3.HMMER比对的Pfam结果 (hmmscan比对结果文件 )
那么接下来就是采用以下命令进行 (这个要明白Trinotate就是一个把数据装到数据库的工具)
1. 导入转录本和蛋白数据
$TrinotateSeqLoader.pl #调用的脚本
--sqliteTrinotate_v3.sqlite#导入的数据库(就是之前你下的)
--gene_trans_map /data1/spider/ytbiosoft/data/trinity.all/trinity_out_dir_all.Trinity.fasta.gene_trans_map #导入的是转录本与基因的关系文件
--transcript_fasta /data1/spider/ytbiosoft/data/trinity.all/trinity_out_dir_all.Trinity.fasta #导入转录本文件
--transdecoder_pep /data1/spider/ytbiosoft/data/trinity.all/TransDecoder.LongOrfs/trinity_out_dir_all.Trinity.fasta.transdecoder.pep #导入转录本编码蛋白质文件
结果如下:
$TrinotateSeqLoader.pl --sqlite Trinotate_v3.sqlite --gene_trans_map /data1/spider/ytbiosoft/data/trinity.all/trinity_out_dir_all.Trinity.fasta.gene_trans_map --transcript_fasta /data1/spider/ytbiosoft/data/trinity.all/trinity_out_dir_all.Trinity.fasta --transdecoder_pep /data1/spider/ytbiosoft/data/trinity.all/TransDecoder.LongOrfs/trinity_out_dir_all.Trinity.fasta.transdecoder.pep
-parsing gene/trans map file.... done.
-loading Transcripts.
[375700]
done.
-loading ORFs.
[180000]
done.
Loading complete..
2.接下来导入Blast比对结果:
$Trinotate_BLAST_loader.pl --sqlite Trinotate_v3.sqlite --outfmt6 blastx.outfmt6 --prog blastx --dbtype Swissprot
#调用的脚本 #处理的数据库 #导入的是blastx的结果
$Trinotate_BLAST_loader.pl --sqlite Trinotate_v3.sqlite --outfmt6 blastp.outfmt6 --prog blastp --dbtype Swissprot
#调用的脚本 #处理的数据库 #导入的是blastp的结果
3.最后导入HMMER比对结果
$Trinotate_PFAM_loader.pl --sqlite Trinotate_v3.sqlite --pfam TrinotatePFAM.out
#调用的脚本 #处理的数据库 #导入的是pfam的结果
最终,这样我们就将之前的结果导入到了我们 Trinotate_v3.sqlite 这个文件中。之后在其他的地方我们会使用到这个,而且这个数据库也可以通过脚本Trinotate_report_writer.pl直接进行调用:
$Trinotate_report_writer.pl--sqlite Trinotate_v3.sqlite > database_report.xls
最终我们将blast结果以及hmmer预测结果进行了整合, 同时发现SQL数据库的管理在大数据整合过程中非常重要,而且SQL数据库还可以在其他地方被调用。