|||
Trinity无比强大,但是在组装结果还是太零散,此外内存占用也是硬伤。如果你有一个土豪机器,能一次运行几百G的程序,那建议将所有样本的PE reads清理后R1,R2相应合到一起,再用Trinity 进行PE组装。没有强大机器的人们一般会将多个样本分开组装,再通过一些手段对contig再组装,最后生成所有样本共同的Unigene,得到所有样本统一的reference,来比对计算差异表达。
这里推荐一款老牌的聚类组装软件——TGICL (TGI Clustering tools),完成这个contig再组装的过程。它先使用mageblast对输入的fasta文件进行比对后聚类成cluster,再使用CAP3对每个cluster进行组装。此外因为聚类后各cluster间相互独立无交集,程序提供多线程的选项(来弥补CAP3这一步计算速度慢的缺陷)。
1. 下载安装
到https://sourceforge.net/projects/tgicl/files/?source=navbar下载最新版的TGICL (以最新版v2.1版为例)。建议下载TGICL-2.1.tar.gz原程序,貌似rpm/deb二进制的安装会有报错,具体没有深究,感兴趣的朋友可以使用rpm/deb格式的安装包进行安装,欢迎将过程分享到此博文下,谢谢。
tar -zxvf TGICL-2.1.tar.gz
cd TGICL-2.1
perl Build.PL
./Build
./Build test
./Build install
#如果哪一步有permission denied的提示,则需要在命令前加sudo
如果在终端中输入
perldoc -F /usr/local/bin/tgicl
出现TGICL的help页面(如下图)则表示安装完成!
2. TGICL的使用
以某处为工作目录,将需去冗余和组装的fasta序列(例如Trinity组装结果中大于500bp的序列文件trinity_gt500.fasta)放到工作目录下,运行
tgicl -F trinity_gt500.fasta -c 3
这时可能会出现如下提示,可以不用理会:
Use of :locked is deprecated at /usr/local/share/perl/5.18.2/TGI/DBDrv.pm line 36.
运行完结果如下
err_tgicl_trinity_gt500.fasta.log和tgicl_trinity_gt500.fasta.log分别是标准错误输出和标准输出的记录文件,如果运行中无报错,两者应该是一样的。文件中记录了建立索引、聚类和组装三个过程的一些信息。
重点来了:
Q1:工作目录下trinity_gt500.fasta, trinity_gt500.fasta_cl_clusters, trinity_gt500.fasta.singletons和masked.lst这四个文件之间是什么关系?
为了清晰起见,这里既作了后三个文件中序列的韦恩图,又作了四个文件中序列的韦恩图。
结果显示
A. trinity_gt500.fasta_cl_clusters和trinity_gt500.fasta.singletons文件中的序列居然有交集!
B. trinity_gt500.fasta_cl_clusters和trinity_gt500.fasta.singletons的并集就是trinity_gt500.fasta中全体序列
C. masked.lst里的序列既有 trinity_gt500.fasta_cl_clusters里的,又有trinity_gt500.fasta.singletons里的序列
Q2:asm文件夹下的文件与cluster是什么关系?
因为-c指定用3个CPU,这里会生成3个文件夹asm_1,asm_2,asm_3。从这3个文件中的log_std发现这些log_std里的CL没有重复,而且加在一起正好是trinity_gt500.fasta_cl_clusters里的结果,表明程序先将trinity_gt500.fasta_cl_clusters中的cluster分给N个CPU(在N个文件夹中)来做的。然后,CAP3组装每个asm文件夹下log_std中的clusters,然而并不是每个cluster里的序列都能用上,组装没有用上的序列就写进了每个asm文件夹下的singletons文件里。
Q3:在第1个问题里rinity_gt500.fasta_cl_clusters和trinity_gt500.fasta.singletons为什么会有交集,交集又是什么?
Bingo! 想必大家也猜到了,这个交集就是所有asm文件夹下singlets文件中序列的并集。为了验证这个猜想,先检查一下所有asm文件夹下singlets文件是否有交集,发现没有,不出所料。所有asm文件夹下singlets文件里的序列的并集就是trinity_gt500.fasta.singletons和trinity_gt500.fasta_cl_clusters序列里的交集。发现正好是的,有猜想一致!
因此只需要将trinity_gt500.fasta.singletons里的序列提出来,再将各asm文件夹下的contigs合并到一起换个Unigene的ID号即可。
vim collect_tgicl_result.py
将以下代码复制到collect_tgicl_result.py中
#!/usr/bin/env python
import sys, os
from Bio import SeqIO
'''collect_tgicl_result.py'''
def main(tgicl, singleton, fasta, *asm_dirs):
unigene = 1
with open('result.fasta', 'w') as result:
for i in asm_dirs:
for x in SeqIO.parse(os.path.join(i, 'contigs'), 'fasta'):
print >> result, '>cluster_contig%sn%s' %(unigene, x.seq)
unigene += 1
fa_dic = {fa.id:fa.seq for fa in SeqIO.parse(fasta, 'fasta')}
for i in open(singleton):
print >> result, '>%sn%s' %(i.strip(), fa_dic[i.strip()])
if __name__ == '__main__':
if len(sys.argv) == 1:
print ('[prog] collect TGICL resultn'
'[usage] python %s <singletons> <fasta> <asm*>n'
' <singletons> is located in workspacen'
' <fasta> is fasta file which was used to be clustered and assembledn'
" <asm*> are asm directories, `contigs' file must be in those dirsn"
) %(sys.argv[0])
sys.exit(1)
main(*sys.argv)
在工作目录下运行如下:
python collect_tgicl_result.py trinity_gt500.fasta.singletons trinity_gt500.fasta asm_*
运行完会生成一个tgicl_result.fasta文件,即TGICL聚类组装后最终的Unigene。
参考材料
[1] Geo Pertea1, Xiaoqiu Huang, Feng Liang, et al. TIGR Gene Indices clustering tools (TGICL):a software system for fast clustering of large EST datasets. Bioinformatics. 2003, 19(5):651-652
[2] http://bioinformation.cn/?p=563
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-27 07:00
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社