1.创建本地BLAST数据库
使用makeblastdb程序,对上述FASTA格式的蛋白 质序列进行处理,建立本地BLAST数据库。
makeblastdb -in ./uniprot-taxonomy_fungi+reviewed_yes.fasta -title uniprot_protein -dbtype prot -out uniprot_protein
2.从头预测全基因组中的基因
下载安装augustus软件,使用augustus进行从头预测全基因组中的基因。
2.1使用augustus对基因组序列进行基因预测分析,保存GFF格式的预测结果。
augustus --gff3=on --outfile=Sc_augustus_out.gff3 --species=saccharomyces_cerevisiae_S288C ./GCA_000977205.2_Sc_YJM1338.fna
augustus结果
#抽取gff文件中的fasta序列
sed -n '/^#/p' Sc_augustus_out.gff3 | sed -n '/start/,/\]/p' | sed 's/# start gene />/g;s/protein sequence \= \[//g;s/#//g;s/\]//g;s/^\s//g' > seq.fa
蛋白质序列
2.3、使用合适的blast程序对该预测基因与已知蛋白序列进行比对
使用blastp工具对预测蛋白质序列与已知蛋白质序列进行比对,保留打分最高的比对结果。
nohup blastp -query seq.fa -db uniprot_protein -out ./blastp_results.outfmt6 -outfmt 6 -evalue 1e-5 -max_target_seqs 1 -num_threads 20 &
2.4 编写Python脚本,把2.3结果合并到2.1获得的GFF格式结果中,使用相似性蛋白的缩写名称,替换原来预测的基因名称,保存为一个新的GFF文档。
#!/usr/bin/env python
# coding: utf-8
import re
with open('blastp_results.outfmt6','r') as f:
fi=f.readlines()
all=dict()
for i in fi:
str=i.split("\t")
if (str[0] in all.keys()):
pass
else:
st=str[1].split("|")
all[str[0]]=st[1]
with open('Sc_augustus_out.gff3','r') as sc:
sc_line=sc.readlines()
myopen=open('sc2.gff3','a')
patt='.*ID=(g[0-9]+)$'
for i in sc_line:
if re.match(patt,i):
m=re.match(patt,i).group(1)
if (m in all.keys()):
i=i.strip("\n")+';name='+all[m]+"\n"
print(i)
myopen.write(i)
myopen.close()
3.从头预测结果的评估
使用gffcompare工具把第2.4步结果与步原始GFF数据以及实验3结果进行比较,查看结果,并分析它们之间的异同之处。
#第2.4步与原始GFF数据比较
./gffcompare -r file/GCA_000977205.2_Sc_YJM1338_v1_genomic.gff -o compare file/sc2.gff3
#第2.4步与实验3结果进行比较
./gffcompare -r file/sc2.gff3 -o compare_test3 file/outresult6_pl.gff3
比较
与同源搜索相比,从头预测不仅预测出了内含子区域和转录区域,且可信度较好;在外显子水平上,从头预测比同源搜索效果要好。从整体来看,从头预测的效果好于同源搜索。
网友评论